[{"data":1,"prerenderedAt":175306},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-09-02-js-xue-xi\u002Fch2-ji-chu-yu-fa":3,"wiki-doc-nav":3030},{"id":4,"title":5,"body":6,"description":3023,"extension":3024,"meta":3025,"navigation":906,"path":3026,"seo":3027,"stem":3028,"__hash__":3029},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":8,"toc":2974},"minimark",[9,13,18,23,30,34,40,44,52,59,66,71,79,84,88,93,96,100,105,109,114,117,120,123,126,129,132,135,138,143,148,153,157,160,163,167,172,175,184,189,212,220,225,231,236,242,247,250,256,261,265,274,279,284,288,293,296,300,305,313,318,323,326,331,337,342,345,348,351,356,361,364,369,372,377,380,383,386,392,395,398,413,419,424,430,433,436,439,453,456,461,466,469,472,475,478,481,484,487,491,495,500,504,507,512,517,520,525,528,532,537,540,543,546,549,552,555,558,561,564,568,573,578,583,586,589,593,598,601,605,608,611,616,619,622,626,631,634,639,644,647,677,682,687,692,697,701,706,710,715,718,722,726,731,735,740,745,749,754,757,760,763,768,772,777,781,785,790,795,800,805,809,814,819,824,827,830,835,838,843,848,853,858,862,1775,1779,2137,2142,2145,2148,2151,2154,2157,2160,2163,2166,2168,2171,2173,2176,2180,2185,2188,2191,2194,2198,2203,2208,2228,2231,2235,2240,2245,2262,2266,2295,2299,2321,2324,2363,2371,2377,2381,2384,2387,2392,2397,2400,2403,2406,2411,2416,2419,2422,2425,2428,2431,2434,2437,2440,2443,2446,2449,2451,2454,2457,2460,2463,2466,2469,2472,2475,2479,2484,2487,2492,2495,2498,2501,2504,2507,2510,2513,2515,2518,2521,2524,2527,2530,2533,2537,2540,2549,2552,2557,2560,2565,2568,2571,2574,2577,2580,2583,2586,2590,2594,2597,2600,2605,2610,2615,2619,2624,2629,2632,2635,2638,2641,2644,2649,2652,2657,2659,2664,2667,2671,2676,2679,2682,2687,2691,2694,2699,2702,2705,2734,2739,2742,2745,2748,2751,2754,2758,2761,2847,2851,2854,2859,2864,2873,2876,2879,2882,2885,2888,2893,2898,2901,2904,2907,2910,2913,2916,2919,2922,2925,2927,2930,2934,2939,2944,2949,2952,2957,2962,2965,2968,2971],[10,11,5],"h1",{"id":12},"_2基础语法",[14,15,17],"h2",{"id":16},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[19,20,22],"h3",{"id":21},"_211-js组成","2.1.1 js组成",[24,25,26],"ol",{},[27,28,29],"li",{},"js是编程语言，html和css不是编程语言，是标记语言",[31,32,33],"p",{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[24,35,37],{"start":36},2,[27,38,39],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[19,41,43],{"id":42},"_212-js书写位置","2.1.2 js书写位置",[24,45,46],{},[27,47,48],{},[49,50,51],"strong",{},"内部 JavaScript",[31,53,54],{},[55,56],"img",{"alt":57,"src":58},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[24,60,61],{"start":36},[27,62,63],{},[49,64,65],{},"外部 JavaScript",[31,67,68],{},[55,69],{"alt":57,"src":70},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[24,72,74],{"start":73},3,[27,75,76],{},[49,77,78],{},"内联 JavaScript",[31,80,81],{},[55,82],{"alt":57,"src":83},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[19,85,87],{"id":86},"_213-javascript注释","2.1.3 JavaScript注释",[31,89,90],{},[55,91],{"alt":57,"src":92},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[31,94,95],{},"alt+shift+a一定要记住！",[19,97,99],{"id":98},"_214-javascript结束符","2.1.4 JavaScript结束符",[31,101,102],{},[55,103],{"alt":57,"src":104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[19,106,108],{"id":107},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[24,110,111],{},[27,112,113],{},"输出语法：",[31,115,116],{},"①document.write('要出的内容')",[31,118,119],{},"向body内输出内容；",[31,121,122],{},"如果输出的内容写的是标签，也会被解析cheng",[31,124,125],{},"②alert('要出的内容')",[31,127,128],{},"页面弹出警告对话框",[31,130,131],{},"③console.log('控制台打印')",[31,133,134],{},"控制台输出语法，程序员调试使用",[31,136,137],{},"输入log就行，自动生成：",[31,139,140],{},[55,141],{"alt":57,"src":142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[24,144,145],{"start":36},[27,146,147],{},"输入语法：",[31,149,150],{},[55,151],{"alt":57,"src":152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[19,154,156],{"id":155},"_2116-字面量","21.1.6 字面量",[31,158,159],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[31,161,162],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,164,166],{"id":165},"_22-变量","2.2 变量",[24,168,169],{},[27,170,171],{},"变量声明",[31,173,174],{},"let 变量名",[176,177,178,181],"ul",{},[27,179,180],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[27,182,183],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[24,185,186],{"start":36},[27,187,188],{},"变量赋值",[190,191,195],"pre",{"className":192,"code":193,"language":194,"meta":57,"style":57},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[196,197,198,207],"code",{"__ignoreMap":57},[199,200,203],"span",{"class":201,"line":202},"line",1,[199,204,206],{"class":205},"sVt8B","let age\n",[199,208,209],{"class":201,"line":36},[199,210,211],{"class":205},"age=18\n",[24,213,214,217],{"start":73},[27,215,216],{},"连这些（变量的初始化）：let age=18",[27,218,219],{},"更新变量",[31,221,222],{},[55,223],{"alt":57,"src":224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[24,226,228],{"start":227},5,[27,229,230],{},"声明多个变量",[31,232,233],{},[55,234],{"alt":57,"src":235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[24,237,239],{"start":238},6,[27,240,241],{},"变量命名规则与规范",[31,243,244],{},[55,245],{"alt":57,"src":246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[31,248,249],{},"遵守小驼峰！",[24,251,253],{"start":252},7,[27,254,255],{},"变量拓展-let和var的区别",[31,257,258],{},[55,259],{"alt":57,"src":260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,262,264],{"id":263},"_23-数组","2.3 数组",[190,266,268],{"className":192,"code":267,"language":194,"meta":57,"style":57},"let arr = []\n",[196,269,270],{"__ignoreMap":57},[199,271,272],{"class":201,"line":202},[199,273,267],{"class":205},[31,275,276],{},[55,277],{"alt":57,"src":278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[31,280,281],{},[55,282],{"alt":57,"src":283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,285,287],{"id":286},"_24-常量","2.4 常量",[31,289,290],{},[55,291],{"alt":57,"src":292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[31,294,295],{},"const — 类似于 let ，但是变量的值无法被修改",[14,297,299],{"id":298},"_25-数据类型","2.5 数据类型",[31,301,302],{},[55,303],{"alt":57,"src":304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[24,306,307,310],{},[27,308,309],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[27,311,312],{},"算数运算符：",[31,314,315],{},[55,316],{"alt":57,"src":317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[24,319,320],{"start":73},[27,321,322],{},"数字类型（Number）",[31,324,325],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[31,327,328],{},[55,329],{"alt":57,"src":330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[24,332,334],{"start":333},4,[27,335,336],{},"字符串类型（string）",[31,338,339],{},[55,340],{"alt":57,"src":341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[31,343,344],{},"反引号也是可以使用的",[31,346,347],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[31,349,350],{},"例如：document.write(\"我今年\"+age+\"岁\")",[24,352,353],{"start":227},[27,354,355],{},"模板字符串",[31,357,358],{},[55,359],{"alt":57,"src":360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[31,362,363],{},"类似于python的字符串格式化",[24,365,366],{"start":238},[27,367,368],{},"布尔类型",[31,370,371],{},"true 和 false",[24,373,374],{"start":252},[27,375,376],{},"未定义类型（underfined）",[31,378,379],{},"表示没有赋值",[31,381,382],{},"未定义类型是比较特殊的类型，只有一个值undefined",[31,384,385],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[24,387,389],{"start":388},8,[27,390,391],{},"null（空类型）",[31,393,394],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[31,396,397],{},"赋值了，但是内容为空",[190,399,401],{"className":192,"code":400,"language":194,"meta":57,"style":57},"typeof null\n输出的是'object'，是一个对象数据类型\n",[196,402,403,408],{"__ignoreMap":57},[199,404,405],{"class":201,"line":202},[199,406,407],{"class":205},"typeof null\n",[199,409,410],{"class":201,"line":36},[199,411,412],{"class":205},"输出的是'object'，是一个对象数据类型\n",[24,414,416],{"start":415},9,[27,417,418],{},"控制台检测数据类型",[31,420,421],{},[55,422],{"alt":57,"src":423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[24,425,427],{"start":426},10,[27,428,429],{},"类型转换",[31,431,432],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[31,434,435],{},"转换方式：隐式转换和显示转换",[31,437,438],{},"①隐式转换",[176,440,441,444,447,450],{},[27,442,443],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[27,445,446],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[27,448,449],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[27,451,452],{},"任何数据和字符串相加结果都是字符串",[31,454,455],{},"②显示转换",[31,457,458],{},[55,459],{"alt":57,"src":460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[31,462,463],{},[55,464],{"alt":57,"src":465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[31,467,468],{},"在输入的时候要用好隐式转换，简单写起来",[31,470,471],{},"let num = +prompt(’请输入数字：‘)",[31,473,474],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[31,476,477],{},"console.log(parseInt('12.333px'))",[31,479,480],{},"输出为：12",[31,482,483],{},"console.log(parseInt('a'a'a12.333px'))",[31,485,486],{},"输出：NaN",[14,488,490],{"id":489},"_26-运算符","2.6 运算符",[19,492,494],{"id":493},"_261-赋值运算符","2.6.1 赋值运算符",[31,496,497],{},[55,498],{"alt":57,"src":499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[19,501,503],{"id":502},"_262-一元运算符","2.6.2 一元运算符",[31,505,506],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[31,508,509],{},[55,510],{"alt":57,"src":511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[31,513,514],{},[55,515],{"alt":57,"src":516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[31,518,519],{},"两者的区别：",[31,521,522],{},[55,523],{"alt":57,"src":524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[31,526,527],{},"前置先自加；后置后加，代码执行完之后再加",[19,529,531],{"id":530},"_263-比较运算符","2.6.3 比较运算符",[31,533,534],{},[55,535],{"alt":57,"src":536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[31,538,539],{},"比较运算符也有隐式转换",[31,541,542],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[31,544,545],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[31,547,548],{},"要使用三等，开发的时候",[31,550,551],{},"NaN不等于任何人，包括它自己",[31,553,554],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[31,556,557],{},"7\u002F10=0.7",[31,559,560],{},"最后：0.5+0.2=0.7",[31,562,563],{},"字符串比较，比较的是字符对应的ASCII码",[19,565,567],{"id":566},"_264-逻辑运算符","2.6.4 逻辑运算符",[31,569,570],{},[55,571],{"alt":57,"src":572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[31,574,575],{},[55,576],{"alt":57,"src":577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[31,579,580],{},[55,581],{"alt":57,"src":582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[31,584,585],{},"上述题目选D",[31,587,588],{},"与真2假1；或真1假2",[19,590,592],{"id":591},"_265-运算符优先级","2.6.5 运算符优先级",[31,594,595],{},[55,596],{"alt":57,"src":597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[31,599,600],{},"先算逻辑与，后算逻辑或",[14,602,604],{"id":603},"_27-语句","2.7 语句",[31,606,607],{},"表达式：是可以被求值的代码，会有结果给我们",[31,609,610],{},"语句：语句是可以被执行的代码，例如prompt()",[31,612,613],{},[55,614],{"alt":57,"src":615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[31,617,618],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[31,620,621],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[19,623,625],{"id":624},"_271-分支语句","2.7.1 分支语句",[627,628,630],"h4",{"id":629},"_2711-if分支语句","2.7.1.1 if分支语句",[31,632,633],{},"if语句单行简单的话，可以不写{}，写在一行就行",[24,635,636],{},[27,637,638],{},"单分支语句",[31,640,641],{},[55,642],{"alt":57,"src":643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[31,645,646],{},"除了0，所有数字都为真",[190,648,650],{"className":192,"code":649,"language":194,"meta":57,"style":57},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[196,651,652,657,662,667,672],{"__ignoreMap":57},[199,653,654],{"class":201,"line":202},[199,655,656],{"class":205},"if（0) {\n",[199,658,659],{"class":201,"line":36},[199,660,661],{"class":205},"    let a=1\n",[199,663,664],{"class":201,"line":73},[199,665,666],{"class":205},"    alert(typeof a)\n",[199,668,669],{"class":201,"line":333},[199,670,671],{"class":205},"}\n",[199,673,674],{"class":201,"line":227},[199,675,676],{"class":205},"不输出，括号为假\n",[24,678,679],{"start":36},[27,680,681],{},"双分支语句",[31,683,684],{},[55,685],{"alt":57,"src":686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[24,688,689],{"start":73},[27,690,691],{},"多分支语句",[31,693,694],{},[55,695],{"alt":57,"src":696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[627,698,700],{"id":699},"_2712-三元运算符","2.7.1.2 三元运算符",[31,702,703],{},[55,704],{"alt":57,"src":705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[627,707,709],{"id":708},"_2713-switch语句","2.7.1.3 switch语句",[31,711,712],{},[55,713],{"alt":57,"src":714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[31,716,717],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[19,719,721],{"id":720},"_272-循环语句","2.7.2 循环语句",[627,723,725],{"id":724},"_2721-断点演示","2.7.2.1 断点演示",[31,727,728],{},[55,729],{"alt":57,"src":730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[627,732,734],{"id":733},"_2722-while循环","2.7.2.2 while循环",[31,736,737],{},[55,738],{"alt":57,"src":739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[31,741,742],{},[55,743],{"alt":57,"src":744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[627,746,748],{"id":747},"_2723-for循环","2.7.2.3 for循环",[31,750,751],{},[55,752],{"alt":57,"src":753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[31,755,756],{},"for(;;) {",[31,758,759],{},"}",[31,761,762],{},"表示无限循环",[31,764,765],{},[55,766],{"alt":57,"src":767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[627,769,771],{"id":770},"_2724-循环的退出","2.7.2.4 循环的退出",[31,773,774],{},[55,775],{"alt":57,"src":776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,778,780],{"id":779},"_28-数组","2.8 数组",[19,782,784],{"id":783},"_281-基础认识","2.8.1 基础认识",[31,786,787],{},[55,788],{"alt":57,"src":789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[31,791,792],{},[55,793],{"alt":57,"src":794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[31,796,797],{},[55,798],{"alt":57,"src":799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[31,801,802],{},[55,803],{"alt":57,"src":804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[19,806,808],{"id":807},"_282-操作数组","2.8.2 操作数组",[31,810,811],{},[55,812],{"alt":57,"src":813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[24,815,816],{},[27,817,818],{},"添加元素",[31,820,821],{},[55,822],{"alt":57,"src":823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[31,825,826],{},"console.log(arr.push('green'))",[31,828,829],{},"输出结果：为新数组的长度",[31,831,832],{},[55,833],{"alt":57,"src":834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[31,836,837],{},"push用的非常多，一定要记住",[24,839,840],{},[27,841,842],{},"删除元素",[31,844,845],{},[55,846],{"alt":57,"src":847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[31,849,850],{},[55,851],{"alt":57,"src":852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[31,854,855],{},[55,856],{"alt":57,"src":857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[19,859,861],{"id":860},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[190,863,865],{"className":192,"code":864,"language":194,"meta":57,"style":57},"\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",[196,866,867,883,902,908,917,935,959,982,996,1005,1013,1029,1041,1047,1052,1060,1073,1090,1105,1126,1144,1161,1174,1187,1200,1205,1210,1223,1234,1247,1260,1273,1285,1290,1295,1308,1313,1328,1333,1338,1350,1365,1379,1394,1399,1409,1419,1424,1434,1439,1449,1456,1462,1476,1514,1520,1526,1555,1561,1566,1572,1578,1595,1600,1606,1638,1651,1671,1688,1704,1710,1718,1723,1729,1743,1752,1761,1766],{"__ignoreMap":57},[199,868,869,872,876,880],{"class":201,"line":202},[199,870,871],{"class":205},"\u003C!",[199,873,875],{"class":874},"s9eBZ","DOCTYPE",[199,877,879],{"class":878},"sScJk"," html",[199,881,882],{"class":205},">\n",[199,884,885,888,890,893,896,900],{"class":201,"line":36},[199,886,887],{"class":205},"\u003C",[199,889,194],{"class":874},[199,891,892],{"class":878}," lang",[199,894,895],{"class":205},"=",[199,897,899],{"class":898},"sZZnC","\"en\"",[199,901,882],{"class":205},[199,903,904],{"class":201,"line":73},[199,905,907],{"emptyLinePlaceholder":906},true,"\n",[199,909,910,912,915],{"class":201,"line":333},[199,911,887],{"class":205},[199,913,914],{"class":874},"head",[199,916,882],{"class":205},[199,918,919,922,925,928,930,933],{"class":201,"line":227},[199,920,921],{"class":205},"    \u003C",[199,923,924],{"class":874},"meta",[199,926,927],{"class":878}," charset",[199,929,895],{"class":205},[199,931,932],{"class":898},"\"UTF-8\"",[199,934,882],{"class":205},[199,936,937,939,941,944,946,949,952,954,957],{"class":201,"line":238},[199,938,921],{"class":205},[199,940,924],{"class":874},[199,942,943],{"class":878}," http-equiv",[199,945,895],{"class":205},[199,947,948],{"class":898},"\"X-UA-Compatible\"",[199,950,951],{"class":878}," content",[199,953,895],{"class":205},[199,955,956],{"class":898},"\"IE=edge\"",[199,958,882],{"class":205},[199,960,961,963,965,968,970,973,975,977,980],{"class":201,"line":252},[199,962,921],{"class":205},[199,964,924],{"class":874},[199,966,967],{"class":878}," name",[199,969,895],{"class":205},[199,971,972],{"class":898},"\"viewport\"",[199,974,951],{"class":878},[199,976,895],{"class":205},[199,978,979],{"class":898},"\"width=device-width, initial-scale=1.0\"",[199,981,882],{"class":205},[199,983,984,986,989,992,994],{"class":201,"line":388},[199,985,921],{"class":205},[199,987,988],{"class":874},"title",[199,990,991],{"class":205},">Document\u003C\u002F",[199,993,988],{"class":874},[199,995,882],{"class":205},[199,997,998,1000,1003],{"class":201,"line":415},[199,999,921],{"class":205},[199,1001,1002],{"class":874},"style",[199,1004,882],{"class":205},[199,1006,1007,1010],{"class":201,"line":426},[199,1008,1009],{"class":874},"        *",[199,1011,1012],{"class":205}," {\n",[199,1014,1016,1020,1023,1026],{"class":201,"line":1015},11,[199,1017,1019],{"class":1018},"sj4cs","            margin",[199,1021,1022],{"class":205},": ",[199,1024,1025],{"class":1018},"0",[199,1027,1028],{"class":205},";\n",[199,1030,1032,1035,1037,1039],{"class":201,"line":1031},12,[199,1033,1034],{"class":1018},"            padding",[199,1036,1022],{"class":205},[199,1038,1025],{"class":1018},[199,1040,1028],{"class":205},[199,1042,1044],{"class":201,"line":1043},13,[199,1045,1046],{"class":205},"        }\n",[199,1048,1050],{"class":201,"line":1049},14,[199,1051,907],{"emptyLinePlaceholder":906},[199,1053,1055,1058],{"class":201,"line":1054},15,[199,1056,1057],{"class":878},"        .box",[199,1059,1012],{"class":205},[199,1061,1063,1066,1068,1071],{"class":201,"line":1062},16,[199,1064,1065],{"class":1018},"            display",[199,1067,1022],{"class":205},[199,1069,1070],{"class":1018},"flex",[199,1072,1028],{"class":205},[199,1074,1076,1079,1081,1084,1088],{"class":201,"line":1075},17,[199,1077,1078],{"class":1018},"            width",[199,1080,1022],{"class":205},[199,1082,1083],{"class":1018},"700",[199,1085,1087],{"class":1086},"szBVR","px",[199,1089,1028],{"class":205},[199,1091,1093,1096,1098,1101,1103],{"class":201,"line":1092},18,[199,1094,1095],{"class":1018},"            height",[199,1097,1022],{"class":205},[199,1099,1100],{"class":1018},"300",[199,1102,1087],{"class":1086},[199,1104,1028],{"class":205},[199,1106,1108,1111,1113,1116,1118,1121,1124],{"class":201,"line":1107},19,[199,1109,1110],{"class":1018},"            border-left",[199,1112,1022],{"class":205},[199,1114,1115],{"class":1018},"1",[199,1117,1087],{"class":1086},[199,1119,1120],{"class":1018}," solid",[199,1122,1123],{"class":1018}," pink",[199,1125,1028],{"class":205},[199,1127,1129,1132,1134,1136,1138,1140,1142],{"class":201,"line":1128},20,[199,1130,1131],{"class":1018},"            border-bottom",[199,1133,1022],{"class":205},[199,1135,1115],{"class":1018},[199,1137,1087],{"class":1086},[199,1139,1120],{"class":1018},[199,1141,1123],{"class":1018},[199,1143,1028],{"class":205},[199,1145,1147,1149,1151,1154,1156,1159],{"class":201,"line":1146},21,[199,1148,1019],{"class":1018},[199,1150,1022],{"class":205},[199,1152,1153],{"class":1018},"50",[199,1155,1087],{"class":1086},[199,1157,1158],{"class":1018}," auto",[199,1160,1028],{"class":205},[199,1162,1164,1167,1169,1172],{"class":201,"line":1163},22,[199,1165,1166],{"class":1018},"            justify-content",[199,1168,1022],{"class":205},[199,1170,1171],{"class":1018},"space-around",[199,1173,1028],{"class":205},[199,1175,1177,1180,1182,1185],{"class":201,"line":1176},23,[199,1178,1179],{"class":1018},"            align-items",[199,1181,1022],{"class":205},[199,1183,1184],{"class":1018},"flex-end",[199,1186,1028],{"class":205},[199,1188,1190,1193,1195,1198],{"class":201,"line":1189},24,[199,1191,1192],{"class":1018},"            text-align",[199,1194,1022],{"class":205},[199,1196,1197],{"class":1018},"center",[199,1199,1028],{"class":205},[199,1201,1203],{"class":201,"line":1202},25,[199,1204,1046],{"class":205},[199,1206,1208],{"class":201,"line":1207},26,[199,1209,907],{"emptyLinePlaceholder":906},[199,1211,1213,1215,1218,1221],{"class":201,"line":1212},27,[199,1214,1057],{"class":878},[199,1216,1217],{"class":1086},">",[199,1219,1220],{"class":874},"div",[199,1222,1012],{"class":205},[199,1224,1226,1228,1230,1232],{"class":201,"line":1225},28,[199,1227,1065],{"class":1018},[199,1229,1022],{"class":205},[199,1231,1070],{"class":1018},[199,1233,1028],{"class":205},[199,1235,1237,1239,1241,1243,1245],{"class":201,"line":1236},29,[199,1238,1078],{"class":1018},[199,1240,1022],{"class":205},[199,1242,1153],{"class":1018},[199,1244,1087],{"class":1086},[199,1246,1028],{"class":205},[199,1248,1250,1253,1255,1258],{"class":201,"line":1249},30,[199,1251,1252],{"class":1018},"            background-color",[199,1254,1022],{"class":205},[199,1256,1257],{"class":1018},"pink",[199,1259,1028],{"class":205},[199,1261,1263,1266,1268,1271],{"class":201,"line":1262},31,[199,1264,1265],{"class":1018},"            flex-direction",[199,1267,1022],{"class":205},[199,1269,1270],{"class":1018},"column",[199,1272,1028],{"class":205},[199,1274,1276,1278,1280,1283],{"class":201,"line":1275},32,[199,1277,1166],{"class":1018},[199,1279,1022],{"class":205},[199,1281,1282],{"class":1018},"space-between",[199,1284,1028],{"class":205},[199,1286,1288],{"class":201,"line":1287},33,[199,1289,1046],{"class":205},[199,1291,1293],{"class":201,"line":1292},34,[199,1294,907],{"emptyLinePlaceholder":906},[199,1296,1298,1300,1303,1306],{"class":201,"line":1297},35,[199,1299,1057],{"class":878},[199,1301,1302],{"class":874}," div",[199,1304,1305],{"class":874}," span",[199,1307,1012],{"class":205},[199,1309,1311],{"class":201,"line":1310},36,[199,1312,907],{"emptyLinePlaceholder":906},[199,1314,1316,1319,1321,1324,1326],{"class":201,"line":1315},37,[199,1317,1318],{"class":1018},"            margin-top",[199,1320,1022],{"class":205},[199,1322,1323],{"class":1018},"-20",[199,1325,1087],{"class":1086},[199,1327,1028],{"class":205},[199,1329,1331],{"class":201,"line":1330},38,[199,1332,1046],{"class":205},[199,1334,1336],{"class":201,"line":1335},39,[199,1337,907],{"emptyLinePlaceholder":906},[199,1339,1341,1343,1345,1348],{"class":201,"line":1340},40,[199,1342,1057],{"class":878},[199,1344,1302],{"class":874},[199,1346,1347],{"class":874}," h4",[199,1349,1012],{"class":205},[199,1351,1353,1356,1358,1361,1363],{"class":201,"line":1352},41,[199,1354,1355],{"class":1018},"            margin-bottom",[199,1357,1022],{"class":205},[199,1359,1360],{"class":1018},"-35",[199,1362,1087],{"class":1086},[199,1364,1028],{"class":205},[199,1366,1368,1370,1372,1375,1377],{"class":201,"line":1367},42,[199,1369,1078],{"class":1018},[199,1371,1022],{"class":205},[199,1373,1374],{"class":1018},"70",[199,1376,1087],{"class":1086},[199,1378,1028],{"class":205},[199,1380,1382,1385,1387,1390,1392],{"class":201,"line":1381},43,[199,1383,1384],{"class":1018},"            margin-left",[199,1386,1022],{"class":205},[199,1388,1389],{"class":1018},"-10",[199,1391,1087],{"class":1086},[199,1393,1028],{"class":205},[199,1395,1397],{"class":201,"line":1396},44,[199,1398,1046],{"class":205},[199,1400,1402,1405,1407],{"class":201,"line":1401},45,[199,1403,1404],{"class":205},"    \u003C\u002F",[199,1406,1002],{"class":874},[199,1408,882],{"class":205},[199,1410,1412,1415,1417],{"class":201,"line":1411},46,[199,1413,1414],{"class":205},"\u003C\u002F",[199,1416,914],{"class":874},[199,1418,882],{"class":205},[199,1420,1422],{"class":201,"line":1421},47,[199,1423,907],{"emptyLinePlaceholder":906},[199,1425,1427,1429,1432],{"class":201,"line":1426},48,[199,1428,887],{"class":205},[199,1430,1431],{"class":874},"body",[199,1433,882],{"class":205},[199,1435,1437],{"class":201,"line":1436},49,[199,1438,907],{"emptyLinePlaceholder":906},[199,1440,1442,1444,1447],{"class":201,"line":1441},50,[199,1443,921],{"class":205},[199,1445,1446],{"class":874},"script",[199,1448,882],{"class":205},[199,1450,1452],{"class":201,"line":1451},51,[199,1453,1455],{"class":1454},"sJ8bj","        \u002F\u002F 1. 四次弹框效果\n",[199,1457,1459],{"class":201,"line":1458},52,[199,1460,1461],{"class":1454},"        \u002F\u002F 声明一个新的数组\n",[199,1463,1465,1468,1471,1473],{"class":201,"line":1464},53,[199,1466,1467],{"class":1086},"        let",[199,1469,1470],{"class":205}," arr ",[199,1472,895],{"class":1086},[199,1474,1475],{"class":205}," []\n",[199,1477,1479,1482,1485,1488,1491,1493,1496,1499,1502,1505,1508,1511],{"class":201,"line":1478},54,[199,1480,1481],{"class":1086},"        for",[199,1483,1484],{"class":205}," (",[199,1486,1487],{"class":1086},"let",[199,1489,1490],{"class":205}," i ",[199,1492,895],{"class":1086},[199,1494,1495],{"class":1018}," 1",[199,1497,1498],{"class":205},"; i ",[199,1500,1501],{"class":1086},"\u003C=",[199,1503,1504],{"class":1018}," 4",[199,1506,1507],{"class":205},"; i",[199,1509,1510],{"class":1086},"++",[199,1512,1513],{"class":205},") {\n",[199,1515,1517],{"class":201,"line":1516},55,[199,1518,1519],{"class":1454},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[199,1521,1523],{"class":201,"line":1522},56,[199,1524,1525],{"class":1454},"            \u002F\u002F arr.push(num)\n",[199,1527,1529,1532,1535,1538,1541,1543,1546,1549,1552],{"class":201,"line":1528},57,[199,1530,1531],{"class":205},"            arr.",[199,1533,1534],{"class":878},"push",[199,1536,1537],{"class":205},"(",[199,1539,1540],{"class":878},"prompt",[199,1542,1537],{"class":205},[199,1544,1545],{"class":898},"`请输入第${",[199,1547,1548],{"class":205},"i",[199,1550,1551],{"class":898},"}季度的数据:`",[199,1553,1554],{"class":205},"))\n",[199,1556,1558],{"class":201,"line":1557},58,[199,1559,1560],{"class":1454},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[199,1562,1564],{"class":201,"line":1563},59,[199,1565,1046],{"class":205},[199,1567,1569],{"class":201,"line":1568},60,[199,1570,1571],{"class":1454},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[199,1573,1575],{"class":201,"line":1574},61,[199,1576,1577],{"class":1454},"        \u002F\u002F 盒子开头\n",[199,1579,1581,1584,1587,1589,1592],{"class":201,"line":1580},62,[199,1582,1583],{"class":205},"        document.",[199,1585,1586],{"class":878},"write",[199,1588,1537],{"class":205},[199,1590,1591],{"class":898},"` \u003Cdiv class=\"box\">`",[199,1593,1594],{"class":205},")\n",[199,1596,1598],{"class":201,"line":1597},63,[199,1599,907],{"emptyLinePlaceholder":906},[199,1601,1603],{"class":201,"line":1602},64,[199,1604,1605],{"class":1454},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[199,1607,1609,1611,1613,1615,1617,1619,1622,1624,1626,1629,1632,1634,1636],{"class":201,"line":1608},65,[199,1610,1481],{"class":1086},[199,1612,1484],{"class":205},[199,1614,1487],{"class":1086},[199,1616,1490],{"class":205},[199,1618,895],{"class":1086},[199,1620,1621],{"class":1018}," 0",[199,1623,1498],{"class":205},[199,1625,887],{"class":1086},[199,1627,1628],{"class":205}," arr.",[199,1630,1631],{"class":1018},"length",[199,1633,1507],{"class":205},[199,1635,1510],{"class":1086},[199,1637,1513],{"class":205},[199,1639,1641,1644,1646,1648],{"class":201,"line":1640},66,[199,1642,1643],{"class":205},"            document.",[199,1645,1586],{"class":878},[199,1647,1537],{"class":205},[199,1649,1650],{"class":898},"`\n",[199,1652,1654,1657,1660,1663,1665,1668],{"class":201,"line":1653},67,[199,1655,1656],{"class":898},"              \u003Cdiv style=\"height: ${",[199,1658,1659],{"class":205},"arr",[199,1661,1662],{"class":898},"[",[199,1664,1548],{"class":205},[199,1666,1667],{"class":898},"]",[199,1669,1670],{"class":898},"}px;\">\n",[199,1672,1674,1677,1679,1681,1683,1685],{"class":201,"line":1673},68,[199,1675,1676],{"class":898},"                \u003Cspan>${",[199,1678,1659],{"class":205},[199,1680,1662],{"class":898},[199,1682,1548],{"class":205},[199,1684,1667],{"class":898},[199,1686,1687],{"class":898},"}\u003C\u002Fspan>\n",[199,1689,1691,1694,1696,1699,1701],{"class":201,"line":1690},69,[199,1692,1693],{"class":898},"                \u003Ch4>第${",[199,1695,1548],{"class":205},[199,1697,1698],{"class":1086}," +",[199,1700,1495],{"class":1018},[199,1702,1703],{"class":898},"}季度\u003C\u002Fh4>\n",[199,1705,1707],{"class":201,"line":1706},70,[199,1708,1709],{"class":898},"              \u003C\u002Fdiv>          \n",[199,1711,1713,1716],{"class":201,"line":1712},71,[199,1714,1715],{"class":898},"            `",[199,1717,1594],{"class":205},[199,1719,1721],{"class":201,"line":1720},72,[199,1722,1046],{"class":205},[199,1724,1726],{"class":201,"line":1725},73,[199,1727,1728],{"class":1454},"        \u002F\u002F 盒子结尾\n",[199,1730,1732,1734,1736,1738,1741],{"class":201,"line":1731},74,[199,1733,1583],{"class":205},[199,1735,1586],{"class":878},[199,1737,1537],{"class":205},[199,1739,1740],{"class":898},"` \u003C\u002Fdiv>`",[199,1742,1594],{"class":205},[199,1744,1746,1748,1750],{"class":201,"line":1745},75,[199,1747,1404],{"class":205},[199,1749,1446],{"class":874},[199,1751,882],{"class":205},[199,1753,1755,1757,1759],{"class":201,"line":1754},76,[199,1756,1414],{"class":205},[199,1758,1431],{"class":874},[199,1760,882],{"class":205},[199,1762,1764],{"class":201,"line":1763},77,[199,1765,907],{"emptyLinePlaceholder":906},[199,1767,1769,1771,1773],{"class":201,"line":1768},78,[199,1770,1414],{"class":205},[199,1772,194],{"class":874},[199,1774,882],{"class":205},[19,1776,1778],{"id":1777},"_284-冒泡排序","2.8.4 冒泡排序",[190,1780,1782],{"className":192,"code":1781,"language":194,"meta":57,"style":57},"\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",[196,1783,1784,1794,1808,1812,1820,1835,1855,1867,1875,1879,1887,1895,1933,1967,2008,2013,2034,2039,2052,2067,2084,2088,2093,2098,2108,2117,2125,2129],{"__ignoreMap":57},[199,1785,1786,1788,1790,1792],{"class":201,"line":202},[199,1787,871],{"class":205},[199,1789,875],{"class":874},[199,1791,879],{"class":878},[199,1793,882],{"class":205},[199,1795,1796,1798,1800,1802,1804,1806],{"class":201,"line":36},[199,1797,887],{"class":205},[199,1799,194],{"class":874},[199,1801,892],{"class":878},[199,1803,895],{"class":205},[199,1805,899],{"class":898},[199,1807,882],{"class":205},[199,1809,1810],{"class":201,"line":73},[199,1811,907],{"emptyLinePlaceholder":906},[199,1813,1814,1816,1818],{"class":201,"line":333},[199,1815,887],{"class":205},[199,1817,914],{"class":874},[199,1819,882],{"class":205},[199,1821,1822,1825,1827,1829,1831,1833],{"class":201,"line":227},[199,1823,1824],{"class":205},"  \u003C",[199,1826,924],{"class":874},[199,1828,927],{"class":878},[199,1830,895],{"class":205},[199,1832,932],{"class":898},[199,1834,882],{"class":205},[199,1836,1837,1839,1841,1843,1845,1847,1849,1851,1853],{"class":201,"line":238},[199,1838,1824],{"class":205},[199,1840,924],{"class":874},[199,1842,967],{"class":878},[199,1844,895],{"class":205},[199,1846,972],{"class":898},[199,1848,951],{"class":878},[199,1850,895],{"class":205},[199,1852,979],{"class":898},[199,1854,882],{"class":205},[199,1856,1857,1859,1861,1863,1865],{"class":201,"line":252},[199,1858,1824],{"class":205},[199,1860,988],{"class":874},[199,1862,991],{"class":205},[199,1864,988],{"class":874},[199,1866,882],{"class":205},[199,1868,1869,1871,1873],{"class":201,"line":388},[199,1870,1414],{"class":205},[199,1872,914],{"class":874},[199,1874,882],{"class":205},[199,1876,1877],{"class":201,"line":415},[199,1878,907],{"emptyLinePlaceholder":906},[199,1880,1881,1883,1885],{"class":201,"line":426},[199,1882,887],{"class":205},[199,1884,1431],{"class":874},[199,1886,882],{"class":205},[199,1888,1889,1891,1893],{"class":201,"line":1015},[199,1890,1824],{"class":205},[199,1892,1446],{"class":874},[199,1894,882],{"class":205},[199,1896,1897,1900,1902,1904,1907,1910,1913,1916,1918,1921,1923,1926,1928,1930],{"class":201,"line":1031},[199,1898,1899],{"class":1086},"    let",[199,1901,1470],{"class":205},[199,1903,895],{"class":1086},[199,1905,1906],{"class":205}," [",[199,1908,1909],{"class":1018},"5",[199,1911,1912],{"class":205},", ",[199,1914,1915],{"class":1018},"4",[199,1917,1912],{"class":205},[199,1919,1920],{"class":1018},"3",[199,1922,1912],{"class":205},[199,1924,1925],{"class":1018},"2",[199,1927,1912],{"class":205},[199,1929,1115],{"class":1018},[199,1931,1932],{"class":205},"]\n",[199,1934,1935,1938,1940,1942,1944,1946,1948,1950,1952,1954,1956,1959,1961,1963,1965],{"class":201,"line":1043},[199,1936,1937],{"class":1086},"    for",[199,1939,1484],{"class":205},[199,1941,1487],{"class":1086},[199,1943,1490],{"class":205},[199,1945,895],{"class":1086},[199,1947,1621],{"class":1018},[199,1949,1498],{"class":205},[199,1951,887],{"class":1086},[199,1953,1628],{"class":205},[199,1955,1631],{"class":1018},[199,1957,1958],{"class":1086}," -",[199,1960,1495],{"class":1018},[199,1962,1507],{"class":205},[199,1964,1510],{"class":1086},[199,1966,1513],{"class":205},[199,1968,1969,1972,1974,1976,1979,1981,1983,1986,1988,1990,1992,1994,1996,1999,2001,2004,2006],{"class":201,"line":1049},[199,1970,1971],{"class":1086},"      for",[199,1973,1484],{"class":205},[199,1975,1487],{"class":1086},[199,1977,1978],{"class":205}," j ",[199,1980,895],{"class":1086},[199,1982,1621],{"class":1018},[199,1984,1985],{"class":205},"; j ",[199,1987,887],{"class":1086},[199,1989,1628],{"class":205},[199,1991,1631],{"class":1018},[199,1993,1958],{"class":1086},[199,1995,1490],{"class":205},[199,1997,1998],{"class":1086},"-",[199,2000,1495],{"class":1018},[199,2002,2003],{"class":205},"; j",[199,2005,1510],{"class":1086},[199,2007,1513],{"class":205},[199,2009,2010],{"class":201,"line":1054},[199,2011,2012],{"class":1454},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[199,2014,2015,2018,2021,2023,2026,2029,2031],{"class":201,"line":1062},[199,2016,2017],{"class":1086},"        if",[199,2019,2020],{"class":205}," (arr[j] ",[199,2022,1217],{"class":1086},[199,2024,2025],{"class":205}," arr[j ",[199,2027,2028],{"class":1086},"+",[199,2030,1495],{"class":1018},[199,2032,2033],{"class":205},"]) {\n",[199,2035,2036],{"class":201,"line":1075},[199,2037,2038],{"class":1454},"          \u002F\u002F 交换两个变量\n",[199,2040,2041,2044,2047,2049],{"class":201,"line":1092},[199,2042,2043],{"class":1086},"          let",[199,2045,2046],{"class":205}," tmp ",[199,2048,895],{"class":1086},[199,2050,2051],{"class":205}," arr[j]\n",[199,2053,2054,2057,2059,2061,2063,2065],{"class":201,"line":1107},[199,2055,2056],{"class":205},"          arr[j] ",[199,2058,895],{"class":1086},[199,2060,2025],{"class":205},[199,2062,2028],{"class":1086},[199,2064,1495],{"class":1018},[199,2066,1932],{"class":205},[199,2068,2069,2072,2074,2076,2079,2081],{"class":201,"line":1128},[199,2070,2071],{"class":205},"          arr[j ",[199,2073,2028],{"class":1086},[199,2075,1495],{"class":1018},[199,2077,2078],{"class":205},"] ",[199,2080,895],{"class":1086},[199,2082,2083],{"class":205}," tmp\n",[199,2085,2086],{"class":201,"line":1146},[199,2087,1046],{"class":205},[199,2089,2090],{"class":201,"line":1163},[199,2091,2092],{"class":205},"      }\n",[199,2094,2095],{"class":201,"line":1176},[199,2096,2097],{"class":205},"    }\n",[199,2099,2100,2103,2105],{"class":201,"line":1189},[199,2101,2102],{"class":205},"    document.",[199,2104,1586],{"class":878},[199,2106,2107],{"class":205},"(arr)\n",[199,2109,2110,2113,2115],{"class":201,"line":1202},[199,2111,2112],{"class":205},"  \u003C\u002F",[199,2114,1446],{"class":874},[199,2116,882],{"class":205},[199,2118,2119,2121,2123],{"class":201,"line":1207},[199,2120,1414],{"class":205},[199,2122,1431],{"class":874},[199,2124,882],{"class":205},[199,2126,2127],{"class":201,"line":1212},[199,2128,907],{"emptyLinePlaceholder":906},[199,2130,2131,2133,2135],{"class":201,"line":1225},[199,2132,1414],{"class":205},[199,2134,194],{"class":874},[199,2136,882],{"class":205},[31,2138,2139],{},[55,2140],{"alt":57,"src":2141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[31,2143,2144],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[31,2146,2147],{},"let arr = [4, 2, 5, 1, 3]",[31,2149,2150],{},"\u002F\u002F 1.升序排列写法",[31,2152,2153],{},"arr.sort(function (a, b) {",[31,2155,2156],{},"return a - b",[31,2158,2159],{},"})",[31,2161,2162],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[31,2164,2165],{},"\u002F\u002F 降序排列写法",[31,2167,2153],{},[31,2169,2170],{},"return b - a",[31,2172,2159],{},[31,2174,2175],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,2177,2179],{"id":2178},"_29-函数","2.9 函数",[31,2181,2182],{},[55,2183],{"alt":57,"src":2184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[31,2186,2187],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[31,2189,2190],{},"函数的声明用function",[31,2192,2193],{},"函数里边可以嵌套函数",[19,2195,2197],{"id":2196},"_291-函数传参","2.9.1 函数传参",[31,2199,2200],{},[55,2201],{"alt":57,"src":2202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[31,2204,2205],{},[55,2206],{"alt":57,"src":2207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[176,2209,2210,2213,2216,2219,2222,2225],{},[27,2211,2212],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[27,2214,2215],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[27,2217,2218],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[27,2220,2221],{},"开发中尽量保持形参和实参个数一致",[27,2223,2224],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[27,2226,2227],{},"形参只在函数中有用，所以不需要进行声明这个变量",[31,2229,2230],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[19,2232,2234],{"id":2233},"_292-函数的返回值","2.9.2 函数的返回值",[31,2236,2237],{},[55,2238],{"alt":57,"src":2239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[31,2241,2242],{},[55,2243],{"alt":57,"src":2244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[176,2246,2247,2250,2253,2256,2259],{},[27,2248,2249],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[27,2251,2252],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[27,2254,2255],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[27,2257,2258],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[27,2260,2261],{},"断点调试:进入函数内部看执行过程F11",[19,2263,2265],{"id":2264},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[190,2267,2269],{"className":192,"code":2268,"language":194,"meta":57,"style":57},"    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",[196,2270,2271,2276,2281,2285,2290],{"__ignoreMap":57},[199,2272,2273],{"class":201,"line":202},[199,2274,2275],{"class":205},"    function fn(a, b) {\n",[199,2277,2278],{"class":201,"line":36},[199,2279,2280],{"class":205},"      console.log(a + b);\n",[199,2282,2283],{"class":201,"line":73},[199,2284,2097],{"class":205},[199,2286,2287],{"class":201,"line":333},[199,2288,2289],{"class":205},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[199,2291,2292],{"class":201,"line":227},[199,2293,2294],{"class":205},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[19,2296,2298],{"id":2297},"_294-作用域","2.9.4 作用域",[176,2300,2301,2307,2312,2315,2318],{},[27,2302,2303,2304],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[49,2305,2306],{},"作用域",[27,2308,2309],{},[49,2310,2311],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[27,2313,2314],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[27,2316,2317],{},"函数内部可以直接所使用全局变量",[27,2319,2320],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[31,2322,2323],{},"例如：",[190,2325,2327],{"className":192,"code":2326,"language":194,"meta":57,"style":57},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[196,2328,2329,2334,2339,2343,2348,2353,2358],{"__ignoreMap":57},[199,2330,2331],{"class":201,"line":202},[199,2332,2333],{"class":205},"    function fun() {\n",[199,2335,2336],{"class":201,"line":36},[199,2337,2338],{"class":205},"      num = 10\n",[199,2340,2341],{"class":201,"line":73},[199,2342,2097],{"class":205},[199,2344,2345],{"class":201,"line":333},[199,2346,2347],{"class":205},"    fun()\n",[199,2349,2350],{"class":201,"line":227},[199,2351,2352],{"class":205},"    console.log(num)\n",[199,2354,2355],{"class":201,"line":238},[199,2356,2357],{"class":205},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[199,2359,2360],{"class":201,"line":252},[199,2361,2362],{"class":205},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[176,2364,2365,2368],{},[27,2366,2367],{},"函数内部的形参可以看做是局部变量",[27,2369,2370],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[31,2372,2373,2374],{},"变量访问原则： ",[49,2375,2376],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[19,2378,2380],{"id":2379},"_295-匿名函数","2.9.5 匿名函数",[31,2382,2383],{},"函数可以分为具名函数和匿名函数",[31,2385,2386],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[24,2388,2389],{},[27,2390,2391],{},"函数表达式",[31,2393,2394],{},[55,2395],{"alt":57,"src":2396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[31,2398,2399],{},"里边也可以写参数",[31,2401,2402],{},"具名函数调用位置可以随意调整；",[31,2404,2405],{},"匿名函数函数表达式形式只能在声明后才可以使用",[24,2407,2408],{"start":36},[27,2409,2410],{},"立即执行函数",[31,2412,2413],{},[55,2414],{"alt":57,"src":2415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[31,2417,2418],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[31,2420,2421],{},"写法：两个小括号，然后在第一个小括号中写function",[31,2423,2424],{},"(function () {})();",[31,2426,2427],{},"不要落下最后的;",[31,2429,2430],{},"立即执行函数必须要加;",[31,2432,2433],{},"分号写前写后都没问题",[31,2435,2436],{},"写前：",[31,2438,2439],{},"(function() {})()",[31,2441,2442],{},";(function () {})();",[31,2444,2445],{},"写后:",[31,2447,2448],{},"(function() {})();",[31,2450,2424],{},[31,2452,2453],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[31,2455,2456],{},"还有一种写法：",[31,2458,2459],{},"(function(){}());",[31,2461,2462],{},"或者:",[31,2464,2465],{},"!function(){}();",[31,2467,2468],{},"立即执行函数有时候也是可以加名字的：",[31,2470,2471],{},"(function flexible(window,document) {}(window,document));",[31,2473,2474],{},"省一些调用方法",[19,2476,2478],{"id":2477},"_296-逻辑中断","2.9.6 逻辑中断!!!",[31,2480,2481],{},[55,2482],{"alt":57,"src":2483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[31,2485,2486],{},"这样就不用非得给x,y初始化了",[31,2488,2489],{},[55,2490],{"alt":57,"src":2491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[31,2493,2494],{},"代码执行时先看左边",[31,2496,2497],{},"例如：console.log(false && 3+5)",[31,2499,2500],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[31,2502,2503],{},"&&都是真时，就返回最后一个真值",[31,2505,2506],{},"console.log(11 && 22)",[31,2508,2509],{},"输出22",[31,2511,2512],{},"逻辑与：遇真则真",[31,2514,2323],{},[31,2516,2517],{},"let age=1",[31,2519,2520],{},"console.log(11 || age++)",[31,2522,2523],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[31,2525,2526],{},"console.log(11 || 22)",[31,2528,2529],{},"||逻辑或遇到真就直接输出，输出结果为11",[31,2531,2532],{},"||如果都是假的话，就取最后一个假的值了",[19,2534,2536],{"id":2535},"_297-转换为boolean型","2.9.7 转换为Boolean型",[31,2538,2539],{},"显示转换：",[31,2541,2542,2545,2546],{},[49,2543,2544],{},"记忆","： ",[49,2547,2548],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[31,2550,2551],{},"空字符串为假，其他字符串全为真",[31,2553,2554],{},[55,2555],{"alt":57,"src":2556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[31,2558,2559],{},"隐式转换：",[31,2561,2562],{},[55,2563],{"alt":57,"src":2564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[31,2566,2567],{},"隐式转换:",[31,2569,2570],{},"null+3=3",[31,2572,2573],{},"undefined+3=NaN",[31,2575,2576],{},"null==undefined 输出true,他两个都当0看",[31,2578,2579],{},"null===undefined 输出false",[31,2581,2582],{},"undefined做任何操作都是NaN",[31,2584,2585],{},"NaN不等于NaN，NaN表示计算错误",[14,2587,2589],{"id":2588},"_210-对象","2.10 对象",[19,2591,2593],{"id":2592},"_2101-对象的介绍","2.10.1 对象的介绍",[31,2595,2596],{},"对象也是一种数据类型，里边的数据是无序的",[31,2598,2599],{},"对象由属性和方法组成",[31,2601,2602],{},[55,2603],{"alt":57,"src":2604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[31,2606,2607],{},[55,2608],{"alt":57,"src":2609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[31,2611,2612],{},[55,2613],{"alt":57,"src":2614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[19,2616,2618],{"id":2617},"_2102-对象属性","2.10.2 对象属性",[31,2620,2621],{},[55,2622],{"alt":57,"src":2623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[24,2625,2626],{},[27,2627,2628],{},"查询对象",[31,2630,2631],{},"对象名.属性 goods.uname",[31,2633,2634],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[31,2636,2637],{},"不带字符串的属性名也可以使用 对象名['属性名']",[31,2639,2640],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[31,2642,2643],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[24,2645,2646],{"start":36},[27,2647,2648],{},"重新赋值",[31,2650,2651],{},"对象名.属性=新值",[24,2653,2654],{"start":73},[27,2655,2656],{},"增加新数据",[31,2658,2651],{},[24,2660,2661],{"start":333},[27,2662,2663],{},"删除对象中的属性",[31,2665,2666],{},"delete 对象名.属性",[19,2668,2670],{"id":2669},"_2103-对象方法","2.10.3 对象方法",[31,2672,2673],{},[55,2674],{"alt":57,"src":2675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[31,2677,2678],{},"后边跟的是匿名函数",[31,2680,2681],{},"对象外面的叫函数；对象内部的叫方法",[31,2683,2684],{},[55,2685],{"alt":57,"src":2686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[19,2688,2690],{"id":2689},"_2104-遍历对象","2.10.4 遍历对象",[31,2692,2693],{},"理解为加括号的python字典遍历",[31,2695,2696],{},[55,2697],{"alt":57,"src":2698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[31,2700,2701],{},"k是字符串类型",[31,2703,2704],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[190,2706,2708],{"className":192,"code":2707,"language":194,"meta":57,"style":57},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[196,2709,2710,2715,2720,2725,2730],{"__ignoreMap":57},[199,2711,2712],{"class":201,"line":202},[199,2713,2714],{"class":205},"   let arr = [1, 2, 3]\n",[199,2716,2717],{"class":201,"line":36},[199,2718,2719],{"class":205},"    for (let k in arr) {\n",[199,2721,2722],{"class":201,"line":73},[199,2723,2724],{"class":205},"      console.log(k)\n",[199,2726,2727],{"class":201,"line":333},[199,2728,2729],{"class":205},"      console.log(arr[k])\n",[199,2731,2732],{"class":201,"line":227},[199,2733,2097],{"class":205},[31,2735,2736],{},[55,2737],{"alt":57,"src":2738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[31,2740,2741],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[31,2743,2744],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[31,2746,2747],{},"for in 得到的k是属性名",[1446,2749,2750],{},"\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",[31,2752,2753],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[19,2755,2757],{"id":2756},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[31,2759,2760],{},"数组中放对象信息",[190,2762,2766],{"className":2763,"code":2764,"language":2765,"meta":57,"style":57},"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",[196,2767,2768,2776,2781,2786,2791,2796,2801,2806,2811,2816,2821,2826,2831,2835,2839],{"__ignoreMap":57},[199,2769,2770,2772,2774],{"class":201,"line":202},[199,2771,887],{"class":205},[199,2773,1446],{"class":874},[199,2775,882],{"class":205},[199,2777,2778],{"class":201,"line":36},[199,2779,2780],{"class":205},"    let students = [\n",[199,2782,2783],{"class":201,"line":73},[199,2784,2785],{"class":205},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[199,2787,2788],{"class":201,"line":333},[199,2789,2790],{"class":205},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[199,2792,2793],{"class":201,"line":227},[199,2794,2795],{"class":205},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[199,2797,2798],{"class":201,"line":238},[199,2799,2800],{"class":205},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[199,2802,2803],{"class":201,"line":252},[199,2804,2805],{"class":205},"    ]\n",[199,2807,2808],{"class":201,"line":388},[199,2809,2810],{"class":205},"    for (let i = 0; i \u003C students.length; i++) {\n",[199,2812,2813],{"class":201,"line":415},[199,2814,2815],{"class":205},"      for (let k in students[i]) {\n",[199,2817,2818],{"class":201,"line":426},[199,2819,2820],{"class":205},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[199,2822,2823],{"class":201,"line":1015},[199,2824,2825],{"class":205},"        \u002F\u002F输出每个人的名字：\n",[199,2827,2828],{"class":201,"line":1031},[199,2829,2830],{"class":205},"        \u002F\u002Fconsole.log(students[i].name)\n",[199,2832,2833],{"class":201,"line":1043},[199,2834,2092],{"class":205},[199,2836,2837],{"class":201,"line":1049},[199,2838,2097],{"class":205},[199,2840,2841,2843,2845],{"class":201,"line":1054},[199,2842,2112],{"class":205},[199,2844,1446],{"class":874},[199,2846,882],{"class":205},[19,2848,2850],{"id":2849},"_2106-内置对象","2.10.6 内置对象",[31,2852,2853],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[24,2855,2856],{},[27,2857,2858],{},"数学对象Math",[31,2860,2861],{},[55,2862],{"alt":57,"src":2863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[31,2865,2866],{},[2867,2868,2872],"a",{"href":2869,"rel":2870},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[2871],"nofollow","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[31,2874,2875],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[31,2877,2878],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[31,2880,2881],{},"数组不可以使用Math中的max,min来求最大值与最小值",[31,2883,2884],{},"null是一个空对象，可以认为：null类似于let obj={}",[31,2886,2887],{},"null属于对象数据类型",[24,2889,2890],{"start":36},[27,2891,2892],{},"生成任意范围随机数",[31,2894,2895],{},[55,2896],{"alt":57,"src":2897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[31,2899,2900],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[31,2902,2903],{},"乘以几就取不到几",[31,2905,2906],{},"取数组中的随机元素：",[31,2908,2909],{},"let arr = ['red', 'green', 'blue']",[31,2911,2912],{},"let random = Math.floor(Math.random() * arr.length)",[31,2914,2915],{},"console.log(arr[random])",[31,2917,2918],{},"这个函数得到的是全闭区间",[31,2920,2921],{},"function getRandom(N, M) {",[31,2923,2924],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[31,2926,759],{},[31,2928,2929],{},"console.log(getRandom(4, 8))",[19,2931,2933],{"id":2932},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[31,2935,2936],{},[55,2937],{"alt":57,"src":2938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[31,2940,2941],{},[55,2942],{"alt":57,"src":2943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[31,2945,2946],{},[55,2947],{"alt":57,"src":2948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[31,2950,2951],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[31,2953,2954],{},[55,2955],{"alt":57,"src":2956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[31,2958,2959],{},[55,2960],{"alt":57,"src":2961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[31,2963,2964],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[31,2966,2967],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[31,2969,2970],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1002,2972,2973],{},"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":57,"searchDepth":36,"depth":36,"links":2975},[2976,2984,2985,2986,2987,2988,2995,2999,3005,3014],{"id":16,"depth":36,"text":17,"children":2977},[2978,2979,2980,2981,2982,2983],{"id":21,"depth":73,"text":22},{"id":42,"depth":73,"text":43},{"id":86,"depth":73,"text":87},{"id":98,"depth":73,"text":99},{"id":107,"depth":73,"text":108},{"id":155,"depth":73,"text":156},{"id":165,"depth":36,"text":166},{"id":263,"depth":36,"text":264},{"id":286,"depth":36,"text":287},{"id":298,"depth":36,"text":299},{"id":489,"depth":36,"text":490,"children":2989},[2990,2991,2992,2993,2994],{"id":493,"depth":73,"text":494},{"id":502,"depth":73,"text":503},{"id":530,"depth":73,"text":531},{"id":566,"depth":73,"text":567},{"id":591,"depth":73,"text":592},{"id":603,"depth":36,"text":604,"children":2996},[2997,2998],{"id":624,"depth":73,"text":625},{"id":720,"depth":73,"text":721},{"id":779,"depth":36,"text":780,"children":3000},[3001,3002,3003,3004],{"id":783,"depth":73,"text":784},{"id":807,"depth":73,"text":808},{"id":860,"depth":73,"text":861},{"id":1777,"depth":73,"text":1778},{"id":2178,"depth":36,"text":2179,"children":3006},[3007,3008,3009,3010,3011,3012,3013],{"id":2196,"depth":73,"text":2197},{"id":2233,"depth":73,"text":2234},{"id":2264,"depth":73,"text":2265},{"id":2297,"depth":73,"text":2298},{"id":2379,"depth":73,"text":2380},{"id":2477,"depth":73,"text":2478},{"id":2535,"depth":73,"text":2536},{"id":2588,"depth":36,"text":2589,"children":3015},[3016,3017,3018,3019,3020,3021,3022],{"id":2592,"depth":73,"text":2593},{"id":2617,"depth":73,"text":2618},{"id":2669,"depth":73,"text":2670},{"id":2689,"depth":73,"text":2690},{"id":2756,"depth":73,"text":2757},{"id":2849,"depth":73,"text":2850},{"id":2932,"depth":73,"text":2933},null,"md",{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":5,"description":3023},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",[3031,8059,9167,10587,13542,14893,16380,17469,26215,26227,26825,26851,26975,27216,27281,27299,27312,27359,27483,27652,27851,28030,28235,28371,28466,28503,28516,28826,29567,30275,30296,31316,32947,33098,33111,33123,33423,53233,53248,53265,53298,55589,78937,95082,95103,95216,95337,96107,96770,97131,97169,97275,97375,97418,97444,97505,99159,99260,99285,99776,100276,101356,101639,102381,102883,102895,104911,106575,108078,109776,111693,113612,115634,119104,119536,119999,120748,123692,124040,124062,124418,127725,127737,128140,128163,128310,128477,128682,128983,129540,130197,132128,133726,134375,135869,137300,138535,140229,141981,144391,144507,145442,145653,146538,147773,148001,148014,149169,151581,153949,157270,159747,161391,163168,165181,168233,170413,172940,175134],{"id":3032,"title":3033,"body":3034,"description":57,"extension":3024,"meta":8054,"navigation":906,"path":8055,"seo":8056,"stem":8057,"__hash__":8058},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":3035,"toc":8026},[3036,3039,3043,3046,3050,3061,3065,3069,3072,3075,3078,3081,3084,3110,3114,3117,3120,3123,3126,3174,3178,3196,3198,3212,3215,3223,3226,4073,4080,4096,4100,4186,4190,4196,4281,4285,4323,4327,4391,4395,4399,4405,4416,4420,4425,4429,4434,4438,4443,4447,4451,4456,4704,4709,4847,4852,5107,5110,5118,5122,5127,5229,5232,5528,5537,5638,5641,5644,5647,5650,5910,5915,6055,6058,6235,6238,6365,6368,6520,6524,6529,6532,6543,6551,6554,6661,6665,6669,6674,6724,6729,6734,6758,6763,6815,6818,6823,6998,7003,7288,7293,7689,7693,7698,7755,7760,7768,7771,7911,7914,8023],[10,3037,3033],{"id":3038},"_1基础入门",[14,3040,3042],{"id":3041},"_11注释","1.1注释",[31,3044,3045],{},"\u002F\u002F或者\u002F* *\u002F",[14,3047,3049],{"id":3048},"_12命名","1.2命名",[24,3051,3052,3055,3058],{},[27,3053,3054],{},"字母数字下划线",[27,3056,3057],{},"开头必须是字母或_",[27,3059,3060],{},"不能使用关键词",[14,3062,3064],{"id":3063},"_13数据类型","1.3数据类型",[19,3066,3068],{"id":3067},"_131整形","1.3.1整形",[31,3070,3071],{},"short 短整形 2",[31,3073,3074],{},"int 整形 4",[31,3076,3077],{},"long 长整形 win4 linux32位4 linux64位8",[31,3079,3080],{},"long long 长长整形 8",[31,3082,3083],{},"利用sizeof可以求数据类型占用的内存空间大小",[190,3085,3089],{"className":3086,"code":3087,"language":3088,"meta":57,"style":57},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[196,3090,3091,3103],{"__ignoreMap":57},[199,3092,3093,3096,3098,3101],{"class":201,"line":202},[199,3094,3095],{"class":1086},"sizeof",[199,3097,1537],{"class":205},[199,3099,3100],{"class":1086},"int",[199,3102,1594],{"class":205},[199,3104,3105,3107],{"class":201,"line":36},[199,3106,3095],{"class":1086},[199,3108,3109],{"class":205},"(num)\n",[19,3111,3113],{"id":3112},"_132浮点型","1.3.2浮点型",[31,3115,3116],{},"float 单精度 4节 7位有效数字",[31,3118,3119],{},"double 双精度 8节 15-16有效数字",[31,3121,3122],{},"默认情况下，输出一个小数，会显示6位有效数字",[31,3124,3125],{},"注意点：",[190,3127,3129],{"className":3086,"code":3128,"language":3088,"meta":57,"style":57},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[196,3130,3131,3153],{"__ignoreMap":57},[199,3132,3133,3136,3139,3141,3144,3147,3150],{"class":201,"line":202},[199,3134,3135],{"class":1086},"float",[199,3137,3138],{"class":205}," f1",[199,3140,895],{"class":1086},[199,3142,3143],{"class":1018},"3.14",[199,3145,3146],{"class":1086},"f",[199,3148,3149],{"class":205},";",[199,3151,3152],{"class":1454}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[199,3154,3155,3157,3160,3162,3164,3167,3169,3171],{"class":201,"line":36},[199,3156,3135],{"class":1086},[199,3158,3159],{"class":205}," f2",[199,3161,895],{"class":1086},[199,3163,1920],{"class":1018},[199,3165,3166],{"class":1086},"e",[199,3168,1925],{"class":1018},[199,3170,3149],{"class":205},[199,3172,3173],{"class":1454}," \u002F\u002F科学记数法\n",[19,3175,3177],{"id":3176},"_133字符型","1.3.3字符型",[190,3179,3181],{"className":3086,"code":3180,"language":3088,"meta":57,"style":57},"char ch='a'\n",[196,3182,3183],{"__ignoreMap":57},[199,3184,3185,3188,3191,3193],{"class":201,"line":202},[199,3186,3187],{"class":1086},"char",[199,3189,3190],{"class":205}," ch",[199,3192,895],{"class":1086},[199,3194,3195],{"class":898},"'a'\n",[31,3197,3125],{},[24,3199,3200,3203,3206,3209],{},[27,3201,3202],{},"在显示字符型变量时，只能单引号，双引号x",[27,3204,3205],{},"单引号内只能一个字符，不能字符串",[27,3207,3208],{},"c和c++字符型变量只占用一个字符",[27,3210,3211],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[31,3213,3214],{},"ASCII码大致由以下两部分组成：",[24,3216,3217,3220],{},[27,3218,3219],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[27,3221,3222],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[31,3224,3225],{},"ASCII码表格：",[3227,3228,3229,3272],"table",{},[3230,3231,3232],"thead",{},[3233,3234,3235,3242,3247,3251,3256,3260,3264,3268],"tr",{},[3236,3237,3238,3241],"th",{},[49,3239,3240],{},"ASCII","值",[3236,3243,3244],{},[49,3245,3246],{},"控制字符",[3236,3248,3249,3241],{},[49,3250,3240],{},[3236,3252,3253],{},[49,3254,3255],{},"字符",[3236,3257,3258,3241],{},[49,3259,3240],{},[3236,3261,3262],{},[49,3263,3255],{},[3236,3265,3266,3241],{},[49,3267,3240],{},[3236,3269,3270],{},[49,3271,3255],{},[3273,3274,3275,3301,3325,3350,3375,3400,3424,3448,3474,3499,3524,3550,3575,3600,3625,3651,3677,3701,3726,3750,3775,3800,3825,3850,3875,3900,3925,3951,3975,3999,4022,4047],"tbody",{},[3233,3276,3277,3280,3283,3286,3289,3292,3295,3298],{},[3278,3279,1025],"td",{},[3278,3281,3282],{},"NUT",[3278,3284,3285],{},"32",[3278,3287,3288],{},"(space)",[3278,3290,3291],{},"64",[3278,3293,3294],{},"@",[3278,3296,3297],{},"96",[3278,3299,3300],{},"、",[3233,3302,3303,3305,3308,3311,3314,3317,3320,3323],{},[3278,3304,1115],{},[3278,3306,3307],{},"SOH",[3278,3309,3310],{},"33",[3278,3312,3313],{},"!",[3278,3315,3316],{},"65",[3278,3318,3319],{},"A",[3278,3321,3322],{},"97",[3278,3324,2867],{},[3233,3326,3327,3329,3332,3335,3338,3341,3344,3347],{},[3278,3328,1925],{},[3278,3330,3331],{},"STX",[3278,3333,3334],{},"34",[3278,3336,3337],{},"\"",[3278,3339,3340],{},"66",[3278,3342,3343],{},"B",[3278,3345,3346],{},"98",[3278,3348,3349],{},"b",[3233,3351,3352,3354,3357,3360,3363,3366,3369,3372],{},[3278,3353,1920],{},[3278,3355,3356],{},"ETX",[3278,3358,3359],{},"35",[3278,3361,3362],{},"#",[3278,3364,3365],{},"67",[3278,3367,3368],{},"C",[3278,3370,3371],{},"99",[3278,3373,3374],{},"c",[3233,3376,3377,3379,3382,3385,3388,3391,3394,3397],{},[3278,3378,1915],{},[3278,3380,3381],{},"EOT",[3278,3383,3384],{},"36",[3278,3386,3387],{},"$",[3278,3389,3390],{},"68",[3278,3392,3393],{},"D",[3278,3395,3396],{},"100",[3278,3398,3399],{},"d",[3233,3401,3402,3404,3407,3410,3413,3416,3419,3422],{},[3278,3403,1909],{},[3278,3405,3406],{},"ENQ",[3278,3408,3409],{},"37",[3278,3411,3412],{},"%",[3278,3414,3415],{},"69",[3278,3417,3418],{},"E",[3278,3420,3421],{},"101",[3278,3423,3166],{},[3233,3425,3426,3429,3432,3435,3438,3440,3443,3446],{},[3278,3427,3428],{},"6",[3278,3430,3431],{},"ACK",[3278,3433,3434],{},"38",[3278,3436,3437],{},"&",[3278,3439,1374],{},[3278,3441,3442],{},"F",[3278,3444,3445],{},"102",[3278,3447,3146],{},[3233,3449,3450,3453,3456,3459,3462,3465,3468,3471],{},[3278,3451,3452],{},"7",[3278,3454,3455],{},"BEL",[3278,3457,3458],{},"39",[3278,3460,3461],{},",",[3278,3463,3464],{},"71",[3278,3466,3467],{},"G",[3278,3469,3470],{},"103",[3278,3472,3473],{},"g",[3233,3475,3476,3479,3482,3485,3487,3490,3493,3496],{},[3278,3477,3478],{},"8",[3278,3480,3481],{},"BS",[3278,3483,3484],{},"40",[3278,3486,1537],{},[3278,3488,3489],{},"72",[3278,3491,3492],{},"H",[3278,3494,3495],{},"104",[3278,3497,3498],{},"h",[3233,3500,3501,3504,3507,3510,3513,3516,3519,3522],{},[3278,3502,3503],{},"9",[3278,3505,3506],{},"HT",[3278,3508,3509],{},"41",[3278,3511,3512],{},")",[3278,3514,3515],{},"73",[3278,3517,3518],{},"I",[3278,3520,3521],{},"105",[3278,3523,1548],{},[3233,3525,3526,3529,3532,3535,3538,3541,3544,3547],{},[3278,3527,3528],{},"10",[3278,3530,3531],{},"LF",[3278,3533,3534],{},"42",[3278,3536,3537],{},"*",[3278,3539,3540],{},"74",[3278,3542,3543],{},"J",[3278,3545,3546],{},"106",[3278,3548,3549],{},"j",[3233,3551,3552,3555,3558,3561,3563,3566,3569,3572],{},[3278,3553,3554],{},"11",[3278,3556,3557],{},"VT",[3278,3559,3560],{},"43",[3278,3562,2028],{},[3278,3564,3565],{},"75",[3278,3567,3568],{},"K",[3278,3570,3571],{},"107",[3278,3573,3574],{},"k",[3233,3576,3577,3580,3583,3586,3588,3591,3594,3597],{},[3278,3578,3579],{},"12",[3278,3581,3582],{},"FF",[3278,3584,3585],{},"44",[3278,3587,3461],{},[3278,3589,3590],{},"76",[3278,3592,3593],{},"L",[3278,3595,3596],{},"108",[3278,3598,3599],{},"l",[3233,3601,3602,3605,3608,3611,3613,3616,3619,3622],{},[3278,3603,3604],{},"13",[3278,3606,3607],{},"CR",[3278,3609,3610],{},"45",[3278,3612,1998],{},[3278,3614,3615],{},"77",[3278,3617,3618],{},"M",[3278,3620,3621],{},"109",[3278,3623,3624],{},"m",[3233,3626,3627,3630,3633,3636,3639,3642,3645,3648],{},[3278,3628,3629],{},"14",[3278,3631,3632],{},"SO",[3278,3634,3635],{},"46",[3278,3637,3638],{},".",[3278,3640,3641],{},"78",[3278,3643,3644],{},"N",[3278,3646,3647],{},"110",[3278,3649,3650],{},"n",[3233,3652,3653,3656,3659,3662,3665,3668,3671,3674],{},[3278,3654,3655],{},"15",[3278,3657,3658],{},"SI",[3278,3660,3661],{},"47",[3278,3663,3664],{},"\u002F",[3278,3666,3667],{},"79",[3278,3669,3670],{},"O",[3278,3672,3673],{},"111",[3278,3675,3676],{},"o",[3233,3678,3679,3682,3685,3688,3690,3693,3696,3699],{},[3278,3680,3681],{},"16",[3278,3683,3684],{},"DLE",[3278,3686,3687],{},"48",[3278,3689,1025],{},[3278,3691,3692],{},"80",[3278,3694,3695],{},"P",[3278,3697,3698],{},"112",[3278,3700,31],{},[3233,3702,3703,3706,3709,3712,3714,3717,3720,3723],{},[3278,3704,3705],{},"17",[3278,3707,3708],{},"DCI",[3278,3710,3711],{},"49",[3278,3713,1115],{},[3278,3715,3716],{},"81",[3278,3718,3719],{},"Q",[3278,3721,3722],{},"113",[3278,3724,3725],{},"q",[3233,3727,3728,3731,3734,3736,3738,3741,3744,3747],{},[3278,3729,3730],{},"18",[3278,3732,3733],{},"DC2",[3278,3735,1153],{},[3278,3737,1925],{},[3278,3739,3740],{},"82",[3278,3742,3743],{},"R",[3278,3745,3746],{},"114",[3278,3748,3749],{},"r",[3233,3751,3752,3755,3758,3761,3763,3766,3769,3772],{},[3278,3753,3754],{},"19",[3278,3756,3757],{},"DC3",[3278,3759,3760],{},"51",[3278,3762,1920],{},[3278,3764,3765],{},"83",[3278,3767,3768],{},"S",[3278,3770,3771],{},"115",[3278,3773,3774],{},"s",[3233,3776,3777,3780,3783,3786,3788,3791,3794,3797],{},[3278,3778,3779],{},"20",[3278,3781,3782],{},"DC4",[3278,3784,3785],{},"52",[3278,3787,1915],{},[3278,3789,3790],{},"84",[3278,3792,3793],{},"T",[3278,3795,3796],{},"116",[3278,3798,3799],{},"t",[3233,3801,3802,3805,3808,3811,3813,3816,3819,3822],{},[3278,3803,3804],{},"21",[3278,3806,3807],{},"NAK",[3278,3809,3810],{},"53",[3278,3812,1909],{},[3278,3814,3815],{},"85",[3278,3817,3818],{},"U",[3278,3820,3821],{},"117",[3278,3823,3824],{},"u",[3233,3826,3827,3830,3833,3836,3838,3841,3844,3847],{},[3278,3828,3829],{},"22",[3278,3831,3832],{},"SYN",[3278,3834,3835],{},"54",[3278,3837,3428],{},[3278,3839,3840],{},"86",[3278,3842,3843],{},"V",[3278,3845,3846],{},"118",[3278,3848,3849],{},"v",[3233,3851,3852,3855,3858,3861,3863,3866,3869,3872],{},[3278,3853,3854],{},"23",[3278,3856,3857],{},"TB",[3278,3859,3860],{},"55",[3278,3862,3452],{},[3278,3864,3865],{},"87",[3278,3867,3868],{},"W",[3278,3870,3871],{},"119",[3278,3873,3874],{},"w",[3233,3876,3877,3880,3883,3886,3888,3891,3894,3897],{},[3278,3878,3879],{},"24",[3278,3881,3882],{},"CAN",[3278,3884,3885],{},"56",[3278,3887,3478],{},[3278,3889,3890],{},"88",[3278,3892,3893],{},"X",[3278,3895,3896],{},"120",[3278,3898,3899],{},"x",[3233,3901,3902,3905,3908,3911,3913,3916,3919,3922],{},[3278,3903,3904],{},"25",[3278,3906,3907],{},"EM",[3278,3909,3910],{},"57",[3278,3912,3503],{},[3278,3914,3915],{},"89",[3278,3917,3918],{},"Y",[3278,3920,3921],{},"121",[3278,3923,3924],{},"y",[3233,3926,3927,3930,3933,3936,3939,3942,3945,3948],{},[3278,3928,3929],{},"26",[3278,3931,3932],{},"SUB",[3278,3934,3935],{},"58",[3278,3937,3938],{},":",[3278,3940,3941],{},"90",[3278,3943,3944],{},"Z",[3278,3946,3947],{},"122",[3278,3949,3950],{},"z",[3233,3952,3953,3956,3959,3962,3964,3967,3969,3972],{},[3278,3954,3955],{},"27",[3278,3957,3958],{},"ESC",[3278,3960,3961],{},"59",[3278,3963,3149],{},[3278,3965,3966],{},"91",[3278,3968,1662],{},[3278,3970,3971],{},"123",[3278,3973,3974],{},"{",[3233,3976,3977,3980,3983,3986,3988,3991,3993,3996],{},[3278,3978,3979],{},"28",[3278,3981,3982],{},"FS",[3278,3984,3985],{},"60",[3278,3987,887],{},[3278,3989,3990],{},"92",[3278,3992,3664],{},[3278,3994,3995],{},"124",[3278,3997,3998],{},"|",[3233,4000,4001,4004,4007,4010,4012,4015,4017,4020],{},[3278,4002,4003],{},"29",[3278,4005,4006],{},"GS",[3278,4008,4009],{},"61",[3278,4011,895],{},[3278,4013,4014],{},"93",[3278,4016,1667],{},[3278,4018,4019],{},"125",[3278,4021,759],{},[3233,4023,4024,4027,4030,4033,4035,4038,4041,4044],{},[3278,4025,4026],{},"30",[3278,4028,4029],{},"RS",[3278,4031,4032],{},"62",[3278,4034,1217],{},[3278,4036,4037],{},"94",[3278,4039,4040],{},"^",[3278,4042,4043],{},"126",[3278,4045,4046],{},"`",[3233,4048,4049,4052,4055,4058,4061,4064,4067,4070],{},[3278,4050,4051],{},"31",[3278,4053,4054],{},"US",[3278,4056,4057],{},"63",[3278,4059,4060],{},"?",[3278,4062,4063],{},"95",[3278,4065,4066],{},"_",[3278,4068,4069],{},"127",[3278,4071,4072],{},"DEL",[31,4074,4075,4076,4079],{},"ASCII 码大致由以下",[49,4077,4078],{},"两部分组","成：",[176,4081,4082,4089],{},[27,4083,4084,4085,4088],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[49,4086,4087],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[27,4090,4091,4092,4095],{},"ASCII 打印字符：数字 ",[49,4093,4094],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[19,4097,4099],{"id":4098},"_134转义字符","1.3.4转义字符",[190,4101,4103],{"className":3086,"code":4102,"language":3088,"meta":57,"style":57},"\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",[196,4104,4105,4110,4126,4140,4145,4158,4163],{"__ignoreMap":57},[199,4106,4107],{"class":201,"line":202},[199,4108,4109],{"class":1454},"\u002F\u002F换行符\n",[199,4111,4112,4115,4118,4121,4123],{"class":201,"line":36},[199,4113,4114],{"class":205},"cout ",[199,4116,4117],{"class":1086},"\u003C\u003C",[199,4119,4120],{"class":898},"\"hello world\u002Fn\"",[199,4122,3149],{"class":205},[199,4124,4125],{"class":1454}," \u002F\u002F就等同于如下：\n",[199,4127,4128,4130,4132,4135,4137],{"class":201,"line":73},[199,4129,4114],{"class":205},[199,4131,4117],{"class":1086},[199,4133,4134],{"class":898},"\"hello world\"",[199,4136,4117],{"class":1086},[199,4138,4139],{"class":205},"endl;\n",[199,4141,4142],{"class":201,"line":333},[199,4143,4144],{"class":1454},"\u002F\u002F反斜杠\n",[199,4146,4147,4149,4151,4154,4156],{"class":201,"line":227},[199,4148,4114],{"class":205},[199,4150,4117],{"class":1086},[199,4152,4153],{"class":898},"\"\u002F\u002F\"",[199,4155,4117],{"class":1086},[199,4157,4139],{"class":205},[199,4159,4160],{"class":201,"line":238},[199,4161,4162],{"class":1454},"\u002F\u002F水平制表符\n",[199,4164,4165,4167,4169,4172,4175,4178,4180,4183],{"class":201,"line":252},[199,4166,4114],{"class":205},[199,4168,4117],{"class":1086},[199,4170,4171],{"class":898},"\"aaaa",[199,4173,4174],{"class":1018},"\\t",[199,4176,4177],{"class":898},"helloworld\"",[199,4179,4117],{"class":1086},[199,4181,4182],{"class":205},"endl;",[199,4184,4185],{"class":1454}," \u002F\u002F输出窗口时有对齐效果\n",[19,4187,4189],{"id":4188},"_135字符串型","1.3.5字符串型",[31,4191,4192,4193,4195],{},"char 变量名",[199,4194],{},"=\"字符串值\"",[190,4197,4199],{"className":3086,"code":4198,"language":3088,"meta":57,"style":57},"\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",[196,4200,4201,4206,4211,4216,4221,4234,4247,4252,4257,4268],{"__ignoreMap":57},[199,4202,4203],{"class":201,"line":202},[199,4204,4205],{"class":1454},"\u002F\u002Fc风格字符串\n",[199,4207,4208],{"class":201,"line":36},[199,4209,4210],{"class":1454},"\u002F\u002F注意事项：\n",[199,4212,4213],{"class":201,"line":73},[199,4214,4215],{"class":1454},"\u002F\u002F1.char字符串名[]\n",[199,4217,4218],{"class":201,"line":333},[199,4219,4220],{"class":1454},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[199,4222,4223,4225,4228,4230,4232],{"class":201,"line":227},[199,4224,3187],{"class":1086},[199,4226,4227],{"class":205}," str[]",[199,4229,895],{"class":1086},[199,4231,4134],{"class":898},[199,4233,1028],{"class":205},[199,4235,4236,4238,4240,4243,4245],{"class":201,"line":238},[199,4237,4114],{"class":205},[199,4239,4117],{"class":1086},[199,4241,4242],{"class":205},"str",[199,4244,4117],{"class":1086},[199,4246,4139],{"class":205},[199,4248,4249],{"class":201,"line":252},[199,4250,4251],{"class":1454},"\u002F\u002Fc++风格字符串\n",[199,4253,4254],{"class":201,"line":388},[199,4255,4256],{"class":1454},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[199,4258,4259,4262,4264,4266],{"class":201,"line":415},[199,4260,4261],{"class":205},"string str2",[199,4263,895],{"class":1086},[199,4265,4134],{"class":898},[199,4267,1028],{"class":205},[199,4269,4270,4272,4274,4277,4279],{"class":201,"line":426},[199,4271,4114],{"class":205},[199,4273,4117],{"class":1086},[199,4275,4276],{"class":205},"str2",[199,4278,4117],{"class":1086},[199,4280,4139],{"class":205},[19,4282,4284],{"id":4283},"_136布尔类型bool","1.3.6布尔类型bool",[190,4286,4288],{"className":3086,"code":4287,"language":3088,"meta":57,"style":57},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[196,4289,4290,4305],{"__ignoreMap":57},[199,4291,4292,4295,4298,4300,4303],{"class":201,"line":202},[199,4293,4294],{"class":1086},"bool",[199,4296,4297],{"class":205}," flag",[199,4299,895],{"class":1086},[199,4301,4302],{"class":1018},"true",[199,4304,1028],{"class":205},[199,4306,4307,4310,4313,4316,4318,4320],{"class":201,"line":36},[199,4308,4309],{"class":205},"cout",[199,4311,4312],{"class":1086},"\u003C\u003Csizeof",[199,4314,4315],{"class":205},"(flag)",[199,4317,4117],{"class":1086},[199,4319,4182],{"class":205},[199,4321,4322],{"class":1454}," \u002F\u002F查看布尔占内存空间\n",[14,4324,4326],{"id":4325},"_14键盘输入cin","1.4键盘输入cin",[190,4328,4330],{"className":3086,"code":4329,"language":3088,"meta":57,"style":57},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[196,4331,4332,4345,4362,4373],{"__ignoreMap":57},[199,4333,4334,4336,4339,4341,4343],{"class":201,"line":202},[199,4335,3100],{"class":1086},[199,4337,4338],{"class":205}," a",[199,4340,895],{"class":1086},[199,4342,1025],{"class":1018},[199,4344,1028],{"class":205},[199,4346,4347,4349,4351,4354,4356,4358,4360],{"class":201,"line":36},[199,4348,4309],{"class":205},[199,4350,4117],{"class":1086},[199,4352,4353],{"class":898},"\"请给整型变量a赋值\"",[199,4355,4117],{"class":1086},[199,4357,2867],{"class":205},[199,4359,4117],{"class":1086},[199,4361,4139],{"class":205},[199,4363,4364,4367,4370],{"class":201,"line":73},[199,4365,4366],{"class":205},"cin ",[199,4368,4369],{"class":1086},">>",[199,4371,4372],{"class":205}," a;\n",[199,4374,4375,4377,4379,4382,4385,4387,4389],{"class":201,"line":333},[199,4376,4114],{"class":205},[199,4378,4117],{"class":1086},[199,4380,4381],{"class":898}," \"整型变量a=\"",[199,4383,4384],{"class":1086}," \u003C\u003C",[199,4386,2867],{"class":205},[199,4388,4117],{"class":1086},[199,4390,4139],{"class":205},[14,4392,4394],{"id":4393},"_15运算符","1.5运算符",[19,4396,4398],{"id":4397},"_151算术运算符","1.5.1算术运算符",[31,4400,4401,4404],{},[55,4402],{"alt":57,"src":4403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[24,4406,4407,4410,4413],{},[27,4408,4409],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[27,4411,4412],{},"两个小数不可以做取模运算",[27,4414,4415],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[19,4417,4419],{"id":4418},"_152赋值运算符","1.5.2赋值运算符",[31,4421,4422],{},[55,4423],{"alt":57,"src":4424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[19,4426,4428],{"id":4427},"_153比较运算符","1.5.3比较运算符",[31,4430,4431],{},[55,4432],{"alt":57,"src":4433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[19,4435,4437],{"id":4436},"_154逻辑运算符","1.5.4逻辑运算符",[31,4439,4440],{},[55,4441],{"alt":57,"src":4442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,4444,4446],{"id":4445},"_16程序流程结构","1.6程序流程结构",[19,4448,4450],{"id":4449},"_161选择结构","1.6.1选择结构",[24,4452,4453],{},[27,4454,4455],{},"if语句\n单行、多行、多条件if语句",[190,4457,4459],{"className":3086,"code":4458,"language":3088,"meta":57,"style":57},"\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",[196,4460,4461,4466,4481,4486,4500,4504,4509,4518,4530,4534,4547,4551,4556,4560,4573,4577,4582,4601,4605,4618,4622,4650,4654,4670,4674,4678,4682,4695,4699],{"__ignoreMap":57},[199,4462,4463],{"class":201,"line":202},[199,4464,4465],{"class":1454},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[199,4467,4468,4471,4474,4476,4479],{"class":201,"line":36},[199,4469,4470],{"class":1086},"if",[199,4472,4473],{"class":205},"(score",[199,4475,1217],{"class":1086},[199,4477,4478],{"class":1018},"600",[199,4480,1594],{"class":205},[199,4482,4483],{"class":201,"line":73},[199,4484,4485],{"class":205},"{\n",[199,4487,4488,4491,4493,4496,4498],{"class":201,"line":333},[199,4489,4490],{"class":205},"    cout",[199,4492,4117],{"class":1086},[199,4494,4495],{"class":898},"'这是单行if语句'",[199,4497,4117],{"class":1086},[199,4499,4139],{"class":205},[199,4501,4502],{"class":201,"line":227},[199,4503,671],{"class":205},[199,4505,4506],{"class":201,"line":238},[199,4507,4508],{"class":1454},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[199,4510,4511,4513,4515],{"class":201,"line":252},[199,4512,4366],{"class":205},[199,4514,4369],{"class":1086},[199,4516,4517],{"class":205}," score\n",[199,4519,4520,4522,4524,4526,4528],{"class":201,"line":388},[199,4521,4470],{"class":1086},[199,4523,4473],{"class":205},[199,4525,1501],{"class":1086},[199,4527,4478],{"class":1018},[199,4529,1594],{"class":205},[199,4531,4532],{"class":201,"line":415},[199,4533,4485],{"class":205},[199,4535,4536,4538,4540,4543,4545],{"class":201,"line":426},[199,4537,4490],{"class":205},[199,4539,4369],{"class":1086},[199,4541,4542],{"class":898},"\"小于等于600\"",[199,4544,4117],{"class":1086},[199,4546,4139],{"class":205},[199,4548,4549],{"class":201,"line":1015},[199,4550,671],{"class":205},[199,4552,4553],{"class":201,"line":1031},[199,4554,4555],{"class":1086},"else\n",[199,4557,4558],{"class":201,"line":1043},[199,4559,4485],{"class":205},[199,4561,4562,4564,4566,4569,4571],{"class":201,"line":1049},[199,4563,4490],{"class":205},[199,4565,4369],{"class":1086},[199,4567,4568],{"class":898},"\"大于600\"",[199,4570,4369],{"class":1086},[199,4572,4139],{"class":205},[199,4574,4575],{"class":201,"line":1054},[199,4576,671],{"class":205},[199,4578,4579],{"class":201,"line":1062},[199,4580,4581],{"class":1454},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[199,4583,4584,4586,4588,4590,4592,4595,4597,4599],{"class":201,"line":1075},[199,4585,4470],{"class":1086},[199,4587,1484],{"class":205},[199,4589,1025],{"class":1018},[199,4591,887],{"class":1086},[199,4593,4594],{"class":205},"num",[199,4596,887],{"class":1086},[199,4598,3396],{"class":1018},[199,4600,1594],{"class":205},[199,4602,4603],{"class":201,"line":1092},[199,4604,4485],{"class":205},[199,4606,4607,4609,4611,4614,4616],{"class":201,"line":1107},[199,4608,4490],{"class":205},[199,4610,4117],{"class":1086},[199,4612,4613],{"class":898},"\"小于100\"",[199,4615,4117],{"class":1086},[199,4617,4139],{"class":205},[199,4619,4620],{"class":201,"line":1128},[199,4621,671],{"class":205},[199,4623,4624,4627,4630,4633,4636,4638,4641,4643,4645,4648],{"class":201,"line":1146},[199,4625,4626],{"class":1086},"else",[199,4628,4629],{"class":1086}," if",[199,4631,4632],{"class":205}," (nmu",[199,4634,4635],{"class":1086},">=",[199,4637,3396],{"class":1018},[199,4639,4640],{"class":1086},"&&",[199,4642,4594],{"class":205},[199,4644,887],{"class":1086},[199,4646,4647],{"class":1018},"200",[199,4649,1594],{"class":205},[199,4651,4652],{"class":201,"line":1163},[199,4653,4485],{"class":205},[199,4655,4656,4658,4660,4663,4665,4667],{"class":201,"line":1176},[199,4657,4490],{"class":205},[199,4659,4117],{"class":1086},[199,4661,4662],{"class":898},"\"不小于100且小于200\"",[199,4664,4117],{"class":1086},[199,4666,4182],{"class":205},[199,4668,4669],{"class":1454}," \u002F\u002F可以无限else if,python中是elif：\n",[199,4671,4672],{"class":201,"line":1189},[199,4673,671],{"class":205},[199,4675,4676],{"class":201,"line":1202},[199,4677,4555],{"class":1086},[199,4679,4680],{"class":201,"line":1207},[199,4681,4485],{"class":205},[199,4683,4684,4686,4688,4691,4693],{"class":201,"line":1212},[199,4685,4490],{"class":205},[199,4687,4117],{"class":1086},[199,4689,4690],{"class":898},"\"不小于200\"",[199,4692,4117],{"class":1086},[199,4694,4139],{"class":205},[199,4696,4697],{"class":201,"line":1225},[199,4698,671],{"class":205},[199,4700,4701],{"class":201,"line":1236},[199,4702,4703],{"class":1454},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[24,4705,4706],{"start":36},[27,4707,4708],{},"三目运算符",[190,4710,4712],{"className":3086,"code":4711,"language":3088,"meta":57,"style":57},"\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",[196,4713,4714,4719,4724,4750,4772,4789,4794,4817,4832],{"__ignoreMap":57},[199,4715,4716],{"class":201,"line":202},[199,4717,4718],{"class":1454},"\u002F\u002F创建三个变量a,b,c\n",[199,4720,4721],{"class":201,"line":36},[199,4722,4723],{"class":1454},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[199,4725,4726,4728,4730,4732,4734,4737,4739,4741,4744,4746,4748],{"class":201,"line":73},[199,4727,3100],{"class":1086},[199,4729,4338],{"class":205},[199,4731,895],{"class":1086},[199,4733,3779],{"class":1018},[199,4735,4736],{"class":205},",b",[199,4738,895],{"class":1086},[199,4740,3528],{"class":1018},[199,4742,4743],{"class":205},",c",[199,4745,895],{"class":1086},[199,4747,1025],{"class":1018},[199,4749,1028],{"class":205},[199,4751,4752,4754,4756,4759,4761,4763,4765,4767,4769],{"class":201,"line":333},[199,4753,3374],{"class":205},[199,4755,895],{"class":1086},[199,4757,4758],{"class":205},"(a",[199,4760,1217],{"class":1086},[199,4762,3349],{"class":205},[199,4764,4060],{"class":1086},[199,4766,2867],{"class":205},[199,4768,3938],{"class":1086},[199,4770,4771],{"class":205},"b)\n",[199,4773,4774,4776,4778,4781,4783,4785,4787],{"class":201,"line":227},[199,4775,4309],{"class":205},[199,4777,4117],{"class":1086},[199,4779,4780],{"class":898},"\"c=\"",[199,4782,4117],{"class":1086},[199,4784,3374],{"class":205},[199,4786,4117],{"class":1086},[199,4788,4139],{"class":205},[199,4790,4791],{"class":201,"line":238},[199,4792,4793],{"class":1454},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[199,4795,4796,4798,4800,4802,4804,4806,4808,4811,4813,4815],{"class":201,"line":252},[199,4797,4758],{"class":205},[199,4799,1217],{"class":1086},[199,4801,3349],{"class":205},[199,4803,4060],{"class":1086},[199,4805,2867],{"class":205},[199,4807,3938],{"class":1086},[199,4809,4810],{"class":205},"b)",[199,4812,895],{"class":1086},[199,4814,3396],{"class":1018},[199,4816,1028],{"class":205},[199,4818,4819,4821,4823,4825,4827,4829],{"class":201,"line":388},[199,4820,4309],{"class":205},[199,4822,4117],{"class":1086},[199,4824,2867],{"class":205},[199,4826,4117],{"class":1086},[199,4828,4182],{"class":205},[199,4830,4831],{"class":1454}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[199,4833,4834,4836,4838,4840,4842,4844],{"class":201,"line":415},[199,4835,4309],{"class":205},[199,4837,4117],{"class":1086},[199,4839,3349],{"class":205},[199,4841,4117],{"class":1086},[199,4843,4182],{"class":205},[199,4845,4846],{"class":1454}," \u002F\u002F10   a>b,b还是原值\n",[24,4848,4849],{"start":73},[27,4850,4851],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[190,4853,4855],{"className":3086,"code":4854,"language":3088,"meta":57,"style":57},"\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",[196,4856,4857,4862,4870,4883,4893,4897,4911,4924,4934,4942,4947,4972,4993,5015,5036,5058,5079,5099,5103],{"__ignoreMap":57},[199,4858,4859],{"class":201,"line":202},[199,4860,4861],{"class":1454},"\u002F\u002F案例-电影打分\n",[199,4863,4864,4867],{"class":201,"line":36},[199,4865,4866],{"class":1086},"#include",[199,4868,4869],{"class":898},"\u003Ciostream>\n",[199,4871,4872,4875,4878,4881],{"class":201,"line":73},[199,4873,4874],{"class":1086},"using",[199,4876,4877],{"class":1086}," namespace",[199,4879,4880],{"class":878}," std",[199,4882,1028],{"class":205},[199,4884,4885,4887,4890],{"class":201,"line":333},[199,4886,3100],{"class":1086},[199,4888,4889],{"class":878}," main",[199,4891,4892],{"class":205},"()\n",[199,4894,4895],{"class":201,"line":227},[199,4896,4485],{"class":205},[199,4898,4899,4902,4905,4907,4909],{"class":201,"line":238},[199,4900,4901],{"class":1086},"    int",[199,4903,4904],{"class":205}," score",[199,4906,895],{"class":1086},[199,4908,1025],{"class":1018},[199,4910,1028],{"class":205},[199,4912,4913,4915,4917,4920,4922],{"class":201,"line":252},[199,4914,4490],{"class":205},[199,4916,4117],{"class":1086},[199,4918,4919],{"class":898},"\"电影打分：\"",[199,4921,4117],{"class":1086},[199,4923,4139],{"class":205},[199,4925,4926,4929,4931],{"class":201,"line":388},[199,4927,4928],{"class":205},"    cin",[199,4930,4369],{"class":1086},[199,4932,4933],{"class":205},"score;\n",[199,4935,4936,4939],{"class":201,"line":415},[199,4937,4938],{"class":1086},"    switch",[199,4940,4941],{"class":205},"(score)\n",[199,4943,4944],{"class":201,"line":426},[199,4945,4946],{"class":205},"    {\n",[199,4948,4949,4952,4955,4958,4960,4963,4965,4967,4970],{"class":201,"line":1015},[199,4950,4951],{"class":1086},"        case",[199,4953,4954],{"class":1018}," 10",[199,4956,4957],{"class":205},":cout",[199,4959,4117],{"class":1086},[199,4961,4962],{"class":898},"\"经典\"",[199,4964,4117],{"class":1086},[199,4966,4182],{"class":205},[199,4968,4969],{"class":1086},"break",[199,4971,1028],{"class":205},[199,4973,4974,4976,4979,4981,4983,4985,4987,4989,4991],{"class":201,"line":1031},[199,4975,4951],{"class":1086},[199,4977,4978],{"class":1018}," 9",[199,4980,4957],{"class":205},[199,4982,4117],{"class":1086},[199,4984,4962],{"class":898},[199,4986,4117],{"class":1086},[199,4988,4182],{"class":205},[199,4990,4969],{"class":1086},[199,4992,1028],{"class":205},[199,4994,4995,4997,5000,5002,5004,5007,5009,5011,5013],{"class":201,"line":1043},[199,4996,4951],{"class":1086},[199,4998,4999],{"class":1018}," 8",[199,5001,4957],{"class":205},[199,5003,4117],{"class":1086},[199,5005,5006],{"class":898},"\"非常好\"",[199,5008,4117],{"class":1086},[199,5010,4182],{"class":205},[199,5012,4969],{"class":1086},[199,5014,1028],{"class":205},[199,5016,5017,5019,5022,5024,5026,5028,5030,5032,5034],{"class":201,"line":1049},[199,5018,4951],{"class":1086},[199,5020,5021],{"class":1018}," 7",[199,5023,4957],{"class":205},[199,5025,4117],{"class":1086},[199,5027,5006],{"class":898},[199,5029,4117],{"class":1086},[199,5031,4182],{"class":205},[199,5033,4969],{"class":1086},[199,5035,1028],{"class":205},[199,5037,5038,5040,5043,5045,5047,5050,5052,5054,5056],{"class":201,"line":1054},[199,5039,4951],{"class":1086},[199,5041,5042],{"class":1018}," 6",[199,5044,4957],{"class":205},[199,5046,4117],{"class":1086},[199,5048,5049],{"class":898},"\"一般\"",[199,5051,4117],{"class":1086},[199,5053,4182],{"class":205},[199,5055,4969],{"class":1086},[199,5057,1028],{"class":205},[199,5059,5060,5062,5065,5067,5069,5071,5073,5075,5077],{"class":201,"line":1062},[199,5061,4951],{"class":1086},[199,5063,5064],{"class":1018}," 5",[199,5066,4957],{"class":205},[199,5068,4117],{"class":1086},[199,5070,5049],{"class":898},[199,5072,4117],{"class":1086},[199,5074,4182],{"class":205},[199,5076,4969],{"class":1086},[199,5078,1028],{"class":205},[199,5080,5081,5084,5086,5088,5091,5093,5095,5097],{"class":201,"line":1075},[199,5082,5083],{"class":1086},"        default",[199,5085,4957],{"class":205},[199,5087,4117],{"class":1086},[199,5089,5090],{"class":898},"\"烂片\"",[199,5092,4117],{"class":1086},[199,5094,4182],{"class":205},[199,5096,4969],{"class":1086},[199,5098,1028],{"class":205},[199,5100,5101],{"class":201,"line":1092},[199,5102,2097],{"class":205},[199,5104,5105],{"class":201,"line":1107},[199,5106,671],{"class":205},[31,5108,5109],{},"if和switch区别：",[176,5111,5112,5115],{},[27,5113,5114],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[27,5116,5117],{},"switch优点：结构清晰，执行效率高",[19,5119,5121],{"id":5120},"_162循环结构","1.6.2循环结构",[24,5123,5124],{},[27,5125,5126],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[190,5128,5130],{"className":3086,"code":5129,"language":3088,"meta":57,"style":57},"\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",[196,5131,5132,5137,5145,5149,5162,5176,5180,5200,5209,5213,5225],{"__ignoreMap":57},[199,5133,5134],{"class":201,"line":202},[199,5135,5136],{"class":1454},"\u002F\u002F打印0-9数字\n",[199,5138,5139,5141,5143],{"class":201,"line":36},[199,5140,3100],{"class":1086},[199,5142,4889],{"class":878},[199,5144,4892],{"class":205},[199,5146,5147],{"class":201,"line":73},[199,5148,4485],{"class":205},[199,5150,5151,5153,5156,5158,5160],{"class":201,"line":333},[199,5152,4901],{"class":1086},[199,5154,5155],{"class":205}," num",[199,5157,895],{"class":1086},[199,5159,1025],{"class":1018},[199,5161,1028],{"class":205},[199,5163,5164,5167,5170,5172,5174],{"class":201,"line":227},[199,5165,5166],{"class":1086},"    while",[199,5168,5169],{"class":205},"(num",[199,5171,887],{"class":1086},[199,5173,3528],{"class":1018},[199,5175,1594],{"class":205},[199,5177,5178],{"class":201,"line":238},[199,5179,4946],{"class":205},[199,5181,5182,5185,5188,5190,5192,5194,5197],{"class":201,"line":252},[199,5183,5184],{"class":878},"       std",[199,5186,5187],{"class":205},"::cout",[199,5189,4117],{"class":1086},[199,5191,4594],{"class":205},[199,5193,4117],{"class":1086},[199,5195,5196],{"class":878},"std",[199,5198,5199],{"class":205},"::endl;\n",[199,5201,5202,5205,5207],{"class":201,"line":388},[199,5203,5204],{"class":205},"        num",[199,5206,1510],{"class":1086},[199,5208,1028],{"class":205},[199,5210,5211],{"class":201,"line":415},[199,5212,2097],{"class":205},[199,5214,5215,5218,5220,5223],{"class":201,"line":426},[199,5216,5217],{"class":878},"    system",[199,5219,1537],{"class":205},[199,5221,5222],{"class":898},"\"pause\"",[199,5224,1594],{"class":205},[199,5226,5227],{"class":201,"line":1015},[199,5228,671],{"class":205},[31,5230,5231],{},"注意：写好循环条件，避免死循环情况",[190,5233,5235],{"className":3086,"code":5234,"language":3088,"meta":57,"style":57},"\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",[196,5236,5237,5242,5249,5256,5266,5274,5278,5283,5310,5314,5319,5327,5354,5359,5364,5377,5387,5391,5401,5406,5418,5423,5437,5441,5456,5460,5473,5477,5482,5486,5499,5506,5510,5515,5520,5524],{"__ignoreMap":57},[199,5238,5239],{"class":201,"line":202},[199,5240,5241],{"class":1454},"\u002F\u002F循环结构-猜数字\n",[199,5243,5244,5246],{"class":201,"line":36},[199,5245,4866],{"class":1086},[199,5247,5248],{"class":898}," \u003Ciostream>\n",[199,5250,5251,5253],{"class":201,"line":73},[199,5252,4866],{"class":1086},[199,5254,5255],{"class":898}," \u003Cctime>\n",[199,5257,5258,5260,5262,5264],{"class":201,"line":333},[199,5259,4874],{"class":1086},[199,5261,4877],{"class":1086},[199,5263,4880],{"class":878},[199,5265,1028],{"class":205},[199,5267,5268,5270,5272],{"class":201,"line":227},[199,5269,3100],{"class":1086},[199,5271,4889],{"class":878},[199,5273,4892],{"class":205},[199,5275,5276],{"class":201,"line":238},[199,5277,4485],{"class":205},[199,5279,5280],{"class":201,"line":252},[199,5281,5282],{"class":1454},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[199,5284,5285,5288,5291,5294,5297,5299,5302,5304,5307],{"class":201,"line":388},[199,5286,5287],{"class":878},"    srand",[199,5289,5290],{"class":205},"((",[199,5292,5293],{"class":1086},"unsigned",[199,5295,5296],{"class":1086}," int",[199,5298,3512],{"class":205},[199,5300,5301],{"class":878},"time",[199,5303,1537],{"class":205},[199,5305,5306],{"class":1018},"NULL",[199,5308,5309],{"class":205},"));\n",[199,5311,5312],{"class":201,"line":415},[199,5313,907],{"emptyLinePlaceholder":906},[199,5315,5316],{"class":201,"line":426},[199,5317,5318],{"class":1454},"    \u002F\u002F1.系统生成随机数\n",[199,5320,5321,5324],{"class":201,"line":1015},[199,5322,5323],{"class":1454},"    \u002F\u002Frand()%100",[199,5325,5326],{"class":1454}," \u002F\u002F生成0-99的随机数\n",[199,5328,5329,5331,5333,5335,5338,5341,5343,5345,5347,5349,5351],{"class":201,"line":1031},[199,5330,4901],{"class":1086},[199,5332,5155],{"class":205},[199,5334,895],{"class":1086},[199,5336,5337],{"class":878},"rand",[199,5339,5340],{"class":205},"()",[199,5342,3412],{"class":1086},[199,5344,3396],{"class":1018},[199,5346,2028],{"class":1086},[199,5348,1115],{"class":1018},[199,5350,3149],{"class":205},[199,5352,5353],{"class":1454}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[199,5355,5356],{"class":201,"line":1043},[199,5357,5358],{"class":1454},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[199,5360,5361],{"class":201,"line":1049},[199,5362,5363],{"class":1454},"    \u002F\u002F2.玩家猜测\n",[199,5365,5366,5368,5371,5373,5375],{"class":201,"line":1054},[199,5367,4901],{"class":1086},[199,5369,5370],{"class":205}," val",[199,5372,895],{"class":1086},[199,5374,1025],{"class":1018},[199,5376,1028],{"class":205},[199,5378,5379,5381,5383,5385],{"class":201,"line":1062},[199,5380,5166],{"class":1086},[199,5382,1484],{"class":205},[199,5384,1115],{"class":1018},[199,5386,1594],{"class":205},[199,5388,5389],{"class":201,"line":1075},[199,5390,4946],{"class":205},[199,5392,5393,5396,5398],{"class":201,"line":1092},[199,5394,5395],{"class":205},"        cin",[199,5397,4369],{"class":1086},[199,5399,5400],{"class":205},"val;\n",[199,5402,5403],{"class":201,"line":1107},[199,5404,5405],{"class":1454},"        \u002F\u002F3.判断玩家猜测\n",[199,5407,5408,5410,5413,5415],{"class":201,"line":1128},[199,5409,2017],{"class":1086},[199,5411,5412],{"class":205},"(val",[199,5414,887],{"class":1086},[199,5416,5417],{"class":205},"num) \n",[199,5419,5420],{"class":201,"line":1146},[199,5421,5422],{"class":205},"        {\n",[199,5424,5425,5428,5430,5433,5435],{"class":201,"line":1163},[199,5426,5427],{"class":205},"            cout",[199,5429,4117],{"class":1086},[199,5431,5432],{"class":898},"\"猜小了！\"",[199,5434,4117],{"class":1086},[199,5436,4139],{"class":205},[199,5438,5439],{"class":201,"line":1176},[199,5440,1046],{"class":205},[199,5442,5443,5446,5448,5451,5453],{"class":201,"line":1189},[199,5444,5445],{"class":1086},"        else",[199,5447,4629],{"class":1086},[199,5449,5450],{"class":205}," (val",[199,5452,1217],{"class":1086},[199,5454,5455],{"class":205},"num)\n",[199,5457,5458],{"class":201,"line":1202},[199,5459,5422],{"class":205},[199,5461,5462,5464,5466,5469,5471],{"class":201,"line":1207},[199,5463,5427],{"class":205},[199,5465,4117],{"class":1086},[199,5467,5468],{"class":898},"\"猜大了！\"",[199,5470,4117],{"class":1086},[199,5472,4139],{"class":205},[199,5474,5475],{"class":201,"line":1212},[199,5476,1046],{"class":205},[199,5478,5479],{"class":201,"line":1225},[199,5480,5481],{"class":1086},"        else\n",[199,5483,5484],{"class":201,"line":1236},[199,5485,5422],{"class":205},[199,5487,5488,5490,5492,5495,5497],{"class":201,"line":1249},[199,5489,5427],{"class":205},[199,5491,4117],{"class":1086},[199,5493,5494],{"class":898},"\"猜对了！\"",[199,5496,4117],{"class":1086},[199,5498,4139],{"class":205},[199,5500,5501,5504],{"class":201,"line":1262},[199,5502,5503],{"class":1086},"            break",[199,5505,1028],{"class":205},[199,5507,5508],{"class":201,"line":1275},[199,5509,1046],{"class":205},[199,5511,5512],{"class":201,"line":1287},[199,5513,5514],{"class":1454},"        \u002F\u002F猜对 退出游戏\n",[199,5516,5517],{"class":201,"line":1292},[199,5518,5519],{"class":1454},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[199,5521,5522],{"class":201,"line":1297},[199,5523,2097],{"class":205},[199,5525,5526],{"class":201,"line":1310},[199,5527,671],{"class":205},[24,5529,5530],{"start":36},[27,5531,5532,5533,5536],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[49,5534,5535],{},"do...while会先执行一次循环语句","，在判断循环语句",[190,5538,5540],{"className":3086,"code":5539,"language":3088,"meta":57,"style":57},"\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",[196,5541,5542,5547,5555,5559,5571,5579,5583,5600,5607,5611,5624,5634],{"__ignoreMap":57},[199,5543,5544],{"class":201,"line":202},[199,5545,5546],{"class":1454},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[199,5548,5549,5551,5553],{"class":201,"line":36},[199,5550,3100],{"class":1086},[199,5552,4889],{"class":878},[199,5554,4892],{"class":205},[199,5556,5557],{"class":201,"line":73},[199,5558,4485],{"class":205},[199,5560,5561,5563,5565,5567,5569],{"class":201,"line":333},[199,5562,4901],{"class":1086},[199,5564,5155],{"class":205},[199,5566,895],{"class":1086},[199,5568,1025],{"class":1018},[199,5570,1028],{"class":205},[199,5572,5573,5576],{"class":201,"line":227},[199,5574,5575],{"class":1086},"    do",[199,5577,5578],{"class":205}," \n",[199,5580,5581],{"class":201,"line":238},[199,5582,4946],{"class":205},[199,5584,5585,5588,5590,5592,5594,5596,5598],{"class":201,"line":252},[199,5586,5587],{"class":878},"        std",[199,5589,5187],{"class":205},[199,5591,4117],{"class":1086},[199,5593,4594],{"class":205},[199,5595,4117],{"class":1086},[199,5597,5196],{"class":878},[199,5599,5199],{"class":205},[199,5601,5602,5604],{"class":201,"line":388},[199,5603,5204],{"class":205},[199,5605,5606],{"class":1086},"++\n",[199,5608,5609],{"class":201,"line":415},[199,5610,2097],{"class":205},[199,5612,5613,5615,5617,5619,5621],{"class":201,"line":426},[199,5614,5166],{"class":1086},[199,5616,5169],{"class":205},[199,5618,887],{"class":1086},[199,5620,3528],{"class":1018},[199,5622,5623],{"class":205},");\n",[199,5625,5626,5628,5630,5632],{"class":201,"line":1015},[199,5627,5217],{"class":878},[199,5629,1537],{"class":205},[199,5631,5222],{"class":898},[199,5633,5623],{"class":205},[199,5635,5636],{"class":201,"line":1031},[199,5637,671],{"class":205},[31,5639,5640],{},"案例-水仙花数",[31,5642,5643],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[31,5645,5646],{},"例如：1^3+5^3+3^3=153",[31,5648,5649],{},"请用do...while语句，求出所有3位数的水仙花数",[190,5651,5653],{"className":3086,"code":5652,"language":3088,"meta":57,"style":57},"#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",[196,5654,5655,5661,5671,5679,5683,5688,5700,5706,5710,5715,5731,5747,5763,5778,5797,5812,5860,5864,5876,5880,5888,5892,5906],{"__ignoreMap":57},[199,5656,5657,5659],{"class":201,"line":202},[199,5658,4866],{"class":1086},[199,5660,5248],{"class":898},[199,5662,5663,5665,5667,5669],{"class":201,"line":36},[199,5664,4874],{"class":1086},[199,5666,4877],{"class":1086},[199,5668,4880],{"class":878},[199,5670,1028],{"class":205},[199,5672,5673,5675,5677],{"class":201,"line":73},[199,5674,3100],{"class":1086},[199,5676,4889],{"class":878},[199,5678,4892],{"class":205},[199,5680,5681],{"class":201,"line":333},[199,5682,4485],{"class":205},[199,5684,5685],{"class":201,"line":227},[199,5686,5687],{"class":1454},"    \u002F\u002F1.先打印所有三位数字\n",[199,5689,5690,5692,5694,5696,5698],{"class":201,"line":238},[199,5691,4901],{"class":1086},[199,5693,5155],{"class":205},[199,5695,895],{"class":1086},[199,5697,3396],{"class":1018},[199,5699,1028],{"class":205},[199,5701,5702,5704],{"class":201,"line":252},[199,5703,5575],{"class":1086},[199,5705,5578],{"class":205},[199,5707,5708],{"class":201,"line":388},[199,5709,4946],{"class":205},[199,5711,5712],{"class":201,"line":415},[199,5713,5714],{"class":1454},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[199,5716,5717,5720,5722,5724,5726,5728],{"class":201,"line":426},[199,5718,5719],{"class":1086},"        int",[199,5721,4338],{"class":205},[199,5723,895],{"class":1086},[199,5725,1025],{"class":1018},[199,5727,3149],{"class":205},[199,5729,5730],{"class":1454}," \u002F\u002F个位\n",[199,5732,5733,5735,5738,5740,5742,5744],{"class":201,"line":1015},[199,5734,5719],{"class":1086},[199,5736,5737],{"class":205}," b",[199,5739,895],{"class":1086},[199,5741,1025],{"class":1018},[199,5743,3149],{"class":205},[199,5745,5746],{"class":1454}," \u002F\u002F十位\n",[199,5748,5749,5751,5754,5756,5758,5760],{"class":201,"line":1031},[199,5750,5719],{"class":1086},[199,5752,5753],{"class":205}," c",[199,5755,895],{"class":1086},[199,5757,1025],{"class":1018},[199,5759,3149],{"class":205},[199,5761,5762],{"class":1454}," \u002F\u002F百位\n",[199,5764,5765,5768,5770,5772,5774,5776],{"class":201,"line":1043},[199,5766,5767],{"class":205},"        a",[199,5769,895],{"class":1086},[199,5771,4594],{"class":205},[199,5773,3412],{"class":1086},[199,5775,3528],{"class":1018},[199,5777,1028],{"class":205},[199,5779,5780,5783,5785,5787,5789,5791,5793,5795],{"class":201,"line":1049},[199,5781,5782],{"class":205},"        b",[199,5784,895],{"class":1086},[199,5786,4594],{"class":205},[199,5788,3664],{"class":1086},[199,5790,3528],{"class":1018},[199,5792,3412],{"class":1086},[199,5794,3528],{"class":1018},[199,5796,1028],{"class":205},[199,5798,5799,5802,5804,5806,5808,5810],{"class":201,"line":1054},[199,5800,5801],{"class":205},"        c",[199,5803,895],{"class":1086},[199,5805,4594],{"class":205},[199,5807,3664],{"class":1086},[199,5809,3396],{"class":1018},[199,5811,1028],{"class":205},[199,5813,5814,5816,5818,5820,5822,5824,5826,5828,5830,5832,5834,5836,5838,5840,5842,5844,5846,5848,5851,5854,5857],{"class":201,"line":1062},[199,5815,2017],{"class":1086},[199,5817,4758],{"class":205},[199,5819,3537],{"class":1086},[199,5821,2867],{"class":205},[199,5823,3537],{"class":1086},[199,5825,2867],{"class":205},[199,5827,2028],{"class":1086},[199,5829,3349],{"class":205},[199,5831,3537],{"class":1086},[199,5833,3349],{"class":205},[199,5835,3537],{"class":1086},[199,5837,3349],{"class":205},[199,5839,2028],{"class":1086},[199,5841,3374],{"class":205},[199,5843,3537],{"class":1086},[199,5845,3374],{"class":205},[199,5847,3537],{"class":1086},[199,5849,5850],{"class":205},"c ",[199,5852,5853],{"class":1086},"==",[199,5855,5856],{"class":205}," num)",[199,5858,5859],{"class":1454}," \u002F\u002F如果是水仙花数，才打印\n",[199,5861,5862],{"class":201,"line":1075},[199,5863,5422],{"class":205},[199,5865,5866,5868,5870,5872,5874],{"class":201,"line":1092},[199,5867,5427],{"class":205},[199,5869,4117],{"class":1086},[199,5871,4594],{"class":205},[199,5873,4117],{"class":1086},[199,5875,4139],{"class":205},[199,5877,5878],{"class":201,"line":1107},[199,5879,1046],{"class":205},[199,5881,5882,5884,5886],{"class":201,"line":1128},[199,5883,5204],{"class":205},[199,5885,1510],{"class":1086},[199,5887,1028],{"class":205},[199,5889,5890],{"class":201,"line":1146},[199,5891,2097],{"class":205},[199,5893,5894,5896,5899,5901,5904],{"class":201,"line":1163},[199,5895,5166],{"class":1086},[199,5897,5898],{"class":205}," (num ",[199,5900,887],{"class":1086},[199,5902,5903],{"class":1018}," 1000",[199,5905,5623],{"class":205},[199,5907,5908],{"class":201,"line":1176},[199,5909,671],{"class":205},[24,5911,5912],{"start":73},[27,5913,5914],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[190,5916,5918],{"className":3086,"code":5917,"language":3088,"meta":57,"style":57},"\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",[196,5919,5920,5925,5954,5958,5970,5974,5979,5990,5997,6001,6015,6019,6026,6030,6042,6051],{"__ignoreMap":57},[199,5921,5922],{"class":201,"line":202},[199,5923,5924],{"class":1454},"\u002F\u002F从数字0-9打印\n",[199,5926,5927,5930,5932,5934,5937,5939,5941,5944,5946,5948,5950,5952],{"class":201,"line":36},[199,5928,5929],{"class":1086},"for",[199,5931,1537],{"class":205},[199,5933,3100],{"class":1086},[199,5935,5936],{"class":205}," i",[199,5938,895],{"class":1086},[199,5940,1025],{"class":1018},[199,5942,5943],{"class":205},";i",[199,5945,887],{"class":1086},[199,5947,3528],{"class":1018},[199,5949,5943],{"class":205},[199,5951,1510],{"class":1086},[199,5953,1594],{"class":205},[199,5955,5956],{"class":201,"line":73},[199,5957,4485],{"class":205},[199,5959,5960,5962,5964,5966,5968],{"class":201,"line":333},[199,5961,4490],{"class":205},[199,5963,4117],{"class":1086},[199,5965,1548],{"class":205},[199,5967,4117],{"class":1086},[199,5969,4139],{"class":205},[199,5971,5972],{"class":201,"line":227},[199,5973,671],{"class":205},[199,5975,5976],{"class":201,"line":238},[199,5977,5978],{"class":1454},"\u002F\u002F上式可以进行拆分\n",[199,5980,5981,5983,5985,5987],{"class":201,"line":252},[199,5982,3100],{"class":1086},[199,5984,5936],{"class":205},[199,5986,895],{"class":1086},[199,5988,5989],{"class":1018},"0\n",[199,5991,5992,5994],{"class":201,"line":388},[199,5993,5929],{"class":1086},[199,5995,5996],{"class":205},"(;;;)\n",[199,5998,5999],{"class":201,"line":415},[199,6000,4485],{"class":205},[199,6002,6003,6006,6009,6011,6013],{"class":201,"line":426},[199,6004,6005],{"class":1086},"    if",[199,6007,6008],{"class":205},"(i",[199,6010,4635],{"class":1086},[199,6012,3528],{"class":1018},[199,6014,1594],{"class":205},[199,6016,6017],{"class":201,"line":1015},[199,6018,4946],{"class":205},[199,6020,6021,6024],{"class":201,"line":1031},[199,6022,6023],{"class":1086},"        break",[199,6025,1028],{"class":205},[199,6027,6028],{"class":201,"line":1043},[199,6029,2097],{"class":205},[199,6031,6032,6034,6036,6038,6040],{"class":201,"line":1049},[199,6033,4490],{"class":205},[199,6035,4117],{"class":1086},[199,6037,1548],{"class":205},[199,6039,4117],{"class":1086},[199,6041,4139],{"class":205},[199,6043,6044,6047,6049],{"class":201,"line":1054},[199,6045,6046],{"class":205},"    i",[199,6048,1510],{"class":1086},[199,6050,1028],{"class":205},[199,6052,6053],{"class":201,"line":1062},[199,6054,671],{"class":205},[31,6056,6057],{},"小练习",[190,6059,6061],{"className":3086,"code":6060,"language":3088,"meta":57,"style":57},"#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",[196,6062,6063,6069,6079,6087,6091,6096,6101,6127,6131,6136,6141,6182,6186,6199,6203,6207,6211,6223,6227,6231],{"__ignoreMap":57},[199,6064,6065,6067],{"class":201,"line":202},[199,6066,4866],{"class":1086},[199,6068,4869],{"class":898},[199,6070,6071,6073,6075,6077],{"class":201,"line":36},[199,6072,4874],{"class":1086},[199,6074,4877],{"class":1086},[199,6076,4880],{"class":878},[199,6078,1028],{"class":205},[199,6080,6081,6083,6085],{"class":201,"line":73},[199,6082,3100],{"class":1086},[199,6084,4889],{"class":878},[199,6086,4892],{"class":205},[199,6088,6089],{"class":201,"line":333},[199,6090,4485],{"class":205},[199,6092,6093],{"class":201,"line":227},[199,6094,6095],{"class":1454},"    \u002F\u002F敲桌子案例\n",[199,6097,6098],{"class":201,"line":238},[199,6099,6100],{"class":1454},"    \u002F\u002F1.先输出1-100的数字\n",[199,6102,6103,6105,6107,6109,6111,6113,6115,6117,6119,6121,6123,6125],{"class":201,"line":252},[199,6104,1937],{"class":1086},[199,6106,1537],{"class":205},[199,6108,3100],{"class":1086},[199,6110,5936],{"class":205},[199,6112,895],{"class":1086},[199,6114,1115],{"class":1018},[199,6116,1507],{"class":205},[199,6118,1501],{"class":1086},[199,6120,3396],{"class":1018},[199,6122,1507],{"class":205},[199,6124,1510],{"class":1086},[199,6126,1594],{"class":205},[199,6128,6129],{"class":201,"line":388},[199,6130,4946],{"class":205},[199,6132,6133],{"class":201,"line":415},[199,6134,6135],{"class":1454},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[199,6137,6138],{"class":201,"line":426},[199,6139,6140],{"class":1454},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[199,6142,6143,6145,6147,6149,6151,6153,6155,6158,6160,6162,6164,6166,6168,6170,6172,6174,6176,6178,6180],{"class":201,"line":1015},[199,6144,2017],{"class":1086},[199,6146,6008],{"class":205},[199,6148,3412],{"class":1086},[199,6150,3452],{"class":1018},[199,6152,5853],{"class":1086},[199,6154,1025],{"class":1018},[199,6156,6157],{"class":1086}," ||",[199,6159,5936],{"class":205},[199,6161,3412],{"class":1086},[199,6163,3528],{"class":1018},[199,6165,5853],{"class":1086},[199,6167,3452],{"class":1018},[199,6169,6157],{"class":1086},[199,6171,5936],{"class":205},[199,6173,3664],{"class":1086},[199,6175,3528],{"class":1018},[199,6177,5853],{"class":1086},[199,6179,3452],{"class":1018},[199,6181,1594],{"class":205},[199,6183,6184],{"class":201,"line":1031},[199,6185,5422],{"class":205},[199,6187,6188,6190,6192,6195,6197],{"class":201,"line":1043},[199,6189,5427],{"class":205},[199,6191,4117],{"class":1086},[199,6193,6194],{"class":898},"\"敲桌子\"",[199,6196,4117],{"class":1086},[199,6198,4139],{"class":205},[199,6200,6201],{"class":201,"line":1049},[199,6202,1046],{"class":205},[199,6204,6205],{"class":201,"line":1054},[199,6206,5481],{"class":1086},[199,6208,6209],{"class":201,"line":1062},[199,6210,5422],{"class":205},[199,6212,6213,6215,6217,6219,6221],{"class":201,"line":1075},[199,6214,5427],{"class":205},[199,6216,4117],{"class":1086},[199,6218,1548],{"class":205},[199,6220,4117],{"class":1086},[199,6222,4139],{"class":205},[199,6224,6225],{"class":201,"line":1092},[199,6226,1046],{"class":205},[199,6228,6229],{"class":201,"line":1107},[199,6230,2097],{"class":205},[199,6232,6233],{"class":201,"line":1128},[199,6234,671],{"class":205},[31,6236,6237],{},"嵌套实现星图",[190,6239,6241],{"className":3086,"code":6240,"language":3088,"meta":57,"style":57},"#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",[196,6242,6243,6249,6259,6267,6271,6297,6301,6329,6333,6344,6348,6357,6361],{"__ignoreMap":57},[199,6244,6245,6247],{"class":201,"line":202},[199,6246,4866],{"class":1086},[199,6248,4869],{"class":898},[199,6250,6251,6253,6255,6257],{"class":201,"line":36},[199,6252,4874],{"class":1086},[199,6254,4877],{"class":1086},[199,6256,4880],{"class":878},[199,6258,1028],{"class":205},[199,6260,6261,6263,6265],{"class":201,"line":73},[199,6262,3100],{"class":1086},[199,6264,4889],{"class":878},[199,6266,4892],{"class":205},[199,6268,6269],{"class":201,"line":333},[199,6270,4485],{"class":205},[199,6272,6273,6275,6277,6279,6281,6283,6285,6287,6289,6291,6293,6295],{"class":201,"line":227},[199,6274,1937],{"class":1086},[199,6276,1484],{"class":205},[199,6278,3100],{"class":1086},[199,6280,5936],{"class":205},[199,6282,895],{"class":1086},[199,6284,1025],{"class":1018},[199,6286,5943],{"class":205},[199,6288,887],{"class":1086},[199,6290,3528],{"class":1018},[199,6292,5943],{"class":205},[199,6294,1510],{"class":1086},[199,6296,1594],{"class":205},[199,6298,6299],{"class":201,"line":238},[199,6300,4946],{"class":205},[199,6302,6303,6305,6307,6309,6312,6314,6316,6319,6321,6323,6325,6327],{"class":201,"line":252},[199,6304,1481],{"class":1086},[199,6306,1484],{"class":205},[199,6308,3100],{"class":1086},[199,6310,6311],{"class":205}," j",[199,6313,895],{"class":1086},[199,6315,1025],{"class":1018},[199,6317,6318],{"class":205},";j",[199,6320,887],{"class":1086},[199,6322,3528],{"class":1018},[199,6324,6318],{"class":205},[199,6326,1510],{"class":1086},[199,6328,1594],{"class":205},[199,6330,6331],{"class":201,"line":388},[199,6332,5422],{"class":205},[199,6334,6335,6337,6339,6342],{"class":201,"line":415},[199,6336,5427],{"class":205},[199,6338,4117],{"class":1086},[199,6340,6341],{"class":898},"\"*\"",[199,6343,1028],{"class":205},[199,6345,6346],{"class":201,"line":426},[199,6347,1046],{"class":205},[199,6349,6350,6353,6355],{"class":201,"line":1015},[199,6351,6352],{"class":205},"        cout",[199,6354,4117],{"class":1086},[199,6356,4139],{"class":205},[199,6358,6359],{"class":201,"line":1031},[199,6360,2097],{"class":205},[199,6362,6363],{"class":201,"line":1043},[199,6364,671],{"class":205},[31,6366,6367],{},"乘法口诀表",[190,6369,6371],{"className":3086,"code":6370,"language":3088,"meta":57,"style":57},"#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",[196,6372,6373,6379,6389,6397,6401,6427,6431,6456,6460,6500,6504,6512,6516],{"__ignoreMap":57},[199,6374,6375,6377],{"class":201,"line":202},[199,6376,4866],{"class":1086},[199,6378,5248],{"class":898},[199,6380,6381,6383,6385,6387],{"class":201,"line":36},[199,6382,4874],{"class":1086},[199,6384,4877],{"class":1086},[199,6386,4880],{"class":878},[199,6388,1028],{"class":205},[199,6390,6391,6393,6395],{"class":201,"line":73},[199,6392,3100],{"class":1086},[199,6394,4889],{"class":878},[199,6396,4892],{"class":205},[199,6398,6399],{"class":201,"line":333},[199,6400,4485],{"class":205},[199,6402,6403,6405,6407,6409,6411,6413,6415,6417,6419,6421,6423,6425],{"class":201,"line":227},[199,6404,1937],{"class":1086},[199,6406,1537],{"class":205},[199,6408,3100],{"class":1086},[199,6410,5936],{"class":205},[199,6412,895],{"class":1086},[199,6414,1115],{"class":1018},[199,6416,5943],{"class":205},[199,6418,887],{"class":1086},[199,6420,3528],{"class":1018},[199,6422,5943],{"class":205},[199,6424,1510],{"class":1086},[199,6426,1594],{"class":205},[199,6428,6429],{"class":201,"line":238},[199,6430,4946],{"class":205},[199,6432,6433,6435,6437,6439,6441,6443,6445,6447,6449,6452,6454],{"class":201,"line":252},[199,6434,1481],{"class":1086},[199,6436,1537],{"class":205},[199,6438,3100],{"class":1086},[199,6440,6311],{"class":205},[199,6442,895],{"class":1086},[199,6444,1115],{"class":1018},[199,6446,6318],{"class":205},[199,6448,1501],{"class":1086},[199,6450,6451],{"class":205},"i;j",[199,6453,1510],{"class":1086},[199,6455,1594],{"class":205},[199,6457,6458],{"class":201,"line":388},[199,6459,5422],{"class":205},[199,6461,6462,6464,6466,6468,6470,6472,6474,6476,6478,6481,6483,6485,6487,6489,6491,6494,6496,6498],{"class":201,"line":415},[199,6463,5427],{"class":205},[199,6465,4117],{"class":1086},[199,6467,3549],{"class":205},[199,6469,4117],{"class":1086},[199,6471,6341],{"class":898},[199,6473,4117],{"class":1086},[199,6475,1548],{"class":205},[199,6477,4117],{"class":1086},[199,6479,6480],{"class":898},"\"=\"",[199,6482,4117],{"class":1086},[199,6484,1548],{"class":205},[199,6486,3537],{"class":1086},[199,6488,3549],{"class":205},[199,6490,4117],{"class":1086},[199,6492,6493],{"class":898},"'",[199,6495,4174],{"class":1018},[199,6497,6493],{"class":898},[199,6499,1028],{"class":205},[199,6501,6502],{"class":201,"line":426},[199,6503,1046],{"class":205},[199,6505,6506,6508,6510],{"class":201,"line":1015},[199,6507,6352],{"class":205},[199,6509,4117],{"class":1086},[199,6511,4139],{"class":205},[199,6513,6514],{"class":201,"line":1031},[199,6515,2097],{"class":205},[199,6517,6518],{"class":201,"line":1043},[199,6519,671],{"class":205},[19,6521,6523],{"id":6522},"_163跳出语句","1.6.3跳出语句",[24,6525,6526],{},[27,6527,6528],{},"break语句\n作用：用于跳出选择结构或者循环结构",[31,6530,6531],{},"break使用时机：",[176,6533,6534,6537,6540],{},[27,6535,6536],{},"出现在switch条件语句中，作用是终止case并跳出switch",[27,6538,6539],{},"出现在循环结构中，作用是跳出当前的循环结构",[27,6541,6542],{},"出现在嵌套循环中，跳出最近的内层循环语句",[24,6544,6545,6548],{"start":36},[27,6546,6547],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[27,6549,6550],{},"goto语句\n语法：goto 标记;",[31,6552,6553],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[190,6555,6557],{"className":3086,"code":6556,"language":3088,"meta":57,"style":57},"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",[196,6558,6559,6567,6571,6584,6594,6607,6620,6633,6641,6657],{"__ignoreMap":57},[199,6560,6561,6563,6565],{"class":201,"line":202},[199,6562,3100],{"class":1086},[199,6564,4889],{"class":878},[199,6566,4892],{"class":205},[199,6568,6569],{"class":201,"line":36},[199,6570,4485],{"class":205},[199,6572,6573,6575,6577,6580,6582],{"class":201,"line":73},[199,6574,4490],{"class":205},[199,6576,4117],{"class":1086},[199,6578,6579],{"class":898},"\"1\"",[199,6581,4117],{"class":1086},[199,6583,4139],{"class":205},[199,6585,6586,6589,6592],{"class":201,"line":333},[199,6587,6588],{"class":1086},"    goto",[199,6590,6591],{"class":878}," FLAG",[199,6593,1028],{"class":205},[199,6595,6596,6598,6600,6603,6605],{"class":201,"line":227},[199,6597,4490],{"class":205},[199,6599,4117],{"class":1086},[199,6601,6602],{"class":898},"\"2\"",[199,6604,4117],{"class":1086},[199,6606,4139],{"class":205},[199,6608,6609,6611,6613,6616,6618],{"class":201,"line":238},[199,6610,4490],{"class":205},[199,6612,4117],{"class":1086},[199,6614,6615],{"class":898},"\"3\"",[199,6617,4117],{"class":1086},[199,6619,4139],{"class":205},[199,6621,6622,6624,6626,6629,6631],{"class":201,"line":252},[199,6623,4490],{"class":205},[199,6625,4117],{"class":1086},[199,6627,6628],{"class":898},"\"4\"",[199,6630,4117],{"class":1086},[199,6632,4139],{"class":205},[199,6634,6635,6638],{"class":201,"line":388},[199,6636,6637],{"class":878},"    FLAG",[199,6639,6640],{"class":205},":\n",[199,6642,6643,6645,6647,6650,6652,6654],{"class":201,"line":415},[199,6644,4490],{"class":205},[199,6646,4117],{"class":1086},[199,6648,6649],{"class":898},"\"5\"",[199,6651,4117],{"class":1086},[199,6653,4182],{"class":205},[199,6655,6656],{"class":1454},"\u002F\u002F跳过了2,3,4,直接到5\n",[199,6658,6659],{"class":201,"line":426},[199,6660,671],{"class":205},[14,6662,6664],{"id":6663},"_17数组","1.7数组",[19,6666,6668],{"id":6667},"_171一维数组","1.7.1一维数组",[24,6670,6671],{},[27,6672,6673],{},"一维数组定义方式",[3227,6675,6676,6686],{},[3230,6677,6678],{},[3233,6679,6680,6683],{},[3236,6681,6682],{},"方式",[3236,6684,6685],{},"注意事项",[3273,6687,6688,6702,6712],{},[3233,6689,6690,6696],{},[3278,6691,6692,6693,3149],{},"数据类型 数组名",[199,6694,6695],{},"数组长度",[3278,6697,6698,6699,6701],{},"这种方式是先定义再arr",[199,6700,1548],{},"赋值",[3233,6703,6704,6709],{},[3278,6705,6692,6706,6708],{},[199,6707,6695],{},"={值1,值2....};",[3278,6710,6711],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[3233,6713,6714,6718],{},[3278,6715,6692,6716,6708],{},[199,6717],{},[3278,6719,6720,6721,6723],{},"int arr",[199,6722],{},";这是不正确的，按照这样的方式定义必须有初始长度",[24,6725,6726],{"start":36},[27,6727,6728],{},"一维数组数组名\n用途：",[176,6730,6731],{},[27,6732,6733],{},"1.可以统计整个数组在内存中的长度：",[190,6735,6737],{"className":3086,"code":6736,"language":3088,"meta":57,"style":57},"sizeof(arr);\nsizeof(arr[0]);\n",[196,6738,6739,6746],{"__ignoreMap":57},[199,6740,6741,6743],{"class":201,"line":202},[199,6742,3095],{"class":1086},[199,6744,6745],{"class":205},"(arr);\n",[199,6747,6748,6750,6753,6755],{"class":201,"line":36},[199,6749,3095],{"class":1086},[199,6751,6752],{"class":205},"(arr[",[199,6754,1025],{"class":1018},[199,6756,6757],{"class":205},"]);\n",[176,6759,6760],{},[27,6761,6762],{},"2.可以获取数组在内存中的首地址:",[190,6764,6766],{"className":3086,"code":6765,"language":3088,"meta":57,"style":57},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[196,6767,6768,6773,6785,6790],{"__ignoreMap":57},[199,6769,6770],{"class":201,"line":202},[199,6771,6772],{"class":1454},"\u002F\u002F查看16进制的首地址\n",[199,6774,6775,6777,6779,6781,6783],{"class":201,"line":36},[199,6776,4309],{"class":205},[199,6778,4117],{"class":1086},[199,6780,1659],{"class":205},[199,6782,4117],{"class":1086},[199,6784,4139],{"class":205},[199,6786,6787],{"class":201,"line":73},[199,6788,6789],{"class":1454},"\u002F\u002F看10进制数\n",[199,6791,6792,6794,6796,6798,6800,6802,6804,6807,6809,6811,6813],{"class":201,"line":333},[199,6793,4309],{"class":205},[199,6795,4117],{"class":1086},[199,6797,1537],{"class":205},[199,6799,3100],{"class":1086},[199,6801,3512],{"class":205},[199,6803,3437],{"class":1086},[199,6805,6806],{"class":205},"arr[",[199,6808,1025],{"class":1018},[199,6810,1667],{"class":205},[199,6812,4117],{"class":1086},[199,6814,4139],{"class":205},[31,6816,6817],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[176,6819,6820],{},[27,6821,6822],{},"1️⃣五只小猪称体重",[190,6824,6826],{"className":3086,"code":6825,"language":3088,"meta":57,"style":57},"#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",[196,6827,6828,6834,6844,6852,6856,6895,6908,6934,6938,6950,6954,6964,6968,6972,6985,6994],{"__ignoreMap":57},[199,6829,6830,6832],{"class":201,"line":202},[199,6831,4866],{"class":1086},[199,6833,4869],{"class":898},[199,6835,6836,6838,6840,6842],{"class":201,"line":36},[199,6837,4874],{"class":1086},[199,6839,4877],{"class":1086},[199,6841,4880],{"class":878},[199,6843,1028],{"class":205},[199,6845,6846,6848,6850],{"class":201,"line":73},[199,6847,3100],{"class":1086},[199,6849,4889],{"class":878},[199,6851,4892],{"class":205},[199,6853,6854],{"class":201,"line":333},[199,6855,4485],{"class":205},[199,6857,6858,6860,6863,6865,6867,6869,6871,6873,6875,6878,6880,6882,6884,6887,6889,6892],{"class":201,"line":227},[199,6859,4901],{"class":1086},[199,6861,6862],{"class":205}," arr[",[199,6864,1909],{"class":1018},[199,6866,1667],{"class":205},[199,6868,895],{"class":1086},[199,6870,3974],{"class":205},[199,6872,1100],{"class":1018},[199,6874,3461],{"class":205},[199,6876,6877],{"class":1018},"350",[199,6879,3461],{"class":205},[199,6881,4647],{"class":1018},[199,6883,3461],{"class":205},[199,6885,6886],{"class":1018},"400",[199,6888,3461],{"class":205},[199,6890,6891],{"class":1018},"250",[199,6893,6894],{"class":205},"};\n",[199,6896,6897,6899,6902,6904,6906],{"class":201,"line":238},[199,6898,4901],{"class":1086},[199,6900,6901],{"class":205}," tmp",[199,6903,895],{"class":1086},[199,6905,1025],{"class":1018},[199,6907,1028],{"class":205},[199,6909,6910,6912,6914,6916,6918,6920,6922,6924,6926,6928,6930,6932],{"class":201,"line":252},[199,6911,1937],{"class":1086},[199,6913,1484],{"class":205},[199,6915,3100],{"class":1086},[199,6917,5936],{"class":205},[199,6919,895],{"class":1086},[199,6921,1025],{"class":1018},[199,6923,5943],{"class":205},[199,6925,887],{"class":1086},[199,6927,1909],{"class":1018},[199,6929,5943],{"class":205},[199,6931,1510],{"class":1086},[199,6933,1594],{"class":205},[199,6935,6936],{"class":201,"line":388},[199,6937,4946],{"class":205},[199,6939,6940,6942,6945,6947],{"class":201,"line":415},[199,6941,2017],{"class":1086},[199,6943,6944],{"class":205},"(tmp",[199,6946,887],{"class":1086},[199,6948,6949],{"class":205},"arr[i])\n",[199,6951,6952],{"class":201,"line":426},[199,6953,5422],{"class":205},[199,6955,6956,6959,6961],{"class":201,"line":1015},[199,6957,6958],{"class":205},"            tmp",[199,6960,895],{"class":1086},[199,6962,6963],{"class":205},"arr[i];\n",[199,6965,6966],{"class":201,"line":1031},[199,6967,1046],{"class":205},[199,6969,6970],{"class":201,"line":1043},[199,6971,2097],{"class":205},[199,6973,6974,6976,6978,6981,6983],{"class":201,"line":1049},[199,6975,4490],{"class":205},[199,6977,4117],{"class":1086},[199,6979,6980],{"class":205},"tmp",[199,6982,4117],{"class":1086},[199,6984,4139],{"class":205},[199,6986,6987,6990,6992],{"class":201,"line":1054},[199,6988,6989],{"class":1086},"    return",[199,6991,1621],{"class":1018},[199,6993,1028],{"class":205},[199,6995,6996],{"class":201,"line":1062},[199,6997,671],{"class":205},[176,6999,7000],{},[27,7001,7002],{},"2️⃣数组元素逆置",[190,7004,7006],{"className":3086,"code":7005,"language":3088,"meta":57,"style":57},"\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",[196,7007,7008,7013,7019,7029,7037,7041,7076,7092,7124,7137,7142,7147,7159,7169,7179,7184,7193,7203,7208,7213,7240,7244,7260,7264,7275,7284],{"__ignoreMap":57},[199,7009,7010],{"class":201,"line":202},[199,7011,7012],{"class":1454},"\u002F\u002F元素逆置\n",[199,7014,7015,7017],{"class":201,"line":36},[199,7016,4866],{"class":1086},[199,7018,4869],{"class":898},[199,7020,7021,7023,7025,7027],{"class":201,"line":73},[199,7022,4874],{"class":1086},[199,7024,4877],{"class":1086},[199,7026,4880],{"class":878},[199,7028,1028],{"class":205},[199,7030,7031,7033,7035],{"class":201,"line":333},[199,7032,3100],{"class":1086},[199,7034,4889],{"class":878},[199,7036,4892],{"class":205},[199,7038,7039],{"class":201,"line":227},[199,7040,4485],{"class":205},[199,7042,7043,7046,7048,7050,7052,7054,7056,7058,7060,7062,7064,7066,7068,7070,7072,7074],{"class":201,"line":238},[199,7044,7045],{"class":1086},"   int",[199,7047,6862],{"class":205},[199,7049,1909],{"class":1018},[199,7051,1667],{"class":205},[199,7053,895],{"class":1086},[199,7055,3974],{"class":205},[199,7057,1115],{"class":1018},[199,7059,3461],{"class":205},[199,7061,1925],{"class":1018},[199,7063,3461],{"class":205},[199,7065,1920],{"class":1018},[199,7067,3461],{"class":205},[199,7069,1915],{"class":1018},[199,7071,3461],{"class":205},[199,7073,1909],{"class":1018},[199,7075,6894],{"class":205},[199,7077,7078,7080,7083,7085,7087,7089],{"class":201,"line":252},[199,7079,7045],{"class":1086},[199,7081,7082],{"class":205}," start",[199,7084,895],{"class":1086},[199,7086,1025],{"class":1018},[199,7088,3149],{"class":205},[199,7090,7091],{"class":1454},"\u002F\u002F起始下标\n",[199,7093,7094,7096,7099,7102,7105,7108,7110,7112,7115,7117,7119,7121],{"class":201,"line":388},[199,7095,7045],{"class":1086},[199,7097,7098],{"class":205}," end",[199,7100,7101],{"class":1086},"=sizeof",[199,7103,7104],{"class":205},"(arr)",[199,7106,7107],{"class":1086},"\u002Fsizeof",[199,7109,6752],{"class":205},[199,7111,1025],{"class":1018},[199,7113,7114],{"class":205},"])",[199,7116,1998],{"class":1086},[199,7118,1115],{"class":1018},[199,7120,3149],{"class":205},[199,7122,7123],{"class":1454},"\u002F\u002F结束下标\n",[199,7125,7126,7129,7132,7134],{"class":201,"line":415},[199,7127,7128],{"class":1086},"   while",[199,7130,7131],{"class":205}," (start",[199,7133,887],{"class":1086},[199,7135,7136],{"class":205},"end)\n",[199,7138,7139],{"class":201,"line":426},[199,7140,7141],{"class":205},"   {\n",[199,7143,7144],{"class":201,"line":1015},[199,7145,7146],{"class":1454},"    \u002F\u002F实现元素互换代码\n",[199,7148,7149,7151,7154,7156],{"class":201,"line":1031},[199,7150,4901],{"class":1086},[199,7152,7153],{"class":205}," temp",[199,7155,895],{"class":1086},[199,7157,7158],{"class":205},"arr[start];\n",[199,7160,7161,7164,7166],{"class":201,"line":1043},[199,7162,7163],{"class":205},"    arr[start]",[199,7165,895],{"class":1086},[199,7167,7168],{"class":205},"arr[end];\n",[199,7170,7171,7174,7176],{"class":201,"line":1049},[199,7172,7173],{"class":205},"    arr[end]",[199,7175,895],{"class":1086},[199,7177,7178],{"class":205},"temp;\n",[199,7180,7181],{"class":201,"line":1054},[199,7182,7183],{"class":1454},"    \u002F\u002F下标更新\n",[199,7185,7186,7189,7191],{"class":201,"line":1062},[199,7187,7188],{"class":205},"    start",[199,7190,1510],{"class":1086},[199,7192,1028],{"class":205},[199,7194,7195,7198,7201],{"class":201,"line":1075},[199,7196,7197],{"class":205},"    end",[199,7199,7200],{"class":1086},"--",[199,7202,1028],{"class":205},[199,7204,7205],{"class":201,"line":1092},[199,7206,7207],{"class":205},"   }\n",[199,7209,7210],{"class":201,"line":1107},[199,7211,7212],{"class":1454},"   \u002F\u002F输出逆置后的数组\n",[199,7214,7215,7218,7220,7222,7224,7226,7228,7230,7232,7234,7236,7238],{"class":201,"line":1128},[199,7216,7217],{"class":1086},"   for",[199,7219,1484],{"class":205},[199,7221,3100],{"class":1086},[199,7223,5936],{"class":205},[199,7225,895],{"class":1086},[199,7227,1025],{"class":1018},[199,7229,5943],{"class":205},[199,7231,887],{"class":1086},[199,7233,1909],{"class":1018},[199,7235,5943],{"class":205},[199,7237,1510],{"class":1086},[199,7239,1594],{"class":205},[199,7241,7242],{"class":201,"line":1146},[199,7243,7141],{"class":205},[199,7245,7246,7248,7250,7253,7255,7258],{"class":201,"line":1163},[199,7247,4490],{"class":205},[199,7249,4117],{"class":1086},[199,7251,7252],{"class":205},"arr[i]",[199,7254,4117],{"class":1086},[199,7256,7257],{"class":898},"\" \"",[199,7259,1028],{"class":205},[199,7261,7262],{"class":201,"line":1176},[199,7263,7207],{"class":205},[199,7265,7266,7269,7271,7273],{"class":201,"line":1189},[199,7267,7268],{"class":878},"   system",[199,7270,1537],{"class":205},[199,7272,5222],{"class":898},[199,7274,5623],{"class":205},[199,7276,7277,7280,7282],{"class":201,"line":1202},[199,7278,7279],{"class":1086},"   return",[199,7281,1621],{"class":1018},[199,7283,1028],{"class":205},[199,7285,7286],{"class":201,"line":1207},[199,7287,671],{"class":205},[176,7289,7290],{},[27,7291,7292],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[190,7294,7296],{"className":3086,"code":7295,"language":3088,"meta":57,"style":57},"\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",[196,7297,7298,7303,7309,7319,7327,7331,7382,7395,7421,7425,7439,7443,7448,7453,7483,7487,7492,7526,7530,7535,7555,7560,7572,7588,7603,7608,7612,7616,7629,7655,7659,7673,7677,7685],{"__ignoreMap":57},[199,7299,7300],{"class":201,"line":202},[199,7301,7302],{"class":1454},"\u002F\u002F冒泡排序,升序\n",[199,7304,7305,7307],{"class":201,"line":36},[199,7306,4866],{"class":1086},[199,7308,4869],{"class":898},[199,7310,7311,7313,7315,7317],{"class":201,"line":73},[199,7312,4874],{"class":1086},[199,7314,4877],{"class":1086},[199,7316,4880],{"class":878},[199,7318,1028],{"class":205},[199,7320,7321,7323,7325],{"class":201,"line":333},[199,7322,3100],{"class":1086},[199,7324,4889],{"class":878},[199,7326,4892],{"class":205},[199,7328,7329],{"class":201,"line":227},[199,7330,4485],{"class":205},[199,7332,7333,7335,7337,7339,7341,7343,7346,7348,7350,7352,7354,7356,7358,7360,7362,7364,7366,7368,7370,7372,7374,7376,7378,7380],{"class":201,"line":238},[199,7334,4901],{"class":1086},[199,7336,6862],{"class":205},[199,7338,3503],{"class":1018},[199,7340,2078],{"class":205},[199,7342,895],{"class":1086},[199,7344,7345],{"class":205}," {",[199,7347,1915],{"class":1018},[199,7349,3461],{"class":205},[199,7351,1925],{"class":1018},[199,7353,3461],{"class":205},[199,7355,3478],{"class":1018},[199,7357,3461],{"class":205},[199,7359,1025],{"class":1018},[199,7361,3461],{"class":205},[199,7363,1909],{"class":1018},[199,7365,3461],{"class":205},[199,7367,3452],{"class":1018},[199,7369,3461],{"class":205},[199,7371,1115],{"class":1018},[199,7373,3461],{"class":205},[199,7375,1920],{"class":1018},[199,7377,3461],{"class":205},[199,7379,3503],{"class":1018},[199,7381,6894],{"class":205},[199,7383,7384,7386,7388,7391,7393],{"class":201,"line":252},[199,7385,4490],{"class":205},[199,7387,4117],{"class":1086},[199,7389,7390],{"class":898},"\"排序前：\"",[199,7392,4117],{"class":1086},[199,7394,4139],{"class":205},[199,7396,7397,7399,7401,7403,7405,7407,7409,7411,7413,7415,7417,7419],{"class":201,"line":388},[199,7398,1937],{"class":1086},[199,7400,1484],{"class":205},[199,7402,3100],{"class":1086},[199,7404,5936],{"class":205},[199,7406,895],{"class":1086},[199,7408,1025],{"class":1018},[199,7410,5943],{"class":205},[199,7412,887],{"class":1086},[199,7414,3503],{"class":1018},[199,7416,5943],{"class":205},[199,7418,1510],{"class":1086},[199,7420,1594],{"class":205},[199,7422,7423],{"class":201,"line":415},[199,7424,4946],{"class":205},[199,7426,7427,7429,7431,7433,7435,7437],{"class":201,"line":426},[199,7428,6352],{"class":205},[199,7430,4117],{"class":1086},[199,7432,7252],{"class":205},[199,7434,4117],{"class":1086},[199,7436,7257],{"class":898},[199,7438,1028],{"class":205},[199,7440,7441],{"class":201,"line":1015},[199,7442,2097],{"class":205},[199,7444,7445],{"class":201,"line":1031},[199,7446,7447],{"class":1454},"    \u002F\u002F开始冒泡排序\n",[199,7449,7450],{"class":201,"line":1043},[199,7451,7452],{"class":1454},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[199,7454,7455,7457,7459,7461,7463,7465,7467,7469,7471,7473,7475,7477,7479,7481],{"class":201,"line":1049},[199,7456,1937],{"class":1086},[199,7458,1484],{"class":205},[199,7460,3100],{"class":1086},[199,7462,5936],{"class":205},[199,7464,895],{"class":1086},[199,7466,1025],{"class":1018},[199,7468,5943],{"class":205},[199,7470,887],{"class":1086},[199,7472,3503],{"class":1018},[199,7474,1998],{"class":1086},[199,7476,1115],{"class":1018},[199,7478,5943],{"class":205},[199,7480,1510],{"class":1086},[199,7482,1594],{"class":205},[199,7484,7485],{"class":201,"line":1054},[199,7486,4946],{"class":205},[199,7488,7489],{"class":201,"line":1062},[199,7490,7491],{"class":1454},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[199,7493,7494,7496,7498,7500,7502,7504,7506,7508,7510,7512,7514,7516,7518,7520,7522,7524],{"class":201,"line":1075},[199,7495,1481],{"class":1086},[199,7497,1484],{"class":205},[199,7499,3100],{"class":1086},[199,7501,6311],{"class":205},[199,7503,895],{"class":1086},[199,7505,1025],{"class":1018},[199,7507,6318],{"class":205},[199,7509,887],{"class":1086},[199,7511,3503],{"class":1018},[199,7513,1998],{"class":1086},[199,7515,1548],{"class":205},[199,7517,1998],{"class":1086},[199,7519,1115],{"class":1018},[199,7521,6318],{"class":205},[199,7523,1510],{"class":1086},[199,7525,1594],{"class":205},[199,7527,7528],{"class":201,"line":1092},[199,7529,5422],{"class":205},[199,7531,7532],{"class":201,"line":1107},[199,7533,7534],{"class":1454},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[199,7536,7537,7540,7543,7545,7548,7550,7552],{"class":201,"line":1128},[199,7538,7539],{"class":1086},"            if",[199,7541,7542],{"class":205},"(arr[j]",[199,7544,1217],{"class":1086},[199,7546,7547],{"class":205},"arr[j",[199,7549,2028],{"class":1086},[199,7551,1115],{"class":1018},[199,7553,7554],{"class":205},"])\n",[199,7556,7557],{"class":201,"line":1146},[199,7558,7559],{"class":205},"            {\n",[199,7561,7562,7565,7567,7569],{"class":201,"line":1163},[199,7563,7564],{"class":1086},"                int",[199,7566,7153],{"class":205},[199,7568,895],{"class":1086},[199,7570,7571],{"class":205},"arr[j];\n",[199,7573,7574,7577,7579,7581,7583,7585],{"class":201,"line":1176},[199,7575,7576],{"class":205},"                arr[j]",[199,7578,895],{"class":1086},[199,7580,7547],{"class":205},[199,7582,2028],{"class":1086},[199,7584,1115],{"class":1018},[199,7586,7587],{"class":205},"];\n",[199,7589,7590,7593,7595,7597,7599,7601],{"class":201,"line":1189},[199,7591,7592],{"class":205},"                arr[j",[199,7594,2028],{"class":1086},[199,7596,1115],{"class":1018},[199,7598,1667],{"class":205},[199,7600,895],{"class":1086},[199,7602,7178],{"class":205},[199,7604,7605],{"class":201,"line":1202},[199,7606,7607],{"class":205},"            }\n",[199,7609,7610],{"class":201,"line":1207},[199,7611,1046],{"class":205},[199,7613,7614],{"class":201,"line":1212},[199,7615,2097],{"class":205},[199,7617,7618,7620,7622,7625,7627],{"class":201,"line":1225},[199,7619,4490],{"class":205},[199,7621,4117],{"class":1086},[199,7623,7624],{"class":898},"\"排序后：\"",[199,7626,4117],{"class":1086},[199,7628,4139],{"class":205},[199,7630,7631,7633,7635,7637,7639,7641,7643,7645,7647,7649,7651,7653],{"class":201,"line":1236},[199,7632,1937],{"class":1086},[199,7634,1484],{"class":205},[199,7636,3100],{"class":1086},[199,7638,5936],{"class":205},[199,7640,895],{"class":1086},[199,7642,1025],{"class":1018},[199,7644,5943],{"class":205},[199,7646,887],{"class":1086},[199,7648,3503],{"class":1018},[199,7650,5943],{"class":205},[199,7652,1510],{"class":1086},[199,7654,1594],{"class":205},[199,7656,7657],{"class":201,"line":1249},[199,7658,4946],{"class":205},[199,7660,7661,7663,7665,7667,7669,7671],{"class":201,"line":1262},[199,7662,6352],{"class":205},[199,7664,4117],{"class":1086},[199,7666,7252],{"class":205},[199,7668,4117],{"class":1086},[199,7670,7257],{"class":898},[199,7672,1028],{"class":205},[199,7674,7675],{"class":201,"line":1275},[199,7676,2097],{"class":205},[199,7678,7679,7681,7683],{"class":201,"line":1287},[199,7680,6989],{"class":1086},[199,7682,1621],{"class":1018},[199,7684,1028],{"class":205},[199,7686,7687],{"class":201,"line":1292},[199,7688,671],{"class":205},[19,7690,7692],{"id":7691},"_172二维数组","1.7.2二维数组",[24,7694,7695],{},[27,7696,7697],{},"二维数组的四种定义方式",[3227,7699,7700,7709],{},[3230,7701,7702],{},[3233,7703,7704,7707],{},[3236,7705,7706],{},"序号",[3236,7708,6682],{},[3273,7710,7711,7721,7730,7739,7748],{},[3233,7712,7713,7715],{},[3278,7714,1115],{},[3278,7716,7717,7718,3149],{},"数据类型 数组名[行数]",[199,7719,7720],{},"列数",[3233,7722,7723,7725],{},[3278,7724,1925],{},[3278,7726,7717,7727,7729],{},[199,7728,7720],{},"={ {数据1,数据2}，{数据3，数据4}... }",[3233,7731,7732,7734],{},[3278,7733,1920],{},[3278,7735,7717,7736,7738],{},[199,7737,7720],{},"={数据1,数据2,数据3...}",[3233,7740,7741,7743],{},[3278,7742,1915],{},[3278,7744,7745,7746,7738],{},"数据类型 数组名[]",[199,7747,7720],{},[3233,7749,7750,7753],{},[3278,7751,7752],{},"注意：不能只省略列数",[3278,7754],{},[24,7756,7757],{"start":36},[27,7758,7759],{},"二维数组数组名",[176,7761,7762,7765],{},[27,7763,7764],{},"1.查看二维数组所占内存空间",[27,7766,7767],{},"2.获取二维数组首地址",[31,7769,7770],{},"已知二维数组，求二维数组的行数与列数",[190,7772,7774],{"className":3086,"code":7773,"language":3088,"meta":57,"style":57},"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",[196,7775,7776,7784,7788,7806,7810,7828,7844,7849,7874,7907],{"__ignoreMap":57},[199,7777,7778,7780,7782],{"class":201,"line":202},[199,7779,3100],{"class":1086},[199,7781,4889],{"class":878},[199,7783,4892],{"class":205},[199,7785,7786],{"class":201,"line":36},[199,7787,4485],{"class":205},[199,7789,7790,7792,7794,7796,7799,7801,7803],{"class":201,"line":73},[199,7791,4901],{"class":1086},[199,7793,6862],{"class":205},[199,7795,1925],{"class":1018},[199,7797,7798],{"class":205},"][",[199,7800,1920],{"class":1018},[199,7802,1667],{"class":205},[199,7804,7805],{"class":1086},"=\n",[199,7807,7808],{"class":201,"line":333},[199,7809,4946],{"class":205},[199,7811,7812,7815,7817,7819,7821,7823,7825],{"class":201,"line":227},[199,7813,7814],{"class":205},"        {",[199,7816,1115],{"class":1018},[199,7818,3461],{"class":205},[199,7820,1925],{"class":1018},[199,7822,3461],{"class":205},[199,7824,1920],{"class":1018},[199,7826,7827],{"class":205},"},\n",[199,7829,7830,7832,7834,7836,7838,7840,7842],{"class":201,"line":238},[199,7831,7814],{"class":205},[199,7833,1915],{"class":1018},[199,7835,3461],{"class":205},[199,7837,1909],{"class":1018},[199,7839,3461],{"class":205},[199,7841,3428],{"class":1018},[199,7843,671],{"class":205},[199,7845,7846],{"class":201,"line":252},[199,7847,7848],{"class":205},"    };\n",[199,7850,7851,7853,7855,7858,7860,7862,7864,7866,7868,7870,7872],{"class":201,"line":388},[199,7852,4490],{"class":205},[199,7854,4117],{"class":1086},[199,7856,7857],{"class":898},"\"二维数组的行数\"",[199,7859,4312],{"class":1086},[199,7861,7104],{"class":205},[199,7863,7107],{"class":1086},[199,7865,6752],{"class":205},[199,7867,1025],{"class":1018},[199,7869,7114],{"class":205},[199,7871,4117],{"class":1086},[199,7873,4139],{"class":205},[199,7875,7876,7878,7880,7883,7885,7887,7889,7891,7893,7895,7897,7899,7901,7903,7905],{"class":201,"line":415},[199,7877,4490],{"class":205},[199,7879,4117],{"class":1086},[199,7881,7882],{"class":898},"\"二维数组的列数\"",[199,7884,4312],{"class":1086},[199,7886,6752],{"class":205},[199,7888,1025],{"class":1018},[199,7890,7114],{"class":205},[199,7892,7107],{"class":1086},[199,7894,6752],{"class":205},[199,7896,1025],{"class":1018},[199,7898,7798],{"class":205},[199,7900,1025],{"class":1018},[199,7902,7114],{"class":205},[199,7904,4117],{"class":1086},[199,7906,4139],{"class":205},[199,7908,7909],{"class":201,"line":426},[199,7910,671],{"class":205},[31,7912,7913],{},"查看二维数组首地址",[190,7915,7917],{"className":3086,"code":7916,"language":3088,"meta":57,"style":57},"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",[196,7918,7919,7936,7962,7987],{"__ignoreMap":57},[199,7920,7921,7923,7925,7928,7930,7932,7934],{"class":201,"line":202},[199,7922,4309],{"class":205},[199,7924,4117],{"class":1086},[199,7926,7927],{"class":898},"\"二维数组首地址：\"",[199,7929,4117],{"class":1086},[199,7931,1659],{"class":205},[199,7933,4117],{"class":1086},[199,7935,4139],{"class":205},[199,7937,7938,7940,7942,7945,7947,7949,7951,7954,7956,7958,7960],{"class":201,"line":36},[199,7939,4309],{"class":205},[199,7941,4117],{"class":1086},[199,7943,7944],{"class":898},"\"二维数组第一行的首地址：\"",[199,7946,4117],{"class":1086},[199,7948,1537],{"class":205},[199,7950,3100],{"class":1086},[199,7952,7953],{"class":205},")arr[",[199,7955,1025],{"class":1018},[199,7957,1667],{"class":205},[199,7959,4117],{"class":1086},[199,7961,4139],{"class":205},[199,7963,7964,7966,7968,7971,7973,7975,7977,7979,7981,7983,7985],{"class":201,"line":73},[199,7965,4309],{"class":205},[199,7967,4117],{"class":1086},[199,7969,7970],{"class":898},"\"二维数组第二行的首地址：\"",[199,7972,4117],{"class":1086},[199,7974,1537],{"class":205},[199,7976,3100],{"class":1086},[199,7978,7953],{"class":205},[199,7980,1115],{"class":1018},[199,7982,1667],{"class":205},[199,7984,4117],{"class":1086},[199,7986,4139],{"class":205},[199,7988,7989,7991,7993,7996,7998,8000,8002,8004,8006,8008,8010,8012,8014,8016,8018,8020],{"class":201,"line":333},[199,7990,4309],{"class":205},[199,7992,4117],{"class":1086},[199,7994,7995],{"class":898},"\"二维数组第一个元素的首地址:\"",[199,7997,4117],{"class":1086},[199,7999,1537],{"class":205},[199,8001,3100],{"class":1086},[199,8003,3512],{"class":205},[199,8005,3437],{"class":1086},[199,8007,6806],{"class":205},[199,8009,1025],{"class":1018},[199,8011,7798],{"class":205},[199,8013,1025],{"class":1018},[199,8015,1667],{"class":205},[199,8017,4117],{"class":1086},[199,8019,4182],{"class":205},[199,8021,8022],{"class":1454},"\u002F\u002F对于数，要加取址符\n",[1002,8024,8025],{},"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":57,"searchDepth":36,"depth":36,"links":8027},[8028,8029,8030,8038,8039,8045,8050],{"id":3041,"depth":36,"text":3042},{"id":3048,"depth":36,"text":3049},{"id":3063,"depth":36,"text":3064,"children":8031},[8032,8033,8034,8035,8036,8037],{"id":3067,"depth":73,"text":3068},{"id":3112,"depth":73,"text":3113},{"id":3176,"depth":73,"text":3177},{"id":4098,"depth":73,"text":4099},{"id":4188,"depth":73,"text":4189},{"id":4283,"depth":73,"text":4284},{"id":4325,"depth":36,"text":4326},{"id":4393,"depth":36,"text":4394,"children":8040},[8041,8042,8043,8044],{"id":4397,"depth":73,"text":4398},{"id":4418,"depth":73,"text":4419},{"id":4427,"depth":73,"text":4428},{"id":4436,"depth":73,"text":4437},{"id":4445,"depth":36,"text":4446,"children":8046},[8047,8048,8049],{"id":4449,"depth":73,"text":4450},{"id":5120,"depth":73,"text":5121},{"id":6522,"depth":73,"text":6523},{"id":6663,"depth":36,"text":6664,"children":8051},[8052,8053],{"id":6667,"depth":73,"text":6668},{"id":7691,"depth":73,"text":7692},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":3033,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":8060,"title":8061,"body":8062,"description":57,"extension":3024,"meta":9162,"navigation":906,"path":9163,"seo":9164,"stem":9165,"__hash__":9166},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":8063,"toc":9154},[8064,8067,8071,8079,8087,8090,8156,8160,8163,8239,8243,8246,8249,8252,8465,8469,8474,8538,8543,8610,8615,8706,8709,8814,8818,8821,8827,8971,8975,8978,8992,8995,9040,9043,9151],[10,8065,8061],{"id":8066},"_2函数",[14,8068,8070],{"id":8069},"_21函数概述","2.1函数概述",[24,8072,8073,8076],{},[27,8074,8075],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[27,8077,8078],{},"语法：",[190,8080,8085],{"className":8081,"code":8083,"language":8084,"meta":57},[8082],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[196,8086,8083],{"__ignoreMap":57},[31,8088,8089],{},"小案例",[190,8091,8093],{"className":3086,"code":8092,"language":3088,"meta":57,"style":57},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[196,8094,8095,8100,8124,8128,8145,8152],{"__ignoreMap":57},[199,8096,8097],{"class":201,"line":202},[199,8098,8099],{"class":1454},"\u002F\u002Fnum1,num2形参\n",[199,8101,8102,8104,8107,8109,8111,8115,8117,8119,8122],{"class":201,"line":36},[199,8103,3100],{"class":1086},[199,8105,8106],{"class":878}," add",[199,8108,1537],{"class":205},[199,8110,3100],{"class":1086},[199,8112,8114],{"class":8113},"s4XuR"," num1",[199,8116,3461],{"class":205},[199,8118,3100],{"class":1086},[199,8120,8121],{"class":8113}," num2",[199,8123,1594],{"class":205},[199,8125,8126],{"class":201,"line":73},[199,8127,4485],{"class":205},[199,8129,8130,8132,8135,8137,8140,8142],{"class":201,"line":333},[199,8131,4901],{"class":1086},[199,8133,8134],{"class":205}," sum",[199,8136,895],{"class":1086},[199,8138,8139],{"class":205},"num1",[199,8141,2028],{"class":1086},[199,8143,8144],{"class":205},"num2;\n",[199,8146,8147,8149],{"class":201,"line":227},[199,8148,6989],{"class":1086},[199,8150,8151],{"class":205}," sum;\n",[199,8153,8154],{"class":201,"line":238},[199,8155,671],{"class":205},[14,8157,8159],{"id":8158},"_22函数调用","2.2函数调用",[31,8161,8162],{},"调用刚刚写的求和函数",[190,8164,8166],{"className":3086,"code":8165,"language":3088,"meta":57,"style":57},"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",[196,8167,8168,8176,8180,8185,8197,8209,8218,8223,8235],{"__ignoreMap":57},[199,8169,8170,8172,8174],{"class":201,"line":202},[199,8171,3100],{"class":1086},[199,8173,4889],{"class":878},[199,8175,4892],{"class":205},[199,8177,8178],{"class":201,"line":36},[199,8179,4485],{"class":205},[199,8181,8182],{"class":201,"line":73},[199,8183,8184],{"class":1454},"    \u002F\u002Fa,b实参\n",[199,8186,8187,8189,8191,8193,8195],{"class":201,"line":333},[199,8188,4901],{"class":1086},[199,8190,4338],{"class":205},[199,8192,895],{"class":1086},[199,8194,1025],{"class":1018},[199,8196,1028],{"class":205},[199,8198,8199,8201,8203,8205,8207],{"class":201,"line":227},[199,8200,4901],{"class":1086},[199,8202,5737],{"class":205},[199,8204,895],{"class":1086},[199,8206,1025],{"class":1018},[199,8208,1028],{"class":205},[199,8210,8211,8213,8215],{"class":201,"line":238},[199,8212,4928],{"class":205},[199,8214,4369],{"class":1086},[199,8216,8217],{"class":205},"a,b;\n",[199,8219,8220],{"class":201,"line":252},[199,8221,8222],{"class":1454},"    \u002F\u002F调用函数时，实参值传给了形参\n",[199,8224,8225,8227,8229,8232],{"class":201,"line":388},[199,8226,4490],{"class":205},[199,8228,4117],{"class":1086},[199,8230,8231],{"class":878},"add",[199,8233,8234],{"class":205},"(a,b);\n",[199,8236,8237],{"class":201,"line":415},[199,8238,671],{"class":205},[14,8240,8242],{"id":8241},"_23值传递","2.3值传递",[31,8244,8245],{},"值传递就是函数调用时实参将数值传给形参",[31,8247,8248],{},"值传递时，如果形参发生任何改变，不会影响实参",[31,8250,8251],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[190,8253,8255],{"className":3086,"code":8254,"language":3088,"meta":57,"style":57},"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",[196,8256,8257,8279,8283,8296,8313,8331,8342,8351,8360,8373,8389,8405,8414,8418,8426,8430,8442,8454,8461],{"__ignoreMap":57},[199,8258,8259,8262,8265,8267,8269,8271,8273,8275,8277],{"class":201,"line":202},[199,8260,8261],{"class":1086},"void",[199,8263,8264],{"class":878}," swap",[199,8266,1537],{"class":205},[199,8268,3100],{"class":1086},[199,8270,8114],{"class":8113},[199,8272,3461],{"class":205},[199,8274,3100],{"class":1086},[199,8276,8121],{"class":8113},[199,8278,1594],{"class":205},[199,8280,8281],{"class":201,"line":36},[199,8282,4485],{"class":205},[199,8284,8285,8287,8289,8292,8294],{"class":201,"line":73},[199,8286,4490],{"class":205},[199,8288,4117],{"class":1086},[199,8290,8291],{"class":898},"\"交换前：\"",[199,8293,4117],{"class":1086},[199,8295,4139],{"class":205},[199,8297,8298,8300,8302,8305,8307,8309,8311],{"class":201,"line":333},[199,8299,4490],{"class":205},[199,8301,4117],{"class":1086},[199,8303,8304],{"class":898},"\"num1=\"",[199,8306,4117],{"class":1086},[199,8308,8139],{"class":205},[199,8310,4117],{"class":1086},[199,8312,4139],{"class":205},[199,8314,8315,8317,8319,8322,8324,8327,8329],{"class":201,"line":227},[199,8316,4490],{"class":205},[199,8318,4117],{"class":1086},[199,8320,8321],{"class":898},"\"num2=\"",[199,8323,4117],{"class":1086},[199,8325,8326],{"class":205},"num2",[199,8328,4117],{"class":1086},[199,8330,4139],{"class":205},[199,8332,8333,8335,8337,8339],{"class":201,"line":238},[199,8334,4901],{"class":1086},[199,8336,7153],{"class":205},[199,8338,895],{"class":1086},[199,8340,8341],{"class":205},"num1;\n",[199,8343,8344,8347,8349],{"class":201,"line":252},[199,8345,8346],{"class":205},"    num1",[199,8348,895],{"class":1086},[199,8350,8144],{"class":205},[199,8352,8353,8356,8358],{"class":201,"line":388},[199,8354,8355],{"class":205},"    num2",[199,8357,895],{"class":1086},[199,8359,7178],{"class":205},[199,8361,8362,8364,8366,8369,8371],{"class":201,"line":415},[199,8363,4490],{"class":205},[199,8365,4117],{"class":1086},[199,8367,8368],{"class":898},"\"交换后：\"",[199,8370,4117],{"class":1086},[199,8372,4139],{"class":205},[199,8374,8375,8377,8379,8381,8383,8385,8387],{"class":201,"line":426},[199,8376,4490],{"class":205},[199,8378,4117],{"class":1086},[199,8380,8304],{"class":898},[199,8382,4117],{"class":1086},[199,8384,8139],{"class":205},[199,8386,4117],{"class":1086},[199,8388,4139],{"class":205},[199,8390,8391,8393,8395,8397,8399,8401,8403],{"class":201,"line":1015},[199,8392,4490],{"class":205},[199,8394,4117],{"class":1086},[199,8396,8321],{"class":898},[199,8398,4117],{"class":1086},[199,8400,8326],{"class":205},[199,8402,4117],{"class":1086},[199,8404,4139],{"class":205},[199,8406,8407,8409,8411],{"class":201,"line":1031},[199,8408,6989],{"class":1086},[199,8410,3149],{"class":205},[199,8412,8413],{"class":1454},"\u002F\u002F或者不写\n",[199,8415,8416],{"class":201,"line":1043},[199,8417,671],{"class":205},[199,8419,8420,8422,8424],{"class":201,"line":1049},[199,8421,3100],{"class":1086},[199,8423,4889],{"class":878},[199,8425,4892],{"class":205},[199,8427,8428],{"class":201,"line":1054},[199,8429,4485],{"class":205},[199,8431,8432,8434,8436,8438,8440],{"class":201,"line":1062},[199,8433,4901],{"class":1086},[199,8435,4338],{"class":205},[199,8437,895],{"class":1086},[199,8439,3528],{"class":1018},[199,8441,1028],{"class":205},[199,8443,8444,8446,8448,8450,8452],{"class":201,"line":1075},[199,8445,4901],{"class":1086},[199,8447,5737],{"class":205},[199,8449,895],{"class":1086},[199,8451,3779],{"class":1018},[199,8453,1028],{"class":205},[199,8455,8456,8459],{"class":201,"line":1092},[199,8457,8458],{"class":878},"    swap",[199,8460,8234],{"class":205},[199,8462,8463],{"class":201,"line":1107},[199,8464,671],{"class":205},[14,8466,8468],{"id":8467},"_24函数的常见形式","2.4函数的常见形式",[24,8470,8471],{},[27,8472,8473],{},"无参无返",[190,8475,8477],{"className":3086,"code":8476,"language":3088,"meta":57,"style":57},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[196,8478,8479,8488,8492,8505,8509,8517,8521,8526,8534],{"__ignoreMap":57},[199,8480,8481,8483,8486],{"class":201,"line":202},[199,8482,8261],{"class":1086},[199,8484,8485],{"class":878}," test01",[199,8487,4892],{"class":205},[199,8489,8490],{"class":201,"line":36},[199,8491,4485],{"class":205},[199,8493,8494,8496,8498,8501,8503],{"class":201,"line":73},[199,8495,4490],{"class":205},[199,8497,4117],{"class":1086},[199,8499,8500],{"class":898},"\"你好\"",[199,8502,4117],{"class":1086},[199,8504,4139],{"class":205},[199,8506,8507],{"class":201,"line":333},[199,8508,671],{"class":205},[199,8510,8511,8513,8515],{"class":201,"line":227},[199,8512,3100],{"class":1086},[199,8514,4889],{"class":878},[199,8516,4892],{"class":205},[199,8518,8519],{"class":201,"line":238},[199,8520,4485],{"class":205},[199,8522,8523],{"class":201,"line":252},[199,8524,8525],{"class":1454},"    \u002F\u002F函数调用\n",[199,8527,8528,8531],{"class":201,"line":388},[199,8529,8530],{"class":878},"    test01",[199,8532,8533],{"class":205},"();\n",[199,8535,8536],{"class":201,"line":415},[199,8537,671],{"class":205},[24,8539,8540],{"start":36},[27,8541,8542],{},"有参无返",[190,8544,8546],{"className":3086,"code":8545,"language":3088,"meta":57,"style":57},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[196,8547,8548,8563,8567,8579,8583,8591,8595,8606],{"__ignoreMap":57},[199,8549,8550,8552,8555,8557,8559,8561],{"class":201,"line":202},[199,8551,8261],{"class":1086},[199,8553,8554],{"class":878}," test02",[199,8556,1537],{"class":205},[199,8558,3100],{"class":1086},[199,8560,4338],{"class":8113},[199,8562,1594],{"class":205},[199,8564,8565],{"class":201,"line":36},[199,8566,4485],{"class":205},[199,8568,8569,8571,8573,8575,8577],{"class":201,"line":73},[199,8570,4490],{"class":205},[199,8572,4117],{"class":1086},[199,8574,8500],{"class":898},[199,8576,4117],{"class":1086},[199,8578,4139],{"class":205},[199,8580,8581],{"class":201,"line":333},[199,8582,671],{"class":205},[199,8584,8585,8587,8589],{"class":201,"line":227},[199,8586,3100],{"class":1086},[199,8588,4889],{"class":878},[199,8590,4892],{"class":205},[199,8592,8593],{"class":201,"line":238},[199,8594,4485],{"class":205},[199,8596,8597,8600,8602,8604],{"class":201,"line":252},[199,8598,8599],{"class":878},"    test02",[199,8601,1537],{"class":205},[199,8603,3396],{"class":1018},[199,8605,5623],{"class":205},[199,8607,8608],{"class":201,"line":388},[199,8609,671],{"class":205},[24,8611,8612],{"start":73},[27,8613,8614],{},"无参有返",[190,8616,8618],{"className":3086,"code":8617,"language":3088,"meta":57,"style":57},"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",[196,8619,8620,8629,8633,8645,8654,8658,8666,8670,8683,8702],{"__ignoreMap":57},[199,8621,8622,8624,8627],{"class":201,"line":202},[199,8623,3100],{"class":1086},[199,8625,8626],{"class":878}," test03",[199,8628,4892],{"class":205},[199,8630,8631],{"class":201,"line":36},[199,8632,4485],{"class":205},[199,8634,8635,8637,8639,8641,8643],{"class":201,"line":73},[199,8636,4490],{"class":205},[199,8638,4117],{"class":1086},[199,8640,8500],{"class":898},[199,8642,4117],{"class":1086},[199,8644,4139],{"class":205},[199,8646,8647,8649,8652],{"class":201,"line":333},[199,8648,6989],{"class":1086},[199,8650,8651],{"class":1018}," 100",[199,8653,1028],{"class":205},[199,8655,8656],{"class":201,"line":227},[199,8657,671],{"class":205},[199,8659,8660,8662,8664],{"class":201,"line":238},[199,8661,3100],{"class":1086},[199,8663,4889],{"class":878},[199,8665,4892],{"class":205},[199,8667,8668],{"class":201,"line":252},[199,8669,4485],{"class":205},[199,8671,8672,8674,8676,8678,8681],{"class":201,"line":388},[199,8673,4901],{"class":1086},[199,8675,8114],{"class":205},[199,8677,895],{"class":1086},[199,8679,8680],{"class":878},"test03",[199,8682,8533],{"class":205},[199,8684,8685,8687,8689,8691,8693,8695,8697,8699],{"class":201,"line":415},[199,8686,4490],{"class":205},[199,8688,4117],{"class":1086},[199,8690,8304],{"class":898},[199,8692,4117],{"class":1086},[199,8694,8139],{"class":205},[199,8696,4117],{"class":1086},[199,8698,4182],{"class":205},[199,8700,8701],{"class":1454}," \u002F\u002F100\n",[199,8703,8704],{"class":201,"line":426},[199,8705,671],{"class":205},[31,8707,8708],{},"4.有参有返",[190,8710,8712],{"className":3086,"code":8711,"language":3088,"meta":57,"style":57},"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",[196,8713,8714,8729,8733,8746,8752,8756,8765,8769,8781,8795,8810],{"__ignoreMap":57},[199,8715,8716,8718,8721,8723,8725,8727],{"class":201,"line":202},[199,8717,3100],{"class":1086},[199,8719,8720],{"class":878}," test04",[199,8722,1537],{"class":205},[199,8724,3100],{"class":1086},[199,8726,4338],{"class":8113},[199,8728,1594],{"class":205},[199,8730,8731],{"class":201,"line":36},[199,8732,4485],{"class":205},[199,8734,8735,8737,8739,8742,8744],{"class":201,"line":73},[199,8736,4490],{"class":205},[199,8738,4117],{"class":1086},[199,8740,8741],{"class":898},"\"hello\"",[199,8743,4117],{"class":1086},[199,8745,4139],{"class":205},[199,8747,8748,8750],{"class":201,"line":333},[199,8749,6989],{"class":1086},[199,8751,4372],{"class":205},[199,8753,8754],{"class":201,"line":227},[199,8755,671],{"class":205},[199,8757,8758,8760,8763],{"class":201,"line":238},[199,8759,3100],{"class":1086},[199,8761,8762],{"class":878}," mian",[199,8764,4892],{"class":205},[199,8766,8767],{"class":201,"line":252},[199,8768,4485],{"class":205},[199,8770,8771,8773,8775,8777,8779],{"class":201,"line":388},[199,8772,4901],{"class":1086},[199,8774,5737],{"class":205},[199,8776,895],{"class":1086},[199,8778,1115],{"class":1018},[199,8780,1028],{"class":205},[199,8782,8783,8785,8787,8789,8792],{"class":201,"line":415},[199,8784,4901],{"class":1086},[199,8786,5753],{"class":205},[199,8788,895],{"class":1086},[199,8790,8791],{"class":878},"test04",[199,8793,8794],{"class":205},"(b);\n",[199,8796,8797,8799,8801,8803,8805,8807],{"class":201,"line":426},[199,8798,4490],{"class":205},[199,8800,4117],{"class":1086},[199,8802,3374],{"class":205},[199,8804,4117],{"class":1086},[199,8806,4182],{"class":205},[199,8808,8809],{"class":1454}," \u002F\u002F1\n",[199,8811,8812],{"class":201,"line":1015},[199,8813,671],{"class":205},[14,8815,8817],{"id":8816},"_25函数的声明","2.5函数的声明",[31,8819,8820],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[31,8822,8823,8824],{},"函数的",[49,8825,8826],{},"声明可以多次，但是函数的定义只能有一次",[190,8828,8830],{"className":3086,"code":8829,"language":3088,"meta":57,"style":57},"\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",[196,8831,8832,8837,8842,8867,8876,8880,8892,8904,8920,8924,8944,8948,8967],{"__ignoreMap":57},[199,8833,8834],{"class":201,"line":202},[199,8835,8836],{"class":1454},"\u002F\u002F函数声明\n",[199,8838,8839],{"class":201,"line":36},[199,8840,8841],{"class":1454},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[199,8843,8844,8846,8849,8851,8853,8855,8857,8859,8861,8864],{"class":201,"line":73},[199,8845,3100],{"class":1086},[199,8847,8848],{"class":878}," max",[199,8850,1537],{"class":205},[199,8852,3100],{"class":1086},[199,8854,4338],{"class":8113},[199,8856,3461],{"class":205},[199,8858,3100],{"class":1086},[199,8860,5737],{"class":8113},[199,8862,8863],{"class":205},");",[199,8865,8866],{"class":1454},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[199,8868,8869,8871,8873],{"class":201,"line":333},[199,8870,3100],{"class":1086},[199,8872,4889],{"class":878},[199,8874,8875],{"class":205},"() \n",[199,8877,8878],{"class":201,"line":227},[199,8879,4485],{"class":205},[199,8881,8882,8884,8886,8888,8890],{"class":201,"line":238},[199,8883,4901],{"class":1086},[199,8885,4338],{"class":205},[199,8887,895],{"class":1086},[199,8889,3528],{"class":1018},[199,8891,1028],{"class":205},[199,8893,8894,8896,8898,8900,8902],{"class":201,"line":252},[199,8895,4901],{"class":1086},[199,8897,5737],{"class":205},[199,8899,895],{"class":1086},[199,8901,3779],{"class":1018},[199,8903,1028],{"class":205},[199,8905,8906,8908,8910,8913,8916,8918],{"class":201,"line":388},[199,8907,4490],{"class":205},[199,8909,4117],{"class":1086},[199,8911,8912],{"class":878},"max",[199,8914,8915],{"class":205},"(a,b)",[199,8917,4117],{"class":1086},[199,8919,4139],{"class":205},[199,8921,8922],{"class":201,"line":415},[199,8923,671],{"class":205},[199,8925,8926,8928,8930,8932,8934,8936,8938,8940,8942],{"class":201,"line":426},[199,8927,3100],{"class":1086},[199,8929,8848],{"class":878},[199,8931,1537],{"class":205},[199,8933,3100],{"class":1086},[199,8935,4338],{"class":8113},[199,8937,3461],{"class":205},[199,8939,3100],{"class":1086},[199,8941,5737],{"class":8113},[199,8943,1594],{"class":205},[199,8945,8946],{"class":201,"line":1015},[199,8947,4485],{"class":205},[199,8949,8950,8952,8954,8956,8958,8960,8962,8964],{"class":201,"line":1031},[199,8951,6989],{"class":1086},[199,8953,4338],{"class":205},[199,8955,1217],{"class":1086},[199,8957,3349],{"class":205},[199,8959,4060],{"class":1086},[199,8961,2867],{"class":205},[199,8963,3938],{"class":1086},[199,8965,8966],{"class":205},"b;\n",[199,8968,8969],{"class":201,"line":1043},[199,8970,671],{"class":205},[14,8972,8974],{"id":8973},"_26函数的分文件编写","2.6函数的分文件编写",[31,8976,8977],{},"4个步骤：",[176,8979,8980,8983,8986,8989],{},[27,8981,8982],{},"1.创建后缀名为.h的头文件",[27,8984,8985],{},"2.创建后缀名为.cpp的源文件",[27,8987,8988],{},"3.在头文件中写函数的定义",[27,8990,8991],{},"4.在源文件中写函数的定义\n示例：",[31,8993,8994],{},"头文件：swap.h",[190,8996,8998],{"className":3086,"code":8997,"language":3088,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[196,8999,9000,9006,9016,9020],{"__ignoreMap":57},[199,9001,9002,9004],{"class":201,"line":202},[199,9003,4866],{"class":1086},[199,9005,4869],{"class":898},[199,9007,9008,9010,9012,9014],{"class":201,"line":36},[199,9009,4874],{"class":1086},[199,9011,4877],{"class":1086},[199,9013,4880],{"class":878},[199,9015,1028],{"class":205},[199,9017,9018],{"class":201,"line":73},[199,9019,8836],{"class":1454},[199,9021,9022,9024,9026,9028,9030,9032,9034,9036,9038],{"class":201,"line":333},[199,9023,8261],{"class":1086},[199,9025,8264],{"class":878},[199,9027,1537],{"class":205},[199,9029,3100],{"class":1086},[199,9031,4338],{"class":8113},[199,9033,3461],{"class":205},[199,9035,3100],{"class":1086},[199,9037,5737],{"class":8113},[199,9039,5623],{"class":205},[31,9041,9042],{},"源文件：swap.cpp",[190,9044,9046],{"className":3086,"code":9045,"language":3088,"meta":57,"style":57},"#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",[196,9047,9048,9055,9060,9080,9084,9095,9104,9113,9130,9147],{"__ignoreMap":57},[199,9049,9050,9052],{"class":201,"line":202},[199,9051,4866],{"class":1086},[199,9053,9054],{"class":898}," \"swap.h\"\n",[199,9056,9057],{"class":201,"line":36},[199,9058,9059],{"class":1454},"\u002F\u002F函数的定义\n",[199,9061,9062,9064,9066,9068,9070,9072,9074,9076,9078],{"class":201,"line":73},[199,9063,8261],{"class":1086},[199,9065,8264],{"class":878},[199,9067,1537],{"class":205},[199,9069,3100],{"class":1086},[199,9071,4338],{"class":8113},[199,9073,3461],{"class":205},[199,9075,3100],{"class":1086},[199,9077,5737],{"class":8113},[199,9079,1594],{"class":205},[199,9081,9082],{"class":201,"line":333},[199,9083,4485],{"class":205},[199,9085,9086,9088,9090,9092],{"class":201,"line":227},[199,9087,4901],{"class":1086},[199,9089,7153],{"class":205},[199,9091,895],{"class":1086},[199,9093,9094],{"class":205},"a;\n",[199,9096,9097,9100,9102],{"class":201,"line":238},[199,9098,9099],{"class":205},"    a",[199,9101,895],{"class":1086},[199,9103,8966],{"class":205},[199,9105,9106,9109,9111],{"class":201,"line":252},[199,9107,9108],{"class":205},"    b",[199,9110,895],{"class":1086},[199,9112,7178],{"class":205},[199,9114,9115,9117,9119,9122,9124,9126,9128],{"class":201,"line":388},[199,9116,4490],{"class":205},[199,9118,4117],{"class":1086},[199,9120,9121],{"class":898},"\"a=\"",[199,9123,4117],{"class":1086},[199,9125,2867],{"class":205},[199,9127,4117],{"class":1086},[199,9129,4139],{"class":205},[199,9131,9132,9134,9136,9139,9141,9143,9145],{"class":201,"line":415},[199,9133,4490],{"class":205},[199,9135,4117],{"class":1086},[199,9137,9138],{"class":898},"\"b=\"",[199,9140,4117],{"class":1086},[199,9142,3349],{"class":205},[199,9144,4117],{"class":1086},[199,9146,4139],{"class":205},[199,9148,9149],{"class":201,"line":426},[199,9150,671],{"class":205},[1002,9152,9153],{},"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":57,"searchDepth":36,"depth":36,"links":9155},[9156,9157,9158,9159,9160,9161],{"id":8069,"depth":36,"text":8070},{"id":8158,"depth":36,"text":8159},{"id":8241,"depth":36,"text":8242},{"id":8467,"depth":36,"text":8468},{"id":8816,"depth":36,"text":8817},{"id":8973,"depth":36,"text":8974},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":8061,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":9168,"title":9169,"body":9170,"description":9177,"extension":3024,"meta":10582,"navigation":906,"path":10583,"seo":10584,"stem":10585,"__hash__":10586},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":9171,"toc":10572},[9172,9175,9178,9182,9344,9348,9351,9354,9357,9360,9500,9504,9507,9510,9513,9578,9582,9587,9654,9657,9661,9664,9675,9680,9700,9703,9708,9727,9730,9734,9753,9756,9760,9995,9999,10002,10005,10008,10170,10173,10177,10180,10186,10569],[10,9173,9169],{"id":9174},"_3指针",[31,9176,9177],{},"通过指针保存一个地址，指针就是个地址",[14,9179,9181],{"id":9180},"_31定义指针","3.1定义指针",[190,9183,9185],{"className":3086,"code":9184,"language":3088,"meta":57,"style":57},"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",[196,9186,9187,9195,9199,9204,9216,9221,9229,9239,9257,9277,9281,9286,9291,9296,9310,9326,9340],{"__ignoreMap":57},[199,9188,9189,9191,9193],{"class":201,"line":202},[199,9190,3100],{"class":1086},[199,9192,4889],{"class":878},[199,9194,4892],{"class":205},[199,9196,9197],{"class":201,"line":36},[199,9198,4485],{"class":205},[199,9200,9201],{"class":201,"line":73},[199,9202,9203],{"class":1454},"    \u002F\u002F1.定义指针\n",[199,9205,9206,9208,9210,9212,9214],{"class":201,"line":333},[199,9207,4901],{"class":1086},[199,9209,4338],{"class":205},[199,9211,895],{"class":1086},[199,9213,3528],{"class":1018},[199,9215,1028],{"class":205},[199,9217,9218],{"class":201,"line":227},[199,9219,9220],{"class":1454},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[199,9222,9223,9226],{"class":201,"line":238},[199,9224,9225],{"class":1086},"    int*",[199,9227,9228],{"class":205},"p;\n",[199,9230,9231,9234,9237],{"class":201,"line":252},[199,9232,9233],{"class":205},"    p",[199,9235,9236],{"class":1086},"=&",[199,9238,9094],{"class":205},[199,9240,9241,9243,9245,9248,9251,9253,9255],{"class":201,"line":388},[199,9242,4490],{"class":205},[199,9244,4117],{"class":1086},[199,9246,9247],{"class":898},"\"a的地址为：\"",[199,9249,9250],{"class":1086},"\u003C\u003C&",[199,9252,2867],{"class":205},[199,9254,4117],{"class":1086},[199,9256,4139],{"class":205},[199,9258,9259,9261,9263,9266,9268,9270,9272,9274],{"class":201,"line":415},[199,9260,4490],{"class":205},[199,9262,4117],{"class":1086},[199,9264,9265],{"class":898},"\"指针p为：\"",[199,9267,4117],{"class":1086},[199,9269,31],{"class":205},[199,9271,4117],{"class":1086},[199,9273,4182],{"class":205},[199,9275,9276],{"class":1454},"\u002F\u002F指针p表示的就是a的地址\n",[199,9278,9279],{"class":201,"line":426},[199,9280,907],{"emptyLinePlaceholder":906},[199,9282,9283],{"class":201,"line":1015},[199,9284,9285],{"class":1454},"    \u002F\u002F2.使用指针\n",[199,9287,9288],{"class":201,"line":1031},[199,9289,9290],{"class":1454},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[199,9292,9293],{"class":201,"line":1043},[199,9294,9295],{"class":1454},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[199,9297,9298,9301,9303,9305,9308],{"class":201,"line":1049},[199,9299,9300],{"class":1086},"    *",[199,9302,31],{"class":205},[199,9304,895],{"class":1086},[199,9306,9307],{"class":1018},"1000",[199,9309,1028],{"class":205},[199,9311,9312,9314,9317,9319,9321,9323],{"class":201,"line":1054},[199,9313,4490],{"class":205},[199,9315,9316],{"class":1086},"\u003C\u003C*",[199,9318,31],{"class":205},[199,9320,4117],{"class":1086},[199,9322,4182],{"class":205},[199,9324,9325],{"class":1454},"\u002F\u002F1000\n",[199,9327,9328,9330,9332,9334,9336,9338],{"class":201,"line":1062},[199,9329,4490],{"class":205},[199,9331,4117],{"class":1086},[199,9333,2867],{"class":205},[199,9335,4117],{"class":1086},[199,9337,4182],{"class":205},[199,9339,9325],{"class":1454},[199,9341,9342],{"class":201,"line":1075},[199,9343,671],{"class":205},[14,9345,9347],{"id":9346},"_32指针所占的内存空间","3.2指针所占的内存空间",[31,9349,9350],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[31,9352,9353],{},"在32位操作系统下：占用4个字节空间",[31,9355,9356],{},"在64位操作系统下：占用8个字节空间",[31,9358,9359],{},"上方是不管啥数据类型的",[190,9361,9363],{"className":3086,"code":9362,"language":3088,"meta":57,"style":57},"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",[196,9364,9365,9373,9377,9382,9394,9399,9404,9409,9422,9444,9470,9496],{"__ignoreMap":57},[199,9366,9367,9369,9371],{"class":201,"line":202},[199,9368,3100],{"class":1086},[199,9370,4889],{"class":878},[199,9372,4892],{"class":205},[199,9374,9375],{"class":201,"line":36},[199,9376,4485],{"class":205},[199,9378,9379],{"class":201,"line":73},[199,9380,9381],{"class":1454},"    \u002F\u002F指针所占内存空间\n",[199,9383,9384,9386,9388,9390,9392],{"class":201,"line":333},[199,9385,4901],{"class":1086},[199,9387,4338],{"class":205},[199,9389,895],{"class":1086},[199,9391,3528],{"class":1018},[199,9393,1028],{"class":205},[199,9395,9396],{"class":201,"line":227},[199,9397,9398],{"class":1454},"    \u002F\u002Fint *p;\n",[199,9400,9401],{"class":201,"line":238},[199,9402,9403],{"class":1454},"    \u002F\u002Fp=&a;\n",[199,9405,9406],{"class":201,"line":252},[199,9407,9408],{"class":1454},"    \u002F\u002F上述可以写为以下：\n",[199,9410,9411,9413,9416,9418,9420],{"class":201,"line":388},[199,9412,4901],{"class":1086},[199,9414,9415],{"class":1086}," *",[199,9417,31],{"class":205},[199,9419,9236],{"class":1086},[199,9421,9094],{"class":205},[199,9423,9424,9427,9429,9432,9434,9437,9439,9441],{"class":201,"line":415},[199,9425,9426],{"class":205},"    cout ",[199,9428,4117],{"class":1086},[199,9430,9431],{"class":898},"\"sizeof(int *)\"",[199,9433,4312],{"class":1086},[199,9435,9436],{"class":205},"(p)",[199,9438,4117],{"class":1086},[199,9440,4182],{"class":205},[199,9442,9443],{"class":1454},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[199,9445,9446,9448,9450,9452,9454,9456,9458,9460,9462,9464,9467],{"class":201,"line":426},[199,9447,9426],{"class":205},[199,9449,4117],{"class":1086},[199,9451,9431],{"class":898},[199,9453,4312],{"class":1086},[199,9455,1537],{"class":205},[199,9457,3100],{"class":1086},[199,9459,9415],{"class":1086},[199,9461,3512],{"class":205},[199,9463,4117],{"class":1086},[199,9465,9466],{"class":205},"endl",[199,9468,9469],{"class":1454},"  \u002F\u002F4字节(32位的话)\n",[199,9471,9472,9474,9476,9479,9481,9483,9485,9487,9489,9491,9493],{"class":201,"line":1015},[199,9473,9426],{"class":205},[199,9475,4117],{"class":1086},[199,9477,9478],{"class":898},"\"sizeof(char *)\"",[199,9480,4312],{"class":1086},[199,9482,1537],{"class":205},[199,9484,3187],{"class":1086},[199,9486,9415],{"class":1086},[199,9488,3512],{"class":205},[199,9490,4117],{"class":1086},[199,9492,4182],{"class":205},[199,9494,9495],{"class":1454}," \u002F\u002F4字节(32位的话)\n",[199,9497,9498],{"class":201,"line":1031},[199,9499,671],{"class":205},[14,9501,9503],{"id":9502},"_33空指针","3.3空指针",[31,9505,9506],{},"空指针：指针变量指向内存中编号为0的空间",[31,9508,9509],{},"用途：初始化指针变量",[31,9511,9512],{},"注意：空指针指向的内存是不可以访问的",[190,9514,9516],{"className":3086,"code":9515,"language":3088,"meta":57,"style":57},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[196,9517,9518,9526,9530,9535,9549,9554,9569,9574],{"__ignoreMap":57},[199,9519,9520,9522,9524],{"class":201,"line":202},[199,9521,3100],{"class":1086},[199,9523,4889],{"class":878},[199,9525,4892],{"class":205},[199,9527,9528],{"class":201,"line":36},[199,9529,4485],{"class":205},[199,9531,9532],{"class":201,"line":73},[199,9533,9534],{"class":1454},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[199,9536,9537,9539,9541,9543,9545,9547],{"class":201,"line":333},[199,9538,4901],{"class":1086},[199,9540,9415],{"class":1086},[199,9542,31],{"class":205},[199,9544,895],{"class":1086},[199,9546,5306],{"class":1018},[199,9548,1028],{"class":205},[199,9550,9551],{"class":201,"line":227},[199,9552,9553],{"class":1454},"    \u002F\u002F2.空指针不能进行访问\n",[199,9555,9556,9558,9560,9562,9564,9566],{"class":201,"line":238},[199,9557,9300],{"class":1086},[199,9559,31],{"class":205},[199,9561,895],{"class":1086},[199,9563,3396],{"class":1018},[199,9565,3149],{"class":205},[199,9567,9568],{"class":1454},"\u002F\u002F直接报错，压根不能访问\n",[199,9570,9571],{"class":201,"line":252},[199,9572,9573],{"class":1454},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[199,9575,9576],{"class":201,"line":388},[199,9577,671],{"class":205},[14,9579,9581],{"id":9580},"_34野指针","3.4野指针",[31,9583,9584],{},[49,9585,9586],{},"指针变量指向非法的内存空间",[190,9588,9590],{"className":3086,"code":9589,"language":3088,"meta":57,"style":57},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[196,9591,9592,9600,9604,9633,9638,9650],{"__ignoreMap":57},[199,9593,9594,9596,9598],{"class":201,"line":202},[199,9595,3100],{"class":1086},[199,9597,4889],{"class":878},[199,9599,4892],{"class":205},[199,9601,9602],{"class":201,"line":36},[199,9603,4485],{"class":205},[199,9605,9606,9608,9610,9612,9614,9616,9618,9620,9622,9625,9628,9630],{"class":201,"line":73},[199,9607,4901],{"class":1086},[199,9609,9415],{"class":1086},[199,9611,31],{"class":205},[199,9613,895],{"class":1086},[199,9615,1537],{"class":205},[199,9617,3100],{"class":1086},[199,9619,9415],{"class":1086},[199,9621,3512],{"class":205},[199,9623,9624],{"class":1086},"0x",[199,9626,9627],{"class":1018},"1100",[199,9629,3149],{"class":205},[199,9631,9632],{"class":1454}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[199,9634,9635],{"class":201,"line":333},[199,9636,9637],{"class":1454},"    \u002F\u002F访问野指针报错\n",[199,9639,9640,9642,9644,9646,9648],{"class":201,"line":227},[199,9641,4490],{"class":205},[199,9643,9316],{"class":1086},[199,9645,31],{"class":205},[199,9647,4117],{"class":1086},[199,9649,4139],{"class":205},[199,9651,9652],{"class":201,"line":238},[199,9653,671],{"class":205},[31,9655,9656],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,9658,9660],{"id":9659},"_35const修饰指针","3.5const修饰指针",[31,9662,9663],{},"三种情况：",[176,9665,9666,9669,9672],{},[27,9667,9668],{},"const修饰指针 常量指针",[27,9670,9671],{},"const修饰常量 指针常量",[27,9673,9674],{},"const即修饰指针，又修饰常量",[24,9676,9677],{},[27,9678,9679],{},"常量指针",[190,9681,9683],{"className":3086,"code":9682,"language":3088,"meta":57,"style":57},"const int *p=&a;\n",[196,9684,9685],{"__ignoreMap":57},[199,9686,9687,9690,9692,9694,9696,9698],{"class":201,"line":202},[199,9688,9689],{"class":1086},"const",[199,9691,5296],{"class":1086},[199,9693,9415],{"class":1086},[199,9695,31],{"class":205},[199,9697,9236],{"class":1086},[199,9699,9094],{"class":205},[31,9701,9702],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[24,9704,9705],{"start":36},[27,9706,9707],{},"指针常量",[190,9709,9711],{"className":3086,"code":9710,"language":3088,"meta":57,"style":57},"int *const p=&a;\n",[196,9712,9713],{"__ignoreMap":57},[199,9714,9715,9717,9720,9723,9725],{"class":201,"line":202},[199,9716,3100],{"class":1086},[199,9718,9719],{"class":1086}," *const",[199,9721,9722],{"class":205}," p",[199,9724,9236],{"class":1086},[199,9726,9094],{"class":205},[31,9728,9729],{},"指针的指向不可以改，指针指向的值可以改",[24,9731,9732],{"start":73},[27,9733,9674],{},[190,9735,9737],{"className":3086,"code":9736,"language":3088,"meta":57,"style":57},"const int *const p=&a;\n",[196,9738,9739],{"__ignoreMap":57},[199,9740,9741,9743,9745,9747,9749,9751],{"class":201,"line":202},[199,9742,9689],{"class":1086},[199,9744,5296],{"class":1086},[199,9746,9719],{"class":1086},[199,9748,9722],{"class":205},[199,9750,9236],{"class":1086},[199,9752,9094],{"class":205},[31,9754,9755],{},"指针的指向和指针指向的值都不可以改变",[14,9757,9759],{"id":9758},"_36指针和数组","3.6指针和数组",[190,9761,9763],{"className":3086,"code":9762,"language":3088,"meta":57,"style":57},"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",[196,9764,9765,9773,9777,9782,9836,9857,9873,9889,9900,9917,9922,9936,9962,9966,9978,9987,9991],{"__ignoreMap":57},[199,9766,9767,9769,9771],{"class":201,"line":202},[199,9768,3100],{"class":1086},[199,9770,4889],{"class":878},[199,9772,4892],{"class":205},[199,9774,9775],{"class":201,"line":36},[199,9776,4485],{"class":205},[199,9778,9779],{"class":201,"line":73},[199,9780,9781],{"class":1454},"    \u002F\u002F利用指针访问数组中的元素\n",[199,9783,9784,9786,9788,9790,9792,9794,9796,9798,9800,9802,9804,9806,9808,9810,9812,9814,9816,9818,9820,9822,9824,9826,9828,9830,9832,9834],{"class":201,"line":333},[199,9785,4901],{"class":1086},[199,9787,6862],{"class":205},[199,9789,3528],{"class":1018},[199,9791,1667],{"class":205},[199,9793,895],{"class":1086},[199,9795,3974],{"class":205},[199,9797,1115],{"class":1018},[199,9799,3461],{"class":205},[199,9801,1925],{"class":1018},[199,9803,3461],{"class":205},[199,9805,1920],{"class":1018},[199,9807,3461],{"class":205},[199,9809,1915],{"class":1018},[199,9811,3461],{"class":205},[199,9813,1909],{"class":1018},[199,9815,3461],{"class":205},[199,9817,3428],{"class":1018},[199,9819,3461],{"class":205},[199,9821,3452],{"class":1018},[199,9823,3461],{"class":205},[199,9825,3478],{"class":1018},[199,9827,3461],{"class":205},[199,9829,3503],{"class":1018},[199,9831,3461],{"class":205},[199,9833,3528],{"class":1018},[199,9835,6894],{"class":205},[199,9837,9838,9840,9842,9845,9847,9849,9851,9853,9855],{"class":201,"line":227},[199,9839,4490],{"class":205},[199,9841,4117],{"class":1086},[199,9843,9844],{"class":898},"\"数组的第一个元素为：\"",[199,9846,4117],{"class":1086},[199,9848,6806],{"class":205},[199,9850,1025],{"class":1018},[199,9852,1667],{"class":205},[199,9854,4117],{"class":1086},[199,9856,4139],{"class":205},[199,9858,9859,9861,9863,9865,9867,9870],{"class":201,"line":238},[199,9860,4901],{"class":1086},[199,9862,9415],{"class":1086},[199,9864,31],{"class":205},[199,9866,895],{"class":1086},[199,9868,9869],{"class":205},"arr;",[199,9871,9872],{"class":1454},"\u002F\u002F注意数才要加取地址符号&\n",[199,9874,9875,9877,9879,9881,9883,9885,9887],{"class":201,"line":252},[199,9876,4490],{"class":205},[199,9878,4117],{"class":1086},[199,9880,9844],{"class":898},[199,9882,9316],{"class":1086},[199,9884,31],{"class":205},[199,9886,4117],{"class":1086},[199,9888,4139],{"class":205},[199,9890,9891,9893,9895,9897],{"class":201,"line":388},[199,9892,9233],{"class":205},[199,9894,1510],{"class":1086},[199,9896,3149],{"class":205},[199,9898,9899],{"class":1454}," \u002F\u002F让指针向后偏移4个字节\n",[199,9901,9902,9904,9906,9909,9911,9913,9915],{"class":201,"line":415},[199,9903,4490],{"class":205},[199,9905,4117],{"class":1086},[199,9907,9908],{"class":898},"\"数组的第二个元素为：\"",[199,9910,9316],{"class":1086},[199,9912,31],{"class":205},[199,9914,4117],{"class":1086},[199,9916,4139],{"class":205},[199,9918,9919],{"class":201,"line":426},[199,9920,9921],{"class":1454},"    \u002F\u002F利用指针遍历数组\n",[199,9923,9924,9926,9928,9931,9933],{"class":201,"line":1015},[199,9925,4901],{"class":1086},[199,9927,9415],{"class":1086},[199,9929,9930],{"class":205},"p2",[199,9932,895],{"class":1086},[199,9934,9935],{"class":205},"arr;\n",[199,9937,9938,9940,9942,9944,9946,9948,9950,9952,9954,9956,9958,9960],{"class":201,"line":1031},[199,9939,1937],{"class":1086},[199,9941,1484],{"class":205},[199,9943,3100],{"class":1086},[199,9945,5936],{"class":205},[199,9947,895],{"class":1086},[199,9949,1025],{"class":1018},[199,9951,5943],{"class":205},[199,9953,887],{"class":1086},[199,9955,3528],{"class":1018},[199,9957,5943],{"class":205},[199,9959,1510],{"class":1086},[199,9961,1594],{"class":205},[199,9963,9964],{"class":201,"line":1043},[199,9965,4946],{"class":205},[199,9967,9968,9970,9972,9974,9976],{"class":201,"line":1049},[199,9969,6352],{"class":205},[199,9971,9316],{"class":1086},[199,9973,9930],{"class":205},[199,9975,4117],{"class":1086},[199,9977,4139],{"class":205},[199,9979,9980,9983,9985],{"class":201,"line":1054},[199,9981,9982],{"class":205},"        p2",[199,9984,1510],{"class":1086},[199,9986,1028],{"class":205},[199,9988,9989],{"class":201,"line":1062},[199,9990,2097],{"class":205},[199,9992,9993],{"class":201,"line":1075},[199,9994,671],{"class":205},[14,9996,9998],{"id":9997},"_37指针和函数","3.7指针和函数",[31,10000,10001],{},"利用指针做函数参数，可以修改实参的值",[31,10003,10004],{},"值传递：只改变形参，不改变实参",[31,10006,10007],{},"地址传递：",[190,10009,10011],{"className":3086,"code":10010,"language":3088,"meta":57,"style":57},"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",[196,10012,10013,10038,10042,10054,10065,10075,10079,10087,10091,10103,10115,10120,10136,10151,10166],{"__ignoreMap":57},[199,10014,10015,10017,10019,10021,10023,10025,10028,10030,10032,10034,10036],{"class":201,"line":202},[199,10016,8261],{"class":1086},[199,10018,8264],{"class":878},[199,10020,1537],{"class":205},[199,10022,3100],{"class":1086},[199,10024,9415],{"class":1086},[199,10026,10027],{"class":8113},"p1",[199,10029,3461],{"class":205},[199,10031,3100],{"class":1086},[199,10033,9415],{"class":1086},[199,10035,9930],{"class":8113},[199,10037,1594],{"class":205},[199,10039,10040],{"class":201,"line":36},[199,10041,4485],{"class":205},[199,10043,10044,10046,10048,10051],{"class":201,"line":73},[199,10045,4901],{"class":1086},[199,10047,7153],{"class":205},[199,10049,10050],{"class":1086},"=*",[199,10052,10053],{"class":205},"p1;\n",[199,10055,10056,10058,10060,10062],{"class":201,"line":333},[199,10057,9300],{"class":1086},[199,10059,10027],{"class":205},[199,10061,10050],{"class":1086},[199,10063,10064],{"class":205},"p2;\n",[199,10066,10067,10069,10071,10073],{"class":201,"line":227},[199,10068,9300],{"class":1086},[199,10070,9930],{"class":205},[199,10072,895],{"class":1086},[199,10074,7178],{"class":205},[199,10076,10077],{"class":201,"line":238},[199,10078,671],{"class":205},[199,10080,10081,10083,10085],{"class":201,"line":252},[199,10082,3100],{"class":1086},[199,10084,4889],{"class":878},[199,10086,4892],{"class":205},[199,10088,10089],{"class":201,"line":388},[199,10090,4485],{"class":205},[199,10092,10093,10095,10097,10099,10101],{"class":201,"line":415},[199,10094,4901],{"class":1086},[199,10096,4338],{"class":205},[199,10098,895],{"class":1086},[199,10100,3528],{"class":1018},[199,10102,1028],{"class":205},[199,10104,10105,10107,10109,10111,10113],{"class":201,"line":426},[199,10106,4901],{"class":1086},[199,10108,5737],{"class":205},[199,10110,895],{"class":1086},[199,10112,3779],{"class":1018},[199,10114,1028],{"class":205},[199,10116,10117],{"class":201,"line":1015},[199,10118,10119],{"class":1454},"    \u002F\u002F地址传递\n",[199,10121,10122,10124,10126,10128,10131,10133],{"class":201,"line":1031},[199,10123,8458],{"class":878},[199,10125,1537],{"class":205},[199,10127,3437],{"class":1086},[199,10129,10130],{"class":205},"a,",[199,10132,3437],{"class":1086},[199,10134,10135],{"class":205},"b);\n",[199,10137,10138,10140,10142,10144,10146,10148],{"class":201,"line":1043},[199,10139,4490],{"class":205},[199,10141,4117],{"class":1086},[199,10143,2867],{"class":205},[199,10145,4117],{"class":1086},[199,10147,4182],{"class":205},[199,10149,10150],{"class":1454},"\u002F\u002F20\n",[199,10152,10153,10155,10157,10159,10161,10163],{"class":201,"line":1049},[199,10154,4490],{"class":205},[199,10156,4117],{"class":1086},[199,10158,3349],{"class":205},[199,10160,4117],{"class":1086},[199,10162,4182],{"class":205},[199,10164,10165],{"class":1454},"\u002F\u002F10\n",[199,10167,10168],{"class":201,"line":1054},[199,10169,671],{"class":205},[31,10171,10172],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,10174,10176],{"id":10175},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[31,10178,10179],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[31,10181,10182,10183,10185],{},"例如数组：int arr",[199,10184,3528],{},"={4,3,6,9,1,2,10,8,7,5}",[190,10187,10189],{"className":3086,"code":10188,"language":3088,"meta":57,"style":57},"#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",[196,10190,10191,10197,10207,10231,10235,10266,10270,10304,10308,10326,10330,10341,10356,10371,10375,10379,10383,10387,10391,10399,10403,10408,10462,10474,10486,10491,10499,10503,10508,10533,10537,10552,10561,10565],{"__ignoreMap":57},[199,10192,10193,10195],{"class":201,"line":202},[199,10194,4866],{"class":1086},[199,10196,4869],{"class":898},[199,10198,10199,10201,10203,10205],{"class":201,"line":36},[199,10200,4874],{"class":1086},[199,10202,4877],{"class":1086},[199,10204,4880],{"class":878},[199,10206,1028],{"class":205},[199,10208,10209,10211,10214,10216,10218,10220,10222,10224,10226,10229],{"class":201,"line":73},[199,10210,8261],{"class":1086},[199,10212,10213],{"class":878}," bubbleSort",[199,10215,1537],{"class":205},[199,10217,3100],{"class":1086},[199,10219,9415],{"class":1086},[199,10221,31],{"class":8113},[199,10223,3461],{"class":205},[199,10225,3100],{"class":1086},[199,10227,10228],{"class":8113}," len",[199,10230,1594],{"class":205},[199,10232,10233],{"class":201,"line":333},[199,10234,4485],{"class":205},[199,10236,10237,10239,10241,10243,10245,10247,10249,10251,10253,10256,10258,10260,10262,10264],{"class":201,"line":227},[199,10238,1937],{"class":1086},[199,10240,1537],{"class":205},[199,10242,3100],{"class":1086},[199,10244,5936],{"class":205},[199,10246,895],{"class":1086},[199,10248,1025],{"class":1018},[199,10250,5943],{"class":205},[199,10252,887],{"class":1086},[199,10254,10255],{"class":205},"len",[199,10257,1998],{"class":1086},[199,10259,1115],{"class":1018},[199,10261,5943],{"class":205},[199,10263,1510],{"class":1086},[199,10265,1594],{"class":205},[199,10267,10268],{"class":201,"line":238},[199,10269,4946],{"class":205},[199,10271,10272,10274,10276,10278,10280,10282,10284,10286,10288,10290,10292,10294,10296,10298,10300,10302],{"class":201,"line":252},[199,10273,1481],{"class":1086},[199,10275,1537],{"class":205},[199,10277,3100],{"class":1086},[199,10279,6311],{"class":205},[199,10281,895],{"class":1086},[199,10283,1025],{"class":1018},[199,10285,6318],{"class":205},[199,10287,887],{"class":1086},[199,10289,10255],{"class":205},[199,10291,1998],{"class":1086},[199,10293,1548],{"class":205},[199,10295,1998],{"class":1086},[199,10297,1115],{"class":1018},[199,10299,6318],{"class":205},[199,10301,1510],{"class":1086},[199,10303,1594],{"class":205},[199,10305,10306],{"class":201,"line":388},[199,10307,5422],{"class":205},[199,10309,10310,10312,10315,10317,10320,10322,10324],{"class":201,"line":415},[199,10311,7539],{"class":1086},[199,10313,10314],{"class":205},"(p[j]",[199,10316,1217],{"class":1086},[199,10318,10319],{"class":205},"p[j",[199,10321,2028],{"class":1086},[199,10323,1115],{"class":1018},[199,10325,7554],{"class":205},[199,10327,10328],{"class":201,"line":426},[199,10329,7559],{"class":205},[199,10331,10332,10334,10336,10338],{"class":201,"line":1015},[199,10333,7564],{"class":1086},[199,10335,7153],{"class":205},[199,10337,895],{"class":1086},[199,10339,10340],{"class":205},"p[j];\n",[199,10342,10343,10346,10348,10350,10352,10354],{"class":201,"line":1031},[199,10344,10345],{"class":205},"                p[j]",[199,10347,895],{"class":1086},[199,10349,10319],{"class":205},[199,10351,2028],{"class":1086},[199,10353,1115],{"class":1018},[199,10355,7587],{"class":205},[199,10357,10358,10361,10363,10365,10367,10369],{"class":201,"line":1043},[199,10359,10360],{"class":205},"                p[j",[199,10362,2028],{"class":1086},[199,10364,1115],{"class":1018},[199,10366,1667],{"class":205},[199,10368,895],{"class":1086},[199,10370,7178],{"class":205},[199,10372,10373],{"class":201,"line":1049},[199,10374,7607],{"class":205},[199,10376,10377],{"class":201,"line":1054},[199,10378,1046],{"class":205},[199,10380,10381],{"class":201,"line":1062},[199,10382,2097],{"class":205},[199,10384,10385],{"class":201,"line":1075},[199,10386,671],{"class":205},[199,10388,10389],{"class":201,"line":1092},[199,10390,907],{"emptyLinePlaceholder":906},[199,10392,10393,10395,10397],{"class":201,"line":1107},[199,10394,3100],{"class":1086},[199,10396,4889],{"class":878},[199,10398,4892],{"class":205},[199,10400,10401],{"class":201,"line":1128},[199,10402,4485],{"class":205},[199,10404,10405],{"class":201,"line":1146},[199,10406,10407],{"class":1454},"    \u002F\u002F 1.创建数组\n",[199,10409,10410,10412,10414,10416,10418,10420,10422,10424,10426,10428,10430,10432,10434,10436,10438,10440,10442,10444,10446,10448,10450,10452,10454,10456,10458,10460],{"class":201,"line":1163},[199,10411,4901],{"class":1086},[199,10413,6862],{"class":205},[199,10415,3528],{"class":1018},[199,10417,1667],{"class":205},[199,10419,895],{"class":1086},[199,10421,3974],{"class":205},[199,10423,1915],{"class":1018},[199,10425,3461],{"class":205},[199,10427,1920],{"class":1018},[199,10429,3461],{"class":205},[199,10431,3428],{"class":1018},[199,10433,3461],{"class":205},[199,10435,3503],{"class":1018},[199,10437,3461],{"class":205},[199,10439,1115],{"class":1018},[199,10441,3461],{"class":205},[199,10443,1925],{"class":1018},[199,10445,3461],{"class":205},[199,10447,3528],{"class":1018},[199,10449,3461],{"class":205},[199,10451,3478],{"class":1018},[199,10453,3461],{"class":205},[199,10455,3452],{"class":1018},[199,10457,3461],{"class":205},[199,10459,1909],{"class":1018},[199,10461,6894],{"class":205},[199,10463,10464,10466,10468,10470,10472],{"class":201,"line":1176},[199,10465,4901],{"class":1086},[199,10467,10228],{"class":205},[199,10469,895],{"class":1086},[199,10471,3528],{"class":1018},[199,10473,1028],{"class":205},[199,10475,10476,10478,10480,10482,10484],{"class":201,"line":1189},[199,10477,4901],{"class":1086},[199,10479,9415],{"class":1086},[199,10481,31],{"class":205},[199,10483,895],{"class":1086},[199,10485,9935],{"class":205},[199,10487,10488],{"class":201,"line":1202},[199,10489,10490],{"class":1454},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[199,10492,10493,10496],{"class":201,"line":1207},[199,10494,10495],{"class":878},"    bubbleSort",[199,10497,10498],{"class":205},"(p,len);\n",[199,10500,10501],{"class":201,"line":1212},[199,10502,907],{"emptyLinePlaceholder":906},[199,10504,10505],{"class":201,"line":1225},[199,10506,10507],{"class":1454},"    \u002F\u002F 3.打印排序后的数组\n",[199,10509,10510,10512,10514,10516,10518,10520,10522,10524,10526,10529,10531],{"class":201,"line":1236},[199,10511,1937],{"class":1086},[199,10513,1484],{"class":205},[199,10515,3100],{"class":1086},[199,10517,5936],{"class":205},[199,10519,895],{"class":1086},[199,10521,1025],{"class":1018},[199,10523,1507],{"class":205},[199,10525,887],{"class":1086},[199,10527,10528],{"class":205},"len; i",[199,10530,1510],{"class":1086},[199,10532,1594],{"class":205},[199,10534,10535],{"class":201,"line":1249},[199,10536,4946],{"class":205},[199,10538,10539,10541,10543,10545,10547,10550],{"class":201,"line":1262},[199,10540,6352],{"class":205},[199,10542,9316],{"class":1086},[199,10544,31],{"class":205},[199,10546,4117],{"class":1086},[199,10548,10549],{"class":898},"\"\"",[199,10551,1028],{"class":205},[199,10553,10554,10557,10559],{"class":201,"line":1275},[199,10555,10556],{"class":205},"        p",[199,10558,1510],{"class":1086},[199,10560,1028],{"class":205},[199,10562,10563],{"class":201,"line":1287},[199,10564,2097],{"class":205},[199,10566,10567],{"class":201,"line":1292},[199,10568,671],{"class":205},[1002,10570,10571],{},"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":57,"searchDepth":36,"depth":36,"links":10573},[10574,10575,10576,10577,10578,10579,10580,10581],{"id":9180,"depth":36,"text":9181},{"id":9346,"depth":36,"text":9347},{"id":9502,"depth":36,"text":9503},{"id":9580,"depth":36,"text":9581},{"id":9659,"depth":36,"text":9660},{"id":9758,"depth":36,"text":9759},{"id":9997,"depth":36,"text":9998},{"id":10175,"depth":36,"text":10176},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":9169,"description":9177},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":10588,"title":10589,"body":10590,"description":10597,"extension":3024,"meta":13537,"navigation":906,"path":13538,"seo":13539,"stem":13540,"__hash__":13541},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":10591,"toc":13528},[10592,10595,10598,10602,10605,10608,10619,10947,10950,10954,10957,10964,11219,11223,11226,11229,11384,11388,11391,11394,11600,11604,11607,11910,11913,11921,11925,11928,12079,12081,12092,12149,12153,12158,12791,12799,12802,12896,12899,13519,13525],[10,10593,10589],{"id":10594},"_4结构体",[31,10596,10597],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,10599,10601],{"id":10600},"_41结构体定义与使用","4.1结构体定义与使用",[31,10603,10604],{},"语法：struct 结构体名 {结构体成员列表}；",[31,10606,10607],{},"通过结构体创建变量的方式：",[176,10609,10610,10613,10616],{},[27,10611,10612],{},"struct 结构体名 变量名",[27,10614,10615],{},"struct 结构体名 变量名={成员1值，成员2值...}",[27,10617,10618],{},"定义结构体时顺便创建变量",[190,10620,10622],{"className":3086,"code":10621,"language":3088,"meta":57,"style":57},"#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",[196,10623,10624,10630,10640,10647,10652,10660,10664,10669,10673,10678,10683,10688,10695,10700,10707,10711,10718,10722,10726,10730,10734,10738,10742,10748,10752,10758,10766,10774,10778,10783,10788,10799,10804,10816,10827,10838,10843,10866,10870,10875,10901,10905,10910,10921,10932,10943],{"__ignoreMap":57},[199,10625,10626,10628],{"class":201,"line":202},[199,10627,4866],{"class":1086},[199,10629,4869],{"class":898},[199,10631,10632,10634,10636,10638],{"class":201,"line":36},[199,10633,4874],{"class":1086},[199,10635,4877],{"class":1086},[199,10637,4880],{"class":878},[199,10639,1028],{"class":205},[199,10641,10642,10644],{"class":201,"line":73},[199,10643,4866],{"class":1086},[199,10645,10646],{"class":898},"\u003Cstring>\n",[199,10648,10649],{"class":201,"line":333},[199,10650,10651],{"class":1454},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[199,10653,10654,10657],{"class":201,"line":227},[199,10655,10656],{"class":1086},"struct",[199,10658,10659],{"class":878}," Student\n",[199,10661,10662],{"class":201,"line":238},[199,10663,4485],{"class":205},[199,10665,10666],{"class":201,"line":252},[199,10667,10668],{"class":1454},"    \u002F\u002F成员列表\n",[199,10670,10671],{"class":201,"line":388},[199,10672,907],{"emptyLinePlaceholder":906},[199,10674,10675],{"class":201,"line":415},[199,10676,10677],{"class":1454},"    \u002F\u002F姓名\n",[199,10679,10680],{"class":201,"line":426},[199,10681,10682],{"class":205},"    string name;\n",[199,10684,10685],{"class":201,"line":1015},[199,10686,10687],{"class":1454},"    \u002F\u002F年龄\n",[199,10689,10690,10692],{"class":201,"line":1031},[199,10691,4901],{"class":1086},[199,10693,10694],{"class":205}," age;\n",[199,10696,10697],{"class":201,"line":1043},[199,10698,10699],{"class":1454},"    \u002F\u002F分数\n",[199,10701,10702,10704],{"class":201,"line":1049},[199,10703,4901],{"class":1086},[199,10705,10706],{"class":205}," score;\n",[199,10708,10709],{"class":201,"line":1054},[199,10710,6894],{"class":205},[199,10712,10713,10715],{"class":201,"line":1062},[199,10714,10656],{"class":1086},[199,10716,10717],{"class":878}," School\n",[199,10719,10720],{"class":201,"line":1075},[199,10721,4485],{"class":205},[199,10723,10724],{"class":201,"line":1092},[199,10725,10668],{"class":1454},[199,10727,10728],{"class":201,"line":1107},[199,10729,907],{"emptyLinePlaceholder":906},[199,10731,10732],{"class":201,"line":1128},[199,10733,10677],{"class":1454},[199,10735,10736],{"class":201,"line":1146},[199,10737,10682],{"class":205},[199,10739,10740],{"class":201,"line":1163},[199,10741,10687],{"class":1454},[199,10743,10744,10746],{"class":201,"line":1176},[199,10745,4901],{"class":1086},[199,10747,10694],{"class":205},[199,10749,10750],{"class":201,"line":1189},[199,10751,10699],{"class":1454},[199,10753,10754,10756],{"class":201,"line":1202},[199,10755,4901],{"class":1086},[199,10757,10706],{"class":205},[199,10759,10760,10763],{"class":201,"line":1207},[199,10761,10762],{"class":205},"} s3;",[199,10764,10765],{"class":1454}," \u002F\u002F创建结构体时就创建了变量\n",[199,10767,10768,10770,10772],{"class":201,"line":1212},[199,10769,3100],{"class":1086},[199,10771,4889],{"class":878},[199,10773,4892],{"class":205},[199,10775,10776],{"class":201,"line":1225},[199,10777,4485],{"class":205},[199,10779,10780],{"class":201,"line":1236},[199,10781,10782],{"class":1454},"    \u002F\u002F2.通过学生类型创建具体学生\n",[199,10784,10785],{"class":201,"line":1249},[199,10786,10787],{"class":1454},"    \u002F\u002F2.1 struct Student s1;\n",[199,10789,10790,10793,10796],{"class":201,"line":1262},[199,10791,10792],{"class":1086},"    struct",[199,10794,10795],{"class":878}," Student",[199,10797,10798],{"class":205}," s1;\n",[199,10800,10801],{"class":201,"line":1275},[199,10802,10803],{"class":1454},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[199,10805,10806,10809,10811,10814],{"class":201,"line":1287},[199,10807,10808],{"class":205},"    s1.name",[199,10810,895],{"class":1086},[199,10812,10813],{"class":898},"\"张三\"",[199,10815,1028],{"class":205},[199,10817,10818,10821,10823,10825],{"class":201,"line":1292},[199,10819,10820],{"class":205},"    s1.age",[199,10822,895],{"class":1086},[199,10824,3730],{"class":1018},[199,10826,1028],{"class":205},[199,10828,10829,10832,10834,10836],{"class":201,"line":1297},[199,10830,10831],{"class":205},"    s1.score",[199,10833,895],{"class":1086},[199,10835,3340],{"class":1018},[199,10837,1028],{"class":205},[199,10839,10840],{"class":201,"line":1310},[199,10841,10842],{"class":1454},"    \u002F\u002F输出结果\n",[199,10844,10845,10847,10849,10852,10854,10857,10859,10862,10864],{"class":201,"line":1315},[199,10846,4490],{"class":205},[199,10848,4117],{"class":1086},[199,10850,10851],{"class":205},"s1.name",[199,10853,4117],{"class":1086},[199,10855,10856],{"class":205},"s1.age",[199,10858,4117],{"class":1086},[199,10860,10861],{"class":205},"s1.score",[199,10863,4117],{"class":1086},[199,10865,4139],{"class":205},[199,10867,10868],{"class":201,"line":1330},[199,10869,907],{"emptyLinePlaceholder":906},[199,10871,10872],{"class":201,"line":1335},[199,10873,10874],{"class":1454},"    \u002F\u002F2.2 struct Student s2={...}\n",[199,10876,10877,10879,10881,10884,10886,10888,10891,10893,10895,10897,10899],{"class":201,"line":1340},[199,10878,10792],{"class":1086},[199,10880,10795],{"class":878},[199,10882,10883],{"class":205}," s2",[199,10885,895],{"class":1086},[199,10887,3974],{"class":205},[199,10889,10890],{"class":898},"\"王五\"",[199,10892,3461],{"class":205},[199,10894,3730],{"class":1018},[199,10896,3461],{"class":205},[199,10898,3340],{"class":1018},[199,10900,6894],{"class":205},[199,10902,10903],{"class":201,"line":1352},[199,10904,907],{"emptyLinePlaceholder":906},[199,10906,10907],{"class":201,"line":1367},[199,10908,10909],{"class":1454},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[199,10911,10912,10915,10917,10919],{"class":201,"line":1381},[199,10913,10914],{"class":205},"    s3.name",[199,10916,895],{"class":1086},[199,10918,6579],{"class":898},[199,10920,1028],{"class":205},[199,10922,10923,10926,10928,10930],{"class":201,"line":1396},[199,10924,10925],{"class":205},"    s3.age",[199,10927,895],{"class":1086},[199,10929,3730],{"class":1018},[199,10931,1028],{"class":205},[199,10933,10934,10937,10939,10941],{"class":201,"line":1401},[199,10935,10936],{"class":205},"    s3.score",[199,10938,895],{"class":1086},[199,10940,3779],{"class":1018},[199,10942,1028],{"class":205},[199,10944,10945],{"class":201,"line":1411},[199,10946,671],{"class":205},[31,10948,10949],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10951,10953],{"id":10952},"_42结构体数组","4.2结构体数组",[31,10955,10956],{},"将自定义的结构体放入到数组中方便维护",[31,10958,10959,10960,10963],{},"语法：struct 结构体名 数组名",[199,10961,10962],{},"元素个数","={ {}，{},...{} };",[190,10965,10967],{"className":3086,"code":10966,"language":3088,"meta":57,"style":57},"#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",[196,10968,10969,10975,10985,10991,10996,11002,11006,11010,11016,11022,11026,11030,11038,11042,11047,11062,11066,11082,11098,11102,11107,11123,11138,11153,11158,11184,11188,11211,11215],{"__ignoreMap":57},[199,10970,10971,10973],{"class":201,"line":202},[199,10972,4866],{"class":1086},[199,10974,4869],{"class":898},[199,10976,10977,10979,10981,10983],{"class":201,"line":36},[199,10978,4874],{"class":1086},[199,10980,4877],{"class":1086},[199,10982,4880],{"class":878},[199,10984,1028],{"class":205},[199,10986,10987,10989],{"class":201,"line":73},[199,10988,4866],{"class":1086},[199,10990,10646],{"class":898},[199,10992,10993],{"class":201,"line":333},[199,10994,10995],{"class":1454},"\u002F\u002F1.定义结构体\n",[199,10997,10998,11000],{"class":201,"line":227},[199,10999,10656],{"class":1086},[199,11001,10659],{"class":878},[199,11003,11004],{"class":201,"line":238},[199,11005,4485],{"class":205},[199,11007,11008],{"class":201,"line":252},[199,11009,10682],{"class":205},[199,11011,11012,11014],{"class":201,"line":388},[199,11013,4901],{"class":1086},[199,11015,10694],{"class":205},[199,11017,11018,11020],{"class":201,"line":415},[199,11019,4901],{"class":1086},[199,11021,10706],{"class":205},[199,11023,11024],{"class":201,"line":426},[199,11025,907],{"emptyLinePlaceholder":906},[199,11027,11028],{"class":201,"line":1015},[199,11029,6894],{"class":205},[199,11031,11032,11034,11036],{"class":201,"line":1031},[199,11033,3100],{"class":1086},[199,11035,4889],{"class":878},[199,11037,4892],{"class":205},[199,11039,11040],{"class":201,"line":1043},[199,11041,4485],{"class":205},[199,11043,11044],{"class":201,"line":1049},[199,11045,11046],{"class":1454},"    \u002F\u002F2.创建结构体数组\n",[199,11048,11049,11051,11053,11056,11058,11060],{"class":201,"line":1054},[199,11050,10792],{"class":1086},[199,11052,10795],{"class":878},[199,11054,11055],{"class":205}," stuArray[",[199,11057,1925],{"class":1018},[199,11059,1667],{"class":205},[199,11061,7805],{"class":1086},[199,11063,11064],{"class":201,"line":1062},[199,11065,4946],{"class":205},[199,11067,11068,11070,11072,11074,11076,11078,11080],{"class":201,"line":1075},[199,11069,7814],{"class":205},[199,11071,10813],{"class":898},[199,11073,3461],{"class":205},[199,11075,3730],{"class":1018},[199,11077,3461],{"class":205},[199,11079,3396],{"class":1018},[199,11081,7827],{"class":205},[199,11083,11084,11086,11088,11090,11092,11094,11096],{"class":201,"line":1092},[199,11085,7814],{"class":205},[199,11087,6579],{"class":898},[199,11089,3461],{"class":205},[199,11091,3655],{"class":1018},[199,11093,3461],{"class":205},[199,11095,3655],{"class":1018},[199,11097,671],{"class":205},[199,11099,11100],{"class":201,"line":1107},[199,11101,2097],{"class":205},[199,11103,11104],{"class":201,"line":1128},[199,11105,11106],{"class":1454},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[199,11108,11109,11112,11114,11117,11119,11121],{"class":201,"line":1146},[199,11110,11111],{"class":205},"    stuArray[",[199,11113,1115],{"class":1018},[199,11115,11116],{"class":205},"].name",[199,11118,895],{"class":1086},[199,11120,6602],{"class":898},[199,11122,1028],{"class":205},[199,11124,11125,11127,11129,11132,11134,11136],{"class":201,"line":1163},[199,11126,11111],{"class":205},[199,11128,1115],{"class":1018},[199,11130,11131],{"class":205},"].age",[199,11133,895],{"class":1086},[199,11135,1925],{"class":1018},[199,11137,1028],{"class":205},[199,11139,11140,11142,11144,11147,11149,11151],{"class":201,"line":1176},[199,11141,11111],{"class":205},[199,11143,1115],{"class":1018},[199,11145,11146],{"class":205},"].score",[199,11148,895],{"class":1086},[199,11150,1925],{"class":1018},[199,11152,1028],{"class":205},[199,11154,11155],{"class":201,"line":1189},[199,11156,11157],{"class":1454},"    \u002F\u002F4.遍历结构体数组\n",[199,11159,11160,11162,11164,11166,11168,11170,11172,11174,11176,11178,11180,11182],{"class":201,"line":1202},[199,11161,1937],{"class":1086},[199,11163,1484],{"class":205},[199,11165,3100],{"class":1086},[199,11167,5936],{"class":205},[199,11169,895],{"class":1086},[199,11171,1025],{"class":1018},[199,11173,5943],{"class":205},[199,11175,887],{"class":1086},[199,11177,1925],{"class":1018},[199,11179,5943],{"class":205},[199,11181,1510],{"class":1086},[199,11183,1594],{"class":205},[199,11185,11186],{"class":201,"line":1207},[199,11187,4946],{"class":205},[199,11189,11190,11192,11194,11197,11199,11202,11204,11207,11209],{"class":201,"line":1212},[199,11191,6352],{"class":205},[199,11193,4117],{"class":1086},[199,11195,11196],{"class":205},"stuArray[i].name",[199,11198,4117],{"class":1086},[199,11200,11201],{"class":205},"stuArray[i].age",[199,11203,4117],{"class":1086},[199,11205,11206],{"class":205},"stuArray[i].score",[199,11208,4117],{"class":1086},[199,11210,4139],{"class":205},[199,11212,11213],{"class":201,"line":1225},[199,11214,2097],{"class":205},[199,11216,11217],{"class":201,"line":1236},[199,11218,671],{"class":205},[14,11220,11222],{"id":11221},"_43结构体指针","4.3结构体指针",[31,11224,11225],{},"作用：通过指针访问结构体中的成员",[31,11227,11228],{},"利用操作符->可以通过结构体指针访问结构体属性",[190,11230,11232],{"className":3086,"code":11231,"language":3088,"meta":57,"style":57},"#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",[196,11233,11234,11240,11250,11256,11260,11266,11270,11274,11280,11286,11290,11298,11302,11307,11332,11337,11352,11357,11380],{"__ignoreMap":57},[199,11235,11236,11238],{"class":201,"line":202},[199,11237,4866],{"class":1086},[199,11239,4869],{"class":898},[199,11241,11242,11244,11246,11248],{"class":201,"line":36},[199,11243,4874],{"class":1086},[199,11245,4877],{"class":1086},[199,11247,4880],{"class":878},[199,11249,1028],{"class":205},[199,11251,11252,11254],{"class":201,"line":73},[199,11253,4866],{"class":1086},[199,11255,10646],{"class":898},[199,11257,11258],{"class":201,"line":333},[199,11259,10995],{"class":1454},[199,11261,11262,11264],{"class":201,"line":227},[199,11263,10656],{"class":1086},[199,11265,10659],{"class":878},[199,11267,11268],{"class":201,"line":238},[199,11269,4485],{"class":205},[199,11271,11272],{"class":201,"line":252},[199,11273,10682],{"class":205},[199,11275,11276,11278],{"class":201,"line":388},[199,11277,4901],{"class":1086},[199,11279,10694],{"class":205},[199,11281,11282,11284],{"class":201,"line":415},[199,11283,4901],{"class":1086},[199,11285,10706],{"class":205},[199,11287,11288],{"class":201,"line":426},[199,11289,6894],{"class":205},[199,11291,11292,11294,11296],{"class":201,"line":1015},[199,11293,3100],{"class":1086},[199,11295,4889],{"class":878},[199,11297,4892],{"class":205},[199,11299,11300],{"class":201,"line":1031},[199,11301,4485],{"class":205},[199,11303,11304],{"class":201,"line":1043},[199,11305,11306],{"class":1454},"    \u002F\u002F创建学生结构体变量\n",[199,11308,11309,11311,11313,11316,11318,11320,11322,11324,11326,11328,11330],{"class":201,"line":1049},[199,11310,10792],{"class":1086},[199,11312,10795],{"class":878},[199,11314,11315],{"class":205}," s",[199,11317,895],{"class":1086},[199,11319,3974],{"class":205},[199,11321,10813],{"class":898},[199,11323,3461],{"class":205},[199,11325,3730],{"class":1018},[199,11327,3461],{"class":205},[199,11329,4647],{"class":1018},[199,11331,6894],{"class":205},[199,11333,11334],{"class":201,"line":1054},[199,11335,11336],{"class":1454},"    \u002F\u002F通过指针指向结构体变量\n",[199,11338,11339,11341,11343,11345,11347,11349],{"class":201,"line":1062},[199,11340,10792],{"class":1086},[199,11342,10795],{"class":878},[199,11344,9415],{"class":1086},[199,11346,31],{"class":205},[199,11348,9236],{"class":1086},[199,11350,11351],{"class":205},"s\n",[199,11353,11354],{"class":201,"line":1075},[199,11355,11356],{"class":1454},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[199,11358,11359,11361,11363,11366,11368,11371,11373,11376,11378],{"class":201,"line":1092},[199,11360,4490],{"class":205},[199,11362,4117],{"class":1086},[199,11364,11365],{"class":205},"p->name",[199,11367,4117],{"class":1086},[199,11369,11370],{"class":205},"p->age",[199,11372,4117],{"class":1086},[199,11374,11375],{"class":205},"p->score",[199,11377,4117],{"class":1086},[199,11379,4139],{"class":205},[199,11381,11382],{"class":201,"line":1107},[199,11383,671],{"class":205},[14,11385,11387],{"id":11386},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[31,11389,11390],{},"作用：结构体中的成员可以是另一个结构体",[31,11392,11393],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[190,11395,11397],{"className":3086,"code":11396,"language":3088,"meta":57,"style":57},"#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",[196,11398,11399,11405,11415,11421,11426,11434,11438,11442,11448,11454,11458,11463,11470,11474,11481,11485,11491,11496,11500,11508,11512,11517,11522,11527,11538,11550,11561,11574,11585,11596],{"__ignoreMap":57},[199,11400,11401,11403],{"class":201,"line":202},[199,11402,4866],{"class":1086},[199,11404,4869],{"class":898},[199,11406,11407,11409,11411,11413],{"class":201,"line":36},[199,11408,4874],{"class":1086},[199,11410,4877],{"class":1086},[199,11412,4880],{"class":878},[199,11414,1028],{"class":205},[199,11416,11417,11419],{"class":201,"line":73},[199,11418,4866],{"class":1086},[199,11420,10646],{"class":898},[199,11422,11423],{"class":201,"line":333},[199,11424,11425],{"class":1454},"\u002F\u002F定义学生结构体\n",[199,11427,11428,11430,11432],{"class":201,"line":227},[199,11429,10656],{"class":1086},[199,11431,10795],{"class":878},[199,11433,5578],{"class":205},[199,11435,11436],{"class":201,"line":238},[199,11437,4485],{"class":205},[199,11439,11440],{"class":201,"line":252},[199,11441,10682],{"class":205},[199,11443,11444,11446],{"class":201,"line":388},[199,11445,4901],{"class":1086},[199,11447,10694],{"class":205},[199,11449,11450,11452],{"class":201,"line":415},[199,11451,4901],{"class":1086},[199,11453,10706],{"class":205},[199,11455,11456],{"class":201,"line":426},[199,11457,671],{"class":205},[199,11459,11460],{"class":201,"line":1015},[199,11461,11462],{"class":1454},"\u002F\u002F定义老师结构体\n",[199,11464,11465,11467],{"class":201,"line":1031},[199,11466,10656],{"class":1086},[199,11468,11469],{"class":878}," Teacher\n",[199,11471,11472],{"class":201,"line":1043},[199,11473,4485],{"class":205},[199,11475,11476,11478],{"class":201,"line":1049},[199,11477,4901],{"class":1086},[199,11479,11480],{"class":205}," id;\n",[199,11482,11483],{"class":201,"line":1054},[199,11484,10682],{"class":205},[199,11486,11487,11489],{"class":201,"line":1062},[199,11488,4901],{"class":1086},[199,11490,10694],{"class":205},[199,11492,11493],{"class":201,"line":1075},[199,11494,11495],{"class":205},"    Student stu;\n",[199,11497,11498],{"class":201,"line":1092},[199,11499,671],{"class":205},[199,11501,11502,11504,11506],{"class":201,"line":1107},[199,11503,3100],{"class":1086},[199,11505,4889],{"class":878},[199,11507,8875],{"class":205},[199,11509,11510],{"class":201,"line":1128},[199,11511,4485],{"class":205},[199,11513,11514],{"class":201,"line":1146},[199,11515,11516],{"class":1454},"    \u002F\u002F结构体嵌套结构体\n",[199,11518,11519],{"class":201,"line":1163},[199,11520,11521],{"class":1454},"    \u002F\u002F创建老师\n",[199,11523,11524],{"class":201,"line":1176},[199,11525,11526],{"class":205},"    Teacher t;\n",[199,11528,11529,11532,11534,11536],{"class":201,"line":1189},[199,11530,11531],{"class":205},"    t.id",[199,11533,895],{"class":1086},[199,11535,3396],{"class":1018},[199,11537,1028],{"class":205},[199,11539,11540,11543,11545,11548],{"class":201,"line":1202},[199,11541,11542],{"class":205},"    t.name",[199,11544,895],{"class":1086},[199,11546,11547],{"class":898},"\"老王\"",[199,11549,1028],{"class":205},[199,11551,11552,11555,11557,11559],{"class":201,"line":1207},[199,11553,11554],{"class":205},"    t.age",[199,11556,895],{"class":1086},[199,11558,3730],{"class":1018},[199,11560,1028],{"class":205},[199,11562,11563,11566,11568,11571],{"class":201,"line":1212},[199,11564,11565],{"class":205},"    t.stu.name",[199,11567,895],{"class":1086},[199,11569,11570],{"class":898},"\"小王\"",[199,11572,11573],{"class":205},"；\n",[199,11575,11576,11579,11581,11583],{"class":201,"line":1225},[199,11577,11578],{"class":205},"    t.stu.age",[199,11580,895],{"class":1086},[199,11582,3779],{"class":1018},[199,11584,1028],{"class":205},[199,11586,11587,11590,11592,11594],{"class":201,"line":1236},[199,11588,11589],{"class":205},"    t.stu.score",[199,11591,895],{"class":1086},[199,11593,3428],{"class":1018},[199,11595,1028],{"class":205},[199,11597,11598],{"class":201,"line":1249},[199,11599,671],{"class":205},[14,11601,11603],{"id":11602},"_45结构体做函数参数","4.5结构体做函数参数",[31,11605,11606],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[190,11608,11610],{"className":3086,"code":11609,"language":3088,"meta":57,"style":57},"#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",[196,11611,11612,11618,11628,11634,11640,11644,11648,11654,11660,11664,11669,11674,11691,11695,11728,11732,11737,11756,11760,11791,11795,11803,11807,11816,11828,11840,11852,11865,11873,11886,11898,11906],{"__ignoreMap":57},[199,11613,11614,11616],{"class":201,"line":202},[199,11615,4866],{"class":1086},[199,11617,4869],{"class":898},[199,11619,11620,11622,11624,11626],{"class":201,"line":36},[199,11621,4874],{"class":1086},[199,11623,4877],{"class":1086},[199,11625,4880],{"class":878},[199,11627,1028],{"class":205},[199,11629,11630,11632],{"class":201,"line":73},[199,11631,4866],{"class":1086},[199,11633,10646],{"class":898},[199,11635,11636,11638],{"class":201,"line":333},[199,11637,10656],{"class":1086},[199,11639,10659],{"class":878},[199,11641,11642],{"class":201,"line":227},[199,11643,4485],{"class":205},[199,11645,11646],{"class":201,"line":238},[199,11647,10682],{"class":205},[199,11649,11650,11652],{"class":201,"line":252},[199,11651,4901],{"class":1086},[199,11653,10694],{"class":205},[199,11655,11656,11658],{"class":201,"line":388},[199,11657,4901],{"class":1086},[199,11659,10706],{"class":205},[199,11661,11662],{"class":201,"line":415},[199,11663,6894],{"class":205},[199,11665,11666],{"class":201,"line":426},[199,11667,11668],{"class":1454},"\u002F\u002F打印学生信息的函数\n",[199,11670,11671],{"class":201,"line":1015},[199,11672,11673],{"class":1454},"\u002F\u002F值传递\n",[199,11675,11676,11678,11681,11683,11685,11687,11689],{"class":201,"line":1031},[199,11677,8261],{"class":1086},[199,11679,11680],{"class":878}," printStudent1",[199,11682,1537],{"class":205},[199,11684,10656],{"class":1086},[199,11686,10795],{"class":878},[199,11688,11315],{"class":8113},[199,11690,1594],{"class":205},[199,11692,11693],{"class":201,"line":1043},[199,11694,4485],{"class":205},[199,11696,11697,11699,11701,11704,11706,11709,11711,11714,11716,11718,11720,11723,11725],{"class":201,"line":1049},[199,11698,9426],{"class":205},[199,11700,4117],{"class":1086},[199,11702,11703],{"class":205}," s.name ",[199,11705,4117],{"class":1086},[199,11707,11708],{"class":898}," \" \"",[199,11710,4384],{"class":1086},[199,11712,11713],{"class":205}," s.age ",[199,11715,4117],{"class":1086},[199,11717,11708],{"class":898},[199,11719,4384],{"class":1086},[199,11721,11722],{"class":205}," s.score ",[199,11724,4117],{"class":1086},[199,11726,11727],{"class":205}," endl;\n",[199,11729,11730],{"class":201,"line":1054},[199,11731,671],{"class":205},[199,11733,11734],{"class":201,"line":1062},[199,11735,11736],{"class":1454},"\u002F\u002F地址传递\n",[199,11738,11739,11741,11744,11746,11748,11750,11752,11754],{"class":201,"line":1075},[199,11740,8261],{"class":1086},[199,11742,11743],{"class":878}," printStudent2",[199,11745,1537],{"class":205},[199,11747,10656],{"class":1086},[199,11749,10795],{"class":878},[199,11751,9415],{"class":1086},[199,11753,3774],{"class":8113},[199,11755,1594],{"class":205},[199,11757,11758],{"class":201,"line":1092},[199,11759,4485],{"class":205},[199,11761,11762,11764,11766,11769,11771,11773,11775,11778,11780,11782,11784,11787,11789],{"class":201,"line":1107},[199,11763,9426],{"class":205},[199,11765,4117],{"class":1086},[199,11767,11768],{"class":205}," s->name ",[199,11770,4117],{"class":1086},[199,11772,11708],{"class":898},[199,11774,4384],{"class":1086},[199,11776,11777],{"class":205}," s->age ",[199,11779,4117],{"class":1086},[199,11781,11708],{"class":898},[199,11783,4384],{"class":1086},[199,11785,11786],{"class":205}," s->score ",[199,11788,4117],{"class":1086},[199,11790,11727],{"class":205},[199,11792,11793],{"class":201,"line":1128},[199,11794,671],{"class":205},[199,11796,11797,11799,11801],{"class":201,"line":1146},[199,11798,3100],{"class":1086},[199,11800,4889],{"class":878},[199,11802,4892],{"class":205},[199,11804,11805],{"class":201,"line":1163},[199,11806,4485],{"class":205},[199,11808,11809,11811,11813],{"class":201,"line":1176},[199,11810,10792],{"class":1086},[199,11812,10795],{"class":878},[199,11814,11815],{"class":205}," s;\n",[199,11817,11818,11821,11823,11826],{"class":201,"line":1189},[199,11819,11820],{"class":205},"    s.name ",[199,11822,895],{"class":1086},[199,11824,11825],{"class":898}," \"张三\"",[199,11827,1028],{"class":205},[199,11829,11830,11833,11835,11838],{"class":201,"line":1202},[199,11831,11832],{"class":205},"    s.age ",[199,11834,895],{"class":1086},[199,11836,11837],{"class":1018}," 20",[199,11839,1028],{"class":205},[199,11841,11842,11845,11847,11850],{"class":201,"line":1207},[199,11843,11844],{"class":205},"    s.score ",[199,11846,895],{"class":1086},[199,11848,11849],{"class":1018}," 85",[199,11851,1028],{"class":205},[199,11853,11854,11856,11858,11861,11863],{"class":201,"line":1212},[199,11855,4490],{"class":205},[199,11857,4117],{"class":1086},[199,11859,11860],{"class":898},"\"值传递:\"",[199,11862,4117],{"class":1086},[199,11864,4139],{"class":205},[199,11866,11867,11870],{"class":201,"line":1225},[199,11868,11869],{"class":878},"    printStudent1",[199,11871,11872],{"class":205},"(s);\n",[199,11874,11875,11877,11879,11882,11884],{"class":201,"line":1236},[199,11876,4490],{"class":205},[199,11878,4117],{"class":1086},[199,11880,11881],{"class":898},"\"地址传递:\"",[199,11883,4117],{"class":1086},[199,11885,4139],{"class":205},[199,11887,11888,11891,11893,11895],{"class":201,"line":1249},[199,11889,11890],{"class":878},"    printStudent2",[199,11892,1537],{"class":205},[199,11894,3437],{"class":1086},[199,11896,11897],{"class":205},"s); \n",[199,11899,11900,11902,11904],{"class":201,"line":1262},[199,11901,6989],{"class":1086},[199,11903,1621],{"class":1018},[199,11905,1028],{"class":205},[199,11907,11908],{"class":201,"line":1275},[199,11909,671],{"class":205},[31,11911,11912],{},"注意：",[176,11914,11915,11918],{},[27,11916,11917],{},"1.先定义结构体，不要在函数中写结构体的定义",[27,11919,11920],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11922,11924],{"id":11923},"_46结构体中const使用场景","4.6结构体中const使用场景",[31,11926,11927],{},"用const防止误操作",[190,11929,11931],{"className":3086,"code":11930,"language":3088,"meta":57,"style":57},"#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",[196,11932,11933,11939,11949,11955,11960,11964,11968,11974,11980,11984,12000,12004,12027,12031,12039,12043,12064,12071,12075],{"__ignoreMap":57},[199,11934,11935,11937],{"class":201,"line":202},[199,11936,4866],{"class":1086},[199,11938,4869],{"class":898},[199,11940,11941,11943,11945,11947],{"class":201,"line":36},[199,11942,4874],{"class":1086},[199,11944,4877],{"class":1086},[199,11946,4880],{"class":878},[199,11948,1028],{"class":205},[199,11950,11951,11953],{"class":201,"line":73},[199,11952,4866],{"class":1086},[199,11954,10646],{"class":898},[199,11956,11957],{"class":201,"line":333},[199,11958,11959],{"class":205},"sctuct Student\n",[199,11961,11962],{"class":201,"line":227},[199,11963,4485],{"class":205},[199,11965,11966],{"class":201,"line":238},[199,11967,10682],{"class":205},[199,11969,11970,11972],{"class":201,"line":252},[199,11971,4901],{"class":1086},[199,11973,10694],{"class":205},[199,11975,11976,11978],{"class":201,"line":388},[199,11977,4901],{"class":1086},[199,11979,10706],{"class":205},[199,11981,11982],{"class":201,"line":415},[199,11983,6894],{"class":205},[199,11985,11986,11988,11991,11993,11996,11998],{"class":201,"line":426},[199,11987,8261],{"class":1086},[199,11989,11990],{"class":878}," printStudents",[199,11992,1537],{"class":205},[199,11994,11995],{"class":878},"student",[199,11997,11315],{"class":8113},[199,11999,1594],{"class":205},[199,12001,12002],{"class":201,"line":1015},[199,12003,4485],{"class":205},[199,12005,12006,12008,12010,12013,12015,12018,12020,12023,12025],{"class":201,"line":1031},[199,12007,4490],{"class":205},[199,12009,4117],{"class":1086},[199,12011,12012],{"class":205},"s.name",[199,12014,4117],{"class":1086},[199,12016,12017],{"class":205},"s.age",[199,12019,4117],{"class":1086},[199,12021,12022],{"class":205},"s.score",[199,12024,4117],{"class":1086},[199,12026,4139],{"class":205},[199,12028,12029],{"class":201,"line":1043},[199,12030,671],{"class":205},[199,12032,12033,12035,12037],{"class":201,"line":1049},[199,12034,3100],{"class":1086},[199,12036,4889],{"class":878},[199,12038,8875],{"class":205},[199,12040,12041],{"class":201,"line":1054},[199,12042,4485],{"class":205},[199,12044,12045,12048,12050,12052,12054,12056,12058,12060,12062],{"class":201,"line":1062},[199,12046,12047],{"class":205},"    Student s",[199,12049,895],{"class":1086},[199,12051,3974],{"class":205},[199,12053,10813],{"class":898},[199,12055,3461],{"class":205},[199,12057,3730],{"class":1018},[199,12059,3461],{"class":205},[199,12061,3730],{"class":1018},[199,12063,6894],{"class":205},[199,12065,12066,12069],{"class":201,"line":1075},[199,12067,12068],{"class":878},"    printStudent",[199,12070,11872],{"class":205},[199,12072,12073],{"class":201,"line":1092},[199,12074,907],{"emptyLinePlaceholder":906},[199,12076,12077],{"class":201,"line":1107},[199,12078,671],{"class":205},[31,12080,11912],{},[176,12082,12083,12086,12089],{},[27,12084,12085],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[27,12087,12088],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[27,12090,12091],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[190,12093,12095],{"className":3086,"code":12094,"language":3088,"meta":57,"style":57},"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",[196,12096,12097,12116,12120,12125,12145],{"__ignoreMap":57},[199,12098,12099,12101,12103,12105,12107,12110,12112,12114],{"class":201,"line":202},[199,12100,8261],{"class":1086},[199,12102,11990],{"class":878},[199,12104,1537],{"class":205},[199,12106,9689],{"class":1086},[199,12108,12109],{"class":878}," student",[199,12111,9415],{"class":1086},[199,12113,3774],{"class":8113},[199,12115,1594],{"class":205},[199,12117,12118],{"class":201,"line":36},[199,12119,4485],{"class":205},[199,12121,12122],{"class":201,"line":73},[199,12123,12124],{"class":1454},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[199,12126,12127,12129,12131,12133,12135,12137,12139,12141,12143],{"class":201,"line":333},[199,12128,4490],{"class":205},[199,12130,4117],{"class":1086},[199,12132,12012],{"class":205},[199,12134,4117],{"class":1086},[199,12136,12017],{"class":205},[199,12138,4117],{"class":1086},[199,12140,12022],{"class":205},[199,12142,4117],{"class":1086},[199,12144,4139],{"class":205},[199,12146,12147],{"class":201,"line":227},[199,12148,671],{"class":205},[14,12150,12152],{"id":12151},"_47案例","4.7案例",[24,12154,12155],{},[27,12156,12157],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[190,12159,12161],{"className":3086,"code":12160,"language":3088,"meta":57,"style":57},"#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",[196,12162,12163,12169,12179,12185,12192,12196,12202,12206,12211,12217,12223,12227,12231,12237,12241,12246,12251,12264,12268,12273,12299,12303,12315,12340,12344,12356,12366,12370,12375,12401,12405,12417,12426,12453,12464,12474,12478,12482,12486,12491,12515,12519,12543,12547,12566,12592,12596,12620,12642,12665,12669,12673,12677,12685,12689,12694,12714,12719,12732,12737,12763,12771,12776,12783,12787],{"__ignoreMap":57},[199,12164,12165,12167],{"class":201,"line":202},[199,12166,4866],{"class":1086},[199,12168,4869],{"class":898},[199,12170,12171,12173,12175,12177],{"class":201,"line":36},[199,12172,4874],{"class":1086},[199,12174,4877],{"class":1086},[199,12176,4880],{"class":878},[199,12178,1028],{"class":205},[199,12180,12181,12183],{"class":201,"line":73},[199,12182,4866],{"class":1086},[199,12184,10646],{"class":898},[199,12186,12187,12189],{"class":201,"line":333},[199,12188,4866],{"class":1086},[199,12190,12191],{"class":898},"\u003Cctime>\n",[199,12193,12194],{"class":201,"line":227},[199,12195,11425],{"class":1454},[199,12197,12198,12200],{"class":201,"line":238},[199,12199,10656],{"class":1086},[199,12201,10659],{"class":878},[199,12203,12204],{"class":201,"line":252},[199,12205,4485],{"class":205},[199,12207,12208],{"class":201,"line":388},[199,12209,12210],{"class":205},"    string sName;\n",[199,12212,12213,12215],{"class":201,"line":415},[199,12214,4901],{"class":1086},[199,12216,10694],{"class":205},[199,12218,12219,12221],{"class":201,"line":426},[199,12220,4901],{"class":1086},[199,12222,10706],{"class":205},[199,12224,12225],{"class":201,"line":1015},[199,12226,6894],{"class":205},[199,12228,12229],{"class":201,"line":1031},[199,12230,11462],{"class":1454},[199,12232,12233,12235],{"class":201,"line":1043},[199,12234,10656],{"class":1086},[199,12236,11469],{"class":878},[199,12238,12239],{"class":201,"line":1049},[199,12240,4485],{"class":205},[199,12242,12243],{"class":201,"line":1054},[199,12244,12245],{"class":205},"    string tName;\n",[199,12247,12248],{"class":201,"line":1062},[199,12249,12250],{"class":1454},"    \u002F\u002F学生数组\n",[199,12252,12253,12255,12257,12260,12262],{"class":201,"line":1075},[199,12254,10792],{"class":1086},[199,12256,10795],{"class":878},[199,12258,12259],{"class":205}," sArray[",[199,12261,1909],{"class":1018},[199,12263,7587],{"class":205},[199,12265,12266],{"class":201,"line":1092},[199,12267,6894],{"class":205},[199,12269,12270],{"class":201,"line":1107},[199,12271,12272],{"class":1454},"\u002F\u002F给老师和学生赋值的函数\n",[199,12274,12275,12277,12280,12282,12284,12287,12290,12293,12295,12297],{"class":201,"line":1128},[199,12276,8261],{"class":1086},[199,12278,12279],{"class":878}," allocateSpace",[199,12281,1537],{"class":205},[199,12283,10656],{"class":1086},[199,12285,12286],{"class":878}," Teacher",[199,12288,12289],{"class":8113}," tArray",[199,12291,12292],{"class":205},"[],",[199,12294,3100],{"class":1086},[199,12296,10228],{"class":8113},[199,12298,1594],{"class":205},[199,12300,12301],{"class":201,"line":1146},[199,12302,4485],{"class":205},[199,12304,12305,12308,12310,12313],{"class":201,"line":1163},[199,12306,12307],{"class":205},"    string nameSeed",[199,12309,895],{"class":1086},[199,12311,12312],{"class":898},"\"ABCDE\"",[199,12314,1028],{"class":205},[199,12316,12317,12319,12321,12323,12325,12327,12329,12331,12333,12336,12338],{"class":201,"line":1176},[199,12318,1937],{"class":1086},[199,12320,1484],{"class":205},[199,12322,3100],{"class":1086},[199,12324,1490],{"class":205},[199,12326,895],{"class":1086},[199,12328,1621],{"class":1018},[199,12330,1498],{"class":205},[199,12332,887],{"class":1086},[199,12334,12335],{"class":205}," len; i",[199,12337,1510],{"class":1086},[199,12339,1594],{"class":205},[199,12341,12342],{"class":201,"line":1189},[199,12343,4946],{"class":205},[199,12345,12346,12349,12351,12354],{"class":201,"line":1202},[199,12347,12348],{"class":205},"        tArray[i].tName ",[199,12350,895],{"class":1086},[199,12352,12353],{"class":898}," \"Teacher_\"",[199,12355,1028],{"class":205},[199,12357,12358,12360,12363],{"class":201,"line":1207},[199,12359,12348],{"class":205},[199,12361,12362],{"class":1086},"+=",[199,12364,12365],{"class":205},"nameSeed[i];\n",[199,12367,12368],{"class":201,"line":1212},[199,12369,907],{"emptyLinePlaceholder":906},[199,12371,12372],{"class":201,"line":1225},[199,12373,12374],{"class":1454},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[199,12376,12377,12379,12381,12383,12385,12387,12389,12391,12393,12395,12397,12399],{"class":201,"line":1236},[199,12378,1481],{"class":1086},[199,12380,1484],{"class":205},[199,12382,3100],{"class":1086},[199,12384,1978],{"class":205},[199,12386,895],{"class":1086},[199,12388,1621],{"class":1018},[199,12390,1985],{"class":205},[199,12392,887],{"class":1086},[199,12394,5064],{"class":1018},[199,12396,2003],{"class":205},[199,12398,1510],{"class":1086},[199,12400,1594],{"class":205},[199,12402,12403],{"class":201,"line":1249},[199,12404,5422],{"class":205},[199,12406,12407,12410,12412,12415],{"class":201,"line":1262},[199,12408,12409],{"class":205},"            tArray[i].sArray[j].sName ",[199,12411,895],{"class":1086},[199,12413,12414],{"class":898}," \"Student_\"",[199,12416,1028],{"class":205},[199,12418,12419,12421,12423],{"class":201,"line":1275},[199,12420,12409],{"class":205},[199,12422,12362],{"class":1086},[199,12424,12425],{"class":205}," nameSeed[j];\n",[199,12427,12428,12431,12434,12436,12438,12440,12442,12444,12446,12448,12450],{"class":201,"line":1287},[199,12429,12430],{"class":1086},"            int",[199,12432,12433],{"class":205}," random",[199,12435,895],{"class":1086},[199,12437,5337],{"class":878},[199,12439,5340],{"class":205},[199,12441,3412],{"class":1086},[199,12443,3985],{"class":1018},[199,12445,2028],{"class":1086},[199,12447,3484],{"class":1018},[199,12449,3149],{"class":205},[199,12451,12452],{"class":1454},"\u002F\u002F40~99\n",[199,12454,12455,12458,12460,12462],{"class":201,"line":1292},[199,12456,12457],{"class":205},"            tArray[i].sArray[j].age ",[199,12459,895],{"class":1086},[199,12461,11837],{"class":1018},[199,12463,1028],{"class":205},[199,12465,12466,12469,12471],{"class":201,"line":1297},[199,12467,12468],{"class":205},"            tArray[i].sArray[j].score ",[199,12470,895],{"class":1086},[199,12472,12473],{"class":205}," random;\n",[199,12475,12476],{"class":201,"line":1310},[199,12477,1046],{"class":205},[199,12479,12480],{"class":201,"line":1315},[199,12481,2097],{"class":205},[199,12483,12484],{"class":201,"line":1330},[199,12485,671],{"class":205},[199,12487,12488],{"class":201,"line":1335},[199,12489,12490],{"class":1454},"\u002F\u002F打印所有信息的函数\n",[199,12492,12493,12495,12498,12500,12502,12504,12506,12509,12511,12513],{"class":201,"line":1340},[199,12494,8261],{"class":1086},[199,12496,12497],{"class":878}," printInfo",[199,12499,1537],{"class":205},[199,12501,10656],{"class":1086},[199,12503,12286],{"class":878},[199,12505,12289],{"class":8113},[199,12507,12508],{"class":205},"[], ",[199,12510,3100],{"class":1086},[199,12512,10228],{"class":8113},[199,12514,1594],{"class":205},[199,12516,12517],{"class":201,"line":1352},[199,12518,4485],{"class":205},[199,12520,12521,12523,12525,12527,12529,12531,12533,12535,12537,12539,12541],{"class":201,"line":1367},[199,12522,1937],{"class":1086},[199,12524,1484],{"class":205},[199,12526,3100],{"class":1086},[199,12528,1490],{"class":205},[199,12530,895],{"class":1086},[199,12532,1621],{"class":1018},[199,12534,1498],{"class":205},[199,12536,887],{"class":1086},[199,12538,12335],{"class":205},[199,12540,1510],{"class":1086},[199,12542,1594],{"class":205},[199,12544,12545],{"class":201,"line":1381},[199,12546,4946],{"class":205},[199,12548,12549,12552,12554,12557,12559,12562,12564],{"class":201,"line":1396},[199,12550,12551],{"class":205},"        cout ",[199,12553,4117],{"class":1086},[199,12555,12556],{"class":898}," \"Teacher: \"",[199,12558,4384],{"class":1086},[199,12560,12561],{"class":205}," tArray[i].tName ",[199,12563,4117],{"class":1086},[199,12565,11727],{"class":205},[199,12567,12568,12570,12572,12574,12576,12578,12580,12582,12584,12586,12588,12590],{"class":201,"line":1401},[199,12569,1481],{"class":1086},[199,12571,1484],{"class":205},[199,12573,3100],{"class":1086},[199,12575,1978],{"class":205},[199,12577,895],{"class":1086},[199,12579,1621],{"class":1018},[199,12581,1985],{"class":205},[199,12583,887],{"class":1086},[199,12585,5064],{"class":1018},[199,12587,2003],{"class":205},[199,12589,1510],{"class":1086},[199,12591,1594],{"class":205},[199,12593,12594],{"class":201,"line":1411},[199,12595,5422],{"class":205},[199,12597,12598,12601,12603,12606,12608,12611,12613,12616,12618],{"class":201,"line":1421},[199,12599,12600],{"class":205},"            cout ",[199,12602,4117],{"class":1086},[199,12604,12605],{"class":898}," \"",[199,12607,4174],{"class":1018},[199,12609,12610],{"class":898},"Student: \"",[199,12612,4384],{"class":1086},[199,12614,12615],{"class":205}," tArray[i].sArray[j].sName",[199,12617,4117],{"class":1086},[199,12619,4139],{"class":205},[199,12621,12622,12624,12626,12628,12630,12633,12635,12638,12640],{"class":201,"line":1426},[199,12623,12600],{"class":205},[199,12625,4117],{"class":1086},[199,12627,12605],{"class":898},[199,12629,4174],{"class":1018},[199,12631,12632],{"class":898},"Age: \"",[199,12634,4384],{"class":1086},[199,12636,12637],{"class":205}," tArray[i].sArray[j].age ",[199,12639,4117],{"class":1086},[199,12641,11727],{"class":205},[199,12643,12644,12646,12648,12650,12652,12655,12657,12660,12662],{"class":201,"line":1436},[199,12645,12600],{"class":205},[199,12647,4117],{"class":1086},[199,12649,12605],{"class":898},[199,12651,4174],{"class":1018},[199,12653,12654],{"class":898},"Score: \"",[199,12656,4384],{"class":1086},[199,12658,12659],{"class":205}," tArray[i].sArray[j].score ",[199,12661,4117],{"class":1086},[199,12663,12664],{"class":205}," endl;   \n",[199,12666,12667],{"class":201,"line":1441},[199,12668,1046],{"class":205},[199,12670,12671],{"class":201,"line":1451},[199,12672,2097],{"class":205},[199,12674,12675],{"class":201,"line":1458},[199,12676,671],{"class":205},[199,12678,12679,12681,12683],{"class":201,"line":1464},[199,12680,3100],{"class":1086},[199,12682,4889],{"class":878},[199,12684,4892],{"class":205},[199,12686,12687],{"class":201,"line":1478},[199,12688,4485],{"class":205},[199,12690,12691],{"class":201,"line":1516},[199,12692,12693],{"class":1454},"    \u002F\u002F随机数种子\n",[199,12695,12696,12698,12700,12702,12704,12706,12708,12710,12712],{"class":201,"line":1522},[199,12697,5287],{"class":878},[199,12699,5290],{"class":205},[199,12701,5293],{"class":1086},[199,12703,5296],{"class":1086},[199,12705,3512],{"class":205},[199,12707,5301],{"class":878},[199,12709,1537],{"class":205},[199,12711,5306],{"class":1018},[199,12713,5309],{"class":205},[199,12715,12716],{"class":201,"line":1528},[199,12717,12718],{"class":1454},"    \u002F\u002F1.创建3名老师的数组\n",[199,12720,12721,12723,12725,12728,12730],{"class":201,"line":1557},[199,12722,10792],{"class":1086},[199,12724,12286],{"class":878},[199,12726,12727],{"class":205}," tArray[",[199,12729,1920],{"class":1018},[199,12731,7587],{"class":205},[199,12733,12734],{"class":201,"line":1563},[199,12735,12736],{"class":1454},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[199,12738,12739,12741,12744,12746,12749,12752,12754,12756,12759,12761],{"class":201,"line":1568},[199,12740,4901],{"class":1086},[199,12742,12743],{"class":205}," len ",[199,12745,895],{"class":1086},[199,12747,12748],{"class":1086}," sizeof",[199,12750,12751],{"class":205},"(tArray) ",[199,12753,3664],{"class":1086},[199,12755,12748],{"class":1086},[199,12757,12758],{"class":205},"(tArray[",[199,12760,1025],{"class":1018},[199,12762,6757],{"class":205},[199,12764,12765,12768],{"class":201,"line":1574},[199,12766,12767],{"class":878},"    allocateSpace",[199,12769,12770],{"class":205},"(tArray, len);\n",[199,12772,12773],{"class":201,"line":1580},[199,12774,12775],{"class":1454},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[199,12777,12778,12781],{"class":201,"line":1597},[199,12779,12780],{"class":878},"    printInfo",[199,12782,12770],{"class":205},[199,12784,12785],{"class":201,"line":1602},[199,12786,907],{"emptyLinePlaceholder":906},[199,12788,12789],{"class":201,"line":1608},[199,12790,671],{"class":205},[24,12792,12793],{"start":36},[27,12794,12795,12798],{},[49,12796,12797],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[31,12800,12801],{},"五名英雄信息如下：",[190,12803,12807],{"className":12804,"code":12805,"language":12806,"meta":57,"style":57},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[196,12808,12809,12827,12844,12861,12878],{"__ignoreMap":57},[199,12810,12811,12813,12816,12818,12820,12822,12825],{"class":201,"line":202},[199,12812,7814],{"class":205},[199,12814,12815],{"class":898},"\"刘备\"",[199,12817,3461],{"class":205},[199,12819,3854],{"class":1018},[199,12821,3461],{"class":205},[199,12823,12824],{"class":898},"\"男\"",[199,12826,7827],{"class":205},[199,12828,12829,12831,12834,12836,12838,12840,12842],{"class":201,"line":36},[199,12830,7814],{"class":205},[199,12832,12833],{"class":898},"\"关羽\"",[199,12835,3461],{"class":205},[199,12837,3829],{"class":1018},[199,12839,3461],{"class":205},[199,12841,12824],{"class":898},[199,12843,7827],{"class":205},[199,12845,12846,12848,12851,12853,12855,12857,12859],{"class":201,"line":73},[199,12847,7814],{"class":205},[199,12849,12850],{"class":898},"\"张飞\"",[199,12852,3461],{"class":205},[199,12854,3779],{"class":1018},[199,12856,3461],{"class":205},[199,12858,12824],{"class":898},[199,12860,7827],{"class":205},[199,12862,12863,12865,12868,12870,12872,12874,12876],{"class":201,"line":333},[199,12864,7814],{"class":205},[199,12866,12867],{"class":898},"\"赵云\"",[199,12869,3461],{"class":205},[199,12871,3804],{"class":1018},[199,12873,3461],{"class":205},[199,12875,12824],{"class":898},[199,12877,7827],{"class":205},[199,12879,12880,12882,12885,12887,12889,12891,12894],{"class":201,"line":227},[199,12881,7814],{"class":205},[199,12883,12884],{"class":898},"\"貂蝉\"",[199,12886,3461],{"class":205},[199,12888,3754],{"class":1018},[199,12890,3461],{"class":205},[199,12892,12893],{"class":898},"\"女\"",[199,12895,7827],{"class":205},[31,12897,12898],{},"代码：",[190,12900,12902],{"className":3086,"code":12901,"language":3088,"meta":57,"style":57},"#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",[196,12903,12904,12910,12920,12926,12933,12937,12941,12947,12952,12956,12961,12984,12988,13013,13017,13050,13055,13084,13089,13104,13130,13150,13155,13160,13164,13168,13173,13195,13199,13223,13227,13289,13293,13297,13305,13309,13314,13325,13329,13345,13361,13377,13393,13409,13413,13433,13455,13460,13473,13480,13485,13491,13496,13509,13515],{"__ignoreMap":57},[199,12905,12906,12908],{"class":201,"line":202},[199,12907,4866],{"class":1086},[199,12909,4869],{"class":898},[199,12911,12912,12914,12916,12918],{"class":201,"line":36},[199,12913,4874],{"class":1086},[199,12915,4877],{"class":1086},[199,12917,4880],{"class":878},[199,12919,1028],{"class":205},[199,12921,12922,12924],{"class":201,"line":73},[199,12923,4866],{"class":1086},[199,12925,10646],{"class":898},[199,12927,12928,12930],{"class":201,"line":333},[199,12929,10656],{"class":1086},[199,12931,12932],{"class":878}," Sanguo\n",[199,12934,12935],{"class":201,"line":227},[199,12936,4485],{"class":205},[199,12938,12939],{"class":201,"line":238},[199,12940,10682],{"class":205},[199,12942,12943,12945],{"class":201,"line":252},[199,12944,4901],{"class":1086},[199,12946,10694],{"class":205},[199,12948,12949],{"class":201,"line":388},[199,12950,12951],{"class":205},"    string gender;\n",[199,12953,12954],{"class":201,"line":415},[199,12955,6894],{"class":205},[199,12957,12958],{"class":201,"line":426},[199,12959,12960],{"class":1454},"\u002F\u002F定义排序函数\n",[199,12962,12963,12965,12967,12969,12972,12974,12976,12978,12980,12982],{"class":201,"line":1015},[199,12964,8261],{"class":1086},[199,12966,10213],{"class":878},[199,12968,1537],{"class":205},[199,12970,12971],{"class":878},"Sanguo",[199,12973,9415],{"class":1086},[199,12975,3774],{"class":8113},[199,12977,3461],{"class":205},[199,12979,3100],{"class":1086},[199,12981,10228],{"class":8113},[199,12983,1594],{"class":205},[199,12985,12986],{"class":201,"line":1031},[199,12987,4485],{"class":205},[199,12989,12990,12992,12994,12996,12998,13000,13002,13004,13006,13009,13011],{"class":201,"line":1043},[199,12991,1937],{"class":1086},[199,12993,1537],{"class":205},[199,12995,3100],{"class":1086},[199,12997,5936],{"class":205},[199,12999,895],{"class":1086},[199,13001,1025],{"class":1018},[199,13003,5943],{"class":205},[199,13005,887],{"class":1086},[199,13007,13008],{"class":205},"len;i",[199,13010,1510],{"class":1086},[199,13012,1594],{"class":205},[199,13014,13015],{"class":201,"line":1049},[199,13016,4946],{"class":205},[199,13018,13019,13022,13024,13026,13028,13030,13032,13034,13036,13038,13040,13042,13044,13046,13048],{"class":201,"line":1054},[199,13020,13021],{"class":1086},"     for",[199,13023,1484],{"class":205},[199,13025,3100],{"class":1086},[199,13027,6311],{"class":205},[199,13029,895],{"class":1086},[199,13031,1025],{"class":1018},[199,13033,6318],{"class":205},[199,13035,887],{"class":1086},[199,13037,10255],{"class":205},[199,13039,1998],{"class":1086},[199,13041,1115],{"class":1018},[199,13043,1998],{"class":1086},[199,13045,6451],{"class":205},[199,13047,1510],{"class":1086},[199,13049,1594],{"class":205},[199,13051,13052],{"class":201,"line":1062},[199,13053,13054],{"class":205},"     {\n",[199,13056,13057,13060,13063,13065,13068,13070,13073,13075,13077,13079,13081],{"class":201,"line":1075},[199,13058,13059],{"class":1086},"         if",[199,13061,13062],{"class":205}," ((s",[199,13064,2028],{"class":1086},[199,13066,13067],{"class":205},"j)->age ",[199,13069,1217],{"class":1086},[199,13071,13072],{"class":205}," (s",[199,13074,2028],{"class":1086},[199,13076,3549],{"class":205},[199,13078,2028],{"class":1086},[199,13080,1115],{"class":1018},[199,13082,13083],{"class":205},")->age)\n",[199,13085,13086],{"class":201,"line":1092},[199,13087,13088],{"class":205},"         {\n",[199,13090,13091,13094,13096,13099,13101],{"class":201,"line":1107},[199,13092,13093],{"class":205},"             Sanguo temp",[199,13095,10050],{"class":1086},[199,13097,13098],{"class":205},"(s",[199,13100,2028],{"class":1086},[199,13102,13103],{"class":205},"j);\n",[199,13105,13106,13109,13111,13113,13116,13118,13120,13122,13124,13126,13128],{"class":201,"line":1128},[199,13107,13108],{"class":1086},"             *",[199,13110,13098],{"class":205},[199,13112,2028],{"class":1086},[199,13114,13115],{"class":205},"j)",[199,13117,10050],{"class":1086},[199,13119,13098],{"class":205},[199,13121,2028],{"class":1086},[199,13123,3549],{"class":205},[199,13125,2028],{"class":1086},[199,13127,1115],{"class":1018},[199,13129,5623],{"class":205},[199,13131,13132,13134,13136,13138,13140,13142,13144,13146,13148],{"class":201,"line":1146},[199,13133,13108],{"class":1086},[199,13135,13098],{"class":205},[199,13137,2028],{"class":1086},[199,13139,3549],{"class":205},[199,13141,2028],{"class":1086},[199,13143,1115],{"class":1018},[199,13145,3512],{"class":205},[199,13147,895],{"class":1086},[199,13149,7178],{"class":205},[199,13151,13152],{"class":201,"line":1163},[199,13153,13154],{"class":205},"         }\n",[199,13156,13157],{"class":201,"line":1176},[199,13158,13159],{"class":205},"     }\n",[199,13161,13162],{"class":201,"line":1189},[199,13163,2097],{"class":205},[199,13165,13166],{"class":201,"line":1202},[199,13167,671],{"class":205},[199,13169,13170],{"class":201,"line":1207},[199,13171,13172],{"class":1454},"\u002F\u002F定义打印函数\n",[199,13174,13175,13177,13179,13181,13183,13185,13187,13189,13191,13193],{"class":201,"line":1212},[199,13176,8261],{"class":1086},[199,13178,12497],{"class":878},[199,13180,1537],{"class":205},[199,13182,12971],{"class":878},[199,13184,9415],{"class":1086},[199,13186,3774],{"class":8113},[199,13188,3461],{"class":205},[199,13190,3100],{"class":1086},[199,13192,10228],{"class":8113},[199,13194,1594],{"class":205},[199,13196,13197],{"class":201,"line":1225},[199,13198,4485],{"class":205},[199,13200,13201,13203,13205,13207,13209,13211,13213,13215,13217,13219,13221],{"class":201,"line":1236},[199,13202,1937],{"class":1086},[199,13204,1484],{"class":205},[199,13206,3100],{"class":1086},[199,13208,5936],{"class":205},[199,13210,895],{"class":1086},[199,13212,1025],{"class":1018},[199,13214,5943],{"class":205},[199,13216,887],{"class":1086},[199,13218,13008],{"class":205},[199,13220,1510],{"class":1086},[199,13222,1594],{"class":205},[199,13224,13225],{"class":201,"line":1249},[199,13226,4946],{"class":205},[199,13228,13229,13231,13233,13235,13237,13240,13242,13244,13246,13249,13251,13253,13255,13258,13260,13262,13264,13267,13269,13271,13273,13276,13278,13280,13282,13285,13287],{"class":201,"line":1262},[199,13230,6352],{"class":205},[199,13232,4117],{"class":1086},[199,13234,3337],{"class":898},[199,13236,4174],{"class":1018},[199,13238,13239],{"class":898},"姓名：\"",[199,13241,4117],{"class":1086},[199,13243,13098],{"class":205},[199,13245,2028],{"class":1086},[199,13247,13248],{"class":205},"i)->name",[199,13250,4117],{"class":1086},[199,13252,3337],{"class":898},[199,13254,4174],{"class":1018},[199,13256,13257],{"class":898},"年龄：\"",[199,13259,4117],{"class":1086},[199,13261,13098],{"class":205},[199,13263,2028],{"class":1086},[199,13265,13266],{"class":205},"i)->age",[199,13268,4117],{"class":1086},[199,13270,3337],{"class":898},[199,13272,4174],{"class":1018},[199,13274,13275],{"class":898},"性别：\"",[199,13277,4117],{"class":1086},[199,13279,13098],{"class":205},[199,13281,2028],{"class":1086},[199,13283,13284],{"class":205},"i)->gender",[199,13286,4117],{"class":1086},[199,13288,4139],{"class":205},[199,13290,13291],{"class":201,"line":1275},[199,13292,2097],{"class":205},[199,13294,13295],{"class":201,"line":1287},[199,13296,671],{"class":205},[199,13298,13299,13301,13303],{"class":201,"line":1292},[199,13300,3100],{"class":1086},[199,13302,4889],{"class":878},[199,13304,4892],{"class":205},[199,13306,13307],{"class":201,"line":1297},[199,13308,4485],{"class":205},[199,13310,13311],{"class":201,"line":1310},[199,13312,13313],{"class":1454},"    \u002F\u002F定义结构体变量\n",[199,13315,13316,13319,13321,13323],{"class":201,"line":1315},[199,13317,13318],{"class":205},"    Sanguo s1[",[199,13320,1909],{"class":1018},[199,13322,1667],{"class":205},[199,13324,7805],{"class":1086},[199,13326,13327],{"class":201,"line":1330},[199,13328,4946],{"class":205},[199,13330,13331,13333,13335,13337,13339,13341,13343],{"class":201,"line":1335},[199,13332,7814],{"class":205},[199,13334,12815],{"class":898},[199,13336,3461],{"class":205},[199,13338,3854],{"class":1018},[199,13340,3461],{"class":205},[199,13342,12824],{"class":898},[199,13344,7827],{"class":205},[199,13346,13347,13349,13351,13353,13355,13357,13359],{"class":201,"line":1340},[199,13348,7814],{"class":205},[199,13350,12833],{"class":898},[199,13352,3461],{"class":205},[199,13354,3829],{"class":1018},[199,13356,3461],{"class":205},[199,13358,12824],{"class":898},[199,13360,7827],{"class":205},[199,13362,13363,13365,13367,13369,13371,13373,13375],{"class":201,"line":1352},[199,13364,7814],{"class":205},[199,13366,12850],{"class":898},[199,13368,3461],{"class":205},[199,13370,3779],{"class":1018},[199,13372,3461],{"class":205},[199,13374,12824],{"class":898},[199,13376,7827],{"class":205},[199,13378,13379,13381,13383,13385,13387,13389,13391],{"class":201,"line":1367},[199,13380,7814],{"class":205},[199,13382,12867],{"class":898},[199,13384,3461],{"class":205},[199,13386,3804],{"class":1018},[199,13388,3461],{"class":205},[199,13390,12824],{"class":898},[199,13392,7827],{"class":205},[199,13394,13395,13397,13399,13401,13403,13405,13407],{"class":201,"line":1381},[199,13396,7814],{"class":205},[199,13398,12884],{"class":898},[199,13400,3461],{"class":205},[199,13402,3754],{"class":1018},[199,13404,3461],{"class":205},[199,13406,12893],{"class":898},[199,13408,7827],{"class":205},[199,13410,13411],{"class":201,"line":1396},[199,13412,7848],{"class":205},[199,13414,13415,13417,13419,13421,13424,13426,13429,13431],{"class":201,"line":1401},[199,13416,4901],{"class":1086},[199,13418,10228],{"class":205},[199,13420,7101],{"class":1086},[199,13422,13423],{"class":205},"(s1)",[199,13425,7107],{"class":1086},[199,13427,13428],{"class":205},"(s1[",[199,13430,1025],{"class":1018},[199,13432,6757],{"class":205},[199,13434,13435,13438,13440,13443,13445,13448,13451,13453],{"class":201,"line":1411},[199,13436,13437],{"class":205},"    Sanguo ",[199,13439,3537],{"class":1086},[199,13441,13442],{"class":205},"s ",[199,13444,895],{"class":1086},[199,13446,13447],{"class":1086}," &",[199,13449,13450],{"class":205},"s1[",[199,13452,1025],{"class":1018},[199,13454,7587],{"class":205},[199,13456,13457],{"class":201,"line":1421},[199,13458,13459],{"class":1454},"    \u002F\u002F排序前：\n",[199,13461,13462,13464,13466,13469,13471],{"class":201,"line":1426},[199,13463,9426],{"class":205},[199,13465,4117],{"class":1086},[199,13467,13468],{"class":898}," \"排序前：\"",[199,13470,4384],{"class":1086},[199,13472,11727],{"class":205},[199,13474,13475,13477],{"class":201,"line":1436},[199,13476,12780],{"class":878},[199,13478,13479],{"class":205},"(s,len);\n",[199,13481,13482],{"class":201,"line":1441},[199,13483,13484],{"class":1454},"    \u002F\u002F调用排序函数\n",[199,13486,13487,13489],{"class":201,"line":1451},[199,13488,10495],{"class":878},[199,13490,13479],{"class":205},[199,13492,13493],{"class":201,"line":1458},[199,13494,13495],{"class":1454},"    \u002F\u002F排序后\n",[199,13497,13498,13500,13502,13505,13507],{"class":201,"line":1464},[199,13499,9426],{"class":205},[199,13501,4117],{"class":1086},[199,13503,13504],{"class":898}," \"排序后：\"",[199,13506,4384],{"class":1086},[199,13508,11727],{"class":205},[199,13510,13511,13513],{"class":201,"line":1478},[199,13512,12780],{"class":878},[199,13514,13479],{"class":205},[199,13516,13517],{"class":201,"line":1516},[199,13518,671],{"class":205},[31,13520,13521,13522,13524],{},"注意：使用指针时直接用传首地址**&s",[199,13523,1025],{},"**",[1002,13526,13527],{},"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":57,"searchDepth":36,"depth":36,"links":13529},[13530,13531,13532,13533,13534,13535,13536],{"id":10600,"depth":36,"text":10601},{"id":10952,"depth":36,"text":10953},{"id":11221,"depth":36,"text":11222},{"id":11386,"depth":36,"text":11387},{"id":11602,"depth":36,"text":11603},{"id":11923,"depth":36,"text":11924},{"id":12151,"depth":36,"text":12152},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":10589,"description":10597},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":13543,"title":13544,"body":13545,"description":57,"extension":3024,"meta":14888,"navigation":906,"path":14889,"seo":14890,"stem":14891,"__hash__":14892},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":13546,"toc":14882},[13547,13550,13554,13560,13574,13579,13582,13586,13593,13599,13602,13609,13615,13620,13623,13626,13629,14193,14196,14210,14214,14219,14235,14375,14378,14384,14387,14392,14400,14508,14511,14516,14519,14524,14527,14533,14536,14879],[10,13548,13544],{"id":13549},"_5程序内存模型",[14,13551,13553],{"id":13552},"_51内存分区模型","5.1内存分区模型",[31,13555,13556,13557],{},"C++程序在执行时，将内存大方向划分为",[49,13558,13559],{},"4个区域",[176,13561,13562,13565,13568,13571],{},[27,13563,13564],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[27,13566,13567],{},"全局区：存放全局变量和静态变量以及常量",[27,13569,13570],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[27,13572,13573],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[31,13575,13576],{},[49,13577,13578],{},"内存四区意义：",[31,13580,13581],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[19,13583,13585],{"id":13584},"_511程序运行前","5.1.1程序运行前",[31,13587,13588,13589,13592],{},"​\t在程序编译后，生成了exe可执行程序，",[49,13590,13591],{},"未执行该程序前","分为两个区域",[31,13594,13595,13596],{},"​\t",[49,13597,13598],{},"代码区：",[31,13600,13601],{},"​\t\t存放 CPU 执行的机器指令",[31,13603,13604,13605,13608],{},"​\t\t代码区是",[49,13606,13607],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[31,13610,13604,13611,13614],{},[49,13612,13613],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[31,13616,13595,13617],{},[49,13618,13619],{},"全局区：",[31,13621,13622],{},"​\t\t全局变量和静态变量存放在此.",[31,13624,13625],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[31,13627,13628],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[190,13630,13632],{"className":3086,"code":13631,"language":3088,"meta":57,"style":57},"\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",[196,13633,13634,13639,13652,13665,13669,13674,13689,13704,13708,13717,13721,13726,13739,13752,13756,13761,13787,13813,13817,13844,13870,13874,13879,13895,13910,13914,13940,13966,13970,13995,14020,14024,14050,14076,14080,14096,14111,14137,14163,14167,14177,14181,14189],{"__ignoreMap":57},[199,13635,13636],{"class":201,"line":202},[199,13637,13638],{"class":1454},"\u002F\u002F全局变量\n",[199,13640,13641,13643,13646,13648,13650],{"class":201,"line":36},[199,13642,3100],{"class":1086},[199,13644,13645],{"class":205}," g_a ",[199,13647,895],{"class":1086},[199,13649,4954],{"class":1018},[199,13651,1028],{"class":205},[199,13653,13654,13656,13659,13661,13663],{"class":201,"line":73},[199,13655,3100],{"class":1086},[199,13657,13658],{"class":205}," g_b ",[199,13660,895],{"class":1086},[199,13662,4954],{"class":1018},[199,13664,1028],{"class":205},[199,13666,13667],{"class":201,"line":333},[199,13668,907],{"emptyLinePlaceholder":906},[199,13670,13671],{"class":201,"line":227},[199,13672,13673],{"class":1454},"\u002F\u002F全局常量\n",[199,13675,13676,13678,13680,13683,13685,13687],{"class":201,"line":238},[199,13677,9689],{"class":1086},[199,13679,5296],{"class":1086},[199,13681,13682],{"class":205}," c_g_a ",[199,13684,895],{"class":1086},[199,13686,4954],{"class":1018},[199,13688,1028],{"class":205},[199,13690,13691,13693,13695,13698,13700,13702],{"class":201,"line":252},[199,13692,9689],{"class":1086},[199,13694,5296],{"class":1086},[199,13696,13697],{"class":205}," c_g_b ",[199,13699,895],{"class":1086},[199,13701,4954],{"class":1018},[199,13703,1028],{"class":205},[199,13705,13706],{"class":201,"line":388},[199,13707,907],{"emptyLinePlaceholder":906},[199,13709,13710,13712,13714],{"class":201,"line":415},[199,13711,3100],{"class":1086},[199,13713,4889],{"class":878},[199,13715,13716],{"class":205},"() {\n",[199,13718,13719],{"class":201,"line":426},[199,13720,907],{"emptyLinePlaceholder":906},[199,13722,13723],{"class":201,"line":1015},[199,13724,13725],{"class":1454},"    \u002F\u002F局部变量\n",[199,13727,13728,13730,13733,13735,13737],{"class":201,"line":1031},[199,13729,4901],{"class":1086},[199,13731,13732],{"class":205}," a ",[199,13734,895],{"class":1086},[199,13736,4954],{"class":1018},[199,13738,1028],{"class":205},[199,13740,13741,13743,13746,13748,13750],{"class":201,"line":1043},[199,13742,4901],{"class":1086},[199,13744,13745],{"class":205}," b ",[199,13747,895],{"class":1086},[199,13749,4954],{"class":1018},[199,13751,1028],{"class":205},[199,13753,13754],{"class":201,"line":1049},[199,13755,907],{"emptyLinePlaceholder":906},[199,13757,13758],{"class":201,"line":1054},[199,13759,13760],{"class":1454},"    \u002F\u002F打印地址\n",[199,13762,13763,13765,13767,13770,13772,13774,13776,13778,13780,13783,13785],{"class":201,"line":1062},[199,13764,9426],{"class":205},[199,13766,4117],{"class":1086},[199,13768,13769],{"class":898}," \"局部变量a地址为： \"",[199,13771,4384],{"class":1086},[199,13773,1484],{"class":205},[199,13775,3100],{"class":1086},[199,13777,3512],{"class":205},[199,13779,3437],{"class":1086},[199,13781,13782],{"class":205},"a ",[199,13784,4117],{"class":1086},[199,13786,11727],{"class":205},[199,13788,13789,13791,13793,13796,13798,13800,13802,13804,13806,13809,13811],{"class":201,"line":1075},[199,13790,9426],{"class":205},[199,13792,4117],{"class":1086},[199,13794,13795],{"class":898}," \"局部变量b地址为： \"",[199,13797,4384],{"class":1086},[199,13799,1484],{"class":205},[199,13801,3100],{"class":1086},[199,13803,3512],{"class":205},[199,13805,3437],{"class":1086},[199,13807,13808],{"class":205},"b ",[199,13810,4117],{"class":1086},[199,13812,11727],{"class":205},[199,13814,13815],{"class":201,"line":1092},[199,13816,907],{"emptyLinePlaceholder":906},[199,13818,13819,13821,13823,13826,13828,13831,13833,13835,13837,13840,13842],{"class":201,"line":1107},[199,13820,9426],{"class":205},[199,13822,4117],{"class":1086},[199,13824,13825],{"class":898}," \"全局变量g_a地址为： \"",[199,13827,4384],{"class":1086},[199,13829,13830],{"class":205},"  (",[199,13832,3100],{"class":1086},[199,13834,3512],{"class":205},[199,13836,3437],{"class":1086},[199,13838,13839],{"class":205},"g_a ",[199,13841,4117],{"class":1086},[199,13843,11727],{"class":205},[199,13845,13846,13848,13850,13853,13855,13857,13859,13861,13863,13866,13868],{"class":201,"line":1128},[199,13847,9426],{"class":205},[199,13849,4117],{"class":1086},[199,13851,13852],{"class":898}," \"全局变量g_b地址为： \"",[199,13854,4384],{"class":1086},[199,13856,13830],{"class":205},[199,13858,3100],{"class":1086},[199,13860,3512],{"class":205},[199,13862,3437],{"class":1086},[199,13864,13865],{"class":205},"g_b ",[199,13867,4117],{"class":1086},[199,13869,11727],{"class":205},[199,13871,13872],{"class":201,"line":1146},[199,13873,907],{"emptyLinePlaceholder":906},[199,13875,13876],{"class":201,"line":1163},[199,13877,13878],{"class":1454},"    \u002F\u002F静态变量\n",[199,13880,13881,13884,13886,13889,13891,13893],{"class":201,"line":1176},[199,13882,13883],{"class":1086},"    static",[199,13885,5296],{"class":1086},[199,13887,13888],{"class":205}," s_a ",[199,13890,895],{"class":1086},[199,13892,4954],{"class":1018},[199,13894,1028],{"class":205},[199,13896,13897,13899,13901,13904,13906,13908],{"class":201,"line":1189},[199,13898,13883],{"class":1086},[199,13900,5296],{"class":1086},[199,13902,13903],{"class":205}," s_b ",[199,13905,895],{"class":1086},[199,13907,4954],{"class":1018},[199,13909,1028],{"class":205},[199,13911,13912],{"class":201,"line":1202},[199,13913,907],{"emptyLinePlaceholder":906},[199,13915,13916,13918,13920,13923,13925,13927,13929,13931,13933,13936,13938],{"class":201,"line":1207},[199,13917,9426],{"class":205},[199,13919,4117],{"class":1086},[199,13921,13922],{"class":898}," \"静态变量s_a地址为： \"",[199,13924,4384],{"class":1086},[199,13926,1484],{"class":205},[199,13928,3100],{"class":1086},[199,13930,3512],{"class":205},[199,13932,3437],{"class":1086},[199,13934,13935],{"class":205},"s_a ",[199,13937,4117],{"class":1086},[199,13939,11727],{"class":205},[199,13941,13942,13944,13946,13949,13951,13953,13955,13957,13959,13962,13964],{"class":201,"line":1212},[199,13943,9426],{"class":205},[199,13945,4117],{"class":1086},[199,13947,13948],{"class":898}," \"静态变量s_b地址为： \"",[199,13950,4384],{"class":1086},[199,13952,1484],{"class":205},[199,13954,3100],{"class":1086},[199,13956,3512],{"class":205},[199,13958,3437],{"class":1086},[199,13960,13961],{"class":205},"s_b ",[199,13963,4117],{"class":1086},[199,13965,11727],{"class":205},[199,13967,13968],{"class":201,"line":1225},[199,13969,907],{"emptyLinePlaceholder":906},[199,13971,13972,13974,13976,13979,13981,13983,13985,13987,13989,13991,13993],{"class":201,"line":1236},[199,13973,9426],{"class":205},[199,13975,4117],{"class":1086},[199,13977,13978],{"class":898}," \"字符串常量地址为： \"",[199,13980,4384],{"class":1086},[199,13982,1484],{"class":205},[199,13984,3100],{"class":1086},[199,13986,3512],{"class":205},[199,13988,3437],{"class":1086},[199,13990,4134],{"class":898},[199,13992,4384],{"class":1086},[199,13994,11727],{"class":205},[199,13996,13997,13999,14001,14003,14005,14007,14009,14011,14013,14016,14018],{"class":201,"line":1249},[199,13998,9426],{"class":205},[199,14000,4117],{"class":1086},[199,14002,13978],{"class":898},[199,14004,4384],{"class":1086},[199,14006,1484],{"class":205},[199,14008,3100],{"class":1086},[199,14010,3512],{"class":205},[199,14012,3437],{"class":1086},[199,14014,14015],{"class":898},"\"hello world1\"",[199,14017,4384],{"class":1086},[199,14019,11727],{"class":205},[199,14021,14022],{"class":201,"line":1262},[199,14023,907],{"emptyLinePlaceholder":906},[199,14025,14026,14028,14030,14033,14035,14037,14039,14041,14043,14046,14048],{"class":201,"line":1275},[199,14027,9426],{"class":205},[199,14029,4117],{"class":1086},[199,14031,14032],{"class":898}," \"全局常量c_g_a地址为： \"",[199,14034,4384],{"class":1086},[199,14036,1484],{"class":205},[199,14038,3100],{"class":1086},[199,14040,3512],{"class":205},[199,14042,3437],{"class":1086},[199,14044,14045],{"class":205},"c_g_a ",[199,14047,4117],{"class":1086},[199,14049,11727],{"class":205},[199,14051,14052,14054,14056,14059,14061,14063,14065,14067,14069,14072,14074],{"class":201,"line":1287},[199,14053,9426],{"class":205},[199,14055,4117],{"class":1086},[199,14057,14058],{"class":898}," \"全局常量c_g_b地址为： \"",[199,14060,4384],{"class":1086},[199,14062,1484],{"class":205},[199,14064,3100],{"class":1086},[199,14066,3512],{"class":205},[199,14068,3437],{"class":1086},[199,14070,14071],{"class":205},"c_g_b ",[199,14073,4117],{"class":1086},[199,14075,11727],{"class":205},[199,14077,14078],{"class":201,"line":1292},[199,14079,907],{"emptyLinePlaceholder":906},[199,14081,14082,14085,14087,14090,14092,14094],{"class":201,"line":1297},[199,14083,14084],{"class":1086},"    const",[199,14086,5296],{"class":1086},[199,14088,14089],{"class":205}," c_l_a ",[199,14091,895],{"class":1086},[199,14093,4954],{"class":1018},[199,14095,1028],{"class":205},[199,14097,14098,14100,14102,14105,14107,14109],{"class":201,"line":1310},[199,14099,14084],{"class":1086},[199,14101,5296],{"class":1086},[199,14103,14104],{"class":205}," c_l_b ",[199,14106,895],{"class":1086},[199,14108,4954],{"class":1018},[199,14110,1028],{"class":205},[199,14112,14113,14115,14117,14120,14122,14124,14126,14128,14130,14133,14135],{"class":201,"line":1315},[199,14114,9426],{"class":205},[199,14116,4117],{"class":1086},[199,14118,14119],{"class":898}," \"局部常量c_l_a地址为： \"",[199,14121,4384],{"class":1086},[199,14123,1484],{"class":205},[199,14125,3100],{"class":1086},[199,14127,3512],{"class":205},[199,14129,3437],{"class":1086},[199,14131,14132],{"class":205},"c_l_a ",[199,14134,4117],{"class":1086},[199,14136,11727],{"class":205},[199,14138,14139,14141,14143,14146,14148,14150,14152,14154,14156,14159,14161],{"class":201,"line":1330},[199,14140,9426],{"class":205},[199,14142,4117],{"class":1086},[199,14144,14145],{"class":898}," \"局部常量c_l_b地址为： \"",[199,14147,4384],{"class":1086},[199,14149,1484],{"class":205},[199,14151,3100],{"class":1086},[199,14153,3512],{"class":205},[199,14155,3437],{"class":1086},[199,14157,14158],{"class":205},"c_l_b ",[199,14160,4117],{"class":1086},[199,14162,11727],{"class":205},[199,14164,14165],{"class":201,"line":1335},[199,14166,907],{"emptyLinePlaceholder":906},[199,14168,14169,14171,14173,14175],{"class":201,"line":1340},[199,14170,5217],{"class":878},[199,14172,1537],{"class":205},[199,14174,5222],{"class":898},[199,14176,5623],{"class":205},[199,14178,14179],{"class":201,"line":1352},[199,14180,907],{"emptyLinePlaceholder":906},[199,14182,14183,14185,14187],{"class":201,"line":1367},[199,14184,6989],{"class":1086},[199,14186,1621],{"class":1018},[199,14188,1028],{"class":205},[199,14190,14191],{"class":201,"line":1381},[199,14192,671],{"class":205},[31,14194,14195],{},"总结：",[176,14197,14198,14201,14204,14207],{},[27,14199,14200],{},"c++中程序运行前分为全局区和代码区",[27,14202,14203],{},"代码区特点是共享和只读",[27,14205,14206],{},"全局区中存放全局变量、静态变量、常量",[27,14208,14209],{},"常量区中存放const修饰的全局常量和字符串常量",[19,14211,14213],{"id":14212},"_512程序运行后","5.1.2程序运行后",[24,14215,14216],{},[27,14217,14218],{},"栈区：",[176,14220,14221,14228],{},[27,14222,14223,14224,14227],{},"由编译器自动分配释放, 存放",[49,14225,14226],{},"函数的参数值,局部变量","等",[27,14229,14230,14231,14234],{},"注意事项：",[49,14232,14233],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[190,14236,14238],{"className":3086,"code":14237,"language":3088,"meta":57,"style":57},"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",[196,14239,14240,14251,14255,14270,14282,14286,14290,14298,14303,14318,14336,14353,14363,14371],{"__ignoreMap":57},[199,14241,14242,14244,14246,14249],{"class":201,"line":202},[199,14243,3100],{"class":1086},[199,14245,9415],{"class":1086},[199,14247,14248],{"class":878}," func",[199,14250,4892],{"class":205},[199,14252,14253],{"class":201,"line":36},[199,14254,4485],{"class":205},[199,14256,14257,14259,14261,14263,14265,14267],{"class":201,"line":73},[199,14258,4901],{"class":1086},[199,14260,13732],{"class":205},[199,14262,895],{"class":1086},[199,14264,4954],{"class":1018},[199,14266,3149],{"class":205},[199,14268,14269],{"class":1454}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[199,14271,14272,14274,14276,14279],{"class":201,"line":333},[199,14273,6989],{"class":1086},[199,14275,13447],{"class":1086},[199,14277,14278],{"class":205},"a;",[199,14280,14281],{"class":1454}," \u002F\u002F放回局部变量的地址\n",[199,14283,14284],{"class":201,"line":227},[199,14285,671],{"class":205},[199,14287,14288],{"class":201,"line":238},[199,14289,907],{"emptyLinePlaceholder":906},[199,14291,14292,14294,14296],{"class":201,"line":252},[199,14293,3100],{"class":1086},[199,14295,4889],{"class":878},[199,14297,13716],{"class":205},[199,14299,14300],{"class":201,"line":388},[199,14301,14302],{"class":1454},"    \u002F\u002F接受func的返回值\n",[199,14304,14305,14307,14309,14312,14314,14316],{"class":201,"line":415},[199,14306,4901],{"class":1086},[199,14308,9415],{"class":1086},[199,14310,14311],{"class":205},"p ",[199,14313,895],{"class":1086},[199,14315,14248],{"class":878},[199,14317,8533],{"class":205},[199,14319,14320,14322,14324,14326,14328,14330,14333],{"class":201,"line":426},[199,14321,9426],{"class":205},[199,14323,4117],{"class":1086},[199,14325,9415],{"class":1086},[199,14327,14311],{"class":205},[199,14329,4117],{"class":1086},[199,14331,14332],{"class":205}," endl;",[199,14334,14335],{"class":1454}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[199,14337,14338,14340,14342,14344,14346,14348,14350],{"class":201,"line":1015},[199,14339,9426],{"class":205},[199,14341,4117],{"class":1086},[199,14343,9415],{"class":1086},[199,14345,14311],{"class":205},[199,14347,4117],{"class":1086},[199,14349,14332],{"class":205},[199,14351,14352],{"class":1454}," \u002F\u002F第二次这个数据不再保留\n",[199,14354,14355,14357,14359,14361],{"class":201,"line":1031},[199,14356,5217],{"class":878},[199,14358,1537],{"class":205},[199,14360,5222],{"class":898},[199,14362,5623],{"class":205},[199,14364,14365,14367,14369],{"class":201,"line":1043},[199,14366,6989],{"class":1086},[199,14368,1621],{"class":1018},[199,14370,1028],{"class":205},[199,14372,14373],{"class":201,"line":1049},[199,14374,671],{"class":205},[31,14376,14377],{},"输出结果：",[31,14379,14380],{},[55,14381],{"alt":14382,"src":14383},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[31,14385,14386],{},"总结：不要返回局部变量的地址",[24,14388,14389],{"start":36},[27,14390,14391],{},"堆区",[176,14393,14394,14397],{},[27,14395,14396],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[27,14398,14399],{},"在c++中主要利用new在堆区开辟内存",[190,14401,14403],{"className":3086,"code":14402,"language":3088,"meta":57,"style":57},"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",[196,14404,14405,14420,14424,14429,14450,14457,14461,14469,14473,14478,14492,14504],{"__ignoreMap":57},[199,14406,14407,14409,14412,14415,14417],{"class":201,"line":202},[199,14408,3100],{"class":1086},[199,14410,14411],{"class":1086},"  *",[199,14413,14414],{"class":878},"func",[199,14416,5340],{"class":205},[199,14418,14419],{"class":1454},"  \u002F\u002F函数返回指针\n",[199,14421,14422],{"class":201,"line":36},[199,14423,4485],{"class":205},[199,14425,14426],{"class":201,"line":73},[199,14427,14428],{"class":1454},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[199,14430,14431,14433,14435,14437,14439,14442,14444,14446,14448],{"class":201,"line":333},[199,14432,7045],{"class":1086},[199,14434,9415],{"class":1086},[199,14436,31],{"class":205},[199,14438,895],{"class":1086},[199,14440,14441],{"class":1086}," new",[199,14443,5296],{"class":1086},[199,14445,1537],{"class":205},[199,14447,3528],{"class":1018},[199,14449,5623],{"class":205},[199,14451,14452,14454],{"class":201,"line":227},[199,14453,7279],{"class":1086},[199,14455,14456],{"class":205}," p;\n",[199,14458,14459],{"class":201,"line":238},[199,14460,671],{"class":205},[199,14462,14463,14465,14467],{"class":201,"line":252},[199,14464,3100],{"class":1086},[199,14466,4889],{"class":878},[199,14468,4892],{"class":205},[199,14470,14471],{"class":201,"line":388},[199,14472,4485],{"class":205},[199,14474,14475],{"class":201,"line":415},[199,14476,14477],{"class":1454},"    \u002F\u002F在堆区开辟数据\n",[199,14479,14480,14482,14484,14486,14488,14490],{"class":201,"line":426},[199,14481,4901],{"class":1086},[199,14483,9415],{"class":1086},[199,14485,31],{"class":205},[199,14487,895],{"class":1086},[199,14489,14414],{"class":878},[199,14491,8533],{"class":205},[199,14493,14494,14496,14498,14500,14502],{"class":201,"line":1015},[199,14495,4490],{"class":205},[199,14497,9316],{"class":1086},[199,14499,31],{"class":205},[199,14501,4117],{"class":1086},[199,14503,4139],{"class":205},[199,14505,14506],{"class":201,"line":1031},[199,14507,671],{"class":205},[31,14509,14510],{},"图片展示：",[31,14512,14513],{},[55,14514],{"alt":14382,"src":14515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[31,14517,14518],{},"堆区内存由程序员管生死！！！",[24,14520,14521],{"start":73},[27,14522,14523],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[31,14525,14526],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[31,14528,14529,14530],{},"​语法：",[196,14531,14532],{}," new 数据类型",[31,14534,14535],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[190,14537,14539],{"className":3086,"code":14538,"language":3088,"meta":57,"style":57},"\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",[196,14540,14541,14546,14556,14560,14565,14570,14592,14596,14604,14608,14622,14634,14646,14658,14663,14668,14679,14683,14688,14696,14700,14705,14727,14753,14757,14775,14779,14805,14809,14821,14825,14830,14835,14843,14847,14851,14859,14863,14869,14875],{"__ignoreMap":57},[199,14542,14543],{"class":201,"line":202},[199,14544,14545],{"class":1454},"\u002F\u002F1.new的基本语法\n",[199,14547,14548,14550,14552,14554],{"class":201,"line":36},[199,14549,3100],{"class":1086},[199,14551,9415],{"class":1086},[199,14553,14414],{"class":878},[199,14555,4892],{"class":205},[199,14557,14558],{"class":201,"line":73},[199,14559,4485],{"class":205},[199,14561,14562],{"class":201,"line":333},[199,14563,14564],{"class":1454},"    \u002F\u002F在堆区创建整型数据\n",[199,14566,14567],{"class":201,"line":227},[199,14568,14569],{"class":1454},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[199,14571,14572,14574,14576,14578,14581,14583,14585,14587,14589],{"class":201,"line":238},[199,14573,4901],{"class":1086},[199,14575,9415],{"class":1086},[199,14577,31],{"class":205},[199,14579,14580],{"class":1086},"=new",[199,14582,5296],{"class":1086},[199,14584,1537],{"class":205},[199,14586,3528],{"class":1018},[199,14588,8863],{"class":205},[199,14590,14591],{"class":1454},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[199,14593,14594],{"class":201,"line":252},[199,14595,671],{"class":205},[199,14597,14598,14600,14602],{"class":201,"line":388},[199,14599,8261],{"class":1086},[199,14601,8485],{"class":878},[199,14603,4892],{"class":205},[199,14605,14606],{"class":201,"line":415},[199,14607,4485],{"class":205},[199,14609,14610,14612,14614,14616,14618,14620],{"class":201,"line":426},[199,14611,4901],{"class":1086},[199,14613,9415],{"class":1086},[199,14615,31],{"class":205},[199,14617,895],{"class":1086},[199,14619,14414],{"class":878},[199,14621,8533],{"class":205},[199,14623,14624,14626,14628,14630,14632],{"class":201,"line":1015},[199,14625,4490],{"class":205},[199,14627,9316],{"class":1086},[199,14629,31],{"class":205},[199,14631,4117],{"class":1086},[199,14633,4139],{"class":205},[199,14635,14636,14638,14640,14642,14644],{"class":201,"line":1031},[199,14637,4490],{"class":205},[199,14639,9316],{"class":1086},[199,14641,31],{"class":205},[199,14643,4117],{"class":1086},[199,14645,4139],{"class":205},[199,14647,14648,14650,14652,14654,14656],{"class":201,"line":1043},[199,14649,4490],{"class":205},[199,14651,9316],{"class":1086},[199,14653,31],{"class":205},[199,14655,4117],{"class":1086},[199,14657,4139],{"class":205},[199,14659,14660],{"class":201,"line":1049},[199,14661,14662],{"class":1454},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[199,14664,14665],{"class":201,"line":1054},[199,14666,14667],{"class":1454},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[199,14669,14670,14673,14676],{"class":201,"line":1062},[199,14671,14672],{"class":1086},"    delete",[199,14674,14675],{"class":205}," p;",[199,14677,14678],{"class":1454},"\u002F\u002F删除这块地址\n",[199,14680,14681],{"class":201,"line":1075},[199,14682,671],{"class":205},[199,14684,14685],{"class":201,"line":1092},[199,14686,14687],{"class":1454},"\u002F\u002F2.在堆区利用new开辟数组\n",[199,14689,14690,14692,14694],{"class":201,"line":1107},[199,14691,8261],{"class":1086},[199,14693,8554],{"class":878},[199,14695,4892],{"class":205},[199,14697,14698],{"class":201,"line":1128},[199,14699,4485],{"class":205},[199,14701,14702],{"class":201,"line":1146},[199,14703,14704],{"class":1454},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[199,14706,14707,14709,14711,14713,14715,14717,14719,14721,14724],{"class":201,"line":1163},[199,14708,4901],{"class":1086},[199,14710,9415],{"class":1086},[199,14712,1659],{"class":205},[199,14714,14580],{"class":1086},[199,14716,5296],{"class":1086},[199,14718,1662],{"class":205},[199,14720,3528],{"class":1018},[199,14722,14723],{"class":205},"];",[199,14725,14726],{"class":1454},"\u002F\u002F10代表数组有10个元素\n",[199,14728,14729,14731,14733,14735,14737,14739,14741,14743,14745,14747,14749,14751],{"class":201,"line":1176},[199,14730,1937],{"class":1086},[199,14732,1484],{"class":205},[199,14734,3100],{"class":1086},[199,14736,5936],{"class":205},[199,14738,895],{"class":1086},[199,14740,1025],{"class":1018},[199,14742,5943],{"class":205},[199,14744,887],{"class":1086},[199,14746,3528],{"class":1018},[199,14748,5943],{"class":205},[199,14750,1510],{"class":1086},[199,14752,1594],{"class":205},[199,14754,14755],{"class":201,"line":1189},[199,14756,4946],{"class":205},[199,14758,14759,14762,14764,14766,14768,14770,14772],{"class":201,"line":1202},[199,14760,14761],{"class":205},"        arr[i]",[199,14763,895],{"class":1086},[199,14765,1548],{"class":205},[199,14767,2028],{"class":1086},[199,14769,3396],{"class":1018},[199,14771,3149],{"class":205},[199,14773,14774],{"class":1454},"\u002F\u002F给10个元素赋值100～109\n",[199,14776,14777],{"class":201,"line":1207},[199,14778,2097],{"class":205},[199,14780,14781,14783,14785,14787,14789,14791,14793,14795,14797,14799,14801,14803],{"class":201,"line":1212},[199,14782,1937],{"class":1086},[199,14784,1484],{"class":205},[199,14786,3100],{"class":1086},[199,14788,5936],{"class":205},[199,14790,895],{"class":1086},[199,14792,1025],{"class":1018},[199,14794,5943],{"class":205},[199,14796,887],{"class":1086},[199,14798,3528],{"class":1018},[199,14800,5943],{"class":205},[199,14802,1510],{"class":1086},[199,14804,1594],{"class":205},[199,14806,14807],{"class":201,"line":1225},[199,14808,4946],{"class":205},[199,14810,14811,14813,14815,14817,14819],{"class":201,"line":1236},[199,14812,6352],{"class":205},[199,14814,4117],{"class":1086},[199,14816,7252],{"class":205},[199,14818,4117],{"class":1086},[199,14820,4139],{"class":205},[199,14822,14823],{"class":201,"line":1249},[199,14824,2097],{"class":205},[199,14826,14827],{"class":201,"line":1262},[199,14828,14829],{"class":1454},"    \u002F\u002F释放堆区数组\n",[199,14831,14832],{"class":201,"line":1275},[199,14833,14834],{"class":1454},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[199,14836,14837,14840],{"class":201,"line":1287},[199,14838,14839],{"class":1086},"    delete[]",[199,14841,14842],{"class":205}," arr;\n",[199,14844,14845],{"class":201,"line":1292},[199,14846,671],{"class":205},[199,14848,14849],{"class":201,"line":1297},[199,14850,907],{"emptyLinePlaceholder":906},[199,14852,14853,14855,14857],{"class":201,"line":1310},[199,14854,3100],{"class":1086},[199,14856,4889],{"class":878},[199,14858,4892],{"class":205},[199,14860,14861],{"class":201,"line":1315},[199,14862,4485],{"class":205},[199,14864,14865,14867],{"class":201,"line":1330},[199,14866,8530],{"class":878},[199,14868,8533],{"class":205},[199,14870,14871,14873],{"class":201,"line":1335},[199,14872,8599],{"class":878},[199,14874,8533],{"class":205},[199,14876,14877],{"class":201,"line":1340},[199,14878,671],{"class":205},[1002,14880,14881],{},"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":57,"searchDepth":36,"depth":36,"links":14883},[14884],{"id":13552,"depth":36,"text":13553,"children":14885},[14886,14887],{"id":13584,"depth":73,"text":13585},{"id":14212,"depth":73,"text":14213},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":13544,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14894,"title":14895,"body":14896,"description":57,"extension":3024,"meta":16375,"navigation":906,"path":16376,"seo":16377,"stem":16378,"__hash__":16379},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14897,"toc":16367},[14898,14901,14905,14908,14911,15080,15084,15089,15106,15111,15263,15267,15270,15273,15665,15669,15672,15677,15680,15992,15996,16002,16162,16164,16172,16176,16179,16186,16364],[10,14899,14895],{"id":14900},"_6引用",[14,14902,14904],{"id":14903},"_61引用基本用法","6.1引用基本用法",[31,14906,14907],{},"引用的本质：给变量起别名",[31,14909,14910],{},"语法：数据类型 &别名=原名",[190,14912,14914],{"className":3086,"code":14913,"language":3088,"meta":57,"style":57},"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",[196,14915,14916,14924,14928,14940,14952,14956,14975,14994,14998,15009,15013,15032,15050,15054,15064,15068,15076],{"__ignoreMap":57},[199,14917,14918,14920,14922],{"class":201,"line":202},[199,14919,3100],{"class":1086},[199,14921,4889],{"class":878},[199,14923,13716],{"class":205},[199,14925,14926],{"class":201,"line":36},[199,14927,907],{"emptyLinePlaceholder":906},[199,14929,14930,14932,14934,14936,14938],{"class":201,"line":73},[199,14931,4901],{"class":1086},[199,14933,13732],{"class":205},[199,14935,895],{"class":1086},[199,14937,4954],{"class":1018},[199,14939,1028],{"class":205},[199,14941,14942,14944,14946,14948,14950],{"class":201,"line":333},[199,14943,4901],{"class":1086},[199,14945,13447],{"class":1086},[199,14947,13808],{"class":205},[199,14949,895],{"class":1086},[199,14951,4372],{"class":205},[199,14953,14954],{"class":201,"line":227},[199,14955,907],{"emptyLinePlaceholder":906},[199,14957,14958,14960,14962,14965,14967,14969,14971,14973],{"class":201,"line":238},[199,14959,9426],{"class":205},[199,14961,4117],{"class":1086},[199,14963,14964],{"class":898}," \"a = \"",[199,14966,4384],{"class":1086},[199,14968,13732],{"class":205},[199,14970,4117],{"class":1086},[199,14972,14332],{"class":205},[199,14974,10165],{"class":1454},[199,14976,14977,14979,14981,14984,14986,14988,14990,14992],{"class":201,"line":252},[199,14978,9426],{"class":205},[199,14980,4117],{"class":1086},[199,14982,14983],{"class":898}," \"b = \"",[199,14985,4384],{"class":1086},[199,14987,13745],{"class":205},[199,14989,4117],{"class":1086},[199,14991,14332],{"class":205},[199,14993,10165],{"class":1454},[199,14995,14996],{"class":201,"line":388},[199,14997,907],{"emptyLinePlaceholder":906},[199,14999,15000,15003,15005,15007],{"class":201,"line":415},[199,15001,15002],{"class":205},"    b ",[199,15004,895],{"class":1086},[199,15006,8651],{"class":1018},[199,15008,1028],{"class":205},[199,15010,15011],{"class":201,"line":426},[199,15012,907],{"emptyLinePlaceholder":906},[199,15014,15015,15017,15019,15021,15023,15025,15027,15029],{"class":201,"line":1015},[199,15016,9426],{"class":205},[199,15018,4117],{"class":1086},[199,15020,14964],{"class":898},[199,15022,4384],{"class":1086},[199,15024,13732],{"class":205},[199,15026,4117],{"class":1086},[199,15028,14332],{"class":205},[199,15030,15031],{"class":1454},"\u002F\u002F100\n",[199,15033,15034,15036,15038,15040,15042,15044,15046,15048],{"class":201,"line":1031},[199,15035,9426],{"class":205},[199,15037,4117],{"class":1086},[199,15039,14983],{"class":898},[199,15041,4384],{"class":1086},[199,15043,13745],{"class":205},[199,15045,4117],{"class":1086},[199,15047,14332],{"class":205},[199,15049,15031],{"class":1454},[199,15051,15052],{"class":201,"line":1043},[199,15053,907],{"emptyLinePlaceholder":906},[199,15055,15056,15058,15060,15062],{"class":201,"line":1049},[199,15057,5217],{"class":878},[199,15059,1537],{"class":205},[199,15061,5222],{"class":898},[199,15063,5623],{"class":205},[199,15065,15066],{"class":201,"line":1054},[199,15067,907],{"emptyLinePlaceholder":906},[199,15069,15070,15072,15074],{"class":201,"line":1062},[199,15071,6989],{"class":1086},[199,15073,1621],{"class":1018},[199,15075,1028],{"class":205},[199,15077,15078],{"class":201,"line":1075},[199,15079,671],{"class":205},[14,15081,15083],{"id":15082},"_62引用的注意事项","6.2引用的注意事项",[24,15085,15086],{},[27,15087,15088],{},"引用必须要初始化",[190,15090,15092],{"className":3086,"code":15091,"language":3088,"meta":57,"style":57},"int &b;\u002F\u002F非常错误！\n",[196,15093,15094],{"__ignoreMap":57},[199,15095,15096,15098,15100,15103],{"class":201,"line":202},[199,15097,3100],{"class":1086},[199,15099,13447],{"class":1086},[199,15101,15102],{"class":205},"b;",[199,15104,15105],{"class":1454},"\u002F\u002F非常错误！\n",[24,15107,15108],{"start":36},[27,15109,15110],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[190,15112,15114],{"className":3086,"code":15113,"language":3088,"meta":57,"style":57},"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",[196,15115,15116,15124,15136,15148,15156,15172,15185,15203,15221,15241,15251,15259],{"__ignoreMap":57},[199,15117,15118,15120,15122],{"class":201,"line":202},[199,15119,3100],{"class":1086},[199,15121,4889],{"class":878},[199,15123,13716],{"class":205},[199,15125,15126,15128,15130,15132,15134],{"class":201,"line":36},[199,15127,4901],{"class":1086},[199,15129,13732],{"class":205},[199,15131,895],{"class":1086},[199,15133,4954],{"class":1018},[199,15135,1028],{"class":205},[199,15137,15138,15140,15142,15144,15146],{"class":201,"line":73},[199,15139,4901],{"class":1086},[199,15141,13745],{"class":205},[199,15143,895],{"class":1086},[199,15145,11837],{"class":1018},[199,15147,1028],{"class":205},[199,15149,15150,15153],{"class":201,"line":333},[199,15151,15152],{"class":1454},"    \u002F\u002Fint &c;",[199,15154,15155],{"class":1454}," \u002F\u002F错误，引用必须初始化\n",[199,15157,15158,15160,15162,15164,15166,15169],{"class":201,"line":227},[199,15159,4901],{"class":1086},[199,15161,13447],{"class":1086},[199,15163,5850],{"class":205},[199,15165,895],{"class":1086},[199,15167,15168],{"class":205}," a;",[199,15170,15171],{"class":1454}," \u002F\u002F一旦初始化后，就不可以更改\n",[199,15173,15174,15177,15179,15182],{"class":201,"line":238},[199,15175,15176],{"class":205},"    c ",[199,15178,895],{"class":1086},[199,15180,15181],{"class":205}," b;",[199,15183,15184],{"class":1454}," \u002F\u002F这是赋值操作，不是更改引用\n",[199,15186,15187,15189,15191,15193,15195,15197,15199,15201],{"class":201,"line":252},[199,15188,9426],{"class":205},[199,15190,4117],{"class":1086},[199,15192,14964],{"class":898},[199,15194,4384],{"class":1086},[199,15196,13732],{"class":205},[199,15198,4117],{"class":1086},[199,15200,14332],{"class":205},[199,15202,10150],{"class":1454},[199,15204,15205,15207,15209,15211,15213,15215,15217,15219],{"class":201,"line":388},[199,15206,9426],{"class":205},[199,15208,4117],{"class":1086},[199,15210,14983],{"class":898},[199,15212,4384],{"class":1086},[199,15214,13745],{"class":205},[199,15216,4117],{"class":1086},[199,15218,14332],{"class":205},[199,15220,10150],{"class":1454},[199,15222,15223,15225,15227,15230,15232,15235,15237,15239],{"class":201,"line":415},[199,15224,9426],{"class":205},[199,15226,4117],{"class":1086},[199,15228,15229],{"class":898}," \"c = \"",[199,15231,4384],{"class":1086},[199,15233,15234],{"class":205}," c ",[199,15236,4117],{"class":1086},[199,15238,14332],{"class":205},[199,15240,10150],{"class":1454},[199,15242,15243,15245,15247,15249],{"class":201,"line":426},[199,15244,5217],{"class":878},[199,15246,1537],{"class":205},[199,15248,5222],{"class":898},[199,15250,5623],{"class":205},[199,15252,15253,15255,15257],{"class":201,"line":1015},[199,15254,6989],{"class":1086},[199,15256,1621],{"class":1018},[199,15258,1028],{"class":205},[199,15260,15261],{"class":201,"line":1031},[199,15262,671],{"class":205},[14,15264,15266],{"id":15265},"_63引用做函数参数","6.3引用做函数参数",[31,15268,15269],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[31,15271,15272],{},"优点：可以简化指针修改实参",[190,15274,15276],{"className":3086,"code":15275,"language":3088,"meta":57,"style":57},"\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",[196,15277,15278,15283,15304,15315,15325,15334,15338,15342,15347,15369,15381,15393,15403,15407,15411,15416,15438,15448,15456,15464,15468,15472,15480,15484,15496,15508,15512,15523,15549,15553,15573,15597,15601,15611,15635,15639,15649,15653,15661],{"__ignoreMap":57},[199,15279,15280],{"class":201,"line":202},[199,15281,15282],{"class":1454},"\u002F\u002F1. 值传递\n",[199,15284,15285,15287,15290,15292,15294,15296,15298,15300,15302],{"class":201,"line":36},[199,15286,8261],{"class":1086},[199,15288,15289],{"class":878}," mySwap01",[199,15291,1537],{"class":205},[199,15293,3100],{"class":1086},[199,15295,4338],{"class":8113},[199,15297,1912],{"class":205},[199,15299,3100],{"class":1086},[199,15301,5737],{"class":8113},[199,15303,1513],{"class":205},[199,15305,15306,15308,15311,15313],{"class":201,"line":73},[199,15307,4901],{"class":1086},[199,15309,15310],{"class":205}," temp ",[199,15312,895],{"class":1086},[199,15314,4372],{"class":205},[199,15316,15317,15320,15322],{"class":201,"line":333},[199,15318,15319],{"class":205},"    a ",[199,15321,895],{"class":1086},[199,15323,15324],{"class":205}," b;\n",[199,15326,15327,15329,15331],{"class":201,"line":227},[199,15328,15002],{"class":205},[199,15330,895],{"class":1086},[199,15332,15333],{"class":205}," temp;\n",[199,15335,15336],{"class":201,"line":238},[199,15337,671],{"class":205},[199,15339,15340],{"class":201,"line":252},[199,15341,907],{"emptyLinePlaceholder":906},[199,15343,15344],{"class":201,"line":388},[199,15345,15346],{"class":1454},"\u002F\u002F2. 地址传递\n",[199,15348,15349,15351,15354,15356,15359,15361,15363,15365,15367],{"class":201,"line":415},[199,15350,8261],{"class":1086},[199,15352,15353],{"class":878}," mySwap02",[199,15355,1537],{"class":205},[199,15357,15358],{"class":1086},"int*",[199,15360,4338],{"class":8113},[199,15362,1912],{"class":205},[199,15364,15358],{"class":1086},[199,15366,5737],{"class":8113},[199,15368,1513],{"class":205},[199,15370,15371,15373,15375,15377,15379],{"class":201,"line":426},[199,15372,4901],{"class":1086},[199,15374,15310],{"class":205},[199,15376,895],{"class":1086},[199,15378,9415],{"class":1086},[199,15380,9094],{"class":205},[199,15382,15383,15385,15387,15389,15391],{"class":201,"line":1015},[199,15384,9300],{"class":1086},[199,15386,13782],{"class":205},[199,15388,895],{"class":1086},[199,15390,9415],{"class":1086},[199,15392,8966],{"class":205},[199,15394,15395,15397,15399,15401],{"class":201,"line":1031},[199,15396,9300],{"class":1086},[199,15398,13808],{"class":205},[199,15400,895],{"class":1086},[199,15402,15333],{"class":205},[199,15404,15405],{"class":201,"line":1043},[199,15406,671],{"class":205},[199,15408,15409],{"class":201,"line":1049},[199,15410,907],{"emptyLinePlaceholder":906},[199,15412,15413],{"class":201,"line":1054},[199,15414,15415],{"class":1454},"\u002F\u002F3. 引用传递\n",[199,15417,15418,15420,15423,15425,15428,15430,15432,15434,15436],{"class":201,"line":1062},[199,15419,8261],{"class":1086},[199,15421,15422],{"class":878}," mySwap03",[199,15424,1537],{"class":205},[199,15426,15427],{"class":1086},"int&",[199,15429,4338],{"class":8113},[199,15431,1912],{"class":205},[199,15433,15427],{"class":1086},[199,15435,5737],{"class":8113},[199,15437,1513],{"class":205},[199,15439,15440,15442,15444,15446],{"class":201,"line":1075},[199,15441,4901],{"class":1086},[199,15443,15310],{"class":205},[199,15445,895],{"class":1086},[199,15447,4372],{"class":205},[199,15449,15450,15452,15454],{"class":201,"line":1092},[199,15451,15319],{"class":205},[199,15453,895],{"class":1086},[199,15455,15324],{"class":205},[199,15457,15458,15460,15462],{"class":201,"line":1107},[199,15459,15002],{"class":205},[199,15461,895],{"class":1086},[199,15463,15333],{"class":205},[199,15465,15466],{"class":201,"line":1128},[199,15467,671],{"class":205},[199,15469,15470],{"class":201,"line":1146},[199,15471,907],{"emptyLinePlaceholder":906},[199,15473,15474,15476,15478],{"class":201,"line":1163},[199,15475,3100],{"class":1086},[199,15477,4889],{"class":878},[199,15479,13716],{"class":205},[199,15481,15482],{"class":201,"line":1176},[199,15483,907],{"emptyLinePlaceholder":906},[199,15485,15486,15488,15490,15492,15494],{"class":201,"line":1189},[199,15487,4901],{"class":1086},[199,15489,13732],{"class":205},[199,15491,895],{"class":1086},[199,15493,4954],{"class":1018},[199,15495,1028],{"class":205},[199,15497,15498,15500,15502,15504,15506],{"class":201,"line":1202},[199,15499,4901],{"class":1086},[199,15501,13745],{"class":205},[199,15503,895],{"class":1086},[199,15505,11837],{"class":1018},[199,15507,1028],{"class":205},[199,15509,15510],{"class":201,"line":1207},[199,15511,907],{"emptyLinePlaceholder":906},[199,15513,15514,15517,15520],{"class":201,"line":1212},[199,15515,15516],{"class":878},"    mySwap01",[199,15518,15519],{"class":205},"(a, b);",[199,15521,15522],{"class":1454},"\u002F\u002F值传递，形参不会修饰实参\n",[199,15524,15525,15527,15529,15532,15534,15536,15538,15541,15543,15545,15547],{"class":201,"line":1225},[199,15526,9426],{"class":205},[199,15528,4117],{"class":1086},[199,15530,15531],{"class":898}," \"a:\"",[199,15533,4384],{"class":1086},[199,15535,13732],{"class":205},[199,15537,4117],{"class":1086},[199,15539,15540],{"class":898}," \" b:\"",[199,15542,4384],{"class":1086},[199,15544,13745],{"class":205},[199,15546,4117],{"class":1086},[199,15548,11727],{"class":205},[199,15550,15551],{"class":201,"line":1236},[199,15552,907],{"emptyLinePlaceholder":906},[199,15554,15555,15558,15560,15562,15565,15567,15570],{"class":201,"line":1249},[199,15556,15557],{"class":878},"    mySwap02",[199,15559,1537],{"class":205},[199,15561,3437],{"class":1086},[199,15563,15564],{"class":205},"a, ",[199,15566,3437],{"class":1086},[199,15568,15569],{"class":205},"b);",[199,15571,15572],{"class":1454},"\u002F\u002F地址传递，形参会修饰实参\n",[199,15574,15575,15577,15579,15581,15583,15585,15587,15589,15591,15593,15595],{"class":201,"line":1262},[199,15576,9426],{"class":205},[199,15578,4117],{"class":1086},[199,15580,15531],{"class":898},[199,15582,4384],{"class":1086},[199,15584,13732],{"class":205},[199,15586,4117],{"class":1086},[199,15588,15540],{"class":898},[199,15590,4384],{"class":1086},[199,15592,13745],{"class":205},[199,15594,4117],{"class":1086},[199,15596,11727],{"class":205},[199,15598,15599],{"class":201,"line":1275},[199,15600,907],{"emptyLinePlaceholder":906},[199,15602,15603,15606,15608],{"class":201,"line":1287},[199,15604,15605],{"class":878},"    mySwap03",[199,15607,15519],{"class":205},[199,15609,15610],{"class":1454},"\u002F\u002F引用传递，形参会修饰实参\n",[199,15612,15613,15615,15617,15619,15621,15623,15625,15627,15629,15631,15633],{"class":201,"line":1292},[199,15614,9426],{"class":205},[199,15616,4117],{"class":1086},[199,15618,15531],{"class":898},[199,15620,4384],{"class":1086},[199,15622,13732],{"class":205},[199,15624,4117],{"class":1086},[199,15626,15540],{"class":898},[199,15628,4384],{"class":1086},[199,15630,13745],{"class":205},[199,15632,4117],{"class":1086},[199,15634,11727],{"class":205},[199,15636,15637],{"class":201,"line":1297},[199,15638,907],{"emptyLinePlaceholder":906},[199,15640,15641,15643,15645,15647],{"class":201,"line":1310},[199,15642,5217],{"class":878},[199,15644,1537],{"class":205},[199,15646,5222],{"class":898},[199,15648,5623],{"class":205},[199,15650,15651],{"class":201,"line":1315},[199,15652,907],{"emptyLinePlaceholder":906},[199,15654,15655,15657,15659],{"class":201,"line":1330},[199,15656,6989],{"class":1086},[199,15658,1621],{"class":1018},[199,15660,1028],{"class":205},[199,15662,15663],{"class":201,"line":1335},[199,15664,671],{"class":205},[14,15666,15668],{"id":15667},"_64引用做函数的返回值","6.4引用做函数的返回值",[31,15670,15671],{},"作用：引用是可以作为函数的返回值存在的",[31,15673,11912,15674],{},[49,15675,15676],{},"不要返回局部变量引用",[31,15678,15679],{},"用法：函数调用作为左值",[190,15681,15683],{"className":12804,"code":15682,"language":12806,"meta":57,"style":57},"\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",[196,15684,15685,15690,15698,15713,15719,15723,15727,15732,15740,15757,15763,15767,15771,15779,15783,15788,15802,15822,15841,15845,15850,15863,15883,15901,15905,15921,15925,15944,15962,15966,15976,15980,15988],{"__ignoreMap":57},[199,15686,15687],{"class":201,"line":202},[199,15688,15689],{"class":1454},"\u002F\u002F返回局部变量引用\n",[199,15691,15692,15694,15696],{"class":201,"line":36},[199,15693,15427],{"class":1086},[199,15695,8485],{"class":878},[199,15697,13716],{"class":205},[199,15699,15700,15702,15704,15706,15708,15710],{"class":201,"line":73},[199,15701,4901],{"class":1086},[199,15703,13732],{"class":205},[199,15705,895],{"class":1086},[199,15707,4954],{"class":1018},[199,15709,3149],{"class":205},[199,15711,15712],{"class":1454}," \u002F\u002F局部变量\n",[199,15714,15715,15717],{"class":201,"line":333},[199,15716,6989],{"class":1086},[199,15718,4372],{"class":205},[199,15720,15721],{"class":201,"line":227},[199,15722,671],{"class":205},[199,15724,15725],{"class":201,"line":238},[199,15726,907],{"emptyLinePlaceholder":906},[199,15728,15729],{"class":201,"line":252},[199,15730,15731],{"class":1454},"\u002F\u002F返回静态变量引用\n",[199,15733,15734,15736,15738],{"class":201,"line":388},[199,15735,15427],{"class":1086},[199,15737,8554],{"class":878},[199,15739,13716],{"class":205},[199,15741,15742,15744,15746,15748,15750,15752,15754],{"class":201,"line":415},[199,15743,13883],{"class":1086},[199,15745,5296],{"class":1086},[199,15747,13732],{"class":205},[199,15749,895],{"class":1086},[199,15751,11837],{"class":1018},[199,15753,3149],{"class":205},[199,15755,15756],{"class":1454},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[199,15758,15759,15761],{"class":201,"line":426},[199,15760,6989],{"class":1086},[199,15762,4372],{"class":205},[199,15764,15765],{"class":201,"line":1015},[199,15766,671],{"class":205},[199,15768,15769],{"class":201,"line":1031},[199,15770,907],{"emptyLinePlaceholder":906},[199,15772,15773,15775,15777],{"class":201,"line":1043},[199,15774,3100],{"class":1086},[199,15776,4889],{"class":878},[199,15778,13716],{"class":205},[199,15780,15781],{"class":201,"line":1049},[199,15782,907],{"emptyLinePlaceholder":906},[199,15784,15785],{"class":201,"line":1054},[199,15786,15787],{"class":1454},"    \u002F\u002F不能返回局部变量的引用\n",[199,15789,15790,15793,15796,15798,15800],{"class":201,"line":1062},[199,15791,15792],{"class":1086},"    int&",[199,15794,15795],{"class":205}," ref ",[199,15797,895],{"class":1086},[199,15799,8485],{"class":878},[199,15801,8533],{"class":205},[199,15803,15804,15806,15808,15811,15813,15815,15817,15819],{"class":201,"line":1075},[199,15805,9426],{"class":205},[199,15807,4117],{"class":1086},[199,15809,15810],{"class":898}," \"ref = \"",[199,15812,4384],{"class":1086},[199,15814,15795],{"class":205},[199,15816,4117],{"class":1086},[199,15818,14332],{"class":205},[199,15820,15821],{"class":1454},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[199,15823,15824,15826,15828,15830,15832,15834,15836,15838],{"class":201,"line":1092},[199,15825,9426],{"class":205},[199,15827,4117],{"class":1086},[199,15829,15810],{"class":898},[199,15831,4384],{"class":1086},[199,15833,15795],{"class":205},[199,15835,4117],{"class":1086},[199,15837,14332],{"class":205},[199,15839,15840],{"class":1454},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[199,15842,15843],{"class":201,"line":1107},[199,15844,907],{"emptyLinePlaceholder":906},[199,15846,15847],{"class":201,"line":1128},[199,15848,15849],{"class":1454},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[199,15851,15852,15854,15857,15859,15861],{"class":201,"line":1146},[199,15853,15792],{"class":1086},[199,15855,15856],{"class":205}," ref2 ",[199,15858,895],{"class":1086},[199,15860,8554],{"class":878},[199,15862,8533],{"class":205},[199,15864,15865,15867,15869,15872,15874,15876,15878,15880],{"class":201,"line":1163},[199,15866,9426],{"class":205},[199,15868,4117],{"class":1086},[199,15870,15871],{"class":898}," \"ref2 = \"",[199,15873,4384],{"class":1086},[199,15875,15856],{"class":205},[199,15877,4117],{"class":1086},[199,15879,14332],{"class":205},[199,15881,15882],{"class":1454}," \u002F\u002F20\n",[199,15884,15885,15887,15889,15891,15893,15895,15897,15899],{"class":201,"line":1176},[199,15886,9426],{"class":205},[199,15888,4117],{"class":1086},[199,15890,15871],{"class":898},[199,15892,4384],{"class":1086},[199,15894,15856],{"class":205},[199,15896,4117],{"class":1086},[199,15898,14332],{"class":205},[199,15900,15882],{"class":1454},[199,15902,15903],{"class":201,"line":1189},[199,15904,907],{"emptyLinePlaceholder":906},[199,15906,15907,15909,15912,15914,15916,15918],{"class":201,"line":1202},[199,15908,8599],{"class":878},[199,15910,15911],{"class":205},"() ",[199,15913,895],{"class":1086},[199,15915,5903],{"class":1018},[199,15917,3149],{"class":205},[199,15919,15920],{"class":1454},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[199,15922,15923],{"class":201,"line":1207},[199,15924,907],{"emptyLinePlaceholder":906},[199,15926,15927,15929,15931,15933,15935,15937,15939,15941],{"class":201,"line":1212},[199,15928,9426],{"class":205},[199,15930,4117],{"class":1086},[199,15932,15871],{"class":898},[199,15934,4384],{"class":1086},[199,15936,15856],{"class":205},[199,15938,4117],{"class":1086},[199,15940,14332],{"class":205},[199,15942,15943],{"class":1454}," \u002F\u002F1000\n",[199,15945,15946,15948,15950,15952,15954,15956,15958,15960],{"class":201,"line":1225},[199,15947,9426],{"class":205},[199,15949,4117],{"class":1086},[199,15951,15871],{"class":898},[199,15953,4384],{"class":1086},[199,15955,15856],{"class":205},[199,15957,4117],{"class":1086},[199,15959,14332],{"class":205},[199,15961,15943],{"class":1454},[199,15963,15964],{"class":201,"line":1236},[199,15965,907],{"emptyLinePlaceholder":906},[199,15967,15968,15970,15972,15974],{"class":201,"line":1249},[199,15969,5217],{"class":878},[199,15971,1537],{"class":205},[199,15973,5222],{"class":898},[199,15975,5623],{"class":205},[199,15977,15978],{"class":201,"line":1262},[199,15979,907],{"emptyLinePlaceholder":906},[199,15981,15982,15984,15986],{"class":201,"line":1275},[199,15983,6989],{"class":1086},[199,15985,1621],{"class":1018},[199,15987,1028],{"class":205},[199,15989,15990],{"class":201,"line":1287},[199,15991,671],{"class":205},[14,15993,15995],{"id":15994},"_65引用的本质","6.5引用的本质",[31,15997,15998,15999],{},"本质：",[49,16000,16001],{},"引用的本质在c++内部实现是一个指针常量.",[190,16003,16005],{"className":3086,"code":16004,"language":3088,"meta":57,"style":57},"\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",[196,16006,16007,16012,16028,16042,16046,16055,16067,16072,16077,16088,16101,16105,16121,16138,16142,16150,16158],{"__ignoreMap":57},[199,16008,16009],{"class":201,"line":202},[199,16010,16011],{"class":1454},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[199,16013,16014,16016,16018,16020,16022,16025],{"class":201,"line":36},[199,16015,8261],{"class":1086},[199,16017,14248],{"class":878},[199,16019,1537],{"class":205},[199,16021,15427],{"class":1086},[199,16023,16024],{"class":8113}," ref",[199,16026,16027],{"class":205},"){\n",[199,16029,16030,16033,16035,16037,16039],{"class":201,"line":73},[199,16031,16032],{"class":205},"    ref ",[199,16034,895],{"class":1086},[199,16036,8651],{"class":1018},[199,16038,3149],{"class":205},[199,16040,16041],{"class":1454}," \u002F\u002F ref是引用，转换为*ref = 100\n",[199,16043,16044],{"class":201,"line":333},[199,16045,671],{"class":205},[199,16047,16048,16050,16052],{"class":201,"line":227},[199,16049,3100],{"class":1086},[199,16051,4889],{"class":878},[199,16053,16054],{"class":205},"(){\n",[199,16056,16057,16059,16061,16063,16065],{"class":201,"line":238},[199,16058,4901],{"class":1086},[199,16060,13732],{"class":205},[199,16062,895],{"class":1086},[199,16064,4954],{"class":1018},[199,16066,1028],{"class":205},[199,16068,16069],{"class":201,"line":252},[199,16070,16071],{"class":205},"    \n",[199,16073,16074],{"class":201,"line":388},[199,16075,16076],{"class":1454},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[199,16078,16079,16081,16083,16085],{"class":201,"line":415},[199,16080,15792],{"class":1086},[199,16082,15795],{"class":205},[199,16084,895],{"class":1086},[199,16086,16087],{"class":205}," a; \n",[199,16089,16090,16092,16094,16096,16098],{"class":201,"line":426},[199,16091,16032],{"class":205},[199,16093,895],{"class":1086},[199,16095,11837],{"class":1018},[199,16097,3149],{"class":205},[199,16099,16100],{"class":1454}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[199,16102,16103],{"class":201,"line":1015},[199,16104,16071],{"class":205},[199,16106,16107,16109,16111,16113,16115,16117,16119],{"class":201,"line":1031},[199,16108,9426],{"class":205},[199,16110,4117],{"class":1086},[199,16112,15531],{"class":898},[199,16114,4384],{"class":1086},[199,16116,13732],{"class":205},[199,16118,4117],{"class":1086},[199,16120,11727],{"class":205},[199,16122,16123,16125,16127,16130,16132,16134,16136],{"class":201,"line":1043},[199,16124,9426],{"class":205},[199,16126,4117],{"class":1086},[199,16128,16129],{"class":898}," \"ref:\"",[199,16131,4384],{"class":1086},[199,16133,15795],{"class":205},[199,16135,4117],{"class":1086},[199,16137,11727],{"class":205},[199,16139,16140],{"class":201,"line":1049},[199,16141,16071],{"class":205},[199,16143,16144,16147],{"class":201,"line":1054},[199,16145,16146],{"class":878},"    func",[199,16148,16149],{"class":205},"(a);\n",[199,16151,16152,16154,16156],{"class":201,"line":1062},[199,16153,6989],{"class":1086},[199,16155,1621],{"class":1018},[199,16157,1028],{"class":205},[199,16159,16160],{"class":201,"line":1075},[199,16161,671],{"class":205},[31,16163,14195],{},[24,16165,16166,16169],{},[27,16167,16168],{},"引用的本质，就是一个指针常量",[27,16170,16171],{},"引用一旦初始化，就不可以发生改变",[14,16173,16175],{"id":16174},"_66常量引用","6.6常量引用",[31,16177,16178],{},"作用：常量引用主要用来修饰形参",[31,16180,16181,16182,16185],{},"在函数形参列表中，可以加",[49,16183,16184],{},"const修饰形参","，防止形参改变实参",[190,16187,16189],{"className":3086,"code":16188,"language":3088,"meta":57,"style":57},"\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",[196,16190,16191,16196,16201,16220,16225,16238,16242,16246,16254,16258,16263,16268,16282,16286,16294,16306,16310,16315,16327,16334,16338,16348,16352,16360],{"__ignoreMap":57},[199,16192,16193],{"class":201,"line":202},[199,16194,16195],{"class":1454},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[199,16197,16198],{"class":201,"line":36},[199,16199,16200],{"class":1454},"\u002F\u002F加上const就不能修改实参的\n",[199,16202,16203,16205,16208,16210,16212,16215,16218],{"class":201,"line":73},[199,16204,8261],{"class":1086},[199,16206,16207],{"class":878}," showValue",[199,16209,1537],{"class":205},[199,16211,9689],{"class":1086},[199,16213,16214],{"class":1086}," int&",[199,16216,16217],{"class":8113}," v",[199,16219,1513],{"class":205},[199,16221,16222],{"class":201,"line":333},[199,16223,16224],{"class":1454},"    \u002F\u002Fv += 100;\n",[199,16226,16227,16229,16231,16234,16236],{"class":201,"line":227},[199,16228,9426],{"class":205},[199,16230,4117],{"class":1086},[199,16232,16233],{"class":205}," v ",[199,16235,4117],{"class":1086},[199,16237,11727],{"class":205},[199,16239,16240],{"class":201,"line":238},[199,16241,671],{"class":205},[199,16243,16244],{"class":201,"line":252},[199,16245,907],{"emptyLinePlaceholder":906},[199,16247,16248,16250,16252],{"class":201,"line":388},[199,16249,3100],{"class":1086},[199,16251,4889],{"class":878},[199,16253,13716],{"class":205},[199,16255,16256],{"class":201,"line":415},[199,16257,907],{"emptyLinePlaceholder":906},[199,16259,16260],{"class":201,"line":426},[199,16261,16262],{"class":1454},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[199,16264,16265],{"class":201,"line":1015},[199,16266,16267],{"class":1454},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[199,16269,16270,16272,16274,16276,16278,16280],{"class":201,"line":1031},[199,16271,14084],{"class":1086},[199,16273,16214],{"class":1086},[199,16275,15795],{"class":205},[199,16277,895],{"class":1086},[199,16279,4954],{"class":1018},[199,16281,1028],{"class":205},[199,16283,16284],{"class":201,"line":1043},[199,16285,907],{"emptyLinePlaceholder":906},[199,16287,16288,16291],{"class":201,"line":1049},[199,16289,16290],{"class":1454},"    \u002F\u002Fref = 100;",[199,16292,16293],{"class":1454},"  \u002F\u002F加入const后不可以修改变量\n",[199,16295,16296,16298,16300,16302,16304],{"class":201,"line":1054},[199,16297,9426],{"class":205},[199,16299,4117],{"class":1086},[199,16301,15795],{"class":205},[199,16303,4117],{"class":1086},[199,16305,11727],{"class":205},[199,16307,16308],{"class":201,"line":1062},[199,16309,907],{"emptyLinePlaceholder":906},[199,16311,16312],{"class":201,"line":1075},[199,16313,16314],{"class":1454},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[199,16316,16317,16319,16321,16323,16325],{"class":201,"line":1092},[199,16318,4901],{"class":1086},[199,16320,13732],{"class":205},[199,16322,895],{"class":1086},[199,16324,4954],{"class":1018},[199,16326,1028],{"class":205},[199,16328,16329,16332],{"class":201,"line":1107},[199,16330,16331],{"class":878},"    showValue",[199,16333,16149],{"class":205},[199,16335,16336],{"class":201,"line":1128},[199,16337,907],{"emptyLinePlaceholder":906},[199,16339,16340,16342,16344,16346],{"class":201,"line":1146},[199,16341,5217],{"class":878},[199,16343,1537],{"class":205},[199,16345,5222],{"class":898},[199,16347,5623],{"class":205},[199,16349,16350],{"class":201,"line":1163},[199,16351,907],{"emptyLinePlaceholder":906},[199,16353,16354,16356,16358],{"class":201,"line":1176},[199,16355,6989],{"class":1086},[199,16357,1621],{"class":1018},[199,16359,1028],{"class":205},[199,16361,16362],{"class":201,"line":1189},[199,16363,671],{"class":205},[1002,16365,16366],{},"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":57,"searchDepth":36,"depth":36,"links":16368},[16369,16370,16371,16372,16373,16374],{"id":14903,"depth":36,"text":14904},{"id":15082,"depth":36,"text":15083},{"id":15265,"depth":36,"text":15266},{"id":15667,"depth":36,"text":15668},{"id":15994,"depth":36,"text":15995},{"id":16174,"depth":36,"text":16175},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14895,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":16381,"title":16382,"body":16383,"description":57,"extension":3024,"meta":17464,"navigation":906,"path":17465,"seo":17466,"stem":17467,"__hash__":17468},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":16384,"toc":17456},[16385,16388,16392,16395,16400,16632,16634,16645,16649,16652,16660,16764,16767,16771,16774,16778,16781,16786,16808,16814,17141,17144,17148,17156,17453],[10,16386,16382],{"id":16387},"_7函数高级部分",[14,16389,16391],{"id":16390},"_71函数默认参数","7.1函数默认参数",[31,16393,16394],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[31,16396,8078,16397],{},[196,16398,16399],{}," 返回值类型  函数名 （参数= 默认值）{}",[190,16401,16403],{"className":3086,"code":16402,"language":3088,"meta":57,"style":57},"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",[196,16404,16405,16440,16455,16459,16463,16468,16473,16502,16522,16532,16536,16540,16548,16552,16580,16602,16606,16616,16620,16628],{"__ignoreMap":57},[199,16406,16407,16409,16411,16413,16415,16417,16419,16421,16423,16426,16428,16430,16432,16434,16436,16438],{"class":201,"line":202},[199,16408,3100],{"class":1086},[199,16410,14248],{"class":878},[199,16412,1537],{"class":205},[199,16414,3100],{"class":1086},[199,16416,4338],{"class":8113},[199,16418,1912],{"class":205},[199,16420,3100],{"class":1086},[199,16422,5737],{"class":8113},[199,16424,16425],{"class":1086}," =",[199,16427,4954],{"class":1018},[199,16429,1912],{"class":205},[199,16431,3100],{"class":1086},[199,16433,5753],{"class":8113},[199,16435,16425],{"class":1086},[199,16437,4954],{"class":1018},[199,16439,1513],{"class":205},[199,16441,16442,16444,16446,16448,16450,16452],{"class":201,"line":36},[199,16443,6989],{"class":1086},[199,16445,13732],{"class":205},[199,16447,2028],{"class":1086},[199,16449,13745],{"class":205},[199,16451,2028],{"class":1086},[199,16453,16454],{"class":205}," c;\n",[199,16456,16457],{"class":201,"line":73},[199,16458,671],{"class":205},[199,16460,16461],{"class":201,"line":333},[199,16462,907],{"emptyLinePlaceholder":906},[199,16464,16465],{"class":201,"line":227},[199,16466,16467],{"class":1454},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[199,16469,16470],{"class":201,"line":238},[199,16471,16472],{"class":1454},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[199,16474,16475,16477,16480,16482,16484,16486,16488,16490,16492,16494,16496,16498,16500],{"class":201,"line":252},[199,16476,3100],{"class":1086},[199,16478,16479],{"class":878}," func2",[199,16481,1537],{"class":205},[199,16483,3100],{"class":1086},[199,16485,4338],{"class":8113},[199,16487,16425],{"class":1086},[199,16489,4954],{"class":1018},[199,16491,1912],{"class":205},[199,16493,3100],{"class":1086},[199,16495,5737],{"class":8113},[199,16497,16425],{"class":1086},[199,16499,4954],{"class":1018},[199,16501,5623],{"class":205},[199,16503,16504,16506,16508,16510,16512,16514,16516,16518,16520],{"class":201,"line":388},[199,16505,3100],{"class":1086},[199,16507,16479],{"class":878},[199,16509,1537],{"class":205},[199,16511,3100],{"class":1086},[199,16513,4338],{"class":8113},[199,16515,1912],{"class":205},[199,16517,3100],{"class":1086},[199,16519,5737],{"class":8113},[199,16521,1513],{"class":205},[199,16523,16524,16526,16528,16530],{"class":201,"line":415},[199,16525,6989],{"class":1086},[199,16527,13732],{"class":205},[199,16529,2028],{"class":1086},[199,16531,15324],{"class":205},[199,16533,16534],{"class":201,"line":426},[199,16535,671],{"class":205},[199,16537,16538],{"class":201,"line":1015},[199,16539,907],{"emptyLinePlaceholder":906},[199,16541,16542,16544,16546],{"class":201,"line":1031},[199,16543,3100],{"class":1086},[199,16545,4889],{"class":878},[199,16547,13716],{"class":205},[199,16549,16550],{"class":201,"line":1043},[199,16551,907],{"emptyLinePlaceholder":906},[199,16553,16554,16556,16558,16561,16563,16565,16567,16569,16571,16573,16576,16578],{"class":201,"line":1049},[199,16555,9426],{"class":205},[199,16557,4117],{"class":1086},[199,16559,16560],{"class":898}," \"ret = \"",[199,16562,4384],{"class":1086},[199,16564,14248],{"class":878},[199,16566,1537],{"class":205},[199,16568,3779],{"class":1018},[199,16570,1912],{"class":205},[199,16572,3779],{"class":1018},[199,16574,16575],{"class":205},") ",[199,16577,4117],{"class":1086},[199,16579,11727],{"class":205},[199,16581,16582,16584,16586,16588,16590,16592,16594,16596,16598,16600],{"class":201,"line":1054},[199,16583,9426],{"class":205},[199,16585,4117],{"class":1086},[199,16587,16560],{"class":898},[199,16589,4384],{"class":1086},[199,16591,14248],{"class":878},[199,16593,1537],{"class":205},[199,16595,3396],{"class":1018},[199,16597,16575],{"class":205},[199,16599,4117],{"class":1086},[199,16601,11727],{"class":205},[199,16603,16604],{"class":201,"line":1062},[199,16605,907],{"emptyLinePlaceholder":906},[199,16607,16608,16610,16612,16614],{"class":201,"line":1075},[199,16609,5217],{"class":878},[199,16611,1537],{"class":205},[199,16613,5222],{"class":898},[199,16615,5623],{"class":205},[199,16617,16618],{"class":201,"line":1092},[199,16619,907],{"emptyLinePlaceholder":906},[199,16621,16622,16624,16626],{"class":201,"line":1107},[199,16623,6989],{"class":1086},[199,16625,1621],{"class":1018},[199,16627,1028],{"class":205},[199,16629,16630],{"class":201,"line":1128},[199,16631,671],{"class":205},[31,16633,14195],{},[24,16635,16636,16639,16642],{},[27,16637,16638],{},"我传就用我；没传就用你",[27,16640,16641],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[27,16643,16644],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,16646,16648],{"id":16647},"_72函数的占位参数","7.2函数的占位参数",[31,16650,16651],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[31,16653,16654,16656,16657],{},[49,16655,8078],{}," ",[196,16658,16659],{},"返回值类型 函数名 (数据类型){}",[190,16661,16663],{"className":3086,"code":16662,"language":3088,"meta":57,"style":57},"\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",[196,16664,16665,16670,16688,16701,16705,16713,16717,16734,16738,16748,16752,16760],{"__ignoreMap":57},[199,16666,16667],{"class":201,"line":202},[199,16668,16669],{"class":1454},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[199,16671,16672,16674,16676,16678,16680,16682,16684,16686],{"class":201,"line":36},[199,16673,8261],{"class":1086},[199,16675,14248],{"class":878},[199,16677,1537],{"class":205},[199,16679,3100],{"class":1086},[199,16681,4338],{"class":8113},[199,16683,1912],{"class":205},[199,16685,3100],{"class":1086},[199,16687,1513],{"class":205},[199,16689,16690,16692,16694,16697,16699],{"class":201,"line":73},[199,16691,9426],{"class":205},[199,16693,4117],{"class":1086},[199,16695,16696],{"class":898}," \"this is func\"",[199,16698,4384],{"class":1086},[199,16700,11727],{"class":205},[199,16702,16703],{"class":201,"line":333},[199,16704,671],{"class":205},[199,16706,16707,16709,16711],{"class":201,"line":227},[199,16708,3100],{"class":1086},[199,16710,4889],{"class":878},[199,16712,13716],{"class":205},[199,16714,16715],{"class":201,"line":238},[199,16716,907],{"emptyLinePlaceholder":906},[199,16718,16719,16721,16723,16725,16727,16729,16731],{"class":201,"line":252},[199,16720,16146],{"class":878},[199,16722,1537],{"class":205},[199,16724,3528],{"class":1018},[199,16726,3461],{"class":205},[199,16728,3528],{"class":1018},[199,16730,8863],{"class":205},[199,16732,16733],{"class":1454}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[199,16735,16736],{"class":201,"line":388},[199,16737,907],{"emptyLinePlaceholder":906},[199,16739,16740,16742,16744,16746],{"class":201,"line":415},[199,16741,5217],{"class":878},[199,16743,1537],{"class":205},[199,16745,5222],{"class":898},[199,16747,5623],{"class":205},[199,16749,16750],{"class":201,"line":426},[199,16751,907],{"emptyLinePlaceholder":906},[199,16753,16754,16756,16758],{"class":201,"line":1015},[199,16755,6989],{"class":1086},[199,16757,1621],{"class":1018},[199,16759,1028],{"class":205},[199,16761,16762],{"class":201,"line":1031},[199,16763,671],{"class":205},[31,16765,16766],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,16768,16770],{"id":16769},"_73函数重载","7.3函数重载",[31,16772,16773],{},"意思是函数名是可以相同的",[19,16775,16777],{"id":16776},"_731基本语法","7.3.1基本语法",[31,16779,16780],{},"作用：函数名可以相同，提高复用性",[31,16782,16783],{},[49,16784,16785],{},"函数重载满足条件：",[176,16787,16788,16791,16794],{},[27,16789,16790],{},"同一个作用域下",[27,16792,16793],{},"函数名称相同",[27,16795,16796,16797,16800,16801,16804,16805],{},"函数参数",[49,16798,16799],{},"类型不同","  或者 ",[49,16802,16803],{},"个数不同"," 或者 ",[49,16806,16807],{},"顺序不同",[31,16809,16810,16813],{},[49,16811,16812],{},"注意:","  函数的返回值不可以作为函数重载的条件",[190,16815,16817],{"className":12804,"code":16816,"language":12806,"meta":57,"style":57},"\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",[196,16818,16819,16824,16832,16836,16849,16853,16867,16871,16884,16888,16903,16907,16920,16924,16945,16949,16962,16966,16986,16990,17003,17007,17011,17016,17021,17026,17031,17036,17040,17044,17052,17056,17062,17072,17082,17096,17111,17115,17125,17129,17137],{"__ignoreMap":57},[199,16820,16821],{"class":201,"line":202},[199,16822,16823],{"class":1454},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[199,16825,16826,16828,16830],{"class":201,"line":36},[199,16827,8261],{"class":1086},[199,16829,14248],{"class":878},[199,16831,4892],{"class":205},[199,16833,16834],{"class":201,"line":73},[199,16835,4485],{"class":205},[199,16837,16838,16840,16842,16845,16847],{"class":201,"line":333},[199,16839,9426],{"class":205},[199,16841,4117],{"class":1086},[199,16843,16844],{"class":898}," \"func 的调用！\"",[199,16846,4384],{"class":1086},[199,16848,11727],{"class":205},[199,16850,16851],{"class":201,"line":227},[199,16852,671],{"class":205},[199,16854,16855,16857,16859,16861,16863,16865],{"class":201,"line":238},[199,16856,8261],{"class":1086},[199,16858,14248],{"class":878},[199,16860,1537],{"class":205},[199,16862,3100],{"class":1086},[199,16864,4338],{"class":8113},[199,16866,1594],{"class":205},[199,16868,16869],{"class":201,"line":252},[199,16870,4485],{"class":205},[199,16872,16873,16875,16877,16880,16882],{"class":201,"line":388},[199,16874,9426],{"class":205},[199,16876,4117],{"class":1086},[199,16878,16879],{"class":898}," \"func (int a) 的调用！\"",[199,16881,4384],{"class":1086},[199,16883,11727],{"class":205},[199,16885,16886],{"class":201,"line":415},[199,16887,671],{"class":205},[199,16889,16890,16892,16894,16896,16899,16901],{"class":201,"line":426},[199,16891,8261],{"class":1086},[199,16893,14248],{"class":878},[199,16895,1537],{"class":205},[199,16897,16898],{"class":1086},"double",[199,16900,4338],{"class":8113},[199,16902,1594],{"class":205},[199,16904,16905],{"class":201,"line":1015},[199,16906,4485],{"class":205},[199,16908,16909,16911,16913,16916,16918],{"class":201,"line":1031},[199,16910,9426],{"class":205},[199,16912,4117],{"class":1086},[199,16914,16915],{"class":898}," \"func (double a)的调用！\"",[199,16917,4384],{"class":1086},[199,16919,11727],{"class":205},[199,16921,16922],{"class":201,"line":1043},[199,16923,671],{"class":205},[199,16925,16926,16928,16930,16932,16934,16936,16939,16941,16943],{"class":201,"line":1049},[199,16927,8261],{"class":1086},[199,16929,14248],{"class":878},[199,16931,1537],{"class":205},[199,16933,3100],{"class":1086},[199,16935,4338],{"class":8113},[199,16937,16938],{"class":205}," ,",[199,16940,16898],{"class":1086},[199,16942,5737],{"class":8113},[199,16944,1594],{"class":205},[199,16946,16947],{"class":201,"line":1054},[199,16948,4485],{"class":205},[199,16950,16951,16953,16955,16958,16960],{"class":201,"line":1062},[199,16952,9426],{"class":205},[199,16954,4117],{"class":1086},[199,16956,16957],{"class":898}," \"func (int a ,double b) 的调用！\"",[199,16959,4384],{"class":1086},[199,16961,11727],{"class":205},[199,16963,16964],{"class":201,"line":1075},[199,16965,671],{"class":205},[199,16967,16968,16970,16972,16974,16976,16978,16980,16982,16984],{"class":201,"line":1092},[199,16969,8261],{"class":1086},[199,16971,14248],{"class":878},[199,16973,1537],{"class":205},[199,16975,16898],{"class":1086},[199,16977,4338],{"class":8113},[199,16979,16938],{"class":205},[199,16981,3100],{"class":1086},[199,16983,5737],{"class":8113},[199,16985,1594],{"class":205},[199,16987,16988],{"class":201,"line":1107},[199,16989,4485],{"class":205},[199,16991,16992,16994,16996,16999,17001],{"class":201,"line":1128},[199,16993,9426],{"class":205},[199,16995,4117],{"class":1086},[199,16997,16998],{"class":898}," \"func (double a ,int b)的调用！\"",[199,17000,4384],{"class":1086},[199,17002,11727],{"class":205},[199,17004,17005],{"class":201,"line":1146},[199,17006,671],{"class":205},[199,17008,17009],{"class":201,"line":1163},[199,17010,907],{"emptyLinePlaceholder":906},[199,17012,17013],{"class":201,"line":1176},[199,17014,17015],{"class":1454},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[199,17017,17018],{"class":201,"line":1189},[199,17019,17020],{"class":1454},"\u002F\u002Fint func(double a, int b)\n",[199,17022,17023],{"class":201,"line":1202},[199,17024,17025],{"class":1454},"\u002F\u002F{\n",[199,17027,17028],{"class":201,"line":1207},[199,17029,17030],{"class":1454},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[199,17032,17033],{"class":201,"line":1212},[199,17034,17035],{"class":1454},"\u002F\u002F}\n",[199,17037,17038],{"class":201,"line":1225},[199,17039,907],{"emptyLinePlaceholder":906},[199,17041,17042],{"class":201,"line":1236},[199,17043,907],{"emptyLinePlaceholder":906},[199,17045,17046,17048,17050],{"class":201,"line":1249},[199,17047,3100],{"class":1086},[199,17049,4889],{"class":878},[199,17051,13716],{"class":205},[199,17053,17054],{"class":201,"line":1262},[199,17055,907],{"emptyLinePlaceholder":906},[199,17057,17058,17060],{"class":201,"line":1275},[199,17059,16146],{"class":878},[199,17061,8533],{"class":205},[199,17063,17064,17066,17068,17070],{"class":201,"line":1287},[199,17065,16146],{"class":878},[199,17067,1537],{"class":205},[199,17069,3528],{"class":1018},[199,17071,5623],{"class":205},[199,17073,17074,17076,17078,17080],{"class":201,"line":1292},[199,17075,16146],{"class":878},[199,17077,1537],{"class":205},[199,17079,3143],{"class":1018},[199,17081,5623],{"class":205},[199,17083,17084,17086,17088,17090,17092,17094],{"class":201,"line":1297},[199,17085,16146],{"class":878},[199,17087,1537],{"class":205},[199,17089,3528],{"class":1018},[199,17091,3461],{"class":205},[199,17093,3143],{"class":1018},[199,17095,5623],{"class":205},[199,17097,17098,17100,17102,17104,17107,17109],{"class":201,"line":1310},[199,17099,16146],{"class":878},[199,17101,1537],{"class":205},[199,17103,3143],{"class":1018},[199,17105,17106],{"class":205}," , ",[199,17108,3528],{"class":1018},[199,17110,5623],{"class":205},[199,17112,17113],{"class":201,"line":1315},[199,17114,16071],{"class":205},[199,17116,17117,17119,17121,17123],{"class":201,"line":1330},[199,17118,5217],{"class":878},[199,17120,1537],{"class":205},[199,17122,5222],{"class":898},[199,17124,5623],{"class":205},[199,17126,17127],{"class":201,"line":1335},[199,17128,907],{"emptyLinePlaceholder":906},[199,17130,17131,17133,17135],{"class":201,"line":1340},[199,17132,6989],{"class":1086},[199,17134,1621],{"class":1018},[199,17136,1028],{"class":205},[199,17138,17139],{"class":201,"line":1352},[199,17140,671],{"class":205},[31,17142,17143],{},"重点：函数返回值不可以作为函数重载条件！",[19,17145,17147],{"id":17146},"_732注意事项","7.3.2注意事项",[176,17149,17150,17153],{},[27,17151,17152],{},"引用作为重载条件!!!",[27,17154,17155],{},"函数重载碰到函数默认参数",[190,17157,17159],{"className":3086,"code":17158,"language":3088,"meta":57,"style":57},"\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",[196,17160,17161,17166,17171,17175,17191,17195,17208,17212,17216,17234,17238,17251,17255,17259,17263,17268,17272,17296,17300,17313,17317,17321,17335,17339,17352,17356,17360,17368,17372,17384,17394,17407,17411,17415,17423,17427,17437,17441,17449],{"__ignoreMap":57},[199,17162,17163],{"class":201,"line":202},[199,17164,17165],{"class":1454},"\u002F\u002F函数重载注意事项\n",[199,17167,17168],{"class":201,"line":36},[199,17169,17170],{"class":1454},"\u002F\u002F1、引用作为重载条件\n",[199,17172,17173],{"class":201,"line":73},[199,17174,907],{"emptyLinePlaceholder":906},[199,17176,17177,17179,17181,17183,17185,17187,17189],{"class":201,"line":333},[199,17178,8261],{"class":1086},[199,17180,14248],{"class":878},[199,17182,1537],{"class":205},[199,17184,3100],{"class":1086},[199,17186,13447],{"class":1086},[199,17188,2867],{"class":8113},[199,17190,1594],{"class":205},[199,17192,17193],{"class":201,"line":227},[199,17194,4485],{"class":205},[199,17196,17197,17199,17201,17204,17206],{"class":201,"line":238},[199,17198,9426],{"class":205},[199,17200,4117],{"class":1086},[199,17202,17203],{"class":898}," \"func (int &a) 调用 \"",[199,17205,4384],{"class":1086},[199,17207,11727],{"class":205},[199,17209,17210],{"class":201,"line":252},[199,17211,671],{"class":205},[199,17213,17214],{"class":201,"line":388},[199,17215,907],{"emptyLinePlaceholder":906},[199,17217,17218,17220,17222,17224,17226,17228,17230,17232],{"class":201,"line":415},[199,17219,8261],{"class":1086},[199,17221,14248],{"class":878},[199,17223,1537],{"class":205},[199,17225,9689],{"class":1086},[199,17227,5296],{"class":1086},[199,17229,13447],{"class":1086},[199,17231,2867],{"class":8113},[199,17233,1594],{"class":205},[199,17235,17236],{"class":201,"line":426},[199,17237,4485],{"class":205},[199,17239,17240,17242,17244,17247,17249],{"class":201,"line":1015},[199,17241,9426],{"class":205},[199,17243,4117],{"class":1086},[199,17245,17246],{"class":898}," \"func (const int &a) 调用 \"",[199,17248,4384],{"class":1086},[199,17250,11727],{"class":205},[199,17252,17253],{"class":201,"line":1031},[199,17254,671],{"class":205},[199,17256,17257],{"class":201,"line":1043},[199,17258,907],{"emptyLinePlaceholder":906},[199,17260,17261],{"class":201,"line":1049},[199,17262,907],{"emptyLinePlaceholder":906},[199,17264,17265],{"class":201,"line":1054},[199,17266,17267],{"class":1454},"\u002F\u002F2、函数重载碰到函数默认参数\n",[199,17269,17270],{"class":201,"line":1062},[199,17271,907],{"emptyLinePlaceholder":906},[199,17273,17274,17276,17278,17280,17282,17284,17286,17288,17290,17292,17294],{"class":201,"line":1075},[199,17275,8261],{"class":1086},[199,17277,16479],{"class":878},[199,17279,1537],{"class":205},[199,17281,3100],{"class":1086},[199,17283,4338],{"class":8113},[199,17285,1912],{"class":205},[199,17287,3100],{"class":1086},[199,17289,5737],{"class":8113},[199,17291,16425],{"class":1086},[199,17293,4954],{"class":1018},[199,17295,1594],{"class":205},[199,17297,17298],{"class":201,"line":1092},[199,17299,4485],{"class":205},[199,17301,17302,17304,17306,17309,17311],{"class":201,"line":1107},[199,17303,9426],{"class":205},[199,17305,4117],{"class":1086},[199,17307,17308],{"class":898}," \"func2(int a, int b = 10) 调用\"",[199,17310,4384],{"class":1086},[199,17312,11727],{"class":205},[199,17314,17315],{"class":201,"line":1128},[199,17316,671],{"class":205},[199,17318,17319],{"class":201,"line":1146},[199,17320,907],{"emptyLinePlaceholder":906},[199,17322,17323,17325,17327,17329,17331,17333],{"class":201,"line":1163},[199,17324,8261],{"class":1086},[199,17326,16479],{"class":878},[199,17328,1537],{"class":205},[199,17330,3100],{"class":1086},[199,17332,4338],{"class":8113},[199,17334,1594],{"class":205},[199,17336,17337],{"class":201,"line":1176},[199,17338,4485],{"class":205},[199,17340,17341,17343,17345,17348,17350],{"class":201,"line":1189},[199,17342,9426],{"class":205},[199,17344,4117],{"class":1086},[199,17346,17347],{"class":898}," \"func2(int a) 调用\"",[199,17349,4384],{"class":1086},[199,17351,11727],{"class":205},[199,17353,17354],{"class":201,"line":1202},[199,17355,671],{"class":205},[199,17357,17358],{"class":201,"line":1207},[199,17359,907],{"emptyLinePlaceholder":906},[199,17361,17362,17364,17366],{"class":201,"line":1212},[199,17363,3100],{"class":1086},[199,17365,4889],{"class":878},[199,17367,13716],{"class":205},[199,17369,17370],{"class":201,"line":1225},[199,17371,16071],{"class":205},[199,17373,17374,17376,17378,17380,17382],{"class":201,"line":1236},[199,17375,4901],{"class":1086},[199,17377,13732],{"class":205},[199,17379,895],{"class":1086},[199,17381,4954],{"class":1018},[199,17383,1028],{"class":205},[199,17385,17386,17388,17391],{"class":201,"line":1249},[199,17387,16146],{"class":878},[199,17389,17390],{"class":205},"(a);",[199,17392,17393],{"class":1454}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[199,17395,17396,17398,17400,17402,17404],{"class":201,"line":1262},[199,17397,16146],{"class":878},[199,17399,1537],{"class":205},[199,17401,3528],{"class":1018},[199,17403,8863],{"class":205},[199,17405,17406],{"class":1454},"\u002F\u002F调用有const   10是个常量\n",[199,17408,17409],{"class":201,"line":1275},[199,17410,907],{"emptyLinePlaceholder":906},[199,17412,17413],{"class":201,"line":1287},[199,17414,907],{"emptyLinePlaceholder":906},[199,17416,17417,17420],{"class":201,"line":1292},[199,17418,17419],{"class":1454},"    \u002F\u002Ffunc2(10);",[199,17421,17422],{"class":1454}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[199,17424,17425],{"class":201,"line":1297},[199,17426,907],{"emptyLinePlaceholder":906},[199,17428,17429,17431,17433,17435],{"class":201,"line":1310},[199,17430,5217],{"class":878},[199,17432,1537],{"class":205},[199,17434,5222],{"class":898},[199,17436,5623],{"class":205},[199,17438,17439],{"class":201,"line":1315},[199,17440,907],{"emptyLinePlaceholder":906},[199,17442,17443,17445,17447],{"class":201,"line":1330},[199,17444,6989],{"class":1086},[199,17446,1621],{"class":1018},[199,17448,1028],{"class":205},[199,17450,17451],{"class":201,"line":1335},[199,17452,671],{"class":205},[1002,17454,17455],{},"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":57,"searchDepth":36,"depth":36,"links":17457},[17458,17459,17460],{"id":16390,"depth":36,"text":16391},{"id":16647,"depth":36,"text":16648},{"id":16769,"depth":36,"text":16770,"children":17461},[17462,17463],{"id":16776,"depth":73,"text":16777},{"id":17146,"depth":73,"text":17147},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":16382,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":17470,"title":17471,"body":17472,"description":26209,"extension":3024,"meta":26210,"navigation":906,"path":26211,"seo":26212,"stem":26213,"__hash__":26214},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":17473,"toc":26190},[17474,17477,17483,17490,17494,17497,17500,17503,17507,17511,17514,17517,17525,17530,17533,17540,17545,17704,17707,17959,17962,17965,17968,17973,17976,17979,17990,17995,18231,18235,18245,18248,18256,18403,18407,18410,18413,18417,18861,18865,18873,18881,19780,19787,19792,20420,20423,20426,20429,20548,20551,20638,20641,20767,20770,20864,20867,21220,21224,21232,21236,21243,21246,21249,21260,21266,21271,21283,21291,21311,21319,21336,21522,21525,21529,21532,21535,21538,21541,21544,21547,21550,22010,22016,22020,22023,22034,22621,22624,23113,23117,23120,23123,23126,23129,23132,23140,23536,23540,23543,23546,23993,23996,23999,24004,24007,24012,24015,24019,24022,24024,24030,24033,24339,24349,24390,24394,24397,24399,24432,24435,24742,24744,24759,24762,24785,24794,24800,24803,24807,24810,24813,24818,24829,24834,24842,24846,24976,24979,24982,25157,25162,25374,25378,25381,25495,25500,25739,25743,25747,25750,25753,25758,25863,25866,25869,25872,25876,25987,25990,25993,25998,26050,26053,26056,26061,26107,26110,26115,26183,26185,26188],[10,17475,17471],{"id":17476},"_8类和对象",[31,17478,17479,17480],{},"C++面向对象的三大特性为",[49,17481,17482],{},"封装、继承、多态",[31,17484,17485,17486,17489],{},"C++认为",[49,17487,17488],{},"万事万物都皆为对象","，对象上有其属性和行为",[31,17491,17492],{},[49,17493,2323],{},[31,17495,17496],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[31,17498,17499],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[31,17501,17502],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,17504,17506],{"id":17505},"_81封装","8.1封装",[19,17508,17510],{"id":17509},"_811封装的意义","8.1.1封装的意义",[31,17512,17513],{},"封装是C++面向对象三大特性之一",[31,17515,17516],{},"封装的意义：",[176,17518,17519,17522],{},[27,17520,17521],{},"将属性和行为作为一个整体，表现生活中的事物",[27,17523,17524],{},"将属性和行为加以权限控制",[31,17526,17527],{},[49,17528,17529],{},"封装意义一：",[31,17531,17532],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[31,17534,17535,16656,17537],{},[49,17536,8078],{},[196,17538,17539],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[24,17541,17542],{},[27,17543,17544],{},"**示例1：**设计一个圆类，求圆的周长",[190,17546,17548],{"className":3086,"code":17547,"language":3088,"meta":57,"style":57},"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",[196,17549,17550,17558,17562,17567,17572,17577,17582,17589,17594,17604,17608,17626,17630,17634,17642,17646,17651,17656,17661,17666,17677,17700],{"__ignoreMap":57},[199,17551,17552,17555],{"class":201,"line":202},[199,17553,17554],{"class":1086},"class",[199,17556,17557],{"class":878}," Circle\n",[199,17559,17560],{"class":201,"line":36},[199,17561,4485],{"class":205},[199,17563,17564],{"class":201,"line":73},[199,17565,17566],{"class":1454},"    \u002F\u002F访问权限\n",[199,17568,17569],{"class":201,"line":333},[199,17570,17571],{"class":1454},"    \u002F\u002F公共权限\n",[199,17573,17574],{"class":201,"line":227},[199,17575,17576],{"class":1086},"public:\n",[199,17578,17579],{"class":201,"line":238},[199,17580,17581],{"class":1454},"    \u002F\u002F属性\n",[199,17583,17584,17586],{"class":201,"line":252},[199,17585,4901],{"class":1086},[199,17587,17588],{"class":205}," m_r;\n",[199,17590,17591],{"class":201,"line":388},[199,17592,17593],{"class":1454},"    \u002F\u002F行为\n",[199,17595,17596,17599,17602],{"class":201,"line":415},[199,17597,17598],{"class":1086},"    double",[199,17600,17601],{"class":878}," calculateZC",[199,17603,4892],{"class":205},[199,17605,17606],{"class":201,"line":426},[199,17607,4946],{"class":205},[199,17609,17610,17613,17616,17618,17621,17623],{"class":201,"line":1015},[199,17611,17612],{"class":1086},"        return",[199,17614,17615],{"class":1018}," 2",[199,17617,3537],{"class":1086},[199,17619,17620],{"class":205},"PI",[199,17622,3537],{"class":1086},[199,17624,17625],{"class":205},"m_r;\n",[199,17627,17628],{"class":201,"line":1031},[199,17629,2097],{"class":205},[199,17631,17632],{"class":201,"line":1043},[199,17633,6894],{"class":205},[199,17635,17636,17638,17640],{"class":201,"line":1049},[199,17637,3100],{"class":1086},[199,17639,4889],{"class":878},[199,17641,4892],{"class":205},[199,17643,17644],{"class":201,"line":1054},[199,17645,4485],{"class":205},[199,17647,17648],{"class":201,"line":1062},[199,17649,17650],{"class":1454},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[199,17652,17653],{"class":201,"line":1075},[199,17654,17655],{"class":1454},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[199,17657,17658],{"class":201,"line":1092},[199,17659,17660],{"class":205},"    Circle c1;\n",[199,17662,17663],{"class":201,"line":1107},[199,17664,17665],{"class":1454},"    \u002F\u002F给圆对象 的属性进行赋值\n",[199,17667,17668,17671,17673,17675],{"class":201,"line":1128},[199,17669,17670],{"class":205},"    c1.m_r",[199,17672,895],{"class":1086},[199,17674,3528],{"class":1018},[199,17676,1028],{"class":205},[199,17678,17679,17681,17683,17686,17688,17691,17694,17696,17698],{"class":201,"line":1146},[199,17680,4490],{"class":205},[199,17682,4117],{"class":1086},[199,17684,17685],{"class":898},"\"圆的周长\"",[199,17687,4117],{"class":1086},[199,17689,17690],{"class":205},"c1.",[199,17692,17693],{"class":878},"calculateZC",[199,17695,5340],{"class":205},[199,17697,4117],{"class":1086},[199,17699,4139],{"class":205},[199,17701,17702],{"class":201,"line":1163},[199,17703,671],{"class":205},[31,17705,17706],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[190,17708,17710],{"className":3086,"code":17709,"language":3088,"meta":57,"style":57},"#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",[196,17711,17712,17718,17728,17734,17740,17744,17748,17753,17760,17765,17782,17786,17796,17800,17805,17821,17825,17835,17839,17844,17852,17856,17888,17892,17896,17904,17908,17913,17918,17932,17946,17955],{"__ignoreMap":57},[199,17713,17714,17716],{"class":201,"line":202},[199,17715,4866],{"class":1086},[199,17717,4869],{"class":898},[199,17719,17720,17722,17724,17726],{"class":201,"line":36},[199,17721,4874],{"class":1086},[199,17723,4877],{"class":1086},[199,17725,4880],{"class":878},[199,17727,1028],{"class":205},[199,17729,17730,17732],{"class":201,"line":73},[199,17731,4866],{"class":1086},[199,17733,10646],{"class":898},[199,17735,17736,17738],{"class":201,"line":333},[199,17737,17554],{"class":1086},[199,17739,10659],{"class":878},[199,17741,17742],{"class":201,"line":227},[199,17743,4485],{"class":205},[199,17745,17746],{"class":201,"line":238},[199,17747,17576],{"class":1086},[199,17749,17750],{"class":201,"line":252},[199,17751,17752],{"class":205},"    string m_name;\n",[199,17754,17755,17757],{"class":201,"line":388},[199,17756,4901],{"class":1086},[199,17758,17759],{"class":205}," m_id;\n",[199,17761,17762],{"class":201,"line":415},[199,17763,17764],{"class":1454},"    \u002F\u002F赋值姓名\n",[199,17766,17767,17770,17773,17775,17778,17780],{"class":201,"line":426},[199,17768,17769],{"class":1086},"    void",[199,17771,17772],{"class":878}," setName",[199,17774,1537],{"class":205},[199,17776,17777],{"class":878},"string",[199,17779,967],{"class":8113},[199,17781,1594],{"class":205},[199,17783,17784],{"class":201,"line":1015},[199,17785,4946],{"class":205},[199,17787,17788,17791,17793],{"class":201,"line":1031},[199,17789,17790],{"class":205},"        m_name",[199,17792,895],{"class":1086},[199,17794,17795],{"class":205},"name;\n",[199,17797,17798],{"class":201,"line":1043},[199,17799,2097],{"class":205},[199,17801,17802],{"class":201,"line":1049},[199,17803,17804],{"class":1454},"    \u002F\u002F赋值学号\n",[199,17806,17807,17809,17812,17814,17816,17819],{"class":201,"line":1054},[199,17808,17769],{"class":1086},[199,17810,17811],{"class":878}," setId",[199,17813,1537],{"class":205},[199,17815,3100],{"class":1086},[199,17817,17818],{"class":8113}," id",[199,17820,1594],{"class":205},[199,17822,17823],{"class":201,"line":1062},[199,17824,4946],{"class":205},[199,17826,17827,17830,17832],{"class":201,"line":1075},[199,17828,17829],{"class":205},"        m_id",[199,17831,895],{"class":1086},[199,17833,17834],{"class":205},"id;\n",[199,17836,17837],{"class":201,"line":1092},[199,17838,2097],{"class":205},[199,17840,17841],{"class":201,"line":1107},[199,17842,17843],{"class":1454},"    \u002F\u002F打印学生信息\n",[199,17845,17846,17848,17850],{"class":201,"line":1128},[199,17847,17769],{"class":1086},[199,17849,12497],{"class":878},[199,17851,4892],{"class":205},[199,17853,17854],{"class":201,"line":1146},[199,17855,4946],{"class":205},[199,17857,17858,17860,17862,17865,17867,17870,17872,17874,17876,17879,17881,17884,17886],{"class":201,"line":1163},[199,17859,6352],{"class":205},[199,17861,4117],{"class":1086},[199,17863,17864],{"class":898},"\"姓名：\"",[199,17866,4117],{"class":1086},[199,17868,17869],{"class":205},"m_name",[199,17871,4117],{"class":1086},[199,17873,7257],{"class":898},[199,17875,4117],{"class":1086},[199,17877,17878],{"class":898},"\"学号：\"",[199,17880,4117],{"class":1086},[199,17882,17883],{"class":205},"m_id",[199,17885,4117],{"class":1086},[199,17887,4139],{"class":205},[199,17889,17890],{"class":201,"line":1176},[199,17891,2097],{"class":205},[199,17893,17894],{"class":201,"line":1189},[199,17895,6894],{"class":205},[199,17897,17898,17900,17902],{"class":201,"line":1202},[199,17899,3100],{"class":1086},[199,17901,4889],{"class":878},[199,17903,4892],{"class":205},[199,17905,17906],{"class":201,"line":1207},[199,17907,4485],{"class":205},[199,17909,17910],{"class":201,"line":1212},[199,17911,17912],{"class":1454},"    \u002F\u002F实例化\n",[199,17914,17915],{"class":201,"line":1225},[199,17916,17917],{"class":205},"    Student s1;\n",[199,17919,17920,17923,17926,17928,17930],{"class":201,"line":1236},[199,17921,17922],{"class":205},"    s1.",[199,17924,17925],{"class":878},"setName",[199,17927,1537],{"class":205},[199,17929,10813],{"class":898},[199,17931,5623],{"class":205},[199,17933,17934,17936,17939,17941,17944],{"class":201,"line":1249},[199,17935,17922],{"class":205},[199,17937,17938],{"class":878},"setId",[199,17940,1537],{"class":205},[199,17942,17943],{"class":1018},"123456",[199,17945,5623],{"class":205},[199,17947,17948,17950,17953],{"class":201,"line":1262},[199,17949,17922],{"class":205},[199,17951,17952],{"class":878},"printInfo",[199,17954,8533],{"class":205},[199,17956,17957],{"class":201,"line":1275},[199,17958,671],{"class":205},[31,17960,17961],{},"类中的属性和行为统称为成员",[31,17963,17964],{},"属性：成员属性(成员变量)",[31,17966,17967],{},"方法：成员函数(成员方法)",[31,17969,17970],{},[49,17971,17972],{},"封装意义二：",[31,17974,17975],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[31,17977,17978],{},"访问权限有三种：",[24,17980,17981,17984,17987],{},[27,17982,17983],{},"public        公共权限",[27,17985,17986],{},"protected 保护权限",[27,17988,17989],{},"private      私有权限",[31,17991,17992],{},[49,17993,17994],{},"示例：",[190,17996,17998],{"className":12804,"code":17997,"language":12806,"meta":57,"style":57},"\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",[196,17999,18000,18005,18010,18015,18020,18024,18031,18035,18040,18044,18049,18053,18058,18063,18068,18072,18077,18082,18089,18093,18097,18105,18109,18120,18132,18144,18148,18152,18156,18164,18168,18173,18185,18193,18201,18205,18215,18219,18227],{"__ignoreMap":57},[199,18001,18002],{"class":201,"line":202},[199,18003,18004],{"class":1454},"\u002F\u002F三种权限\n",[199,18006,18007],{"class":201,"line":36},[199,18008,18009],{"class":1454},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[199,18011,18012],{"class":201,"line":73},[199,18013,18014],{"class":1454},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[199,18016,18017],{"class":201,"line":333},[199,18018,18019],{"class":1454},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[199,18021,18022],{"class":201,"line":227},[199,18023,907],{"emptyLinePlaceholder":906},[199,18025,18026,18028],{"class":201,"line":238},[199,18027,17554],{"class":1086},[199,18029,18030],{"class":878}," Person\n",[199,18032,18033],{"class":201,"line":252},[199,18034,4485],{"class":205},[199,18036,18037],{"class":201,"line":388},[199,18038,18039],{"class":1454},"    \u002F\u002F姓名  公共权限\n",[199,18041,18042],{"class":201,"line":415},[199,18043,17576],{"class":1086},[199,18045,18046],{"class":201,"line":426},[199,18047,18048],{"class":205},"    string m_Name;\n",[199,18050,18051],{"class":201,"line":1015},[199,18052,907],{"emptyLinePlaceholder":906},[199,18054,18055],{"class":201,"line":1031},[199,18056,18057],{"class":1454},"    \u002F\u002F汽车  保护权限\n",[199,18059,18060],{"class":201,"line":1043},[199,18061,18062],{"class":1086},"protected:\n",[199,18064,18065],{"class":201,"line":1049},[199,18066,18067],{"class":205},"    string m_Car;\n",[199,18069,18070],{"class":201,"line":1054},[199,18071,907],{"emptyLinePlaceholder":906},[199,18073,18074],{"class":201,"line":1062},[199,18075,18076],{"class":1454},"    \u002F\u002F银行卡密码  私有权限\n",[199,18078,18079],{"class":201,"line":1075},[199,18080,18081],{"class":1086},"private:\n",[199,18083,18084,18086],{"class":201,"line":1092},[199,18085,4901],{"class":1086},[199,18087,18088],{"class":205}," m_Password;\n",[199,18090,18091],{"class":201,"line":1107},[199,18092,907],{"emptyLinePlaceholder":906},[199,18094,18095],{"class":201,"line":1128},[199,18096,17576],{"class":1086},[199,18098,18099,18101,18103],{"class":201,"line":1146},[199,18100,17769],{"class":1086},[199,18102,14248],{"class":878},[199,18104,4892],{"class":205},[199,18106,18107],{"class":201,"line":1163},[199,18108,4946],{"class":205},[199,18110,18111,18114,18116,18118],{"class":201,"line":1176},[199,18112,18113],{"class":205},"        m_Name ",[199,18115,895],{"class":1086},[199,18117,11825],{"class":898},[199,18119,1028],{"class":205},[199,18121,18122,18125,18127,18130],{"class":201,"line":1189},[199,18123,18124],{"class":205},"        m_Car ",[199,18126,895],{"class":1086},[199,18128,18129],{"class":898}," \"拖拉机\"",[199,18131,1028],{"class":205},[199,18133,18134,18137,18139,18142],{"class":201,"line":1202},[199,18135,18136],{"class":205},"        m_Password ",[199,18138,895],{"class":1086},[199,18140,18141],{"class":1018}," 123456",[199,18143,1028],{"class":205},[199,18145,18146],{"class":201,"line":1207},[199,18147,2097],{"class":205},[199,18149,18150],{"class":201,"line":1212},[199,18151,6894],{"class":205},[199,18153,18154],{"class":201,"line":1225},[199,18155,907],{"emptyLinePlaceholder":906},[199,18157,18158,18160,18162],{"class":201,"line":1236},[199,18159,3100],{"class":1086},[199,18161,4889],{"class":878},[199,18163,13716],{"class":205},[199,18165,18166],{"class":201,"line":1249},[199,18167,907],{"emptyLinePlaceholder":906},[199,18169,18170],{"class":201,"line":1262},[199,18171,18172],{"class":205},"    Person p;\n",[199,18174,18175,18178,18180,18183],{"class":201,"line":1275},[199,18176,18177],{"class":205},"    p.m_Name ",[199,18179,895],{"class":1086},[199,18181,18182],{"class":898}," \"李四\"",[199,18184,1028],{"class":205},[199,18186,18187,18190],{"class":201,"line":1287},[199,18188,18189],{"class":1454},"    \u002F\u002Fp.m_Car = \"奔驰\";",[199,18191,18192],{"class":1454},"  \u002F\u002F保护权限类外访问不到\n",[199,18194,18195,18198],{"class":201,"line":1292},[199,18196,18197],{"class":1454},"    \u002F\u002Fp.m_Password = 123;",[199,18199,18200],{"class":1454}," \u002F\u002F私有权限类外访问不到\n",[199,18202,18203],{"class":201,"line":1297},[199,18204,907],{"emptyLinePlaceholder":906},[199,18206,18207,18209,18211,18213],{"class":201,"line":1310},[199,18208,5217],{"class":878},[199,18210,1537],{"class":205},[199,18212,5222],{"class":898},[199,18214,5623],{"class":205},[199,18216,18217],{"class":201,"line":1315},[199,18218,907],{"emptyLinePlaceholder":906},[199,18220,18221,18223,18225],{"class":201,"line":1330},[199,18222,6989],{"class":1086},[199,18224,1621],{"class":1018},[199,18226,1028],{"class":205},[199,18228,18229],{"class":201,"line":1335},[199,18230,671],{"class":205},[19,18232,18234],{"id":18233},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[31,18236,18237,18238,18241,18242],{},"在C++中 struct和class唯一的",[49,18239,18240],{},"区别","就在于 ",[49,18243,18244],{},"默认的访问权限不同",[31,18246,18247],{},"区别：",[176,18249,18250,18253],{},[27,18251,18252],{},"struct 默认权限为公共",[27,18254,18255],{},"class   默认权限为私有",[190,18257,18259],{"className":12804,"code":18258,"language":12806,"meta":57,"style":57},"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",[196,18260,18261,18268,18272,18282,18286,18290,18297,18301,18311,18315,18319,18327,18331,18336,18350,18354,18359,18373,18377,18387,18391,18399],{"__ignoreMap":57},[199,18262,18263,18265],{"class":201,"line":202},[199,18264,17554],{"class":1086},[199,18266,18267],{"class":878}," C1\n",[199,18269,18270],{"class":201,"line":36},[199,18271,4485],{"class":205},[199,18273,18274,18276,18279],{"class":201,"line":73},[199,18275,4901],{"class":1086},[199,18277,18278],{"class":205},"  m_A;",[199,18280,18281],{"class":1454}," \u002F\u002F默认是私有权限\n",[199,18283,18284],{"class":201,"line":333},[199,18285,6894],{"class":205},[199,18287,18288],{"class":201,"line":227},[199,18289,907],{"emptyLinePlaceholder":906},[199,18291,18292,18294],{"class":201,"line":238},[199,18293,10656],{"class":1086},[199,18295,18296],{"class":878}," C2\n",[199,18298,18299],{"class":201,"line":252},[199,18300,4485],{"class":205},[199,18302,18303,18305,18308],{"class":201,"line":388},[199,18304,4901],{"class":1086},[199,18306,18307],{"class":205}," m_A;",[199,18309,18310],{"class":1454},"  \u002F\u002F默认是公共权限\n",[199,18312,18313],{"class":201,"line":415},[199,18314,6894],{"class":205},[199,18316,18317],{"class":201,"line":426},[199,18318,907],{"emptyLinePlaceholder":906},[199,18320,18321,18323,18325],{"class":201,"line":1015},[199,18322,3100],{"class":1086},[199,18324,4889],{"class":878},[199,18326,13716],{"class":205},[199,18328,18329],{"class":201,"line":1031},[199,18330,907],{"emptyLinePlaceholder":906},[199,18332,18333],{"class":201,"line":1043},[199,18334,18335],{"class":205},"    C1 c1;\n",[199,18337,18338,18341,18343,18345,18347],{"class":201,"line":1049},[199,18339,18340],{"class":205},"    c1.m_A ",[199,18342,895],{"class":1086},[199,18344,4954],{"class":1018},[199,18346,3149],{"class":205},[199,18348,18349],{"class":1454}," \u002F\u002F错误，访问权限是私有\n",[199,18351,18352],{"class":201,"line":1054},[199,18353,907],{"emptyLinePlaceholder":906},[199,18355,18356],{"class":201,"line":1062},[199,18357,18358],{"class":205},"    C2 c2;\n",[199,18360,18361,18364,18366,18368,18370],{"class":201,"line":1075},[199,18362,18363],{"class":205},"    c2.m_A ",[199,18365,895],{"class":1086},[199,18367,4954],{"class":1018},[199,18369,3149],{"class":205},[199,18371,18372],{"class":1454}," \u002F\u002F正确，访问权限是公共\n",[199,18374,18375],{"class":201,"line":1092},[199,18376,907],{"emptyLinePlaceholder":906},[199,18378,18379,18381,18383,18385],{"class":201,"line":1107},[199,18380,5217],{"class":878},[199,18382,1537],{"class":205},[199,18384,5222],{"class":898},[199,18386,5623],{"class":205},[199,18388,18389],{"class":201,"line":1128},[199,18390,907],{"emptyLinePlaceholder":906},[199,18392,18393,18395,18397],{"class":201,"line":1146},[199,18394,6989],{"class":1086},[199,18396,1621],{"class":1018},[199,18398,1028],{"class":205},[199,18400,18401],{"class":201,"line":1163},[199,18402,671],{"class":205},[19,18404,18406],{"id":18405},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[31,18408,18409],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[31,18411,18412],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[31,18414,18415],{},[49,18416,17994],{},[190,18418,18420],{"className":12804,"code":18419,"language":12806,"meta":57,"style":57},"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",[196,18421,18422,18431,18435,18439,18444,18458,18467,18471,18481,18485,18492,18496,18500,18504,18509,18518,18525,18529,18534,18550,18573,18586,18593,18597,18606,18610,18614,18619,18635,18645,18649,18653,18657,18665,18669,18679,18683,18691,18695,18699,18707,18711,18715,18720,18733,18756,18760,18765,18778,18800,18804,18809,18823,18831,18835,18845,18849,18857],{"__ignoreMap":57},[199,18423,18424,18426,18429],{"class":201,"line":202},[199,18425,17554],{"class":1086},[199,18427,18428],{"class":878}," Person",[199,18430,1012],{"class":205},[199,18432,18433],{"class":201,"line":36},[199,18434,17576],{"class":1086},[199,18436,18437],{"class":201,"line":73},[199,18438,907],{"emptyLinePlaceholder":906},[199,18440,18441],{"class":201,"line":333},[199,18442,18443],{"class":1454},"    \u002F\u002F姓名设置可读可写\n",[199,18445,18446,18448,18450,18452,18454,18456],{"class":201,"line":227},[199,18447,17769],{"class":1086},[199,18449,17772],{"class":878},[199,18451,1537],{"class":205},[199,18453,17777],{"class":878},[199,18455,967],{"class":8113},[199,18457,1513],{"class":205},[199,18459,18460,18462,18464],{"class":201,"line":238},[199,18461,18113],{"class":205},[199,18463,895],{"class":1086},[199,18465,18466],{"class":205}," name;\n",[199,18468,18469],{"class":201,"line":252},[199,18470,2097],{"class":205},[199,18472,18473,18476,18479],{"class":201,"line":388},[199,18474,18475],{"class":878},"    string",[199,18477,18478],{"class":878}," getName",[199,18480,4892],{"class":205},[199,18482,18483],{"class":201,"line":415},[199,18484,4946],{"class":205},[199,18486,18487,18489],{"class":201,"line":426},[199,18488,17612],{"class":1086},[199,18490,18491],{"class":205}," m_Name;\n",[199,18493,18494],{"class":201,"line":1015},[199,18495,2097],{"class":205},[199,18497,18498],{"class":201,"line":1031},[199,18499,907],{"emptyLinePlaceholder":906},[199,18501,18502],{"class":201,"line":1043},[199,18503,907],{"emptyLinePlaceholder":906},[199,18505,18506],{"class":201,"line":1049},[199,18507,18508],{"class":1454},"    \u002F\u002F获取年龄 \n",[199,18510,18511,18513,18516],{"class":201,"line":1054},[199,18512,4901],{"class":1086},[199,18514,18515],{"class":878}," getAge",[199,18517,13716],{"class":205},[199,18519,18520,18522],{"class":201,"line":1062},[199,18521,17612],{"class":1086},[199,18523,18524],{"class":205}," m_Age;\n",[199,18526,18527],{"class":201,"line":1075},[199,18528,2097],{"class":205},[199,18530,18531],{"class":201,"line":1092},[199,18532,18533],{"class":1454},"    \u002F\u002F设置年龄\n",[199,18535,18536,18538,18541,18543,18545,18548],{"class":201,"line":1107},[199,18537,17769],{"class":1086},[199,18539,18540],{"class":878}," setAge",[199,18542,1537],{"class":205},[199,18544,3100],{"class":1086},[199,18546,18547],{"class":8113}," age",[199,18549,1513],{"class":205},[199,18551,18552,18554,18557,18559,18561,18563,18566,18568,18571],{"class":201,"line":1128},[199,18553,2017],{"class":1086},[199,18555,18556],{"class":205}," (age ",[199,18558,887],{"class":1086},[199,18560,1621],{"class":1018},[199,18562,6157],{"class":1086},[199,18564,18565],{"class":205}," age ",[199,18567,1217],{"class":1086},[199,18569,18570],{"class":1018}," 150",[199,18572,1513],{"class":205},[199,18574,18575,18577,18579,18582,18584],{"class":201,"line":1146},[199,18576,12600],{"class":205},[199,18578,4117],{"class":1086},[199,18580,18581],{"class":898}," \"你个老妖精!\"",[199,18583,4384],{"class":1086},[199,18585,11727],{"class":205},[199,18587,18588,18591],{"class":201,"line":1163},[199,18589,18590],{"class":1086},"            return",[199,18592,1028],{"class":205},[199,18594,18595],{"class":201,"line":1176},[199,18596,1046],{"class":205},[199,18598,18599,18602,18604],{"class":201,"line":1189},[199,18600,18601],{"class":205},"        m_Age ",[199,18603,895],{"class":1086},[199,18605,10694],{"class":205},[199,18607,18608],{"class":201,"line":1202},[199,18609,2097],{"class":205},[199,18611,18612],{"class":201,"line":1207},[199,18613,907],{"emptyLinePlaceholder":906},[199,18615,18616],{"class":201,"line":1212},[199,18617,18618],{"class":1454},"    \u002F\u002F情人设置为只写\n",[199,18620,18621,18623,18626,18628,18630,18633],{"class":201,"line":1225},[199,18622,17769],{"class":1086},[199,18624,18625],{"class":878}," setLover",[199,18627,1537],{"class":205},[199,18629,17777],{"class":878},[199,18631,18632],{"class":8113}," lover",[199,18634,1513],{"class":205},[199,18636,18637,18640,18642],{"class":201,"line":1236},[199,18638,18639],{"class":205},"        m_Lover ",[199,18641,895],{"class":1086},[199,18643,18644],{"class":205}," lover;\n",[199,18646,18647],{"class":201,"line":1249},[199,18648,2097],{"class":205},[199,18650,18651],{"class":201,"line":1262},[199,18652,907],{"emptyLinePlaceholder":906},[199,18654,18655],{"class":201,"line":1275},[199,18656,18081],{"class":1086},[199,18658,18659,18662],{"class":201,"line":1287},[199,18660,18661],{"class":205},"    string m_Name;",[199,18663,18664],{"class":1454}," \u002F\u002F可读可写  姓名\n",[199,18666,18667],{"class":201,"line":1292},[199,18668,16071],{"class":205},[199,18670,18671,18673,18676],{"class":201,"line":1297},[199,18672,4901],{"class":1086},[199,18674,18675],{"class":205}," m_Age;",[199,18677,18678],{"class":1454}," \u002F\u002F只读  年龄\n",[199,18680,18681],{"class":201,"line":1310},[199,18682,907],{"emptyLinePlaceholder":906},[199,18684,18685,18688],{"class":201,"line":1315},[199,18686,18687],{"class":205},"    string m_Lover;",[199,18689,18690],{"class":1454}," \u002F\u002F只写  情人\n",[199,18692,18693],{"class":201,"line":1330},[199,18694,6894],{"class":205},[199,18696,18697],{"class":201,"line":1335},[199,18698,907],{"emptyLinePlaceholder":906},[199,18700,18701,18703,18705],{"class":201,"line":1340},[199,18702,3100],{"class":1086},[199,18704,4889],{"class":878},[199,18706,13716],{"class":205},[199,18708,18709],{"class":201,"line":1352},[199,18710,907],{"emptyLinePlaceholder":906},[199,18712,18713],{"class":201,"line":1367},[199,18714,18172],{"class":205},[199,18716,18717],{"class":201,"line":1381},[199,18718,18719],{"class":1454},"    \u002F\u002F姓名设置\n",[199,18721,18722,18725,18727,18729,18731],{"class":201,"line":1396},[199,18723,18724],{"class":205},"    p.",[199,18726,17925],{"class":878},[199,18728,1537],{"class":205},[199,18730,10813],{"class":898},[199,18732,5623],{"class":205},[199,18734,18735,18737,18739,18742,18744,18747,18750,18752,18754],{"class":201,"line":1401},[199,18736,9426],{"class":205},[199,18738,4117],{"class":1086},[199,18740,18741],{"class":898}," \"姓名： \"",[199,18743,4384],{"class":1086},[199,18745,18746],{"class":205}," p.",[199,18748,18749],{"class":878},"getName",[199,18751,15911],{"class":205},[199,18753,4117],{"class":1086},[199,18755,11727],{"class":205},[199,18757,18758],{"class":201,"line":1411},[199,18759,907],{"emptyLinePlaceholder":906},[199,18761,18762],{"class":201,"line":1421},[199,18763,18764],{"class":1454},"    \u002F\u002F年龄设置\n",[199,18766,18767,18769,18772,18774,18776],{"class":201,"line":1426},[199,18768,18724],{"class":205},[199,18770,18771],{"class":878},"setAge",[199,18773,1537],{"class":205},[199,18775,1153],{"class":1018},[199,18777,5623],{"class":205},[199,18779,18780,18782,18784,18787,18789,18791,18794,18796,18798],{"class":201,"line":1436},[199,18781,9426],{"class":205},[199,18783,4117],{"class":1086},[199,18785,18786],{"class":898}," \"年龄： \"",[199,18788,4384],{"class":1086},[199,18790,18746],{"class":205},[199,18792,18793],{"class":878},"getAge",[199,18795,15911],{"class":205},[199,18797,4117],{"class":1086},[199,18799,11727],{"class":205},[199,18801,18802],{"class":201,"line":1441},[199,18803,907],{"emptyLinePlaceholder":906},[199,18805,18806],{"class":201,"line":1451},[199,18807,18808],{"class":1454},"    \u002F\u002F情人设置\n",[199,18810,18811,18813,18816,18818,18821],{"class":201,"line":1458},[199,18812,18724],{"class":205},[199,18814,18815],{"class":878},"setLover",[199,18817,1537],{"class":205},[199,18819,18820],{"class":898},"\"苍井\"",[199,18822,5623],{"class":205},[199,18824,18825,18828],{"class":201,"line":1464},[199,18826,18827],{"class":1454},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[199,18829,18830],{"class":1454},"  \u002F\u002F只写属性，不可以读取\n",[199,18832,18833],{"class":201,"line":1478},[199,18834,907],{"emptyLinePlaceholder":906},[199,18836,18837,18839,18841,18843],{"class":201,"line":1516},[199,18838,5217],{"class":878},[199,18840,1537],{"class":205},[199,18842,5222],{"class":898},[199,18844,5623],{"class":205},[199,18846,18847],{"class":201,"line":1522},[199,18848,907],{"emptyLinePlaceholder":906},[199,18850,18851,18853,18855],{"class":201,"line":1528},[199,18852,6989],{"class":1086},[199,18854,1621],{"class":1018},[199,18856,1028],{"class":205},[199,18858,18859],{"class":201,"line":1557},[199,18860,671],{"class":205},[19,18862,18864],{"id":18863},"_814封装案例","8.1.4封装案例",[24,18866,18867],{},[27,18868,18869,18872],{},[49,18870,18871],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[176,18874,18875,18878],{},[27,18876,18877],{},"求出立方体的面积和体积",[27,18879,18880],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[190,18882,18884],{"className":3086,"code":18883,"language":3088,"meta":57,"style":57},"#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",[196,18885,18886,18892,18902,18909,18913,18917,18922,18952,18956,18966,18976,18986,18990,18999,19003,19039,19043,19052,19056,19072,19076,19081,19090,19094,19101,19105,19114,19118,19125,19129,19138,19142,19149,19153,19158,19175,19179,19225,19229,19238,19242,19246,19250,19259,19263,19267,19272,19276,19282,19288,19294,19298,19302,19307,19329,19333,19387,19391,19399,19403,19408,19413,19426,19433,19449,19460,19465,19487,19492,19514,19527,19546,19551,19561,19583,19604,19608,19613,19626,19639,19644,19658,19663,19669,19674,19688,19693,19698,19712,19724,19729,19742,19747,19752,19757,19770,19775],{"__ignoreMap":57},[199,18887,18888,18890],{"class":201,"line":202},[199,18889,4866],{"class":1086},[199,18891,4869],{"class":898},[199,18893,18894,18896,18898,18900],{"class":201,"line":36},[199,18895,4874],{"class":1086},[199,18897,4877],{"class":1086},[199,18899,4880],{"class":878},[199,18901,1028],{"class":205},[199,18903,18904,18906],{"class":201,"line":73},[199,18905,17554],{"class":1086},[199,18907,18908],{"class":878}," Cube\n",[199,18910,18911],{"class":201,"line":333},[199,18912,4485],{"class":205},[199,18914,18915],{"class":201,"line":227},[199,18916,17576],{"class":1086},[199,18918,18919],{"class":201,"line":238},[199,18920,18921],{"class":1454},"    \u002F\u002F输入长宽高\n",[199,18923,18924,18926,18929,18931,18933,18936,18938,18940,18943,18945,18947,18950],{"class":201,"line":252},[199,18925,17769],{"class":1086},[199,18927,18928],{"class":878}," setLwh",[199,18930,1537],{"class":205},[199,18932,3100],{"class":1086},[199,18934,18935],{"class":8113}," l",[199,18937,3461],{"class":205},[199,18939,3100],{"class":1086},[199,18941,18942],{"class":8113}," w",[199,18944,3461],{"class":205},[199,18946,3100],{"class":1086},[199,18948,18949],{"class":8113}," h",[199,18951,1594],{"class":205},[199,18953,18954],{"class":201,"line":388},[199,18955,4946],{"class":205},[199,18957,18958,18961,18963],{"class":201,"line":415},[199,18959,18960],{"class":205},"        m_L",[199,18962,895],{"class":1086},[199,18964,18965],{"class":205},"l;\n",[199,18967,18968,18971,18973],{"class":201,"line":426},[199,18969,18970],{"class":205},"        m_W",[199,18972,895],{"class":1086},[199,18974,18975],{"class":205},"w;\n",[199,18977,18978,18981,18983],{"class":201,"line":1015},[199,18979,18980],{"class":205},"        m_H",[199,18982,895],{"class":1086},[199,18984,18985],{"class":205},"h;\n",[199,18987,18988],{"class":201,"line":1031},[199,18989,2097],{"class":205},[199,18991,18992,18994,18997],{"class":201,"line":1043},[199,18993,4901],{"class":1086},[199,18995,18996],{"class":878}," mianji",[199,18998,4892],{"class":205},[199,19000,19001],{"class":201,"line":1049},[199,19002,4946],{"class":205},[199,19004,19005,19007,19009,19011,19014,19016,19019,19021,19024,19026,19029,19031,19034,19036],{"class":201,"line":1054},[199,19006,17612],{"class":1086},[199,19008,17615],{"class":1018},[199,19010,3537],{"class":1086},[199,19012,19013],{"class":205},"(m_L",[199,19015,3537],{"class":1086},[199,19017,19018],{"class":205},"m_W ",[199,19020,2028],{"class":1086},[199,19022,19023],{"class":205}," m_L",[199,19025,3537],{"class":1086},[199,19027,19028],{"class":205},"m_H ",[199,19030,2028],{"class":1086},[199,19032,19033],{"class":205}," m_W",[199,19035,3537],{"class":1086},[199,19037,19038],{"class":205},"m_H);\n",[199,19040,19041],{"class":201,"line":1062},[199,19042,2097],{"class":205},[199,19044,19045,19047,19050],{"class":201,"line":1075},[199,19046,4901],{"class":1086},[199,19048,19049],{"class":878}," tiji",[199,19051,4892],{"class":205},[199,19053,19054],{"class":201,"line":1092},[199,19055,4946],{"class":205},[199,19057,19058,19060,19062,19064,19067,19069],{"class":201,"line":1107},[199,19059,17612],{"class":1086},[199,19061,19023],{"class":205},[199,19063,3537],{"class":1086},[199,19065,19066],{"class":205},"m_W",[199,19068,3537],{"class":1086},[199,19070,19071],{"class":205},"m_H;\n",[199,19073,19074],{"class":201,"line":1128},[199,19075,2097],{"class":205},[199,19077,19078],{"class":201,"line":1146},[199,19079,19080],{"class":1454},"    \u002F\u002F获取长宽高\n",[199,19082,19083,19085,19088],{"class":201,"line":1163},[199,19084,4901],{"class":1086},[199,19086,19087],{"class":878}," getLength",[199,19089,4892],{"class":205},[199,19091,19092],{"class":201,"line":1176},[199,19093,4946],{"class":205},[199,19095,19096,19098],{"class":201,"line":1189},[199,19097,17612],{"class":1086},[199,19099,19100],{"class":205}," m_L;\n",[199,19102,19103],{"class":201,"line":1202},[199,19104,2097],{"class":205},[199,19106,19107,19109,19112],{"class":201,"line":1207},[199,19108,4901],{"class":1086},[199,19110,19111],{"class":878}," getWidth",[199,19113,4892],{"class":205},[199,19115,19116],{"class":201,"line":1212},[199,19117,4946],{"class":205},[199,19119,19120,19122],{"class":201,"line":1225},[199,19121,17612],{"class":1086},[199,19123,19124],{"class":205}," m_W;\n",[199,19126,19127],{"class":201,"line":1236},[199,19128,2097],{"class":205},[199,19130,19131,19133,19136],{"class":201,"line":1249},[199,19132,4901],{"class":1086},[199,19134,19135],{"class":878}," getHeight",[199,19137,4892],{"class":205},[199,19139,19140],{"class":201,"line":1262},[199,19141,4946],{"class":205},[199,19143,19144,19146],{"class":201,"line":1275},[199,19145,17612],{"class":1086},[199,19147,19148],{"class":205}," m_H;\n",[199,19150,19151],{"class":201,"line":1287},[199,19152,2097],{"class":205},[199,19154,19155],{"class":201,"line":1292},[199,19156,19157],{"class":1454},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[199,19159,19160,19163,19166,19168,19171,19173],{"class":201,"line":1297},[199,19161,19162],{"class":1086},"    bool",[199,19164,19165],{"class":878}," isEqual",[199,19167,1537],{"class":205},[199,19169,19170],{"class":878},"Cube",[199,19172,5753],{"class":8113},[199,19174,1594],{"class":205},[199,19176,19177],{"class":201,"line":1310},[199,19178,4946],{"class":205},[199,19180,19181,19183,19186,19189,19191,19193,19196,19198,19201,19204,19206,19208,19211,19213,19215,19218,19220,19222],{"class":201,"line":1315},[199,19182,2017],{"class":1086},[199,19184,19185],{"class":205}," (c.",[199,19187,19188],{"class":878},"getLength",[199,19190,15911],{"class":205},[199,19192,5853],{"class":1086},[199,19194,19195],{"class":205}," m_L ",[199,19197,4640],{"class":1086},[199,19199,19200],{"class":205}," c.",[199,19202,19203],{"class":878},"getWidth",[199,19205,15911],{"class":205},[199,19207,5853],{"class":1086},[199,19209,19210],{"class":205}," m_W ",[199,19212,4640],{"class":1086},[199,19214,19200],{"class":205},[199,19216,19217],{"class":878},"getHeight",[199,19219,15911],{"class":205},[199,19221,5853],{"class":1086},[199,19223,19224],{"class":205}," m_H)\n",[199,19226,19227],{"class":201,"line":1330},[199,19228,5422],{"class":205},[199,19230,19231,19233,19236],{"class":201,"line":1335},[199,19232,18590],{"class":1086},[199,19234,19235],{"class":1018}," true",[199,19237,1028],{"class":205},[199,19239,19240],{"class":201,"line":1340},[199,19241,1046],{"class":205},[199,19243,19244],{"class":201,"line":1352},[199,19245,5481],{"class":1086},[199,19247,19248],{"class":201,"line":1367},[199,19249,5422],{"class":205},[199,19251,19252,19254,19257],{"class":201,"line":1381},[199,19253,18590],{"class":1086},[199,19255,19256],{"class":1018}," false",[199,19258,1028],{"class":205},[199,19260,19261],{"class":201,"line":1396},[199,19262,1046],{"class":205},[199,19264,19265],{"class":201,"line":1401},[199,19266,2097],{"class":205},[199,19268,19269],{"class":201,"line":1411},[199,19270,19271],{"class":1454},"    \u002F\u002F私有属性\n",[199,19273,19274],{"class":201,"line":1421},[199,19275,18081],{"class":1086},[199,19277,19278,19280],{"class":201,"line":1426},[199,19279,4901],{"class":1086},[199,19281,19100],{"class":205},[199,19283,19284,19286],{"class":201,"line":1436},[199,19285,4901],{"class":1086},[199,19287,19124],{"class":205},[199,19289,19290,19292],{"class":201,"line":1441},[199,19291,4901],{"class":1086},[199,19293,19148],{"class":205},[199,19295,19296],{"class":201,"line":1451},[199,19297,907],{"emptyLinePlaceholder":906},[199,19299,19300],{"class":201,"line":1458},[199,19301,6894],{"class":205},[199,19303,19304],{"class":201,"line":1464},[199,19305,19306],{"class":1454},"\u002F\u002F全局函数判断两个立方体是否相等\n",[199,19308,19309,19311,19313,19315,19317,19320,19322,19324,19327],{"class":201,"line":1478},[199,19310,4294],{"class":1086},[199,19312,19165],{"class":878},[199,19314,1537],{"class":205},[199,19316,19170],{"class":878},[199,19318,19319],{"class":8113}," c1",[199,19321,3461],{"class":205},[199,19323,19170],{"class":878},[199,19325,19326],{"class":8113}," c2",[199,19328,1594],{"class":205},[199,19330,19331],{"class":201,"line":1516},[199,19332,4485],{"class":205},[199,19334,19335,19337,19340,19342,19344,19346,19349,19351,19354,19356,19358,19360,19362,19364,19366,19368,19370,19372,19374,19376,19378,19380,19382,19384],{"class":201,"line":1522},[199,19336,6989],{"class":1086},[199,19338,19339],{"class":205}," (c1.",[199,19341,19188],{"class":878},[199,19343,15911],{"class":205},[199,19345,5853],{"class":1086},[199,19347,19348],{"class":205}," c2.",[199,19350,19188],{"class":878},[199,19352,19353],{"class":205},"()) ",[199,19355,4640],{"class":1086},[199,19357,19339],{"class":205},[199,19359,19203],{"class":878},[199,19361,15911],{"class":205},[199,19363,5853],{"class":1086},[199,19365,19348],{"class":205},[199,19367,19203],{"class":878},[199,19369,19353],{"class":205},[199,19371,4640],{"class":1086},[199,19373,19339],{"class":205},[199,19375,19217],{"class":878},[199,19377,15911],{"class":205},[199,19379,5853],{"class":1086},[199,19381,19348],{"class":205},[199,19383,19217],{"class":878},[199,19385,19386],{"class":205},"());\n",[199,19388,19389],{"class":201,"line":1528},[199,19390,671],{"class":205},[199,19392,19393,19395,19397],{"class":201,"line":1557},[199,19394,3100],{"class":1086},[199,19396,4889],{"class":878},[199,19398,4892],{"class":205},[199,19400,19401],{"class":201,"line":1563},[199,19402,4485],{"class":205},[199,19404,19405],{"class":201,"line":1568},[199,19406,19407],{"class":205},"    Cube c1;\n",[199,19409,19410],{"class":201,"line":1574},[199,19411,19412],{"class":1454},"    \u002F\u002F输入立方体的长宽高\n",[199,19414,19415,19417,19419,19422,19424],{"class":201,"line":1580},[199,19416,4490],{"class":205},[199,19418,4117],{"class":1086},[199,19420,19421],{"class":898},"\"请输入第一个立方体的长、宽、高：\"",[199,19423,4117],{"class":1086},[199,19425,4139],{"class":205},[199,19427,19428,19430],{"class":201,"line":1597},[199,19429,4901],{"class":1086},[199,19431,19432],{"class":205}," l,w,h,l1,w1,h1;\n",[199,19434,19435,19437,19439,19441,19443,19445,19447],{"class":201,"line":1602},[199,19436,4928],{"class":205},[199,19438,4369],{"class":1086},[199,19440,3599],{"class":205},[199,19442,4369],{"class":1086},[199,19444,3874],{"class":205},[199,19446,4369],{"class":1086},[199,19448,18985],{"class":205},[199,19450,19451,19454,19457],{"class":201,"line":1608},[199,19452,19453],{"class":205},"    c1.",[199,19455,19456],{"class":878},"setLwh",[199,19458,19459],{"class":205},"(l,w,h);\n",[199,19461,19462],{"class":201,"line":1640},[199,19463,19464],{"class":1454},"    \u002F\u002F面积\n",[199,19466,19467,19469,19471,19474,19476,19478,19481,19483,19485],{"class":201,"line":1653},[199,19468,4490],{"class":205},[199,19470,4117],{"class":1086},[199,19472,19473],{"class":898},"\"立方体的表面积为：\"",[199,19475,4117],{"class":1086},[199,19477,17690],{"class":205},[199,19479,19480],{"class":878},"mianji",[199,19482,5340],{"class":205},[199,19484,4117],{"class":1086},[199,19486,4139],{"class":205},[199,19488,19489],{"class":201,"line":1673},[199,19490,19491],{"class":1454},"    \u002F\u002F体积\n",[199,19493,19494,19496,19498,19501,19503,19505,19508,19510,19512],{"class":201,"line":1690},[199,19495,4490],{"class":205},[199,19497,4117],{"class":1086},[199,19499,19500],{"class":898},"\"立方体的体积为：\"",[199,19502,4117],{"class":1086},[199,19504,17690],{"class":205},[199,19506,19507],{"class":878},"tiji",[199,19509,5340],{"class":205},[199,19511,4117],{"class":1086},[199,19513,4139],{"class":205},[199,19515,19516,19518,19520,19523,19525],{"class":201,"line":1706},[199,19517,4490],{"class":205},[199,19519,4117],{"class":1086},[199,19521,19522],{"class":898},"\"请输入第二个立方体的长、宽、高：\"",[199,19524,4117],{"class":1086},[199,19526,4139],{"class":205},[199,19528,19529,19531,19533,19536,19538,19541,19543],{"class":201,"line":1712},[199,19530,4928],{"class":205},[199,19532,4369],{"class":1086},[199,19534,19535],{"class":205},"l1",[199,19537,4369],{"class":1086},[199,19539,19540],{"class":205},"w1",[199,19542,4369],{"class":1086},[199,19544,19545],{"class":205},"h1;\n",[199,19547,19548],{"class":201,"line":1720},[199,19549,19550],{"class":205},"    Cube c2;\n",[199,19552,19553,19556,19558],{"class":201,"line":1725},[199,19554,19555],{"class":205},"    c2.",[199,19557,19456],{"class":878},[199,19559,19560],{"class":205},"(l1,w1,h1);\n",[199,19562,19563,19565,19567,19570,19572,19575,19577,19579,19581],{"class":201,"line":1731},[199,19564,4490],{"class":205},[199,19566,4117],{"class":1086},[199,19568,19569],{"class":898},"\"第二个立方体的表面积为：\"",[199,19571,4117],{"class":1086},[199,19573,19574],{"class":205},"c2.",[199,19576,19480],{"class":878},[199,19578,5340],{"class":205},[199,19580,4117],{"class":1086},[199,19582,4139],{"class":205},[199,19584,19585,19587,19589,19592,19594,19596,19598,19600,19602],{"class":201,"line":1745},[199,19586,4490],{"class":205},[199,19588,4117],{"class":1086},[199,19590,19591],{"class":898},"\"第二个立方体的体积为：\"",[199,19593,4117],{"class":1086},[199,19595,19574],{"class":205},[199,19597,19507],{"class":878},[199,19599,5340],{"class":205},[199,19601,4117],{"class":1086},[199,19603,4139],{"class":205},[199,19605,19606],{"class":201,"line":1754},[199,19607,907],{"emptyLinePlaceholder":906},[199,19609,19610],{"class":201,"line":1763},[199,19611,19612],{"class":1454},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[199,19614,19615,19617,19619,19622,19624],{"class":201,"line":1768},[199,19616,4490],{"class":205},[199,19618,4117],{"class":1086},[199,19620,19621],{"class":898},"\"内部函数判断结果：\"",[199,19623,4117],{"class":1086},[199,19625,4139],{"class":205},[199,19627,19629,19631,19633,19636],{"class":201,"line":19628},79,[199,19630,6005],{"class":1086},[199,19632,19339],{"class":205},[199,19634,19635],{"class":878},"isEqual",[199,19637,19638],{"class":205},"(c2))\n",[199,19640,19642],{"class":201,"line":19641},80,[199,19643,4946],{"class":205},[199,19645,19647,19649,19651,19654,19656],{"class":201,"line":19646},81,[199,19648,6352],{"class":205},[199,19650,4117],{"class":1086},[199,19652,19653],{"class":898},"\"两个立方体相等\"",[199,19655,4117],{"class":1086},[199,19657,4139],{"class":205},[199,19659,19661],{"class":201,"line":19660},82,[199,19662,2097],{"class":205},[199,19664,19666],{"class":201,"line":19665},83,[199,19667,19668],{"class":1086},"    else\n",[199,19670,19672],{"class":201,"line":19671},84,[199,19673,4946],{"class":205},[199,19675,19677,19679,19681,19684,19686],{"class":201,"line":19676},85,[199,19678,6352],{"class":205},[199,19680,4117],{"class":1086},[199,19682,19683],{"class":898},"\"两个立方体不相等\"",[199,19685,4117],{"class":1086},[199,19687,4139],{"class":205},[199,19689,19691],{"class":201,"line":19690},86,[199,19692,2097],{"class":205},[199,19694,19696],{"class":201,"line":19695},87,[199,19697,907],{"emptyLinePlaceholder":906},[199,19699,19701,19703,19705,19708,19710],{"class":201,"line":19700},88,[199,19702,4490],{"class":205},[199,19704,4117],{"class":1086},[199,19706,19707],{"class":898},"\"全局函数判断结果：\"",[199,19709,4117],{"class":1086},[199,19711,4139],{"class":205},[199,19713,19715,19717,19719,19721],{"class":201,"line":19714},89,[199,19716,6005],{"class":1086},[199,19718,1484],{"class":205},[199,19720,19635],{"class":878},[199,19722,19723],{"class":205},"(c1, c2))\n",[199,19725,19727],{"class":201,"line":19726},90,[199,19728,4946],{"class":205},[199,19730,19732,19734,19736,19738,19740],{"class":201,"line":19731},91,[199,19733,6352],{"class":205},[199,19735,4117],{"class":1086},[199,19737,19653],{"class":898},[199,19739,4117],{"class":1086},[199,19741,4139],{"class":205},[199,19743,19745],{"class":201,"line":19744},92,[199,19746,2097],{"class":205},[199,19748,19750],{"class":201,"line":19749},93,[199,19751,19668],{"class":1086},[199,19753,19755],{"class":201,"line":19754},94,[199,19756,4946],{"class":205},[199,19758,19760,19762,19764,19766,19768],{"class":201,"line":19759},95,[199,19761,6352],{"class":205},[199,19763,4117],{"class":1086},[199,19765,19683],{"class":898},[199,19767,4117],{"class":1086},[199,19769,4139],{"class":205},[199,19771,19773],{"class":201,"line":19772},96,[199,19774,2097],{"class":205},[199,19776,19778],{"class":201,"line":19777},97,[199,19779,671],{"class":205},[24,19781,19782],{"start":36},[27,19783,19784],{},[49,19785,19786],{},"练习案例2：点和圆的关系",[176,19788,19789],{},[27,19790,19791],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[190,19793,19795],{"className":3086,"code":19794,"language":3088,"meta":57,"style":57},"#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",[196,19796,19797,19803,19813,19820,19827,19831,19835,19840,19874,19879,19895,19909,19913,19917,19924,19931,19935,19941,19945,19949,19953,19975,19998,20003,20017,20032,20036,20040,20046,20051,20056,20060,20086,20090,20120,20148,20176,20193,20197,20210,20214,20218,20222,20235,20239,20243,20251,20255,20259,20263,20268,20272,20283,20290,20299,20309,20320,20327,20340,20351,20361,20372,20379,20393,20398,20408,20416],{"__ignoreMap":57},[199,19798,19799,19801],{"class":201,"line":202},[199,19800,4866],{"class":1086},[199,19802,4869],{"class":898},[199,19804,19805,19807,19809,19811],{"class":201,"line":36},[199,19806,4874],{"class":1086},[199,19808,4877],{"class":1086},[199,19810,4880],{"class":878},[199,19812,1028],{"class":205},[199,19814,19815,19817],{"class":201,"line":73},[199,19816,4866],{"class":1086},[199,19818,19819],{"class":898},"\u003Ccmath>\n",[199,19821,19822,19824],{"class":201,"line":333},[199,19823,17554],{"class":1086},[199,19825,19826],{"class":878}," Point\n",[199,19828,19829],{"class":201,"line":227},[199,19830,4485],{"class":205},[199,19832,19833],{"class":201,"line":238},[199,19834,17576],{"class":1086},[199,19836,19837],{"class":201,"line":252},[199,19838,19839],{"class":1454},"    \u002F\u002F赋值\n",[199,19841,19842,19844,19847,19849,19851,19854,19856,19858,19861,19864,19866,19869,19871],{"class":201,"line":388},[199,19843,17769],{"class":1086},[199,19845,19846],{"class":878}," setPoint",[199,19848,1537],{"class":205},[199,19850,16898],{"class":1086},[199,19852,19853],{"class":8113}," x",[199,19855,1912],{"class":205},[199,19857,16898],{"class":1086},[199,19859,19860],{"class":8113}," y",[199,19862,19863],{"class":205},") { m_x ",[199,19865,895],{"class":1086},[199,19867,19868],{"class":205}," x; m_y ",[199,19870,895],{"class":1086},[199,19872,19873],{"class":205}," y; }\n",[199,19875,19876],{"class":201,"line":415},[199,19877,19878],{"class":1454},"    \u002F\u002F获取坐标\n",[199,19880,19881,19883,19886,19889,19892],{"class":201,"line":426},[199,19882,17598],{"class":1086},[199,19884,19885],{"class":878}," getX",[199,19887,19888],{"class":205},"() { ",[199,19890,19891],{"class":1086},"return",[199,19893,19894],{"class":205}," m_x; }\n",[199,19896,19897,19899,19902,19904,19906],{"class":201,"line":1015},[199,19898,17598],{"class":1086},[199,19900,19901],{"class":878}," getY",[199,19903,19888],{"class":205},[199,19905,19891],{"class":1086},[199,19907,19908],{"class":205}," m_y; }\n",[199,19910,19911],{"class":201,"line":1031},[199,19912,907],{"emptyLinePlaceholder":906},[199,19914,19915],{"class":201,"line":1043},[199,19916,18081],{"class":1086},[199,19918,19919,19921],{"class":201,"line":1049},[199,19920,17598],{"class":1086},[199,19922,19923],{"class":205}," m_x;\n",[199,19925,19926,19928],{"class":201,"line":1054},[199,19927,17598],{"class":1086},[199,19929,19930],{"class":205}," m_y;\n",[199,19932,19933],{"class":201,"line":1062},[199,19934,6894],{"class":205},[199,19936,19937,19939],{"class":201,"line":1075},[199,19938,17554],{"class":1086},[199,19940,17557],{"class":878},[199,19942,19943],{"class":201,"line":1092},[199,19944,4485],{"class":205},[199,19946,19947],{"class":201,"line":1107},[199,19948,17576],{"class":1086},[199,19950,19951],{"class":201,"line":1128},[199,19952,19839],{"class":1454},[199,19954,19955,19957,19960,19962,19964,19967,19970,19972],{"class":201,"line":1146},[199,19956,17769],{"class":1086},[199,19958,19959],{"class":878}," setRadius",[199,19961,1537],{"class":205},[199,19963,16898],{"class":1086},[199,19965,19966],{"class":8113}," r",[199,19968,19969],{"class":205},") { m_r ",[199,19971,895],{"class":1086},[199,19973,19974],{"class":205}," r; }\n",[199,19976,19977,19979,19982,19984,19987,19990,19993,19995],{"class":201,"line":1163},[199,19978,17769],{"class":1086},[199,19980,19981],{"class":878}," setCenter",[199,19983,1537],{"class":205},[199,19985,19986],{"class":878},"Point",[199,19988,19989],{"class":8113}," center",[199,19991,19992],{"class":205},") { m_center ",[199,19994,895],{"class":1086},[199,19996,19997],{"class":205}," center; }\n",[199,19999,20000],{"class":201,"line":1176},[199,20001,20002],{"class":1454},"    \u002F\u002F获取属性\n",[199,20004,20005,20007,20010,20012,20014],{"class":201,"line":1189},[199,20006,17598],{"class":1086},[199,20008,20009],{"class":878}," getRadius",[199,20011,19888],{"class":205},[199,20013,19891],{"class":1086},[199,20015,20016],{"class":205}," m_r; }\n",[199,20018,20019,20022,20025,20027,20029],{"class":201,"line":1202},[199,20020,20021],{"class":878},"    Point",[199,20023,20024],{"class":878}," getCenter",[199,20026,19888],{"class":205},[199,20028,19891],{"class":1086},[199,20030,20031],{"class":205}," m_center; }\n",[199,20033,20034],{"class":201,"line":1207},[199,20035,907],{"emptyLinePlaceholder":906},[199,20037,20038],{"class":201,"line":1212},[199,20039,18081],{"class":1086},[199,20041,20042,20044],{"class":201,"line":1225},[199,20043,17598],{"class":1086},[199,20045,17588],{"class":205},[199,20047,20048],{"class":201,"line":1236},[199,20049,20050],{"class":1454},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[199,20052,20053],{"class":201,"line":1249},[199,20054,20055],{"class":205},"    Point m_center;\n",[199,20057,20058],{"class":201,"line":1262},[199,20059,6894],{"class":205},[199,20061,20062,20064,20067,20069,20072,20074,20076,20078,20080,20082,20084],{"class":201,"line":1275},[199,20063,8261],{"class":1086},[199,20065,20066],{"class":878}," isInCircle",[199,20068,1537],{"class":205},[199,20070,20071],{"class":878},"Circle",[199,20073,13447],{"class":1086},[199,20075,3374],{"class":8113},[199,20077,3461],{"class":205},[199,20079,19986],{"class":878},[199,20081,13447],{"class":1086},[199,20083,31],{"class":8113},[199,20085,1594],{"class":205},[199,20087,20088],{"class":201,"line":1287},[199,20089,4485],{"class":205},[199,20091,20092,20094,20097,20099,20101,20104,20107,20110,20112,20114,20116,20118],{"class":201,"line":1292},[199,20093,17598],{"class":1086},[199,20095,20096],{"class":205}," dx ",[199,20098,895],{"class":1086},[199,20100,19200],{"class":205},[199,20102,20103],{"class":878},"getCenter",[199,20105,20106],{"class":205},"().",[199,20108,20109],{"class":878},"getX",[199,20111,15911],{"class":205},[199,20113,1998],{"class":1086},[199,20115,18746],{"class":205},[199,20117,20109],{"class":878},[199,20119,8533],{"class":205},[199,20121,20122,20124,20127,20129,20131,20133,20135,20138,20140,20142,20144,20146],{"class":201,"line":1297},[199,20123,17598],{"class":1086},[199,20125,20126],{"class":205}," dy ",[199,20128,895],{"class":1086},[199,20130,19200],{"class":205},[199,20132,20103],{"class":878},[199,20134,20106],{"class":205},[199,20136,20137],{"class":878},"getY",[199,20139,15911],{"class":205},[199,20141,1998],{"class":1086},[199,20143,18746],{"class":205},[199,20145,20137],{"class":878},[199,20147,8533],{"class":205},[199,20149,20150,20152,20155,20157,20160,20163,20165,20167,20169,20171,20173],{"class":201,"line":1310},[199,20151,17598],{"class":1086},[199,20153,20154],{"class":205}," distance ",[199,20156,895],{"class":1086},[199,20158,20159],{"class":878}," sqrt",[199,20161,20162],{"class":205},"(dx ",[199,20164,3537],{"class":1086},[199,20166,20096],{"class":205},[199,20168,2028],{"class":1086},[199,20170,20126],{"class":205},[199,20172,3537],{"class":1086},[199,20174,20175],{"class":205}," dy);\n",[199,20177,20178,20180,20183,20185,20187,20190],{"class":201,"line":1315},[199,20179,6005],{"class":1086},[199,20181,20182],{"class":205}," (distance ",[199,20184,887],{"class":1086},[199,20186,19200],{"class":205},[199,20188,20189],{"class":878},"getRadius",[199,20191,20192],{"class":205},"())\n",[199,20194,20195],{"class":201,"line":1330},[199,20196,4946],{"class":205},[199,20198,20199,20201,20203,20206,20208],{"class":201,"line":1335},[199,20200,12551],{"class":205},[199,20202,4117],{"class":1086},[199,20204,20205],{"class":898}," \"点在圆内\"",[199,20207,4384],{"class":1086},[199,20209,11727],{"class":205},[199,20211,20212],{"class":201,"line":1340},[199,20213,2097],{"class":205},[199,20215,20216],{"class":201,"line":1352},[199,20217,19668],{"class":1086},[199,20219,20220],{"class":201,"line":1367},[199,20221,4946],{"class":205},[199,20223,20224,20226,20228,20231,20233],{"class":201,"line":1381},[199,20225,12551],{"class":205},[199,20227,4117],{"class":1086},[199,20229,20230],{"class":898}," \"点在圆外\"",[199,20232,4384],{"class":1086},[199,20234,11727],{"class":205},[199,20236,20237],{"class":201,"line":1396},[199,20238,2097],{"class":205},[199,20240,20241],{"class":201,"line":1401},[199,20242,671],{"class":205},[199,20244,20245,20247,20249],{"class":201,"line":1411},[199,20246,3100],{"class":1086},[199,20248,4889],{"class":878},[199,20250,4892],{"class":205},[199,20252,20253],{"class":201,"line":1421},[199,20254,4485],{"class":205},[199,20256,20257],{"class":201,"line":1426},[199,20258,17912],{"class":1454},[199,20260,20261],{"class":201,"line":1436},[199,20262,17660],{"class":205},[199,20264,20265],{"class":201,"line":1441},[199,20266,20267],{"class":205},"    Point p1;\n",[199,20269,20270],{"class":201,"line":1451},[199,20271,19839],{"class":1454},[199,20273,20274,20276,20278,20281],{"class":201,"line":1458},[199,20275,4490],{"class":205},[199,20277,4117],{"class":1086},[199,20279,20280],{"class":898},"\"请输入圆的半径：\"",[199,20282,1028],{"class":205},[199,20284,20285,20287],{"class":201,"line":1464},[199,20286,17598],{"class":1086},[199,20288,20289],{"class":205}," r;\n",[199,20291,20292,20294,20296],{"class":201,"line":1478},[199,20293,4928],{"class":205},[199,20295,4369],{"class":1086},[199,20297,20298],{"class":205},"r;\n",[199,20300,20301,20303,20306],{"class":201,"line":1516},[199,20302,19453],{"class":205},[199,20304,20305],{"class":878},"setRadius",[199,20307,20308],{"class":205},"(r);\n",[199,20310,20311,20313,20315,20318],{"class":201,"line":1522},[199,20312,4490],{"class":205},[199,20314,4117],{"class":1086},[199,20316,20317],{"class":898},"\"请输入圆心坐标：\"",[199,20319,1028],{"class":205},[199,20321,20322,20324],{"class":201,"line":1528},[199,20323,17598],{"class":1086},[199,20325,20326],{"class":205}," x, y;\n",[199,20328,20329,20331,20333,20335,20337],{"class":201,"line":1557},[199,20330,4928],{"class":205},[199,20332,4369],{"class":1086},[199,20334,3899],{"class":205},[199,20336,4369],{"class":1086},[199,20338,20339],{"class":205},"y;\n",[199,20341,20342,20345,20348],{"class":201,"line":1563},[199,20343,20344],{"class":205},"    p1.",[199,20346,20347],{"class":878},"setPoint",[199,20349,20350],{"class":205},"(x, y);\n",[199,20352,20353,20355,20358],{"class":201,"line":1568},[199,20354,19453],{"class":205},[199,20356,20357],{"class":878},"setCenter",[199,20359,20360],{"class":205},"(p1);\n",[199,20362,20363,20365,20367,20370],{"class":201,"line":1574},[199,20364,4490],{"class":205},[199,20366,4117],{"class":1086},[199,20368,20369],{"class":898},"\"请输入测试点坐标：\"",[199,20371,1028],{"class":205},[199,20373,20374,20376],{"class":201,"line":1580},[199,20375,17598],{"class":1086},[199,20377,20378],{"class":205}," x1, y1;\n",[199,20380,20381,20383,20385,20388,20390],{"class":201,"line":1597},[199,20382,4928],{"class":205},[199,20384,4369],{"class":1086},[199,20386,20387],{"class":205},"x1",[199,20389,4369],{"class":1086},[199,20391,20392],{"class":205},"y1;\n",[199,20394,20395],{"class":201,"line":1602},[199,20396,20397],{"class":205},"    Point p2;\n",[199,20399,20400,20403,20405],{"class":201,"line":1608},[199,20401,20402],{"class":205},"    p2.",[199,20404,20347],{"class":878},[199,20406,20407],{"class":205},"(x1, y1);\n",[199,20409,20410,20413],{"class":201,"line":1640},[199,20411,20412],{"class":878},"    isInCircle",[199,20414,20415],{"class":205},"(c1, p2);\n",[199,20417,20418],{"class":201,"line":1653},[199,20419,671],{"class":205},[31,20421,20422],{},"在类中可以让另一个类作为本来的成员",[31,20424,20425],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[31,20427,20428],{},"创建point.h",[190,20430,20432],{"className":3086,"code":20431,"language":3088,"meta":57,"style":57},"#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",[196,20433,20434,20445,20451,20461,20467,20471,20476,20480,20484,20504,20508,20516,20524,20528,20532,20538,20544],{"__ignoreMap":57},[199,20435,20436,20439,20442],{"class":201,"line":202},[199,20437,20438],{"class":1086},"#pragma",[199,20440,20441],{"class":878}," once",[199,20443,20444],{"class":1454}," \u002F\u002F防止头文件重复包含\n",[199,20446,20447,20449],{"class":201,"line":36},[199,20448,4866],{"class":1086},[199,20450,4869],{"class":898},[199,20452,20453,20455,20457,20459],{"class":201,"line":73},[199,20454,4874],{"class":1086},[199,20456,4877],{"class":1086},[199,20458,4880],{"class":878},[199,20460,1028],{"class":205},[199,20462,20463,20465],{"class":201,"line":333},[199,20464,17554],{"class":1086},[199,20466,19826],{"class":878},[199,20468,20469],{"class":201,"line":227},[199,20470,4485],{"class":205},[199,20472,20473],{"class":201,"line":238},[199,20474,20475],{"class":1454},"\u002F\u002F做好声明与变量定义就可以\n",[199,20477,20478],{"class":201,"line":252},[199,20479,17576],{"class":1086},[199,20481,20482],{"class":201,"line":388},[199,20483,19839],{"class":1454},[199,20485,20486,20488,20490,20492,20494,20496,20498,20500,20502],{"class":201,"line":415},[199,20487,17769],{"class":1086},[199,20489,19846],{"class":878},[199,20491,1537],{"class":205},[199,20493,16898],{"class":1086},[199,20495,19853],{"class":8113},[199,20497,1912],{"class":205},[199,20499,16898],{"class":1086},[199,20501,19860],{"class":8113},[199,20503,5623],{"class":205},[199,20505,20506],{"class":201,"line":426},[199,20507,19878],{"class":1454},[199,20509,20510,20512,20514],{"class":201,"line":1015},[199,20511,17598],{"class":1086},[199,20513,19885],{"class":878},[199,20515,8533],{"class":205},[199,20517,20518,20520,20522],{"class":201,"line":1031},[199,20519,17598],{"class":1086},[199,20521,19901],{"class":878},[199,20523,8533],{"class":205},[199,20525,20526],{"class":201,"line":1043},[199,20527,907],{"emptyLinePlaceholder":906},[199,20529,20530],{"class":201,"line":1049},[199,20531,18081],{"class":1086},[199,20533,20534,20536],{"class":201,"line":1054},[199,20535,17598],{"class":1086},[199,20537,19923],{"class":205},[199,20539,20540,20542],{"class":201,"line":1062},[199,20541,17598],{"class":1086},[199,20543,19930],{"class":205},[199,20545,20546],{"class":201,"line":1075},[199,20547,6894],{"class":205},[31,20549,20550],{},"创建point.cpp",[190,20552,20554],{"className":3086,"code":20553,"language":3088,"meta":57,"style":57},"#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",[196,20555,20556,20563,20568,20602,20606,20622],{"__ignoreMap":57},[199,20557,20558,20560],{"class":201,"line":202},[199,20559,4866],{"class":1086},[199,20561,20562],{"class":898},"\u003Cpoint.h>\n",[199,20564,20565],{"class":201,"line":36},[199,20566,20567],{"class":1454},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[199,20569,20570,20572,20575,20578,20580,20582,20584,20586,20588,20590,20592,20594,20596,20598,20600],{"class":201,"line":73},[199,20571,17769],{"class":1086},[199,20573,20574],{"class":878}," Point",[199,20576,20577],{"class":205},"::",[199,20579,20347],{"class":878},[199,20581,1537],{"class":205},[199,20583,16898],{"class":1086},[199,20585,19853],{"class":8113},[199,20587,1912],{"class":205},[199,20589,16898],{"class":1086},[199,20591,19860],{"class":8113},[199,20593,19863],{"class":205},[199,20595,895],{"class":1086},[199,20597,19868],{"class":205},[199,20599,895],{"class":1086},[199,20601,19873],{"class":205},[199,20603,20604],{"class":201,"line":333},[199,20605,19878],{"class":1454},[199,20607,20608,20610,20612,20614,20616,20618,20620],{"class":201,"line":227},[199,20609,17598],{"class":1086},[199,20611,20574],{"class":878},[199,20613,20577],{"class":205},[199,20615,20109],{"class":878},[199,20617,19888],{"class":205},[199,20619,19891],{"class":1086},[199,20621,19894],{"class":205},[199,20623,20624,20626,20628,20630,20632,20634,20636],{"class":201,"line":238},[199,20625,17598],{"class":1086},[199,20627,20574],{"class":878},[199,20629,20577],{"class":205},[199,20631,20137],{"class":878},[199,20633,19888],{"class":205},[199,20635,19891],{"class":1086},[199,20637,19908],{"class":205},[31,20639,20640],{},"创建circle.h",[190,20642,20644],{"className":3086,"code":20643,"language":3088,"meta":57,"style":57},"#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",[196,20645,20646,20653,20659,20669,20675,20681,20685,20689,20693,20707,20721,20725,20733,20741,20745,20749,20755,20759,20763],{"__ignoreMap":57},[199,20647,20648,20650],{"class":201,"line":202},[199,20649,20438],{"class":1086},[199,20651,20652],{"class":878}," once\n",[199,20654,20655,20657],{"class":201,"line":36},[199,20656,4866],{"class":1086},[199,20658,4869],{"class":898},[199,20660,20661,20663,20665,20667],{"class":201,"line":73},[199,20662,4874],{"class":1086},[199,20664,4877],{"class":1086},[199,20666,4880],{"class":878},[199,20668,1028],{"class":205},[199,20670,20671,20673],{"class":201,"line":333},[199,20672,4866],{"class":1086},[199,20674,20562],{"class":898},[199,20676,20677,20679],{"class":201,"line":227},[199,20678,17554],{"class":1086},[199,20680,17557],{"class":878},[199,20682,20683],{"class":201,"line":238},[199,20684,4485],{"class":205},[199,20686,20687],{"class":201,"line":252},[199,20688,17576],{"class":1086},[199,20690,20691],{"class":201,"line":388},[199,20692,19839],{"class":1454},[199,20694,20695,20697,20699,20701,20703,20705],{"class":201,"line":415},[199,20696,17769],{"class":1086},[199,20698,19959],{"class":878},[199,20700,1537],{"class":205},[199,20702,16898],{"class":1086},[199,20704,19966],{"class":8113},[199,20706,5623],{"class":205},[199,20708,20709,20711,20713,20715,20717,20719],{"class":201,"line":426},[199,20710,17769],{"class":1086},[199,20712,19981],{"class":878},[199,20714,1537],{"class":205},[199,20716,19986],{"class":878},[199,20718,19989],{"class":8113},[199,20720,5623],{"class":205},[199,20722,20723],{"class":201,"line":1015},[199,20724,20002],{"class":1454},[199,20726,20727,20729,20731],{"class":201,"line":1031},[199,20728,17598],{"class":1086},[199,20730,20009],{"class":878},[199,20732,8533],{"class":205},[199,20734,20735,20737,20739],{"class":201,"line":1043},[199,20736,20021],{"class":878},[199,20738,20024],{"class":878},[199,20740,8533],{"class":205},[199,20742,20743],{"class":201,"line":1049},[199,20744,907],{"emptyLinePlaceholder":906},[199,20746,20747],{"class":201,"line":1054},[199,20748,18081],{"class":1086},[199,20750,20751,20753],{"class":201,"line":1062},[199,20752,17598],{"class":1086},[199,20754,17588],{"class":205},[199,20756,20757],{"class":201,"line":1075},[199,20758,20050],{"class":1454},[199,20760,20761],{"class":201,"line":1092},[199,20762,20055],{"class":205},[199,20764,20765],{"class":201,"line":1107},[199,20766,6894],{"class":205},[31,20768,20769],{},"创建circle.cpp",[190,20771,20773],{"className":3086,"code":20772,"language":3088,"meta":57,"style":57},"#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",[196,20774,20775,20782,20805,20827,20832,20848],{"__ignoreMap":57},[199,20776,20777,20779],{"class":201,"line":202},[199,20778,4866],{"class":1086},[199,20780,20781],{"class":898},"\u003Ccircle.h>\n",[199,20783,20784,20786,20789,20791,20793,20795,20797,20799,20801,20803],{"class":201,"line":36},[199,20785,8261],{"class":1086},[199,20787,20788],{"class":878}," Circle",[199,20790,20577],{"class":205},[199,20792,20305],{"class":878},[199,20794,1537],{"class":205},[199,20796,16898],{"class":1086},[199,20798,19966],{"class":8113},[199,20800,19969],{"class":205},[199,20802,895],{"class":1086},[199,20804,19974],{"class":205},[199,20806,20807,20809,20811,20813,20815,20817,20819,20821,20823,20825],{"class":201,"line":73},[199,20808,8261],{"class":1086},[199,20810,20788],{"class":878},[199,20812,20577],{"class":205},[199,20814,20357],{"class":878},[199,20816,1537],{"class":205},[199,20818,19986],{"class":878},[199,20820,19989],{"class":8113},[199,20822,19992],{"class":205},[199,20824,895],{"class":1086},[199,20826,19997],{"class":205},[199,20828,20829],{"class":201,"line":333},[199,20830,20831],{"class":1454},"\u002F\u002F获取属性\n",[199,20833,20834,20836,20838,20840,20842,20844,20846],{"class":201,"line":227},[199,20835,16898],{"class":1086},[199,20837,20788],{"class":878},[199,20839,20577],{"class":205},[199,20841,20189],{"class":878},[199,20843,19888],{"class":205},[199,20845,19891],{"class":1086},[199,20847,20016],{"class":205},[199,20849,20850,20852,20854,20856,20858,20860,20862],{"class":201,"line":238},[199,20851,19986],{"class":878},[199,20853,20788],{"class":878},[199,20855,20577],{"class":205},[199,20857,20103],{"class":878},[199,20859,19888],{"class":205},[199,20861,19891],{"class":1086},[199,20863,20031],{"class":205},[31,20865,20866],{},"使用封装的类",[190,20868,20870],{"className":3086,"code":20869,"language":3088,"meta":57,"style":57},"#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",[196,20871,20872,20878,20888,20894,20900,20924,20928,20954,20980,21004,21018,21022,21034,21038,21042,21046,21058,21062,21066,21074,21078,21082,21086,21090,21094,21104,21110,21118,21126,21136,21142,21154,21162,21170,21180,21186,21198,21202,21210,21216],{"__ignoreMap":57},[199,20873,20874,20876],{"class":201,"line":202},[199,20875,4866],{"class":1086},[199,20877,4869],{"class":898},[199,20879,20880,20882,20884,20886],{"class":201,"line":36},[199,20881,4874],{"class":1086},[199,20883,4877],{"class":1086},[199,20885,4880],{"class":878},[199,20887,1028],{"class":205},[199,20889,20890,20892],{"class":201,"line":73},[199,20891,4866],{"class":1086},[199,20893,20781],{"class":898},[199,20895,20896,20898],{"class":201,"line":333},[199,20897,4866],{"class":1086},[199,20899,20562],{"class":898},[199,20901,20902,20904,20906,20908,20910,20912,20914,20916,20918,20920,20922],{"class":201,"line":227},[199,20903,8261],{"class":1086},[199,20905,20066],{"class":878},[199,20907,1537],{"class":205},[199,20909,20071],{"class":878},[199,20911,13447],{"class":1086},[199,20913,3374],{"class":8113},[199,20915,3461],{"class":205},[199,20917,19986],{"class":878},[199,20919,13447],{"class":1086},[199,20921,31],{"class":8113},[199,20923,1594],{"class":205},[199,20925,20926],{"class":201,"line":238},[199,20927,4485],{"class":205},[199,20929,20930,20932,20934,20936,20938,20940,20942,20944,20946,20948,20950,20952],{"class":201,"line":252},[199,20931,17598],{"class":1086},[199,20933,20096],{"class":205},[199,20935,895],{"class":1086},[199,20937,19200],{"class":205},[199,20939,20103],{"class":878},[199,20941,20106],{"class":205},[199,20943,20109],{"class":878},[199,20945,15911],{"class":205},[199,20947,1998],{"class":1086},[199,20949,18746],{"class":205},[199,20951,20109],{"class":878},[199,20953,8533],{"class":205},[199,20955,20956,20958,20960,20962,20964,20966,20968,20970,20972,20974,20976,20978],{"class":201,"line":388},[199,20957,17598],{"class":1086},[199,20959,20126],{"class":205},[199,20961,895],{"class":1086},[199,20963,19200],{"class":205},[199,20965,20103],{"class":878},[199,20967,20106],{"class":205},[199,20969,20137],{"class":878},[199,20971,15911],{"class":205},[199,20973,1998],{"class":1086},[199,20975,18746],{"class":205},[199,20977,20137],{"class":878},[199,20979,8533],{"class":205},[199,20981,20982,20984,20986,20988,20990,20992,20994,20996,20998,21000,21002],{"class":201,"line":415},[199,20983,17598],{"class":1086},[199,20985,20154],{"class":205},[199,20987,895],{"class":1086},[199,20989,20159],{"class":878},[199,20991,20162],{"class":205},[199,20993,3537],{"class":1086},[199,20995,20096],{"class":205},[199,20997,2028],{"class":1086},[199,20999,20126],{"class":205},[199,21001,3537],{"class":1086},[199,21003,20175],{"class":205},[199,21005,21006,21008,21010,21012,21014,21016],{"class":201,"line":426},[199,21007,6005],{"class":1086},[199,21009,20182],{"class":205},[199,21011,887],{"class":1086},[199,21013,19200],{"class":205},[199,21015,20189],{"class":878},[199,21017,20192],{"class":205},[199,21019,21020],{"class":201,"line":1015},[199,21021,4946],{"class":205},[199,21023,21024,21026,21028,21030,21032],{"class":201,"line":1031},[199,21025,12551],{"class":205},[199,21027,4117],{"class":1086},[199,21029,20205],{"class":898},[199,21031,4384],{"class":1086},[199,21033,11727],{"class":205},[199,21035,21036],{"class":201,"line":1043},[199,21037,2097],{"class":205},[199,21039,21040],{"class":201,"line":1049},[199,21041,19668],{"class":1086},[199,21043,21044],{"class":201,"line":1054},[199,21045,4946],{"class":205},[199,21047,21048,21050,21052,21054,21056],{"class":201,"line":1062},[199,21049,12551],{"class":205},[199,21051,4117],{"class":1086},[199,21053,20230],{"class":898},[199,21055,4384],{"class":1086},[199,21057,11727],{"class":205},[199,21059,21060],{"class":201,"line":1075},[199,21061,2097],{"class":205},[199,21063,21064],{"class":201,"line":1092},[199,21065,671],{"class":205},[199,21067,21068,21070,21072],{"class":201,"line":1107},[199,21069,3100],{"class":1086},[199,21071,4889],{"class":878},[199,21073,4892],{"class":205},[199,21075,21076],{"class":201,"line":1128},[199,21077,4485],{"class":205},[199,21079,21080],{"class":201,"line":1146},[199,21081,17912],{"class":1454},[199,21083,21084],{"class":201,"line":1163},[199,21085,17660],{"class":205},[199,21087,21088],{"class":201,"line":1176},[199,21089,20267],{"class":205},[199,21091,21092],{"class":201,"line":1189},[199,21093,19839],{"class":1454},[199,21095,21096,21098,21100,21102],{"class":201,"line":1202},[199,21097,4490],{"class":205},[199,21099,4117],{"class":1086},[199,21101,20280],{"class":898},[199,21103,1028],{"class":205},[199,21105,21106,21108],{"class":201,"line":1207},[199,21107,17598],{"class":1086},[199,21109,20289],{"class":205},[199,21111,21112,21114,21116],{"class":201,"line":1212},[199,21113,4928],{"class":205},[199,21115,4369],{"class":1086},[199,21117,20298],{"class":205},[199,21119,21120,21122,21124],{"class":201,"line":1225},[199,21121,19453],{"class":205},[199,21123,20305],{"class":878},[199,21125,20308],{"class":205},[199,21127,21128,21130,21132,21134],{"class":201,"line":1236},[199,21129,4490],{"class":205},[199,21131,4117],{"class":1086},[199,21133,20317],{"class":898},[199,21135,1028],{"class":205},[199,21137,21138,21140],{"class":201,"line":1249},[199,21139,17598],{"class":1086},[199,21141,20326],{"class":205},[199,21143,21144,21146,21148,21150,21152],{"class":201,"line":1262},[199,21145,4928],{"class":205},[199,21147,4369],{"class":1086},[199,21149,3899],{"class":205},[199,21151,4369],{"class":1086},[199,21153,20339],{"class":205},[199,21155,21156,21158,21160],{"class":201,"line":1275},[199,21157,20344],{"class":205},[199,21159,20347],{"class":878},[199,21161,20350],{"class":205},[199,21163,21164,21166,21168],{"class":201,"line":1287},[199,21165,19453],{"class":205},[199,21167,20357],{"class":878},[199,21169,20360],{"class":205},[199,21171,21172,21174,21176,21178],{"class":201,"line":1292},[199,21173,4490],{"class":205},[199,21175,4117],{"class":1086},[199,21177,20369],{"class":898},[199,21179,1028],{"class":205},[199,21181,21182,21184],{"class":201,"line":1297},[199,21183,17598],{"class":1086},[199,21185,20378],{"class":205},[199,21187,21188,21190,21192,21194,21196],{"class":201,"line":1310},[199,21189,4928],{"class":205},[199,21191,4369],{"class":1086},[199,21193,20387],{"class":205},[199,21195,4369],{"class":1086},[199,21197,20392],{"class":205},[199,21199,21200],{"class":201,"line":1315},[199,21201,20397],{"class":205},[199,21203,21204,21206,21208],{"class":201,"line":1330},[199,21205,20402],{"class":205},[199,21207,20347],{"class":878},[199,21209,20407],{"class":205},[199,21211,21212,21214],{"class":201,"line":1335},[199,21213,20412],{"class":878},[199,21215,20415],{"class":205},[199,21217,21218],{"class":201,"line":1340},[199,21219,671],{"class":205},[14,21221,21223],{"id":21222},"_82对象的初始化清理","8.2对象的初始化清理",[176,21225,21226,21229],{},[27,21227,21228],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[27,21230,21231],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[19,21233,21235],{"id":21234},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[31,21237,21238,21239,21242],{},"对象的",[49,21240,21241],{},"初始化和清理","也是两个非常重要的安全问题",[31,21244,21245],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[31,21247,21248],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[31,21250,21251,21252,21255,21256,21259],{},"c++利用了",[49,21253,21254],{},"构造函数","和",[49,21257,21258],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[31,21261,21262,21263],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[49,21264,21265],{},"我们不提供构造和析构，编译器会提供",[31,21267,21268],{},[49,21269,21270],{},"编译器提供的构造函数和析构函数是空实现。",[176,21272,21273,21276],{},[27,21274,21275],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[27,21277,21278,21279,21282],{},"析构函数：主要作用在于对象",[49,21280,21281],{},"销毁前","系统自动调用，执行一些清理工作。",[31,21284,21285,21288],{},[49,21286,21287],{},"构造函数语法：",[196,21289,21290],{},"类名(){}",[24,21292,21293,21296,21299,21302,21305],{},[27,21294,21295],{},"构造函数，没有返回值也不写void",[27,21297,21298],{},"函数名称与类名相同",[27,21300,21301],{},"构造函数可以有参数，因此可以发生重载",[27,21303,21304],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[27,21306,21307,21308,3512],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[196,21309,21310],{},"Person(){}",[31,21312,21313,16656,21316],{},[49,21314,21315],{},"析构函数语法：",[196,21317,21318],{},"~类名(){}",[24,21320,21321,21324,21327,21333],{},[27,21322,21323],{},"析构函数，没有返回值也不写void",[27,21325,21326],{},"函数名称与类名相同,在名称前加上符号  ~",[27,21328,21329,21330],{},"析构函数不可以有参数，因此",[49,21331,21332],{},"不可以发生重载",[27,21334,21335],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[190,21337,21339],{"className":3086,"code":21338,"language":3088,"meta":57,"style":57},"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",[196,21340,21341,21347,21351,21355,21360,21367,21371,21384,21388,21393,21400,21404,21417,21421,21425,21429,21433,21441,21445,21453,21457,21461,21469,21473,21478,21482,21489,21493,21506,21510,21518],{"__ignoreMap":57},[199,21342,21343,21345],{"class":201,"line":202},[199,21344,17554],{"class":1086},[199,21346,18030],{"class":878},[199,21348,21349],{"class":201,"line":36},[199,21350,4485],{"class":205},[199,21352,21353],{"class":201,"line":73},[199,21354,17576],{"class":1086},[199,21356,21357],{"class":201,"line":333},[199,21358,21359],{"class":1454},"    \u002F\u002F构造函数\n",[199,21361,21362,21365],{"class":201,"line":227},[199,21363,21364],{"class":878},"    Person",[199,21366,4892],{"class":205},[199,21368,21369],{"class":201,"line":238},[199,21370,4946],{"class":205},[199,21372,21373,21375,21377,21380,21382],{"class":201,"line":252},[199,21374,12551],{"class":205},[199,21376,4117],{"class":1086},[199,21378,21379],{"class":898}," \"Person的构造函数调用\"",[199,21381,4384],{"class":1086},[199,21383,11727],{"class":205},[199,21385,21386],{"class":201,"line":388},[199,21387,2097],{"class":205},[199,21389,21390],{"class":201,"line":415},[199,21391,21392],{"class":1454},"    \u002F\u002F析构函数\n",[199,21394,21395,21398],{"class":201,"line":426},[199,21396,21397],{"class":878},"    ~Person",[199,21399,4892],{"class":205},[199,21401,21402],{"class":201,"line":1015},[199,21403,4946],{"class":205},[199,21405,21406,21408,21410,21413,21415],{"class":201,"line":1031},[199,21407,12551],{"class":205},[199,21409,4117],{"class":1086},[199,21411,21412],{"class":898}," \"Person的析构函数调用\"",[199,21414,4384],{"class":1086},[199,21416,11727],{"class":205},[199,21418,21419],{"class":201,"line":1043},[199,21420,2097],{"class":205},[199,21422,21423],{"class":201,"line":1049},[199,21424,907],{"emptyLinePlaceholder":906},[199,21426,21427],{"class":201,"line":1054},[199,21428,6894],{"class":205},[199,21430,21431],{"class":201,"line":1062},[199,21432,907],{"emptyLinePlaceholder":906},[199,21434,21435,21437,21439],{"class":201,"line":1075},[199,21436,8261],{"class":1086},[199,21438,8485],{"class":878},[199,21440,4892],{"class":205},[199,21442,21443],{"class":201,"line":1092},[199,21444,4485],{"class":205},[199,21446,21447,21450],{"class":201,"line":1107},[199,21448,21449],{"class":205},"    Person p;",[199,21451,21452],{"class":1454},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[199,21454,21455],{"class":201,"line":1128},[199,21456,671],{"class":205},[199,21458,21459],{"class":201,"line":1146},[199,21460,907],{"emptyLinePlaceholder":906},[199,21462,21463,21465,21467],{"class":201,"line":1163},[199,21464,3100],{"class":1086},[199,21466,4889],{"class":878},[199,21468,13716],{"class":205},[199,21470,21471],{"class":201,"line":1176},[199,21472,16071],{"class":205},[199,21474,21475],{"class":201,"line":1189},[199,21476,21477],{"class":1454},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[199,21479,21480],{"class":201,"line":1202},[199,21481,907],{"emptyLinePlaceholder":906},[199,21483,21484,21486],{"class":201,"line":1207},[199,21485,21449],{"class":205},[199,21487,21488],{"class":1454},"\u002F\u002F只有构造函数\n",[199,21490,21491],{"class":201,"line":1212},[199,21492,907],{"emptyLinePlaceholder":906},[199,21494,21495,21497,21499,21501,21503],{"class":201,"line":1225},[199,21496,5217],{"class":878},[199,21498,1537],{"class":205},[199,21500,5222],{"class":898},[199,21502,8863],{"class":205},[199,21504,21505],{"class":1454},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[199,21507,21508],{"class":201,"line":1236},[199,21509,907],{"emptyLinePlaceholder":906},[199,21511,21512,21514,21516],{"class":201,"line":1249},[199,21513,6989],{"class":1086},[199,21515,1621],{"class":1018},[199,21517,1028],{"class":205},[199,21519,21520],{"class":201,"line":1262},[199,21521,671],{"class":205},[31,21523,21524],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[19,21526,21528],{"id":21527},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[31,21530,21531],{},"两种分类方式：",[31,21533,21534],{},"​\t按参数分为： 有参构造和无参构造",[31,21536,21537],{},"​\t按类型分为： 普通构造和拷贝构造",[31,21539,21540],{},"三种调用方式：",[31,21542,21543],{},"​\t括号法",[31,21545,21546],{},"​\t显示法",[31,21548,21549],{},"​\t隐式转换法",[190,21551,21553],{"className":3086,"code":21552,"language":3088,"meta":57,"style":57},"#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",[196,21554,21555,21561,21571,21576,21581,21586,21591,21595,21603,21607,21611,21615,21621,21625,21638,21642,21654,21658,21667,21680,21684,21688,21694,21698,21711,21715,21720,21736,21740,21745,21754,21767,21771,21777,21781,21786,21794,21798,21803,21807,21815,21819,21824,21829,21834,21839,21844,21848,21853,21858,21863,21868,21872,21877,21882,21898,21910,21915,21919,21924,21929,21934,21938,21943,21957,21970,21974,21982,21986,21992,21998,22006],{"__ignoreMap":57},[199,21556,21557,21559],{"class":201,"line":202},[199,21558,4866],{"class":1086},[199,21560,4869],{"class":898},[199,21562,21563,21565,21567,21569],{"class":201,"line":36},[199,21564,4874],{"class":1086},[199,21566,4877],{"class":1086},[199,21568,4880],{"class":878},[199,21570,1028],{"class":205},[199,21572,21573],{"class":201,"line":73},[199,21574,21575],{"class":1454},"\u002F\u002F1.构造函数的分类及调用\n",[199,21577,21578],{"class":201,"line":333},[199,21579,21580],{"class":1454},"\u002F\u002F分类\n",[199,21582,21583],{"class":201,"line":227},[199,21584,21585],{"class":1454},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[199,21587,21588],{"class":201,"line":238},[199,21589,21590],{"class":1454},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[199,21592,21593],{"class":201,"line":252},[199,21594,907],{"emptyLinePlaceholder":906},[199,21596,21597,21599,21601],{"class":201,"line":388},[199,21598,17554],{"class":1086},[199,21600,18428],{"class":878},[199,21602,5578],{"class":205},[199,21604,21605],{"class":201,"line":415},[199,21606,4485],{"class":205},[199,21608,21609],{"class":201,"line":426},[199,21610,17576],{"class":1086},[199,21612,21613],{"class":201,"line":1015},[199,21614,21359],{"class":1454},[199,21616,21617,21619],{"class":201,"line":1031},[199,21618,21364],{"class":878},[199,21620,4892],{"class":205},[199,21622,21623],{"class":201,"line":1043},[199,21624,4946],{"class":205},[199,21626,21627,21629,21631,21634,21636],{"class":201,"line":1049},[199,21628,6352],{"class":205},[199,21630,4117],{"class":1086},[199,21632,21633],{"class":898},"\"Person构造函数无参构造\"",[199,21635,4117],{"class":1086},[199,21637,4139],{"class":205},[199,21639,21640],{"class":201,"line":1054},[199,21641,2097],{"class":205},[199,21643,21644,21646,21648,21650,21652],{"class":201,"line":1062},[199,21645,21364],{"class":878},[199,21647,1537],{"class":205},[199,21649,3100],{"class":1086},[199,21651,4338],{"class":8113},[199,21653,1594],{"class":205},[199,21655,21656],{"class":201,"line":1075},[199,21657,4946],{"class":205},[199,21659,21660,21663,21665],{"class":201,"line":1092},[199,21661,21662],{"class":205},"        age",[199,21664,895],{"class":1086},[199,21666,9094],{"class":205},[199,21668,21669,21671,21673,21676,21678],{"class":201,"line":1107},[199,21670,6352],{"class":205},[199,21672,4117],{"class":1086},[199,21674,21675],{"class":898},"\"Person构造函数有参构造\"",[199,21677,4117],{"class":1086},[199,21679,4139],{"class":205},[199,21681,21682],{"class":201,"line":1128},[199,21683,2097],{"class":205},[199,21685,21686],{"class":201,"line":1146},[199,21687,21392],{"class":1454},[199,21689,21690,21692],{"class":201,"line":1163},[199,21691,21397],{"class":878},[199,21693,4892],{"class":205},[199,21695,21696],{"class":201,"line":1176},[199,21697,4946],{"class":205},[199,21699,21700,21702,21704,21707,21709],{"class":201,"line":1189},[199,21701,6352],{"class":205},[199,21703,4117],{"class":1086},[199,21705,21706],{"class":898},"\"Person析构函数被调用\"",[199,21708,4117],{"class":1086},[199,21710,4139],{"class":205},[199,21712,21713],{"class":201,"line":1202},[199,21714,2097],{"class":205},[199,21716,21717],{"class":201,"line":1207},[199,21718,21719],{"class":1454},"    \u002F\u002F拷贝构造函数\n",[199,21721,21722,21724,21726,21728,21730,21732,21734],{"class":201,"line":1212},[199,21723,21364],{"class":878},[199,21725,1537],{"class":205},[199,21727,9689],{"class":1086},[199,21729,18428],{"class":878},[199,21731,13447],{"class":1086},[199,21733,31],{"class":8113},[199,21735,1594],{"class":205},[199,21737,21738],{"class":201,"line":1225},[199,21739,4946],{"class":205},[199,21741,21742],{"class":201,"line":1236},[199,21743,21744],{"class":1454},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[199,21746,21747,21749,21751],{"class":201,"line":1249},[199,21748,21662],{"class":205},[199,21750,895],{"class":1086},[199,21752,21753],{"class":205},"p.age;\n",[199,21755,21756,21758,21760,21763,21765],{"class":201,"line":1262},[199,21757,6352],{"class":205},[199,21759,4117],{"class":1086},[199,21761,21762],{"class":898},"\"Person拷贝构造函数被调用\"",[199,21764,4117],{"class":1086},[199,21766,4139],{"class":205},[199,21768,21769],{"class":201,"line":1275},[199,21770,2097],{"class":205},[199,21772,21773,21775],{"class":201,"line":1287},[199,21774,4901],{"class":1086},[199,21776,10694],{"class":205},[199,21778,21779],{"class":201,"line":1292},[199,21780,6894],{"class":205},[199,21782,21783],{"class":201,"line":1297},[199,21784,21785],{"class":1454},"\u002F\u002F调用\n",[199,21787,21788,21790,21792],{"class":201,"line":1310},[199,21789,8261],{"class":1086},[199,21791,8485],{"class":878},[199,21793,4892],{"class":205},[199,21795,21796],{"class":201,"line":1315},[199,21797,4485],{"class":205},[199,21799,21800],{"class":201,"line":1330},[199,21801,21802],{"class":1454},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[199,21804,21805],{"class":201,"line":1335},[199,21806,671],{"class":205},[199,21808,21809,21811,21813],{"class":201,"line":1340},[199,21810,8261],{"class":1086},[199,21812,8554],{"class":878},[199,21814,4892],{"class":205},[199,21816,21817],{"class":201,"line":1352},[199,21818,4485],{"class":205},[199,21820,21821],{"class":201,"line":1367},[199,21822,21823],{"class":1454},"    \u002F\u002F1.括号法\n",[199,21825,21826],{"class":201,"line":1381},[199,21827,21828],{"class":1454},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[199,21830,21831],{"class":201,"line":1396},[199,21832,21833],{"class":1454},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[199,21835,21836],{"class":201,"line":1401},[199,21837,21838],{"class":1454},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[199,21840,21841],{"class":201,"line":1411},[199,21842,21843],{"class":1454},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[199,21845,21846],{"class":201,"line":1421},[199,21847,907],{"emptyLinePlaceholder":906},[199,21849,21850],{"class":201,"line":1426},[199,21851,21852],{"class":1454},"    \u002F\u002F注意事项\n",[199,21854,21855],{"class":201,"line":1436},[199,21856,21857],{"class":1454},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[199,21859,21860],{"class":201,"line":1441},[199,21861,21862],{"class":1454},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[199,21864,21865],{"class":201,"line":1451},[199,21866,21867],{"class":1454},"    \u002F\u002F Person p4();\n",[199,21869,21870],{"class":201,"line":1458},[199,21871,907],{"emptyLinePlaceholder":906},[199,21873,21874],{"class":201,"line":1464},[199,21875,21876],{"class":1454},"    \u002F\u002F2.显示法\n",[199,21878,21879],{"class":201,"line":1478},[199,21880,21881],{"class":205},"    Person p1;\n",[199,21883,21884,21887,21889,21892,21894,21896],{"class":201,"line":1516},[199,21885,21886],{"class":205},"    Person p2",[199,21888,895],{"class":1086},[199,21890,21891],{"class":878},"Person",[199,21893,1537],{"class":205},[199,21895,3528],{"class":1018},[199,21897,5623],{"class":205},[199,21899,21900,21903,21905,21907],{"class":201,"line":1522},[199,21901,21902],{"class":205},"    Person p3",[199,21904,895],{"class":1086},[199,21906,21891],{"class":878},[199,21908,21909],{"class":205},"(p2);\n",[199,21911,21912],{"class":201,"line":1528},[199,21913,21914],{"class":1454},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[199,21916,21917],{"class":201,"line":1557},[199,21918,907],{"emptyLinePlaceholder":906},[199,21920,21921],{"class":201,"line":1563},[199,21922,21923],{"class":1454},"    \u002F\u002F 注意事项2\n",[199,21925,21926],{"class":201,"line":1568},[199,21927,21928],{"class":1454},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[199,21930,21931],{"class":201,"line":1574},[199,21932,21933],{"class":1454},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[199,21935,21936],{"class":201,"line":1580},[199,21937,907],{"emptyLinePlaceholder":906},[199,21939,21940],{"class":201,"line":1597},[199,21941,21942],{"class":1454},"    \u002F\u002F3.隐士转换法\n",[199,21944,21945,21948,21950,21952,21954],{"class":201,"line":1602},[199,21946,21947],{"class":205},"    Person p4",[199,21949,895],{"class":1086},[199,21951,3528],{"class":1018},[199,21953,3149],{"class":205},[199,21955,21956],{"class":1454},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[199,21958,21959,21962,21964,21967],{"class":201,"line":1608},[199,21960,21961],{"class":205},"    Person p5",[199,21963,895],{"class":1086},[199,21965,21966],{"class":205},"p4;",[199,21968,21969],{"class":1454}," \u002F\u002F 这里会调用拷贝构造函数\n",[199,21971,21972],{"class":201,"line":1640},[199,21973,671],{"class":205},[199,21975,21976,21978,21980],{"class":201,"line":1653},[199,21977,3100],{"class":1086},[199,21979,4889],{"class":878},[199,21981,4892],{"class":205},[199,21983,21984],{"class":201,"line":1673},[199,21985,4485],{"class":205},[199,21987,21988,21990],{"class":201,"line":1690},[199,21989,8530],{"class":878},[199,21991,8533],{"class":205},[199,21993,21994,21996],{"class":201,"line":1706},[199,21995,8599],{"class":878},[199,21997,8533],{"class":205},[199,21999,22000,22002,22004],{"class":201,"line":1712},[199,22001,6989],{"class":1086},[199,22003,1621],{"class":1018},[199,22005,1028],{"class":205},[199,22007,22008],{"class":201,"line":1720},[199,22009,671],{"class":205},[31,22011,22012,22015],{},[49,22013,22014],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[19,22017,22019],{"id":22018},"_823拷贝构造函数","8.2.3拷贝构造函数",[31,22021,22022],{},"C++中拷贝构造函数调用时机通常有三种情况",[176,22024,22025,22028,22031],{},[27,22026,22027],{},"使用一个已经创建完毕的对象来初始化一个新对象",[27,22029,22030],{},"值传递的方式给函数参数传值",[27,22032,22033],{},"以值方式返回局部对象",[190,22035,22037],{"className":3086,"code":22036,"language":3088,"meta":57,"style":57},"#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",[196,22038,22039,22045,22055,22059,22064,22068,22073,22078,22083,22089,22093,22097,22103,22107,22120,22124,22129,22141,22145,22153,22166,22170,22174,22190,22194,22203,22216,22220,22226,22230,22242,22246,22252,22256,22260,22268,22272,22285,22293,22311,22315,22320,22325,22340,22344,22357,22361,22369,22373,22377,22385,22389,22394,22403,22407,22411,22436,22446,22450,22458,22462,22473,22498,22502,22506,22510,22518,22522,22527,22532,22539,22544,22549,22554,22559,22563,22568,22572,22577,22581,22586,22591,22595,22599,22604,22609,22617],{"__ignoreMap":57},[199,22040,22041,22043],{"class":201,"line":202},[199,22042,4866],{"class":1086},[199,22044,4869],{"class":898},[199,22046,22047,22049,22051,22053],{"class":201,"line":36},[199,22048,4874],{"class":1086},[199,22050,4877],{"class":1086},[199,22052,4880],{"class":878},[199,22054,1028],{"class":205},[199,22056,22057],{"class":201,"line":73},[199,22058,907],{"emptyLinePlaceholder":906},[199,22060,22061],{"class":201,"line":333},[199,22062,22063],{"class":1454},"\u002F\u002F拷贝构造函数调用时机\n",[199,22065,22066],{"class":201,"line":227},[199,22067,907],{"emptyLinePlaceholder":906},[199,22069,22070],{"class":201,"line":238},[199,22071,22072],{"class":1454},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[199,22074,22075],{"class":201,"line":252},[199,22076,22077],{"class":1454},"\u002F\u002F2.值传递的方式给函数参数传值\n",[199,22079,22080],{"class":201,"line":388},[199,22081,22082],{"class":1454},"\u002F\u002F3.以值方式返回局部对象\n",[199,22084,22085,22087],{"class":201,"line":415},[199,22086,17554],{"class":1086},[199,22088,18030],{"class":878},[199,22090,22091],{"class":201,"line":426},[199,22092,4485],{"class":205},[199,22094,22095],{"class":201,"line":1015},[199,22096,17576],{"class":1086},[199,22098,22099,22101],{"class":201,"line":1031},[199,22100,21364],{"class":878},[199,22102,4892],{"class":205},[199,22104,22105],{"class":201,"line":1043},[199,22106,4946],{"class":205},[199,22108,22109,22111,22113,22116,22118],{"class":201,"line":1049},[199,22110,12551],{"class":205},[199,22112,4117],{"class":1086},[199,22114,22115],{"class":898}," \"Person的默认构造函数调用\"",[199,22117,4384],{"class":1086},[199,22119,11727],{"class":205},[199,22121,22122],{"class":201,"line":1054},[199,22123,2097],{"class":205},[199,22125,22126],{"class":201,"line":1062},[199,22127,22128],{"class":1454},"    \u002F\u002F有参构造\n",[199,22130,22131,22133,22135,22137,22139],{"class":201,"line":1075},[199,22132,21364],{"class":878},[199,22134,1537],{"class":205},[199,22136,3100],{"class":1086},[199,22138,18547],{"class":8113},[199,22140,1594],{"class":205},[199,22142,22143],{"class":201,"line":1092},[199,22144,4946],{"class":205},[199,22146,22147,22149,22151],{"class":201,"line":1107},[199,22148,18601],{"class":205},[199,22150,895],{"class":1086},[199,22152,10694],{"class":205},[199,22154,22155,22157,22159,22162,22164],{"class":201,"line":1128},[199,22156,12551],{"class":205},[199,22158,4117],{"class":1086},[199,22160,22161],{"class":898}," \"Person的有参构造函数调用\"",[199,22163,4384],{"class":1086},[199,22165,11727],{"class":205},[199,22167,22168],{"class":201,"line":1146},[199,22169,2097],{"class":205},[199,22171,22172],{"class":201,"line":1163},[199,22173,21719],{"class":1454},[199,22175,22176,22178,22180,22182,22184,22186,22188],{"class":201,"line":1176},[199,22177,21364],{"class":878},[199,22179,1537],{"class":205},[199,22181,9689],{"class":1086},[199,22183,18428],{"class":878},[199,22185,13447],{"class":1086},[199,22187,31],{"class":8113},[199,22189,1594],{"class":205},[199,22191,22192],{"class":201,"line":1189},[199,22193,4946],{"class":205},[199,22195,22196,22198,22200],{"class":201,"line":1202},[199,22197,18601],{"class":205},[199,22199,895],{"class":1086},[199,22201,22202],{"class":205}," p.m_Age;\n",[199,22204,22205,22207,22209,22212,22214],{"class":201,"line":1207},[199,22206,12551],{"class":205},[199,22208,4117],{"class":1086},[199,22210,22211],{"class":898}," \"Person的拷贝构造函数调用\"",[199,22213,4384],{"class":1086},[199,22215,11727],{"class":205},[199,22217,22218],{"class":201,"line":1212},[199,22219,2097],{"class":205},[199,22221,22222,22224],{"class":201,"line":1225},[199,22223,21397],{"class":878},[199,22225,4892],{"class":205},[199,22227,22228],{"class":201,"line":1236},[199,22229,4946],{"class":205},[199,22231,22232,22234,22236,22238,22240],{"class":201,"line":1249},[199,22233,12551],{"class":205},[199,22235,4117],{"class":1086},[199,22237,21412],{"class":898},[199,22239,4384],{"class":1086},[199,22241,11727],{"class":205},[199,22243,22244],{"class":201,"line":1262},[199,22245,2097],{"class":205},[199,22247,22248,22250],{"class":201,"line":1275},[199,22249,4901],{"class":1086},[199,22251,18524],{"class":205},[199,22253,22254],{"class":201,"line":1287},[199,22255,6894],{"class":205},[199,22257,22258],{"class":201,"line":1292},[199,22259,22072],{"class":1454},[199,22261,22262,22264,22266],{"class":201,"line":1297},[199,22263,8261],{"class":1086},[199,22265,8485],{"class":878},[199,22267,4892],{"class":205},[199,22269,22270],{"class":201,"line":1310},[199,22271,4485],{"class":205},[199,22273,22274,22277,22279,22281,22283],{"class":201,"line":1315},[199,22275,22276],{"class":205},"    Person ",[199,22278,10027],{"class":878},[199,22280,1537],{"class":205},[199,22282,3779],{"class":1018},[199,22284,5623],{"class":205},[199,22286,22287,22289,22291],{"class":201,"line":1330},[199,22288,22276],{"class":205},[199,22290,9930],{"class":878},[199,22292,20360],{"class":205},[199,22294,22295,22297,22299,22302,22304,22307,22309],{"class":201,"line":1335},[199,22296,4490],{"class":205},[199,22298,4117],{"class":1086},[199,22300,22301],{"class":898},"\"P2的年龄为：\"",[199,22303,4117],{"class":1086},[199,22305,22306],{"class":205},"p2.m_Age",[199,22308,4117],{"class":1086},[199,22310,4139],{"class":205},[199,22312,22313],{"class":201,"line":1340},[199,22314,671],{"class":205},[199,22316,22317],{"class":201,"line":1352},[199,22318,22319],{"class":1454},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[199,22321,22322],{"class":201,"line":1367},[199,22323,22324],{"class":1454},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[199,22326,22327,22329,22332,22334,22336,22338],{"class":201,"line":1381},[199,22328,8261],{"class":1086},[199,22330,22331],{"class":878}," doWork",[199,22333,1537],{"class":205},[199,22335,21891],{"class":878},[199,22337,9722],{"class":8113},[199,22339,1594],{"class":205},[199,22341,22342],{"class":201,"line":1396},[199,22343,4485],{"class":205},[199,22345,22346,22348,22350,22353,22355],{"class":201,"line":1401},[199,22347,9426],{"class":205},[199,22349,4117],{"class":1086},[199,22351,22352],{"class":898}," \"doWork函数调用\"",[199,22354,4384],{"class":1086},[199,22356,11727],{"class":205},[199,22358,22359],{"class":201,"line":1411},[199,22360,671],{"class":205},[199,22362,22363,22365,22367],{"class":201,"line":1421},[199,22364,8261],{"class":1086},[199,22366,8554],{"class":878},[199,22368,4892],{"class":205},[199,22370,22371],{"class":201,"line":1426},[199,22372,4485],{"class":205},[199,22374,22375],{"class":201,"line":1436},[199,22376,18172],{"class":205},[199,22378,22379,22382],{"class":201,"line":1441},[199,22380,22381],{"class":878},"    doWork",[199,22383,22384],{"class":205},"(p);\n",[199,22386,22387],{"class":201,"line":1451},[199,22388,671],{"class":205},[199,22390,22391],{"class":201,"line":1458},[199,22392,22393],{"class":1454},"\u002F\u002F 3.以值方式返回局部对象\n",[199,22395,22396,22398,22401],{"class":201,"line":1464},[199,22397,21891],{"class":878},[199,22399,22400],{"class":878}," doWork2",[199,22402,4892],{"class":205},[199,22404,22405],{"class":201,"line":1478},[199,22406,4485],{"class":205},[199,22408,22409],{"class":201,"line":1516},[199,22410,21881],{"class":205},[199,22412,22413,22415,22417,22419,22421,22423,22425,22427,22429,22431,22433],{"class":201,"line":1522},[199,22414,4490],{"class":205},[199,22416,4117],{"class":1086},[199,22418,1537],{"class":205},[199,22420,3100],{"class":1086},[199,22422,9415],{"class":1086},[199,22424,3512],{"class":205},[199,22426,3437],{"class":1086},[199,22428,10027],{"class":205},[199,22430,4117],{"class":1086},[199,22432,4182],{"class":205},[199,22434,22435],{"class":1454},"\u002F\u002F打印p1的地址\n",[199,22437,22438,22440,22443],{"class":201,"line":1528},[199,22439,6989],{"class":1086},[199,22441,22442],{"class":205}," p1;",[199,22444,22445],{"class":1454},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[199,22447,22448],{"class":201,"line":1557},[199,22449,671],{"class":205},[199,22451,22452,22454,22456],{"class":201,"line":1563},[199,22453,8261],{"class":1086},[199,22455,8626],{"class":878},[199,22457,4892],{"class":205},[199,22459,22460],{"class":201,"line":1568},[199,22461,4485],{"class":205},[199,22463,22464,22467,22469,22471],{"class":201,"line":1574},[199,22465,22466],{"class":205},"    Person p ",[199,22468,895],{"class":1086},[199,22470,22400],{"class":878},[199,22472,8533],{"class":205},[199,22474,22475,22477,22479,22481,22483,22485,22487,22489,22491,22493,22495],{"class":201,"line":1580},[199,22476,4490],{"class":205},[199,22478,4117],{"class":1086},[199,22480,1537],{"class":205},[199,22482,3100],{"class":1086},[199,22484,9415],{"class":1086},[199,22486,3512],{"class":205},[199,22488,3437],{"class":1086},[199,22490,31],{"class":205},[199,22492,4117],{"class":1086},[199,22494,4182],{"class":205},[199,22496,22497],{"class":1454},"\u002F\u002F打印p的地址\n",[199,22499,22500],{"class":201,"line":1597},[199,22501,671],{"class":205},[199,22503,22504],{"class":201,"line":1602},[199,22505,907],{"emptyLinePlaceholder":906},[199,22507,22508],{"class":201,"line":1608},[199,22509,907],{"emptyLinePlaceholder":906},[199,22511,22512,22514,22516],{"class":201,"line":1640},[199,22513,3100],{"class":1086},[199,22515,4889],{"class":878},[199,22517,4892],{"class":205},[199,22519,22520],{"class":201,"line":1653},[199,22521,4485],{"class":205},[199,22523,22524],{"class":201,"line":1673},[199,22525,22526],{"class":1454},"    \u002F\u002F test01();\n",[199,22528,22529],{"class":201,"line":1690},[199,22530,22531],{"class":1454},"    \u002F\u002F test02();\n",[199,22533,22534,22537],{"class":201,"line":1706},[199,22535,22536],{"class":878},"    test03",[199,22538,8533],{"class":205},[199,22540,22541],{"class":201,"line":1712},[199,22542,22543],{"class":1454},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[199,22545,22546],{"class":201,"line":1720},[199,22547,22548],{"class":1454},"\u002F\u002F 输出结果如下：\n",[199,22550,22551],{"class":201,"line":1725},[199,22552,22553],{"class":1454},"\u002F\u002F Person的默认构造函数调用\n",[199,22555,22556],{"class":201,"line":1731},[199,22557,22558],{"class":1454},"\u002F\u002F 0x7fffffffceec\n",[199,22560,22561],{"class":201,"line":1745},[199,22562,22558],{"class":1454},[199,22564,22565],{"class":201,"line":1754},[199,22566,22567],{"class":1454},"\u002F\u002F Person的析构函数调用\n",[199,22569,22570],{"class":201,"line":1763},[199,22571,907],{"emptyLinePlaceholder":906},[199,22573,22574],{"class":201,"line":1768},[199,22575,22576],{"class":1454},"\u002F\u002F 之前的输出结果如下：\n",[199,22578,22579],{"class":201,"line":19628},[199,22580,22553],{"class":1454},[199,22582,22583],{"class":201,"line":19641},[199,22584,22585],{"class":1454},"\u002F\u002F 地址\n",[199,22587,22588],{"class":201,"line":19646},[199,22589,22590],{"class":1454},"\u002F\u002F Person的拷贝构造函数调用\n",[199,22592,22593],{"class":201,"line":19660},[199,22594,22567],{"class":1454},[199,22596,22597],{"class":201,"line":19665},[199,22598,22585],{"class":1454},[199,22600,22601],{"class":201,"line":19671},[199,22602,22603],{"class":1454},"\u002F\u002F (这两次输出的地址也是不同的) \n",[199,22605,22606],{"class":201,"line":19676},[199,22607,22608],{"class":1454},"\u002F\u002F Person的析构函数调用     \n",[199,22610,22611,22613,22615],{"class":201,"line":19690},[199,22612,6989],{"class":1086},[199,22614,1621],{"class":1018},[199,22616,1028],{"class":205},[199,22618,22619],{"class":201,"line":19695},[199,22620,671],{"class":205},[31,22622,22623],{},"简化版理解",[190,22625,22627],{"className":3086,"code":22626,"language":3088,"meta":57,"style":57},"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",[196,22628,22629,22637,22641,22647,22660,22671,22675,22687,22700,22708,22712,22728,22741,22750,22754,22759,22765,22778,22782,22786,22793,22797,22801,22806,22814,22818,22834,22847,22860,22864,22869,22877,22881,22885,22890,22895,22911,22919,22926,22932,22936,22940,22945,22953,22957,22961,22984,22991,22995,22999,23007,23011,23021,23043,23047,23051,23055,23063,23067,23072,23077,23083,23087,23097,23101,23109],{"__ignoreMap":57},[199,22630,22631,22633,22635],{"class":201,"line":202},[199,22632,17554],{"class":1086},[199,22634,18428],{"class":878},[199,22636,1012],{"class":205},[199,22638,22639],{"class":201,"line":36},[199,22640,17576],{"class":1086},[199,22642,22643,22645],{"class":201,"line":73},[199,22644,21364],{"class":878},[199,22646,13716],{"class":205},[199,22648,22649,22651,22653,22656,22658],{"class":201,"line":333},[199,22650,12551],{"class":205},[199,22652,4117],{"class":1086},[199,22654,22655],{"class":898}," \"无参构造函数!\"",[199,22657,4384],{"class":1086},[199,22659,11727],{"class":205},[199,22661,22662,22665,22667,22669],{"class":201,"line":227},[199,22663,22664],{"class":205},"        mAge ",[199,22666,895],{"class":1086},[199,22668,1621],{"class":1018},[199,22670,1028],{"class":205},[199,22672,22673],{"class":201,"line":238},[199,22674,2097],{"class":205},[199,22676,22677,22679,22681,22683,22685],{"class":201,"line":252},[199,22678,21364],{"class":878},[199,22680,1537],{"class":205},[199,22682,3100],{"class":1086},[199,22684,18547],{"class":8113},[199,22686,1513],{"class":205},[199,22688,22689,22691,22693,22696,22698],{"class":201,"line":388},[199,22690,12551],{"class":205},[199,22692,4117],{"class":1086},[199,22694,22695],{"class":898}," \"有参构造函数!\"",[199,22697,4384],{"class":1086},[199,22699,11727],{"class":205},[199,22701,22702,22704,22706],{"class":201,"line":415},[199,22703,22664],{"class":205},[199,22705,895],{"class":1086},[199,22707,10694],{"class":205},[199,22709,22710],{"class":201,"line":426},[199,22711,2097],{"class":205},[199,22713,22714,22716,22718,22720,22722,22724,22726],{"class":201,"line":1015},[199,22715,21364],{"class":878},[199,22717,1537],{"class":205},[199,22719,9689],{"class":1086},[199,22721,18428],{"class":878},[199,22723,3437],{"class":1086},[199,22725,9722],{"class":8113},[199,22727,1513],{"class":205},[199,22729,22730,22732,22734,22737,22739],{"class":201,"line":1031},[199,22731,12551],{"class":205},[199,22733,4117],{"class":1086},[199,22735,22736],{"class":898}," \"拷贝构造函数!\"",[199,22738,4384],{"class":1086},[199,22740,11727],{"class":205},[199,22742,22743,22745,22747],{"class":201,"line":1043},[199,22744,22664],{"class":205},[199,22746,895],{"class":1086},[199,22748,22749],{"class":205}," p.mAge;\n",[199,22751,22752],{"class":201,"line":1049},[199,22753,2097],{"class":205},[199,22755,22756],{"class":201,"line":1054},[199,22757,22758],{"class":1454},"    \u002F\u002F析构函数在释放内存之前调用\n",[199,22760,22761,22763],{"class":201,"line":1062},[199,22762,21397],{"class":878},[199,22764,13716],{"class":205},[199,22766,22767,22769,22771,22774,22776],{"class":201,"line":1075},[199,22768,12551],{"class":205},[199,22770,4117],{"class":1086},[199,22772,22773],{"class":898}," \"析构函数!\"",[199,22775,4384],{"class":1086},[199,22777,11727],{"class":205},[199,22779,22780],{"class":201,"line":1092},[199,22781,2097],{"class":205},[199,22783,22784],{"class":201,"line":1107},[199,22785,17576],{"class":1086},[199,22787,22788,22790],{"class":201,"line":1128},[199,22789,4901],{"class":1086},[199,22791,22792],{"class":205}," mAge;\n",[199,22794,22795],{"class":201,"line":1146},[199,22796,6894],{"class":205},[199,22798,22799],{"class":201,"line":1163},[199,22800,907],{"emptyLinePlaceholder":906},[199,22802,22803],{"class":201,"line":1176},[199,22804,22805],{"class":1454},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[199,22807,22808,22810,22812],{"class":201,"line":1189},[199,22809,8261],{"class":1086},[199,22811,8485],{"class":878},[199,22813,13716],{"class":205},[199,22815,22816],{"class":201,"line":1202},[199,22817,907],{"emptyLinePlaceholder":906},[199,22819,22820,22822,22825,22827,22829,22831],{"class":201,"line":1207},[199,22821,22276],{"class":205},[199,22823,22824],{"class":878},"man",[199,22826,1537],{"class":205},[199,22828,3396],{"class":1018},[199,22830,8863],{"class":205},[199,22832,22833],{"class":1454}," \u002F\u002Fp对象已经创建完毕\n",[199,22835,22836,22838,22841,22844],{"class":201,"line":1212},[199,22837,22276],{"class":205},[199,22839,22840],{"class":878},"newman",[199,22842,22843],{"class":205},"(man);",[199,22845,22846],{"class":1454}," \u002F\u002F调用拷贝构造函数\n",[199,22848,22849,22852,22854,22857],{"class":201,"line":1225},[199,22850,22851],{"class":205},"    Person newman2 ",[199,22853,895],{"class":1086},[199,22855,22856],{"class":205}," man;",[199,22858,22859],{"class":1454}," \u002F\u002F拷贝构造\n",[199,22861,22862],{"class":201,"line":1236},[199,22863,907],{"emptyLinePlaceholder":906},[199,22865,22866],{"class":201,"line":1249},[199,22867,22868],{"class":1454},"    \u002F\u002FPerson newman3;\n",[199,22870,22871,22874],{"class":201,"line":1262},[199,22872,22873],{"class":1454},"    \u002F\u002Fnewman3 = man;",[199,22875,22876],{"class":1454}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[199,22878,22879],{"class":201,"line":1275},[199,22880,671],{"class":205},[199,22882,22883],{"class":201,"line":1287},[199,22884,907],{"emptyLinePlaceholder":906},[199,22886,22887],{"class":201,"line":1292},[199,22888,22889],{"class":1454},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[199,22891,22892],{"class":201,"line":1297},[199,22893,22894],{"class":1454},"\u002F\u002F相当于Person p1 = p;\n",[199,22896,22897,22899,22901,22903,22905,22908],{"class":201,"line":1310},[199,22898,8261],{"class":1086},[199,22900,22331],{"class":878},[199,22902,1537],{"class":205},[199,22904,21891],{"class":878},[199,22906,22907],{"class":8113}," p1",[199,22909,22910],{"class":205},") {}\n",[199,22912,22913,22915,22917],{"class":201,"line":1315},[199,22914,8261],{"class":1086},[199,22916,8554],{"class":878},[199,22918,13716],{"class":205},[199,22920,22921,22923],{"class":201,"line":1330},[199,22922,21449],{"class":205},[199,22924,22925],{"class":1454}," \u002F\u002F无参构造函数\n",[199,22927,22928,22930],{"class":201,"line":1335},[199,22929,22381],{"class":878},[199,22931,22384],{"class":205},[199,22933,22934],{"class":201,"line":1340},[199,22935,671],{"class":205},[199,22937,22938],{"class":201,"line":1352},[199,22939,907],{"emptyLinePlaceholder":906},[199,22941,22942],{"class":201,"line":1367},[199,22943,22944],{"class":1454},"\u002F\u002F3. 以值方式返回局部对象\n",[199,22946,22947,22949,22951],{"class":201,"line":1381},[199,22948,21891],{"class":878},[199,22950,22400],{"class":878},[199,22952,4892],{"class":205},[199,22954,22955],{"class":201,"line":1396},[199,22956,4485],{"class":205},[199,22958,22959],{"class":201,"line":1401},[199,22960,21881],{"class":205},[199,22962,22963,22965,22967,22969,22971,22973,22975,22977,22980,22982],{"class":201,"line":1411},[199,22964,9426],{"class":205},[199,22966,4117],{"class":1086},[199,22968,1484],{"class":205},[199,22970,3100],{"class":1086},[199,22972,9415],{"class":1086},[199,22974,3512],{"class":205},[199,22976,3437],{"class":1086},[199,22978,22979],{"class":205},"p1 ",[199,22981,4117],{"class":1086},[199,22983,11727],{"class":205},[199,22985,22986,22988],{"class":201,"line":1421},[199,22987,6989],{"class":1086},[199,22989,22990],{"class":205}," p1;\n",[199,22992,22993],{"class":201,"line":1426},[199,22994,671],{"class":205},[199,22996,22997],{"class":201,"line":1436},[199,22998,907],{"emptyLinePlaceholder":906},[199,23000,23001,23003,23005],{"class":201,"line":1441},[199,23002,8261],{"class":1086},[199,23004,8626],{"class":878},[199,23006,4892],{"class":205},[199,23008,23009],{"class":201,"line":1451},[199,23010,4485],{"class":205},[199,23012,23013,23015,23017,23019],{"class":201,"line":1458},[199,23014,22466],{"class":205},[199,23016,895],{"class":1086},[199,23018,22400],{"class":878},[199,23020,8533],{"class":205},[199,23022,23023,23025,23027,23029,23031,23033,23035,23037,23039,23041],{"class":201,"line":1464},[199,23024,9426],{"class":205},[199,23026,4117],{"class":1086},[199,23028,1484],{"class":205},[199,23030,3100],{"class":1086},[199,23032,9415],{"class":1086},[199,23034,3512],{"class":205},[199,23036,3437],{"class":1086},[199,23038,14311],{"class":205},[199,23040,4117],{"class":1086},[199,23042,11727],{"class":205},[199,23044,23045],{"class":201,"line":1478},[199,23046,671],{"class":205},[199,23048,23049],{"class":201,"line":1516},[199,23050,907],{"emptyLinePlaceholder":906},[199,23052,23053],{"class":201,"line":1522},[199,23054,907],{"emptyLinePlaceholder":906},[199,23056,23057,23059,23061],{"class":201,"line":1528},[199,23058,3100],{"class":1086},[199,23060,4889],{"class":878},[199,23062,13716],{"class":205},[199,23064,23065],{"class":201,"line":1557},[199,23066,907],{"emptyLinePlaceholder":906},[199,23068,23069],{"class":201,"line":1563},[199,23070,23071],{"class":1454},"    \u002F\u002Ftest01();\n",[199,23073,23074],{"class":201,"line":1568},[199,23075,23076],{"class":1454},"    \u002F\u002Ftest02();\n",[199,23078,23079,23081],{"class":201,"line":1574},[199,23080,22536],{"class":878},[199,23082,8533],{"class":205},[199,23084,23085],{"class":201,"line":1580},[199,23086,907],{"emptyLinePlaceholder":906},[199,23088,23089,23091,23093,23095],{"class":201,"line":1597},[199,23090,5217],{"class":878},[199,23092,1537],{"class":205},[199,23094,5222],{"class":898},[199,23096,5623],{"class":205},[199,23098,23099],{"class":201,"line":1602},[199,23100,907],{"emptyLinePlaceholder":906},[199,23102,23103,23105,23107],{"class":201,"line":1608},[199,23104,6989],{"class":1086},[199,23106,1621],{"class":1018},[199,23108,1028],{"class":205},[199,23110,23111],{"class":201,"line":1640},[199,23112,671],{"class":205},[19,23114,23116],{"id":23115},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[31,23118,23119],{},"默认情况下，c++编译器至少给一个类添加3个函数",[31,23121,23122],{},"1．默认构造函数(无参，函数体为空)",[31,23124,23125],{},"2．默认析构函数(无参，函数体为空)",[31,23127,23128],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[31,23130,23131],{},"构造函数调用规则如下：",[176,23133,23134,23137],{},[27,23135,23136],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[27,23138,23139],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[190,23141,23143],{"className":3086,"code":23142,"language":3088,"meta":57,"style":57},"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",[196,23144,23145,23153,23157,23162,23168,23180,23184,23189,23201,23210,23222,23226,23230,23246,23255,23267,23271,23275,23281,23293,23297,23301,23307,23311,23315,23323,23327,23339,23344,23352,23356,23374,23378,23382,23390,23394,23399,23407,23422,23435,23439,23444,23451,23467,23480,23484,23488,23496,23500,23506,23510,23520,23524,23532],{"__ignoreMap":57},[199,23146,23147,23149,23151],{"class":201,"line":202},[199,23148,17554],{"class":1086},[199,23150,18428],{"class":878},[199,23152,1012],{"class":205},[199,23154,23155],{"class":201,"line":36},[199,23156,17576],{"class":1086},[199,23158,23159],{"class":201,"line":73},[199,23160,23161],{"class":1454},"    \u002F\u002F无参（默认）构造函数\n",[199,23163,23164,23166],{"class":201,"line":333},[199,23165,21364],{"class":878},[199,23167,13716],{"class":205},[199,23169,23170,23172,23174,23176,23178],{"class":201,"line":227},[199,23171,12551],{"class":205},[199,23173,4117],{"class":1086},[199,23175,22655],{"class":898},[199,23177,4384],{"class":1086},[199,23179,11727],{"class":205},[199,23181,23182],{"class":201,"line":238},[199,23183,2097],{"class":205},[199,23185,23186],{"class":201,"line":252},[199,23187,23188],{"class":1454},"    \u002F\u002F有参构造函数\n",[199,23190,23191,23193,23195,23197,23199],{"class":201,"line":388},[199,23192,21364],{"class":878},[199,23194,1537],{"class":205},[199,23196,3100],{"class":1086},[199,23198,4338],{"class":8113},[199,23200,1513],{"class":205},[199,23202,23203,23206,23208],{"class":201,"line":415},[199,23204,23205],{"class":205},"        age ",[199,23207,895],{"class":1086},[199,23209,4372],{"class":205},[199,23211,23212,23214,23216,23218,23220],{"class":201,"line":426},[199,23213,12551],{"class":205},[199,23215,4117],{"class":1086},[199,23217,22695],{"class":898},[199,23219,4384],{"class":1086},[199,23221,11727],{"class":205},[199,23223,23224],{"class":201,"line":1015},[199,23225,2097],{"class":205},[199,23227,23228],{"class":201,"line":1031},[199,23229,21719],{"class":1454},[199,23231,23232,23234,23236,23238,23240,23242,23244],{"class":201,"line":1043},[199,23233,21364],{"class":878},[199,23235,1537],{"class":205},[199,23237,9689],{"class":1086},[199,23239,18428],{"class":878},[199,23241,3437],{"class":1086},[199,23243,9722],{"class":8113},[199,23245,1513],{"class":205},[199,23247,23248,23250,23252],{"class":201,"line":1049},[199,23249,23205],{"class":205},[199,23251,895],{"class":1086},[199,23253,23254],{"class":205}," p.age;\n",[199,23256,23257,23259,23261,23263,23265],{"class":201,"line":1054},[199,23258,12551],{"class":205},[199,23260,4117],{"class":1086},[199,23262,22736],{"class":898},[199,23264,4384],{"class":1086},[199,23266,11727],{"class":205},[199,23268,23269],{"class":201,"line":1062},[199,23270,2097],{"class":205},[199,23272,23273],{"class":201,"line":1075},[199,23274,21392],{"class":1454},[199,23276,23277,23279],{"class":201,"line":1092},[199,23278,21397],{"class":878},[199,23280,13716],{"class":205},[199,23282,23283,23285,23287,23289,23291],{"class":201,"line":1107},[199,23284,12551],{"class":205},[199,23286,4117],{"class":1086},[199,23288,22773],{"class":898},[199,23290,4384],{"class":1086},[199,23292,11727],{"class":205},[199,23294,23295],{"class":201,"line":1128},[199,23296,2097],{"class":205},[199,23298,23299],{"class":201,"line":1146},[199,23300,17576],{"class":1086},[199,23302,23303,23305],{"class":201,"line":1163},[199,23304,4901],{"class":1086},[199,23306,10694],{"class":205},[199,23308,23309],{"class":201,"line":1176},[199,23310,6894],{"class":205},[199,23312,23313],{"class":201,"line":1189},[199,23314,907],{"emptyLinePlaceholder":906},[199,23316,23317,23319,23321],{"class":201,"line":1202},[199,23318,8261],{"class":1086},[199,23320,8485],{"class":878},[199,23322,4892],{"class":205},[199,23324,23325],{"class":201,"line":1207},[199,23326,4485],{"class":205},[199,23328,23329,23331,23333,23335,23337],{"class":201,"line":1212},[199,23330,22276],{"class":205},[199,23332,10027],{"class":878},[199,23334,1537],{"class":205},[199,23336,3730],{"class":1018},[199,23338,5623],{"class":205},[199,23340,23341],{"class":201,"line":1225},[199,23342,23343],{"class":1454},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[199,23345,23346,23348,23350],{"class":201,"line":1236},[199,23347,22276],{"class":205},[199,23349,9930],{"class":878},[199,23351,20360],{"class":205},[199,23353,23354],{"class":201,"line":1249},[199,23355,907],{"emptyLinePlaceholder":906},[199,23357,23358,23360,23362,23365,23367,23370,23372],{"class":201,"line":1262},[199,23359,9426],{"class":205},[199,23361,4117],{"class":1086},[199,23363,23364],{"class":898}," \"p2的年龄为： \"",[199,23366,4384],{"class":1086},[199,23368,23369],{"class":205}," p2.age ",[199,23371,4117],{"class":1086},[199,23373,11727],{"class":205},[199,23375,23376],{"class":201,"line":1275},[199,23377,671],{"class":205},[199,23379,23380],{"class":201,"line":1287},[199,23381,907],{"emptyLinePlaceholder":906},[199,23383,23384,23386,23388],{"class":201,"line":1292},[199,23385,8261],{"class":1086},[199,23387,8554],{"class":878},[199,23389,4892],{"class":205},[199,23391,23392],{"class":201,"line":1297},[199,23393,4485],{"class":205},[199,23395,23396],{"class":201,"line":1310},[199,23397,23398],{"class":1454},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[199,23400,23401,23404],{"class":201,"line":1315},[199,23402,23403],{"class":205},"    Person p1;",[199,23405,23406],{"class":1454}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[199,23408,23409,23411,23413,23415,23417,23419],{"class":201,"line":1330},[199,23410,22276],{"class":205},[199,23412,9930],{"class":878},[199,23414,1537],{"class":205},[199,23416,3528],{"class":1018},[199,23418,8863],{"class":205},[199,23420,23421],{"class":1454}," \u002F\u002F用户提供的有参\n",[199,23423,23424,23426,23429,23432],{"class":201,"line":1335},[199,23425,22276],{"class":205},[199,23427,23428],{"class":878},"p3",[199,23430,23431],{"class":205},"(p2);",[199,23433,23434],{"class":1454}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[199,23436,23437],{"class":201,"line":1340},[199,23438,907],{"emptyLinePlaceholder":906},[199,23440,23441],{"class":201,"line":1352},[199,23442,23443],{"class":1454},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[199,23445,23446,23449],{"class":201,"line":1367},[199,23447,23448],{"class":205},"    Person p4;",[199,23450,23406],{"class":1454},[199,23452,23453,23455,23458,23460,23462,23464],{"class":201,"line":1381},[199,23454,22276],{"class":205},[199,23456,23457],{"class":878},"p5",[199,23459,1537],{"class":205},[199,23461,3528],{"class":1018},[199,23463,8863],{"class":205},[199,23465,23466],{"class":1454}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[199,23468,23469,23471,23474,23477],{"class":201,"line":1396},[199,23470,22276],{"class":205},[199,23472,23473],{"class":878},"p6",[199,23475,23476],{"class":205},"(p5);",[199,23478,23479],{"class":1454}," \u002F\u002F用户自己提供拷贝构造\n",[199,23481,23482],{"class":201,"line":1401},[199,23483,671],{"class":205},[199,23485,23486],{"class":201,"line":1411},[199,23487,907],{"emptyLinePlaceholder":906},[199,23489,23490,23492,23494],{"class":201,"line":1421},[199,23491,3100],{"class":1086},[199,23493,4889],{"class":878},[199,23495,13716],{"class":205},[199,23497,23498],{"class":201,"line":1426},[199,23499,907],{"emptyLinePlaceholder":906},[199,23501,23502,23504],{"class":201,"line":1436},[199,23503,8530],{"class":878},[199,23505,8533],{"class":205},[199,23507,23508],{"class":201,"line":1441},[199,23509,907],{"emptyLinePlaceholder":906},[199,23511,23512,23514,23516,23518],{"class":201,"line":1451},[199,23513,5217],{"class":878},[199,23515,1537],{"class":205},[199,23517,5222],{"class":898},[199,23519,5623],{"class":205},[199,23521,23522],{"class":201,"line":1458},[199,23523,907],{"emptyLinePlaceholder":906},[199,23525,23526,23528,23530],{"class":201,"line":1464},[199,23527,6989],{"class":1086},[199,23529,1621],{"class":1018},[199,23531,1028],{"class":205},[199,23533,23534],{"class":201,"line":1478},[199,23535,671],{"class":205},[19,23537,23539],{"id":23538},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[31,23541,23542],{},"浅拷贝：简单的赋值拷贝操作",[31,23544,23545],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[190,23547,23549],{"className":3086,"code":23548,"language":3088,"meta":57,"style":57},"#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",[196,23550,23551,23557,23567,23573,23577,23581,23586,23592,23596,23609,23613,23617,23624,23628,23638,23653,23666,23670,23675,23680,23696,23700,23713,23718,23723,23728,23737,23742,23757,23761,23765,23769,23775,23779,23784,23799,23803,23814,23828,23832,23841,23845,23851,23863,23867,23875,23879,23896,23927,23935,23963,23967,23971,23979,23983,23989],{"__ignoreMap":57},[199,23552,23553,23555],{"class":201,"line":202},[199,23554,4866],{"class":1086},[199,23556,4869],{"class":898},[199,23558,23559,23561,23563,23565],{"class":201,"line":36},[199,23560,4874],{"class":1086},[199,23562,4877],{"class":1086},[199,23564,4880],{"class":878},[199,23566,1028],{"class":205},[199,23568,23569,23571],{"class":201,"line":73},[199,23570,17554],{"class":1086},[199,23572,18030],{"class":878},[199,23574,23575],{"class":201,"line":333},[199,23576,4485],{"class":205},[199,23578,23579],{"class":201,"line":227},[199,23580,17576],{"class":1086},[199,23582,23583],{"class":201,"line":238},[199,23584,23585],{"class":1454},"    \u002F\u002F默认构造函数\n",[199,23587,23588,23590],{"class":201,"line":252},[199,23589,21364],{"class":878},[199,23591,4892],{"class":205},[199,23593,23594],{"class":201,"line":388},[199,23595,4946],{"class":205},[199,23597,23598,23600,23602,23605,23607],{"class":201,"line":415},[199,23599,6352],{"class":205},[199,23601,4117],{"class":1086},[199,23603,23604],{"class":898},"\"默认构造函数\"",[199,23606,4117],{"class":1086},[199,23608,4139],{"class":205},[199,23610,23611],{"class":201,"line":426},[199,23612,2097],{"class":205},[199,23614,23615],{"class":201,"line":1015},[199,23616,23188],{"class":1454},[199,23618,23619,23621],{"class":201,"line":1031},[199,23620,21397],{"class":878},[199,23622,23623],{"class":205},"(int age,int height)\n",[199,23625,23626],{"class":201,"line":1043},[199,23627,4946],{"class":205},[199,23629,23630,23633,23635],{"class":201,"line":1049},[199,23631,23632],{"class":205},"        m_Age",[199,23634,895],{"class":1086},[199,23636,23637],{"class":205},"age;\n",[199,23639,23640,23643,23645,23647,23650],{"class":201,"line":1054},[199,23641,23642],{"class":205},"        m_Height",[199,23644,14580],{"class":1086},[199,23646,5296],{"class":1086},[199,23648,23649],{"class":205},"(height);",[199,23651,23652],{"class":1454},"\u002F\u002F放到堆区\n",[199,23654,23655,23657,23659,23662,23664],{"class":201,"line":1062},[199,23656,6352],{"class":205},[199,23658,4117],{"class":1086},[199,23660,23661],{"class":898},"\"有参构造函数\"",[199,23663,4117],{"class":1086},[199,23665,4139],{"class":205},[199,23667,23668],{"class":201,"line":1075},[199,23669,2097],{"class":205},[199,23671,23672],{"class":201,"line":1092},[199,23673,23674],{"class":1454},"    \u002F\u002F深拷贝解决上述问题\n",[199,23676,23677],{"class":201,"line":1107},[199,23678,23679],{"class":1454},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[199,23681,23682,23684,23686,23688,23690,23692,23694],{"class":201,"line":1128},[199,23683,21364],{"class":878},[199,23685,1537],{"class":205},[199,23687,9689],{"class":1086},[199,23689,18428],{"class":878},[199,23691,13447],{"class":1086},[199,23693,31],{"class":8113},[199,23695,1594],{"class":205},[199,23697,23698],{"class":201,"line":1146},[199,23699,4946],{"class":205},[199,23701,23702,23704,23706,23709,23711],{"class":201,"line":1163},[199,23703,6352],{"class":205},[199,23705,4117],{"class":1086},[199,23707,23708],{"class":898},"\"拷贝构造函数\"",[199,23710,4117],{"class":1086},[199,23712,4139],{"class":205},[199,23714,23715],{"class":201,"line":1176},[199,23716,23717],{"class":1454},"        \u002F\u002F编译器默认的写如下注释部分\n",[199,23719,23720],{"class":201,"line":1189},[199,23721,23722],{"class":1454},"        \u002F\u002Fm_Age=p.m_Age;\n",[199,23724,23725],{"class":201,"line":1202},[199,23726,23727],{"class":1454},"        \u002F\u002Fm_Height=p.m_Height;\n",[199,23729,23730,23732,23734],{"class":201,"line":1207},[199,23731,23632],{"class":205},[199,23733,895],{"class":1086},[199,23735,23736],{"class":205},"p.m_Age;\n",[199,23738,23739],{"class":201,"line":1212},[199,23740,23741],{"class":1454},"        \u002F\u002F深拷贝操作\n",[199,23743,23744,23746,23748,23750,23752,23754],{"class":201,"line":1225},[199,23745,23642],{"class":205},[199,23747,14580],{"class":1086},[199,23749,5296],{"class":1086},[199,23751,1537],{"class":205},[199,23753,3537],{"class":1086},[199,23755,23756],{"class":205},"p.m_Height);\n",[199,23758,23759],{"class":201,"line":1236},[199,23760,2097],{"class":205},[199,23762,23763],{"class":201,"line":1249},[199,23764,907],{"emptyLinePlaceholder":906},[199,23766,23767],{"class":201,"line":1262},[199,23768,21392],{"class":1454},[199,23770,23771,23773],{"class":201,"line":1275},[199,23772,21397],{"class":878},[199,23774,4892],{"class":205},[199,23776,23777],{"class":201,"line":1287},[199,23778,4946],{"class":205},[199,23780,23781],{"class":201,"line":1292},[199,23782,23783],{"class":1454},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[199,23785,23786,23788,23791,23794,23797],{"class":201,"line":1297},[199,23787,2017],{"class":1086},[199,23789,23790],{"class":205},"(m_Height ",[199,23792,23793],{"class":1086},"!=",[199,23795,23796],{"class":1018}," NULL",[199,23798,1594],{"class":205},[199,23800,23801],{"class":201,"line":1310},[199,23802,5422],{"class":205},[199,23804,23805,23808,23811],{"class":201,"line":1315},[199,23806,23807],{"class":1086},"            delete",[199,23809,23810],{"class":205}," m_Height;",[199,23812,23813],{"class":1454}," \u002F\u002F释放堆区内存\n",[199,23815,23816,23819,23821,23823,23825],{"class":201,"line":1330},[199,23817,23818],{"class":205},"            m_Height",[199,23820,895],{"class":1086},[199,23822,5306],{"class":1018},[199,23824,3149],{"class":205},[199,23826,23827],{"class":1454}," \u002F\u002F防止野指针\n",[199,23829,23830],{"class":201,"line":1335},[199,23831,1046],{"class":205},[199,23833,23834,23836,23838],{"class":201,"line":1340},[199,23835,6352],{"class":205},[199,23837,4117],{"class":1086},[199,23839,23840],{"class":898},"\"Person的析构函数调用\"\n",[199,23842,23843],{"class":201,"line":1352},[199,23844,2097],{"class":205},[199,23846,23847,23849],{"class":201,"line":1367},[199,23848,4901],{"class":1086},[199,23850,18524],{"class":205},[199,23852,23853,23855,23857,23860],{"class":201,"line":1381},[199,23854,4901],{"class":1086},[199,23856,9415],{"class":1086},[199,23858,23859],{"class":205},"m_Height;",[199,23861,23862],{"class":1454}," \u002F\u002F定义一个指针，指向身高\n",[199,23864,23865],{"class":201,"line":1396},[199,23866,6894],{"class":205},[199,23868,23869,23871,23873],{"class":201,"line":1401},[199,23870,8261],{"class":1086},[199,23872,8485],{"class":878},[199,23874,4892],{"class":205},[199,23876,23877],{"class":201,"line":1411},[199,23878,4485],{"class":205},[199,23880,23881,23883,23885,23887,23889,23891,23894],{"class":201,"line":1421},[199,23882,22276],{"class":205},[199,23884,10027],{"class":878},[199,23886,1537],{"class":205},[199,23888,3730],{"class":1018},[199,23890,3461],{"class":205},[199,23892,23893],{"class":1018},"160",[199,23895,5623],{"class":205},[199,23897,23898,23900,23902,23905,23907,23910,23912,23915,23917,23920,23922,23924],{"class":201,"line":1426},[199,23899,4490],{"class":205},[199,23901,4117],{"class":1086},[199,23903,23904],{"class":898},"\"p1的年龄为:\"",[199,23906,4117],{"class":1086},[199,23908,23909],{"class":205},"p1.m_Age",[199,23911,4117],{"class":1086},[199,23913,23914],{"class":898},"\"身高为：\"",[199,23916,9316],{"class":1086},[199,23918,23919],{"class":205},"p1.m_Height",[199,23921,4117],{"class":1086},[199,23923,4182],{"class":205},[199,23925,23926],{"class":1454},"  \u002F\u002F18\n",[199,23928,23929,23931,23933],{"class":201,"line":1436},[199,23930,22276],{"class":205},[199,23932,9930],{"class":878},[199,23934,20360],{"class":205},[199,23936,23937,23939,23941,23944,23946,23948,23950,23952,23954,23957,23959,23961],{"class":201,"line":1441},[199,23938,4490],{"class":205},[199,23940,4117],{"class":1086},[199,23942,23943],{"class":898},"\"p2的年龄为：\"",[199,23945,4117],{"class":1086},[199,23947,22306],{"class":205},[199,23949,4117],{"class":1086},[199,23951,23914],{"class":898},[199,23953,9316],{"class":1086},[199,23955,23956],{"class":205},"p2.m_Height",[199,23958,4117],{"class":1086},[199,23960,4182],{"class":205},[199,23962,23926],{"class":1454},[199,23964,23965],{"class":201,"line":1451},[199,23966,16071],{"class":205},[199,23968,23969],{"class":201,"line":1458},[199,23970,671],{"class":205},[199,23972,23973,23975,23977],{"class":201,"line":1464},[199,23974,3100],{"class":1086},[199,23976,4889],{"class":878},[199,23978,4892],{"class":205},[199,23980,23981],{"class":201,"line":1478},[199,23982,4485],{"class":205},[199,23984,23985,23987],{"class":201,"line":1516},[199,23986,8530],{"class":878},[199,23988,8533],{"class":205},[199,23990,23991],{"class":201,"line":1522},[199,23992,671],{"class":205},[31,23994,23995],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[31,23997,23998],{},"浅拷贝带来的问题是堆区的内存重复释放",[31,24000,24001],{},[55,24002],{"alt":57,"src":24003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[31,24005,24006],{},"浅拷贝问题要使用深拷贝来解决",[31,24008,24009],{},[55,24010],{"alt":57,"src":24011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[31,24013,24014],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[19,24016,24018],{"id":24017},"_826初始化列表","8.2.6初始化列表",[31,24020,24021],{},"作用：初始化属性",[31,24023,8078],{},[190,24025,24028],{"className":24026,"code":24027,"language":8084},[8082],"构造函数():属性1(值1),属性2(值2).....{}\n",[196,24029,24027],{"__ignoreMap":57},[31,24031,24032],{},"例子",[190,24034,24036],{"className":3086,"code":24035,"language":3088,"meta":57,"style":57},"#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",[196,24037,24038,24044,24054,24060,24064,24069,24073,24078,24083,24088,24093,24098,24103,24107,24112,24117,24160,24169,24187,24205,24223,24227,24231,24238,24245,24252,24256,24260,24268,24272,24276,24296,24305,24309,24313,24323,24327,24335],{"__ignoreMap":57},[199,24039,24040,24042],{"class":201,"line":202},[199,24041,4866],{"class":1086},[199,24043,4869],{"class":898},[199,24045,24046,24048,24050,24052],{"class":201,"line":36},[199,24047,4874],{"class":1086},[199,24049,4877],{"class":1086},[199,24051,4880],{"class":878},[199,24053,1028],{"class":205},[199,24055,24056,24058],{"class":201,"line":73},[199,24057,17554],{"class":1086},[199,24059,18030],{"class":878},[199,24061,24062],{"class":201,"line":333},[199,24063,4485],{"class":205},[199,24065,24066],{"class":201,"line":227},[199,24067,24068],{"class":1086},"    public:\n",[199,24070,24071],{"class":201,"line":238},[199,24072,907],{"emptyLinePlaceholder":906},[199,24074,24075],{"class":201,"line":252},[199,24076,24077],{"class":1454},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[199,24079,24080],{"class":201,"line":388},[199,24081,24082],{"class":1454},"    \u002F\u002FPerson(int a, int b, int c) {\n",[199,24084,24085],{"class":201,"line":415},[199,24086,24087],{"class":1454},"    \u002F\u002F  m_A = a;\n",[199,24089,24090],{"class":201,"line":426},[199,24091,24092],{"class":1454},"    \u002F\u002F  m_B = b;\n",[199,24094,24095],{"class":201,"line":1015},[199,24096,24097],{"class":1454},"    \u002F\u002F  m_C = c;\n",[199,24099,24100],{"class":201,"line":1031},[199,24101,24102],{"class":1454},"    \u002F\u002F}\n",[199,24104,24105],{"class":201,"line":1043},[199,24106,907],{"emptyLinePlaceholder":906},[199,24108,24109],{"class":201,"line":1049},[199,24110,24111],{"class":1454},"    \u002F\u002F初始化列表方式初始化\n",[199,24113,24114],{"class":201,"line":1054},[199,24115,24116],{"class":1454},"    \u002F\u002F使用有参构造函数\n",[199,24118,24119,24121,24123,24125,24127,24129,24131,24133,24135,24137,24139,24142,24145,24148,24151,24154,24157],{"class":201,"line":1062},[199,24120,21364],{"class":878},[199,24122,1537],{"class":205},[199,24124,3100],{"class":1086},[199,24126,4338],{"class":8113},[199,24128,1912],{"class":205},[199,24130,3100],{"class":1086},[199,24132,5737],{"class":8113},[199,24134,1912],{"class":205},[199,24136,3100],{"class":1086},[199,24138,5753],{"class":8113},[199,24140,24141],{"class":205},") :",[199,24143,24144],{"class":878},"m_A",[199,24146,24147],{"class":205},"(a), ",[199,24149,24150],{"class":878},"m_B",[199,24152,24153],{"class":205},"(b), ",[199,24155,24156],{"class":878},"m_C",[199,24158,24159],{"class":205},"(c) {}\n",[199,24161,24162,24164,24167],{"class":201,"line":1075},[199,24163,17769],{"class":1086},[199,24165,24166],{"class":878}," PrintPerson",[199,24168,13716],{"class":205},[199,24170,24171,24173,24175,24178,24180,24183,24185],{"class":201,"line":1092},[199,24172,12551],{"class":205},[199,24174,4117],{"class":1086},[199,24176,24177],{"class":898}," \"mA:\"",[199,24179,4384],{"class":1086},[199,24181,24182],{"class":205}," m_A ",[199,24184,4117],{"class":1086},[199,24186,11727],{"class":205},[199,24188,24189,24191,24193,24196,24198,24201,24203],{"class":201,"line":1107},[199,24190,12551],{"class":205},[199,24192,4117],{"class":1086},[199,24194,24195],{"class":898}," \"mB:\"",[199,24197,4384],{"class":1086},[199,24199,24200],{"class":205}," m_B ",[199,24202,4117],{"class":1086},[199,24204,11727],{"class":205},[199,24206,24207,24209,24211,24214,24216,24219,24221],{"class":201,"line":1128},[199,24208,12551],{"class":205},[199,24210,4117],{"class":1086},[199,24212,24213],{"class":898}," \"mC:\"",[199,24215,4384],{"class":1086},[199,24217,24218],{"class":205}," m_C ",[199,24220,4117],{"class":1086},[199,24222,11727],{"class":205},[199,24224,24225],{"class":201,"line":1146},[199,24226,2097],{"class":205},[199,24228,24229],{"class":201,"line":1163},[199,24230,18081],{"class":1086},[199,24232,24233,24235],{"class":201,"line":1176},[199,24234,4901],{"class":1086},[199,24236,24237],{"class":205}," m_A;\n",[199,24239,24240,24242],{"class":201,"line":1189},[199,24241,4901],{"class":1086},[199,24243,24244],{"class":205}," m_B;\n",[199,24246,24247,24249],{"class":201,"line":1202},[199,24248,4901],{"class":1086},[199,24250,24251],{"class":205}," m_C;\n",[199,24253,24254],{"class":201,"line":1207},[199,24255,6894],{"class":205},[199,24257,24258],{"class":201,"line":1212},[199,24259,907],{"emptyLinePlaceholder":906},[199,24261,24262,24264,24266],{"class":201,"line":1225},[199,24263,3100],{"class":1086},[199,24265,4889],{"class":878},[199,24267,8875],{"class":205},[199,24269,24270],{"class":201,"line":1236},[199,24271,4485],{"class":205},[199,24273,24274],{"class":201,"line":1249},[199,24275,907],{"emptyLinePlaceholder":906},[199,24277,24278,24280,24282,24284,24286,24288,24290,24292,24294],{"class":201,"line":1262},[199,24279,22276],{"class":205},[199,24281,31],{"class":878},[199,24283,1537],{"class":205},[199,24285,1115],{"class":1018},[199,24287,1912],{"class":205},[199,24289,1925],{"class":1018},[199,24291,1912],{"class":205},[199,24293,1920],{"class":1018},[199,24295,5623],{"class":205},[199,24297,24298,24300,24303],{"class":201,"line":1275},[199,24299,18724],{"class":205},[199,24301,24302],{"class":878},"PrintPerson",[199,24304,8533],{"class":205},[199,24306,24307],{"class":201,"line":1287},[199,24308,907],{"emptyLinePlaceholder":906},[199,24310,24311],{"class":201,"line":1292},[199,24312,907],{"emptyLinePlaceholder":906},[199,24314,24315,24317,24319,24321],{"class":201,"line":1297},[199,24316,5217],{"class":878},[199,24318,1537],{"class":205},[199,24320,5222],{"class":898},[199,24322,5623],{"class":205},[199,24324,24325],{"class":201,"line":1310},[199,24326,907],{"emptyLinePlaceholder":906},[199,24328,24329,24331,24333],{"class":201,"line":1315},[199,24330,6989],{"class":1086},[199,24332,1621],{"class":1018},[199,24334,1028],{"class":205},[199,24336,24337],{"class":201,"line":1330},[199,24338,671],{"class":205},[31,24340,24341,24342,24345,24346],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[49,24343,24344],{},"参数名就是定义的对象属性","，",[49,24347,24348],{},"属性后面的值为有参构造函数的形参",[190,24350,24352],{"className":3086,"code":24351,"language":3088,"meta":57,"style":57},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[196,24353,24354],{"__ignoreMap":57},[199,24355,24356,24358,24360,24362,24365,24367,24370,24372,24375,24377,24380,24382,24385,24387],{"class":201,"line":202},[199,24357,21891],{"class":878},[199,24359,1537],{"class":205},[199,24361,3100],{"class":1086},[199,24363,24364],{"class":205}," a.",[199,24366,3100],{"class":1086},[199,24368,24369],{"class":205}," b,",[199,24371,3100],{"class":1086},[199,24373,24374],{"class":205}," b):",[199,24376,24144],{"class":878},[199,24378,24379],{"class":205},"(a),",[199,24381,24150],{"class":878},[199,24383,24384],{"class":205},"(c),",[199,24386,24156],{"class":878},[199,24388,24389],{"class":205},"(b) {}\n",[19,24391,24393],{"id":24392},"_827类对象作为类成员","8.2.7类对象作为类成员",[31,24395,24396],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[31,24398,2323],{},[190,24400,24402],{"className":3086,"code":24401,"language":3088,"meta":57,"style":57},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[196,24403,24404,24409,24414,24418,24423,24427],{"__ignoreMap":57},[199,24405,24406],{"class":201,"line":202},[199,24407,24408],{"class":205},"A{};\n",[199,24410,24411],{"class":201,"line":36},[199,24412,24413],{"class":205},"B\n",[199,24415,24416],{"class":201,"line":73},[199,24417,4485],{"class":205},[199,24419,24420],{"class":201,"line":333},[199,24421,24422],{"class":205},"    A a;\n",[199,24424,24425],{"class":201,"line":227},[199,24426,671],{"class":205},[199,24428,24429],{"class":201,"line":238},[199,24430,24431],{"class":1454},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[31,24433,24434],{},"案例",[190,24436,24438],{"className":3086,"code":24437,"language":3088,"meta":57,"style":57},"\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",[196,24439,24440,24445,24452,24456,24461,24466,24480,24484,24494,24505,24509,24516,24520,24533,24537,24542,24547,24551,24557,24561,24565,24569,24600,24604,24615,24619,24625,24629,24642,24646,24650,24654,24659,24664,24668,24676,24680,24697,24716,24720,24728,24732,24738],{"__ignoreMap":57},[199,24441,24442],{"class":201,"line":202},[199,24443,24444],{"class":1454},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[199,24446,24447,24449],{"class":201,"line":36},[199,24448,17554],{"class":1086},[199,24450,24451],{"class":878}," Phone\n",[199,24453,24454],{"class":201,"line":73},[199,24455,4485],{"class":205},[199,24457,24458],{"class":201,"line":333},[199,24459,24460],{"class":205},"public：\n",[199,24462,24463],{"class":201,"line":227},[199,24464,24465],{"class":1454},"    \u002F\u002F 赋值(构造函数)\n",[199,24467,24468,24471,24473,24475,24478],{"class":201,"line":238},[199,24469,24470],{"class":878},"    Phone",[199,24472,1537],{"class":205},[199,24474,17777],{"class":878},[199,24476,24477],{"class":8113}," pName",[199,24479,1594],{"class":205},[199,24481,24482],{"class":201,"line":252},[199,24483,4946],{"class":205},[199,24485,24486,24489,24491],{"class":201,"line":388},[199,24487,24488],{"class":205},"        m_pName",[199,24490,895],{"class":1086},[199,24492,24493],{"class":205},"pName;\n",[199,24495,24496,24498,24500,24503],{"class":201,"line":415},[199,24497,6352],{"class":205},[199,24499,4117],{"class":1086},[199,24501,24502],{"class":898},"\"Phone的构造函数调用\"",[199,24504,1028],{"class":205},[199,24506,24507],{"class":201,"line":426},[199,24508,2097],{"class":205},[199,24510,24511,24514],{"class":201,"line":1015},[199,24512,24513],{"class":878},"    ~Phone",[199,24515,4892],{"class":205},[199,24517,24518],{"class":201,"line":1031},[199,24519,4946],{"class":205},[199,24521,24522,24524,24526,24529,24531],{"class":201,"line":1043},[199,24523,6352],{"class":205},[199,24525,4117],{"class":1086},[199,24527,24528],{"class":898},"\"Phone析构函数调用\"",[199,24530,4117],{"class":1086},[199,24532,4139],{"class":205},[199,24534,24535],{"class":201,"line":1049},[199,24536,2097],{"class":205},[199,24538,24539],{"class":201,"line":1054},[199,24540,24541],{"class":1454},"    \u002F\u002F\n",[199,24543,24544],{"class":201,"line":1062},[199,24545,24546],{"class":205},"    string m_PName;\n",[199,24548,24549],{"class":201,"line":1075},[199,24550,6894],{"class":205},[199,24552,24553,24555],{"class":201,"line":1092},[199,24554,17554],{"class":1086},[199,24556,18030],{"class":878},[199,24558,24559],{"class":201,"line":1107},[199,24560,4485],{"class":205},[199,24562,24563],{"class":201,"line":1128},[199,24564,17576],{"class":1086},[199,24566,24567],{"class":201,"line":1146},[199,24568,19839],{"class":1454},[199,24570,24571,24573,24575,24577,24579,24581,24583,24586,24589,24591,24594,24597],{"class":201,"line":1163},[199,24572,21364],{"class":878},[199,24574,1537],{"class":205},[199,24576,17777],{"class":878},[199,24578,967],{"class":8113},[199,24580,3461],{"class":205},[199,24582,17777],{"class":878},[199,24584,24585],{"class":8113}," pname",[199,24587,24588],{"class":205},"):",[199,24590,17869],{"class":878},[199,24592,24593],{"class":205},"(name),m_phone.",[199,24595,24596],{"class":878},"m_PName",[199,24598,24599],{"class":205},"(pname) \n",[199,24601,24602],{"class":201,"line":1176},[199,24603,4946],{"class":205},[199,24605,24606,24608,24610,24613],{"class":201,"line":1189},[199,24607,6352],{"class":205},[199,24609,4117],{"class":1086},[199,24611,24612],{"class":898},"\"Person的构造函数调用\"",[199,24614,1028],{"class":205},[199,24616,24617],{"class":201,"line":1202},[199,24618,2097],{"class":205},[199,24620,24621,24623],{"class":201,"line":1207},[199,24622,21397],{"class":878},[199,24624,4892],{"class":205},[199,24626,24627],{"class":201,"line":1212},[199,24628,4946],{"class":205},[199,24630,24631,24633,24635,24638,24640],{"class":201,"line":1225},[199,24632,6352],{"class":205},[199,24634,4117],{"class":1086},[199,24636,24637],{"class":898},"\"Person析构函数调用\"",[199,24639,4117],{"class":1086},[199,24641,4139],{"class":205},[199,24643,24644],{"class":201,"line":1236},[199,24645,2097],{"class":205},[199,24647,24648],{"class":201,"line":1249},[199,24649,10677],{"class":1454},[199,24651,24652],{"class":201,"line":1262},[199,24653,17752],{"class":205},[199,24655,24656],{"class":201,"line":1275},[199,24657,24658],{"class":1454},"    \u002F\u002F手机\n",[199,24660,24661],{"class":201,"line":1287},[199,24662,24663],{"class":205},"    Phone m_Phone;\n",[199,24665,24666],{"class":201,"line":1292},[199,24667,6894],{"class":205},[199,24669,24670,24672,24674],{"class":201,"line":1297},[199,24671,8261],{"class":1086},[199,24673,8485],{"class":878},[199,24675,4892],{"class":205},[199,24677,24678],{"class":201,"line":1310},[199,24679,4485],{"class":205},[199,24681,24682,24684,24686,24688,24690,24692,24695],{"class":201,"line":1315},[199,24683,22276],{"class":205},[199,24685,31],{"class":878},[199,24687,1537],{"class":205},[199,24689,10813],{"class":898},[199,24691,3461],{"class":205},[199,24693,24694],{"class":898},"\"安卓\"",[199,24696,5623],{"class":205},[199,24698,24699,24701,24703,24706,24708,24711,24713],{"class":201,"line":1330},[199,24700,4490],{"class":205},[199,24702,4117],{"class":1086},[199,24704,24705],{"class":205},"p.Name",[199,24707,4117],{"class":1086},[199,24709,24710],{"class":898},"\"拿着：\"",[199,24712,4117],{"class":1086},[199,24714,24715],{"class":205},"p.m_phone.m_PName;\n",[199,24717,24718],{"class":201,"line":1335},[199,24719,671],{"class":205},[199,24721,24722,24724,24726],{"class":201,"line":1340},[199,24723,3100],{"class":1086},[199,24725,4889],{"class":878},[199,24727,4892],{"class":205},[199,24729,24730],{"class":201,"line":1352},[199,24731,4485],{"class":205},[199,24733,24734,24736],{"class":201,"line":1367},[199,24735,8530],{"class":878},[199,24737,8533],{"class":205},[199,24739,24740],{"class":201,"line":1381},[199,24741,671],{"class":205},[31,24743,11912],{},[190,24745,24747],{"className":3086,"code":24746,"language":3088,"meta":57,"style":57},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[196,24748,24749,24754],{"__ignoreMap":57},[199,24750,24751],{"class":201,"line":202},[199,24752,24753],{"class":1454},"    \u002F\u002F不需要写这个：\n",[199,24755,24756],{"class":201,"line":36},[199,24757,24758],{"class":1454},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[31,24760,24761],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[190,24763,24765],{"className":3086,"code":24764,"language":3088,"meta":57,"style":57},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[196,24766,24767],{"__ignoreMap":57},[199,24768,24769,24771,24774,24776,24779,24782],{"class":201,"line":202},[199,24770,21891],{"class":878},[199,24772,24773],{"class":205},"(string name.string pname):",[199,24775,17869],{"class":878},[199,24777,24778],{"class":205},"(name),",[199,24780,24781],{"class":878},"m_phone",[199,24783,24784],{"class":205},"(pname) {}\n",[31,24786,24787,24788,895,24791],{},"采用的是隐式转换法，实际为如下：\n",[196,24789,24790],{},"m_phone(pname)",[196,24792,24793],{},"Phone m_phone=pname",[31,24795,24796,24799],{},[49,24797,24798],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[31,24801,24802],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[19,24804,24806],{"id":24805},"_828静态对象","8.2.8静态对象",[31,24808,24809],{},"静态对象在成员对象前static，称为静态对象",[31,24811,24812],{},"静态对象分为两类：",[24,24814,24815],{},[27,24816,24817],{},"静态成员变量",[176,24819,24820,24823,24826],{},[27,24821,24822],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[27,24824,24825],{},"②在编译阶段分配内存",[27,24827,24828],{},"③类内声明，类外初始化",[24,24830,24831],{"start":36},[27,24832,24833],{},"静态成员函数",[176,24835,24836,24839],{},[27,24837,24838],{},"①所有对象共享同一个函数",[27,24840,24841],{},"②静态成员函数只能访问静态成员变量",[627,24843,24845],{"id":24844},"_8281静态成员变量","8.2.8.1静态成员变量",[190,24847,24849],{"className":3086,"code":24848,"language":3088,"meta":57,"style":57},"#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",[196,24850,24851,24857,24867,24873,24877,24881,24886,24891,24896,24904,24908,24912,24916,24924,24928,24932,24937,24950,24954,24962,24966,24972],{"__ignoreMap":57},[199,24852,24853,24855],{"class":201,"line":202},[199,24854,4866],{"class":1086},[199,24856,4869],{"class":898},[199,24858,24859,24861,24863,24865],{"class":201,"line":36},[199,24860,4874],{"class":1086},[199,24862,4877],{"class":1086},[199,24864,4880],{"class":878},[199,24866,1028],{"class":205},[199,24868,24869,24871],{"class":201,"line":73},[199,24870,17554],{"class":1086},[199,24872,18030],{"class":878},[199,24874,24875],{"class":201,"line":333},[199,24876,4485],{"class":205},[199,24878,24879],{"class":201,"line":227},[199,24880,17576],{"class":1086},[199,24882,24883],{"class":201,"line":238},[199,24884,24885],{"class":1454},"    \u002F\u002F非静态成员变量\n",[199,24887,24888],{"class":201,"line":252},[199,24889,24890],{"class":1454},"    \u002F\u002F int m_A;\n",[199,24892,24893],{"class":201,"line":388},[199,24894,24895],{"class":1454},"    \u002F\u002F定义静态成员变量\n",[199,24897,24898,24900,24902],{"class":201,"line":415},[199,24899,13883],{"class":1086},[199,24901,5296],{"class":1086},[199,24903,24237],{"class":205},[199,24905,24906],{"class":201,"line":426},[199,24907,907],{"emptyLinePlaceholder":906},[199,24909,24910],{"class":201,"line":1015},[199,24911,907],{"emptyLinePlaceholder":906},[199,24913,24914],{"class":201,"line":1031},[199,24915,6894],{"class":205},[199,24917,24918,24920,24922],{"class":201,"line":1043},[199,24919,8261],{"class":1086},[199,24921,8485],{"class":878},[199,24923,4892],{"class":205},[199,24925,24926],{"class":201,"line":1049},[199,24927,4485],{"class":205},[199,24929,24930],{"class":201,"line":1054},[199,24931,18172],{"class":205},[199,24933,24934],{"class":201,"line":1062},[199,24935,24936],{"class":1454},"    \u002F\u002F输出类成员变量这块内存\n",[199,24938,24939,24941,24943,24946,24948],{"class":201,"line":1075},[199,24940,4490],{"class":205},[199,24942,4117],{"class":1086},[199,24944,24945],{"class":205},"p.m_A",[199,24947,4117],{"class":1086},[199,24949,4139],{"class":205},[199,24951,24952],{"class":201,"line":1092},[199,24953,671],{"class":205},[199,24955,24956,24958,24960],{"class":201,"line":1107},[199,24957,3100],{"class":1086},[199,24959,4889],{"class":878},[199,24961,4892],{"class":205},[199,24963,24964],{"class":201,"line":1128},[199,24965,4485],{"class":205},[199,24967,24968,24970],{"class":201,"line":1146},[199,24969,8530],{"class":878},[199,24971,4892],{"class":205},[199,24973,24974],{"class":201,"line":1163},[199,24975,671],{"class":205},[31,24977,24978],{},"此时输出是报错的：无法解析外部命令",[31,24980,24981],{},"解决这一问题：必须用到类内声明，类外初始化操作",[190,24983,24985],{"className":3086,"code":24984,"language":3088,"meta":57,"style":57},"#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",[196,24986,24987,24993,25003,25009,25013,25017,25022,25030,25034,25039,25054,25062,25066,25070,25075,25080,25092,25097,25108,25113,25118,25131,25135,25143,25147,25153],{"__ignoreMap":57},[199,24988,24989,24991],{"class":201,"line":202},[199,24990,4866],{"class":1086},[199,24992,4869],{"class":898},[199,24994,24995,24997,24999,25001],{"class":201,"line":36},[199,24996,4874],{"class":1086},[199,24998,4877],{"class":1086},[199,25000,4880],{"class":878},[199,25002,1028],{"class":205},[199,25004,25005,25007],{"class":201,"line":73},[199,25006,17554],{"class":1086},[199,25008,18030],{"class":878},[199,25010,25011],{"class":201,"line":333},[199,25012,4485],{"class":205},[199,25014,25015],{"class":201,"line":227},[199,25016,17576],{"class":1086},[199,25018,25019],{"class":201,"line":238},[199,25020,25021],{"class":1454},"    \u002F\u002F类内声明\n",[199,25023,25024,25026,25028],{"class":201,"line":252},[199,25025,13883],{"class":1086},[199,25027,5296],{"class":1086},[199,25029,24237],{"class":205},[199,25031,25032],{"class":201,"line":388},[199,25033,6894],{"class":205},[199,25035,25036],{"class":201,"line":415},[199,25037,25038],{"class":1454},"\u002F\u002F类外初始化\n",[199,25040,25041,25043,25045,25048,25050,25052],{"class":201,"line":426},[199,25042,3100],{"class":1086},[199,25044,18428],{"class":878},[199,25046,25047],{"class":205},"::m_A",[199,25049,895],{"class":1086},[199,25051,3528],{"class":1018},[199,25053,1028],{"class":205},[199,25055,25056,25058,25060],{"class":201,"line":1015},[199,25057,8261],{"class":1086},[199,25059,8485],{"class":878},[199,25061,4892],{"class":205},[199,25063,25064],{"class":201,"line":1031},[199,25065,4485],{"class":205},[199,25067,25068],{"class":201,"line":1043},[199,25069,18172],{"class":205},[199,25071,25072],{"class":201,"line":1049},[199,25073,25074],{"class":1454},"    \u002F\u002F访问变量的原内存空间\n",[199,25076,25077],{"class":201,"line":1054},[199,25078,25079],{"class":1454},"    \u002F\u002F100\n",[199,25081,25082,25084,25086,25088,25090],{"class":201,"line":1062},[199,25083,4490],{"class":205},[199,25085,4117],{"class":1086},[199,25087,24945],{"class":205},[199,25089,4117],{"class":1086},[199,25091,4139],{"class":205},[199,25093,25094],{"class":201,"line":1075},[199,25095,25096],{"class":205},"    Person p2;\n",[199,25098,25099,25102,25104,25106],{"class":201,"line":1092},[199,25100,25101],{"class":205},"    p2.m_A",[199,25103,895],{"class":1086},[199,25105,4647],{"class":1018},[199,25107,1028],{"class":205},[199,25109,25110],{"class":201,"line":1107},[199,25111,25112],{"class":1454},"    \u002F\u002F继续访问这片空间\n",[199,25114,25115],{"class":201,"line":1128},[199,25116,25117],{"class":1454},"    \u002F\u002F200\n",[199,25119,25120,25122,25124,25127,25129],{"class":201,"line":1146},[199,25121,4490],{"class":205},[199,25123,4117],{"class":1086},[199,25125,25126],{"class":205},"p2.m_A",[199,25128,4117],{"class":1086},[199,25130,4139],{"class":205},[199,25132,25133],{"class":201,"line":1163},[199,25134,671],{"class":205},[199,25136,25137,25139,25141],{"class":201,"line":1176},[199,25138,3100],{"class":1086},[199,25140,4889],{"class":878},[199,25142,4892],{"class":205},[199,25144,25145],{"class":201,"line":1189},[199,25146,4485],{"class":205},[199,25148,25149,25151],{"class":201,"line":1202},[199,25150,8530],{"class":878},[199,25152,8533],{"class":205},[199,25154,25155],{"class":201,"line":1207},[199,25156,671],{"class":205},[31,25158,25159],{},[49,25160,25161],{},"静态变量的访问",[190,25163,25165],{"className":3086,"code":25164,"language":3088,"meta":57,"style":57},"#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",[196,25166,25167,25173,25183,25189,25193,25197,25201,25209,25213,25218,25226,25230,25234,25248,25263,25271,25275,25280,25285,25290,25295,25307,25312,25317,25331,25348,25352,25360,25364,25370],{"__ignoreMap":57},[199,25168,25169,25171],{"class":201,"line":202},[199,25170,4866],{"class":1086},[199,25172,4869],{"class":898},[199,25174,25175,25177,25179,25181],{"class":201,"line":36},[199,25176,4874],{"class":1086},[199,25178,4877],{"class":1086},[199,25180,4880],{"class":878},[199,25182,1028],{"class":205},[199,25184,25185,25187],{"class":201,"line":73},[199,25186,17554],{"class":1086},[199,25188,18030],{"class":878},[199,25190,25191],{"class":201,"line":333},[199,25192,4485],{"class":205},[199,25194,25195],{"class":201,"line":227},[199,25196,17576],{"class":1086},[199,25198,25199],{"class":201,"line":238},[199,25200,25021],{"class":1454},[199,25202,25203,25205,25207],{"class":201,"line":252},[199,25204,13883],{"class":1086},[199,25206,5296],{"class":1086},[199,25208,24237],{"class":205},[199,25210,25211],{"class":201,"line":388},[199,25212,18081],{"class":1086},[199,25214,25215],{"class":201,"line":415},[199,25216,25217],{"class":1454},"    \u002F\u002F静态成员变量也是有访问权限的\n",[199,25219,25220,25222,25224],{"class":201,"line":426},[199,25221,13883],{"class":1086},[199,25223,5296],{"class":1086},[199,25225,24244],{"class":205},[199,25227,25228],{"class":201,"line":1015},[199,25229,6894],{"class":205},[199,25231,25232],{"class":201,"line":1031},[199,25233,25038],{"class":1454},[199,25235,25236,25238,25240,25242,25244,25246],{"class":201,"line":1043},[199,25237,3100],{"class":1086},[199,25239,18428],{"class":878},[199,25241,25047],{"class":205},[199,25243,895],{"class":1086},[199,25245,3528],{"class":1018},[199,25247,1028],{"class":205},[199,25249,25250,25252,25254,25257,25259,25261],{"class":201,"line":1049},[199,25251,3100],{"class":1086},[199,25253,18428],{"class":878},[199,25255,25256],{"class":205},"::m_B",[199,25258,895],{"class":1086},[199,25260,3779],{"class":1018},[199,25262,1028],{"class":205},[199,25264,25265,25267,25269],{"class":201,"line":1054},[199,25266,8261],{"class":1086},[199,25268,8554],{"class":878},[199,25270,4892],{"class":205},[199,25272,25273],{"class":201,"line":1062},[199,25274,4485],{"class":205},[199,25276,25277],{"class":201,"line":1075},[199,25278,25279],{"class":1454},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[199,25281,25282],{"class":201,"line":1092},[199,25283,25284],{"class":1454},"    \u002F\u002F静态成员变量有两种访问方式：\n",[199,25286,25287],{"class":201,"line":1107},[199,25288,25289],{"class":1454},"    \u002F\u002F1.通过对象进行访问\n",[199,25291,25292],{"class":201,"line":1128},[199,25293,25294],{"class":205},"    Person p;  \n",[199,25296,25297,25299,25301,25303,25305],{"class":201,"line":1146},[199,25298,4490],{"class":205},[199,25300,4117],{"class":1086},[199,25302,24945],{"class":205},[199,25304,4117],{"class":1086},[199,25306,4139],{"class":205},[199,25308,25309],{"class":201,"line":1163},[199,25310,25311],{"class":1454},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[199,25313,25314],{"class":201,"line":1176},[199,25315,25316],{"class":1454},"    \u002F\u002F2.通过类名进行访问\n",[199,25318,25319,25321,25323,25325,25327,25329],{"class":201,"line":1189},[199,25320,4490],{"class":205},[199,25322,4117],{"class":1086},[199,25324,21891],{"class":878},[199,25326,25047],{"class":205},[199,25328,4117],{"class":1086},[199,25330,4139],{"class":205},[199,25332,25333,25335,25337,25339,25341,25343,25345],{"class":201,"line":1202},[199,25334,4490],{"class":205},[199,25336,4117],{"class":1086},[199,25338,21891],{"class":878},[199,25340,25256],{"class":205},[199,25342,4117],{"class":1086},[199,25344,4182],{"class":205},[199,25346,25347],{"class":1454}," \u002F\u002F没有访问权限，报错\n",[199,25349,25350],{"class":201,"line":1207},[199,25351,671],{"class":205},[199,25353,25354,25356,25358],{"class":201,"line":1212},[199,25355,3100],{"class":1086},[199,25357,4889],{"class":878},[199,25359,4892],{"class":205},[199,25361,25362],{"class":201,"line":1225},[199,25363,4485],{"class":205},[199,25365,25366,25368],{"class":201,"line":1236},[199,25367,8599],{"class":878},[199,25369,8533],{"class":205},[199,25371,25372],{"class":201,"line":1249},[199,25373,671],{"class":205},[627,25375,25377],{"id":25376},"_8282静态成员函数","8.2.8.2静态成员函数",[31,25379,25380],{},"1.静态成员函数定义与访问",[190,25382,25384],{"className":3086,"code":25383,"language":3088,"meta":57,"style":57},"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",[196,25385,25386,25392,25396,25400,25405,25416,25420,25434,25438,25442,25450,25454,25459,25464,25468,25476,25481,25491],{"__ignoreMap":57},[199,25387,25388,25390],{"class":201,"line":202},[199,25389,17554],{"class":1086},[199,25391,18030],{"class":878},[199,25393,25394],{"class":201,"line":36},[199,25395,4485],{"class":205},[199,25397,25398],{"class":201,"line":73},[199,25399,17576],{"class":1086},[199,25401,25402],{"class":201,"line":333},[199,25403,25404],{"class":1454},"    \u002F\u002F在公共权限下定义静态成员函数\n",[199,25406,25407,25409,25412,25414],{"class":201,"line":227},[199,25408,13883],{"class":1086},[199,25410,25411],{"class":1086}," void",[199,25413,14248],{"class":878},[199,25415,4892],{"class":205},[199,25417,25418],{"class":201,"line":238},[199,25419,4946],{"class":205},[199,25421,25422,25425,25427,25430,25432],{"class":201,"line":252},[199,25423,25424],{"class":205},"        coout",[199,25426,4117],{"class":1086},[199,25428,25429],{"class":898},"\"静态成员函数的调用\"",[199,25431,4117],{"class":1086},[199,25433,4139],{"class":205},[199,25435,25436],{"class":201,"line":388},[199,25437,2097],{"class":205},[199,25439,25440],{"class":201,"line":415},[199,25441,6894],{"class":205},[199,25443,25444,25446,25448],{"class":201,"line":426},[199,25445,8261],{"class":1086},[199,25447,8485],{"class":878},[199,25449,4892],{"class":205},[199,25451,25452],{"class":201,"line":1015},[199,25453,4485],{"class":205},[199,25455,25456],{"class":201,"line":1031},[199,25457,25458],{"class":1454},"    \u002F\u002F静态成员函数的调用方式:\n",[199,25460,25461],{"class":201,"line":1043},[199,25462,25463],{"class":1454},"    \u002F\u002F1.通过对象访问\n",[199,25465,25466],{"class":201,"line":1049},[199,25467,18172],{"class":205},[199,25469,25470,25472,25474],{"class":201,"line":1054},[199,25471,18724],{"class":205},[199,25473,14414],{"class":878},[199,25475,8533],{"class":205},[199,25477,25478],{"class":201,"line":1062},[199,25479,25480],{"class":1454},"    \u002F\u002F2.通过类名访问\n",[199,25482,25483,25485,25487,25489],{"class":201,"line":1075},[199,25484,21364],{"class":878},[199,25486,20577],{"class":205},[199,25488,14414],{"class":878},[199,25490,8533],{"class":205},[199,25492,25493],{"class":201,"line":1092},[199,25494,671],{"class":205},[24,25496,25497],{"start":36},[27,25498,25499],{},"静态成员函数只能访问静态成员变量",[190,25501,25503],{"className":3086,"code":25502,"language":3088,"meta":57,"style":57},"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",[196,25504,25505,25511,25515,25519,25523,25533,25537,25551,25556,25568,25572,25583,25593,25597,25601,25605,25615,25619,25632,25636,25640,25644,25648,25662,25670,25674,25678,25682,25686,25694,25698,25708,25713,25717,25725,25729,25735],{"__ignoreMap":57},[199,25506,25507,25509],{"class":201,"line":202},[199,25508,17554],{"class":1086},[199,25510,18030],{"class":878},[199,25512,25513],{"class":201,"line":36},[199,25514,4485],{"class":205},[199,25516,25517],{"class":201,"line":73},[199,25518,17576],{"class":1086},[199,25520,25521],{"class":201,"line":333},[199,25522,25404],{"class":1454},[199,25524,25525,25527,25529,25531],{"class":201,"line":227},[199,25526,13883],{"class":1086},[199,25528,25411],{"class":1086},[199,25530,14248],{"class":878},[199,25532,4892],{"class":205},[199,25534,25535],{"class":201,"line":238},[199,25536,4946],{"class":205},[199,25538,25539,25542,25544,25546,25548],{"class":201,"line":252},[199,25540,25541],{"class":205},"        m_A",[199,25543,895],{"class":1086},[199,25545,3396],{"class":1018},[199,25547,3149],{"class":205},[199,25549,25550],{"class":1454}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[199,25552,25553],{"class":201,"line":388},[199,25554,25555],{"class":1454},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[199,25557,25558,25560,25562,25564,25566],{"class":201,"line":415},[199,25559,25424],{"class":205},[199,25561,4117],{"class":1086},[199,25563,25429],{"class":898},[199,25565,4117],{"class":1086},[199,25567,4139],{"class":205},[199,25569,25570],{"class":201,"line":426},[199,25571,2097],{"class":205},[199,25573,25574,25576,25578,25580],{"class":201,"line":1015},[199,25575,13883],{"class":1086},[199,25577,5296],{"class":1086},[199,25579,18307],{"class":205},[199,25581,25582],{"class":1454}," \u002F\u002F静态成员变量\n",[199,25584,25585,25587,25590],{"class":201,"line":1031},[199,25586,4901],{"class":1086},[199,25588,25589],{"class":205}," m_B;",[199,25591,25592],{"class":1454}," \u002F\u002F非静态成员变量\n",[199,25594,25595],{"class":201,"line":1043},[199,25596,907],{"emptyLinePlaceholder":906},[199,25598,25599],{"class":201,"line":1049},[199,25600,18081],{"class":1086},[199,25602,25603],{"class":201,"line":1054},[199,25604,25217],{"class":1454},[199,25606,25607,25609,25611,25613],{"class":201,"line":1062},[199,25608,13883],{"class":1086},[199,25610,25411],{"class":1086},[199,25612,16479],{"class":878},[199,25614,4892],{"class":205},[199,25616,25617],{"class":201,"line":1075},[199,25618,4946],{"class":205},[199,25620,25621,25623,25625,25628,25630],{"class":201,"line":1092},[199,25622,6352],{"class":205},[199,25624,4117],{"class":1086},[199,25626,25627],{"class":898},"\"这是私有权限下的静态函数调用\"",[199,25629,4117],{"class":1086},[199,25631,4139],{"class":205},[199,25633,25634],{"class":201,"line":1107},[199,25635,2097],{"class":205},[199,25637,25638],{"class":201,"line":1128},[199,25639,907],{"emptyLinePlaceholder":906},[199,25641,25642],{"class":201,"line":1146},[199,25643,907],{"emptyLinePlaceholder":906},[199,25645,25646],{"class":201,"line":1163},[199,25647,6894],{"class":205},[199,25649,25650,25652,25654,25656,25658,25660],{"class":201,"line":1176},[199,25651,3100],{"class":1086},[199,25653,18428],{"class":878},[199,25655,25047],{"class":205},[199,25657,895],{"class":1086},[199,25659,1025],{"class":1018},[199,25661,1028],{"class":205},[199,25663,25664,25666,25668],{"class":201,"line":1189},[199,25665,8261],{"class":1086},[199,25667,8485],{"class":878},[199,25669,4892],{"class":205},[199,25671,25672],{"class":201,"line":1202},[199,25673,4485],{"class":205},[199,25675,25676],{"class":201,"line":1207},[199,25677,25458],{"class":1454},[199,25679,25680],{"class":201,"line":1212},[199,25681,25463],{"class":1454},[199,25683,25684],{"class":201,"line":1225},[199,25685,18172],{"class":205},[199,25687,25688,25690,25692],{"class":201,"line":1236},[199,25689,18724],{"class":205},[199,25691,14414],{"class":878},[199,25693,8533],{"class":205},[199,25695,25696],{"class":201,"line":1249},[199,25697,25480],{"class":1454},[199,25699,25700,25702,25704,25706],{"class":201,"line":1262},[199,25701,21364],{"class":878},[199,25703,20577],{"class":205},[199,25705,14414],{"class":878},[199,25707,8533],{"class":205},[199,25709,25710],{"class":201,"line":1275},[199,25711,25712],{"class":1454},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[199,25714,25715],{"class":201,"line":1287},[199,25716,671],{"class":205},[199,25718,25719,25721,25723],{"class":201,"line":1292},[199,25720,3100],{"class":1086},[199,25722,4889],{"class":878},[199,25724,4892],{"class":205},[199,25726,25727],{"class":201,"line":1297},[199,25728,4485],{"class":205},[199,25730,25731,25733],{"class":201,"line":1310},[199,25732,8530],{"class":878},[199,25734,8533],{"class":205},[199,25736,25737],{"class":201,"line":1315},[199,25738,671],{"class":205},[19,25740,25742],{"id":25741},"_83c对象模型和this指针","8.3C++对象模型和this指针",[627,25744,25746],{"id":25745},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[31,25748,25749],{},"在c++中，类内的成员变量和成员函数分开存储",[31,25751,25752],{},"只有非静态成员变量才属于类的对象上",[25754,25755,25757],"h5",{"id":25756},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[190,25759,25761],{"className":3086,"code":25760,"language":3088,"meta":57,"style":57},"#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",[196,25762,25763,25770,25780,25786,25790,25794,25798,25806,25810,25814,25837,25841,25849,25853,25859],{"__ignoreMap":57},[199,25764,25765,25767],{"class":201,"line":202},[199,25766,4866],{"class":1086},[199,25768,25769],{"class":898},"\u003Ciostraem>\n",[199,25771,25772,25774,25776,25778],{"class":201,"line":36},[199,25773,4874],{"class":1086},[199,25775,4877],{"class":1086},[199,25777,4880],{"class":878},[199,25779,1028],{"class":205},[199,25781,25782,25784],{"class":201,"line":73},[199,25783,17554],{"class":1086},[199,25785,18030],{"class":878},[199,25787,25788],{"class":201,"line":333},[199,25789,4485],{"class":205},[199,25791,25792],{"class":201,"line":227},[199,25793,907],{"emptyLinePlaceholder":906},[199,25795,25796],{"class":201,"line":238},[199,25797,6894],{"class":205},[199,25799,25800,25802,25804],{"class":201,"line":252},[199,25801,8261],{"class":1086},[199,25803,8485],{"class":878},[199,25805,4892],{"class":205},[199,25807,25808],{"class":201,"line":388},[199,25809,4485],{"class":205},[199,25811,25812],{"class":201,"line":415},[199,25813,18172],{"class":205},[199,25815,25816,25818,25820,25823,25825,25828,25830,25832,25834],{"class":201,"line":426},[199,25817,4490],{"class":205},[199,25819,4117],{"class":1086},[199,25821,25822],{"class":898},"\"size of p=\"",[199,25824,4117],{"class":1086},[199,25826,25827],{"class":878},"sizeoif",[199,25829,9436],{"class":205},[199,25831,4117],{"class":1086},[199,25833,4182],{"class":205},[199,25835,25836],{"class":1454}," \u002F\u002F查看这个空类的占用的内存空间\n",[199,25838,25839],{"class":201,"line":1015},[199,25840,671],{"class":205},[199,25842,25843,25845,25847],{"class":201,"line":1031},[199,25844,3100],{"class":1086},[199,25846,4889],{"class":878},[199,25848,4892],{"class":205},[199,25850,25851],{"class":201,"line":1043},[199,25852,4485],{"class":205},[199,25854,25855,25857],{"class":201,"line":1049},[199,25856,8530],{"class":878},[199,25858,8533],{"class":205},[199,25860,25861],{"class":201,"line":1054},[199,25862,671],{"class":205},[31,25864,25865],{},"输出结果为：size of p=1",[31,25867,25868],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[31,25870,25871],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[25754,25873,25875],{"id":25874},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[190,25877,25879],{"className":3086,"code":25878,"language":3088,"meta":57,"style":57},"#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",[196,25880,25881,25887,25897,25905,25909,25918,25922,25930,25934,25938,25957,25961,25965,25973,25977,25983],{"__ignoreMap":57},[199,25882,25883,25885],{"class":201,"line":202},[199,25884,4866],{"class":1086},[199,25886,4869],{"class":898},[199,25888,25889,25891,25893,25895],{"class":201,"line":36},[199,25890,4874],{"class":1086},[199,25892,4877],{"class":1086},[199,25894,4880],{"class":878},[199,25896,1028],{"class":205},[199,25898,25899,25901,25903],{"class":201,"line":73},[199,25900,17554],{"class":1086},[199,25902,18428],{"class":878},[199,25904,5578],{"class":205},[199,25906,25907],{"class":201,"line":333},[199,25908,4485],{"class":205},[199,25910,25911,25913,25915],{"class":201,"line":227},[199,25912,4901],{"class":1086},[199,25914,18307],{"class":205},[199,25916,25917],{"class":1454},"\u002F\u002F非静态成员变量\n",[199,25919,25920],{"class":201,"line":238},[199,25921,6894],{"class":205},[199,25923,25924,25926,25928],{"class":201,"line":252},[199,25925,8261],{"class":1086},[199,25927,8485],{"class":878},[199,25929,4892],{"class":205},[199,25931,25932],{"class":201,"line":388},[199,25933,4485],{"class":205},[199,25935,25936],{"class":201,"line":415},[199,25937,18172],{"class":205},[199,25939,25940,25942,25944,25946,25948,25950,25952,25954],{"class":201,"line":426},[199,25941,4490],{"class":205},[199,25943,4117],{"class":1086},[199,25945,25822],{"class":898},[199,25947,4312],{"class":1086},[199,25949,9436],{"class":205},[199,25951,4117],{"class":1086},[199,25953,4182],{"class":205},[199,25955,25956],{"class":1454}," \u002F\u002F查看不是空对象时占用多少内存\n",[199,25958,25959],{"class":201,"line":1015},[199,25960,907],{"emptyLinePlaceholder":906},[199,25962,25963],{"class":201,"line":1031},[199,25964,671],{"class":205},[199,25966,25967,25969,25971],{"class":201,"line":1043},[199,25968,3100],{"class":1086},[199,25970,4889],{"class":878},[199,25972,4892],{"class":205},[199,25974,25975],{"class":201,"line":1049},[199,25976,4485],{"class":205},[199,25978,25979,25981],{"class":201,"line":1054},[199,25980,8530],{"class":878},[199,25982,8533],{"class":205},[199,25984,25985],{"class":201,"line":1062},[199,25986,671],{"class":205},[31,25988,25989],{},"输出结果：size of p=4",[31,25991,25992],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[24,25994,25995],{},[27,25996,25997],{},"如果加上非静态成员变量，Person类修改如下",[190,25999,26001],{"className":3086,"code":26000,"language":3088,"meta":57,"style":57},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[196,26002,26003,26009,26013,26019,26027,26031,26036],{"__ignoreMap":57},[199,26004,26005,26007],{"class":201,"line":202},[199,26006,17554],{"class":1086},[199,26008,18030],{"class":878},[199,26010,26011],{"class":201,"line":36},[199,26012,4485],{"class":205},[199,26014,26015,26017],{"class":201,"line":73},[199,26016,4901],{"class":1086},[199,26018,24237],{"class":205},[199,26020,26021,26023,26025],{"class":201,"line":333},[199,26022,13883],{"class":1086},[199,26024,5296],{"class":1086},[199,26026,24244],{"class":205},[199,26028,26029],{"class":201,"line":227},[199,26030,6894],{"class":205},[199,26032,26033],{"class":201,"line":238},[199,26034,26035],{"class":1454},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[199,26037,26038,26040,26042,26044,26046,26048],{"class":201,"line":252},[199,26039,3100],{"class":1086},[199,26041,18428],{"class":878},[199,26043,25256],{"class":205},[199,26045,895],{"class":1086},[199,26047,1025],{"class":1018},[199,26049,1028],{"class":205},[31,26051,26052],{},"输出结果：4",[31,26054,26055],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[24,26057,26058],{"start":36},[27,26059,26060],{},"加上非静态成员函数",[190,26062,26064],{"className":3086,"code":26063,"language":3088,"meta":57,"style":57},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[196,26065,26066,26073,26077,26083,26091,26095,26099,26103],{"__ignoreMap":57},[199,26067,26068,26070],{"class":201,"line":202},[199,26069,17554],{"class":1086},[199,26071,26072],{"class":878},"  Person\n",[199,26074,26075],{"class":201,"line":36},[199,26076,4485],{"class":205},[199,26078,26079,26081],{"class":201,"line":73},[199,26080,4901],{"class":1086},[199,26082,24237],{"class":205},[199,26084,26085,26087,26089],{"class":201,"line":333},[199,26086,17769],{"class":1086},[199,26088,14248],{"class":878},[199,26090,4892],{"class":205},[199,26092,26093],{"class":201,"line":227},[199,26094,4946],{"class":205},[199,26096,26097],{"class":201,"line":238},[199,26098,907],{"emptyLinePlaceholder":906},[199,26100,26101],{"class":201,"line":252},[199,26102,2097],{"class":205},[199,26104,26105],{"class":201,"line":388},[199,26106,6894],{"class":205},[31,26108,26109],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[24,26111,26112],{"start":73},[27,26113,26114],{},"加上静态成员函数",[190,26116,26118],{"className":3086,"code":26117,"language":3088,"meta":57,"style":57},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[196,26119,26120,26126,26130,26136,26144,26148,26152,26156,26167,26171,26175,26179],{"__ignoreMap":57},[199,26121,26122,26124],{"class":201,"line":202},[199,26123,17554],{"class":1086},[199,26125,26072],{"class":878},[199,26127,26128],{"class":201,"line":36},[199,26129,4485],{"class":205},[199,26131,26132,26134],{"class":201,"line":73},[199,26133,4901],{"class":1086},[199,26135,24237],{"class":205},[199,26137,26138,26140,26142],{"class":201,"line":333},[199,26139,17769],{"class":1086},[199,26141,14248],{"class":878},[199,26143,4892],{"class":205},[199,26145,26146],{"class":201,"line":227},[199,26147,4946],{"class":205},[199,26149,26150],{"class":201,"line":238},[199,26151,907],{"emptyLinePlaceholder":906},[199,26153,26154],{"class":201,"line":252},[199,26155,2097],{"class":205},[199,26157,26158,26160,26162,26165],{"class":201,"line":388},[199,26159,13883],{"class":1086},[199,26161,25411],{"class":1086},[199,26163,26164],{"class":878}," func1",[199,26166,4892],{"class":205},[199,26168,26169],{"class":201,"line":415},[199,26170,4946],{"class":205},[199,26172,26173],{"class":201,"line":426},[199,26174,907],{"emptyLinePlaceholder":906},[199,26176,26177],{"class":201,"line":1015},[199,26178,2097],{"class":205},[199,26180,26181],{"class":201,"line":1031},[199,26182,6894],{"class":205},[31,26184,26052],{},[31,26186,26187],{},"解释：静态成员函数也不属于类上",[1002,26189,10571],{},{"title":57,"searchDepth":36,"depth":36,"links":26191},[26192,26198],{"id":17505,"depth":36,"text":17506,"children":26193},[26194,26195,26196,26197],{"id":17509,"depth":73,"text":17510},{"id":18233,"depth":73,"text":18234},{"id":18405,"depth":73,"text":18406},{"id":18863,"depth":73,"text":18864},{"id":21222,"depth":36,"text":21223,"children":26199},[26200,26201,26202,26203,26204,26205,26206,26207,26208],{"id":21234,"depth":73,"text":21235},{"id":21527,"depth":73,"text":21528},{"id":22018,"depth":73,"text":22019},{"id":23115,"depth":73,"text":23116},{"id":23538,"depth":73,"text":23539},{"id":24017,"depth":73,"text":24018},{"id":24392,"depth":73,"text":24393},{"id":24805,"depth":73,"text":24806},{"id":25741,"depth":73,"text":25742},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":17471,"description":26209},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":26216,"title":3088,"body":26217,"description":3023,"extension":3024,"meta":26221,"navigation":906,"path":26223,"seo":26224,"stem":26225,"__hash__":26226},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":26218,"toc":26219},[],{"title":57,"searchDepth":36,"depth":36,"links":26220},[],{"category":26222},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":3088,"description":3023},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":26228,"title":26229,"body":26230,"description":57,"extension":3024,"meta":26820,"navigation":906,"path":26821,"seo":26822,"stem":26823,"__hash__":26824},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":26231,"toc":26802},[26232,26235,26239,26242,26245,26248,26266,26271,26274,26277,26280,26283,26288,26291,26296,26299,26302,26306,26309,26312,26318,26321,26339,26343,26347,26350,26355,26358,26362,26365,26378,26381,26385,26388,26391,26394,26419,26422,26431,26442,26457,26489,26493,26500,26508,26512,26515,26518,26523,26527,26530,26533,26538,26541,26545,26548,26551,26556,26559,26563,26568,26572,26639,26643,26646,26649,26652,26655,26658,26664,26685,26688,26702,26710,26714,26717,26720,26725,26728,26733,26738,26741,26744,26749,26754,26757,26762,26767,26770,26775,26780,26783,26786,26791,26794,26799],[10,26233,26229],{"id":26234},"_1强化学习基本认识",[14,26236,26238],{"id":26237},"_11什么是强化学习","1.1.什么是强化学习",[31,26240,26241],{},"强化学习有两部分组成：智能体和环境；",[31,26243,26244],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[31,26246,26247],{},"强化学习与监督学习的区别:",[24,26249,26250,26253,26256,26259],{},[27,26251,26252],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[27,26254,26255],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[27,26257,26258],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[27,26260,26261,26262,26265],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[49,26263,26264],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[31,26267,26268],{},[55,26269],{"alt":57,"src":26270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[31,26272,26273],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[31,26275,26276],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[31,26278,26279],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[31,26281,26282],{},"获取奖励",[31,26284,26285],{},[55,26286],{"alt":57,"src":26287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[31,26289,26290],{},"强化学习可以分成标准强化学习和深度强化学习",[31,26292,26293],{},[55,26294],{"alt":57,"src":26295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[31,26297,26298],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[31,26300,26301],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,26303,26305],{"id":26304},"_12强化学习应用场景","1.2.强化学习应用场景",[31,26307,26308],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[31,26310,26311],{},"具身智能中的应用",[31,26313,26314,26317],{},[49,26315,26316],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[31,26319,26320],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[31,26322,26323,26324,26327,26328,26331,26332,26335,26336],{},"机器人是",[49,26325,26326],{},"躯体","，深度学习是",[49,26329,26330],{},"神经元****网络","，VLA是",[49,26333,26334],{},"通用的行为逻辑","，而强化学习是",[49,26337,26338],{},"教练",[14,26340,26342],{"id":26341},"_13序列决策","1.3.序列决策",[19,26344,26346],{"id":26345},"_131智能体与环境","1.3.1.智能体与环境",[31,26348,26349],{},"强化学习研究的问题是智能体agent与环境交互的问题",[31,26351,26352],{},[55,26353],{"alt":57,"src":26354},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[31,26356,26357],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[19,26359,26361],{"id":26360},"_132奖励","1.3.2.奖励",[31,26363,26364],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[31,26366,26367,26368,26377],{},"取某个策略的表现如何。强化学习的目的就是",[49,26369,26370,26371,26376],{},"最大化",[49,26372,26373],{},[49,26374,26375],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[31,26379,26380],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[19,26382,26384],{"id":26383},"_133序列决策","1.3.3.序列决策",[31,26386,26387],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[31,26389,26390],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[31,26392,26393],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[31,26395,26396,26400,26401,26403,26404,26406,26407,26409,26410,16656,26413,16656,26416],{},[26397,26398,26399],"em",{},"Ht"," = ",[26397,26402,3676],{},"1*, a",[26397,26405,1115],{},", r",[26397,26408,1115],{},", . . . ,* ",[26397,26411,26412],{},"ot",[26397,26414,26415],{},", at ,",[26397,26417,26418],{},"rt",[31,26420,26421],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[31,26423,26424,26400,26427,1484,26429,3512],{},[26397,26425,26426],{},"st",[26397,26428,3146],{},[26397,26430,26399],{},[31,26432,26433,26434,26437,26438,26441],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[49,26435,26436],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[49,26439,26440],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[31,26443,26444,26445,26448,26449,26452,26453,26456],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[49,26446,26447],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[49,26450,26451],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[26397,26454,26455],{},"S, A, T, R, Ω, O, γ",")。",[31,26458,26459,26460,26462,26463,26465,26466,1537,26468,26471,26472,26474,26475,1537,26478,26481,26482,26484,26485,26488],{},"其中 ",[26397,26461,3768],{}," 表示状态空间，为隐变量，",[26397,26464,3319],{}," 为动作空间，",[26397,26467,3793],{},[26397,26469,26470],{},"s ′ |s, a",") 为状态转移概率，",[26397,26473,3743],{}," 为奖励函数，",[26397,26476,26477],{},"Ω",[26397,26479,26480],{},"o|s, a",") 为观测概率，",[26397,26483,3670],{}," 为观测空间，",[26397,26486,26487],{},"γ"," 为折扣因子。",[14,26490,26492],{"id":26491},"_14动作空间","1.4.动作空间",[31,26494,26495,26496,26499],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[49,26497,26498],{},"动作空间"," ，动作空间分为:",[24,26501,26502,26505],{},[27,26503,26504],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[27,26506,26507],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,26509,26511],{"id":26510},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[31,26513,26514],{},"由策略、价值函数、模型三部分组成",[31,26516,26517],{},"这三者组成马尔可夫决策过程",[31,26519,26520],{},[55,26521],{"alt":57,"src":26522},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[19,26524,26526],{"id":26525},"_151策略","1.5.1.策略",[31,26528,26529],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[31,26531,26532],{},"策略可分为两种：",[31,26534,26535],{},[55,26536],{"alt":57,"src":26537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[31,26539,26540],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[19,26542,26544],{"id":26543},"_152价值函数","1.5.2.价值函数",[31,26546,26547],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[31,26549,26550],{},"价值函数中有一个折扣因子，类似于存款利息",[31,26552,26553],{},[55,26554],{"alt":57,"src":26555},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[31,26557,26558],{},"进入某个状态采取的最优动作可以通过Q函数得到",[19,26560,26562],{"id":26561},"_153模型","1.5.3.模型",[31,26564,26565],{},[55,26566],{"alt":57,"src":26567},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,26569,26571],{"id":26570},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[3227,26573,26574,26585],{},[3230,26575,26576],{},[3233,26577,26578,26582],{},[3236,26579,26581],{"align":26580},"left","类型",[3236,26583,26584],{"align":26580},"特点",[3273,26586,26587,26597,26607,26617,26629],{},[3233,26588,26589,26594],{},[3278,26590,26591],{"align":26580},[49,26592,26593],{},"基于价值的智能体",[3278,26595,26596],{"align":26580},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[3233,26598,26599,26604],{},[3278,26600,26601],{"align":26580},[49,26602,26603],{},"基于策略的智能体",[3278,26605,26606],{"align":26580},"直接学习策略，没有学习价值函数",[3233,26608,26609,26614],{},[3278,26610,26611],{"align":26580},[49,26612,26613],{},"演员-评论员智能体",[3278,26615,26616],{"align":26580},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[3233,26618,26619,26624],{},[3278,26620,26621],{"align":26580},[49,26622,26623],{},"有模型强化学习智能体",[3278,26625,26626],{"align":26580},[55,26627],{"alt":57,"src":26628},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[3233,26630,26631,26636],{},[3278,26632,26633],{"align":26580},[49,26634,26635],{},"免模型强化学习智能体",[3278,26637,26638],{"align":26580},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,26640,26642],{"id":26641},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[31,26644,26645],{},"学习和规划是序列决策的两个基本问题",[31,26647,26648],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[31,26650,26651],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[31,26653,26654],{},"强化学习用到的库：Gym",[31,26656,26657],{},"Gym可以检验强化学习算法的优劣",[31,26659,26660,26663],{},[49,26661,26662],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[190,26665,26669],{"className":26666,"code":26667,"language":26668,"meta":57,"style":57},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[196,26670,26671],{"__ignoreMap":57},[199,26672,26673,26676,26679,26682],{"class":201,"line":202},[199,26674,26675],{"class":878},"pip",[199,26677,26678],{"class":898}," install",[199,26680,26681],{"class":898}," gym==",[199,26683,26684],{"class":1018},"0.25.2\n",[31,26686,26687],{},"显示图形界面需要",[190,26689,26691],{"className":26666,"code":26690,"language":26668,"meta":57,"style":57},"pip install pygame\n",[196,26692,26693],{"__ignoreMap":57},[199,26694,26695,26697,26699],{"class":201,"line":202},[199,26696,26675],{"class":878},[199,26698,26678],{"class":898},[199,26700,26701],{"class":898}," pygame\n",[31,26703,26704,26705],{},"有关Gym库的相关文档介绍：",[2867,26706,26709],{"href":26707,"rel":26708},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[2871],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26711,26713],{"id":26712},"_18一些补充基础概念","1.8.一些补充基础概念",[31,26715,26716],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[31,26718,26719],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[31,26721,26722],{},[55,26723],{"alt":57,"src":26724},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[31,26726,26727],{},"折扣率需要自己来设定",[31,26729,26730],{},[55,26731],{"alt":57,"src":26732},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[24,26734,26735],{},[27,26736,26737],{},"状态转移函数：",[31,26739,26740],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[31,26742,26743],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[31,26745,26746],{},[55,26747],{"alt":57,"src":26748},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[24,26750,26751],{"start":36},[27,26752,26753],{},"动作价值函数：",[31,26755,26756],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[31,26758,26759],{},[55,26760],{"alt":57,"src":26761},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[24,26763,26764],{"start":73},[27,26765,26766],{},"最优动作价值函数：",[31,26768,26769],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[31,26771,26772],{},[55,26773],{"alt":57,"src":26774},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[24,26776,26777],{"start":333},[27,26778,26779],{},"状态价值函数:",[31,26781,26782],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[31,26784,26785],{},"它衡量的是“一个具体动作”的长期价值",[31,26787,26788],{},[55,26789],{"alt":57,"src":26790},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[31,26792,26793],{},"几个价值函数之间的比较：",[31,26795,26796],{},[55,26797],{"alt":57,"src":26798},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1002,26800,26801],{},"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":57,"searchDepth":36,"depth":36,"links":26803},[26804,26805,26806,26811,26812,26817,26818,26819],{"id":26237,"depth":36,"text":26238},{"id":26304,"depth":36,"text":26305},{"id":26341,"depth":36,"text":26342,"children":26807},[26808,26809,26810],{"id":26345,"depth":73,"text":26346},{"id":26360,"depth":73,"text":26361},{"id":26383,"depth":73,"text":26384},{"id":26491,"depth":36,"text":26492},{"id":26510,"depth":36,"text":26511,"children":26813},[26814,26815,26816],{"id":26525,"depth":73,"text":26526},{"id":26543,"depth":73,"text":26544},{"id":26561,"depth":73,"text":26562},{"id":26570,"depth":36,"text":26571},{"id":26641,"depth":36,"text":26642},{"id":26712,"depth":36,"text":26713},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":26229,"description":57},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26826,"title":26827,"body":26828,"description":26835,"extension":3024,"meta":26846,"navigation":906,"path":26847,"seo":26848,"stem":26849,"__hash__":26850},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26829,"toc":26844},[26830,26833,26836,26841],[10,26831,26827],{"id":26832},"_2马尔可夫决策过程",[31,26834,26835],{},"这是强化学习的基本框架",[31,26837,26838],{},[55,26839],{"alt":57,"src":26840},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[31,26842,26843],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":57,"searchDepth":36,"depth":36,"links":26845},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26827,"description":26835},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26852,"title":26853,"body":26854,"description":57,"extension":3024,"meta":26970,"navigation":906,"path":26971,"seo":26972,"stem":26973,"__hash__":26974},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26855,"toc":26965},[26856,26859,26863,26866,26871,26876,26879,26884,26887,26892,26895,26899,26904,26907,26912,26917,26922,26925,26929,26934,26937,26942,26947,26952,26957,26960],[10,26857,26853],{"id":26858},"_3动作价值函数",[14,26860,26862],{"id":26861},"_31dqn","3.1.DQN",[31,26864,26865],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[31,26867,26868],{},[55,26869],{"alt":57,"src":26870},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[31,26872,26873],{},[55,26874],{"alt":57,"src":26875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[31,26877,26878],{},"DQN算法的描述：",[31,26880,26881],{},[55,26882],{"alt":57,"src":26883},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[31,26885,26886],{},"这里的Dense指的是全连接层",[31,26888,26889],{},[55,26890],{"alt":57,"src":26891},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[31,26893,26894],{},"当前观测的状态为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,26896,26898],{"id":26897},"_32dqn的举例","3.2.DQN的举例",[31,26900,26901],{},[55,26902],{"alt":57,"src":26903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[31,26905,26906],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[31,26908,26909],{},[55,26910],{"alt":57,"src":26911},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[31,26913,26914],{},[55,26915],{"alt":57,"src":26916},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[31,26918,26919],{},[55,26920],{"alt":57,"src":26921},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[31,26923,26924],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26926,26928],{"id":26927},"_33td算法","3.3.TD算法",[31,26930,26931],{},[55,26932],{"alt":57,"src":26933},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[31,26935,26936],{},"强化学习TD算法公式的粗略解释：",[31,26938,26939],{},[55,26940],{"alt":57,"src":26941},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[31,26943,26944],{},[55,26945],{"alt":57,"src":26946},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[31,26948,26949],{},[55,26950],{"alt":57,"src":26951},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[31,26953,26954],{},[55,26955],{"alt":57,"src":26956},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[31,26958,26959],{},"TD算法总结：",[31,26961,26962],{},[55,26963],{"alt":57,"src":26964},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":57,"searchDepth":36,"depth":36,"links":26966},[26967,26968,26969],{"id":26861,"depth":36,"text":26862},{"id":26897,"depth":36,"text":26898},{"id":26927,"depth":36,"text":26928},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26853,"description":57},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26976,"title":26977,"body":26978,"description":57,"extension":3024,"meta":27211,"navigation":906,"path":27212,"seo":27213,"stem":27214,"__hash__":27215},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26979,"toc":27207},[26980,26983,26987,26990,26993,26998,27003,27006,27011,27016,27019,27024,27027,27032,27035,27040,27043,27048,27051,27056,27061,27064,27069,27072,27075,27080,27083,27088,27093,27097,27100,27103,27108,27113,27116,27121,27126,27129,27134,27137,27140,27145,27148,27153,27156,27161,27166,27169,27174,27179,27182,27187,27190,27195,27198],[10,26981,26977],{"id":26982},"_4策略学习",[14,26984,26986],{"id":26985},"_41概念描述","4.1.概念描述",[31,26988,26989],{},"用神经网络（策略网络）近似策略函数",[31,26991,26992],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[31,26994,26995],{},[55,26996],{"alt":57,"src":26997},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[31,26999,27000],{},[55,27001],{"alt":57,"src":27002},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[31,27004,27005],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[31,27007,27008],{},[55,27009],{"alt":57,"src":27010},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[31,27012,27013],{},[55,27014],{"alt":57,"src":27015},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[31,27017,27018],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[31,27020,27021],{},[55,27022],{"alt":57,"src":27023},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[31,27025,27026],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[31,27028,27029],{},[55,27030],{"alt":57,"src":27031},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[31,27033,27034],{},"改进theta要用到策略梯度算法",[31,27036,27037],{},[55,27038],{"alt":57,"src":27039},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[31,27041,27042],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[31,27044,27045],{},[55,27046],{"alt":57,"src":27047},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[31,27049,27050],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[31,27052,27053],{},[55,27054],{"alt":57,"src":27055},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[31,27057,27058],{},[55,27059],{"alt":57,"src":27060},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[31,27062,27063],{},"梯度公式总结：",[31,27065,27066],{},[55,27067],{"alt":57,"src":27068},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[31,27070,27071],{},"两个公式的分别应用场景：",[31,27073,27074],{},"对于离散的动作：",[31,27076,27077],{},[55,27078],{"alt":57,"src":27079},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[31,27081,27082],{},"对于连续的动作：",[31,27084,27085],{},[55,27086],{"alt":57,"src":27087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[31,27089,27090],{},[55,27091],{"alt":57,"src":27092},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,27094,27096],{"id":27095},"_42概率梯度算法总结","4.2.概率梯度算法总结",[31,27098,27099],{},"使用蒙特卡洛来近似计算策略梯度",[31,27101,27102],{},"蒙特卡洛法的解释如下：",[31,27104,27105],{},[55,27106],{"alt":57,"src":27107},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[31,27109,27110],{},[55,27111],{"alt":57,"src":27112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[31,27114,27115],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[24,27117,27118],{},[27,27119,27120],{},"方法一：reinforce算法",[31,27122,27123],{},[55,27124],{"alt":57,"src":27125},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[31,27127,27128],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[24,27130,27131],{"start":36},[27,27132,27133],{},"方法二：actor-critic算法",[31,27135,27136],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[31,27138,27139],{},"两个网络的构建：",[31,27141,27142],{},[55,27143],{"alt":57,"src":27144},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[31,27146,27147],{},"actor网路：",[31,27149,27150],{},[55,27151],{"alt":57,"src":27152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[31,27154,27155],{},"critic网络",[31,27157,27158],{},[55,27159],{"alt":57,"src":27160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[24,27162,27163],{"start":73},[27,27164,27165],{},"网络的训练",[31,27167,27168],{},"网络描述",[31,27170,27171],{},[55,27172],{"alt":57,"src":27173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[31,27175,27176],{},[55,27177],{"alt":57,"src":27178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[31,27180,27181],{},"TD算法更新梯度：",[31,27183,27184],{},[55,27185],{"alt":57,"src":27186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[31,27188,27189],{},"策略网络更新梯度：",[31,27191,27192],{},[55,27193],{"alt":57,"src":27194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[31,27196,27197],{},"训练整个流程的具体描述：",[31,27199,27200,27203,27204],{},[55,27201],{"alt":57,"src":27202},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[55,27205],{"alt":57,"src":27206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":57,"searchDepth":36,"depth":36,"links":27208},[27209,27210],{"id":26985,"depth":36,"text":26986},{"id":27095,"depth":36,"text":27096},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26977,"description":57},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":27217,"title":27218,"body":27219,"description":27226,"extension":3024,"meta":27276,"navigation":906,"path":27277,"seo":27278,"stem":27279,"__hash__":27280},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":27220,"toc":27272},[27221,27224,27227,27231,27234,27239,27243,27246,27251,27254,27259,27264,27267],[10,27222,27218],{"id":27223},"_5alphago算法",[31,27225,27226],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,27228,27230],{"id":27229},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[31,27232,27233],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[31,27235,27236],{},[55,27237],{"alt":57,"src":27238},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,27240,27242],{"id":27241},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[31,27244,27245],{},"采用强化学习的方式训练策略网络",[31,27247,27248],{},[55,27249],{"alt":57,"src":27250},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[31,27252,27253],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[31,27255,27256],{},[55,27257],{"alt":57,"src":27258},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[31,27260,27261],{},[55,27262],{"alt":57,"src":27263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[31,27265,27266],{},"强化学习训练策略网络的总结：",[31,27268,27269],{},[55,27270],{"alt":57,"src":27271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":57,"searchDepth":36,"depth":36,"links":27273},[27274,27275],{"id":27229,"depth":36,"text":27230},{"id":27241,"depth":36,"text":27242},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":27218,"description":27226},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":27282,"title":27283,"body":27284,"description":27291,"extension":3024,"meta":27294,"navigation":906,"path":27295,"seo":27296,"stem":27297,"__hash__":27298},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":27285,"toc":27292},[27286,27289],[10,27287,27283],{"id":27288},"_6价值网络",[31,27290,27291],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":57,"searchDepth":36,"depth":36,"links":27293},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":27283,"description":27291},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":27300,"title":27301,"body":27302,"description":27306,"extension":3024,"meta":27307,"navigation":906,"path":27308,"seo":27309,"stem":27310,"__hash__":27311},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":27303,"toc":27304},[],{"title":57,"searchDepth":36,"depth":36,"links":27305},[],"记录自己的强化学习笔记。",{"category":26222},"\u002Fwiki\u002F2025-12-04",{"title":27301,"description":27306},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":27313,"title":27314,"body":27315,"description":3023,"extension":3024,"meta":27354,"navigation":906,"path":27355,"seo":27356,"stem":27357,"__hash__":27358},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":27316,"toc":27352},[27317,27320,27323,27329,27332,27338,27341,27346,27349],[10,27318,27314],{"id":27319},"_1-项目概览与官方资源",[31,27321,27322],{},"官方文档：",[31,27324,27325],{},[2867,27326,27327],{"href":27327,"rel":27328},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[2871],[31,27330,27331],{},"官方代码仓库：",[31,27333,27334],{},[2867,27335,27336],{"href":27336,"rel":27337},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[2871],[31,27339,27340],{},"复现大体流程：",[31,27342,27343],{},[55,27344],{"alt":57,"src":27345},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[31,27347,27348],{},"本教程的目标是打通这条链路：",[31,27350,27351],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":57,"searchDepth":36,"depth":36,"links":27353},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":27314,"description":3023},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":27360,"title":27361,"body":27362,"description":3023,"extension":3024,"meta":27478,"navigation":906,"path":27479,"seo":27480,"stem":27481,"__hash__":27482},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":27363,"toc":27473},[27364,27367,27371,27374,27381,27385,27388,27397,27407,27411,27441,27444,27470],[10,27365,27361],{"id":27366},"_2-环境准备与设备连接",[14,27368,27370],{"id":27369},"_21-系统与环境","2.1 系统与环境",[31,27372,27373],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[31,27375,27376,27377,27380],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[196,27378,27379],{},"lerobot"," 依赖。",[14,27382,27384],{"id":27383},"_22-机械臂串口识别","2.2 机械臂串口识别",[31,27386,27387],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[190,27389,27391],{"className":26666,"code":27390,"language":26668,"meta":57,"style":57},"lerobot-find-out\n",[196,27392,27393],{"__ignoreMap":57},[199,27394,27395],{"class":201,"line":202},[199,27396,27390],{"class":878},[31,27398,27399,27400,3300,27403,27406],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[196,27401,27402],{},"\u002Fdev\u002FttyACM0",[196,27404,27405],{},"\u002Fdev\u002FttyACM1","）。",[14,27408,27410],{"id":27409},"_23-串口授权","2.3 串口授权",[190,27412,27414],{"className":26666,"code":27413,"language":26668,"meta":57,"style":57},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[196,27415,27416,27430],{"__ignoreMap":57},[199,27417,27418,27421,27424,27427],{"class":201,"line":202},[199,27419,27420],{"class":878},"sudo",[199,27422,27423],{"class":898}," chmod",[199,27425,27426],{"class":1018}," 666",[199,27428,27429],{"class":898}," \u002Fdev\u002FttyACM0\n",[199,27431,27432,27434,27436,27438],{"class":201,"line":36},[199,27433,27420],{"class":878},[199,27435,27423],{"class":898},[199,27437,27426],{"class":1018},[199,27439,27440],{"class":898}," \u002Fdev\u002FttyACM1\n",[31,27442,27443],{},"说明：",[176,27445,27446,27451,27457,27467],{},[27,27447,27448,27450],{},[196,27449,27420],{},"：以 root 权限执行命令。",[27,27452,27453,27456],{},[196,27454,27455],{},"chmod","：修改设备节点权限。",[27,27458,27459,27462,27463,27466],{},[196,27460,27461],{},"666","：",[196,27464,27465],{},"rw-rw-rw-","，所有用户可读写。",[27,27468,27469],{},"串口号必须替换为你机器上的真实端口。",[1002,27471,27472],{},"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":57,"searchDepth":36,"depth":36,"links":27474},[27475,27476,27477],{"id":27369,"depth":36,"text":27370},{"id":27383,"depth":36,"text":27384},{"id":27409,"depth":36,"text":27410},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":27361,"description":3023},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":27484,"title":27485,"body":27486,"description":3023,"extension":3024,"meta":27647,"navigation":906,"path":27648,"seo":27649,"stem":27650,"__hash__":27651},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":27487,"toc":27643},[27488,27492,27496,27502,27505,27562,27565,27569,27572,27640],[10,27489,27491],{"id":27490},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,27493,27495],{"id":27494},"_31-配置电机-id","3.1 配置电机 ID",[31,27497,27498,27499,27501],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[196,27500,1115],{},"，需要改成机械臂链路里不冲突的编号。",[31,27503,27504],{},"方式一：用 LeRobot 命令逐步写入。",[190,27506,27508],{"className":26666,"code":27507,"language":26668,"meta":57,"style":57},"# 主臂舵机配置 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",[196,27509,27510,27515,27523,27530,27535,27539,27544,27550,27557],{"__ignoreMap":57},[199,27511,27512],{"class":201,"line":202},[199,27513,27514],{"class":1454},"# 主臂舵机配置 ID\n",[199,27516,27517,27520],{"class":201,"line":36},[199,27518,27519],{"class":878},"lerobot-setup-motors",[199,27521,27522],{"class":1018}," \\\n",[199,27524,27525,27528],{"class":201,"line":73},[199,27526,27527],{"class":1018},"  --teleop.type=so101_leader",[199,27529,27522],{"class":1018},[199,27531,27532],{"class":201,"line":333},[199,27533,27534],{"class":1018},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[199,27536,27537],{"class":201,"line":227},[199,27538,907],{"emptyLinePlaceholder":906},[199,27540,27541],{"class":201,"line":238},[199,27542,27543],{"class":1454},"# 从臂舵机配置 ID\n",[199,27545,27546,27548],{"class":201,"line":252},[199,27547,27519],{"class":878},[199,27549,27522],{"class":1018},[199,27551,27552,27555],{"class":201,"line":388},[199,27553,27554],{"class":1018},"  --robot.type=so101_follower",[199,27556,27522],{"class":1018},[199,27558,27559],{"class":201,"line":415},[199,27560,27561],{"class":1018},"  --robot.port=\u002Fdev\u002FttyACM1\n",[31,27563,27564],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,27566,27568],{"id":27567},"_32-机械臂校准","3.2 机械臂校准",[31,27570,27571],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[190,27573,27575],{"className":26666,"code":27574,"language":26668,"meta":57,"style":57},"# 主臂校准\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",[196,27576,27577,27582,27589,27595,27602,27607,27611,27616,27622,27628,27635],{"__ignoreMap":57},[199,27578,27579],{"class":201,"line":202},[199,27580,27581],{"class":1454},"# 主臂校准\n",[199,27583,27584,27587],{"class":201,"line":36},[199,27585,27586],{"class":878},"lerobot-calibrate",[199,27588,27522],{"class":1018},[199,27590,27591,27593],{"class":201,"line":73},[199,27592,27527],{"class":1018},[199,27594,27522],{"class":1018},[199,27596,27597,27600],{"class":201,"line":333},[199,27598,27599],{"class":1018},"  --teleop.port=\u002Fdev\u002FttyACM0",[199,27601,27522],{"class":1018},[199,27603,27604],{"class":201,"line":227},[199,27605,27606],{"class":1018},"  --teleop.id=my_awesome_leader_arm\n",[199,27608,27609],{"class":201,"line":238},[199,27610,907],{"emptyLinePlaceholder":906},[199,27612,27613],{"class":201,"line":252},[199,27614,27615],{"class":1454},"# 从臂校准\n",[199,27617,27618,27620],{"class":201,"line":388},[199,27619,27586],{"class":878},[199,27621,27522],{"class":1018},[199,27623,27624,27626],{"class":201,"line":415},[199,27625,27554],{"class":1018},[199,27627,27522],{"class":1018},[199,27629,27630,27633],{"class":201,"line":426},[199,27631,27632],{"class":1018},"  --robot.port=\u002Fdev\u002FttyACM1",[199,27634,27522],{"class":1018},[199,27636,27637],{"class":201,"line":1015},[199,27638,27639],{"class":1018},"  --robot.id=my_awesome_follower_arm\n",[1002,27641,27642],{},"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":57,"searchDepth":36,"depth":36,"links":27644},[27645,27646],{"id":27494,"depth":36,"text":27495},{"id":27567,"depth":36,"text":27568},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":27485,"description":3023},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27653,"title":27654,"body":27655,"description":3023,"extension":3024,"meta":27846,"navigation":906,"path":27847,"seo":27848,"stem":27849,"__hash__":27850},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27656,"toc":27842},[27657,27660,27664,27711,27715,27728,27791,27794,27839],[10,27658,27654],{"id":27659},"_4-遥操与相机接入",[14,27661,27663],{"id":27662},"_41-不带相机遥操","4.1 不带相机遥操",[190,27665,27667],{"className":26666,"code":27666,"language":26668,"meta":57,"style":57},"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",[196,27668,27669,27676,27682,27688,27695,27701,27707],{"__ignoreMap":57},[199,27670,27671,27674],{"class":201,"line":202},[199,27672,27673],{"class":878},"lerobot-teleoperate",[199,27675,27522],{"class":1018},[199,27677,27678,27680],{"class":201,"line":36},[199,27679,27554],{"class":1018},[199,27681,27522],{"class":1018},[199,27683,27684,27686],{"class":201,"line":73},[199,27685,27632],{"class":1018},[199,27687,27522],{"class":1018},[199,27689,27690,27693],{"class":201,"line":333},[199,27691,27692],{"class":1018},"  --robot.id=my_awesome_follower_arm",[199,27694,27522],{"class":1018},[199,27696,27697,27699],{"class":201,"line":227},[199,27698,27527],{"class":1018},[199,27700,27522],{"class":1018},[199,27702,27703,27705],{"class":201,"line":238},[199,27704,27599],{"class":1018},[199,27706,27522],{"class":1018},[199,27708,27709],{"class":201,"line":252},[199,27710,27606],{"class":1018},[14,27712,27714],{"id":27713},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[190,27716,27718],{"className":26666,"code":27717,"language":26668,"meta":57,"style":57},"lerobot-find-cameras opencv\n",[196,27719,27720],{"__ignoreMap":57},[199,27721,27722,27725],{"class":201,"line":202},[199,27723,27724],{"class":878},"lerobot-find-cameras",[199,27726,27727],{"class":898}," opencv\n",[190,27729,27731],{"className":26666,"code":27730,"language":26668,"meta":57,"style":57},"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",[196,27732,27733,27739,27745,27751,27757,27767,27773,27779,27786],{"__ignoreMap":57},[199,27734,27735,27737],{"class":201,"line":202},[199,27736,27673],{"class":878},[199,27738,27522],{"class":1018},[199,27740,27741,27743],{"class":201,"line":36},[199,27742,27554],{"class":1018},[199,27744,27522],{"class":1018},[199,27746,27747,27749],{"class":201,"line":73},[199,27748,27632],{"class":1018},[199,27750,27522],{"class":1018},[199,27752,27753,27755],{"class":201,"line":333},[199,27754,27692],{"class":1018},[199,27756,27522],{"class":1018},[199,27758,27759,27762,27765],{"class":201,"line":227},[199,27760,27761],{"class":1018},"  --robot.cameras=",[199,27763,27764],{"class":898},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[199,27766,27522],{"class":1018},[199,27768,27769,27771],{"class":201,"line":238},[199,27770,27527],{"class":1018},[199,27772,27522],{"class":1018},[199,27774,27775,27777],{"class":201,"line":252},[199,27776,27599],{"class":1018},[199,27778,27522],{"class":1018},[199,27780,27781,27784],{"class":201,"line":388},[199,27782,27783],{"class":1018},"  --teleop.id=my_awesome_leader_arm",[199,27785,27522],{"class":1018},[199,27787,27788],{"class":201,"line":415},[199,27789,27790],{"class":1018},"  --display_data=true\n",[31,27792,27793],{},"相机参数说明：",[176,27795,27796,27802,27808,27817,27827,27833],{},[27,27797,27798,27801],{},[196,27799,27800],{},"front","：相机名称。",[27,27803,27804,27807],{},[196,27805,27806],{},"type: opencv","：相机驱动类型。",[27,27809,27810,27813,27814,27406],{},[196,27811,27812],{},"index_or_path","：设备编号或设备路径（如 ",[196,27815,27816],{},"\u002Fdev\u002Fvideo4",[27,27818,27819,27822,27823,27826],{},[196,27820,27821],{},"width"," \u002F ",[196,27824,27825],{},"height","：图像分辨率。",[27,27828,27829,27832],{},[196,27830,27831],{},"fps","：采样帧率。",[27,27834,27835,27838],{},[196,27836,27837],{},"--display_data=true","：启用实时可视化。",[1002,27840,27841],{},"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":57,"searchDepth":36,"depth":36,"links":27843},[27844,27845],{"id":27662,"depth":36,"text":27663},{"id":27713,"depth":36,"text":27714},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27654,"description":3023},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27852,"title":27853,"body":27854,"description":3023,"extension":3024,"meta":28025,"navigation":906,"path":28026,"seo":28027,"stem":28028,"__hash__":28029},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27855,"toc":28020},[27856,27860,27864,27869,27874,27877,27919,27925,27929,27977,27982,27986,27989,27997,28002,28007,28012,28017],[10,27857,27859],{"id":27858},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27861,27863],{"id":27862},"_51-生成访问令牌","5.1 生成访问令牌",[31,27865,27866],{},[55,27867],{"alt":57,"src":27868},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[31,27870,27871],{},[55,27872],{"alt":57,"src":27873},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[31,27875,27876],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[190,27878,27880],{"className":26666,"code":27879,"language":26668,"meta":57,"style":57},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[196,27881,27882,27895],{"__ignoreMap":57},[199,27883,27884,27887,27890,27892],{"class":201,"line":202},[199,27885,27886],{"class":1086},"export",[199,27888,27889],{"class":205}," HF_TOKEN",[199,27891,895],{"class":1086},[199,27893,27894],{"class":898},"\"your_huggingface_token\"\n",[199,27896,27897,27900,27903,27906,27909,27911,27914,27916],{"class":201,"line":36},[199,27898,27899],{"class":878},"hf",[199,27901,27902],{"class":898}," auth",[199,27904,27905],{"class":898}," login",[199,27907,27908],{"class":1018}," --token",[199,27910,12605],{"class":898},[199,27912,27913],{"class":205},"$HF_TOKEN",[199,27915,3337],{"class":898},[199,27917,27918],{"class":1018}," --add-to-git-credential\n",[31,27920,27921,27924],{},[196,27922,27923],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27926,27928],{"id":27927},"_52-验证登录","5.2 验证登录",[190,27930,27932],{"className":26666,"code":27931,"language":26668,"meta":57,"style":57},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[196,27933,27934,27964],{"__ignoreMap":57},[199,27935,27936,27939,27941,27944,27946,27948,27951,27954,27957,27960,27962],{"class":201,"line":202},[199,27937,27938],{"class":205},"HF_USER",[199,27940,895],{"class":1086},[199,27942,27943],{"class":205},"$(",[199,27945,27899],{"class":878},[199,27947,27902],{"class":898},[199,27949,27950],{"class":898}," whoami",[199,27952,27953],{"class":1086}," |",[199,27955,27956],{"class":878}," head",[199,27958,27959],{"class":1018}," -n",[199,27961,1495],{"class":1018},[199,27963,1594],{"class":205},[199,27965,27966,27969,27971,27974],{"class":201,"line":36},[199,27967,27968],{"class":1018},"echo",[199,27970,12605],{"class":898},[199,27972,27973],{"class":205},"$HF_USER",[199,27975,27976],{"class":898},"\"\n",[31,27978,27979],{},[55,27980],{"alt":57,"src":27981},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27983,27985],{"id":27984},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[31,27987,27988],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[176,27990,27991,27994],{},[27,27992,27993],{},"Dataset Repo（用于上传演示数据）",[27,27995,27996],{},"Model Repo（用于上传训练后的 ACT 权重）",[31,27998,27999],{},[55,28000],{"alt":57,"src":28001},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[31,28003,28004],{},[55,28005],{"alt":57,"src":28006},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[31,28008,28009],{},[55,28010],{"alt":57,"src":28011},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[31,28013,28014],{},[55,28015],{"alt":57,"src":28016},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1002,28018,28019],{},"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":57,"searchDepth":36,"depth":36,"links":28021},[28022,28023,28024],{"id":27862,"depth":36,"text":27863},{"id":27927,"depth":36,"text":27928},{"id":27984,"depth":36,"text":27985},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27853,"description":3023},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":28031,"title":28032,"body":28033,"description":3023,"extension":3024,"meta":28230,"navigation":906,"path":28231,"seo":28232,"stem":28233,"__hash__":28234},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":28034,"toc":28225},[28035,28039,28043,28139,28147,28152,28156,28172,28175,28179,28222],[10,28036,28038],{"id":28037},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,28040,28042],{"id":28041},"_61-录制示教数据","6.1 录制示教数据",[190,28044,28046],{"className":26666,"code":28045,"language":26668,"meta":57,"style":57},"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",[196,28047,28048,28055,28061,28067,28073,28082,28088,28094,28100,28107,28117,28124,28134],{"__ignoreMap":57},[199,28049,28050,28053],{"class":201,"line":202},[199,28051,28052],{"class":878},"lerobot-record",[199,28054,27522],{"class":1018},[199,28056,28057,28059],{"class":201,"line":36},[199,28058,27554],{"class":1018},[199,28060,27522],{"class":1018},[199,28062,28063,28065],{"class":201,"line":73},[199,28064,27632],{"class":1018},[199,28066,27522],{"class":1018},[199,28068,28069,28071],{"class":201,"line":333},[199,28070,27692],{"class":1018},[199,28072,27522],{"class":1018},[199,28074,28075,28077,28080],{"class":201,"line":227},[199,28076,27761],{"class":1018},[199,28078,28079],{"class":898},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[199,28081,27522],{"class":1018},[199,28083,28084,28086],{"class":201,"line":238},[199,28085,27527],{"class":1018},[199,28087,27522],{"class":1018},[199,28089,28090,28092],{"class":201,"line":252},[199,28091,27599],{"class":1018},[199,28093,27522],{"class":1018},[199,28095,28096,28098],{"class":201,"line":388},[199,28097,27783],{"class":1018},[199,28099,27522],{"class":1018},[199,28101,28102,28105],{"class":201,"line":415},[199,28103,28104],{"class":1018},"  --display_data=true",[199,28106,27522],{"class":1018},[199,28108,28109,28112,28115],{"class":201,"line":426},[199,28110,28111],{"class":1018},"  --dataset.repo_id=",[199,28113,28114],{"class":898},"\"Embodied-AI-6\u002Fso101_test\"",[199,28116,27522],{"class":1018},[199,28118,28119,28122],{"class":201,"line":1015},[199,28120,28121],{"class":1018},"  --dataset.num_episodes=10",[199,28123,27522],{"class":1018},[199,28125,28126,28129,28132],{"class":201,"line":1031},[199,28127,28128],{"class":1018},"  --dataset.single_task=",[199,28130,28131],{"class":898},"\"Grab the green cube\"",[199,28133,27522],{"class":1018},[199,28135,28136],{"class":201,"line":1043},[199,28137,28138],{"class":1018},"  --resume=true\n",[176,28140,28141],{},[27,28142,28143,28146],{},[196,28144,28145],{},"--resume=true","：已有同一数据集时继续追加 episode。",[31,28148,28149],{},[55,28150],{"alt":57,"src":28151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,28153,28155],{"id":28154},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[190,28157,28159],{"className":26666,"code":28158,"language":26668,"meta":57,"style":57},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[196,28160,28161],{"__ignoreMap":57},[199,28162,28163,28166,28169],{"class":201,"line":202},[199,28164,28165],{"class":878},"rm",[199,28167,28168],{"class":1018}," -rf",[199,28170,28171],{"class":898}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[31,28173,28174],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,28176,28178],{"id":28177},"_63-回放指定-episode","6.3 回放指定 episode",[190,28180,28182],{"className":26666,"code":28181,"language":26668,"meta":57,"style":57},"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",[196,28183,28184,28191,28197,28203,28209,28217],{"__ignoreMap":57},[199,28185,28186,28189],{"class":201,"line":202},[199,28187,28188],{"class":878},"lerobot-replay",[199,28190,27522],{"class":1018},[199,28192,28193,28195],{"class":201,"line":36},[199,28194,27554],{"class":1018},[199,28196,27522],{"class":1018},[199,28198,28199,28201],{"class":201,"line":73},[199,28200,27632],{"class":1018},[199,28202,27522],{"class":1018},[199,28204,28205,28207],{"class":201,"line":333},[199,28206,27692],{"class":1018},[199,28208,27522],{"class":1018},[199,28210,28211,28213,28215],{"class":201,"line":227},[199,28212,28111],{"class":1018},[199,28214,28114],{"class":898},[199,28216,27522],{"class":1018},[199,28218,28219],{"class":201,"line":238},[199,28220,28221],{"class":1018},"  --dataset.episode=0\n",[1002,28223,28224],{},"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":57,"searchDepth":36,"depth":36,"links":28226},[28227,28228,28229],{"id":28041,"depth":36,"text":28042},{"id":28154,"depth":36,"text":28155},{"id":28177,"depth":36,"text":28178},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":28032,"description":3023},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":28236,"title":28237,"body":28238,"description":3023,"extension":3024,"meta":28366,"navigation":906,"path":28367,"seo":28368,"stem":28369,"__hash__":28370},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":28239,"toc":28364},[28240,28244,28307,28310,28357,28362],[10,28241,28243],{"id":28242},"_7-act-模型训练","7. ACT 模型训练",[190,28245,28247],{"className":26666,"code":28246,"language":26668,"meta":57,"style":57},"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",[196,28248,28249,28256,28264,28271,28278,28285,28292,28299],{"__ignoreMap":57},[199,28250,28251,28254],{"class":201,"line":202},[199,28252,28253],{"class":878},"lerobot-train",[199,28255,27522],{"class":1018},[199,28257,28258,28260,28262],{"class":201,"line":36},[199,28259,28111],{"class":1018},[199,28261,28114],{"class":898},[199,28263,27522],{"class":1018},[199,28265,28266,28269],{"class":201,"line":73},[199,28267,28268],{"class":1018},"  --policy.type=act",[199,28270,27522],{"class":1018},[199,28272,28273,28276],{"class":201,"line":333},[199,28274,28275],{"class":1018},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[199,28277,27522],{"class":1018},[199,28279,28280,28283],{"class":201,"line":227},[199,28281,28282],{"class":1018},"  --job_name=act_so101_test",[199,28284,27522],{"class":1018},[199,28286,28287,28290],{"class":201,"line":238},[199,28288,28289],{"class":1018},"  --policy.device=cuda",[199,28291,27522],{"class":1018},[199,28293,28294,28297],{"class":201,"line":252},[199,28295,28296],{"class":1018},"  --wandb.enable=false",[199,28298,27522],{"class":1018},[199,28300,28301,28304],{"class":201,"line":388},[199,28302,28303],{"class":1018},"  --policy.repo_id=",[199,28305,28306],{"class":898},"\"Embodied-AI-6\u002Flerobot_new\"\n",[31,28308,28309],{},"参数说明：",[176,28311,28312,28318,28324,28330,28336,28345,28351],{},[27,28313,28314,28317],{},[196,28315,28316],{},"--dataset.repo_id","：训练数据集仓库。",[27,28319,28320,28323],{},[196,28321,28322],{},"--policy.type=act","：策略模型类型为 ACT。",[27,28325,28326,28329],{},[196,28327,28328],{},"--output_dir","：本地训练输出目录。",[27,28331,28332,28335],{},[196,28333,28334],{},"--job_name","：训练任务名称。",[27,28337,28338,28341,28342,27406],{},[196,28339,28340],{},"--policy.device","：训练设备（如 ",[196,28343,28344],{},"cuda",[27,28346,28347,28350],{},[196,28348,28349],{},"--wandb.enable","：是否启用 WandB 可视化。",[27,28352,28353,28356],{},[196,28354,28355],{},"--policy.repo_id","：训练后模型推送目标仓库。",[31,28358,28359],{},[55,28360],{"alt":57,"src":28361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1002,28363,28224],{},{"title":57,"searchDepth":36,"depth":36,"links":28365},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":28237,"description":3023},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":28372,"title":28373,"body":28374,"description":3023,"extension":3024,"meta":28461,"navigation":906,"path":28462,"seo":28463,"stem":28464,"__hash__":28465},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":28375,"toc":28459},[28376,28379,28382,28449,28457],[10,28377,28373],{"id":28378},"_8-策略部署与自动采集",[31,28380,28381],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[190,28383,28385],{"className":26666,"code":28384,"language":26668,"meta":57,"style":57},"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",[196,28386,28387,28393,28399,28405,28413,28419,28426,28434,28442],{"__ignoreMap":57},[199,28388,28389,28391],{"class":201,"line":202},[199,28390,28052],{"class":878},[199,28392,27522],{"class":1018},[199,28394,28395,28397],{"class":201,"line":36},[199,28396,27554],{"class":1018},[199,28398,27522],{"class":1018},[199,28400,28401,28403],{"class":201,"line":73},[199,28402,27632],{"class":1018},[199,28404,27522],{"class":1018},[199,28406,28407,28409,28411],{"class":201,"line":333},[199,28408,27761],{"class":1018},[199,28410,28079],{"class":898},[199,28412,27522],{"class":1018},[199,28414,28415,28417],{"class":201,"line":227},[199,28416,27692],{"class":1018},[199,28418,27522],{"class":1018},[199,28420,28421,28424],{"class":201,"line":238},[199,28422,28423],{"class":1018},"  --display_data=false",[199,28425,27522],{"class":1018},[199,28427,28428,28430,28432],{"class":201,"line":252},[199,28429,28111],{"class":1018},[199,28431,28114],{"class":898},[199,28433,27522],{"class":1018},[199,28435,28436,28438,28440],{"class":201,"line":388},[199,28437,28128],{"class":1018},[199,28439,28131],{"class":898},[199,28441,27522],{"class":1018},[199,28443,28444,28447],{"class":201,"line":415},[199,28445,28446],{"class":1018},"  --policy.path=",[199,28448,28306],{"class":898},[176,28450,28451],{},[27,28452,28453,28456],{},[196,28454,28455],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1002,28458,28224],{},{"title":57,"searchDepth":36,"depth":36,"links":28460},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":28373,"description":3023},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":28467,"title":28468,"body":28469,"description":3023,"extension":3024,"meta":28498,"navigation":906,"path":28499,"seo":28500,"stem":28501,"__hash__":28502},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":28470,"toc":28496},[28471,28475,28478,28484,28487,28493],[10,28472,28474],{"id":28473},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[31,28476,28477],{},"项目地址：",[31,28479,28480],{},[2867,28481,28482],{"href":28482,"rel":28483},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[2871],[31,28485,28486],{},"参考教程：",[31,28488,28489],{},[2867,28490,28491],{"href":28491,"rel":28492},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[2871],[31,28494,28495],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":57,"searchDepth":36,"depth":36,"links":28497},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":28468,"description":3023},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":28504,"title":28505,"body":28506,"description":28510,"extension":3024,"meta":28511,"navigation":906,"path":28512,"seo":28513,"stem":28514,"__hash__":28515},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":28507,"toc":28508},[],{"title":57,"searchDepth":36,"depth":36,"links":28509},[],"act复现",{"category":26222},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":28505,"description":28510},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":28517,"title":28518,"body":28519,"description":57,"extension":3024,"meta":28821,"navigation":906,"path":28822,"seo":28823,"stem":28824,"__hash__":28825},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":28520,"toc":28813},[28521,28524,28528,28538,28545,28552,28555,28562,28565,28568,28572,28584,28588,28634,28637,28640,28643,28646,28649,28653,28691,28697,28701,28755,28760,28763,28766,28771,28774,28779,28782,28785,28789,28792,28795,28799],[10,28522,28518],{"id":28523},"_1简介",[19,28525,28527],{"id":28526},"_11什么是-docker","1.1什么是 Docker？",[31,28529,28530,28531,28534,28535],{},"Docker 是一个开源的 ",[49,28532,28533],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[49,28536,28537],{},"一次构建，到处运行。",[31,28539,28540,28541,28544],{},"“ ",[49,28542,28543],{},"一次构建，到处运行"," ”也就是说：",[24,28546,28547],{},[27,28548,28549],{},[49,28550,28551],{},"之前：",[31,28553,28554],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[24,28556,28557],{},[27,28558,28559],{},[49,28560,28561],{},"使用docker后：",[31,28563,28564],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[31,28566,28567],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[19,28569,28571],{"id":28570},"_12它是怎么工作的","1.2.它是怎么工作的？",[176,28573,28574,28577],{},[27,28575,28576],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[27,28578,28579,28580,28583],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[49,28581,28582],{},"无论在哪运行都一样稳定"," 。",[19,28585,28587],{"id":28586},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[3227,28589,28590,28600],{},[3230,28591,28592],{},[3233,28593,28594,28597],{},[3236,28595,28596],{"align":26580},"概念",[3236,28598,28599],{"align":26580},"解释",[3273,28601,28602,28610,28618,28626],{},[3233,28603,28604,28607],{},[3278,28605,28606],{"align":26580},"镜像",[3278,28608,28609],{"align":26580},"Image，运行容器的模板，像是一个应用快照",[3233,28611,28612,28615],{},[3278,28613,28614],{"align":26580},"容器",[3278,28616,28617],{"align":26580},"Container，运行中的镜像实例，有自己的文件系统、网络等",[3233,28619,28620,28623],{},[3278,28621,28622],{"align":26580},"Dockerfile",[3278,28624,28625],{"align":26580},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[3233,28627,28628,28631],{},[3278,28629,28630],{"align":26580},"仓库",[3278,28632,28633],{"align":26580},"Registry，存放镜像的地方，比如 Docker Hub",[31,28635,28636],{},"抽象化理解:",[31,28638,28639],{},"Docker镜像≈C++类",[31,28641,28642],{},"Docker容器≈C++类实例(即对象)",[31,28644,28645],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[31,28647,28648],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[19,28650,28652],{"id":28651},"_14类比理解","1.4.类比理解",[3227,28654,28655,28665],{},[3230,28656,28657],{},[3233,28658,28659,28662],{},[3236,28660,28661],{"align":26580},"传统部署",[3236,28663,28664],{"align":26580},"Docker部署",[3273,28666,28667,28675,28683],{},[3233,28668,28669,28672],{},[3278,28670,28671],{"align":26580},"手动安装依赖、调试版本不一致问题",[3278,28673,28674],{"align":26580},"一次打包环境和代码",[3233,28676,28677,28680],{},[3278,28678,28679],{"align":26580},"程序“裸奔”跑在系统上",[3278,28681,28682],{"align":26580},"程序“穿着容器”隔离运行",[3233,28684,28685,28688],{},[3278,28686,28687],{"align":26580},"容易“在我电脑上能跑”",[3278,28689,28690],{"align":26580},"保证“无论在哪都能跑”",[31,28692,28693,28694],{},"就像快递包裹： ",[49,28695,28696],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[19,28698,28700],{"id":28699},"_15docker-的核心优势","1.5.Docker 的核心优势",[3227,28702,28703,28713],{},[3230,28704,28705],{},[3233,28706,28707,28710],{},[3236,28708,28709],{"align":26580},"优势",[3236,28711,28712],{"align":26580},"说明",[3273,28714,28715,28723,28731,28739,28747],{},[3233,28716,28717,28720],{},[3278,28718,28719],{"align":26580},"轻量级",[3278,28721,28722],{"align":26580},"基于系统内核共享，启动速度快，占资源少",[3233,28724,28725,28728],{},[3278,28726,28727],{"align":26580},"跨平台",[3278,28729,28730],{"align":26580},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[3233,28732,28733,28736],{},[3278,28734,28735],{"align":26580},"易于迁移部署",[3278,28737,28738],{"align":26580},"应用和环境一起封装，不怕依赖不一致",[3233,28740,28741,28744],{},[3278,28742,28743],{"align":26580},"易于版本控制",[3278,28745,28746],{"align":26580},"镜像版本可控，支持回滚",[3233,28748,28749,28752],{},[3278,28750,28751],{"align":26580},"生态丰富",[3278,28753,28754],{"align":26580},"Docker Hub 上有成千上万的现成镜像可用",[24,28756,28757],{},[27,28758,28759],{},"在Linux上可以几乎实现无性能损失。",[31,28761,28762],{},"docker里的发行版和本机共用Linux内核。",[31,28764,28765],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[24,28767,28768],{},[27,28769,28770],{},"可以快速部署在绝大多数Linux发行版",[31,28772,28773],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[24,28775,28776],{},[27,28777,28778],{},"配置环境简单",[31,28780,28781],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[31,28783,28784],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[24,28786,28787],{},[27,28788,28751],{},[31,28790,28791],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[31,28793,28794],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[19,28796,28798],{"id":28797},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[176,28800,28801,28804,28807,28810],{},[27,28802,28803],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[27,28805,28806],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[27,28808,28809],{},"微服务架构：每个服务一个容器，灵活组合",[27,28811,28812],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":57,"searchDepth":36,"depth":36,"links":28814},[28815,28816,28817,28818,28819,28820],{"id":28526,"depth":73,"text":28527},{"id":28570,"depth":73,"text":28571},{"id":28586,"depth":73,"text":28587},{"id":28651,"depth":73,"text":28652},{"id":28699,"depth":73,"text":28700},{"id":28797,"depth":73,"text":28798},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":28518,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28827,"title":28828,"body":28829,"description":57,"extension":3024,"meta":29562,"navigation":906,"path":29563,"seo":29564,"stem":29565,"__hash__":29566},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28830,"toc":29557},[28831,28834,28838,28841,28844,28850,28856,28860,28869,28872,28929,28932,28983,28986,29069,29072,29109,29113,29124,29137,29144,29147,29227,29230,29280,29283,29306,29310,29317,29320,29336,29342,29345,29361,29367,29370,29386,29400,29406,29426,29432,29435,29447,29453,29456,29470,29476,29479,29499,29504,29507,29510,29514,29517,29520,29523,29530,29533,29536,29539,29544,29549,29554],[10,28832,28828],{"id":28833},"_2安装docker",[19,28835,28837],{"id":28836},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[31,28839,28840],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[31,28842,28843],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[31,28845,28846],{},[2867,28847,28848],{"href":28848,"rel":28849},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[2871],[31,28851,28852],{},[2867,28853,28854],{"href":28854,"rel":28855},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[2871],[627,28857,28859],{"id":28858},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[31,28861,28862,28863,28868],{},"以下内容根据 ",[2867,28864,28867],{"href":28865,"rel":28866},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[2871],"官方文档"," 修改而来。",[31,28870,28871],{},"如果你过去安装过 docker，先删掉：",[190,28873,28875],{"className":26666,"code":28874,"language":26668,"meta":57,"style":57},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[196,28876,28877],{"__ignoreMap":57},[199,28878,28879,28881,28884,28887,28890,28893,28896,28899,28902,28905,28908,28911,28914,28917,28920,28923,28926],{"class":201,"line":202},[199,28880,5929],{"class":1086},[199,28882,28883],{"class":205}," pkg ",[199,28885,28886],{"class":1086},"in",[199,28888,28889],{"class":898}," docker.io",[199,28891,28892],{"class":898}," docker-doc",[199,28894,28895],{"class":898}," docker-compose",[199,28897,28898],{"class":898}," docker-compose-v2",[199,28900,28901],{"class":898}," podman-docker",[199,28903,28904],{"class":898}," containerd",[199,28906,28907],{"class":898}," runc",[199,28909,28910],{"class":205},"; ",[199,28912,28913],{"class":1086},"do",[199,28915,28916],{"class":878}," sudo",[199,28918,28919],{"class":898}," apt-get",[199,28921,28922],{"class":898}," remove",[199,28924,28925],{"class":205}," $pkg; ",[199,28927,28928],{"class":1086},"done\n",[31,28930,28931],{},"首先安装依赖和GPG：",[190,28933,28937],{"className":28934,"code":28935,"language":28936,"meta":57,"style":57},"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",[196,28938,28939,28944,28949,28954,28959,28964,28969,28973,28978],{"__ignoreMap":57},[199,28940,28941],{"class":201,"line":202},[199,28942,28943],{},"# Add Docker's official GPG key:\n",[199,28945,28946],{"class":201,"line":36},[199,28947,28948],{},"sudo apt-get update\n",[199,28950,28951],{"class":201,"line":73},[199,28952,28953],{},"sudo apt-get install ca-certificates curl\n",[199,28955,28956],{"class":201,"line":333},[199,28957,28958],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[199,28960,28961],{"class":201,"line":227},[199,28962,28963],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[199,28965,28966],{"class":201,"line":238},[199,28967,28968],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[199,28970,28971],{"class":201,"line":252},[199,28972,907],{"emptyLinePlaceholder":906},[199,28974,28975],{"class":201,"line":388},[199,28976,28977],{},"# 如果上面这行报错就弄下面这行\n",[199,28979,28980],{"class":201,"line":415},[199,28981,28982],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[31,28984,28985],{},"信任 Docker 的 GPG 公钥并添加仓库：",[190,28987,28989],{"className":26666,"code":28988,"language":26668,"meta":57,"style":57},"# 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",[196,28990,28991,28996,29002,29019,29052],{"__ignoreMap":57},[199,28992,28993],{"class":201,"line":202},[199,28994,28995],{"class":1454},"# Add the repository to Apt sources:\n",[199,28997,28998,29000],{"class":201,"line":36},[199,28999,27968],{"class":1018},[199,29001,27522],{"class":1018},[199,29003,29004,29007,29010,29013,29016],{"class":201,"line":73},[199,29005,29006],{"class":898},"  \"deb [arch=$(",[199,29008,29009],{"class":878},"dpkg",[199,29011,29012],{"class":1018}," --print-architecture",[199,29014,29015],{"class":898},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[199,29017,29018],{"class":1018},"\\\n",[199,29020,29021,29024,29026,29028,29031,29034,29036,29038,29041,29043,29045,29048,29050],{"class":201,"line":333},[199,29022,29023],{"class":898},"  \"",[199,29025,27943],{"class":205},[199,29027,3638],{"class":1018},[199,29029,29030],{"class":898}," \u002Fetc\u002Fos-release",[199,29032,29033],{"class":205}," && ",[199,29035,27968],{"class":1018},[199,29037,12605],{"class":898},[199,29039,29040],{"class":205},"$VERSION_CODENAME",[199,29042,3337],{"class":898},[199,29044,3512],{"class":205},[199,29046,29047],{"class":898},"\" stable\"",[199,29049,27953],{"class":1086},[199,29051,27522],{"class":1018},[199,29053,29054,29057,29060,29063,29066],{"class":201,"line":227},[199,29055,29056],{"class":878},"  sudo",[199,29058,29059],{"class":898}," tee",[199,29061,29062],{"class":898}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[199,29064,29065],{"class":1086}," >",[199,29067,29068],{"class":898}," \u002Fdev\u002Fnull\n",[31,29070,29071],{},"最后安装",[190,29073,29075],{"className":26666,"code":29074,"language":26668,"meta":57,"style":57},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[196,29076,29077,29086],{"__ignoreMap":57},[199,29078,29079,29081,29083],{"class":201,"line":202},[199,29080,27420],{"class":878},[199,29082,28919],{"class":898},[199,29084,29085],{"class":898}," update\n",[199,29087,29088,29090,29092,29094,29097,29100,29103,29106],{"class":201,"line":36},[199,29089,27420],{"class":878},[199,29091,28919],{"class":898},[199,29093,26678],{"class":898},[199,29095,29096],{"class":898}," docker-ce",[199,29098,29099],{"class":898}," docker-ce-cli",[199,29101,29102],{"class":898}," containerd.io",[199,29104,29105],{"class":898}," docker-buildx-plugin",[199,29107,29108],{"class":898}," docker-compose-plugin\n",[627,29110,29112],{"id":29111},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[31,29114,29115,29116,29119,29120,29123],{},"查看自己自己包管理工具版本（dnf是 ",[49,29117,29118],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[49,29121,29122],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[190,29125,29127],{"className":26666,"code":29126,"language":26668,"meta":57,"style":57},"dnf --version\n",[196,29128,29129],{"__ignoreMap":57},[199,29130,29131,29134],{"class":201,"line":202},[199,29132,29133],{"class":878},"dnf",[199,29135,29136],{"class":1018}," --version\n",[31,29138,28862,29139,29143],{},[2867,29140,28867],{"href":29141,"rel":29142},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[2871]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[31,29145,29146],{},"如果你之前安装过 docker，请先删掉",[190,29148,29150],{"className":26666,"code":29149,"language":26668,"meta":57,"style":57},"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",[196,29151,29152,29166,29173,29180,29187,29194,29201,29208,29215,29222],{"__ignoreMap":57},[199,29153,29154,29156,29159,29161,29164],{"class":201,"line":202},[199,29155,27420],{"class":878},[199,29157,29158],{"class":898}," dnf",[199,29160,28922],{"class":898},[199,29162,29163],{"class":898}," docker",[199,29165,27522],{"class":1018},[199,29167,29168,29171],{"class":201,"line":36},[199,29169,29170],{"class":898},"                  docker-client",[199,29172,27522],{"class":1018},[199,29174,29175,29178],{"class":201,"line":73},[199,29176,29177],{"class":898},"                  docker-client-latest",[199,29179,27522],{"class":1018},[199,29181,29182,29185],{"class":201,"line":333},[199,29183,29184],{"class":898},"                  docker-common",[199,29186,27522],{"class":1018},[199,29188,29189,29192],{"class":201,"line":227},[199,29190,29191],{"class":898},"                  docker-latest",[199,29193,27522],{"class":1018},[199,29195,29196,29199],{"class":201,"line":238},[199,29197,29198],{"class":898},"                  docker-latest-logrotate",[199,29200,27522],{"class":1018},[199,29202,29203,29206],{"class":201,"line":252},[199,29204,29205],{"class":898},"                  docker-logrotate",[199,29207,27522],{"class":1018},[199,29209,29210,29213],{"class":201,"line":388},[199,29211,29212],{"class":898},"                  docker-selinux",[199,29214,27522],{"class":1018},[199,29216,29217,29220],{"class":201,"line":415},[199,29218,29219],{"class":898},"                  docker-engine-selinux",[199,29221,27522],{"class":1018},[199,29223,29224],{"class":201,"line":426},[199,29225,29226],{"class":898},"                  docker-engine\n",[31,29228,29229],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[190,29231,29233],{"className":26666,"code":29232,"language":26668,"meta":57,"style":57},"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",[196,29234,29235,29249,29264],{"__ignoreMap":57},[199,29236,29237,29239,29241,29244,29246],{"class":201,"line":202},[199,29238,27420],{"class":878},[199,29240,29158],{"class":898},[199,29242,29243],{"class":1018}," -y",[199,29245,26678],{"class":898},[199,29247,29248],{"class":898}," dnf-plugins-core\n",[199,29250,29251,29253,29255,29258,29261],{"class":201,"line":36},[199,29252,27420],{"class":878},[199,29254,29158],{"class":898},[199,29256,29257],{"class":898}," config-manager",[199,29259,29260],{"class":898}," addrepo",[199,29262,29263],{"class":1018}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[199,29265,29266,29268,29271,29274,29277],{"class":201,"line":73},[199,29267,27420],{"class":878},[199,29269,29270],{"class":898}," sed",[199,29272,29273],{"class":1018}," -i",[199,29275,29276],{"class":898}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[199,29278,29279],{"class":898}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[31,29281,29282],{},"最后安装：",[190,29284,29286],{"className":26666,"code":29285,"language":26668,"meta":57,"style":57},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[196,29287,29288],{"__ignoreMap":57},[199,29289,29290,29292,29294,29296,29298,29300,29302,29304],{"class":201,"line":202},[199,29291,27420],{"class":878},[199,29293,29158],{"class":898},[199,29295,26678],{"class":898},[199,29297,29096],{"class":898},[199,29299,29099],{"class":898},[199,29301,29102],{"class":898},[199,29303,29105],{"class":898},[199,29305,29108],{"class":898},[19,29307,29309],{"id":29308},"_22配置环境","2.2.配置环境",[627,29311,29313,29316],{"id":29312},"_221检查-docker-服务状态",[49,29314,29315],{},"2.2.1.检查 Docker 服务状态"," ：",[31,29318,29319],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[190,29321,29323],{"className":26666,"code":29322,"language":26668,"meta":57,"style":57},"systemctl status docker\n",[196,29324,29325],{"__ignoreMap":57},[199,29326,29327,29330,29333],{"class":201,"line":202},[199,29328,29329],{"class":878},"systemctl",[199,29331,29332],{"class":898}," status",[199,29334,29335],{"class":898}," docker\n",[627,29337,29339,29316],{"id":29338},"_222启动-docker-服务",[49,29340,29341],{},"2.2.2.启动 Docker 服务",[31,29343,29344],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[190,29346,29348],{"className":26666,"code":29347,"language":26668,"meta":57,"style":57},"sudo systemctl start docker\n",[196,29349,29350],{"__ignoreMap":57},[199,29351,29352,29354,29357,29359],{"class":201,"line":202},[199,29353,27420],{"class":878},[199,29355,29356],{"class":898}," systemctl",[199,29358,7082],{"class":898},[199,29360,29335],{"class":898},[627,29362,29364,29316],{"id":29363},"_223设置-docker-开机自启",[49,29365,29366],{},"2.2.3.设置 Docker 开机自启",[31,29368,29369],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[190,29371,29373],{"className":26666,"code":29372,"language":26668,"meta":57,"style":57},"sudo systemctl enable docker\n",[196,29374,29375],{"__ignoreMap":57},[199,29376,29377,29379,29381,29384],{"class":201,"line":202},[199,29378,27420],{"class":878},[199,29380,29356],{"class":898},[199,29382,29383],{"class":898}," enable",[199,29385,29335],{"class":898},[627,29387,29389,16656,29392,16656,29397,29316],{"id":29388},"_224将用户添加到-docker-组",[49,29390,29391],{},"2.2.4.将用户添加到",[49,29393,29394],{},[196,29395,29396],{},"docker",[49,29398,29399],{},"组",[31,29401,29402,29403,29405],{},"使用以下命令将当前用户添加到 ",[196,29404,29396],{}," 组：",[190,29407,29409],{"className":26666,"code":29408,"language":26668,"meta":57,"style":57},"sudo usermod -aG docker $USER\n",[196,29410,29411],{"__ignoreMap":57},[199,29412,29413,29415,29418,29421,29423],{"class":201,"line":202},[199,29414,27420],{"class":878},[199,29416,29417],{"class":898}," usermod",[199,29419,29420],{"class":1018}," -aG",[199,29422,29163],{"class":898},[199,29424,29425],{"class":205}," $USER\n",[627,29427,29429,29316],{"id":29428},"_225退出并重新登录",[49,29430,29431],{},"2.2.5.退出并重新登录",[31,29433,29434],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[190,29436,29438],{"className":26666,"code":29437,"language":26668,"meta":57,"style":57},"newgrp docker\n",[196,29439,29440],{"__ignoreMap":57},[199,29441,29442,29445],{"class":201,"line":202},[199,29443,29444],{"class":878},"newgrp",[199,29446,29335],{"class":898},[627,29448,29450,29316],{"id":29449},"_226重新启动-docker-服务如果需要",[49,29451,29452],{},"2.2.6.重新启动 Docker 服务（如果需要）",[31,29454,29455],{},"确保 Docker 服务正在运行，可以使用以下命令：",[190,29457,29458],{"className":26666,"code":29347,"language":26668,"meta":57,"style":57},[196,29459,29460],{"__ignoreMap":57},[199,29461,29462,29464,29466,29468],{"class":201,"line":202},[199,29463,27420],{"class":878},[199,29465,29356],{"class":898},[199,29467,7082],{"class":898},[199,29469,29335],{"class":898},[627,29471,29473,29316],{"id":29472},"_227重启电脑后检查-docker-服务状态",[49,29474,29475],{},"2.2.7.重启电脑后检查 Docker 服务状态",[31,29477,29478],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[190,29480,29482],{"className":26666,"code":29481,"language":26668,"meta":57,"style":57},"sudo reboot\nsystemctl status docker\n",[196,29483,29484,29491],{"__ignoreMap":57},[199,29485,29486,29488],{"class":201,"line":202},[199,29487,27420],{"class":878},[199,29489,29490],{"class":898}," reboot\n",[199,29492,29493,29495,29497],{"class":201,"line":36},[199,29494,29329],{"class":878},[199,29496,29332],{"class":898},[199,29498,29335],{"class":898},[31,29500,29501],{},[55,29502],{"alt":57,"src":29503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[31,29505,29506],{},"第三行显示enabled说明开机自启动成功",[31,29508,29509],{},"按q退出",[19,29511,29513],{"id":29512},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[31,29515,29516],{},"优先使用linux来使用docker是比较好的",[31,29518,29519],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[31,29521,29522],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[31,29524,29525,29526],{},"官方下载安装:",[2867,29527,29528],{"href":29528,"rel":29529},"https:\u002F\u002Fwww.docker.com\u002F",[2871],[31,29531,29532],{},"Windows的Docker显卡直通与USB直通:",[31,29534,29535],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[31,29537,29538],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[31,29540,29541],{},[55,29542],{"alt":57,"src":29543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[31,29545,29546],{},[55,29547],{"alt":57,"src":29548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[31,29550,29551],{},[55,29552],{"alt":57,"src":29553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1002,29555,29556],{},"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":57,"searchDepth":36,"depth":36,"links":29558},[29559,29560,29561],{"id":28836,"depth":73,"text":28837},{"id":29308,"depth":73,"text":29309},{"id":29512,"depth":73,"text":29513},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28828,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":29568,"title":29569,"body":29570,"description":29577,"extension":3024,"meta":30270,"navigation":906,"path":30271,"seo":30272,"stem":30273,"__hash__":30274},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":29571,"toc":30264},[29572,29575,29578,29582,29587,29592,29595,29623,29628,29637,29640,29645,29649,29656,29661,29667,29671,29674,29678,29683,29775,29780,29798,29803,29824,29829,29845,29849,29854,29883,29888,29934,29939,29983,29991,30008,30013,30029,30034,30048,30051,30054,30057,30060,30089,30092,30097,30101,30104,30107,30113,30116,30119,30122,30184,30191,30196,30199,30217,30221,30224,30241,30244,30247,30261],[10,29573,29569],{"id":29574},"_3docker直通",[31,29576,29577],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[19,29579,29581],{"id":29580},"_31usb直通","3.1.USB直通",[31,29583,29584],{},[55,29585],{"alt":57,"src":29586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[24,29588,29589],{},[27,29590,29591],{},"方法一(不是很推荐新手)：",[31,29593,29594],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[190,29596,29598],{"className":26666,"code":29597,"language":26668,"meta":57,"style":57},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[196,29599,29600,29608,29613],{"__ignoreMap":57},[199,29601,29602,29605],{"class":201,"line":202},[199,29603,29604],{"class":878},"ls",[199,29606,29607],{"class":898}," \u002Fdev\n",[199,29609,29610],{"class":201,"line":36},[199,29611,29612],{"class":1454},"#例如\n",[199,29614,29615,29618,29620],{"class":201,"line":73},[199,29616,29617],{"class":205},"--device",[199,29619,895],{"class":1086},[199,29621,29622],{"class":898},"\u002Fdev\u002Ftty_USB0\n",[24,29624,29625],{"start":36},[27,29626,29627],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[190,29629,29631],{"className":26666,"code":29630,"language":26668,"meta":57,"style":57},"--privileged\n",[196,29632,29633],{"__ignoreMap":57},[199,29634,29635],{"class":201,"line":202},[199,29636,29630],{"class":878},[31,29638,29639],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[31,29641,29642],{},[55,29643],{"alt":57,"src":29644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[19,29646,29648],{"id":29647},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[31,29650,29651,29652,29655],{},"NVIDIA Container Toolkit使用户 ",[49,29653,29654],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[31,29657,29658],{},[55,29659],{"alt":57,"src":29660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[31,29662,29663],{},[2867,29664,29665],{"href":29665,"rel":29666},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[2871],[627,29668,29670],{"id":29669},"_321安装","3.2.1.安装",[31,29672,29673],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[25754,29675,29677],{"id":29676},"_3211ubuntu","3.2.1.1.Ubuntu",[24,29679,29680],{},[27,29681,29682],{},"配置存储库 并更新",[190,29684,29686],{"className":26666,"code":29685,"language":26668,"meta":57,"style":57},"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",[196,29687,29688,29717,29737,29749,29761,29767],{"__ignoreMap":57},[199,29689,29690,29693,29696,29699,29701,29703,29706,29709,29712,29715],{"class":201,"line":202},[199,29691,29692],{"class":878},"curl",[199,29694,29695],{"class":1018}," -fsSL",[199,29697,29698],{"class":898}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[199,29700,27953],{"class":1086},[199,29702,28916],{"class":878},[199,29704,29705],{"class":898}," gpg",[199,29707,29708],{"class":1018}," --dearmor",[199,29710,29711],{"class":1018}," -o",[199,29713,29714],{"class":898}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[199,29716,27522],{"class":1018},[199,29718,29719,29722,29724,29727,29730,29733,29735],{"class":201,"line":36},[199,29720,29721],{"class":205},"  && ",[199,29723,29692],{"class":878},[199,29725,29726],{"class":1018}," -s",[199,29728,29729],{"class":1018}," -L",[199,29731,29732],{"class":898}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[199,29734,27953],{"class":1086},[199,29736,27522],{"class":1018},[199,29738,29739,29742,29745,29747],{"class":201,"line":73},[199,29740,29741],{"class":878},"    sed",[199,29743,29744],{"class":898}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[199,29746,27953],{"class":1086},[199,29748,27522],{"class":1018},[199,29750,29751,29754,29756,29759],{"class":201,"line":333},[199,29752,29753],{"class":878},"    sudo",[199,29755,29059],{"class":898},[199,29757,29758],{"class":898}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[199,29760,27522],{"class":1018},[199,29762,29763,29765],{"class":201,"line":227},[199,29764,29721],{"class":205},[199,29766,29018],{"class":1018},[199,29768,29769,29771,29773],{"class":201,"line":238},[199,29770,29753],{"class":878},[199,29772,28919],{"class":898},[199,29774,29085],{"class":898},[24,29776,29777],{"start":36},[27,29778,29779],{},"安装nvidia-docker2",[190,29781,29783],{"className":26666,"code":29782,"language":26668,"meta":57,"style":57},"sudo apt-get install -y nvidia-docker2\n",[196,29784,29785],{"__ignoreMap":57},[199,29786,29787,29789,29791,29793,29795],{"class":201,"line":202},[199,29788,27420],{"class":878},[199,29790,28919],{"class":898},[199,29792,26678],{"class":898},[199,29794,29243],{"class":1018},[199,29796,29797],{"class":898}," nvidia-docker2\n",[24,29799,29800],{"start":73},[27,29801,29802],{},"使用nvidia-ctk命令配置container runtime",[190,29804,29806],{"className":26666,"code":29805,"language":26668,"meta":57,"style":57},"sudo nvidia-ctk runtime configure --runtime=docker\n",[196,29807,29808],{"__ignoreMap":57},[199,29809,29810,29812,29815,29818,29821],{"class":201,"line":202},[199,29811,27420],{"class":878},[199,29813,29814],{"class":898}," nvidia-ctk",[199,29816,29817],{"class":898}," runtime",[199,29819,29820],{"class":898}," configure",[199,29822,29823],{"class":1018}," --runtime=docker\n",[24,29825,29826],{"start":333},[27,29827,29828],{},"重启docker服务:",[190,29830,29832],{"className":26666,"code":29831,"language":26668,"meta":57,"style":57},"sudo systemctl restart docker\n",[196,29833,29834],{"__ignoreMap":57},[199,29835,29836,29838,29840,29843],{"class":201,"line":202},[199,29837,27420],{"class":878},[199,29839,29356],{"class":898},[199,29841,29842],{"class":898}," restart",[199,29844,29335],{"class":898},[25754,29846,29848],{"id":29847},"_3212fedora","3.2.1.2.Fedora",[24,29850,29851],{},[27,29852,29853],{},"配置存储库",[190,29855,29857],{"className":26666,"code":29856,"language":26668,"meta":57,"style":57},"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",[196,29858,29859,29874],{"__ignoreMap":57},[199,29860,29861,29863,29865,29867,29870,29872],{"class":201,"line":202},[199,29862,29692],{"class":878},[199,29864,29726],{"class":1018},[199,29866,29729],{"class":1018},[199,29868,29869],{"class":898}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[199,29871,27953],{"class":1086},[199,29873,27522],{"class":1018},[199,29875,29876,29878,29880],{"class":201,"line":36},[199,29877,27420],{"class":878},[199,29879,29059],{"class":898},[199,29881,29882],{"class":898}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[24,29884,29885],{"start":36},[27,29886,29887],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[190,29889,29891],{"className":26666,"code":29890,"language":26668,"meta":57,"style":57},"# 如果是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",[196,29892,29893,29898,29912,29916,29921],{"__ignoreMap":57},[199,29894,29895],{"class":201,"line":202},[199,29896,29897],{"class":1454},"# 如果是RHEL或者Rocky（DNF4）\n",[199,29899,29900,29902,29904,29906,29909],{"class":201,"line":36},[199,29901,27420],{"class":878},[199,29903,29158],{"class":898},[199,29905,29257],{"class":898},[199,29907,29908],{"class":1018}," --add-repo",[199,29910,29911],{"class":898}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[199,29913,29914],{"class":201,"line":73},[199,29915,907],{"emptyLinePlaceholder":906},[199,29917,29918],{"class":201,"line":333},[199,29919,29920],{"class":1454},"# 如果是Feodra41+（DNF5）\n",[199,29922,29923,29925,29927,29929,29931],{"class":201,"line":227},[199,29924,27420],{"class":878},[199,29926,29158],{"class":898},[199,29928,29257],{"class":898},[199,29930,29260],{"class":898},[199,29932,29933],{"class":1018}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[24,29935,29936],{"start":73},[27,29937,29938],{},"安装NVIDIA Container Toolki包",[190,29940,29942],{"className":26666,"code":29941,"language":26668,"meta":57,"style":57},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[196,29943,29944,29949,29962,29966,29971],{"__ignoreMap":57},[199,29945,29946],{"class":201,"line":202},[199,29947,29948],{"class":1454},"# 如果是RHEL或者Rocky\n",[199,29950,29951,29953,29955,29957,29959],{"class":201,"line":36},[199,29952,27420],{"class":878},[199,29954,29158],{"class":898},[199,29956,26678],{"class":898},[199,29958,29243],{"class":1018},[199,29960,29961],{"class":898}," nvidia-container-toolkit\n",[199,29963,29964],{"class":201,"line":73},[199,29965,907],{"emptyLinePlaceholder":906},[199,29967,29968],{"class":201,"line":333},[199,29969,29970],{"class":1454},"# 如果是Fedora\n",[199,29972,29973,29975,29977,29979,29981],{"class":201,"line":227},[199,29974,27420],{"class":878},[199,29976,29158],{"class":898},[199,29978,26678],{"class":898},[199,29980,29243],{"class":1018},[199,29982,29961],{"class":898},[24,29984,29985],{"start":333},[27,29986,29987,29988,29990],{},"安装nvidia-docker2 ： 在Fedora上使用",[196,29989,29133],{},"进行安装",[190,29992,29994],{"className":26666,"code":29993,"language":26668,"meta":57,"style":57},"sudo dnf install -y nvidia-docker2\n",[196,29995,29996],{"__ignoreMap":57},[199,29997,29998,30000,30002,30004,30006],{"class":201,"line":202},[199,29999,27420],{"class":878},[199,30001,29158],{"class":898},[199,30003,26678],{"class":898},[199,30005,29243],{"class":1018},[199,30007,29797],{"class":898},[24,30009,30010],{"start":227},[27,30011,30012],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[190,30014,30015],{"className":26666,"code":29805,"language":26668,"meta":57,"style":57},[196,30016,30017],{"__ignoreMap":57},[199,30018,30019,30021,30023,30025,30027],{"class":201,"line":202},[199,30020,27420],{"class":878},[199,30022,29814],{"class":898},[199,30024,29817],{"class":898},[199,30026,29820],{"class":898},[199,30028,29823],{"class":1018},[24,30030,30031],{"start":238},[27,30032,30033],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[190,30035,30036],{"className":26666,"code":29831,"language":26668,"meta":57,"style":57},[196,30037,30038],{"__ignoreMap":57},[199,30039,30040,30042,30044,30046],{"class":201,"line":202},[199,30041,27420],{"class":878},[199,30043,29356],{"class":898},[199,30045,29842],{"class":898},[199,30047,29335],{"class":898},[31,30049,30050],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[31,30052,30053],{},"方法：",[31,30055,30056],{},"1️⃣nvidia-smi",[31,30058,30059],{},"2️⃣运行nvidia cuda 容器进行测试",[190,30061,30063],{"className":26666,"code":30062,"language":26668,"meta":57,"style":57},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[196,30064,30065],{"__ignoreMap":57},[199,30066,30067,30069,30071,30074,30077,30080,30083,30086],{"class":201,"line":202},[199,30068,27420],{"class":878},[199,30070,29163],{"class":898},[199,30072,30073],{"class":898}," run",[199,30075,30076],{"class":1018}," --rm",[199,30078,30079],{"class":1018}," --gpus",[199,30081,30082],{"class":898}," all",[199,30084,30085],{"class":898}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[199,30087,30088],{"class":898}," nvidia-smi\n",[31,30090,30091],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[31,30093,30094],{},[55,30095],{"alt":57,"src":30096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[19,30098,30100],{"id":30099},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[31,30102,30103],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[31,30105,30106],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[31,30108,30109],{},[2867,30110,30111],{"href":30111,"rel":30112},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[2871],[31,30114,30115],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[31,30117,30118],{},"我们只需要找到对应的Docker镜像当底包即可。",[31,30120,30121],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[3227,30123,30124,30140],{},[3230,30125,30126],{},[3233,30127,30128,30131,30134,30137],{},[3236,30129,30130],{"align":26580},"镜像类型",[3236,30132,30133],{"align":26580},"适用场景",[3236,30135,30136],{"align":26580},"示例标签",[3236,30138,30139],{"align":26580},"大小",[3273,30141,30142,30156,30170],{},[3233,30143,30144,30147,30150,30153],{},[3278,30145,30146],{"align":26580},"base",[3278,30148,30149],{"align":26580},"仅需 CUDA 运行时库",[3278,30151,30152],{"align":26580},"12.4.0-base-ubuntu22.04",[3278,30154,30155],{"align":26580},"~240MB",[3233,30157,30158,30161,30164,30167],{},[3278,30159,30160],{"align":26580},"runtime",[3278,30162,30163],{"align":26580},"部署编译后的应用（含数学库）",[3278,30165,30166],{"align":26580},"12.4.0-runtime-ubuntu22.04",[3278,30168,30169],{"align":26580},"~2GB",[3233,30171,30172,30175,30178,30181],{},[3278,30173,30174],{"align":26580},"devel",[3278,30176,30177],{"align":26580},"开发环境（含编译工具）",[3278,30179,30180],{"align":26580},"12.4.0-devel-ubuntu22.04",[3278,30182,30183],{"align":26580},"~3GB",[31,30185,30186,30187,30190],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[196,30188,30189],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[31,30192,30193],{},[55,30194],{"alt":57,"src":30195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[31,30197,30198],{},"在dockerfile里就可以开头这么写：",[190,30200,30202],{"className":26666,"code":30201,"language":26668,"meta":57,"style":57},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[196,30203,30204,30209],{"__ignoreMap":57},[199,30205,30206],{"class":201,"line":202},[199,30207,30208],{"class":1454},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[199,30210,30211,30214],{"class":201,"line":36},[199,30212,30213],{"class":878},"FROM",[199,30215,30216],{"class":898}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[19,30218,30220],{"id":30219},"_34配置以太网","3.4.配置以太网",[31,30222,30223],{},"指定网络模式",[190,30225,30227],{"className":26666,"code":30226,"language":26668,"meta":57,"style":57},"--net=host \\\n",[196,30228,30229],{"__ignoreMap":57},[199,30230,30231,30234,30236,30239],{"class":201,"line":202},[199,30232,30233],{"class":205},"--net",[199,30235,895],{"class":1086},[199,30237,30238],{"class":898},"host",[199,30240,27522],{"class":878},[31,30242,30243],{},"启动参数里加上这行即可。具体在下方",[31,30245,30246],{},"--net选项：指定网络模式，该选项有以下参数可选：",[176,30248,30249,30252,30255,30258],{},[27,30250,30251],{},"--net=bridge:默认选项，表示连接到默认的网桥",[27,30253,30254],{},"--net=host:容器使用宿主机的网络",[27,30256,30257],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[27,30259,30260],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1002,30262,30263],{},"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":57,"searchDepth":36,"depth":36,"links":30265},[30266,30267,30268,30269],{"id":29580,"depth":73,"text":29581},{"id":29647,"depth":73,"text":29648},{"id":30099,"depth":73,"text":30100},{"id":30219,"depth":73,"text":30220},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":29569,"description":29577},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":30276,"title":30277,"body":30278,"description":30285,"extension":3024,"meta":30291,"navigation":906,"path":30292,"seo":30293,"stem":30294,"__hash__":30295},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":30279,"toc":30289},[30280,30283,30286],[10,30281,30277],{"id":30282},"_4dockerhub换源",[31,30284,30285],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[31,30287,30288],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":57,"searchDepth":36,"depth":36,"links":30290},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":30277,"description":30285},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":30297,"title":30298,"body":30299,"description":57,"extension":3024,"meta":31311,"navigation":906,"path":31312,"seo":31313,"stem":31314,"__hash__":31315},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":30300,"toc":31306},[30301,30304,30308,30314,30318,30321,30661,30664,30667,30670,30675,30680,30683,30686,30689,30692,30711,30714,30725,30731,30913,30923,30939,31202,31204,31229,31244,31253,31303],[10,30302,30298],{"id":30303},"_5docker命令学习",[19,30305,30307],{"id":30306},"_51参考文档","5.1.参考文档",[31,30309,30310],{},[2867,30311,30312],{"href":30312,"rel":30313},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[2871],[19,30315,30317],{"id":30316},"_52常用命令","5.2.常用命令",[31,30319,30320],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[3227,30322,30323,30336],{},[3230,30324,30325],{},[3233,30326,30327,30330,30333],{},[3236,30328,30329],{"align":26580},"命令",[3236,30331,30332],{"align":26580},"描述",[3236,30334,30335],{"align":26580},"示例",[3273,30337,30338,30349,30360,30371,30382,30393,30404,30415,30425,30436,30447,30458,30468,30479,30490,30501,30511,30521,30531,30541,30552,30563,30574,30585,30596,30607,30617,30628,30639,30650],{},[3233,30339,30340,30343,30346],{},[3278,30341,30342],{"align":26580},"docker run",[3278,30344,30345],{"align":26580},"创建并启动一个新的容器。",[3278,30347,30348],{"align":26580},"docker run -it ubuntu bash",[3233,30350,30351,30354,30357],{},[3278,30352,30353],{"align":26580},"docker build",[3278,30355,30356],{"align":26580},"通过指定的 Dockerfile 创建一个新的镜像。",[3278,30358,30359],{"align":26580},"docker build -t myimage .",[3233,30361,30362,30365,30368],{},[3278,30363,30364],{"align":26580},"docker pull",[3278,30366,30367],{"align":26580},"从 Docker 仓库拉取镜像。",[3278,30369,30370],{"align":26580},"docker pull ubuntu",[3233,30372,30373,30376,30379],{},[3278,30374,30375],{"align":26580},"docker push",[3278,30377,30378],{"align":26580},"将本地镜像推送到 Docker 仓库。",[3278,30380,30381],{"align":26580},"docker push myimage",[3233,30383,30384,30387,30390],{},[3278,30385,30386],{"align":26580},"docker stop",[3278,30388,30389],{"align":26580},"停止一个正在运行的容器。",[3278,30391,30392],{"align":26580},"docker stop container_id",[3233,30394,30395,30398,30401],{},[3278,30396,30397],{"align":26580},"docker start",[3278,30399,30400],{"align":26580},"启动一个已经存在的容器。",[3278,30402,30403],{"align":26580},"docker start container_id",[3233,30405,30406,30409,30412],{},[3278,30407,30408],{"align":26580},"docker restart",[3278,30410,30411],{"align":26580},"重新启动容器。",[3278,30413,30414],{"align":26580},"docker restart container_id",[3233,30416,30417,30420,30423],{},[3278,30418,30419],{"align":26580},"docker ps",[3278,30421,30422],{"align":26580},"列出当前正在运行的容器。",[3278,30424,30419],{"align":26580},[3233,30426,30427,30430,30433],{},[3278,30428,30429],{"align":26580},"docker rm",[3278,30431,30432],{"align":26580},"删除一个或多个停止的容器。",[3278,30434,30435],{"align":26580},"docker rm container_id",[3233,30437,30438,30441,30444],{},[3278,30439,30440],{"align":26580},"docker exec",[3278,30442,30443],{"align":26580},"在一个正在运行的容器中执行命令。",[3278,30445,30446],{"align":26580},"docker exec -it container_id bash",[3233,30448,30449,30452,30455],{},[3278,30450,30451],{"align":26580},"docker logs",[3278,30453,30454],{"align":26580},"查看容器的日志输出。",[3278,30456,30457],{"align":26580},"docker logs container_id",[3233,30459,30460,30463,30466],{},[3278,30461,30462],{"align":26580},"docker images",[3278,30464,30465],{"align":26580},"列出本地所有镜像。",[3278,30467,30462],{"align":26580},[3233,30469,30470,30473,30476],{},[3278,30471,30472],{"align":26580},"docker rmi",[3278,30474,30475],{"align":26580},"删除一个或多个镜像。",[3278,30477,30478],{"align":26580},"docker rmi myimage",[3233,30480,30481,30484,30487],{},[3278,30482,30483],{"align":26580},"docker network",[3278,30485,30486],{"align":26580},"管理 Docker 网络。",[3278,30488,30489],{"align":26580},"docker network ls",[3233,30491,30492,30495,30498],{},[3278,30493,30494],{"align":26580},"docker volume",[3278,30496,30497],{"align":26580},"管理 Docker 数据卷。",[3278,30499,30500],{"align":26580},"docker volume ls",[3233,30502,30503,30506,30509],{},[3278,30504,30505],{"align":26580},"docker-compose up",[3278,30507,30508],{"align":26580},"启动 docker-compose.yml 中定义的所有服务。",[3278,30510,30505],{"align":26580},[3233,30512,30513,30516,30519],{},[3278,30514,30515],{"align":26580},"docker-compose down",[3278,30517,30518],{"align":26580},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[3278,30520,30515],{"align":26580},[3233,30522,30523,30526,30529],{},[3278,30524,30525],{"align":26580},"docker info",[3278,30527,30528],{"align":26580},"显示 Docker 系统的详细信息。",[3278,30530,30525],{"align":26580},[3233,30532,30533,30536,30539],{},[3278,30534,30535],{"align":26580},"docker stats",[3278,30537,30538],{"align":26580},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[3278,30540,30535],{"align":26580},[3233,30542,30543,30546,30549],{},[3278,30544,30545],{"align":26580},"docker inspect",[3278,30547,30548],{"align":26580},"查看容器或镜像的详细信息（JSON 格式）。",[3278,30550,30551],{"align":26580},"docker inspect container_id",[3233,30553,30554,30557,30560],{},[3278,30555,30556],{"align":26580},"docker save",[3278,30558,30559],{"align":26580},"将一个镜像保存为 tar 文件。",[3278,30561,30562],{"align":26580},"docker save -o myimage.tar myimage",[3233,30564,30565,30568,30571],{},[3278,30566,30567],{"align":26580},"docker load",[3278,30569,30570],{"align":26580},"从 tar 文件中加载镜像。",[3278,30572,30573],{"align":26580},"docker load -i myimage.tar",[3233,30575,30576,30579,30582],{},[3278,30577,30578],{"align":26580},"docker tag",[3278,30580,30581],{"align":26580},"为镜像添加标签（tag）。",[3278,30583,30584],{"align":26580},"docker tag myimage myimage:v1",[3233,30586,30587,30590,30593],{},[3278,30588,30589],{"align":26580},"docker buildx build",[3278,30591,30592],{"align":26580},"使用 Buildx 构建多架构镜像。",[3278,30594,30595],{"align":26580},"docker buildx build -t myimage .",[3233,30597,30598,30601,30604],{},[3278,30599,30600],{"align":26580},"docker buildx create",[3278,30602,30603],{"align":26580},"创建一个新的 Buildx 构建实例。",[3278,30605,30606],{"align":26580},"docker buildx create –use",[3233,30608,30609,30612,30615],{},[3278,30610,30611],{"align":26580},"docker buildx ls",[3278,30613,30614],{"align":26580},"列出所有可用的 Buildx 构建实例。",[3278,30616,30611],{"align":26580},[3233,30618,30619,30622,30625],{},[3278,30620,30621],{"align":26580},"docker buildx use",[3278,30623,30624],{"align":26580},"设置当前的 Buildx 构建实例。",[3278,30626,30627],{"align":26580},"docker buildx use mybuilder",[3233,30629,30630,30633,30636],{},[3278,30631,30632],{"align":26580},"docker buildx bake",[3278,30634,30635],{"align":26580},"使用 Bake 文件批量构建镜像。",[3278,30637,30638],{"align":26580},"docker buildx bake -f bake.hcl",[3233,30640,30641,30644,30647],{},[3278,30642,30643],{"align":26580},"docker buildx build –push",[3278,30645,30646],{"align":26580},"构建镜像并推送到镜像仓库。",[3278,30648,30649],{"align":26580},"docker buildx build –push -t myimage .",[3233,30651,30652,30655,30658],{},[3278,30653,30654],{"align":26580},"docker buildx build –platform",[3278,30656,30657],{"align":26580},"构建镜像并为多个平台生成支持。",[3278,30659,30660],{"align":26580},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[31,30662,30663],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[31,30665,30666],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[31,30668,30669],{},"docker images 可以查看已经下载的镜像",[31,30671,30672],{},[55,30673],{"alt":57,"src":30674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[31,30676,30677],{},[49,30678,30679],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[31,30681,30682],{},"docker rmi $(docker images -q) 删除所有的镜像",[31,30684,30685],{},"docker container logs 查看容器日志",[31,30687,30688],{},"docker top 查看容器里的进程",[31,30690,30691],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[190,30693,30695],{"className":26666,"code":30694,"language":26668,"meta":57,"style":57},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[196,30696,30697],{"__ignoreMap":57},[199,30698,30699,30702,30705,30708],{"class":201,"line":202},[199,30700,30701],{"class":878},"如：docker",[199,30703,30704],{"class":898}," cp",[199,30706,30707],{"class":898}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[199,30709,30710],{"class":898}," \u002Fmydata\u002Fnginx\n",[31,30712,30713],{},"docker run时在启动容器的时候会有几个常用的选项：",[176,30715,30716,30719,30722],{},[27,30717,30718],{},"-d选项：表示后台运行",[27,30720,30721],{},"-P选项：随机端口映射",[27,30723,30724],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[19,30726,30728],{"id":30727},"_53run命令的参数非常重要",[49,30729,30730],{},"5.3.run命令的参数（非常重要）",[3227,30732,30733,30746],{},[3230,30734,30735],{},[3233,30736,30737,30740,30743],{},[3236,30738,30739],{"align":26580},"参数\u002F配置",[3236,30741,30742],{"align":26580},"功能说明",[3236,30744,30745],{"align":26580},"重要性与参考依据",[3273,30747,30748,30759,30770,30781,30792,30803,30814,30825,30836,30847,30858,30869,30880,30891,30902],{},[3233,30749,30750,30753,30756],{},[3278,30751,30752],{"align":26580},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[3278,30754,30755],{"align":26580},"指定容器名称，便于后续管理",[3278,30757,30758],{"align":26580},"替代随机生成的容器名。",[3233,30760,30761,30764,30767],{},[3278,30762,30763],{"align":26580},"–gpus all",[3278,30765,30766],{"align":26580},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[3278,30768,30769],{"align":26580},"用于CUDA加速等GPU依赖任务。",[3233,30771,30772,30775,30778],{},[3278,30773,30774],{"align":26580},"-e NVIDIA_DRIVER_CAPABILITIES=all",[3278,30776,30777],{"align":26580},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[3278,30779,30780],{"align":26580},"确保容器内GPU功能完整67。",[3233,30782,30783,30786,30789],{},[3278,30784,30785],{"align":26580},"-dit",[3278,30787,30788],{"align":26580},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[3278,30790,30791],{"align":26580},"允许容器在后台运行并支持交互操作。",[3233,30793,30794,30797,30800],{},[3278,30795,30796],{"align":26580},"–privileged",[3278,30798,30799],{"align":26580},"赋予容器完全主机权限（可访问设备、内核模块等）",[3278,30801,30802],{"align":26580},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[3233,30804,30805,30808,30811],{},[3278,30806,30807],{"align":26580},"–net=host",[3278,30809,30810],{"align":26580},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[3278,30812,30813],{"align":26580},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[3233,30815,30816,30819,30822],{},[3278,30817,30818],{"align":26580},"–group-add audio–group-add video–group-add dialout",[3278,30820,30821],{"align":26580},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[3278,30823,30824],{"align":26580},"避免权限问题（如避免无法调用摄像头、麦克风）。",[3233,30826,30827,30830,30833],{},[3278,30828,30829],{"align":26580},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[3278,30831,30832],{"align":26580},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[3278,30834,30835],{"align":26580},"支持容器内运行图形界面应用（如OpenCV可视化）。",[3233,30837,30838,30841,30844],{},[3278,30839,30840],{"align":26580},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[3278,30842,30843],{"align":26580},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[3278,30845,30846],{"align":26580},"实现容器内图形显示。",[3233,30848,30849,30852,30855],{},[3278,30850,30851],{"align":26580},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[3278,30853,30854],{"align":26580},"挂载X11认证文件（只读）",[3278,30856,30857],{"align":26580},"确保容器有权连接宿主机显示服务。",[3233,30859,30860,30863,30866],{},[3278,30861,30862],{"align":26580},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[3278,30864,30865],{"align":26580},"挂载Wayland显示协议相关目录",[3278,30867,30868],{"align":26580},"支持Wayland协议的图形显示。",[3233,30870,30871,30874,30877],{},[3278,30872,30873],{"align":26580},"–ulimit nofile=1024:524288",[3278,30875,30876],{"align":26580},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[3278,30878,30879],{"align":26580},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[3233,30881,30882,30885,30888],{},[3278,30883,30884],{"align":26580},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[3278,30886,30887],{"align":26580},"挂载宿主机用户目录到容器内同名路径",[3278,30889,30890],{"align":26580},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[3233,30892,30893,30896,30899],{},[3278,30894,30895],{"align":26580},"-w \u002Fhome\u002Ftungchiahui",[3278,30897,30898],{"align":26580},"设置容器启动后的默认工作目录",[3278,30900,30901],{"align":26580},"直接进入项目路径，方便执行命令2324。",[3233,30903,30904,30907,30910],{},[3278,30905,30906],{"align":26580},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[3278,30908,30909],{"align":26580},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[3278,30911,30912],{"align":26580},"提供预配置的深度学习与机器人开发环境。",[31,30914,30915,30916,30918,30919,30922],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[196,30917,27420],{},"加不加",[196,30920,30921],{},"sudo -E","都无所谓。",[31,30924,30925,30926,30928,30929,30931,30932,30935,30936,30938],{},"用户已经被加到docker组了，不用",[196,30927,27420],{},"也行跑，其次，",[196,30930,27420],{},"运行的话，你的",[196,30933,30934],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[196,30937,30934],{},"更不可能变了。",[190,30940,30942],{"className":26666,"code":30941,"language":26668,"meta":57,"style":57},"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",[196,30943,30944,30957,30967,30977,30989,30996,31003,31010,31020,31029,31038,31052,31064,31076,31085,31095,31104,31119,31152,31179,31190,31197],{"__ignoreMap":57},[199,30945,30946,30948,30950,30952,30955],{"class":201,"line":202},[199,30947,27420],{"class":878},[199,30949,29163],{"class":898},[199,30951,30073],{"class":898},[199,30953,30954],{"class":1018}," --name=ros_opencv_cuda",[199,30956,27522],{"class":1018},[199,30958,30959,30962,30965],{"class":201,"line":36},[199,30960,30961],{"class":205},"--gpus ",[199,30963,30964],{"class":898},"all",[199,30966,27522],{"class":1018},[199,30968,30969,30972,30975],{"class":201,"line":73},[199,30970,30971],{"class":205},"-e ",[199,30973,30974],{"class":898},"NVIDIA_DRIVER_CAPABILITIES=all",[199,30976,27522],{"class":1018},[199,30978,30979,30981,30984,30987],{"class":201,"line":333},[199,30980,30971],{"class":205},[199,30982,30983],{"class":898},"DISPLAY=",[199,30985,30986],{"class":205},"$DISPLAY ",[199,30988,29018],{"class":1018},[199,30990,30991,30994],{"class":201,"line":227},[199,30992,30993],{"class":205},"-dit ",[199,30995,29018],{"class":1018},[199,30997,30998,31001],{"class":201,"line":238},[199,30999,31000],{"class":205},"--privileged ",[199,31002,29018],{"class":1018},[199,31004,31005,31008],{"class":201,"line":252},[199,31006,31007],{"class":205},"--net=host ",[199,31009,29018],{"class":1018},[199,31011,31012,31015,31018],{"class":201,"line":388},[199,31013,31014],{"class":205},"--group-add ",[199,31016,31017],{"class":898},"audio",[199,31019,27522],{"class":1018},[199,31021,31022,31024,31027],{"class":201,"line":415},[199,31023,31014],{"class":205},[199,31025,31026],{"class":898},"video",[199,31028,27522],{"class":1018},[199,31030,31031,31033,31036],{"class":201,"line":426},[199,31032,31014],{"class":205},[199,31034,31035],{"class":898},"dialout",[199,31037,27522],{"class":1018},[199,31039,31040,31042,31045,31047,31050],{"class":201,"line":1015},[199,31041,30971],{"class":205},[199,31043,31044],{"class":898},"XAUTHORITY=",[199,31046,30934],{"class":205},[199,31048,31049],{"class":898},"\u002F.Xauthority",[199,31051,27522],{"class":1018},[199,31053,31054,31056,31059,31062],{"class":201,"line":1031},[199,31055,30971],{"class":205},[199,31057,31058],{"class":898},"WAYLAND_DISPLAY=",[199,31060,31061],{"class":205},"$WAYLAND_DISPLAY ",[199,31063,29018],{"class":1018},[199,31065,31066,31068,31071,31074],{"class":201,"line":1043},[199,31067,30971],{"class":205},[199,31069,31070],{"class":898},"XDG_RUNTIME_DIR=",[199,31072,31073],{"class":205},"$XDG_RUNTIME_DIR ",[199,31075,29018],{"class":1018},[199,31077,31078,31080,31083],{"class":201,"line":1049},[199,31079,30971],{"class":205},[199,31081,31082],{"class":898},"QT_QPA_PLATFORM=xcb",[199,31084,27522],{"class":1018},[199,31086,31087,31090,31093],{"class":201,"line":1054},[199,31088,31089],{"class":205},"-v ",[199,31091,31092],{"class":898},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[199,31094,27522],{"class":1018},[199,31096,31097,31099,31102],{"class":201,"line":1062},[199,31098,31089],{"class":205},[199,31100,31101],{"class":898},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[199,31103,27522],{"class":1018},[199,31105,31106,31109,31112,31114,31117],{"class":201,"line":1075},[199,31107,31108],{"class":205},"-v $HOME",[199,31110,31111],{"class":898},"\u002F.Xauthority:",[199,31113,30934],{"class":205},[199,31115,31116],{"class":898},"\u002F.Xauthority:ro",[199,31118,27522],{"class":1018},[199,31120,31121,31123,31126,31128,31131,31134,31136,31139,31141,31143,31145,31147,31150],{"class":201,"line":1092},[199,31122,31089],{"class":205},[199,31124,31125],{"class":898},"\u002Frun\u002Fuser\u002F",[199,31127,27943],{"class":205},[199,31129,31130],{"class":878},"id",[199,31132,31133],{"class":1018}," -u",[199,31135,3512],{"class":205},[199,31137,31138],{"class":898},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[199,31140,27943],{"class":205},[199,31142,31130],{"class":878},[199,31144,31133],{"class":1018},[199,31146,3512],{"class":205},[199,31148,31149],{"class":898},"\u002Fwayland-0",[199,31151,27522],{"class":1018},[199,31153,31154,31156,31158,31160,31162,31164,31166,31169,31171,31173,31175,31177],{"class":201,"line":1107},[199,31155,31089],{"class":205},[199,31157,31125],{"class":898},[199,31159,27943],{"class":205},[199,31161,31130],{"class":878},[199,31163,31133],{"class":1018},[199,31165,3512],{"class":205},[199,31167,31168],{"class":898},":\u002Frun\u002Fuser\u002F",[199,31170,27943],{"class":205},[199,31172,31130],{"class":878},[199,31174,31133],{"class":1018},[199,31176,16575],{"class":205},[199,31178,29018],{"class":1018},[199,31180,31181,31183,31185,31188],{"class":201,"line":1128},[199,31182,31108],{"class":205},[199,31184,3938],{"class":898},[199,31186,31187],{"class":205},"$HOME ",[199,31189,29018],{"class":1018},[199,31191,31192,31195],{"class":201,"line":1146},[199,31193,31194],{"class":205},"-w $HOME ",[199,31196,29018],{"class":1018},[199,31198,31199],{"class":201,"line":1163},[199,31200,31201],{"class":205},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[31,31203,11912],{},[24,31205,31206,31214,31217,31220],{},[27,31207,31208,16656,31210,31213],{},[196,31209,30974],{},[196,31211,31212],{},"--gpus all","没有英伟达显卡请注释。",[27,31215,31216],{},"--name后面请自己为容器起名。",[27,31218,31219],{},"最后一行仓库名称请你自己找对应的镜像填上。",[27,31221,31222,31223,31228],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[26397,31224,31225],{},[49,31226,31227],{},"请不要加","。",[190,31230,31232],{"className":26666,"code":31231,"language":26668,"meta":57,"style":57},"--ulimit nofile=1024:524288 \\\n",[196,31233,31234],{"__ignoreMap":57},[199,31235,31236,31239,31242],{"class":201,"line":202},[199,31237,31238],{"class":878},"--ulimit",[199,31240,31241],{"class":898}," nofile=1024:524288",[199,31243,27522],{"class":1018},[31,31245,31246,31247,31252],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[26397,31248,31249],{},[49,31250,31251],{},"不建议","**.**",[190,31254,31256],{"className":26666,"code":31255,"language":26668,"meta":57,"style":57},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[196,31257,31258,31285,31294],{"__ignoreMap":57},[199,31259,31260,31263,31266,31268,31270,31272,31274,31276,31278,31281,31283],{"class":201,"line":202},[199,31261,31262],{"class":878},"--user",[199,31264,31265],{"class":205}," $(",[199,31267,31130],{"class":878},[199,31269,31133],{"class":1018},[199,31271,3512],{"class":205},[199,31273,3938],{"class":898},[199,31275,27943],{"class":205},[199,31277,31130],{"class":878},[199,31279,31280],{"class":1018}," -g",[199,31282,16575],{"class":205},[199,31284,29018],{"class":1018},[199,31286,31287,31289,31292],{"class":201,"line":36},[199,31288,31089],{"class":205},[199,31290,31291],{"class":898},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[199,31293,27522],{"class":1018},[199,31295,31296,31298,31301],{"class":201,"line":73},[199,31297,31089],{"class":205},[199,31299,31300],{"class":898},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[199,31302,27522],{"class":1018},[1002,31304,31305],{},"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":57,"searchDepth":36,"depth":36,"links":31307},[31308,31309,31310],{"id":30306,"depth":73,"text":30307},{"id":30316,"depth":73,"text":30317},{"id":30727,"depth":73,"text":30730},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":30298,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":31317,"title":31318,"body":31319,"description":57,"extension":3024,"meta":32942,"navigation":906,"path":32943,"seo":32944,"stem":32945,"__hash__":32946},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":31320,"toc":32937},[31321,31324,31328,31331,31553,31557,31561,31564,31670,31675,31678,31683,31686,31691,31694,31699,31702,31714,31717,31722,31729,31757,31764,31840,31845,31848,31871,31873,31948,31953,31956,31960,31968,31973,31978,31982,31993,31999,32002,32005,32029,32032,32035,32063,32066,32069,32534,32537,32542,32547,32551,32574,32579,32583,32587,32590,32593,32596,32623,32626,32629,32647,32650,32653,32675,32683,32688,32693,32697,32700,32703,32706,32709,32754,32757,32775,32778,32783,32786,32807,32810,32866,32869,32874,32878,32881,32888,32891,32894,32899,32902,32918,32921,32934],[10,31322,31318],{"id":31323},"_6手动创建docker镜像",[19,31325,31327],{"id":31326},"_61dockerfile","6.1.DockerFile",[31,31329,31330],{},"常用命令：",[3227,31332,31333,31344],{},[3230,31334,31335],{},[3233,31336,31337,31340,31342],{},[3236,31338,31339],{"align":26580},"指令",[3236,31341,28712],{"align":26580},[3236,31343,30335],{"align":26580},[3273,31345,31346,31356,31372,31383,31394,31405,31416,31427,31438,31452,31466,31477,31491,31502,31513,31527,31542],{},[3233,31347,31348,31350,31353],{},[3278,31349,30213],{"align":26580},[3278,31351,31352],{"align":26580},"指定基础镜像，是 Dockerfile 的起点",[3278,31354,31355],{"align":26580},"FROM ubuntu:22.04",[3233,31357,31358,31361,31364],{},[3278,31359,31360],{"align":26580},"LABEL",[3278,31362,31363],{"align":26580},"添加元数据（如作者、版本等）",[3278,31365,31366,31367,31371],{"align":26580},"LABEL maintainer=”",[2867,31368,31370],{"href":31369},"mailto:you@example.com","you@example.com","”",[3233,31373,31374,31377,31380],{},[3278,31375,31376],{"align":26580},"ENV",[3278,31378,31379],{"align":26580},"设置环境变量",[3278,31381,31382],{"align":26580},"ENV PORT=8080",[3233,31384,31385,31388,31391],{},[3278,31386,31387],{"align":26580},"ARG",[3278,31389,31390],{"align":26580},"构建参数，只在构建期间可用",[3278,31392,31393],{"align":26580},"ARG VERSION=1.0",[3233,31395,31396,31399,31402],{},[3278,31397,31398],{"align":26580},"RUN",[3278,31400,31401],{"align":26580},"构建镜像时运行命令",[3278,31403,31404],{"align":26580},"RUN apt-get update && apt-get install -y curl",[3233,31406,31407,31410,31413],{},[3278,31408,31409],{"align":26580},"COPY",[3278,31411,31412],{"align":26580},"复制文件到镜像中",[3278,31414,31415],{"align":26580},"COPY . \u002Fapp",[3233,31417,31418,31421,31424],{},[3278,31419,31420],{"align":26580},"ADD",[3278,31422,31423],{"align":26580},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[3278,31425,31426],{"align":26580},"ADD archive.tar.gz \u002Fdata\u002F",[3233,31428,31429,31432,31435],{},[3278,31430,31431],{"align":26580},"WORKDIR",[3278,31433,31434],{"align":26580},"设置工作目录",[3278,31436,31437],{"align":26580},"WORKDIR \u002Fopt",[3233,31439,31440,31443,31446],{},[3278,31441,31442],{"align":26580},"CMD",[3278,31444,31445],{"align":26580},"设置容器启动时默认命令（可被 docker run 覆盖）",[3278,31447,31448,31449],{"align":26580},"CMD ",[199,31450,31451],{},"“node”, “index.js”",[3233,31453,31454,31457,31460],{},[3278,31455,31456],{"align":26580},"ENTRYPOINT",[3278,31458,31459],{"align":26580},"设置容器启动时固定命令（通常用于 CLI 工具等）",[3278,31461,31462,31463],{"align":26580},"ENTRYPOINT ",[199,31464,31465],{},"“python3”",[3233,31467,31468,31471,31474],{},[3278,31469,31470],{"align":26580},"EXPOSE",[3278,31472,31473],{"align":26580},"声明镜像内服务监听的端口（不会自动映射）",[3278,31475,31476],{"align":26580},"EXPOSE 80",[3233,31478,31479,31482,31485],{},[3278,31480,31481],{"align":26580},"VOLUME",[3278,31483,31484],{"align":26580},"声明数据卷挂载点",[3278,31486,31487,31488],{"align":26580},"VOLUME ",[199,31489,31490],{},"“\u002Fdata”",[3233,31492,31493,31496,31499],{},[3278,31494,31495],{"align":26580},"USER",[3278,31497,31498],{"align":26580},"设置后续命令执行的用户",[3278,31500,31501],{"align":26580},"USER appuser",[3233,31503,31504,31507,31510],{},[3278,31505,31506],{"align":26580},"ONBUILD",[3278,31508,31509],{"align":26580},"当镜像作为其他镜像基础镜像时触发的构建指令",[3278,31511,31512],{"align":26580},"ONBUILD COPY . \u002Fsrc",[3233,31514,31515,31518,31521],{},[3278,31516,31517],{"align":26580},"SHELL",[3278,31519,31520],{"align":26580},"更改默认 shell，比如将 sh -c 改为 bash -c",[3278,31522,31523,31524],{"align":26580},"SHELL ",[199,31525,31526],{},"“\u002Fbin\u002Fbash”, “-c”",[3233,31528,31529,31532,31535],{},[3278,31530,31531],{"align":26580},"HEALTHCHECK",[3278,31533,31534],{"align":26580},"定义容器运行时的健康检查命令",[3278,31536,31537,31538],{"align":26580},"`HEALTHCHECK CMD curl –fail ",[2867,31539,31540],{"href":31540,"rel":31541},"http:\u002F\u002Flocalhost:8080",[2871],[3233,31543,31544,31547,31550],{},[3278,31545,31546],{"align":26580},"STOPSIGNAL",[3278,31548,31549],{"align":26580},"容器停止时发送的信号",[3278,31551,31552],{"align":26580},"STOPSIGNAL SIGKILL",[19,31554,31556],{"id":31555},"_62自己创建容器","6.2.自己创建容器",[627,31558,31560],{"id":31559},"_621手动创建","6.2.1.手动创建",[31,31562,31563],{},"在x86电脑上编译x86的：",[190,31565,31567],{"className":26666,"code":31566,"language":26668,"meta":57,"style":57},"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",[196,31568,31569,31585,31589,31602,31606,31619,31623,31636,31640,31653,31657],{"__ignoreMap":57},[199,31570,31571,31573,31576,31579,31582],{"class":201,"line":202},[199,31572,29396],{"class":878},[199,31574,31575],{"class":898}," build",[199,31577,31578],{"class":1018}," -t",[199,31580,31581],{"class":898}," ros-melodic-cuda118-cudnn8-bionic:latest",[199,31583,31584],{"class":898}," .\n",[199,31586,31587],{"class":201,"line":36},[199,31588,907],{"emptyLinePlaceholder":906},[199,31590,31591,31593,31595,31597,31600],{"class":201,"line":73},[199,31592,29396],{"class":878},[199,31594,31575],{"class":898},[199,31596,31578],{"class":1018},[199,31598,31599],{"class":898}," ros-noetic-focal:latest",[199,31601,31584],{"class":898},[199,31603,31604],{"class":201,"line":333},[199,31605,907],{"emptyLinePlaceholder":906},[199,31607,31608,31610,31612,31614,31617],{"class":201,"line":227},[199,31609,29396],{"class":878},[199,31611,31575],{"class":898},[199,31613,31578],{"class":1018},[199,31615,31616],{"class":898}," ros-humble-jammy:latest",[199,31618,31584],{"class":898},[199,31620,31621],{"class":201,"line":238},[199,31622,907],{"emptyLinePlaceholder":906},[199,31624,31625,31627,31629,31631,31634],{"class":201,"line":252},[199,31626,29396],{"class":878},[199,31628,31575],{"class":898},[199,31630,31578],{"class":1018},[199,31632,31633],{"class":898}," ros-jazzy-noble:latest",[199,31635,31584],{"class":898},[199,31637,31638],{"class":201,"line":388},[199,31639,907],{"emptyLinePlaceholder":906},[199,31641,31642,31644,31646,31648,31651],{"class":201,"line":415},[199,31643,29396],{"class":878},[199,31645,31575],{"class":898},[199,31647,31578],{"class":1018},[199,31649,31650],{"class":898}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[199,31652,31584],{"class":898},[199,31654,31655],{"class":201,"line":426},[199,31656,907],{"emptyLinePlaceholder":906},[199,31658,31659,31661,31663,31665,31668],{"class":201,"line":1015},[199,31660,29396],{"class":878},[199,31662,31575],{"class":898},[199,31664,31578],{"class":1018},[199,31666,31667],{"class":898}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[199,31669,31584],{"class":898},[31,31671,31672],{},[55,31673],{"alt":57,"src":31674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[31,31676,31677],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[31,31679,31680],{},[55,31681],{"alt":57,"src":31682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[31,31684,31685],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[24,31687,31688],{},[27,31689,31690],{},"创建 Docker Hub 账户",[31,31692,31693],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[24,31695,31696],{"start":36},[27,31697,31698],{},"登录 Docker Hub",[31,31700,31701],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[190,31703,31705],{"className":26666,"code":31704,"language":26668,"meta":57,"style":57},"docker login\n",[196,31706,31707],{"__ignoreMap":57},[199,31708,31709,31711],{"class":201,"line":202},[199,31710,29396],{"class":878},[199,31712,31713],{"class":898}," login\n",[31,31715,31716],{},"输入你的 Docker Hub 用户名和密码进行验证。",[24,31718,31719],{},[27,31720,31721],{},"为你的镜像打标签",[31,31723,31724,31725,31728],{},"Docker Hub 使用 ",[196,31726,31727],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[190,31730,31732],{"className":26666,"code":31731,"language":26668,"meta":57,"style":57},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[196,31733,31734],{"__ignoreMap":57},[199,31735,31736,31738,31741,31743,31746,31749,31752,31754],{"class":201,"line":202},[199,31737,29396],{"class":878},[199,31739,31740],{"class":898}," tag",[199,31742,31633],{"class":898},[199,31744,31745],{"class":1086}," \u003C",[199,31747,31748],{"class":898},"你的用户",[199,31750,31751],{"class":205},"名",[199,31753,1217],{"class":1086},[199,31755,31756],{"class":898},"\u002Fros-jazzy-noble:latest\n",[31,31758,31759,31760,31763],{},"例如，如果你的 Docker Hub 用户名是 ",[196,31761,31762],{},"tungchiahui","，你应该执行：",[190,31765,31767],{"className":26666,"code":31766,"language":26668,"meta":57,"style":57},"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",[196,31768,31769,31780,31784,31795,31799,31810,31814,31825,31829],{"__ignoreMap":57},[199,31770,31771,31773,31775,31777],{"class":201,"line":202},[199,31772,29396],{"class":878},[199,31774,31740],{"class":898},[199,31776,31599],{"class":898},[199,31778,31779],{"class":898}," tungchiahui\u002Fros-noetic-focal:latest\n",[199,31781,31782],{"class":201,"line":36},[199,31783,907],{"emptyLinePlaceholder":906},[199,31785,31786,31788,31790,31792],{"class":201,"line":73},[199,31787,29396],{"class":878},[199,31789,31740],{"class":898},[199,31791,31616],{"class":898},[199,31793,31794],{"class":898}," tungchiahui\u002Fros-humble-jammy:latest\n",[199,31796,31797],{"class":201,"line":333},[199,31798,907],{"emptyLinePlaceholder":906},[199,31800,31801,31803,31805,31807],{"class":201,"line":227},[199,31802,29396],{"class":878},[199,31804,31740],{"class":898},[199,31806,31633],{"class":898},[199,31808,31809],{"class":898}," tungchiahui\u002Fros-jazzy-noble:latest\n",[199,31811,31812],{"class":201,"line":238},[199,31813,907],{"emptyLinePlaceholder":906},[199,31815,31816,31818,31820,31822],{"class":201,"line":252},[199,31817,29396],{"class":878},[199,31819,31740],{"class":898},[199,31821,31650],{"class":898},[199,31823,31824],{"class":898}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[199,31826,31827],{"class":201,"line":388},[199,31828,907],{"emptyLinePlaceholder":906},[199,31830,31831,31833,31835,31837],{"class":201,"line":415},[199,31832,29396],{"class":878},[199,31834,31740],{"class":898},[199,31836,31667],{"class":898},[199,31838,31839],{"class":898}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[24,31841,31842],{"start":36},[27,31843,31844],{},"推送镜像到 Docker Hub",[31,31846,31847],{},"使用以下命令将镜像推送到 Docker Hub：",[190,31849,31851],{"className":26666,"code":31850,"language":26668,"meta":57,"style":57},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[196,31852,31853],{"__ignoreMap":57},[199,31854,31855,31857,31860,31862,31864,31866,31868],{"class":201,"line":202},[199,31856,29396],{"class":878},[199,31858,31859],{"class":898}," push",[199,31861,31745],{"class":1086},[199,31863,31748],{"class":898},[199,31865,31751],{"class":205},[199,31867,1217],{"class":1086},[199,31869,31870],{"class":898},"\u002Fros-noetic-jazzy-noble:latest\n",[31,31872,2323],{},[190,31874,31876],{"className":26666,"code":31875,"language":26668,"meta":57,"style":57},"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",[196,31877,31878,31886,31890,31898,31902,31910,31914,31923,31927,31935,31939],{"__ignoreMap":57},[199,31879,31880,31882,31884],{"class":201,"line":202},[199,31881,29396],{"class":878},[199,31883,31859],{"class":898},[199,31885,31779],{"class":898},[199,31887,31888],{"class":201,"line":36},[199,31889,907],{"emptyLinePlaceholder":906},[199,31891,31892,31894,31896],{"class":201,"line":73},[199,31893,29396],{"class":878},[199,31895,31859],{"class":898},[199,31897,31794],{"class":898},[199,31899,31900],{"class":201,"line":333},[199,31901,907],{"emptyLinePlaceholder":906},[199,31903,31904,31906,31908],{"class":201,"line":227},[199,31905,29396],{"class":878},[199,31907,31859],{"class":898},[199,31909,31809],{"class":898},[199,31911,31912],{"class":201,"line":238},[199,31913,907],{"emptyLinePlaceholder":906},[199,31915,31916,31918,31920],{"class":201,"line":252},[199,31917,29396],{"class":878},[199,31919,31859],{"class":898},[199,31921,31922],{"class":898}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[199,31924,31925],{"class":201,"line":388},[199,31926,907],{"emptyLinePlaceholder":906},[199,31928,31929,31931,31933],{"class":201,"line":415},[199,31930,29396],{"class":878},[199,31932,31859],{"class":898},[199,31934,31839],{"class":898},[199,31936,31937],{"class":201,"line":426},[199,31938,907],{"emptyLinePlaceholder":906},[199,31940,31941,31943,31945],{"class":201,"line":1015},[199,31942,29396],{"class":878},[199,31944,31859],{"class":898},[199,31946,31947],{"class":898}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[24,31949,31950],{"start":73},[27,31951,31952],{},"验证推送成功",[31,31954,31955],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[31,31957,31958],{},[49,31959,6685],{},[176,31961,31962,31965],{},[27,31963,31964],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[27,31966,31967],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[31,31969,31970],{},[55,31971],{"alt":57,"src":31972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[31,31974,31975],{},[55,31976],{"alt":57,"src":31977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[627,31979,31981],{"id":31980},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[31,31983,31984,31985,31988,31989,31992],{},"如果您想在 ",[49,31986,31987],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[49,31990,31991],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[31,31994,31995,31996],{},"1. ",[49,31997,31998],{},"启用 Docker 跨平台构建",[31,32000,32001],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[31,32003,32004],{},"第一步：启用 buildx（只需执行一次）",[190,32006,32008],{"className":26666,"code":32007,"language":26668,"meta":57,"style":57},"docker buildx create --name multiarch_builder --use\n",[196,32009,32010],{"__ignoreMap":57},[199,32011,32012,32014,32017,32020,32023,32026],{"class":201,"line":202},[199,32013,29396],{"class":878},[199,32015,32016],{"class":898}," buildx",[199,32018,32019],{"class":898}," create",[199,32021,32022],{"class":1018}," --name",[199,32024,32025],{"class":898}," multiarch_builder",[199,32027,32028],{"class":1018}," --use\n",[31,32030,32031],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[31,32033,32034],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[190,32036,32038],{"className":26666,"code":32037,"language":26668,"meta":57,"style":57},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[196,32039,32040],{"__ignoreMap":57},[199,32041,32042,32044,32046,32048,32051,32054,32057,32060],{"class":201,"line":202},[199,32043,29396],{"class":878},[199,32045,30073],{"class":898},[199,32047,30076],{"class":1018},[199,32049,32050],{"class":1018}," --privileged",[199,32052,32053],{"class":898}," multiarch\u002Fqemu-user-static",[199,32055,32056],{"class":1018}," --reset",[199,32058,32059],{"class":1018}," -p",[199,32061,32062],{"class":898}," yes\n",[31,32064,32065],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[31,32067,32068],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[190,32070,32072],{"className":26666,"code":32071,"language":26668,"meta":57,"style":57},"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",[196,32073,32074,32116,32120,32125,32135,32145,32154,32160,32164,32168,32178,32186,32195,32201,32205,32209,32219,32227,32236,32242,32246,32250,32260,32268,32277,32283,32287,32291,32301,32309,32318,32324,32328,32332,32342,32350,32359,32365,32369,32373,32383,32391,32400,32406,32410,32414,32424,32432,32441,32447,32451,32455,32465,32473,32482,32488,32492,32496,32507,32515,32524,32530],{"__ignoreMap":57},[199,32075,32076,32078,32080,32082,32085,32088,32090,32092,32095,32097,32099,32101,32103,32106,32109,32111,32114],{"class":201,"line":202},[199,32077,29396],{"class":878},[199,32079,32016],{"class":898},[199,32081,31575],{"class":898},[199,32083,32084],{"class":1018}," --platform",[199,32086,32087],{"class":898}," linux\u002Famd64,linux\u002Farm64",[199,32089,31578],{"class":1018},[199,32091,31745],{"class":1086},[199,32093,32094],{"class":898},"你的镜像",[199,32096,31751],{"class":205},[199,32098,1217],{"class":1086},[199,32100,3938],{"class":898},[199,32102,887],{"class":1086},[199,32104,32105],{"class":898},"标",[199,32107,32108],{"class":205},"签",[199,32110,1217],{"class":1086},[199,32112,32113],{"class":1018}," --push",[199,32115,31584],{"class":898},[199,32117,32118],{"class":201,"line":36},[199,32119,907],{"emptyLinePlaceholder":906},[199,32121,32122],{"class":201,"line":73},[199,32123,32124],{"class":1454},"# 例子：\n",[199,32126,32127,32129,32131,32133],{"class":201,"line":333},[199,32128,29396],{"class":878},[199,32130,32016],{"class":898},[199,32132,31575],{"class":898},[199,32134,27522],{"class":1018},[199,32136,32137,32140,32143],{"class":201,"line":227},[199,32138,32139],{"class":205},"--platform ",[199,32141,32142],{"class":898},"linux\u002Famd64,linux\u002Farm64",[199,32144,27522],{"class":1018},[199,32146,32147,32149,32152],{"class":201,"line":238},[199,32148,31578],{"class":1018},[199,32150,32151],{"class":898}," tungchiahui\u002Fros:noetic-focal",[199,32153,27522],{"class":1018},[199,32155,32156,32158],{"class":201,"line":252},[199,32157,32113],{"class":1018},[199,32159,27522],{"class":1018},[199,32161,32162],{"class":201,"line":388},[199,32163,31584],{"class":898},[199,32165,32166],{"class":201,"line":415},[199,32167,907],{"emptyLinePlaceholder":906},[199,32169,32170,32172,32174,32176],{"class":201,"line":426},[199,32171,29396],{"class":878},[199,32173,32016],{"class":898},[199,32175,31575],{"class":898},[199,32177,27522],{"class":1018},[199,32179,32180,32182,32184],{"class":201,"line":1015},[199,32181,32139],{"class":205},[199,32183,32142],{"class":898},[199,32185,27522],{"class":1018},[199,32187,32188,32190,32193],{"class":201,"line":1031},[199,32189,31578],{"class":1018},[199,32191,32192],{"class":898}," tungchiahui\u002Fros:humble-jammy",[199,32194,27522],{"class":1018},[199,32196,32197,32199],{"class":201,"line":1043},[199,32198,32113],{"class":1018},[199,32200,27522],{"class":1018},[199,32202,32203],{"class":201,"line":1049},[199,32204,31584],{"class":898},[199,32206,32207],{"class":201,"line":1054},[199,32208,907],{"emptyLinePlaceholder":906},[199,32210,32211,32213,32215,32217],{"class":201,"line":1062},[199,32212,29396],{"class":878},[199,32214,32016],{"class":898},[199,32216,31575],{"class":898},[199,32218,27522],{"class":1018},[199,32220,32221,32223,32225],{"class":201,"line":1075},[199,32222,32139],{"class":205},[199,32224,32142],{"class":898},[199,32226,27522],{"class":1018},[199,32228,32229,32231,32234],{"class":201,"line":1092},[199,32230,31578],{"class":1018},[199,32232,32233],{"class":898}," tungchiahui\u002Fros:jazzy-noble",[199,32235,27522],{"class":1018},[199,32237,32238,32240],{"class":201,"line":1107},[199,32239,32113],{"class":1018},[199,32241,27522],{"class":1018},[199,32243,32244],{"class":201,"line":1128},[199,32245,31584],{"class":898},[199,32247,32248],{"class":201,"line":1146},[199,32249,907],{"emptyLinePlaceholder":906},[199,32251,32252,32254,32256,32258],{"class":201,"line":1163},[199,32253,29163],{"class":878},[199,32255,32016],{"class":898},[199,32257,31575],{"class":898},[199,32259,27522],{"class":1018},[199,32261,32262,32264,32266],{"class":201,"line":1176},[199,32263,32139],{"class":205},[199,32265,32142],{"class":898},[199,32267,27522],{"class":1018},[199,32269,32270,32272,32275],{"class":201,"line":1189},[199,32271,31578],{"class":1018},[199,32273,32274],{"class":898}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[199,32276,27522],{"class":1018},[199,32278,32279,32281],{"class":201,"line":1202},[199,32280,32113],{"class":1018},[199,32282,27522],{"class":1018},[199,32284,32285],{"class":201,"line":1207},[199,32286,31584],{"class":898},[199,32288,32289],{"class":201,"line":1212},[199,32290,907],{"emptyLinePlaceholder":906},[199,32292,32293,32295,32297,32299],{"class":201,"line":1225},[199,32294,29396],{"class":878},[199,32296,32016],{"class":898},[199,32298,31575],{"class":898},[199,32300,27522],{"class":1018},[199,32302,32303,32305,32307],{"class":201,"line":1236},[199,32304,32139],{"class":205},[199,32306,32142],{"class":898},[199,32308,27522],{"class":1018},[199,32310,32311,32313,32316],{"class":201,"line":1249},[199,32312,31578],{"class":1018},[199,32314,32315],{"class":898}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[199,32317,27522],{"class":1018},[199,32319,32320,32322],{"class":201,"line":1262},[199,32321,32113],{"class":1018},[199,32323,27522],{"class":1018},[199,32325,32326],{"class":201,"line":1275},[199,32327,31584],{"class":898},[199,32329,32330],{"class":201,"line":1287},[199,32331,907],{"emptyLinePlaceholder":906},[199,32333,32334,32336,32338,32340],{"class":201,"line":1292},[199,32335,29163],{"class":878},[199,32337,32016],{"class":898},[199,32339,31575],{"class":898},[199,32341,27522],{"class":1018},[199,32343,32344,32346,32348],{"class":201,"line":1297},[199,32345,32139],{"class":205},[199,32347,32142],{"class":898},[199,32349,27522],{"class":1018},[199,32351,32352,32354,32357],{"class":201,"line":1310},[199,32353,31578],{"class":1018},[199,32355,32356],{"class":898}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[199,32358,27522],{"class":1018},[199,32360,32361,32363],{"class":201,"line":1315},[199,32362,32113],{"class":1018},[199,32364,27522],{"class":1018},[199,32366,32367],{"class":201,"line":1330},[199,32368,31584],{"class":898},[199,32370,32371],{"class":201,"line":1335},[199,32372,907],{"emptyLinePlaceholder":906},[199,32374,32375,32377,32379,32381],{"class":201,"line":1340},[199,32376,29396],{"class":878},[199,32378,32016],{"class":898},[199,32380,31575],{"class":898},[199,32382,27522],{"class":1018},[199,32384,32385,32387,32389],{"class":201,"line":1352},[199,32386,32139],{"class":205},[199,32388,32142],{"class":898},[199,32390,27522],{"class":1018},[199,32392,32393,32395,32398],{"class":201,"line":1367},[199,32394,31578],{"class":1018},[199,32396,32397],{"class":898}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[199,32399,27522],{"class":1018},[199,32401,32402,32404],{"class":201,"line":1381},[199,32403,32113],{"class":1018},[199,32405,27522],{"class":1018},[199,32407,32408],{"class":201,"line":1396},[199,32409,31584],{"class":898},[199,32411,32412],{"class":201,"line":1401},[199,32413,907],{"emptyLinePlaceholder":906},[199,32415,32416,32418,32420,32422],{"class":201,"line":1411},[199,32417,29396],{"class":878},[199,32419,32016],{"class":898},[199,32421,31575],{"class":898},[199,32423,27522],{"class":1018},[199,32425,32426,32428,32430],{"class":201,"line":1421},[199,32427,32139],{"class":205},[199,32429,32142],{"class":898},[199,32431,27522],{"class":1018},[199,32433,32434,32436,32439],{"class":201,"line":1426},[199,32435,31578],{"class":1018},[199,32437,32438],{"class":898}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[199,32440,27522],{"class":1018},[199,32442,32443,32445],{"class":201,"line":1436},[199,32444,32113],{"class":1018},[199,32446,27522],{"class":1018},[199,32448,32449],{"class":201,"line":1441},[199,32450,31584],{"class":898},[199,32452,32453],{"class":201,"line":1451},[199,32454,907],{"emptyLinePlaceholder":906},[199,32456,32457,32459,32461,32463],{"class":201,"line":1458},[199,32458,29163],{"class":878},[199,32460,32016],{"class":898},[199,32462,31575],{"class":898},[199,32464,27522],{"class":1018},[199,32466,32467,32469,32471],{"class":201,"line":1464},[199,32468,32139],{"class":205},[199,32470,32142],{"class":898},[199,32472,27522],{"class":1018},[199,32474,32475,32477,32480],{"class":201,"line":1478},[199,32476,31578],{"class":1018},[199,32478,32479],{"class":898}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[199,32481,27522],{"class":1018},[199,32483,32484,32486],{"class":201,"line":1516},[199,32485,32113],{"class":1018},[199,32487,27522],{"class":1018},[199,32489,32490],{"class":201,"line":1522},[199,32491,31584],{"class":898},[199,32493,32494],{"class":201,"line":1528},[199,32495,907],{"emptyLinePlaceholder":906},[199,32497,32498,32501,32503,32505],{"class":201,"line":1557},[199,32499,32500],{"class":878},"  docker",[199,32502,32016],{"class":898},[199,32504,31575],{"class":898},[199,32506,27522],{"class":1018},[199,32508,32509,32511,32513],{"class":201,"line":1563},[199,32510,32139],{"class":205},[199,32512,32142],{"class":898},[199,32514,27522],{"class":1018},[199,32516,32517,32519,32522],{"class":201,"line":1568},[199,32518,31578],{"class":1018},[199,32520,32521],{"class":898}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[199,32523,27522],{"class":1018},[199,32525,32526,32528],{"class":201,"line":1574},[199,32527,32113],{"class":1018},[199,32529,27522],{"class":1018},[199,32531,32532],{"class":201,"line":1580},[199,32533,31584],{"class":898},[31,32535,32536],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[31,32538,32539],{},[55,32540],{"alt":57,"src":32541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[31,32543,32544],{},[55,32545],{"alt":57,"src":32546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[627,32548,32550],{"id":32549},"_623清除构建缓存","6.2.3.清除构建缓存",[190,32552,32554],{"className":26666,"code":32553,"language":26668,"meta":57,"style":57},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[196,32555,32556,32561],{"__ignoreMap":57},[199,32557,32558],{"class":201,"line":202},[199,32559,32560],{"class":1454},"# 清理BuildKit构建缓存\n",[199,32562,32563,32565,32568,32571],{"class":201,"line":36},[199,32564,29396],{"class":878},[199,32566,32567],{"class":898}," builder",[199,32569,32570],{"class":898}," prune",[199,32572,32573],{"class":1018}," -f\n",[31,32575,32576],{},[55,32577],{"alt":57,"src":32578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[19,32580,32582],{"id":32581},"_63补充","6.3.补充",[627,32584,32586],{"id":32585},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[31,32588,32589],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[31,32591,32592],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[31,32594,32595],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[190,32597,32599],{"className":26666,"code":32598,"language":26668,"meta":57,"style":57},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[196,32600,32601,32608],{"__ignoreMap":57},[199,32602,32603,32605],{"class":201,"line":202},[199,32604,30213],{"class":878},[199,32606,32607],{"class":898}," nginx\n",[199,32609,32610,32612,32615,32618,32620],{"class":201,"line":36},[199,32611,31398],{"class":878},[199,32613,32614],{"class":898}," echo",[199,32616,32617],{"class":898}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[199,32619,29065],{"class":1086},[199,32621,32622],{"class":898}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[31,32624,32625],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[31,32627,32628],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[190,32630,32632],{"className":26666,"code":32631,"language":26668,"meta":57,"style":57},"docker build -t nginx:tuling .\n",[196,32633,32634],{"__ignoreMap":57},[199,32635,32636,32638,32640,32642,32645],{"class":201,"line":202},[199,32637,29396],{"class":878},[199,32639,31575],{"class":898},[199,32641,31578],{"class":1018},[199,32643,32644],{"class":898}," nginx:tuling",[199,32646,31584],{"class":898},[31,32648,32649],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[31,32651,32652],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[190,32654,32656],{"className":26666,"code":32655,"language":26668,"meta":57,"style":57},"docker run -d -p 92:80 nginx:tuling\n",[196,32657,32658],{"__ignoreMap":57},[199,32659,32660,32662,32664,32667,32669,32672],{"class":201,"line":202},[199,32661,29396],{"class":878},[199,32663,30073],{"class":898},[199,32665,32666],{"class":1018}," -d",[199,32668,32059],{"class":1018},[199,32670,32671],{"class":898}," 92:80",[199,32673,32674],{"class":898}," nginx:tuling\n",[31,32676,32677,32678],{},"4、访问 ",[2867,32679,32682],{"href":32680,"rel":32681},"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",[2871],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[31,32684,32685],{},[55,32686],{"alt":57,"src":32687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[31,32689,32690],{},[55,32691],{"alt":57,"src":32692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[627,32694,32696],{"id":32695},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[31,32698,32699],{},"只需要知道大体流程即可",[31,32701,32702],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[31,32704,32705],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[31,32707,32708],{},"2、在Dockerfile中添加以下内容",[190,32710,32712],{"className":28934,"code":32711,"language":28936,"meta":57,"style":57},"# 基于哪个镜像\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",[196,32713,32714,32719,32724,32729,32734,32739,32744,32749],{"__ignoreMap":57},[199,32715,32716],{"class":201,"line":202},[199,32717,32718],{},"# 基于哪个镜像\n",[199,32720,32721],{"class":201,"line":36},[199,32722,32723],{},"From java:8\n",[199,32725,32726],{"class":201,"line":73},[199,32727,32728],{},"# 复制文件到容器\n",[199,32730,32731],{"class":201,"line":333},[199,32732,32733],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[199,32735,32736],{"class":201,"line":227},[199,32737,32738],{},"# 声明需要暴露的端口\n",[199,32740,32741],{"class":201,"line":238},[199,32742,32743],{},"EXPOSE 8877\n",[199,32745,32746],{"class":201,"line":252},[199,32747,32748],{},"# 配置容器启动后执行的命令\n",[199,32750,32751],{"class":201,"line":388},[199,32752,32753],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[31,32755,32756],{},"3、使用docker build命令构建镜像",[190,32758,32760],{"className":26666,"code":32759,"language":26668,"meta":57,"style":57},"docker build -t tulingmall-member:0.0.5 .\n",[196,32761,32762],{"__ignoreMap":57},[199,32763,32764,32766,32768,32770,32773],{"class":201,"line":202},[199,32765,29396],{"class":878},[199,32767,31575],{"class":898},[199,32769,31578],{"class":1018},[199,32771,32772],{"class":898}," tulingmall-member:0.0.5",[199,32774,31584],{"class":898},[31,32776,32777],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[31,32779,32780],{},[55,32781],{"alt":57,"src":32782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[31,32784,32785],{},"4、启动镜像，加-d可在后台启动",[190,32787,32789],{"className":26666,"code":32788,"language":26668,"meta":57,"style":57},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[196,32790,32791],{"__ignoreMap":57},[199,32792,32793,32795,32797,32799,32801,32804],{"class":201,"line":202},[199,32794,29396],{"class":878},[199,32796,30073],{"class":898},[199,32798,32666],{"class":1018},[199,32800,32059],{"class":1018},[199,32802,32803],{"class":898}," 8877:8877",[199,32805,32806],{"class":898}," tulingmall-member:0.0.5\n",[31,32808,32809],{},"加上JVM参数：",[190,32811,32813],{"className":26666,"code":32812,"language":26668,"meta":57,"style":57},"# --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",[196,32814,32815,32820,32835,32845,32854,32861],{"__ignoreMap":57},[199,32816,32817],{"class":201,"line":202},[199,32818,32819],{"class":1454},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[199,32821,32822,32824,32826,32829,32831,32833],{"class":201,"line":36},[199,32823,29396],{"class":878},[199,32825,30073],{"class":898},[199,32827,32828],{"class":1018},"  -d",[199,32830,32059],{"class":1018},[199,32832,32803],{"class":898},[199,32834,27522],{"class":1018},[199,32836,32837,32839,32842],{"class":201,"line":73},[199,32838,30971],{"class":205},[199,32840,32841],{"class":898},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[199,32843,32844],{"class":1018},"  \\\n",[199,32846,32847,32849,32852],{"class":201,"line":333},[199,32848,30971],{"class":205},[199,32850,32851],{"class":898},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[199,32853,32844],{"class":1018},[199,32855,32856,32859],{"class":201,"line":227},[199,32857,32858],{"class":205},"--cap-add=SYS_PTRACE  ",[199,32860,29018],{"class":1018},[199,32862,32863],{"class":201,"line":238},[199,32864,32865],{"class":205},"tulingmall-member:0.0.5\n",[31,32867,32868],{},"5、访问会员服务接口",[31,32870,32871],{},[55,32872],{"alt":57,"src":32873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[627,32875,32877],{"id":32876},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[31,32879,32880],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[31,32882,32883,32884],{},"阿里云docker镜像仓库：",[2867,32885,32886],{"href":32886,"rel":32887},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[2871],[31,32889,32890],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[31,32892,32893],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[31,32895,32896],{},[55,32897],{"alt":57,"src":32898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[31,32900,32901],{},"要把镜像推送到镜像仓库",[190,32903,32905],{"className":26666,"code":32904,"language":26668,"meta":57,"style":57},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[196,32906,32907],{"__ignoreMap":57},[199,32908,32909,32911,32913,32915],{"class":201,"line":202},[199,32910,29396],{"class":878},[199,32912,31740],{"class":898},[199,32914,32772],{"class":898},[199,32916,32917],{"class":898}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[31,32919,32920],{},"最后将镜像推送到远程仓库",[190,32922,32924],{"className":26666,"code":32923,"language":26668,"meta":57,"style":57},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[196,32925,32926],{"__ignoreMap":57},[199,32927,32928,32930,32932],{"class":201,"line":202},[199,32929,29396],{"class":878},[199,32931,31859],{"class":898},[199,32933,32917],{"class":898},[1002,32935,32936],{},"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":57,"searchDepth":36,"depth":36,"links":32938},[32939,32940,32941],{"id":31326,"depth":73,"text":31327},{"id":31555,"depth":73,"text":31556},{"id":32581,"depth":73,"text":32582},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":31318,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32948,"title":32949,"body":32950,"description":57,"extension":3024,"meta":33093,"navigation":906,"path":33094,"seo":33095,"stem":33096,"__hash__":33097},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32951,"toc":33091},[32952,32955,32960,32965,32968,32973,32978,32981,32986,32991,32994,32999,33002,33005,33008,33011,33014,33017,33037,33059,33062,33065,33085,33088],[10,32953,32949],{"id":32954},"_7vscode远程开发",[24,32956,32957],{},[27,32958,32959],{},"插件1：微软Docker工具",[31,32961,32962],{},[55,32963],{"alt":57,"src":32964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[31,32966,32967],{},"docker扩展插件已经进化为container tools了，请安装container tools",[31,32969,32970],{},[55,32971],{"alt":57,"src":32972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[24,32974,32975],{"start":36},[27,32976,32977],{},"插件2：微软Docker远程开发工具",[31,32979,32980],{},"下面这是远程开发的插件。",[31,32982,32983],{},[55,32984],{"alt":57,"src":32985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[31,32987,32988],{},[55,32989],{"alt":57,"src":32990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[31,32992,32993],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[31,32995,32996],{},[55,32997],{"alt":57,"src":32998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[31,33000,33001],{},"安装完拓展之后，vscode进行链接：",[31,33003,33004],{},"1.按ctrl+shift+p",[31,33006,33007],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[31,33009,33010],{},"3.选择目前运行的容器",[31,33012,33013],{},"4.VS Code 会在新窗口中打开并连接到容器",[31,33015,33016],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[190,33018,33020],{"className":26666,"code":33019,"language":26668,"meta":57,"style":57},"docker run -v 主机目录:容器目录 image-name\n",[196,33021,33022],{"__ignoreMap":57},[199,33023,33024,33026,33028,33031,33034],{"class":201,"line":202},[199,33025,29396],{"class":878},[199,33027,30073],{"class":898},[199,33029,33030],{"class":1018}," -v",[199,33032,33033],{"class":898}," 主机目录:容器目录",[199,33035,33036],{"class":898}," image-name\n",[190,33038,33040],{"className":26666,"code":33039,"language":26668,"meta":57,"style":57},"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",[196,33041,33042],{"__ignoreMap":57},[199,33043,33044,33046,33048,33051,33053,33056],{"class":201,"line":202},[199,33045,29396],{"class":878},[199,33047,30073],{"class":898},[199,33049,33050],{"class":1018}," -it",[199,33052,33030],{"class":1018},[199,33054,33055],{"class":898}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[199,33057,33058],{"class":898}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[31,33060,33061],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[31,33063,33064],{},"查看挂载情况：",[190,33066,33068],{"className":26666,"code":33067,"language":26668,"meta":57,"style":57},"mount | grep -i project\n",[196,33069,33070],{"__ignoreMap":57},[199,33071,33072,33075,33077,33080,33082],{"class":201,"line":202},[199,33073,33074],{"class":878},"mount",[199,33076,27953],{"class":1086},[199,33078,33079],{"class":878}," grep",[199,33081,29273],{"class":1018},[199,33083,33084],{"class":898}," project\n",[31,33086,33087],{},"也可以通过ls来进行查看",[1002,33089,33090],{},"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":57,"searchDepth":36,"depth":36,"links":33092},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32949,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":33099,"title":33100,"body":33101,"description":3023,"extension":3024,"meta":33105,"navigation":906,"path":33107,"seo":33108,"stem":33109,"__hash__":33110},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":33102,"toc":33103},[],{"title":57,"searchDepth":36,"depth":36,"links":33104},[],{"category":33106},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":33100,"description":3023},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":33112,"title":33113,"body":33114,"description":3023,"extension":3024,"meta":33118,"navigation":906,"path":33119,"seo":33120,"stem":33121,"__hash__":33122},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":33115,"toc":33116},[],{"title":57,"searchDepth":36,"depth":36,"links":33117},[],{"category":33106},"\u002Fwiki\u002F2025-11-10-k8s",{"title":33113,"description":3023},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":33124,"title":33125,"body":33126,"description":3023,"extension":3024,"meta":33418,"navigation":906,"path":33419,"seo":33420,"stem":33421,"__hash__":33422},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":33127,"toc":33416},[33128,33131,33139,33154,33159,33210,33213,33219,33405,33410,33413],[10,33129,33125],{"id":33130},"_1验证深度学习环境",[31,33132,33133,33134],{},"关于环境的安装，看",[2867,33135,33138],{"href":33136,"rel":33137},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[2871],"Pytorch-->深度学习",[31,33140,33141,33142,33145,33146,33149,33150,33153],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[196,33143,33144],{},"pytorch-cuda=12.4"," 是一个“ ",[49,33147,33148],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[49,33151,33152],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[31,33155,33156],{},[55,33157],{"alt":57,"src":33158},"\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",[190,33160,33162],{"className":26666,"code":33161,"language":26668,"meta":57,"style":57},"# 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",[196,33163,33164,33169],{"__ignoreMap":57},[199,33165,33166],{"class":201,"line":202},[199,33167,33168],{"class":1454},"# CUDA 12.4\n",[199,33170,33171,33174,33176,33179,33182,33185,33188,33191,33193,33196,33199,33202,33205,33207],{"class":201,"line":36},[199,33172,33173],{"class":878},"conda",[199,33175,26678],{"class":898},[199,33177,33178],{"class":898}," pytorch==",[199,33180,33181],{"class":1018},"2.5.1",[199,33183,33184],{"class":898}," torchvision==",[199,33186,33187],{"class":1018},"0.20.1",[199,33189,33190],{"class":898}," torchaudio==",[199,33192,33181],{"class":1018},[199,33194,33195],{"class":898}," pytorch-cuda=",[199,33197,33198],{"class":1018},"12.4",[199,33200,33201],{"class":1018}," -c",[199,33203,33204],{"class":898}," pytorch",[199,33206,33201],{"class":1018},[199,33208,33209],{"class":898}," nvidia\n",[31,33211,33212],{},"）：",[31,33214,33215],{},[2867,33216,33217],{"href":33217,"rel":33218},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[2871],[190,33220,33224],{"className":33221,"code":33222,"language":33223,"meta":57,"style":57},"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",[196,33225,33226,33231,33239,33244,33254,33270,33275,33285,33322,33329,33340,33356,33361,33371,33383,33393],{"__ignoreMap":57},[199,33227,33228],{"class":201,"line":202},[199,33229,33230],{"class":1454},"# 对深度学习环境进行测试\n",[199,33232,33233,33236],{"class":201,"line":36},[199,33234,33235],{"class":1086},"import",[199,33237,33238],{"class":205}," torch\n",[199,33240,33241],{"class":201,"line":73},[199,33242,33243],{"class":1454},"# 查看cuda是否被激活\n",[199,33245,33246,33249,33251],{"class":201,"line":333},[199,33247,33248],{"class":205},"flag",[199,33250,895],{"class":1086},[199,33252,33253],{"class":205},"torch.cuda.is_available()\n",[199,33255,33256,33259,33261,33264,33267],{"class":201,"line":227},[199,33257,33258],{"class":1018},"print",[199,33260,1537],{"class":205},[199,33262,33263],{"class":898},"\"cuda:\"",[199,33265,33266],{"class":205},", flag)   ",[199,33268,33269],{"class":1454},"#返回true的话说明被激活\n",[199,33271,33272],{"class":201,"line":238},[199,33273,33274],{"class":1454},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[199,33276,33277,33280,33282],{"class":201,"line":252},[199,33278,33279],{"class":205},"ngpu",[199,33281,895],{"class":1086},[199,33283,33284],{"class":1018},"1\n",[199,33286,33287,33290,33292,33295,33298,33300,33303,33306,33309,33311,33313,33315,33317,33320],{"class":201,"line":388},[199,33288,33289],{"class":205},"device",[199,33291,895],{"class":1086},[199,33293,33294],{"class":205},"torch.device(",[199,33296,33297],{"class":898},"\"cuda:0\"",[199,33299,4629],{"class":1086},[199,33301,33302],{"class":205},"(torch.cuda.is_available() ",[199,33304,33305],{"class":1086},"and",[199,33307,33308],{"class":205}," ngpu",[199,33310,1217],{"class":1086},[199,33312,1025],{"class":1018},[199,33314,16575],{"class":205},[199,33316,4626],{"class":1086},[199,33318,33319],{"class":898}," \"cpu\"",[199,33321,1594],{"class":205},[199,33323,33324,33326],{"class":201,"line":415},[199,33325,33258],{"class":1018},[199,33327,33328],{"class":205},"(device)\n",[199,33330,33331,33333,33336,33338],{"class":201,"line":426},[199,33332,33258],{"class":1018},[199,33334,33335],{"class":205},"(torch.cuda.get_device_name(",[199,33337,1025],{"class":1018},[199,33339,1554],{"class":205},[199,33341,33342,33344,33347,33349,33351,33353],{"class":201,"line":1015},[199,33343,33258],{"class":1018},[199,33345,33346],{"class":205},"(torch.rand(",[199,33348,1920],{"class":1018},[199,33350,3461],{"class":205},[199,33352,1920],{"class":1018},[199,33354,33355],{"class":205},").cuda())\n",[199,33357,33358],{"class":201,"line":1031},[199,33359,33360],{"class":1454},"# 查看cuda和cudnn的版本\n",[199,33362,33363,33366,33368],{"class":201,"line":1043},[199,33364,33365],{"class":205},"cuda_version",[199,33367,895],{"class":1086},[199,33369,33370],{"class":205},"torch.version.cuda\n",[199,33372,33373,33375,33377,33380],{"class":201,"line":1049},[199,33374,33258],{"class":1018},[199,33376,1537],{"class":205},[199,33378,33379],{"class":898},"\"cuda version\"",[199,33381,33382],{"class":205},",cuda_version)\n",[199,33384,33385,33388,33390],{"class":201,"line":1054},[199,33386,33387],{"class":205},"cudnn_version",[199,33389,895],{"class":1086},[199,33391,33392],{"class":205},"torch.backends.cudnn.version()\n",[199,33394,33395,33397,33399,33402],{"class":201,"line":1062},[199,33396,33258],{"class":1018},[199,33398,1537],{"class":205},[199,33400,33401],{"class":898},"\"cudnn version\"",[199,33403,33404],{"class":205},",cudnn_version)\n",[31,33406,33407],{},[55,33408],{"alt":57,"src":33409},"\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",[31,33411,33412],{},"cuda:0 指的是一块显卡",[1002,33414,33415],{},"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":57,"searchDepth":36,"depth":36,"links":33417},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":33125,"description":3023},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":33424,"title":33425,"body":33426,"description":3023,"extension":3024,"meta":53228,"navigation":906,"path":53229,"seo":53230,"stem":53231,"__hash__":53232},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":33427,"toc":53222},[33428,33431,33435,33439,33442,33447,33452,33455,33460,33465,33470,33473,33477,33482,33486,33491,33494,33499,33502,33505,33508,33511,33516,33519,33524,33529,33534,33539,33542,33546,33549,33554,34158,34163,34166,34171,34174,34177,34641,34644,34647,34650,34653,36703,36706,36711,36716,37511,37514,37519,38297,38301,39960,39964,40678,40682,40686,40691,40696,40701,40704,40709,40714,40719,40724,40729,40733,40738,42020,42025,42028,42031,42034,42189,42192,42195,43411,43416,44111,44115,44119,44124,44129,44132,44137,44142,44147,44152,44157,44162,44167,44172,44177,44182,44187,44192,44197,44202,44207,44212,44217,44222,44227,44232,44237,44242,44247,44252,44257,44262,44267,44272,44277,44282,44286,44290,44293,45771,45775,47422,47426,48120,48124,48127,48130,48673,48676,48680,48683,50080,50084,50087,50665,52452,52456,52459,53219],[10,33429,33425],{"id":33430},"_2经典神经网络",[19,33432,33434],{"id":33433},"_21lenet与alexnet","2.1.LeNet与AlexNet",[627,33436,33438],{"id":33437},"_211原理介绍","2.1.1.原理介绍",[31,33440,33441],{},"LeNet-5",[24,33443,33444],{},[27,33445,33446],{},"原理",[31,33448,33449],{},[55,33450],{"alt":57,"src":33451},"\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",[31,33453,33454],{},"B是batch批次；C是channel通道",[24,33456,33457],{"start":36},[27,33458,33459],{},"网络参数详细",[31,33461,33462],{},[55,33463],{"alt":57,"src":33464},"\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",[31,33466,33467],{},[55,33468],{"alt":57,"src":33469},"\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",[31,33471,33472],{},"AlexNet",[24,33474,33475],{},[27,33476,33446],{},[31,33478,33479],{},[55,33480],{"alt":57,"src":33481},"\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",[24,33483,33484],{"start":36},[27,33485,33459],{},[31,33487,33488],{},[55,33489],{"alt":57,"src":33490},"\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",[31,33492,33493],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[31,33495,33496],{},[55,33497],{"alt":57,"src":33498},"\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",[31,33500,33501],{},"数据处理中的图像增强操作:",[31,33503,33504],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[31,33506,33507],{},"①增加数据量，保证训练数据充足；②防止过拟合",[31,33509,33510],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[31,33512,33513],{},[55,33514],{"alt":57,"src":33515},"\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",[31,33517,33518],{},"提升网络精确度的方法：LRN正则化",[31,33520,33521],{},[55,33522],{"alt":57,"src":33523},"\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",[31,33525,33526],{},[55,33527],{"alt":57,"src":33528},"\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",[24,33530,33531],{"start":73},[27,33532,33533],{},"AlexNet的总结",[31,33535,33536],{},[55,33537],{"alt":57,"src":33538},"\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",[31,33540,33541],{},"比LeNet模型要深一丢丢",[627,33543,33545],{"id":33544},"_212代码实现","2.1.2.代码实现",[31,33547,33548],{},"（1）LeNet",[24,33550,33551],{},[27,33552,33553],{},"模型搭建",[190,33555,33557],{"className":33221,"code":33556,"language":33223,"meta":57,"style":57},"# 导入库\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",[196,33558,33559,33564,33570,33575,33588,33593,33605,33609,33629,33634,33639,33650,33655,33674,33678,33683,33732,33744,33749,33778,33813,33840,33845,33857,33862,33882,33901,33920,33924,33929,33939,33956,33967,33982,33993,34004,34019,34034,34045,34052,34056,34070,34075,34098,34103,34108,34113,34117,34122,34127,34137],{"__ignoreMap":57},[199,33560,33561],{"class":201,"line":202},[199,33562,33563],{"class":1454},"# 导入库\n",[199,33565,33566,33568],{"class":201,"line":36},[199,33567,33235],{"class":1086},[199,33569,33238],{"class":205},[199,33571,33572],{"class":201,"line":73},[199,33573,33574],{"class":1454},"# 导入神经网络层\n",[199,33576,33577,33580,33583,33585],{"class":201,"line":333},[199,33578,33579],{"class":1086},"from",[199,33581,33582],{"class":205}," torch ",[199,33584,33235],{"class":1086},[199,33586,33587],{"class":205}," nn\n",[199,33589,33590],{"class":201,"line":227},[199,33591,33592],{"class":1454},"# 导入展示神经网络参数的包\n",[199,33594,33595,33597,33600,33602],{"class":201,"line":238},[199,33596,33579],{"class":1086},[199,33598,33599],{"class":205}," torchsummary ",[199,33601,33235],{"class":1086},[199,33603,33604],{"class":205}," summary\n",[199,33606,33607],{"class":201,"line":252},[199,33608,907],{"emptyLinePlaceholder":906},[199,33610,33611,33613,33616,33618,33621,33623,33626],{"class":201,"line":388},[199,33612,17554],{"class":1086},[199,33614,33615],{"class":878}," LeNet",[199,33617,1537],{"class":205},[199,33619,33620],{"class":878},"nn",[199,33622,3638],{"class":205},[199,33624,33625],{"class":878},"Module",[199,33627,33628],{"class":205},"):\n",[199,33630,33631],{"class":201,"line":415},[199,33632,33633],{"class":1454},"    # 模型初始化:\n",[199,33635,33636],{"class":201,"line":426},[199,33637,33638],{"class":1454},"    # 定义一些网络层和激活函数\n",[199,33640,33641,33644,33647],{"class":201,"line":1015},[199,33642,33643],{"class":1086},"    def",[199,33645,33646],{"class":1018}," __init__",[199,33648,33649],{"class":205},"(self):\n",[199,33651,33652],{"class":201,"line":1031},[199,33653,33654],{"class":1454},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[199,33656,33657,33660,33663,33666,33669,33672],{"class":201,"line":1043},[199,33658,33659],{"class":1018},"        super",[199,33661,33662],{"class":205},"(LeNet,",[199,33664,33665],{"class":1018},"self",[199,33667,33668],{"class":205},").",[199,33670,33671],{"class":1018},"__init__",[199,33673,4892],{"class":205},[199,33675,33676],{"class":201,"line":1049},[199,33677,907],{"emptyLinePlaceholder":906},[199,33679,33680],{"class":201,"line":1054},[199,33681,33682],{"class":1454},"        # 定义网络层\n",[199,33684,33685,33688,33691,33693,33696,33699,33701,33703,33705,33708,33710,33712,33714,33717,33719,33721,33723,33726,33728,33730],{"class":201,"line":1062},[199,33686,33687],{"class":1018},"        self",[199,33689,33690],{"class":205},".c1",[199,33692,895],{"class":1086},[199,33694,33695],{"class":205},"nn.Conv2d(",[199,33697,33698],{"class":8113},"in_channels",[199,33700,895],{"class":1086},[199,33702,1115],{"class":1018},[199,33704,3461],{"class":205},[199,33706,33707],{"class":8113},"out_channels",[199,33709,895],{"class":1086},[199,33711,3428],{"class":1018},[199,33713,3461],{"class":205},[199,33715,33716],{"class":8113},"kernel_size",[199,33718,895],{"class":1086},[199,33720,1909],{"class":1018},[199,33722,3461],{"class":205},[199,33724,33725],{"class":8113},"padding",[199,33727,895],{"class":1086},[199,33729,1925],{"class":1018},[199,33731,1594],{"class":205},[199,33733,33734,33736,33739,33741],{"class":201,"line":1075},[199,33735,33687],{"class":1018},[199,33737,33738],{"class":205},".sig",[199,33740,895],{"class":1086},[199,33742,33743],{"class":205},"nn.Sigmoid()\n",[199,33745,33746],{"class":201,"line":1092},[199,33747,33748],{"class":1454},"        # 定义池化\n",[199,33750,33751,33753,33756,33758,33761,33763,33765,33767,33769,33772,33774,33776],{"class":201,"line":1107},[199,33752,33687],{"class":1018},[199,33754,33755],{"class":205},".s2",[199,33757,895],{"class":1086},[199,33759,33760],{"class":205},"nn.AvgPool2d(",[199,33762,33716],{"class":8113},[199,33764,895],{"class":1086},[199,33766,1925],{"class":1018},[199,33768,3461],{"class":205},[199,33770,33771],{"class":8113},"stride",[199,33773,895],{"class":1086},[199,33775,1925],{"class":1018},[199,33777,1594],{"class":205},[199,33779,33780,33782,33785,33787,33789,33791,33793,33795,33797,33799,33801,33803,33805,33807,33809,33811],{"class":201,"line":1128},[199,33781,33687],{"class":1018},[199,33783,33784],{"class":205},".c3",[199,33786,895],{"class":1086},[199,33788,33695],{"class":205},[199,33790,33698],{"class":8113},[199,33792,895],{"class":1086},[199,33794,3428],{"class":1018},[199,33796,3461],{"class":205},[199,33798,33707],{"class":8113},[199,33800,895],{"class":1086},[199,33802,3681],{"class":1018},[199,33804,3461],{"class":205},[199,33806,33716],{"class":8113},[199,33808,895],{"class":1086},[199,33810,1909],{"class":1018},[199,33812,1594],{"class":205},[199,33814,33815,33817,33820,33822,33824,33826,33828,33830,33832,33834,33836,33838],{"class":201,"line":1146},[199,33816,33687],{"class":1018},[199,33818,33819],{"class":205},".s4",[199,33821,895],{"class":1086},[199,33823,33760],{"class":205},[199,33825,33716],{"class":8113},[199,33827,895],{"class":1086},[199,33829,1925],{"class":1018},[199,33831,3461],{"class":205},[199,33833,33771],{"class":8113},[199,33835,895],{"class":1086},[199,33837,1925],{"class":1018},[199,33839,1594],{"class":205},[199,33841,33842],{"class":201,"line":1163},[199,33843,33844],{"class":1454},"        # 定义平展层\n",[199,33846,33847,33849,33852,33854],{"class":201,"line":1176},[199,33848,33687],{"class":1018},[199,33850,33851],{"class":205},".flatten",[199,33853,895],{"class":1086},[199,33855,33856],{"class":205},"nn.Flatten()\n",[199,33858,33859],{"class":201,"line":1189},[199,33860,33861],{"class":1454},"        # 定义全连接层\n",[199,33863,33864,33866,33869,33871,33874,33876,33878,33880],{"class":201,"line":1202},[199,33865,33687],{"class":1018},[199,33867,33868],{"class":205},".f5",[199,33870,895],{"class":1086},[199,33872,33873],{"class":205},"nn.Linear(",[199,33875,6886],{"class":1018},[199,33877,3461],{"class":205},[199,33879,3896],{"class":1018},[199,33881,1594],{"class":205},[199,33883,33884,33886,33889,33891,33893,33895,33897,33899],{"class":201,"line":1207},[199,33885,33687],{"class":1018},[199,33887,33888],{"class":205},".f6",[199,33890,895],{"class":1086},[199,33892,33873],{"class":205},[199,33894,3896],{"class":1018},[199,33896,3461],{"class":205},[199,33898,3790],{"class":1018},[199,33900,1594],{"class":205},[199,33902,33903,33905,33908,33910,33912,33914,33916,33918],{"class":201,"line":1212},[199,33904,33687],{"class":1018},[199,33906,33907],{"class":205},".f7",[199,33909,895],{"class":1086},[199,33911,33873],{"class":205},[199,33913,3790],{"class":1018},[199,33915,3461],{"class":205},[199,33917,3528],{"class":1018},[199,33919,1594],{"class":205},[199,33921,33922],{"class":201,"line":1225},[199,33923,907],{"emptyLinePlaceholder":906},[199,33925,33926],{"class":201,"line":1236},[199,33927,33928],{"class":1454},"    # 写工具->写前向传播\n",[199,33930,33931,33933,33936],{"class":201,"line":1249},[199,33932,33643],{"class":1086},[199,33934,33935],{"class":878}," forward",[199,33937,33938],{"class":205},"(self,x):\n",[199,33940,33941,33944,33946,33948,33951,33953],{"class":201,"line":1262},[199,33942,33943],{"class":205},"        x",[199,33945,895],{"class":1086},[199,33947,33665],{"class":1018},[199,33949,33950],{"class":205},".sig(",[199,33952,33665],{"class":1018},[199,33954,33955],{"class":205},".c1(x))\n",[199,33957,33958,33960,33962,33964],{"class":201,"line":1275},[199,33959,33943],{"class":205},[199,33961,895],{"class":1086},[199,33963,33665],{"class":1018},[199,33965,33966],{"class":205},".s2(x)\n",[199,33968,33969,33971,33973,33975,33977,33979],{"class":201,"line":1287},[199,33970,33943],{"class":205},[199,33972,895],{"class":1086},[199,33974,33665],{"class":1018},[199,33976,33950],{"class":205},[199,33978,33665],{"class":1018},[199,33980,33981],{"class":205},".c3(x))\n",[199,33983,33984,33986,33988,33990],{"class":201,"line":1292},[199,33985,33943],{"class":205},[199,33987,895],{"class":1086},[199,33989,33665],{"class":1018},[199,33991,33992],{"class":205},".s4(x)\n",[199,33994,33995,33997,33999,34001],{"class":201,"line":1297},[199,33996,33943],{"class":205},[199,33998,895],{"class":1086},[199,34000,33665],{"class":1018},[199,34002,34003],{"class":205},".flatten(x)\n",[199,34005,34006,34008,34010,34012,34014,34016],{"class":201,"line":1310},[199,34007,33943],{"class":205},[199,34009,895],{"class":1086},[199,34011,33665],{"class":1018},[199,34013,33950],{"class":205},[199,34015,33665],{"class":1018},[199,34017,34018],{"class":205},".f5(x))\n",[199,34020,34021,34023,34025,34027,34029,34031],{"class":201,"line":1315},[199,34022,33943],{"class":205},[199,34024,895],{"class":1086},[199,34026,33665],{"class":1018},[199,34028,33950],{"class":205},[199,34030,33665],{"class":1018},[199,34032,34033],{"class":205},".f6(x))\n",[199,34035,34036,34038,34040,34042],{"class":201,"line":1330},[199,34037,33943],{"class":205},[199,34039,895],{"class":1086},[199,34041,33665],{"class":1018},[199,34043,34044],{"class":205},".f7(x)\n",[199,34046,34047,34049],{"class":201,"line":1335},[199,34048,17612],{"class":1086},[199,34050,34051],{"class":205}," x\n",[199,34053,34054],{"class":201,"line":1340},[199,34055,907],{"emptyLinePlaceholder":906},[199,34057,34058,34060,34063,34065,34068],{"class":201,"line":1352},[199,34059,4470],{"class":1086},[199,34061,34062],{"class":1018}," __name__",[199,34064,5853],{"class":1086},[199,34066,34067],{"class":898},"\"__main__\"",[199,34069,6640],{"class":205},[199,34071,34072],{"class":201,"line":1367},[199,34073,34074],{"class":1454},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[199,34076,34077,34080,34082,34084,34087,34089,34092,34094,34096],{"class":201,"line":1381},[199,34078,34079],{"class":205},"    device",[199,34081,895],{"class":1086},[199,34083,33294],{"class":205},[199,34085,34086],{"class":898},"\"cuda\"",[199,34088,4629],{"class":1086},[199,34090,34091],{"class":205}," torch.cuda.is_available() ",[199,34093,4626],{"class":1086},[199,34095,33319],{"class":898},[199,34097,1594],{"class":205},[199,34099,34100],{"class":201,"line":1396},[199,34101,34102],{"class":1454},"    # 如果就是想指定用cpu用下方代码:\n",[199,34104,34105],{"class":201,"line":1401},[199,34106,34107],{"class":1454},"    # device=\"cpu\"\n",[199,34109,34110],{"class":201,"line":1411},[199,34111,34112],{"class":1454},"    # print(device)\n",[199,34114,34115],{"class":201,"line":1421},[199,34116,907],{"emptyLinePlaceholder":906},[199,34118,34119],{"class":201,"line":1426},[199,34120,34121],{"class":1454},"    # 实例化模型\n",[199,34123,34124],{"class":201,"line":1436},[199,34125,34126],{"class":1454},"    # 将模型放到设备中去运行\n",[199,34128,34129,34132,34134],{"class":201,"line":1441},[199,34130,34131],{"class":205},"    model",[199,34133,895],{"class":1086},[199,34135,34136],{"class":205},"LeNet().to(device)\n",[199,34138,34139,34142,34145,34147,34149,34151,34153,34155],{"class":201,"line":1451},[199,34140,34141],{"class":1018},"    print",[199,34143,34144],{"class":205},"(summary(model,(",[199,34146,1115],{"class":1018},[199,34148,3461],{"class":205},[199,34150,3979],{"class":1018},[199,34152,3461],{"class":205},[199,34154,3979],{"class":1018},[199,34156,34157],{"class":205},")))\n",[31,34159,34160],{},[55,34161],{"alt":57,"src":34162},"\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",[31,34164,34165],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[24,34167,34168],{"start":36},[27,34169,34170],{},"训练",[31,34172,34173],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[31,34175,34176],{},"在训练之前可以将数据展示看一下",[190,34178,34180],{"className":33221,"code":34179,"language":33223,"meta":57,"style":57},"# 建立画图的函数，用于展示数据\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",[196,34181,34182,34187,34192,34204,34216,34229,34234,34246,34251,34263,34268,34280,34284,34288,34309,34321,34326,34347,34358,34362,34367,34385,34396,34401,34412,34417,34428,34432,34437,34452,34465,34470,34475,34488,34501,34514,34519,34523,34528,34548,34565,34585,34598,34611,34621,34636],{"__ignoreMap":57},[199,34183,34184],{"class":201,"line":202},[199,34185,34186],{"class":1454},"# 建立画图的函数，用于展示数据\n",[199,34188,34189],{"class":201,"line":36},[199,34190,34191],{"class":1454},"# torchvision中包含很多内置的数据集\n",[199,34193,34194,34196,34199,34201],{"class":201,"line":73},[199,34195,33579],{"class":1086},[199,34197,34198],{"class":205}," sklearn.externals.array_api_compat.torch ",[199,34200,33235],{"class":1086},[199,34202,34203],{"class":205}," squeeze\n",[199,34205,34206,34208,34211,34213],{"class":201,"line":333},[199,34207,33579],{"class":1086},[199,34209,34210],{"class":205}," torchvision.datasets ",[199,34212,33235],{"class":1086},[199,34214,34215],{"class":205}," FashionMNIST\n",[199,34217,34218,34220,34223,34226],{"class":201,"line":227},[199,34219,33235],{"class":1086},[199,34221,34222],{"class":205}," numpy ",[199,34224,34225],{"class":1086},"as",[199,34227,34228],{"class":205}," np\n",[199,34230,34231],{"class":201,"line":238},[199,34232,34233],{"class":1454},"# 引入处理数据集的包\n",[199,34235,34236,34238,34241,34243],{"class":201,"line":252},[199,34237,33579],{"class":1086},[199,34239,34240],{"class":205}," torchvision ",[199,34242,33235],{"class":1086},[199,34244,34245],{"class":205}," transforms\n",[199,34247,34248],{"class":201,"line":388},[199,34249,34250],{"class":1454},"# 从torch库中引入数据处理的包\n",[199,34252,34253,34255,34258,34260],{"class":201,"line":415},[199,34254,33235],{"class":1086},[199,34256,34257],{"class":205}," torch.utils.data ",[199,34259,34225],{"class":1086},[199,34261,34262],{"class":205}," Data\n",[199,34264,34265],{"class":201,"line":426},[199,34266,34267],{"class":1454},"# 导入画图的库\n",[199,34269,34270,34272,34275,34277],{"class":201,"line":1015},[199,34271,33235],{"class":1086},[199,34273,34274],{"class":205}," matplotlib.pyplot ",[199,34276,34225],{"class":1086},[199,34278,34279],{"class":205}," plt\n",[199,34281,34282],{"class":201,"line":1031},[199,34283,907],{"emptyLinePlaceholder":906},[199,34285,34286],{"class":201,"line":1043},[199,34287,907],{"emptyLinePlaceholder":906},[199,34289,34290,34293,34295,34298,34301,34303,34306],{"class":201,"line":1049},[199,34291,34292],{"class":205},"train_data",[199,34294,895],{"class":1086},[199,34296,34297],{"class":205},"FashionMNIST(",[199,34299,34300],{"class":8113},"root",[199,34302,895],{"class":1086},[199,34304,34305],{"class":898},"'.\u002Fdata'",[199,34307,34308],{"class":205},",\n",[199,34310,34311,34314,34316,34319],{"class":201,"line":1054},[199,34312,34313],{"class":8113},"                        train",[199,34315,895],{"class":1086},[199,34317,34318],{"class":1018},"True",[199,34320,34308],{"class":205},[199,34322,34323],{"class":201,"line":1062},[199,34324,34325],{"class":1454},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[199,34327,34328,34331,34333,34336,34339,34341,34344],{"class":201,"line":1075},[199,34329,34330],{"class":8113},"                        transform",[199,34332,895],{"class":1086},[199,34334,34335],{"class":205},"transforms.Compose([transforms.Resize(",[199,34337,34338],{"class":8113},"size",[199,34340,895],{"class":1086},[199,34342,34343],{"class":1018},"224",[199,34345,34346],{"class":205},"),transforms.ToTensor()]),\n",[199,34348,34349,34352,34354,34356],{"class":201,"line":1092},[199,34350,34351],{"class":8113},"                        download",[199,34353,895],{"class":1086},[199,34355,34318],{"class":1018},[199,34357,1594],{"class":205},[199,34359,34360],{"class":201,"line":1107},[199,34361,907],{"emptyLinePlaceholder":906},[199,34363,34364],{"class":201,"line":1128},[199,34365,34366],{"class":1454},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[199,34368,34369,34372,34374,34377,34380,34382],{"class":201,"line":1146},[199,34370,34371],{"class":205},"train_loader",[199,34373,895],{"class":1086},[199,34375,34376],{"class":205},"Data.DataLoader(",[199,34378,34379],{"class":8113},"dataset",[199,34381,895],{"class":1086},[199,34383,34384],{"class":205},"train_data,\n",[199,34386,34387,34390,34392,34394],{"class":201,"line":1163},[199,34388,34389],{"class":8113},"                             batch_size",[199,34391,895],{"class":1086},[199,34393,3291],{"class":1018},[199,34395,34308],{"class":205},[199,34397,34398],{"class":201,"line":1176},[199,34399,34400],{"class":1454},"                             # 数据是否打乱\n",[199,34402,34403,34406,34408,34410],{"class":201,"line":1189},[199,34404,34405],{"class":8113},"                             shuffle",[199,34407,895],{"class":1086},[199,34409,34318],{"class":1018},[199,34411,34308],{"class":205},[199,34413,34414],{"class":201,"line":1202},[199,34415,34416],{"class":1454},"                             # 规定加载数据的进程\n",[199,34418,34419,34422,34424,34426],{"class":201,"line":1207},[199,34420,34421],{"class":8113},"                             num_workers",[199,34423,895],{"class":1086},[199,34425,1025],{"class":1018},[199,34427,1594],{"class":205},[199,34429,34430],{"class":201,"line":1212},[199,34431,907],{"emptyLinePlaceholder":906},[199,34433,34434],{"class":201,"line":1225},[199,34435,34436],{"class":1454},"# 获得一个batch的数据\n",[199,34438,34439,34441,34444,34446,34449],{"class":201,"line":1236},[199,34440,5929],{"class":1086},[199,34442,34443],{"class":205}," step,(b_x,b_y) ",[199,34445,28886],{"class":1086},[199,34447,34448],{"class":1018}," enumerate",[199,34450,34451],{"class":205},"(train_loader):\n",[199,34453,34454,34456,34459,34461,34463],{"class":201,"line":1249},[199,34455,6005],{"class":1086},[199,34457,34458],{"class":205}," step ",[199,34460,1217],{"class":1086},[199,34462,1621],{"class":1018},[199,34464,6640],{"class":205},[199,34466,34467],{"class":201,"line":1262},[199,34468,34469],{"class":1086},"        break\n",[199,34471,34472],{"class":201,"line":1275},[199,34473,34474],{"class":1454},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[199,34476,34477,34480,34482,34485],{"class":201,"line":1287},[199,34478,34479],{"class":205},"batch_x",[199,34481,895],{"class":1086},[199,34483,34484],{"class":205},"b_x.squeeze().numpy()  ",[199,34486,34487],{"class":1454},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[199,34489,34490,34493,34495,34498],{"class":201,"line":1292},[199,34491,34492],{"class":205},"batch_y",[199,34494,895],{"class":1086},[199,34496,34497],{"class":205},"b_y.numpy()   ",[199,34499,34500],{"class":1454},"#将张量转换成功numpy数组\n",[199,34502,34503,34506,34508,34511],{"class":201,"line":1297},[199,34504,34505],{"class":205},"class_label",[199,34507,895],{"class":1086},[199,34509,34510],{"class":205},"train_data.classes  ",[199,34512,34513],{"class":1454},"#训练集标签\n",[199,34515,34516],{"class":201,"line":1310},[199,34517,34518],{"class":1454},"# print(class_label)\n",[199,34520,34521],{"class":201,"line":1315},[199,34522,907],{"emptyLinePlaceholder":906},[199,34524,34525],{"class":201,"line":1330},[199,34526,34527],{"class":1454},"# 可视化一个batch的图像\n",[199,34529,34530,34533,34536,34538,34540,34542,34544,34546],{"class":201,"line":1335},[199,34531,34532],{"class":205},"plt.figure(",[199,34534,34535],{"class":8113},"figsize",[199,34537,895],{"class":1086},[199,34539,1537],{"class":205},[199,34541,3579],{"class":1018},[199,34543,3461],{"class":205},[199,34545,1909],{"class":1018},[199,34547,1554],{"class":205},[199,34549,34550,34552,34555,34557,34560,34562],{"class":201,"line":1340},[199,34551,5929],{"class":1086},[199,34553,34554],{"class":205}," ii ",[199,34556,28886],{"class":1086},[199,34558,34559],{"class":205}," np.arange(",[199,34561,10255],{"class":1018},[199,34563,34564],{"class":205},"(batch_y)):\n",[199,34566,34567,34570,34572,34574,34576,34579,34581,34583],{"class":201,"line":1352},[199,34568,34569],{"class":205},"    plt.subplot(",[199,34571,1915],{"class":1018},[199,34573,3461],{"class":205},[199,34575,3681],{"class":1018},[199,34577,34578],{"class":205},",ii ",[199,34580,2028],{"class":1086},[199,34582,1495],{"class":1018},[199,34584,1594],{"class":205},[199,34586,34587,34590,34593,34595],{"class":201,"line":1367},[199,34588,34589],{"class":205},"    plt.imshow(batch_x[ii,:,:],",[199,34591,34592],{"class":8113},"cmap",[199,34594,895],{"class":1086},[199,34596,34597],{"class":205},"plt.cm.gray)\n",[199,34599,34600,34603,34605,34607,34609],{"class":201,"line":1381},[199,34601,34602],{"class":205},"    plt.title(class_label[batch_y[ii]],",[199,34604,34338],{"class":8113},[199,34606,895],{"class":1086},[199,34608,3528],{"class":1018},[199,34610,1594],{"class":205},[199,34612,34613,34616,34619],{"class":201,"line":1396},[199,34614,34615],{"class":205},"    plt.axis(",[199,34617,34618],{"class":898},"\"off\"",[199,34620,1594],{"class":205},[199,34622,34623,34626,34629,34631,34634],{"class":201,"line":1401},[199,34624,34625],{"class":205},"    plt.subplots_adjust(",[199,34627,34628],{"class":8113},"wspace",[199,34630,895],{"class":1086},[199,34632,34633],{"class":1018},"0.05",[199,34635,1594],{"class":205},[199,34637,34638],{"class":201,"line":1411},[199,34639,34640],{"class":205},"plt.show()\n",[31,34642,34643],{},"用matplotlib进行展示的过程可以后续再补",[31,34645,34646],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[31,34648,34649],{},"训练次数就是按照批次过整个训练集数据的次数",[31,34651,34652],{},"模型训练：",[190,34654,34656],{"className":33221,"code":34655,"language":33223,"meta":57,"style":57},"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",[196,34657,34658,34665,34672,34676,34688,34694,34705,34715,34725,34735,34745,34750,34762,34772,34776,34780,34785,34796,34809,34820,34837,34848,34887,34903,34915,34926,34931,34942,34958,34969,34980,34991,34998,35002,35007,35012,35016,35021,35031,35052,35056,35060,35065,35070,35075,35095,35099,35104,35114,35118,35123,35132,35137,35142,35147,35157,35161,35165,35170,35175,35185,35190,35200,35205,35214,35219,35228,35233,35242,35246,35251,35261,35265,35269,35274,35289,35317,35332,35336,35341,35346,35355,35360,35369,35374,35383,35388,35397,35402,35411,35416,35425,35430,35443,35448,35458,35463,35473,35479,35485,35491,35497,35508,35514,35534,35540,35551,35557,35563,35569,35575,35581,35587,35593,35613,35619,35635,35641,35655,35661,35676,35682,35691,35697,35706,35712,35718,35727,35733,35744,35750,35769,35775,35786,35792,35812,35828,35834,35848,35854,35860,35871,35877,35883,35893,35899,35910,35916,35926,35931,35937,35986,36033,36038,36044,36063,36069,36088,36094,36100,36110,36115,36121,36137,36182,36188,36194,36200,36211,36217,36223,36229,36247,36261,36270,36279,36288,36297,36303,36309,36317,36322,36328,36339,36345,36365,36371,36377,36383,36400,36406,36412,36418,36424,36430,36457,36481,36487,36493,36499,36510,36521,36527,36544,36567,36590,36596,36601,36610,36620,36626,36631,36637,36650,36656,36667,36678,36697],{"__ignoreMap":57},[199,34659,34660,34662],{"class":201,"line":202},[199,34661,33235],{"class":1086},[199,34663,34664],{"class":205}," copy\n",[199,34666,34667,34669],{"class":201,"line":36},[199,34668,33235],{"class":1086},[199,34670,34671],{"class":205}," time\n",[199,34673,34674],{"class":201,"line":73},[199,34675,907],{"emptyLinePlaceholder":906},[199,34677,34678,34680,34683,34685],{"class":201,"line":333},[199,34679,33235],{"class":1086},[199,34681,34682],{"class":205}," pandas ",[199,34684,34225],{"class":1086},[199,34686,34687],{"class":205}," pd\n",[199,34689,34690,34692],{"class":201,"line":227},[199,34691,33235],{"class":1086},[199,34693,33238],{"class":205},[199,34695,34696,34698,34700,34702],{"class":201,"line":238},[199,34697,33579],{"class":1086},[199,34699,34257],{"class":205},[199,34701,33235],{"class":1086},[199,34703,34704],{"class":205}," Dataset\n",[199,34706,34707,34709,34711,34713],{"class":201,"line":252},[199,34708,33579],{"class":1086},[199,34710,34210],{"class":205},[199,34712,33235],{"class":1086},[199,34714,34215],{"class":205},[199,34716,34717,34719,34721,34723],{"class":201,"line":388},[199,34718,33579],{"class":1086},[199,34720,34240],{"class":205},[199,34722,33235],{"class":1086},[199,34724,34245],{"class":205},[199,34726,34727,34729,34731,34733],{"class":201,"line":415},[199,34728,33235],{"class":1086},[199,34730,34257],{"class":205},[199,34732,34225],{"class":1086},[199,34734,34262],{"class":205},[199,34736,34737,34739,34741,34743],{"class":201,"line":426},[199,34738,33235],{"class":1086},[199,34740,34274],{"class":205},[199,34742,34225],{"class":1086},[199,34744,34279],{"class":205},[199,34746,34747],{"class":201,"line":1015},[199,34748,34749],{"class":1454},"# 导入模型\n",[199,34751,34752,34754,34757,34759],{"class":201,"line":1031},[199,34753,33579],{"class":1086},[199,34755,34756],{"class":205}," model ",[199,34758,33235],{"class":1086},[199,34760,34761],{"class":205}," LeNet\n",[199,34763,34764,34766,34768,34770],{"class":201,"line":1043},[199,34765,33579],{"class":1086},[199,34767,33582],{"class":205},[199,34769,33235],{"class":1086},[199,34771,33587],{"class":205},[199,34773,34774],{"class":201,"line":1049},[199,34775,907],{"emptyLinePlaceholder":906},[199,34777,34778],{"class":201,"line":1054},[199,34779,907],{"emptyLinePlaceholder":906},[199,34781,34782],{"class":201,"line":1062},[199,34783,34784],{"class":1454},"# 处理训练集与验证集函数--->划分数据集\n",[199,34786,34787,34790,34793],{"class":201,"line":1075},[199,34788,34789],{"class":1086},"def",[199,34791,34792],{"class":878}," train_val_data_process",[199,34794,34795],{"class":205},"():\n",[199,34797,34798,34801,34803,34805,34807],{"class":201,"line":1092},[199,34799,34800],{"class":205},"    train_data",[199,34802,895],{"class":1086},[199,34804,34297],{"class":205},[199,34806,34305],{"class":898},[199,34808,34308],{"class":205},[199,34810,34811,34814,34816,34818],{"class":201,"line":1107},[199,34812,34813],{"class":8113},"                            train",[199,34815,895],{"class":1086},[199,34817,34318],{"class":1018},[199,34819,34308],{"class":205},[199,34821,34822,34825,34827,34829,34831,34833,34835],{"class":201,"line":1128},[199,34823,34824],{"class":8113},"                            transform",[199,34826,895],{"class":1086},[199,34828,34335],{"class":205},[199,34830,34338],{"class":8113},[199,34832,895],{"class":1086},[199,34834,3979],{"class":1018},[199,34836,34346],{"class":205},[199,34838,34839,34842,34844,34846],{"class":201,"line":1146},[199,34840,34841],{"class":8113},"                            download",[199,34843,895],{"class":1086},[199,34845,34318],{"class":1018},[199,34847,1594],{"class":205},[199,34849,34850,34853,34855,34858,34861,34863,34866,34868,34870,34873,34875,34877,34880,34882,34884],{"class":201,"line":1163},[199,34851,34852],{"class":205},"    train_data,val_data",[199,34854,895],{"class":1086},[199,34856,34857],{"class":205},"Data.random_split(train_data,[",[199,34859,34860],{"class":1018},"round",[199,34862,1537],{"class":205},[199,34864,34865],{"class":1018},"0.8",[199,34867,3537],{"class":1086},[199,34869,10255],{"class":1018},[199,34871,34872],{"class":205},"(train_data)),",[199,34874,34860],{"class":1018},[199,34876,1537],{"class":205},[199,34878,34879],{"class":1018},"0.2",[199,34881,3537],{"class":1086},[199,34883,10255],{"class":1018},[199,34885,34886],{"class":205},"(train_data))])\n",[199,34888,34889,34892,34894,34897,34899,34901],{"class":201,"line":1176},[199,34890,34891],{"class":205},"    train_dataloader ",[199,34893,895],{"class":1086},[199,34895,34896],{"class":205}," Data.DataLoader(",[199,34898,34379],{"class":8113},[199,34900,895],{"class":1086},[199,34902,34384],{"class":205},[199,34904,34905,34908,34910,34913],{"class":201,"line":1189},[199,34906,34907],{"class":8113},"                                       batch_size",[199,34909,895],{"class":1086},[199,34911,34912],{"class":1018},"128",[199,34914,34308],{"class":205},[199,34916,34917,34920,34922,34924],{"class":201,"line":1202},[199,34918,34919],{"class":8113},"                                       shuffle",[199,34921,895],{"class":1086},[199,34923,34318],{"class":1018},[199,34925,34308],{"class":205},[199,34927,34928],{"class":201,"line":1207},[199,34929,34930],{"class":1454},"                                       # 规定8个进程\n",[199,34932,34933,34936,34938,34940],{"class":201,"line":1212},[199,34934,34935],{"class":8113},"                                       num_workers",[199,34937,895],{"class":1086},[199,34939,3478],{"class":1018},[199,34941,1594],{"class":205},[199,34943,34944,34947,34949,34951,34953,34955],{"class":201,"line":1225},[199,34945,34946],{"class":205},"    val_dataloader",[199,34948,895],{"class":1086},[199,34950,34376],{"class":205},[199,34952,34379],{"class":8113},[199,34954,895],{"class":1086},[199,34956,34957],{"class":205},"val_data,\n",[199,34959,34960,34963,34965,34967],{"class":201,"line":1236},[199,34961,34962],{"class":8113},"                                   batch_size",[199,34964,895],{"class":1086},[199,34966,34912],{"class":1018},[199,34968,34308],{"class":205},[199,34970,34971,34974,34976,34978],{"class":201,"line":1249},[199,34972,34973],{"class":8113},"                                   shuffle",[199,34975,895],{"class":1086},[199,34977,34318],{"class":1018},[199,34979,34308],{"class":205},[199,34981,34982,34985,34987,34989],{"class":201,"line":1262},[199,34983,34984],{"class":8113},"                                   num_workers",[199,34986,895],{"class":1086},[199,34988,3478],{"class":1018},[199,34990,1594],{"class":205},[199,34992,34993,34995],{"class":201,"line":1275},[199,34994,6989],{"class":1086},[199,34996,34997],{"class":205}," train_dataloader,val_dataloader\n",[199,34999,35000],{"class":201,"line":1287},[199,35001,907],{"emptyLinePlaceholder":906},[199,35003,35004],{"class":201,"line":1292},[199,35005,35006],{"class":1454},"# 验证是否出错\n",[199,35008,35009],{"class":201,"line":1297},[199,35010,35011],{"class":1454},"# train_val_data_process()\n",[199,35013,35014],{"class":201,"line":1310},[199,35015,907],{"emptyLinePlaceholder":906},[199,35017,35018],{"class":201,"line":1315},[199,35019,35020],{"class":1454},"# 定义模型训练函数\n",[199,35022,35023,35025,35028],{"class":201,"line":1330},[199,35024,34789],{"class":1086},[199,35026,35027],{"class":878}," train_model_process",[199,35029,35030],{"class":205},"(model,train_dataloader,val_dataloader,num_epochs):\n",[199,35032,35033,35035,35037,35039,35041,35043,35045,35047,35050],{"class":201,"line":1335},[199,35034,34079],{"class":205},[199,35036,895],{"class":1086},[199,35038,33294],{"class":205},[199,35040,34086],{"class":898},[199,35042,4629],{"class":1086},[199,35044,34091],{"class":205},[199,35046,4626],{"class":1086},[199,35048,35049],{"class":898}," 'cpu'",[199,35051,1594],{"class":205},[199,35053,35054],{"class":201,"line":1340},[199,35055,907],{"emptyLinePlaceholder":906},[199,35057,35058],{"class":201,"line":1352},[199,35059,907],{"emptyLinePlaceholder":906},[199,35061,35062],{"class":201,"line":1367},[199,35063,35064],{"class":1454},"    # 定义优化器\n",[199,35066,35067],{"class":201,"line":1381},[199,35068,35069],{"class":1454},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[199,35071,35072],{"class":201,"line":1396},[199,35073,35074],{"class":1454},"    # lr为学习率\n",[199,35076,35077,35080,35082,35085,35088,35090,35093],{"class":201,"line":1401},[199,35078,35079],{"class":205},"    optimizer",[199,35081,895],{"class":1086},[199,35083,35084],{"class":205},"torch.optim.Adam(model.parameters(),",[199,35086,35087],{"class":8113},"lr",[199,35089,895],{"class":1086},[199,35091,35092],{"class":1018},"0.001",[199,35094,1594],{"class":205},[199,35096,35097],{"class":201,"line":1411},[199,35098,907],{"emptyLinePlaceholder":906},[199,35100,35101],{"class":201,"line":1421},[199,35102,35103],{"class":1454},"    # 定义损失函数使用交叉熵损失函数\n",[199,35105,35106,35109,35111],{"class":201,"line":1426},[199,35107,35108],{"class":205},"    criterion",[199,35110,895],{"class":1086},[199,35112,35113],{"class":205},"nn.CrossEntropyLoss()\n",[199,35115,35116],{"class":201,"line":1436},[199,35117,907],{"emptyLinePlaceholder":906},[199,35119,35120],{"class":201,"line":1441},[199,35121,35122],{"class":1454},"    # 将模型放到GPU中进行训练\n",[199,35124,35125,35127,35129],{"class":201,"line":1451},[199,35126,34131],{"class":205},[199,35128,895],{"class":1086},[199,35130,35131],{"class":205},"model.to(device)\n",[199,35133,35134],{"class":201,"line":1458},[199,35135,35136],{"class":1454},"    # 复制当前模型的参数\n",[199,35138,35139],{"class":201,"line":1464},[199,35140,35141],{"class":1454},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[199,35143,35144],{"class":201,"line":1478},[199,35145,35146],{"class":1454},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[199,35148,35149,35152,35154],{"class":201,"line":1516},[199,35150,35151],{"class":205},"    best_model_wts",[199,35153,895],{"class":1086},[199,35155,35156],{"class":205},"copy.deepcopy(model.state_dict())\n",[199,35158,35159],{"class":201,"line":1522},[199,35160,907],{"emptyLinePlaceholder":906},[199,35162,35163],{"class":201,"line":1528},[199,35164,907],{"emptyLinePlaceholder":906},[199,35166,35167],{"class":201,"line":1557},[199,35168,35169],{"class":1454},"    # 初始化参数\n",[199,35171,35172],{"class":201,"line":1563},[199,35173,35174],{"class":1454},"    # 最高准确度\n",[199,35176,35177,35180,35182],{"class":201,"line":1568},[199,35178,35179],{"class":205},"    best_acc",[199,35181,895],{"class":1086},[199,35183,35184],{"class":1018},"0.0\n",[199,35186,35187],{"class":201,"line":1574},[199,35188,35189],{"class":1454},"    # 训练集损失列表\n",[199,35191,35192,35195,35197],{"class":201,"line":1580},[199,35193,35194],{"class":205},"    train_loss_all",[199,35196,895],{"class":1086},[199,35198,35199],{"class":205},"[]\n",[199,35201,35202],{"class":201,"line":1597},[199,35203,35204],{"class":1454},"    # 验证集函数列表\n",[199,35206,35207,35210,35212],{"class":201,"line":1602},[199,35208,35209],{"class":205},"    val_loss_all",[199,35211,895],{"class":1086},[199,35213,35199],{"class":205},[199,35215,35216],{"class":201,"line":1608},[199,35217,35218],{"class":1454},"    # 训练集准确度列表\n",[199,35220,35221,35224,35226],{"class":201,"line":1640},[199,35222,35223],{"class":205},"    train_acc_all",[199,35225,895],{"class":1086},[199,35227,35199],{"class":205},[199,35229,35230],{"class":201,"line":1653},[199,35231,35232],{"class":1454},"    # 验证集准确度列表\n",[199,35234,35235,35238,35240],{"class":201,"line":1673},[199,35236,35237],{"class":205},"    val_acc_all",[199,35239,895],{"class":1086},[199,35241,35199],{"class":205},[199,35243,35244],{"class":201,"line":1690},[199,35245,907],{"emptyLinePlaceholder":906},[199,35247,35248],{"class":201,"line":1706},[199,35249,35250],{"class":1454},"    # 保存当前时间--->方便看每轮训练的时间\n",[199,35252,35253,35256,35258],{"class":201,"line":1712},[199,35254,35255],{"class":205},"    since",[199,35257,895],{"class":1086},[199,35259,35260],{"class":205},"time.time()\n",[199,35262,35263],{"class":201,"line":1720},[199,35264,907],{"emptyLinePlaceholder":906},[199,35266,35267],{"class":201,"line":1725},[199,35268,907],{"emptyLinePlaceholder":906},[199,35270,35271],{"class":201,"line":1731},[199,35272,35273],{"class":1454},"    # 准备工作完成--->开始训练模型\n",[199,35275,35276,35278,35281,35283,35286],{"class":201,"line":1745},[199,35277,1937],{"class":1086},[199,35279,35280],{"class":205}," epoch ",[199,35282,28886],{"class":1086},[199,35284,35285],{"class":1018}," range",[199,35287,35288],{"class":205},"(num_epochs):\n",[199,35290,35291,35294,35296,35299,35302,35304,35306,35308,35311,35313,35315],{"class":201,"line":1754},[199,35292,35293],{"class":1018},"        print",[199,35295,1537],{"class":205},[199,35297,35298],{"class":898},"\"Epoch ",[199,35300,35301],{"class":1018},"{}",[199,35303,3664],{"class":898},[199,35305,35301],{"class":1018},[199,35307,3337],{"class":898},[199,35309,35310],{"class":205},".format(epoch,num_epochs",[199,35312,1998],{"class":1086},[199,35314,1115],{"class":1018},[199,35316,1554],{"class":205},[199,35318,35319,35321,35323,35326,35328,35330],{"class":201,"line":1763},[199,35320,35293],{"class":1018},[199,35322,1537],{"class":205},[199,35324,35325],{"class":898},"\"-\"",[199,35327,3537],{"class":1086},[199,35329,3528],{"class":1018},[199,35331,1594],{"class":205},[199,35333,35334],{"class":201,"line":1768},[199,35335,907],{"emptyLinePlaceholder":906},[199,35337,35338],{"class":201,"line":19628},[199,35339,35340],{"class":1454},"        # 初始化参数\n",[199,35342,35343],{"class":201,"line":19641},[199,35344,35345],{"class":1454},"        # 训练集损失函数\n",[199,35347,35348,35351,35353],{"class":201,"line":19646},[199,35349,35350],{"class":205},"        train_loss",[199,35352,895],{"class":1086},[199,35354,35184],{"class":1018},[199,35356,35357],{"class":201,"line":19660},[199,35358,35359],{"class":1454},"        # 训练集准确度\n",[199,35361,35362,35365,35367],{"class":201,"line":19665},[199,35363,35364],{"class":205},"        train_corrects",[199,35366,895],{"class":1086},[199,35368,5989],{"class":1018},[199,35370,35371],{"class":201,"line":19671},[199,35372,35373],{"class":1454},"        # 验证集损失函数\n",[199,35375,35376,35379,35381],{"class":201,"line":19676},[199,35377,35378],{"class":205},"        val_loss",[199,35380,895],{"class":1086},[199,35382,35184],{"class":1018},[199,35384,35385],{"class":201,"line":19690},[199,35386,35387],{"class":1454},"        # 验证集准确度\n",[199,35389,35390,35393,35395],{"class":201,"line":19695},[199,35391,35392],{"class":205},"        val_corrects",[199,35394,895],{"class":1086},[199,35396,5989],{"class":1018},[199,35398,35399],{"class":201,"line":19700},[199,35400,35401],{"class":1454},"        # 训练集样本数量\n",[199,35403,35404,35407,35409],{"class":201,"line":19714},[199,35405,35406],{"class":205},"        train_num",[199,35408,895],{"class":1086},[199,35410,5989],{"class":1018},[199,35412,35413],{"class":201,"line":19726},[199,35414,35415],{"class":1454},"        # 验证集样本数量\n",[199,35417,35418,35421,35423],{"class":201,"line":19731},[199,35419,35420],{"class":205},"        val_num",[199,35422,895],{"class":1086},[199,35424,5989],{"class":1018},[199,35426,35427],{"class":201,"line":19744},[199,35428,35429],{"class":1454},"        # 将数据放到设备,并开始训练\n",[199,35431,35432,35434,35436,35438,35440],{"class":201,"line":19749},[199,35433,1481],{"class":1086},[199,35435,34443],{"class":205},[199,35437,28886],{"class":1086},[199,35439,34448],{"class":1018},[199,35441,35442],{"class":205},"(train_dataloader):\n",[199,35444,35445],{"class":201,"line":19754},[199,35446,35447],{"class":1454},"            # 将特征放入到训练设备\n",[199,35449,35450,35453,35455],{"class":201,"line":19759},[199,35451,35452],{"class":205},"            b_x",[199,35454,895],{"class":1086},[199,35456,35457],{"class":205},"b_x.to(device)\n",[199,35459,35460],{"class":201,"line":19772},[199,35461,35462],{"class":1454},"            # 将标签放入到训练设备当中\n",[199,35464,35465,35468,35470],{"class":201,"line":19777},[199,35466,35467],{"class":205},"            b_y",[199,35469,895],{"class":1086},[199,35471,35472],{"class":205},"b_y.to(device)\n",[199,35474,35476],{"class":201,"line":35475},98,[199,35477,35478],{"class":1454},"            # 设置模型为训练模式\n",[199,35480,35482],{"class":201,"line":35481},99,[199,35483,35484],{"class":205},"            model.train()\n",[199,35486,35488],{"class":201,"line":35487},100,[199,35489,35490],{"class":1454},"            # 将数据放到模型当中,开始前向传播\n",[199,35492,35494],{"class":201,"line":35493},101,[199,35495,35496],{"class":1454},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[199,35498,35500,35503,35505],{"class":201,"line":35499},102,[199,35501,35502],{"class":205},"            output",[199,35504,895],{"class":1086},[199,35506,35507],{"class":205},"model(b_x)\n",[199,35509,35511],{"class":201,"line":35510},103,[199,35512,35513],{"class":1454},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[199,35515,35517,35520,35522,35525,35528,35530,35532],{"class":201,"line":35516},104,[199,35518,35519],{"class":205},"            pre_lab",[199,35521,895],{"class":1086},[199,35523,35524],{"class":205},"torch.argmax(output,",[199,35526,35527],{"class":8113},"dim",[199,35529,895],{"class":1086},[199,35531,1115],{"class":1018},[199,35533,1594],{"class":205},[199,35535,35537],{"class":201,"line":35536},105,[199,35538,35539],{"class":1454},"            # 计算每一个batch的损失函数\n",[199,35541,35543,35546,35548],{"class":201,"line":35542},106,[199,35544,35545],{"class":205},"            loss",[199,35547,895],{"class":1086},[199,35549,35550],{"class":205},"criterion(output,b_y)\n",[199,35552,35554],{"class":201,"line":35553},107,[199,35555,35556],{"class":1454},"            # 将梯度初始化为0\n",[199,35558,35560],{"class":201,"line":35559},108,[199,35561,35562],{"class":205},"            optimizer.zero_grad()\n",[199,35564,35566],{"class":201,"line":35565},109,[199,35567,35568],{"class":1454},"            # 梯度置为0后再进行反向传播\n",[199,35570,35572],{"class":201,"line":35571},110,[199,35573,35574],{"class":205},"            loss.backward()\n",[199,35576,35578],{"class":201,"line":35577},111,[199,35579,35580],{"class":1454},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[199,35582,35584],{"class":201,"line":35583},112,[199,35585,35586],{"class":205},"            optimizer.step()\n",[199,35588,35590],{"class":201,"line":35589},113,[199,35591,35592],{"class":1454},"            # loss.item()指的是batch的平均损失\n",[199,35594,35596,35599,35601,35604,35606,35609,35611],{"class":201,"line":35595},114,[199,35597,35598],{"class":205},"            train_loss",[199,35600,12362],{"class":1086},[199,35602,35603],{"class":205},"loss.item()",[199,35605,3537],{"class":1086},[199,35607,35608],{"class":205},"b_x.size(",[199,35610,1025],{"class":1018},[199,35612,1594],{"class":205},[199,35614,35616],{"class":201,"line":35615},115,[199,35617,35618],{"class":1454},"            # 计算每个批次中正确预测的数量\n",[199,35620,35622,35625,35627,35630,35632],{"class":201,"line":35621},116,[199,35623,35624],{"class":205},"            train_corrects",[199,35626,12362],{"class":1086},[199,35628,35629],{"class":205},"torch.sum(pre_lab",[199,35631,5853],{"class":1086},[199,35633,35634],{"class":205},"b_y.data)\n",[199,35636,35638],{"class":201,"line":35637},117,[199,35639,35640],{"class":1454},"            # 计算目前为止一共处理了多少样本\n",[199,35642,35644,35647,35649,35651,35653],{"class":201,"line":35643},118,[199,35645,35646],{"class":205},"            train_num",[199,35648,12362],{"class":1086},[199,35650,35608],{"class":205},[199,35652,1025],{"class":1018},[199,35654,1594],{"class":205},[199,35656,35658],{"class":201,"line":35657},119,[199,35659,35660],{"class":1454},"        # 验证数据\n",[199,35662,35664,35666,35669,35671,35673],{"class":201,"line":35663},120,[199,35665,1481],{"class":1086},[199,35667,35668],{"class":205}," step ,(b_x,b_y) ",[199,35670,28886],{"class":1086},[199,35672,34448],{"class":1018},[199,35674,35675],{"class":205},"(val_dataloader):\n",[199,35677,35679],{"class":201,"line":35678},121,[199,35680,35681],{"class":1454},"            # 将特征放到验证设备当中\n",[199,35683,35685,35687,35689],{"class":201,"line":35684},122,[199,35686,35452],{"class":205},[199,35688,895],{"class":1086},[199,35690,35457],{"class":205},[199,35692,35694],{"class":201,"line":35693},123,[199,35695,35696],{"class":1454},"            # 将标签放到放到训练设备当中\n",[199,35698,35700,35702,35704],{"class":201,"line":35699},124,[199,35701,35467],{"class":205},[199,35703,895],{"class":1086},[199,35705,35472],{"class":205},[199,35707,35709],{"class":201,"line":35708},125,[199,35710,35711],{"class":1454},"            # 开启验证模式，设置模型为评估模式\n",[199,35713,35715],{"class":201,"line":35714},126,[199,35716,35717],{"class":205},"            model.eval()\n",[199,35719,35721,35724],{"class":201,"line":35720},127,[199,35722,35723],{"class":1086},"            with",[199,35725,35726],{"class":205}," torch.no_grad():\n",[199,35728,35730],{"class":201,"line":35729},128,[199,35731,35732],{"class":1454},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[199,35734,35736,35739,35741],{"class":201,"line":35735},129,[199,35737,35738],{"class":205},"                output ",[199,35740,895],{"class":1086},[199,35742,35743],{"class":205}," model(b_x)\n",[199,35745,35747],{"class":201,"line":35746},130,[199,35748,35749],{"class":1454},"                # 查找每一行中最大值对应的下标\n",[199,35751,35753,35756,35758,35761,35763,35765,35767],{"class":201,"line":35752},131,[199,35754,35755],{"class":205},"                pre_lab ",[199,35757,895],{"class":1086},[199,35759,35760],{"class":205}," torch.argmax(output, ",[199,35762,35527],{"class":8113},[199,35764,895],{"class":1086},[199,35766,1115],{"class":1018},[199,35768,1594],{"class":205},[199,35770,35772],{"class":201,"line":35771},132,[199,35773,35774],{"class":1454},"                # 计算验证集上的当前 batch 损失\n",[199,35776,35778,35781,35783],{"class":201,"line":35777},133,[199,35779,35780],{"class":205},"                val_batch_loss ",[199,35782,895],{"class":1086},[199,35784,35785],{"class":205}," criterion(output, b_y)\n",[199,35787,35789],{"class":201,"line":35788},134,[199,35790,35791],{"class":1454},"                # 对损失函数进行累加（按样本数加权）\n",[199,35793,35795,35798,35800,35803,35805,35808,35810],{"class":201,"line":35794},135,[199,35796,35797],{"class":205},"                val_loss ",[199,35799,12362],{"class":1086},[199,35801,35802],{"class":205}," val_batch_loss.item() ",[199,35804,3537],{"class":1086},[199,35806,35807],{"class":205}," b_x.size(",[199,35809,1025],{"class":1018},[199,35811,1594],{"class":205},[199,35813,35815,35818,35820,35823,35825],{"class":201,"line":35814},136,[199,35816,35817],{"class":205},"                val_corrects ",[199,35819,12362],{"class":1086},[199,35821,35822],{"class":205}," torch.sum(pre_lab ",[199,35824,5853],{"class":1086},[199,35826,35827],{"class":205}," b_y.data)\n",[199,35829,35831],{"class":201,"line":35830},137,[199,35832,35833],{"class":1454},"                # 当前用于验证的样本数量\n",[199,35835,35837,35840,35842,35844,35846],{"class":201,"line":35836},138,[199,35838,35839],{"class":205},"            val_num ",[199,35841,12362],{"class":1086},[199,35843,35807],{"class":205},[199,35845,1025],{"class":1018},[199,35847,1594],{"class":205},[199,35849,35851],{"class":201,"line":35850},139,[199,35852,35853],{"class":1454},"        # 计算并保存每一次迭代的loss值和准确率\n",[199,35855,35857],{"class":201,"line":35856},140,[199,35858,35859],{"class":1454},"        # 计算并保存训练集的loss值\n",[199,35861,35863,35866,35868],{"class":201,"line":35862},141,[199,35864,35865],{"class":205},"        train_loss_all.append(train_loss",[199,35867,3664],{"class":1086},[199,35869,35870],{"class":205},"train_num)\n",[199,35872,35874],{"class":201,"line":35873},142,[199,35875,35876],{"class":1454},"        # 取双精度\n",[199,35878,35880],{"class":201,"line":35879},143,[199,35881,35882],{"class":1454},"        # 计算并保存训练集的准确率\n",[199,35884,35886,35889,35891],{"class":201,"line":35885},144,[199,35887,35888],{"class":205},"        train_acc_all.append(train_corrects.double().item()",[199,35890,3664],{"class":1086},[199,35892,35870],{"class":205},[199,35894,35896],{"class":201,"line":35895},145,[199,35897,35898],{"class":1454},"        # 计算并保存验证集的loss值\n",[199,35900,35902,35905,35907],{"class":201,"line":35901},146,[199,35903,35904],{"class":205},"        val_loss_all.append(val_loss",[199,35906,3664],{"class":1086},[199,35908,35909],{"class":205},"val_num)\n",[199,35911,35913],{"class":201,"line":35912},147,[199,35914,35915],{"class":1454},"        # 计算并保存验证集的准确率\n",[199,35917,35919,35922,35924],{"class":201,"line":35918},148,[199,35920,35921],{"class":205},"        val_acc_all.append(val_corrects.double().item()",[199,35923,3664],{"class":1086},[199,35925,35909],{"class":205},[199,35927,35929],{"class":201,"line":35928},149,[199,35930,907],{"emptyLinePlaceholder":906},[199,35932,35934],{"class":201,"line":35933},150,[199,35935,35936],{"class":1454},"        # 打印训练一轮的loss值和准确率\n",[199,35938,35940,35942,35944,35946,35948,35951,35953,35956,35958,35961,35963,35965,35967,35969,35972,35974,35976,35979,35981,35983],{"class":201,"line":35939},151,[199,35941,35293],{"class":1018},[199,35943,1537],{"class":205},[199,35945,6493],{"class":898},[199,35947,35301],{"class":1018},[199,35949,35950],{"class":898},"train loss:",[199,35952,3974],{"class":1018},[199,35954,35955],{"class":1086},":.4f",[199,35957,759],{"class":1018},[199,35959,35960],{"class":898}," train acc:",[199,35962,3974],{"class":1018},[199,35964,35955],{"class":1086},[199,35966,759],{"class":1018},[199,35968,6493],{"class":898},[199,35970,35971],{"class":205},".format(epoch,train_loss_all[",[199,35973,1998],{"class":1086},[199,35975,1115],{"class":1018},[199,35977,35978],{"class":205},"],train_acc_all[",[199,35980,1998],{"class":1086},[199,35982,1115],{"class":1018},[199,35984,35985],{"class":205},"]))\n",[199,35987,35989,35991,35993,35995,35997,36000,36002,36004,36006,36009,36011,36013,36015,36017,36020,36022,36024,36027,36029,36031],{"class":201,"line":35988},152,[199,35990,35293],{"class":1018},[199,35992,1537],{"class":205},[199,35994,6493],{"class":898},[199,35996,35301],{"class":1018},[199,35998,35999],{"class":898},"val loss:",[199,36001,3974],{"class":1018},[199,36003,35955],{"class":1086},[199,36005,759],{"class":1018},[199,36007,36008],{"class":898}," val acc:",[199,36010,3974],{"class":1018},[199,36012,35955],{"class":1086},[199,36014,759],{"class":1018},[199,36016,6493],{"class":898},[199,36018,36019],{"class":205},".format(epoch,val_loss_all[",[199,36021,1998],{"class":1086},[199,36023,1115],{"class":1018},[199,36025,36026],{"class":205},"],val_acc_all[",[199,36028,1998],{"class":1086},[199,36030,1115],{"class":1018},[199,36032,35985],{"class":205},[199,36034,36036],{"class":201,"line":36035},153,[199,36037,907],{"emptyLinePlaceholder":906},[199,36039,36041],{"class":201,"line":36040},154,[199,36042,36043],{"class":1454},"        # 判断准确度--->保存最优模型\n",[199,36045,36047,36049,36052,36054,36056,36058,36060],{"class":201,"line":36046},155,[199,36048,2017],{"class":1086},[199,36050,36051],{"class":205}," val_acc_all[",[199,36053,1998],{"class":1086},[199,36055,1115],{"class":1018},[199,36057,1667],{"class":205},[199,36059,1217],{"class":1086},[199,36061,36062],{"class":205},"best_acc:\n",[199,36064,36066],{"class":201,"line":36065},156,[199,36067,36068],{"class":1454},"            # 保存当前模型准确度\n",[199,36070,36072,36075,36077,36079,36082,36084,36086],{"class":201,"line":36071},157,[199,36073,36074],{"class":205},"            best_acc:",[199,36076,3135],{"class":1018},[199,36078,895],{"class":1086},[199,36080,36081],{"class":205},"val_acc_all[",[199,36083,1998],{"class":1086},[199,36085,1115],{"class":1018},[199,36087,1932],{"class":205},[199,36089,36091],{"class":201,"line":36090},158,[199,36092,36093],{"class":1454},"            # 保存当前的准确度\n",[199,36095,36097],{"class":201,"line":36096},159,[199,36098,36099],{"class":1454},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[199,36101,36103,36106,36108],{"class":201,"line":36102},160,[199,36104,36105],{"class":205},"            best_model_wts",[199,36107,895],{"class":1086},[199,36109,35156],{"class":205},[199,36111,36113],{"class":201,"line":36112},161,[199,36114,907],{"emptyLinePlaceholder":906},[199,36116,36118],{"class":201,"line":36117},162,[199,36119,36120],{"class":1454},"        # 计算耗时\n",[199,36122,36124,36127,36129,36132,36134],{"class":201,"line":36123},163,[199,36125,36126],{"class":205},"        time_use",[199,36128,895],{"class":1086},[199,36130,36131],{"class":205},"time.time()",[199,36133,1998],{"class":1086},[199,36135,36136],{"class":205},"since\n",[199,36138,36140,36142,36144,36147,36149,36152,36154,36156,36158,36160,36162,36165,36168,36171,36173,36176,36178,36180],{"class":201,"line":36139},164,[199,36141,35293],{"class":1018},[199,36143,1537],{"class":205},[199,36145,36146],{"class":898},"'训练和验证耗费的时间",[199,36148,3974],{"class":1018},[199,36150,36151],{"class":1086},":.0f",[199,36153,759],{"class":1018},[199,36155,3624],{"class":898},[199,36157,3974],{"class":1018},[199,36159,36151],{"class":1086},[199,36161,759],{"class":1018},[199,36163,36164],{"class":898},"s'",[199,36166,36167],{"class":205},".format(time_use",[199,36169,36170],{"class":1086},"\u002F\u002F",[199,36172,3985],{"class":1018},[199,36174,36175],{"class":205},",time_use",[199,36177,3412],{"class":1086},[199,36179,3985],{"class":1018},[199,36181,1554],{"class":205},[199,36183,36185],{"class":201,"line":36184},165,[199,36186,36187],{"class":1454},"    # 选择最优参数\n",[199,36189,36191],{"class":201,"line":36190},166,[199,36192,36193],{"class":1454},"    # 加载最高准确率下的模型参数\n",[199,36195,36197],{"class":201,"line":36196},167,[199,36198,36199],{"class":1454},"    # model.load_state_dict(best_model_wts)\n",[199,36201,36203,36206,36209],{"class":201,"line":36202},168,[199,36204,36205],{"class":205},"    torch.save(model.state_dict(best_model_wts), ",[199,36207,36208],{"class":898},"'.\u002Fbest_model.pth'",[199,36210,1594],{"class":205},[199,36212,36214],{"class":201,"line":36213},169,[199,36215,36216],{"class":1454},"    # 或者写成\n",[199,36218,36220],{"class":201,"line":36219},170,[199,36221,36222],{"class":1454},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[199,36224,36226],{"class":201,"line":36225},171,[199,36227,36228],{"class":1454},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[199,36230,36232,36235,36237,36240,36243,36245],{"class":201,"line":36231},172,[199,36233,36234],{"class":205},"    train_process",[199,36236,895],{"class":1086},[199,36238,36239],{"class":205},"pd.DataFrame(",[199,36241,36242],{"class":8113},"data",[199,36244,895],{"class":1086},[199,36246,4485],{"class":205},[199,36248,36250,36253,36255,36258],{"class":201,"line":36249},173,[199,36251,36252],{"class":898},"        \"epoch\"",[199,36254,3938],{"class":205},[199,36256,36257],{"class":1018},"range",[199,36259,36260],{"class":205},"(num_epochs),\n",[199,36262,36264,36267],{"class":201,"line":36263},174,[199,36265,36266],{"class":898},"        \"train_loss_all\"",[199,36268,36269],{"class":205},":train_loss_all,\n",[199,36271,36273,36276],{"class":201,"line":36272},175,[199,36274,36275],{"class":898},"        \"val_loss_all\"",[199,36277,36278],{"class":205},":val_loss_all,\n",[199,36280,36282,36285],{"class":201,"line":36281},176,[199,36283,36284],{"class":898},"        \"train_acc_all\"",[199,36286,36287],{"class":205},":train_acc_all,\n",[199,36289,36291,36294],{"class":201,"line":36290},177,[199,36292,36293],{"class":898},"        \"val_acc_all\"",[199,36295,36296],{"class":205},":val_acc_all\n",[199,36298,36300],{"class":201,"line":36299},178,[199,36301,36302],{"class":205},"    })\n",[199,36304,36306],{"class":201,"line":36305},179,[199,36307,36308],{"class":1454},"    # 返回训练保存的过程\n",[199,36310,36312,36314],{"class":201,"line":36311},180,[199,36313,6989],{"class":1086},[199,36315,36316],{"class":205}," train_process\n",[199,36318,36320],{"class":201,"line":36319},181,[199,36321,907],{"emptyLinePlaceholder":906},[199,36323,36325],{"class":201,"line":36324},182,[199,36326,36327],{"class":1454},"# 将loss值和精度按照图片的形式展示出来\n",[199,36329,36331,36333,36336],{"class":201,"line":36330},183,[199,36332,34789],{"class":1086},[199,36334,36335],{"class":878}," matplot_acc_loss",[199,36337,36338],{"class":205},"(train_process):\n",[199,36340,36342],{"class":201,"line":36341},184,[199,36343,36344],{"class":1454},"    # 设置图的大小\n",[199,36346,36348,36351,36353,36355,36357,36359,36361,36363],{"class":201,"line":36347},185,[199,36349,36350],{"class":205},"    plt.figure(",[199,36352,34535],{"class":8113},[199,36354,895],{"class":1086},[199,36356,1537],{"class":205},[199,36358,3579],{"class":1018},[199,36360,3461],{"class":205},[199,36362,1915],{"class":1018},[199,36364,1554],{"class":205},[199,36366,36368],{"class":201,"line":36367},186,[199,36369,36370],{"class":1454},"    # 设置图中有几张图\n",[199,36372,36374],{"class":201,"line":36373},187,[199,36375,36376],{"class":1454},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[199,36378,36380],{"class":201,"line":36379},188,[199,36381,36382],{"class":1454},"    # ①loss图\n",[199,36384,36386,36388,36390,36392,36394,36396,36398],{"class":201,"line":36385},189,[199,36387,34569],{"class":205},[199,36389,1115],{"class":1018},[199,36391,3461],{"class":205},[199,36393,1925],{"class":1018},[199,36395,3461],{"class":205},[199,36397,1115],{"class":1018},[199,36399,1594],{"class":205},[199,36401,36403],{"class":201,"line":36402},190,[199,36404,36405],{"class":1454},"    # 补充:\n",[199,36407,36409],{"class":201,"line":36408},191,[199,36410,36411],{"class":1454},"    # plt.subplot(nrows, ncols, index)\n",[199,36413,36415],{"class":201,"line":36414},192,[199,36416,36417],{"class":1454},"    # nrows：行数\n",[199,36419,36421],{"class":201,"line":36420},193,[199,36422,36423],{"class":1454},"    # ncols：列数\n",[199,36425,36427],{"class":201,"line":36426},194,[199,36428,36429],{"class":1454},"    # index：目前选中第几个子图（从1开始）\n",[199,36431,36433,36436,36439,36442,36445,36447,36450,36452,36455],{"class":201,"line":36432},195,[199,36434,36435],{"class":205},"    plt.plot(train_process[",[199,36437,36438],{"class":898},"\"epoch\"",[199,36440,36441],{"class":205},"],train_process.train_loss_all,",[199,36443,36444],{"class":898},"'ro-'",[199,36446,3461],{"class":205},[199,36448,36449],{"class":8113},"label",[199,36451,895],{"class":1086},[199,36453,36454],{"class":898},"'train loss'",[199,36456,1594],{"class":205},[199,36458,36460,36462,36464,36467,36470,36472,36474,36476,36479],{"class":201,"line":36459},196,[199,36461,36435],{"class":205},[199,36463,36438],{"class":898},[199,36465,36466],{"class":205},"],train_process.val_loss_all,",[199,36468,36469],{"class":898},"'bs--'",[199,36471,3461],{"class":205},[199,36473,36449],{"class":8113},[199,36475,895],{"class":1086},[199,36477,36478],{"class":898},"'val loss'",[199,36480,1594],{"class":205},[199,36482,36484],{"class":201,"line":36483},197,[199,36485,36486],{"class":1454},"    # 添加一个图例\n",[199,36488,36490],{"class":201,"line":36489},198,[199,36491,36492],{"class":205},"    plt.legend()\n",[199,36494,36496],{"class":201,"line":36495},199,[199,36497,36498],{"class":1454},"    # 给轴添加标签\n",[199,36500,36502,36505,36508],{"class":201,"line":36501},200,[199,36503,36504],{"class":205},"    plt.xlabel(",[199,36506,36507],{"class":898},"'epoch'",[199,36509,1594],{"class":205},[199,36511,36513,36516,36519],{"class":201,"line":36512},201,[199,36514,36515],{"class":205},"    plt.ylabel(",[199,36517,36518],{"class":898},"'loss'",[199,36520,1594],{"class":205},[199,36522,36524],{"class":201,"line":36523},202,[199,36525,36526],{"class":1454},"    # ②准确度图\n",[199,36528,36530,36532,36534,36536,36538,36540,36542],{"class":201,"line":36529},203,[199,36531,34569],{"class":205},[199,36533,1115],{"class":1018},[199,36535,3461],{"class":205},[199,36537,1925],{"class":1018},[199,36539,3461],{"class":205},[199,36541,1925],{"class":1018},[199,36543,1594],{"class":205},[199,36545,36547,36549,36551,36554,36556,36558,36560,36562,36565],{"class":201,"line":36546},204,[199,36548,36435],{"class":205},[199,36550,36438],{"class":898},[199,36552,36553],{"class":205},"],train_process.train_acc_all,",[199,36555,36444],{"class":898},[199,36557,3461],{"class":205},[199,36559,36449],{"class":8113},[199,36561,895],{"class":1086},[199,36563,36564],{"class":898},"'train acc'",[199,36566,1594],{"class":205},[199,36568,36570,36572,36574,36577,36579,36581,36583,36585,36588],{"class":201,"line":36569},205,[199,36571,36435],{"class":205},[199,36573,36438],{"class":898},[199,36575,36576],{"class":205},"],train_process.val_acc_all,",[199,36578,36469],{"class":898},[199,36580,3461],{"class":205},[199,36582,36449],{"class":8113},[199,36584,895],{"class":1086},[199,36586,36587],{"class":898},"'val acc'",[199,36589,1594],{"class":205},[199,36591,36593],{"class":201,"line":36592},206,[199,36594,36595],{"class":1454},"    # 添加图例\n",[199,36597,36599],{"class":201,"line":36598},207,[199,36600,36492],{"class":205},[199,36602,36604,36606,36608],{"class":201,"line":36603},208,[199,36605,36504],{"class":205},[199,36607,36438],{"class":898},[199,36609,1594],{"class":205},[199,36611,36613,36615,36618],{"class":201,"line":36612},209,[199,36614,36515],{"class":205},[199,36616,36617],{"class":898},"\"acc\"",[199,36619,1594],{"class":205},[199,36621,36623],{"class":201,"line":36622},210,[199,36624,36625],{"class":205},"    plt.show()\n",[199,36627,36629],{"class":201,"line":36628},211,[199,36630,907],{"emptyLinePlaceholder":906},[199,36632,36634],{"class":201,"line":36633},212,[199,36635,36636],{"class":1454},"# 正式开始训练:\n",[199,36638,36640,36642,36644,36646,36648],{"class":201,"line":36639},213,[199,36641,4470],{"class":1086},[199,36643,34062],{"class":1018},[199,36645,5853],{"class":1086},[199,36647,34067],{"class":898},[199,36649,6640],{"class":205},[199,36651,36653],{"class":201,"line":36652},214,[199,36654,36655],{"class":1454},"    # 将模型实例化\n",[199,36657,36659,36662,36664],{"class":201,"line":36658},215,[199,36660,36661],{"class":205},"    LeNet",[199,36663,895],{"class":1086},[199,36665,36666],{"class":205},"LeNet()\n",[199,36668,36670,36673,36675],{"class":201,"line":36669},216,[199,36671,36672],{"class":205},"    train_dataloader,val_dataloader",[199,36674,895],{"class":1086},[199,36676,36677],{"class":205},"train_val_data_process()\n",[199,36679,36681,36683,36685,36688,36691,36693,36695],{"class":201,"line":36680},217,[199,36682,36234],{"class":205},[199,36684,895],{"class":1086},[199,36686,36687],{"class":205},"train_model_process(LeNet,train_dataloader,val_dataloader,",[199,36689,36690],{"class":8113},"num_epochs",[199,36692,895],{"class":1086},[199,36694,3779],{"class":1018},[199,36696,1594],{"class":205},[199,36698,36700],{"class":201,"line":36699},218,[199,36701,36702],{"class":205},"    matplot_acc_loss(train_process)\n",[31,36704,36705],{},"画图的补充点学习：",[31,36707,36708],{},[55,36709],{"alt":57,"src":36710},"\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",[24,36712,36713],{"start":73},[27,36714,36715],{},"测试",[190,36717,36719],{"className":33221,"code":36718,"language":33223,"meta":57,"style":57},"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",[196,36720,36721,36727,36737,36749,36759,36764,36774,36784,36788,36793,36802,36819,36831,36848,36859,36875,36880,36891,36902,36913,36920,36924,36929,36939,36944,36961,36969,36973,36978,36987,36996,37000,37005,37010,37015,37022,37027,37039,37049,37059,37064,37068,37073,37082,37087,37103,37108,37113,37118,37132,37137,37151,37155,37160,37175,37180,37192,37196,37201,37213,37218,37226,37231,37236,37246,37251,37260,37265,37270,37274,37279,37284,37300,37308,37313,37318,37377,37383,37388,37399,37407,37415,37419,37424,37428,37433,37441,37446,37462,37467,37477,37487],{"__ignoreMap":57},[199,36722,36723,36725],{"class":201,"line":202},[199,36724,33235],{"class":1086},[199,36726,33238],{"class":205},[199,36728,36729,36731,36733,36735],{"class":201,"line":36},[199,36730,33235],{"class":1086},[199,36732,34257],{"class":205},[199,36734,34225],{"class":1086},[199,36736,34262],{"class":205},[199,36738,36739,36741,36744,36746],{"class":201,"line":73},[199,36740,33579],{"class":1086},[199,36742,36743],{"class":205}," jupyter_client.consoleapp ",[199,36745,33235],{"class":1086},[199,36747,36748],{"class":205}," classes\n",[199,36750,36751,36753,36755,36757],{"class":201,"line":333},[199,36752,33579],{"class":1086},[199,36754,34240],{"class":205},[199,36756,33235],{"class":1086},[199,36758,34245],{"class":205},[199,36760,36761],{"class":201,"line":227},[199,36762,36763],{"class":1454},"# 导入数据集\n",[199,36765,36766,36768,36770,36772],{"class":201,"line":238},[199,36767,33579],{"class":1086},[199,36769,34210],{"class":205},[199,36771,33235],{"class":1086},[199,36773,34215],{"class":205},[199,36775,36776,36778,36780,36782],{"class":201,"line":252},[199,36777,33579],{"class":1086},[199,36779,34756],{"class":205},[199,36781,33235],{"class":1086},[199,36783,34761],{"class":205},[199,36785,36786],{"class":201,"line":388},[199,36787,907],{"emptyLinePlaceholder":906},[199,36789,36790],{"class":201,"line":415},[199,36791,36792],{"class":1454},"# 测试数据处理\n",[199,36794,36795,36797,36800],{"class":201,"line":426},[199,36796,34789],{"class":1086},[199,36798,36799],{"class":878}," test_data_process",[199,36801,34795],{"class":205},[199,36803,36804,36807,36809,36811,36813,36815,36817],{"class":201,"line":1015},[199,36805,36806],{"class":205},"    test_data",[199,36808,895],{"class":1086},[199,36810,34297],{"class":205},[199,36812,34300],{"class":8113},[199,36814,895],{"class":1086},[199,36816,34305],{"class":898},[199,36818,34308],{"class":205},[199,36820,36821,36824,36826,36829],{"class":201,"line":1031},[199,36822,36823],{"class":8113},"                           train",[199,36825,895],{"class":1086},[199,36827,36828],{"class":1018},"False",[199,36830,34308],{"class":205},[199,36832,36833,36836,36838,36840,36842,36844,36846],{"class":201,"line":1043},[199,36834,36835],{"class":8113},"                           transform",[199,36837,895],{"class":1086},[199,36839,34335],{"class":205},[199,36841,34338],{"class":8113},[199,36843,895],{"class":1086},[199,36845,3979],{"class":1018},[199,36847,34346],{"class":205},[199,36849,36850,36853,36855,36857],{"class":201,"line":1049},[199,36851,36852],{"class":8113},"                           download",[199,36854,895],{"class":1086},[199,36856,34318],{"class":1018},[199,36858,1594],{"class":205},[199,36860,36861,36864,36866,36868,36870,36872],{"class":201,"line":1054},[199,36862,36863],{"class":205},"    test_dataloader",[199,36865,895],{"class":1086},[199,36867,34376],{"class":205},[199,36869,34379],{"class":8113},[199,36871,895],{"class":1086},[199,36873,36874],{"class":205},"test_data,\n",[199,36876,36877],{"class":201,"line":1062},[199,36878,36879],{"class":1454},"                                    # 这里是一张一张进行测试\n",[199,36881,36882,36885,36887,36889],{"class":201,"line":1075},[199,36883,36884],{"class":8113},"                                    batch_size",[199,36886,895],{"class":1086},[199,36888,1115],{"class":1018},[199,36890,34308],{"class":205},[199,36892,36893,36896,36898,36900],{"class":201,"line":1092},[199,36894,36895],{"class":8113},"                                    shuffle",[199,36897,895],{"class":1086},[199,36899,34318],{"class":1018},[199,36901,34308],{"class":205},[199,36903,36904,36907,36909,36911],{"class":201,"line":1107},[199,36905,36906],{"class":8113},"                                    num_workers",[199,36908,895],{"class":1086},[199,36910,1025],{"class":1018},[199,36912,1594],{"class":205},[199,36914,36915,36917],{"class":201,"line":1128},[199,36916,6989],{"class":1086},[199,36918,36919],{"class":205}," test_dataloader\n",[199,36921,36922],{"class":201,"line":1146},[199,36923,907],{"emptyLinePlaceholder":906},[199,36925,36926],{"class":201,"line":1163},[199,36927,36928],{"class":1454},"# 定义模型测试函数\n",[199,36930,36931,36933,36936],{"class":201,"line":1176},[199,36932,34789],{"class":1086},[199,36934,36935],{"class":878}," test_model_process",[199,36937,36938],{"class":205},"(model,test_dataloader):\n",[199,36940,36941],{"class":201,"line":1189},[199,36942,36943],{"class":1454},"    # 将模型放到设备当中，先进行判断\n",[199,36945,36946,36948,36950,36952,36954,36956,36958],{"class":201,"line":1202},[199,36947,34079],{"class":205},[199,36949,895],{"class":1086},[199,36951,34086],{"class":898},[199,36953,4629],{"class":1086},[199,36955,34091],{"class":205},[199,36957,4626],{"class":1086},[199,36959,36960],{"class":898}," \"cpu\"\n",[199,36962,36963,36965,36967],{"class":201,"line":1207},[199,36964,34131],{"class":205},[199,36966,895],{"class":1086},[199,36968,35131],{"class":205},[199,36970,36971],{"class":201,"line":1212},[199,36972,907],{"emptyLinePlaceholder":906},[199,36974,36975],{"class":201,"line":1225},[199,36976,36977],{"class":1454},"    # 设置初始化参数\n",[199,36979,36980,36983,36985],{"class":201,"line":1236},[199,36981,36982],{"class":205},"    test_corrects",[199,36984,895],{"class":1086},[199,36986,35184],{"class":1018},[199,36988,36989,36992,36994],{"class":201,"line":1249},[199,36990,36991],{"class":205},"    test_num",[199,36993,895],{"class":1086},[199,36995,5989],{"class":1018},[199,36997,36998],{"class":201,"line":1262},[199,36999,907],{"emptyLinePlaceholder":906},[199,37001,37002],{"class":201,"line":1275},[199,37003,37004],{"class":1454},"    # 进行模型测试\n",[199,37006,37007],{"class":201,"line":1287},[199,37008,37009],{"class":1454},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[199,37011,37012],{"class":201,"line":1292},[199,37013,37014],{"class":1454},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[199,37016,37017,37020],{"class":201,"line":1297},[199,37018,37019],{"class":1086},"    with",[199,37021,35726],{"class":205},[199,37023,37024],{"class":201,"line":1310},[199,37025,37026],{"class":1454},"        # 从数据中进行\n",[199,37028,37029,37031,37034,37036],{"class":201,"line":1315},[199,37030,1481],{"class":1086},[199,37032,37033],{"class":205}," test_data_x,test_data_y ",[199,37035,28886],{"class":1086},[199,37037,37038],{"class":205}," test_dataloader:\n",[199,37040,37041,37044,37046],{"class":201,"line":1330},[199,37042,37043],{"class":205},"            test_data_x",[199,37045,895],{"class":1086},[199,37047,37048],{"class":205},"test_data_x.to(device)\n",[199,37050,37051,37054,37056],{"class":201,"line":1335},[199,37052,37053],{"class":205},"            test_data_y",[199,37055,895],{"class":1086},[199,37057,37058],{"class":205},"test_data_y.to(device)\n",[199,37060,37061],{"class":201,"line":1340},[199,37062,37063],{"class":1454},"            # 设置为验证模式\n",[199,37065,37066],{"class":201,"line":1352},[199,37067,35717],{"class":205},[199,37069,37070],{"class":201,"line":1367},[199,37071,37072],{"class":1454},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[199,37074,37075,37077,37079],{"class":201,"line":1381},[199,37076,35502],{"class":205},[199,37078,895],{"class":1086},[199,37080,37081],{"class":205},"model(test_data_x)\n",[199,37083,37084],{"class":201,"line":1396},[199,37085,37086],{"class":1454},"            # 查找每一行中最大值对应的下标\n",[199,37088,37089,37091,37093,37095,37097,37099,37101],{"class":201,"line":1401},[199,37090,35519],{"class":205},[199,37092,895],{"class":1086},[199,37094,35524],{"class":205},[199,37096,35527],{"class":8113},[199,37098,895],{"class":1086},[199,37100,1115],{"class":1018},[199,37102,1594],{"class":205},[199,37104,37105],{"class":201,"line":1411},[199,37106,37107],{"class":1454},"            # 计算正确率\n",[199,37109,37110],{"class":201,"line":1421},[199,37111,37112],{"class":1454},"            # .data表示是一个不带梯度信息的tensor\n",[199,37114,37115],{"class":201,"line":1426},[199,37116,37117],{"class":1454},"            # 如果预测正确，则准确度test_corrects加1\n",[199,37119,37120,37123,37125,37127,37129],{"class":201,"line":1436},[199,37121,37122],{"class":205},"            test_corrects",[199,37124,12362],{"class":1086},[199,37126,35629],{"class":205},[199,37128,5853],{"class":1086},[199,37130,37131],{"class":205},"test_data_y.data)\n",[199,37133,37134],{"class":201,"line":1441},[199,37135,37136],{"class":1454},"            # 将所有的测试样本进行累计\n",[199,37138,37139,37142,37144,37147,37149],{"class":201,"line":1451},[199,37140,37141],{"class":205},"            test_num",[199,37143,12362],{"class":1086},[199,37145,37146],{"class":205},"test_data_x.size(",[199,37148,1025],{"class":1018},[199,37150,1594],{"class":205},[199,37152,37153],{"class":201,"line":1458},[199,37154,907],{"emptyLinePlaceholder":906},[199,37156,37157],{"class":201,"line":1464},[199,37158,37159],{"class":1454},"        # 计算准确度\n",[199,37161,37162,37165,37167,37170,37172],{"class":201,"line":1478},[199,37163,37164],{"class":205},"        test_acc",[199,37166,895],{"class":1086},[199,37168,37169],{"class":205},"test_corrects.double().item()",[199,37171,3664],{"class":1086},[199,37173,37174],{"class":205},"test_num\n",[199,37176,37177],{"class":201,"line":1516},[199,37178,37179],{"class":1454},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[199,37181,37182,37184,37186,37189],{"class":201,"line":1522},[199,37183,35293],{"class":1018},[199,37185,1537],{"class":205},[199,37187,37188],{"class":898},"\"测试的准确率：\"",[199,37190,37191],{"class":205},",test_acc)\n",[199,37193,37194],{"class":201,"line":1528},[199,37195,907],{"emptyLinePlaceholder":906},[199,37197,37198],{"class":201,"line":1557},[199,37199,37200],{"class":1454},"# 实现模型的测试功能\n",[199,37202,37203,37205,37207,37209,37211],{"class":201,"line":1563},[199,37204,4470],{"class":1086},[199,37206,34062],{"class":1018},[199,37208,5853],{"class":1086},[199,37210,34067],{"class":898},[199,37212,6640],{"class":205},[199,37214,37215],{"class":201,"line":1568},[199,37216,37217],{"class":1454},"    # 加载模型\n",[199,37219,37220,37222,37224],{"class":201,"line":1574},[199,37221,34131],{"class":205},[199,37223,895],{"class":1086},[199,37225,36666],{"class":205},[199,37227,37228],{"class":201,"line":1580},[199,37229,37230],{"class":1454},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[199,37232,37233],{"class":201,"line":1597},[199,37234,37235],{"class":1454},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[199,37237,37238,37241,37244],{"class":201,"line":1602},[199,37239,37240],{"class":205},"    model.load_state_dict(torch.load(",[199,37242,37243],{"class":898},"'best_model.pth'",[199,37245,1554],{"class":205},[199,37247,37248],{"class":201,"line":1608},[199,37249,37250],{"class":1454},"    # 数据加载\n",[199,37252,37253,37255,37257],{"class":201,"line":1640},[199,37254,36863],{"class":205},[199,37256,895],{"class":1086},[199,37258,37259],{"class":205},"test_data_process()\n",[199,37261,37262],{"class":201,"line":1653},[199,37263,37264],{"class":1454},"    # 加载模型测试的函数\n",[199,37266,37267],{"class":201,"line":1673},[199,37268,37269],{"class":205},"    test_model_process(model,test_dataloader)\n",[199,37271,37272],{"class":201,"line":1690},[199,37273,907],{"emptyLinePlaceholder":906},[199,37275,37276],{"class":201,"line":1706},[199,37277,37278],{"class":1454},"    # 验证集推理实现：\n",[199,37280,37281],{"class":201,"line":1712},[199,37282,37283],{"class":1454},"    # 加载数据加载的更详细一些\n",[199,37285,37286,37288,37290,37292,37294,37296,37298],{"class":201,"line":1720},[199,37287,34079],{"class":205},[199,37289,895],{"class":1086},[199,37291,34086],{"class":898},[199,37293,4629],{"class":1086},[199,37295,34091],{"class":205},[199,37297,4626],{"class":1086},[199,37299,36960],{"class":898},[199,37301,37302,37304,37306],{"class":201,"line":1725},[199,37303,34131],{"class":205},[199,37305,895],{"class":1086},[199,37307,35131],{"class":205},[199,37309,37310],{"class":201,"line":1731},[199,37311,37312],{"class":1454},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[199,37314,37315],{"class":201,"line":1745},[199,37316,37317],{"class":1454},"    # 顺序不可改变\n",[199,37319,37320,37323,37325,37327,37330,37332,37335,37337,37340,37342,37345,37347,37350,37352,37355,37357,37360,37362,37365,37367,37370,37372,37375],{"class":201,"line":1754},[199,37321,37322],{"class":205},"    classes",[199,37324,895],{"class":1086},[199,37326,1662],{"class":205},[199,37328,37329],{"class":898},"'T-shirt\u002Ftop'",[199,37331,3461],{"class":205},[199,37333,37334],{"class":898},"'Trouser'",[199,37336,3461],{"class":205},[199,37338,37339],{"class":898},"'Pullover'",[199,37341,3461],{"class":205},[199,37343,37344],{"class":898},"'Dress'",[199,37346,3461],{"class":205},[199,37348,37349],{"class":898},"'Coat'",[199,37351,3461],{"class":205},[199,37353,37354],{"class":898},"'Sandal'",[199,37356,3461],{"class":205},[199,37358,37359],{"class":898},"'Shirt'",[199,37361,3461],{"class":205},[199,37363,37364],{"class":898},"'Sneaker'",[199,37366,3461],{"class":205},[199,37368,37369],{"class":898},"'Bag'",[199,37371,3461],{"class":205},[199,37373,37374],{"class":898},"'Ankle boot'",[199,37376,1932],{"class":205},[199,37378,37379,37381],{"class":201,"line":1763},[199,37380,37019],{"class":1086},[199,37382,35726],{"class":205},[199,37384,37385],{"class":201,"line":1768},[199,37386,37387],{"class":1454},"        # 将数据和标签都放到设备当中\n",[199,37389,37390,37392,37395,37397],{"class":201,"line":19628},[199,37391,1481],{"class":1086},[199,37393,37394],{"class":205}," b_x,b_y ",[199,37396,28886],{"class":1086},[199,37398,37038],{"class":205},[199,37400,37401,37403,37405],{"class":201,"line":19641},[199,37402,35452],{"class":205},[199,37404,895],{"class":1086},[199,37406,35457],{"class":205},[199,37408,37409,37411,37413],{"class":201,"line":19646},[199,37410,35467],{"class":205},[199,37412,895],{"class":1086},[199,37414,35472],{"class":205},[199,37416,37417],{"class":201,"line":19660},[199,37418,907],{"emptyLinePlaceholder":906},[199,37420,37421],{"class":201,"line":19665},[199,37422,37423],{"class":1454},"            # 设置模型为验证模式\n",[199,37425,37426],{"class":201,"line":19671},[199,37427,35717],{"class":205},[199,37429,37430],{"class":201,"line":19676},[199,37431,37432],{"class":1454},"            # 模型推理结果\n",[199,37434,37435,37437,37439],{"class":201,"line":19690},[199,37436,35502],{"class":205},[199,37438,895],{"class":1086},[199,37440,35507],{"class":205},[199,37442,37443],{"class":201,"line":19695},[199,37444,37445],{"class":1454},"            # 获取最大下标，最大下标就是类别号\n",[199,37447,37448,37450,37452,37454,37456,37458,37460],{"class":201,"line":19700},[199,37449,35519],{"class":205},[199,37451,895],{"class":1086},[199,37453,35524],{"class":205},[199,37455,35527],{"class":8113},[199,37457,895],{"class":1086},[199,37459,1115],{"class":1018},[199,37461,1594],{"class":205},[199,37463,37464],{"class":201,"line":19714},[199,37465,37466],{"class":1454},"            # 取出张量中的数值\n",[199,37468,37469,37472,37474],{"class":201,"line":19726},[199,37470,37471],{"class":205},"            result",[199,37473,895],{"class":1086},[199,37475,37476],{"class":205},"pre_lab.item()\n",[199,37478,37479,37482,37484],{"class":201,"line":19731},[199,37480,37481],{"class":205},"            label",[199,37483,895],{"class":1086},[199,37485,37486],{"class":205},"b_y.item()\n",[199,37488,37489,37492,37494,37497,37500,37503,37505,37508],{"class":201,"line":19744},[199,37490,37491],{"class":1018},"            print",[199,37493,1537],{"class":205},[199,37495,37496],{"class":898},"\"预测值：\"",[199,37498,37499],{"class":205},",classes[result],",[199,37501,37502],{"class":898},"\"------\"",[199,37504,3461],{"class":205},[199,37506,37507],{"class":898},"\"真实值：\"",[199,37509,37510],{"class":205},",classes[label])\n",[31,37512,37513],{},"（2）AlexNet",[24,37515,37516],{},[27,37517,37518],{},"神经网络构建",[190,37520,37522],{"className":33221,"code":37521,"language":33223,"meta":57,"style":57},"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",[196,37523,37524,37530,37540,37550,37562,37566,37583,37591,37606,37618,37660,37687,37730,37756,37800,37843,37886,37913,37917,37927,37932,37960,37979,37998,38002,38007,38015,38030,38040,38054,38064,38079,38094,38109,38120,38124,38129,38139,38154,38159,38173,38188,38200,38205,38216,38221,38227,38232,38244,38264,38269,38278],{"__ignoreMap":57},[199,37525,37526,37528],{"class":201,"line":202},[199,37527,33235],{"class":1086},[199,37529,33238],{"class":205},[199,37531,37532,37534,37536,37538],{"class":201,"line":36},[199,37533,33579],{"class":1086},[199,37535,33582],{"class":205},[199,37537,33235],{"class":1086},[199,37539,33587],{"class":205},[199,37541,37542,37544,37546,37548],{"class":201,"line":73},[199,37543,33579],{"class":1086},[199,37545,33599],{"class":205},[199,37547,33235],{"class":1086},[199,37549,33604],{"class":205},[199,37551,37552,37554,37557,37559],{"class":201,"line":333},[199,37553,33235],{"class":1086},[199,37555,37556],{"class":205}," torch.nn.functional ",[199,37558,34225],{"class":1086},[199,37560,37561],{"class":205}," F\n",[199,37563,37564],{"class":201,"line":227},[199,37565,907],{"emptyLinePlaceholder":906},[199,37567,37568,37570,37573,37575,37577,37579,37581],{"class":201,"line":238},[199,37569,17554],{"class":1086},[199,37571,37572],{"class":878}," AlexNet",[199,37574,1537],{"class":205},[199,37576,33620],{"class":878},[199,37578,3638],{"class":205},[199,37580,33625],{"class":878},[199,37582,33628],{"class":205},[199,37584,37585,37587,37589],{"class":201,"line":252},[199,37586,33643],{"class":1086},[199,37588,33646],{"class":1018},[199,37590,33649],{"class":205},[199,37592,37593,37595,37598,37600,37602,37604],{"class":201,"line":388},[199,37594,33659],{"class":1018},[199,37596,37597],{"class":205},"(AlexNet,",[199,37599,33665],{"class":1018},[199,37601,33668],{"class":205},[199,37603,33671],{"class":1018},[199,37605,4892],{"class":205},[199,37607,37608,37610,37613,37615],{"class":201,"line":415},[199,37609,33687],{"class":1018},[199,37611,37612],{"class":205},".ReLu",[199,37614,895],{"class":1086},[199,37616,37617],{"class":205},"nn.ReLU()\n",[199,37619,37620,37622,37624,37626,37628,37630,37632,37634,37636,37638,37640,37642,37644,37646,37648,37650,37652,37654,37656,37658],{"class":201,"line":426},[199,37621,33687],{"class":1018},[199,37623,33690],{"class":205},[199,37625,895],{"class":1086},[199,37627,33695],{"class":205},[199,37629,33698],{"class":8113},[199,37631,895],{"class":1086},[199,37633,1115],{"class":1018},[199,37635,3461],{"class":205},[199,37637,33707],{"class":8113},[199,37639,895],{"class":1086},[199,37641,3297],{"class":1018},[199,37643,3461],{"class":205},[199,37645,33716],{"class":8113},[199,37647,895],{"class":1086},[199,37649,3554],{"class":1018},[199,37651,3461],{"class":205},[199,37653,33771],{"class":8113},[199,37655,895],{"class":1086},[199,37657,1915],{"class":1018},[199,37659,1594],{"class":205},[199,37661,37662,37664,37666,37668,37671,37673,37675,37677,37679,37681,37683,37685],{"class":201,"line":1015},[199,37663,33687],{"class":1018},[199,37665,33755],{"class":205},[199,37667,895],{"class":1086},[199,37669,37670],{"class":205},"nn.MaxPool2d(",[199,37672,33716],{"class":8113},[199,37674,895],{"class":1086},[199,37676,1920],{"class":1018},[199,37678,3461],{"class":205},[199,37680,33771],{"class":8113},[199,37682,895],{"class":1086},[199,37684,1925],{"class":1018},[199,37686,1594],{"class":205},[199,37688,37689,37691,37693,37695,37697,37699,37701,37703,37705,37707,37709,37712,37714,37716,37718,37720,37722,37724,37726,37728],{"class":201,"line":1031},[199,37690,33687],{"class":1018},[199,37692,33784],{"class":205},[199,37694,895],{"class":1086},[199,37696,33695],{"class":205},[199,37698,33698],{"class":8113},[199,37700,895],{"class":1086},[199,37702,3297],{"class":1018},[199,37704,3461],{"class":205},[199,37706,33707],{"class":8113},[199,37708,895],{"class":1086},[199,37710,37711],{"class":1018},"256",[199,37713,3461],{"class":205},[199,37715,33716],{"class":8113},[199,37717,895],{"class":1086},[199,37719,1909],{"class":1018},[199,37721,3461],{"class":205},[199,37723,33725],{"class":8113},[199,37725,895],{"class":1086},[199,37727,1925],{"class":1018},[199,37729,1594],{"class":205},[199,37731,37732,37734,37736,37738,37740,37742,37744,37746,37748,37750,37752,37754],{"class":201,"line":1043},[199,37733,33687],{"class":1018},[199,37735,33819],{"class":205},[199,37737,895],{"class":1086},[199,37739,37670],{"class":205},[199,37741,33716],{"class":8113},[199,37743,895],{"class":1086},[199,37745,1920],{"class":1018},[199,37747,3461],{"class":205},[199,37749,33771],{"class":8113},[199,37751,895],{"class":1086},[199,37753,1925],{"class":1018},[199,37755,1594],{"class":205},[199,37757,37758,37760,37763,37765,37767,37769,37771,37773,37775,37777,37779,37782,37784,37786,37788,37790,37792,37794,37796,37798],{"class":201,"line":1049},[199,37759,33687],{"class":1018},[199,37761,37762],{"class":205},".c5",[199,37764,895],{"class":1086},[199,37766,33695],{"class":205},[199,37768,33698],{"class":8113},[199,37770,895],{"class":1086},[199,37772,37711],{"class":1018},[199,37774,3461],{"class":205},[199,37776,33707],{"class":8113},[199,37778,895],{"class":1086},[199,37780,37781],{"class":1018},"384",[199,37783,3461],{"class":205},[199,37785,33716],{"class":8113},[199,37787,895],{"class":1086},[199,37789,1920],{"class":1018},[199,37791,3461],{"class":205},[199,37793,33725],{"class":8113},[199,37795,895],{"class":1086},[199,37797,1115],{"class":1018},[199,37799,1594],{"class":205},[199,37801,37802,37804,37807,37809,37811,37813,37815,37817,37819,37821,37823,37825,37827,37829,37831,37833,37835,37837,37839,37841],{"class":201,"line":1054},[199,37803,33687],{"class":1018},[199,37805,37806],{"class":205},".c6",[199,37808,895],{"class":1086},[199,37810,33695],{"class":205},[199,37812,33698],{"class":8113},[199,37814,895],{"class":1086},[199,37816,37781],{"class":1018},[199,37818,3461],{"class":205},[199,37820,33707],{"class":8113},[199,37822,895],{"class":1086},[199,37824,37781],{"class":1018},[199,37826,3461],{"class":205},[199,37828,33716],{"class":8113},[199,37830,895],{"class":1086},[199,37832,1920],{"class":1018},[199,37834,3461],{"class":205},[199,37836,33725],{"class":8113},[199,37838,895],{"class":1086},[199,37840,1115],{"class":1018},[199,37842,1594],{"class":205},[199,37844,37845,37847,37850,37852,37854,37856,37858,37860,37862,37864,37866,37868,37870,37872,37874,37876,37878,37880,37882,37884],{"class":201,"line":1062},[199,37846,33687],{"class":1018},[199,37848,37849],{"class":205},".c7",[199,37851,895],{"class":1086},[199,37853,33695],{"class":205},[199,37855,33698],{"class":8113},[199,37857,895],{"class":1086},[199,37859,37781],{"class":1018},[199,37861,3461],{"class":205},[199,37863,33707],{"class":8113},[199,37865,895],{"class":1086},[199,37867,37711],{"class":1018},[199,37869,3461],{"class":205},[199,37871,33716],{"class":8113},[199,37873,895],{"class":1086},[199,37875,1920],{"class":1018},[199,37877,3461],{"class":205},[199,37879,33725],{"class":8113},[199,37881,895],{"class":1086},[199,37883,1115],{"class":1018},[199,37885,1594],{"class":205},[199,37887,37888,37890,37893,37895,37897,37899,37901,37903,37905,37907,37909,37911],{"class":201,"line":1075},[199,37889,33687],{"class":1018},[199,37891,37892],{"class":205},".s8",[199,37894,895],{"class":1086},[199,37896,37670],{"class":205},[199,37898,33716],{"class":8113},[199,37900,895],{"class":1086},[199,37902,1920],{"class":1018},[199,37904,3461],{"class":205},[199,37906,33771],{"class":8113},[199,37908,895],{"class":1086},[199,37910,1925],{"class":1018},[199,37912,1594],{"class":205},[199,37914,37915],{"class":201,"line":1092},[199,37916,33844],{"class":1454},[199,37918,37919,37921,37923,37925],{"class":201,"line":1107},[199,37920,33687],{"class":1018},[199,37922,33851],{"class":205},[199,37924,895],{"class":1086},[199,37926,33856],{"class":205},[199,37928,37929],{"class":201,"line":1128},[199,37930,37931],{"class":1454},"       # 定义全连接层\n",[199,37933,37934,37936,37939,37941,37943,37945,37947,37949,37951,37953,37955,37958],{"class":201,"line":1146},[199,37935,33687],{"class":1018},[199,37937,37938],{"class":205},".f1",[199,37940,895],{"class":1086},[199,37942,33873],{"class":205},[199,37944,3428],{"class":1018},[199,37946,3537],{"class":1086},[199,37948,3428],{"class":1018},[199,37950,3537],{"class":1086},[199,37952,37711],{"class":1018},[199,37954,3461],{"class":205},[199,37956,37957],{"class":1018},"4096",[199,37959,1594],{"class":205},[199,37961,37962,37964,37967,37969,37971,37973,37975,37977],{"class":201,"line":1163},[199,37963,33687],{"class":1018},[199,37965,37966],{"class":205},".f2",[199,37968,895],{"class":1086},[199,37970,33873],{"class":205},[199,37972,37957],{"class":1018},[199,37974,3461],{"class":205},[199,37976,37957],{"class":1018},[199,37978,1594],{"class":205},[199,37980,37981,37983,37986,37988,37990,37992,37994,37996],{"class":201,"line":1176},[199,37982,33687],{"class":1018},[199,37984,37985],{"class":205},".f3",[199,37987,895],{"class":1086},[199,37989,33873],{"class":205},[199,37991,37957],{"class":1018},[199,37993,3461],{"class":205},[199,37995,3528],{"class":1018},[199,37997,1594],{"class":205},[199,37999,38000],{"class":201,"line":1189},[199,38001,907],{"emptyLinePlaceholder":906},[199,38003,38004],{"class":201,"line":1202},[199,38005,38006],{"class":1454},"    # 定义前向传播\n",[199,38008,38009,38011,38013],{"class":201,"line":1207},[199,38010,33643],{"class":1086},[199,38012,33935],{"class":878},[199,38014,33938],{"class":205},[199,38016,38017,38019,38021,38023,38026,38028],{"class":201,"line":1212},[199,38018,33943],{"class":205},[199,38020,895],{"class":1086},[199,38022,33665],{"class":1018},[199,38024,38025],{"class":205},".ReLu(",[199,38027,33665],{"class":1018},[199,38029,33955],{"class":205},[199,38031,38032,38034,38036,38038],{"class":201,"line":1225},[199,38033,33943],{"class":205},[199,38035,895],{"class":1086},[199,38037,33665],{"class":1018},[199,38039,33966],{"class":205},[199,38041,38042,38044,38046,38048,38050,38052],{"class":201,"line":1236},[199,38043,33943],{"class":205},[199,38045,895],{"class":1086},[199,38047,33665],{"class":1018},[199,38049,38025],{"class":205},[199,38051,33665],{"class":1018},[199,38053,33981],{"class":205},[199,38055,38056,38058,38060,38062],{"class":201,"line":1249},[199,38057,33943],{"class":205},[199,38059,895],{"class":1086},[199,38061,33665],{"class":1018},[199,38063,33992],{"class":205},[199,38065,38066,38068,38070,38072,38074,38076],{"class":201,"line":1262},[199,38067,33943],{"class":205},[199,38069,895],{"class":1086},[199,38071,33665],{"class":1018},[199,38073,38025],{"class":205},[199,38075,33665],{"class":1018},[199,38077,38078],{"class":205},".c5(x))\n",[199,38080,38081,38083,38085,38087,38089,38091],{"class":201,"line":1275},[199,38082,33943],{"class":205},[199,38084,895],{"class":1086},[199,38086,33665],{"class":1018},[199,38088,38025],{"class":205},[199,38090,33665],{"class":1018},[199,38092,38093],{"class":205},".c6(x))\n",[199,38095,38096,38098,38100,38102,38104,38106],{"class":201,"line":1287},[199,38097,33943],{"class":205},[199,38099,895],{"class":1086},[199,38101,33665],{"class":1018},[199,38103,38025],{"class":205},[199,38105,33665],{"class":1018},[199,38107,38108],{"class":205},".c7(x))\n",[199,38110,38111,38113,38115,38117],{"class":201,"line":1292},[199,38112,33943],{"class":205},[199,38114,895],{"class":1086},[199,38116,33665],{"class":1018},[199,38118,38119],{"class":205},".s8(x)\n",[199,38121,38122],{"class":201,"line":1297},[199,38123,907],{"emptyLinePlaceholder":906},[199,38125,38126],{"class":201,"line":1310},[199,38127,38128],{"class":1454},"        # 展平加线性全连接层\n",[199,38130,38131,38133,38135,38137],{"class":201,"line":1315},[199,38132,33943],{"class":205},[199,38134,895],{"class":1086},[199,38136,33665],{"class":1018},[199,38138,34003],{"class":205},[199,38140,38141,38143,38145,38147,38149,38151],{"class":201,"line":1330},[199,38142,33943],{"class":205},[199,38144,895],{"class":1086},[199,38146,33665],{"class":1018},[199,38148,38025],{"class":205},[199,38150,33665],{"class":1018},[199,38152,38153],{"class":205},".f1(x))\n",[199,38155,38156],{"class":201,"line":1335},[199,38157,38158],{"class":1454},"        # 还需要dropout对神经元随机进行失活\n",[199,38160,38161,38163,38165,38168,38171],{"class":201,"line":1340},[199,38162,33943],{"class":205},[199,38164,895],{"class":1086},[199,38166,38167],{"class":205},"F.dropout(x,",[199,38169,38170],{"class":1018},"0.5",[199,38172,1594],{"class":205},[199,38174,38175,38177,38179,38181,38183,38185],{"class":201,"line":1352},[199,38176,33943],{"class":205},[199,38178,895],{"class":1086},[199,38180,33665],{"class":1018},[199,38182,38025],{"class":205},[199,38184,33665],{"class":1018},[199,38186,38187],{"class":205},".f2(x))\n",[199,38189,38190,38192,38194,38196,38198],{"class":201,"line":1367},[199,38191,33943],{"class":205},[199,38193,895],{"class":1086},[199,38195,38167],{"class":205},[199,38197,38170],{"class":1018},[199,38199,1594],{"class":205},[199,38201,38202],{"class":201,"line":1381},[199,38203,38204],{"class":1454},"        # 直接输出\n",[199,38206,38207,38209,38211,38213],{"class":201,"line":1396},[199,38208,33943],{"class":205},[199,38210,895],{"class":1086},[199,38212,33665],{"class":1018},[199,38214,38215],{"class":205},".f3(x)\n",[199,38217,38218],{"class":201,"line":1401},[199,38219,38220],{"class":1454},"        # 前向传播输出\n",[199,38222,38223,38225],{"class":201,"line":1411},[199,38224,17612],{"class":1086},[199,38226,34051],{"class":205},[199,38228,38229],{"class":201,"line":1421},[199,38230,38231],{"class":1454},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[199,38233,38234,38236,38238,38240,38242],{"class":201,"line":1426},[199,38235,4470],{"class":1086},[199,38237,34062],{"class":1018},[199,38239,5853],{"class":1086},[199,38241,34067],{"class":898},[199,38243,6640],{"class":205},[199,38245,38246,38248,38250,38252,38254,38256,38258,38260,38262],{"class":201,"line":1436},[199,38247,34079],{"class":205},[199,38249,895],{"class":1086},[199,38251,33294],{"class":205},[199,38253,34086],{"class":898},[199,38255,4629],{"class":1086},[199,38257,34091],{"class":205},[199,38259,4626],{"class":1086},[199,38261,33319],{"class":898},[199,38263,1594],{"class":205},[199,38265,38266],{"class":201,"line":1441},[199,38267,38268],{"class":1454},"    # 模型实例化，然后将实例化的模型放到设备中\n",[199,38270,38271,38273,38275],{"class":201,"line":1451},[199,38272,34131],{"class":205},[199,38274,895],{"class":1086},[199,38276,38277],{"class":205},"AlexNet().to(device)\n",[199,38279,38280,38282,38284,38286,38288,38291,38293,38295],{"class":201,"line":1458},[199,38281,34141],{"class":1018},[199,38283,34144],{"class":205},[199,38285,1115],{"class":1018},[199,38287,3461],{"class":205},[199,38289,38290],{"class":1018},"227",[199,38292,3461],{"class":205},[199,38294,38290],{"class":1018},[199,38296,34157],{"class":205},[24,38298,38299],{"start":36},[27,38300,34170],{},[190,38302,38304],{"className":33221,"code":38303,"language":33223,"meta":57,"style":57},"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",[196,38305,38306,38312,38318,38328,38334,38344,38354,38364,38374,38384,38388,38399,38409,38413,38417,38421,38429,38441,38451,38467,38477,38509,38523,38533,38543,38547,38557,38571,38581,38591,38601,38607,38611,38615,38619,38623,38627,38635,38655,38659,38663,38667,38671,38675,38691,38695,38699,38707,38711,38715,38723,38727,38731,38735,38743,38747,38751,38755,38759,38767,38771,38779,38783,38791,38795,38803,38807,38815,38819,38823,38831,38835,38839,38843,38855,38879,38893,38897,38901,38905,38913,38917,38925,38929,38937,38941,38949,38953,38961,38965,38973,38977,38989,38993,39001,39005,39013,39017,39021,39025,39029,39037,39041,39057,39061,39069,39073,39077,39081,39085,39089,39093,39097,39113,39117,39129,39133,39145,39149,39161,39165,39173,39177,39185,39189,39193,39198,39204,39208,39217,39221,39238,39242,39251,39255,39273,39286,39291,39304,39308,39312,39320,39324,39328,39336,39340,39348,39352,39360,39364,39368,39410,39452,39456,39460,39476,39480,39496,39500,39504,39512,39516,39520,39532,39570,39575,39580,39589,39593,39607,39617,39623,39629,39635,39641,39645,39649,39655,39659,39663,39671,39675,39693,39697,39701,39705,39721,39725,39729,39733,39737,39741,39761,39781,39785,39789,39793,39801,39809,39813,39829,39849,39869,39873,39877,39885,39893,39897,39901,39905,39917,39921,39931,39939,39956],{"__ignoreMap":57},[199,38307,38308,38310],{"class":201,"line":202},[199,38309,33235],{"class":1086},[199,38311,34664],{"class":205},[199,38313,38314,38316],{"class":201,"line":36},[199,38315,33235],{"class":1086},[199,38317,34671],{"class":205},[199,38319,38320,38322,38324,38326],{"class":201,"line":73},[199,38321,33235],{"class":1086},[199,38323,34682],{"class":205},[199,38325,34225],{"class":1086},[199,38327,34687],{"class":205},[199,38329,38330,38332],{"class":201,"line":333},[199,38331,33235],{"class":1086},[199,38333,33238],{"class":205},[199,38335,38336,38338,38340,38342],{"class":201,"line":227},[199,38337,33579],{"class":1086},[199,38339,34257],{"class":205},[199,38341,33235],{"class":1086},[199,38343,34704],{"class":205},[199,38345,38346,38348,38350,38352],{"class":201,"line":238},[199,38347,33579],{"class":1086},[199,38349,34210],{"class":205},[199,38351,33235],{"class":1086},[199,38353,34215],{"class":205},[199,38355,38356,38358,38360,38362],{"class":201,"line":252},[199,38357,33579],{"class":1086},[199,38359,34240],{"class":205},[199,38361,33235],{"class":1086},[199,38363,34245],{"class":205},[199,38365,38366,38368,38370,38372],{"class":201,"line":388},[199,38367,33235],{"class":1086},[199,38369,34257],{"class":205},[199,38371,34225],{"class":1086},[199,38373,34262],{"class":205},[199,38375,38376,38378,38380,38382],{"class":201,"line":415},[199,38377,33235],{"class":1086},[199,38379,34274],{"class":205},[199,38381,34225],{"class":1086},[199,38383,34279],{"class":205},[199,38385,38386],{"class":201,"line":426},[199,38387,34749],{"class":1454},[199,38389,38390,38392,38394,38396],{"class":201,"line":1015},[199,38391,33579],{"class":1086},[199,38393,34756],{"class":205},[199,38395,33235],{"class":1086},[199,38397,38398],{"class":205}," AlexNet\n",[199,38400,38401,38403,38405,38407],{"class":201,"line":1031},[199,38402,33579],{"class":1086},[199,38404,33582],{"class":205},[199,38406,33235],{"class":1086},[199,38408,33587],{"class":205},[199,38410,38411],{"class":201,"line":1043},[199,38412,907],{"emptyLinePlaceholder":906},[199,38414,38415],{"class":201,"line":1049},[199,38416,907],{"emptyLinePlaceholder":906},[199,38418,38419],{"class":201,"line":1054},[199,38420,34784],{"class":1454},[199,38422,38423,38425,38427],{"class":201,"line":1062},[199,38424,34789],{"class":1086},[199,38426,34792],{"class":878},[199,38428,34795],{"class":205},[199,38430,38431,38433,38435,38437,38439],{"class":201,"line":1075},[199,38432,34800],{"class":205},[199,38434,895],{"class":1086},[199,38436,34297],{"class":205},[199,38438,34305],{"class":898},[199,38440,34308],{"class":205},[199,38442,38443,38445,38447,38449],{"class":201,"line":1092},[199,38444,34813],{"class":8113},[199,38446,895],{"class":1086},[199,38448,34318],{"class":1018},[199,38450,34308],{"class":205},[199,38452,38453,38455,38457,38459,38461,38463,38465],{"class":201,"line":1107},[199,38454,34824],{"class":8113},[199,38456,895],{"class":1086},[199,38458,34335],{"class":205},[199,38460,34338],{"class":8113},[199,38462,895],{"class":1086},[199,38464,38290],{"class":1018},[199,38466,34346],{"class":205},[199,38468,38469,38471,38473,38475],{"class":201,"line":1128},[199,38470,34841],{"class":8113},[199,38472,895],{"class":1086},[199,38474,34318],{"class":1018},[199,38476,1594],{"class":205},[199,38478,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503,38505,38507],{"class":201,"line":1146},[199,38480,34852],{"class":205},[199,38482,895],{"class":1086},[199,38484,34857],{"class":205},[199,38486,34860],{"class":1018},[199,38488,1537],{"class":205},[199,38490,34865],{"class":1018},[199,38492,3537],{"class":1086},[199,38494,10255],{"class":1018},[199,38496,34872],{"class":205},[199,38498,34860],{"class":1018},[199,38500,1537],{"class":205},[199,38502,34879],{"class":1018},[199,38504,3537],{"class":1086},[199,38506,10255],{"class":1018},[199,38508,34886],{"class":205},[199,38510,38511,38513,38515,38517,38519,38521],{"class":201,"line":1163},[199,38512,34891],{"class":205},[199,38514,895],{"class":1086},[199,38516,34896],{"class":205},[199,38518,34379],{"class":8113},[199,38520,895],{"class":1086},[199,38522,34384],{"class":205},[199,38524,38525,38527,38529,38531],{"class":201,"line":1176},[199,38526,34907],{"class":8113},[199,38528,895],{"class":1086},[199,38530,34912],{"class":1018},[199,38532,34308],{"class":205},[199,38534,38535,38537,38539,38541],{"class":201,"line":1189},[199,38536,34919],{"class":8113},[199,38538,895],{"class":1086},[199,38540,34318],{"class":1018},[199,38542,34308],{"class":205},[199,38544,38545],{"class":201,"line":1202},[199,38546,34930],{"class":1454},[199,38548,38549,38551,38553,38555],{"class":201,"line":1207},[199,38550,34935],{"class":8113},[199,38552,895],{"class":1086},[199,38554,3478],{"class":1018},[199,38556,1594],{"class":205},[199,38558,38559,38561,38563,38565,38567,38569],{"class":201,"line":1212},[199,38560,34946],{"class":205},[199,38562,895],{"class":1086},[199,38564,34376],{"class":205},[199,38566,34379],{"class":8113},[199,38568,895],{"class":1086},[199,38570,34957],{"class":205},[199,38572,38573,38575,38577,38579],{"class":201,"line":1225},[199,38574,34962],{"class":8113},[199,38576,895],{"class":1086},[199,38578,34912],{"class":1018},[199,38580,34308],{"class":205},[199,38582,38583,38585,38587,38589],{"class":201,"line":1236},[199,38584,34973],{"class":8113},[199,38586,895],{"class":1086},[199,38588,34318],{"class":1018},[199,38590,34308],{"class":205},[199,38592,38593,38595,38597,38599],{"class":201,"line":1249},[199,38594,34984],{"class":8113},[199,38596,895],{"class":1086},[199,38598,3478],{"class":1018},[199,38600,1594],{"class":205},[199,38602,38603,38605],{"class":201,"line":1262},[199,38604,6989],{"class":1086},[199,38606,34997],{"class":205},[199,38608,38609],{"class":201,"line":1275},[199,38610,907],{"emptyLinePlaceholder":906},[199,38612,38613],{"class":201,"line":1287},[199,38614,35006],{"class":1454},[199,38616,38617],{"class":201,"line":1292},[199,38618,35011],{"class":1454},[199,38620,38621],{"class":201,"line":1297},[199,38622,907],{"emptyLinePlaceholder":906},[199,38624,38625],{"class":201,"line":1310},[199,38626,35020],{"class":1454},[199,38628,38629,38631,38633],{"class":201,"line":1315},[199,38630,34789],{"class":1086},[199,38632,35027],{"class":878},[199,38634,35030],{"class":205},[199,38636,38637,38639,38641,38643,38645,38647,38649,38651,38653],{"class":201,"line":1330},[199,38638,34079],{"class":205},[199,38640,895],{"class":1086},[199,38642,33294],{"class":205},[199,38644,34086],{"class":898},[199,38646,4629],{"class":1086},[199,38648,34091],{"class":205},[199,38650,4626],{"class":1086},[199,38652,35049],{"class":898},[199,38654,1594],{"class":205},[199,38656,38657],{"class":201,"line":1335},[199,38658,907],{"emptyLinePlaceholder":906},[199,38660,38661],{"class":201,"line":1340},[199,38662,907],{"emptyLinePlaceholder":906},[199,38664,38665],{"class":201,"line":1352},[199,38666,35064],{"class":1454},[199,38668,38669],{"class":201,"line":1367},[199,38670,35069],{"class":1454},[199,38672,38673],{"class":201,"line":1381},[199,38674,35074],{"class":1454},[199,38676,38677,38679,38681,38683,38685,38687,38689],{"class":201,"line":1396},[199,38678,35079],{"class":205},[199,38680,895],{"class":1086},[199,38682,35084],{"class":205},[199,38684,35087],{"class":8113},[199,38686,895],{"class":1086},[199,38688,35092],{"class":1018},[199,38690,1594],{"class":205},[199,38692,38693],{"class":201,"line":1401},[199,38694,907],{"emptyLinePlaceholder":906},[199,38696,38697],{"class":201,"line":1411},[199,38698,35103],{"class":1454},[199,38700,38701,38703,38705],{"class":201,"line":1421},[199,38702,35108],{"class":205},[199,38704,895],{"class":1086},[199,38706,35113],{"class":205},[199,38708,38709],{"class":201,"line":1426},[199,38710,907],{"emptyLinePlaceholder":906},[199,38712,38713],{"class":201,"line":1436},[199,38714,35122],{"class":1454},[199,38716,38717,38719,38721],{"class":201,"line":1441},[199,38718,34131],{"class":205},[199,38720,895],{"class":1086},[199,38722,35131],{"class":205},[199,38724,38725],{"class":201,"line":1451},[199,38726,35136],{"class":1454},[199,38728,38729],{"class":201,"line":1458},[199,38730,35141],{"class":1454},[199,38732,38733],{"class":201,"line":1464},[199,38734,35146],{"class":1454},[199,38736,38737,38739,38741],{"class":201,"line":1478},[199,38738,35151],{"class":205},[199,38740,895],{"class":1086},[199,38742,35156],{"class":205},[199,38744,38745],{"class":201,"line":1516},[199,38746,907],{"emptyLinePlaceholder":906},[199,38748,38749],{"class":201,"line":1522},[199,38750,907],{"emptyLinePlaceholder":906},[199,38752,38753],{"class":201,"line":1528},[199,38754,35169],{"class":1454},[199,38756,38757],{"class":201,"line":1557},[199,38758,35174],{"class":1454},[199,38760,38761,38763,38765],{"class":201,"line":1563},[199,38762,35179],{"class":205},[199,38764,895],{"class":1086},[199,38766,35184],{"class":1018},[199,38768,38769],{"class":201,"line":1568},[199,38770,35189],{"class":1454},[199,38772,38773,38775,38777],{"class":201,"line":1574},[199,38774,35194],{"class":205},[199,38776,895],{"class":1086},[199,38778,35199],{"class":205},[199,38780,38781],{"class":201,"line":1580},[199,38782,35204],{"class":1454},[199,38784,38785,38787,38789],{"class":201,"line":1597},[199,38786,35209],{"class":205},[199,38788,895],{"class":1086},[199,38790,35199],{"class":205},[199,38792,38793],{"class":201,"line":1602},[199,38794,35218],{"class":1454},[199,38796,38797,38799,38801],{"class":201,"line":1608},[199,38798,35223],{"class":205},[199,38800,895],{"class":1086},[199,38802,35199],{"class":205},[199,38804,38805],{"class":201,"line":1640},[199,38806,35232],{"class":1454},[199,38808,38809,38811,38813],{"class":201,"line":1653},[199,38810,35237],{"class":205},[199,38812,895],{"class":1086},[199,38814,35199],{"class":205},[199,38816,38817],{"class":201,"line":1673},[199,38818,907],{"emptyLinePlaceholder":906},[199,38820,38821],{"class":201,"line":1690},[199,38822,35250],{"class":1454},[199,38824,38825,38827,38829],{"class":201,"line":1706},[199,38826,35255],{"class":205},[199,38828,895],{"class":1086},[199,38830,35260],{"class":205},[199,38832,38833],{"class":201,"line":1712},[199,38834,907],{"emptyLinePlaceholder":906},[199,38836,38837],{"class":201,"line":1720},[199,38838,907],{"emptyLinePlaceholder":906},[199,38840,38841],{"class":201,"line":1725},[199,38842,35273],{"class":1454},[199,38844,38845,38847,38849,38851,38853],{"class":201,"line":1731},[199,38846,1937],{"class":1086},[199,38848,35280],{"class":205},[199,38850,28886],{"class":1086},[199,38852,35285],{"class":1018},[199,38854,35288],{"class":205},[199,38856,38857,38859,38861,38863,38865,38867,38869,38871,38873,38875,38877],{"class":201,"line":1745},[199,38858,35293],{"class":1018},[199,38860,1537],{"class":205},[199,38862,35298],{"class":898},[199,38864,35301],{"class":1018},[199,38866,3664],{"class":898},[199,38868,35301],{"class":1018},[199,38870,3337],{"class":898},[199,38872,35310],{"class":205},[199,38874,1998],{"class":1086},[199,38876,1115],{"class":1018},[199,38878,1554],{"class":205},[199,38880,38881,38883,38885,38887,38889,38891],{"class":201,"line":1754},[199,38882,35293],{"class":1018},[199,38884,1537],{"class":205},[199,38886,35325],{"class":898},[199,38888,3537],{"class":1086},[199,38890,3528],{"class":1018},[199,38892,1594],{"class":205},[199,38894,38895],{"class":201,"line":1763},[199,38896,907],{"emptyLinePlaceholder":906},[199,38898,38899],{"class":201,"line":1768},[199,38900,35340],{"class":1454},[199,38902,38903],{"class":201,"line":19628},[199,38904,35345],{"class":1454},[199,38906,38907,38909,38911],{"class":201,"line":19641},[199,38908,35350],{"class":205},[199,38910,895],{"class":1086},[199,38912,35184],{"class":1018},[199,38914,38915],{"class":201,"line":19646},[199,38916,35359],{"class":1454},[199,38918,38919,38921,38923],{"class":201,"line":19660},[199,38920,35364],{"class":205},[199,38922,895],{"class":1086},[199,38924,5989],{"class":1018},[199,38926,38927],{"class":201,"line":19665},[199,38928,35373],{"class":1454},[199,38930,38931,38933,38935],{"class":201,"line":19671},[199,38932,35378],{"class":205},[199,38934,895],{"class":1086},[199,38936,35184],{"class":1018},[199,38938,38939],{"class":201,"line":19676},[199,38940,35387],{"class":1454},[199,38942,38943,38945,38947],{"class":201,"line":19690},[199,38944,35392],{"class":205},[199,38946,895],{"class":1086},[199,38948,5989],{"class":1018},[199,38950,38951],{"class":201,"line":19695},[199,38952,35401],{"class":1454},[199,38954,38955,38957,38959],{"class":201,"line":19700},[199,38956,35406],{"class":205},[199,38958,895],{"class":1086},[199,38960,5989],{"class":1018},[199,38962,38963],{"class":201,"line":19714},[199,38964,35415],{"class":1454},[199,38966,38967,38969,38971],{"class":201,"line":19726},[199,38968,35420],{"class":205},[199,38970,895],{"class":1086},[199,38972,5989],{"class":1018},[199,38974,38975],{"class":201,"line":19731},[199,38976,35429],{"class":1454},[199,38978,38979,38981,38983,38985,38987],{"class":201,"line":19744},[199,38980,1481],{"class":1086},[199,38982,34443],{"class":205},[199,38984,28886],{"class":1086},[199,38986,34448],{"class":1018},[199,38988,35442],{"class":205},[199,38990,38991],{"class":201,"line":19749},[199,38992,35447],{"class":1454},[199,38994,38995,38997,38999],{"class":201,"line":19754},[199,38996,35452],{"class":205},[199,38998,895],{"class":1086},[199,39000,35457],{"class":205},[199,39002,39003],{"class":201,"line":19759},[199,39004,35462],{"class":1454},[199,39006,39007,39009,39011],{"class":201,"line":19772},[199,39008,35467],{"class":205},[199,39010,895],{"class":1086},[199,39012,35472],{"class":205},[199,39014,39015],{"class":201,"line":19777},[199,39016,35478],{"class":1454},[199,39018,39019],{"class":201,"line":35475},[199,39020,35484],{"class":205},[199,39022,39023],{"class":201,"line":35481},[199,39024,35490],{"class":1454},[199,39026,39027],{"class":201,"line":35487},[199,39028,35496],{"class":1454},[199,39030,39031,39033,39035],{"class":201,"line":35493},[199,39032,35502],{"class":205},[199,39034,895],{"class":1086},[199,39036,35507],{"class":205},[199,39038,39039],{"class":201,"line":35499},[199,39040,35513],{"class":1454},[199,39042,39043,39045,39047,39049,39051,39053,39055],{"class":201,"line":35510},[199,39044,35519],{"class":205},[199,39046,895],{"class":1086},[199,39048,35524],{"class":205},[199,39050,35527],{"class":8113},[199,39052,895],{"class":1086},[199,39054,1115],{"class":1018},[199,39056,1594],{"class":205},[199,39058,39059],{"class":201,"line":35516},[199,39060,35539],{"class":1454},[199,39062,39063,39065,39067],{"class":201,"line":35536},[199,39064,35545],{"class":205},[199,39066,895],{"class":1086},[199,39068,35550],{"class":205},[199,39070,39071],{"class":201,"line":35542},[199,39072,35556],{"class":1454},[199,39074,39075],{"class":201,"line":35553},[199,39076,35562],{"class":205},[199,39078,39079],{"class":201,"line":35559},[199,39080,35568],{"class":1454},[199,39082,39083],{"class":201,"line":35565},[199,39084,35574],{"class":205},[199,39086,39087],{"class":201,"line":35571},[199,39088,35580],{"class":1454},[199,39090,39091],{"class":201,"line":35577},[199,39092,35586],{"class":205},[199,39094,39095],{"class":201,"line":35583},[199,39096,35592],{"class":1454},[199,39098,39099,39101,39103,39105,39107,39109,39111],{"class":201,"line":35589},[199,39100,35598],{"class":205},[199,39102,12362],{"class":1086},[199,39104,35603],{"class":205},[199,39106,3537],{"class":1086},[199,39108,35608],{"class":205},[199,39110,1025],{"class":1018},[199,39112,1594],{"class":205},[199,39114,39115],{"class":201,"line":35595},[199,39116,35618],{"class":1454},[199,39118,39119,39121,39123,39125,39127],{"class":201,"line":35615},[199,39120,35624],{"class":205},[199,39122,12362],{"class":1086},[199,39124,35629],{"class":205},[199,39126,5853],{"class":1086},[199,39128,35634],{"class":205},[199,39130,39131],{"class":201,"line":35621},[199,39132,35640],{"class":1454},[199,39134,39135,39137,39139,39141,39143],{"class":201,"line":35637},[199,39136,35646],{"class":205},[199,39138,12362],{"class":1086},[199,39140,35608],{"class":205},[199,39142,1025],{"class":1018},[199,39144,1594],{"class":205},[199,39146,39147],{"class":201,"line":35643},[199,39148,35660],{"class":1454},[199,39150,39151,39153,39155,39157,39159],{"class":201,"line":35657},[199,39152,1481],{"class":1086},[199,39154,35668],{"class":205},[199,39156,28886],{"class":1086},[199,39158,34448],{"class":1018},[199,39160,35675],{"class":205},[199,39162,39163],{"class":201,"line":35663},[199,39164,35681],{"class":1454},[199,39166,39167,39169,39171],{"class":201,"line":35678},[199,39168,35452],{"class":205},[199,39170,895],{"class":1086},[199,39172,35457],{"class":205},[199,39174,39175],{"class":201,"line":35684},[199,39176,35696],{"class":1454},[199,39178,39179,39181,39183],{"class":201,"line":35693},[199,39180,35467],{"class":205},[199,39182,895],{"class":1086},[199,39184,35472],{"class":205},[199,39186,39187],{"class":201,"line":35699},[199,39188,35711],{"class":1454},[199,39190,39191],{"class":201,"line":35708},[199,39192,35717],{"class":205},[199,39194,39195],{"class":201,"line":35714},[199,39196,39197],{"class":1454},"            # 验证时不计算梯度以节省内存\u002F计算\n",[199,39199,39200,39202],{"class":201,"line":35720},[199,39201,35723],{"class":1086},[199,39203,35726],{"class":205},[199,39205,39206],{"class":201,"line":35729},[199,39207,35732],{"class":1454},[199,39209,39210,39213,39215],{"class":201,"line":35735},[199,39211,39212],{"class":205},"                output",[199,39214,895],{"class":1086},[199,39216,35507],{"class":205},[199,39218,39219],{"class":201,"line":35746},[199,39220,35749],{"class":1454},[199,39222,39223,39226,39228,39230,39232,39234,39236],{"class":201,"line":35752},[199,39224,39225],{"class":205},"                pre_lab",[199,39227,895],{"class":1086},[199,39229,35524],{"class":205},[199,39231,35527],{"class":8113},[199,39233,895],{"class":1086},[199,39235,1115],{"class":1018},[199,39237,1594],{"class":205},[199,39239,39240],{"class":201,"line":35771},[199,39241,35774],{"class":1454},[199,39243,39244,39247,39249],{"class":201,"line":35777},[199,39245,39246],{"class":205},"                val_batch_loss",[199,39248,895],{"class":1086},[199,39250,35550],{"class":205},[199,39252,39253],{"class":201,"line":35788},[199,39254,35791],{"class":1454},[199,39256,39257,39260,39262,39265,39267,39269,39271],{"class":201,"line":35794},[199,39258,39259],{"class":205},"                val_loss",[199,39261,12362],{"class":1086},[199,39263,39264],{"class":205},"val_batch_loss.item()",[199,39266,3537],{"class":1086},[199,39268,35608],{"class":205},[199,39270,1025],{"class":1018},[199,39272,1594],{"class":205},[199,39274,39275,39278,39280,39282,39284],{"class":201,"line":35814},[199,39276,39277],{"class":205},"                val_corrects",[199,39279,12362],{"class":1086},[199,39281,35629],{"class":205},[199,39283,5853],{"class":1086},[199,39285,35634],{"class":205},[199,39287,39288],{"class":201,"line":35830},[199,39289,39290],{"class":1454},"            # 当前用于验证的样本数量\n",[199,39292,39293,39296,39298,39300,39302],{"class":201,"line":35836},[199,39294,39295],{"class":205},"            val_num",[199,39297,12362],{"class":1086},[199,39299,35608],{"class":205},[199,39301,1025],{"class":1018},[199,39303,1594],{"class":205},[199,39305,39306],{"class":201,"line":35850},[199,39307,35853],{"class":1454},[199,39309,39310],{"class":201,"line":35856},[199,39311,35859],{"class":1454},[199,39313,39314,39316,39318],{"class":201,"line":35862},[199,39315,35865],{"class":205},[199,39317,3664],{"class":1086},[199,39319,35870],{"class":205},[199,39321,39322],{"class":201,"line":35873},[199,39323,35876],{"class":1454},[199,39325,39326],{"class":201,"line":35879},[199,39327,35882],{"class":1454},[199,39329,39330,39332,39334],{"class":201,"line":35885},[199,39331,35888],{"class":205},[199,39333,3664],{"class":1086},[199,39335,35870],{"class":205},[199,39337,39338],{"class":201,"line":35895},[199,39339,35898],{"class":1454},[199,39341,39342,39344,39346],{"class":201,"line":35901},[199,39343,35904],{"class":205},[199,39345,3664],{"class":1086},[199,39347,35909],{"class":205},[199,39349,39350],{"class":201,"line":35912},[199,39351,35915],{"class":1454},[199,39353,39354,39356,39358],{"class":201,"line":35918},[199,39355,35921],{"class":205},[199,39357,3664],{"class":1086},[199,39359,35909],{"class":205},[199,39361,39362],{"class":201,"line":35928},[199,39363,907],{"emptyLinePlaceholder":906},[199,39365,39366],{"class":201,"line":35933},[199,39367,35936],{"class":1454},[199,39369,39370,39372,39374,39376,39378,39380,39382,39384,39386,39388,39390,39392,39394,39396,39398,39400,39402,39404,39406,39408],{"class":201,"line":35939},[199,39371,35293],{"class":1018},[199,39373,1537],{"class":205},[199,39375,6493],{"class":898},[199,39377,35301],{"class":1018},[199,39379,35950],{"class":898},[199,39381,3974],{"class":1018},[199,39383,35955],{"class":1086},[199,39385,759],{"class":1018},[199,39387,35960],{"class":898},[199,39389,3974],{"class":1018},[199,39391,35955],{"class":1086},[199,39393,759],{"class":1018},[199,39395,6493],{"class":898},[199,39397,35971],{"class":205},[199,39399,1998],{"class":1086},[199,39401,1115],{"class":1018},[199,39403,35978],{"class":205},[199,39405,1998],{"class":1086},[199,39407,1115],{"class":1018},[199,39409,35985],{"class":205},[199,39411,39412,39414,39416,39418,39420,39422,39424,39426,39428,39430,39432,39434,39436,39438,39440,39442,39444,39446,39448,39450],{"class":201,"line":35988},[199,39413,35293],{"class":1018},[199,39415,1537],{"class":205},[199,39417,6493],{"class":898},[199,39419,35301],{"class":1018},[199,39421,35999],{"class":898},[199,39423,3974],{"class":1018},[199,39425,35955],{"class":1086},[199,39427,759],{"class":1018},[199,39429,36008],{"class":898},[199,39431,3974],{"class":1018},[199,39433,35955],{"class":1086},[199,39435,759],{"class":1018},[199,39437,6493],{"class":898},[199,39439,36019],{"class":205},[199,39441,1998],{"class":1086},[199,39443,1115],{"class":1018},[199,39445,36026],{"class":205},[199,39447,1998],{"class":1086},[199,39449,1115],{"class":1018},[199,39451,35985],{"class":205},[199,39453,39454],{"class":201,"line":36035},[199,39455,907],{"emptyLinePlaceholder":906},[199,39457,39458],{"class":201,"line":36040},[199,39459,36043],{"class":1454},[199,39461,39462,39464,39466,39468,39470,39472,39474],{"class":201,"line":36046},[199,39463,2017],{"class":1086},[199,39465,36051],{"class":205},[199,39467,1998],{"class":1086},[199,39469,1115],{"class":1018},[199,39471,1667],{"class":205},[199,39473,1217],{"class":1086},[199,39475,36062],{"class":205},[199,39477,39478],{"class":201,"line":36065},[199,39479,36068],{"class":1454},[199,39481,39482,39484,39486,39488,39490,39492,39494],{"class":201,"line":36071},[199,39483,36074],{"class":205},[199,39485,3135],{"class":1018},[199,39487,895],{"class":1086},[199,39489,36081],{"class":205},[199,39491,1998],{"class":1086},[199,39493,1115],{"class":1018},[199,39495,1932],{"class":205},[199,39497,39498],{"class":201,"line":36090},[199,39499,36093],{"class":1454},[199,39501,39502],{"class":201,"line":36096},[199,39503,36099],{"class":1454},[199,39505,39506,39508,39510],{"class":201,"line":36102},[199,39507,36105],{"class":205},[199,39509,895],{"class":1086},[199,39511,35156],{"class":205},[199,39513,39514],{"class":201,"line":36112},[199,39515,907],{"emptyLinePlaceholder":906},[199,39517,39518],{"class":201,"line":36117},[199,39519,36120],{"class":1454},[199,39521,39522,39524,39526,39528,39530],{"class":201,"line":36123},[199,39523,36126],{"class":205},[199,39525,895],{"class":1086},[199,39527,36131],{"class":205},[199,39529,1998],{"class":1086},[199,39531,36136],{"class":205},[199,39533,39534,39536,39538,39540,39542,39544,39546,39548,39550,39552,39554,39556,39558,39560,39562,39564,39566,39568],{"class":201,"line":36139},[199,39535,35293],{"class":1018},[199,39537,1537],{"class":205},[199,39539,36146],{"class":898},[199,39541,3974],{"class":1018},[199,39543,36151],{"class":1086},[199,39545,759],{"class":1018},[199,39547,3624],{"class":898},[199,39549,3974],{"class":1018},[199,39551,36151],{"class":1086},[199,39553,759],{"class":1018},[199,39555,36164],{"class":898},[199,39557,36167],{"class":205},[199,39559,36170],{"class":1086},[199,39561,3985],{"class":1018},[199,39563,36175],{"class":205},[199,39565,3412],{"class":1086},[199,39567,3985],{"class":1018},[199,39569,1554],{"class":205},[199,39571,39572],{"class":201,"line":36184},[199,39573,39574],{"class":1454},"    # 选择最优参数并保存\n",[199,39576,39577],{"class":201,"line":36190},[199,39578,39579],{"class":1454},"    # 保存最佳模型权重字典\n",[199,39581,39582,39585,39587],{"class":201,"line":36196},[199,39583,39584],{"class":205},"    torch.save(best_model_wts,",[199,39586,36208],{"class":898},[199,39588,1594],{"class":205},[199,39590,39591],{"class":201,"line":36202},[199,39592,36228],{"class":1454},[199,39594,39595,39597,39599,39601,39603,39605],{"class":201,"line":36213},[199,39596,36234],{"class":205},[199,39598,895],{"class":1086},[199,39600,36239],{"class":205},[199,39602,36242],{"class":8113},[199,39604,895],{"class":1086},[199,39606,4485],{"class":205},[199,39608,39609,39611,39613,39615],{"class":201,"line":36219},[199,39610,36252],{"class":898},[199,39612,3938],{"class":205},[199,39614,36257],{"class":1018},[199,39616,36260],{"class":205},[199,39618,39619,39621],{"class":201,"line":36225},[199,39620,36266],{"class":898},[199,39622,36269],{"class":205},[199,39624,39625,39627],{"class":201,"line":36231},[199,39626,36275],{"class":898},[199,39628,36278],{"class":205},[199,39630,39631,39633],{"class":201,"line":36249},[199,39632,36284],{"class":898},[199,39634,36287],{"class":205},[199,39636,39637,39639],{"class":201,"line":36263},[199,39638,36293],{"class":898},[199,39640,36296],{"class":205},[199,39642,39643],{"class":201,"line":36272},[199,39644,36302],{"class":205},[199,39646,39647],{"class":201,"line":36281},[199,39648,36308],{"class":1454},[199,39650,39651,39653],{"class":201,"line":36290},[199,39652,6989],{"class":1086},[199,39654,36316],{"class":205},[199,39656,39657],{"class":201,"line":36299},[199,39658,907],{"emptyLinePlaceholder":906},[199,39660,39661],{"class":201,"line":36305},[199,39662,36327],{"class":1454},[199,39664,39665,39667,39669],{"class":201,"line":36311},[199,39666,34789],{"class":1086},[199,39668,36335],{"class":878},[199,39670,36338],{"class":205},[199,39672,39673],{"class":201,"line":36319},[199,39674,36344],{"class":1454},[199,39676,39677,39679,39681,39683,39685,39687,39689,39691],{"class":201,"line":36324},[199,39678,36350],{"class":205},[199,39680,34535],{"class":8113},[199,39682,895],{"class":1086},[199,39684,1537],{"class":205},[199,39686,3579],{"class":1018},[199,39688,3461],{"class":205},[199,39690,1915],{"class":1018},[199,39692,1554],{"class":205},[199,39694,39695],{"class":201,"line":36330},[199,39696,36370],{"class":1454},[199,39698,39699],{"class":201,"line":36341},[199,39700,36376],{"class":1454},[199,39702,39703],{"class":201,"line":36347},[199,39704,36382],{"class":1454},[199,39706,39707,39709,39711,39713,39715,39717,39719],{"class":201,"line":36367},[199,39708,34569],{"class":205},[199,39710,1115],{"class":1018},[199,39712,3461],{"class":205},[199,39714,1925],{"class":1018},[199,39716,3461],{"class":205},[199,39718,1115],{"class":1018},[199,39720,1594],{"class":205},[199,39722,39723],{"class":201,"line":36373},[199,39724,36405],{"class":1454},[199,39726,39727],{"class":201,"line":36379},[199,39728,36411],{"class":1454},[199,39730,39731],{"class":201,"line":36385},[199,39732,36417],{"class":1454},[199,39734,39735],{"class":201,"line":36402},[199,39736,36423],{"class":1454},[199,39738,39739],{"class":201,"line":36408},[199,39740,36429],{"class":1454},[199,39742,39743,39745,39747,39749,39751,39753,39755,39757,39759],{"class":201,"line":36414},[199,39744,36435],{"class":205},[199,39746,36438],{"class":898},[199,39748,36441],{"class":205},[199,39750,36444],{"class":898},[199,39752,3461],{"class":205},[199,39754,36449],{"class":8113},[199,39756,895],{"class":1086},[199,39758,36454],{"class":898},[199,39760,1594],{"class":205},[199,39762,39763,39765,39767,39769,39771,39773,39775,39777,39779],{"class":201,"line":36420},[199,39764,36435],{"class":205},[199,39766,36438],{"class":898},[199,39768,36466],{"class":205},[199,39770,36469],{"class":898},[199,39772,3461],{"class":205},[199,39774,36449],{"class":8113},[199,39776,895],{"class":1086},[199,39778,36478],{"class":898},[199,39780,1594],{"class":205},[199,39782,39783],{"class":201,"line":36426},[199,39784,36486],{"class":1454},[199,39786,39787],{"class":201,"line":36432},[199,39788,36492],{"class":205},[199,39790,39791],{"class":201,"line":36459},[199,39792,36498],{"class":1454},[199,39794,39795,39797,39799],{"class":201,"line":36483},[199,39796,36504],{"class":205},[199,39798,36507],{"class":898},[199,39800,1594],{"class":205},[199,39802,39803,39805,39807],{"class":201,"line":36489},[199,39804,36515],{"class":205},[199,39806,36518],{"class":898},[199,39808,1594],{"class":205},[199,39810,39811],{"class":201,"line":36495},[199,39812,36526],{"class":1454},[199,39814,39815,39817,39819,39821,39823,39825,39827],{"class":201,"line":36501},[199,39816,34569],{"class":205},[199,39818,1115],{"class":1018},[199,39820,3461],{"class":205},[199,39822,1925],{"class":1018},[199,39824,3461],{"class":205},[199,39826,1925],{"class":1018},[199,39828,1594],{"class":205},[199,39830,39831,39833,39835,39837,39839,39841,39843,39845,39847],{"class":201,"line":36512},[199,39832,36435],{"class":205},[199,39834,36438],{"class":898},[199,39836,36553],{"class":205},[199,39838,36444],{"class":898},[199,39840,3461],{"class":205},[199,39842,36449],{"class":8113},[199,39844,895],{"class":1086},[199,39846,36564],{"class":898},[199,39848,1594],{"class":205},[199,39850,39851,39853,39855,39857,39859,39861,39863,39865,39867],{"class":201,"line":36523},[199,39852,36435],{"class":205},[199,39854,36438],{"class":898},[199,39856,36576],{"class":205},[199,39858,36469],{"class":898},[199,39860,3461],{"class":205},[199,39862,36449],{"class":8113},[199,39864,895],{"class":1086},[199,39866,36587],{"class":898},[199,39868,1594],{"class":205},[199,39870,39871],{"class":201,"line":36529},[199,39872,36595],{"class":1454},[199,39874,39875],{"class":201,"line":36546},[199,39876,36492],{"class":205},[199,39878,39879,39881,39883],{"class":201,"line":36569},[199,39880,36504],{"class":205},[199,39882,36438],{"class":898},[199,39884,1594],{"class":205},[199,39886,39887,39889,39891],{"class":201,"line":36592},[199,39888,36515],{"class":205},[199,39890,36617],{"class":898},[199,39892,1594],{"class":205},[199,39894,39895],{"class":201,"line":36598},[199,39896,36625],{"class":205},[199,39898,39899],{"class":201,"line":36603},[199,39900,907],{"emptyLinePlaceholder":906},[199,39902,39903],{"class":201,"line":36612},[199,39904,36636],{"class":1454},[199,39906,39907,39909,39911,39913,39915],{"class":201,"line":36622},[199,39908,4470],{"class":1086},[199,39910,34062],{"class":1018},[199,39912,5853],{"class":1086},[199,39914,34067],{"class":898},[199,39916,6640],{"class":205},[199,39918,39919],{"class":201,"line":36628},[199,39920,36655],{"class":1454},[199,39922,39923,39926,39928],{"class":201,"line":36633},[199,39924,39925],{"class":205},"    AlexNet",[199,39927,895],{"class":1086},[199,39929,39930],{"class":205},"AlexNet()\n",[199,39932,39933,39935,39937],{"class":201,"line":36639},[199,39934,36672],{"class":205},[199,39936,895],{"class":1086},[199,39938,36677],{"class":205},[199,39940,39941,39943,39945,39948,39950,39952,39954],{"class":201,"line":36652},[199,39942,36234],{"class":205},[199,39944,895],{"class":1086},[199,39946,39947],{"class":205},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[199,39949,36690],{"class":8113},[199,39951,895],{"class":1086},[199,39953,3779],{"class":1018},[199,39955,1594],{"class":205},[199,39957,39958],{"class":201,"line":36658},[199,39959,36702],{"class":205},[24,39961,39962],{"start":73},[27,39963,36715],{},[190,39965,39967],{"className":33221,"code":39966,"language":33223,"meta":57,"style":57},"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",[196,39968,39969,39975,39985,39995,40005,40009,40019,40029,40040,40044,40048,40052,40060,40076,40086,40102,40112,40126,40130,40140,40150,40160,40166,40170,40174,40182,40186,40202,40210,40214,40218,40226,40234,40238,40242,40246,40250,40256,40260,40270,40278,40286,40290,40294,40298,40306,40310,40326,40330,40334,40338,40350,40354,40366,40370,40374,40386,40390,40400,40404,40408,40420,40424,40432,40436,40440,40448,40452,40460,40464,40468,40472,40476,40480,40496,40504,40508,40512,40560,40566,40570,40580,40588,40596,40600,40604,40608,40612,40620,40624,40640,40644,40652,40660],{"__ignoreMap":57},[199,39970,39971,39973],{"class":201,"line":202},[199,39972,33235],{"class":1086},[199,39974,33238],{"class":205},[199,39976,39977,39979,39981,39983],{"class":201,"line":36},[199,39978,33235],{"class":1086},[199,39980,34257],{"class":205},[199,39982,34225],{"class":1086},[199,39984,34262],{"class":205},[199,39986,39987,39989,39991,39993],{"class":201,"line":73},[199,39988,33579],{"class":1086},[199,39990,36743],{"class":205},[199,39992,33235],{"class":1086},[199,39994,36748],{"class":205},[199,39996,39997,39999,40001,40003],{"class":201,"line":333},[199,39998,33579],{"class":1086},[199,40000,34240],{"class":205},[199,40002,33235],{"class":1086},[199,40004,34245],{"class":205},[199,40006,40007],{"class":201,"line":227},[199,40008,36763],{"class":1454},[199,40010,40011,40013,40015,40017],{"class":201,"line":238},[199,40012,33579],{"class":1086},[199,40014,34210],{"class":205},[199,40016,33235],{"class":1086},[199,40018,34215],{"class":205},[199,40020,40021,40023,40025,40027],{"class":201,"line":252},[199,40022,33579],{"class":1086},[199,40024,34756],{"class":205},[199,40026,33235],{"class":1086},[199,40028,38398],{"class":205},[199,40030,40031,40033,40036,40038],{"class":201,"line":388},[199,40032,33579],{"class":1086},[199,40034,40035],{"class":205}," 练习.AlexNet.model ",[199,40037,33235],{"class":1086},[199,40039,38398],{"class":205},[199,40041,40042],{"class":201,"line":415},[199,40043,907],{"emptyLinePlaceholder":906},[199,40045,40046],{"class":201,"line":426},[199,40047,907],{"emptyLinePlaceholder":906},[199,40049,40050],{"class":201,"line":1015},[199,40051,36792],{"class":1454},[199,40053,40054,40056,40058],{"class":201,"line":1031},[199,40055,34789],{"class":1086},[199,40057,36799],{"class":878},[199,40059,34795],{"class":205},[199,40061,40062,40064,40066,40068,40070,40072,40074],{"class":201,"line":1043},[199,40063,36806],{"class":205},[199,40065,895],{"class":1086},[199,40067,34297],{"class":205},[199,40069,34300],{"class":8113},[199,40071,895],{"class":1086},[199,40073,34305],{"class":898},[199,40075,34308],{"class":205},[199,40077,40078,40080,40082,40084],{"class":201,"line":1049},[199,40079,36823],{"class":8113},[199,40081,895],{"class":1086},[199,40083,36828],{"class":1018},[199,40085,34308],{"class":205},[199,40087,40088,40090,40092,40094,40096,40098,40100],{"class":201,"line":1054},[199,40089,36835],{"class":8113},[199,40091,895],{"class":1086},[199,40093,34335],{"class":205},[199,40095,34338],{"class":8113},[199,40097,895],{"class":1086},[199,40099,38290],{"class":1018},[199,40101,34346],{"class":205},[199,40103,40104,40106,40108,40110],{"class":201,"line":1062},[199,40105,36852],{"class":8113},[199,40107,895],{"class":1086},[199,40109,34318],{"class":1018},[199,40111,1594],{"class":205},[199,40113,40114,40116,40118,40120,40122,40124],{"class":201,"line":1075},[199,40115,36863],{"class":205},[199,40117,895],{"class":1086},[199,40119,34376],{"class":205},[199,40121,34379],{"class":8113},[199,40123,895],{"class":1086},[199,40125,36874],{"class":205},[199,40127,40128],{"class":201,"line":1092},[199,40129,36879],{"class":1454},[199,40131,40132,40134,40136,40138],{"class":201,"line":1107},[199,40133,36884],{"class":8113},[199,40135,895],{"class":1086},[199,40137,1115],{"class":1018},[199,40139,34308],{"class":205},[199,40141,40142,40144,40146,40148],{"class":201,"line":1128},[199,40143,36895],{"class":8113},[199,40145,895],{"class":1086},[199,40147,34318],{"class":1018},[199,40149,34308],{"class":205},[199,40151,40152,40154,40156,40158],{"class":201,"line":1146},[199,40153,36906],{"class":8113},[199,40155,895],{"class":1086},[199,40157,1025],{"class":1018},[199,40159,1594],{"class":205},[199,40161,40162,40164],{"class":201,"line":1163},[199,40163,6989],{"class":1086},[199,40165,36919],{"class":205},[199,40167,40168],{"class":201,"line":1176},[199,40169,907],{"emptyLinePlaceholder":906},[199,40171,40172],{"class":201,"line":1189},[199,40173,36928],{"class":1454},[199,40175,40176,40178,40180],{"class":201,"line":1202},[199,40177,34789],{"class":1086},[199,40179,36935],{"class":878},[199,40181,36938],{"class":205},[199,40183,40184],{"class":201,"line":1207},[199,40185,36943],{"class":1454},[199,40187,40188,40190,40192,40194,40196,40198,40200],{"class":201,"line":1212},[199,40189,34079],{"class":205},[199,40191,895],{"class":1086},[199,40193,34086],{"class":898},[199,40195,4629],{"class":1086},[199,40197,34091],{"class":205},[199,40199,4626],{"class":1086},[199,40201,36960],{"class":898},[199,40203,40204,40206,40208],{"class":201,"line":1225},[199,40205,34131],{"class":205},[199,40207,895],{"class":1086},[199,40209,35131],{"class":205},[199,40211,40212],{"class":201,"line":1236},[199,40213,907],{"emptyLinePlaceholder":906},[199,40215,40216],{"class":201,"line":1249},[199,40217,36977],{"class":1454},[199,40219,40220,40222,40224],{"class":201,"line":1262},[199,40221,36982],{"class":205},[199,40223,895],{"class":1086},[199,40225,35184],{"class":1018},[199,40227,40228,40230,40232],{"class":201,"line":1275},[199,40229,36991],{"class":205},[199,40231,895],{"class":1086},[199,40233,5989],{"class":1018},[199,40235,40236],{"class":201,"line":1287},[199,40237,907],{"emptyLinePlaceholder":906},[199,40239,40240],{"class":201,"line":1292},[199,40241,37004],{"class":1454},[199,40243,40244],{"class":201,"line":1297},[199,40245,37009],{"class":1454},[199,40247,40248],{"class":201,"line":1310},[199,40249,37014],{"class":1454},[199,40251,40252,40254],{"class":201,"line":1315},[199,40253,37019],{"class":1086},[199,40255,35726],{"class":205},[199,40257,40258],{"class":201,"line":1330},[199,40259,37026],{"class":1454},[199,40261,40262,40264,40266,40268],{"class":201,"line":1335},[199,40263,1481],{"class":1086},[199,40265,37033],{"class":205},[199,40267,28886],{"class":1086},[199,40269,37038],{"class":205},[199,40271,40272,40274,40276],{"class":201,"line":1340},[199,40273,37043],{"class":205},[199,40275,895],{"class":1086},[199,40277,37048],{"class":205},[199,40279,40280,40282,40284],{"class":201,"line":1352},[199,40281,37053],{"class":205},[199,40283,895],{"class":1086},[199,40285,37058],{"class":205},[199,40287,40288],{"class":201,"line":1367},[199,40289,37063],{"class":1454},[199,40291,40292],{"class":201,"line":1381},[199,40293,35717],{"class":205},[199,40295,40296],{"class":201,"line":1396},[199,40297,37072],{"class":1454},[199,40299,40300,40302,40304],{"class":201,"line":1401},[199,40301,35502],{"class":205},[199,40303,895],{"class":1086},[199,40305,37081],{"class":205},[199,40307,40308],{"class":201,"line":1411},[199,40309,37086],{"class":1454},[199,40311,40312,40314,40316,40318,40320,40322,40324],{"class":201,"line":1421},[199,40313,35519],{"class":205},[199,40315,895],{"class":1086},[199,40317,35524],{"class":205},[199,40319,35527],{"class":8113},[199,40321,895],{"class":1086},[199,40323,1115],{"class":1018},[199,40325,1594],{"class":205},[199,40327,40328],{"class":201,"line":1426},[199,40329,37107],{"class":1454},[199,40331,40332],{"class":201,"line":1436},[199,40333,37112],{"class":1454},[199,40335,40336],{"class":201,"line":1441},[199,40337,37117],{"class":1454},[199,40339,40340,40342,40344,40346,40348],{"class":201,"line":1451},[199,40341,37122],{"class":205},[199,40343,12362],{"class":1086},[199,40345,35629],{"class":205},[199,40347,5853],{"class":1086},[199,40349,37131],{"class":205},[199,40351,40352],{"class":201,"line":1458},[199,40353,37136],{"class":1454},[199,40355,40356,40358,40360,40362,40364],{"class":201,"line":1464},[199,40357,37141],{"class":205},[199,40359,12362],{"class":1086},[199,40361,37146],{"class":205},[199,40363,1025],{"class":1018},[199,40365,1594],{"class":205},[199,40367,40368],{"class":201,"line":1478},[199,40369,907],{"emptyLinePlaceholder":906},[199,40371,40372],{"class":201,"line":1516},[199,40373,37159],{"class":1454},[199,40375,40376,40378,40380,40382,40384],{"class":201,"line":1522},[199,40377,37164],{"class":205},[199,40379,895],{"class":1086},[199,40381,37169],{"class":205},[199,40383,3664],{"class":1086},[199,40385,37174],{"class":205},[199,40387,40388],{"class":201,"line":1528},[199,40389,37179],{"class":1454},[199,40391,40392,40394,40396,40398],{"class":201,"line":1557},[199,40393,35293],{"class":1018},[199,40395,1537],{"class":205},[199,40397,37188],{"class":898},[199,40399,37191],{"class":205},[199,40401,40402],{"class":201,"line":1563},[199,40403,907],{"emptyLinePlaceholder":906},[199,40405,40406],{"class":201,"line":1568},[199,40407,37200],{"class":1454},[199,40409,40410,40412,40414,40416,40418],{"class":201,"line":1574},[199,40411,4470],{"class":1086},[199,40413,34062],{"class":1018},[199,40415,5853],{"class":1086},[199,40417,34067],{"class":898},[199,40419,6640],{"class":205},[199,40421,40422],{"class":201,"line":1580},[199,40423,37217],{"class":1454},[199,40425,40426,40428,40430],{"class":201,"line":1597},[199,40427,34131],{"class":205},[199,40429,895],{"class":1086},[199,40431,39930],{"class":205},[199,40433,40434],{"class":201,"line":1602},[199,40435,37230],{"class":1454},[199,40437,40438],{"class":201,"line":1608},[199,40439,37235],{"class":1454},[199,40441,40442,40444,40446],{"class":201,"line":1640},[199,40443,37240],{"class":205},[199,40445,37243],{"class":898},[199,40447,1554],{"class":205},[199,40449,40450],{"class":201,"line":1653},[199,40451,37250],{"class":1454},[199,40453,40454,40456,40458],{"class":201,"line":1673},[199,40455,36863],{"class":205},[199,40457,895],{"class":1086},[199,40459,37259],{"class":205},[199,40461,40462],{"class":201,"line":1690},[199,40463,37264],{"class":1454},[199,40465,40466],{"class":201,"line":1706},[199,40467,37269],{"class":205},[199,40469,40470],{"class":201,"line":1712},[199,40471,907],{"emptyLinePlaceholder":906},[199,40473,40474],{"class":201,"line":1720},[199,40475,37278],{"class":1454},[199,40477,40478],{"class":201,"line":1725},[199,40479,37283],{"class":1454},[199,40481,40482,40484,40486,40488,40490,40492,40494],{"class":201,"line":1731},[199,40483,34079],{"class":205},[199,40485,895],{"class":1086},[199,40487,34086],{"class":898},[199,40489,4629],{"class":1086},[199,40491,34091],{"class":205},[199,40493,4626],{"class":1086},[199,40495,36960],{"class":898},[199,40497,40498,40500,40502],{"class":201,"line":1745},[199,40499,34131],{"class":205},[199,40501,895],{"class":1086},[199,40503,35131],{"class":205},[199,40505,40506],{"class":201,"line":1754},[199,40507,37312],{"class":1454},[199,40509,40510],{"class":201,"line":1763},[199,40511,37317],{"class":1454},[199,40513,40514,40516,40518,40520,40522,40524,40526,40528,40530,40532,40534,40536,40538,40540,40542,40544,40546,40548,40550,40552,40554,40556,40558],{"class":201,"line":1768},[199,40515,37322],{"class":205},[199,40517,895],{"class":1086},[199,40519,1662],{"class":205},[199,40521,37329],{"class":898},[199,40523,3461],{"class":205},[199,40525,37334],{"class":898},[199,40527,3461],{"class":205},[199,40529,37339],{"class":898},[199,40531,3461],{"class":205},[199,40533,37344],{"class":898},[199,40535,3461],{"class":205},[199,40537,37349],{"class":898},[199,40539,3461],{"class":205},[199,40541,37354],{"class":898},[199,40543,3461],{"class":205},[199,40545,37359],{"class":898},[199,40547,3461],{"class":205},[199,40549,37364],{"class":898},[199,40551,3461],{"class":205},[199,40553,37369],{"class":898},[199,40555,3461],{"class":205},[199,40557,37374],{"class":898},[199,40559,1932],{"class":205},[199,40561,40562,40564],{"class":201,"line":19628},[199,40563,37019],{"class":1086},[199,40565,35726],{"class":205},[199,40567,40568],{"class":201,"line":19641},[199,40569,37387],{"class":1454},[199,40571,40572,40574,40576,40578],{"class":201,"line":19646},[199,40573,1481],{"class":1086},[199,40575,37394],{"class":205},[199,40577,28886],{"class":1086},[199,40579,37038],{"class":205},[199,40581,40582,40584,40586],{"class":201,"line":19660},[199,40583,35452],{"class":205},[199,40585,895],{"class":1086},[199,40587,35457],{"class":205},[199,40589,40590,40592,40594],{"class":201,"line":19665},[199,40591,35467],{"class":205},[199,40593,895],{"class":1086},[199,40595,35472],{"class":205},[199,40597,40598],{"class":201,"line":19671},[199,40599,907],{"emptyLinePlaceholder":906},[199,40601,40602],{"class":201,"line":19676},[199,40603,37423],{"class":1454},[199,40605,40606],{"class":201,"line":19690},[199,40607,35717],{"class":205},[199,40609,40610],{"class":201,"line":19695},[199,40611,37432],{"class":1454},[199,40613,40614,40616,40618],{"class":201,"line":19700},[199,40615,35502],{"class":205},[199,40617,895],{"class":1086},[199,40619,35507],{"class":205},[199,40621,40622],{"class":201,"line":19714},[199,40623,37445],{"class":1454},[199,40625,40626,40628,40630,40632,40634,40636,40638],{"class":201,"line":19726},[199,40627,35519],{"class":205},[199,40629,895],{"class":1086},[199,40631,35524],{"class":205},[199,40633,35527],{"class":8113},[199,40635,895],{"class":1086},[199,40637,1115],{"class":1018},[199,40639,1594],{"class":205},[199,40641,40642],{"class":201,"line":19731},[199,40643,37466],{"class":1454},[199,40645,40646,40648,40650],{"class":201,"line":19744},[199,40647,37471],{"class":205},[199,40649,895],{"class":1086},[199,40651,37476],{"class":205},[199,40653,40654,40656,40658],{"class":201,"line":19749},[199,40655,37481],{"class":205},[199,40657,895],{"class":1086},[199,40659,37486],{"class":205},[199,40661,40662,40664,40666,40668,40670,40672,40674,40676],{"class":201,"line":19754},[199,40663,37491],{"class":1018},[199,40665,1537],{"class":205},[199,40667,37496],{"class":898},[199,40669,37499],{"class":205},[199,40671,37502],{"class":898},[199,40673,3461],{"class":205},[199,40675,37507],{"class":898},[199,40677,37510],{"class":205},[19,40679,40681],{"id":40680},"_22vgg","2.2.VGG",[627,40683,40685],{"id":40684},"_221原理","2.2.1.原理",[31,40687,40688],{},[55,40689],{"alt":57,"src":40690},"\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",[31,40692,40693],{},[55,40694],{"alt":57,"src":40695},"\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",[31,40697,40698],{},[55,40699],{"alt":57,"src":40700},"\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",[31,40702,40703],{},"参数详细描述：",[31,40705,40706],{},[55,40707],{"alt":57,"src":40708},"\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",[31,40710,40711],{},[55,40712],{"alt":57,"src":40713},"\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",[31,40715,40716],{},[55,40717],{"alt":57,"src":40718},"\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",[31,40720,40721],{},[55,40722],{"alt":57,"src":40723},"\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",[31,40725,40726],{},[55,40727],{"alt":57,"src":40728},"\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",[627,40730,40732],{"id":40731},"_222代码实现","2.2.2.代码实现",[24,40734,40735],{},[27,40736,40737],{},"网络搭建",[190,40739,40741],{"className":33221,"code":40740,"language":33223,"meta":57,"style":57},"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",[196,40742,40743,40749,40761,40771,40781,40785,40802,40810,40829,40834,40839,40851,40889,40894,40930,40934,40963,40968,40973,40984,41020,41024,41060,41064,41092,41096,41101,41112,41148,41152,41188,41192,41228,41232,41260,41264,41269,41280,41317,41321,41357,41361,41397,41401,41429,41433,41438,41449,41485,41489,41525,41529,41565,41569,41597,41601,41606,41617,41622,41627,41632,41653,41657,41669,41673,41685,41689,41693,41698,41703,41718,41723,41733,41738,41753,41758,41777,41782,41791,41796,41806,41811,41816,41830,41835,41849,41857,41861,41865,41873,41884,41895,41906,41917,41928,41939,41945,41949,41954,41967,41987,41993,42002],{"__ignoreMap":57},[199,40744,40745,40747],{"class":201,"line":202},[199,40746,33235],{"class":1086},[199,40748,33238],{"class":205},[199,40750,40751,40753,40756,40758],{"class":201,"line":36},[199,40752,33579],{"class":1086},[199,40754,40755],{"class":205}," sympy.core.sympify ",[199,40757,33235],{"class":1086},[199,40759,40760],{"class":205}," kernS\n",[199,40762,40763,40765,40767,40769],{"class":201,"line":73},[199,40764,33579],{"class":1086},[199,40766,33582],{"class":205},[199,40768,33235],{"class":1086},[199,40770,33587],{"class":205},[199,40772,40773,40775,40777,40779],{"class":201,"line":333},[199,40774,33579],{"class":1086},[199,40776,33599],{"class":205},[199,40778,33235],{"class":1086},[199,40780,33604],{"class":205},[199,40782,40783],{"class":201,"line":227},[199,40784,907],{"emptyLinePlaceholder":906},[199,40786,40787,40789,40792,40794,40796,40798,40800],{"class":201,"line":238},[199,40788,17554],{"class":1086},[199,40790,40791],{"class":878}," VGG16",[199,40793,1537],{"class":205},[199,40795,33620],{"class":878},[199,40797,3638],{"class":205},[199,40799,33625],{"class":878},[199,40801,33628],{"class":205},[199,40803,40804,40806,40808],{"class":201,"line":252},[199,40805,33643],{"class":1086},[199,40807,33646],{"class":1018},[199,40809,33649],{"class":205},[199,40811,40812,40814,40816,40819,40821,40823,40825,40827],{"class":201,"line":388},[199,40813,33659],{"class":1018},[199,40815,1537],{"class":205},[199,40817,40818],{"class":1018},"VGG16",[199,40820,1912],{"class":205},[199,40822,33665],{"class":1018},[199,40824,33668],{"class":205},[199,40826,33671],{"class":1018},[199,40828,4892],{"class":205},[199,40830,40831],{"class":201,"line":415},[199,40832,40833],{"class":1454},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[199,40835,40836],{"class":201,"line":426},[199,40837,40838],{"class":1454},"        # 这里用的是灰度图\n",[199,40840,40841,40843,40846,40848],{"class":201,"line":1015},[199,40842,33687],{"class":1018},[199,40844,40845],{"class":205},".block1",[199,40847,895],{"class":1086},[199,40849,40850],{"class":205},"nn.Sequential(\n",[199,40852,40853,40856,40858,40860,40862,40864,40866,40868,40870,40872,40874,40876,40878,40880,40882,40884,40886],{"class":201,"line":1031},[199,40854,40855],{"class":205},"            nn.Conv2d(",[199,40857,33698],{"class":8113},[199,40859,895],{"class":1086},[199,40861,1115],{"class":1018},[199,40863,3461],{"class":205},[199,40865,33707],{"class":8113},[199,40867,895],{"class":1086},[199,40869,3291],{"class":1018},[199,40871,3461],{"class":205},[199,40873,33716],{"class":8113},[199,40875,895],{"class":1086},[199,40877,1920],{"class":1018},[199,40879,3461],{"class":205},[199,40881,33725],{"class":8113},[199,40883,895],{"class":1086},[199,40885,1115],{"class":1018},[199,40887,40888],{"class":205},"),\n",[199,40890,40891],{"class":201,"line":1043},[199,40892,40893],{"class":205},"            nn.ReLU(),\n",[199,40895,40896,40898,40900,40902,40904,40906,40908,40910,40912,40914,40916,40918,40920,40922,40924,40926,40928],{"class":201,"line":1049},[199,40897,40855],{"class":205},[199,40899,33698],{"class":8113},[199,40901,895],{"class":1086},[199,40903,3291],{"class":1018},[199,40905,3461],{"class":205},[199,40907,33707],{"class":8113},[199,40909,895],{"class":1086},[199,40911,3291],{"class":1018},[199,40913,3461],{"class":205},[199,40915,33716],{"class":8113},[199,40917,895],{"class":1086},[199,40919,1920],{"class":1018},[199,40921,3461],{"class":205},[199,40923,33725],{"class":8113},[199,40925,895],{"class":1086},[199,40927,1115],{"class":1018},[199,40929,40888],{"class":205},[199,40931,40932],{"class":201,"line":1054},[199,40933,40893],{"class":205},[199,40935,40936,40939,40941,40943,40945,40947,40949,40951,40953,40955,40957,40959,40961],{"class":201,"line":1062},[199,40937,40938],{"class":205},"            nn.MaxPool2d(",[199,40940,33716],{"class":8113},[199,40942,895],{"class":1086},[199,40944,1925],{"class":1018},[199,40946,3461],{"class":205},[199,40948,33771],{"class":8113},[199,40950,895],{"class":1086},[199,40952,1925],{"class":1018},[199,40954,3461],{"class":205},[199,40956,33725],{"class":8113},[199,40958,895],{"class":1086},[199,40960,1025],{"class":1018},[199,40962,1594],{"class":205},[199,40964,40965],{"class":201,"line":1075},[199,40966,40967],{"class":205},"        )\n",[199,40969,40970],{"class":201,"line":1092},[199,40971,40972],{"class":1454},"        # 第二层\n",[199,40974,40975,40977,40980,40982],{"class":201,"line":1107},[199,40976,33687],{"class":1018},[199,40978,40979],{"class":205},".block2",[199,40981,895],{"class":1086},[199,40983,40850],{"class":205},[199,40985,40986,40988,40990,40992,40994,40996,40998,41000,41002,41004,41006,41008,41010,41012,41014,41016,41018],{"class":201,"line":1128},[199,40987,40855],{"class":205},[199,40989,33698],{"class":8113},[199,40991,895],{"class":1086},[199,40993,3291],{"class":1018},[199,40995,3461],{"class":205},[199,40997,33707],{"class":8113},[199,40999,895],{"class":1086},[199,41001,34912],{"class":1018},[199,41003,3461],{"class":205},[199,41005,33716],{"class":8113},[199,41007,895],{"class":1086},[199,41009,1920],{"class":1018},[199,41011,3461],{"class":205},[199,41013,33725],{"class":8113},[199,41015,895],{"class":1086},[199,41017,1115],{"class":1018},[199,41019,40888],{"class":205},[199,41021,41022],{"class":201,"line":1146},[199,41023,40893],{"class":205},[199,41025,41026,41028,41030,41032,41034,41036,41038,41040,41042,41044,41046,41048,41050,41052,41054,41056,41058],{"class":201,"line":1163},[199,41027,40855],{"class":205},[199,41029,33698],{"class":8113},[199,41031,895],{"class":1086},[199,41033,34912],{"class":1018},[199,41035,3461],{"class":205},[199,41037,33707],{"class":8113},[199,41039,895],{"class":1086},[199,41041,34912],{"class":1018},[199,41043,3461],{"class":205},[199,41045,33716],{"class":8113},[199,41047,895],{"class":1086},[199,41049,1920],{"class":1018},[199,41051,3461],{"class":205},[199,41053,33725],{"class":8113},[199,41055,895],{"class":1086},[199,41057,1115],{"class":1018},[199,41059,40888],{"class":205},[199,41061,41062],{"class":201,"line":1176},[199,41063,40893],{"class":205},[199,41065,41066,41068,41070,41072,41074,41076,41078,41080,41082,41084,41086,41088,41090],{"class":201,"line":1189},[199,41067,40938],{"class":205},[199,41069,33716],{"class":8113},[199,41071,895],{"class":1086},[199,41073,1925],{"class":1018},[199,41075,3461],{"class":205},[199,41077,33771],{"class":8113},[199,41079,895],{"class":1086},[199,41081,1925],{"class":1018},[199,41083,3461],{"class":205},[199,41085,33725],{"class":8113},[199,41087,895],{"class":1086},[199,41089,1025],{"class":1018},[199,41091,1594],{"class":205},[199,41093,41094],{"class":201,"line":1202},[199,41095,40967],{"class":205},[199,41097,41098],{"class":201,"line":1207},[199,41099,41100],{"class":1454},"        # 第三层\n",[199,41102,41103,41105,41108,41110],{"class":201,"line":1212},[199,41104,33687],{"class":1018},[199,41106,41107],{"class":205},".block3",[199,41109,895],{"class":1086},[199,41111,40850],{"class":205},[199,41113,41114,41116,41118,41120,41122,41124,41126,41128,41130,41132,41134,41136,41138,41140,41142,41144,41146],{"class":201,"line":1225},[199,41115,40855],{"class":205},[199,41117,33698],{"class":8113},[199,41119,895],{"class":1086},[199,41121,34912],{"class":1018},[199,41123,3461],{"class":205},[199,41125,33707],{"class":8113},[199,41127,895],{"class":1086},[199,41129,37711],{"class":1018},[199,41131,3461],{"class":205},[199,41133,33716],{"class":8113},[199,41135,895],{"class":1086},[199,41137,1920],{"class":1018},[199,41139,3461],{"class":205},[199,41141,33725],{"class":8113},[199,41143,895],{"class":1086},[199,41145,1115],{"class":1018},[199,41147,40888],{"class":205},[199,41149,41150],{"class":201,"line":1236},[199,41151,40893],{"class":205},[199,41153,41154,41156,41158,41160,41162,41164,41166,41168,41170,41172,41174,41176,41178,41180,41182,41184,41186],{"class":201,"line":1249},[199,41155,40855],{"class":205},[199,41157,33698],{"class":8113},[199,41159,895],{"class":1086},[199,41161,37711],{"class":1018},[199,41163,3461],{"class":205},[199,41165,33707],{"class":8113},[199,41167,895],{"class":1086},[199,41169,37711],{"class":1018},[199,41171,3461],{"class":205},[199,41173,33716],{"class":8113},[199,41175,895],{"class":1086},[199,41177,1920],{"class":1018},[199,41179,3461],{"class":205},[199,41181,33725],{"class":8113},[199,41183,895],{"class":1086},[199,41185,1115],{"class":1018},[199,41187,40888],{"class":205},[199,41189,41190],{"class":201,"line":1262},[199,41191,40893],{"class":205},[199,41193,41194,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224,41226],{"class":201,"line":1275},[199,41195,40855],{"class":205},[199,41197,33698],{"class":8113},[199,41199,895],{"class":1086},[199,41201,37711],{"class":1018},[199,41203,3461],{"class":205},[199,41205,33707],{"class":8113},[199,41207,895],{"class":1086},[199,41209,37711],{"class":1018},[199,41211,3461],{"class":205},[199,41213,33716],{"class":8113},[199,41215,895],{"class":1086},[199,41217,1920],{"class":1018},[199,41219,3461],{"class":205},[199,41221,33725],{"class":8113},[199,41223,895],{"class":1086},[199,41225,1115],{"class":1018},[199,41227,40888],{"class":205},[199,41229,41230],{"class":201,"line":1287},[199,41231,40893],{"class":205},[199,41233,41234,41236,41238,41240,41242,41244,41246,41248,41250,41252,41254,41256,41258],{"class":201,"line":1292},[199,41235,40938],{"class":205},[199,41237,33716],{"class":8113},[199,41239,895],{"class":1086},[199,41241,1925],{"class":1018},[199,41243,3461],{"class":205},[199,41245,33771],{"class":8113},[199,41247,895],{"class":1086},[199,41249,1925],{"class":1018},[199,41251,3461],{"class":205},[199,41253,33725],{"class":8113},[199,41255,895],{"class":1086},[199,41257,1025],{"class":1018},[199,41259,1594],{"class":205},[199,41261,41262],{"class":201,"line":1297},[199,41263,40967],{"class":205},[199,41265,41266],{"class":201,"line":1310},[199,41267,41268],{"class":1454},"        # 第四层\n",[199,41270,41271,41273,41276,41278],{"class":201,"line":1315},[199,41272,33687],{"class":1018},[199,41274,41275],{"class":205},".block4",[199,41277,895],{"class":1086},[199,41279,40850],{"class":205},[199,41281,41282,41284,41286,41288,41290,41292,41294,41296,41299,41301,41303,41305,41307,41309,41311,41313,41315],{"class":201,"line":1330},[199,41283,40855],{"class":205},[199,41285,33698],{"class":8113},[199,41287,895],{"class":1086},[199,41289,37711],{"class":1018},[199,41291,3461],{"class":205},[199,41293,33707],{"class":8113},[199,41295,895],{"class":1086},[199,41297,41298],{"class":1018},"512",[199,41300,3461],{"class":205},[199,41302,33716],{"class":8113},[199,41304,895],{"class":1086},[199,41306,1920],{"class":1018},[199,41308,3461],{"class":205},[199,41310,33725],{"class":8113},[199,41312,895],{"class":1086},[199,41314,1115],{"class":1018},[199,41316,40888],{"class":205},[199,41318,41319],{"class":201,"line":1335},[199,41320,40893],{"class":205},[199,41322,41323,41325,41327,41329,41331,41333,41335,41337,41339,41341,41343,41345,41347,41349,41351,41353,41355],{"class":201,"line":1340},[199,41324,40855],{"class":205},[199,41326,33698],{"class":8113},[199,41328,895],{"class":1086},[199,41330,41298],{"class":1018},[199,41332,3461],{"class":205},[199,41334,33707],{"class":8113},[199,41336,895],{"class":1086},[199,41338,41298],{"class":1018},[199,41340,3461],{"class":205},[199,41342,33716],{"class":8113},[199,41344,895],{"class":1086},[199,41346,1920],{"class":1018},[199,41348,3461],{"class":205},[199,41350,33725],{"class":8113},[199,41352,895],{"class":1086},[199,41354,1115],{"class":1018},[199,41356,40888],{"class":205},[199,41358,41359],{"class":201,"line":1352},[199,41360,40893],{"class":205},[199,41362,41363,41365,41367,41369,41371,41373,41375,41377,41379,41381,41383,41385,41387,41389,41391,41393,41395],{"class":201,"line":1367},[199,41364,40855],{"class":205},[199,41366,33698],{"class":8113},[199,41368,895],{"class":1086},[199,41370,41298],{"class":1018},[199,41372,3461],{"class":205},[199,41374,33707],{"class":8113},[199,41376,895],{"class":1086},[199,41378,41298],{"class":1018},[199,41380,3461],{"class":205},[199,41382,33716],{"class":8113},[199,41384,895],{"class":1086},[199,41386,1920],{"class":1018},[199,41388,3461],{"class":205},[199,41390,33725],{"class":8113},[199,41392,895],{"class":1086},[199,41394,1115],{"class":1018},[199,41396,40888],{"class":205},[199,41398,41399],{"class":201,"line":1381},[199,41400,40893],{"class":205},[199,41402,41403,41405,41407,41409,41411,41413,41415,41417,41419,41421,41423,41425,41427],{"class":201,"line":1396},[199,41404,40938],{"class":205},[199,41406,33716],{"class":8113},[199,41408,895],{"class":1086},[199,41410,1925],{"class":1018},[199,41412,3461],{"class":205},[199,41414,33771],{"class":8113},[199,41416,895],{"class":1086},[199,41418,1925],{"class":1018},[199,41420,3461],{"class":205},[199,41422,33725],{"class":8113},[199,41424,895],{"class":1086},[199,41426,1025],{"class":1018},[199,41428,1594],{"class":205},[199,41430,41431],{"class":201,"line":1401},[199,41432,40967],{"class":205},[199,41434,41435],{"class":201,"line":1411},[199,41436,41437],{"class":1454},"        # 第五层\n",[199,41439,41440,41442,41445,41447],{"class":201,"line":1421},[199,41441,33687],{"class":1018},[199,41443,41444],{"class":205},".block5",[199,41446,895],{"class":1086},[199,41448,40850],{"class":205},[199,41450,41451,41453,41455,41457,41459,41461,41463,41465,41467,41469,41471,41473,41475,41477,41479,41481,41483],{"class":201,"line":1426},[199,41452,40855],{"class":205},[199,41454,33698],{"class":8113},[199,41456,895],{"class":1086},[199,41458,41298],{"class":1018},[199,41460,3461],{"class":205},[199,41462,33707],{"class":8113},[199,41464,895],{"class":1086},[199,41466,41298],{"class":1018},[199,41468,3461],{"class":205},[199,41470,33716],{"class":8113},[199,41472,895],{"class":1086},[199,41474,1920],{"class":1018},[199,41476,3461],{"class":205},[199,41478,33725],{"class":8113},[199,41480,895],{"class":1086},[199,41482,1115],{"class":1018},[199,41484,40888],{"class":205},[199,41486,41487],{"class":201,"line":1436},[199,41488,40893],{"class":205},[199,41490,41491,41493,41495,41497,41499,41501,41503,41505,41507,41509,41511,41513,41515,41517,41519,41521,41523],{"class":201,"line":1441},[199,41492,40855],{"class":205},[199,41494,33698],{"class":8113},[199,41496,895],{"class":1086},[199,41498,41298],{"class":1018},[199,41500,3461],{"class":205},[199,41502,33707],{"class":8113},[199,41504,895],{"class":1086},[199,41506,41298],{"class":1018},[199,41508,3461],{"class":205},[199,41510,33716],{"class":8113},[199,41512,895],{"class":1086},[199,41514,1920],{"class":1018},[199,41516,3461],{"class":205},[199,41518,33725],{"class":8113},[199,41520,895],{"class":1086},[199,41522,1115],{"class":1018},[199,41524,40888],{"class":205},[199,41526,41527],{"class":201,"line":1451},[199,41528,40893],{"class":205},[199,41530,41531,41533,41535,41537,41539,41541,41543,41545,41547,41549,41551,41553,41555,41557,41559,41561,41563],{"class":201,"line":1458},[199,41532,40855],{"class":205},[199,41534,33698],{"class":8113},[199,41536,895],{"class":1086},[199,41538,41298],{"class":1018},[199,41540,3461],{"class":205},[199,41542,33707],{"class":8113},[199,41544,895],{"class":1086},[199,41546,41298],{"class":1018},[199,41548,3461],{"class":205},[199,41550,33716],{"class":8113},[199,41552,895],{"class":1086},[199,41554,1920],{"class":1018},[199,41556,3461],{"class":205},[199,41558,33725],{"class":8113},[199,41560,895],{"class":1086},[199,41562,1115],{"class":1018},[199,41564,40888],{"class":205},[199,41566,41567],{"class":201,"line":1464},[199,41568,40893],{"class":205},[199,41570,41571,41573,41575,41577,41579,41581,41583,41585,41587,41589,41591,41593,41595],{"class":201,"line":1478},[199,41572,40938],{"class":205},[199,41574,33716],{"class":8113},[199,41576,895],{"class":1086},[199,41578,1925],{"class":1018},[199,41580,3461],{"class":205},[199,41582,33771],{"class":8113},[199,41584,895],{"class":1086},[199,41586,1925],{"class":1018},[199,41588,3461],{"class":205},[199,41590,33725],{"class":8113},[199,41592,895],{"class":1086},[199,41594,1025],{"class":1018},[199,41596,1594],{"class":205},[199,41598,41599],{"class":201,"line":1516},[199,41600,40967],{"class":205},[199,41602,41603],{"class":201,"line":1522},[199,41604,41605],{"class":1454},"        # 全连接层\n",[199,41607,41608,41610,41613,41615],{"class":201,"line":1528},[199,41609,33687],{"class":1018},[199,41611,41612],{"class":205},".block6",[199,41614,895],{"class":1086},[199,41616,40850],{"class":205},[199,41618,41619],{"class":201,"line":1557},[199,41620,41621],{"class":1454},"            # 平展操作\n",[199,41623,41624],{"class":201,"line":1563},[199,41625,41626],{"class":1454},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[199,41628,41629],{"class":201,"line":1568},[199,41630,41631],{"class":205},"            nn.Flatten(),\n",[199,41633,41634,41637,41639,41641,41643,41645,41647,41649,41651],{"class":201,"line":1574},[199,41635,41636],{"class":205},"            nn.Linear(",[199,41638,3452],{"class":1018},[199,41640,3537],{"class":1086},[199,41642,3452],{"class":1018},[199,41644,3537],{"class":1086},[199,41646,41298],{"class":1018},[199,41648,3461],{"class":205},[199,41650,37711],{"class":1018},[199,41652,40888],{"class":205},[199,41654,41655],{"class":201,"line":1580},[199,41656,40893],{"class":205},[199,41658,41659,41661,41663,41665,41667],{"class":201,"line":1597},[199,41660,41636],{"class":205},[199,41662,37711],{"class":1018},[199,41664,3461],{"class":205},[199,41666,34912],{"class":1018},[199,41668,40888],{"class":205},[199,41670,41671],{"class":201,"line":1602},[199,41672,40893],{"class":205},[199,41674,41675,41677,41679,41681,41683],{"class":201,"line":1608},[199,41676,41636],{"class":205},[199,41678,34912],{"class":1018},[199,41680,3461],{"class":205},[199,41682,3528],{"class":1018},[199,41684,1594],{"class":205},[199,41686,41687],{"class":201,"line":1640},[199,41688,40967],{"class":205},[199,41690,41691],{"class":201,"line":1653},[199,41692,907],{"emptyLinePlaceholder":906},[199,41694,41695],{"class":201,"line":1673},[199,41696,41697],{"class":1454},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[199,41699,41700],{"class":201,"line":1690},[199,41701,41702],{"class":1454},"        # 循环遍历模型\n",[199,41704,41705,41707,41710,41712,41715],{"class":201,"line":1706},[199,41706,1481],{"class":1086},[199,41708,41709],{"class":205}," m ",[199,41711,28886],{"class":1086},[199,41713,41714],{"class":1018}," self",[199,41716,41717],{"class":205},".modules():\n",[199,41719,41720],{"class":201,"line":1712},[199,41721,41722],{"class":1454},"            # print(m)\n",[199,41724,41725,41727,41730],{"class":201,"line":1720},[199,41726,7539],{"class":1086},[199,41728,41729],{"class":1018}," isinstance",[199,41731,41732],{"class":205},"(m,nn.Conv2d):\n",[199,41734,41735],{"class":201,"line":1725},[199,41736,41737],{"class":1454},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[199,41739,41740,41743,41746,41748,41751],{"class":201,"line":1731},[199,41741,41742],{"class":205},"                nn.init.kaiming_normal_(m.weight,",[199,41744,41745],{"class":8113},"nonlinearity",[199,41747,895],{"class":1086},[199,41749,41750],{"class":898},"'relu'",[199,41752,1594],{"class":205},[199,41754,41755],{"class":201,"line":1745},[199,41756,41757],{"class":1454},"                # 判断b参数是否存在\n",[199,41759,41760,41763,41766,41769,41772,41775],{"class":201,"line":1754},[199,41761,41762],{"class":1086},"                if",[199,41764,41765],{"class":205}," m.bias ",[199,41767,41768],{"class":1086},"is",[199,41770,41771],{"class":1086}," not",[199,41773,41774],{"class":1018}," None",[199,41776,6640],{"class":205},[199,41778,41779],{"class":201,"line":1763},[199,41780,41781],{"class":1454},"                    # 如果参数不存在的化初始化b=0\n",[199,41783,41784,41787,41789],{"class":201,"line":1768},[199,41785,41786],{"class":205},"                    nn.init.constant_(m.bias,",[199,41788,1025],{"class":1018},[199,41790,1594],{"class":205},[199,41792,41793],{"class":201,"line":19628},[199,41794,41795],{"class":1454},"            # 全连接层初始化\n",[199,41797,41798,41801,41803],{"class":201,"line":19641},[199,41799,41800],{"class":1086},"            elif",[199,41802,41729],{"class":1018},[199,41804,41805],{"class":205},"(m,nn.Linear):\n",[199,41807,41808],{"class":201,"line":19646},[199,41809,41810],{"class":1454},"                # 这个初始化方法是利用的是正太分布的方式\n",[199,41812,41813],{"class":201,"line":19660},[199,41814,41815],{"class":1454},"                # 均值为0，方差为0.01\n",[199,41817,41818,41821,41823,41825,41828],{"class":201,"line":19665},[199,41819,41820],{"class":205},"                nn.init.normal_(m.weight,",[199,41822,1025],{"class":1018},[199,41824,3461],{"class":205},[199,41826,41827],{"class":1018},"0.01",[199,41829,1594],{"class":205},[199,41831,41832],{"class":201,"line":19671},[199,41833,41834],{"class":1454},"                # 初始化b参数\n",[199,41836,41837,41839,41841,41843,41845,41847],{"class":201,"line":19676},[199,41838,41762],{"class":1086},[199,41840,41765],{"class":205},[199,41842,41768],{"class":1086},[199,41844,41771],{"class":1086},[199,41846,41774],{"class":1018},[199,41848,6640],{"class":205},[199,41850,41851,41853,41855],{"class":201,"line":19690},[199,41852,41786],{"class":205},[199,41854,1025],{"class":1018},[199,41856,1594],{"class":205},[199,41858,41859],{"class":201,"line":19695},[199,41860,907],{"emptyLinePlaceholder":906},[199,41862,41863],{"class":201,"line":19700},[199,41864,38006],{"class":1454},[199,41866,41867,41869,41871],{"class":201,"line":19714},[199,41868,33643],{"class":1086},[199,41870,33935],{"class":878},[199,41872,33938],{"class":205},[199,41874,41875,41877,41879,41881],{"class":201,"line":19726},[199,41876,33943],{"class":205},[199,41878,895],{"class":1086},[199,41880,33665],{"class":1018},[199,41882,41883],{"class":205},".block1(x)\n",[199,41885,41886,41888,41890,41892],{"class":201,"line":19731},[199,41887,33943],{"class":205},[199,41889,895],{"class":1086},[199,41891,33665],{"class":1018},[199,41893,41894],{"class":205},".block2(x)\n",[199,41896,41897,41899,41901,41903],{"class":201,"line":19744},[199,41898,33943],{"class":205},[199,41900,895],{"class":1086},[199,41902,33665],{"class":1018},[199,41904,41905],{"class":205},".block3(x)\n",[199,41907,41908,41910,41912,41914],{"class":201,"line":19749},[199,41909,33943],{"class":205},[199,41911,895],{"class":1086},[199,41913,33665],{"class":1018},[199,41915,41916],{"class":205},".block4(x)\n",[199,41918,41919,41921,41923,41925],{"class":201,"line":19754},[199,41920,33943],{"class":205},[199,41922,895],{"class":1086},[199,41924,33665],{"class":1018},[199,41926,41927],{"class":205},".block5(x)\n",[199,41929,41930,41932,41934,41936],{"class":201,"line":19759},[199,41931,33943],{"class":205},[199,41933,895],{"class":1086},[199,41935,33665],{"class":1018},[199,41937,41938],{"class":205},".block6(x)\n",[199,41940,41941,41943],{"class":201,"line":19772},[199,41942,17612],{"class":1086},[199,41944,34051],{"class":205},[199,41946,41947],{"class":201,"line":19777},[199,41948,907],{"emptyLinePlaceholder":906},[199,41950,41951],{"class":201,"line":35475},[199,41952,41953],{"class":1454},"# 验证模型\n",[199,41955,41956,41958,41960,41962,41965],{"class":201,"line":35481},[199,41957,4470],{"class":1086},[199,41959,34062],{"class":1018},[199,41961,5853],{"class":1086},[199,41963,41964],{"class":898},"'__main__'",[199,41966,6640],{"class":205},[199,41968,41969,41971,41973,41975,41977,41979,41981,41983,41985],{"class":201,"line":35487},[199,41970,34079],{"class":205},[199,41972,895],{"class":1086},[199,41974,33294],{"class":205},[199,41976,34086],{"class":898},[199,41978,4629],{"class":1086},[199,41980,34091],{"class":205},[199,41982,4626],{"class":1086},[199,41984,33319],{"class":898},[199,41986,1594],{"class":205},[199,41988,41989,41991],{"class":201,"line":35493},[199,41990,34141],{"class":1018},[199,41992,33328],{"class":205},[199,41994,41995,41997,41999],{"class":201,"line":35499},[199,41996,34131],{"class":205},[199,41998,895],{"class":1086},[199,42000,42001],{"class":205},"VGG16().to(device)\n",[199,42003,42004,42006,42008,42010,42012,42014,42016,42018],{"class":201,"line":35510},[199,42005,34141],{"class":1018},[199,42007,34144],{"class":205},[199,42009,1115],{"class":1018},[199,42011,3461],{"class":205},[199,42013,34343],{"class":1018},[199,42015,3461],{"class":205},[199,42017,34343],{"class":1018},[199,42019,34157],{"class":205},[24,42021,42022],{"start":36},[27,42023,42024],{},"训练代码",[31,42026,42027],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[31,42029,42030],{},"解决方式:",[31,42032,42033],{},"①权重初始化",[190,42035,42037],{"className":33221,"code":42036,"language":33223,"meta":57,"style":57},"# 权重初始化,保证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",[196,42038,42039,42044,42049,42061,42066,42074,42079,42092,42097,42111,42116,42125,42130,42139,42144,42149,42162,42167,42181],{"__ignoreMap":57},[199,42040,42041],{"class":201,"line":202},[199,42042,42043],{"class":1454},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[199,42045,42046],{"class":201,"line":36},[199,42047,42048],{"class":1454},"# 循环遍历模型\n",[199,42050,42051,42053,42055,42057,42059],{"class":201,"line":73},[199,42052,5929],{"class":1086},[199,42054,41709],{"class":205},[199,42056,28886],{"class":1086},[199,42058,41714],{"class":1018},[199,42060,41717],{"class":205},[199,42062,42063],{"class":201,"line":333},[199,42064,42065],{"class":1454},"    # print(m)\n",[199,42067,42068,42070,42072],{"class":201,"line":227},[199,42069,6005],{"class":1086},[199,42071,41729],{"class":1018},[199,42073,41732],{"class":205},[199,42075,42076],{"class":201,"line":238},[199,42077,42078],{"class":1454},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[199,42080,42081,42084,42086,42088,42090],{"class":201,"line":252},[199,42082,42083],{"class":205},"        nn.init.kaiming_normal_(m.weight,",[199,42085,41745],{"class":8113},[199,42087,895],{"class":1086},[199,42089,41750],{"class":898},[199,42091,1594],{"class":205},[199,42093,42094],{"class":201,"line":388},[199,42095,42096],{"class":1454},"        # 判断b参数是否存在\n",[199,42098,42099,42101,42103,42105,42107,42109],{"class":201,"line":415},[199,42100,2017],{"class":1086},[199,42102,41765],{"class":205},[199,42104,41768],{"class":1086},[199,42106,41771],{"class":1086},[199,42108,41774],{"class":1018},[199,42110,6640],{"class":205},[199,42112,42113],{"class":201,"line":426},[199,42114,42115],{"class":1454},"            # 如果参数不存在的化初始化b=0\n",[199,42117,42118,42121,42123],{"class":201,"line":1015},[199,42119,42120],{"class":205},"            nn.init.constant_(m.bias,",[199,42122,1025],{"class":1018},[199,42124,1594],{"class":205},[199,42126,42127],{"class":201,"line":1031},[199,42128,42129],{"class":1454},"    # 全连接层初始化\n",[199,42131,42132,42135,42137],{"class":201,"line":1043},[199,42133,42134],{"class":1086},"    elif",[199,42136,41729],{"class":1018},[199,42138,41805],{"class":205},[199,42140,42141],{"class":201,"line":1049},[199,42142,42143],{"class":1454},"        # 这个初始化方法是利用的是正太分布的方式\n",[199,42145,42146],{"class":201,"line":1054},[199,42147,42148],{"class":1454},"        # 均值为0，方差为0.01\n",[199,42150,42151,42154,42156,42158,42160],{"class":201,"line":1062},[199,42152,42153],{"class":205},"        nn.init.normal_(m.weight,",[199,42155,1025],{"class":1018},[199,42157,3461],{"class":205},[199,42159,41827],{"class":1018},[199,42161,1594],{"class":205},[199,42163,42164],{"class":201,"line":1075},[199,42165,42166],{"class":1454},"        # 初始化b参数\n",[199,42168,42169,42171,42173,42175,42177,42179],{"class":201,"line":1092},[199,42170,2017],{"class":1086},[199,42172,41765],{"class":205},[199,42174,41768],{"class":1086},[199,42176,41771],{"class":1086},[199,42178,41774],{"class":1018},[199,42180,6640],{"class":205},[199,42182,42183,42185,42187],{"class":201,"line":1107},[199,42184,42120],{"class":205},[199,42186,1025],{"class":1018},[199,42188,1594],{"class":205},[31,42190,42191],{},"②尽可能地增加批次",[31,42193,42194],{},"训练完整代码：",[190,42196,42197],{"className":33221,"code":40740,"language":33223,"meta":57,"style":57},[196,42198,42199,42205,42215,42225,42235,42239,42255,42263,42281,42285,42289,42299,42335,42339,42375,42379,42407,42411,42415,42425,42461,42465,42501,42505,42533,42537,42541,42551,42587,42591,42627,42631,42667,42671,42699,42703,42707,42717,42753,42757,42793,42797,42833,42837,42865,42869,42873,42883,42919,42923,42959,42963,42999,43003,43031,43035,43039,43049,43053,43057,43061,43081,43085,43097,43101,43113,43117,43121,43125,43129,43141,43145,43153,43157,43169,43173,43187,43191,43199,43203,43211,43215,43219,43231,43235,43249,43257,43261,43265,43273,43283,43293,43303,43313,43323,43333,43339,43343,43347,43359,43379,43385,43393],{"__ignoreMap":57},[199,42200,42201,42203],{"class":201,"line":202},[199,42202,33235],{"class":1086},[199,42204,33238],{"class":205},[199,42206,42207,42209,42211,42213],{"class":201,"line":36},[199,42208,33579],{"class":1086},[199,42210,40755],{"class":205},[199,42212,33235],{"class":1086},[199,42214,40760],{"class":205},[199,42216,42217,42219,42221,42223],{"class":201,"line":73},[199,42218,33579],{"class":1086},[199,42220,33582],{"class":205},[199,42222,33235],{"class":1086},[199,42224,33587],{"class":205},[199,42226,42227,42229,42231,42233],{"class":201,"line":333},[199,42228,33579],{"class":1086},[199,42230,33599],{"class":205},[199,42232,33235],{"class":1086},[199,42234,33604],{"class":205},[199,42236,42237],{"class":201,"line":227},[199,42238,907],{"emptyLinePlaceholder":906},[199,42240,42241,42243,42245,42247,42249,42251,42253],{"class":201,"line":238},[199,42242,17554],{"class":1086},[199,42244,40791],{"class":878},[199,42246,1537],{"class":205},[199,42248,33620],{"class":878},[199,42250,3638],{"class":205},[199,42252,33625],{"class":878},[199,42254,33628],{"class":205},[199,42256,42257,42259,42261],{"class":201,"line":252},[199,42258,33643],{"class":1086},[199,42260,33646],{"class":1018},[199,42262,33649],{"class":205},[199,42264,42265,42267,42269,42271,42273,42275,42277,42279],{"class":201,"line":388},[199,42266,33659],{"class":1018},[199,42268,1537],{"class":205},[199,42270,40818],{"class":1018},[199,42272,1912],{"class":205},[199,42274,33665],{"class":1018},[199,42276,33668],{"class":205},[199,42278,33671],{"class":1018},[199,42280,4892],{"class":205},[199,42282,42283],{"class":201,"line":415},[199,42284,40833],{"class":1454},[199,42286,42287],{"class":201,"line":426},[199,42288,40838],{"class":1454},[199,42290,42291,42293,42295,42297],{"class":201,"line":1015},[199,42292,33687],{"class":1018},[199,42294,40845],{"class":205},[199,42296,895],{"class":1086},[199,42298,40850],{"class":205},[199,42300,42301,42303,42305,42307,42309,42311,42313,42315,42317,42319,42321,42323,42325,42327,42329,42331,42333],{"class":201,"line":1031},[199,42302,40855],{"class":205},[199,42304,33698],{"class":8113},[199,42306,895],{"class":1086},[199,42308,1115],{"class":1018},[199,42310,3461],{"class":205},[199,42312,33707],{"class":8113},[199,42314,895],{"class":1086},[199,42316,3291],{"class":1018},[199,42318,3461],{"class":205},[199,42320,33716],{"class":8113},[199,42322,895],{"class":1086},[199,42324,1920],{"class":1018},[199,42326,3461],{"class":205},[199,42328,33725],{"class":8113},[199,42330,895],{"class":1086},[199,42332,1115],{"class":1018},[199,42334,40888],{"class":205},[199,42336,42337],{"class":201,"line":1043},[199,42338,40893],{"class":205},[199,42340,42341,42343,42345,42347,42349,42351,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373],{"class":201,"line":1049},[199,42342,40855],{"class":205},[199,42344,33698],{"class":8113},[199,42346,895],{"class":1086},[199,42348,3291],{"class":1018},[199,42350,3461],{"class":205},[199,42352,33707],{"class":8113},[199,42354,895],{"class":1086},[199,42356,3291],{"class":1018},[199,42358,3461],{"class":205},[199,42360,33716],{"class":8113},[199,42362,895],{"class":1086},[199,42364,1920],{"class":1018},[199,42366,3461],{"class":205},[199,42368,33725],{"class":8113},[199,42370,895],{"class":1086},[199,42372,1115],{"class":1018},[199,42374,40888],{"class":205},[199,42376,42377],{"class":201,"line":1054},[199,42378,40893],{"class":205},[199,42380,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405],{"class":201,"line":1062},[199,42382,40938],{"class":205},[199,42384,33716],{"class":8113},[199,42386,895],{"class":1086},[199,42388,1925],{"class":1018},[199,42390,3461],{"class":205},[199,42392,33771],{"class":8113},[199,42394,895],{"class":1086},[199,42396,1925],{"class":1018},[199,42398,3461],{"class":205},[199,42400,33725],{"class":8113},[199,42402,895],{"class":1086},[199,42404,1025],{"class":1018},[199,42406,1594],{"class":205},[199,42408,42409],{"class":201,"line":1075},[199,42410,40967],{"class":205},[199,42412,42413],{"class":201,"line":1092},[199,42414,40972],{"class":1454},[199,42416,42417,42419,42421,42423],{"class":201,"line":1107},[199,42418,33687],{"class":1018},[199,42420,40979],{"class":205},[199,42422,895],{"class":1086},[199,42424,40850],{"class":205},[199,42426,42427,42429,42431,42433,42435,42437,42439,42441,42443,42445,42447,42449,42451,42453,42455,42457,42459],{"class":201,"line":1128},[199,42428,40855],{"class":205},[199,42430,33698],{"class":8113},[199,42432,895],{"class":1086},[199,42434,3291],{"class":1018},[199,42436,3461],{"class":205},[199,42438,33707],{"class":8113},[199,42440,895],{"class":1086},[199,42442,34912],{"class":1018},[199,42444,3461],{"class":205},[199,42446,33716],{"class":8113},[199,42448,895],{"class":1086},[199,42450,1920],{"class":1018},[199,42452,3461],{"class":205},[199,42454,33725],{"class":8113},[199,42456,895],{"class":1086},[199,42458,1115],{"class":1018},[199,42460,40888],{"class":205},[199,42462,42463],{"class":201,"line":1146},[199,42464,40893],{"class":205},[199,42466,42467,42469,42471,42473,42475,42477,42479,42481,42483,42485,42487,42489,42491,42493,42495,42497,42499],{"class":201,"line":1163},[199,42468,40855],{"class":205},[199,42470,33698],{"class":8113},[199,42472,895],{"class":1086},[199,42474,34912],{"class":1018},[199,42476,3461],{"class":205},[199,42478,33707],{"class":8113},[199,42480,895],{"class":1086},[199,42482,34912],{"class":1018},[199,42484,3461],{"class":205},[199,42486,33716],{"class":8113},[199,42488,895],{"class":1086},[199,42490,1920],{"class":1018},[199,42492,3461],{"class":205},[199,42494,33725],{"class":8113},[199,42496,895],{"class":1086},[199,42498,1115],{"class":1018},[199,42500,40888],{"class":205},[199,42502,42503],{"class":201,"line":1176},[199,42504,40893],{"class":205},[199,42506,42507,42509,42511,42513,42515,42517,42519,42521,42523,42525,42527,42529,42531],{"class":201,"line":1189},[199,42508,40938],{"class":205},[199,42510,33716],{"class":8113},[199,42512,895],{"class":1086},[199,42514,1925],{"class":1018},[199,42516,3461],{"class":205},[199,42518,33771],{"class":8113},[199,42520,895],{"class":1086},[199,42522,1925],{"class":1018},[199,42524,3461],{"class":205},[199,42526,33725],{"class":8113},[199,42528,895],{"class":1086},[199,42530,1025],{"class":1018},[199,42532,1594],{"class":205},[199,42534,42535],{"class":201,"line":1202},[199,42536,40967],{"class":205},[199,42538,42539],{"class":201,"line":1207},[199,42540,41100],{"class":1454},[199,42542,42543,42545,42547,42549],{"class":201,"line":1212},[199,42544,33687],{"class":1018},[199,42546,41107],{"class":205},[199,42548,895],{"class":1086},[199,42550,40850],{"class":205},[199,42552,42553,42555,42557,42559,42561,42563,42565,42567,42569,42571,42573,42575,42577,42579,42581,42583,42585],{"class":201,"line":1225},[199,42554,40855],{"class":205},[199,42556,33698],{"class":8113},[199,42558,895],{"class":1086},[199,42560,34912],{"class":1018},[199,42562,3461],{"class":205},[199,42564,33707],{"class":8113},[199,42566,895],{"class":1086},[199,42568,37711],{"class":1018},[199,42570,3461],{"class":205},[199,42572,33716],{"class":8113},[199,42574,895],{"class":1086},[199,42576,1920],{"class":1018},[199,42578,3461],{"class":205},[199,42580,33725],{"class":8113},[199,42582,895],{"class":1086},[199,42584,1115],{"class":1018},[199,42586,40888],{"class":205},[199,42588,42589],{"class":201,"line":1236},[199,42590,40893],{"class":205},[199,42592,42593,42595,42597,42599,42601,42603,42605,42607,42609,42611,42613,42615,42617,42619,42621,42623,42625],{"class":201,"line":1249},[199,42594,40855],{"class":205},[199,42596,33698],{"class":8113},[199,42598,895],{"class":1086},[199,42600,37711],{"class":1018},[199,42602,3461],{"class":205},[199,42604,33707],{"class":8113},[199,42606,895],{"class":1086},[199,42608,37711],{"class":1018},[199,42610,3461],{"class":205},[199,42612,33716],{"class":8113},[199,42614,895],{"class":1086},[199,42616,1920],{"class":1018},[199,42618,3461],{"class":205},[199,42620,33725],{"class":8113},[199,42622,895],{"class":1086},[199,42624,1115],{"class":1018},[199,42626,40888],{"class":205},[199,42628,42629],{"class":201,"line":1262},[199,42630,40893],{"class":205},[199,42632,42633,42635,42637,42639,42641,42643,42645,42647,42649,42651,42653,42655,42657,42659,42661,42663,42665],{"class":201,"line":1275},[199,42634,40855],{"class":205},[199,42636,33698],{"class":8113},[199,42638,895],{"class":1086},[199,42640,37711],{"class":1018},[199,42642,3461],{"class":205},[199,42644,33707],{"class":8113},[199,42646,895],{"class":1086},[199,42648,37711],{"class":1018},[199,42650,3461],{"class":205},[199,42652,33716],{"class":8113},[199,42654,895],{"class":1086},[199,42656,1920],{"class":1018},[199,42658,3461],{"class":205},[199,42660,33725],{"class":8113},[199,42662,895],{"class":1086},[199,42664,1115],{"class":1018},[199,42666,40888],{"class":205},[199,42668,42669],{"class":201,"line":1287},[199,42670,40893],{"class":205},[199,42672,42673,42675,42677,42679,42681,42683,42685,42687,42689,42691,42693,42695,42697],{"class":201,"line":1292},[199,42674,40938],{"class":205},[199,42676,33716],{"class":8113},[199,42678,895],{"class":1086},[199,42680,1925],{"class":1018},[199,42682,3461],{"class":205},[199,42684,33771],{"class":8113},[199,42686,895],{"class":1086},[199,42688,1925],{"class":1018},[199,42690,3461],{"class":205},[199,42692,33725],{"class":8113},[199,42694,895],{"class":1086},[199,42696,1025],{"class":1018},[199,42698,1594],{"class":205},[199,42700,42701],{"class":201,"line":1297},[199,42702,40967],{"class":205},[199,42704,42705],{"class":201,"line":1310},[199,42706,41268],{"class":1454},[199,42708,42709,42711,42713,42715],{"class":201,"line":1315},[199,42710,33687],{"class":1018},[199,42712,41275],{"class":205},[199,42714,895],{"class":1086},[199,42716,40850],{"class":205},[199,42718,42719,42721,42723,42725,42727,42729,42731,42733,42735,42737,42739,42741,42743,42745,42747,42749,42751],{"class":201,"line":1330},[199,42720,40855],{"class":205},[199,42722,33698],{"class":8113},[199,42724,895],{"class":1086},[199,42726,37711],{"class":1018},[199,42728,3461],{"class":205},[199,42730,33707],{"class":8113},[199,42732,895],{"class":1086},[199,42734,41298],{"class":1018},[199,42736,3461],{"class":205},[199,42738,33716],{"class":8113},[199,42740,895],{"class":1086},[199,42742,1920],{"class":1018},[199,42744,3461],{"class":205},[199,42746,33725],{"class":8113},[199,42748,895],{"class":1086},[199,42750,1115],{"class":1018},[199,42752,40888],{"class":205},[199,42754,42755],{"class":201,"line":1335},[199,42756,40893],{"class":205},[199,42758,42759,42761,42763,42765,42767,42769,42771,42773,42775,42777,42779,42781,42783,42785,42787,42789,42791],{"class":201,"line":1340},[199,42760,40855],{"class":205},[199,42762,33698],{"class":8113},[199,42764,895],{"class":1086},[199,42766,41298],{"class":1018},[199,42768,3461],{"class":205},[199,42770,33707],{"class":8113},[199,42772,895],{"class":1086},[199,42774,41298],{"class":1018},[199,42776,3461],{"class":205},[199,42778,33716],{"class":8113},[199,42780,895],{"class":1086},[199,42782,1920],{"class":1018},[199,42784,3461],{"class":205},[199,42786,33725],{"class":8113},[199,42788,895],{"class":1086},[199,42790,1115],{"class":1018},[199,42792,40888],{"class":205},[199,42794,42795],{"class":201,"line":1352},[199,42796,40893],{"class":205},[199,42798,42799,42801,42803,42805,42807,42809,42811,42813,42815,42817,42819,42821,42823,42825,42827,42829,42831],{"class":201,"line":1367},[199,42800,40855],{"class":205},[199,42802,33698],{"class":8113},[199,42804,895],{"class":1086},[199,42806,41298],{"class":1018},[199,42808,3461],{"class":205},[199,42810,33707],{"class":8113},[199,42812,895],{"class":1086},[199,42814,41298],{"class":1018},[199,42816,3461],{"class":205},[199,42818,33716],{"class":8113},[199,42820,895],{"class":1086},[199,42822,1920],{"class":1018},[199,42824,3461],{"class":205},[199,42826,33725],{"class":8113},[199,42828,895],{"class":1086},[199,42830,1115],{"class":1018},[199,42832,40888],{"class":205},[199,42834,42835],{"class":201,"line":1381},[199,42836,40893],{"class":205},[199,42838,42839,42841,42843,42845,42847,42849,42851,42853,42855,42857,42859,42861,42863],{"class":201,"line":1396},[199,42840,40938],{"class":205},[199,42842,33716],{"class":8113},[199,42844,895],{"class":1086},[199,42846,1925],{"class":1018},[199,42848,3461],{"class":205},[199,42850,33771],{"class":8113},[199,42852,895],{"class":1086},[199,42854,1925],{"class":1018},[199,42856,3461],{"class":205},[199,42858,33725],{"class":8113},[199,42860,895],{"class":1086},[199,42862,1025],{"class":1018},[199,42864,1594],{"class":205},[199,42866,42867],{"class":201,"line":1401},[199,42868,40967],{"class":205},[199,42870,42871],{"class":201,"line":1411},[199,42872,41437],{"class":1454},[199,42874,42875,42877,42879,42881],{"class":201,"line":1421},[199,42876,33687],{"class":1018},[199,42878,41444],{"class":205},[199,42880,895],{"class":1086},[199,42882,40850],{"class":205},[199,42884,42885,42887,42889,42891,42893,42895,42897,42899,42901,42903,42905,42907,42909,42911,42913,42915,42917],{"class":201,"line":1426},[199,42886,40855],{"class":205},[199,42888,33698],{"class":8113},[199,42890,895],{"class":1086},[199,42892,41298],{"class":1018},[199,42894,3461],{"class":205},[199,42896,33707],{"class":8113},[199,42898,895],{"class":1086},[199,42900,41298],{"class":1018},[199,42902,3461],{"class":205},[199,42904,33716],{"class":8113},[199,42906,895],{"class":1086},[199,42908,1920],{"class":1018},[199,42910,3461],{"class":205},[199,42912,33725],{"class":8113},[199,42914,895],{"class":1086},[199,42916,1115],{"class":1018},[199,42918,40888],{"class":205},[199,42920,42921],{"class":201,"line":1436},[199,42922,40893],{"class":205},[199,42924,42925,42927,42929,42931,42933,42935,42937,42939,42941,42943,42945,42947,42949,42951,42953,42955,42957],{"class":201,"line":1441},[199,42926,40855],{"class":205},[199,42928,33698],{"class":8113},[199,42930,895],{"class":1086},[199,42932,41298],{"class":1018},[199,42934,3461],{"class":205},[199,42936,33707],{"class":8113},[199,42938,895],{"class":1086},[199,42940,41298],{"class":1018},[199,42942,3461],{"class":205},[199,42944,33716],{"class":8113},[199,42946,895],{"class":1086},[199,42948,1920],{"class":1018},[199,42950,3461],{"class":205},[199,42952,33725],{"class":8113},[199,42954,895],{"class":1086},[199,42956,1115],{"class":1018},[199,42958,40888],{"class":205},[199,42960,42961],{"class":201,"line":1451},[199,42962,40893],{"class":205},[199,42964,42965,42967,42969,42971,42973,42975,42977,42979,42981,42983,42985,42987,42989,42991,42993,42995,42997],{"class":201,"line":1458},[199,42966,40855],{"class":205},[199,42968,33698],{"class":8113},[199,42970,895],{"class":1086},[199,42972,41298],{"class":1018},[199,42974,3461],{"class":205},[199,42976,33707],{"class":8113},[199,42978,895],{"class":1086},[199,42980,41298],{"class":1018},[199,42982,3461],{"class":205},[199,42984,33716],{"class":8113},[199,42986,895],{"class":1086},[199,42988,1920],{"class":1018},[199,42990,3461],{"class":205},[199,42992,33725],{"class":8113},[199,42994,895],{"class":1086},[199,42996,1115],{"class":1018},[199,42998,40888],{"class":205},[199,43000,43001],{"class":201,"line":1464},[199,43002,40893],{"class":205},[199,43004,43005,43007,43009,43011,43013,43015,43017,43019,43021,43023,43025,43027,43029],{"class":201,"line":1478},[199,43006,40938],{"class":205},[199,43008,33716],{"class":8113},[199,43010,895],{"class":1086},[199,43012,1925],{"class":1018},[199,43014,3461],{"class":205},[199,43016,33771],{"class":8113},[199,43018,895],{"class":1086},[199,43020,1925],{"class":1018},[199,43022,3461],{"class":205},[199,43024,33725],{"class":8113},[199,43026,895],{"class":1086},[199,43028,1025],{"class":1018},[199,43030,1594],{"class":205},[199,43032,43033],{"class":201,"line":1516},[199,43034,40967],{"class":205},[199,43036,43037],{"class":201,"line":1522},[199,43038,41605],{"class":1454},[199,43040,43041,43043,43045,43047],{"class":201,"line":1528},[199,43042,33687],{"class":1018},[199,43044,41612],{"class":205},[199,43046,895],{"class":1086},[199,43048,40850],{"class":205},[199,43050,43051],{"class":201,"line":1557},[199,43052,41621],{"class":1454},[199,43054,43055],{"class":201,"line":1563},[199,43056,41626],{"class":1454},[199,43058,43059],{"class":201,"line":1568},[199,43060,41631],{"class":205},[199,43062,43063,43065,43067,43069,43071,43073,43075,43077,43079],{"class":201,"line":1574},[199,43064,41636],{"class":205},[199,43066,3452],{"class":1018},[199,43068,3537],{"class":1086},[199,43070,3452],{"class":1018},[199,43072,3537],{"class":1086},[199,43074,41298],{"class":1018},[199,43076,3461],{"class":205},[199,43078,37711],{"class":1018},[199,43080,40888],{"class":205},[199,43082,43083],{"class":201,"line":1580},[199,43084,40893],{"class":205},[199,43086,43087,43089,43091,43093,43095],{"class":201,"line":1597},[199,43088,41636],{"class":205},[199,43090,37711],{"class":1018},[199,43092,3461],{"class":205},[199,43094,34912],{"class":1018},[199,43096,40888],{"class":205},[199,43098,43099],{"class":201,"line":1602},[199,43100,40893],{"class":205},[199,43102,43103,43105,43107,43109,43111],{"class":201,"line":1608},[199,43104,41636],{"class":205},[199,43106,34912],{"class":1018},[199,43108,3461],{"class":205},[199,43110,3528],{"class":1018},[199,43112,1594],{"class":205},[199,43114,43115],{"class":201,"line":1640},[199,43116,40967],{"class":205},[199,43118,43119],{"class":201,"line":1653},[199,43120,907],{"emptyLinePlaceholder":906},[199,43122,43123],{"class":201,"line":1673},[199,43124,41697],{"class":1454},[199,43126,43127],{"class":201,"line":1690},[199,43128,41702],{"class":1454},[199,43130,43131,43133,43135,43137,43139],{"class":201,"line":1706},[199,43132,1481],{"class":1086},[199,43134,41709],{"class":205},[199,43136,28886],{"class":1086},[199,43138,41714],{"class":1018},[199,43140,41717],{"class":205},[199,43142,43143],{"class":201,"line":1712},[199,43144,41722],{"class":1454},[199,43146,43147,43149,43151],{"class":201,"line":1720},[199,43148,7539],{"class":1086},[199,43150,41729],{"class":1018},[199,43152,41732],{"class":205},[199,43154,43155],{"class":201,"line":1725},[199,43156,41737],{"class":1454},[199,43158,43159,43161,43163,43165,43167],{"class":201,"line":1731},[199,43160,41742],{"class":205},[199,43162,41745],{"class":8113},[199,43164,895],{"class":1086},[199,43166,41750],{"class":898},[199,43168,1594],{"class":205},[199,43170,43171],{"class":201,"line":1745},[199,43172,41757],{"class":1454},[199,43174,43175,43177,43179,43181,43183,43185],{"class":201,"line":1754},[199,43176,41762],{"class":1086},[199,43178,41765],{"class":205},[199,43180,41768],{"class":1086},[199,43182,41771],{"class":1086},[199,43184,41774],{"class":1018},[199,43186,6640],{"class":205},[199,43188,43189],{"class":201,"line":1763},[199,43190,41781],{"class":1454},[199,43192,43193,43195,43197],{"class":201,"line":1768},[199,43194,41786],{"class":205},[199,43196,1025],{"class":1018},[199,43198,1594],{"class":205},[199,43200,43201],{"class":201,"line":19628},[199,43202,41795],{"class":1454},[199,43204,43205,43207,43209],{"class":201,"line":19641},[199,43206,41800],{"class":1086},[199,43208,41729],{"class":1018},[199,43210,41805],{"class":205},[199,43212,43213],{"class":201,"line":19646},[199,43214,41810],{"class":1454},[199,43216,43217],{"class":201,"line":19660},[199,43218,41815],{"class":1454},[199,43220,43221,43223,43225,43227,43229],{"class":201,"line":19665},[199,43222,41820],{"class":205},[199,43224,1025],{"class":1018},[199,43226,3461],{"class":205},[199,43228,41827],{"class":1018},[199,43230,1594],{"class":205},[199,43232,43233],{"class":201,"line":19671},[199,43234,41834],{"class":1454},[199,43236,43237,43239,43241,43243,43245,43247],{"class":201,"line":19676},[199,43238,41762],{"class":1086},[199,43240,41765],{"class":205},[199,43242,41768],{"class":1086},[199,43244,41771],{"class":1086},[199,43246,41774],{"class":1018},[199,43248,6640],{"class":205},[199,43250,43251,43253,43255],{"class":201,"line":19690},[199,43252,41786],{"class":205},[199,43254,1025],{"class":1018},[199,43256,1594],{"class":205},[199,43258,43259],{"class":201,"line":19695},[199,43260,907],{"emptyLinePlaceholder":906},[199,43262,43263],{"class":201,"line":19700},[199,43264,38006],{"class":1454},[199,43266,43267,43269,43271],{"class":201,"line":19714},[199,43268,33643],{"class":1086},[199,43270,33935],{"class":878},[199,43272,33938],{"class":205},[199,43274,43275,43277,43279,43281],{"class":201,"line":19726},[199,43276,33943],{"class":205},[199,43278,895],{"class":1086},[199,43280,33665],{"class":1018},[199,43282,41883],{"class":205},[199,43284,43285,43287,43289,43291],{"class":201,"line":19731},[199,43286,33943],{"class":205},[199,43288,895],{"class":1086},[199,43290,33665],{"class":1018},[199,43292,41894],{"class":205},[199,43294,43295,43297,43299,43301],{"class":201,"line":19744},[199,43296,33943],{"class":205},[199,43298,895],{"class":1086},[199,43300,33665],{"class":1018},[199,43302,41905],{"class":205},[199,43304,43305,43307,43309,43311],{"class":201,"line":19749},[199,43306,33943],{"class":205},[199,43308,895],{"class":1086},[199,43310,33665],{"class":1018},[199,43312,41916],{"class":205},[199,43314,43315,43317,43319,43321],{"class":201,"line":19754},[199,43316,33943],{"class":205},[199,43318,895],{"class":1086},[199,43320,33665],{"class":1018},[199,43322,41927],{"class":205},[199,43324,43325,43327,43329,43331],{"class":201,"line":19759},[199,43326,33943],{"class":205},[199,43328,895],{"class":1086},[199,43330,33665],{"class":1018},[199,43332,41938],{"class":205},[199,43334,43335,43337],{"class":201,"line":19772},[199,43336,17612],{"class":1086},[199,43338,34051],{"class":205},[199,43340,43341],{"class":201,"line":19777},[199,43342,907],{"emptyLinePlaceholder":906},[199,43344,43345],{"class":201,"line":35475},[199,43346,41953],{"class":1454},[199,43348,43349,43351,43353,43355,43357],{"class":201,"line":35481},[199,43350,4470],{"class":1086},[199,43352,34062],{"class":1018},[199,43354,5853],{"class":1086},[199,43356,41964],{"class":898},[199,43358,6640],{"class":205},[199,43360,43361,43363,43365,43367,43369,43371,43373,43375,43377],{"class":201,"line":35487},[199,43362,34079],{"class":205},[199,43364,895],{"class":1086},[199,43366,33294],{"class":205},[199,43368,34086],{"class":898},[199,43370,4629],{"class":1086},[199,43372,34091],{"class":205},[199,43374,4626],{"class":1086},[199,43376,33319],{"class":898},[199,43378,1594],{"class":205},[199,43380,43381,43383],{"class":201,"line":35493},[199,43382,34141],{"class":1018},[199,43384,33328],{"class":205},[199,43386,43387,43389,43391],{"class":201,"line":35499},[199,43388,34131],{"class":205},[199,43390,895],{"class":1086},[199,43392,42001],{"class":205},[199,43394,43395,43397,43399,43401,43403,43405,43407,43409],{"class":201,"line":35510},[199,43396,34141],{"class":1018},[199,43398,34144],{"class":205},[199,43400,1115],{"class":1018},[199,43402,3461],{"class":205},[199,43404,34343],{"class":1018},[199,43406,3461],{"class":205},[199,43408,34343],{"class":1018},[199,43410,34157],{"class":205},[24,43412,43413],{"start":73},[27,43414,43415],{},"测试代码",[190,43417,43419],{"className":33221,"code":43418,"language":33223,"meta":57,"style":57},"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",[196,43420,43421,43427,43437,43447,43451,43461,43472,43476,43480,43484,43492,43508,43518,43534,43544,43558,43562,43572,43582,43592,43598,43602,43606,43614,43618,43634,43642,43646,43650,43658,43666,43670,43674,43678,43682,43688,43692,43702,43710,43718,43722,43726,43730,43738,43742,43758,43762,43766,43770,43782,43786,43798,43802,43806,43818,43822,43832,43836,43840,43852,43856,43865,43869,43873,43881,43885,43893,43897,43901,43905,43909,43913,43929,43937,43941,43945,43993,43999,44003,44013,44021,44029,44033,44037,44041,44045,44053,44057,44073,44077,44085,44093],{"__ignoreMap":57},[199,43422,43423,43425],{"class":201,"line":202},[199,43424,33235],{"class":1086},[199,43426,33238],{"class":205},[199,43428,43429,43431,43433,43435],{"class":201,"line":36},[199,43430,33235],{"class":1086},[199,43432,34257],{"class":205},[199,43434,34225],{"class":1086},[199,43436,34262],{"class":205},[199,43438,43439,43441,43443,43445],{"class":201,"line":73},[199,43440,33579],{"class":1086},[199,43442,34240],{"class":205},[199,43444,33235],{"class":1086},[199,43446,34245],{"class":205},[199,43448,43449],{"class":201,"line":333},[199,43450,36763],{"class":1454},[199,43452,43453,43455,43457,43459],{"class":201,"line":227},[199,43454,33579],{"class":1086},[199,43456,34210],{"class":205},[199,43458,33235],{"class":1086},[199,43460,34215],{"class":205},[199,43462,43463,43465,43467,43469],{"class":201,"line":238},[199,43464,33579],{"class":1086},[199,43466,34756],{"class":205},[199,43468,33235],{"class":1086},[199,43470,43471],{"class":1018}," VGG16\n",[199,43473,43474],{"class":201,"line":252},[199,43475,907],{"emptyLinePlaceholder":906},[199,43477,43478],{"class":201,"line":388},[199,43479,907],{"emptyLinePlaceholder":906},[199,43481,43482],{"class":201,"line":415},[199,43483,36792],{"class":1454},[199,43485,43486,43488,43490],{"class":201,"line":426},[199,43487,34789],{"class":1086},[199,43489,36799],{"class":878},[199,43491,34795],{"class":205},[199,43493,43494,43496,43498,43500,43502,43504,43506],{"class":201,"line":1015},[199,43495,36806],{"class":205},[199,43497,895],{"class":1086},[199,43499,34297],{"class":205},[199,43501,34300],{"class":8113},[199,43503,895],{"class":1086},[199,43505,34305],{"class":898},[199,43507,34308],{"class":205},[199,43509,43510,43512,43514,43516],{"class":201,"line":1031},[199,43511,36823],{"class":8113},[199,43513,895],{"class":1086},[199,43515,36828],{"class":1018},[199,43517,34308],{"class":205},[199,43519,43520,43522,43524,43526,43528,43530,43532],{"class":201,"line":1043},[199,43521,36835],{"class":8113},[199,43523,895],{"class":1086},[199,43525,34335],{"class":205},[199,43527,34338],{"class":8113},[199,43529,895],{"class":1086},[199,43531,34343],{"class":1018},[199,43533,34346],{"class":205},[199,43535,43536,43538,43540,43542],{"class":201,"line":1049},[199,43537,36852],{"class":8113},[199,43539,895],{"class":1086},[199,43541,34318],{"class":1018},[199,43543,1594],{"class":205},[199,43545,43546,43548,43550,43552,43554,43556],{"class":201,"line":1054},[199,43547,36863],{"class":205},[199,43549,895],{"class":1086},[199,43551,34376],{"class":205},[199,43553,34379],{"class":8113},[199,43555,895],{"class":1086},[199,43557,36874],{"class":205},[199,43559,43560],{"class":201,"line":1062},[199,43561,36879],{"class":1454},[199,43563,43564,43566,43568,43570],{"class":201,"line":1075},[199,43565,36884],{"class":8113},[199,43567,895],{"class":1086},[199,43569,1115],{"class":1018},[199,43571,34308],{"class":205},[199,43573,43574,43576,43578,43580],{"class":201,"line":1092},[199,43575,36895],{"class":8113},[199,43577,895],{"class":1086},[199,43579,34318],{"class":1018},[199,43581,34308],{"class":205},[199,43583,43584,43586,43588,43590],{"class":201,"line":1107},[199,43585,36906],{"class":8113},[199,43587,895],{"class":1086},[199,43589,1025],{"class":1018},[199,43591,1594],{"class":205},[199,43593,43594,43596],{"class":201,"line":1128},[199,43595,6989],{"class":1086},[199,43597,36919],{"class":205},[199,43599,43600],{"class":201,"line":1146},[199,43601,907],{"emptyLinePlaceholder":906},[199,43603,43604],{"class":201,"line":1163},[199,43605,36928],{"class":1454},[199,43607,43608,43610,43612],{"class":201,"line":1176},[199,43609,34789],{"class":1086},[199,43611,36935],{"class":878},[199,43613,36938],{"class":205},[199,43615,43616],{"class":201,"line":1189},[199,43617,36943],{"class":1454},[199,43619,43620,43622,43624,43626,43628,43630,43632],{"class":201,"line":1202},[199,43621,34079],{"class":205},[199,43623,895],{"class":1086},[199,43625,34086],{"class":898},[199,43627,4629],{"class":1086},[199,43629,34091],{"class":205},[199,43631,4626],{"class":1086},[199,43633,36960],{"class":898},[199,43635,43636,43638,43640],{"class":201,"line":1207},[199,43637,34131],{"class":205},[199,43639,895],{"class":1086},[199,43641,35131],{"class":205},[199,43643,43644],{"class":201,"line":1212},[199,43645,907],{"emptyLinePlaceholder":906},[199,43647,43648],{"class":201,"line":1225},[199,43649,36977],{"class":1454},[199,43651,43652,43654,43656],{"class":201,"line":1236},[199,43653,36982],{"class":205},[199,43655,895],{"class":1086},[199,43657,35184],{"class":1018},[199,43659,43660,43662,43664],{"class":201,"line":1249},[199,43661,36991],{"class":205},[199,43663,895],{"class":1086},[199,43665,5989],{"class":1018},[199,43667,43668],{"class":201,"line":1262},[199,43669,907],{"emptyLinePlaceholder":906},[199,43671,43672],{"class":201,"line":1275},[199,43673,37004],{"class":1454},[199,43675,43676],{"class":201,"line":1287},[199,43677,37009],{"class":1454},[199,43679,43680],{"class":201,"line":1292},[199,43681,37014],{"class":1454},[199,43683,43684,43686],{"class":201,"line":1297},[199,43685,37019],{"class":1086},[199,43687,35726],{"class":205},[199,43689,43690],{"class":201,"line":1310},[199,43691,37026],{"class":1454},[199,43693,43694,43696,43698,43700],{"class":201,"line":1315},[199,43695,1481],{"class":1086},[199,43697,37033],{"class":205},[199,43699,28886],{"class":1086},[199,43701,37038],{"class":205},[199,43703,43704,43706,43708],{"class":201,"line":1330},[199,43705,37043],{"class":205},[199,43707,895],{"class":1086},[199,43709,37048],{"class":205},[199,43711,43712,43714,43716],{"class":201,"line":1335},[199,43713,37053],{"class":205},[199,43715,895],{"class":1086},[199,43717,37058],{"class":205},[199,43719,43720],{"class":201,"line":1340},[199,43721,37063],{"class":1454},[199,43723,43724],{"class":201,"line":1352},[199,43725,35717],{"class":205},[199,43727,43728],{"class":201,"line":1367},[199,43729,37072],{"class":1454},[199,43731,43732,43734,43736],{"class":201,"line":1381},[199,43733,35502],{"class":205},[199,43735,895],{"class":1086},[199,43737,37081],{"class":205},[199,43739,43740],{"class":201,"line":1396},[199,43741,37086],{"class":1454},[199,43743,43744,43746,43748,43750,43752,43754,43756],{"class":201,"line":1401},[199,43745,35519],{"class":205},[199,43747,895],{"class":1086},[199,43749,35524],{"class":205},[199,43751,35527],{"class":8113},[199,43753,895],{"class":1086},[199,43755,1115],{"class":1018},[199,43757,1594],{"class":205},[199,43759,43760],{"class":201,"line":1411},[199,43761,37107],{"class":1454},[199,43763,43764],{"class":201,"line":1421},[199,43765,37112],{"class":1454},[199,43767,43768],{"class":201,"line":1426},[199,43769,37117],{"class":1454},[199,43771,43772,43774,43776,43778,43780],{"class":201,"line":1436},[199,43773,37122],{"class":205},[199,43775,12362],{"class":1086},[199,43777,35629],{"class":205},[199,43779,5853],{"class":1086},[199,43781,37131],{"class":205},[199,43783,43784],{"class":201,"line":1441},[199,43785,37136],{"class":1454},[199,43787,43788,43790,43792,43794,43796],{"class":201,"line":1451},[199,43789,37141],{"class":205},[199,43791,12362],{"class":1086},[199,43793,37146],{"class":205},[199,43795,1025],{"class":1018},[199,43797,1594],{"class":205},[199,43799,43800],{"class":201,"line":1458},[199,43801,907],{"emptyLinePlaceholder":906},[199,43803,43804],{"class":201,"line":1464},[199,43805,37159],{"class":1454},[199,43807,43808,43810,43812,43814,43816],{"class":201,"line":1478},[199,43809,37164],{"class":205},[199,43811,895],{"class":1086},[199,43813,37169],{"class":205},[199,43815,3664],{"class":1086},[199,43817,37174],{"class":205},[199,43819,43820],{"class":201,"line":1516},[199,43821,37179],{"class":1454},[199,43823,43824,43826,43828,43830],{"class":201,"line":1522},[199,43825,35293],{"class":1018},[199,43827,1537],{"class":205},[199,43829,37188],{"class":898},[199,43831,37191],{"class":205},[199,43833,43834],{"class":201,"line":1528},[199,43835,907],{"emptyLinePlaceholder":906},[199,43837,43838],{"class":201,"line":1557},[199,43839,37200],{"class":1454},[199,43841,43842,43844,43846,43848,43850],{"class":201,"line":1563},[199,43843,4470],{"class":1086},[199,43845,34062],{"class":1018},[199,43847,5853],{"class":1086},[199,43849,34067],{"class":898},[199,43851,6640],{"class":205},[199,43853,43854],{"class":201,"line":1568},[199,43855,37217],{"class":1454},[199,43857,43858,43860,43862],{"class":201,"line":1574},[199,43859,34131],{"class":205},[199,43861,895],{"class":1086},[199,43863,43864],{"class":205},"VGG16()\n",[199,43866,43867],{"class":201,"line":1580},[199,43868,37230],{"class":1454},[199,43870,43871],{"class":201,"line":1597},[199,43872,37235],{"class":1454},[199,43874,43875,43877,43879],{"class":201,"line":1602},[199,43876,37240],{"class":205},[199,43878,37243],{"class":898},[199,43880,1554],{"class":205},[199,43882,43883],{"class":201,"line":1608},[199,43884,37250],{"class":1454},[199,43886,43887,43889,43891],{"class":201,"line":1640},[199,43888,36863],{"class":205},[199,43890,895],{"class":1086},[199,43892,37259],{"class":205},[199,43894,43895],{"class":201,"line":1653},[199,43896,37264],{"class":1454},[199,43898,43899],{"class":201,"line":1673},[199,43900,37269],{"class":205},[199,43902,43903],{"class":201,"line":1690},[199,43904,907],{"emptyLinePlaceholder":906},[199,43906,43907],{"class":201,"line":1706},[199,43908,37278],{"class":1454},[199,43910,43911],{"class":201,"line":1712},[199,43912,37283],{"class":1454},[199,43914,43915,43917,43919,43921,43923,43925,43927],{"class":201,"line":1720},[199,43916,34079],{"class":205},[199,43918,895],{"class":1086},[199,43920,34086],{"class":898},[199,43922,4629],{"class":1086},[199,43924,34091],{"class":205},[199,43926,4626],{"class":1086},[199,43928,36960],{"class":898},[199,43930,43931,43933,43935],{"class":201,"line":1725},[199,43932,34131],{"class":205},[199,43934,895],{"class":1086},[199,43936,35131],{"class":205},[199,43938,43939],{"class":201,"line":1731},[199,43940,37312],{"class":1454},[199,43942,43943],{"class":201,"line":1745},[199,43944,37317],{"class":1454},[199,43946,43947,43949,43951,43953,43955,43957,43959,43961,43963,43965,43967,43969,43971,43973,43975,43977,43979,43981,43983,43985,43987,43989,43991],{"class":201,"line":1754},[199,43948,37322],{"class":205},[199,43950,895],{"class":1086},[199,43952,1662],{"class":205},[199,43954,37329],{"class":898},[199,43956,3461],{"class":205},[199,43958,37334],{"class":898},[199,43960,3461],{"class":205},[199,43962,37339],{"class":898},[199,43964,3461],{"class":205},[199,43966,37344],{"class":898},[199,43968,3461],{"class":205},[199,43970,37349],{"class":898},[199,43972,3461],{"class":205},[199,43974,37354],{"class":898},[199,43976,3461],{"class":205},[199,43978,37359],{"class":898},[199,43980,3461],{"class":205},[199,43982,37364],{"class":898},[199,43984,3461],{"class":205},[199,43986,37369],{"class":898},[199,43988,3461],{"class":205},[199,43990,37374],{"class":898},[199,43992,1932],{"class":205},[199,43994,43995,43997],{"class":201,"line":1763},[199,43996,37019],{"class":1086},[199,43998,35726],{"class":205},[199,44000,44001],{"class":201,"line":1768},[199,44002,37387],{"class":1454},[199,44004,44005,44007,44009,44011],{"class":201,"line":19628},[199,44006,1481],{"class":1086},[199,44008,37394],{"class":205},[199,44010,28886],{"class":1086},[199,44012,37038],{"class":205},[199,44014,44015,44017,44019],{"class":201,"line":19641},[199,44016,35452],{"class":205},[199,44018,895],{"class":1086},[199,44020,35457],{"class":205},[199,44022,44023,44025,44027],{"class":201,"line":19646},[199,44024,35467],{"class":205},[199,44026,895],{"class":1086},[199,44028,35472],{"class":205},[199,44030,44031],{"class":201,"line":19660},[199,44032,907],{"emptyLinePlaceholder":906},[199,44034,44035],{"class":201,"line":19665},[199,44036,37423],{"class":1454},[199,44038,44039],{"class":201,"line":19671},[199,44040,35717],{"class":205},[199,44042,44043],{"class":201,"line":19676},[199,44044,37432],{"class":1454},[199,44046,44047,44049,44051],{"class":201,"line":19690},[199,44048,35502],{"class":205},[199,44050,895],{"class":1086},[199,44052,35507],{"class":205},[199,44054,44055],{"class":201,"line":19695},[199,44056,37445],{"class":1454},[199,44058,44059,44061,44063,44065,44067,44069,44071],{"class":201,"line":19700},[199,44060,35519],{"class":205},[199,44062,895],{"class":1086},[199,44064,35524],{"class":205},[199,44066,35527],{"class":8113},[199,44068,895],{"class":1086},[199,44070,1115],{"class":1018},[199,44072,1594],{"class":205},[199,44074,44075],{"class":201,"line":19714},[199,44076,37466],{"class":1454},[199,44078,44079,44081,44083],{"class":201,"line":19726},[199,44080,37471],{"class":205},[199,44082,895],{"class":1086},[199,44084,37476],{"class":205},[199,44086,44087,44089,44091],{"class":201,"line":19731},[199,44088,37481],{"class":205},[199,44090,895],{"class":1086},[199,44092,37486],{"class":205},[199,44094,44095,44097,44099,44101,44103,44105,44107,44109],{"class":201,"line":19744},[199,44096,37491],{"class":1018},[199,44098,1537],{"class":205},[199,44100,37496],{"class":898},[199,44102,37499],{"class":205},[199,44104,37502],{"class":898},[199,44106,3461],{"class":205},[199,44108,37507],{"class":898},[199,44110,37510],{"class":205},[19,44112,44114],{"id":44113},"_23googlenet","2.3.GoogLeNet",[627,44116,44118],{"id":44117},"_231原理","2.3.1.原理",[24,44120,44121],{},[27,44122,44123],{},"网络结构",[31,44125,44126],{},[55,44127],{"alt":57,"src":44128},"\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",[31,44130,44131],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[31,44133,44134],{},[55,44135],{"alt":57,"src":44136},"\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",[31,44138,44139],{},[55,44140],{"alt":57,"src":44141},"\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",[31,44143,44144],{},[55,44145],{"alt":57,"src":44146},"\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",[24,44148,44149],{"start":36},[27,44150,44151],{},"1x1卷积的优点",[31,44153,44154],{},[55,44155],{"alt":57,"src":44156},"\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",[24,44158,44159],{"start":73},[27,44160,44161],{},"全局平均池化层优点",[31,44163,44164],{},[55,44165],{"alt":57,"src":44166},"\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",[31,44168,44169],{},[55,44170],{"alt":57,"src":44171},"\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",[24,44173,44174],{"start":333},[27,44175,44176],{},"参数详细描述",[31,44178,44179],{},[55,44180],{"alt":57,"src":44181},"\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",[31,44183,44184],{},[55,44185],{"alt":57,"src":44186},"\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",[31,44188,44189],{},[55,44190],{"alt":57,"src":44191},"\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",[31,44193,44194],{},[55,44195],{"alt":57,"src":44196},"\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",[31,44198,44199],{},[55,44200],{"alt":57,"src":44201},"\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",[31,44203,44204],{},[55,44205],{"alt":57,"src":44206},"\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",[31,44208,44209],{},[55,44210],{"alt":57,"src":44211},"\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",[31,44213,44214],{},[55,44215],{"alt":57,"src":44216},"\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",[31,44218,44219],{},[55,44220],{"alt":57,"src":44221},"\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",[31,44223,44224],{},[55,44225],{"alt":57,"src":44226},"\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",[31,44228,44229],{},[55,44230],{"alt":57,"src":44231},"\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",[31,44233,44234],{},[55,44235],{"alt":57,"src":44236},"\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",[31,44238,44239],{},[55,44240],{"alt":57,"src":44241},"\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",[31,44243,44244],{},[55,44245],{"alt":57,"src":44246},"\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",[31,44248,44249],{},[55,44250],{"alt":57,"src":44251},"\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",[31,44253,44254],{},[55,44255],{"alt":57,"src":44256},"\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",[31,44258,44259],{},[55,44260],{"alt":57,"src":44261},"\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",[31,44263,44264],{},[55,44265],{"alt":57,"src":44266},"\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",[31,44268,44269],{},[55,44270],{"alt":57,"src":44271},"\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",[31,44273,44274],{},[55,44275],{"alt":57,"src":44276},"\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",[31,44278,44279],{},[55,44280],{"alt":57,"src":44281},"\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",[627,44283,44285],{"id":44284},"_232代码实现","2.3.2.代码实现",[24,44287,44288],{},[27,44289,33553],{},[31,44291,44292],{},"根据原理一步一步搭建即可",[190,44294,44296],{"className":33221,"code":44295,"language":33223,"meta":57,"style":57},"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",[196,44297,44298,44304,44314,44324,44328,44345,44354,44369,44379,44384,44417,44422,44459,44506,44511,44547,44594,44599,44604,44639,44671,44675,44683,44699,44723,44748,44769,44774,44789,44793,44797,44802,44819,44824,44833,44848,44859,44903,44907,44935,44939,44950,44978,44982,45019,45023,45051,45055,45066,45102,45134,45162,45166,45177,45211,45243,45275,45308,45342,45370,45374,45385,45418,45450,45464,45468,45481,45485,45490,45502,45510,45532,45537,45542,45547,45552,45557,45562,45576,45584,45593,45606,45621,45630,45634,45642,45653,45664,45675,45686,45697,45703,45707,45712,45724,45744,45753],{"__ignoreMap":57},[199,44299,44300,44302],{"class":201,"line":202},[199,44301,33235],{"class":1086},[199,44303,33238],{"class":205},[199,44305,44306,44308,44310,44312],{"class":201,"line":36},[199,44307,33579],{"class":1086},[199,44309,33582],{"class":205},[199,44311,33235],{"class":1086},[199,44313,33587],{"class":205},[199,44315,44316,44318,44320,44322],{"class":201,"line":73},[199,44317,33579],{"class":1086},[199,44319,33599],{"class":205},[199,44321,33235],{"class":1086},[199,44323,33604],{"class":205},[199,44325,44326],{"class":201,"line":333},[199,44327,907],{"emptyLinePlaceholder":906},[199,44329,44330,44332,44335,44337,44339,44341,44343],{"class":201,"line":227},[199,44331,17554],{"class":1086},[199,44333,44334],{"class":878}," Inception",[199,44336,1537],{"class":205},[199,44338,33620],{"class":878},[199,44340,3638],{"class":205},[199,44342,33625],{"class":878},[199,44344,33628],{"class":205},[199,44346,44347,44349,44351],{"class":201,"line":238},[199,44348,33643],{"class":1086},[199,44350,33646],{"class":1018},[199,44352,44353],{"class":205},"(self,in_channels,c1,c2,c3,c4):\n",[199,44355,44356,44358,44361,44363,44365,44367],{"class":201,"line":252},[199,44357,33659],{"class":1018},[199,44359,44360],{"class":205},"(Inception,",[199,44362,33665],{"class":1018},[199,44364,33668],{"class":205},[199,44366,33671],{"class":1018},[199,44368,4892],{"class":205},[199,44370,44371,44373,44375,44377],{"class":201,"line":388},[199,44372,33687],{"class":1018},[199,44374,37612],{"class":205},[199,44376,895],{"class":1086},[199,44378,37617],{"class":205},[199,44380,44381],{"class":201,"line":415},[199,44382,44383],{"class":1454},"        # 路线1：定义1*1卷积\n",[199,44385,44386,44388,44391,44393,44395,44397,44399,44402,44404,44406,44409,44411,44413,44415],{"class":201,"line":426},[199,44387,33687],{"class":1018},[199,44389,44390],{"class":205},".p1_1",[199,44392,895],{"class":1086},[199,44394,33695],{"class":205},[199,44396,33698],{"class":8113},[199,44398,895],{"class":1086},[199,44400,44401],{"class":205},"in_channels,",[199,44403,33707],{"class":8113},[199,44405,895],{"class":1086},[199,44407,44408],{"class":205},"c1,",[199,44410,33716],{"class":8113},[199,44412,895],{"class":1086},[199,44414,1115],{"class":1018},[199,44416,1594],{"class":205},[199,44418,44419],{"class":201,"line":1015},[199,44420,44421],{"class":1454},"        # 路线2：定义1*1卷积和3*3\n",[199,44423,44424,44426,44429,44431,44433,44435,44437,44439,44441,44443,44446,44448,44451,44453,44455,44457],{"class":201,"line":1031},[199,44425,33687],{"class":1018},[199,44427,44428],{"class":205},".p2_1",[199,44430,895],{"class":1086},[199,44432,33695],{"class":205},[199,44434,33698],{"class":8113},[199,44436,895],{"class":1086},[199,44438,44401],{"class":205},[199,44440,33707],{"class":8113},[199,44442,895],{"class":1086},[199,44444,44445],{"class":205},"c2[",[199,44447,1025],{"class":1018},[199,44449,44450],{"class":205},"],",[199,44452,33716],{"class":8113},[199,44454,895],{"class":1086},[199,44456,1115],{"class":1018},[199,44458,1594],{"class":205},[199,44460,44461,44463,44466,44468,44470,44472,44474,44476,44478,44480,44482,44484,44486,44488,44490,44492,44494,44496,44498,44500,44502,44504],{"class":201,"line":1043},[199,44462,33687],{"class":1018},[199,44464,44465],{"class":205},".p2_2",[199,44467,895],{"class":1086},[199,44469,33695],{"class":205},[199,44471,33698],{"class":8113},[199,44473,895],{"class":1086},[199,44475,44445],{"class":205},[199,44477,1025],{"class":1018},[199,44479,44450],{"class":205},[199,44481,33707],{"class":8113},[199,44483,895],{"class":1086},[199,44485,44445],{"class":205},[199,44487,1115],{"class":1018},[199,44489,44450],{"class":205},[199,44491,33716],{"class":8113},[199,44493,895],{"class":1086},[199,44495,1920],{"class":1018},[199,44497,3461],{"class":205},[199,44499,33725],{"class":8113},[199,44501,895],{"class":1086},[199,44503,1115],{"class":1018},[199,44505,1594],{"class":205},[199,44507,44508],{"class":201,"line":1049},[199,44509,44510],{"class":1454},"        # 路线3：定义1*1卷积和5*5\n",[199,44512,44513,44515,44518,44520,44522,44524,44526,44528,44530,44532,44535,44537,44539,44541,44543,44545],{"class":201,"line":1054},[199,44514,33687],{"class":1018},[199,44516,44517],{"class":205},".p3_1",[199,44519,895],{"class":1086},[199,44521,33695],{"class":205},[199,44523,33698],{"class":8113},[199,44525,895],{"class":1086},[199,44527,44401],{"class":205},[199,44529,33707],{"class":8113},[199,44531,895],{"class":1086},[199,44533,44534],{"class":205},"c3[",[199,44536,1025],{"class":1018},[199,44538,44450],{"class":205},[199,44540,33716],{"class":8113},[199,44542,895],{"class":1086},[199,44544,1115],{"class":1018},[199,44546,1594],{"class":205},[199,44548,44549,44551,44554,44556,44558,44560,44562,44564,44566,44568,44570,44572,44574,44576,44578,44580,44582,44584,44586,44588,44590,44592],{"class":201,"line":1062},[199,44550,33687],{"class":1018},[199,44552,44553],{"class":205},".p3_2",[199,44555,895],{"class":1086},[199,44557,33695],{"class":205},[199,44559,33698],{"class":8113},[199,44561,895],{"class":1086},[199,44563,44534],{"class":205},[199,44565,1025],{"class":1018},[199,44567,44450],{"class":205},[199,44569,33707],{"class":8113},[199,44571,895],{"class":1086},[199,44573,44534],{"class":205},[199,44575,1115],{"class":1018},[199,44577,44450],{"class":205},[199,44579,33716],{"class":8113},[199,44581,895],{"class":1086},[199,44583,1909],{"class":1018},[199,44585,3461],{"class":205},[199,44587,33725],{"class":8113},[199,44589,895],{"class":1086},[199,44591,1925],{"class":1018},[199,44593,1594],{"class":205},[199,44595,44596],{"class":201,"line":1075},[199,44597,44598],{"class":1454},"        # 路线4：定义3*3最大池化和1*1卷积\n",[199,44600,44601],{"class":201,"line":1092},[199,44602,44603],{"class":1454},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[199,44605,44606,44608,44611,44613,44615,44617,44619,44621,44623,44625,44627,44629,44631,44633,44635,44637],{"class":201,"line":1107},[199,44607,33687],{"class":1018},[199,44609,44610],{"class":205},".p4_1",[199,44612,895],{"class":1086},[199,44614,37670],{"class":205},[199,44616,33716],{"class":8113},[199,44618,895],{"class":1086},[199,44620,1920],{"class":1018},[199,44622,3461],{"class":205},[199,44624,33771],{"class":8113},[199,44626,895],{"class":1086},[199,44628,1115],{"class":1018},[199,44630,3461],{"class":205},[199,44632,33725],{"class":8113},[199,44634,895],{"class":1086},[199,44636,1115],{"class":1018},[199,44638,1594],{"class":205},[199,44640,44641,44643,44646,44648,44650,44652,44654,44656,44658,44660,44663,44665,44667,44669],{"class":201,"line":1128},[199,44642,33687],{"class":1018},[199,44644,44645],{"class":205},".p4_2",[199,44647,895],{"class":1086},[199,44649,33695],{"class":205},[199,44651,33698],{"class":8113},[199,44653,895],{"class":1086},[199,44655,44401],{"class":205},[199,44657,33707],{"class":8113},[199,44659,895],{"class":1086},[199,44661,44662],{"class":205},"c4,",[199,44664,33716],{"class":8113},[199,44666,895],{"class":1086},[199,44668,1115],{"class":1018},[199,44670,1594],{"class":205},[199,44672,44673],{"class":201,"line":1146},[199,44674,907],{"emptyLinePlaceholder":906},[199,44676,44677,44679,44681],{"class":201,"line":1163},[199,44678,33643],{"class":1086},[199,44680,33935],{"class":878},[199,44682,33938],{"class":205},[199,44684,44685,44688,44690,44692,44694,44696],{"class":201,"line":1176},[199,44686,44687],{"class":205},"        p1",[199,44689,895],{"class":1086},[199,44691,33665],{"class":1018},[199,44693,38025],{"class":205},[199,44695,33665],{"class":1018},[199,44697,44698],{"class":205},".p1_1(x))\n",[199,44700,44701,44703,44705,44707,44709,44711,44714,44716,44718,44720],{"class":201,"line":1189},[199,44702,9982],{"class":205},[199,44704,895],{"class":1086},[199,44706,33665],{"class":1018},[199,44708,38025],{"class":205},[199,44710,33665],{"class":1018},[199,44712,44713],{"class":205},".p2_2(",[199,44715,33665],{"class":1018},[199,44717,38025],{"class":205},[199,44719,33665],{"class":1018},[199,44721,44722],{"class":205},".p2_1(x))))\n",[199,44724,44725,44728,44730,44732,44734,44736,44739,44741,44743,44745],{"class":201,"line":1202},[199,44726,44727],{"class":205},"        p3",[199,44729,895],{"class":1086},[199,44731,33665],{"class":1018},[199,44733,38025],{"class":205},[199,44735,33665],{"class":1018},[199,44737,44738],{"class":205},".p3_2(",[199,44740,33665],{"class":1018},[199,44742,38025],{"class":205},[199,44744,33665],{"class":1018},[199,44746,44747],{"class":205},".p3_1(x))))\n",[199,44749,44750,44753,44755,44757,44759,44761,44764,44766],{"class":201,"line":1207},[199,44751,44752],{"class":205},"        p4",[199,44754,895],{"class":1086},[199,44756,33665],{"class":1018},[199,44758,38025],{"class":205},[199,44760,33665],{"class":1018},[199,44762,44763],{"class":205},".p4_2(",[199,44765,33665],{"class":1018},[199,44767,44768],{"class":205},".p4_1(x)))\n",[199,44770,44771],{"class":201,"line":1212},[199,44772,44773],{"class":1454},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[199,44775,44776,44778,44781,44783,44785,44787],{"class":201,"line":1225},[199,44777,17612],{"class":1086},[199,44779,44780],{"class":205}," torch.cat((p1,p2,p3,p4),",[199,44782,35527],{"class":8113},[199,44784,895],{"class":1086},[199,44786,1115],{"class":1018},[199,44788,1594],{"class":205},[199,44790,44791],{"class":201,"line":1236},[199,44792,907],{"emptyLinePlaceholder":906},[199,44794,44795],{"class":201,"line":1249},[199,44796,907],{"emptyLinePlaceholder":906},[199,44798,44799],{"class":201,"line":1262},[199,44800,44801],{"class":1454},"# 搭建GoogLeNet网络\n",[199,44803,44804,44806,44809,44811,44813,44815,44817],{"class":201,"line":1275},[199,44805,17554],{"class":1086},[199,44807,44808],{"class":878}," GoogLeNet",[199,44810,1537],{"class":205},[199,44812,33620],{"class":878},[199,44814,3638],{"class":205},[199,44816,33625],{"class":878},[199,44818,33628],{"class":205},[199,44820,44821],{"class":201,"line":1287},[199,44822,44823],{"class":1454},"    # 必须把Inception导入到里边\n",[199,44825,44826,44828,44830],{"class":201,"line":1292},[199,44827,33643],{"class":1086},[199,44829,33646],{"class":1018},[199,44831,44832],{"class":205},"(self,Inception):\n",[199,44834,44835,44837,44840,44842,44844,44846],{"class":201,"line":1297},[199,44836,33659],{"class":1018},[199,44838,44839],{"class":205},"(GoogLeNet,",[199,44841,33665],{"class":1018},[199,44843,33668],{"class":205},[199,44845,33671],{"class":1018},[199,44847,4892],{"class":205},[199,44849,44850,44852,44855,44857],{"class":201,"line":1310},[199,44851,33687],{"class":1018},[199,44853,44854],{"class":205},".b1",[199,44856,895],{"class":1086},[199,44858,40850],{"class":205},[199,44860,44861,44863,44865,44867,44869,44871,44873,44875,44877,44879,44881,44883,44885,44887,44889,44891,44893,44895,44897,44899,44901],{"class":201,"line":1315},[199,44862,40855],{"class":205},[199,44864,33698],{"class":8113},[199,44866,895],{"class":1086},[199,44868,1115],{"class":1018},[199,44870,3461],{"class":205},[199,44872,33707],{"class":8113},[199,44874,895],{"class":1086},[199,44876,3291],{"class":1018},[199,44878,3461],{"class":205},[199,44880,33716],{"class":8113},[199,44882,895],{"class":1086},[199,44884,3452],{"class":1018},[199,44886,3461],{"class":205},[199,44888,33771],{"class":8113},[199,44890,895],{"class":1086},[199,44892,1925],{"class":1018},[199,44894,3461],{"class":205},[199,44896,33725],{"class":8113},[199,44898,895],{"class":1086},[199,44900,1920],{"class":1018},[199,44902,40888],{"class":205},[199,44904,44905],{"class":201,"line":1330},[199,44906,40893],{"class":205},[199,44908,44909,44911,44913,44915,44917,44919,44921,44923,44925,44927,44929,44931,44933],{"class":201,"line":1335},[199,44910,40938],{"class":205},[199,44912,33716],{"class":8113},[199,44914,895],{"class":1086},[199,44916,1920],{"class":1018},[199,44918,3461],{"class":205},[199,44920,33771],{"class":8113},[199,44922,895],{"class":1086},[199,44924,1925],{"class":1018},[199,44926,3461],{"class":205},[199,44928,33725],{"class":8113},[199,44930,895],{"class":1086},[199,44932,1115],{"class":1018},[199,44934,1594],{"class":205},[199,44936,44937],{"class":201,"line":1340},[199,44938,40967],{"class":205},[199,44940,44941,44943,44946,44948],{"class":201,"line":1352},[199,44942,33687],{"class":1018},[199,44944,44945],{"class":205},".b2",[199,44947,895],{"class":1086},[199,44949,40850],{"class":205},[199,44951,44952,44954,44956,44958,44960,44962,44964,44966,44968,44970,44972,44974,44976],{"class":201,"line":1367},[199,44953,40855],{"class":205},[199,44955,33698],{"class":8113},[199,44957,895],{"class":1086},[199,44959,3291],{"class":1018},[199,44961,3461],{"class":205},[199,44963,33707],{"class":8113},[199,44965,895],{"class":1086},[199,44967,3291],{"class":1018},[199,44969,3461],{"class":205},[199,44971,33716],{"class":8113},[199,44973,895],{"class":1086},[199,44975,1115],{"class":1018},[199,44977,40888],{"class":205},[199,44979,44980],{"class":201,"line":1381},[199,44981,40893],{"class":205},[199,44983,44984,44986,44988,44990,44992,44994,44996,44998,45001,45003,45005,45007,45009,45011,45013,45015,45017],{"class":201,"line":1396},[199,44985,40855],{"class":205},[199,44987,33698],{"class":8113},[199,44989,895],{"class":1086},[199,44991,3291],{"class":1018},[199,44993,3461],{"class":205},[199,44995,33707],{"class":8113},[199,44997,895],{"class":1086},[199,44999,45000],{"class":1018},"192",[199,45002,3461],{"class":205},[199,45004,33716],{"class":8113},[199,45006,895],{"class":1086},[199,45008,1920],{"class":1018},[199,45010,3461],{"class":205},[199,45012,33725],{"class":8113},[199,45014,895],{"class":1086},[199,45016,1115],{"class":1018},[199,45018,40888],{"class":205},[199,45020,45021],{"class":201,"line":1401},[199,45022,40893],{"class":205},[199,45024,45025,45027,45029,45031,45033,45035,45037,45039,45041,45043,45045,45047,45049],{"class":201,"line":1411},[199,45026,40938],{"class":205},[199,45028,33716],{"class":8113},[199,45030,895],{"class":1086},[199,45032,1920],{"class":1018},[199,45034,3461],{"class":205},[199,45036,33771],{"class":8113},[199,45038,895],{"class":1086},[199,45040,1925],{"class":1018},[199,45042,3461],{"class":205},[199,45044,33725],{"class":8113},[199,45046,895],{"class":1086},[199,45048,1115],{"class":1018},[199,45050,1594],{"class":205},[199,45052,45053],{"class":201,"line":1421},[199,45054,40967],{"class":205},[199,45056,45057,45059,45062,45064],{"class":201,"line":1426},[199,45058,33687],{"class":1018},[199,45060,45061],{"class":205},".b3",[199,45063,895],{"class":1086},[199,45065,40850],{"class":205},[199,45067,45068,45071,45073,45075,45077,45080,45082,45084,45086,45089,45091,45093,45095,45098,45100],{"class":201,"line":1436},[199,45069,45070],{"class":205},"            Inception(",[199,45072,45000],{"class":1018},[199,45074,3461],{"class":205},[199,45076,3291],{"class":1018},[199,45078,45079],{"class":205},",(",[199,45081,3297],{"class":1018},[199,45083,3461],{"class":205},[199,45085,34912],{"class":1018},[199,45087,45088],{"class":205},"),(",[199,45090,3681],{"class":1018},[199,45092,3461],{"class":205},[199,45094,3285],{"class":1018},[199,45096,45097],{"class":205},"),",[199,45099,3285],{"class":1018},[199,45101,40888],{"class":205},[199,45103,45104,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132],{"class":201,"line":1441},[199,45105,45070],{"class":205},[199,45107,37711],{"class":1018},[199,45109,3461],{"class":205},[199,45111,34912],{"class":1018},[199,45113,45079],{"class":205},[199,45115,34912],{"class":1018},[199,45117,3461],{"class":205},[199,45119,45000],{"class":1018},[199,45121,45088],{"class":205},[199,45123,3285],{"class":1018},[199,45125,3461],{"class":205},[199,45127,3297],{"class":1018},[199,45129,45097],{"class":205},[199,45131,3291],{"class":1018},[199,45133,40888],{"class":205},[199,45135,45136,45138,45140,45142,45144,45146,45148,45150,45152,45154,45156,45158,45160],{"class":201,"line":1451},[199,45137,40938],{"class":205},[199,45139,33716],{"class":8113},[199,45141,895],{"class":1086},[199,45143,1920],{"class":1018},[199,45145,3461],{"class":205},[199,45147,33771],{"class":8113},[199,45149,895],{"class":1086},[199,45151,1925],{"class":1018},[199,45153,3461],{"class":205},[199,45155,33725],{"class":8113},[199,45157,895],{"class":1086},[199,45159,1115],{"class":1018},[199,45161,1594],{"class":205},[199,45163,45164],{"class":201,"line":1458},[199,45165,40967],{"class":205},[199,45167,45168,45170,45173,45175],{"class":201,"line":1464},[199,45169,33687],{"class":1018},[199,45171,45172],{"class":205},".b4",[199,45174,895],{"class":1086},[199,45176,40850],{"class":205},[199,45178,45179,45181,45184,45186,45188,45190,45192,45194,45197,45199,45201,45203,45205,45207,45209],{"class":201,"line":1478},[199,45180,45070],{"class":205},[199,45182,45183],{"class":1018},"480",[199,45185,3461],{"class":205},[199,45187,45000],{"class":1018},[199,45189,45079],{"class":205},[199,45191,3297],{"class":1018},[199,45193,3461],{"class":205},[199,45195,45196],{"class":1018},"208",[199,45198,45088],{"class":205},[199,45200,3681],{"class":1018},[199,45202,3461],{"class":205},[199,45204,3687],{"class":1018},[199,45206,45097],{"class":205},[199,45208,3291],{"class":1018},[199,45210,40888],{"class":205},[199,45212,45213,45215,45217,45219,45221,45223,45225,45227,45229,45231,45233,45235,45237,45239,45241],{"class":201,"line":1516},[199,45214,45070],{"class":205},[199,45216,41298],{"class":1018},[199,45218,3461],{"class":205},[199,45220,23893],{"class":1018},[199,45222,45079],{"class":205},[199,45224,3698],{"class":1018},[199,45226,3461],{"class":205},[199,45228,34343],{"class":1018},[199,45230,45088],{"class":205},[199,45232,3879],{"class":1018},[199,45234,3461],{"class":205},[199,45236,3291],{"class":1018},[199,45238,45097],{"class":205},[199,45240,3291],{"class":1018},[199,45242,40888],{"class":205},[199,45244,45245,45247,45249,45251,45253,45255,45257,45259,45261,45263,45265,45267,45269,45271,45273],{"class":201,"line":1522},[199,45246,45070],{"class":205},[199,45248,41298],{"class":1018},[199,45250,3461],{"class":205},[199,45252,34912],{"class":1018},[199,45254,45079],{"class":205},[199,45256,34912],{"class":1018},[199,45258,3461],{"class":205},[199,45260,37711],{"class":1018},[199,45262,45088],{"class":205},[199,45264,3879],{"class":1018},[199,45266,3461],{"class":205},[199,45268,3291],{"class":1018},[199,45270,45097],{"class":205},[199,45272,3291],{"class":1018},[199,45274,40888],{"class":205},[199,45276,45277,45279,45281,45283,45285,45287,45289,45291,45294,45296,45298,45300,45302,45304,45306],{"class":201,"line":1528},[199,45278,45070],{"class":205},[199,45280,41298],{"class":1018},[199,45282,3461],{"class":205},[199,45284,3698],{"class":1018},[199,45286,45079],{"class":205},[199,45288,34912],{"class":1018},[199,45290,3461],{"class":205},[199,45292,45293],{"class":1018},"288",[199,45295,45088],{"class":205},[199,45297,3285],{"class":1018},[199,45299,3461],{"class":205},[199,45301,3291],{"class":1018},[199,45303,45097],{"class":205},[199,45305,3291],{"class":1018},[199,45307,40888],{"class":205},[199,45309,45310,45312,45315,45317,45319,45321,45323,45325,45328,45330,45332,45334,45336,45338,45340],{"class":201,"line":1557},[199,45311,45070],{"class":205},[199,45313,45314],{"class":1018},"528",[199,45316,3461],{"class":205},[199,45318,37711],{"class":1018},[199,45320,45079],{"class":205},[199,45322,23893],{"class":1018},[199,45324,3461],{"class":205},[199,45326,45327],{"class":1018},"320",[199,45329,45088],{"class":205},[199,45331,3285],{"class":1018},[199,45333,3461],{"class":205},[199,45335,34912],{"class":1018},[199,45337,45097],{"class":205},[199,45339,34912],{"class":1018},[199,45341,40888],{"class":205},[199,45343,45344,45346,45348,45350,45352,45354,45356,45358,45360,45362,45364,45366,45368],{"class":201,"line":1563},[199,45345,40938],{"class":205},[199,45347,33716],{"class":8113},[199,45349,895],{"class":1086},[199,45351,1920],{"class":1018},[199,45353,3461],{"class":205},[199,45355,33771],{"class":8113},[199,45357,895],{"class":1086},[199,45359,1925],{"class":1018},[199,45361,3461],{"class":205},[199,45363,33725],{"class":8113},[199,45365,895],{"class":1086},[199,45367,1115],{"class":1018},[199,45369,1594],{"class":205},[199,45371,45372],{"class":201,"line":1568},[199,45373,40967],{"class":205},[199,45375,45376,45378,45381,45383],{"class":201,"line":1574},[199,45377,33687],{"class":1018},[199,45379,45380],{"class":205},".b5",[199,45382,895],{"class":1086},[199,45384,40850],{"class":205},[199,45386,45387,45389,45392,45394,45396,45398,45400,45402,45404,45406,45408,45410,45412,45414,45416],{"class":201,"line":1580},[199,45388,45070],{"class":205},[199,45390,45391],{"class":1018},"832",[199,45393,3461],{"class":205},[199,45395,37711],{"class":1018},[199,45397,45079],{"class":205},[199,45399,23893],{"class":1018},[199,45401,3461],{"class":205},[199,45403,45327],{"class":1018},[199,45405,45088],{"class":205},[199,45407,3285],{"class":1018},[199,45409,3461],{"class":205},[199,45411,34912],{"class":1018},[199,45413,45097],{"class":205},[199,45415,34912],{"class":1018},[199,45417,40888],{"class":205},[199,45419,45420,45422,45424,45426,45428,45430,45432,45434,45436,45438,45440,45442,45444,45446,45448],{"class":201,"line":1597},[199,45421,45070],{"class":205},[199,45423,45391],{"class":1018},[199,45425,3461],{"class":205},[199,45427,37781],{"class":1018},[199,45429,45079],{"class":205},[199,45431,45000],{"class":1018},[199,45433,3461],{"class":205},[199,45435,37781],{"class":1018},[199,45437,45088],{"class":205},[199,45439,3687],{"class":1018},[199,45441,3461],{"class":205},[199,45443,34912],{"class":1018},[199,45445,45097],{"class":205},[199,45447,34912],{"class":1018},[199,45449,40888],{"class":205},[199,45451,45452,45455,45457,45459,45461],{"class":201,"line":1602},[199,45453,45454],{"class":205},"            nn.AdaptiveAvgPool2d((",[199,45456,1115],{"class":1018},[199,45458,3461],{"class":205},[199,45460,1115],{"class":1018},[199,45462,45463],{"class":205},")),\n",[199,45465,45466],{"class":201,"line":1608},[199,45467,41631],{"class":205},[199,45469,45470,45472,45475,45477,45479],{"class":201,"line":1640},[199,45471,41636],{"class":205},[199,45473,45474],{"class":1018},"1024",[199,45476,3461],{"class":205},[199,45478,3528],{"class":1018},[199,45480,1594],{"class":205},[199,45482,45483],{"class":201,"line":1653},[199,45484,40967],{"class":205},[199,45486,45487],{"class":201,"line":1673},[199,45488,45489],{"class":1454},"        # 对模型参数初始化\n",[199,45491,45492,45494,45496,45498,45500],{"class":201,"line":1690},[199,45493,1481],{"class":1086},[199,45495,41709],{"class":205},[199,45497,28886],{"class":1086},[199,45499,41714],{"class":1018},[199,45501,41717],{"class":205},[199,45503,45504,45506,45508],{"class":201,"line":1706},[199,45505,7539],{"class":1086},[199,45507,41729],{"class":1018},[199,45509,41732],{"class":205},[199,45511,45512,45514,45517,45519,45522,45524,45526,45528,45530],{"class":201,"line":1712},[199,45513,41742],{"class":205},[199,45515,45516],{"class":8113},"mode",[199,45518,895],{"class":1086},[199,45520,45521],{"class":898},"'fan_out'",[199,45523,3461],{"class":205},[199,45525,41745],{"class":8113},[199,45527,895],{"class":1086},[199,45529,41750],{"class":898},[199,45531,1594],{"class":205},[199,45533,45534],{"class":201,"line":1720},[199,45535,45536],{"class":1454},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[199,45538,45539],{"class":201,"line":1725},[199,45540,45541],{"class":1454},"                # ② mode = 'fan_out'决定使用的fan值：\n",[199,45543,45544],{"class":201,"line":1731},[199,45545,45546],{"class":1454},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[199,45548,45549],{"class":201,"line":1745},[199,45550,45551],{"class":1454},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[199,45553,45554],{"class":201,"line":1754},[199,45555,45556],{"class":1454},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[199,45558,45559],{"class":201,"line":1763},[199,45560,45561],{"class":1454},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[199,45563,45564,45566,45568,45570,45572,45574],{"class":201,"line":1768},[199,45565,41762],{"class":1086},[199,45567,41765],{"class":205},[199,45569,41768],{"class":1086},[199,45571,41771],{"class":1086},[199,45573,41774],{"class":1018},[199,45575,6640],{"class":205},[199,45577,45578,45580,45582],{"class":201,"line":19628},[199,45579,41786],{"class":205},[199,45581,1025],{"class":1018},[199,45583,1594],{"class":205},[199,45585,45586,45589,45591],{"class":201,"line":19641},[199,45587,45588],{"class":1086},"                elif",[199,45590,41729],{"class":1018},[199,45592,41805],{"class":205},[199,45594,45595,45598,45600,45602,45604],{"class":201,"line":19646},[199,45596,45597],{"class":205},"                    nn.init.normal_(m.weight,",[199,45599,1025],{"class":1018},[199,45601,3461],{"class":205},[199,45603,41827],{"class":1018},[199,45605,1594],{"class":205},[199,45607,45608,45611,45613,45615,45617,45619],{"class":201,"line":19660},[199,45609,45610],{"class":1086},"                    if",[199,45612,41765],{"class":205},[199,45614,41768],{"class":1086},[199,45616,41771],{"class":1086},[199,45618,41774],{"class":1018},[199,45620,6640],{"class":205},[199,45622,45623,45626,45628],{"class":201,"line":19665},[199,45624,45625],{"class":205},"                        nn.init.constant_(m.bias,",[199,45627,1025],{"class":1018},[199,45629,1594],{"class":205},[199,45631,45632],{"class":201,"line":19671},[199,45633,38006],{"class":1454},[199,45635,45636,45638,45640],{"class":201,"line":19676},[199,45637,33643],{"class":1086},[199,45639,33935],{"class":878},[199,45641,33938],{"class":205},[199,45643,45644,45646,45648,45650],{"class":201,"line":19690},[199,45645,33943],{"class":205},[199,45647,895],{"class":1086},[199,45649,33665],{"class":1018},[199,45651,45652],{"class":205},".b1(x)\n",[199,45654,45655,45657,45659,45661],{"class":201,"line":19695},[199,45656,33943],{"class":205},[199,45658,895],{"class":1086},[199,45660,33665],{"class":1018},[199,45662,45663],{"class":205},".b2(x)\n",[199,45665,45666,45668,45670,45672],{"class":201,"line":19700},[199,45667,33943],{"class":205},[199,45669,895],{"class":1086},[199,45671,33665],{"class":1018},[199,45673,45674],{"class":205},".b3(x)\n",[199,45676,45677,45679,45681,45683],{"class":201,"line":19714},[199,45678,33943],{"class":205},[199,45680,895],{"class":1086},[199,45682,33665],{"class":1018},[199,45684,45685],{"class":205},".b4(x)\n",[199,45687,45688,45690,45692,45694],{"class":201,"line":19726},[199,45689,33943],{"class":205},[199,45691,895],{"class":1086},[199,45693,33665],{"class":1018},[199,45695,45696],{"class":205},".b5(x)\n",[199,45698,45699,45701],{"class":201,"line":19731},[199,45700,17612],{"class":1086},[199,45702,34051],{"class":205},[199,45704,45705],{"class":201,"line":19744},[199,45706,907],{"emptyLinePlaceholder":906},[199,45708,45709],{"class":201,"line":19749},[199,45710,45711],{"class":1454},"# 模型展示\n",[199,45713,45714,45716,45718,45720,45722],{"class":201,"line":19754},[199,45715,4470],{"class":1086},[199,45717,34062],{"class":1018},[199,45719,5853],{"class":1086},[199,45721,34067],{"class":898},[199,45723,6640],{"class":205},[199,45725,45726,45728,45730,45732,45734,45736,45738,45740,45742],{"class":201,"line":19759},[199,45727,34079],{"class":205},[199,45729,895],{"class":1086},[199,45731,33294],{"class":205},[199,45733,34086],{"class":898},[199,45735,4629],{"class":1086},[199,45737,34091],{"class":205},[199,45739,4626],{"class":1086},[199,45741,33319],{"class":898},[199,45743,1594],{"class":205},[199,45745,45746,45748,45750],{"class":201,"line":19772},[199,45747,34131],{"class":205},[199,45749,895],{"class":1086},[199,45751,45752],{"class":205},"GoogLeNet(Inception).to(device)\n",[199,45754,45755,45757,45759,45761,45763,45765,45767,45769],{"class":201,"line":19777},[199,45756,34141],{"class":1018},[199,45758,34144],{"class":205},[199,45760,1115],{"class":1018},[199,45762,3461],{"class":205},[199,45764,34343],{"class":1018},[199,45766,3461],{"class":205},[199,45768,34343],{"class":1018},[199,45770,34157],{"class":205},[24,45772,45773],{"start":36},[27,45774,42024],{},[190,45776,45778],{"className":33221,"code":45777,"language":33223,"meta":57,"style":57},"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",[196,45779,45780,45786,45792,45802,45808,45818,45828,45838,45848,45858,45862,45873,45883,45887,45891,45895,45903,45915,45925,45941,45951,45983,45997,46007,46017,46021,46031,46045,46055,46065,46075,46081,46085,46089,46093,46097,46101,46109,46129,46133,46137,46141,46145,46149,46165,46169,46173,46181,46185,46189,46197,46201,46205,46209,46217,46221,46225,46229,46233,46241,46245,46253,46257,46265,46269,46277,46281,46289,46293,46297,46305,46309,46313,46317,46329,46353,46367,46371,46375,46379,46387,46391,46399,46403,46411,46415,46423,46427,46435,46439,46447,46451,46463,46467,46475,46479,46487,46491,46495,46499,46503,46511,46515,46531,46535,46543,46547,46551,46555,46559,46563,46567,46571,46587,46591,46603,46607,46619,46623,46635,46639,46647,46651,46659,46663,46667,46671,46677,46681,46689,46693,46709,46713,46721,46725,46741,46753,46757,46769,46773,46777,46785,46789,46793,46801,46805,46813,46817,46825,46829,46833,46875,46917,46921,46925,46941,46945,46961,46965,46969,46977,46981,46985,46997,47035,47039,47043,47051,47055,47069,47079,47085,47091,47097,47103,47107,47111,47117,47121,47125,47133,47137,47155,47159,47163,47167,47183,47187,47191,47195,47199,47203,47223,47243,47247,47251,47255,47263,47271,47275,47291,47311,47331,47335,47339,47347,47355,47359,47363,47367,47379,47383,47393,47401,47418],{"__ignoreMap":57},[199,45781,45782,45784],{"class":201,"line":202},[199,45783,33235],{"class":1086},[199,45785,34664],{"class":205},[199,45787,45788,45790],{"class":201,"line":36},[199,45789,33235],{"class":1086},[199,45791,34671],{"class":205},[199,45793,45794,45796,45798,45800],{"class":201,"line":73},[199,45795,33235],{"class":1086},[199,45797,34682],{"class":205},[199,45799,34225],{"class":1086},[199,45801,34687],{"class":205},[199,45803,45804,45806],{"class":201,"line":333},[199,45805,33235],{"class":1086},[199,45807,33238],{"class":205},[199,45809,45810,45812,45814,45816],{"class":201,"line":227},[199,45811,33579],{"class":1086},[199,45813,34257],{"class":205},[199,45815,33235],{"class":1086},[199,45817,34704],{"class":205},[199,45819,45820,45822,45824,45826],{"class":201,"line":238},[199,45821,33579],{"class":1086},[199,45823,34210],{"class":205},[199,45825,33235],{"class":1086},[199,45827,34215],{"class":205},[199,45829,45830,45832,45834,45836],{"class":201,"line":252},[199,45831,33579],{"class":1086},[199,45833,34240],{"class":205},[199,45835,33235],{"class":1086},[199,45837,34245],{"class":205},[199,45839,45840,45842,45844,45846],{"class":201,"line":388},[199,45841,33235],{"class":1086},[199,45843,34257],{"class":205},[199,45845,34225],{"class":1086},[199,45847,34262],{"class":205},[199,45849,45850,45852,45854,45856],{"class":201,"line":415},[199,45851,33235],{"class":1086},[199,45853,34274],{"class":205},[199,45855,34225],{"class":1086},[199,45857,34279],{"class":205},[199,45859,45860],{"class":201,"line":426},[199,45861,34749],{"class":1454},[199,45863,45864,45866,45868,45870],{"class":201,"line":1015},[199,45865,33579],{"class":1086},[199,45867,34756],{"class":205},[199,45869,33235],{"class":1086},[199,45871,45872],{"class":205}," GoogLeNet, Inception\n",[199,45874,45875,45877,45879,45881],{"class":201,"line":1031},[199,45876,33579],{"class":1086},[199,45878,33582],{"class":205},[199,45880,33235],{"class":1086},[199,45882,33587],{"class":205},[199,45884,45885],{"class":201,"line":1043},[199,45886,907],{"emptyLinePlaceholder":906},[199,45888,45889],{"class":201,"line":1049},[199,45890,907],{"emptyLinePlaceholder":906},[199,45892,45893],{"class":201,"line":1054},[199,45894,34784],{"class":1454},[199,45896,45897,45899,45901],{"class":201,"line":1062},[199,45898,34789],{"class":1086},[199,45900,34792],{"class":878},[199,45902,34795],{"class":205},[199,45904,45905,45907,45909,45911,45913],{"class":201,"line":1075},[199,45906,34800],{"class":205},[199,45908,895],{"class":1086},[199,45910,34297],{"class":205},[199,45912,34305],{"class":898},[199,45914,34308],{"class":205},[199,45916,45917,45919,45921,45923],{"class":201,"line":1092},[199,45918,34813],{"class":8113},[199,45920,895],{"class":1086},[199,45922,34318],{"class":1018},[199,45924,34308],{"class":205},[199,45926,45927,45929,45931,45933,45935,45937,45939],{"class":201,"line":1107},[199,45928,34824],{"class":8113},[199,45930,895],{"class":1086},[199,45932,34335],{"class":205},[199,45934,34338],{"class":8113},[199,45936,895],{"class":1086},[199,45938,38290],{"class":1018},[199,45940,34346],{"class":205},[199,45942,45943,45945,45947,45949],{"class":201,"line":1128},[199,45944,34841],{"class":8113},[199,45946,895],{"class":1086},[199,45948,34318],{"class":1018},[199,45950,1594],{"class":205},[199,45952,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977,45979,45981],{"class":201,"line":1146},[199,45954,34852],{"class":205},[199,45956,895],{"class":1086},[199,45958,34857],{"class":205},[199,45960,34860],{"class":1018},[199,45962,1537],{"class":205},[199,45964,34865],{"class":1018},[199,45966,3537],{"class":1086},[199,45968,10255],{"class":1018},[199,45970,34872],{"class":205},[199,45972,34860],{"class":1018},[199,45974,1537],{"class":205},[199,45976,34879],{"class":1018},[199,45978,3537],{"class":1086},[199,45980,10255],{"class":1018},[199,45982,34886],{"class":205},[199,45984,45985,45987,45989,45991,45993,45995],{"class":201,"line":1163},[199,45986,34891],{"class":205},[199,45988,895],{"class":1086},[199,45990,34896],{"class":205},[199,45992,34379],{"class":8113},[199,45994,895],{"class":1086},[199,45996,34384],{"class":205},[199,45998,45999,46001,46003,46005],{"class":201,"line":1176},[199,46000,34907],{"class":8113},[199,46002,895],{"class":1086},[199,46004,3285],{"class":1018},[199,46006,34308],{"class":205},[199,46008,46009,46011,46013,46015],{"class":201,"line":1189},[199,46010,34919],{"class":8113},[199,46012,895],{"class":1086},[199,46014,34318],{"class":1018},[199,46016,34308],{"class":205},[199,46018,46019],{"class":201,"line":1202},[199,46020,34930],{"class":1454},[199,46022,46023,46025,46027,46029],{"class":201,"line":1207},[199,46024,34935],{"class":8113},[199,46026,895],{"class":1086},[199,46028,3478],{"class":1018},[199,46030,1594],{"class":205},[199,46032,46033,46035,46037,46039,46041,46043],{"class":201,"line":1212},[199,46034,34946],{"class":205},[199,46036,895],{"class":1086},[199,46038,34376],{"class":205},[199,46040,34379],{"class":8113},[199,46042,895],{"class":1086},[199,46044,34957],{"class":205},[199,46046,46047,46049,46051,46053],{"class":201,"line":1225},[199,46048,34962],{"class":8113},[199,46050,895],{"class":1086},[199,46052,3285],{"class":1018},[199,46054,34308],{"class":205},[199,46056,46057,46059,46061,46063],{"class":201,"line":1236},[199,46058,34973],{"class":8113},[199,46060,895],{"class":1086},[199,46062,34318],{"class":1018},[199,46064,34308],{"class":205},[199,46066,46067,46069,46071,46073],{"class":201,"line":1249},[199,46068,34984],{"class":8113},[199,46070,895],{"class":1086},[199,46072,3478],{"class":1018},[199,46074,1594],{"class":205},[199,46076,46077,46079],{"class":201,"line":1262},[199,46078,6989],{"class":1086},[199,46080,34997],{"class":205},[199,46082,46083],{"class":201,"line":1275},[199,46084,907],{"emptyLinePlaceholder":906},[199,46086,46087],{"class":201,"line":1287},[199,46088,35006],{"class":1454},[199,46090,46091],{"class":201,"line":1292},[199,46092,35011],{"class":1454},[199,46094,46095],{"class":201,"line":1297},[199,46096,907],{"emptyLinePlaceholder":906},[199,46098,46099],{"class":201,"line":1310},[199,46100,35020],{"class":1454},[199,46102,46103,46105,46107],{"class":201,"line":1315},[199,46104,34789],{"class":1086},[199,46106,35027],{"class":878},[199,46108,35030],{"class":205},[199,46110,46111,46113,46115,46117,46119,46121,46123,46125,46127],{"class":201,"line":1330},[199,46112,34079],{"class":205},[199,46114,895],{"class":1086},[199,46116,33294],{"class":205},[199,46118,34086],{"class":898},[199,46120,4629],{"class":1086},[199,46122,34091],{"class":205},[199,46124,4626],{"class":1086},[199,46126,35049],{"class":898},[199,46128,1594],{"class":205},[199,46130,46131],{"class":201,"line":1335},[199,46132,907],{"emptyLinePlaceholder":906},[199,46134,46135],{"class":201,"line":1340},[199,46136,907],{"emptyLinePlaceholder":906},[199,46138,46139],{"class":201,"line":1352},[199,46140,35064],{"class":1454},[199,46142,46143],{"class":201,"line":1367},[199,46144,35069],{"class":1454},[199,46146,46147],{"class":201,"line":1381},[199,46148,35074],{"class":1454},[199,46150,46151,46153,46155,46157,46159,46161,46163],{"class":201,"line":1396},[199,46152,35079],{"class":205},[199,46154,895],{"class":1086},[199,46156,35084],{"class":205},[199,46158,35087],{"class":8113},[199,46160,895],{"class":1086},[199,46162,35092],{"class":1018},[199,46164,1594],{"class":205},[199,46166,46167],{"class":201,"line":1401},[199,46168,907],{"emptyLinePlaceholder":906},[199,46170,46171],{"class":201,"line":1411},[199,46172,35103],{"class":1454},[199,46174,46175,46177,46179],{"class":201,"line":1421},[199,46176,35108],{"class":205},[199,46178,895],{"class":1086},[199,46180,35113],{"class":205},[199,46182,46183],{"class":201,"line":1426},[199,46184,907],{"emptyLinePlaceholder":906},[199,46186,46187],{"class":201,"line":1436},[199,46188,35122],{"class":1454},[199,46190,46191,46193,46195],{"class":201,"line":1441},[199,46192,34131],{"class":205},[199,46194,895],{"class":1086},[199,46196,35131],{"class":205},[199,46198,46199],{"class":201,"line":1451},[199,46200,35136],{"class":1454},[199,46202,46203],{"class":201,"line":1458},[199,46204,35141],{"class":1454},[199,46206,46207],{"class":201,"line":1464},[199,46208,35146],{"class":1454},[199,46210,46211,46213,46215],{"class":201,"line":1478},[199,46212,35151],{"class":205},[199,46214,895],{"class":1086},[199,46216,35156],{"class":205},[199,46218,46219],{"class":201,"line":1516},[199,46220,907],{"emptyLinePlaceholder":906},[199,46222,46223],{"class":201,"line":1522},[199,46224,907],{"emptyLinePlaceholder":906},[199,46226,46227],{"class":201,"line":1528},[199,46228,35169],{"class":1454},[199,46230,46231],{"class":201,"line":1557},[199,46232,35174],{"class":1454},[199,46234,46235,46237,46239],{"class":201,"line":1563},[199,46236,35179],{"class":205},[199,46238,895],{"class":1086},[199,46240,35184],{"class":1018},[199,46242,46243],{"class":201,"line":1568},[199,46244,35189],{"class":1454},[199,46246,46247,46249,46251],{"class":201,"line":1574},[199,46248,35194],{"class":205},[199,46250,895],{"class":1086},[199,46252,35199],{"class":205},[199,46254,46255],{"class":201,"line":1580},[199,46256,35204],{"class":1454},[199,46258,46259,46261,46263],{"class":201,"line":1597},[199,46260,35209],{"class":205},[199,46262,895],{"class":1086},[199,46264,35199],{"class":205},[199,46266,46267],{"class":201,"line":1602},[199,46268,35218],{"class":1454},[199,46270,46271,46273,46275],{"class":201,"line":1608},[199,46272,35223],{"class":205},[199,46274,895],{"class":1086},[199,46276,35199],{"class":205},[199,46278,46279],{"class":201,"line":1640},[199,46280,35232],{"class":1454},[199,46282,46283,46285,46287],{"class":201,"line":1653},[199,46284,35237],{"class":205},[199,46286,895],{"class":1086},[199,46288,35199],{"class":205},[199,46290,46291],{"class":201,"line":1673},[199,46292,907],{"emptyLinePlaceholder":906},[199,46294,46295],{"class":201,"line":1690},[199,46296,35250],{"class":1454},[199,46298,46299,46301,46303],{"class":201,"line":1706},[199,46300,35255],{"class":205},[199,46302,895],{"class":1086},[199,46304,35260],{"class":205},[199,46306,46307],{"class":201,"line":1712},[199,46308,907],{"emptyLinePlaceholder":906},[199,46310,46311],{"class":201,"line":1720},[199,46312,907],{"emptyLinePlaceholder":906},[199,46314,46315],{"class":201,"line":1725},[199,46316,35273],{"class":1454},[199,46318,46319,46321,46323,46325,46327],{"class":201,"line":1731},[199,46320,1937],{"class":1086},[199,46322,35280],{"class":205},[199,46324,28886],{"class":1086},[199,46326,35285],{"class":1018},[199,46328,35288],{"class":205},[199,46330,46331,46333,46335,46337,46339,46341,46343,46345,46347,46349,46351],{"class":201,"line":1745},[199,46332,35293],{"class":1018},[199,46334,1537],{"class":205},[199,46336,35298],{"class":898},[199,46338,35301],{"class":1018},[199,46340,3664],{"class":898},[199,46342,35301],{"class":1018},[199,46344,3337],{"class":898},[199,46346,35310],{"class":205},[199,46348,1998],{"class":1086},[199,46350,1115],{"class":1018},[199,46352,1554],{"class":205},[199,46354,46355,46357,46359,46361,46363,46365],{"class":201,"line":1754},[199,46356,35293],{"class":1018},[199,46358,1537],{"class":205},[199,46360,35325],{"class":898},[199,46362,3537],{"class":1086},[199,46364,3528],{"class":1018},[199,46366,1594],{"class":205},[199,46368,46369],{"class":201,"line":1763},[199,46370,907],{"emptyLinePlaceholder":906},[199,46372,46373],{"class":201,"line":1768},[199,46374,35340],{"class":1454},[199,46376,46377],{"class":201,"line":19628},[199,46378,35345],{"class":1454},[199,46380,46381,46383,46385],{"class":201,"line":19641},[199,46382,35350],{"class":205},[199,46384,895],{"class":1086},[199,46386,35184],{"class":1018},[199,46388,46389],{"class":201,"line":19646},[199,46390,35359],{"class":1454},[199,46392,46393,46395,46397],{"class":201,"line":19660},[199,46394,35364],{"class":205},[199,46396,895],{"class":1086},[199,46398,5989],{"class":1018},[199,46400,46401],{"class":201,"line":19665},[199,46402,35373],{"class":1454},[199,46404,46405,46407,46409],{"class":201,"line":19671},[199,46406,35378],{"class":205},[199,46408,895],{"class":1086},[199,46410,35184],{"class":1018},[199,46412,46413],{"class":201,"line":19676},[199,46414,35387],{"class":1454},[199,46416,46417,46419,46421],{"class":201,"line":19690},[199,46418,35392],{"class":205},[199,46420,895],{"class":1086},[199,46422,5989],{"class":1018},[199,46424,46425],{"class":201,"line":19695},[199,46426,35401],{"class":1454},[199,46428,46429,46431,46433],{"class":201,"line":19700},[199,46430,35406],{"class":205},[199,46432,895],{"class":1086},[199,46434,5989],{"class":1018},[199,46436,46437],{"class":201,"line":19714},[199,46438,35415],{"class":1454},[199,46440,46441,46443,46445],{"class":201,"line":19726},[199,46442,35420],{"class":205},[199,46444,895],{"class":1086},[199,46446,5989],{"class":1018},[199,46448,46449],{"class":201,"line":19731},[199,46450,35429],{"class":1454},[199,46452,46453,46455,46457,46459,46461],{"class":201,"line":19744},[199,46454,1481],{"class":1086},[199,46456,34443],{"class":205},[199,46458,28886],{"class":1086},[199,46460,34448],{"class":1018},[199,46462,35442],{"class":205},[199,46464,46465],{"class":201,"line":19749},[199,46466,35447],{"class":1454},[199,46468,46469,46471,46473],{"class":201,"line":19754},[199,46470,35452],{"class":205},[199,46472,895],{"class":1086},[199,46474,35457],{"class":205},[199,46476,46477],{"class":201,"line":19759},[199,46478,35462],{"class":1454},[199,46480,46481,46483,46485],{"class":201,"line":19772},[199,46482,35467],{"class":205},[199,46484,895],{"class":1086},[199,46486,35472],{"class":205},[199,46488,46489],{"class":201,"line":19777},[199,46490,35478],{"class":1454},[199,46492,46493],{"class":201,"line":35475},[199,46494,35484],{"class":205},[199,46496,46497],{"class":201,"line":35481},[199,46498,35490],{"class":1454},[199,46500,46501],{"class":201,"line":35487},[199,46502,35496],{"class":1454},[199,46504,46505,46507,46509],{"class":201,"line":35493},[199,46506,35502],{"class":205},[199,46508,895],{"class":1086},[199,46510,35507],{"class":205},[199,46512,46513],{"class":201,"line":35499},[199,46514,35513],{"class":1454},[199,46516,46517,46519,46521,46523,46525,46527,46529],{"class":201,"line":35510},[199,46518,35519],{"class":205},[199,46520,895],{"class":1086},[199,46522,35524],{"class":205},[199,46524,35527],{"class":8113},[199,46526,895],{"class":1086},[199,46528,1115],{"class":1018},[199,46530,1594],{"class":205},[199,46532,46533],{"class":201,"line":35516},[199,46534,35539],{"class":1454},[199,46536,46537,46539,46541],{"class":201,"line":35536},[199,46538,35545],{"class":205},[199,46540,895],{"class":1086},[199,46542,35550],{"class":205},[199,46544,46545],{"class":201,"line":35542},[199,46546,35556],{"class":1454},[199,46548,46549],{"class":201,"line":35553},[199,46550,35562],{"class":205},[199,46552,46553],{"class":201,"line":35559},[199,46554,35568],{"class":1454},[199,46556,46557],{"class":201,"line":35565},[199,46558,35574],{"class":205},[199,46560,46561],{"class":201,"line":35571},[199,46562,35580],{"class":1454},[199,46564,46565],{"class":201,"line":35577},[199,46566,35586],{"class":205},[199,46568,46569],{"class":201,"line":35583},[199,46570,35592],{"class":1454},[199,46572,46573,46575,46577,46579,46581,46583,46585],{"class":201,"line":35589},[199,46574,35598],{"class":205},[199,46576,12362],{"class":1086},[199,46578,35603],{"class":205},[199,46580,3537],{"class":1086},[199,46582,35608],{"class":205},[199,46584,1025],{"class":1018},[199,46586,1594],{"class":205},[199,46588,46589],{"class":201,"line":35595},[199,46590,35618],{"class":1454},[199,46592,46593,46595,46597,46599,46601],{"class":201,"line":35615},[199,46594,35624],{"class":205},[199,46596,12362],{"class":1086},[199,46598,35629],{"class":205},[199,46600,5853],{"class":1086},[199,46602,35634],{"class":205},[199,46604,46605],{"class":201,"line":35621},[199,46606,35640],{"class":1454},[199,46608,46609,46611,46613,46615,46617],{"class":201,"line":35637},[199,46610,35646],{"class":205},[199,46612,12362],{"class":1086},[199,46614,35608],{"class":205},[199,46616,1025],{"class":1018},[199,46618,1594],{"class":205},[199,46620,46621],{"class":201,"line":35643},[199,46622,35660],{"class":1454},[199,46624,46625,46627,46629,46631,46633],{"class":201,"line":35657},[199,46626,1481],{"class":1086},[199,46628,35668],{"class":205},[199,46630,28886],{"class":1086},[199,46632,34448],{"class":1018},[199,46634,35675],{"class":205},[199,46636,46637],{"class":201,"line":35663},[199,46638,35681],{"class":1454},[199,46640,46641,46643,46645],{"class":201,"line":35678},[199,46642,35452],{"class":205},[199,46644,895],{"class":1086},[199,46646,35457],{"class":205},[199,46648,46649],{"class":201,"line":35684},[199,46650,35696],{"class":1454},[199,46652,46653,46655,46657],{"class":201,"line":35693},[199,46654,35467],{"class":205},[199,46656,895],{"class":1086},[199,46658,35472],{"class":205},[199,46660,46661],{"class":201,"line":35699},[199,46662,35711],{"class":1454},[199,46664,46665],{"class":201,"line":35708},[199,46666,35717],{"class":205},[199,46668,46669],{"class":201,"line":35714},[199,46670,39197],{"class":1454},[199,46672,46673,46675],{"class":201,"line":35720},[199,46674,35723],{"class":1086},[199,46676,35726],{"class":205},[199,46678,46679],{"class":201,"line":35729},[199,46680,35732],{"class":1454},[199,46682,46683,46685,46687],{"class":201,"line":35735},[199,46684,39212],{"class":205},[199,46686,895],{"class":1086},[199,46688,35507],{"class":205},[199,46690,46691],{"class":201,"line":35746},[199,46692,35749],{"class":1454},[199,46694,46695,46697,46699,46701,46703,46705,46707],{"class":201,"line":35752},[199,46696,39225],{"class":205},[199,46698,895],{"class":1086},[199,46700,35524],{"class":205},[199,46702,35527],{"class":8113},[199,46704,895],{"class":1086},[199,46706,1115],{"class":1018},[199,46708,1594],{"class":205},[199,46710,46711],{"class":201,"line":35771},[199,46712,35774],{"class":1454},[199,46714,46715,46717,46719],{"class":201,"line":35777},[199,46716,39246],{"class":205},[199,46718,895],{"class":1086},[199,46720,35550],{"class":205},[199,46722,46723],{"class":201,"line":35788},[199,46724,35791],{"class":1454},[199,46726,46727,46729,46731,46733,46735,46737,46739],{"class":201,"line":35794},[199,46728,39259],{"class":205},[199,46730,12362],{"class":1086},[199,46732,39264],{"class":205},[199,46734,3537],{"class":1086},[199,46736,35608],{"class":205},[199,46738,1025],{"class":1018},[199,46740,1594],{"class":205},[199,46742,46743,46745,46747,46749,46751],{"class":201,"line":35814},[199,46744,39277],{"class":205},[199,46746,12362],{"class":1086},[199,46748,35629],{"class":205},[199,46750,5853],{"class":1086},[199,46752,35634],{"class":205},[199,46754,46755],{"class":201,"line":35830},[199,46756,39290],{"class":1454},[199,46758,46759,46761,46763,46765,46767],{"class":201,"line":35836},[199,46760,39295],{"class":205},[199,46762,12362],{"class":1086},[199,46764,35608],{"class":205},[199,46766,1025],{"class":1018},[199,46768,1594],{"class":205},[199,46770,46771],{"class":201,"line":35850},[199,46772,35853],{"class":1454},[199,46774,46775],{"class":201,"line":35856},[199,46776,35859],{"class":1454},[199,46778,46779,46781,46783],{"class":201,"line":35862},[199,46780,35865],{"class":205},[199,46782,3664],{"class":1086},[199,46784,35870],{"class":205},[199,46786,46787],{"class":201,"line":35873},[199,46788,35876],{"class":1454},[199,46790,46791],{"class":201,"line":35879},[199,46792,35882],{"class":1454},[199,46794,46795,46797,46799],{"class":201,"line":35885},[199,46796,35888],{"class":205},[199,46798,3664],{"class":1086},[199,46800,35870],{"class":205},[199,46802,46803],{"class":201,"line":35895},[199,46804,35898],{"class":1454},[199,46806,46807,46809,46811],{"class":201,"line":35901},[199,46808,35904],{"class":205},[199,46810,3664],{"class":1086},[199,46812,35909],{"class":205},[199,46814,46815],{"class":201,"line":35912},[199,46816,35915],{"class":1454},[199,46818,46819,46821,46823],{"class":201,"line":35918},[199,46820,35921],{"class":205},[199,46822,3664],{"class":1086},[199,46824,35909],{"class":205},[199,46826,46827],{"class":201,"line":35928},[199,46828,907],{"emptyLinePlaceholder":906},[199,46830,46831],{"class":201,"line":35933},[199,46832,35936],{"class":1454},[199,46834,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873],{"class":201,"line":35939},[199,46836,35293],{"class":1018},[199,46838,1537],{"class":205},[199,46840,6493],{"class":898},[199,46842,35301],{"class":1018},[199,46844,35950],{"class":898},[199,46846,3974],{"class":1018},[199,46848,35955],{"class":1086},[199,46850,759],{"class":1018},[199,46852,35960],{"class":898},[199,46854,3974],{"class":1018},[199,46856,35955],{"class":1086},[199,46858,759],{"class":1018},[199,46860,6493],{"class":898},[199,46862,35971],{"class":205},[199,46864,1998],{"class":1086},[199,46866,1115],{"class":1018},[199,46868,35978],{"class":205},[199,46870,1998],{"class":1086},[199,46872,1115],{"class":1018},[199,46874,35985],{"class":205},[199,46876,46877,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915],{"class":201,"line":35988},[199,46878,35293],{"class":1018},[199,46880,1537],{"class":205},[199,46882,6493],{"class":898},[199,46884,35301],{"class":1018},[199,46886,35999],{"class":898},[199,46888,3974],{"class":1018},[199,46890,35955],{"class":1086},[199,46892,759],{"class":1018},[199,46894,36008],{"class":898},[199,46896,3974],{"class":1018},[199,46898,35955],{"class":1086},[199,46900,759],{"class":1018},[199,46902,6493],{"class":898},[199,46904,36019],{"class":205},[199,46906,1998],{"class":1086},[199,46908,1115],{"class":1018},[199,46910,36026],{"class":205},[199,46912,1998],{"class":1086},[199,46914,1115],{"class":1018},[199,46916,35985],{"class":205},[199,46918,46919],{"class":201,"line":36035},[199,46920,907],{"emptyLinePlaceholder":906},[199,46922,46923],{"class":201,"line":36040},[199,46924,36043],{"class":1454},[199,46926,46927,46929,46931,46933,46935,46937,46939],{"class":201,"line":36046},[199,46928,2017],{"class":1086},[199,46930,36051],{"class":205},[199,46932,1998],{"class":1086},[199,46934,1115],{"class":1018},[199,46936,1667],{"class":205},[199,46938,1217],{"class":1086},[199,46940,36062],{"class":205},[199,46942,46943],{"class":201,"line":36065},[199,46944,36068],{"class":1454},[199,46946,46947,46949,46951,46953,46955,46957,46959],{"class":201,"line":36071},[199,46948,36074],{"class":205},[199,46950,3135],{"class":1018},[199,46952,895],{"class":1086},[199,46954,36081],{"class":205},[199,46956,1998],{"class":1086},[199,46958,1115],{"class":1018},[199,46960,1932],{"class":205},[199,46962,46963],{"class":201,"line":36090},[199,46964,36093],{"class":1454},[199,46966,46967],{"class":201,"line":36096},[199,46968,36099],{"class":1454},[199,46970,46971,46973,46975],{"class":201,"line":36102},[199,46972,36105],{"class":205},[199,46974,895],{"class":1086},[199,46976,35156],{"class":205},[199,46978,46979],{"class":201,"line":36112},[199,46980,907],{"emptyLinePlaceholder":906},[199,46982,46983],{"class":201,"line":36117},[199,46984,36120],{"class":1454},[199,46986,46987,46989,46991,46993,46995],{"class":201,"line":36123},[199,46988,36126],{"class":205},[199,46990,895],{"class":1086},[199,46992,36131],{"class":205},[199,46994,1998],{"class":1086},[199,46996,36136],{"class":205},[199,46998,46999,47001,47003,47005,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029,47031,47033],{"class":201,"line":36139},[199,47000,35293],{"class":1018},[199,47002,1537],{"class":205},[199,47004,36146],{"class":898},[199,47006,3974],{"class":1018},[199,47008,36151],{"class":1086},[199,47010,759],{"class":1018},[199,47012,3624],{"class":898},[199,47014,3974],{"class":1018},[199,47016,36151],{"class":1086},[199,47018,759],{"class":1018},[199,47020,36164],{"class":898},[199,47022,36167],{"class":205},[199,47024,36170],{"class":1086},[199,47026,3985],{"class":1018},[199,47028,36175],{"class":205},[199,47030,3412],{"class":1086},[199,47032,3985],{"class":1018},[199,47034,1554],{"class":205},[199,47036,47037],{"class":201,"line":36184},[199,47038,39574],{"class":1454},[199,47040,47041],{"class":201,"line":36190},[199,47042,39579],{"class":1454},[199,47044,47045,47047,47049],{"class":201,"line":36196},[199,47046,39584],{"class":205},[199,47048,36208],{"class":898},[199,47050,1594],{"class":205},[199,47052,47053],{"class":201,"line":36202},[199,47054,36228],{"class":1454},[199,47056,47057,47059,47061,47063,47065,47067],{"class":201,"line":36213},[199,47058,36234],{"class":205},[199,47060,895],{"class":1086},[199,47062,36239],{"class":205},[199,47064,36242],{"class":8113},[199,47066,895],{"class":1086},[199,47068,4485],{"class":205},[199,47070,47071,47073,47075,47077],{"class":201,"line":36219},[199,47072,36252],{"class":898},[199,47074,3938],{"class":205},[199,47076,36257],{"class":1018},[199,47078,36260],{"class":205},[199,47080,47081,47083],{"class":201,"line":36225},[199,47082,36266],{"class":898},[199,47084,36269],{"class":205},[199,47086,47087,47089],{"class":201,"line":36231},[199,47088,36275],{"class":898},[199,47090,36278],{"class":205},[199,47092,47093,47095],{"class":201,"line":36249},[199,47094,36284],{"class":898},[199,47096,36287],{"class":205},[199,47098,47099,47101],{"class":201,"line":36263},[199,47100,36293],{"class":898},[199,47102,36296],{"class":205},[199,47104,47105],{"class":201,"line":36272},[199,47106,36302],{"class":205},[199,47108,47109],{"class":201,"line":36281},[199,47110,36308],{"class":1454},[199,47112,47113,47115],{"class":201,"line":36290},[199,47114,6989],{"class":1086},[199,47116,36316],{"class":205},[199,47118,47119],{"class":201,"line":36299},[199,47120,907],{"emptyLinePlaceholder":906},[199,47122,47123],{"class":201,"line":36305},[199,47124,36327],{"class":1454},[199,47126,47127,47129,47131],{"class":201,"line":36311},[199,47128,34789],{"class":1086},[199,47130,36335],{"class":878},[199,47132,36338],{"class":205},[199,47134,47135],{"class":201,"line":36319},[199,47136,36344],{"class":1454},[199,47138,47139,47141,47143,47145,47147,47149,47151,47153],{"class":201,"line":36324},[199,47140,36350],{"class":205},[199,47142,34535],{"class":8113},[199,47144,895],{"class":1086},[199,47146,1537],{"class":205},[199,47148,3579],{"class":1018},[199,47150,3461],{"class":205},[199,47152,1915],{"class":1018},[199,47154,1554],{"class":205},[199,47156,47157],{"class":201,"line":36330},[199,47158,36370],{"class":1454},[199,47160,47161],{"class":201,"line":36341},[199,47162,36376],{"class":1454},[199,47164,47165],{"class":201,"line":36347},[199,47166,36382],{"class":1454},[199,47168,47169,47171,47173,47175,47177,47179,47181],{"class":201,"line":36367},[199,47170,34569],{"class":205},[199,47172,1115],{"class":1018},[199,47174,3461],{"class":205},[199,47176,1925],{"class":1018},[199,47178,3461],{"class":205},[199,47180,1115],{"class":1018},[199,47182,1594],{"class":205},[199,47184,47185],{"class":201,"line":36373},[199,47186,36405],{"class":1454},[199,47188,47189],{"class":201,"line":36379},[199,47190,36411],{"class":1454},[199,47192,47193],{"class":201,"line":36385},[199,47194,36417],{"class":1454},[199,47196,47197],{"class":201,"line":36402},[199,47198,36423],{"class":1454},[199,47200,47201],{"class":201,"line":36408},[199,47202,36429],{"class":1454},[199,47204,47205,47207,47209,47211,47213,47215,47217,47219,47221],{"class":201,"line":36414},[199,47206,36435],{"class":205},[199,47208,36438],{"class":898},[199,47210,36441],{"class":205},[199,47212,36444],{"class":898},[199,47214,3461],{"class":205},[199,47216,36449],{"class":8113},[199,47218,895],{"class":1086},[199,47220,36454],{"class":898},[199,47222,1594],{"class":205},[199,47224,47225,47227,47229,47231,47233,47235,47237,47239,47241],{"class":201,"line":36420},[199,47226,36435],{"class":205},[199,47228,36438],{"class":898},[199,47230,36466],{"class":205},[199,47232,36469],{"class":898},[199,47234,3461],{"class":205},[199,47236,36449],{"class":8113},[199,47238,895],{"class":1086},[199,47240,36478],{"class":898},[199,47242,1594],{"class":205},[199,47244,47245],{"class":201,"line":36426},[199,47246,36486],{"class":1454},[199,47248,47249],{"class":201,"line":36432},[199,47250,36492],{"class":205},[199,47252,47253],{"class":201,"line":36459},[199,47254,36498],{"class":1454},[199,47256,47257,47259,47261],{"class":201,"line":36483},[199,47258,36504],{"class":205},[199,47260,36507],{"class":898},[199,47262,1594],{"class":205},[199,47264,47265,47267,47269],{"class":201,"line":36489},[199,47266,36515],{"class":205},[199,47268,36518],{"class":898},[199,47270,1594],{"class":205},[199,47272,47273],{"class":201,"line":36495},[199,47274,36526],{"class":1454},[199,47276,47277,47279,47281,47283,47285,47287,47289],{"class":201,"line":36501},[199,47278,34569],{"class":205},[199,47280,1115],{"class":1018},[199,47282,3461],{"class":205},[199,47284,1925],{"class":1018},[199,47286,3461],{"class":205},[199,47288,1925],{"class":1018},[199,47290,1594],{"class":205},[199,47292,47293,47295,47297,47299,47301,47303,47305,47307,47309],{"class":201,"line":36512},[199,47294,36435],{"class":205},[199,47296,36438],{"class":898},[199,47298,36553],{"class":205},[199,47300,36444],{"class":898},[199,47302,3461],{"class":205},[199,47304,36449],{"class":8113},[199,47306,895],{"class":1086},[199,47308,36564],{"class":898},[199,47310,1594],{"class":205},[199,47312,47313,47315,47317,47319,47321,47323,47325,47327,47329],{"class":201,"line":36523},[199,47314,36435],{"class":205},[199,47316,36438],{"class":898},[199,47318,36576],{"class":205},[199,47320,36469],{"class":898},[199,47322,3461],{"class":205},[199,47324,36449],{"class":8113},[199,47326,895],{"class":1086},[199,47328,36587],{"class":898},[199,47330,1594],{"class":205},[199,47332,47333],{"class":201,"line":36529},[199,47334,36595],{"class":1454},[199,47336,47337],{"class":201,"line":36546},[199,47338,36492],{"class":205},[199,47340,47341,47343,47345],{"class":201,"line":36569},[199,47342,36504],{"class":205},[199,47344,36438],{"class":898},[199,47346,1594],{"class":205},[199,47348,47349,47351,47353],{"class":201,"line":36592},[199,47350,36515],{"class":205},[199,47352,36617],{"class":898},[199,47354,1594],{"class":205},[199,47356,47357],{"class":201,"line":36598},[199,47358,36625],{"class":205},[199,47360,47361],{"class":201,"line":36603},[199,47362,907],{"emptyLinePlaceholder":906},[199,47364,47365],{"class":201,"line":36612},[199,47366,36636],{"class":1454},[199,47368,47369,47371,47373,47375,47377],{"class":201,"line":36622},[199,47370,4470],{"class":1086},[199,47372,34062],{"class":1018},[199,47374,5853],{"class":1086},[199,47376,34067],{"class":898},[199,47378,6640],{"class":205},[199,47380,47381],{"class":201,"line":36628},[199,47382,36655],{"class":1454},[199,47384,47385,47388,47390],{"class":201,"line":36633},[199,47386,47387],{"class":205},"    GoogLeNet",[199,47389,895],{"class":1086},[199,47391,47392],{"class":205},"GoogLeNet(Inception)\n",[199,47394,47395,47397,47399],{"class":201,"line":36639},[199,47396,36672],{"class":205},[199,47398,895],{"class":1086},[199,47400,36677],{"class":205},[199,47402,47403,47405,47407,47410,47412,47414,47416],{"class":201,"line":36652},[199,47404,36234],{"class":205},[199,47406,895],{"class":1086},[199,47408,47409],{"class":205},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[199,47411,36690],{"class":8113},[199,47413,895],{"class":1086},[199,47415,4026],{"class":1018},[199,47417,1594],{"class":205},[199,47419,47420],{"class":201,"line":36658},[199,47421,36702],{"class":205},[24,47423,47424],{"start":73},[27,47425,43415],{},[190,47427,47429],{"className":33221,"code":47428,"language":33223,"meta":57,"style":57},"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",[196,47430,47431,47437,47447,47457,47461,47471,47482,47486,47490,47494,47502,47518,47528,47544,47554,47568,47572,47582,47592,47602,47608,47612,47616,47624,47628,47644,47652,47656,47660,47668,47676,47680,47684,47688,47692,47698,47702,47712,47720,47728,47732,47736,47740,47748,47752,47768,47772,47776,47780,47792,47796,47808,47812,47816,47828,47832,47842,47846,47850,47862,47866,47874,47878,47882,47890,47894,47902,47906,47910,47914,47918,47922,47938,47946,47950,47954,48002,48008,48012,48022,48030,48038,48042,48046,48050,48054,48062,48066,48082,48086,48094,48102],{"__ignoreMap":57},[199,47432,47433,47435],{"class":201,"line":202},[199,47434,33235],{"class":1086},[199,47436,33238],{"class":205},[199,47438,47439,47441,47443,47445],{"class":201,"line":36},[199,47440,33235],{"class":1086},[199,47442,34257],{"class":205},[199,47444,34225],{"class":1086},[199,47446,34262],{"class":205},[199,47448,47449,47451,47453,47455],{"class":201,"line":73},[199,47450,33579],{"class":1086},[199,47452,34240],{"class":205},[199,47454,33235],{"class":1086},[199,47456,34245],{"class":205},[199,47458,47459],{"class":201,"line":333},[199,47460,36763],{"class":1454},[199,47462,47463,47465,47467,47469],{"class":201,"line":227},[199,47464,33579],{"class":1086},[199,47466,34210],{"class":205},[199,47468,33235],{"class":1086},[199,47470,34215],{"class":205},[199,47472,47473,47475,47477,47479],{"class":201,"line":238},[199,47474,33579],{"class":1086},[199,47476,34756],{"class":205},[199,47478,33235],{"class":1086},[199,47480,47481],{"class":205}," GoogLeNet,Inception\n",[199,47483,47484],{"class":201,"line":252},[199,47485,907],{"emptyLinePlaceholder":906},[199,47487,47488],{"class":201,"line":388},[199,47489,907],{"emptyLinePlaceholder":906},[199,47491,47492],{"class":201,"line":415},[199,47493,36792],{"class":1454},[199,47495,47496,47498,47500],{"class":201,"line":426},[199,47497,34789],{"class":1086},[199,47499,36799],{"class":878},[199,47501,34795],{"class":205},[199,47503,47504,47506,47508,47510,47512,47514,47516],{"class":201,"line":1015},[199,47505,36806],{"class":205},[199,47507,895],{"class":1086},[199,47509,34297],{"class":205},[199,47511,34300],{"class":8113},[199,47513,895],{"class":1086},[199,47515,34305],{"class":898},[199,47517,34308],{"class":205},[199,47519,47520,47522,47524,47526],{"class":201,"line":1031},[199,47521,36823],{"class":8113},[199,47523,895],{"class":1086},[199,47525,36828],{"class":1018},[199,47527,34308],{"class":205},[199,47529,47530,47532,47534,47536,47538,47540,47542],{"class":201,"line":1043},[199,47531,36835],{"class":8113},[199,47533,895],{"class":1086},[199,47535,34335],{"class":205},[199,47537,34338],{"class":8113},[199,47539,895],{"class":1086},[199,47541,38290],{"class":1018},[199,47543,34346],{"class":205},[199,47545,47546,47548,47550,47552],{"class":201,"line":1049},[199,47547,36852],{"class":8113},[199,47549,895],{"class":1086},[199,47551,34318],{"class":1018},[199,47553,1594],{"class":205},[199,47555,47556,47558,47560,47562,47564,47566],{"class":201,"line":1054},[199,47557,36863],{"class":205},[199,47559,895],{"class":1086},[199,47561,34376],{"class":205},[199,47563,34379],{"class":8113},[199,47565,895],{"class":1086},[199,47567,36874],{"class":205},[199,47569,47570],{"class":201,"line":1062},[199,47571,36879],{"class":1454},[199,47573,47574,47576,47578,47580],{"class":201,"line":1075},[199,47575,36884],{"class":8113},[199,47577,895],{"class":1086},[199,47579,1115],{"class":1018},[199,47581,34308],{"class":205},[199,47583,47584,47586,47588,47590],{"class":201,"line":1092},[199,47585,36895],{"class":8113},[199,47587,895],{"class":1086},[199,47589,34318],{"class":1018},[199,47591,34308],{"class":205},[199,47593,47594,47596,47598,47600],{"class":201,"line":1107},[199,47595,36906],{"class":8113},[199,47597,895],{"class":1086},[199,47599,1025],{"class":1018},[199,47601,1594],{"class":205},[199,47603,47604,47606],{"class":201,"line":1128},[199,47605,6989],{"class":1086},[199,47607,36919],{"class":205},[199,47609,47610],{"class":201,"line":1146},[199,47611,907],{"emptyLinePlaceholder":906},[199,47613,47614],{"class":201,"line":1163},[199,47615,36928],{"class":1454},[199,47617,47618,47620,47622],{"class":201,"line":1176},[199,47619,34789],{"class":1086},[199,47621,36935],{"class":878},[199,47623,36938],{"class":205},[199,47625,47626],{"class":201,"line":1189},[199,47627,36943],{"class":1454},[199,47629,47630,47632,47634,47636,47638,47640,47642],{"class":201,"line":1202},[199,47631,34079],{"class":205},[199,47633,895],{"class":1086},[199,47635,34086],{"class":898},[199,47637,4629],{"class":1086},[199,47639,34091],{"class":205},[199,47641,4626],{"class":1086},[199,47643,36960],{"class":898},[199,47645,47646,47648,47650],{"class":201,"line":1207},[199,47647,34131],{"class":205},[199,47649,895],{"class":1086},[199,47651,35131],{"class":205},[199,47653,47654],{"class":201,"line":1212},[199,47655,907],{"emptyLinePlaceholder":906},[199,47657,47658],{"class":201,"line":1225},[199,47659,36977],{"class":1454},[199,47661,47662,47664,47666],{"class":201,"line":1236},[199,47663,36982],{"class":205},[199,47665,895],{"class":1086},[199,47667,35184],{"class":1018},[199,47669,47670,47672,47674],{"class":201,"line":1249},[199,47671,36991],{"class":205},[199,47673,895],{"class":1086},[199,47675,5989],{"class":1018},[199,47677,47678],{"class":201,"line":1262},[199,47679,907],{"emptyLinePlaceholder":906},[199,47681,47682],{"class":201,"line":1275},[199,47683,37004],{"class":1454},[199,47685,47686],{"class":201,"line":1287},[199,47687,37009],{"class":1454},[199,47689,47690],{"class":201,"line":1292},[199,47691,37014],{"class":1454},[199,47693,47694,47696],{"class":201,"line":1297},[199,47695,37019],{"class":1086},[199,47697,35726],{"class":205},[199,47699,47700],{"class":201,"line":1310},[199,47701,37026],{"class":1454},[199,47703,47704,47706,47708,47710],{"class":201,"line":1315},[199,47705,1481],{"class":1086},[199,47707,37033],{"class":205},[199,47709,28886],{"class":1086},[199,47711,37038],{"class":205},[199,47713,47714,47716,47718],{"class":201,"line":1330},[199,47715,37043],{"class":205},[199,47717,895],{"class":1086},[199,47719,37048],{"class":205},[199,47721,47722,47724,47726],{"class":201,"line":1335},[199,47723,37053],{"class":205},[199,47725,895],{"class":1086},[199,47727,37058],{"class":205},[199,47729,47730],{"class":201,"line":1340},[199,47731,37063],{"class":1454},[199,47733,47734],{"class":201,"line":1352},[199,47735,35717],{"class":205},[199,47737,47738],{"class":201,"line":1367},[199,47739,37072],{"class":1454},[199,47741,47742,47744,47746],{"class":201,"line":1381},[199,47743,35502],{"class":205},[199,47745,895],{"class":1086},[199,47747,37081],{"class":205},[199,47749,47750],{"class":201,"line":1396},[199,47751,37086],{"class":1454},[199,47753,47754,47756,47758,47760,47762,47764,47766],{"class":201,"line":1401},[199,47755,35519],{"class":205},[199,47757,895],{"class":1086},[199,47759,35524],{"class":205},[199,47761,35527],{"class":8113},[199,47763,895],{"class":1086},[199,47765,1115],{"class":1018},[199,47767,1594],{"class":205},[199,47769,47770],{"class":201,"line":1411},[199,47771,37107],{"class":1454},[199,47773,47774],{"class":201,"line":1421},[199,47775,37112],{"class":1454},[199,47777,47778],{"class":201,"line":1426},[199,47779,37117],{"class":1454},[199,47781,47782,47784,47786,47788,47790],{"class":201,"line":1436},[199,47783,37122],{"class":205},[199,47785,12362],{"class":1086},[199,47787,35629],{"class":205},[199,47789,5853],{"class":1086},[199,47791,37131],{"class":205},[199,47793,47794],{"class":201,"line":1441},[199,47795,37136],{"class":1454},[199,47797,47798,47800,47802,47804,47806],{"class":201,"line":1451},[199,47799,37141],{"class":205},[199,47801,12362],{"class":1086},[199,47803,37146],{"class":205},[199,47805,1025],{"class":1018},[199,47807,1594],{"class":205},[199,47809,47810],{"class":201,"line":1458},[199,47811,907],{"emptyLinePlaceholder":906},[199,47813,47814],{"class":201,"line":1464},[199,47815,37159],{"class":1454},[199,47817,47818,47820,47822,47824,47826],{"class":201,"line":1478},[199,47819,37164],{"class":205},[199,47821,895],{"class":1086},[199,47823,37169],{"class":205},[199,47825,3664],{"class":1086},[199,47827,37174],{"class":205},[199,47829,47830],{"class":201,"line":1516},[199,47831,37179],{"class":1454},[199,47833,47834,47836,47838,47840],{"class":201,"line":1522},[199,47835,35293],{"class":1018},[199,47837,1537],{"class":205},[199,47839,37188],{"class":898},[199,47841,37191],{"class":205},[199,47843,47844],{"class":201,"line":1528},[199,47845,907],{"emptyLinePlaceholder":906},[199,47847,47848],{"class":201,"line":1557},[199,47849,37200],{"class":1454},[199,47851,47852,47854,47856,47858,47860],{"class":201,"line":1563},[199,47853,4470],{"class":1086},[199,47855,34062],{"class":1018},[199,47857,5853],{"class":1086},[199,47859,34067],{"class":898},[199,47861,6640],{"class":205},[199,47863,47864],{"class":201,"line":1568},[199,47865,37217],{"class":1454},[199,47867,47868,47870,47872],{"class":201,"line":1574},[199,47869,34131],{"class":205},[199,47871,895],{"class":1086},[199,47873,47392],{"class":205},[199,47875,47876],{"class":201,"line":1580},[199,47877,37230],{"class":1454},[199,47879,47880],{"class":201,"line":1597},[199,47881,37235],{"class":1454},[199,47883,47884,47886,47888],{"class":201,"line":1602},[199,47885,37240],{"class":205},[199,47887,37243],{"class":898},[199,47889,1554],{"class":205},[199,47891,47892],{"class":201,"line":1608},[199,47893,37250],{"class":1454},[199,47895,47896,47898,47900],{"class":201,"line":1640},[199,47897,36863],{"class":205},[199,47899,895],{"class":1086},[199,47901,37259],{"class":205},[199,47903,47904],{"class":201,"line":1653},[199,47905,37264],{"class":1454},[199,47907,47908],{"class":201,"line":1673},[199,47909,37269],{"class":205},[199,47911,47912],{"class":201,"line":1690},[199,47913,907],{"emptyLinePlaceholder":906},[199,47915,47916],{"class":201,"line":1706},[199,47917,37278],{"class":1454},[199,47919,47920],{"class":201,"line":1712},[199,47921,37283],{"class":1454},[199,47923,47924,47926,47928,47930,47932,47934,47936],{"class":201,"line":1720},[199,47925,34079],{"class":205},[199,47927,895],{"class":1086},[199,47929,34086],{"class":898},[199,47931,4629],{"class":1086},[199,47933,34091],{"class":205},[199,47935,4626],{"class":1086},[199,47937,36960],{"class":898},[199,47939,47940,47942,47944],{"class":201,"line":1725},[199,47941,34131],{"class":205},[199,47943,895],{"class":1086},[199,47945,35131],{"class":205},[199,47947,47948],{"class":201,"line":1731},[199,47949,37312],{"class":1454},[199,47951,47952],{"class":201,"line":1745},[199,47953,37317],{"class":1454},[199,47955,47956,47958,47960,47962,47964,47966,47968,47970,47972,47974,47976,47978,47980,47982,47984,47986,47988,47990,47992,47994,47996,47998,48000],{"class":201,"line":1754},[199,47957,37322],{"class":205},[199,47959,895],{"class":1086},[199,47961,1662],{"class":205},[199,47963,37329],{"class":898},[199,47965,3461],{"class":205},[199,47967,37334],{"class":898},[199,47969,3461],{"class":205},[199,47971,37339],{"class":898},[199,47973,3461],{"class":205},[199,47975,37344],{"class":898},[199,47977,3461],{"class":205},[199,47979,37349],{"class":898},[199,47981,3461],{"class":205},[199,47983,37354],{"class":898},[199,47985,3461],{"class":205},[199,47987,37359],{"class":898},[199,47989,3461],{"class":205},[199,47991,37364],{"class":898},[199,47993,3461],{"class":205},[199,47995,37369],{"class":898},[199,47997,3461],{"class":205},[199,47999,37374],{"class":898},[199,48001,1932],{"class":205},[199,48003,48004,48006],{"class":201,"line":1763},[199,48005,37019],{"class":1086},[199,48007,35726],{"class":205},[199,48009,48010],{"class":201,"line":1768},[199,48011,37387],{"class":1454},[199,48013,48014,48016,48018,48020],{"class":201,"line":19628},[199,48015,1481],{"class":1086},[199,48017,37394],{"class":205},[199,48019,28886],{"class":1086},[199,48021,37038],{"class":205},[199,48023,48024,48026,48028],{"class":201,"line":19641},[199,48025,35452],{"class":205},[199,48027,895],{"class":1086},[199,48029,35457],{"class":205},[199,48031,48032,48034,48036],{"class":201,"line":19646},[199,48033,35467],{"class":205},[199,48035,895],{"class":1086},[199,48037,35472],{"class":205},[199,48039,48040],{"class":201,"line":19660},[199,48041,907],{"emptyLinePlaceholder":906},[199,48043,48044],{"class":201,"line":19665},[199,48045,37423],{"class":1454},[199,48047,48048],{"class":201,"line":19671},[199,48049,35717],{"class":205},[199,48051,48052],{"class":201,"line":19676},[199,48053,37432],{"class":1454},[199,48055,48056,48058,48060],{"class":201,"line":19690},[199,48057,35502],{"class":205},[199,48059,895],{"class":1086},[199,48061,35507],{"class":205},[199,48063,48064],{"class":201,"line":19695},[199,48065,37445],{"class":1454},[199,48067,48068,48070,48072,48074,48076,48078,48080],{"class":201,"line":19700},[199,48069,35519],{"class":205},[199,48071,895],{"class":1086},[199,48073,35524],{"class":205},[199,48075,35527],{"class":8113},[199,48077,895],{"class":1086},[199,48079,1115],{"class":1018},[199,48081,1594],{"class":205},[199,48083,48084],{"class":201,"line":19714},[199,48085,37466],{"class":1454},[199,48087,48088,48090,48092],{"class":201,"line":19726},[199,48089,37471],{"class":205},[199,48091,895],{"class":1086},[199,48093,37476],{"class":205},[199,48095,48096,48098,48100],{"class":201,"line":19731},[199,48097,37481],{"class":205},[199,48099,895],{"class":1086},[199,48101,37486],{"class":205},[199,48103,48104,48106,48108,48110,48112,48114,48116,48118],{"class":201,"line":19744},[199,48105,37491],{"class":1018},[199,48107,1537],{"class":205},[199,48109,37496],{"class":898},[199,48111,37499],{"class":205},[199,48113,37502],{"class":898},[199,48115,3461],{"class":205},[199,48117,37507],{"class":898},[199,48119,37510],{"class":205},[19,48121,48123],{"id":48122},"_24训练自己的数据集","2.4.训练自己的数据集",[31,48125,48126],{},"猫狗分类任务",[31,48128,48129],{},"划分数据集和验证集",[190,48131,48133],{"className":33221,"code":48132,"language":33223,"meta":57,"style":57},"# 创建脚本，用于划分数据集和验证集\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",[196,48134,48135,48140,48147,48152,48163,48170,48174,48184,48198,48207,48211,48216,48226,48246,48250,48255,48265,48276,48289,48293,48298,48307,48317,48328,48332,48337,48347,48351,48356,48361,48366,48371,48376,48380,48390,48416,48429,48441,48468,48473,48478,48492,48497,48509,48524,48539,48547,48551,48556,48562,48574,48587,48592,48597,48602,48652,48658,48662],{"__ignoreMap":57},[199,48136,48137],{"class":201,"line":202},[199,48138,48139],{"class":1454},"# 创建脚本，用于划分数据集和验证集\n",[199,48141,48142,48144],{"class":201,"line":36},[199,48143,33235],{"class":1086},[199,48145,48146],{"class":205}," os\n",[199,48148,48149],{"class":201,"line":73},[199,48150,48151],{"class":1454},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[199,48153,48154,48156,48159,48161],{"class":201,"line":333},[199,48155,33579],{"class":1086},[199,48157,48158],{"class":205}," shutil ",[199,48160,33235],{"class":1086},[199,48162,34664],{"class":205},[199,48164,48165,48167],{"class":201,"line":227},[199,48166,33235],{"class":1086},[199,48168,48169],{"class":205}," random\n",[199,48171,48172],{"class":201,"line":238},[199,48173,907],{"emptyLinePlaceholder":906},[199,48175,48176,48178,48181],{"class":201,"line":252},[199,48177,34789],{"class":1086},[199,48179,48180],{"class":878}," mkfile",[199,48182,48183],{"class":205},"(file):\n",[199,48185,48186,48188,48190,48193,48196],{"class":201,"line":388},[199,48187,6005],{"class":1086},[199,48189,41771],{"class":1086},[199,48191,48192],{"class":205}," os.path.exists(",[199,48194,48195],{"class":8113},"file",[199,48197,33628],{"class":205},[199,48199,48200,48203,48205],{"class":201,"line":415},[199,48201,48202],{"class":205},"        os.makedirs(",[199,48204,48195],{"class":8113},[199,48206,1594],{"class":205},[199,48208,48209],{"class":201,"line":426},[199,48210,907],{"emptyLinePlaceholder":906},[199,48212,48213],{"class":201,"line":1015},[199,48214,48215],{"class":1454},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[199,48217,48218,48221,48223],{"class":201,"line":1031},[199,48219,48220],{"class":205},"file_path",[199,48222,895],{"class":1086},[199,48224,48225],{"class":898},"'data_cat_dog'\n",[199,48227,48228,48231,48233,48236,48238,48241,48243],{"class":201,"line":1043},[199,48229,48230],{"class":205},"flower_class",[199,48232,895],{"class":1086},[199,48234,48235],{"class":205},"[cla ",[199,48237,5929],{"class":1086},[199,48239,48240],{"class":205}," cla ",[199,48242,28886],{"class":1086},[199,48244,48245],{"class":205}," os.listdir(file_path)]\n",[199,48247,48248],{"class":201,"line":1049},[199,48249,907],{"emptyLinePlaceholder":906},[199,48251,48252],{"class":201,"line":1054},[199,48253,48254],{"class":1454},"# 创建训练集train文件夹\n",[199,48256,48257,48260,48263],{"class":201,"line":1062},[199,48258,48259],{"class":205},"mkfile(",[199,48261,48262],{"class":898},"'data\u002Ftrain'",[199,48264,1594],{"class":205},[199,48266,48267,48269,48271,48273],{"class":201,"line":1075},[199,48268,5929],{"class":1086},[199,48270,48240],{"class":205},[199,48272,28886],{"class":1086},[199,48274,48275],{"class":205}," flower_class:\n",[199,48277,48278,48281,48284,48286],{"class":201,"line":1092},[199,48279,48280],{"class":205},"    mkfile(",[199,48282,48283],{"class":898},"'data\u002Ftrain\u002F'",[199,48285,2028],{"class":1086},[199,48287,48288],{"class":205},"cla)\n",[199,48290,48291],{"class":201,"line":1107},[199,48292,907],{"emptyLinePlaceholder":906},[199,48294,48295],{"class":201,"line":1128},[199,48296,48297],{"class":1454},"# 创建验证集val文件夹\n",[199,48299,48300,48302,48305],{"class":201,"line":1146},[199,48301,48259],{"class":205},[199,48303,48304],{"class":898},"'data\u002Ftest'",[199,48306,1594],{"class":205},[199,48308,48309,48311,48313,48315],{"class":201,"line":1163},[199,48310,5929],{"class":1086},[199,48312,48240],{"class":205},[199,48314,28886],{"class":1086},[199,48316,48275],{"class":205},[199,48318,48319,48321,48324,48326],{"class":201,"line":1176},[199,48320,48280],{"class":205},[199,48322,48323],{"class":898},"'data\u002Ftest\u002F'",[199,48325,2028],{"class":1086},[199,48327,48288],{"class":205},[199,48329,48330],{"class":201,"line":1189},[199,48331,907],{"emptyLinePlaceholder":906},[199,48333,48334],{"class":201,"line":1202},[199,48335,48336],{"class":1454},"# 划分比例，训练集：测试集=9：1\n",[199,48338,48339,48342,48344],{"class":201,"line":1207},[199,48340,48341],{"class":205},"split_rate",[199,48343,895],{"class":1086},[199,48345,48346],{"class":1018},"0.1\n",[199,48348,48349],{"class":201,"line":1212},[199,48350,907],{"emptyLinePlaceholder":906},[199,48352,48353],{"class":201,"line":1225},[199,48354,48355],{"class":1454},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[199,48357,48358],{"class":201,"line":1236},[199,48359,48360],{"class":1454},"# cla_path：当前类别的原始图片路径\n",[199,48362,48363],{"class":201,"line":1249},[199,48364,48365],{"class":1454},"# images：当前类别下所有图片的文件名列表\n",[199,48367,48368],{"class":201,"line":1262},[199,48369,48370],{"class":1454},"# num：该类别图片总数\n",[199,48372,48373],{"class":201,"line":1275},[199,48374,48375],{"class":1454},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[199,48377,48378],{"class":201,"line":1287},[199,48379,907],{"emptyLinePlaceholder":906},[199,48381,48382,48384,48386,48388],{"class":201,"line":1292},[199,48383,5929],{"class":1086},[199,48385,48240],{"class":205},[199,48387,28886],{"class":1086},[199,48389,48275],{"class":205},[199,48391,48392,48395,48397,48400,48402,48405,48407,48409,48411,48413],{"class":201,"line":1297},[199,48393,48394],{"class":205},"    cla_path ",[199,48396,895],{"class":1086},[199,48398,48399],{"class":205}," file_path ",[199,48401,2028],{"class":1086},[199,48403,48404],{"class":898}," '\u002F'",[199,48406,1698],{"class":1086},[199,48408,48240],{"class":205},[199,48410,2028],{"class":1086},[199,48412,48404],{"class":898},[199,48414,48415],{"class":1454},"  # 某一类别的子目录\n",[199,48417,48418,48421,48423,48426],{"class":201,"line":1310},[199,48419,48420],{"class":205},"    images ",[199,48422,895],{"class":1086},[199,48424,48425],{"class":205}," os.listdir(cla_path)  ",[199,48427,48428],{"class":1454},"# iamges 列表存储了该目录下所有图像的名称\n",[199,48430,48431,48434,48436,48438],{"class":201,"line":1315},[199,48432,48433],{"class":205},"    num ",[199,48435,895],{"class":1086},[199,48437,10228],{"class":1018},[199,48439,48440],{"class":205},"(images)\n",[199,48442,48443,48446,48448,48451,48453,48455,48457,48460,48462,48465],{"class":201,"line":1330},[199,48444,48445],{"class":205},"    eval_index ",[199,48447,895],{"class":1086},[199,48449,48450],{"class":205}," random.sample(images, ",[199,48452,3574],{"class":8113},[199,48454,895],{"class":1086},[199,48456,3100],{"class":1018},[199,48458,48459],{"class":205},"(num ",[199,48461,3537],{"class":1086},[199,48463,48464],{"class":205}," split_rate))  ",[199,48466,48467],{"class":1454},"# 从images列表中随机抽取 k 个图像名称\n",[199,48469,48470],{"class":201,"line":1335},[199,48471,48472],{"class":1454},"    # 遍历该类别下的所有图片\n",[199,48474,48475],{"class":201,"line":1340},[199,48476,48477],{"class":1454},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[199,48479,48480,48482,48485,48487,48489],{"class":201,"line":1352},[199,48481,1937],{"class":1086},[199,48483,48484],{"class":205}," index, image ",[199,48486,28886],{"class":1086},[199,48488,34448],{"class":1018},[199,48490,48491],{"class":205},"(images):\n",[199,48493,48494],{"class":201,"line":1367},[199,48495,48496],{"class":1454},"        # eval_index 中保存验证集val的图像名称\n",[199,48498,48499,48501,48504,48506],{"class":201,"line":1381},[199,48500,2017],{"class":1086},[199,48502,48503],{"class":205}," image ",[199,48505,28886],{"class":1086},[199,48507,48508],{"class":205}," eval_index:\n",[199,48510,48511,48514,48516,48519,48521],{"class":201,"line":1396},[199,48512,48513],{"class":205},"            image_path ",[199,48515,895],{"class":1086},[199,48517,48518],{"class":205}," cla_path ",[199,48520,2028],{"class":1086},[199,48522,48523],{"class":205}," image\n",[199,48525,48526,48529,48531,48534,48536],{"class":201,"line":1401},[199,48527,48528],{"class":205},"            new_path ",[199,48530,895],{"class":1086},[199,48532,48533],{"class":898}," 'data\u002Ftest\u002F'",[199,48535,1698],{"class":1086},[199,48537,48538],{"class":205}," cla\n",[199,48540,48541,48544],{"class":201,"line":1411},[199,48542,48543],{"class":205},"            copy(image_path, new_path)  ",[199,48545,48546],{"class":1454},"# 将选中的图像复制到新路径\n",[199,48548,48549],{"class":201,"line":1421},[199,48550,907],{"emptyLinePlaceholder":906},[199,48552,48553],{"class":201,"line":1426},[199,48554,48555],{"class":1454},"        # 其余的图像保存在训练集train中\n",[199,48557,48558,48560],{"class":201,"line":1436},[199,48559,5445],{"class":1086},[199,48561,6640],{"class":205},[199,48563,48564,48566,48568,48570,48572],{"class":201,"line":1441},[199,48565,48513],{"class":205},[199,48567,895],{"class":1086},[199,48569,48518],{"class":205},[199,48571,2028],{"class":1086},[199,48573,48523],{"class":205},[199,48575,48576,48578,48580,48583,48585],{"class":201,"line":1451},[199,48577,48528],{"class":205},[199,48579,895],{"class":1086},[199,48581,48582],{"class":898}," 'data\u002Ftrain\u002F'",[199,48584,1698],{"class":1086},[199,48586,48538],{"class":205},[199,48588,48589],{"class":201,"line":1458},[199,48590,48591],{"class":205},"            copy(image_path, new_path)\n",[199,48593,48594],{"class":201,"line":1464},[199,48595,48596],{"class":1454},"            # 打印进度条信息\n",[199,48598,48599],{"class":201,"line":1478},[199,48600,48601],{"class":1454},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[199,48603,48604,48606,48608,48610,48613,48615,48617,48620,48622,48624,48626,48629,48632,48634,48636,48639,48642,48644,48646,48649],{"class":201,"line":1516},[199,48605,35293],{"class":1018},[199,48607,1537],{"class":205},[199,48609,3337],{"class":898},[199,48611,48612],{"class":1018},"\\r",[199,48614,1662],{"class":898},[199,48616,35301],{"class":1018},[199,48618,48619],{"class":898},"] processing [",[199,48621,35301],{"class":1018},[199,48623,3664],{"class":898},[199,48625,35301],{"class":1018},[199,48627,48628],{"class":898},"]\"",[199,48630,48631],{"class":205},".format(cla, index ",[199,48633,2028],{"class":1086},[199,48635,1495],{"class":1018},[199,48637,48638],{"class":205},", num), ",[199,48640,48641],{"class":8113},"end",[199,48643,895],{"class":1086},[199,48645,10549],{"class":898},[199,48647,48648],{"class":205},")  ",[199,48650,48651],{"class":1454},"# processing bar\n",[199,48653,48654,48656],{"class":201,"line":1522},[199,48655,34141],{"class":1018},[199,48657,4892],{"class":205},[199,48659,48660],{"class":201,"line":1528},[199,48661,907],{"emptyLinePlaceholder":906},[199,48663,48664,48666,48668,48671],{"class":201,"line":1557},[199,48665,33258],{"class":1018},[199,48667,1537],{"class":205},[199,48669,48670],{"class":898},"\"processing done!\"",[199,48672,1594],{"class":205},[31,48674,48675],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[627,48677,48679],{"id":48678},"_242模型代码","2.4.2.模型代码",[31,48681,48682],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[190,48684,48686],{"className":33221,"code":48685,"language":33223,"meta":57,"style":57},"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",[196,48687,48688,48694,48704,48714,48718,48734,48742,48756,48766,48770,48800,48804,48838,48884,48888,48922,48968,48972,48976,49010,49040,49044,49052,49066,49088,49110,49128,49132,49146,49150,49154,49170,49174,49182,49196,49206,49250,49254,49282,49286,49296,49324,49328,49364,49368,49396,49400,49410,49442,49474,49502,49506,49516,49548,49580,49612,49644,49676,49704,49708,49718,49750,49782,49794,49798,49810,49814,49818,49830,49838,49858,49862,49866,49870,49874,49878,49882,49896,49904,49912,49924,49938,49946,49950,49958,49968,49978,49988,49998,50008,50014,50018,50022,50034,50054,50062],{"__ignoreMap":57},[199,48689,48690,48692],{"class":201,"line":202},[199,48691,33235],{"class":1086},[199,48693,33238],{"class":205},[199,48695,48696,48698,48700,48702],{"class":201,"line":36},[199,48697,33579],{"class":1086},[199,48699,33582],{"class":205},[199,48701,33235],{"class":1086},[199,48703,33587],{"class":205},[199,48705,48706,48708,48710,48712],{"class":201,"line":73},[199,48707,33579],{"class":1086},[199,48709,33599],{"class":205},[199,48711,33235],{"class":1086},[199,48713,33604],{"class":205},[199,48715,48716],{"class":201,"line":333},[199,48717,907],{"emptyLinePlaceholder":906},[199,48719,48720,48722,48724,48726,48728,48730,48732],{"class":201,"line":227},[199,48721,17554],{"class":1086},[199,48723,44334],{"class":878},[199,48725,1537],{"class":205},[199,48727,33620],{"class":878},[199,48729,3638],{"class":205},[199,48731,33625],{"class":878},[199,48733,33628],{"class":205},[199,48735,48736,48738,48740],{"class":201,"line":238},[199,48737,33643],{"class":1086},[199,48739,33646],{"class":1018},[199,48741,44353],{"class":205},[199,48743,48744,48746,48748,48750,48752,48754],{"class":201,"line":252},[199,48745,33659],{"class":1018},[199,48747,44360],{"class":205},[199,48749,33665],{"class":1018},[199,48751,33668],{"class":205},[199,48753,33671],{"class":1018},[199,48755,4892],{"class":205},[199,48757,48758,48760,48762,48764],{"class":201,"line":388},[199,48759,33687],{"class":1018},[199,48761,37612],{"class":205},[199,48763,895],{"class":1086},[199,48765,37617],{"class":205},[199,48767,48768],{"class":201,"line":415},[199,48769,44383],{"class":1454},[199,48771,48772,48774,48776,48778,48780,48782,48784,48786,48788,48790,48792,48794,48796,48798],{"class":201,"line":426},[199,48773,33687],{"class":1018},[199,48775,44390],{"class":205},[199,48777,895],{"class":1086},[199,48779,33695],{"class":205},[199,48781,33698],{"class":8113},[199,48783,895],{"class":1086},[199,48785,44401],{"class":205},[199,48787,33707],{"class":8113},[199,48789,895],{"class":1086},[199,48791,44408],{"class":205},[199,48793,33716],{"class":8113},[199,48795,895],{"class":1086},[199,48797,1115],{"class":1018},[199,48799,1594],{"class":205},[199,48801,48802],{"class":201,"line":1015},[199,48803,44421],{"class":1454},[199,48805,48806,48808,48810,48812,48814,48816,48818,48820,48822,48824,48826,48828,48830,48832,48834,48836],{"class":201,"line":1031},[199,48807,33687],{"class":1018},[199,48809,44428],{"class":205},[199,48811,895],{"class":1086},[199,48813,33695],{"class":205},[199,48815,33698],{"class":8113},[199,48817,895],{"class":1086},[199,48819,44401],{"class":205},[199,48821,33707],{"class":8113},[199,48823,895],{"class":1086},[199,48825,44445],{"class":205},[199,48827,1025],{"class":1018},[199,48829,44450],{"class":205},[199,48831,33716],{"class":8113},[199,48833,895],{"class":1086},[199,48835,1115],{"class":1018},[199,48837,1594],{"class":205},[199,48839,48840,48842,48844,48846,48848,48850,48852,48854,48856,48858,48860,48862,48864,48866,48868,48870,48872,48874,48876,48878,48880,48882],{"class":201,"line":1043},[199,48841,33687],{"class":1018},[199,48843,44465],{"class":205},[199,48845,895],{"class":1086},[199,48847,33695],{"class":205},[199,48849,33698],{"class":8113},[199,48851,895],{"class":1086},[199,48853,44445],{"class":205},[199,48855,1025],{"class":1018},[199,48857,44450],{"class":205},[199,48859,33707],{"class":8113},[199,48861,895],{"class":1086},[199,48863,44445],{"class":205},[199,48865,1115],{"class":1018},[199,48867,44450],{"class":205},[199,48869,33716],{"class":8113},[199,48871,895],{"class":1086},[199,48873,1920],{"class":1018},[199,48875,3461],{"class":205},[199,48877,33725],{"class":8113},[199,48879,895],{"class":1086},[199,48881,1115],{"class":1018},[199,48883,1594],{"class":205},[199,48885,48886],{"class":201,"line":1049},[199,48887,44510],{"class":1454},[199,48889,48890,48892,48894,48896,48898,48900,48902,48904,48906,48908,48910,48912,48914,48916,48918,48920],{"class":201,"line":1054},[199,48891,33687],{"class":1018},[199,48893,44517],{"class":205},[199,48895,895],{"class":1086},[199,48897,33695],{"class":205},[199,48899,33698],{"class":8113},[199,48901,895],{"class":1086},[199,48903,44401],{"class":205},[199,48905,33707],{"class":8113},[199,48907,895],{"class":1086},[199,48909,44534],{"class":205},[199,48911,1025],{"class":1018},[199,48913,44450],{"class":205},[199,48915,33716],{"class":8113},[199,48917,895],{"class":1086},[199,48919,1115],{"class":1018},[199,48921,1594],{"class":205},[199,48923,48924,48926,48928,48930,48932,48934,48936,48938,48940,48942,48944,48946,48948,48950,48952,48954,48956,48958,48960,48962,48964,48966],{"class":201,"line":1062},[199,48925,33687],{"class":1018},[199,48927,44553],{"class":205},[199,48929,895],{"class":1086},[199,48931,33695],{"class":205},[199,48933,33698],{"class":8113},[199,48935,895],{"class":1086},[199,48937,44534],{"class":205},[199,48939,1025],{"class":1018},[199,48941,44450],{"class":205},[199,48943,33707],{"class":8113},[199,48945,895],{"class":1086},[199,48947,44534],{"class":205},[199,48949,1115],{"class":1018},[199,48951,44450],{"class":205},[199,48953,33716],{"class":8113},[199,48955,895],{"class":1086},[199,48957,1909],{"class":1018},[199,48959,3461],{"class":205},[199,48961,33725],{"class":8113},[199,48963,895],{"class":1086},[199,48965,1925],{"class":1018},[199,48967,1594],{"class":205},[199,48969,48970],{"class":201,"line":1075},[199,48971,44598],{"class":1454},[199,48973,48974],{"class":201,"line":1092},[199,48975,44603],{"class":1454},[199,48977,48978,48980,48982,48984,48986,48988,48990,48992,48994,48996,48998,49000,49002,49004,49006,49008],{"class":201,"line":1107},[199,48979,33687],{"class":1018},[199,48981,44610],{"class":205},[199,48983,895],{"class":1086},[199,48985,37670],{"class":205},[199,48987,33716],{"class":8113},[199,48989,895],{"class":1086},[199,48991,1920],{"class":1018},[199,48993,3461],{"class":205},[199,48995,33771],{"class":8113},[199,48997,895],{"class":1086},[199,48999,1115],{"class":1018},[199,49001,3461],{"class":205},[199,49003,33725],{"class":8113},[199,49005,895],{"class":1086},[199,49007,1115],{"class":1018},[199,49009,1594],{"class":205},[199,49011,49012,49014,49016,49018,49020,49022,49024,49026,49028,49030,49032,49034,49036,49038],{"class":201,"line":1128},[199,49013,33687],{"class":1018},[199,49015,44645],{"class":205},[199,49017,895],{"class":1086},[199,49019,33695],{"class":205},[199,49021,33698],{"class":8113},[199,49023,895],{"class":1086},[199,49025,44401],{"class":205},[199,49027,33707],{"class":8113},[199,49029,895],{"class":1086},[199,49031,44662],{"class":205},[199,49033,33716],{"class":8113},[199,49035,895],{"class":1086},[199,49037,1115],{"class":1018},[199,49039,1594],{"class":205},[199,49041,49042],{"class":201,"line":1146},[199,49043,907],{"emptyLinePlaceholder":906},[199,49045,49046,49048,49050],{"class":201,"line":1163},[199,49047,33643],{"class":1086},[199,49049,33935],{"class":878},[199,49051,33938],{"class":205},[199,49053,49054,49056,49058,49060,49062,49064],{"class":201,"line":1176},[199,49055,44687],{"class":205},[199,49057,895],{"class":1086},[199,49059,33665],{"class":1018},[199,49061,38025],{"class":205},[199,49063,33665],{"class":1018},[199,49065,44698],{"class":205},[199,49067,49068,49070,49072,49074,49076,49078,49080,49082,49084,49086],{"class":201,"line":1189},[199,49069,9982],{"class":205},[199,49071,895],{"class":1086},[199,49073,33665],{"class":1018},[199,49075,38025],{"class":205},[199,49077,33665],{"class":1018},[199,49079,44713],{"class":205},[199,49081,33665],{"class":1018},[199,49083,38025],{"class":205},[199,49085,33665],{"class":1018},[199,49087,44722],{"class":205},[199,49089,49090,49092,49094,49096,49098,49100,49102,49104,49106,49108],{"class":201,"line":1202},[199,49091,44727],{"class":205},[199,49093,895],{"class":1086},[199,49095,33665],{"class":1018},[199,49097,38025],{"class":205},[199,49099,33665],{"class":1018},[199,49101,44738],{"class":205},[199,49103,33665],{"class":1018},[199,49105,38025],{"class":205},[199,49107,33665],{"class":1018},[199,49109,44747],{"class":205},[199,49111,49112,49114,49116,49118,49120,49122,49124,49126],{"class":201,"line":1207},[199,49113,44752],{"class":205},[199,49115,895],{"class":1086},[199,49117,33665],{"class":1018},[199,49119,38025],{"class":205},[199,49121,33665],{"class":1018},[199,49123,44763],{"class":205},[199,49125,33665],{"class":1018},[199,49127,44768],{"class":205},[199,49129,49130],{"class":201,"line":1212},[199,49131,44773],{"class":1454},[199,49133,49134,49136,49138,49140,49142,49144],{"class":201,"line":1225},[199,49135,17612],{"class":1086},[199,49137,44780],{"class":205},[199,49139,35527],{"class":8113},[199,49141,895],{"class":1086},[199,49143,1115],{"class":1018},[199,49145,1594],{"class":205},[199,49147,49148],{"class":201,"line":1236},[199,49149,907],{"emptyLinePlaceholder":906},[199,49151,49152],{"class":201,"line":1249},[199,49153,44801],{"class":1454},[199,49155,49156,49158,49160,49162,49164,49166,49168],{"class":201,"line":1262},[199,49157,17554],{"class":1086},[199,49159,44808],{"class":878},[199,49161,1537],{"class":205},[199,49163,33620],{"class":878},[199,49165,3638],{"class":205},[199,49167,33625],{"class":878},[199,49169,33628],{"class":205},[199,49171,49172],{"class":201,"line":1275},[199,49173,44823],{"class":1454},[199,49175,49176,49178,49180],{"class":201,"line":1287},[199,49177,33643],{"class":1086},[199,49179,33646],{"class":1018},[199,49181,44832],{"class":205},[199,49183,49184,49186,49188,49190,49192,49194],{"class":201,"line":1292},[199,49185,33659],{"class":1018},[199,49187,44839],{"class":205},[199,49189,33665],{"class":1018},[199,49191,33668],{"class":205},[199,49193,33671],{"class":1018},[199,49195,4892],{"class":205},[199,49197,49198,49200,49202,49204],{"class":201,"line":1297},[199,49199,33687],{"class":1018},[199,49201,44854],{"class":205},[199,49203,895],{"class":1086},[199,49205,40850],{"class":205},[199,49207,49208,49210,49212,49214,49216,49218,49220,49222,49224,49226,49228,49230,49232,49234,49236,49238,49240,49242,49244,49246,49248],{"class":201,"line":1310},[199,49209,40855],{"class":205},[199,49211,33698],{"class":8113},[199,49213,895],{"class":1086},[199,49215,1920],{"class":1018},[199,49217,3461],{"class":205},[199,49219,33707],{"class":8113},[199,49221,895],{"class":1086},[199,49223,3291],{"class":1018},[199,49225,3461],{"class":205},[199,49227,33716],{"class":8113},[199,49229,895],{"class":1086},[199,49231,3452],{"class":1018},[199,49233,3461],{"class":205},[199,49235,33771],{"class":8113},[199,49237,895],{"class":1086},[199,49239,1925],{"class":1018},[199,49241,3461],{"class":205},[199,49243,33725],{"class":8113},[199,49245,895],{"class":1086},[199,49247,1920],{"class":1018},[199,49249,40888],{"class":205},[199,49251,49252],{"class":201,"line":1315},[199,49253,40893],{"class":205},[199,49255,49256,49258,49260,49262,49264,49266,49268,49270,49272,49274,49276,49278,49280],{"class":201,"line":1330},[199,49257,40938],{"class":205},[199,49259,33716],{"class":8113},[199,49261,895],{"class":1086},[199,49263,1920],{"class":1018},[199,49265,3461],{"class":205},[199,49267,33771],{"class":8113},[199,49269,895],{"class":1086},[199,49271,1925],{"class":1018},[199,49273,3461],{"class":205},[199,49275,33725],{"class":8113},[199,49277,895],{"class":1086},[199,49279,1115],{"class":1018},[199,49281,1594],{"class":205},[199,49283,49284],{"class":201,"line":1335},[199,49285,40967],{"class":205},[199,49287,49288,49290,49292,49294],{"class":201,"line":1340},[199,49289,33687],{"class":1018},[199,49291,44945],{"class":205},[199,49293,895],{"class":1086},[199,49295,40850],{"class":205},[199,49297,49298,49300,49302,49304,49306,49308,49310,49312,49314,49316,49318,49320,49322],{"class":201,"line":1352},[199,49299,40855],{"class":205},[199,49301,33698],{"class":8113},[199,49303,895],{"class":1086},[199,49305,3291],{"class":1018},[199,49307,3461],{"class":205},[199,49309,33707],{"class":8113},[199,49311,895],{"class":1086},[199,49313,3291],{"class":1018},[199,49315,3461],{"class":205},[199,49317,33716],{"class":8113},[199,49319,895],{"class":1086},[199,49321,1115],{"class":1018},[199,49323,40888],{"class":205},[199,49325,49326],{"class":201,"line":1367},[199,49327,40893],{"class":205},[199,49329,49330,49332,49334,49336,49338,49340,49342,49344,49346,49348,49350,49352,49354,49356,49358,49360,49362],{"class":201,"line":1381},[199,49331,40855],{"class":205},[199,49333,33698],{"class":8113},[199,49335,895],{"class":1086},[199,49337,3291],{"class":1018},[199,49339,3461],{"class":205},[199,49341,33707],{"class":8113},[199,49343,895],{"class":1086},[199,49345,45000],{"class":1018},[199,49347,3461],{"class":205},[199,49349,33716],{"class":8113},[199,49351,895],{"class":1086},[199,49353,1920],{"class":1018},[199,49355,3461],{"class":205},[199,49357,33725],{"class":8113},[199,49359,895],{"class":1086},[199,49361,1115],{"class":1018},[199,49363,40888],{"class":205},[199,49365,49366],{"class":201,"line":1396},[199,49367,40893],{"class":205},[199,49369,49370,49372,49374,49376,49378,49380,49382,49384,49386,49388,49390,49392,49394],{"class":201,"line":1401},[199,49371,40938],{"class":205},[199,49373,33716],{"class":8113},[199,49375,895],{"class":1086},[199,49377,1920],{"class":1018},[199,49379,3461],{"class":205},[199,49381,33771],{"class":8113},[199,49383,895],{"class":1086},[199,49385,1925],{"class":1018},[199,49387,3461],{"class":205},[199,49389,33725],{"class":8113},[199,49391,895],{"class":1086},[199,49393,1115],{"class":1018},[199,49395,1594],{"class":205},[199,49397,49398],{"class":201,"line":1411},[199,49399,40967],{"class":205},[199,49401,49402,49404,49406,49408],{"class":201,"line":1421},[199,49403,33687],{"class":1018},[199,49405,45061],{"class":205},[199,49407,895],{"class":1086},[199,49409,40850],{"class":205},[199,49411,49412,49414,49416,49418,49420,49422,49424,49426,49428,49430,49432,49434,49436,49438,49440],{"class":201,"line":1426},[199,49413,45070],{"class":205},[199,49415,45000],{"class":1018},[199,49417,3461],{"class":205},[199,49419,3291],{"class":1018},[199,49421,45079],{"class":205},[199,49423,3297],{"class":1018},[199,49425,3461],{"class":205},[199,49427,34912],{"class":1018},[199,49429,45088],{"class":205},[199,49431,3681],{"class":1018},[199,49433,3461],{"class":205},[199,49435,3285],{"class":1018},[199,49437,45097],{"class":205},[199,49439,3285],{"class":1018},[199,49441,40888],{"class":205},[199,49443,49444,49446,49448,49450,49452,49454,49456,49458,49460,49462,49464,49466,49468,49470,49472],{"class":201,"line":1436},[199,49445,45070],{"class":205},[199,49447,37711],{"class":1018},[199,49449,3461],{"class":205},[199,49451,34912],{"class":1018},[199,49453,45079],{"class":205},[199,49455,34912],{"class":1018},[199,49457,3461],{"class":205},[199,49459,45000],{"class":1018},[199,49461,45088],{"class":205},[199,49463,3285],{"class":1018},[199,49465,3461],{"class":205},[199,49467,3297],{"class":1018},[199,49469,45097],{"class":205},[199,49471,3291],{"class":1018},[199,49473,40888],{"class":205},[199,49475,49476,49478,49480,49482,49484,49486,49488,49490,49492,49494,49496,49498,49500],{"class":201,"line":1441},[199,49477,40938],{"class":205},[199,49479,33716],{"class":8113},[199,49481,895],{"class":1086},[199,49483,1920],{"class":1018},[199,49485,3461],{"class":205},[199,49487,33771],{"class":8113},[199,49489,895],{"class":1086},[199,49491,1925],{"class":1018},[199,49493,3461],{"class":205},[199,49495,33725],{"class":8113},[199,49497,895],{"class":1086},[199,49499,1115],{"class":1018},[199,49501,1594],{"class":205},[199,49503,49504],{"class":201,"line":1451},[199,49505,40967],{"class":205},[199,49507,49508,49510,49512,49514],{"class":201,"line":1458},[199,49509,33687],{"class":1018},[199,49511,45172],{"class":205},[199,49513,895],{"class":1086},[199,49515,40850],{"class":205},[199,49517,49518,49520,49522,49524,49526,49528,49530,49532,49534,49536,49538,49540,49542,49544,49546],{"class":201,"line":1464},[199,49519,45070],{"class":205},[199,49521,45183],{"class":1018},[199,49523,3461],{"class":205},[199,49525,45000],{"class":1018},[199,49527,45079],{"class":205},[199,49529,3297],{"class":1018},[199,49531,3461],{"class":205},[199,49533,45196],{"class":1018},[199,49535,45088],{"class":205},[199,49537,3681],{"class":1018},[199,49539,3461],{"class":205},[199,49541,3687],{"class":1018},[199,49543,45097],{"class":205},[199,49545,3291],{"class":1018},[199,49547,40888],{"class":205},[199,49549,49550,49552,49554,49556,49558,49560,49562,49564,49566,49568,49570,49572,49574,49576,49578],{"class":201,"line":1478},[199,49551,45070],{"class":205},[199,49553,41298],{"class":1018},[199,49555,3461],{"class":205},[199,49557,23893],{"class":1018},[199,49559,45079],{"class":205},[199,49561,3698],{"class":1018},[199,49563,3461],{"class":205},[199,49565,34343],{"class":1018},[199,49567,45088],{"class":205},[199,49569,3879],{"class":1018},[199,49571,3461],{"class":205},[199,49573,3291],{"class":1018},[199,49575,45097],{"class":205},[199,49577,3291],{"class":1018},[199,49579,40888],{"class":205},[199,49581,49582,49584,49586,49588,49590,49592,49594,49596,49598,49600,49602,49604,49606,49608,49610],{"class":201,"line":1516},[199,49583,45070],{"class":205},[199,49585,41298],{"class":1018},[199,49587,3461],{"class":205},[199,49589,34912],{"class":1018},[199,49591,45079],{"class":205},[199,49593,34912],{"class":1018},[199,49595,3461],{"class":205},[199,49597,37711],{"class":1018},[199,49599,45088],{"class":205},[199,49601,3879],{"class":1018},[199,49603,3461],{"class":205},[199,49605,3291],{"class":1018},[199,49607,45097],{"class":205},[199,49609,3291],{"class":1018},[199,49611,40888],{"class":205},[199,49613,49614,49616,49618,49620,49622,49624,49626,49628,49630,49632,49634,49636,49638,49640,49642],{"class":201,"line":1522},[199,49615,45070],{"class":205},[199,49617,41298],{"class":1018},[199,49619,3461],{"class":205},[199,49621,3698],{"class":1018},[199,49623,45079],{"class":205},[199,49625,34912],{"class":1018},[199,49627,3461],{"class":205},[199,49629,45293],{"class":1018},[199,49631,45088],{"class":205},[199,49633,3285],{"class":1018},[199,49635,3461],{"class":205},[199,49637,3291],{"class":1018},[199,49639,45097],{"class":205},[199,49641,3291],{"class":1018},[199,49643,40888],{"class":205},[199,49645,49646,49648,49650,49652,49654,49656,49658,49660,49662,49664,49666,49668,49670,49672,49674],{"class":201,"line":1528},[199,49647,45070],{"class":205},[199,49649,45314],{"class":1018},[199,49651,3461],{"class":205},[199,49653,37711],{"class":1018},[199,49655,45079],{"class":205},[199,49657,23893],{"class":1018},[199,49659,3461],{"class":205},[199,49661,45327],{"class":1018},[199,49663,45088],{"class":205},[199,49665,3285],{"class":1018},[199,49667,3461],{"class":205},[199,49669,34912],{"class":1018},[199,49671,45097],{"class":205},[199,49673,34912],{"class":1018},[199,49675,40888],{"class":205},[199,49677,49678,49680,49682,49684,49686,49688,49690,49692,49694,49696,49698,49700,49702],{"class":201,"line":1557},[199,49679,40938],{"class":205},[199,49681,33716],{"class":8113},[199,49683,895],{"class":1086},[199,49685,1920],{"class":1018},[199,49687,3461],{"class":205},[199,49689,33771],{"class":8113},[199,49691,895],{"class":1086},[199,49693,1925],{"class":1018},[199,49695,3461],{"class":205},[199,49697,33725],{"class":8113},[199,49699,895],{"class":1086},[199,49701,1115],{"class":1018},[199,49703,1594],{"class":205},[199,49705,49706],{"class":201,"line":1563},[199,49707,40967],{"class":205},[199,49709,49710,49712,49714,49716],{"class":201,"line":1568},[199,49711,33687],{"class":1018},[199,49713,45380],{"class":205},[199,49715,895],{"class":1086},[199,49717,40850],{"class":205},[199,49719,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738,49740,49742,49744,49746,49748],{"class":201,"line":1574},[199,49721,45070],{"class":205},[199,49723,45391],{"class":1018},[199,49725,3461],{"class":205},[199,49727,37711],{"class":1018},[199,49729,45079],{"class":205},[199,49731,23893],{"class":1018},[199,49733,3461],{"class":205},[199,49735,45327],{"class":1018},[199,49737,45088],{"class":205},[199,49739,3285],{"class":1018},[199,49741,3461],{"class":205},[199,49743,34912],{"class":1018},[199,49745,45097],{"class":205},[199,49747,34912],{"class":1018},[199,49749,40888],{"class":205},[199,49751,49752,49754,49756,49758,49760,49762,49764,49766,49768,49770,49772,49774,49776,49778,49780],{"class":201,"line":1580},[199,49753,45070],{"class":205},[199,49755,45391],{"class":1018},[199,49757,3461],{"class":205},[199,49759,37781],{"class":1018},[199,49761,45079],{"class":205},[199,49763,45000],{"class":1018},[199,49765,3461],{"class":205},[199,49767,37781],{"class":1018},[199,49769,45088],{"class":205},[199,49771,3687],{"class":1018},[199,49773,3461],{"class":205},[199,49775,34912],{"class":1018},[199,49777,45097],{"class":205},[199,49779,34912],{"class":1018},[199,49781,40888],{"class":205},[199,49783,49784,49786,49788,49790,49792],{"class":201,"line":1597},[199,49785,45454],{"class":205},[199,49787,1115],{"class":1018},[199,49789,3461],{"class":205},[199,49791,1115],{"class":1018},[199,49793,45463],{"class":205},[199,49795,49796],{"class":201,"line":1602},[199,49797,41631],{"class":205},[199,49799,49800,49802,49804,49806,49808],{"class":201,"line":1608},[199,49801,41636],{"class":205},[199,49803,45474],{"class":1018},[199,49805,3461],{"class":205},[199,49807,1925],{"class":1018},[199,49809,1594],{"class":205},[199,49811,49812],{"class":201,"line":1640},[199,49813,40967],{"class":205},[199,49815,49816],{"class":201,"line":1653},[199,49817,45489],{"class":1454},[199,49819,49820,49822,49824,49826,49828],{"class":201,"line":1673},[199,49821,1481],{"class":1086},[199,49823,41709],{"class":205},[199,49825,28886],{"class":1086},[199,49827,41714],{"class":1018},[199,49829,41717],{"class":205},[199,49831,49832,49834,49836],{"class":201,"line":1690},[199,49833,7539],{"class":1086},[199,49835,41729],{"class":1018},[199,49837,41732],{"class":205},[199,49839,49840,49842,49844,49846,49848,49850,49852,49854,49856],{"class":201,"line":1706},[199,49841,41742],{"class":205},[199,49843,45516],{"class":8113},[199,49845,895],{"class":1086},[199,49847,45521],{"class":898},[199,49849,3461],{"class":205},[199,49851,41745],{"class":8113},[199,49853,895],{"class":1086},[199,49855,41750],{"class":898},[199,49857,1594],{"class":205},[199,49859,49860],{"class":201,"line":1712},[199,49861,45536],{"class":1454},[199,49863,49864],{"class":201,"line":1720},[199,49865,45541],{"class":1454},[199,49867,49868],{"class":201,"line":1725},[199,49869,45546],{"class":1454},[199,49871,49872],{"class":201,"line":1731},[199,49873,45551],{"class":1454},[199,49875,49876],{"class":201,"line":1745},[199,49877,45556],{"class":1454},[199,49879,49880],{"class":201,"line":1754},[199,49881,45561],{"class":1454},[199,49883,49884,49886,49888,49890,49892,49894],{"class":201,"line":1763},[199,49885,41762],{"class":1086},[199,49887,41765],{"class":205},[199,49889,41768],{"class":1086},[199,49891,41771],{"class":1086},[199,49893,41774],{"class":1018},[199,49895,6640],{"class":205},[199,49897,49898,49900,49902],{"class":201,"line":1768},[199,49899,41786],{"class":205},[199,49901,1025],{"class":1018},[199,49903,1594],{"class":205},[199,49905,49906,49908,49910],{"class":201,"line":19628},[199,49907,45588],{"class":1086},[199,49909,41729],{"class":1018},[199,49911,41805],{"class":205},[199,49913,49914,49916,49918,49920,49922],{"class":201,"line":19641},[199,49915,45597],{"class":205},[199,49917,1025],{"class":1018},[199,49919,3461],{"class":205},[199,49921,41827],{"class":1018},[199,49923,1594],{"class":205},[199,49925,49926,49928,49930,49932,49934,49936],{"class":201,"line":19646},[199,49927,45610],{"class":1086},[199,49929,41765],{"class":205},[199,49931,41768],{"class":1086},[199,49933,41771],{"class":1086},[199,49935,41774],{"class":1018},[199,49937,6640],{"class":205},[199,49939,49940,49942,49944],{"class":201,"line":19660},[199,49941,45625],{"class":205},[199,49943,1025],{"class":1018},[199,49945,1594],{"class":205},[199,49947,49948],{"class":201,"line":19665},[199,49949,38006],{"class":1454},[199,49951,49952,49954,49956],{"class":201,"line":19671},[199,49953,33643],{"class":1086},[199,49955,33935],{"class":878},[199,49957,33938],{"class":205},[199,49959,49960,49962,49964,49966],{"class":201,"line":19676},[199,49961,33943],{"class":205},[199,49963,895],{"class":1086},[199,49965,33665],{"class":1018},[199,49967,45652],{"class":205},[199,49969,49970,49972,49974,49976],{"class":201,"line":19690},[199,49971,33943],{"class":205},[199,49973,895],{"class":1086},[199,49975,33665],{"class":1018},[199,49977,45663],{"class":205},[199,49979,49980,49982,49984,49986],{"class":201,"line":19695},[199,49981,33943],{"class":205},[199,49983,895],{"class":1086},[199,49985,33665],{"class":1018},[199,49987,45674],{"class":205},[199,49989,49990,49992,49994,49996],{"class":201,"line":19700},[199,49991,33943],{"class":205},[199,49993,895],{"class":1086},[199,49995,33665],{"class":1018},[199,49997,45685],{"class":205},[199,49999,50000,50002,50004,50006],{"class":201,"line":19714},[199,50001,33943],{"class":205},[199,50003,895],{"class":1086},[199,50005,33665],{"class":1018},[199,50007,45696],{"class":205},[199,50009,50010,50012],{"class":201,"line":19726},[199,50011,17612],{"class":1086},[199,50013,34051],{"class":205},[199,50015,50016],{"class":201,"line":19731},[199,50017,907],{"emptyLinePlaceholder":906},[199,50019,50020],{"class":201,"line":19744},[199,50021,45711],{"class":1454},[199,50023,50024,50026,50028,50030,50032],{"class":201,"line":19749},[199,50025,4470],{"class":1086},[199,50027,34062],{"class":1018},[199,50029,5853],{"class":1086},[199,50031,34067],{"class":898},[199,50033,6640],{"class":205},[199,50035,50036,50038,50040,50042,50044,50046,50048,50050,50052],{"class":201,"line":19754},[199,50037,34079],{"class":205},[199,50039,895],{"class":1086},[199,50041,33294],{"class":205},[199,50043,34086],{"class":898},[199,50045,4629],{"class":1086},[199,50047,34091],{"class":205},[199,50049,4626],{"class":1086},[199,50051,33319],{"class":898},[199,50053,1594],{"class":205},[199,50055,50056,50058,50060],{"class":201,"line":19759},[199,50057,34131],{"class":205},[199,50059,895],{"class":1086},[199,50061,45752],{"class":205},[199,50063,50064,50066,50068,50070,50072,50074,50076,50078],{"class":201,"line":19772},[199,50065,34141],{"class":1018},[199,50067,34144],{"class":205},[199,50069,1115],{"class":1018},[199,50071,3461],{"class":205},[199,50073,34343],{"class":1018},[199,50075,3461],{"class":205},[199,50077,34343],{"class":1018},[199,50079,34157],{"class":205},[627,50081,50083],{"id":50082},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[31,50085,50086],{},"计算图片的均值与方差，用于训练中归一化处理操作",[190,50088,50090],{"className":33221,"code":50089,"language":33223,"meta":57,"style":57},"# 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",[196,50091,50092,50097,50110,50115,50121,50126,50136,50140,50145,50155,50159,50164,50174,50191,50195,50200,50212,50224,50255,50264,50274,50284,50288,50293,50308,50312,50317,50322,50327,50337,50342,50367,50371,50376,50391,50395,50408,50412,50417,50422,50427,50432,50437,50447,50457,50480,50488,50496,50504,50508,50520,50524,50529,50533,50537,50544,50564,50588,50595,50609,50614,50619,50623,50637,50641,50653],{"__ignoreMap":57},[199,50093,50094],{"class":201,"line":202},[199,50095,50096],{"class":1454},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[199,50098,50099,50101,50104,50107],{"class":201,"line":36},[199,50100,33579],{"class":1086},[199,50102,50103],{"class":1018}," PIL",[199,50105,50106],{"class":1086}," import",[199,50108,50109],{"class":205}," Image\n",[199,50111,50112],{"class":201,"line":73},[199,50113,50114],{"class":1454},"# os 用来处理文件夹和文件路径\n",[199,50116,50117,50119],{"class":201,"line":333},[199,50118,33235],{"class":1086},[199,50120,48146],{"class":205},[199,50122,50123],{"class":201,"line":227},[199,50124,50125],{"class":1454},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[199,50127,50128,50130,50132,50134],{"class":201,"line":238},[199,50129,33235],{"class":1086},[199,50131,34222],{"class":205},[199,50133,34225],{"class":1086},[199,50135,34228],{"class":205},[199,50137,50138],{"class":201,"line":252},[199,50139,907],{"emptyLinePlaceholder":906},[199,50141,50142],{"class":201,"line":388},[199,50143,50144],{"class":1454},"# 文件夹路径，包含所有图片文件\n",[199,50146,50147,50150,50152],{"class":201,"line":415},[199,50148,50149],{"class":205},"folder_path ",[199,50151,895],{"class":1086},[199,50153,50154],{"class":898}," 'data_cat_dog'\n",[199,50156,50157],{"class":201,"line":426},[199,50158,907],{"emptyLinePlaceholder":906},[199,50160,50161],{"class":201,"line":1015},[199,50162,50163],{"class":1454},"# 初始化累积变量\n",[199,50165,50166,50169,50171],{"class":201,"line":1031},[199,50167,50168],{"class":205},"total_pixels ",[199,50170,895],{"class":1086},[199,50172,50173],{"class":1018}," 0\n",[199,50175,50176,50179,50181,50184,50186,50188],{"class":201,"line":1043},[199,50177,50178],{"class":205},"sum_normalized_pixel_values ",[199,50180,895],{"class":1086},[199,50182,50183],{"class":205}," np.zeros(",[199,50185,1920],{"class":1018},[199,50187,48648],{"class":205},[199,50189,50190],{"class":1454},"# 如果是RGB图像，需要三个通道的均值和方差\n",[199,50192,50193],{"class":201,"line":1049},[199,50194,907],{"emptyLinePlaceholder":906},[199,50196,50197],{"class":201,"line":1054},[199,50198,50199],{"class":1454},"# 遍历文件夹中的图片文件\n",[199,50201,50202,50204,50207,50209],{"class":201,"line":1062},[199,50203,5929],{"class":1086},[199,50205,50206],{"class":205}," root, dirs, files ",[199,50208,28886],{"class":1086},[199,50210,50211],{"class":205}," os.walk(folder_path):\n",[199,50213,50214,50216,50219,50221],{"class":201,"line":1075},[199,50215,1937],{"class":1086},[199,50217,50218],{"class":205}," filename ",[199,50220,28886],{"class":1086},[199,50222,50223],{"class":205}," files:\n",[199,50225,50226,50228,50231,50234,50236,50239,50241,50244,50246,50249,50252],{"class":201,"line":1092},[199,50227,2017],{"class":1086},[199,50229,50230],{"class":205}," filename.endswith((",[199,50232,50233],{"class":898},"'.jpg'",[199,50235,1912],{"class":205},[199,50237,50238],{"class":898},"'.jpeg'",[199,50240,1912],{"class":205},[199,50242,50243],{"class":898},"'.png'",[199,50245,1912],{"class":205},[199,50247,50248],{"class":898},"'.bmp'",[199,50250,50251],{"class":205},")):  ",[199,50253,50254],{"class":1454},"# 可根据实际情况添加其他格式\n",[199,50256,50257,50259,50261],{"class":201,"line":1107},[199,50258,48513],{"class":205},[199,50260,895],{"class":1086},[199,50262,50263],{"class":205}," os.path.join(root, filename)\n",[199,50265,50266,50269,50271],{"class":201,"line":1128},[199,50267,50268],{"class":205},"            image ",[199,50270,895],{"class":1086},[199,50272,50273],{"class":205}," Image.open(image_path)\n",[199,50275,50276,50279,50281],{"class":201,"line":1146},[199,50277,50278],{"class":205},"            image_array ",[199,50280,895],{"class":1086},[199,50282,50283],{"class":205}," np.array(image)\n",[199,50285,50286],{"class":201,"line":1163},[199,50287,907],{"emptyLinePlaceholder":906},[199,50289,50290],{"class":201,"line":1176},[199,50291,50292],{"class":1454},"            # 归一化像素值到0-1之间\n",[199,50294,50295,50298,50300,50303,50305],{"class":201,"line":1189},[199,50296,50297],{"class":205},"            normalized_image_array ",[199,50299,895],{"class":1086},[199,50301,50302],{"class":205}," image_array ",[199,50304,3664],{"class":1086},[199,50306,50307],{"class":1018}," 255.0\n",[199,50309,50310],{"class":201,"line":1202},[199,50311,907],{"emptyLinePlaceholder":906},[199,50313,50314],{"class":201,"line":1207},[199,50315,50316],{"class":1454},"            # print(image_path)\n",[199,50318,50319],{"class":201,"line":1212},[199,50320,50321],{"class":1454},"            # print(normalized_image_array.shape)\n",[199,50323,50324],{"class":201,"line":1225},[199,50325,50326],{"class":1454},"            # 累积归一化后的像素值和像素数量\n",[199,50328,50329,50332,50334],{"class":201,"line":1236},[199,50330,50331],{"class":205},"            total_pixels ",[199,50333,12362],{"class":1086},[199,50335,50336],{"class":205}," normalized_image_array.size\n",[199,50338,50339],{"class":201,"line":1249},[199,50340,50341],{"class":1454},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[199,50343,50344,50347,50349,50352,50355,50357,50359,50361,50363,50365],{"class":201,"line":1262},[199,50345,50346],{"class":205},"            sum_normalized_pixel_values ",[199,50348,12362],{"class":1086},[199,50350,50351],{"class":205}," np.sum(normalized_image_array, ",[199,50353,50354],{"class":8113},"axis",[199,50356,895],{"class":1086},[199,50358,1537],{"class":205},[199,50360,1025],{"class":1018},[199,50362,1912],{"class":205},[199,50364,1115],{"class":1018},[199,50366,1554],{"class":205},[199,50368,50369],{"class":201,"line":1275},[199,50370,907],{"emptyLinePlaceholder":906},[199,50372,50373],{"class":201,"line":1287},[199,50374,50375],{"class":1454},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[199,50377,50378,50381,50383,50386,50388],{"class":201,"line":1292},[199,50379,50380],{"class":205},"mean ",[199,50382,895],{"class":1086},[199,50384,50385],{"class":205}," sum_normalized_pixel_values ",[199,50387,3664],{"class":1086},[199,50389,50390],{"class":205}," total_pixels\n",[199,50392,50393],{"class":201,"line":1297},[199,50394,907],{"emptyLinePlaceholder":906},[199,50396,50397,50400,50402,50404,50406],{"class":201,"line":1310},[199,50398,50399],{"class":205},"sum_squared_diff ",[199,50401,895],{"class":1086},[199,50403,50183],{"class":205},[199,50405,1920],{"class":1018},[199,50407,1594],{"class":205},[199,50409,50410],{"class":201,"line":1315},[199,50411,907],{"emptyLinePlaceholder":906},[199,50413,50414],{"class":201,"line":1330},[199,50415,50416],{"class":1454},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[199,50418,50419],{"class":201,"line":1335},[199,50420,50421],{"class":1454},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[199,50423,50424],{"class":201,"line":1340},[199,50425,50426],{"class":1454},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[199,50428,50429],{"class":201,"line":1352},[199,50430,50431],{"class":1454},"# Image.open(image_path)：打开图片\n",[199,50433,50434],{"class":201,"line":1367},[199,50435,50436],{"class":1454},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[199,50438,50439,50441,50443,50445],{"class":201,"line":1381},[199,50440,5929],{"class":1086},[199,50442,50206],{"class":205},[199,50444,28886],{"class":1086},[199,50446,50211],{"class":205},[199,50448,50449,50451,50453,50455],{"class":201,"line":1396},[199,50450,1937],{"class":1086},[199,50452,50218],{"class":205},[199,50454,28886],{"class":1086},[199,50456,50223],{"class":205},[199,50458,50459,50461,50463,50465,50467,50469,50471,50473,50475,50477],{"class":201,"line":1401},[199,50460,2017],{"class":1086},[199,50462,50230],{"class":205},[199,50464,50233],{"class":898},[199,50466,1912],{"class":205},[199,50468,50238],{"class":898},[199,50470,1912],{"class":205},[199,50472,50243],{"class":898},[199,50474,1912],{"class":205},[199,50476,50248],{"class":898},[199,50478,50479],{"class":205},")):\n",[199,50481,50482,50484,50486],{"class":201,"line":1411},[199,50483,48513],{"class":205},[199,50485,895],{"class":1086},[199,50487,50263],{"class":205},[199,50489,50490,50492,50494],{"class":201,"line":1421},[199,50491,50268],{"class":205},[199,50493,895],{"class":1086},[199,50495,50273],{"class":205},[199,50497,50498,50500,50502],{"class":201,"line":1426},[199,50499,50278],{"class":205},[199,50501,895],{"class":1086},[199,50503,50283],{"class":205},[199,50505,50506],{"class":201,"line":1436},[199,50507,50292],{"class":1454},[199,50509,50510,50512,50514,50516,50518],{"class":201,"line":1441},[199,50511,50297],{"class":205},[199,50513,895],{"class":1086},[199,50515,50302],{"class":205},[199,50517,3664],{"class":1086},[199,50519,50307],{"class":1018},[199,50521,50522],{"class":201,"line":1451},[199,50523,50321],{"class":1454},[199,50525,50526],{"class":201,"line":1458},[199,50527,50528],{"class":1454},"            # print(mean.shape)\n",[199,50530,50531],{"class":201,"line":1464},[199,50532,50316],{"class":1454},[199,50534,50535],{"class":201,"line":1478},[199,50536,907],{"emptyLinePlaceholder":906},[199,50538,50539,50542],{"class":201,"line":1516},[199,50540,50541],{"class":1086},"            try",[199,50543,6640],{"class":205},[199,50545,50546,50549,50551,50554,50556,50559,50561],{"class":201,"line":1522},[199,50547,50548],{"class":205},"                diff ",[199,50550,895],{"class":1086},[199,50552,50553],{"class":205}," (normalized_image_array ",[199,50555,1998],{"class":1086},[199,50557,50558],{"class":205}," mean) ",[199,50560,13524],{"class":1086},[199,50562,50563],{"class":1018}," 2\n",[199,50565,50566,50569,50571,50574,50576,50578,50580,50582,50584,50586],{"class":201,"line":1528},[199,50567,50568],{"class":205},"                sum_squared_diff ",[199,50570,12362],{"class":1086},[199,50572,50573],{"class":205}," np.sum(diff, ",[199,50575,50354],{"class":8113},[199,50577,895],{"class":1086},[199,50579,1537],{"class":205},[199,50581,1025],{"class":1018},[199,50583,1912],{"class":205},[199,50585,1115],{"class":1018},[199,50587,1554],{"class":205},[199,50589,50590,50593],{"class":201,"line":1557},[199,50591,50592],{"class":1086},"            except",[199,50594,6640],{"class":205},[199,50596,50597,50600,50602,50604,50607],{"class":201,"line":1563},[199,50598,50599],{"class":1018},"                print",[199,50601,1537],{"class":205},[199,50603,3146],{"class":1086},[199,50605,50606],{"class":898},"\"捕获到自定义异常\"",[199,50608,1594],{"class":205},[199,50610,50611],{"class":201,"line":1568},[199,50612,50613],{"class":1454},"            # diff = (normalized_image_array - mean) ** 2\n",[199,50615,50616],{"class":201,"line":1574},[199,50617,50618],{"class":1454},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[199,50620,50621],{"class":201,"line":1580},[199,50622,907],{"emptyLinePlaceholder":906},[199,50624,50625,50628,50630,50633,50635],{"class":201,"line":1597},[199,50626,50627],{"class":205},"variance ",[199,50629,895],{"class":1086},[199,50631,50632],{"class":205}," sum_squared_diff ",[199,50634,3664],{"class":1086},[199,50636,50390],{"class":205},[199,50638,50639],{"class":201,"line":1602},[199,50640,907],{"emptyLinePlaceholder":906},[199,50642,50643,50645,50647,50650],{"class":201,"line":1608},[199,50644,33258],{"class":1018},[199,50646,1537],{"class":205},[199,50648,50649],{"class":898},"\"Mean:\"",[199,50651,50652],{"class":205},", mean)\n",[199,50654,50655,50657,50659,50662],{"class":201,"line":1640},[199,50656,33258],{"class":1018},[199,50658,1537],{"class":205},[199,50660,50661],{"class":898},"\"Variance:\"",[199,50663,50664],{"class":205},", variance)\n",[190,50666,50668],{"className":33221,"code":50667,"language":33223,"meta":57,"style":57},"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",[196,50669,50670,50676,50682,50692,50698,50708,50722,50732,50742,50752,50756,50766,50776,50780,50784,50792,50797,50802,50821,50825,50830,50835,50840,50845,50886,50891,50901,50906,50919,50924,50929,50934,50939,50944,50948,50953,50958,50980,50984,51016,51030,51040,51050,51054,51064,51078,51088,51098,51108,51114,51118,51122,51126,51130,51134,51142,51162,51166,51170,51174,51178,51194,51198,51202,51210,51214,51218,51226,51230,51234,51238,51246,51250,51254,51258,51266,51270,51278,51282,51290,51294,51302,51306,51314,51318,51322,51330,51334,51338,51350,51374,51388,51392,51396,51400,51408,51412,51420,51424,51432,51436,51444,51448,51456,51460,51468,51472,51484,51488,51496,51500,51508,51512,51516,51520,51524,51532,51536,51552,51556,51564,51568,51572,51576,51580,51584,51588,51592,51608,51612,51624,51628,51640,51644,51656,51660,51668,51672,51680,51684,51688,51692,51698,51702,51710,51714,51730,51734,51742,51746,51762,51774,51778,51790,51794,51798,51806,51810,51814,51822,51826,51834,51838,51846,51850,51854,51896,51938,51942,51946,51962,51966,51982,51986,51990,51998,52002,52006,52018,52056,52060,52064,52072,52076,52090,52100,52106,52112,52118,52124,52128,52132,52138,52142,52146,52154,52158,52176,52180,52184,52188,52204,52208,52212,52216,52220,52224,52244,52264,52268,52272,52276,52284,52292,52296,52312,52332,52352,52356,52361,52370,52379,52384,52389,52394,52407,52412,52421,52430,52447],{"__ignoreMap":57},[199,50671,50672,50674],{"class":201,"line":202},[199,50673,33235],{"class":1086},[199,50675,34664],{"class":205},[199,50677,50678,50680],{"class":201,"line":36},[199,50679,33235],{"class":1086},[199,50681,34671],{"class":205},[199,50683,50684,50686,50688,50690],{"class":201,"line":73},[199,50685,33235],{"class":1086},[199,50687,34682],{"class":205},[199,50689,34225],{"class":1086},[199,50691,34687],{"class":205},[199,50693,50694,50696],{"class":201,"line":333},[199,50695,33235],{"class":1086},[199,50697,33238],{"class":205},[199,50699,50700,50702,50704,50706],{"class":201,"line":227},[199,50701,33579],{"class":1086},[199,50703,34257],{"class":205},[199,50705,33235],{"class":1086},[199,50707,34704],{"class":205},[199,50709,50710,50712,50714,50716,50719],{"class":201,"line":238},[199,50711,33579],{"class":1086},[199,50713,34210],{"class":205},[199,50715,33235],{"class":1086},[199,50717,50718],{"class":205}," ImageFolder ",[199,50720,50721],{"class":1454},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[199,50723,50724,50726,50728,50730],{"class":201,"line":252},[199,50725,33579],{"class":1086},[199,50727,34240],{"class":205},[199,50729,33235],{"class":1086},[199,50731,34245],{"class":205},[199,50733,50734,50736,50738,50740],{"class":201,"line":388},[199,50735,33235],{"class":1086},[199,50737,34257],{"class":205},[199,50739,34225],{"class":1086},[199,50741,34262],{"class":205},[199,50743,50744,50746,50748,50750],{"class":201,"line":415},[199,50745,33235],{"class":1086},[199,50747,34274],{"class":205},[199,50749,34225],{"class":1086},[199,50751,34279],{"class":205},[199,50753,50754],{"class":201,"line":426},[199,50755,34749],{"class":1454},[199,50757,50758,50760,50762,50764],{"class":201,"line":1015},[199,50759,33579],{"class":1086},[199,50761,34756],{"class":205},[199,50763,33235],{"class":1086},[199,50765,45872],{"class":205},[199,50767,50768,50770,50772,50774],{"class":201,"line":1031},[199,50769,33579],{"class":1086},[199,50771,33582],{"class":205},[199,50773,33235],{"class":1086},[199,50775,33587],{"class":205},[199,50777,50778],{"class":201,"line":1043},[199,50779,907],{"emptyLinePlaceholder":906},[199,50781,50782],{"class":201,"line":1049},[199,50783,34784],{"class":1454},[199,50785,50786,50788,50790],{"class":201,"line":1054},[199,50787,34789],{"class":1086},[199,50789,34792],{"class":878},[199,50791,34795],{"class":205},[199,50793,50794],{"class":201,"line":1062},[199,50795,50796],{"class":1454},"    # 导入自己的数据集，并进行数据处理\n",[199,50798,50799],{"class":201,"line":1075},[199,50800,50801],{"class":1454},"    # 定义数据集的路径\n",[199,50803,50804,50807,50809,50811,50813,50815,50819],{"class":201,"line":1092},[199,50805,50806],{"class":1018},"    ROOT_PATH",[199,50808,895],{"class":1086},[199,50810,3749],{"class":1086},[199,50812,3337],{"class":898},[199,50814,3638],{"class":1018},[199,50816,50818],{"class":50817},"sA_wV","\u002Fdata\u002Ftrain",[199,50820,27976],{"class":898},[199,50822,50823],{"class":201,"line":1107},[199,50824,907],{"emptyLinePlaceholder":906},[199,50826,50827],{"class":201,"line":1128},[199,50828,50829],{"class":1454},"    # 定义归一化方法\n",[199,50831,50832],{"class":201,"line":1146},[199,50833,50834],{"class":1454},"    # 这里需要先计算一下数据集的均值和方差\n",[199,50836,50837],{"class":201,"line":1163},[199,50838,50839],{"class":1454},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[199,50841,50842],{"class":201,"line":1176},[199,50843,50844],{"class":1454},"    # 第一个参数是均值，第二个参数是方差\n",[199,50846,50847,50850,50852,50855,50858,50860,50863,50865,50868,50871,50874,50876,50879,50881,50884],{"class":201,"line":1189},[199,50848,50849],{"class":205},"    normalize",[199,50851,895],{"class":1086},[199,50853,50854],{"class":205},"transforms.Normalize([",[199,50856,50857],{"class":1018},"0.162",[199,50859,3461],{"class":205},[199,50861,50862],{"class":1018},"0.151",[199,50864,3461],{"class":205},[199,50866,50867],{"class":1018},"0.138",[199,50869,50870],{"class":205},"],[",[199,50872,50873],{"class":1018},"0.058",[199,50875,3461],{"class":205},[199,50877,50878],{"class":1018},"0.052",[199,50880,3461],{"class":205},[199,50882,50883],{"class":1018},"0.048",[199,50885,7554],{"class":205},[199,50887,50888],{"class":201,"line":1202},[199,50889,50890],{"class":1454},"    # 定义数据集处理方法变量\n",[199,50892,50893,50896,50898],{"class":201,"line":1207},[199,50894,50895],{"class":205},"    train_transform",[199,50897,895],{"class":1086},[199,50899,50900],{"class":205},"transforms.Compose([\n",[199,50902,50903],{"class":201,"line":1212},[199,50904,50905],{"class":1454},"        # 调整图像大小为224*224\n",[199,50907,50908,50911,50913,50915,50917],{"class":201,"line":1225},[199,50909,50910],{"class":205},"        transforms.Resize((",[199,50912,34343],{"class":1018},[199,50914,3461],{"class":205},[199,50916,34343],{"class":1018},[199,50918,45463],{"class":205},[199,50920,50921],{"class":201,"line":1236},[199,50922,50923],{"class":1454},"        # 将图像转换为张量\n",[199,50925,50926],{"class":201,"line":1249},[199,50927,50928],{"class":205},"        transforms.ToTensor(),\n",[199,50930,50931],{"class":201,"line":1262},[199,50932,50933],{"class":205},"        normalize])\n",[199,50935,50936],{"class":201,"line":1275},[199,50937,50938],{"class":1454},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[199,50940,50941],{"class":201,"line":1287},[199,50942,50943],{"class":1454},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[199,50945,50946],{"class":201,"line":1292},[199,50947,907],{"emptyLinePlaceholder":906},[199,50949,50950],{"class":201,"line":1297},[199,50951,50952],{"class":1454},"    # 加载数据集\n",[199,50954,50955],{"class":201,"line":1310},[199,50956,50957],{"class":1454},"    # 传入数据集路径与处理方法\n",[199,50959,50960,50962,50964,50967,50970,50972,50975,50977],{"class":201,"line":1315},[199,50961,34800],{"class":205},[199,50963,895],{"class":1086},[199,50965,50966],{"class":205},"ImageFolder(",[199,50968,50969],{"class":1018},"ROOT_PATH",[199,50971,3461],{"class":205},[199,50973,50974],{"class":8113},"transform",[199,50976,895],{"class":1086},[199,50978,50979],{"class":205},"train_transform)\n",[199,50981,50982],{"class":201,"line":1330},[199,50983,907],{"emptyLinePlaceholder":906},[199,50985,50986,50988,50990,50992,50994,50996,50998,51000,51002,51004,51006,51008,51010,51012,51014],{"class":201,"line":1335},[199,50987,34852],{"class":205},[199,50989,895],{"class":1086},[199,50991,34857],{"class":205},[199,50993,34860],{"class":1018},[199,50995,1537],{"class":205},[199,50997,34865],{"class":1018},[199,50999,3537],{"class":1086},[199,51001,10255],{"class":1018},[199,51003,34872],{"class":205},[199,51005,34860],{"class":1018},[199,51007,1537],{"class":205},[199,51009,34879],{"class":1018},[199,51011,3537],{"class":1086},[199,51013,10255],{"class":1018},[199,51015,34886],{"class":205},[199,51017,51018,51020,51022,51024,51026,51028],{"class":201,"line":1340},[199,51019,34891],{"class":205},[199,51021,895],{"class":1086},[199,51023,34896],{"class":205},[199,51025,34379],{"class":8113},[199,51027,895],{"class":1086},[199,51029,34384],{"class":205},[199,51031,51032,51034,51036,51038],{"class":201,"line":1352},[199,51033,34907],{"class":8113},[199,51035,895],{"class":1086},[199,51037,3285],{"class":1018},[199,51039,34308],{"class":205},[199,51041,51042,51044,51046,51048],{"class":201,"line":1367},[199,51043,34919],{"class":8113},[199,51045,895],{"class":1086},[199,51047,34318],{"class":1018},[199,51049,34308],{"class":205},[199,51051,51052],{"class":201,"line":1381},[199,51053,34930],{"class":1454},[199,51055,51056,51058,51060,51062],{"class":201,"line":1396},[199,51057,34935],{"class":8113},[199,51059,895],{"class":1086},[199,51061,3478],{"class":1018},[199,51063,1594],{"class":205},[199,51065,51066,51068,51070,51072,51074,51076],{"class":201,"line":1401},[199,51067,34946],{"class":205},[199,51069,895],{"class":1086},[199,51071,34376],{"class":205},[199,51073,34379],{"class":8113},[199,51075,895],{"class":1086},[199,51077,34957],{"class":205},[199,51079,51080,51082,51084,51086],{"class":201,"line":1411},[199,51081,34962],{"class":8113},[199,51083,895],{"class":1086},[199,51085,3285],{"class":1018},[199,51087,34308],{"class":205},[199,51089,51090,51092,51094,51096],{"class":201,"line":1421},[199,51091,34973],{"class":8113},[199,51093,895],{"class":1086},[199,51095,34318],{"class":1018},[199,51097,34308],{"class":205},[199,51099,51100,51102,51104,51106],{"class":201,"line":1426},[199,51101,34984],{"class":8113},[199,51103,895],{"class":1086},[199,51105,3478],{"class":1018},[199,51107,1594],{"class":205},[199,51109,51110,51112],{"class":201,"line":1436},[199,51111,6989],{"class":1086},[199,51113,34997],{"class":205},[199,51115,51116],{"class":201,"line":1441},[199,51117,907],{"emptyLinePlaceholder":906},[199,51119,51120],{"class":201,"line":1451},[199,51121,35006],{"class":1454},[199,51123,51124],{"class":201,"line":1458},[199,51125,35011],{"class":1454},[199,51127,51128],{"class":201,"line":1464},[199,51129,907],{"emptyLinePlaceholder":906},[199,51131,51132],{"class":201,"line":1478},[199,51133,35020],{"class":1454},[199,51135,51136,51138,51140],{"class":201,"line":1516},[199,51137,34789],{"class":1086},[199,51139,35027],{"class":878},[199,51141,35030],{"class":205},[199,51143,51144,51146,51148,51150,51152,51154,51156,51158,51160],{"class":201,"line":1522},[199,51145,34079],{"class":205},[199,51147,895],{"class":1086},[199,51149,33294],{"class":205},[199,51151,34086],{"class":898},[199,51153,4629],{"class":1086},[199,51155,34091],{"class":205},[199,51157,4626],{"class":1086},[199,51159,35049],{"class":898},[199,51161,1594],{"class":205},[199,51163,51164],{"class":201,"line":1528},[199,51165,907],{"emptyLinePlaceholder":906},[199,51167,51168],{"class":201,"line":1557},[199,51169,35064],{"class":1454},[199,51171,51172],{"class":201,"line":1563},[199,51173,35069],{"class":1454},[199,51175,51176],{"class":201,"line":1568},[199,51177,35074],{"class":1454},[199,51179,51180,51182,51184,51186,51188,51190,51192],{"class":201,"line":1574},[199,51181,35079],{"class":205},[199,51183,895],{"class":1086},[199,51185,35084],{"class":205},[199,51187,35087],{"class":8113},[199,51189,895],{"class":1086},[199,51191,35092],{"class":1018},[199,51193,1594],{"class":205},[199,51195,51196],{"class":201,"line":1580},[199,51197,907],{"emptyLinePlaceholder":906},[199,51199,51200],{"class":201,"line":1597},[199,51201,35103],{"class":1454},[199,51203,51204,51206,51208],{"class":201,"line":1602},[199,51205,35108],{"class":205},[199,51207,895],{"class":1086},[199,51209,35113],{"class":205},[199,51211,51212],{"class":201,"line":1608},[199,51213,907],{"emptyLinePlaceholder":906},[199,51215,51216],{"class":201,"line":1640},[199,51217,35122],{"class":1454},[199,51219,51220,51222,51224],{"class":201,"line":1653},[199,51221,34131],{"class":205},[199,51223,895],{"class":1086},[199,51225,35131],{"class":205},[199,51227,51228],{"class":201,"line":1673},[199,51229,35136],{"class":1454},[199,51231,51232],{"class":201,"line":1690},[199,51233,35141],{"class":1454},[199,51235,51236],{"class":201,"line":1706},[199,51237,35146],{"class":1454},[199,51239,51240,51242,51244],{"class":201,"line":1712},[199,51241,35151],{"class":205},[199,51243,895],{"class":1086},[199,51245,35156],{"class":205},[199,51247,51248],{"class":201,"line":1720},[199,51249,907],{"emptyLinePlaceholder":906},[199,51251,51252],{"class":201,"line":1725},[199,51253,35169],{"class":1454},[199,51255,51256],{"class":201,"line":1731},[199,51257,35174],{"class":1454},[199,51259,51260,51262,51264],{"class":201,"line":1745},[199,51261,35179],{"class":205},[199,51263,895],{"class":1086},[199,51265,35184],{"class":1018},[199,51267,51268],{"class":201,"line":1754},[199,51269,35189],{"class":1454},[199,51271,51272,51274,51276],{"class":201,"line":1763},[199,51273,35194],{"class":205},[199,51275,895],{"class":1086},[199,51277,35199],{"class":205},[199,51279,51280],{"class":201,"line":1768},[199,51281,35204],{"class":1454},[199,51283,51284,51286,51288],{"class":201,"line":19628},[199,51285,35209],{"class":205},[199,51287,895],{"class":1086},[199,51289,35199],{"class":205},[199,51291,51292],{"class":201,"line":19641},[199,51293,35218],{"class":1454},[199,51295,51296,51298,51300],{"class":201,"line":19646},[199,51297,35223],{"class":205},[199,51299,895],{"class":1086},[199,51301,35199],{"class":205},[199,51303,51304],{"class":201,"line":19660},[199,51305,35232],{"class":1454},[199,51307,51308,51310,51312],{"class":201,"line":19665},[199,51309,35237],{"class":205},[199,51311,895],{"class":1086},[199,51313,35199],{"class":205},[199,51315,51316],{"class":201,"line":19671},[199,51317,907],{"emptyLinePlaceholder":906},[199,51319,51320],{"class":201,"line":19676},[199,51321,35250],{"class":1454},[199,51323,51324,51326,51328],{"class":201,"line":19690},[199,51325,35255],{"class":205},[199,51327,895],{"class":1086},[199,51329,35260],{"class":205},[199,51331,51332],{"class":201,"line":19695},[199,51333,907],{"emptyLinePlaceholder":906},[199,51335,51336],{"class":201,"line":19700},[199,51337,35273],{"class":1454},[199,51339,51340,51342,51344,51346,51348],{"class":201,"line":19714},[199,51341,1937],{"class":1086},[199,51343,35280],{"class":205},[199,51345,28886],{"class":1086},[199,51347,35285],{"class":1018},[199,51349,35288],{"class":205},[199,51351,51352,51354,51356,51358,51360,51362,51364,51366,51368,51370,51372],{"class":201,"line":19726},[199,51353,35293],{"class":1018},[199,51355,1537],{"class":205},[199,51357,35298],{"class":898},[199,51359,35301],{"class":1018},[199,51361,3664],{"class":898},[199,51363,35301],{"class":1018},[199,51365,3337],{"class":898},[199,51367,35310],{"class":205},[199,51369,1998],{"class":1086},[199,51371,1115],{"class":1018},[199,51373,1554],{"class":205},[199,51375,51376,51378,51380,51382,51384,51386],{"class":201,"line":19731},[199,51377,35293],{"class":1018},[199,51379,1537],{"class":205},[199,51381,35325],{"class":898},[199,51383,3537],{"class":1086},[199,51385,3528],{"class":1018},[199,51387,1594],{"class":205},[199,51389,51390],{"class":201,"line":19744},[199,51391,907],{"emptyLinePlaceholder":906},[199,51393,51394],{"class":201,"line":19749},[199,51395,35340],{"class":1454},[199,51397,51398],{"class":201,"line":19754},[199,51399,35345],{"class":1454},[199,51401,51402,51404,51406],{"class":201,"line":19759},[199,51403,35350],{"class":205},[199,51405,895],{"class":1086},[199,51407,35184],{"class":1018},[199,51409,51410],{"class":201,"line":19772},[199,51411,35359],{"class":1454},[199,51413,51414,51416,51418],{"class":201,"line":19777},[199,51415,35364],{"class":205},[199,51417,895],{"class":1086},[199,51419,5989],{"class":1018},[199,51421,51422],{"class":201,"line":35475},[199,51423,35373],{"class":1454},[199,51425,51426,51428,51430],{"class":201,"line":35481},[199,51427,35378],{"class":205},[199,51429,895],{"class":1086},[199,51431,35184],{"class":1018},[199,51433,51434],{"class":201,"line":35487},[199,51435,35387],{"class":1454},[199,51437,51438,51440,51442],{"class":201,"line":35493},[199,51439,35392],{"class":205},[199,51441,895],{"class":1086},[199,51443,5989],{"class":1018},[199,51445,51446],{"class":201,"line":35499},[199,51447,35401],{"class":1454},[199,51449,51450,51452,51454],{"class":201,"line":35510},[199,51451,35406],{"class":205},[199,51453,895],{"class":1086},[199,51455,5989],{"class":1018},[199,51457,51458],{"class":201,"line":35516},[199,51459,35415],{"class":1454},[199,51461,51462,51464,51466],{"class":201,"line":35536},[199,51463,35420],{"class":205},[199,51465,895],{"class":1086},[199,51467,5989],{"class":1018},[199,51469,51470],{"class":201,"line":35542},[199,51471,35429],{"class":1454},[199,51473,51474,51476,51478,51480,51482],{"class":201,"line":35553},[199,51475,1481],{"class":1086},[199,51477,34443],{"class":205},[199,51479,28886],{"class":1086},[199,51481,34448],{"class":1018},[199,51483,35442],{"class":205},[199,51485,51486],{"class":201,"line":35559},[199,51487,35447],{"class":1454},[199,51489,51490,51492,51494],{"class":201,"line":35565},[199,51491,35452],{"class":205},[199,51493,895],{"class":1086},[199,51495,35457],{"class":205},[199,51497,51498],{"class":201,"line":35571},[199,51499,35462],{"class":1454},[199,51501,51502,51504,51506],{"class":201,"line":35577},[199,51503,35467],{"class":205},[199,51505,895],{"class":1086},[199,51507,35472],{"class":205},[199,51509,51510],{"class":201,"line":35583},[199,51511,35478],{"class":1454},[199,51513,51514],{"class":201,"line":35589},[199,51515,35484],{"class":205},[199,51517,51518],{"class":201,"line":35595},[199,51519,35490],{"class":1454},[199,51521,51522],{"class":201,"line":35615},[199,51523,35496],{"class":1454},[199,51525,51526,51528,51530],{"class":201,"line":35621},[199,51527,35502],{"class":205},[199,51529,895],{"class":1086},[199,51531,35507],{"class":205},[199,51533,51534],{"class":201,"line":35637},[199,51535,35513],{"class":1454},[199,51537,51538,51540,51542,51544,51546,51548,51550],{"class":201,"line":35643},[199,51539,35519],{"class":205},[199,51541,895],{"class":1086},[199,51543,35524],{"class":205},[199,51545,35527],{"class":8113},[199,51547,895],{"class":1086},[199,51549,1115],{"class":1018},[199,51551,1594],{"class":205},[199,51553,51554],{"class":201,"line":35657},[199,51555,35539],{"class":1454},[199,51557,51558,51560,51562],{"class":201,"line":35663},[199,51559,35545],{"class":205},[199,51561,895],{"class":1086},[199,51563,35550],{"class":205},[199,51565,51566],{"class":201,"line":35678},[199,51567,35556],{"class":1454},[199,51569,51570],{"class":201,"line":35684},[199,51571,35562],{"class":205},[199,51573,51574],{"class":201,"line":35693},[199,51575,35568],{"class":1454},[199,51577,51578],{"class":201,"line":35699},[199,51579,35574],{"class":205},[199,51581,51582],{"class":201,"line":35708},[199,51583,35580],{"class":1454},[199,51585,51586],{"class":201,"line":35714},[199,51587,35586],{"class":205},[199,51589,51590],{"class":201,"line":35720},[199,51591,35592],{"class":1454},[199,51593,51594,51596,51598,51600,51602,51604,51606],{"class":201,"line":35729},[199,51595,35598],{"class":205},[199,51597,12362],{"class":1086},[199,51599,35603],{"class":205},[199,51601,3537],{"class":1086},[199,51603,35608],{"class":205},[199,51605,1025],{"class":1018},[199,51607,1594],{"class":205},[199,51609,51610],{"class":201,"line":35735},[199,51611,35618],{"class":1454},[199,51613,51614,51616,51618,51620,51622],{"class":201,"line":35746},[199,51615,35624],{"class":205},[199,51617,12362],{"class":1086},[199,51619,35629],{"class":205},[199,51621,5853],{"class":1086},[199,51623,35634],{"class":205},[199,51625,51626],{"class":201,"line":35752},[199,51627,35640],{"class":1454},[199,51629,51630,51632,51634,51636,51638],{"class":201,"line":35771},[199,51631,35646],{"class":205},[199,51633,12362],{"class":1086},[199,51635,35608],{"class":205},[199,51637,1025],{"class":1018},[199,51639,1594],{"class":205},[199,51641,51642],{"class":201,"line":35777},[199,51643,35660],{"class":1454},[199,51645,51646,51648,51650,51652,51654],{"class":201,"line":35788},[199,51647,1481],{"class":1086},[199,51649,35668],{"class":205},[199,51651,28886],{"class":1086},[199,51653,34448],{"class":1018},[199,51655,35675],{"class":205},[199,51657,51658],{"class":201,"line":35794},[199,51659,35681],{"class":1454},[199,51661,51662,51664,51666],{"class":201,"line":35814},[199,51663,35452],{"class":205},[199,51665,895],{"class":1086},[199,51667,35457],{"class":205},[199,51669,51670],{"class":201,"line":35830},[199,51671,35696],{"class":1454},[199,51673,51674,51676,51678],{"class":201,"line":35836},[199,51675,35467],{"class":205},[199,51677,895],{"class":1086},[199,51679,35472],{"class":205},[199,51681,51682],{"class":201,"line":35850},[199,51683,35711],{"class":1454},[199,51685,51686],{"class":201,"line":35856},[199,51687,35717],{"class":205},[199,51689,51690],{"class":201,"line":35862},[199,51691,39197],{"class":1454},[199,51693,51694,51696],{"class":201,"line":35873},[199,51695,35723],{"class":1086},[199,51697,35726],{"class":205},[199,51699,51700],{"class":201,"line":35879},[199,51701,35732],{"class":1454},[199,51703,51704,51706,51708],{"class":201,"line":35885},[199,51705,39212],{"class":205},[199,51707,895],{"class":1086},[199,51709,35507],{"class":205},[199,51711,51712],{"class":201,"line":35895},[199,51713,35749],{"class":1454},[199,51715,51716,51718,51720,51722,51724,51726,51728],{"class":201,"line":35901},[199,51717,39225],{"class":205},[199,51719,895],{"class":1086},[199,51721,35524],{"class":205},[199,51723,35527],{"class":8113},[199,51725,895],{"class":1086},[199,51727,1115],{"class":1018},[199,51729,1594],{"class":205},[199,51731,51732],{"class":201,"line":35912},[199,51733,35774],{"class":1454},[199,51735,51736,51738,51740],{"class":201,"line":35918},[199,51737,39246],{"class":205},[199,51739,895],{"class":1086},[199,51741,35550],{"class":205},[199,51743,51744],{"class":201,"line":35928},[199,51745,35791],{"class":1454},[199,51747,51748,51750,51752,51754,51756,51758,51760],{"class":201,"line":35933},[199,51749,39259],{"class":205},[199,51751,12362],{"class":1086},[199,51753,39264],{"class":205},[199,51755,3537],{"class":1086},[199,51757,35608],{"class":205},[199,51759,1025],{"class":1018},[199,51761,1594],{"class":205},[199,51763,51764,51766,51768,51770,51772],{"class":201,"line":35939},[199,51765,39277],{"class":205},[199,51767,12362],{"class":1086},[199,51769,35629],{"class":205},[199,51771,5853],{"class":1086},[199,51773,35634],{"class":205},[199,51775,51776],{"class":201,"line":35988},[199,51777,39290],{"class":1454},[199,51779,51780,51782,51784,51786,51788],{"class":201,"line":36035},[199,51781,39295],{"class":205},[199,51783,12362],{"class":1086},[199,51785,35608],{"class":205},[199,51787,1025],{"class":1018},[199,51789,1594],{"class":205},[199,51791,51792],{"class":201,"line":36040},[199,51793,35853],{"class":1454},[199,51795,51796],{"class":201,"line":36046},[199,51797,35859],{"class":1454},[199,51799,51800,51802,51804],{"class":201,"line":36065},[199,51801,35865],{"class":205},[199,51803,3664],{"class":1086},[199,51805,35870],{"class":205},[199,51807,51808],{"class":201,"line":36071},[199,51809,35876],{"class":1454},[199,51811,51812],{"class":201,"line":36090},[199,51813,35882],{"class":1454},[199,51815,51816,51818,51820],{"class":201,"line":36096},[199,51817,35888],{"class":205},[199,51819,3664],{"class":1086},[199,51821,35870],{"class":205},[199,51823,51824],{"class":201,"line":36102},[199,51825,35898],{"class":1454},[199,51827,51828,51830,51832],{"class":201,"line":36112},[199,51829,35904],{"class":205},[199,51831,3664],{"class":1086},[199,51833,35909],{"class":205},[199,51835,51836],{"class":201,"line":36117},[199,51837,35915],{"class":1454},[199,51839,51840,51842,51844],{"class":201,"line":36123},[199,51841,35921],{"class":205},[199,51843,3664],{"class":1086},[199,51845,35909],{"class":205},[199,51847,51848],{"class":201,"line":36139},[199,51849,907],{"emptyLinePlaceholder":906},[199,51851,51852],{"class":201,"line":36184},[199,51853,35936],{"class":1454},[199,51855,51856,51858,51860,51862,51864,51866,51868,51870,51872,51874,51876,51878,51880,51882,51884,51886,51888,51890,51892,51894],{"class":201,"line":36190},[199,51857,35293],{"class":1018},[199,51859,1537],{"class":205},[199,51861,6493],{"class":898},[199,51863,35301],{"class":1018},[199,51865,35950],{"class":898},[199,51867,3974],{"class":1018},[199,51869,35955],{"class":1086},[199,51871,759],{"class":1018},[199,51873,35960],{"class":898},[199,51875,3974],{"class":1018},[199,51877,35955],{"class":1086},[199,51879,759],{"class":1018},[199,51881,6493],{"class":898},[199,51883,35971],{"class":205},[199,51885,1998],{"class":1086},[199,51887,1115],{"class":1018},[199,51889,35978],{"class":205},[199,51891,1998],{"class":1086},[199,51893,1115],{"class":1018},[199,51895,35985],{"class":205},[199,51897,51898,51900,51902,51904,51906,51908,51910,51912,51914,51916,51918,51920,51922,51924,51926,51928,51930,51932,51934,51936],{"class":201,"line":36196},[199,51899,35293],{"class":1018},[199,51901,1537],{"class":205},[199,51903,6493],{"class":898},[199,51905,35301],{"class":1018},[199,51907,35999],{"class":898},[199,51909,3974],{"class":1018},[199,51911,35955],{"class":1086},[199,51913,759],{"class":1018},[199,51915,36008],{"class":898},[199,51917,3974],{"class":1018},[199,51919,35955],{"class":1086},[199,51921,759],{"class":1018},[199,51923,6493],{"class":898},[199,51925,36019],{"class":205},[199,51927,1998],{"class":1086},[199,51929,1115],{"class":1018},[199,51931,36026],{"class":205},[199,51933,1998],{"class":1086},[199,51935,1115],{"class":1018},[199,51937,35985],{"class":205},[199,51939,51940],{"class":201,"line":36202},[199,51941,907],{"emptyLinePlaceholder":906},[199,51943,51944],{"class":201,"line":36213},[199,51945,36043],{"class":1454},[199,51947,51948,51950,51952,51954,51956,51958,51960],{"class":201,"line":36219},[199,51949,2017],{"class":1086},[199,51951,36051],{"class":205},[199,51953,1998],{"class":1086},[199,51955,1115],{"class":1018},[199,51957,1667],{"class":205},[199,51959,1217],{"class":1086},[199,51961,36062],{"class":205},[199,51963,51964],{"class":201,"line":36225},[199,51965,36068],{"class":1454},[199,51967,51968,51970,51972,51974,51976,51978,51980],{"class":201,"line":36231},[199,51969,36074],{"class":205},[199,51971,3135],{"class":1018},[199,51973,895],{"class":1086},[199,51975,36081],{"class":205},[199,51977,1998],{"class":1086},[199,51979,1115],{"class":1018},[199,51981,1932],{"class":205},[199,51983,51984],{"class":201,"line":36249},[199,51985,36093],{"class":1454},[199,51987,51988],{"class":201,"line":36263},[199,51989,36099],{"class":1454},[199,51991,51992,51994,51996],{"class":201,"line":36272},[199,51993,36105],{"class":205},[199,51995,895],{"class":1086},[199,51997,35156],{"class":205},[199,51999,52000],{"class":201,"line":36281},[199,52001,907],{"emptyLinePlaceholder":906},[199,52003,52004],{"class":201,"line":36290},[199,52005,36120],{"class":1454},[199,52007,52008,52010,52012,52014,52016],{"class":201,"line":36299},[199,52009,36126],{"class":205},[199,52011,895],{"class":1086},[199,52013,36131],{"class":205},[199,52015,1998],{"class":1086},[199,52017,36136],{"class":205},[199,52019,52020,52022,52024,52026,52028,52030,52032,52034,52036,52038,52040,52042,52044,52046,52048,52050,52052,52054],{"class":201,"line":36305},[199,52021,35293],{"class":1018},[199,52023,1537],{"class":205},[199,52025,36146],{"class":898},[199,52027,3974],{"class":1018},[199,52029,36151],{"class":1086},[199,52031,759],{"class":1018},[199,52033,3624],{"class":898},[199,52035,3974],{"class":1018},[199,52037,36151],{"class":1086},[199,52039,759],{"class":1018},[199,52041,36164],{"class":898},[199,52043,36167],{"class":205},[199,52045,36170],{"class":1086},[199,52047,3985],{"class":1018},[199,52049,36175],{"class":205},[199,52051,3412],{"class":1086},[199,52053,3985],{"class":1018},[199,52055,1554],{"class":205},[199,52057,52058],{"class":201,"line":36311},[199,52059,39574],{"class":1454},[199,52061,52062],{"class":201,"line":36319},[199,52063,39579],{"class":1454},[199,52065,52066,52068,52070],{"class":201,"line":36324},[199,52067,39584],{"class":205},[199,52069,36208],{"class":898},[199,52071,1594],{"class":205},[199,52073,52074],{"class":201,"line":36330},[199,52075,36228],{"class":1454},[199,52077,52078,52080,52082,52084,52086,52088],{"class":201,"line":36341},[199,52079,36234],{"class":205},[199,52081,895],{"class":1086},[199,52083,36239],{"class":205},[199,52085,36242],{"class":8113},[199,52087,895],{"class":1086},[199,52089,4485],{"class":205},[199,52091,52092,52094,52096,52098],{"class":201,"line":36347},[199,52093,36252],{"class":898},[199,52095,3938],{"class":205},[199,52097,36257],{"class":1018},[199,52099,36260],{"class":205},[199,52101,52102,52104],{"class":201,"line":36367},[199,52103,36266],{"class":898},[199,52105,36269],{"class":205},[199,52107,52108,52110],{"class":201,"line":36373},[199,52109,36275],{"class":898},[199,52111,36278],{"class":205},[199,52113,52114,52116],{"class":201,"line":36379},[199,52115,36284],{"class":898},[199,52117,36287],{"class":205},[199,52119,52120,52122],{"class":201,"line":36385},[199,52121,36293],{"class":898},[199,52123,36296],{"class":205},[199,52125,52126],{"class":201,"line":36402},[199,52127,36302],{"class":205},[199,52129,52130],{"class":201,"line":36408},[199,52131,36308],{"class":1454},[199,52133,52134,52136],{"class":201,"line":36414},[199,52135,6989],{"class":1086},[199,52137,36316],{"class":205},[199,52139,52140],{"class":201,"line":36420},[199,52141,907],{"emptyLinePlaceholder":906},[199,52143,52144],{"class":201,"line":36426},[199,52145,36327],{"class":1454},[199,52147,52148,52150,52152],{"class":201,"line":36432},[199,52149,34789],{"class":1086},[199,52151,36335],{"class":878},[199,52153,36338],{"class":205},[199,52155,52156],{"class":201,"line":36459},[199,52157,36344],{"class":1454},[199,52159,52160,52162,52164,52166,52168,52170,52172,52174],{"class":201,"line":36483},[199,52161,36350],{"class":205},[199,52163,34535],{"class":8113},[199,52165,895],{"class":1086},[199,52167,1537],{"class":205},[199,52169,3579],{"class":1018},[199,52171,3461],{"class":205},[199,52173,1915],{"class":1018},[199,52175,1554],{"class":205},[199,52177,52178],{"class":201,"line":36489},[199,52179,36370],{"class":1454},[199,52181,52182],{"class":201,"line":36495},[199,52183,36376],{"class":1454},[199,52185,52186],{"class":201,"line":36501},[199,52187,36382],{"class":1454},[199,52189,52190,52192,52194,52196,52198,52200,52202],{"class":201,"line":36512},[199,52191,34569],{"class":205},[199,52193,1115],{"class":1018},[199,52195,3461],{"class":205},[199,52197,1925],{"class":1018},[199,52199,3461],{"class":205},[199,52201,1115],{"class":1018},[199,52203,1594],{"class":205},[199,52205,52206],{"class":201,"line":36523},[199,52207,36405],{"class":1454},[199,52209,52210],{"class":201,"line":36529},[199,52211,36411],{"class":1454},[199,52213,52214],{"class":201,"line":36546},[199,52215,36417],{"class":1454},[199,52217,52218],{"class":201,"line":36569},[199,52219,36423],{"class":1454},[199,52221,52222],{"class":201,"line":36592},[199,52223,36429],{"class":1454},[199,52225,52226,52228,52230,52232,52234,52236,52238,52240,52242],{"class":201,"line":36598},[199,52227,36435],{"class":205},[199,52229,36438],{"class":898},[199,52231,36441],{"class":205},[199,52233,36444],{"class":898},[199,52235,3461],{"class":205},[199,52237,36449],{"class":8113},[199,52239,895],{"class":1086},[199,52241,36454],{"class":898},[199,52243,1594],{"class":205},[199,52245,52246,52248,52250,52252,52254,52256,52258,52260,52262],{"class":201,"line":36603},[199,52247,36435],{"class":205},[199,52249,36438],{"class":898},[199,52251,36466],{"class":205},[199,52253,36469],{"class":898},[199,52255,3461],{"class":205},[199,52257,36449],{"class":8113},[199,52259,895],{"class":1086},[199,52261,36478],{"class":898},[199,52263,1594],{"class":205},[199,52265,52266],{"class":201,"line":36612},[199,52267,36486],{"class":1454},[199,52269,52270],{"class":201,"line":36622},[199,52271,36492],{"class":205},[199,52273,52274],{"class":201,"line":36628},[199,52275,36498],{"class":1454},[199,52277,52278,52280,52282],{"class":201,"line":36633},[199,52279,36504],{"class":205},[199,52281,36507],{"class":898},[199,52283,1594],{"class":205},[199,52285,52286,52288,52290],{"class":201,"line":36639},[199,52287,36515],{"class":205},[199,52289,36518],{"class":898},[199,52291,1594],{"class":205},[199,52293,52294],{"class":201,"line":36652},[199,52295,36526],{"class":1454},[199,52297,52298,52300,52302,52304,52306,52308,52310],{"class":201,"line":36658},[199,52299,34569],{"class":205},[199,52301,1115],{"class":1018},[199,52303,3461],{"class":205},[199,52305,1925],{"class":1018},[199,52307,3461],{"class":205},[199,52309,1925],{"class":1018},[199,52311,1594],{"class":205},[199,52313,52314,52316,52318,52320,52322,52324,52326,52328,52330],{"class":201,"line":36669},[199,52315,36435],{"class":205},[199,52317,36438],{"class":898},[199,52319,36553],{"class":205},[199,52321,36444],{"class":898},[199,52323,3461],{"class":205},[199,52325,36449],{"class":8113},[199,52327,895],{"class":1086},[199,52329,36564],{"class":898},[199,52331,1594],{"class":205},[199,52333,52334,52336,52338,52340,52342,52344,52346,52348,52350],{"class":201,"line":36680},[199,52335,36435],{"class":205},[199,52337,36438],{"class":898},[199,52339,36576],{"class":205},[199,52341,36469],{"class":898},[199,52343,3461],{"class":205},[199,52345,36449],{"class":8113},[199,52347,895],{"class":1086},[199,52349,36587],{"class":898},[199,52351,1594],{"class":205},[199,52353,52354],{"class":201,"line":36699},[199,52355,36595],{"class":1454},[199,52357,52359],{"class":201,"line":52358},219,[199,52360,36492],{"class":205},[199,52362,52364,52366,52368],{"class":201,"line":52363},220,[199,52365,36504],{"class":205},[199,52367,36438],{"class":898},[199,52369,1594],{"class":205},[199,52371,52373,52375,52377],{"class":201,"line":52372},221,[199,52374,36515],{"class":205},[199,52376,36617],{"class":898},[199,52378,1594],{"class":205},[199,52380,52382],{"class":201,"line":52381},222,[199,52383,36625],{"class":205},[199,52385,52387],{"class":201,"line":52386},223,[199,52388,907],{"emptyLinePlaceholder":906},[199,52390,52392],{"class":201,"line":52391},224,[199,52393,36636],{"class":1454},[199,52395,52397,52399,52401,52403,52405],{"class":201,"line":52396},225,[199,52398,4470],{"class":1086},[199,52400,34062],{"class":1018},[199,52402,5853],{"class":1086},[199,52404,34067],{"class":898},[199,52406,6640],{"class":205},[199,52408,52410],{"class":201,"line":52409},226,[199,52411,36655],{"class":1454},[199,52413,52415,52417,52419],{"class":201,"line":52414},227,[199,52416,47387],{"class":205},[199,52418,895],{"class":1086},[199,52420,47392],{"class":205},[199,52422,52424,52426,52428],{"class":201,"line":52423},228,[199,52425,36672],{"class":205},[199,52427,895],{"class":1086},[199,52429,36677],{"class":205},[199,52431,52433,52435,52437,52439,52441,52443,52445],{"class":201,"line":52432},229,[199,52434,36234],{"class":205},[199,52436,895],{"class":1086},[199,52438,47409],{"class":205},[199,52440,36690],{"class":8113},[199,52442,895],{"class":1086},[199,52444,3985],{"class":1018},[199,52446,1594],{"class":205},[199,52448,52450],{"class":201,"line":52449},230,[199,52451,36702],{"class":205},[627,52453,52455],{"id":52454},"_242测试代码","2.4.2.测试代码",[31,52457,52458],{},"使用测试集进行测试与推理",[190,52460,52462],{"className":33221,"code":52461,"language":33223,"meta":57,"style":57},"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",[196,52463,52464,52470,52480,52490,52501,52511,52515,52519,52527,52532,52536,52553,52557,52561,52565,52569,52573,52605,52609,52617,52621,52633,52637,52641,52645,52649,52653,52657,52661,52665,52683,52697,52701,52711,52721,52731,52737,52741,52745,52753,52757,52773,52781,52785,52789,52797,52805,52809,52813,52817,52821,52827,52831,52841,52849,52857,52861,52865,52869,52877,52881,52897,52901,52905,52909,52921,52925,52937,52941,52945,52957,52961,52971,52975,52979,52991,52995,53003,53007,53011,53019,53023,53031,53035,53039,53043,53047,53051,53067,53075,53079,53083,53101,53107,53111,53121,53129,53137,53141,53145,53149,53153,53161,53165,53181,53185,53193,53201],{"__ignoreMap":57},[199,52465,52466,52468],{"class":201,"line":202},[199,52467,33235],{"class":1086},[199,52469,33238],{"class":205},[199,52471,52472,52474,52476,52478],{"class":201,"line":36},[199,52473,33235],{"class":1086},[199,52475,34257],{"class":205},[199,52477,34225],{"class":1086},[199,52479,34262],{"class":205},[199,52481,52482,52484,52486,52488],{"class":201,"line":73},[199,52483,33579],{"class":1086},[199,52485,34240],{"class":205},[199,52487,33235],{"class":1086},[199,52489,34245],{"class":205},[199,52491,52492,52494,52496,52498],{"class":201,"line":333},[199,52493,33579],{"class":1086},[199,52495,34210],{"class":205},[199,52497,33235],{"class":1086},[199,52499,52500],{"class":205}," ImageFolder\n",[199,52502,52503,52505,52507,52509],{"class":201,"line":227},[199,52504,33579],{"class":1086},[199,52506,34756],{"class":205},[199,52508,33235],{"class":1086},[199,52510,47481],{"class":205},[199,52512,52513],{"class":201,"line":238},[199,52514,907],{"emptyLinePlaceholder":906},[199,52516,52517],{"class":201,"line":252},[199,52518,36792],{"class":1454},[199,52520,52521,52523,52525],{"class":201,"line":388},[199,52522,34789],{"class":1086},[199,52524,36799],{"class":878},[199,52526,34795],{"class":205},[199,52528,52529],{"class":201,"line":415},[199,52530,52531],{"class":1454},"   # 导入自己的数据集，并进行数据处理\n",[199,52533,52534],{"class":201,"line":426},[199,52535,50801],{"class":1454},[199,52537,52538,52540,52542,52544,52546,52548,52551],{"class":201,"line":1015},[199,52539,50806],{"class":1018},[199,52541,895],{"class":1086},[199,52543,3749],{"class":1086},[199,52545,3337],{"class":898},[199,52547,3638],{"class":1018},[199,52549,52550],{"class":50817},"\u002Fdata\u002Ftest",[199,52552,27976],{"class":898},[199,52554,52555],{"class":201,"line":1031},[199,52556,907],{"emptyLinePlaceholder":906},[199,52558,52559],{"class":201,"line":1043},[199,52560,50829],{"class":1454},[199,52562,52563],{"class":201,"line":1049},[199,52564,50834],{"class":1454},[199,52566,52567],{"class":201,"line":1054},[199,52568,50839],{"class":1454},[199,52570,52571],{"class":201,"line":1062},[199,52572,50844],{"class":1454},[199,52574,52575,52577,52579,52581,52583,52585,52587,52589,52591,52593,52595,52597,52599,52601,52603],{"class":201,"line":1075},[199,52576,50849],{"class":205},[199,52578,895],{"class":1086},[199,52580,50854],{"class":205},[199,52582,50857],{"class":1018},[199,52584,3461],{"class":205},[199,52586,50862],{"class":1018},[199,52588,3461],{"class":205},[199,52590,50867],{"class":1018},[199,52592,50870],{"class":205},[199,52594,50873],{"class":1018},[199,52596,3461],{"class":205},[199,52598,50878],{"class":1018},[199,52600,3461],{"class":205},[199,52602,50883],{"class":1018},[199,52604,7554],{"class":205},[199,52606,52607],{"class":201,"line":1092},[199,52608,50890],{"class":1454},[199,52610,52611,52613,52615],{"class":201,"line":1107},[199,52612,50895],{"class":205},[199,52614,895],{"class":1086},[199,52616,50900],{"class":205},[199,52618,52619],{"class":201,"line":1128},[199,52620,50905],{"class":1454},[199,52622,52623,52625,52627,52629,52631],{"class":201,"line":1146},[199,52624,50910],{"class":205},[199,52626,34343],{"class":1018},[199,52628,3461],{"class":205},[199,52630,34343],{"class":1018},[199,52632,45463],{"class":205},[199,52634,52635],{"class":201,"line":1163},[199,52636,50923],{"class":1454},[199,52638,52639],{"class":201,"line":1176},[199,52640,50928],{"class":205},[199,52642,52643],{"class":201,"line":1189},[199,52644,50933],{"class":205},[199,52646,52647],{"class":201,"line":1202},[199,52648,50938],{"class":1454},[199,52650,52651],{"class":201,"line":1207},[199,52652,50943],{"class":1454},[199,52654,52655],{"class":201,"line":1212},[199,52656,907],{"emptyLinePlaceholder":906},[199,52658,52659],{"class":201,"line":1225},[199,52660,50952],{"class":1454},[199,52662,52663],{"class":201,"line":1236},[199,52664,50957],{"class":1454},[199,52666,52667,52669,52671,52673,52675,52677,52679,52681],{"class":201,"line":1249},[199,52668,36806],{"class":205},[199,52670,895],{"class":1086},[199,52672,50966],{"class":205},[199,52674,50969],{"class":1018},[199,52676,3461],{"class":205},[199,52678,50974],{"class":8113},[199,52680,895],{"class":1086},[199,52682,50979],{"class":205},[199,52684,52685,52687,52689,52691,52693,52695],{"class":201,"line":1262},[199,52686,36863],{"class":205},[199,52688,895],{"class":1086},[199,52690,34376],{"class":205},[199,52692,34379],{"class":8113},[199,52694,895],{"class":1086},[199,52696,36874],{"class":205},[199,52698,52699],{"class":201,"line":1275},[199,52700,36879],{"class":1454},[199,52702,52703,52705,52707,52709],{"class":201,"line":1287},[199,52704,36884],{"class":8113},[199,52706,895],{"class":1086},[199,52708,1115],{"class":1018},[199,52710,34308],{"class":205},[199,52712,52713,52715,52717,52719],{"class":201,"line":1292},[199,52714,36895],{"class":8113},[199,52716,895],{"class":1086},[199,52718,34318],{"class":1018},[199,52720,34308],{"class":205},[199,52722,52723,52725,52727,52729],{"class":201,"line":1297},[199,52724,36906],{"class":8113},[199,52726,895],{"class":1086},[199,52728,1025],{"class":1018},[199,52730,1594],{"class":205},[199,52732,52733,52735],{"class":201,"line":1310},[199,52734,6989],{"class":1086},[199,52736,36919],{"class":205},[199,52738,52739],{"class":201,"line":1315},[199,52740,907],{"emptyLinePlaceholder":906},[199,52742,52743],{"class":201,"line":1330},[199,52744,36928],{"class":1454},[199,52746,52747,52749,52751],{"class":201,"line":1335},[199,52748,34789],{"class":1086},[199,52750,36935],{"class":878},[199,52752,36938],{"class":205},[199,52754,52755],{"class":201,"line":1340},[199,52756,36943],{"class":1454},[199,52758,52759,52761,52763,52765,52767,52769,52771],{"class":201,"line":1352},[199,52760,34079],{"class":205},[199,52762,895],{"class":1086},[199,52764,34086],{"class":898},[199,52766,4629],{"class":1086},[199,52768,34091],{"class":205},[199,52770,4626],{"class":1086},[199,52772,36960],{"class":898},[199,52774,52775,52777,52779],{"class":201,"line":1367},[199,52776,34131],{"class":205},[199,52778,895],{"class":1086},[199,52780,35131],{"class":205},[199,52782,52783],{"class":201,"line":1381},[199,52784,907],{"emptyLinePlaceholder":906},[199,52786,52787],{"class":201,"line":1396},[199,52788,36977],{"class":1454},[199,52790,52791,52793,52795],{"class":201,"line":1401},[199,52792,36982],{"class":205},[199,52794,895],{"class":1086},[199,52796,35184],{"class":1018},[199,52798,52799,52801,52803],{"class":201,"line":1411},[199,52800,36991],{"class":205},[199,52802,895],{"class":1086},[199,52804,5989],{"class":1018},[199,52806,52807],{"class":201,"line":1421},[199,52808,907],{"emptyLinePlaceholder":906},[199,52810,52811],{"class":201,"line":1426},[199,52812,37004],{"class":1454},[199,52814,52815],{"class":201,"line":1436},[199,52816,37009],{"class":1454},[199,52818,52819],{"class":201,"line":1441},[199,52820,37014],{"class":1454},[199,52822,52823,52825],{"class":201,"line":1451},[199,52824,37019],{"class":1086},[199,52826,35726],{"class":205},[199,52828,52829],{"class":201,"line":1458},[199,52830,37026],{"class":1454},[199,52832,52833,52835,52837,52839],{"class":201,"line":1464},[199,52834,1481],{"class":1086},[199,52836,37033],{"class":205},[199,52838,28886],{"class":1086},[199,52840,37038],{"class":205},[199,52842,52843,52845,52847],{"class":201,"line":1478},[199,52844,37043],{"class":205},[199,52846,895],{"class":1086},[199,52848,37048],{"class":205},[199,52850,52851,52853,52855],{"class":201,"line":1516},[199,52852,37053],{"class":205},[199,52854,895],{"class":1086},[199,52856,37058],{"class":205},[199,52858,52859],{"class":201,"line":1522},[199,52860,37063],{"class":1454},[199,52862,52863],{"class":201,"line":1528},[199,52864,35717],{"class":205},[199,52866,52867],{"class":201,"line":1557},[199,52868,37072],{"class":1454},[199,52870,52871,52873,52875],{"class":201,"line":1563},[199,52872,35502],{"class":205},[199,52874,895],{"class":1086},[199,52876,37081],{"class":205},[199,52878,52879],{"class":201,"line":1568},[199,52880,37086],{"class":1454},[199,52882,52883,52885,52887,52889,52891,52893,52895],{"class":201,"line":1574},[199,52884,35519],{"class":205},[199,52886,895],{"class":1086},[199,52888,35524],{"class":205},[199,52890,35527],{"class":8113},[199,52892,895],{"class":1086},[199,52894,1115],{"class":1018},[199,52896,1594],{"class":205},[199,52898,52899],{"class":201,"line":1580},[199,52900,37107],{"class":1454},[199,52902,52903],{"class":201,"line":1597},[199,52904,37112],{"class":1454},[199,52906,52907],{"class":201,"line":1602},[199,52908,37117],{"class":1454},[199,52910,52911,52913,52915,52917,52919],{"class":201,"line":1608},[199,52912,37122],{"class":205},[199,52914,12362],{"class":1086},[199,52916,35629],{"class":205},[199,52918,5853],{"class":1086},[199,52920,37131],{"class":205},[199,52922,52923],{"class":201,"line":1640},[199,52924,37136],{"class":1454},[199,52926,52927,52929,52931,52933,52935],{"class":201,"line":1653},[199,52928,37141],{"class":205},[199,52930,12362],{"class":1086},[199,52932,37146],{"class":205},[199,52934,1025],{"class":1018},[199,52936,1594],{"class":205},[199,52938,52939],{"class":201,"line":1673},[199,52940,907],{"emptyLinePlaceholder":906},[199,52942,52943],{"class":201,"line":1690},[199,52944,37159],{"class":1454},[199,52946,52947,52949,52951,52953,52955],{"class":201,"line":1706},[199,52948,37164],{"class":205},[199,52950,895],{"class":1086},[199,52952,37169],{"class":205},[199,52954,3664],{"class":1086},[199,52956,37174],{"class":205},[199,52958,52959],{"class":201,"line":1712},[199,52960,37179],{"class":1454},[199,52962,52963,52965,52967,52969],{"class":201,"line":1720},[199,52964,35293],{"class":1018},[199,52966,1537],{"class":205},[199,52968,37188],{"class":898},[199,52970,37191],{"class":205},[199,52972,52973],{"class":201,"line":1725},[199,52974,907],{"emptyLinePlaceholder":906},[199,52976,52977],{"class":201,"line":1731},[199,52978,37200],{"class":1454},[199,52980,52981,52983,52985,52987,52989],{"class":201,"line":1745},[199,52982,4470],{"class":1086},[199,52984,34062],{"class":1018},[199,52986,5853],{"class":1086},[199,52988,34067],{"class":898},[199,52990,6640],{"class":205},[199,52992,52993],{"class":201,"line":1754},[199,52994,37217],{"class":1454},[199,52996,52997,52999,53001],{"class":201,"line":1763},[199,52998,34131],{"class":205},[199,53000,895],{"class":1086},[199,53002,47392],{"class":205},[199,53004,53005],{"class":201,"line":1768},[199,53006,37230],{"class":1454},[199,53008,53009],{"class":201,"line":19628},[199,53010,37235],{"class":1454},[199,53012,53013,53015,53017],{"class":201,"line":19641},[199,53014,37240],{"class":205},[199,53016,37243],{"class":898},[199,53018,1554],{"class":205},[199,53020,53021],{"class":201,"line":19646},[199,53022,37250],{"class":1454},[199,53024,53025,53027,53029],{"class":201,"line":19660},[199,53026,36863],{"class":205},[199,53028,895],{"class":1086},[199,53030,37259],{"class":205},[199,53032,53033],{"class":201,"line":19665},[199,53034,37264],{"class":1454},[199,53036,53037],{"class":201,"line":19671},[199,53038,37269],{"class":205},[199,53040,53041],{"class":201,"line":19676},[199,53042,907],{"emptyLinePlaceholder":906},[199,53044,53045],{"class":201,"line":19690},[199,53046,37278],{"class":1454},[199,53048,53049],{"class":201,"line":19695},[199,53050,37283],{"class":1454},[199,53052,53053,53055,53057,53059,53061,53063,53065],{"class":201,"line":19700},[199,53054,34079],{"class":205},[199,53056,895],{"class":1086},[199,53058,34086],{"class":898},[199,53060,4629],{"class":1086},[199,53062,34091],{"class":205},[199,53064,4626],{"class":1086},[199,53066,36960],{"class":898},[199,53068,53069,53071,53073],{"class":201,"line":19714},[199,53070,34131],{"class":205},[199,53072,895],{"class":1086},[199,53074,35131],{"class":205},[199,53076,53077],{"class":201,"line":19726},[199,53078,37312],{"class":1454},[199,53080,53081],{"class":201,"line":19731},[199,53082,37317],{"class":1454},[199,53084,53085,53087,53089,53091,53094,53096,53099],{"class":201,"line":19744},[199,53086,37322],{"class":205},[199,53088,895],{"class":1086},[199,53090,1662],{"class":205},[199,53092,53093],{"class":898},"'猫'",[199,53095,3461],{"class":205},[199,53097,53098],{"class":898},"'狗'",[199,53100,1932],{"class":205},[199,53102,53103,53105],{"class":201,"line":19749},[199,53104,37019],{"class":1086},[199,53106,35726],{"class":205},[199,53108,53109],{"class":201,"line":19754},[199,53110,37387],{"class":1454},[199,53112,53113,53115,53117,53119],{"class":201,"line":19759},[199,53114,1481],{"class":1086},[199,53116,37394],{"class":205},[199,53118,28886],{"class":1086},[199,53120,37038],{"class":205},[199,53122,53123,53125,53127],{"class":201,"line":19772},[199,53124,35452],{"class":205},[199,53126,895],{"class":1086},[199,53128,35457],{"class":205},[199,53130,53131,53133,53135],{"class":201,"line":19777},[199,53132,35467],{"class":205},[199,53134,895],{"class":1086},[199,53136,35472],{"class":205},[199,53138,53139],{"class":201,"line":35475},[199,53140,907],{"emptyLinePlaceholder":906},[199,53142,53143],{"class":201,"line":35481},[199,53144,37423],{"class":1454},[199,53146,53147],{"class":201,"line":35487},[199,53148,35717],{"class":205},[199,53150,53151],{"class":201,"line":35493},[199,53152,37432],{"class":1454},[199,53154,53155,53157,53159],{"class":201,"line":35499},[199,53156,35502],{"class":205},[199,53158,895],{"class":1086},[199,53160,35507],{"class":205},[199,53162,53163],{"class":201,"line":35510},[199,53164,37445],{"class":1454},[199,53166,53167,53169,53171,53173,53175,53177,53179],{"class":201,"line":35516},[199,53168,35519],{"class":205},[199,53170,895],{"class":1086},[199,53172,35524],{"class":205},[199,53174,35527],{"class":8113},[199,53176,895],{"class":1086},[199,53178,1115],{"class":1018},[199,53180,1594],{"class":205},[199,53182,53183],{"class":201,"line":35536},[199,53184,37466],{"class":1454},[199,53186,53187,53189,53191],{"class":201,"line":35542},[199,53188,37471],{"class":205},[199,53190,895],{"class":1086},[199,53192,37476],{"class":205},[199,53194,53195,53197,53199],{"class":201,"line":35553},[199,53196,37481],{"class":205},[199,53198,895],{"class":1086},[199,53200,37486],{"class":205},[199,53202,53203,53205,53207,53209,53211,53213,53215,53217],{"class":201,"line":35559},[199,53204,37491],{"class":1018},[199,53206,1537],{"class":205},[199,53208,37496],{"class":898},[199,53210,37499],{"class":205},[199,53212,37502],{"class":898},[199,53214,3461],{"class":205},[199,53216,37507],{"class":898},[199,53218,37510],{"class":205},[1002,53220,53221],{},"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":57,"searchDepth":36,"depth":36,"links":53223},[53224,53225,53226,53227],{"id":33433,"depth":73,"text":33434},{"id":40680,"depth":73,"text":40681},{"id":44113,"depth":73,"text":44114},{"id":48122,"depth":73,"text":48123},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":33425,"description":3023},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":53234,"title":53235,"body":53236,"description":3023,"extension":3024,"meta":53243,"navigation":906,"path":53244,"seo":53245,"stem":53246,"__hash__":53247},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":53237,"toc":53241},[53238],[10,53239,53235],{"id":53240},"_3yolo模型学习",{"title":57,"searchDepth":36,"depth":36,"links":53242},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":53235,"description":3023},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":53249,"title":53250,"body":53251,"description":53258,"extension":3024,"meta":53259,"navigation":906,"path":53261,"seo":53262,"stem":53263,"__hash__":53264},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":53252,"toc":53256},[53253],[31,53254,53255],{},"yolo模型还未补充",{"title":57,"searchDepth":36,"depth":36,"links":53257},[],"深度学习学习",{"category":53260},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":53250,"description":53258},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":53266,"title":53267,"body":53268,"description":3023,"extension":3024,"meta":53293,"navigation":906,"path":53294,"seo":53295,"stem":53296,"__hash__":53297},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":53269,"toc":53291},[53270,53273,53276,53281,53288],[10,53271,53267],{"id":53272},"_1工具",[31,53274,53275],{},"提示错误插件：有问题会提前报错",[31,53277,53278],{},[55,53279],{"alt":57,"src":53280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[31,53282,53283],{},[2867,53284,53287],{"href":53285,"rel":53286},"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",[2871],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[31,53289,53290],{},"alt键加上下箭头可以实现语句的移动",{"title":57,"searchDepth":36,"depth":36,"links":53292},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":53267,"description":3023},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":4,"title":5,"body":53299,"description":3023,"extension":3024,"meta":55587,"navigation":906,"path":3026,"seo":55588,"stem":3028,"__hash__":3029},{"type":7,"value":53300,"toc":55538},[53301,53303,53305,53307,53311,53313,53317,53319,53325,53329,53335,53339,53345,53349,53351,53355,53357,53359,53363,53365,53369,53371,53373,53375,53377,53379,53381,53383,53385,53389,53393,53397,53399,53401,53403,53405,53409,53411,53417,53421,53433,53439,53443,53447,53451,53455,53459,53461,53465,53469,53471,53479,53483,53487,53489,53493,53495,53497,53501,53507,53511,53515,53517,53521,53525,53529,53531,53533,53535,53539,53543,53545,53549,53551,53555,53557,53559,53561,53565,53567,53569,53581,53585,53589,53593,53595,53597,53599,53609,53611,53615,53619,53621,53623,53625,53627,53629,53631,53633,53635,53637,53641,53643,53645,53649,53653,53655,53659,53661,53663,53667,53669,53671,53673,53675,53677,53679,53681,53683,53685,53687,53691,53695,53699,53701,53703,53705,53709,53711,53713,53715,53717,53721,53723,53725,53727,53729,53731,53735,53739,53741,53765,53769,53773,53777,53781,53783,53787,53789,53793,53795,53797,53799,53803,53805,53809,53813,53815,53819,53821,53823,53825,53829,53831,53835,53837,53839,53843,53847,53851,53855,53857,53861,53865,53869,53871,53873,53877,53879,53883,53887,53891,53895,53897,54607,54609,54931,54935,54937,54939,54941,54943,54945,54947,54949,54951,54953,54955,54957,54959,54961,54965,54967,54969,54971,54973,54977,54981,54995,54997,54999,55003,55007,55019,55021,55045,55047,55063,55065,55097,55103,55107,55109,55111,55113,55117,55121,55123,55125,55127,55131,55135,55137,55139,55141,55143,55145,55147,55149,55151,55153,55155,55157,55159,55161,55163,55165,55167,55169,55171,55173,55175,55177,55181,55183,55187,55189,55191,55193,55195,55197,55199,55201,55203,55205,55207,55209,55211,55213,55215,55217,55219,55225,55227,55231,55233,55237,55239,55241,55243,55245,55247,55249,55251,55253,55255,55257,55259,55263,55267,55271,55273,55277,55281,55283,55285,55287,55289,55291,55295,55297,55301,55303,55307,55309,55311,55315,55317,55319,55323,55325,55327,55331,55333,55335,55359,55363,55365,55367,55369,55371,55373,55375,55377,55449,55451,55453,55457,55461,55466,55468,55470,55472,55474,55476,55480,55484,55486,55488,55490,55492,55494,55496,55498,55500,55502,55504,55506,55508,55512,55516,55520,55522,55526,55530,55532,55534,55536],[10,53302,5],{"id":12},[14,53304,17],{"id":16},[19,53306,22],{"id":21},[24,53308,53309],{},[27,53310,29],{},[31,53312,33],{},[24,53314,53315],{"start":36},[27,53316,39],{},[19,53318,43],{"id":42},[24,53320,53321],{},[27,53322,53323],{},[49,53324,51],{},[31,53326,53327],{},[55,53328],{"alt":57,"src":58},[24,53330,53331],{"start":36},[27,53332,53333],{},[49,53334,65],{},[31,53336,53337],{},[55,53338],{"alt":57,"src":70},[24,53340,53341],{"start":73},[27,53342,53343],{},[49,53344,78],{},[31,53346,53347],{},[55,53348],{"alt":57,"src":83},[19,53350,87],{"id":86},[31,53352,53353],{},[55,53354],{"alt":57,"src":92},[31,53356,95],{},[19,53358,99],{"id":98},[31,53360,53361],{},[55,53362],{"alt":57,"src":104},[19,53364,108],{"id":107},[24,53366,53367],{},[27,53368,113],{},[31,53370,116],{},[31,53372,119],{},[31,53374,122],{},[31,53376,125],{},[31,53378,128],{},[31,53380,131],{},[31,53382,134],{},[31,53384,137],{},[31,53386,53387],{},[55,53388],{"alt":57,"src":142},[24,53390,53391],{"start":36},[27,53392,147],{},[31,53394,53395],{},[55,53396],{"alt":57,"src":152},[19,53398,156],{"id":155},[31,53400,159],{},[31,53402,162],{},[14,53404,166],{"id":165},[24,53406,53407],{},[27,53408,171],{},[31,53410,174],{},[176,53412,53413,53415],{},[27,53414,180],{},[27,53416,183],{},[24,53418,53419],{"start":36},[27,53420,188],{},[190,53422,53423],{"className":192,"code":193,"language":194,"meta":57,"style":57},[196,53424,53425,53429],{"__ignoreMap":57},[199,53426,53427],{"class":201,"line":202},[199,53428,206],{"class":205},[199,53430,53431],{"class":201,"line":36},[199,53432,211],{"class":205},[24,53434,53435,53437],{"start":73},[27,53436,216],{},[27,53438,219],{},[31,53440,53441],{},[55,53442],{"alt":57,"src":224},[24,53444,53445],{"start":227},[27,53446,230],{},[31,53448,53449],{},[55,53450],{"alt":57,"src":235},[24,53452,53453],{"start":238},[27,53454,241],{},[31,53456,53457],{},[55,53458],{"alt":57,"src":246},[31,53460,249],{},[24,53462,53463],{"start":252},[27,53464,255],{},[31,53466,53467],{},[55,53468],{"alt":57,"src":260},[14,53470,264],{"id":263},[190,53472,53473],{"className":192,"code":267,"language":194,"meta":57,"style":57},[196,53474,53475],{"__ignoreMap":57},[199,53476,53477],{"class":201,"line":202},[199,53478,267],{"class":205},[31,53480,53481],{},[55,53482],{"alt":57,"src":278},[31,53484,53485],{},[55,53486],{"alt":57,"src":283},[14,53488,287],{"id":286},[31,53490,53491],{},[55,53492],{"alt":57,"src":292},[31,53494,295],{},[14,53496,299],{"id":298},[31,53498,53499],{},[55,53500],{"alt":57,"src":304},[24,53502,53503,53505],{},[27,53504,309],{},[27,53506,312],{},[31,53508,53509],{},[55,53510],{"alt":57,"src":317},[24,53512,53513],{"start":73},[27,53514,322],{},[31,53516,325],{},[31,53518,53519],{},[55,53520],{"alt":57,"src":330},[24,53522,53523],{"start":333},[27,53524,336],{},[31,53526,53527],{},[55,53528],{"alt":57,"src":341},[31,53530,344],{},[31,53532,347],{},[31,53534,350],{},[24,53536,53537],{"start":227},[27,53538,355],{},[31,53540,53541],{},[55,53542],{"alt":57,"src":360},[31,53544,363],{},[24,53546,53547],{"start":238},[27,53548,368],{},[31,53550,371],{},[24,53552,53553],{"start":252},[27,53554,376],{},[31,53556,379],{},[31,53558,382],{},[31,53560,385],{},[24,53562,53563],{"start":388},[27,53564,391],{},[31,53566,394],{},[31,53568,397],{},[190,53570,53571],{"className":192,"code":400,"language":194,"meta":57,"style":57},[196,53572,53573,53577],{"__ignoreMap":57},[199,53574,53575],{"class":201,"line":202},[199,53576,407],{"class":205},[199,53578,53579],{"class":201,"line":36},[199,53580,412],{"class":205},[24,53582,53583],{"start":415},[27,53584,418],{},[31,53586,53587],{},[55,53588],{"alt":57,"src":423},[24,53590,53591],{"start":426},[27,53592,429],{},[31,53594,432],{},[31,53596,435],{},[31,53598,438],{},[176,53600,53601,53603,53605,53607],{},[27,53602,443],{},[27,53604,446],{},[27,53606,449],{},[27,53608,452],{},[31,53610,455],{},[31,53612,53613],{},[55,53614],{"alt":57,"src":460},[31,53616,53617],{},[55,53618],{"alt":57,"src":465},[31,53620,468],{},[31,53622,471],{},[31,53624,474],{},[31,53626,477],{},[31,53628,480],{},[31,53630,483],{},[31,53632,486],{},[14,53634,490],{"id":489},[19,53636,494],{"id":493},[31,53638,53639],{},[55,53640],{"alt":57,"src":499},[19,53642,503],{"id":502},[31,53644,506],{},[31,53646,53647],{},[55,53648],{"alt":57,"src":511},[31,53650,53651],{},[55,53652],{"alt":57,"src":516},[31,53654,519],{},[31,53656,53657],{},[55,53658],{"alt":57,"src":524},[31,53660,527],{},[19,53662,531],{"id":530},[31,53664,53665],{},[55,53666],{"alt":57,"src":536},[31,53668,539],{},[31,53670,542],{},[31,53672,545],{},[31,53674,548],{},[31,53676,551],{},[31,53678,554],{},[31,53680,557],{},[31,53682,560],{},[31,53684,563],{},[19,53686,567],{"id":566},[31,53688,53689],{},[55,53690],{"alt":57,"src":572},[31,53692,53693],{},[55,53694],{"alt":57,"src":577},[31,53696,53697],{},[55,53698],{"alt":57,"src":582},[31,53700,585],{},[31,53702,588],{},[19,53704,592],{"id":591},[31,53706,53707],{},[55,53708],{"alt":57,"src":597},[31,53710,600],{},[14,53712,604],{"id":603},[31,53714,607],{},[31,53716,610],{},[31,53718,53719],{},[55,53720],{"alt":57,"src":615},[31,53722,618],{},[31,53724,621],{},[19,53726,625],{"id":624},[627,53728,630],{"id":629},[31,53730,633],{},[24,53732,53733],{},[27,53734,638],{},[31,53736,53737],{},[55,53738],{"alt":57,"src":643},[31,53740,646],{},[190,53742,53743],{"className":192,"code":649,"language":194,"meta":57,"style":57},[196,53744,53745,53749,53753,53757,53761],{"__ignoreMap":57},[199,53746,53747],{"class":201,"line":202},[199,53748,656],{"class":205},[199,53750,53751],{"class":201,"line":36},[199,53752,661],{"class":205},[199,53754,53755],{"class":201,"line":73},[199,53756,666],{"class":205},[199,53758,53759],{"class":201,"line":333},[199,53760,671],{"class":205},[199,53762,53763],{"class":201,"line":227},[199,53764,676],{"class":205},[24,53766,53767],{"start":36},[27,53768,681],{},[31,53770,53771],{},[55,53772],{"alt":57,"src":686},[24,53774,53775],{"start":73},[27,53776,691],{},[31,53778,53779],{},[55,53780],{"alt":57,"src":696},[627,53782,700],{"id":699},[31,53784,53785],{},[55,53786],{"alt":57,"src":705},[627,53788,709],{"id":708},[31,53790,53791],{},[55,53792],{"alt":57,"src":714},[31,53794,717],{},[19,53796,721],{"id":720},[627,53798,725],{"id":724},[31,53800,53801],{},[55,53802],{"alt":57,"src":730},[627,53804,734],{"id":733},[31,53806,53807],{},[55,53808],{"alt":57,"src":739},[31,53810,53811],{},[55,53812],{"alt":57,"src":744},[627,53814,748],{"id":747},[31,53816,53817],{},[55,53818],{"alt":57,"src":753},[31,53820,756],{},[31,53822,759],{},[31,53824,762],{},[31,53826,53827],{},[55,53828],{"alt":57,"src":767},[627,53830,771],{"id":770},[31,53832,53833],{},[55,53834],{"alt":57,"src":776},[14,53836,780],{"id":779},[19,53838,784],{"id":783},[31,53840,53841],{},[55,53842],{"alt":57,"src":789},[31,53844,53845],{},[55,53846],{"alt":57,"src":794},[31,53848,53849],{},[55,53850],{"alt":57,"src":799},[31,53852,53853],{},[55,53854],{"alt":57,"src":804},[19,53856,808],{"id":807},[31,53858,53859],{},[55,53860],{"alt":57,"src":813},[24,53862,53863],{},[27,53864,818],{},[31,53866,53867],{},[55,53868],{"alt":57,"src":823},[31,53870,826],{},[31,53872,829],{},[31,53874,53875],{},[55,53876],{"alt":57,"src":834},[31,53878,837],{},[24,53880,53881],{},[27,53882,842],{},[31,53884,53885],{},[55,53886],{"alt":57,"src":847},[31,53888,53889],{},[55,53890],{"alt":57,"src":852},[31,53892,53893],{},[55,53894],{"alt":57,"src":857},[19,53896,861],{"id":860},[190,53898,53899],{"className":192,"code":864,"language":194,"meta":57,"style":57},[196,53900,53901,53911,53925,53929,53937,53951,53971,53991,54003,54011,54017,54027,54037,54041,54045,54051,54061,54073,54085,54101,54117,54131,54141,54151,54161,54165,54169,54179,54189,54201,54211,54221,54231,54235,54239,54249,54253,54265,54269,54273,54283,54295,54307,54319,54323,54331,54339,54343,54351,54355,54363,54367,54371,54381,54407,54411,54415,54435,54439,54443,54447,54451,54463,54467,54471,54499,54509,54523,54537,54549,54553,54559,54563,54567,54579,54587,54595,54599],{"__ignoreMap":57},[199,53902,53903,53905,53907,53909],{"class":201,"line":202},[199,53904,871],{"class":205},[199,53906,875],{"class":874},[199,53908,879],{"class":878},[199,53910,882],{"class":205},[199,53912,53913,53915,53917,53919,53921,53923],{"class":201,"line":36},[199,53914,887],{"class":205},[199,53916,194],{"class":874},[199,53918,892],{"class":878},[199,53920,895],{"class":205},[199,53922,899],{"class":898},[199,53924,882],{"class":205},[199,53926,53927],{"class":201,"line":73},[199,53928,907],{"emptyLinePlaceholder":906},[199,53930,53931,53933,53935],{"class":201,"line":333},[199,53932,887],{"class":205},[199,53934,914],{"class":874},[199,53936,882],{"class":205},[199,53938,53939,53941,53943,53945,53947,53949],{"class":201,"line":227},[199,53940,921],{"class":205},[199,53942,924],{"class":874},[199,53944,927],{"class":878},[199,53946,895],{"class":205},[199,53948,932],{"class":898},[199,53950,882],{"class":205},[199,53952,53953,53955,53957,53959,53961,53963,53965,53967,53969],{"class":201,"line":238},[199,53954,921],{"class":205},[199,53956,924],{"class":874},[199,53958,943],{"class":878},[199,53960,895],{"class":205},[199,53962,948],{"class":898},[199,53964,951],{"class":878},[199,53966,895],{"class":205},[199,53968,956],{"class":898},[199,53970,882],{"class":205},[199,53972,53973,53975,53977,53979,53981,53983,53985,53987,53989],{"class":201,"line":252},[199,53974,921],{"class":205},[199,53976,924],{"class":874},[199,53978,967],{"class":878},[199,53980,895],{"class":205},[199,53982,972],{"class":898},[199,53984,951],{"class":878},[199,53986,895],{"class":205},[199,53988,979],{"class":898},[199,53990,882],{"class":205},[199,53992,53993,53995,53997,53999,54001],{"class":201,"line":388},[199,53994,921],{"class":205},[199,53996,988],{"class":874},[199,53998,991],{"class":205},[199,54000,988],{"class":874},[199,54002,882],{"class":205},[199,54004,54005,54007,54009],{"class":201,"line":415},[199,54006,921],{"class":205},[199,54008,1002],{"class":874},[199,54010,882],{"class":205},[199,54012,54013,54015],{"class":201,"line":426},[199,54014,1009],{"class":874},[199,54016,1012],{"class":205},[199,54018,54019,54021,54023,54025],{"class":201,"line":1015},[199,54020,1019],{"class":1018},[199,54022,1022],{"class":205},[199,54024,1025],{"class":1018},[199,54026,1028],{"class":205},[199,54028,54029,54031,54033,54035],{"class":201,"line":1031},[199,54030,1034],{"class":1018},[199,54032,1022],{"class":205},[199,54034,1025],{"class":1018},[199,54036,1028],{"class":205},[199,54038,54039],{"class":201,"line":1043},[199,54040,1046],{"class":205},[199,54042,54043],{"class":201,"line":1049},[199,54044,907],{"emptyLinePlaceholder":906},[199,54046,54047,54049],{"class":201,"line":1054},[199,54048,1057],{"class":878},[199,54050,1012],{"class":205},[199,54052,54053,54055,54057,54059],{"class":201,"line":1062},[199,54054,1065],{"class":1018},[199,54056,1022],{"class":205},[199,54058,1070],{"class":1018},[199,54060,1028],{"class":205},[199,54062,54063,54065,54067,54069,54071],{"class":201,"line":1075},[199,54064,1078],{"class":1018},[199,54066,1022],{"class":205},[199,54068,1083],{"class":1018},[199,54070,1087],{"class":1086},[199,54072,1028],{"class":205},[199,54074,54075,54077,54079,54081,54083],{"class":201,"line":1092},[199,54076,1095],{"class":1018},[199,54078,1022],{"class":205},[199,54080,1100],{"class":1018},[199,54082,1087],{"class":1086},[199,54084,1028],{"class":205},[199,54086,54087,54089,54091,54093,54095,54097,54099],{"class":201,"line":1107},[199,54088,1110],{"class":1018},[199,54090,1022],{"class":205},[199,54092,1115],{"class":1018},[199,54094,1087],{"class":1086},[199,54096,1120],{"class":1018},[199,54098,1123],{"class":1018},[199,54100,1028],{"class":205},[199,54102,54103,54105,54107,54109,54111,54113,54115],{"class":201,"line":1128},[199,54104,1131],{"class":1018},[199,54106,1022],{"class":205},[199,54108,1115],{"class":1018},[199,54110,1087],{"class":1086},[199,54112,1120],{"class":1018},[199,54114,1123],{"class":1018},[199,54116,1028],{"class":205},[199,54118,54119,54121,54123,54125,54127,54129],{"class":201,"line":1146},[199,54120,1019],{"class":1018},[199,54122,1022],{"class":205},[199,54124,1153],{"class":1018},[199,54126,1087],{"class":1086},[199,54128,1158],{"class":1018},[199,54130,1028],{"class":205},[199,54132,54133,54135,54137,54139],{"class":201,"line":1163},[199,54134,1166],{"class":1018},[199,54136,1022],{"class":205},[199,54138,1171],{"class":1018},[199,54140,1028],{"class":205},[199,54142,54143,54145,54147,54149],{"class":201,"line":1176},[199,54144,1179],{"class":1018},[199,54146,1022],{"class":205},[199,54148,1184],{"class":1018},[199,54150,1028],{"class":205},[199,54152,54153,54155,54157,54159],{"class":201,"line":1189},[199,54154,1192],{"class":1018},[199,54156,1022],{"class":205},[199,54158,1197],{"class":1018},[199,54160,1028],{"class":205},[199,54162,54163],{"class":201,"line":1202},[199,54164,1046],{"class":205},[199,54166,54167],{"class":201,"line":1207},[199,54168,907],{"emptyLinePlaceholder":906},[199,54170,54171,54173,54175,54177],{"class":201,"line":1212},[199,54172,1057],{"class":878},[199,54174,1217],{"class":1086},[199,54176,1220],{"class":874},[199,54178,1012],{"class":205},[199,54180,54181,54183,54185,54187],{"class":201,"line":1225},[199,54182,1065],{"class":1018},[199,54184,1022],{"class":205},[199,54186,1070],{"class":1018},[199,54188,1028],{"class":205},[199,54190,54191,54193,54195,54197,54199],{"class":201,"line":1236},[199,54192,1078],{"class":1018},[199,54194,1022],{"class":205},[199,54196,1153],{"class":1018},[199,54198,1087],{"class":1086},[199,54200,1028],{"class":205},[199,54202,54203,54205,54207,54209],{"class":201,"line":1249},[199,54204,1252],{"class":1018},[199,54206,1022],{"class":205},[199,54208,1257],{"class":1018},[199,54210,1028],{"class":205},[199,54212,54213,54215,54217,54219],{"class":201,"line":1262},[199,54214,1265],{"class":1018},[199,54216,1022],{"class":205},[199,54218,1270],{"class":1018},[199,54220,1028],{"class":205},[199,54222,54223,54225,54227,54229],{"class":201,"line":1275},[199,54224,1166],{"class":1018},[199,54226,1022],{"class":205},[199,54228,1282],{"class":1018},[199,54230,1028],{"class":205},[199,54232,54233],{"class":201,"line":1287},[199,54234,1046],{"class":205},[199,54236,54237],{"class":201,"line":1292},[199,54238,907],{"emptyLinePlaceholder":906},[199,54240,54241,54243,54245,54247],{"class":201,"line":1297},[199,54242,1057],{"class":878},[199,54244,1302],{"class":874},[199,54246,1305],{"class":874},[199,54248,1012],{"class":205},[199,54250,54251],{"class":201,"line":1310},[199,54252,907],{"emptyLinePlaceholder":906},[199,54254,54255,54257,54259,54261,54263],{"class":201,"line":1315},[199,54256,1318],{"class":1018},[199,54258,1022],{"class":205},[199,54260,1323],{"class":1018},[199,54262,1087],{"class":1086},[199,54264,1028],{"class":205},[199,54266,54267],{"class":201,"line":1330},[199,54268,1046],{"class":205},[199,54270,54271],{"class":201,"line":1335},[199,54272,907],{"emptyLinePlaceholder":906},[199,54274,54275,54277,54279,54281],{"class":201,"line":1340},[199,54276,1057],{"class":878},[199,54278,1302],{"class":874},[199,54280,1347],{"class":874},[199,54282,1012],{"class":205},[199,54284,54285,54287,54289,54291,54293],{"class":201,"line":1352},[199,54286,1355],{"class":1018},[199,54288,1022],{"class":205},[199,54290,1360],{"class":1018},[199,54292,1087],{"class":1086},[199,54294,1028],{"class":205},[199,54296,54297,54299,54301,54303,54305],{"class":201,"line":1367},[199,54298,1078],{"class":1018},[199,54300,1022],{"class":205},[199,54302,1374],{"class":1018},[199,54304,1087],{"class":1086},[199,54306,1028],{"class":205},[199,54308,54309,54311,54313,54315,54317],{"class":201,"line":1381},[199,54310,1384],{"class":1018},[199,54312,1022],{"class":205},[199,54314,1389],{"class":1018},[199,54316,1087],{"class":1086},[199,54318,1028],{"class":205},[199,54320,54321],{"class":201,"line":1396},[199,54322,1046],{"class":205},[199,54324,54325,54327,54329],{"class":201,"line":1401},[199,54326,1404],{"class":205},[199,54328,1002],{"class":874},[199,54330,882],{"class":205},[199,54332,54333,54335,54337],{"class":201,"line":1411},[199,54334,1414],{"class":205},[199,54336,914],{"class":874},[199,54338,882],{"class":205},[199,54340,54341],{"class":201,"line":1421},[199,54342,907],{"emptyLinePlaceholder":906},[199,54344,54345,54347,54349],{"class":201,"line":1426},[199,54346,887],{"class":205},[199,54348,1431],{"class":874},[199,54350,882],{"class":205},[199,54352,54353],{"class":201,"line":1436},[199,54354,907],{"emptyLinePlaceholder":906},[199,54356,54357,54359,54361],{"class":201,"line":1441},[199,54358,921],{"class":205},[199,54360,1446],{"class":874},[199,54362,882],{"class":205},[199,54364,54365],{"class":201,"line":1451},[199,54366,1455],{"class":1454},[199,54368,54369],{"class":201,"line":1458},[199,54370,1461],{"class":1454},[199,54372,54373,54375,54377,54379],{"class":201,"line":1464},[199,54374,1467],{"class":1086},[199,54376,1470],{"class":205},[199,54378,895],{"class":1086},[199,54380,1475],{"class":205},[199,54382,54383,54385,54387,54389,54391,54393,54395,54397,54399,54401,54403,54405],{"class":201,"line":1478},[199,54384,1481],{"class":1086},[199,54386,1484],{"class":205},[199,54388,1487],{"class":1086},[199,54390,1490],{"class":205},[199,54392,895],{"class":1086},[199,54394,1495],{"class":1018},[199,54396,1498],{"class":205},[199,54398,1501],{"class":1086},[199,54400,1504],{"class":1018},[199,54402,1507],{"class":205},[199,54404,1510],{"class":1086},[199,54406,1513],{"class":205},[199,54408,54409],{"class":201,"line":1516},[199,54410,1519],{"class":1454},[199,54412,54413],{"class":201,"line":1522},[199,54414,1525],{"class":1454},[199,54416,54417,54419,54421,54423,54425,54427,54429,54431,54433],{"class":201,"line":1528},[199,54418,1531],{"class":205},[199,54420,1534],{"class":878},[199,54422,1537],{"class":205},[199,54424,1540],{"class":878},[199,54426,1537],{"class":205},[199,54428,1545],{"class":898},[199,54430,1548],{"class":205},[199,54432,1551],{"class":898},[199,54434,1554],{"class":205},[199,54436,54437],{"class":201,"line":1557},[199,54438,1560],{"class":1454},[199,54440,54441],{"class":201,"line":1563},[199,54442,1046],{"class":205},[199,54444,54445],{"class":201,"line":1568},[199,54446,1571],{"class":1454},[199,54448,54449],{"class":201,"line":1574},[199,54450,1577],{"class":1454},[199,54452,54453,54455,54457,54459,54461],{"class":201,"line":1580},[199,54454,1583],{"class":205},[199,54456,1586],{"class":878},[199,54458,1537],{"class":205},[199,54460,1591],{"class":898},[199,54462,1594],{"class":205},[199,54464,54465],{"class":201,"line":1597},[199,54466,907],{"emptyLinePlaceholder":906},[199,54468,54469],{"class":201,"line":1602},[199,54470,1605],{"class":1454},[199,54472,54473,54475,54477,54479,54481,54483,54485,54487,54489,54491,54493,54495,54497],{"class":201,"line":1608},[199,54474,1481],{"class":1086},[199,54476,1484],{"class":205},[199,54478,1487],{"class":1086},[199,54480,1490],{"class":205},[199,54482,895],{"class":1086},[199,54484,1621],{"class":1018},[199,54486,1498],{"class":205},[199,54488,887],{"class":1086},[199,54490,1628],{"class":205},[199,54492,1631],{"class":1018},[199,54494,1507],{"class":205},[199,54496,1510],{"class":1086},[199,54498,1513],{"class":205},[199,54500,54501,54503,54505,54507],{"class":201,"line":1640},[199,54502,1643],{"class":205},[199,54504,1586],{"class":878},[199,54506,1537],{"class":205},[199,54508,1650],{"class":898},[199,54510,54511,54513,54515,54517,54519,54521],{"class":201,"line":1653},[199,54512,1656],{"class":898},[199,54514,1659],{"class":205},[199,54516,1662],{"class":898},[199,54518,1548],{"class":205},[199,54520,1667],{"class":898},[199,54522,1670],{"class":898},[199,54524,54525,54527,54529,54531,54533,54535],{"class":201,"line":1673},[199,54526,1676],{"class":898},[199,54528,1659],{"class":205},[199,54530,1662],{"class":898},[199,54532,1548],{"class":205},[199,54534,1667],{"class":898},[199,54536,1687],{"class":898},[199,54538,54539,54541,54543,54545,54547],{"class":201,"line":1690},[199,54540,1693],{"class":898},[199,54542,1548],{"class":205},[199,54544,1698],{"class":1086},[199,54546,1495],{"class":1018},[199,54548,1703],{"class":898},[199,54550,54551],{"class":201,"line":1706},[199,54552,1709],{"class":898},[199,54554,54555,54557],{"class":201,"line":1712},[199,54556,1715],{"class":898},[199,54558,1594],{"class":205},[199,54560,54561],{"class":201,"line":1720},[199,54562,1046],{"class":205},[199,54564,54565],{"class":201,"line":1725},[199,54566,1728],{"class":1454},[199,54568,54569,54571,54573,54575,54577],{"class":201,"line":1731},[199,54570,1583],{"class":205},[199,54572,1586],{"class":878},[199,54574,1537],{"class":205},[199,54576,1740],{"class":898},[199,54578,1594],{"class":205},[199,54580,54581,54583,54585],{"class":201,"line":1745},[199,54582,1404],{"class":205},[199,54584,1446],{"class":874},[199,54586,882],{"class":205},[199,54588,54589,54591,54593],{"class":201,"line":1754},[199,54590,1414],{"class":205},[199,54592,1431],{"class":874},[199,54594,882],{"class":205},[199,54596,54597],{"class":201,"line":1763},[199,54598,907],{"emptyLinePlaceholder":906},[199,54600,54601,54603,54605],{"class":201,"line":1768},[199,54602,1414],{"class":205},[199,54604,194],{"class":874},[199,54606,882],{"class":205},[19,54608,1778],{"id":1777},[190,54610,54611],{"className":192,"code":1781,"language":194,"meta":57,"style":57},[196,54612,54613,54623,54637,54641,54649,54663,54683,54695,54703,54707,54715,54723,54753,54785,54821,54825,54841,54845,54855,54869,54883,54887,54891,54895,54903,54911,54919,54923],{"__ignoreMap":57},[199,54614,54615,54617,54619,54621],{"class":201,"line":202},[199,54616,871],{"class":205},[199,54618,875],{"class":874},[199,54620,879],{"class":878},[199,54622,882],{"class":205},[199,54624,54625,54627,54629,54631,54633,54635],{"class":201,"line":36},[199,54626,887],{"class":205},[199,54628,194],{"class":874},[199,54630,892],{"class":878},[199,54632,895],{"class":205},[199,54634,899],{"class":898},[199,54636,882],{"class":205},[199,54638,54639],{"class":201,"line":73},[199,54640,907],{"emptyLinePlaceholder":906},[199,54642,54643,54645,54647],{"class":201,"line":333},[199,54644,887],{"class":205},[199,54646,914],{"class":874},[199,54648,882],{"class":205},[199,54650,54651,54653,54655,54657,54659,54661],{"class":201,"line":227},[199,54652,1824],{"class":205},[199,54654,924],{"class":874},[199,54656,927],{"class":878},[199,54658,895],{"class":205},[199,54660,932],{"class":898},[199,54662,882],{"class":205},[199,54664,54665,54667,54669,54671,54673,54675,54677,54679,54681],{"class":201,"line":238},[199,54666,1824],{"class":205},[199,54668,924],{"class":874},[199,54670,967],{"class":878},[199,54672,895],{"class":205},[199,54674,972],{"class":898},[199,54676,951],{"class":878},[199,54678,895],{"class":205},[199,54680,979],{"class":898},[199,54682,882],{"class":205},[199,54684,54685,54687,54689,54691,54693],{"class":201,"line":252},[199,54686,1824],{"class":205},[199,54688,988],{"class":874},[199,54690,991],{"class":205},[199,54692,988],{"class":874},[199,54694,882],{"class":205},[199,54696,54697,54699,54701],{"class":201,"line":388},[199,54698,1414],{"class":205},[199,54700,914],{"class":874},[199,54702,882],{"class":205},[199,54704,54705],{"class":201,"line":415},[199,54706,907],{"emptyLinePlaceholder":906},[199,54708,54709,54711,54713],{"class":201,"line":426},[199,54710,887],{"class":205},[199,54712,1431],{"class":874},[199,54714,882],{"class":205},[199,54716,54717,54719,54721],{"class":201,"line":1015},[199,54718,1824],{"class":205},[199,54720,1446],{"class":874},[199,54722,882],{"class":205},[199,54724,54725,54727,54729,54731,54733,54735,54737,54739,54741,54743,54745,54747,54749,54751],{"class":201,"line":1031},[199,54726,1899],{"class":1086},[199,54728,1470],{"class":205},[199,54730,895],{"class":1086},[199,54732,1906],{"class":205},[199,54734,1909],{"class":1018},[199,54736,1912],{"class":205},[199,54738,1915],{"class":1018},[199,54740,1912],{"class":205},[199,54742,1920],{"class":1018},[199,54744,1912],{"class":205},[199,54746,1925],{"class":1018},[199,54748,1912],{"class":205},[199,54750,1115],{"class":1018},[199,54752,1932],{"class":205},[199,54754,54755,54757,54759,54761,54763,54765,54767,54769,54771,54773,54775,54777,54779,54781,54783],{"class":201,"line":1043},[199,54756,1937],{"class":1086},[199,54758,1484],{"class":205},[199,54760,1487],{"class":1086},[199,54762,1490],{"class":205},[199,54764,895],{"class":1086},[199,54766,1621],{"class":1018},[199,54768,1498],{"class":205},[199,54770,887],{"class":1086},[199,54772,1628],{"class":205},[199,54774,1631],{"class":1018},[199,54776,1958],{"class":1086},[199,54778,1495],{"class":1018},[199,54780,1507],{"class":205},[199,54782,1510],{"class":1086},[199,54784,1513],{"class":205},[199,54786,54787,54789,54791,54793,54795,54797,54799,54801,54803,54805,54807,54809,54811,54813,54815,54817,54819],{"class":201,"line":1049},[199,54788,1971],{"class":1086},[199,54790,1484],{"class":205},[199,54792,1487],{"class":1086},[199,54794,1978],{"class":205},[199,54796,895],{"class":1086},[199,54798,1621],{"class":1018},[199,54800,1985],{"class":205},[199,54802,887],{"class":1086},[199,54804,1628],{"class":205},[199,54806,1631],{"class":1018},[199,54808,1958],{"class":1086},[199,54810,1490],{"class":205},[199,54812,1998],{"class":1086},[199,54814,1495],{"class":1018},[199,54816,2003],{"class":205},[199,54818,1510],{"class":1086},[199,54820,1513],{"class":205},[199,54822,54823],{"class":201,"line":1054},[199,54824,2012],{"class":1454},[199,54826,54827,54829,54831,54833,54835,54837,54839],{"class":201,"line":1062},[199,54828,2017],{"class":1086},[199,54830,2020],{"class":205},[199,54832,1217],{"class":1086},[199,54834,2025],{"class":205},[199,54836,2028],{"class":1086},[199,54838,1495],{"class":1018},[199,54840,2033],{"class":205},[199,54842,54843],{"class":201,"line":1075},[199,54844,2038],{"class":1454},[199,54846,54847,54849,54851,54853],{"class":201,"line":1092},[199,54848,2043],{"class":1086},[199,54850,2046],{"class":205},[199,54852,895],{"class":1086},[199,54854,2051],{"class":205},[199,54856,54857,54859,54861,54863,54865,54867],{"class":201,"line":1107},[199,54858,2056],{"class":205},[199,54860,895],{"class":1086},[199,54862,2025],{"class":205},[199,54864,2028],{"class":1086},[199,54866,1495],{"class":1018},[199,54868,1932],{"class":205},[199,54870,54871,54873,54875,54877,54879,54881],{"class":201,"line":1128},[199,54872,2071],{"class":205},[199,54874,2028],{"class":1086},[199,54876,1495],{"class":1018},[199,54878,2078],{"class":205},[199,54880,895],{"class":1086},[199,54882,2083],{"class":205},[199,54884,54885],{"class":201,"line":1146},[199,54886,1046],{"class":205},[199,54888,54889],{"class":201,"line":1163},[199,54890,2092],{"class":205},[199,54892,54893],{"class":201,"line":1176},[199,54894,2097],{"class":205},[199,54896,54897,54899,54901],{"class":201,"line":1189},[199,54898,2102],{"class":205},[199,54900,1586],{"class":878},[199,54902,2107],{"class":205},[199,54904,54905,54907,54909],{"class":201,"line":1202},[199,54906,2112],{"class":205},[199,54908,1446],{"class":874},[199,54910,882],{"class":205},[199,54912,54913,54915,54917],{"class":201,"line":1207},[199,54914,1414],{"class":205},[199,54916,1431],{"class":874},[199,54918,882],{"class":205},[199,54920,54921],{"class":201,"line":1212},[199,54922,907],{"emptyLinePlaceholder":906},[199,54924,54925,54927,54929],{"class":201,"line":1225},[199,54926,1414],{"class":205},[199,54928,194],{"class":874},[199,54930,882],{"class":205},[31,54932,54933],{},[55,54934],{"alt":57,"src":2141},[31,54936,2144],{},[31,54938,2147],{},[31,54940,2150],{},[31,54942,2153],{},[31,54944,2156],{},[31,54946,2159],{},[31,54948,2162],{},[31,54950,2165],{},[31,54952,2153],{},[31,54954,2170],{},[31,54956,2159],{},[31,54958,2175],{},[14,54960,2179],{"id":2178},[31,54962,54963],{},[55,54964],{"alt":57,"src":2184},[31,54966,2187],{},[31,54968,2190],{},[31,54970,2193],{},[19,54972,2197],{"id":2196},[31,54974,54975],{},[55,54976],{"alt":57,"src":2202},[31,54978,54979],{},[55,54980],{"alt":57,"src":2207},[176,54982,54983,54985,54987,54989,54991,54993],{},[27,54984,2212],{},[27,54986,2215],{},[27,54988,2218],{},[27,54990,2221],{},[27,54992,2224],{},[27,54994,2227],{},[31,54996,2230],{},[19,54998,2234],{"id":2233},[31,55000,55001],{},[55,55002],{"alt":57,"src":2239},[31,55004,55005],{},[55,55006],{"alt":57,"src":2244},[176,55008,55009,55011,55013,55015,55017],{},[27,55010,2249],{},[27,55012,2252],{},[27,55014,2255],{},[27,55016,2258],{},[27,55018,2261],{},[19,55020,2265],{"id":2264},[190,55022,55023],{"className":192,"code":2268,"language":194,"meta":57,"style":57},[196,55024,55025,55029,55033,55037,55041],{"__ignoreMap":57},[199,55026,55027],{"class":201,"line":202},[199,55028,2275],{"class":205},[199,55030,55031],{"class":201,"line":36},[199,55032,2280],{"class":205},[199,55034,55035],{"class":201,"line":73},[199,55036,2097],{"class":205},[199,55038,55039],{"class":201,"line":333},[199,55040,2289],{"class":205},[199,55042,55043],{"class":201,"line":227},[199,55044,2294],{"class":205},[19,55046,2298],{"id":2297},[176,55048,55049,55053,55057,55059,55061],{},[27,55050,2303,55051],{},[49,55052,2306],{},[27,55054,55055],{},[49,55056,2311],{},[27,55058,2314],{},[27,55060,2317],{},[27,55062,2320],{},[31,55064,2323],{},[190,55066,55067],{"className":192,"code":2326,"language":194,"meta":57,"style":57},[196,55068,55069,55073,55077,55081,55085,55089,55093],{"__ignoreMap":57},[199,55070,55071],{"class":201,"line":202},[199,55072,2333],{"class":205},[199,55074,55075],{"class":201,"line":36},[199,55076,2338],{"class":205},[199,55078,55079],{"class":201,"line":73},[199,55080,2097],{"class":205},[199,55082,55083],{"class":201,"line":333},[199,55084,2347],{"class":205},[199,55086,55087],{"class":201,"line":227},[199,55088,2352],{"class":205},[199,55090,55091],{"class":201,"line":238},[199,55092,2357],{"class":205},[199,55094,55095],{"class":201,"line":252},[199,55096,2362],{"class":205},[176,55098,55099,55101],{},[27,55100,2367],{},[27,55102,2370],{},[31,55104,2373,55105],{},[49,55106,2376],{},[19,55108,2380],{"id":2379},[31,55110,2383],{},[31,55112,2386],{},[24,55114,55115],{},[27,55116,2391],{},[31,55118,55119],{},[55,55120],{"alt":57,"src":2396},[31,55122,2399],{},[31,55124,2402],{},[31,55126,2405],{},[24,55128,55129],{"start":36},[27,55130,2410],{},[31,55132,55133],{},[55,55134],{"alt":57,"src":2415},[31,55136,2418],{},[31,55138,2421],{},[31,55140,2424],{},[31,55142,2427],{},[31,55144,2430],{},[31,55146,2433],{},[31,55148,2436],{},[31,55150,2439],{},[31,55152,2442],{},[31,55154,2445],{},[31,55156,2448],{},[31,55158,2424],{},[31,55160,2453],{},[31,55162,2456],{},[31,55164,2459],{},[31,55166,2462],{},[31,55168,2465],{},[31,55170,2468],{},[31,55172,2471],{},[31,55174,2474],{},[19,55176,2478],{"id":2477},[31,55178,55179],{},[55,55180],{"alt":57,"src":2483},[31,55182,2486],{},[31,55184,55185],{},[55,55186],{"alt":57,"src":2491},[31,55188,2494],{},[31,55190,2497],{},[31,55192,2500],{},[31,55194,2503],{},[31,55196,2506],{},[31,55198,2509],{},[31,55200,2512],{},[31,55202,2323],{},[31,55204,2517],{},[31,55206,2520],{},[31,55208,2523],{},[31,55210,2526],{},[31,55212,2529],{},[31,55214,2532],{},[19,55216,2536],{"id":2535},[31,55218,2539],{},[31,55220,55221,2545,55223],{},[49,55222,2544],{},[49,55224,2548],{},[31,55226,2551],{},[31,55228,55229],{},[55,55230],{"alt":57,"src":2556},[31,55232,2559],{},[31,55234,55235],{},[55,55236],{"alt":57,"src":2564},[31,55238,2567],{},[31,55240,2570],{},[31,55242,2573],{},[31,55244,2576],{},[31,55246,2579],{},[31,55248,2582],{},[31,55250,2585],{},[14,55252,2589],{"id":2588},[19,55254,2593],{"id":2592},[31,55256,2596],{},[31,55258,2599],{},[31,55260,55261],{},[55,55262],{"alt":57,"src":2604},[31,55264,55265],{},[55,55266],{"alt":57,"src":2609},[31,55268,55269],{},[55,55270],{"alt":57,"src":2614},[19,55272,2618],{"id":2617},[31,55274,55275],{},[55,55276],{"alt":57,"src":2623},[24,55278,55279],{},[27,55280,2628],{},[31,55282,2631],{},[31,55284,2634],{},[31,55286,2637],{},[31,55288,2640],{},[31,55290,2643],{},[24,55292,55293],{"start":36},[27,55294,2648],{},[31,55296,2651],{},[24,55298,55299],{"start":73},[27,55300,2656],{},[31,55302,2651],{},[24,55304,55305],{"start":333},[27,55306,2663],{},[31,55308,2666],{},[19,55310,2670],{"id":2669},[31,55312,55313],{},[55,55314],{"alt":57,"src":2675},[31,55316,2678],{},[31,55318,2681],{},[31,55320,55321],{},[55,55322],{"alt":57,"src":2686},[19,55324,2690],{"id":2689},[31,55326,2693],{},[31,55328,55329],{},[55,55330],{"alt":57,"src":2698},[31,55332,2701],{},[31,55334,2704],{},[190,55336,55337],{"className":192,"code":2707,"language":194,"meta":57,"style":57},[196,55338,55339,55343,55347,55351,55355],{"__ignoreMap":57},[199,55340,55341],{"class":201,"line":202},[199,55342,2714],{"class":205},[199,55344,55345],{"class":201,"line":36},[199,55346,2719],{"class":205},[199,55348,55349],{"class":201,"line":73},[199,55350,2724],{"class":205},[199,55352,55353],{"class":201,"line":333},[199,55354,2729],{"class":205},[199,55356,55357],{"class":201,"line":227},[199,55358,2097],{"class":205},[31,55360,55361],{},[55,55362],{"alt":57,"src":2738},[31,55364,2741],{},[31,55366,2744],{},[31,55368,2747],{},[1446,55370,2750],{},[31,55372,2753],{},[19,55374,2757],{"id":2756},[31,55376,2760],{},[190,55378,55379],{"className":2763,"code":2764,"language":2765,"meta":57,"style":57},[196,55380,55381,55389,55393,55397,55401,55405,55409,55413,55417,55421,55425,55429,55433,55437,55441],{"__ignoreMap":57},[199,55382,55383,55385,55387],{"class":201,"line":202},[199,55384,887],{"class":205},[199,55386,1446],{"class":874},[199,55388,882],{"class":205},[199,55390,55391],{"class":201,"line":36},[199,55392,2780],{"class":205},[199,55394,55395],{"class":201,"line":73},[199,55396,2785],{"class":205},[199,55398,55399],{"class":201,"line":333},[199,55400,2790],{"class":205},[199,55402,55403],{"class":201,"line":227},[199,55404,2795],{"class":205},[199,55406,55407],{"class":201,"line":238},[199,55408,2800],{"class":205},[199,55410,55411],{"class":201,"line":252},[199,55412,2805],{"class":205},[199,55414,55415],{"class":201,"line":388},[199,55416,2810],{"class":205},[199,55418,55419],{"class":201,"line":415},[199,55420,2815],{"class":205},[199,55422,55423],{"class":201,"line":426},[199,55424,2820],{"class":205},[199,55426,55427],{"class":201,"line":1015},[199,55428,2825],{"class":205},[199,55430,55431],{"class":201,"line":1031},[199,55432,2830],{"class":205},[199,55434,55435],{"class":201,"line":1043},[199,55436,2092],{"class":205},[199,55438,55439],{"class":201,"line":1049},[199,55440,2097],{"class":205},[199,55442,55443,55445,55447],{"class":201,"line":1054},[199,55444,2112],{"class":205},[199,55446,1446],{"class":874},[199,55448,882],{"class":205},[19,55450,2850],{"id":2849},[31,55452,2853],{},[24,55454,55455],{},[27,55456,2858],{},[31,55458,55459],{},[55,55460],{"alt":57,"src":2863},[31,55462,55463],{},[2867,55464,2872],{"href":2869,"rel":55465},[2871],[31,55467,2875],{},[31,55469,2878],{},[31,55471,2881],{},[31,55473,2884],{},[31,55475,2887],{},[24,55477,55478],{"start":36},[27,55479,2892],{},[31,55481,55482],{},[55,55483],{"alt":57,"src":2897},[31,55485,2900],{},[31,55487,2903],{},[31,55489,2906],{},[31,55491,2909],{},[31,55493,2912],{},[31,55495,2915],{},[31,55497,2918],{},[31,55499,2921],{},[31,55501,2924],{},[31,55503,759],{},[31,55505,2929],{},[19,55507,2933],{"id":2932},[31,55509,55510],{},[55,55511],{"alt":57,"src":2938},[31,55513,55514],{},[55,55515],{"alt":57,"src":2943},[31,55517,55518],{},[55,55519],{"alt":57,"src":2948},[31,55521,2951],{},[31,55523,55524],{},[55,55525],{"alt":57,"src":2956},[31,55527,55528],{},[55,55529],{"alt":57,"src":2961},[31,55531,2964],{},[31,55533,2967],{},[31,55535,2970],{},[1002,55537,2973],{},{"title":57,"searchDepth":36,"depth":36,"links":55539},[55540,55548,55549,55550,55551,55552,55559,55563,55569,55578],{"id":16,"depth":36,"text":17,"children":55541},[55542,55543,55544,55545,55546,55547],{"id":21,"depth":73,"text":22},{"id":42,"depth":73,"text":43},{"id":86,"depth":73,"text":87},{"id":98,"depth":73,"text":99},{"id":107,"depth":73,"text":108},{"id":155,"depth":73,"text":156},{"id":165,"depth":36,"text":166},{"id":263,"depth":36,"text":264},{"id":286,"depth":36,"text":287},{"id":298,"depth":36,"text":299},{"id":489,"depth":36,"text":490,"children":55553},[55554,55555,55556,55557,55558],{"id":493,"depth":73,"text":494},{"id":502,"depth":73,"text":503},{"id":530,"depth":73,"text":531},{"id":566,"depth":73,"text":567},{"id":591,"depth":73,"text":592},{"id":603,"depth":36,"text":604,"children":55560},[55561,55562],{"id":624,"depth":73,"text":625},{"id":720,"depth":73,"text":721},{"id":779,"depth":36,"text":780,"children":55564},[55565,55566,55567,55568],{"id":783,"depth":73,"text":784},{"id":807,"depth":73,"text":808},{"id":860,"depth":73,"text":861},{"id":1777,"depth":73,"text":1778},{"id":2178,"depth":36,"text":2179,"children":55570},[55571,55572,55573,55574,55575,55576,55577],{"id":2196,"depth":73,"text":2197},{"id":2233,"depth":73,"text":2234},{"id":2264,"depth":73,"text":2265},{"id":2297,"depth":73,"text":2298},{"id":2379,"depth":73,"text":2380},{"id":2477,"depth":73,"text":2478},{"id":2535,"depth":73,"text":2536},{"id":2588,"depth":36,"text":2589,"children":55579},[55580,55581,55582,55583,55584,55585,55586],{"id":2592,"depth":73,"text":2593},{"id":2617,"depth":73,"text":2618},{"id":2669,"depth":73,"text":2670},{"id":2689,"depth":73,"text":2690},{"id":2756,"depth":73,"text":2757},{"id":2849,"depth":73,"text":2850},{"id":2932,"depth":73,"text":2933},{},{"title":5,"description":3023},{"id":55590,"title":55591,"body":55592,"description":3023,"extension":3024,"meta":78932,"navigation":906,"path":78933,"seo":78934,"stem":78935,"__hash__":78936},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55593,"toc":78872},[55594,55597,55600,55603,55608,55611,55614,55617,55621,55625,55631,55636,55644,55651,55654,55658,55663,55668,55673,55676,55679,55690,55693,55697,55700,55703,55708,55713,55718,55721,55724,55816,55819,55824,55827,55832,55835,55838,55843,55846,55851,55855,55858,55872,55876,55881,55884,55887,55891,55896,55899,55903,55907,55912,55916,55921,55924,55927,55930,55933,55936,55939,55944,55949,55977,55980,55983,55986,55991,55994,55997,56000,56003,56007,56036,56040,56045,56050,56053,56056,56059,56064,56179,56184,56189,56350,56355,56358,56362,56367,56372,56375,56378,56381,56384,56387,56390,56393,56396,56399,56402,56405,56408,56411,56414,56416,56419,56422,56425,56430,56434,56831,56834,56840,56844,56849,58131,58136,58139,58142,58145,58150,59346,59350,59356,59361,59364,59369,59374,59378,59382,59387,59390,59395,59398,59401,59405,60313,60316,60320,60541,60544,60547,60550,60776,60779,61003,61006,61010,61015,61018,61021,61249,61252,61285,61288,61292,61297,61301,61304,61307,61310,61313,61316,61319,61322,61327,62607,62611,62614,63707,63711,63714,63717,63720,63723,63727,63730,63733,63735,63743,65224,65228,65231,65234,65237,65446,65449,65453,65457,65462,65467,65470,65473,65478,65482,65487,65490,65599,65603,65608,65613,65616,65619,65623,65628,65633,65638,65641,65644,65655,65658,65663,65668,65671,65674,65747,65751,65756,65759,65761,65772,65776,65781,67107,67110,67113,67116,67118,67121,67124,67127,67130,67133,67136,67139,67142,67145,67148,67151,67154,67156,67158,67161,67165,68259,68262,68265,68281,68295,68298,68303,68309,68314,68318,68322,68327,68331,68336,68778,68783,68786,68790,68795,68798,68801,68805,68810,68814,68819,68824,68828,68833,68838,68841,68846,68851,68855,68860,68865,68969,68972,68976,68981,69347,69350,69353,69356,69359,69362,69365,69368,69371,70667,70671,70676,70681,70684,70687,70690,70693,70695,70700,70705,70708,70712,70717,70722,70727,70730,70733,70736,70739,70742,70747,70750,70754,70759,70764,70768,70773,70776,70781,70784,70787,70790,70793,70796,70801,70804,70807,70810,70813,70817,70822,70825,70829,70834,70837,70840,70844,70873,70876,70880,70884,70889,70893,70898,70901,70904,70907,70910,70913,70916,70919,70922,70925,70928,70931,70934,70937,70940,70944,70949,70954,70957,70961,70965,70970,70973,70977,70980,70983,70988,70993,70998,71003,71008,71011,71014,71019,71024,71028,71033,71036,71041,71044,71047,71050,71053,71058,71061,71070,71074,71079,71082,71085,71089,71092,71097,71101,71104,71110,71116,71120,71146,71149,72710,72713,73209,73212,73217,73222,73227,73231,73236,73241,73246,73250,73255,73258,73261,73264,73267,73271,73274,73279,73282,73287,73291,73296,73299,73304,73309,73314,73317,73320,73325,73330,73333,73336,73340,73343,73348,73351,73356,73359,73364,73369,73374,73377,73382,73447,73450,73461,73465,73470,73642,73646,73651,73654,73657,73660,73664,73675,73679,73682,73687,73692,73695,73698,73701,73704,73707,73709,73712,73715,73718,73723,73726,73731,73734,73738,73741,73744,73758,73762,73765,73820,73825,73828,73831,73836,73839,73843,73848,73978,73982,73987,73992,74073,74078,74082,74085,74090,74095,74101,74104,74107,74110,74114,74119,74122,74133,74137,74154,77201,77205,77208,77211,77214,77235,77239,77242,77250,77253,77258,77261,77264,77269,77274,77278,77299,77303,77308,77311,77314,77317,77320,77324,77329,77332,77336,77341,77344,77349,77352,77357,77360,77365,78568,78572,78577,78580,78585,78869],[10,55595,55591],{"id":55596},"_3web-apis",[31,55598,55599],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[31,55601,55602],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[31,55604,55605],{},[55,55606],{"alt":57,"src":55607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[31,55609,55610],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[31,55612,55613],{},"建议数组和对象使用 const 来声明",[31,55615,55616],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55618,55620],{"id":55619},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[19,55622,55624],{"id":55623},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[31,55626,55627,55630],{},[196,55628,55629],{},"document"," = HTML 文件解析后的对象化表示；",[31,55632,55633,55635],{},[196,55634,55629],{}," ≠ HTML 文件本身",[31,55637,55638,55643],{},[49,55639,55640],{},[196,55641,55642],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[31,55645,55646,55650],{},[49,55647,55648],{},[196,55649,55629],{}," ：容器里的内容，代表当前加载的网页（DOM）",[31,55652,55653],{},"document实际上为window.document的简写",[19,55655,55657],{"id":55656},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[31,55659,55660],{},[55,55661],{"alt":57,"src":55662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[31,55664,55665],{},[55,55666],{"alt":57,"src":55667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[31,55669,55670],{},[55,55671],{"alt":57,"src":55672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[31,55674,55675],{},"console.dir()",[31,55677,55678],{},"dir用来打印对象",[176,55680,55681,55684,55687],{},[27,55682,55683],{},"任何一个标签，都是一个对象",[27,55685,55686],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[27,55688,55689],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[31,55691,55692],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[19,55694,55696],{"id":55695},"_312-获取dom对象","3.1.2 获取DoM对象",[31,55698,55699],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[31,55701,55702],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[31,55704,55705],{},[49,55706,55707],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[24,55709,55710],{},[27,55711,55712],{},"利用CSS选择器来获取标签元素",[31,55714,55715],{},[55,55716],{"alt":57,"src":55717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[31,55719,55720],{},"里边的选择器必须必须加引号！！！",[31,55722,55723],{},"只选择第一个元素",[190,55725,55727],{"className":2763,"code":55726,"language":2765,"meta":57,"style":57},"\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",[196,55728,55729,55737,55758,55777,55785,55790,55795,55800,55808],{"__ignoreMap":57},[199,55730,55731,55733,55735],{"class":201,"line":202},[199,55732,887],{"class":205},[199,55734,1431],{"class":874},[199,55736,882],{"class":205},[199,55738,55739,55741,55743,55746,55748,55751,55754,55756],{"class":201,"line":36},[199,55740,1824],{"class":205},[199,55742,1220],{"class":874},[199,55744,55745],{"class":878}," class",[199,55747,895],{"class":205},[199,55749,55750],{"class":898},"\"box\"",[199,55752,55753],{"class":205},">123\u003C\u002F",[199,55755,1220],{"class":874},[199,55757,882],{"class":205},[199,55759,55760,55762,55764,55766,55768,55770,55773,55775],{"class":201,"line":73},[199,55761,1824],{"class":205},[199,55763,1220],{"class":874},[199,55765,55745],{"class":878},[199,55767,895],{"class":205},[199,55769,55750],{"class":898},[199,55771,55772],{"class":205},">456\u003C\u002F",[199,55774,1220],{"class":874},[199,55776,882],{"class":205},[199,55778,55779,55781,55783],{"class":201,"line":333},[199,55780,1824],{"class":205},[199,55782,1446],{"class":874},[199,55784,882],{"class":205},[199,55786,55787],{"class":201,"line":227},[199,55788,55789],{"class":205},"    \u002F\u002F 1.获取匹配的第一个元素\n",[199,55791,55792],{"class":201,"line":238},[199,55793,55794],{"class":205},"    const box = document.querySelector('div')\n",[199,55796,55797],{"class":201,"line":252},[199,55798,55799],{"class":205},"    console.dir(box)\n",[199,55801,55802,55804,55806],{"class":201,"line":388},[199,55803,2112],{"class":205},[199,55805,1446],{"class":874},[199,55807,882],{"class":205},[199,55809,55810,55812,55814],{"class":201,"line":415},[199,55811,1414],{"class":205},[199,55813,1431],{"class":874},[199,55815,882],{"class":205},[31,55817,55818],{},"只选123，不选456",[31,55820,55821],{},[55,55822],{"alt":57,"src":55823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[31,55825,55826],{},"返回的是一个数组的集合，不能对其进行直接修改",[31,55828,55829],{},[55,55830],{"alt":57,"src":55831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[31,55833,55834],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[31,55836,55837],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[24,55839,55840],{"start":36},[27,55841,55842],{},"其他方法来获取标签元素",[31,55844,55845],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[31,55847,55848],{},[55,55849],{"alt":57,"src":55850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[19,55852,55854],{"id":55853},"_313-操作元素的内容","3.1.3 操作元素的内容",[31,55856,55857],{},"设置修改DOM元素内容有两种方式：",[176,55859,55860,55863,55866,55869],{},[27,55861,55862],{},"元素.innerText=''",[27,55864,55865],{},"元素.innerHTML=''",[27,55867,55868],{},"不写字符串输出数字也是可以的",[27,55870,55871],{},"元素.innerHtml=1",[627,55873,55875],{"id":55874},"_3131-innertext","3.1.3.1 innerText",[31,55877,55878],{},[55,55879],{"alt":57,"src":55880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[31,55882,55883],{},"思路：实现了修改盒子中的内容！",[31,55885,55886],{},"它只显示纯文本，不解析标签",[627,55888,55890],{"id":55889},"_3132-innerhtml","3.1.3.2 innerHTML",[31,55892,55893],{},[55,55894],{"alt":57,"src":55895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[31,55897,55898],{},"相比于innerText，他的强大之处在于可以解析标签",[19,55900,55902],{"id":55901},"_314-操作元素属性","3.1.4 操作元素属性",[627,55904,55906],{"id":55905},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[31,55908,55909],{},[55,55910],{"alt":57,"src":55911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[627,55913,55915],{"id":55914},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[31,55917,55918],{},[55,55919],{"alt":57,"src":55920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[31,55922,55923],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[31,55925,55926],{},"div.style.backgroundColor = 'hotpink'",[31,55928,55929],{},"如果按照css的写法，-表示减，就会出错",[31,55931,55932],{},"body元素不需要再获取，直接用就行！！！！！！",[31,55934,55935],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[31,55937,55938],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[31,55940,55941],{},[55,55942],{"alt":57,"src":55943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[31,55945,55946],{},[55,55947],{"alt":57,"src":55948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[24,55950,55951,55954,55957,55960,55963,55966],{},[27,55952,55953],{},"className这个方式就是修改很多样式的时候来使用的！",[27,55955,55956],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[27,55958,55959],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[27,55961,55962],{},"className为属性名，如果还用class的话就导致与关键字冲突",[27,55964,55965],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[27,55967,55968,55969,55974],{},"解析标签的时候就变为了",[1220,55970],{"className":55971},[55972,55973],"nav","box",[55975,55976],"br",{},[31,55978,55979],{},"例子：",[1220,55981],{"className":55982},[55972],[1446,55984,55985],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[31,55987,55988],{},[55,55989],{"alt":57,"src":55990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[31,55992,55993],{},"追加和删除类名用classList",[31,55995,55996],{},"常用于类似于开关的操作",[31,55998,55999],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[31,56001,56002],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[627,56004,56006],{"id":56005},"_3143-牢记点","3.1.4.3 牢记点",[24,56008,56009,56012,56015,56018,56021,56024,56027,56030,56033],{},[27,56010,56011],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[27,56013,56014],{},"使用style属性操作css时不要忘记引号",[27,56016,56017],{},"使用className或者classList时也不要忘记引号",[27,56019,56020],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[27,56022,56023],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[27,56025,56026],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[27,56028,56029],{},"若： let arr=['1','2',3] arr[0]=1",[27,56031,56032],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[27,56034,56035],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[19,56037,56039],{"id":56038},"_315-操作表单元素","3.1.5 操作表单元素",[24,56041,56042],{},[27,56043,56044],{},"天生的属性",[31,56046,56047],{},[55,56048],{"alt":57,"src":56049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[31,56051,56052],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[31,56054,56055],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[31,56057,56058],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[31,56060,56061],{},[55,56062],{"alt":57,"src":56063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[190,56065,56067],{"className":192,"code":56066,"language":194,"meta":57,"style":57},"在复选框中如果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",[196,56068,56069,56074,56106,56111,56116,56121,56126,56130,56135,56140,56157,56169,56174],{"__ignoreMap":57},[199,56070,56071],{"class":201,"line":202},[199,56072,56073],{"class":205},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[199,56075,56076,56078,56081,56084,56086,56089,56091,56093,56095,56097,56099,56101,56104],{"class":201,"line":36},[199,56077,887],{"class":205},[199,56079,56080],{"class":874},"input",[199,56082,56083],{"class":878}," type",[199,56085,895],{"class":205},[199,56087,56088],{"class":898},"\"checkbox\"",[199,56090,967],{"class":878},[199,56092,895],{"class":205},[199,56094,10549],{"class":898},[199,56096,17818],{"class":878},[199,56098,895],{"class":205},[199,56100,10549],{"class":898},[199,56102,56103],{"class":878}," checked",[199,56105,882],{"class":205},[199,56107,56108],{"class":201,"line":73},[199,56109,56110],{"class":205},"不选的话：\n",[199,56112,56113],{"class":201,"line":333},[199,56114,56115],{"class":205},"const input = document.querySelector('input')\n",[199,56117,56118],{"class":201,"line":227},[199,56119,56120],{"class":205},"input.checked=false\n",[199,56122,56123],{"class":201,"line":238},[199,56124,56125],{"class":205},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[199,56127,56128],{"class":201,"line":252},[199,56129,907],{"emptyLinePlaceholder":906},[199,56131,56132],{"class":201,"line":388},[199,56133,56134],{"class":205},"禁用按钮：\n",[199,56136,56137],{"class":201,"line":415},[199,56138,56139],{"class":205},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[199,56141,56142,56144,56147,56150,56153,56155],{"class":201,"line":426},[199,56143,887],{"class":205},[199,56145,56146],{"class":874},"button",[199,56148,56149],{"class":878}," disabled",[199,56151,56152],{"class":205},">点击\u003C\u002F",[199,56154,56146],{"class":874},[199,56156,882],{"class":205},[199,56158,56159,56161,56163,56165,56167],{"class":201,"line":1015},[199,56160,887],{"class":205},[199,56162,56146],{"class":874},[199,56164,56152],{"class":205},[199,56166,56146],{"class":874},[199,56168,882],{"class":205},[199,56170,56171],{"class":201,"line":1031},[199,56172,56173],{"class":205},"const bt = document.querySelector('button')\n",[199,56175,56176],{"class":201,"line":1043},[199,56177,56178],{"class":205},"bt.disabled = false\n",[24,56180,56181],{"start":36},[27,56182,56183],{},"自定义属性",[31,56185,56186],{},[55,56187],{"alt":57,"src":56188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[190,56190,56192],{"className":2763,"code":56191,"language":2765,"meta":57,"style":57},"\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",[196,56193,56194,56202,56230,56249,56268,56287,56306,56314,56319,56324,56329,56334,56342],{"__ignoreMap":57},[199,56195,56196,56198,56200],{"class":201,"line":202},[199,56197,887],{"class":205},[199,56199,1431],{"class":874},[199,56201,882],{"class":205},[199,56203,56204,56206,56208,56211,56213,56215,56218,56220,56223,56226,56228],{"class":201,"line":36},[199,56205,1824],{"class":205},[199,56207,1220],{"class":874},[199,56209,56210],{"class":878}," data-id",[199,56212,895],{"class":205},[199,56214,6579],{"class":898},[199,56216,56217],{"class":878}," data-spm",[199,56219,895],{"class":205},[199,56221,56222],{"class":898},"\"我不知道\"",[199,56224,56225],{"class":205},">1\u003C\u002F",[199,56227,1220],{"class":874},[199,56229,882],{"class":205},[199,56231,56232,56234,56236,56238,56240,56242,56245,56247],{"class":201,"line":73},[199,56233,1824],{"class":205},[199,56235,1220],{"class":874},[199,56237,56210],{"class":878},[199,56239,895],{"class":205},[199,56241,6602],{"class":898},[199,56243,56244],{"class":205},">2\u003C\u002F",[199,56246,1220],{"class":874},[199,56248,882],{"class":205},[199,56250,56251,56253,56255,56257,56259,56261,56264,56266],{"class":201,"line":333},[199,56252,1824],{"class":205},[199,56254,1220],{"class":874},[199,56256,56210],{"class":878},[199,56258,895],{"class":205},[199,56260,6615],{"class":898},[199,56262,56263],{"class":205},">3\u003C\u002F",[199,56265,1220],{"class":874},[199,56267,882],{"class":205},[199,56269,56270,56272,56274,56276,56278,56280,56283,56285],{"class":201,"line":227},[199,56271,1824],{"class":205},[199,56273,1220],{"class":874},[199,56275,56210],{"class":878},[199,56277,895],{"class":205},[199,56279,6628],{"class":898},[199,56281,56282],{"class":205},">4\u003C\u002F",[199,56284,1220],{"class":874},[199,56286,882],{"class":205},[199,56288,56289,56291,56293,56295,56297,56299,56302,56304],{"class":201,"line":238},[199,56290,1824],{"class":205},[199,56292,1220],{"class":874},[199,56294,56210],{"class":878},[199,56296,895],{"class":205},[199,56298,6649],{"class":898},[199,56300,56301],{"class":205},">5\u003C\u002F",[199,56303,1220],{"class":874},[199,56305,882],{"class":205},[199,56307,56308,56310,56312],{"class":201,"line":252},[199,56309,1824],{"class":205},[199,56311,1446],{"class":874},[199,56313,882],{"class":205},[199,56315,56316],{"class":201,"line":388},[199,56317,56318],{"class":205},"    const one = document.querySelector('div')\n",[199,56320,56321],{"class":201,"line":415},[199,56322,56323],{"class":205},"    console.log(one.dataset)\n",[199,56325,56326],{"class":201,"line":426},[199,56327,56328],{"class":205},"    console.log(one.dataset.id)\n",[199,56330,56331],{"class":201,"line":1015},[199,56332,56333],{"class":205},"    console.log(one.dataset.spm)\n",[199,56335,56336,56338,56340],{"class":201,"line":1031},[199,56337,2112],{"class":205},[199,56339,1446],{"class":874},[199,56341,882],{"class":205},[199,56343,56344,56346,56348],{"class":201,"line":1043},[199,56345,1414],{"class":205},[199,56347,1431],{"class":874},[199,56349,882],{"class":205},[31,56351,56352],{},[55,56353],{"alt":57,"src":56354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[31,56356,56357],{},"document.querySelector选择的是第一个对象（元素）",[19,56359,56361],{"id":56360},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[31,56363,56364],{},[55,56365],{"alt":57,"src":56366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[31,56368,56369],{},[55,56370],{"alt":57,"src":56371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[31,56373,56374],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[1446,56376,56377],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[31,56379,56380],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[1446,56382,56383],{},"\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",[31,56385,56386],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[31,56388,56389],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[31,56391,56392],{},"单位为毫秒！！！",[31,56394,56395],{},"可以搭配匿名函数来用！！！",[31,56397,56398],{},"setInterval(function () {",[31,56400,56401],{},"alert('两秒执行一次')",[31,56403,56404],{},"}, 2000)",[31,56406,56407],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[31,56409,56410],{},"function fn() {",[31,56412,56413],{},"document.write(1)",[31,56415,759],{},[31,56417,56418],{},"setInterval(fn, 1000)",[31,56420,56421],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[31,56423,56424],{},"setInterval('fn()', 1000)",[31,56426,56427],{},[55,56428],{"alt":57,"src":56429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[627,56431,56433],{"id":56432},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[190,56435,56437],{"className":192,"code":56436,"language":194,"meta":57,"style":57},"\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",[196,56438,56439,56449,56463,56467,56475,56489,56509,56521,56529,56533,56541,56578,56583,56588,56593,56601,56609,56631,56639,56644,56666,56671,56676,56687,56692,56712,56720,56735,56750,56761,56766,56776,56786,56790,56799,56803,56811,56819,56823],{"__ignoreMap":57},[199,56440,56441,56443,56445,56447],{"class":201,"line":202},[199,56442,871],{"class":205},[199,56444,875],{"class":874},[199,56446,879],{"class":878},[199,56448,882],{"class":205},[199,56450,56451,56453,56455,56457,56459,56461],{"class":201,"line":36},[199,56452,887],{"class":205},[199,56454,194],{"class":874},[199,56456,892],{"class":878},[199,56458,895],{"class":205},[199,56460,899],{"class":898},[199,56462,882],{"class":205},[199,56464,56465],{"class":201,"line":73},[199,56466,907],{"emptyLinePlaceholder":906},[199,56468,56469,56471,56473],{"class":201,"line":333},[199,56470,887],{"class":205},[199,56472,914],{"class":874},[199,56474,882],{"class":205},[199,56476,56477,56479,56481,56483,56485,56487],{"class":201,"line":227},[199,56478,1824],{"class":205},[199,56480,924],{"class":874},[199,56482,927],{"class":878},[199,56484,895],{"class":205},[199,56486,932],{"class":898},[199,56488,882],{"class":205},[199,56490,56491,56493,56495,56497,56499,56501,56503,56505,56507],{"class":201,"line":238},[199,56492,1824],{"class":205},[199,56494,924],{"class":874},[199,56496,967],{"class":878},[199,56498,895],{"class":205},[199,56500,972],{"class":898},[199,56502,951],{"class":878},[199,56504,895],{"class":205},[199,56506,979],{"class":898},[199,56508,882],{"class":205},[199,56510,56511,56513,56515,56517,56519],{"class":201,"line":252},[199,56512,1824],{"class":205},[199,56514,988],{"class":874},[199,56516,991],{"class":205},[199,56518,988],{"class":874},[199,56520,882],{"class":205},[199,56522,56523,56525,56527],{"class":201,"line":388},[199,56524,1414],{"class":205},[199,56526,914],{"class":874},[199,56528,882],{"class":205},[199,56530,56531],{"class":201,"line":415},[199,56532,907],{"emptyLinePlaceholder":906},[199,56534,56535,56537,56539],{"class":201,"line":426},[199,56536,887],{"class":205},[199,56538,1431],{"class":874},[199,56540,882],{"class":205},[199,56542,56543,56545,56548,56550,56552,56554,56556,56558,56560,56563,56565,56568,56571,56573,56576],{"class":201,"line":1015},[199,56544,1824],{"class":205},[199,56546,56547],{"class":874},"textarea",[199,56549,967],{"class":878},[199,56551,895],{"class":205},[199,56553,10549],{"class":898},[199,56555,17818],{"class":878},[199,56557,895],{"class":205},[199,56559,10549],{"class":898},[199,56561,56562],{"class":878}," cols",[199,56564,895],{"class":205},[199,56566,56567],{"class":898},"\"30\"",[199,56569,56570],{"class":878}," rows",[199,56572,895],{"class":205},[199,56574,56575],{"class":898},"\"10\"",[199,56577,882],{"class":205},[199,56579,56580],{"class":201,"line":1031},[199,56581,56582],{"class":205},"        用户注册协议\n",[199,56584,56585],{"class":201,"line":1043},[199,56586,56587],{"class":205},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[199,56589,56590],{"class":201,"line":1049},[199,56591,56592],{"class":205},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[199,56594,56595,56597,56599],{"class":201,"line":1054},[199,56596,1404],{"class":205},[199,56598,56547],{"class":874},[199,56600,882],{"class":205},[199,56602,56603,56605,56607],{"class":201,"line":1062},[199,56604,1824],{"class":205},[199,56606,55975],{"class":874},[199,56608,882],{"class":205},[199,56610,56611,56613,56615,56617,56619,56622,56624,56627,56629],{"class":201,"line":1075},[199,56612,1824],{"class":205},[199,56614,56146],{"class":874},[199,56616,55745],{"class":878},[199,56618,895],{"class":205},[199,56620,56621],{"class":898},"\"btn\"",[199,56623,56149],{"class":878},[199,56625,56626],{"class":205},">我已经阅读用户协议(5)\u003C\u002F",[199,56628,56146],{"class":874},[199,56630,882],{"class":205},[199,56632,56633,56635,56637],{"class":201,"line":1092},[199,56634,1824],{"class":205},[199,56636,1446],{"class":874},[199,56638,882],{"class":205},[199,56640,56641],{"class":201,"line":1107},[199,56642,56643],{"class":1454},"    \u002F\u002F 1. 获取元素\n",[199,56645,56646,56648,56651,56653,56656,56659,56661,56664],{"class":201,"line":1128},[199,56647,14084],{"class":1086},[199,56649,56650],{"class":1018}," btn",[199,56652,16425],{"class":1086},[199,56654,56655],{"class":205}," document.",[199,56657,56658],{"class":878},"querySelector",[199,56660,1537],{"class":205},[199,56662,56663],{"class":898},"'.btn'",[199,56665,1594],{"class":205},[199,56667,56668],{"class":201,"line":1146},[199,56669,56670],{"class":1454},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[199,56672,56673],{"class":201,"line":1163},[199,56674,56675],{"class":1454},"    \u002F\u002F 2. 倒计时\n",[199,56677,56678,56680,56682,56684],{"class":201,"line":1176},[199,56679,1899],{"class":1086},[199,56681,1490],{"class":205},[199,56683,895],{"class":1086},[199,56685,56686],{"class":1018}," 5\n",[199,56688,56689],{"class":201,"line":1189},[199,56690,56691],{"class":1454},"    \u002F\u002F 2.1 开启定时器\n",[199,56693,56694,56696,56699,56701,56704,56706,56709],{"class":201,"line":1202},[199,56695,1899],{"class":1086},[199,56697,56698],{"class":205}," n ",[199,56700,895],{"class":1086},[199,56702,56703],{"class":878}," setInterval",[199,56705,1537],{"class":205},[199,56707,56708],{"class":1086},"function",[199,56710,56711],{"class":205}," () {\n",[199,56713,56714,56717],{"class":201,"line":1207},[199,56715,56716],{"class":205},"      i",[199,56718,56719],{"class":1086},"--\n",[199,56721,56722,56725,56727,56730,56732],{"class":201,"line":1212},[199,56723,56724],{"class":205},"      btn.innerHTML ",[199,56726,895],{"class":1086},[199,56728,56729],{"class":898}," `我已经阅读用户协议(${",[199,56731,1548],{"class":205},[199,56733,56734],{"class":898},"})`\n",[199,56736,56737,56740,56743,56746,56748],{"class":201,"line":1225},[199,56738,56739],{"class":1086},"      if",[199,56741,56742],{"class":205}," (i ",[199,56744,56745],{"class":1086},"===",[199,56747,1621],{"class":1018},[199,56749,1513],{"class":205},[199,56751,56752,56755,56758],{"class":201,"line":1236},[199,56753,56754],{"class":878},"        clearInterval",[199,56756,56757],{"class":205},"(n)  ",[199,56759,56760],{"class":1454},"\u002F\u002F 关闭定时器\n",[199,56762,56763],{"class":201,"line":1249},[199,56764,56765],{"class":1454},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[199,56767,56768,56771,56773],{"class":201,"line":1262},[199,56769,56770],{"class":205},"        btn.disabled ",[199,56772,895],{"class":1086},[199,56774,56775],{"class":1018}," false\n",[199,56777,56778,56781,56783],{"class":201,"line":1275},[199,56779,56780],{"class":205},"        btn.innerHTML ",[199,56782,895],{"class":1086},[199,56784,56785],{"class":898}," '同意'\n",[199,56787,56788],{"class":201,"line":1287},[199,56789,2092],{"class":205},[199,56791,56792,56795,56797],{"class":201,"line":1292},[199,56793,56794],{"class":205},"    }, ",[199,56796,9307],{"class":1018},[199,56798,1594],{"class":205},[199,56800,56801],{"class":201,"line":1297},[199,56802,907],{"emptyLinePlaceholder":906},[199,56804,56805,56807,56809],{"class":201,"line":1310},[199,56806,2112],{"class":205},[199,56808,1446],{"class":874},[199,56810,882],{"class":205},[199,56812,56813,56815,56817],{"class":201,"line":1315},[199,56814,1414],{"class":205},[199,56816,1431],{"class":874},[199,56818,882],{"class":205},[199,56820,56821],{"class":201,"line":1330},[199,56822,907],{"emptyLinePlaceholder":906},[199,56824,56825,56827,56829],{"class":201,"line":1335},[199,56826,1414],{"class":205},[199,56828,194],{"class":874},[199,56830,882],{"class":205},[31,56832,56833],{},"不要一直想着用死循环,避免死循环",[31,56835,56836,56839],{},[196,56837,56838],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[627,56841,56843],{"id":56842},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[24,56845,56846],{},[27,56847,56848],{},"法1",[190,56850,56852],{"className":192,"code":56851,"language":194,"meta":57,"style":57},"\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",[196,56853,56854,56864,56878,56882,56890,56904,56924,56936,56944,56950,56961,56972,56976,56980,56987,56999,57003,57007,57014,57026,57040,57053,57067,57071,57075,57082,57093,57104,57115,57127,57139,57151,57155,57159,57167,57177,57190,57202,57215,57219,57223,57230,57240,57252,57264,57275,57286,57296,57308,57320,57324,57328,57337,57349,57361,57389,57402,57406,57410,57417,57428,57432,57440,57448,57452,57460,57474,57489,57513,57521,57536,57549,57557,57578,57590,57602,57614,57626,57638,57650,57662,57671,57679,57687,57695,57707,57730,57749,57768,57787,57806,57825,57844,57864,57868,57888,57907,57927,57948,57959,57976,57986,57996,58006,58011,58016,58021,58026,58051,58064,58068,58091,58095,58103,58111,58119,58123],{"__ignoreMap":57},[199,56855,56856,56858,56860,56862],{"class":201,"line":202},[199,56857,871],{"class":205},[199,56859,875],{"class":874},[199,56861,879],{"class":878},[199,56863,882],{"class":205},[199,56865,56866,56868,56870,56872,56874,56876],{"class":201,"line":36},[199,56867,887],{"class":205},[199,56869,194],{"class":874},[199,56871,892],{"class":878},[199,56873,895],{"class":205},[199,56875,899],{"class":898},[199,56877,882],{"class":205},[199,56879,56880],{"class":201,"line":73},[199,56881,907],{"emptyLinePlaceholder":906},[199,56883,56884,56886,56888],{"class":201,"line":333},[199,56885,887],{"class":205},[199,56887,914],{"class":874},[199,56889,882],{"class":205},[199,56891,56892,56894,56896,56898,56900,56902],{"class":201,"line":227},[199,56893,1824],{"class":205},[199,56895,924],{"class":874},[199,56897,927],{"class":878},[199,56899,895],{"class":205},[199,56901,932],{"class":898},[199,56903,882],{"class":205},[199,56905,56906,56908,56910,56912,56914,56916,56918,56920,56922],{"class":201,"line":238},[199,56907,1824],{"class":205},[199,56909,924],{"class":874},[199,56911,967],{"class":878},[199,56913,895],{"class":205},[199,56915,972],{"class":898},[199,56917,951],{"class":878},[199,56919,895],{"class":205},[199,56921,979],{"class":898},[199,56923,882],{"class":205},[199,56925,56926,56928,56930,56932,56934],{"class":201,"line":252},[199,56927,1824],{"class":205},[199,56929,988],{"class":874},[199,56931,991],{"class":205},[199,56933,988],{"class":874},[199,56935,882],{"class":205},[199,56937,56938,56940,56942],{"class":201,"line":388},[199,56939,1824],{"class":205},[199,56941,1002],{"class":874},[199,56943,882],{"class":205},[199,56945,56946,56948],{"class":201,"line":415},[199,56947,9300],{"class":874},[199,56949,1012],{"class":205},[199,56951,56952,56955,56957,56959],{"class":201,"line":426},[199,56953,56954],{"class":1018},"      padding",[199,56956,1022],{"class":205},[199,56958,1025],{"class":1018},[199,56960,1028],{"class":205},[199,56962,56963,56966,56968,56970],{"class":201,"line":1015},[199,56964,56965],{"class":1018},"      margin",[199,56967,1022],{"class":205},[199,56969,1025],{"class":1018},[199,56971,1028],{"class":205},[199,56973,56974],{"class":201,"line":1031},[199,56975,2097],{"class":205},[199,56977,56978],{"class":201,"line":1043},[199,56979,907],{"emptyLinePlaceholder":906},[199,56981,56982,56985],{"class":201,"line":1049},[199,56983,56984],{"class":874},"    li",[199,56986,1012],{"class":205},[199,56988,56989,56992,56994,56997],{"class":201,"line":1054},[199,56990,56991],{"class":1018},"      list-style",[199,56993,1022],{"class":205},[199,56995,56996],{"class":1018},"none",[199,56998,1028],{"class":205},[199,57000,57001],{"class":201,"line":1062},[199,57002,2097],{"class":205},[199,57004,57005],{"class":201,"line":1075},[199,57006,907],{"emptyLinePlaceholder":906},[199,57008,57009,57012],{"class":201,"line":1092},[199,57010,57011],{"class":878},"    .box",[199,57013,1012],{"class":205},[199,57015,57016,57019,57021,57024],{"class":201,"line":1107},[199,57017,57018],{"class":1018},"      position",[199,57020,1022],{"class":205},[199,57022,57023],{"class":1018},"relative",[199,57025,1028],{"class":205},[199,57027,57028,57031,57033,57036,57038],{"class":201,"line":1128},[199,57029,57030],{"class":1018},"      width",[199,57032,1022],{"class":205},[199,57034,57035],{"class":1018},"976",[199,57037,1087],{"class":1086},[199,57039,1028],{"class":205},[199,57041,57042,57045,57047,57049,57051],{"class":201,"line":1146},[199,57043,57044],{"class":1018},"      height",[199,57046,1022],{"class":205},[199,57048,4478],{"class":1018},[199,57050,1087],{"class":1086},[199,57052,1028],{"class":205},[199,57054,57055,57057,57059,57061,57063,57065],{"class":201,"line":1163},[199,57056,56965],{"class":1018},[199,57058,1022],{"class":205},[199,57060,3396],{"class":1018},[199,57062,1087],{"class":1086},[199,57064,1158],{"class":1018},[199,57066,1028],{"class":205},[199,57068,57069],{"class":201,"line":1176},[199,57070,2097],{"class":205},[199,57072,57073],{"class":201,"line":1189},[199,57074,907],{"emptyLinePlaceholder":906},[199,57076,57077,57080],{"class":201,"line":1202},[199,57078,57079],{"class":878},"    .slider-footer",[199,57081,1012],{"class":205},[199,57083,57084,57086,57088,57091],{"class":201,"line":1207},[199,57085,57018],{"class":1018},[199,57087,1022],{"class":205},[199,57089,57090],{"class":1018},"absolute",[199,57092,1028],{"class":205},[199,57094,57095,57098,57100,57102],{"class":201,"line":1212},[199,57096,57097],{"class":1018},"      left",[199,57099,1022],{"class":205},[199,57101,1025],{"class":1018},[199,57103,1028],{"class":205},[199,57105,57106,57109,57111,57113],{"class":201,"line":1225},[199,57107,57108],{"class":1018},"      bottom",[199,57110,1022],{"class":205},[199,57112,1025],{"class":1018},[199,57114,1028],{"class":205},[199,57116,57117,57119,57121,57123,57125],{"class":201,"line":1236},[199,57118,57030],{"class":1018},[199,57120,1022],{"class":205},[199,57122,3396],{"class":1018},[199,57124,3412],{"class":1086},[199,57126,1028],{"class":205},[199,57128,57129,57131,57133,57135,57137],{"class":201,"line":1249},[199,57130,57044],{"class":1018},[199,57132,1022],{"class":205},[199,57134,3655],{"class":1018},[199,57136,3412],{"class":1086},[199,57138,1028],{"class":205},[199,57140,57141,57144,57146,57149],{"class":201,"line":1262},[199,57142,57143],{"class":1018},"      background-color",[199,57145,1022],{"class":205},[199,57147,57148],{"class":1018},"skyblue",[199,57150,1028],{"class":205},[199,57152,57153],{"class":201,"line":1275},[199,57154,2097],{"class":205},[199,57156,57157],{"class":201,"line":1287},[199,57158,907],{"emptyLinePlaceholder":906},[199,57160,57161,57163,57165],{"class":201,"line":1292},[199,57162,57079],{"class":878},[199,57164,9722],{"class":874},[199,57166,1012],{"class":205},[199,57168,57169,57171,57173,57175],{"class":201,"line":1297},[199,57170,57018],{"class":1018},[199,57172,1022],{"class":205},[199,57174,57090],{"class":1018},[199,57176,1028],{"class":205},[199,57178,57179,57182,57184,57186,57188],{"class":201,"line":1310},[199,57180,57181],{"class":1018},"      font-size",[199,57183,1022],{"class":205},[199,57185,3979],{"class":1018},[199,57187,1087],{"class":1086},[199,57189,1028],{"class":205},[199,57191,57192,57194,57196,57198,57200],{"class":201,"line":1315},[199,57193,57097],{"class":1018},[199,57195,1022],{"class":205},[199,57197,3779],{"class":1018},[199,57199,1087],{"class":1086},[199,57201,1028],{"class":205},[199,57203,57204,57207,57209,57211,57213],{"class":201,"line":1330},[199,57205,57206],{"class":1018},"      top",[199,57208,1022],{"class":205},[199,57210,1909],{"class":1018},[199,57212,1087],{"class":1086},[199,57214,1028],{"class":205},[199,57216,57217],{"class":201,"line":1335},[199,57218,2097],{"class":205},[199,57220,57221],{"class":201,"line":1340},[199,57222,907],{"emptyLinePlaceholder":906},[199,57224,57225,57228],{"class":201,"line":1352},[199,57226,57227],{"class":874},"    ul",[199,57229,1012],{"class":205},[199,57231,57232,57234,57236,57238],{"class":201,"line":1367},[199,57233,57018],{"class":1018},[199,57235,1022],{"class":205},[199,57237,57090],{"class":1018},[199,57239,1028],{"class":205},[199,57241,57242,57244,57246,57248,57250],{"class":201,"line":1381},[199,57243,57206],{"class":1018},[199,57245,1022],{"class":205},[199,57247,3860],{"class":1018},[199,57249,1087],{"class":1086},[199,57251,1028],{"class":205},[199,57253,57254,57256,57258,57260,57262],{"class":201,"line":1396},[199,57255,57097],{"class":1018},[199,57257,1022],{"class":205},[199,57259,3779],{"class":1018},[199,57261,1087],{"class":1086},[199,57263,1028],{"class":205},[199,57265,57266,57269,57271,57273],{"class":201,"line":1401},[199,57267,57268],{"class":1018},"      display",[199,57270,1022],{"class":205},[199,57272,1070],{"class":1018},[199,57274,1028],{"class":205},[199,57276,57277,57280,57282,57284],{"class":201,"line":1411},[199,57278,57279],{"class":1018},"      justify-content",[199,57281,1022],{"class":205},[199,57283,1282],{"class":1018},[199,57285,1028],{"class":205},[199,57287,57288,57290,57292,57294],{"class":201,"line":1421},[199,57289,57018],{"class":1018},[199,57291,1022],{"class":205},[199,57293,57090],{"class":1018},[199,57295,1028],{"class":205},[199,57297,57298,57300,57302,57304,57306],{"class":201,"line":1426},[199,57299,57030],{"class":1018},[199,57301,1022],{"class":205},[199,57303,6891],{"class":1018},[199,57305,1087],{"class":1086},[199,57307,1028],{"class":205},[199,57309,57310,57312,57314,57316,57318],{"class":201,"line":1436},[199,57311,57044],{"class":1018},[199,57313,1022],{"class":205},[199,57315,3779],{"class":1018},[199,57317,1087],{"class":1086},[199,57319,1028],{"class":205},[199,57321,57322],{"class":201,"line":1441},[199,57323,2097],{"class":205},[199,57325,57326],{"class":201,"line":1451},[199,57327,907],{"emptyLinePlaceholder":906},[199,57329,57330,57332,57335],{"class":201,"line":1458},[199,57331,57227],{"class":874},[199,57333,57334],{"class":874}," li",[199,57336,1012],{"class":205},[199,57338,57339,57341,57343,57345,57347],{"class":201,"line":1464},[199,57340,57030],{"class":1018},[199,57342,1022],{"class":205},[199,57344,3779],{"class":1018},[199,57346,1087],{"class":1086},[199,57348,1028],{"class":205},[199,57350,57351,57353,57355,57357,57359],{"class":201,"line":1478},[199,57352,57044],{"class":1018},[199,57354,1022],{"class":205},[199,57356,3779],{"class":1018},[199,57358,1087],{"class":1086},[199,57360,1028],{"class":205},[199,57362,57363,57365,57367,57370,57372,57374,57376,57378,57380,57382,57384,57387],{"class":201,"line":1516},[199,57364,57143],{"class":1018},[199,57366,1022],{"class":205},[199,57368,57369],{"class":1018},"rgba",[199,57371,1537],{"class":205},[199,57373,1025],{"class":1018},[199,57375,1912],{"class":205},[199,57377,1025],{"class":1018},[199,57379,1912],{"class":205},[199,57381,1025],{"class":1018},[199,57383,1912],{"class":205},[199,57385,57386],{"class":1018},".4",[199,57388,5623],{"class":205},[199,57390,57391,57394,57396,57398,57400],{"class":201,"line":1522},[199,57392,57393],{"class":1018},"      border-radius",[199,57395,1022],{"class":205},[199,57397,3528],{"class":1018},[199,57399,1087],{"class":1086},[199,57401,1028],{"class":205},[199,57403,57404],{"class":201,"line":1528},[199,57405,2097],{"class":205},[199,57407,57408],{"class":201,"line":1557},[199,57409,907],{"emptyLinePlaceholder":906},[199,57411,57412,57415],{"class":201,"line":1563},[199,57413,57414],{"class":878},"    .activate",[199,57416,1012],{"class":205},[199,57418,57419,57421,57423,57426],{"class":201,"line":1568},[199,57420,57143],{"class":1018},[199,57422,1022],{"class":205},[199,57424,57425],{"class":1018},"#f7f7f7",[199,57427,1028],{"class":205},[199,57429,57430],{"class":201,"line":1574},[199,57431,2097],{"class":205},[199,57433,57434,57436,57438],{"class":201,"line":1580},[199,57435,2112],{"class":205},[199,57437,1002],{"class":874},[199,57439,882],{"class":205},[199,57441,57442,57444,57446],{"class":201,"line":1597},[199,57443,1414],{"class":205},[199,57445,914],{"class":874},[199,57447,882],{"class":205},[199,57449,57450],{"class":201,"line":1602},[199,57451,907],{"emptyLinePlaceholder":906},[199,57453,57454,57456,57458],{"class":201,"line":1608},[199,57455,887],{"class":205},[199,57457,1431],{"class":874},[199,57459,882],{"class":205},[199,57461,57462,57464,57466,57468,57470,57472],{"class":201,"line":1640},[199,57463,1824],{"class":205},[199,57465,1220],{"class":874},[199,57467,55745],{"class":878},[199,57469,895],{"class":205},[199,57471,55750],{"class":898},[199,57473,882],{"class":205},[199,57475,57476,57478,57480,57482,57484,57487],{"class":201,"line":1653},[199,57477,921],{"class":205},[199,57479,1220],{"class":874},[199,57481,55745],{"class":878},[199,57483,895],{"class":205},[199,57485,57486],{"class":898},"\"slider-wrapper\"",[199,57488,882],{"class":205},[199,57490,57491,57494,57496,57499,57501,57504,57507,57509,57511],{"class":201,"line":1673},[199,57492,57493],{"class":205},"      \u003C",[199,57495,55],{"class":874},[199,57497,57498],{"class":878}," src",[199,57500,895],{"class":205},[199,57502,57503],{"class":898},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[199,57505,57506],{"class":878}," alt",[199,57508,895],{"class":205},[199,57510,10549],{"class":898},[199,57512,882],{"class":205},[199,57514,57515,57517,57519],{"class":201,"line":1690},[199,57516,1404],{"class":205},[199,57518,1220],{"class":874},[199,57520,882],{"class":205},[199,57522,57523,57525,57527,57529,57531,57534],{"class":201,"line":1706},[199,57524,921],{"class":205},[199,57526,1220],{"class":874},[199,57528,55745],{"class":878},[199,57530,895],{"class":205},[199,57532,57533],{"class":898},"\"slider-footer\"",[199,57535,882],{"class":205},[199,57537,57538,57540,57542,57545,57547],{"class":201,"line":1712},[199,57539,57493],{"class":205},[199,57541,31],{"class":874},[199,57543,57544],{"class":205},">对人类来说会不会太超前了?\u003C\u002F",[199,57546,31],{"class":874},[199,57548,882],{"class":205},[199,57550,57551,57553,57555],{"class":201,"line":1720},[199,57552,57493],{"class":205},[199,57554,176],{"class":874},[199,57556,882],{"class":205},[199,57558,57559,57562,57564,57566,57568,57571,57574,57576],{"class":201,"line":1725},[199,57560,57561],{"class":205},"        \u003C",[199,57563,27],{"class":874},[199,57565,55745],{"class":878},[199,57567,895],{"class":205},[199,57569,57570],{"class":898},"\"activate\"",[199,57572,57573],{"class":205},">\u003C\u002F",[199,57575,27],{"class":874},[199,57577,882],{"class":205},[199,57579,57580,57582,57584,57586,57588],{"class":201,"line":1731},[199,57581,57561],{"class":205},[199,57583,27],{"class":874},[199,57585,57573],{"class":205},[199,57587,27],{"class":874},[199,57589,882],{"class":205},[199,57591,57592,57594,57596,57598,57600],{"class":201,"line":1745},[199,57593,57561],{"class":205},[199,57595,27],{"class":874},[199,57597,57573],{"class":205},[199,57599,27],{"class":874},[199,57601,882],{"class":205},[199,57603,57604,57606,57608,57610,57612],{"class":201,"line":1754},[199,57605,57561],{"class":205},[199,57607,27],{"class":874},[199,57609,57573],{"class":205},[199,57611,27],{"class":874},[199,57613,882],{"class":205},[199,57615,57616,57618,57620,57622,57624],{"class":201,"line":1763},[199,57617,57561],{"class":205},[199,57619,27],{"class":874},[199,57621,57573],{"class":205},[199,57623,27],{"class":874},[199,57625,882],{"class":205},[199,57627,57628,57630,57632,57634,57636],{"class":201,"line":1768},[199,57629,57561],{"class":205},[199,57631,27],{"class":874},[199,57633,57573],{"class":205},[199,57635,27],{"class":874},[199,57637,882],{"class":205},[199,57639,57640,57642,57644,57646,57648],{"class":201,"line":19628},[199,57641,57561],{"class":205},[199,57643,27],{"class":874},[199,57645,57573],{"class":205},[199,57647,27],{"class":874},[199,57649,882],{"class":205},[199,57651,57652,57654,57656,57658,57660],{"class":201,"line":19641},[199,57653,57561],{"class":205},[199,57655,27],{"class":874},[199,57657,57573],{"class":205},[199,57659,27],{"class":874},[199,57661,882],{"class":205},[199,57663,57664,57667,57669],{"class":201,"line":19646},[199,57665,57666],{"class":205},"      \u003C\u002F",[199,57668,176],{"class":874},[199,57670,882],{"class":205},[199,57672,57673,57675,57677],{"class":201,"line":19660},[199,57674,1404],{"class":205},[199,57676,1220],{"class":874},[199,57678,882],{"class":205},[199,57680,57681,57683,57685],{"class":201,"line":19665},[199,57682,2112],{"class":205},[199,57684,1220],{"class":874},[199,57686,882],{"class":205},[199,57688,57689,57691,57693],{"class":201,"line":19671},[199,57690,1824],{"class":205},[199,57692,1446],{"class":874},[199,57694,882],{"class":205},[199,57696,57697,57699,57702,57704],{"class":201,"line":19676},[199,57698,14084],{"class":1086},[199,57700,57701],{"class":1018}," arrImage",[199,57703,16425],{"class":1086},[199,57705,57706],{"class":205}," [\n",[199,57708,57709,57712,57715,57718,57721,57724,57727],{"class":201,"line":19690},[199,57710,57711],{"class":205},"      { url: ",[199,57713,57714],{"class":898},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[199,57716,57717],{"class":205},", title: ",[199,57719,57720],{"class":898},"'对人类来说会不会太超前了?'",[199,57722,57723],{"class":205},", color: ",[199,57725,57726],{"class":898},"'rgba(100,67,68)'",[199,57728,57729],{"class":205}," },\n",[199,57731,57732,57734,57737,57739,57742,57744,57747],{"class":201,"line":19695},[199,57733,57711],{"class":205},[199,57735,57736],{"class":898},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[199,57738,57717],{"class":205},[199,57740,57741],{"class":898},"'开启剑与雪的黑暗传说!'",[199,57743,57723],{"class":205},[199,57745,57746],{"class":898},"'rgba(43,35,26)'",[199,57748,57729],{"class":205},[199,57750,57751,57753,57756,57758,57761,57763,57766],{"class":201,"line":19700},[199,57752,57711],{"class":205},[199,57754,57755],{"class":898},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[199,57757,57717],{"class":205},[199,57759,57760],{"class":898},"'真正的jo厨出现了!'",[199,57762,57723],{"class":205},[199,57764,57765],{"class":898},"'rgba(36,31,33)'",[199,57767,57729],{"class":205},[199,57769,57770,57772,57775,57777,57780,57782,57785],{"class":201,"line":19714},[199,57771,57711],{"class":205},[199,57773,57774],{"class":898},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[199,57776,57717],{"class":205},[199,57778,57779],{"class":898},"'李玉刚:让世界通过b站看到东方大国文化'",[199,57781,57723],{"class":205},[199,57783,57784],{"class":898},"'rgba(139,98,66)'",[199,57786,57729],{"class":205},[199,57788,57789,57791,57794,57796,57799,57801,57804],{"class":201,"line":19726},[199,57790,57711],{"class":205},[199,57792,57793],{"class":898},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[199,57795,57717],{"class":205},[199,57797,57798],{"class":898},"'快来分享你的寒假日常吧'",[199,57800,57723],{"class":205},[199,57802,57803],{"class":898},"'rgba(67,90,92)'",[199,57805,57729],{"class":205},[199,57807,57808,57810,57813,57815,57818,57820,57823],{"class":201,"line":19731},[199,57809,57711],{"class":205},[199,57811,57812],{"class":898},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[199,57814,57717],{"class":205},[199,57816,57817],{"class":898},"'哔哩哔哩小年YEAR'",[199,57819,57723],{"class":205},[199,57821,57822],{"class":898},"'rgba(166,131,143)'",[199,57824,57729],{"class":205},[199,57826,57827,57829,57832,57834,57837,57839,57842],{"class":201,"line":19744},[199,57828,57711],{"class":205},[199,57830,57831],{"class":898},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[199,57833,57717],{"class":205},[199,57835,57836],{"class":898},"'一站式解决你的电脑配置问题'",[199,57838,57723],{"class":205},[199,57840,57841],{"class":898},"'rgba(53,29,25)'",[199,57843,57729],{"class":205},[199,57845,57846,57848,57851,57853,57856,57858,57861],{"class":201,"line":19749},[199,57847,57711],{"class":205},[199,57849,57850],{"class":898},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[199,57852,57717],{"class":205},[199,57854,57855],{"class":898},"'谁不想和小猫咪贴贴呢?'",[199,57857,57723],{"class":205},[199,57859,57860],{"class":898},"'rgba(99,72,114)'",[199,57862,57863],{"class":205}," }\n",[199,57865,57866],{"class":201,"line":19754},[199,57867,2805],{"class":205},[199,57869,57870,57872,57875,57877,57879,57881,57883,57886],{"class":201,"line":19759},[199,57871,14084],{"class":1086},[199,57873,57874],{"class":1018}," img",[199,57876,16425],{"class":1086},[199,57878,56655],{"class":205},[199,57880,56658],{"class":878},[199,57882,1537],{"class":205},[199,57884,57885],{"class":898},"'.slider-wrapper img'",[199,57887,1594],{"class":205},[199,57889,57890,57892,57894,57896,57898,57900,57902,57905],{"class":201,"line":19772},[199,57891,14084],{"class":1086},[199,57893,9722],{"class":1018},[199,57895,16425],{"class":1086},[199,57897,56655],{"class":205},[199,57899,56658],{"class":878},[199,57901,1537],{"class":205},[199,57903,57904],{"class":898},"'.slider-footer p'",[199,57906,1594],{"class":205},[199,57908,57909,57911,57914,57916,57918,57920,57922,57925],{"class":201,"line":19777},[199,57910,14084],{"class":1086},[199,57912,57913],{"class":1018}," color",[199,57915,16425],{"class":1086},[199,57917,56655],{"class":205},[199,57919,56658],{"class":878},[199,57921,1537],{"class":205},[199,57923,57924],{"class":898},"'.slider-footer'",[199,57926,1594],{"class":205},[199,57928,57929,57931,57934,57936,57938,57941,57943,57946],{"class":201,"line":35475},[199,57930,14084],{"class":1086},[199,57932,57933],{"class":1018}," lis",[199,57935,16425],{"class":1086},[199,57937,56655],{"class":205},[199,57939,57940],{"class":878},"querySelectorAll",[199,57942,1537],{"class":205},[199,57944,57945],{"class":898},"'.slider-footer ul li'",[199,57947,1594],{"class":205},[199,57949,57950,57952,57954,57956],{"class":201,"line":35481},[199,57951,1899],{"class":1086},[199,57953,1490],{"class":205},[199,57955,895],{"class":1086},[199,57957,57958],{"class":1018}," 1\n",[199,57960,57961,57963,57966,57968,57970,57972,57974],{"class":201,"line":35487},[199,57962,1899],{"class":1086},[199,57964,57965],{"class":205}," timer ",[199,57967,895],{"class":1086},[199,57969,56703],{"class":878},[199,57971,1537],{"class":205},[199,57973,56708],{"class":1086},[199,57975,56711],{"class":205},[199,57977,57978,57981,57983],{"class":201,"line":35493},[199,57979,57980],{"class":205},"      img.src ",[199,57982,895],{"class":1086},[199,57984,57985],{"class":205}," arrImage[i].url\n",[199,57987,57988,57991,57993],{"class":201,"line":35499},[199,57989,57990],{"class":205},"      p.innerHTML ",[199,57992,895],{"class":1086},[199,57994,57995],{"class":205}," arrImage[i].title\n",[199,57997,57998,58001,58003],{"class":201,"line":35510},[199,57999,58000],{"class":205},"      color.style.backgroundColor ",[199,58002,895],{"class":1086},[199,58004,58005],{"class":205}," arrImage[i].color\n",[199,58007,58008],{"class":201,"line":35516},[199,58009,58010],{"class":1454},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[199,58012,58013],{"class":201,"line":35536},[199,58014,58015],{"class":1454},"      \u002F\u002F li.classList.add('activate')\n",[199,58017,58018],{"class":201,"line":35542},[199,58019,58020],{"class":1454},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[199,58022,58023],{"class":201,"line":35553},[199,58024,58025],{"class":1454},"      \u002F\u002F lis[i].classList.remove('activate')\n",[199,58027,58028,58031,58033,58035,58038,58041,58044,58046,58049],{"class":201,"line":35559},[199,58029,58030],{"class":205},"      document.",[199,58032,56658],{"class":878},[199,58034,1537],{"class":205},[199,58036,58037],{"class":898},"'.activate'",[199,58039,58040],{"class":205},")?.classList.",[199,58042,58043],{"class":878},"toggle",[199,58045,1537],{"class":205},[199,58047,58048],{"class":898},"'activate'",[199,58050,1594],{"class":205},[199,58052,58053,58056,58058,58060,58062],{"class":201,"line":35565},[199,58054,58055],{"class":205},"      lis[i].classList.",[199,58057,8231],{"class":878},[199,58059,1537],{"class":205},[199,58061,58048],{"class":898},[199,58063,1594],{"class":205},[199,58065,58066],{"class":201,"line":35571},[199,58067,907],{"emptyLinePlaceholder":906},[199,58069,58070,58073,58075,58077,58079,58081,58083,58085,58088],{"class":201,"line":35577},[199,58071,58072],{"class":205},"      i ",[199,58074,895],{"class":1086},[199,58076,56742],{"class":205},[199,58078,2028],{"class":1086},[199,58080,1495],{"class":1018},[199,58082,16575],{"class":205},[199,58084,3412],{"class":1086},[199,58086,58087],{"class":205}," arrImage.",[199,58089,58090],{"class":1018},"length\n",[199,58092,58093],{"class":201,"line":35583},[199,58094,907],{"emptyLinePlaceholder":906},[199,58096,58097,58099,58101],{"class":201,"line":35589},[199,58098,56794],{"class":205},[199,58100,9307],{"class":1018},[199,58102,1594],{"class":205},[199,58104,58105,58107,58109],{"class":201,"line":35595},[199,58106,2112],{"class":205},[199,58108,1446],{"class":874},[199,58110,882],{"class":205},[199,58112,58113,58115,58117],{"class":201,"line":35615},[199,58114,1414],{"class":205},[199,58116,1431],{"class":874},[199,58118,882],{"class":205},[199,58120,58121],{"class":201,"line":35621},[199,58122,907],{"emptyLinePlaceholder":906},[199,58124,58125,58127,58129],{"class":201,"line":35637},[199,58126,1414],{"class":205},[199,58128,194],{"class":874},[199,58130,882],{"class":205},[31,58132,58133],{},[55,58134],{"alt":57,"src":58135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[31,58137,58138],{},"?.就是短路保护,确保输出正常进行",[31,58140,58141],{},"不要忘记取余%,有时候可以用",[31,58143,58144],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[24,58146,58147],{"start":36},[27,58148,58149],{},"法2",[190,58151,58153],{"className":192,"code":58152,"language":194,"meta":57,"style":57},"\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",[196,58154,58155,58165,58179,58183,58191,58205,58225,58237,58245,58251,58261,58271,58275,58279,58285,58295,58299,58303,58309,58319,58331,58343,58357,58361,58365,58371,58381,58391,58401,58413,58425,58435,58439,58443,58451,58461,58473,58485,58497,58501,58505,58511,58521,58533,58545,58555,58565,58575,58587,58599,58603,58607,58615,58627,58639,58665,58677,58681,58685,58691,58701,58705,58713,58721,58725,58733,58747,58761,58781,58789,58803,58815,58823,58841,58853,58865,58877,58889,58901,58913,58925,58933,58941,58949,58957,58968,58984,59000,59016,59032,59048,59064,59080,59096,59100,59105,59123,59141,59151,59156,59161,59172,59178,59193,59202,59206,59211,59220,59225,59234,59239,59244,59249,59272,59302,59306,59314,59318,59326,59334,59338],{"__ignoreMap":57},[199,58156,58157,58159,58161,58163],{"class":201,"line":202},[199,58158,871],{"class":205},[199,58160,875],{"class":874},[199,58162,879],{"class":878},[199,58164,882],{"class":205},[199,58166,58167,58169,58171,58173,58175,58177],{"class":201,"line":36},[199,58168,887],{"class":205},[199,58170,194],{"class":874},[199,58172,892],{"class":878},[199,58174,895],{"class":205},[199,58176,899],{"class":898},[199,58178,882],{"class":205},[199,58180,58181],{"class":201,"line":73},[199,58182,907],{"emptyLinePlaceholder":906},[199,58184,58185,58187,58189],{"class":201,"line":333},[199,58186,887],{"class":205},[199,58188,914],{"class":874},[199,58190,882],{"class":205},[199,58192,58193,58195,58197,58199,58201,58203],{"class":201,"line":227},[199,58194,1824],{"class":205},[199,58196,924],{"class":874},[199,58198,927],{"class":878},[199,58200,895],{"class":205},[199,58202,932],{"class":898},[199,58204,882],{"class":205},[199,58206,58207,58209,58211,58213,58215,58217,58219,58221,58223],{"class":201,"line":238},[199,58208,1824],{"class":205},[199,58210,924],{"class":874},[199,58212,967],{"class":878},[199,58214,895],{"class":205},[199,58216,972],{"class":898},[199,58218,951],{"class":878},[199,58220,895],{"class":205},[199,58222,979],{"class":898},[199,58224,882],{"class":205},[199,58226,58227,58229,58231,58233,58235],{"class":201,"line":252},[199,58228,1824],{"class":205},[199,58230,988],{"class":874},[199,58232,991],{"class":205},[199,58234,988],{"class":874},[199,58236,882],{"class":205},[199,58238,58239,58241,58243],{"class":201,"line":388},[199,58240,1824],{"class":205},[199,58242,1002],{"class":874},[199,58244,882],{"class":205},[199,58246,58247,58249],{"class":201,"line":415},[199,58248,9300],{"class":874},[199,58250,1012],{"class":205},[199,58252,58253,58255,58257,58259],{"class":201,"line":426},[199,58254,56954],{"class":1018},[199,58256,1022],{"class":205},[199,58258,1025],{"class":1018},[199,58260,1028],{"class":205},[199,58262,58263,58265,58267,58269],{"class":201,"line":1015},[199,58264,56965],{"class":1018},[199,58266,1022],{"class":205},[199,58268,1025],{"class":1018},[199,58270,1028],{"class":205},[199,58272,58273],{"class":201,"line":1031},[199,58274,2097],{"class":205},[199,58276,58277],{"class":201,"line":1043},[199,58278,907],{"emptyLinePlaceholder":906},[199,58280,58281,58283],{"class":201,"line":1049},[199,58282,56984],{"class":874},[199,58284,1012],{"class":205},[199,58286,58287,58289,58291,58293],{"class":201,"line":1054},[199,58288,56991],{"class":1018},[199,58290,1022],{"class":205},[199,58292,56996],{"class":1018},[199,58294,1028],{"class":205},[199,58296,58297],{"class":201,"line":1062},[199,58298,2097],{"class":205},[199,58300,58301],{"class":201,"line":1075},[199,58302,907],{"emptyLinePlaceholder":906},[199,58304,58305,58307],{"class":201,"line":1092},[199,58306,57011],{"class":878},[199,58308,1012],{"class":205},[199,58310,58311,58313,58315,58317],{"class":201,"line":1107},[199,58312,57018],{"class":1018},[199,58314,1022],{"class":205},[199,58316,57023],{"class":1018},[199,58318,1028],{"class":205},[199,58320,58321,58323,58325,58327,58329],{"class":201,"line":1128},[199,58322,57030],{"class":1018},[199,58324,1022],{"class":205},[199,58326,57035],{"class":1018},[199,58328,1087],{"class":1086},[199,58330,1028],{"class":205},[199,58332,58333,58335,58337,58339,58341],{"class":201,"line":1146},[199,58334,57044],{"class":1018},[199,58336,1022],{"class":205},[199,58338,4478],{"class":1018},[199,58340,1087],{"class":1086},[199,58342,1028],{"class":205},[199,58344,58345,58347,58349,58351,58353,58355],{"class":201,"line":1163},[199,58346,56965],{"class":1018},[199,58348,1022],{"class":205},[199,58350,3396],{"class":1018},[199,58352,1087],{"class":1086},[199,58354,1158],{"class":1018},[199,58356,1028],{"class":205},[199,58358,58359],{"class":201,"line":1176},[199,58360,2097],{"class":205},[199,58362,58363],{"class":201,"line":1189},[199,58364,907],{"emptyLinePlaceholder":906},[199,58366,58367,58369],{"class":201,"line":1202},[199,58368,57079],{"class":878},[199,58370,1012],{"class":205},[199,58372,58373,58375,58377,58379],{"class":201,"line":1207},[199,58374,57018],{"class":1018},[199,58376,1022],{"class":205},[199,58378,57090],{"class":1018},[199,58380,1028],{"class":205},[199,58382,58383,58385,58387,58389],{"class":201,"line":1212},[199,58384,57097],{"class":1018},[199,58386,1022],{"class":205},[199,58388,1025],{"class":1018},[199,58390,1028],{"class":205},[199,58392,58393,58395,58397,58399],{"class":201,"line":1225},[199,58394,57108],{"class":1018},[199,58396,1022],{"class":205},[199,58398,1025],{"class":1018},[199,58400,1028],{"class":205},[199,58402,58403,58405,58407,58409,58411],{"class":201,"line":1236},[199,58404,57030],{"class":1018},[199,58406,1022],{"class":205},[199,58408,3396],{"class":1018},[199,58410,3412],{"class":1086},[199,58412,1028],{"class":205},[199,58414,58415,58417,58419,58421,58423],{"class":201,"line":1249},[199,58416,57044],{"class":1018},[199,58418,1022],{"class":205},[199,58420,3655],{"class":1018},[199,58422,3412],{"class":1086},[199,58424,1028],{"class":205},[199,58426,58427,58429,58431,58433],{"class":201,"line":1262},[199,58428,57143],{"class":1018},[199,58430,1022],{"class":205},[199,58432,57148],{"class":1018},[199,58434,1028],{"class":205},[199,58436,58437],{"class":201,"line":1275},[199,58438,2097],{"class":205},[199,58440,58441],{"class":201,"line":1287},[199,58442,907],{"emptyLinePlaceholder":906},[199,58444,58445,58447,58449],{"class":201,"line":1292},[199,58446,57079],{"class":878},[199,58448,9722],{"class":874},[199,58450,1012],{"class":205},[199,58452,58453,58455,58457,58459],{"class":201,"line":1297},[199,58454,57018],{"class":1018},[199,58456,1022],{"class":205},[199,58458,57090],{"class":1018},[199,58460,1028],{"class":205},[199,58462,58463,58465,58467,58469,58471],{"class":201,"line":1310},[199,58464,57181],{"class":1018},[199,58466,1022],{"class":205},[199,58468,3979],{"class":1018},[199,58470,1087],{"class":1086},[199,58472,1028],{"class":205},[199,58474,58475,58477,58479,58481,58483],{"class":201,"line":1315},[199,58476,57097],{"class":1018},[199,58478,1022],{"class":205},[199,58480,3779],{"class":1018},[199,58482,1087],{"class":1086},[199,58484,1028],{"class":205},[199,58486,58487,58489,58491,58493,58495],{"class":201,"line":1330},[199,58488,57206],{"class":1018},[199,58490,1022],{"class":205},[199,58492,1909],{"class":1018},[199,58494,1087],{"class":1086},[199,58496,1028],{"class":205},[199,58498,58499],{"class":201,"line":1335},[199,58500,2097],{"class":205},[199,58502,58503],{"class":201,"line":1340},[199,58504,907],{"emptyLinePlaceholder":906},[199,58506,58507,58509],{"class":201,"line":1352},[199,58508,57227],{"class":874},[199,58510,1012],{"class":205},[199,58512,58513,58515,58517,58519],{"class":201,"line":1367},[199,58514,57018],{"class":1018},[199,58516,1022],{"class":205},[199,58518,57090],{"class":1018},[199,58520,1028],{"class":205},[199,58522,58523,58525,58527,58529,58531],{"class":201,"line":1381},[199,58524,57206],{"class":1018},[199,58526,1022],{"class":205},[199,58528,3860],{"class":1018},[199,58530,1087],{"class":1086},[199,58532,1028],{"class":205},[199,58534,58535,58537,58539,58541,58543],{"class":201,"line":1396},[199,58536,57097],{"class":1018},[199,58538,1022],{"class":205},[199,58540,3779],{"class":1018},[199,58542,1087],{"class":1086},[199,58544,1028],{"class":205},[199,58546,58547,58549,58551,58553],{"class":201,"line":1401},[199,58548,57268],{"class":1018},[199,58550,1022],{"class":205},[199,58552,1070],{"class":1018},[199,58554,1028],{"class":205},[199,58556,58557,58559,58561,58563],{"class":201,"line":1411},[199,58558,57279],{"class":1018},[199,58560,1022],{"class":205},[199,58562,1282],{"class":1018},[199,58564,1028],{"class":205},[199,58566,58567,58569,58571,58573],{"class":201,"line":1421},[199,58568,57018],{"class":1018},[199,58570,1022],{"class":205},[199,58572,57090],{"class":1018},[199,58574,1028],{"class":205},[199,58576,58577,58579,58581,58583,58585],{"class":201,"line":1426},[199,58578,57030],{"class":1018},[199,58580,1022],{"class":205},[199,58582,6891],{"class":1018},[199,58584,1087],{"class":1086},[199,58586,1028],{"class":205},[199,58588,58589,58591,58593,58595,58597],{"class":201,"line":1436},[199,58590,57044],{"class":1018},[199,58592,1022],{"class":205},[199,58594,3779],{"class":1018},[199,58596,1087],{"class":1086},[199,58598,1028],{"class":205},[199,58600,58601],{"class":201,"line":1441},[199,58602,2097],{"class":205},[199,58604,58605],{"class":201,"line":1451},[199,58606,907],{"emptyLinePlaceholder":906},[199,58608,58609,58611,58613],{"class":201,"line":1458},[199,58610,57227],{"class":874},[199,58612,57334],{"class":874},[199,58614,1012],{"class":205},[199,58616,58617,58619,58621,58623,58625],{"class":201,"line":1464},[199,58618,57030],{"class":1018},[199,58620,1022],{"class":205},[199,58622,3779],{"class":1018},[199,58624,1087],{"class":1086},[199,58626,1028],{"class":205},[199,58628,58629,58631,58633,58635,58637],{"class":201,"line":1478},[199,58630,57044],{"class":1018},[199,58632,1022],{"class":205},[199,58634,3779],{"class":1018},[199,58636,1087],{"class":1086},[199,58638,1028],{"class":205},[199,58640,58641,58643,58645,58647,58649,58651,58653,58655,58657,58659,58661,58663],{"class":201,"line":1516},[199,58642,57143],{"class":1018},[199,58644,1022],{"class":205},[199,58646,57369],{"class":1018},[199,58648,1537],{"class":205},[199,58650,1025],{"class":1018},[199,58652,1912],{"class":205},[199,58654,1025],{"class":1018},[199,58656,1912],{"class":205},[199,58658,1025],{"class":1018},[199,58660,1912],{"class":205},[199,58662,57386],{"class":1018},[199,58664,5623],{"class":205},[199,58666,58667,58669,58671,58673,58675],{"class":201,"line":1522},[199,58668,57393],{"class":1018},[199,58670,1022],{"class":205},[199,58672,3528],{"class":1018},[199,58674,1087],{"class":1086},[199,58676,1028],{"class":205},[199,58678,58679],{"class":201,"line":1528},[199,58680,2097],{"class":205},[199,58682,58683],{"class":201,"line":1557},[199,58684,907],{"emptyLinePlaceholder":906},[199,58686,58687,58689],{"class":201,"line":1563},[199,58688,57414],{"class":878},[199,58690,1012],{"class":205},[199,58692,58693,58695,58697,58699],{"class":201,"line":1568},[199,58694,57143],{"class":1018},[199,58696,1022],{"class":205},[199,58698,57425],{"class":1018},[199,58700,1028],{"class":205},[199,58702,58703],{"class":201,"line":1574},[199,58704,2097],{"class":205},[199,58706,58707,58709,58711],{"class":201,"line":1580},[199,58708,2112],{"class":205},[199,58710,1002],{"class":874},[199,58712,882],{"class":205},[199,58714,58715,58717,58719],{"class":201,"line":1597},[199,58716,1414],{"class":205},[199,58718,914],{"class":874},[199,58720,882],{"class":205},[199,58722,58723],{"class":201,"line":1602},[199,58724,907],{"emptyLinePlaceholder":906},[199,58726,58727,58729,58731],{"class":201,"line":1608},[199,58728,887],{"class":205},[199,58730,1431],{"class":874},[199,58732,882],{"class":205},[199,58734,58735,58737,58739,58741,58743,58745],{"class":201,"line":1640},[199,58736,1824],{"class":205},[199,58738,1220],{"class":874},[199,58740,55745],{"class":878},[199,58742,895],{"class":205},[199,58744,55750],{"class":898},[199,58746,882],{"class":205},[199,58748,58749,58751,58753,58755,58757,58759],{"class":201,"line":1653},[199,58750,921],{"class":205},[199,58752,1220],{"class":874},[199,58754,55745],{"class":878},[199,58756,895],{"class":205},[199,58758,57486],{"class":898},[199,58760,882],{"class":205},[199,58762,58763,58765,58767,58769,58771,58773,58775,58777,58779],{"class":201,"line":1673},[199,58764,57493],{"class":205},[199,58766,55],{"class":874},[199,58768,57498],{"class":878},[199,58770,895],{"class":205},[199,58772,57503],{"class":898},[199,58774,57506],{"class":878},[199,58776,895],{"class":205},[199,58778,10549],{"class":898},[199,58780,882],{"class":205},[199,58782,58783,58785,58787],{"class":201,"line":1690},[199,58784,1404],{"class":205},[199,58786,1220],{"class":874},[199,58788,882],{"class":205},[199,58790,58791,58793,58795,58797,58799,58801],{"class":201,"line":1706},[199,58792,921],{"class":205},[199,58794,1220],{"class":874},[199,58796,55745],{"class":878},[199,58798,895],{"class":205},[199,58800,57533],{"class":898},[199,58802,882],{"class":205},[199,58804,58805,58807,58809,58811,58813],{"class":201,"line":1712},[199,58806,57493],{"class":205},[199,58808,31],{"class":874},[199,58810,57544],{"class":205},[199,58812,31],{"class":874},[199,58814,882],{"class":205},[199,58816,58817,58819,58821],{"class":201,"line":1720},[199,58818,57493],{"class":205},[199,58820,176],{"class":874},[199,58822,882],{"class":205},[199,58824,58825,58827,58829,58831,58833,58835,58837,58839],{"class":201,"line":1725},[199,58826,57561],{"class":205},[199,58828,27],{"class":874},[199,58830,55745],{"class":878},[199,58832,895],{"class":205},[199,58834,57570],{"class":898},[199,58836,57573],{"class":205},[199,58838,27],{"class":874},[199,58840,882],{"class":205},[199,58842,58843,58845,58847,58849,58851],{"class":201,"line":1731},[199,58844,57561],{"class":205},[199,58846,27],{"class":874},[199,58848,57573],{"class":205},[199,58850,27],{"class":874},[199,58852,882],{"class":205},[199,58854,58855,58857,58859,58861,58863],{"class":201,"line":1745},[199,58856,57561],{"class":205},[199,58858,27],{"class":874},[199,58860,57573],{"class":205},[199,58862,27],{"class":874},[199,58864,882],{"class":205},[199,58866,58867,58869,58871,58873,58875],{"class":201,"line":1754},[199,58868,57561],{"class":205},[199,58870,27],{"class":874},[199,58872,57573],{"class":205},[199,58874,27],{"class":874},[199,58876,882],{"class":205},[199,58878,58879,58881,58883,58885,58887],{"class":201,"line":1763},[199,58880,57561],{"class":205},[199,58882,27],{"class":874},[199,58884,57573],{"class":205},[199,58886,27],{"class":874},[199,58888,882],{"class":205},[199,58890,58891,58893,58895,58897,58899],{"class":201,"line":1768},[199,58892,57561],{"class":205},[199,58894,27],{"class":874},[199,58896,57573],{"class":205},[199,58898,27],{"class":874},[199,58900,882],{"class":205},[199,58902,58903,58905,58907,58909,58911],{"class":201,"line":19628},[199,58904,57561],{"class":205},[199,58906,27],{"class":874},[199,58908,57573],{"class":205},[199,58910,27],{"class":874},[199,58912,882],{"class":205},[199,58914,58915,58917,58919,58921,58923],{"class":201,"line":19641},[199,58916,57561],{"class":205},[199,58918,27],{"class":874},[199,58920,57573],{"class":205},[199,58922,27],{"class":874},[199,58924,882],{"class":205},[199,58926,58927,58929,58931],{"class":201,"line":19646},[199,58928,57666],{"class":205},[199,58930,176],{"class":874},[199,58932,882],{"class":205},[199,58934,58935,58937,58939],{"class":201,"line":19660},[199,58936,1404],{"class":205},[199,58938,1220],{"class":874},[199,58940,882],{"class":205},[199,58942,58943,58945,58947],{"class":201,"line":19665},[199,58944,2112],{"class":205},[199,58946,1220],{"class":874},[199,58948,882],{"class":205},[199,58950,58951,58953,58955],{"class":201,"line":19671},[199,58952,1824],{"class":205},[199,58954,1446],{"class":874},[199,58956,882],{"class":205},[199,58958,58959,58961,58964,58966],{"class":201,"line":19676},[199,58960,14084],{"class":1086},[199,58962,58963],{"class":1018}," sliderData",[199,58965,16425],{"class":1086},[199,58967,57706],{"class":205},[199,58969,58970,58972,58974,58976,58978,58980,58982],{"class":201,"line":19690},[199,58971,57711],{"class":205},[199,58973,57714],{"class":898},[199,58975,57717],{"class":205},[199,58977,57720],{"class":898},[199,58979,57723],{"class":205},[199,58981,57726],{"class":898},[199,58983,57729],{"class":205},[199,58985,58986,58988,58990,58992,58994,58996,58998],{"class":201,"line":19695},[199,58987,57711],{"class":205},[199,58989,57736],{"class":898},[199,58991,57717],{"class":205},[199,58993,57741],{"class":898},[199,58995,57723],{"class":205},[199,58997,57746],{"class":898},[199,58999,57729],{"class":205},[199,59001,59002,59004,59006,59008,59010,59012,59014],{"class":201,"line":19700},[199,59003,57711],{"class":205},[199,59005,57755],{"class":898},[199,59007,57717],{"class":205},[199,59009,57760],{"class":898},[199,59011,57723],{"class":205},[199,59013,57765],{"class":898},[199,59015,57729],{"class":205},[199,59017,59018,59020,59022,59024,59026,59028,59030],{"class":201,"line":19714},[199,59019,57711],{"class":205},[199,59021,57774],{"class":898},[199,59023,57717],{"class":205},[199,59025,57779],{"class":898},[199,59027,57723],{"class":205},[199,59029,57784],{"class":898},[199,59031,57729],{"class":205},[199,59033,59034,59036,59038,59040,59042,59044,59046],{"class":201,"line":19726},[199,59035,57711],{"class":205},[199,59037,57793],{"class":898},[199,59039,57717],{"class":205},[199,59041,57798],{"class":898},[199,59043,57723],{"class":205},[199,59045,57803],{"class":898},[199,59047,57729],{"class":205},[199,59049,59050,59052,59054,59056,59058,59060,59062],{"class":201,"line":19731},[199,59051,57711],{"class":205},[199,59053,57812],{"class":898},[199,59055,57717],{"class":205},[199,59057,57817],{"class":898},[199,59059,57723],{"class":205},[199,59061,57822],{"class":898},[199,59063,57729],{"class":205},[199,59065,59066,59068,59070,59072,59074,59076,59078],{"class":201,"line":19744},[199,59067,57711],{"class":205},[199,59069,57831],{"class":898},[199,59071,57717],{"class":205},[199,59073,57836],{"class":898},[199,59075,57723],{"class":205},[199,59077,57841],{"class":898},[199,59079,57729],{"class":205},[199,59081,59082,59084,59086,59088,59090,59092,59094],{"class":201,"line":19749},[199,59083,57711],{"class":205},[199,59085,57850],{"class":898},[199,59087,57717],{"class":205},[199,59089,57855],{"class":898},[199,59091,57723],{"class":205},[199,59093,57860],{"class":898},[199,59095,57863],{"class":205},[199,59097,59098],{"class":201,"line":19754},[199,59099,2805],{"class":205},[199,59101,59102],{"class":201,"line":19759},[199,59103,59104],{"class":1454},"    \u002F\u002F 1.获取元素\n",[199,59106,59107,59109,59111,59113,59115,59117,59119,59121],{"class":201,"line":19772},[199,59108,14084],{"class":1086},[199,59110,57874],{"class":1018},[199,59112,16425],{"class":1086},[199,59114,56655],{"class":205},[199,59116,56658],{"class":878},[199,59118,1537],{"class":205},[199,59120,57885],{"class":898},[199,59122,1594],{"class":205},[199,59124,59125,59127,59129,59131,59133,59135,59137,59139],{"class":201,"line":19777},[199,59126,14084],{"class":1086},[199,59128,9722],{"class":1018},[199,59130,16425],{"class":1086},[199,59132,56655],{"class":205},[199,59134,56658],{"class":878},[199,59136,1537],{"class":205},[199,59138,57904],{"class":898},[199,59140,1594],{"class":205},[199,59142,59143,59145,59147,59149],{"class":201,"line":35475},[199,59144,1899],{"class":1086},[199,59146,1490],{"class":205},[199,59148,895],{"class":1086},[199,59150,50173],{"class":1018},[199,59152,59153],{"class":201,"line":35481},[199,59154,59155],{"class":1454},"    \u002F\u002F 2.开启定时器\n",[199,59157,59158],{"class":201,"line":35487},[199,59159,59160],{"class":1454},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[199,59162,59163,59166,59168,59170],{"class":201,"line":35493},[199,59164,59165],{"class":878},"    setInterval",[199,59167,1537],{"class":205},[199,59169,56708],{"class":1086},[199,59171,56711],{"class":205},[199,59173,59174,59176],{"class":201,"line":35499},[199,59175,56716],{"class":205},[199,59177,5606],{"class":1086},[199,59179,59180,59182,59184,59186,59189,59191],{"class":201,"line":35510},[199,59181,56739],{"class":1086},[199,59183,56742],{"class":205},[199,59185,4635],{"class":1086},[199,59187,59188],{"class":205}," sliderData.",[199,59190,1631],{"class":1018},[199,59192,1513],{"class":205},[199,59194,59195,59198,59200],{"class":201,"line":35516},[199,59196,59197],{"class":205},"        i ",[199,59199,895],{"class":1086},[199,59201,50173],{"class":1018},[199,59203,59204],{"class":201,"line":35536},[199,59205,2092],{"class":205},[199,59207,59208],{"class":201,"line":35542},[199,59209,59210],{"class":1454},"      \u002F\u002F 更换图片路径\n",[199,59212,59213,59215,59217],{"class":201,"line":35553},[199,59214,57980],{"class":205},[199,59216,895],{"class":1086},[199,59218,59219],{"class":205}," sliderData[i].url\n",[199,59221,59222],{"class":201,"line":35559},[199,59223,59224],{"class":1454},"      \u002F\u002F 把文字写到p里面\n",[199,59226,59227,59229,59231],{"class":201,"line":35565},[199,59228,57990],{"class":205},[199,59230,895],{"class":1086},[199,59232,59233],{"class":205}," sliderData[i].title\n",[199,59235,59236],{"class":201,"line":35571},[199,59237,59238],{"class":1454},"      \u002F\u002F 小圆点\n",[199,59240,59241],{"class":201,"line":35577},[199,59242,59243],{"class":1454},"      \u002F\u002F 先删除以前的active\n",[199,59245,59246],{"class":201,"line":35583},[199,59247,59248],{"class":1454},"      \u002F\u002F 只让当前li添加active\n",[199,59250,59251,59253,59255,59257,59260,59263,59266,59268,59270],{"class":201,"line":35589},[199,59252,58030],{"class":205},[199,59254,56658],{"class":878},[199,59256,1537],{"class":205},[199,59258,59259],{"class":898},"'.slider-footer .activate'",[199,59261,59262],{"class":205},").classList.",[199,59264,59265],{"class":878},"remove",[199,59267,1537],{"class":205},[199,59269,58048],{"class":898},[199,59271,1594],{"class":205},[199,59273,59274,59276,59278,59280,59283,59285,59287,59289,59292,59294,59296,59298,59300],{"class":201,"line":35595},[199,59275,58030],{"class":205},[199,59277,56658],{"class":878},[199,59279,1537],{"class":205},[199,59281,59282],{"class":898},"`.slider-footer ul li:nth-child(${",[199,59284,1548],{"class":205},[199,59286,1698],{"class":1086},[199,59288,1495],{"class":1018},[199,59290,59291],{"class":898},"})`",[199,59293,59262],{"class":205},[199,59295,8231],{"class":878},[199,59297,1537],{"class":205},[199,59299,58048],{"class":898},[199,59301,1594],{"class":205},[199,59303,59304],{"class":201,"line":35615},[199,59305,907],{"emptyLinePlaceholder":906},[199,59307,59308,59310,59312],{"class":201,"line":35621},[199,59309,56794],{"class":205},[199,59311,9307],{"class":1018},[199,59313,1594],{"class":205},[199,59315,59316],{"class":201,"line":35637},[199,59317,907],{"emptyLinePlaceholder":906},[199,59319,59320,59322,59324],{"class":201,"line":35643},[199,59321,2112],{"class":205},[199,59323,1446],{"class":874},[199,59325,882],{"class":205},[199,59327,59328,59330,59332],{"class":201,"line":35657},[199,59329,1414],{"class":205},[199,59331,1431],{"class":874},[199,59333,882],{"class":205},[199,59335,59336],{"class":201,"line":35663},[199,59337,907],{"emptyLinePlaceholder":906},[199,59339,59340,59342,59344],{"class":201,"line":35678},[199,59341,1414],{"class":205},[199,59343,194],{"class":874},[199,59345,882],{"class":205},[19,59347,59349],{"id":59348},"_317-重要知识点","3.1.7 重要知识点",[31,59351,59352,59353],{},"浏览器在渲染文本时， ",[49,59354,59355],{},"没有空格或换行符就没有“断行点”",[31,59357,59358],{},[55,59359],{"alt":57,"src":59360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[31,59362,59363],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[31,59365,59366],{},[55,59367],{"alt":57,"src":59368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[31,59370,59371],{},[55,59372],{"alt":57,"src":59373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59375,59377],{"id":59376},"_32-dom事件基础","3.2 DOM事件基础",[19,59379,59381],{"id":59380},"_321-事件监听","3.2.1 事件监听",[31,59383,59384],{},[55,59385],{"alt":57,"src":59386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[31,59388,59389],{},"事件监听有响应的发生",[31,59391,59392],{},[55,59393],{"alt":57,"src":59394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[31,59396,59397],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[31,59399,59400],{},"对于有名函数,要执行的函数名后边不要加()",[19,59402,59404],{"id":59403},"_322-随机点名案例","3.2.2 随机点名案例",[190,59406,59408],{"className":192,"code":59407,"language":194,"meta":57,"style":57},"\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",[196,59409,59410,59420,59434,59438,59446,59460,59480,59492,59500,59506,59516,59526,59530,59534,59541,59552,59556,59560,59566,59578,59592,59602,59614,59627,59631,59635,59642,59646,59659,59671,59683,59687,59691,59695,59702,59712,59716,59720,59729,59741,59753,59768,59772,59780,59788,59792,59800,59813,59827,59840,59860,59868,59883,59903,59923,59931,59935,59943,59948,59984,60004,60009,60028,60033,60044,60049,60060,60065,60084,60099,60104,60130,60140,60149,60154,60170,60175,60180,60185,60200,60204,60208,60213,60232,60249,60257,60262,60277,60281,60285,60293,60301,60305],{"__ignoreMap":57},[199,59411,59412,59414,59416,59418],{"class":201,"line":202},[199,59413,871],{"class":205},[199,59415,875],{"class":874},[199,59417,879],{"class":878},[199,59419,882],{"class":205},[199,59421,59422,59424,59426,59428,59430,59432],{"class":201,"line":36},[199,59423,887],{"class":205},[199,59425,194],{"class":874},[199,59427,892],{"class":878},[199,59429,895],{"class":205},[199,59431,899],{"class":898},[199,59433,882],{"class":205},[199,59435,59436],{"class":201,"line":73},[199,59437,907],{"emptyLinePlaceholder":906},[199,59439,59440,59442,59444],{"class":201,"line":333},[199,59441,887],{"class":205},[199,59443,914],{"class":874},[199,59445,882],{"class":205},[199,59447,59448,59450,59452,59454,59456,59458],{"class":201,"line":227},[199,59449,1824],{"class":205},[199,59451,924],{"class":874},[199,59453,927],{"class":878},[199,59455,895],{"class":205},[199,59457,932],{"class":898},[199,59459,882],{"class":205},[199,59461,59462,59464,59466,59468,59470,59472,59474,59476,59478],{"class":201,"line":238},[199,59463,1824],{"class":205},[199,59465,924],{"class":874},[199,59467,967],{"class":878},[199,59469,895],{"class":205},[199,59471,972],{"class":898},[199,59473,951],{"class":878},[199,59475,895],{"class":205},[199,59477,979],{"class":898},[199,59479,882],{"class":205},[199,59481,59482,59484,59486,59488,59490],{"class":201,"line":252},[199,59483,1824],{"class":205},[199,59485,988],{"class":874},[199,59487,991],{"class":205},[199,59489,988],{"class":874},[199,59491,882],{"class":205},[199,59493,59494,59496,59498],{"class":201,"line":388},[199,59495,1824],{"class":205},[199,59497,1002],{"class":874},[199,59499,882],{"class":205},[199,59501,59502,59504],{"class":201,"line":415},[199,59503,9300],{"class":874},[199,59505,1012],{"class":205},[199,59507,59508,59510,59512,59514],{"class":201,"line":426},[199,59509,56965],{"class":1018},[199,59511,1022],{"class":205},[199,59513,1025],{"class":1018},[199,59515,1028],{"class":205},[199,59517,59518,59520,59522,59524],{"class":201,"line":1015},[199,59519,56954],{"class":1018},[199,59521,1022],{"class":205},[199,59523,1025],{"class":1018},[199,59525,1028],{"class":205},[199,59527,59528],{"class":201,"line":1031},[199,59529,2097],{"class":205},[199,59531,59532],{"class":201,"line":1043},[199,59533,907],{"emptyLinePlaceholder":906},[199,59535,59536,59539],{"class":201,"line":1049},[199,59537,59538],{"class":874},"    h2",[199,59540,1012],{"class":205},[199,59542,59543,59546,59548,59550],{"class":201,"line":1054},[199,59544,59545],{"class":1018},"      text-align",[199,59547,1022],{"class":205},[199,59549,1197],{"class":1018},[199,59551,1028],{"class":205},[199,59553,59554],{"class":201,"line":1062},[199,59555,2097],{"class":205},[199,59557,59558],{"class":201,"line":1075},[199,59559,907],{"emptyLinePlaceholder":906},[199,59561,59562,59564],{"class":201,"line":1092},[199,59563,57011],{"class":878},[199,59565,1012],{"class":205},[199,59567,59568,59570,59572,59574,59576],{"class":201,"line":1107},[199,59569,57030],{"class":1018},[199,59571,1022],{"class":205},[199,59573,4478],{"class":1018},[199,59575,1087],{"class":1086},[199,59577,1028],{"class":205},[199,59579,59580,59582,59584,59586,59588,59590],{"class":201,"line":1128},[199,59581,56965],{"class":1018},[199,59583,1022],{"class":205},[199,59585,1153],{"class":1018},[199,59587,1087],{"class":1086},[199,59589,1158],{"class":1018},[199,59591,1028],{"class":205},[199,59593,59594,59596,59598,59600],{"class":201,"line":1146},[199,59595,57268],{"class":1018},[199,59597,1022],{"class":205},[199,59599,1070],{"class":1018},[199,59601,1028],{"class":205},[199,59603,59604,59606,59608,59610,59612],{"class":201,"line":1163},[199,59605,57181],{"class":1018},[199,59607,1022],{"class":205},[199,59609,3904],{"class":1018},[199,59611,1087],{"class":1086},[199,59613,1028],{"class":205},[199,59615,59616,59619,59621,59623,59625],{"class":201,"line":1176},[199,59617,59618],{"class":1018},"      line-height",[199,59620,1022],{"class":205},[199,59622,3484],{"class":1018},[199,59624,1087],{"class":1086},[199,59626,1028],{"class":205},[199,59628,59629],{"class":201,"line":1189},[199,59630,2097],{"class":205},[199,59632,59633],{"class":201,"line":1202},[199,59634,907],{"emptyLinePlaceholder":906},[199,59636,59637,59640],{"class":201,"line":1207},[199,59638,59639],{"class":878},"    .qs",[199,59641,1012],{"class":205},[199,59643,59644],{"class":201,"line":1212},[199,59645,907],{"emptyLinePlaceholder":906},[199,59647,59648,59650,59652,59655,59657],{"class":201,"line":1225},[199,59649,57030],{"class":1018},[199,59651,1022],{"class":205},[199,59653,59654],{"class":1018},"450",[199,59656,1087],{"class":1086},[199,59658,1028],{"class":205},[199,59660,59661,59663,59665,59667,59669],{"class":201,"line":1236},[199,59662,57044],{"class":1018},[199,59664,1022],{"class":205},[199,59666,3484],{"class":1018},[199,59668,1087],{"class":1086},[199,59670,1028],{"class":205},[199,59672,59673,59676,59678,59681],{"class":201,"line":1249},[199,59674,59675],{"class":1018},"      color",[199,59677,1022],{"class":205},[199,59679,59680],{"class":1018},"red",[199,59682,1028],{"class":205},[199,59684,59685],{"class":201,"line":1262},[199,59686,907],{"emptyLinePlaceholder":906},[199,59688,59689],{"class":201,"line":1275},[199,59690,2097],{"class":205},[199,59692,59693],{"class":201,"line":1287},[199,59694,907],{"emptyLinePlaceholder":906},[199,59696,59697,59700],{"class":201,"line":1292},[199,59698,59699],{"class":878},"    .btns",[199,59701,1012],{"class":205},[199,59703,59704,59706,59708,59710],{"class":201,"line":1297},[199,59705,59545],{"class":1018},[199,59707,1022],{"class":205},[199,59709,1197],{"class":1018},[199,59711,1028],{"class":205},[199,59713,59714],{"class":201,"line":1310},[199,59715,2097],{"class":205},[199,59717,59718],{"class":201,"line":1315},[199,59719,907],{"emptyLinePlaceholder":906},[199,59721,59722,59724,59727],{"class":201,"line":1330},[199,59723,59699],{"class":878},[199,59725,59726],{"class":874}," button",[199,59728,1012],{"class":205},[199,59730,59731,59733,59735,59737,59739],{"class":201,"line":1335},[199,59732,57030],{"class":1018},[199,59734,1022],{"class":205},[199,59736,3896],{"class":1018},[199,59738,1087],{"class":1086},[199,59740,1028],{"class":205},[199,59742,59743,59745,59747,59749,59751],{"class":201,"line":1340},[199,59744,57044],{"class":1018},[199,59746,1022],{"class":205},[199,59748,3359],{"class":1018},[199,59750,1087],{"class":1086},[199,59752,1028],{"class":205},[199,59754,59755,59757,59759,59761,59764,59766],{"class":201,"line":1352},[199,59756,56965],{"class":1018},[199,59758,1022],{"class":205},[199,59760,1025],{"class":1018},[199,59762,59763],{"class":1018}," 50",[199,59765,1087],{"class":1086},[199,59767,1028],{"class":205},[199,59769,59770],{"class":201,"line":1367},[199,59771,2097],{"class":205},[199,59773,59774,59776,59778],{"class":201,"line":1381},[199,59775,2112],{"class":205},[199,59777,1002],{"class":874},[199,59779,882],{"class":205},[199,59781,59782,59784,59786],{"class":201,"line":1396},[199,59783,1414],{"class":205},[199,59785,914],{"class":874},[199,59787,882],{"class":205},[199,59789,59790],{"class":201,"line":1401},[199,59791,907],{"emptyLinePlaceholder":906},[199,59793,59794,59796,59798],{"class":201,"line":1411},[199,59795,887],{"class":205},[199,59797,1431],{"class":874},[199,59799,882],{"class":205},[199,59801,59802,59804,59806,59809,59811],{"class":201,"line":1421},[199,59803,1824],{"class":205},[199,59805,14],{"class":874},[199,59807,59808],{"class":205},">随机点名\u003C\u002F",[199,59810,14],{"class":874},[199,59812,882],{"class":205},[199,59814,59815,59817,59819,59821,59823,59825],{"class":201,"line":1426},[199,59816,1824],{"class":205},[199,59818,1220],{"class":874},[199,59820,55745],{"class":878},[199,59822,895],{"class":205},[199,59824,55750],{"class":898},[199,59826,882],{"class":205},[199,59828,59829,59831,59833,59836,59838],{"class":201,"line":1436},[199,59830,921],{"class":205},[199,59832,199],{"class":874},[199,59834,59835],{"class":205},">名字是：\u003C\u002F",[199,59837,199],{"class":874},[199,59839,882],{"class":205},[199,59841,59842,59844,59846,59848,59850,59853,59856,59858],{"class":201,"line":1441},[199,59843,921],{"class":205},[199,59845,1220],{"class":874},[199,59847,55745],{"class":878},[199,59849,895],{"class":205},[199,59851,59852],{"class":898},"\"qs\"",[199,59854,59855],{"class":205},">这里显示姓名\u003C\u002F",[199,59857,1220],{"class":874},[199,59859,882],{"class":205},[199,59861,59862,59864,59866],{"class":201,"line":1451},[199,59863,2112],{"class":205},[199,59865,1220],{"class":874},[199,59867,882],{"class":205},[199,59869,59870,59872,59874,59876,59878,59881],{"class":201,"line":1458},[199,59871,1824],{"class":205},[199,59873,1220],{"class":874},[199,59875,55745],{"class":878},[199,59877,895],{"class":205},[199,59879,59880],{"class":898},"\"btns\"",[199,59882,882],{"class":205},[199,59884,59885,59887,59889,59891,59893,59896,59899,59901],{"class":201,"line":1464},[199,59886,921],{"class":205},[199,59888,56146],{"class":874},[199,59890,55745],{"class":878},[199,59892,895],{"class":205},[199,59894,59895],{"class":898},"\"start\"",[199,59897,59898],{"class":205},">开始\u003C\u002F",[199,59900,56146],{"class":874},[199,59902,882],{"class":205},[199,59904,59905,59907,59909,59911,59913,59916,59919,59921],{"class":201,"line":1478},[199,59906,921],{"class":205},[199,59908,56146],{"class":874},[199,59910,55745],{"class":878},[199,59912,895],{"class":205},[199,59914,59915],{"class":898},"\"end\"",[199,59917,59918],{"class":205},">结束\u003C\u002F",[199,59920,56146],{"class":874},[199,59922,882],{"class":205},[199,59924,59925,59927,59929],{"class":201,"line":1516},[199,59926,2112],{"class":205},[199,59928,1220],{"class":874},[199,59930,882],{"class":205},[199,59932,59933],{"class":201,"line":1522},[199,59934,907],{"emptyLinePlaceholder":906},[199,59936,59937,59939,59941],{"class":201,"line":1528},[199,59938,1824],{"class":205},[199,59940,1446],{"class":874},[199,59942,882],{"class":205},[199,59944,59945],{"class":201,"line":1557},[199,59946,59947],{"class":1454},"    \u002F\u002F 数据数组\n",[199,59949,59950,59952,59955,59957,59959,59962,59964,59967,59969,59972,59974,59977,59979,59982],{"class":201,"line":1563},[199,59951,14084],{"class":1086},[199,59953,59954],{"class":1018}," arr",[199,59956,16425],{"class":1086},[199,59958,1906],{"class":205},[199,59960,59961],{"class":898},"'马超'",[199,59963,1912],{"class":205},[199,59965,59966],{"class":898},"'黄忠'",[199,59968,1912],{"class":205},[199,59970,59971],{"class":898},"'赵云'",[199,59973,1912],{"class":205},[199,59975,59976],{"class":898},"'关羽'",[199,59978,1912],{"class":205},[199,59980,59981],{"class":898},"'张飞'",[199,59983,1932],{"class":205},[199,59985,59986,59988,59991,59993,59995,59997,59999,60002],{"class":201,"line":1568},[199,59987,14084],{"class":1086},[199,59989,59990],{"class":1018}," qs",[199,59992,16425],{"class":1086},[199,59994,56655],{"class":205},[199,59996,56658],{"class":878},[199,59998,1537],{"class":205},[199,60000,60001],{"class":898},"'.qs'",[199,60003,1594],{"class":205},[199,60005,60006],{"class":201,"line":1574},[199,60007,60008],{"class":1454},"    \u002F\u002F 1.业务1.开始按钮模块\n",[199,60010,60011,60013,60015,60017,60019,60021,60023,60026],{"class":201,"line":1580},[199,60012,14084],{"class":1086},[199,60014,7082],{"class":1018},[199,60016,16425],{"class":1086},[199,60018,56655],{"class":205},[199,60020,56658],{"class":878},[199,60022,1537],{"class":205},[199,60024,60025],{"class":898},"'.start'",[199,60027,1594],{"class":205},[199,60029,60030],{"class":201,"line":1597},[199,60031,60032],{"class":1454},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[199,60034,60035,60037,60040,60042],{"class":201,"line":1602},[199,60036,1899],{"class":1086},[199,60038,60039],{"class":205}," timerId ",[199,60041,895],{"class":1086},[199,60043,50173],{"class":1018},[199,60045,60046],{"class":201,"line":1608},[199,60047,60048],{"class":1454},"    \u002F\u002F 随机号要全局变量\n",[199,60050,60051,60053,60056,60058],{"class":201,"line":1640},[199,60052,1899],{"class":1086},[199,60054,60055],{"class":205}," random ",[199,60057,895],{"class":1086},[199,60059,50173],{"class":1018},[199,60061,60062],{"class":201,"line":1653},[199,60063,60064],{"class":1454},"    \u002F\u002F 1.1 添加点击事件\n",[199,60066,60067,60070,60073,60075,60078,60080,60082],{"class":201,"line":1673},[199,60068,60069],{"class":205},"    start.",[199,60071,60072],{"class":878},"addEventListener",[199,60074,1537],{"class":205},[199,60076,60077],{"class":898},"'click'",[199,60079,1912],{"class":205},[199,60081,56708],{"class":1086},[199,60083,56711],{"class":205},[199,60085,60086,60089,60091,60093,60095,60097],{"class":201,"line":1690},[199,60087,60088],{"class":205},"      timerId ",[199,60090,895],{"class":1086},[199,60092,56703],{"class":878},[199,60094,1537],{"class":205},[199,60096,56708],{"class":1086},[199,60098,56711],{"class":205},[199,60100,60101],{"class":201,"line":1706},[199,60102,60103],{"class":1454},"        \u002F\u002F 随机数\n",[199,60105,60106,60109,60111,60114,60117,60120,60122,60124,60126,60128],{"class":201,"line":1712},[199,60107,60108],{"class":205},"        random ",[199,60110,895],{"class":1086},[199,60112,60113],{"class":878}," parseInt",[199,60115,60116],{"class":205},"(Math.",[199,60118,60119],{"class":878},"random",[199,60121,15911],{"class":205},[199,60123,3537],{"class":1086},[199,60125,1628],{"class":205},[199,60127,1631],{"class":1018},[199,60129,1594],{"class":205},[199,60131,60132,60135,60137],{"class":201,"line":1720},[199,60133,60134],{"class":205},"        qs.innerHTML ",[199,60136,895],{"class":1086},[199,60138,60139],{"class":205}," arr[random]\n",[199,60141,60142,60145,60147],{"class":201,"line":1725},[199,60143,60144],{"class":205},"      }, ",[199,60146,3359],{"class":1018},[199,60148,1594],{"class":205},[199,60150,60151],{"class":201,"line":1731},[199,60152,60153],{"class":1454},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[199,60155,60156,60158,60161,60163,60166,60168],{"class":201,"line":1745},[199,60157,56739],{"class":1086},[199,60159,60160],{"class":205}," (arr.",[199,60162,1631],{"class":1018},[199,60164,60165],{"class":1086}," ===",[199,60167,1495],{"class":1018},[199,60169,1513],{"class":205},[199,60171,60172],{"class":201,"line":1754},[199,60173,60174],{"class":1454},"        \u002F\u002F start.disabled = true\n",[199,60176,60177],{"class":201,"line":1763},[199,60178,60179],{"class":1454},"        \u002F\u002F end.disabled = true\n",[199,60181,60182],{"class":201,"line":1768},[199,60183,60184],{"class":1454},"        \u002F\u002F 可以合起来写\n",[199,60186,60187,60190,60192,60195,60197],{"class":201,"line":19628},[199,60188,60189],{"class":205},"        start.disabled ",[199,60191,895],{"class":1086},[199,60193,60194],{"class":205}," end.disabled ",[199,60196,895],{"class":1086},[199,60198,60199],{"class":1018}," true\n",[199,60201,60202],{"class":201,"line":19641},[199,60203,2092],{"class":205},[199,60205,60206],{"class":201,"line":19646},[199,60207,36302],{"class":205},[199,60209,60210],{"class":201,"line":19660},[199,60211,60212],{"class":1454},"    \u002F\u002F 1.2 关闭按钮模块\n",[199,60214,60215,60217,60219,60221,60223,60225,60227,60230],{"class":201,"line":19665},[199,60216,14084],{"class":1086},[199,60218,7098],{"class":1018},[199,60220,16425],{"class":1086},[199,60222,56655],{"class":205},[199,60224,56658],{"class":878},[199,60226,1537],{"class":205},[199,60228,60229],{"class":898},"'.end'",[199,60231,1594],{"class":205},[199,60233,60234,60237,60239,60241,60243,60245,60247],{"class":201,"line":19671},[199,60235,60236],{"class":205},"    end.",[199,60238,60072],{"class":878},[199,60240,1537],{"class":205},[199,60242,60077],{"class":898},[199,60244,1912],{"class":205},[199,60246,56708],{"class":1086},[199,60248,56711],{"class":205},[199,60250,60251,60254],{"class":201,"line":19676},[199,60252,60253],{"class":878},"      clearInterval",[199,60255,60256],{"class":205},"(timerId)\n",[199,60258,60259],{"class":201,"line":19690},[199,60260,60261],{"class":1454},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[199,60263,60264,60267,60270,60273,60275],{"class":201,"line":19695},[199,60265,60266],{"class":205},"      arr.",[199,60268,60269],{"class":878},"splice",[199,60271,60272],{"class":205},"(random, ",[199,60274,1115],{"class":1018},[199,60276,1594],{"class":205},[199,60278,60279],{"class":201,"line":19700},[199,60280,36302],{"class":205},[199,60282,60283],{"class":201,"line":19714},[199,60284,907],{"emptyLinePlaceholder":906},[199,60286,60287,60289,60291],{"class":201,"line":19726},[199,60288,2112],{"class":205},[199,60290,1446],{"class":874},[199,60292,882],{"class":205},[199,60294,60295,60297,60299],{"class":201,"line":19731},[199,60296,1414],{"class":205},[199,60298,1431],{"class":874},[199,60300,882],{"class":205},[199,60302,60303],{"class":201,"line":19744},[199,60304,907],{"emptyLinePlaceholder":906},[199,60306,60307,60309,60311],{"class":201,"line":19749},[199,60308,1414],{"class":205},[199,60310,194],{"class":874},[199,60312,882],{"class":205},[31,60314,60315],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[19,60317,60319],{"id":60318},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[190,60321,60323],{"className":192,"code":60322,"language":194,"meta":57,"style":57},"\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",[196,60324,60325,60335,60349,60353,60361,60375,60395,60407,60415,60419,60427,60439,60447,60466,60483,60499,60509,60513,60521,60529,60533],{"__ignoreMap":57},[199,60326,60327,60329,60331,60333],{"class":201,"line":202},[199,60328,871],{"class":205},[199,60330,875],{"class":874},[199,60332,879],{"class":878},[199,60334,882],{"class":205},[199,60336,60337,60339,60341,60343,60345,60347],{"class":201,"line":36},[199,60338,887],{"class":205},[199,60340,194],{"class":874},[199,60342,892],{"class":878},[199,60344,895],{"class":205},[199,60346,899],{"class":898},[199,60348,882],{"class":205},[199,60350,60351],{"class":201,"line":73},[199,60352,907],{"emptyLinePlaceholder":906},[199,60354,60355,60357,60359],{"class":201,"line":333},[199,60356,887],{"class":205},[199,60358,914],{"class":874},[199,60360,882],{"class":205},[199,60362,60363,60365,60367,60369,60371,60373],{"class":201,"line":227},[199,60364,1824],{"class":205},[199,60366,924],{"class":874},[199,60368,927],{"class":878},[199,60370,895],{"class":205},[199,60372,932],{"class":898},[199,60374,882],{"class":205},[199,60376,60377,60379,60381,60383,60385,60387,60389,60391,60393],{"class":201,"line":238},[199,60378,1824],{"class":205},[199,60380,924],{"class":874},[199,60382,967],{"class":878},[199,60384,895],{"class":205},[199,60386,972],{"class":898},[199,60388,951],{"class":878},[199,60390,895],{"class":205},[199,60392,979],{"class":898},[199,60394,882],{"class":205},[199,60396,60397,60399,60401,60403,60405],{"class":201,"line":252},[199,60398,1824],{"class":205},[199,60400,988],{"class":874},[199,60402,991],{"class":205},[199,60404,988],{"class":874},[199,60406,882],{"class":205},[199,60408,60409,60411,60413],{"class":201,"line":388},[199,60410,1414],{"class":205},[199,60412,914],{"class":874},[199,60414,882],{"class":205},[199,60416,60417],{"class":201,"line":415},[199,60418,907],{"emptyLinePlaceholder":906},[199,60420,60421,60423,60425],{"class":201,"line":426},[199,60422,887],{"class":205},[199,60424,1431],{"class":874},[199,60426,882],{"class":205},[199,60428,60429,60431,60433,60435,60437],{"class":201,"line":1015},[199,60430,1824],{"class":205},[199,60432,56146],{"class":874},[199,60434,56152],{"class":205},[199,60436,56146],{"class":874},[199,60438,882],{"class":205},[199,60440,60441,60443,60445],{"class":201,"line":1031},[199,60442,1824],{"class":205},[199,60444,1446],{"class":874},[199,60446,882],{"class":205},[199,60448,60449,60451,60453,60455,60457,60459,60461,60464],{"class":201,"line":1043},[199,60450,14084],{"class":1086},[199,60452,56650],{"class":1018},[199,60454,16425],{"class":1086},[199,60456,56655],{"class":205},[199,60458,56658],{"class":878},[199,60460,1537],{"class":205},[199,60462,60463],{"class":898},"'button'",[199,60465,1594],{"class":205},[199,60467,60468,60471,60473,60475,60477,60479,60481],{"class":201,"line":1049},[199,60469,60470],{"class":205},"    btn.",[199,60472,60072],{"class":878},[199,60474,1537],{"class":205},[199,60476,60077],{"class":898},[199,60478,1912],{"class":205},[199,60480,56708],{"class":1086},[199,60482,56711],{"class":205},[199,60484,60485,60488,60490,60492,60495,60497],{"class":201,"line":1054},[199,60486,60487],{"class":1086},"      const",[199,60489,5155],{"class":1018},[199,60491,16425],{"class":1086},[199,60493,60494],{"class":205}," Math.",[199,60496,60119],{"class":878},[199,60498,4892],{"class":205},[199,60500,60501,60504,60507],{"class":201,"line":1062},[199,60502,60503],{"class":205},"      console.",[199,60505,60506],{"class":878},"log",[199,60508,3109],{"class":205},[199,60510,60511],{"class":201,"line":1075},[199,60512,36302],{"class":205},[199,60514,60515,60517,60519],{"class":201,"line":1092},[199,60516,2112],{"class":205},[199,60518,1446],{"class":874},[199,60520,882],{"class":205},[199,60522,60523,60525,60527],{"class":201,"line":1107},[199,60524,1414],{"class":205},[199,60526,1431],{"class":874},[199,60528,882],{"class":205},[199,60530,60531],{"class":201,"line":1128},[199,60532,907],{"emptyLinePlaceholder":906},[199,60534,60535,60537,60539],{"class":201,"line":1146},[199,60536,1414],{"class":205},[199,60538,194],{"class":874},[199,60540,882],{"class":205},[31,60542,60543],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[31,60545,60546],{},"常量不可以重新赋值",[31,60548,60549],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[190,60551,60553],{"className":192,"code":60552,"language":194,"meta":57,"style":57},"\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",[196,60554,60555,60565,60579,60583,60591,60605,60625,60637,60645,60649,60657,60669,60677,60688,60706,60722,60736,60744,60748,60756,60764,60768],{"__ignoreMap":57},[199,60556,60557,60559,60561,60563],{"class":201,"line":202},[199,60558,871],{"class":205},[199,60560,875],{"class":874},[199,60562,879],{"class":878},[199,60564,882],{"class":205},[199,60566,60567,60569,60571,60573,60575,60577],{"class":201,"line":36},[199,60568,887],{"class":205},[199,60570,194],{"class":874},[199,60572,892],{"class":878},[199,60574,895],{"class":205},[199,60576,899],{"class":898},[199,60578,882],{"class":205},[199,60580,60581],{"class":201,"line":73},[199,60582,907],{"emptyLinePlaceholder":906},[199,60584,60585,60587,60589],{"class":201,"line":333},[199,60586,887],{"class":205},[199,60588,914],{"class":874},[199,60590,882],{"class":205},[199,60592,60593,60595,60597,60599,60601,60603],{"class":201,"line":227},[199,60594,1824],{"class":205},[199,60596,924],{"class":874},[199,60598,927],{"class":878},[199,60600,895],{"class":205},[199,60602,932],{"class":898},[199,60604,882],{"class":205},[199,60606,60607,60609,60611,60613,60615,60617,60619,60621,60623],{"class":201,"line":238},[199,60608,1824],{"class":205},[199,60610,924],{"class":874},[199,60612,967],{"class":878},[199,60614,895],{"class":205},[199,60616,972],{"class":898},[199,60618,951],{"class":878},[199,60620,895],{"class":205},[199,60622,979],{"class":898},[199,60624,882],{"class":205},[199,60626,60627,60629,60631,60633,60635],{"class":201,"line":252},[199,60628,1824],{"class":205},[199,60630,988],{"class":874},[199,60632,991],{"class":205},[199,60634,988],{"class":874},[199,60636,882],{"class":205},[199,60638,60639,60641,60643],{"class":201,"line":388},[199,60640,1414],{"class":205},[199,60642,914],{"class":874},[199,60644,882],{"class":205},[199,60646,60647],{"class":201,"line":415},[199,60648,907],{"emptyLinePlaceholder":906},[199,60650,60651,60653,60655],{"class":201,"line":426},[199,60652,887],{"class":205},[199,60654,1431],{"class":874},[199,60656,882],{"class":205},[199,60658,60659,60661,60663,60665,60667],{"class":201,"line":1015},[199,60660,1824],{"class":205},[199,60662,56146],{"class":874},[199,60664,56152],{"class":205},[199,60666,56146],{"class":874},[199,60668,882],{"class":205},[199,60670,60671,60673,60675],{"class":201,"line":1031},[199,60672,1824],{"class":205},[199,60674,1446],{"class":874},[199,60676,882],{"class":205},[199,60678,60679,60681,60683,60685],{"class":201,"line":1043},[199,60680,14084],{"class":1086},[199,60682,5155],{"class":1018},[199,60684,16425],{"class":1086},[199,60686,60687],{"class":1018}," 10\n",[199,60689,60690,60692,60694,60696,60698,60700,60702,60704],{"class":201,"line":1049},[199,60691,14084],{"class":1086},[199,60693,56650],{"class":1018},[199,60695,16425],{"class":1086},[199,60697,56655],{"class":205},[199,60699,56658],{"class":878},[199,60701,1537],{"class":205},[199,60703,60463],{"class":898},[199,60705,1594],{"class":205},[199,60707,60708,60710,60712,60714,60716,60718,60720],{"class":201,"line":1054},[199,60709,60470],{"class":205},[199,60711,60072],{"class":878},[199,60713,1537],{"class":205},[199,60715,60077],{"class":898},[199,60717,1912],{"class":205},[199,60719,56708],{"class":1086},[199,60721,56711],{"class":205},[199,60723,60724,60726,60728,60730,60732,60734],{"class":201,"line":1062},[199,60725,60487],{"class":1086},[199,60727,5155],{"class":1018},[199,60729,16425],{"class":1086},[199,60731,60494],{"class":205},[199,60733,60119],{"class":878},[199,60735,4892],{"class":205},[199,60737,60738,60740,60742],{"class":201,"line":1075},[199,60739,60503],{"class":205},[199,60741,60506],{"class":878},[199,60743,3109],{"class":205},[199,60745,60746],{"class":201,"line":1092},[199,60747,36302],{"class":205},[199,60749,60750,60752,60754],{"class":201,"line":1107},[199,60751,2112],{"class":205},[199,60753,1446],{"class":874},[199,60755,882],{"class":205},[199,60757,60758,60760,60762],{"class":201,"line":1128},[199,60759,1414],{"class":205},[199,60761,1431],{"class":874},[199,60763,882],{"class":205},[199,60765,60766],{"class":201,"line":1146},[199,60767,907],{"emptyLinePlaceholder":906},[199,60769,60770,60772,60774],{"class":201,"line":1163},[199,60771,1414],{"class":205},[199,60773,194],{"class":874},[199,60775,882],{"class":205},[31,60777,60778],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[190,60780,60782],{"className":192,"code":60781,"language":194,"meta":57,"style":57},"\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",[196,60783,60784,60794,60808,60812,60820,60834,60854,60866,60874,60878,60886,60898,60906,60916,60934,60950,60963,60971,60975,60983,60991,60995],{"__ignoreMap":57},[199,60785,60786,60788,60790,60792],{"class":201,"line":202},[199,60787,871],{"class":205},[199,60789,875],{"class":874},[199,60791,879],{"class":878},[199,60793,882],{"class":205},[199,60795,60796,60798,60800,60802,60804,60806],{"class":201,"line":36},[199,60797,887],{"class":205},[199,60799,194],{"class":874},[199,60801,892],{"class":878},[199,60803,895],{"class":205},[199,60805,899],{"class":898},[199,60807,882],{"class":205},[199,60809,60810],{"class":201,"line":73},[199,60811,907],{"emptyLinePlaceholder":906},[199,60813,60814,60816,60818],{"class":201,"line":333},[199,60815,887],{"class":205},[199,60817,914],{"class":874},[199,60819,882],{"class":205},[199,60821,60822,60824,60826,60828,60830,60832],{"class":201,"line":227},[199,60823,1824],{"class":205},[199,60825,924],{"class":874},[199,60827,927],{"class":878},[199,60829,895],{"class":205},[199,60831,932],{"class":898},[199,60833,882],{"class":205},[199,60835,60836,60838,60840,60842,60844,60846,60848,60850,60852],{"class":201,"line":238},[199,60837,1824],{"class":205},[199,60839,924],{"class":874},[199,60841,967],{"class":878},[199,60843,895],{"class":205},[199,60845,972],{"class":898},[199,60847,951],{"class":878},[199,60849,895],{"class":205},[199,60851,979],{"class":898},[199,60853,882],{"class":205},[199,60855,60856,60858,60860,60862,60864],{"class":201,"line":252},[199,60857,1824],{"class":205},[199,60859,988],{"class":874},[199,60861,991],{"class":205},[199,60863,988],{"class":874},[199,60865,882],{"class":205},[199,60867,60868,60870,60872],{"class":201,"line":388},[199,60869,1414],{"class":205},[199,60871,914],{"class":874},[199,60873,882],{"class":205},[199,60875,60876],{"class":201,"line":415},[199,60877,907],{"emptyLinePlaceholder":906},[199,60879,60880,60882,60884],{"class":201,"line":426},[199,60881,887],{"class":205},[199,60883,1431],{"class":874},[199,60885,882],{"class":205},[199,60887,60888,60890,60892,60894,60896],{"class":201,"line":1015},[199,60889,1824],{"class":205},[199,60891,56146],{"class":874},[199,60893,56152],{"class":205},[199,60895,56146],{"class":874},[199,60897,882],{"class":205},[199,60899,60900,60902,60904],{"class":201,"line":1031},[199,60901,1824],{"class":205},[199,60903,1446],{"class":874},[199,60905,882],{"class":205},[199,60907,60908,60910,60912,60914],{"class":201,"line":1043},[199,60909,14084],{"class":1086},[199,60911,5155],{"class":1018},[199,60913,16425],{"class":1086},[199,60915,60687],{"class":1018},[199,60917,60918,60920,60922,60924,60926,60928,60930,60932],{"class":201,"line":1049},[199,60919,14084],{"class":1086},[199,60921,56650],{"class":1018},[199,60923,16425],{"class":1086},[199,60925,56655],{"class":205},[199,60927,56658],{"class":878},[199,60929,1537],{"class":205},[199,60931,60463],{"class":898},[199,60933,1594],{"class":205},[199,60935,60936,60938,60940,60942,60944,60946,60948],{"class":201,"line":1054},[199,60937,60470],{"class":205},[199,60939,60072],{"class":878},[199,60941,1537],{"class":205},[199,60943,60077],{"class":898},[199,60945,1912],{"class":205},[199,60947,56708],{"class":1086},[199,60949,56711],{"class":205},[199,60951,60952,60955,60957,60959,60961],{"class":201,"line":1062},[199,60953,60954],{"class":205},"      num ",[199,60956,895],{"class":1086},[199,60958,60494],{"class":205},[199,60960,60119],{"class":878},[199,60962,4892],{"class":205},[199,60964,60965,60967,60969],{"class":201,"line":1075},[199,60966,60503],{"class":205},[199,60968,60506],{"class":878},[199,60970,3109],{"class":205},[199,60972,60973],{"class":201,"line":1092},[199,60974,36302],{"class":205},[199,60976,60977,60979,60981],{"class":201,"line":1107},[199,60978,2112],{"class":205},[199,60980,1446],{"class":874},[199,60982,882],{"class":205},[199,60984,60985,60987,60989],{"class":201,"line":1128},[199,60986,1414],{"class":205},[199,60988,1431],{"class":874},[199,60990,882],{"class":205},[199,60992,60993],{"class":201,"line":1146},[199,60994,907],{"emptyLinePlaceholder":906},[199,60996,60997,60999,61001],{"class":201,"line":1163},[199,60998,1414],{"class":205},[199,61000,194],{"class":874},[199,61002,882],{"class":205},[31,61004,61005],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[19,61007,61009],{"id":61008},"_324-事件监听版本","3.2.4 事件监听版本",[31,61011,61012],{},[55,61013],{"alt":57,"src":61014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[31,61016,61017],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[31,61019,61020],{},"这种方式会覆盖前边的事件监听:",[190,61022,61024],{"className":192,"code":61023,"language":194,"meta":57,"style":57},"\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",[196,61025,61026,61036,61050,61054,61062,61076,61096,61108,61116,61120,61128,61140,61148,61166,61180,61191,61195,61207,61217,61221,61229,61237,61241],{"__ignoreMap":57},[199,61027,61028,61030,61032,61034],{"class":201,"line":202},[199,61029,871],{"class":205},[199,61031,875],{"class":874},[199,61033,879],{"class":878},[199,61035,882],{"class":205},[199,61037,61038,61040,61042,61044,61046,61048],{"class":201,"line":36},[199,61039,887],{"class":205},[199,61041,194],{"class":874},[199,61043,892],{"class":878},[199,61045,895],{"class":205},[199,61047,899],{"class":898},[199,61049,882],{"class":205},[199,61051,61052],{"class":201,"line":73},[199,61053,907],{"emptyLinePlaceholder":906},[199,61055,61056,61058,61060],{"class":201,"line":333},[199,61057,887],{"class":205},[199,61059,914],{"class":874},[199,61061,882],{"class":205},[199,61063,61064,61066,61068,61070,61072,61074],{"class":201,"line":227},[199,61065,1824],{"class":205},[199,61067,924],{"class":874},[199,61069,927],{"class":878},[199,61071,895],{"class":205},[199,61073,932],{"class":898},[199,61075,882],{"class":205},[199,61077,61078,61080,61082,61084,61086,61088,61090,61092,61094],{"class":201,"line":238},[199,61079,1824],{"class":205},[199,61081,924],{"class":874},[199,61083,967],{"class":878},[199,61085,895],{"class":205},[199,61087,972],{"class":898},[199,61089,951],{"class":878},[199,61091,895],{"class":205},[199,61093,979],{"class":898},[199,61095,882],{"class":205},[199,61097,61098,61100,61102,61104,61106],{"class":201,"line":252},[199,61099,1824],{"class":205},[199,61101,988],{"class":874},[199,61103,991],{"class":205},[199,61105,988],{"class":874},[199,61107,882],{"class":205},[199,61109,61110,61112,61114],{"class":201,"line":388},[199,61111,1414],{"class":205},[199,61113,914],{"class":874},[199,61115,882],{"class":205},[199,61117,61118],{"class":201,"line":415},[199,61119,907],{"emptyLinePlaceholder":906},[199,61121,61122,61124,61126],{"class":201,"line":426},[199,61123,887],{"class":205},[199,61125,1431],{"class":874},[199,61127,882],{"class":205},[199,61129,61130,61132,61134,61136,61138],{"class":201,"line":1015},[199,61131,1824],{"class":205},[199,61133,56146],{"class":874},[199,61135,56152],{"class":205},[199,61137,56146],{"class":874},[199,61139,882],{"class":205},[199,61141,61142,61144,61146],{"class":201,"line":1031},[199,61143,1824],{"class":205},[199,61145,1446],{"class":874},[199,61147,882],{"class":205},[199,61149,61150,61152,61154,61156,61158,61160,61162,61164],{"class":201,"line":1043},[199,61151,14084],{"class":1086},[199,61153,56650],{"class":1018},[199,61155,16425],{"class":1086},[199,61157,56655],{"class":205},[199,61159,56658],{"class":878},[199,61161,1537],{"class":205},[199,61163,60463],{"class":898},[199,61165,1594],{"class":205},[199,61167,61168,61170,61173,61175,61178],{"class":201,"line":1049},[199,61169,60470],{"class":205},[199,61171,61172],{"class":878},"onclick",[199,61174,16425],{"class":1086},[199,61176,61177],{"class":1086}," function",[199,61179,56711],{"class":205},[199,61181,61182,61185,61187,61189],{"class":201,"line":1054},[199,61183,61184],{"class":878},"      alert",[199,61186,1537],{"class":205},[199,61188,3554],{"class":1018},[199,61190,1594],{"class":205},[199,61192,61193],{"class":201,"line":1062},[199,61194,2097],{"class":205},[199,61196,61197,61199,61201,61203,61205],{"class":201,"line":1075},[199,61198,60470],{"class":205},[199,61200,61172],{"class":878},[199,61202,16425],{"class":1086},[199,61204,61177],{"class":1086},[199,61206,56711],{"class":205},[199,61208,61209,61211,61213,61215],{"class":201,"line":1092},[199,61210,61184],{"class":878},[199,61212,1537],{"class":205},[199,61214,3829],{"class":1018},[199,61216,1594],{"class":205},[199,61218,61219],{"class":201,"line":1107},[199,61220,2097],{"class":205},[199,61222,61223,61225,61227],{"class":201,"line":1128},[199,61224,2112],{"class":205},[199,61226,1446],{"class":874},[199,61228,882],{"class":205},[199,61230,61231,61233,61235],{"class":201,"line":1146},[199,61232,1414],{"class":205},[199,61234,1431],{"class":874},[199,61236,882],{"class":205},[199,61238,61239],{"class":201,"line":1163},[199,61240,907],{"emptyLinePlaceholder":906},[199,61242,61243,61245,61247],{"class":201,"line":1176},[199,61244,1414],{"class":205},[199,61246,194],{"class":874},[199,61248,882],{"class":205},[31,61250,61251],{},"只要点击就输出结果为22,前边11被覆盖了",[190,61253,61255],{"className":192,"code":61254,"language":194,"meta":57,"style":57},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[196,61256,61257,61262,61267,61271,61276,61281],{"__ignoreMap":57},[199,61258,61259],{"class":201,"line":202},[199,61260,61261],{"class":205},"  btn.addEventListener('click', function () {\n",[199,61263,61264],{"class":201,"line":36},[199,61265,61266],{"class":205},"      alert(11)\n",[199,61268,61269],{"class":201,"line":73},[199,61270,36302],{"class":205},[199,61272,61273],{"class":201,"line":333},[199,61274,61275],{"class":205},"    btn.addEventListener('click', function () {\n",[199,61277,61278],{"class":201,"line":227},[199,61279,61280],{"class":205},"      alert(22)\n",[199,61282,61283],{"class":201,"line":238},[199,61284,36302],{"class":205},[31,61286,61287],{},"点击第一次输出11,第二次点击为22",[19,61289,61291],{"id":61290},"_325-事件类型","3.2.5 事件类型",[31,61293,61294],{},[55,61295],{"alt":57,"src":61296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[627,61298,61300],{"id":61299},"_3251-鼠标事件","3.2.5.1 鼠标事件",[31,61302,61303],{},"补充知识:",[31,61305,61306],{},"轮播图自动播放模块,可以使用",[31,61308,61309],{},"let timerId = setInterval(function () {",[31,61311,61312],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[31,61314,61315],{},"用js方法模拟进行点击事件,click必须加()",[31,61317,61318],{},"next.click()",[31,61320,61321],{},"}, 1000)",[31,61323,61324],{},[55,61325],{"alt":57,"src":61326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[190,61328,61330],{"className":2763,"code":61329,"language":2765,"meta":57,"style":57},"\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",[196,61331,61332,61336,61346,61360,61364,61372,61387,61407,61427,61440,61448,61453,61458,61462,61466,61471,61476,61481,61486,61490,61494,61499,61504,61509,61513,61517,61522,61526,61531,61536,61540,61544,61549,61554,61559,61564,61569,61573,61577,61582,61587,61592,61597,61602,61606,61610,61615,61620,61625,61630,61635,61640,61645,61650,61655,61660,61664,61668,61673,61678,61682,61686,61691,61696,61700,61705,61710,61714,61718,61723,61727,61732,61737,61741,61746,61750,61754,61759,61764,61769,61774,61779,61784,61789,61793,61797,61801,61806,61811,61816,61821,61825,61833,61841,61845,61853,61868,61882,61903,61911,61925,61938,61953,61972,61984,61996,62008,62020,62032,62044,62056,62064,62079,62103,62127,62135,62143,62151,62159,62164,62169,62174,62179,62184,62189,62194,62199,62204,62209,62213,62218,62223,62228,62233,62238,62243,62248,62253,62258,62262,62267,62272,62277,62282,62287,62292,62297,62302,62307,62312,62317,62322,62326,62330,62335,62340,62345,62349,62354,62359,62364,62369,62374,62378,62383,62387,62391,62395,62399,62403,62407,62412,62417,62422,62427,62432,62437,62442,62447,62452,62456,62460,62465,62470,62475,62480,62485,62489,62494,62499,62504,62509,62514,62519,62523,62527,62532,62536,62541,62545,62550,62555,62560,62565,62570,62575,62579,62587,62595,62599],{"__ignoreMap":57},[199,61333,61334],{"class":201,"line":202},[199,61335,907],{"emptyLinePlaceholder":906},[199,61337,61338,61340,61342,61344],{"class":201,"line":36},[199,61339,871],{"class":205},[199,61341,875],{"class":1086},[199,61343,879],{"class":1018},[199,61345,882],{"class":205},[199,61347,61348,61350,61352,61354,61356,61358],{"class":201,"line":73},[199,61349,887],{"class":205},[199,61351,194],{"class":874},[199,61353,892],{"class":878},[199,61355,895],{"class":205},[199,61357,899],{"class":898},[199,61359,882],{"class":205},[199,61361,61362],{"class":201,"line":333},[199,61363,907],{"emptyLinePlaceholder":906},[199,61365,61366,61368,61370],{"class":201,"line":227},[199,61367,887],{"class":205},[199,61369,914],{"class":874},[199,61371,882],{"class":205},[199,61373,61374,61376,61378,61380,61382,61384],{"class":201,"line":238},[199,61375,1824],{"class":205},[199,61377,924],{"class":874},[199,61379,927],{"class":878},[199,61381,895],{"class":205},[199,61383,932],{"class":898},[199,61385,61386],{"class":205}," \u002F>\n",[199,61388,61389,61391,61393,61395,61397,61399,61401,61403,61405],{"class":201,"line":252},[199,61390,1824],{"class":205},[199,61392,924],{"class":874},[199,61394,943],{"class":878},[199,61396,895],{"class":205},[199,61398,948],{"class":898},[199,61400,951],{"class":878},[199,61402,895],{"class":205},[199,61404,956],{"class":898},[199,61406,61386],{"class":205},[199,61408,61409,61411,61413,61415,61417,61419,61421,61423,61425],{"class":201,"line":388},[199,61410,1824],{"class":205},[199,61412,924],{"class":874},[199,61414,967],{"class":878},[199,61416,895],{"class":205},[199,61418,972],{"class":898},[199,61420,951],{"class":878},[199,61422,895],{"class":205},[199,61424,979],{"class":898},[199,61426,61386],{"class":205},[199,61428,61429,61431,61433,61436,61438],{"class":201,"line":415},[199,61430,1824],{"class":205},[199,61432,988],{"class":874},[199,61434,61435],{"class":205},">轮播图点击切换\u003C\u002F",[199,61437,988],{"class":874},[199,61439,882],{"class":205},[199,61441,61442,61444,61446],{"class":201,"line":426},[199,61443,1824],{"class":205},[199,61445,1002],{"class":874},[199,61447,882],{"class":205},[199,61449,61450],{"class":201,"line":1015},[199,61451,61452],{"class":205},"    * {\n",[199,61454,61455],{"class":201,"line":1031},[199,61456,61457],{"class":205},"      box-sizing: border-box;\n",[199,61459,61460],{"class":201,"line":1043},[199,61461,2097],{"class":205},[199,61463,61464],{"class":201,"line":1049},[199,61465,907],{"emptyLinePlaceholder":906},[199,61467,61468],{"class":201,"line":1054},[199,61469,61470],{"class":205},"    .slider {\n",[199,61472,61473],{"class":201,"line":1062},[199,61474,61475],{"class":205},"      width: 560px;\n",[199,61477,61478],{"class":201,"line":1075},[199,61479,61480],{"class":205},"      height: 400px;\n",[199,61482,61483],{"class":201,"line":1092},[199,61484,61485],{"class":205},"      overflow: hidden;\n",[199,61487,61488],{"class":201,"line":1107},[199,61489,2097],{"class":205},[199,61491,61492],{"class":201,"line":1128},[199,61493,907],{"emptyLinePlaceholder":906},[199,61495,61496],{"class":201,"line":1146},[199,61497,61498],{"class":205},"    .slider-wrapper {\n",[199,61500,61501],{"class":201,"line":1163},[199,61502,61503],{"class":205},"      width: 100%;\n",[199,61505,61506],{"class":201,"line":1176},[199,61507,61508],{"class":205},"      height: 320px;\n",[199,61510,61511],{"class":201,"line":1189},[199,61512,2097],{"class":205},[199,61514,61515],{"class":201,"line":1202},[199,61516,907],{"emptyLinePlaceholder":906},[199,61518,61519],{"class":201,"line":1207},[199,61520,61521],{"class":205},"    .slider-wrapper img {\n",[199,61523,61524],{"class":201,"line":1212},[199,61525,61503],{"class":205},[199,61527,61528],{"class":201,"line":1225},[199,61529,61530],{"class":205},"      height: 100%;\n",[199,61532,61533],{"class":201,"line":1236},[199,61534,61535],{"class":205},"      display: block;\n",[199,61537,61538],{"class":201,"line":1249},[199,61539,2097],{"class":205},[199,61541,61542],{"class":201,"line":1262},[199,61543,907],{"emptyLinePlaceholder":906},[199,61545,61546],{"class":201,"line":1275},[199,61547,61548],{"class":205},"    .slider-footer {\n",[199,61550,61551],{"class":201,"line":1287},[199,61552,61553],{"class":205},"      height: 80px;\n",[199,61555,61556],{"class":201,"line":1292},[199,61557,61558],{"class":205},"      background-color: rgb(100, 67, 68);\n",[199,61560,61561],{"class":201,"line":1297},[199,61562,61563],{"class":205},"      padding: 12px 12px 0 12px;\n",[199,61565,61566],{"class":201,"line":1310},[199,61567,61568],{"class":205},"      position: relative;\n",[199,61570,61571],{"class":201,"line":1315},[199,61572,2097],{"class":205},[199,61574,61575],{"class":201,"line":1330},[199,61576,907],{"emptyLinePlaceholder":906},[199,61578,61579],{"class":201,"line":1335},[199,61580,61581],{"class":205},"    .slider-footer .toggle {\n",[199,61583,61584],{"class":201,"line":1340},[199,61585,61586],{"class":205},"      position: absolute;\n",[199,61588,61589],{"class":201,"line":1352},[199,61590,61591],{"class":205},"      right: 0;\n",[199,61593,61594],{"class":201,"line":1367},[199,61595,61596],{"class":205},"      top: 12px;\n",[199,61598,61599],{"class":201,"line":1381},[199,61600,61601],{"class":205},"      display: flex;\n",[199,61603,61604],{"class":201,"line":1396},[199,61605,2097],{"class":205},[199,61607,61608],{"class":201,"line":1401},[199,61609,907],{"emptyLinePlaceholder":906},[199,61611,61612],{"class":201,"line":1411},[199,61613,61614],{"class":205},"    .slider-footer .toggle button {\n",[199,61616,61617],{"class":201,"line":1421},[199,61618,61619],{"class":205},"      margin-right: 12px;\n",[199,61621,61622],{"class":201,"line":1426},[199,61623,61624],{"class":205},"      width: 28px;\n",[199,61626,61627],{"class":201,"line":1436},[199,61628,61629],{"class":205},"      height: 28px;\n",[199,61631,61632],{"class":201,"line":1441},[199,61633,61634],{"class":205},"      appearance: none;\n",[199,61636,61637],{"class":201,"line":1451},[199,61638,61639],{"class":205},"      border: none;\n",[199,61641,61642],{"class":201,"line":1458},[199,61643,61644],{"class":205},"      background: rgba(255, 255, 255, 0.1);\n",[199,61646,61647],{"class":201,"line":1464},[199,61648,61649],{"class":205},"      color: #fff;\n",[199,61651,61652],{"class":201,"line":1478},[199,61653,61654],{"class":205},"      border-radius: 4px;\n",[199,61656,61657],{"class":201,"line":1516},[199,61658,61659],{"class":205},"      cursor: pointer;\n",[199,61661,61662],{"class":201,"line":1522},[199,61663,2097],{"class":205},[199,61665,61666],{"class":201,"line":1528},[199,61667,907],{"emptyLinePlaceholder":906},[199,61669,61670],{"class":201,"line":1557},[199,61671,61672],{"class":205},"    .slider-footer .toggle button:hover {\n",[199,61674,61675],{"class":201,"line":1563},[199,61676,61677],{"class":205},"      background: rgba(255, 255, 255, 0.2);\n",[199,61679,61680],{"class":201,"line":1568},[199,61681,2097],{"class":205},[199,61683,61684],{"class":201,"line":1574},[199,61685,907],{"emptyLinePlaceholder":906},[199,61687,61688],{"class":201,"line":1580},[199,61689,61690],{"class":205},"    .slider-footer p {\n",[199,61692,61693],{"class":201,"line":1597},[199,61694,61695],{"class":205},"      margin: 0;\n",[199,61697,61698],{"class":201,"line":1602},[199,61699,61649],{"class":205},[199,61701,61702],{"class":201,"line":1608},[199,61703,61704],{"class":205},"      font-size: 18px;\n",[199,61706,61707],{"class":201,"line":1640},[199,61708,61709],{"class":205},"      margin-bottom: 10px;\n",[199,61711,61712],{"class":201,"line":1653},[199,61713,2097],{"class":205},[199,61715,61716],{"class":201,"line":1673},[199,61717,907],{"emptyLinePlaceholder":906},[199,61719,61720],{"class":201,"line":1690},[199,61721,61722],{"class":205},"    .slider-indicator {\n",[199,61724,61725],{"class":201,"line":1706},[199,61726,61695],{"class":205},[199,61728,61729],{"class":201,"line":1712},[199,61730,61731],{"class":205},"      padding: 0;\n",[199,61733,61734],{"class":201,"line":1720},[199,61735,61736],{"class":205},"      list-style: none;\n",[199,61738,61739],{"class":201,"line":1725},[199,61740,61601],{"class":205},[199,61742,61743],{"class":201,"line":1731},[199,61744,61745],{"class":205},"      align-items: center;\n",[199,61747,61748],{"class":201,"line":1745},[199,61749,2097],{"class":205},[199,61751,61752],{"class":201,"line":1754},[199,61753,907],{"emptyLinePlaceholder":906},[199,61755,61756],{"class":201,"line":1763},[199,61757,61758],{"class":205},"    .slider-indicator li {\n",[199,61760,61761],{"class":201,"line":1768},[199,61762,61763],{"class":205},"      width: 8px;\n",[199,61765,61766],{"class":201,"line":19628},[199,61767,61768],{"class":205},"      height: 8px;\n",[199,61770,61771],{"class":201,"line":19641},[199,61772,61773],{"class":205},"      margin: 4px;\n",[199,61775,61776],{"class":201,"line":19646},[199,61777,61778],{"class":205},"      border-radius: 50%;\n",[199,61780,61781],{"class":201,"line":19660},[199,61782,61783],{"class":205},"      background: #fff;\n",[199,61785,61786],{"class":201,"line":19665},[199,61787,61788],{"class":205},"      opacity: 0.4;\n",[199,61790,61791],{"class":201,"line":19671},[199,61792,61659],{"class":205},[199,61794,61795],{"class":201,"line":19676},[199,61796,2097],{"class":205},[199,61798,61799],{"class":201,"line":19690},[199,61800,907],{"emptyLinePlaceholder":906},[199,61802,61803],{"class":201,"line":19695},[199,61804,61805],{"class":205},"    .slider-indicator li.active {\n",[199,61807,61808],{"class":201,"line":19700},[199,61809,61810],{"class":205},"      width: 12px;\n",[199,61812,61813],{"class":201,"line":19714},[199,61814,61815],{"class":205},"      height: 12px;\n",[199,61817,61818],{"class":201,"line":19726},[199,61819,61820],{"class":205},"      opacity: 1;\n",[199,61822,61823],{"class":201,"line":19731},[199,61824,2097],{"class":205},[199,61826,61827,61829,61831],{"class":201,"line":19744},[199,61828,2112],{"class":205},[199,61830,1002],{"class":874},[199,61832,882],{"class":205},[199,61834,61835,61837,61839],{"class":201,"line":19749},[199,61836,1414],{"class":205},[199,61838,914],{"class":874},[199,61840,882],{"class":205},[199,61842,61843],{"class":201,"line":19754},[199,61844,907],{"emptyLinePlaceholder":906},[199,61846,61847,61849,61851],{"class":201,"line":19759},[199,61848,887],{"class":205},[199,61850,1431],{"class":874},[199,61852,882],{"class":205},[199,61854,61855,61857,61859,61861,61863,61866],{"class":201,"line":19772},[199,61856,1824],{"class":205},[199,61858,1220],{"class":874},[199,61860,55745],{"class":878},[199,61862,895],{"class":205},[199,61864,61865],{"class":898},"\"slider\"",[199,61867,882],{"class":205},[199,61869,61870,61872,61874,61876,61878,61880],{"class":201,"line":19777},[199,61871,921],{"class":205},[199,61873,1220],{"class":874},[199,61875,55745],{"class":878},[199,61877,895],{"class":205},[199,61879,57486],{"class":898},[199,61881,882],{"class":205},[199,61883,61884,61886,61888,61890,61892,61895,61897,61899,61901],{"class":201,"line":35475},[199,61885,57493],{"class":205},[199,61887,55],{"class":874},[199,61889,57498],{"class":878},[199,61891,895],{"class":205},[199,61893,61894],{"class":898},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[199,61896,57506],{"class":878},[199,61898,895],{"class":205},[199,61900,10549],{"class":898},[199,61902,61386],{"class":205},[199,61904,61905,61907,61909],{"class":201,"line":35481},[199,61906,1404],{"class":205},[199,61908,1220],{"class":874},[199,61910,882],{"class":205},[199,61912,61913,61915,61917,61919,61921,61923],{"class":201,"line":35487},[199,61914,921],{"class":205},[199,61916,1220],{"class":874},[199,61918,55745],{"class":878},[199,61920,895],{"class":205},[199,61922,57533],{"class":898},[199,61924,882],{"class":205},[199,61926,61927,61929,61931,61934,61936],{"class":201,"line":35493},[199,61928,57493],{"class":205},[199,61930,31],{"class":874},[199,61932,61933],{"class":205},">对人类来说会不会太超前了？\u003C\u002F",[199,61935,31],{"class":874},[199,61937,882],{"class":205},[199,61939,61940,61942,61944,61946,61948,61951],{"class":201,"line":35499},[199,61941,57493],{"class":205},[199,61943,176],{"class":874},[199,61945,55745],{"class":878},[199,61947,895],{"class":205},[199,61949,61950],{"class":898},"\"slider-indicator\"",[199,61952,882],{"class":205},[199,61954,61955,61957,61959,61961,61963,61966,61968,61970],{"class":201,"line":35510},[199,61956,57561],{"class":205},[199,61958,27],{"class":874},[199,61960,55745],{"class":878},[199,61962,895],{"class":205},[199,61964,61965],{"class":898},"\"active\"",[199,61967,57573],{"class":205},[199,61969,27],{"class":874},[199,61971,882],{"class":205},[199,61973,61974,61976,61978,61980,61982],{"class":201,"line":35516},[199,61975,57561],{"class":205},[199,61977,27],{"class":874},[199,61979,57573],{"class":205},[199,61981,27],{"class":874},[199,61983,882],{"class":205},[199,61985,61986,61988,61990,61992,61994],{"class":201,"line":35536},[199,61987,57561],{"class":205},[199,61989,27],{"class":874},[199,61991,57573],{"class":205},[199,61993,27],{"class":874},[199,61995,882],{"class":205},[199,61997,61998,62000,62002,62004,62006],{"class":201,"line":35542},[199,61999,57561],{"class":205},[199,62001,27],{"class":874},[199,62003,57573],{"class":205},[199,62005,27],{"class":874},[199,62007,882],{"class":205},[199,62009,62010,62012,62014,62016,62018],{"class":201,"line":35553},[199,62011,57561],{"class":205},[199,62013,27],{"class":874},[199,62015,57573],{"class":205},[199,62017,27],{"class":874},[199,62019,882],{"class":205},[199,62021,62022,62024,62026,62028,62030],{"class":201,"line":35559},[199,62023,57561],{"class":205},[199,62025,27],{"class":874},[199,62027,57573],{"class":205},[199,62029,27],{"class":874},[199,62031,882],{"class":205},[199,62033,62034,62036,62038,62040,62042],{"class":201,"line":35565},[199,62035,57561],{"class":205},[199,62037,27],{"class":874},[199,62039,57573],{"class":205},[199,62041,27],{"class":874},[199,62043,882],{"class":205},[199,62045,62046,62048,62050,62052,62054],{"class":201,"line":35571},[199,62047,57561],{"class":205},[199,62049,27],{"class":874},[199,62051,57573],{"class":205},[199,62053,27],{"class":874},[199,62055,882],{"class":205},[199,62057,62058,62060,62062],{"class":201,"line":35577},[199,62059,57666],{"class":205},[199,62061,176],{"class":874},[199,62063,882],{"class":205},[199,62065,62066,62068,62070,62072,62074,62077],{"class":201,"line":35583},[199,62067,57493],{"class":205},[199,62069,1220],{"class":874},[199,62071,55745],{"class":878},[199,62073,895],{"class":205},[199,62075,62076],{"class":898},"\"toggle\"",[199,62078,882],{"class":205},[199,62080,62081,62083,62085,62087,62089,62092,62094,62097,62099,62101],{"class":201,"line":35589},[199,62082,57561],{"class":205},[199,62084,56146],{"class":874},[199,62086,55745],{"class":878},[199,62088,895],{"class":205},[199,62090,62091],{"class":898},"\"prev\"",[199,62093,1217],{"class":205},[199,62095,62096],{"class":1018},"&lt;",[199,62098,1414],{"class":205},[199,62100,56146],{"class":874},[199,62102,882],{"class":205},[199,62104,62105,62107,62109,62111,62113,62116,62118,62121,62123,62125],{"class":201,"line":35595},[199,62106,57561],{"class":205},[199,62108,56146],{"class":874},[199,62110,55745],{"class":878},[199,62112,895],{"class":205},[199,62114,62115],{"class":898},"\"next\"",[199,62117,1217],{"class":205},[199,62119,62120],{"class":1018},"&gt;",[199,62122,1414],{"class":205},[199,62124,56146],{"class":874},[199,62126,882],{"class":205},[199,62128,62129,62131,62133],{"class":201,"line":35615},[199,62130,57666],{"class":205},[199,62132,1220],{"class":874},[199,62134,882],{"class":205},[199,62136,62137,62139,62141],{"class":201,"line":35621},[199,62138,1404],{"class":205},[199,62140,1220],{"class":874},[199,62142,882],{"class":205},[199,62144,62145,62147,62149],{"class":201,"line":35637},[199,62146,2112],{"class":205},[199,62148,1220],{"class":874},[199,62150,882],{"class":205},[199,62152,62153,62155,62157],{"class":201,"line":35643},[199,62154,1824],{"class":205},[199,62156,1446],{"class":874},[199,62158,882],{"class":205},[199,62160,62161],{"class":201,"line":35657},[199,62162,62163],{"class":205},"    \u002F\u002F 1. 初始数据\n",[199,62165,62166],{"class":201,"line":35663},[199,62167,62168],{"class":205},"    const data = [\n",[199,62170,62171],{"class":201,"line":35678},[199,62172,62173],{"class":205},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[199,62175,62176],{"class":201,"line":35684},[199,62177,62178],{"class":205},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[199,62180,62181],{"class":201,"line":35693},[199,62182,62183],{"class":205},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[199,62185,62186],{"class":201,"line":35699},[199,62187,62188],{"class":205},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[199,62190,62191],{"class":201,"line":35708},[199,62192,62193],{"class":205},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[199,62195,62196],{"class":201,"line":35714},[199,62197,62198],{"class":205},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[199,62200,62201],{"class":201,"line":35720},[199,62202,62203],{"class":205},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[199,62205,62206],{"class":201,"line":35729},[199,62207,62208],{"class":205},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[199,62210,62211],{"class":201,"line":35735},[199,62212,2805],{"class":205},[199,62214,62215],{"class":201,"line":35746},[199,62216,62217],{"class":205},"    \u002F\u002F 获取元素\n",[199,62219,62220],{"class":201,"line":35752},[199,62221,62222],{"class":205},"    const img = document.querySelector('.slider-wrapper img')\n",[199,62224,62225],{"class":201,"line":35771},[199,62226,62227],{"class":205},"    const p = document.querySelector('.slider-footer p')\n",[199,62229,62230],{"class":201,"line":35777},[199,62231,62232],{"class":205},"    const footer = document.querySelector('.slider-footer')\n",[199,62234,62235],{"class":201,"line":35788},[199,62236,62237],{"class":205},"    \u002F\u002F 1. 右按钮业务\n",[199,62239,62240],{"class":201,"line":35794},[199,62241,62242],{"class":205},"    \u002F\u002F 1.1 获取右侧按钮 \n",[199,62244,62245],{"class":201,"line":35814},[199,62246,62247],{"class":205},"    const next = document.querySelector('.next')\n",[199,62249,62250],{"class":201,"line":35830},[199,62251,62252],{"class":205},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[199,62254,62255],{"class":201,"line":35836},[199,62256,62257],{"class":205},"    \u002F\u002F 1.2 注册点击事件\n",[199,62259,62260],{"class":201,"line":35850},[199,62261,907],{"emptyLinePlaceholder":906},[199,62263,62264],{"class":201,"line":35856},[199,62265,62266],{"class":205},"    next.addEventListener('click', function () {\n",[199,62268,62269],{"class":201,"line":35862},[199,62270,62271],{"class":205},"      \u002F\u002F console.log(11)\n",[199,62273,62274],{"class":201,"line":35873},[199,62275,62276],{"class":205},"      i++\n",[199,62278,62279],{"class":201,"line":35879},[199,62280,62281],{"class":205},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[199,62283,62284],{"class":201,"line":35885},[199,62285,62286],{"class":205},"      \u002F\u002F if (i >= 8) {\n",[199,62288,62289],{"class":201,"line":35895},[199,62290,62291],{"class":205},"      \u002F\u002F   i = 0\n",[199,62293,62294],{"class":201,"line":35901},[199,62295,62296],{"class":205},"      \u002F\u002F }\n",[199,62298,62299],{"class":201,"line":35912},[199,62300,62301],{"class":205},"      i = i >= data.length ? 0 : i\n",[199,62303,62304],{"class":201,"line":35918},[199,62305,62306],{"class":205},"      \u002F\u002F 1.3 得到对应的对象\n",[199,62308,62309],{"class":201,"line":35928},[199,62310,62311],{"class":205},"      \u002F\u002F console.log(data[i])\n",[199,62313,62314],{"class":201,"line":35933},[199,62315,62316],{"class":205},"      \u002F\u002F 调用函数\n",[199,62318,62319],{"class":201,"line":35939},[199,62320,62321],{"class":205},"      toggle()\n",[199,62323,62324],{"class":201,"line":35988},[199,62325,36302],{"class":205},[199,62327,62328],{"class":201,"line":36035},[199,62329,907],{"emptyLinePlaceholder":906},[199,62331,62332],{"class":201,"line":36040},[199,62333,62334],{"class":205},"    \u002F\u002F 2. 左侧按钮业务\n",[199,62336,62337],{"class":201,"line":36046},[199,62338,62339],{"class":205},"    \u002F\u002F 2.1 获取左侧按钮 \n",[199,62341,62342],{"class":201,"line":36065},[199,62343,62344],{"class":205},"    const prev = document.querySelector('.prev')\n",[199,62346,62347],{"class":201,"line":36071},[199,62348,62257],{"class":205},[199,62350,62351],{"class":201,"line":36090},[199,62352,62353],{"class":205},"    prev.addEventListener('click', function () {\n",[199,62355,62356],{"class":201,"line":36096},[199,62357,62358],{"class":205},"      i--\n",[199,62360,62361],{"class":201,"line":36102},[199,62362,62363],{"class":205},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[199,62365,62366],{"class":201,"line":36112},[199,62367,62368],{"class":205},"      \u002F\u002F if (i \u003C 0) {\n",[199,62370,62371],{"class":201,"line":36117},[199,62372,62373],{"class":205},"      \u002F\u002F   i = 7\n",[199,62375,62376],{"class":201,"line":36123},[199,62377,62296],{"class":205},[199,62379,62380],{"class":201,"line":36139},[199,62381,62382],{"class":205},"      i = i \u003C 0 ? data.length - 1 : i\n",[199,62384,62385],{"class":201,"line":36184},[199,62386,62306],{"class":205},[199,62388,62389],{"class":201,"line":36190},[199,62390,62311],{"class":205},[199,62392,62393],{"class":201,"line":36196},[199,62394,62316],{"class":205},[199,62396,62397],{"class":201,"line":36202},[199,62398,62321],{"class":205},[199,62400,62401],{"class":201,"line":36213},[199,62402,36302],{"class":205},[199,62404,62405],{"class":201,"line":36219},[199,62406,907],{"emptyLinePlaceholder":906},[199,62408,62409],{"class":201,"line":36225},[199,62410,62411],{"class":205},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[199,62413,62414],{"class":201,"line":36231},[199,62415,62416],{"class":205},"    function toggle() {\n",[199,62418,62419],{"class":201,"line":36249},[199,62420,62421],{"class":205},"      \u002F\u002F 1.4 渲染对应的数据\n",[199,62423,62424],{"class":201,"line":36263},[199,62425,62426],{"class":205},"      img.src = data[i].url\n",[199,62428,62429],{"class":201,"line":36272},[199,62430,62431],{"class":205},"      p.innerHTML = data[i].title\n",[199,62433,62434],{"class":201,"line":36281},[199,62435,62436],{"class":205},"      footer.style.backgroundColor = data[i].color\n",[199,62438,62439],{"class":201,"line":36290},[199,62440,62441],{"class":205},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[199,62443,62444],{"class":201,"line":36299},[199,62445,62446],{"class":205},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[199,62448,62449],{"class":201,"line":36305},[199,62450,62451],{"class":205},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[199,62453,62454],{"class":201,"line":36311},[199,62455,2097],{"class":205},[199,62457,62458],{"class":201,"line":36319},[199,62459,907],{"emptyLinePlaceholder":906},[199,62461,62462],{"class":201,"line":36324},[199,62463,62464],{"class":205},"    \u002F\u002F 3. 自动播放模块\n",[199,62466,62467],{"class":201,"line":36330},[199,62468,62469],{"class":205},"    let timerId = setInterval(function () {\n",[199,62471,62472],{"class":201,"line":36341},[199,62473,62474],{"class":205},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[199,62476,62477],{"class":201,"line":36347},[199,62478,62479],{"class":205},"      next.click()\n",[199,62481,62482],{"class":201,"line":36367},[199,62483,62484],{"class":205},"    }, 1000)\n",[199,62486,62487],{"class":201,"line":36373},[199,62488,907],{"emptyLinePlaceholder":906},[199,62490,62491],{"class":201,"line":36379},[199,62492,62493],{"class":205},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[199,62495,62496],{"class":201,"line":36385},[199,62497,62498],{"class":205},"    const slider = document.querySelector('.slider')\n",[199,62500,62501],{"class":201,"line":36402},[199,62502,62503],{"class":205},"    \u002F\u002F 注册事件\n",[199,62505,62506],{"class":201,"line":36408},[199,62507,62508],{"class":205},"    slider.addEventListener('mouseenter', function () {\n",[199,62510,62511],{"class":201,"line":36414},[199,62512,62513],{"class":205},"      \u002F\u002F 停止定时器\n",[199,62515,62516],{"class":201,"line":36420},[199,62517,62518],{"class":205},"      clearInterval(timerId)\n",[199,62520,62521],{"class":201,"line":36426},[199,62522,36302],{"class":205},[199,62524,62525],{"class":201,"line":36432},[199,62526,907],{"emptyLinePlaceholder":906},[199,62528,62529],{"class":201,"line":36459},[199,62530,62531],{"class":205},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[199,62533,62534],{"class":201,"line":36483},[199,62535,62503],{"class":205},[199,62537,62538],{"class":201,"line":36489},[199,62539,62540],{"class":205},"    slider.addEventListener('mouseleave', function () {\n",[199,62542,62543],{"class":201,"line":36495},[199,62544,62513],{"class":205},[199,62546,62547],{"class":201,"line":36501},[199,62548,62549],{"class":205},"      if (timerId) clearInterval(timerId)\n",[199,62551,62552],{"class":201,"line":36512},[199,62553,62554],{"class":205},"      \u002F\u002F 开启定时器\n",[199,62556,62557],{"class":201,"line":36523},[199,62558,62559],{"class":205},"      timerId = setInterval(function () {\n",[199,62561,62562],{"class":201,"line":36529},[199,62563,62564],{"class":205},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[199,62566,62567],{"class":201,"line":36546},[199,62568,62569],{"class":205},"        next.click()\n",[199,62571,62572],{"class":201,"line":36569},[199,62573,62574],{"class":205},"      }, 1000)\n",[199,62576,62577],{"class":201,"line":36592},[199,62578,36302],{"class":205},[199,62580,62581,62583,62585],{"class":201,"line":36598},[199,62582,2112],{"class":205},[199,62584,1446],{"class":874},[199,62586,882],{"class":205},[199,62588,62589,62591,62593],{"class":201,"line":36603},[199,62590,1414],{"class":205},[199,62592,1431],{"class":874},[199,62594,882],{"class":205},[199,62596,62597],{"class":201,"line":36612},[199,62598,907],{"emptyLinePlaceholder":906},[199,62600,62601,62603,62605],{"class":201,"line":36622},[199,62602,1414],{"class":205},[199,62604,194],{"class":874},[199,62606,882],{"class":205},[627,62608,62610],{"id":62609},"_3252-焦点事件","3.2.5.2 焦点事件",[31,62612,62613],{},"小米搜索框案例：",[190,62615,62617],{"className":192,"code":62616,"language":194,"meta":57,"style":57},"\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",[196,62618,62619,62629,62643,62647,62655,62669,62689,62709,62721,62729,62735,62745,62755,62767,62771,62775,62782,62786,62797,62801,62805,62812,62823,62836,62850,62854,62858,62867,62879,62891,62905,62918,62931,62949,62960,62964,62968,62977,62994,62998,63002,63009,63019,63029,63040,63053,63065,63081,63092,63104,63108,63112,63120,63131,63148,63160,63172,63183,63187,63191,63202,63213,63217,63225,63229,63237,63241,63249,63264,63287,63302,63333,63360,63387,63414,63441,63468,63495,63504,63512,63520,63525,63545,63565,63570,63575,63593,63598,63608,63613,63627,63632,63637,63654,63663,63675,63679,63687,63695,63699],{"__ignoreMap":57},[199,62620,62621,62623,62625,62627],{"class":201,"line":202},[199,62622,871],{"class":205},[199,62624,875],{"class":874},[199,62626,879],{"class":878},[199,62628,882],{"class":205},[199,62630,62631,62633,62635,62637,62639,62641],{"class":201,"line":36},[199,62632,887],{"class":205},[199,62634,194],{"class":874},[199,62636,892],{"class":878},[199,62638,895],{"class":205},[199,62640,899],{"class":898},[199,62642,882],{"class":205},[199,62644,62645],{"class":201,"line":73},[199,62646,907],{"emptyLinePlaceholder":906},[199,62648,62649,62651,62653],{"class":201,"line":333},[199,62650,887],{"class":205},[199,62652,914],{"class":874},[199,62654,882],{"class":205},[199,62656,62657,62659,62661,62663,62665,62667],{"class":201,"line":227},[199,62658,921],{"class":205},[199,62660,924],{"class":874},[199,62662,927],{"class":878},[199,62664,895],{"class":205},[199,62666,932],{"class":898},[199,62668,882],{"class":205},[199,62670,62671,62673,62675,62677,62679,62681,62683,62685,62687],{"class":201,"line":238},[199,62672,921],{"class":205},[199,62674,924],{"class":874},[199,62676,943],{"class":878},[199,62678,895],{"class":205},[199,62680,948],{"class":898},[199,62682,951],{"class":878},[199,62684,895],{"class":205},[199,62686,956],{"class":898},[199,62688,882],{"class":205},[199,62690,62691,62693,62695,62697,62699,62701,62703,62705,62707],{"class":201,"line":252},[199,62692,921],{"class":205},[199,62694,924],{"class":874},[199,62696,967],{"class":878},[199,62698,895],{"class":205},[199,62700,972],{"class":898},[199,62702,951],{"class":878},[199,62704,895],{"class":205},[199,62706,979],{"class":898},[199,62708,882],{"class":205},[199,62710,62711,62713,62715,62717,62719],{"class":201,"line":388},[199,62712,921],{"class":205},[199,62714,988],{"class":874},[199,62716,991],{"class":205},[199,62718,988],{"class":874},[199,62720,882],{"class":205},[199,62722,62723,62725,62727],{"class":201,"line":415},[199,62724,921],{"class":205},[199,62726,1002],{"class":874},[199,62728,882],{"class":205},[199,62730,62731,62733],{"class":201,"line":426},[199,62732,1009],{"class":874},[199,62734,1012],{"class":205},[199,62736,62737,62739,62741,62743],{"class":201,"line":1015},[199,62738,1019],{"class":1018},[199,62740,1022],{"class":205},[199,62742,1025],{"class":1018},[199,62744,1028],{"class":205},[199,62746,62747,62749,62751,62753],{"class":201,"line":1031},[199,62748,1034],{"class":1018},[199,62750,1022],{"class":205},[199,62752,1025],{"class":1018},[199,62754,1028],{"class":205},[199,62756,62757,62760,62762,62765],{"class":201,"line":1043},[199,62758,62759],{"class":1018},"            box-sizing",[199,62761,1022],{"class":205},[199,62763,62764],{"class":1018},"border-box",[199,62766,1028],{"class":205},[199,62768,62769],{"class":201,"line":1049},[199,62770,1046],{"class":205},[199,62772,62773],{"class":201,"line":1054},[199,62774,907],{"emptyLinePlaceholder":906},[199,62776,62777,62780],{"class":201,"line":1062},[199,62778,62779],{"class":874},"        ul",[199,62781,1012],{"class":205},[199,62783,62784],{"class":201,"line":1075},[199,62785,907],{"emptyLinePlaceholder":906},[199,62787,62788,62791,62793,62795],{"class":201,"line":1092},[199,62789,62790],{"class":1018},"            list-style",[199,62792,1022],{"class":205},[199,62794,56996],{"class":1018},[199,62796,1028],{"class":205},[199,62798,62799],{"class":201,"line":1107},[199,62800,1046],{"class":205},[199,62802,62803],{"class":201,"line":1128},[199,62804,907],{"emptyLinePlaceholder":906},[199,62806,62807,62810],{"class":201,"line":1146},[199,62808,62809],{"class":878},"        .mi",[199,62811,1012],{"class":205},[199,62813,62814,62817,62819,62821],{"class":201,"line":1163},[199,62815,62816],{"class":1018},"            position",[199,62818,1022],{"class":205},[199,62820,57023],{"class":1018},[199,62822,1028],{"class":205},[199,62824,62825,62827,62829,62832,62834],{"class":201,"line":1176},[199,62826,1078],{"class":1018},[199,62828,1022],{"class":205},[199,62830,62831],{"class":1018},"223",[199,62833,1087],{"class":1086},[199,62835,1028],{"class":205},[199,62837,62838,62840,62842,62844,62846,62848],{"class":201,"line":1189},[199,62839,1019],{"class":1018},[199,62841,1022],{"class":205},[199,62843,3396],{"class":1018},[199,62845,1087],{"class":1086},[199,62847,1158],{"class":1018},[199,62849,1028],{"class":205},[199,62851,62852],{"class":201,"line":1202},[199,62853,1046],{"class":205},[199,62855,62856],{"class":201,"line":1207},[199,62857,907],{"emptyLinePlaceholder":906},[199,62859,62860,62862,62865],{"class":201,"line":1212},[199,62861,62809],{"class":878},[199,62863,62864],{"class":874}," input",[199,62866,1012],{"class":205},[199,62868,62869,62871,62873,62875,62877],{"class":201,"line":1225},[199,62870,1078],{"class":1018},[199,62872,1022],{"class":205},[199,62874,62831],{"class":1018},[199,62876,1087],{"class":1086},[199,62878,1028],{"class":205},[199,62880,62881,62883,62885,62887,62889],{"class":201,"line":1236},[199,62882,1095],{"class":1018},[199,62884,1022],{"class":205},[199,62886,3687],{"class":1018},[199,62888,1087],{"class":1086},[199,62890,1028],{"class":205},[199,62892,62893,62895,62897,62899,62901,62903],{"class":201,"line":1249},[199,62894,1034],{"class":1018},[199,62896,1022],{"class":205},[199,62898,1025],{"class":1018},[199,62900,4954],{"class":1018},[199,62902,1087],{"class":1086},[199,62904,1028],{"class":205},[199,62906,62907,62910,62912,62914,62916],{"class":201,"line":1262},[199,62908,62909],{"class":1018},"            font-size",[199,62911,1022],{"class":205},[199,62913,3629],{"class":1018},[199,62915,1087],{"class":1086},[199,62917,1028],{"class":205},[199,62919,62920,62923,62925,62927,62929],{"class":201,"line":1275},[199,62921,62922],{"class":1018},"            line-height",[199,62924,1022],{"class":205},[199,62926,3687],{"class":1018},[199,62928,1087],{"class":1086},[199,62930,1028],{"class":205},[199,62932,62933,62936,62938,62940,62942,62944,62947],{"class":201,"line":1287},[199,62934,62935],{"class":1018},"            border",[199,62937,1022],{"class":205},[199,62939,1115],{"class":1018},[199,62941,1087],{"class":1086},[199,62943,1120],{"class":1018},[199,62945,62946],{"class":1018}," #e0e0e0",[199,62948,1028],{"class":205},[199,62950,62951,62954,62956,62958],{"class":201,"line":1292},[199,62952,62953],{"class":1018},"            outline",[199,62955,1022],{"class":205},[199,62957,56996],{"class":1018},[199,62959,1028],{"class":205},[199,62961,62962],{"class":201,"line":1297},[199,62963,1046],{"class":205},[199,62965,62966],{"class":201,"line":1310},[199,62967,907],{"emptyLinePlaceholder":906},[199,62969,62970,62972,62975],{"class":201,"line":1315},[199,62971,62809],{"class":878},[199,62973,62974],{"class":878}," .search",[199,62976,1012],{"class":205},[199,62978,62979,62981,62983,62985,62987,62989,62992],{"class":201,"line":1330},[199,62980,62935],{"class":1018},[199,62982,1022],{"class":205},[199,62984,1115],{"class":1018},[199,62986,1087],{"class":1086},[199,62988,1120],{"class":1018},[199,62990,62991],{"class":1018}," #ff6700",[199,62993,1028],{"class":205},[199,62995,62996],{"class":201,"line":1335},[199,62997,1046],{"class":205},[199,62999,63000],{"class":201,"line":1340},[199,63001,907],{"emptyLinePlaceholder":906},[199,63003,63004,63007],{"class":201,"line":1352},[199,63005,63006],{"class":878},"        .result-list",[199,63008,1012],{"class":205},[199,63010,63011,63013,63015,63017],{"class":201,"line":1367},[199,63012,1065],{"class":1018},[199,63014,1022],{"class":205},[199,63016,56996],{"class":1018},[199,63018,1028],{"class":205},[199,63020,63021,63023,63025,63027],{"class":201,"line":1381},[199,63022,62816],{"class":1018},[199,63024,1022],{"class":205},[199,63026,57090],{"class":1018},[199,63028,1028],{"class":205},[199,63030,63031,63034,63036,63038],{"class":201,"line":1396},[199,63032,63033],{"class":1018},"            left",[199,63035,1022],{"class":205},[199,63037,1025],{"class":1018},[199,63039,1028],{"class":205},[199,63041,63042,63045,63047,63049,63051],{"class":201,"line":1401},[199,63043,63044],{"class":1018},"            top",[199,63046,1022],{"class":205},[199,63048,3687],{"class":1018},[199,63050,1087],{"class":1086},[199,63052,1028],{"class":205},[199,63054,63055,63057,63059,63061,63063],{"class":201,"line":1411},[199,63056,1078],{"class":1018},[199,63058,1022],{"class":205},[199,63060,62831],{"class":1018},[199,63062,1087],{"class":1086},[199,63064,1028],{"class":205},[199,63066,63067,63069,63071,63073,63075,63077,63079],{"class":201,"line":1421},[199,63068,62935],{"class":1018},[199,63070,1022],{"class":205},[199,63072,1115],{"class":1018},[199,63074,1087],{"class":1086},[199,63076,1120],{"class":1018},[199,63078,62991],{"class":1018},[199,63080,1028],{"class":205},[199,63082,63083,63086,63088,63090],{"class":201,"line":1426},[199,63084,63085],{"class":1018},"            border-top",[199,63087,1022],{"class":205},[199,63089,1025],{"class":1018},[199,63091,1028],{"class":205},[199,63093,63094,63097,63099,63102],{"class":201,"line":1436},[199,63095,63096],{"class":1018},"            background",[199,63098,1022],{"class":205},[199,63100,63101],{"class":1018},"#fff",[199,63103,1028],{"class":205},[199,63105,63106],{"class":201,"line":1441},[199,63107,1046],{"class":205},[199,63109,63110],{"class":201,"line":1451},[199,63111,907],{"emptyLinePlaceholder":906},[199,63113,63114,63116,63118],{"class":201,"line":1458},[199,63115,63006],{"class":878},[199,63117,4338],{"class":874},[199,63119,1012],{"class":205},[199,63121,63122,63124,63126,63129],{"class":201,"line":1464},[199,63123,1065],{"class":1018},[199,63125,1022],{"class":205},[199,63127,63128],{"class":1018},"block",[199,63130,1028],{"class":205},[199,63132,63133,63135,63137,63139,63141,63144,63146],{"class":201,"line":1478},[199,63134,1034],{"class":1018},[199,63136,1022],{"class":205},[199,63138,3428],{"class":1018},[199,63140,1087],{"class":1086},[199,63142,63143],{"class":1018}," 15",[199,63145,1087],{"class":1086},[199,63147,1028],{"class":205},[199,63149,63150,63152,63154,63156,63158],{"class":201,"line":1516},[199,63151,62909],{"class":1018},[199,63153,1022],{"class":205},[199,63155,3579],{"class":1018},[199,63157,1087],{"class":1086},[199,63159,1028],{"class":205},[199,63161,63162,63165,63167,63170],{"class":201,"line":1522},[199,63163,63164],{"class":1018},"            color",[199,63166,1022],{"class":205},[199,63168,63169],{"class":1018},"#424242",[199,63171,1028],{"class":205},[199,63173,63174,63177,63179,63181],{"class":201,"line":1528},[199,63175,63176],{"class":1018},"            text-decoration",[199,63178,1022],{"class":205},[199,63180,56996],{"class":1018},[199,63182,1028],{"class":205},[199,63184,63185],{"class":201,"line":1557},[199,63186,1046],{"class":205},[199,63188,63189],{"class":201,"line":1563},[199,63190,907],{"emptyLinePlaceholder":906},[199,63192,63193,63195,63197,63200],{"class":201,"line":1568},[199,63194,63006],{"class":878},[199,63196,4338],{"class":874},[199,63198,63199],{"class":878},":hover",[199,63201,1012],{"class":205},[199,63203,63204,63206,63208,63211],{"class":201,"line":1574},[199,63205,1252],{"class":1018},[199,63207,1022],{"class":205},[199,63209,63210],{"class":1018},"#eee",[199,63212,1028],{"class":205},[199,63214,63215],{"class":201,"line":1580},[199,63216,1046],{"class":205},[199,63218,63219,63221,63223],{"class":201,"line":1597},[199,63220,1404],{"class":205},[199,63222,1002],{"class":874},[199,63224,882],{"class":205},[199,63226,63227],{"class":201,"line":1602},[199,63228,907],{"emptyLinePlaceholder":906},[199,63230,63231,63233,63235],{"class":201,"line":1608},[199,63232,1414],{"class":205},[199,63234,914],{"class":874},[199,63236,882],{"class":205},[199,63238,63239],{"class":201,"line":1640},[199,63240,907],{"emptyLinePlaceholder":906},[199,63242,63243,63245,63247],{"class":201,"line":1653},[199,63244,887],{"class":205},[199,63246,1431],{"class":874},[199,63248,882],{"class":205},[199,63250,63251,63253,63255,63257,63259,63262],{"class":201,"line":1673},[199,63252,921],{"class":205},[199,63254,1220],{"class":874},[199,63256,55745],{"class":878},[199,63258,895],{"class":205},[199,63260,63261],{"class":898},"\"mi\"",[199,63263,882],{"class":205},[199,63265,63266,63268,63270,63272,63274,63277,63280,63282,63285],{"class":201,"line":1690},[199,63267,57561],{"class":205},[199,63269,56080],{"class":874},[199,63271,56083],{"class":878},[199,63273,895],{"class":205},[199,63275,63276],{"class":898},"\"search\"",[199,63278,63279],{"class":878}," placeholder",[199,63281,895],{"class":205},[199,63283,63284],{"class":898},"\"小米笔记本\"",[199,63286,882],{"class":205},[199,63288,63289,63291,63293,63295,63297,63300],{"class":201,"line":1706},[199,63290,57561],{"class":205},[199,63292,176],{"class":874},[199,63294,55745],{"class":878},[199,63296,895],{"class":205},[199,63298,63299],{"class":898},"\"result-list\"",[199,63301,882],{"class":205},[199,63303,63304,63307,63309,63312,63314,63317,63319,63322,63325,63327,63329,63331],{"class":201,"line":1712},[199,63305,63306],{"class":205},"            \u003C",[199,63308,27],{"class":874},[199,63310,63311],{"class":205},">\u003C",[199,63313,2867],{"class":874},[199,63315,63316],{"class":878}," href",[199,63318,895],{"class":205},[199,63320,63321],{"class":898},"\"#\"",[199,63323,63324],{"class":205},">全部商品\u003C\u002F",[199,63326,2867],{"class":874},[199,63328,57573],{"class":205},[199,63330,27],{"class":874},[199,63332,882],{"class":205},[199,63334,63335,63337,63339,63341,63343,63345,63347,63349,63352,63354,63356,63358],{"class":201,"line":1720},[199,63336,63306],{"class":205},[199,63338,27],{"class":874},[199,63340,63311],{"class":205},[199,63342,2867],{"class":874},[199,63344,63316],{"class":878},[199,63346,895],{"class":205},[199,63348,63321],{"class":898},[199,63350,63351],{"class":205},">小米11\u003C\u002F",[199,63353,2867],{"class":874},[199,63355,57573],{"class":205},[199,63357,27],{"class":874},[199,63359,882],{"class":205},[199,63361,63362,63364,63366,63368,63370,63372,63374,63376,63379,63381,63383,63385],{"class":201,"line":1725},[199,63363,63306],{"class":205},[199,63365,27],{"class":874},[199,63367,63311],{"class":205},[199,63369,2867],{"class":874},[199,63371,63316],{"class":878},[199,63373,895],{"class":205},[199,63375,63321],{"class":898},[199,63377,63378],{"class":205},">小米10S\u003C\u002F",[199,63380,2867],{"class":874},[199,63382,57573],{"class":205},[199,63384,27],{"class":874},[199,63386,882],{"class":205},[199,63388,63389,63391,63393,63395,63397,63399,63401,63403,63406,63408,63410,63412],{"class":201,"line":1731},[199,63390,63306],{"class":205},[199,63392,27],{"class":874},[199,63394,63311],{"class":205},[199,63396,2867],{"class":874},[199,63398,63316],{"class":878},[199,63400,895],{"class":205},[199,63402,63321],{"class":898},[199,63404,63405],{"class":205},">小米笔记本\u003C\u002F",[199,63407,2867],{"class":874},[199,63409,57573],{"class":205},[199,63411,27],{"class":874},[199,63413,882],{"class":205},[199,63415,63416,63418,63420,63422,63424,63426,63428,63430,63433,63435,63437,63439],{"class":201,"line":1745},[199,63417,63306],{"class":205},[199,63419,27],{"class":874},[199,63421,63311],{"class":205},[199,63423,2867],{"class":874},[199,63425,63316],{"class":878},[199,63427,895],{"class":205},[199,63429,63321],{"class":898},[199,63431,63432],{"class":205},">小米手机\u003C\u002F",[199,63434,2867],{"class":874},[199,63436,57573],{"class":205},[199,63438,27],{"class":874},[199,63440,882],{"class":205},[199,63442,63443,63445,63447,63449,63451,63453,63455,63457,63460,63462,63464,63466],{"class":201,"line":1754},[199,63444,63306],{"class":205},[199,63446,27],{"class":874},[199,63448,63311],{"class":205},[199,63450,2867],{"class":874},[199,63452,63316],{"class":878},[199,63454,895],{"class":205},[199,63456,63321],{"class":898},[199,63458,63459],{"class":205},">黑鲨4\u003C\u002F",[199,63461,2867],{"class":874},[199,63463,57573],{"class":205},[199,63465,27],{"class":874},[199,63467,882],{"class":205},[199,63469,63470,63472,63474,63476,63478,63480,63482,63484,63487,63489,63491,63493],{"class":201,"line":1763},[199,63471,63306],{"class":205},[199,63473,27],{"class":874},[199,63475,63311],{"class":205},[199,63477,2867],{"class":874},[199,63479,63316],{"class":878},[199,63481,895],{"class":205},[199,63483,63321],{"class":898},[199,63485,63486],{"class":205},">空调\u003C\u002F",[199,63488,2867],{"class":874},[199,63490,57573],{"class":205},[199,63492,27],{"class":874},[199,63494,882],{"class":205},[199,63496,63497,63500,63502],{"class":201,"line":1768},[199,63498,63499],{"class":205},"        \u003C\u002F",[199,63501,176],{"class":874},[199,63503,882],{"class":205},[199,63505,63506,63508,63510],{"class":201,"line":19628},[199,63507,1404],{"class":205},[199,63509,1220],{"class":874},[199,63511,882],{"class":205},[199,63513,63514,63516,63518],{"class":201,"line":19641},[199,63515,921],{"class":205},[199,63517,1446],{"class":874},[199,63519,882],{"class":205},[199,63521,63522],{"class":201,"line":19646},[199,63523,63524],{"class":1454},"        \u002F\u002F 1. 获取元素\n",[199,63526,63527,63530,63532,63534,63536,63538,63540,63543],{"class":201,"line":19660},[199,63528,63529],{"class":1086},"        const",[199,63531,62864],{"class":1018},[199,63533,16425],{"class":1086},[199,63535,56655],{"class":205},[199,63537,56658],{"class":878},[199,63539,1537],{"class":205},[199,63541,63542],{"class":898},"'[type=search]'",[199,63544,1594],{"class":205},[199,63546,63547,63549,63552,63554,63556,63558,63560,63563],{"class":201,"line":19665},[199,63548,63529],{"class":1086},[199,63550,63551],{"class":1018}," ul",[199,63553,16425],{"class":1086},[199,63555,56655],{"class":205},[199,63557,56658],{"class":878},[199,63559,1537],{"class":205},[199,63561,63562],{"class":898},"'.result-list'",[199,63564,1594],{"class":205},[199,63566,63567],{"class":201,"line":19671},[199,63568,63569],{"class":1454},"        \u002F\u002F console.log(input)\n",[199,63571,63572],{"class":201,"line":19676},[199,63573,63574],{"class":1454},"        \u002F\u002F 2. 监听事件 获得焦点\n",[199,63576,63577,63580,63582,63584,63587,63589,63591],{"class":201,"line":19690},[199,63578,63579],{"class":205},"        input.",[199,63581,60072],{"class":878},[199,63583,1537],{"class":205},[199,63585,63586],{"class":898},"'focus'",[199,63588,1912],{"class":205},[199,63590,56708],{"class":1086},[199,63592,56711],{"class":205},[199,63594,63595],{"class":201,"line":19695},[199,63596,63597],{"class":1454},"            \u002F\u002F ul显示\n",[199,63599,63600,63603,63605],{"class":201,"line":19700},[199,63601,63602],{"class":205},"            ul.style.display ",[199,63604,895],{"class":1086},[199,63606,63607],{"class":898}," 'block'\n",[199,63609,63610],{"class":201,"line":19714},[199,63611,63612],{"class":1454},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[199,63614,63615,63618,63620,63622,63625],{"class":201,"line":19726},[199,63616,63617],{"class":205},"            input.classList.",[199,63619,8231],{"class":878},[199,63621,1537],{"class":205},[199,63623,63624],{"class":898},"'search'",[199,63626,1594],{"class":205},[199,63628,63629],{"class":201,"line":19731},[199,63630,63631],{"class":205},"        })\n",[199,63633,63634],{"class":201,"line":19744},[199,63635,63636],{"class":1454},"        \u002F\u002F 3. 监听事件 失去焦点\n",[199,63638,63639,63641,63643,63645,63648,63650,63652],{"class":201,"line":19749},[199,63640,63579],{"class":205},[199,63642,60072],{"class":878},[199,63644,1537],{"class":205},[199,63646,63647],{"class":898},"'blur'",[199,63649,1912],{"class":205},[199,63651,56708],{"class":1086},[199,63653,56711],{"class":205},[199,63655,63656,63658,63660],{"class":201,"line":19754},[199,63657,63602],{"class":205},[199,63659,895],{"class":1086},[199,63661,63662],{"class":898}," 'none'\n",[199,63664,63665,63667,63669,63671,63673],{"class":201,"line":19759},[199,63666,63617],{"class":205},[199,63668,59265],{"class":878},[199,63670,1537],{"class":205},[199,63672,63624],{"class":898},[199,63674,1594],{"class":205},[199,63676,63677],{"class":201,"line":19772},[199,63678,63631],{"class":205},[199,63680,63681,63683,63685],{"class":201,"line":19777},[199,63682,1404],{"class":205},[199,63684,1446],{"class":874},[199,63686,882],{"class":205},[199,63688,63689,63691,63693],{"class":201,"line":35475},[199,63690,1414],{"class":205},[199,63692,1431],{"class":874},[199,63694,882],{"class":205},[199,63696,63697],{"class":201,"line":35481},[199,63698,907],{"emptyLinePlaceholder":906},[199,63700,63701,63703,63705],{"class":201,"line":35487},[199,63702,1414],{"class":205},[199,63704,194],{"class":874},[199,63706,882],{"class":205},[627,63708,63710],{"id":63709},"_3253-键盘事件","3.2.5.3 键盘事件",[31,63712,63713],{},"评论字数统计案例",[31,63715,63716],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[31,63718,63719],{},"牢记focus伪类选择器",[924,63721],{"charSet":63722},"UTF-8",[924,63724],{"name":63725,"content":63726},"viewport","width=device-width, initial-scale=1.0",[988,63728,63729],{},"Document",[1002,63731,63732],{},"\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",[56080,63734],{"type":8084},[176,63736,63737,63740],{},[27,63738,63739],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[27,63741,63742],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[190,63744,63746],{"className":192,"code":63745,"language":194,"meta":57,"style":57},"\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",[196,63747,63748,63758,63772,63776,63784,63798,63818,63838,63851,63859,63866,63879,63893,63903,63913,63917,63921,63928,63940,63952,63964,63976,64005,64018,64022,64026,64035,64046,64058,64069,64080,64092,64103,64115,64131,64143,64147,64151,64162,64173,64183,64195,64199,64203,64211,64222,64232,64243,64255,64268,64280,64292,64296,64300,64309,64321,64332,64345,64356,64370,64374,64378,64385,64397,64409,64419,64423,64427,64436,64448,64458,64462,64466,64477,64487,64506,64519,64523,64527,64537,64547,64551,64555,64566,64577,64589,64601,64605,64609,64620,64631,64645,64649,64653,64664,64674,64686,64690,64698,64706,64710,64718,64733,64752,64792,64805,64813,64827,64847,64855,64870,64893,64911,64926,64946,64966,64986,64994,65002,65010,65018,65038,65058,65063,65080,65089,65093,65098,65114,65122,65126,65131,65148,65153,65178,65182,65186,65191,65196,65204,65212,65216],{"__ignoreMap":57},[199,63749,63750,63752,63754,63756],{"class":201,"line":202},[199,63751,871],{"class":205},[199,63753,875],{"class":874},[199,63755,879],{"class":878},[199,63757,882],{"class":205},[199,63759,63760,63762,63764,63766,63768,63770],{"class":201,"line":36},[199,63761,887],{"class":205},[199,63763,194],{"class":874},[199,63765,892],{"class":878},[199,63767,895],{"class":205},[199,63769,899],{"class":898},[199,63771,882],{"class":205},[199,63773,63774],{"class":201,"line":73},[199,63775,907],{"emptyLinePlaceholder":906},[199,63777,63778,63780,63782],{"class":201,"line":333},[199,63779,887],{"class":205},[199,63781,914],{"class":874},[199,63783,882],{"class":205},[199,63785,63786,63788,63790,63792,63794,63796],{"class":201,"line":227},[199,63787,1824],{"class":205},[199,63789,924],{"class":874},[199,63791,927],{"class":878},[199,63793,895],{"class":205},[199,63795,932],{"class":898},[199,63797,882],{"class":205},[199,63799,63800,63802,63804,63806,63808,63810,63812,63814,63816],{"class":201,"line":238},[199,63801,1824],{"class":205},[199,63803,924],{"class":874},[199,63805,943],{"class":878},[199,63807,895],{"class":205},[199,63809,948],{"class":898},[199,63811,951],{"class":878},[199,63813,895],{"class":205},[199,63815,956],{"class":898},[199,63817,882],{"class":205},[199,63819,63820,63822,63824,63826,63828,63830,63832,63834,63836],{"class":201,"line":252},[199,63821,1824],{"class":205},[199,63823,924],{"class":874},[199,63825,967],{"class":878},[199,63827,895],{"class":205},[199,63829,972],{"class":898},[199,63831,951],{"class":878},[199,63833,895],{"class":205},[199,63835,979],{"class":898},[199,63837,882],{"class":205},[199,63839,63840,63842,63844,63847,63849],{"class":201,"line":388},[199,63841,1824],{"class":205},[199,63843,988],{"class":874},[199,63845,63846],{"class":205},">评论回车发布\u003C\u002F",[199,63848,988],{"class":874},[199,63850,882],{"class":205},[199,63852,63853,63855,63857],{"class":201,"line":415},[199,63854,1824],{"class":205},[199,63856,1002],{"class":874},[199,63858,882],{"class":205},[199,63860,63861,63864],{"class":201,"line":426},[199,63862,63863],{"class":878},"    .wrapper",[199,63865,1012],{"class":205},[199,63867,63868,63871,63873,63875,63877],{"class":201,"line":1015},[199,63869,63870],{"class":1018},"      min-width",[199,63872,1022],{"class":205},[199,63874,6886],{"class":1018},[199,63876,1087],{"class":1086},[199,63878,1028],{"class":205},[199,63880,63881,63884,63886,63889,63891],{"class":201,"line":1031},[199,63882,63883],{"class":1018},"      max-width",[199,63885,1022],{"class":205},[199,63887,63888],{"class":1018},"800",[199,63890,1087],{"class":1086},[199,63892,1028],{"class":205},[199,63894,63895,63897,63899,63901],{"class":201,"line":1043},[199,63896,57268],{"class":1018},[199,63898,1022],{"class":205},[199,63900,1070],{"class":1018},[199,63902,1028],{"class":205},[199,63904,63905,63907,63909,63911],{"class":201,"line":1049},[199,63906,57279],{"class":1018},[199,63908,1022],{"class":205},[199,63910,1184],{"class":1018},[199,63912,1028],{"class":205},[199,63914,63915],{"class":201,"line":1054},[199,63916,2097],{"class":205},[199,63918,63919],{"class":201,"line":1062},[199,63920,907],{"emptyLinePlaceholder":906},[199,63922,63923,63926],{"class":201,"line":1075},[199,63924,63925],{"class":878},"    .avatar",[199,63927,1012],{"class":205},[199,63929,63930,63932,63934,63936,63938],{"class":201,"line":1092},[199,63931,57030],{"class":1018},[199,63933,1022],{"class":205},[199,63935,3687],{"class":1018},[199,63937,1087],{"class":1086},[199,63939,1028],{"class":205},[199,63941,63942,63944,63946,63948,63950],{"class":201,"line":1107},[199,63943,57044],{"class":1018},[199,63945,1022],{"class":205},[199,63947,3687],{"class":1018},[199,63949,1087],{"class":1086},[199,63951,1028],{"class":205},[199,63953,63954,63956,63958,63960,63962],{"class":201,"line":1128},[199,63955,57393],{"class":1018},[199,63957,1022],{"class":205},[199,63959,1153],{"class":1018},[199,63961,3412],{"class":1086},[199,63963,1028],{"class":205},[199,63965,63966,63969,63971,63974],{"class":201,"line":1146},[199,63967,63968],{"class":1018},"      overflow",[199,63970,1022],{"class":205},[199,63972,63973],{"class":1018},"hidden",[199,63975,1028],{"class":205},[199,63977,63978,63981,63983,63986,63988,63991,63993,63996,63998,64000,64003],{"class":201,"line":1163},[199,63979,63980],{"class":1018},"      background",[199,63982,1022],{"class":205},[199,63984,63985],{"class":1018},"url",[199,63987,1537],{"class":205},[199,63989,63990],{"class":8113},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[199,63992,16575],{"class":205},[199,63994,63995],{"class":1018},"no-repeat",[199,63997,19989],{"class":1018},[199,63999,27822],{"class":205},[199,64001,64002],{"class":1018},"cover",[199,64004,1028],{"class":205},[199,64006,64007,64010,64012,64014,64016],{"class":201,"line":1176},[199,64008,64009],{"class":1018},"      margin-right",[199,64011,1022],{"class":205},[199,64013,3779],{"class":1018},[199,64015,1087],{"class":1086},[199,64017,1028],{"class":205},[199,64019,64020],{"class":201,"line":1189},[199,64021,2097],{"class":205},[199,64023,64024],{"class":201,"line":1202},[199,64025,907],{"emptyLinePlaceholder":906},[199,64027,64028,64030,64033],{"class":201,"line":1207},[199,64029,63863],{"class":878},[199,64031,64032],{"class":874}," textarea",[199,64034,1012],{"class":205},[199,64036,64037,64040,64042,64044],{"class":201,"line":1212},[199,64038,64039],{"class":1018},"      outline",[199,64041,1022],{"class":205},[199,64043,56996],{"class":1018},[199,64045,1028],{"class":205},[199,64047,64048,64051,64053,64056],{"class":201,"line":1225},[199,64049,64050],{"class":1018},"      border-color",[199,64052,1022],{"class":205},[199,64054,64055],{"class":1018},"transparent",[199,64057,1028],{"class":205},[199,64059,64060,64063,64065,64067],{"class":201,"line":1236},[199,64061,64062],{"class":1018},"      resize",[199,64064,1022],{"class":205},[199,64066,56996],{"class":1018},[199,64068,1028],{"class":205},[199,64070,64071,64073,64075,64078],{"class":201,"line":1249},[199,64072,63980],{"class":1018},[199,64074,1022],{"class":205},[199,64076,64077],{"class":1018},"#f5f5f5",[199,64079,1028],{"class":205},[199,64081,64082,64084,64086,64088,64090],{"class":201,"line":1262},[199,64083,57393],{"class":1018},[199,64085,1022],{"class":205},[199,64087,1915],{"class":1018},[199,64089,1087],{"class":1086},[199,64091,1028],{"class":205},[199,64093,64094,64097,64099,64101],{"class":201,"line":1275},[199,64095,64096],{"class":1018},"      flex",[199,64098,1022],{"class":205},[199,64100,1115],{"class":1018},[199,64102,1028],{"class":205},[199,64104,64105,64107,64109,64111,64113],{"class":201,"line":1287},[199,64106,56954],{"class":1018},[199,64108,1022],{"class":205},[199,64110,3528],{"class":1018},[199,64112,1087],{"class":1086},[199,64114,1028],{"class":205},[199,64116,64117,64120,64122,64124,64127,64129],{"class":201,"line":1292},[199,64118,64119],{"class":1018},"      transition",[199,64121,1022],{"class":205},[199,64123,30964],{"class":1018},[199,64125,64126],{"class":1018}," 0.5",[199,64128,3774],{"class":1086},[199,64130,1028],{"class":205},[199,64132,64133,64135,64137,64139,64141],{"class":201,"line":1297},[199,64134,57044],{"class":1018},[199,64136,1022],{"class":205},[199,64138,4026],{"class":1018},[199,64140,1087],{"class":1086},[199,64142,1028],{"class":205},[199,64144,64145],{"class":201,"line":1310},[199,64146,2097],{"class":205},[199,64148,64149],{"class":201,"line":1315},[199,64150,907],{"emptyLinePlaceholder":906},[199,64152,64153,64155,64157,64160],{"class":201,"line":1330},[199,64154,63863],{"class":878},[199,64156,64032],{"class":874},[199,64158,64159],{"class":878},":focus",[199,64161,1012],{"class":205},[199,64163,64164,64166,64168,64171],{"class":201,"line":1335},[199,64165,64050],{"class":1018},[199,64167,1022],{"class":205},[199,64169,64170],{"class":1018},"#e4e4e4",[199,64172,1028],{"class":205},[199,64174,64175,64177,64179,64181],{"class":201,"line":1340},[199,64176,63980],{"class":1018},[199,64178,1022],{"class":205},[199,64180,63101],{"class":1018},[199,64182,1028],{"class":205},[199,64184,64185,64187,64189,64191,64193],{"class":201,"line":1352},[199,64186,57044],{"class":1018},[199,64188,1022],{"class":205},[199,64190,1153],{"class":1018},[199,64192,1087],{"class":1086},[199,64194,1028],{"class":205},[199,64196,64197],{"class":201,"line":1367},[199,64198,2097],{"class":205},[199,64200,64201],{"class":201,"line":1381},[199,64202,907],{"emptyLinePlaceholder":906},[199,64204,64205,64207,64209],{"class":201,"line":1396},[199,64206,63863],{"class":878},[199,64208,59726],{"class":874},[199,64210,1012],{"class":205},[199,64212,64213,64215,64217,64220],{"class":201,"line":1401},[199,64214,63980],{"class":1018},[199,64216,1022],{"class":205},[199,64218,64219],{"class":1018},"#00aeec",[199,64221,1028],{"class":205},[199,64223,64224,64226,64228,64230],{"class":201,"line":1411},[199,64225,59675],{"class":1018},[199,64227,1022],{"class":205},[199,64229,63101],{"class":1018},[199,64231,1028],{"class":205},[199,64233,64234,64237,64239,64241],{"class":201,"line":1421},[199,64235,64236],{"class":1018},"      border",[199,64238,1022],{"class":205},[199,64240,56996],{"class":1018},[199,64242,1028],{"class":205},[199,64244,64245,64247,64249,64251,64253],{"class":201,"line":1426},[199,64246,57393],{"class":1018},[199,64248,1022],{"class":205},[199,64250,1915],{"class":1018},[199,64252,1087],{"class":1086},[199,64254,1028],{"class":205},[199,64256,64257,64260,64262,64264,64266],{"class":201,"line":1436},[199,64258,64259],{"class":1018},"      margin-left",[199,64261,1022],{"class":205},[199,64263,3528],{"class":1018},[199,64265,1087],{"class":1086},[199,64267,1028],{"class":205},[199,64269,64270,64272,64274,64276,64278],{"class":201,"line":1441},[199,64271,57030],{"class":1018},[199,64273,1022],{"class":205},[199,64275,1374],{"class":1018},[199,64277,1087],{"class":1086},[199,64279,1028],{"class":205},[199,64281,64282,64285,64287,64290],{"class":201,"line":1451},[199,64283,64284],{"class":1018},"      cursor",[199,64286,1022],{"class":205},[199,64288,64289],{"class":1018},"pointer",[199,64291,1028],{"class":205},[199,64293,64294],{"class":201,"line":1458},[199,64295,2097],{"class":205},[199,64297,64298],{"class":201,"line":1464},[199,64299,907],{"emptyLinePlaceholder":906},[199,64301,64302,64304,64307],{"class":201,"line":1478},[199,64303,63863],{"class":878},[199,64305,64306],{"class":878}," .total",[199,64308,1012],{"class":205},[199,64310,64311,64313,64315,64317,64319],{"class":201,"line":1516},[199,64312,64009],{"class":1018},[199,64314,1022],{"class":205},[199,64316,3692],{"class":1018},[199,64318,1087],{"class":1086},[199,64320,1028],{"class":205},[199,64322,64323,64325,64327,64330],{"class":201,"line":1522},[199,64324,59675],{"class":1018},[199,64326,1022],{"class":205},[199,64328,64329],{"class":1018},"#999",[199,64331,1028],{"class":205},[199,64333,64334,64337,64339,64341,64343],{"class":201,"line":1528},[199,64335,64336],{"class":1018},"      margin-top",[199,64338,1022],{"class":205},[199,64340,1909],{"class":1018},[199,64342,1087],{"class":1086},[199,64344,1028],{"class":205},[199,64346,64347,64350,64352,64354],{"class":201,"line":1557},[199,64348,64349],{"class":1018},"      opacity",[199,64351,1022],{"class":205},[199,64353,1025],{"class":1018},[199,64355,1028],{"class":205},[199,64357,64358,64360,64362,64364,64366,64368],{"class":201,"line":1563},[199,64359,64119],{"class":1018},[199,64361,1022],{"class":205},[199,64363,30964],{"class":1018},[199,64365,64126],{"class":1018},[199,64367,3774],{"class":1086},[199,64369,1028],{"class":205},[199,64371,64372],{"class":201,"line":1568},[199,64373,2097],{"class":205},[199,64375,64376],{"class":201,"line":1574},[199,64377,907],{"emptyLinePlaceholder":906},[199,64379,64380,64383],{"class":201,"line":1580},[199,64381,64382],{"class":878},"    .list",[199,64384,1012],{"class":205},[199,64386,64387,64389,64391,64393,64395],{"class":201,"line":1597},[199,64388,63870],{"class":1018},[199,64390,1022],{"class":205},[199,64392,6886],{"class":1018},[199,64394,1087],{"class":1086},[199,64396,1028],{"class":205},[199,64398,64399,64401,64403,64405,64407],{"class":201,"line":1602},[199,64400,63883],{"class":1018},[199,64402,1022],{"class":205},[199,64404,63888],{"class":1018},[199,64406,1087],{"class":1086},[199,64408,1028],{"class":205},[199,64410,64411,64413,64415,64417],{"class":201,"line":1608},[199,64412,57268],{"class":1018},[199,64414,1022],{"class":205},[199,64416,1070],{"class":1018},[199,64418,1028],{"class":205},[199,64420,64421],{"class":201,"line":1640},[199,64422,2097],{"class":205},[199,64424,64425],{"class":201,"line":1653},[199,64426,907],{"emptyLinePlaceholder":906},[199,64428,64429,64431,64434],{"class":201,"line":1673},[199,64430,64382],{"class":878},[199,64432,64433],{"class":878}," .item",[199,64435,1012],{"class":205},[199,64437,64438,64440,64442,64444,64446],{"class":201,"line":1690},[199,64439,57030],{"class":1018},[199,64441,1022],{"class":205},[199,64443,3396],{"class":1018},[199,64445,3412],{"class":1086},[199,64447,1028],{"class":205},[199,64449,64450,64452,64454,64456],{"class":201,"line":1706},[199,64451,57268],{"class":1018},[199,64453,1022],{"class":205},[199,64455,1070],{"class":1018},[199,64457,1028],{"class":205},[199,64459,64460],{"class":201,"line":1712},[199,64461,2097],{"class":205},[199,64463,64464],{"class":201,"line":1720},[199,64465,907],{"emptyLinePlaceholder":906},[199,64467,64468,64470,64472,64475],{"class":201,"line":1725},[199,64469,64382],{"class":878},[199,64471,64433],{"class":878},[199,64473,64474],{"class":878}," .info",[199,64476,1012],{"class":205},[199,64478,64479,64481,64483,64485],{"class":201,"line":1731},[199,64480,64096],{"class":1018},[199,64482,1022],{"class":205},[199,64484,1115],{"class":1018},[199,64486,1028],{"class":205},[199,64488,64489,64492,64494,64496,64498,64501,64504],{"class":201,"line":1745},[199,64490,64491],{"class":1018},"      border-bottom",[199,64493,1022],{"class":205},[199,64495,1115],{"class":1018},[199,64497,1087],{"class":1086},[199,64499,64500],{"class":1018}," dashed",[199,64502,64503],{"class":1018}," #e4e4e4",[199,64505,1028],{"class":205},[199,64507,64508,64511,64513,64515,64517],{"class":201,"line":1754},[199,64509,64510],{"class":1018},"      padding-bottom",[199,64512,1022],{"class":205},[199,64514,3528],{"class":1018},[199,64516,1087],{"class":1086},[199,64518,1028],{"class":205},[199,64520,64521],{"class":201,"line":1763},[199,64522,2097],{"class":205},[199,64524,64525],{"class":201,"line":1768},[199,64526,907],{"emptyLinePlaceholder":906},[199,64528,64529,64531,64533,64535],{"class":201,"line":19628},[199,64530,64382],{"class":878},[199,64532,64433],{"class":878},[199,64534,9722],{"class":874},[199,64536,1012],{"class":205},[199,64538,64539,64541,64543,64545],{"class":201,"line":19641},[199,64540,56965],{"class":1018},[199,64542,1022],{"class":205},[199,64544,1025],{"class":1018},[199,64546,1028],{"class":205},[199,64548,64549],{"class":201,"line":19646},[199,64550,2097],{"class":205},[199,64552,64553],{"class":201,"line":19660},[199,64554,907],{"emptyLinePlaceholder":906},[199,64556,64557,64559,64561,64564],{"class":201,"line":19665},[199,64558,64382],{"class":878},[199,64560,64433],{"class":878},[199,64562,64563],{"class":878}," .name",[199,64565,1012],{"class":205},[199,64567,64568,64570,64572,64575],{"class":201,"line":19671},[199,64569,59675],{"class":1018},[199,64571,1022],{"class":205},[199,64573,64574],{"class":1018},"#FB7299",[199,64576,1028],{"class":205},[199,64578,64579,64581,64583,64585,64587],{"class":201,"line":19676},[199,64580,57181],{"class":1018},[199,64582,1022],{"class":205},[199,64584,3629],{"class":1018},[199,64586,1087],{"class":1086},[199,64588,1028],{"class":205},[199,64590,64591,64594,64596,64599],{"class":201,"line":19690},[199,64592,64593],{"class":1018},"      font-weight",[199,64595,1022],{"class":205},[199,64597,64598],{"class":1018},"bold",[199,64600,1028],{"class":205},[199,64602,64603],{"class":201,"line":19695},[199,64604,2097],{"class":205},[199,64606,64607],{"class":201,"line":19700},[199,64608,907],{"emptyLinePlaceholder":906},[199,64610,64611,64613,64615,64618],{"class":201,"line":19714},[199,64612,64382],{"class":878},[199,64614,64433],{"class":878},[199,64616,64617],{"class":878}," .text",[199,64619,1012],{"class":205},[199,64621,64622,64624,64626,64629],{"class":201,"line":19726},[199,64623,59675],{"class":1018},[199,64625,1022],{"class":205},[199,64627,64628],{"class":1018},"#333",[199,64630,1028],{"class":205},[199,64632,64633,64635,64637,64639,64641,64643],{"class":201,"line":19731},[199,64634,56954],{"class":1018},[199,64636,1022],{"class":205},[199,64638,3528],{"class":1018},[199,64640,1087],{"class":1086},[199,64642,1621],{"class":1018},[199,64644,1028],{"class":205},[199,64646,64647],{"class":201,"line":19744},[199,64648,2097],{"class":205},[199,64650,64651],{"class":201,"line":19749},[199,64652,907],{"emptyLinePlaceholder":906},[199,64654,64655,64657,64659,64662],{"class":201,"line":19754},[199,64656,64382],{"class":878},[199,64658,64433],{"class":878},[199,64660,64661],{"class":878}," .time",[199,64663,1012],{"class":205},[199,64665,64666,64668,64670,64672],{"class":201,"line":19759},[199,64667,59675],{"class":1018},[199,64669,1022],{"class":205},[199,64671,64329],{"class":1018},[199,64673,1028],{"class":205},[199,64675,64676,64678,64680,64682,64684],{"class":201,"line":19772},[199,64677,57181],{"class":1018},[199,64679,1022],{"class":205},[199,64681,3579],{"class":1018},[199,64683,1087],{"class":1086},[199,64685,1028],{"class":205},[199,64687,64688],{"class":201,"line":19777},[199,64689,2097],{"class":205},[199,64691,64692,64694,64696],{"class":201,"line":35475},[199,64693,2112],{"class":205},[199,64695,1002],{"class":874},[199,64697,882],{"class":205},[199,64699,64700,64702,64704],{"class":201,"line":35481},[199,64701,1414],{"class":205},[199,64703,914],{"class":874},[199,64705,882],{"class":205},[199,64707,64708],{"class":201,"line":35487},[199,64709,907],{"emptyLinePlaceholder":906},[199,64711,64712,64714,64716],{"class":201,"line":35493},[199,64713,887],{"class":205},[199,64715,1431],{"class":874},[199,64717,882],{"class":205},[199,64719,64720,64722,64724,64726,64728,64731],{"class":201,"line":35499},[199,64721,1824],{"class":205},[199,64723,1220],{"class":874},[199,64725,55745],{"class":878},[199,64727,895],{"class":205},[199,64729,64730],{"class":898},"\"wrapper\"",[199,64732,882],{"class":205},[199,64734,64735,64737,64739,64741,64743,64746,64748,64750],{"class":201,"line":35510},[199,64736,921],{"class":205},[199,64738,1548],{"class":874},[199,64740,55745],{"class":878},[199,64742,895],{"class":205},[199,64744,64745],{"class":898},"\"avatar\"",[199,64747,57573],{"class":205},[199,64749,1548],{"class":874},[199,64751,882],{"class":205},[199,64753,64754,64756,64758,64760,64762,64765,64767,64769,64772,64774,64776,64778,64781,64783,64786,64788,64790],{"class":201,"line":35516},[199,64755,921],{"class":205},[199,64757,56547],{"class":874},[199,64759,17818],{"class":878},[199,64761,895],{"class":205},[199,64763,64764],{"class":898},"\"tx\"",[199,64766,63279],{"class":878},[199,64768,895],{"class":205},[199,64770,64771],{"class":898},"\"发一条友善的评论\"",[199,64773,56570],{"class":878},[199,64775,895],{"class":205},[199,64777,6602],{"class":898},[199,64779,64780],{"class":878}," maxlength",[199,64782,895],{"class":205},[199,64784,64785],{"class":898},"\"200\"",[199,64787,57573],{"class":205},[199,64789,56547],{"class":874},[199,64791,882],{"class":205},[199,64793,64794,64796,64798,64801,64803],{"class":201,"line":35536},[199,64795,921],{"class":205},[199,64797,56146],{"class":874},[199,64799,64800],{"class":205},">发布\u003C\u002F",[199,64802,56146],{"class":874},[199,64804,882],{"class":205},[199,64806,64807,64809,64811],{"class":201,"line":35542},[199,64808,2112],{"class":205},[199,64810,1220],{"class":874},[199,64812,882],{"class":205},[199,64814,64815,64817,64819,64821,64823,64825],{"class":201,"line":35553},[199,64816,1824],{"class":205},[199,64818,1220],{"class":874},[199,64820,55745],{"class":878},[199,64822,895],{"class":205},[199,64824,64730],{"class":898},[199,64826,882],{"class":205},[199,64828,64829,64831,64833,64835,64837,64840,64843,64845],{"class":201,"line":35559},[199,64830,921],{"class":205},[199,64832,199],{"class":874},[199,64834,55745],{"class":878},[199,64836,895],{"class":205},[199,64838,64839],{"class":898},"\"total\"",[199,64841,64842],{"class":205},">0\u002F200字\u003C\u002F",[199,64844,199],{"class":874},[199,64846,882],{"class":205},[199,64848,64849,64851,64853],{"class":201,"line":35565},[199,64850,2112],{"class":205},[199,64852,1220],{"class":874},[199,64854,882],{"class":205},[199,64856,64857,64859,64861,64863,64865,64868],{"class":201,"line":35571},[199,64858,1824],{"class":205},[199,64860,1220],{"class":874},[199,64862,55745],{"class":878},[199,64864,895],{"class":205},[199,64866,64867],{"class":898},"\"list\"",[199,64869,882],{"class":205},[199,64871,64872,64874,64876,64878,64880,64883,64886,64888,64891],{"class":201,"line":35577},[199,64873,921],{"class":205},[199,64875,1220],{"class":874},[199,64877,55745],{"class":878},[199,64879,895],{"class":205},[199,64881,64882],{"class":898},"\"item\"",[199,64884,64885],{"class":878}," style",[199,64887,895],{"class":205},[199,64889,64890],{"class":898},"\"display: none;\"",[199,64892,882],{"class":205},[199,64894,64895,64897,64899,64901,64903,64905,64907,64909],{"class":201,"line":35583},[199,64896,57493],{"class":205},[199,64898,1548],{"class":874},[199,64900,55745],{"class":878},[199,64902,895],{"class":205},[199,64904,64745],{"class":898},[199,64906,57573],{"class":205},[199,64908,1548],{"class":874},[199,64910,882],{"class":205},[199,64912,64913,64915,64917,64919,64921,64924],{"class":201,"line":35589},[199,64914,57493],{"class":205},[199,64916,1220],{"class":874},[199,64918,55745],{"class":878},[199,64920,895],{"class":205},[199,64922,64923],{"class":898},"\"info\"",[199,64925,882],{"class":205},[199,64927,64928,64930,64932,64934,64936,64939,64942,64944],{"class":201,"line":35595},[199,64929,57561],{"class":205},[199,64931,31],{"class":874},[199,64933,55745],{"class":878},[199,64935,895],{"class":205},[199,64937,64938],{"class":898},"\"name\"",[199,64940,64941],{"class":205},">清风徐来\u003C\u002F",[199,64943,31],{"class":874},[199,64945,882],{"class":205},[199,64947,64948,64950,64952,64954,64956,64959,64962,64964],{"class":201,"line":35615},[199,64949,57561],{"class":205},[199,64951,31],{"class":874},[199,64953,55745],{"class":878},[199,64955,895],{"class":205},[199,64957,64958],{"class":898},"\"text\"",[199,64960,64961],{"class":205},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[199,64963,31],{"class":874},[199,64965,882],{"class":205},[199,64967,64968,64970,64972,64974,64976,64979,64982,64984],{"class":201,"line":35621},[199,64969,57561],{"class":205},[199,64971,31],{"class":874},[199,64973,55745],{"class":878},[199,64975,895],{"class":205},[199,64977,64978],{"class":898},"\"time\"",[199,64980,64981],{"class":205},">2022-10-10 20:29:21\u003C\u002F",[199,64983,31],{"class":874},[199,64985,882],{"class":205},[199,64987,64988,64990,64992],{"class":201,"line":35637},[199,64989,57666],{"class":205},[199,64991,1220],{"class":874},[199,64993,882],{"class":205},[199,64995,64996,64998,65000],{"class":201,"line":35643},[199,64997,1404],{"class":205},[199,64999,1220],{"class":874},[199,65001,882],{"class":205},[199,65003,65004,65006,65008],{"class":201,"line":35657},[199,65005,2112],{"class":205},[199,65007,1220],{"class":874},[199,65009,882],{"class":205},[199,65011,65012,65014,65016],{"class":201,"line":35663},[199,65013,1824],{"class":205},[199,65015,1446],{"class":874},[199,65017,882],{"class":205},[199,65019,65020,65022,65025,65027,65029,65031,65033,65036],{"class":201,"line":35678},[199,65021,14084],{"class":1086},[199,65023,65024],{"class":1018}," tx",[199,65026,16425],{"class":1086},[199,65028,56655],{"class":205},[199,65030,56658],{"class":878},[199,65032,1537],{"class":205},[199,65034,65035],{"class":898},"'#tx'",[199,65037,1594],{"class":205},[199,65039,65040,65042,65045,65047,65049,65051,65053,65056],{"class":201,"line":35684},[199,65041,14084],{"class":1086},[199,65043,65044],{"class":1018}," total",[199,65046,16425],{"class":1086},[199,65048,56655],{"class":205},[199,65050,56658],{"class":878},[199,65052,1537],{"class":205},[199,65054,65055],{"class":898},"'.total'",[199,65057,1594],{"class":205},[199,65059,65060],{"class":201,"line":35693},[199,65061,65062],{"class":1454},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[199,65064,65065,65068,65070,65072,65074,65076,65078],{"class":201,"line":35699},[199,65066,65067],{"class":205},"    tx.",[199,65069,60072],{"class":878},[199,65071,1537],{"class":205},[199,65073,63586],{"class":898},[199,65075,1912],{"class":205},[199,65077,56708],{"class":1086},[199,65079,56711],{"class":205},[199,65081,65082,65085,65087],{"class":201,"line":35708},[199,65083,65084],{"class":205},"      total.style.opacity ",[199,65086,895],{"class":1086},[199,65088,57958],{"class":1018},[199,65090,65091],{"class":201,"line":35714},[199,65092,36302],{"class":205},[199,65094,65095],{"class":201,"line":35720},[199,65096,65097],{"class":1454},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[199,65099,65100,65102,65104,65106,65108,65110,65112],{"class":201,"line":35729},[199,65101,65067],{"class":205},[199,65103,60072],{"class":878},[199,65105,1537],{"class":205},[199,65107,63647],{"class":898},[199,65109,1912],{"class":205},[199,65111,56708],{"class":1086},[199,65113,56711],{"class":205},[199,65115,65116,65118,65120],{"class":201,"line":35735},[199,65117,65084],{"class":205},[199,65119,895],{"class":1086},[199,65121,50173],{"class":1018},[199,65123,65124],{"class":201,"line":35746},[199,65125,36302],{"class":205},[199,65127,65128],{"class":201,"line":35752},[199,65129,65130],{"class":1454},"    \u002F\u002F 3. 检测用户输入\n",[199,65132,65133,65135,65137,65139,65142,65144,65146],{"class":201,"line":35771},[199,65134,65067],{"class":205},[199,65136,60072],{"class":878},[199,65138,1537],{"class":205},[199,65140,65141],{"class":898},"'input'",[199,65143,1912],{"class":205},[199,65145,56708],{"class":1086},[199,65147,56711],{"class":205},[199,65149,65150],{"class":201,"line":35777},[199,65151,65152],{"class":1454},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[199,65154,65155,65158,65160,65163,65166,65168,65171,65173,65175],{"class":201,"line":35788},[199,65156,65157],{"class":205},"      total.innerHTML ",[199,65159,895],{"class":1086},[199,65161,65162],{"class":898}," `${",[199,65164,65165],{"class":205},"tx",[199,65167,3638],{"class":898},[199,65169,65170],{"class":205},"value",[199,65172,3638],{"class":898},[199,65174,1631],{"class":1018},[199,65176,65177],{"class":898},"}\u002F200字`\n",[199,65179,65180],{"class":201,"line":35794},[199,65181,36302],{"class":205},[199,65183,65184],{"class":201,"line":35814},[199,65185,907],{"emptyLinePlaceholder":906},[199,65187,65188],{"class":201,"line":35830},[199,65189,65190],{"class":1454},"    \u002F\u002F const str = 'andy'\n",[199,65192,65193],{"class":201,"line":35836},[199,65194,65195],{"class":1454},"    \u002F\u002F console.log(str.length)\n",[199,65197,65198,65200,65202],{"class":201,"line":35850},[199,65199,2112],{"class":205},[199,65201,1446],{"class":874},[199,65203,882],{"class":205},[199,65205,65206,65208,65210],{"class":201,"line":35856},[199,65207,1414],{"class":205},[199,65209,1431],{"class":874},[199,65211,882],{"class":205},[199,65213,65214],{"class":201,"line":35862},[199,65215,907],{"emptyLinePlaceholder":906},[199,65217,65218,65220,65222],{"class":201,"line":35873},[199,65219,1414],{"class":205},[199,65221,194],{"class":874},[199,65223,882],{"class":205},[627,65225,65227],{"id":65226},"_3254-change事件","3.2.5.4 change事件",[31,65229,65230],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[31,65232,65233],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[31,65235,65236],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[190,65238,65240],{"className":192,"code":65239,"language":194,"meta":57,"style":57},"\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",[196,65241,65242,65252,65266,65270,65278,65292,65312,65324,65332,65336,65344,65358,65366,65384,65402,65414,65418,65426,65434,65438],{"__ignoreMap":57},[199,65243,65244,65246,65248,65250],{"class":201,"line":202},[199,65245,871],{"class":205},[199,65247,875],{"class":874},[199,65249,879],{"class":878},[199,65251,882],{"class":205},[199,65253,65254,65256,65258,65260,65262,65264],{"class":201,"line":36},[199,65255,887],{"class":205},[199,65257,194],{"class":874},[199,65259,892],{"class":878},[199,65261,895],{"class":205},[199,65263,899],{"class":898},[199,65265,882],{"class":205},[199,65267,65268],{"class":201,"line":73},[199,65269,907],{"emptyLinePlaceholder":906},[199,65271,65272,65274,65276],{"class":201,"line":333},[199,65273,887],{"class":205},[199,65275,914],{"class":874},[199,65277,882],{"class":205},[199,65279,65280,65282,65284,65286,65288,65290],{"class":201,"line":227},[199,65281,1824],{"class":205},[199,65283,924],{"class":874},[199,65285,927],{"class":878},[199,65287,895],{"class":205},[199,65289,932],{"class":898},[199,65291,882],{"class":205},[199,65293,65294,65296,65298,65300,65302,65304,65306,65308,65310],{"class":201,"line":238},[199,65295,1824],{"class":205},[199,65297,924],{"class":874},[199,65299,967],{"class":878},[199,65301,895],{"class":205},[199,65303,972],{"class":898},[199,65305,951],{"class":878},[199,65307,895],{"class":205},[199,65309,979],{"class":898},[199,65311,882],{"class":205},[199,65313,65314,65316,65318,65320,65322],{"class":201,"line":252},[199,65315,1824],{"class":205},[199,65317,988],{"class":874},[199,65319,991],{"class":205},[199,65321,988],{"class":874},[199,65323,882],{"class":205},[199,65325,65326,65328,65330],{"class":201,"line":388},[199,65327,1414],{"class":205},[199,65329,914],{"class":874},[199,65331,882],{"class":205},[199,65333,65334],{"class":201,"line":415},[199,65335,907],{"emptyLinePlaceholder":906},[199,65337,65338,65340,65342],{"class":201,"line":426},[199,65339,887],{"class":205},[199,65341,1431],{"class":874},[199,65343,882],{"class":205},[199,65345,65346,65348,65350,65352,65354,65356],{"class":201,"line":1015},[199,65347,1824],{"class":205},[199,65349,56080],{"class":874},[199,65351,56083],{"class":878},[199,65353,895],{"class":205},[199,65355,64958],{"class":898},[199,65357,882],{"class":205},[199,65359,65360,65362,65364],{"class":201,"line":1031},[199,65361,1824],{"class":205},[199,65363,1446],{"class":874},[199,65365,882],{"class":205},[199,65367,65368,65370,65372,65374,65376,65378,65380,65382],{"class":201,"line":1043},[199,65369,14084],{"class":1086},[199,65371,62864],{"class":1018},[199,65373,16425],{"class":1086},[199,65375,56655],{"class":205},[199,65377,56658],{"class":878},[199,65379,1537],{"class":205},[199,65381,65141],{"class":898},[199,65383,1594],{"class":205},[199,65385,65386,65389,65391,65393,65396,65398,65400],{"class":201,"line":1049},[199,65387,65388],{"class":205},"    input.",[199,65390,60072],{"class":878},[199,65392,1537],{"class":205},[199,65394,65395],{"class":898},"'change'",[199,65397,1912],{"class":205},[199,65399,56708],{"class":1086},[199,65401,56711],{"class":205},[199,65403,65404,65406,65408,65410,65412],{"class":201,"line":1054},[199,65405,60503],{"class":205},[199,65407,60506],{"class":878},[199,65409,1537],{"class":205},[199,65411,3673],{"class":1018},[199,65413,1594],{"class":205},[199,65415,65416],{"class":201,"line":1062},[199,65417,36302],{"class":205},[199,65419,65420,65422,65424],{"class":201,"line":1075},[199,65421,2112],{"class":205},[199,65423,1446],{"class":874},[199,65425,882],{"class":205},[199,65427,65428,65430,65432],{"class":201,"line":1092},[199,65429,1414],{"class":205},[199,65431,1431],{"class":874},[199,65433,882],{"class":205},[199,65435,65436],{"class":201,"line":1107},[199,65437,907],{"emptyLinePlaceholder":906},[199,65439,65440,65442,65444],{"class":201,"line":1128},[199,65441,1414],{"class":205},[199,65443,194],{"class":874},[199,65445,882],{"class":205},[31,65447,65448],{},"总结：内容发生改变才回去触发",[19,65450,65452],{"id":65451},"_326-事件对象","3.2.6 事件对象",[627,65454,65456],{"id":65455},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[31,65458,65459],{},[55,65460],{"alt":57,"src":65461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[31,65463,65464],{},[55,65465],{"alt":57,"src":65466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[31,65468,65469],{},"点击一次，就输出了事件对象，它是个对象",[31,65471,65472],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[31,65474,65475],{},[55,65476],{"alt":57,"src":65477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[627,65479,65481],{"id":65480},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[31,65483,65484],{},[55,65485],{"alt":57,"src":65486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[31,65488,65489],{},"实现按特殊字符才是实现打印输出效果：",[190,65491,65493],{"className":2763,"code":65492,"language":2765,"meta":57,"style":57},"\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",[196,65494,65495,65503,65508,65522,65530,65535,65540,65545,65550,65555,65560,65565,65570,65575,65579,65583,65591],{"__ignoreMap":57},[199,65496,65497,65499,65501],{"class":201,"line":202},[199,65498,887],{"class":205},[199,65500,1431],{"class":874},[199,65502,882],{"class":205},[199,65504,65505],{"class":201,"line":36},[199,65506,65507],{"class":1454},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[199,65509,65510,65512,65514,65516,65518,65520],{"class":201,"line":73},[199,65511,1824],{"class":205},[199,65513,56080],{"class":874},[199,65515,56083],{"class":878},[199,65517,895],{"class":205},[199,65519,64958],{"class":898},[199,65521,882],{"class":205},[199,65523,65524,65526,65528],{"class":201,"line":333},[199,65525,1824],{"class":205},[199,65527,1446],{"class":874},[199,65529,882],{"class":205},[199,65531,65532],{"class":201,"line":227},[199,65533,65534],{"class":205},"    \u002F\u002F const btn = document.querySelector('button')\n",[199,65536,65537],{"class":201,"line":238},[199,65538,65539],{"class":205},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[199,65541,65542],{"class":201,"line":252},[199,65543,65544],{"class":205},"    \u002F\u002F   console.log(e);\n",[199,65546,65547],{"class":201,"line":388},[199,65548,65549],{"class":205},"    \u002F\u002F })\n",[199,65551,65552],{"class":201,"line":415},[199,65553,65554],{"class":205},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[199,65556,65557],{"class":201,"line":426},[199,65558,65559],{"class":205},"    const input = document.querySelector('input')\n",[199,65561,65562],{"class":201,"line":1015},[199,65563,65564],{"class":205},"    input.addEventListener('keyup', function (e) {\n",[199,65566,65567],{"class":201,"line":1031},[199,65568,65569],{"class":205},"      if (e.key === 'Enter') {\n",[199,65571,65572],{"class":201,"line":1043},[199,65573,65574],{"class":205},"        console.log('我按下了回车键')\n",[199,65576,65577],{"class":201,"line":1049},[199,65578,2092],{"class":205},[199,65580,65581],{"class":201,"line":1054},[199,65582,36302],{"class":205},[199,65584,65585,65587,65589],{"class":201,"line":1062},[199,65586,2112],{"class":205},[199,65588,1446],{"class":874},[199,65590,882],{"class":205},[199,65592,65593,65595,65597],{"class":201,"line":1075},[199,65594,1414],{"class":205},[199,65596,1431],{"class":874},[199,65598,882],{"class":205},[627,65600,65602],{"id":65601},"_3263-trim方法","3.2.6.3 trim方法",[31,65604,65605],{},[55,65606],{"alt":57,"src":65607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[31,65609,65610],{},[55,65611],{"alt":57,"src":65612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[31,65614,65615],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[31,65617,65618],{},"str.trim()",[19,65620,65622],{"id":65621},"_327-环境对象","3.2.7 环境对象",[31,65624,65625],{},[55,65626],{"alt":57,"src":65627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[31,65629,65630],{},[55,65631],{"alt":57,"src":65632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[31,65634,65635],{},[55,65636],{"alt":57,"src":65637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[31,65639,65640],{},"实际函数调用是window.fn()",[31,65642,65643],{},"普通函数里面this指向的是window",[176,65645,65646,65649,65652],{},[27,65647,65648],{},"在普通函数下，this指向的是window",[27,65650,65651],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[27,65653,65654],{},"箭头函数没有this",[31,65656,65657],{},"粗略记法就是：谁调用，this就指向谁",[31,65659,65660],{},[55,65661],{"alt":57,"src":65662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[31,65664,65665],{},[55,65666],{"alt":57,"src":65667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[31,65669,65670],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[31,65672,65673],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[190,65675,65677],{"className":2763,"code":65676,"language":2765,"meta":57,"style":57},"\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",[196,65678,65679,65687,65699,65707,65712,65717,65722,65727,65731,65739],{"__ignoreMap":57},[199,65680,65681,65683,65685],{"class":201,"line":202},[199,65682,887],{"class":205},[199,65684,1431],{"class":874},[199,65686,882],{"class":205},[199,65688,65689,65691,65693,65695,65697],{"class":201,"line":36},[199,65690,1824],{"class":205},[199,65692,56146],{"class":874},[199,65694,56152],{"class":205},[199,65696,56146],{"class":874},[199,65698,882],{"class":205},[199,65700,65701,65703,65705],{"class":201,"line":73},[199,65702,1824],{"class":205},[199,65704,1446],{"class":874},[199,65706,882],{"class":205},[199,65708,65709],{"class":201,"line":333},[199,65710,65711],{"class":205},"    const button = document.querySelector('button')\n",[199,65713,65714],{"class":201,"line":227},[199,65715,65716],{"class":205},"    button.addEventListener('click', function () {\n",[199,65718,65719],{"class":201,"line":238},[199,65720,65721],{"class":205},"      \u002F\u002F console.log(this);\n",[199,65723,65724],{"class":201,"line":252},[199,65725,65726],{"class":205},"      this.style.color = 'pink'\n",[199,65728,65729],{"class":201,"line":388},[199,65730,36302],{"class":205},[199,65732,65733,65735,65737],{"class":201,"line":415},[199,65734,2112],{"class":205},[199,65736,1446],{"class":874},[199,65738,882],{"class":205},[199,65740,65741,65743,65745],{"class":201,"line":426},[199,65742,1414],{"class":205},[199,65744,1431],{"class":874},[199,65746,882],{"class":205},[19,65748,65750],{"id":65749},"_328-回调函数","3.2.8 回调函数",[31,65752,65753],{},[55,65754],{"alt":57,"src":65755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[31,65757,65758],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[31,65760,14195],{},[176,65762,65763,65766,65769],{},[27,65764,65765],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[27,65767,65768],{},"回调函数本质还是函数，只不过把它当成参数使用",[27,65770,65771],{},"使用匿名函数做为回调函数比较常见",[19,65773,65775],{"id":65774},"_329-tab栏切换","3.2.9 tab栏切换",[31,65777,65778],{},[55,65779],{"alt":57,"src":65780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[190,65782,65784],{"className":192,"code":65783,"language":194,"meta":57,"style":57},"\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",[196,65785,65786,65796,65810,65814,65822,65836,65856,65876,65889,65897,65903,65913,65923,65927,65931,65938,65951,65964,65976,65992,65996,66000,66007,66019,66031,66043,66053,66063,66067,66071,66080,66092,66103,66115,66119,66123,66131,66141,66151,66161,66165,66169,66179,66193,66205,66209,66213,66225,66236,66253,66263,66267,66271,66286,66297,66307,66311,66315,66322,66337,66341,66345,66353,66363,66367,66371,66380,66390,66394,66402,66410,66414,66422,66437,66452,66465,66473,66507,66534,66561,66588,66615,66623,66631,66646,66683,66718,66753,66788,66823,66831,66839,66847,66852,66857,66877,66882,66911,66916,66921,66939,66944,66949,66954,66976,66981,66997,67001,67006,67011,67032,67037,67066,67070,67075,67079,67087,67095,67099],{"__ignoreMap":57},[199,65787,65788,65790,65792,65794],{"class":201,"line":202},[199,65789,871],{"class":205},[199,65791,875],{"class":874},[199,65793,879],{"class":878},[199,65795,882],{"class":205},[199,65797,65798,65800,65802,65804,65806,65808],{"class":201,"line":36},[199,65799,887],{"class":205},[199,65801,194],{"class":874},[199,65803,892],{"class":878},[199,65805,895],{"class":205},[199,65807,899],{"class":898},[199,65809,882],{"class":205},[199,65811,65812],{"class":201,"line":73},[199,65813,907],{"emptyLinePlaceholder":906},[199,65815,65816,65818,65820],{"class":201,"line":333},[199,65817,887],{"class":205},[199,65819,914],{"class":874},[199,65821,882],{"class":205},[199,65823,65824,65826,65828,65830,65832,65834],{"class":201,"line":227},[199,65825,1824],{"class":205},[199,65827,924],{"class":874},[199,65829,927],{"class":878},[199,65831,895],{"class":205},[199,65833,932],{"class":898},[199,65835,61386],{"class":205},[199,65837,65838,65840,65842,65844,65846,65848,65850,65852,65854],{"class":201,"line":238},[199,65839,1824],{"class":205},[199,65841,924],{"class":874},[199,65843,943],{"class":878},[199,65845,895],{"class":205},[199,65847,948],{"class":898},[199,65849,951],{"class":878},[199,65851,895],{"class":205},[199,65853,956],{"class":898},[199,65855,61386],{"class":205},[199,65857,65858,65860,65862,65864,65866,65868,65870,65872,65874],{"class":201,"line":252},[199,65859,1824],{"class":205},[199,65861,924],{"class":874},[199,65863,967],{"class":878},[199,65865,895],{"class":205},[199,65867,972],{"class":898},[199,65869,951],{"class":878},[199,65871,895],{"class":205},[199,65873,979],{"class":898},[199,65875,61386],{"class":205},[199,65877,65878,65880,65882,65885,65887],{"class":201,"line":388},[199,65879,1824],{"class":205},[199,65881,988],{"class":874},[199,65883,65884],{"class":205},">tab栏切换\u003C\u002F",[199,65886,988],{"class":874},[199,65888,882],{"class":205},[199,65890,65891,65893,65895],{"class":201,"line":415},[199,65892,1824],{"class":205},[199,65894,1002],{"class":874},[199,65896,882],{"class":205},[199,65898,65899,65901],{"class":201,"line":426},[199,65900,9300],{"class":874},[199,65902,1012],{"class":205},[199,65904,65905,65907,65909,65911],{"class":201,"line":1015},[199,65906,56965],{"class":1018},[199,65908,1022],{"class":205},[199,65910,1025],{"class":1018},[199,65912,1028],{"class":205},[199,65914,65915,65917,65919,65921],{"class":201,"line":1031},[199,65916,56954],{"class":1018},[199,65918,1022],{"class":205},[199,65920,1025],{"class":1018},[199,65922,1028],{"class":205},[199,65924,65925],{"class":201,"line":1043},[199,65926,2097],{"class":205},[199,65928,65929],{"class":201,"line":1049},[199,65930,907],{"emptyLinePlaceholder":906},[199,65932,65933,65936],{"class":201,"line":1054},[199,65934,65935],{"class":878},"    .tab",[199,65937,1012],{"class":205},[199,65939,65940,65942,65944,65947,65949],{"class":201,"line":1062},[199,65941,57030],{"class":1018},[199,65943,1022],{"class":205},[199,65945,65946],{"class":1018},"590",[199,65948,1087],{"class":1086},[199,65950,1028],{"class":205},[199,65952,65953,65955,65957,65960,65962],{"class":201,"line":1075},[199,65954,57044],{"class":1018},[199,65956,1022],{"class":205},[199,65958,65959],{"class":1018},"340",[199,65961,1087],{"class":1086},[199,65963,1028],{"class":205},[199,65965,65966,65968,65970,65972,65974],{"class":201,"line":1092},[199,65967,56965],{"class":1018},[199,65969,1022],{"class":205},[199,65971,3779],{"class":1018},[199,65973,1087],{"class":1086},[199,65975,1028],{"class":205},[199,65977,65978,65980,65982,65984,65986,65988,65990],{"class":201,"line":1107},[199,65979,64236],{"class":1018},[199,65981,1022],{"class":205},[199,65983,1115],{"class":1018},[199,65985,1087],{"class":1086},[199,65987,1120],{"class":1018},[199,65989,64503],{"class":1018},[199,65991,1028],{"class":205},[199,65993,65994],{"class":201,"line":1128},[199,65995,2097],{"class":205},[199,65997,65998],{"class":201,"line":1146},[199,65999,907],{"emptyLinePlaceholder":906},[199,66001,66002,66005],{"class":201,"line":1163},[199,66003,66004],{"class":878},"    .tab-nav",[199,66006,1012],{"class":205},[199,66008,66009,66011,66013,66015,66017],{"class":201,"line":1176},[199,66010,57030],{"class":1018},[199,66012,1022],{"class":205},[199,66014,3396],{"class":1018},[199,66016,3412],{"class":1086},[199,66018,1028],{"class":205},[199,66020,66021,66023,66025,66027,66029],{"class":201,"line":1189},[199,66022,57044],{"class":1018},[199,66024,1022],{"class":205},[199,66026,3985],{"class":1018},[199,66028,1087],{"class":1086},[199,66030,1028],{"class":205},[199,66032,66033,66035,66037,66039,66041],{"class":201,"line":1202},[199,66034,59618],{"class":1018},[199,66036,1022],{"class":205},[199,66038,3985],{"class":1018},[199,66040,1087],{"class":1086},[199,66042,1028],{"class":205},[199,66044,66045,66047,66049,66051],{"class":201,"line":1207},[199,66046,57268],{"class":1018},[199,66048,1022],{"class":205},[199,66050,1070],{"class":1018},[199,66052,1028],{"class":205},[199,66054,66055,66057,66059,66061],{"class":201,"line":1212},[199,66056,57279],{"class":1018},[199,66058,1022],{"class":205},[199,66060,1282],{"class":1018},[199,66062,1028],{"class":205},[199,66064,66065],{"class":201,"line":1225},[199,66066,2097],{"class":205},[199,66068,66069],{"class":201,"line":1236},[199,66070,907],{"emptyLinePlaceholder":906},[199,66072,66073,66075,66078],{"class":201,"line":1249},[199,66074,66004],{"class":878},[199,66076,66077],{"class":874}," h3",[199,66079,1012],{"class":205},[199,66081,66082,66084,66086,66088,66090],{"class":201,"line":1262},[199,66083,57181],{"class":1018},[199,66085,1022],{"class":205},[199,66087,3879],{"class":1018},[199,66089,1087],{"class":1086},[199,66091,1028],{"class":205},[199,66093,66094,66096,66098,66101],{"class":201,"line":1275},[199,66095,64593],{"class":1018},[199,66097,1022],{"class":205},[199,66099,66100],{"class":1018},"normal",[199,66102,1028],{"class":205},[199,66104,66105,66107,66109,66111,66113],{"class":201,"line":1287},[199,66106,64259],{"class":1018},[199,66108,1022],{"class":205},[199,66110,3779],{"class":1018},[199,66112,1087],{"class":1086},[199,66114,1028],{"class":205},[199,66116,66117],{"class":201,"line":1292},[199,66118,2097],{"class":205},[199,66120,66121],{"class":201,"line":1297},[199,66122,907],{"emptyLinePlaceholder":906},[199,66124,66125,66127,66129],{"class":201,"line":1310},[199,66126,66004],{"class":878},[199,66128,63551],{"class":874},[199,66130,1012],{"class":205},[199,66132,66133,66135,66137,66139],{"class":201,"line":1315},[199,66134,56991],{"class":1018},[199,66136,1022],{"class":205},[199,66138,56996],{"class":1018},[199,66140,1028],{"class":205},[199,66142,66143,66145,66147,66149],{"class":201,"line":1330},[199,66144,57268],{"class":1018},[199,66146,1022],{"class":205},[199,66148,1070],{"class":1018},[199,66150,1028],{"class":205},[199,66152,66153,66155,66157,66159],{"class":201,"line":1335},[199,66154,57279],{"class":1018},[199,66156,1022],{"class":205},[199,66158,1184],{"class":1018},[199,66160,1028],{"class":205},[199,66162,66163],{"class":201,"line":1340},[199,66164,2097],{"class":205},[199,66166,66167],{"class":201,"line":1352},[199,66168,907],{"emptyLinePlaceholder":906},[199,66170,66171,66173,66175,66177],{"class":201,"line":1367},[199,66172,66004],{"class":878},[199,66174,63551],{"class":874},[199,66176,57334],{"class":874},[199,66178,1012],{"class":205},[199,66180,66181,66183,66185,66187,66189,66191],{"class":201,"line":1381},[199,66182,56965],{"class":1018},[199,66184,1022],{"class":205},[199,66186,1025],{"class":1018},[199,66188,11837],{"class":1018},[199,66190,1087],{"class":1086},[199,66192,1028],{"class":205},[199,66194,66195,66197,66199,66201,66203],{"class":201,"line":1396},[199,66196,57181],{"class":1018},[199,66198,1022],{"class":205},[199,66200,3629],{"class":1018},[199,66202,1087],{"class":1086},[199,66204,1028],{"class":205},[199,66206,66207],{"class":201,"line":1401},[199,66208,2097],{"class":205},[199,66210,66211],{"class":201,"line":1411},[199,66212,907],{"emptyLinePlaceholder":906},[199,66214,66215,66217,66219,66221,66223],{"class":201,"line":1421},[199,66216,66004],{"class":878},[199,66218,63551],{"class":874},[199,66220,57334],{"class":874},[199,66222,4338],{"class":874},[199,66224,1012],{"class":205},[199,66226,66227,66230,66232,66234],{"class":201,"line":1426},[199,66228,66229],{"class":1018},"      text-decoration",[199,66231,1022],{"class":205},[199,66233,56996],{"class":1018},[199,66235,1028],{"class":205},[199,66237,66238,66240,66242,66244,66246,66248,66251],{"class":201,"line":1436},[199,66239,64491],{"class":1018},[199,66241,1022],{"class":205},[199,66243,1925],{"class":1018},[199,66245,1087],{"class":1086},[199,66247,1120],{"class":1018},[199,66249,66250],{"class":1018}," transparent",[199,66252,1028],{"class":205},[199,66254,66255,66257,66259,66261],{"class":201,"line":1441},[199,66256,59675],{"class":1018},[199,66258,1022],{"class":205},[199,66260,64628],{"class":1018},[199,66262,1028],{"class":205},[199,66264,66265],{"class":201,"line":1451},[199,66266,2097],{"class":205},[199,66268,66269],{"class":201,"line":1458},[199,66270,907],{"emptyLinePlaceholder":906},[199,66272,66273,66275,66277,66279,66281,66284],{"class":201,"line":1464},[199,66274,66004],{"class":878},[199,66276,63551],{"class":874},[199,66278,57334],{"class":874},[199,66280,4338],{"class":874},[199,66282,66283],{"class":878},".active",[199,66285,1012],{"class":205},[199,66287,66288,66290,66292,66295],{"class":201,"line":1478},[199,66289,64050],{"class":1018},[199,66291,1022],{"class":205},[199,66293,66294],{"class":1018},"#e1251b",[199,66296,1028],{"class":205},[199,66298,66299,66301,66303,66305],{"class":201,"line":1516},[199,66300,59675],{"class":1018},[199,66302,1022],{"class":205},[199,66304,66294],{"class":1018},[199,66306,1028],{"class":205},[199,66308,66309],{"class":201,"line":1522},[199,66310,2097],{"class":205},[199,66312,66313],{"class":201,"line":1528},[199,66314,907],{"emptyLinePlaceholder":906},[199,66316,66317,66320],{"class":201,"line":1557},[199,66318,66319],{"class":878},"    .tab-content",[199,66321,1012],{"class":205},[199,66323,66324,66326,66328,66330,66333,66335],{"class":201,"line":1563},[199,66325,56954],{"class":1018},[199,66327,1022],{"class":205},[199,66329,1025],{"class":1018},[199,66331,66332],{"class":1018}," 16",[199,66334,1087],{"class":1086},[199,66336,1028],{"class":205},[199,66338,66339],{"class":201,"line":1568},[199,66340,2097],{"class":205},[199,66342,66343],{"class":201,"line":1574},[199,66344,907],{"emptyLinePlaceholder":906},[199,66346,66347,66349,66351],{"class":201,"line":1580},[199,66348,66319],{"class":878},[199,66350,64433],{"class":878},[199,66352,1012],{"class":205},[199,66354,66355,66357,66359,66361],{"class":201,"line":1597},[199,66356,57268],{"class":1018},[199,66358,1022],{"class":205},[199,66360,56996],{"class":1018},[199,66362,1028],{"class":205},[199,66364,66365],{"class":201,"line":1602},[199,66366,2097],{"class":205},[199,66368,66369],{"class":201,"line":1608},[199,66370,907],{"emptyLinePlaceholder":906},[199,66372,66373,66375,66378],{"class":201,"line":1640},[199,66374,66319],{"class":878},[199,66376,66377],{"class":878}," .item.active",[199,66379,1012],{"class":205},[199,66381,66382,66384,66386,66388],{"class":201,"line":1653},[199,66383,57268],{"class":1018},[199,66385,1022],{"class":205},[199,66387,63128],{"class":1018},[199,66389,1028],{"class":205},[199,66391,66392],{"class":201,"line":1673},[199,66393,2097],{"class":205},[199,66395,66396,66398,66400],{"class":201,"line":1690},[199,66397,2112],{"class":205},[199,66399,1002],{"class":874},[199,66401,882],{"class":205},[199,66403,66404,66406,66408],{"class":201,"line":1706},[199,66405,1414],{"class":205},[199,66407,914],{"class":874},[199,66409,882],{"class":205},[199,66411,66412],{"class":201,"line":1712},[199,66413,907],{"emptyLinePlaceholder":906},[199,66415,66416,66418,66420],{"class":201,"line":1720},[199,66417,887],{"class":205},[199,66419,1431],{"class":874},[199,66421,882],{"class":205},[199,66423,66424,66426,66428,66430,66432,66435],{"class":201,"line":1725},[199,66425,1824],{"class":205},[199,66427,1220],{"class":874},[199,66429,55745],{"class":878},[199,66431,895],{"class":205},[199,66433,66434],{"class":898},"\"tab\"",[199,66436,882],{"class":205},[199,66438,66439,66441,66443,66445,66447,66450],{"class":201,"line":1731},[199,66440,921],{"class":205},[199,66442,1220],{"class":874},[199,66444,55745],{"class":878},[199,66446,895],{"class":205},[199,66448,66449],{"class":898},"\"tab-nav\"",[199,66451,882],{"class":205},[199,66453,66454,66456,66458,66461,66463],{"class":201,"line":1745},[199,66455,57493],{"class":205},[199,66457,19],{"class":874},[199,66459,66460],{"class":205},">每日特价\u003C\u002F",[199,66462,19],{"class":874},[199,66464,882],{"class":205},[199,66466,66467,66469,66471],{"class":201,"line":1754},[199,66468,57493],{"class":205},[199,66470,176],{"class":874},[199,66472,882],{"class":205},[199,66474,66475,66477,66479,66481,66483,66485,66487,66489,66491,66493,66496,66499,66501,66503,66505],{"class":201,"line":1763},[199,66476,57561],{"class":205},[199,66478,27],{"class":874},[199,66480,63311],{"class":205},[199,66482,2867],{"class":874},[199,66484,55745],{"class":878},[199,66486,895],{"class":205},[199,66488,61965],{"class":898},[199,66490,63316],{"class":878},[199,66492,895],{"class":205},[199,66494,66495],{"class":898},"\"javascript:;\"",[199,66497,66498],{"class":205},">精选\u003C\u002F",[199,66500,2867],{"class":874},[199,66502,57573],{"class":205},[199,66504,27],{"class":874},[199,66506,882],{"class":205},[199,66508,66509,66511,66513,66515,66517,66519,66521,66523,66526,66528,66530,66532],{"class":201,"line":1768},[199,66510,57561],{"class":205},[199,66512,27],{"class":874},[199,66514,63311],{"class":205},[199,66516,2867],{"class":874},[199,66518,63316],{"class":878},[199,66520,895],{"class":205},[199,66522,66495],{"class":898},[199,66524,66525],{"class":205},">美食\u003C\u002F",[199,66527,2867],{"class":874},[199,66529,57573],{"class":205},[199,66531,27],{"class":874},[199,66533,882],{"class":205},[199,66535,66536,66538,66540,66542,66544,66546,66548,66550,66553,66555,66557,66559],{"class":201,"line":19628},[199,66537,57561],{"class":205},[199,66539,27],{"class":874},[199,66541,63311],{"class":205},[199,66543,2867],{"class":874},[199,66545,63316],{"class":878},[199,66547,895],{"class":205},[199,66549,66495],{"class":898},[199,66551,66552],{"class":205},">百货\u003C\u002F",[199,66554,2867],{"class":874},[199,66556,57573],{"class":205},[199,66558,27],{"class":874},[199,66560,882],{"class":205},[199,66562,66563,66565,66567,66569,66571,66573,66575,66577,66580,66582,66584,66586],{"class":201,"line":19641},[199,66564,57561],{"class":205},[199,66566,27],{"class":874},[199,66568,63311],{"class":205},[199,66570,2867],{"class":874},[199,66572,63316],{"class":878},[199,66574,895],{"class":205},[199,66576,66495],{"class":898},[199,66578,66579],{"class":205},">个护\u003C\u002F",[199,66581,2867],{"class":874},[199,66583,57573],{"class":205},[199,66585,27],{"class":874},[199,66587,882],{"class":205},[199,66589,66590,66592,66594,66596,66598,66600,66602,66604,66607,66609,66611,66613],{"class":201,"line":19646},[199,66591,57561],{"class":205},[199,66593,27],{"class":874},[199,66595,63311],{"class":205},[199,66597,2867],{"class":874},[199,66599,63316],{"class":878},[199,66601,895],{"class":205},[199,66603,66495],{"class":898},[199,66605,66606],{"class":205},">预告\u003C\u002F",[199,66608,2867],{"class":874},[199,66610,57573],{"class":205},[199,66612,27],{"class":874},[199,66614,882],{"class":205},[199,66616,66617,66619,66621],{"class":201,"line":19660},[199,66618,57666],{"class":205},[199,66620,176],{"class":874},[199,66622,882],{"class":205},[199,66624,66625,66627,66629],{"class":201,"line":19665},[199,66626,1404],{"class":205},[199,66628,1220],{"class":874},[199,66630,882],{"class":205},[199,66632,66633,66635,66637,66639,66641,66644],{"class":201,"line":19671},[199,66634,921],{"class":205},[199,66636,1220],{"class":874},[199,66638,55745],{"class":878},[199,66640,895],{"class":205},[199,66642,66643],{"class":898},"\"tab-content\"",[199,66645,882],{"class":205},[199,66647,66648,66650,66652,66654,66656,66659,66661,66663,66665,66667,66670,66672,66674,66676,66679,66681],{"class":201,"line":19676},[199,66649,57493],{"class":205},[199,66651,1220],{"class":874},[199,66653,55745],{"class":878},[199,66655,895],{"class":205},[199,66657,66658],{"class":898},"\"item active\"",[199,66660,63311],{"class":205},[199,66662,55],{"class":874},[199,66664,57498],{"class":878},[199,66666,895],{"class":205},[199,66668,66669],{"class":898},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[199,66671,57506],{"class":878},[199,66673,895],{"class":205},[199,66675,10549],{"class":898},[199,66677,66678],{"class":205}," \u002F>\u003C\u002F",[199,66680,1220],{"class":874},[199,66682,882],{"class":205},[199,66684,66685,66687,66689,66691,66693,66695,66697,66699,66701,66703,66706,66708,66710,66712,66714,66716],{"class":201,"line":19690},[199,66686,57493],{"class":205},[199,66688,1220],{"class":874},[199,66690,55745],{"class":878},[199,66692,895],{"class":205},[199,66694,64882],{"class":898},[199,66696,63311],{"class":205},[199,66698,55],{"class":874},[199,66700,57498],{"class":878},[199,66702,895],{"class":205},[199,66704,66705],{"class":898},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[199,66707,57506],{"class":878},[199,66709,895],{"class":205},[199,66711,10549],{"class":898},[199,66713,66678],{"class":205},[199,66715,1220],{"class":874},[199,66717,882],{"class":205},[199,66719,66720,66722,66724,66726,66728,66730,66732,66734,66736,66738,66741,66743,66745,66747,66749,66751],{"class":201,"line":19695},[199,66721,57493],{"class":205},[199,66723,1220],{"class":874},[199,66725,55745],{"class":878},[199,66727,895],{"class":205},[199,66729,64882],{"class":898},[199,66731,63311],{"class":205},[199,66733,55],{"class":874},[199,66735,57498],{"class":878},[199,66737,895],{"class":205},[199,66739,66740],{"class":898},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[199,66742,57506],{"class":878},[199,66744,895],{"class":205},[199,66746,10549],{"class":898},[199,66748,66678],{"class":205},[199,66750,1220],{"class":874},[199,66752,882],{"class":205},[199,66754,66755,66757,66759,66761,66763,66765,66767,66769,66771,66773,66776,66778,66780,66782,66784,66786],{"class":201,"line":19700},[199,66756,57493],{"class":205},[199,66758,1220],{"class":874},[199,66760,55745],{"class":878},[199,66762,895],{"class":205},[199,66764,64882],{"class":898},[199,66766,63311],{"class":205},[199,66768,55],{"class":874},[199,66770,57498],{"class":878},[199,66772,895],{"class":205},[199,66774,66775],{"class":898},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[199,66777,57506],{"class":878},[199,66779,895],{"class":205},[199,66781,10549],{"class":898},[199,66783,66678],{"class":205},[199,66785,1220],{"class":874},[199,66787,882],{"class":205},[199,66789,66790,66792,66794,66796,66798,66800,66802,66804,66806,66808,66811,66813,66815,66817,66819,66821],{"class":201,"line":19714},[199,66791,57493],{"class":205},[199,66793,1220],{"class":874},[199,66795,55745],{"class":878},[199,66797,895],{"class":205},[199,66799,64882],{"class":898},[199,66801,63311],{"class":205},[199,66803,55],{"class":874},[199,66805,57498],{"class":878},[199,66807,895],{"class":205},[199,66809,66810],{"class":898},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[199,66812,57506],{"class":878},[199,66814,895],{"class":205},[199,66816,10549],{"class":898},[199,66818,66678],{"class":205},[199,66820,1220],{"class":874},[199,66822,882],{"class":205},[199,66824,66825,66827,66829],{"class":201,"line":19726},[199,66826,1404],{"class":205},[199,66828,1220],{"class":874},[199,66830,882],{"class":205},[199,66832,66833,66835,66837],{"class":201,"line":19731},[199,66834,2112],{"class":205},[199,66836,1220],{"class":874},[199,66838,882],{"class":205},[199,66840,66841,66843,66845],{"class":201,"line":19744},[199,66842,1824],{"class":205},[199,66844,1446],{"class":874},[199,66846,882],{"class":205},[199,66848,66849],{"class":201,"line":19749},[199,66850,66851],{"class":1454},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[199,66853,66854],{"class":201,"line":19754},[199,66855,66856],{"class":1454},"    \u002F\u002F 1.1 获取 a 元素 \n",[199,66858,66859,66861,66864,66866,66868,66870,66872,66875],{"class":201,"line":19759},[199,66860,14084],{"class":1086},[199,66862,66863],{"class":1018}," as",[199,66865,16425],{"class":1086},[199,66867,56655],{"class":205},[199,66869,57940],{"class":878},[199,66871,1537],{"class":205},[199,66873,66874],{"class":898},"'.tab-nav a'",[199,66876,1594],{"class":205},[199,66878,66879],{"class":201,"line":19772},[199,66880,66881],{"class":1454},"    \u002F\u002F console.log(as) \n",[199,66883,66884,66886,66888,66890,66892,66894,66896,66898,66900,66903,66905,66907,66909],{"class":201,"line":19777},[199,66885,1937],{"class":1086},[199,66887,1484],{"class":205},[199,66889,1487],{"class":1086},[199,66891,1490],{"class":205},[199,66893,895],{"class":1086},[199,66895,1621],{"class":1018},[199,66897,1498],{"class":205},[199,66899,887],{"class":1086},[199,66901,66902],{"class":205}," as.",[199,66904,1631],{"class":1018},[199,66906,1507],{"class":205},[199,66908,1510],{"class":1086},[199,66910,1513],{"class":205},[199,66912,66913],{"class":201,"line":35475},[199,66914,66915],{"class":1454},"      \u002F\u002F console.log(as[i])\n",[199,66917,66918],{"class":201,"line":35481},[199,66919,66920],{"class":1454},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[199,66922,66923,66926,66928,66930,66933,66935,66937],{"class":201,"line":35487},[199,66924,66925],{"class":205},"      as[i].",[199,66927,60072],{"class":878},[199,66929,1537],{"class":205},[199,66931,66932],{"class":898},"'mouseenter'",[199,66934,1912],{"class":205},[199,66936,56708],{"class":1086},[199,66938,56711],{"class":205},[199,66940,66941],{"class":201,"line":35493},[199,66942,66943],{"class":1454},"        \u002F\u002F console.log('鼠标经过')\n",[199,66945,66946],{"class":201,"line":35499},[199,66947,66948],{"class":1454},"        \u002F\u002F 排他思想  \n",[199,66950,66951],{"class":201,"line":35510},[199,66952,66953],{"class":1454},"        \u002F\u002F 干掉别人 移除类active\n",[199,66955,66956,66958,66960,66962,66965,66967,66969,66971,66974],{"class":201,"line":35516},[199,66957,1583],{"class":205},[199,66959,56658],{"class":878},[199,66961,1537],{"class":205},[199,66963,66964],{"class":898},"'.tab-nav .active'",[199,66966,59262],{"class":205},[199,66968,59265],{"class":878},[199,66970,1537],{"class":205},[199,66972,66973],{"class":898},"'active'",[199,66975,1594],{"class":205},[199,66977,66978],{"class":201,"line":35536},[199,66979,66980],{"class":1454},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[199,66982,66983,66986,66989,66991,66993,66995],{"class":201,"line":35542},[199,66984,66985],{"class":1018},"        this",[199,66987,66988],{"class":205},".classList.",[199,66990,8231],{"class":878},[199,66992,1537],{"class":205},[199,66994,66973],{"class":898},[199,66996,1594],{"class":205},[199,66998,66999],{"class":201,"line":35553},[199,67000,907],{"emptyLinePlaceholder":906},[199,67002,67003],{"class":201,"line":35559},[199,67004,67005],{"class":1454},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[199,67007,67008],{"class":201,"line":35565},[199,67009,67010],{"class":1454},"        \u002F\u002F 干掉别人\n",[199,67012,67013,67015,67017,67019,67022,67024,67026,67028,67030],{"class":201,"line":35571},[199,67014,1583],{"class":205},[199,67016,56658],{"class":878},[199,67018,1537],{"class":205},[199,67020,67021],{"class":898},"'.tab-content .active'",[199,67023,59262],{"class":205},[199,67025,59265],{"class":878},[199,67027,1537],{"class":205},[199,67029,66973],{"class":898},[199,67031,1594],{"class":205},[199,67033,67034],{"class":201,"line":35577},[199,67035,67036],{"class":1454},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[199,67038,67039,67041,67043,67045,67048,67050,67052,67054,67056,67058,67060,67062,67064],{"class":201,"line":35583},[199,67040,1583],{"class":205},[199,67042,56658],{"class":878},[199,67044,1537],{"class":205},[199,67046,67047],{"class":898},"`.tab-content .item:nth-child(${",[199,67049,1548],{"class":205},[199,67051,1698],{"class":1086},[199,67053,1495],{"class":1018},[199,67055,59291],{"class":898},[199,67057,59262],{"class":205},[199,67059,8231],{"class":878},[199,67061,1537],{"class":205},[199,67063,66973],{"class":898},[199,67065,1594],{"class":205},[199,67067,67068],{"class":201,"line":35589},[199,67069,907],{"emptyLinePlaceholder":906},[199,67071,67072],{"class":201,"line":35595},[199,67073,67074],{"class":205},"      })\n",[199,67076,67077],{"class":201,"line":35615},[199,67078,2097],{"class":205},[199,67080,67081,67083,67085],{"class":201,"line":35621},[199,67082,2112],{"class":205},[199,67084,1446],{"class":874},[199,67086,882],{"class":205},[199,67088,67089,67091,67093],{"class":201,"line":35637},[199,67090,1414],{"class":205},[199,67092,1431],{"class":874},[199,67094,882],{"class":205},[199,67096,67097],{"class":201,"line":35643},[199,67098,907],{"emptyLinePlaceholder":906},[199,67100,67101,67103,67105],{"class":201,"line":35657},[199,67102,1414],{"class":205},[199,67104,194],{"class":874},[199,67106,882],{"class":205},[31,67108,67109],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[31,67111,67112],{},"在监听事件中，this指向的就是他的调用者",[31,67114,67115],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[31,67117,55979],{},[31,67119,67120],{},"(function () {",[31,67122,67123],{},"const list = document.querySelector('.xtx-elevator-list')",[31,67125,67126],{},"list.addEventListener('click', function (e) {",[31,67128,67129],{},"if (e.target.tagName === 'A') {",[31,67131,67132],{},"\u002F\u002F 排他思想",[31,67134,67135],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[31,67137,67138],{},"const old = document.querySelector('.xtx-elevator-list .active')",[31,67140,67141],{},"\u002F\u002F console.log(old);",[31,67143,67144],{},"\u002F\u002F 判断",[31,67146,67147],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[31,67149,67150],{},"if (old) old.classList.remove('active')",[31,67152,67153],{},"e.target.classList.add('active')",[31,67155,759],{},[31,67157,2159],{},[31,67159,67160],{},"})();",[19,67162,67164],{"id":67163},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[190,67166,67168],{"className":192,"code":67167,"language":194,"meta":57,"style":57},"\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",[196,67169,67170,67180,67184,67192,67196,67210,67224,67236,67244,67250,67260,67270,67274,67278,67285,67297,67308,67325,67338,67352,67362,67366,67370,67377,67388,67406,67416,67428,67432,67436,67443,67460,67471,67483,67487,67491,67498,67510,67514,67522,67530,67534,67542,67550,67558,67573,67617,67625,67638,67651,67664,67672,67680,67688,67716,67724,67736,67749,67762,67770,67778,67786,67812,67820,67833,67845,67858,67866,67874,67882,67908,67916,67929,67941,67954,67962,67970,67978,67983,68003,68008,68028,68033,68050,68055,68063,68068,68097,68110,68114,68118,68123,68127,68155,68160,68177,68182,68187,68192,68197,68223,68227,68231,68239,68247,68251],{"__ignoreMap":57},[199,67171,67172,67174,67176,67178],{"class":201,"line":202},[199,67173,871],{"class":205},[199,67175,875],{"class":874},[199,67177,879],{"class":878},[199,67179,882],{"class":205},[199,67181,67182],{"class":201,"line":36},[199,67183,907],{"emptyLinePlaceholder":906},[199,67185,67186,67188,67190],{"class":201,"line":73},[199,67187,887],{"class":205},[199,67189,194],{"class":874},[199,67191,882],{"class":205},[199,67193,67194],{"class":201,"line":333},[199,67195,907],{"emptyLinePlaceholder":906},[199,67197,67198,67200,67202,67204,67206,67208],{"class":201,"line":227},[199,67199,887],{"class":205},[199,67201,914],{"class":874},[199,67203,892],{"class":878},[199,67205,895],{"class":205},[199,67207,899],{"class":898},[199,67209,882],{"class":205},[199,67211,67212,67214,67216,67218,67220,67222],{"class":201,"line":238},[199,67213,1824],{"class":205},[199,67215,924],{"class":874},[199,67217,927],{"class":878},[199,67219,895],{"class":205},[199,67221,932],{"class":898},[199,67223,882],{"class":205},[199,67225,67226,67228,67230,67232,67234],{"class":201,"line":252},[199,67227,1824],{"class":205},[199,67229,988],{"class":874},[199,67231,57573],{"class":205},[199,67233,988],{"class":874},[199,67235,882],{"class":205},[199,67237,67238,67240,67242],{"class":201,"line":388},[199,67239,1824],{"class":205},[199,67241,1002],{"class":874},[199,67243,882],{"class":205},[199,67245,67246,67248],{"class":201,"line":415},[199,67247,9300],{"class":874},[199,67249,1012],{"class":205},[199,67251,67252,67254,67256,67258],{"class":201,"line":426},[199,67253,56965],{"class":1018},[199,67255,1022],{"class":205},[199,67257,1025],{"class":1018},[199,67259,1028],{"class":205},[199,67261,67262,67264,67266,67268],{"class":201,"line":1015},[199,67263,56954],{"class":1018},[199,67265,1022],{"class":205},[199,67267,1025],{"class":1018},[199,67269,1028],{"class":205},[199,67271,67272],{"class":201,"line":1031},[199,67273,2097],{"class":205},[199,67275,67276],{"class":201,"line":1043},[199,67277,907],{"emptyLinePlaceholder":906},[199,67279,67280,67283],{"class":201,"line":1049},[199,67281,67282],{"class":874},"    table",[199,67284,1012],{"class":205},[199,67286,67287,67290,67292,67295],{"class":201,"line":1054},[199,67288,67289],{"class":1018},"      border-collapse",[199,67291,1022],{"class":205},[199,67293,67294],{"class":1018},"collapse",[199,67296,1028],{"class":205},[199,67298,67299,67302,67304,67306],{"class":201,"line":1062},[199,67300,67301],{"class":1018},"      border-spacing",[199,67303,1022],{"class":205},[199,67305,1025],{"class":1018},[199,67307,1028],{"class":205},[199,67309,67310,67312,67314,67316,67318,67320,67323],{"class":201,"line":1075},[199,67311,64236],{"class":1018},[199,67313,1022],{"class":205},[199,67315,1115],{"class":1018},[199,67317,1087],{"class":1086},[199,67319,1120],{"class":1018},[199,67321,67322],{"class":1018}," #c0c0c0",[199,67324,1028],{"class":205},[199,67326,67327,67329,67331,67334,67336],{"class":201,"line":1092},[199,67328,57030],{"class":1018},[199,67330,1022],{"class":205},[199,67332,67333],{"class":1018},"500",[199,67335,1087],{"class":1086},[199,67337,1028],{"class":205},[199,67339,67340,67342,67344,67346,67348,67350],{"class":201,"line":1107},[199,67341,56965],{"class":1018},[199,67343,1022],{"class":205},[199,67345,3396],{"class":1018},[199,67347,1087],{"class":1086},[199,67349,1158],{"class":1018},[199,67351,1028],{"class":205},[199,67353,67354,67356,67358,67360],{"class":201,"line":1128},[199,67355,59545],{"class":1018},[199,67357,1022],{"class":205},[199,67359,1197],{"class":1018},[199,67361,1028],{"class":205},[199,67363,67364],{"class":201,"line":1146},[199,67365,2097],{"class":205},[199,67367,67368],{"class":201,"line":1163},[199,67369,907],{"emptyLinePlaceholder":906},[199,67371,67372,67375],{"class":201,"line":1176},[199,67373,67374],{"class":874},"    th",[199,67376,1012],{"class":205},[199,67378,67379,67381,67383,67386],{"class":201,"line":1189},[199,67380,57143],{"class":1018},[199,67382,1022],{"class":205},[199,67384,67385],{"class":1018},"#09c",[199,67387,1028],{"class":205},[199,67389,67390,67393,67395,67397,67399,67401,67404],{"class":201,"line":1202},[199,67391,67392],{"class":1018},"      font",[199,67394,1022],{"class":205},[199,67396,64598],{"class":1018},[199,67398,66332],{"class":1018},[199,67400,1087],{"class":1086},[199,67402,67403],{"class":898}," \"微软雅黑\"",[199,67405,1028],{"class":205},[199,67407,67408,67410,67412,67414],{"class":201,"line":1207},[199,67409,59675],{"class":1018},[199,67411,1022],{"class":205},[199,67413,63101],{"class":1018},[199,67415,1028],{"class":205},[199,67417,67418,67420,67422,67424,67426],{"class":201,"line":1212},[199,67419,57044],{"class":1018},[199,67421,1022],{"class":205},[199,67423,3879],{"class":1018},[199,67425,1087],{"class":1086},[199,67427,1028],{"class":205},[199,67429,67430],{"class":201,"line":1225},[199,67431,2097],{"class":205},[199,67433,67434],{"class":201,"line":1236},[199,67435,907],{"emptyLinePlaceholder":906},[199,67437,67438,67441],{"class":201,"line":1249},[199,67439,67440],{"class":874},"    td",[199,67442,1012],{"class":205},[199,67444,67445,67447,67449,67451,67453,67455,67458],{"class":201,"line":1262},[199,67446,64236],{"class":1018},[199,67448,1022],{"class":205},[199,67450,1115],{"class":1018},[199,67452,1087],{"class":1086},[199,67454,1120],{"class":1018},[199,67456,67457],{"class":1018}," #d0d0d0",[199,67459,1028],{"class":205},[199,67461,67462,67464,67466,67469],{"class":201,"line":1275},[199,67463,59675],{"class":1018},[199,67465,1022],{"class":205},[199,67467,67468],{"class":1018},"#404060",[199,67470,1028],{"class":205},[199,67472,67473,67475,67477,67479,67481],{"class":201,"line":1287},[199,67474,56954],{"class":1018},[199,67476,1022],{"class":205},[199,67478,3528],{"class":1018},[199,67480,1087],{"class":1086},[199,67482,1028],{"class":205},[199,67484,67485],{"class":201,"line":1292},[199,67486,2097],{"class":205},[199,67488,67489],{"class":201,"line":1297},[199,67490,907],{"emptyLinePlaceholder":906},[199,67492,67493,67496],{"class":201,"line":1310},[199,67494,67495],{"class":878},"    .allCheck",[199,67497,1012],{"class":205},[199,67499,67500,67502,67504,67506,67508],{"class":201,"line":1315},[199,67501,57030],{"class":1018},[199,67503,1022],{"class":205},[199,67505,3692],{"class":1018},[199,67507,1087],{"class":1086},[199,67509,1028],{"class":205},[199,67511,67512],{"class":201,"line":1330},[199,67513,2097],{"class":205},[199,67515,67516,67518,67520],{"class":201,"line":1335},[199,67517,2112],{"class":205},[199,67519,1002],{"class":874},[199,67521,882],{"class":205},[199,67523,67524,67526,67528],{"class":201,"line":1340},[199,67525,1414],{"class":205},[199,67527,914],{"class":874},[199,67529,882],{"class":205},[199,67531,67532],{"class":201,"line":1352},[199,67533,907],{"emptyLinePlaceholder":906},[199,67535,67536,67538,67540],{"class":201,"line":1367},[199,67537,887],{"class":205},[199,67539,1431],{"class":874},[199,67541,882],{"class":205},[199,67543,67544,67546,67548],{"class":201,"line":1381},[199,67545,1824],{"class":205},[199,67547,3227],{"class":874},[199,67549,882],{"class":205},[199,67551,67552,67554,67556],{"class":201,"line":1396},[199,67553,921],{"class":205},[199,67555,3233],{"class":874},[199,67557,882],{"class":205},[199,67559,67560,67562,67564,67566,67568,67571],{"class":201,"line":1401},[199,67561,57493],{"class":205},[199,67563,3236],{"class":874},[199,67565,55745],{"class":878},[199,67567,895],{"class":205},[199,67569,67570],{"class":898},"\"allCheck\"",[199,67572,882],{"class":205},[199,67574,67575,67577,67579,67581,67583,67585,67587,67589,67591,67593,67595,67598,67601,67603,67605,67607,67610,67613,67615],{"class":201,"line":1411},[199,67576,57561],{"class":205},[199,67578,56080],{"class":874},[199,67580,56083],{"class":878},[199,67582,895],{"class":205},[199,67584,56088],{"class":898},[199,67586,967],{"class":878},[199,67588,895],{"class":205},[199,67590,10549],{"class":898},[199,67592,17818],{"class":878},[199,67594,895],{"class":205},[199,67596,67597],{"class":898},"\"checkAll\"",[199,67599,67600],{"class":205},"> \u003C",[199,67602,199],{"class":874},[199,67604,55745],{"class":878},[199,67606,895],{"class":205},[199,67608,67609],{"class":898},"\"all\"",[199,67611,67612],{"class":205},">全选\u003C\u002F",[199,67614,199],{"class":874},[199,67616,882],{"class":205},[199,67618,67619,67621,67623],{"class":201,"line":1421},[199,67620,57666],{"class":205},[199,67622,3236],{"class":874},[199,67624,882],{"class":205},[199,67626,67627,67629,67631,67634,67636],{"class":201,"line":1426},[199,67628,57493],{"class":205},[199,67630,3236],{"class":874},[199,67632,67633],{"class":205},">商品\u003C\u002F",[199,67635,3236],{"class":874},[199,67637,882],{"class":205},[199,67639,67640,67642,67644,67647,67649],{"class":201,"line":1436},[199,67641,57493],{"class":205},[199,67643,3236],{"class":874},[199,67645,67646],{"class":205},">商家\u003C\u002F",[199,67648,3236],{"class":874},[199,67650,882],{"class":205},[199,67652,67653,67655,67657,67660,67662],{"class":201,"line":1441},[199,67654,57493],{"class":205},[199,67656,3236],{"class":874},[199,67658,67659],{"class":205},">价格\u003C\u002F",[199,67661,3236],{"class":874},[199,67663,882],{"class":205},[199,67665,67666,67668,67670],{"class":201,"line":1451},[199,67667,1404],{"class":205},[199,67669,3233],{"class":874},[199,67671,882],{"class":205},[199,67673,67674,67676,67678],{"class":201,"line":1458},[199,67675,921],{"class":205},[199,67677,3233],{"class":874},[199,67679,882],{"class":205},[199,67681,67682,67684,67686],{"class":201,"line":1464},[199,67683,57493],{"class":205},[199,67685,3278],{"class":874},[199,67687,882],{"class":205},[199,67689,67690,67692,67694,67696,67698,67700,67702,67704,67707,67709,67711,67714],{"class":201,"line":1478},[199,67691,57561],{"class":205},[199,67693,56080],{"class":874},[199,67695,56083],{"class":878},[199,67697,895],{"class":205},[199,67699,56088],{"class":898},[199,67701,967],{"class":878},[199,67703,895],{"class":205},[199,67705,67706],{"class":898},"\"check\"",[199,67708,55745],{"class":878},[199,67710,895],{"class":205},[199,67712,67713],{"class":898},"\"ck\"",[199,67715,882],{"class":205},[199,67717,67718,67720,67722],{"class":201,"line":1516},[199,67719,57666],{"class":205},[199,67721,3278],{"class":874},[199,67723,882],{"class":205},[199,67725,67726,67728,67730,67732,67734],{"class":201,"line":1522},[199,67727,57493],{"class":205},[199,67729,3278],{"class":874},[199,67731,63432],{"class":205},[199,67733,3278],{"class":874},[199,67735,882],{"class":205},[199,67737,67738,67740,67742,67745,67747],{"class":201,"line":1528},[199,67739,57493],{"class":205},[199,67741,3278],{"class":874},[199,67743,67744],{"class":205},">小米\u003C\u002F",[199,67746,3278],{"class":874},[199,67748,882],{"class":205},[199,67750,67751,67753,67755,67758,67760],{"class":201,"line":1557},[199,67752,57493],{"class":205},[199,67754,3278],{"class":874},[199,67756,67757],{"class":205},">￥1999\u003C\u002F",[199,67759,3278],{"class":874},[199,67761,882],{"class":205},[199,67763,67764,67766,67768],{"class":201,"line":1563},[199,67765,1404],{"class":205},[199,67767,3233],{"class":874},[199,67769,882],{"class":205},[199,67771,67772,67774,67776],{"class":201,"line":1568},[199,67773,921],{"class":205},[199,67775,3233],{"class":874},[199,67777,882],{"class":205},[199,67779,67780,67782,67784],{"class":201,"line":1574},[199,67781,57493],{"class":205},[199,67783,3278],{"class":874},[199,67785,882],{"class":205},[199,67787,67788,67790,67792,67794,67796,67798,67800,67802,67804,67806,67808,67810],{"class":201,"line":1580},[199,67789,57561],{"class":205},[199,67791,56080],{"class":874},[199,67793,56083],{"class":878},[199,67795,895],{"class":205},[199,67797,56088],{"class":898},[199,67799,967],{"class":878},[199,67801,895],{"class":205},[199,67803,67706],{"class":898},[199,67805,55745],{"class":878},[199,67807,895],{"class":205},[199,67809,67713],{"class":898},[199,67811,882],{"class":205},[199,67813,67814,67816,67818],{"class":201,"line":1597},[199,67815,57666],{"class":205},[199,67817,3278],{"class":874},[199,67819,882],{"class":205},[199,67821,67822,67824,67826,67829,67831],{"class":201,"line":1602},[199,67823,57493],{"class":205},[199,67825,3278],{"class":874},[199,67827,67828],{"class":205},">小米净水器\u003C\u002F",[199,67830,3278],{"class":874},[199,67832,882],{"class":205},[199,67834,67835,67837,67839,67841,67843],{"class":201,"line":1608},[199,67836,57493],{"class":205},[199,67838,3278],{"class":874},[199,67840,67744],{"class":205},[199,67842,3278],{"class":874},[199,67844,882],{"class":205},[199,67846,67847,67849,67851,67854,67856],{"class":201,"line":1640},[199,67848,57493],{"class":205},[199,67850,3278],{"class":874},[199,67852,67853],{"class":205},">￥4999\u003C\u002F",[199,67855,3278],{"class":874},[199,67857,882],{"class":205},[199,67859,67860,67862,67864],{"class":201,"line":1653},[199,67861,1404],{"class":205},[199,67863,3233],{"class":874},[199,67865,882],{"class":205},[199,67867,67868,67870,67872],{"class":201,"line":1673},[199,67869,921],{"class":205},[199,67871,3233],{"class":874},[199,67873,882],{"class":205},[199,67875,67876,67878,67880],{"class":201,"line":1690},[199,67877,57493],{"class":205},[199,67879,3278],{"class":874},[199,67881,882],{"class":205},[199,67883,67884,67886,67888,67890,67892,67894,67896,67898,67900,67902,67904,67906],{"class":201,"line":1706},[199,67885,57561],{"class":205},[199,67887,56080],{"class":874},[199,67889,56083],{"class":878},[199,67891,895],{"class":205},[199,67893,56088],{"class":898},[199,67895,967],{"class":878},[199,67897,895],{"class":205},[199,67899,67706],{"class":898},[199,67901,55745],{"class":878},[199,67903,895],{"class":205},[199,67905,67713],{"class":898},[199,67907,882],{"class":205},[199,67909,67910,67912,67914],{"class":201,"line":1712},[199,67911,57666],{"class":205},[199,67913,3278],{"class":874},[199,67915,882],{"class":205},[199,67917,67918,67920,67922,67925,67927],{"class":201,"line":1720},[199,67919,57493],{"class":205},[199,67921,3278],{"class":874},[199,67923,67924],{"class":205},">小米电视\u003C\u002F",[199,67926,3278],{"class":874},[199,67928,882],{"class":205},[199,67930,67931,67933,67935,67937,67939],{"class":201,"line":1725},[199,67932,57493],{"class":205},[199,67934,3278],{"class":874},[199,67936,67744],{"class":205},[199,67938,3278],{"class":874},[199,67940,882],{"class":205},[199,67942,67943,67945,67947,67950,67952],{"class":201,"line":1731},[199,67944,57493],{"class":205},[199,67946,3278],{"class":874},[199,67948,67949],{"class":205},">￥5999\u003C\u002F",[199,67951,3278],{"class":874},[199,67953,882],{"class":205},[199,67955,67956,67958,67960],{"class":201,"line":1745},[199,67957,1404],{"class":205},[199,67959,3233],{"class":874},[199,67961,882],{"class":205},[199,67963,67964,67966,67968],{"class":201,"line":1754},[199,67965,2112],{"class":205},[199,67967,3227],{"class":874},[199,67969,882],{"class":205},[199,67971,67972,67974,67976],{"class":201,"line":1763},[199,67973,1824],{"class":205},[199,67975,1446],{"class":874},[199,67977,882],{"class":205},[199,67979,67980],{"class":201,"line":1768},[199,67981,67982],{"class":1454},"    \u002F\u002F 1. 获取大复选框\n",[199,67984,67985,67987,67990,67992,67994,67996,67998,68001],{"class":201,"line":19628},[199,67986,14084],{"class":1086},[199,67988,67989],{"class":1018}," checkAll",[199,67991,16425],{"class":1086},[199,67993,56655],{"class":205},[199,67995,56658],{"class":878},[199,67997,1537],{"class":205},[199,67999,68000],{"class":898},"'#checkAll'",[199,68002,1594],{"class":205},[199,68004,68005],{"class":201,"line":19641},[199,68006,68007],{"class":1454},"    \u002F\u002F 2. 获取所有的小复选框\n",[199,68009,68010,68012,68015,68017,68019,68021,68023,68026],{"class":201,"line":19646},[199,68011,14084],{"class":1086},[199,68013,68014],{"class":1018}," cks",[199,68016,16425],{"class":1086},[199,68018,56655],{"class":205},[199,68020,57940],{"class":878},[199,68022,1537],{"class":205},[199,68024,68025],{"class":898},"'.ck'",[199,68027,1594],{"class":205},[199,68029,68030],{"class":201,"line":19660},[199,68031,68032],{"class":1454},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[199,68034,68035,68038,68040,68042,68044,68046,68048],{"class":201,"line":19665},[199,68036,68037],{"class":205},"    checkAll.",[199,68039,60072],{"class":878},[199,68041,1537],{"class":205},[199,68043,60077],{"class":898},[199,68045,1912],{"class":205},[199,68047,56708],{"class":1086},[199,68049,56711],{"class":205},[199,68051,68052],{"class":201,"line":19671},[199,68053,68054],{"class":1454},"      \u002F\u002F 得到当前大复选框的选中状态\n",[199,68056,68057,68060],{"class":201,"line":19676},[199,68058,68059],{"class":1454},"      \u002F\u002F console.log(checkAll.checked)",[199,68061,68062],{"class":1454},"  \u002F\u002F 得到 是 true 或者是 false\n",[199,68064,68065],{"class":201,"line":19690},[199,68066,68067],{"class":1454},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[199,68069,68070,68072,68074,68076,68078,68080,68082,68084,68086,68089,68091,68093,68095],{"class":201,"line":19695},[199,68071,1971],{"class":1086},[199,68073,1484],{"class":205},[199,68075,1487],{"class":1086},[199,68077,1490],{"class":205},[199,68079,895],{"class":1086},[199,68081,1621],{"class":1018},[199,68083,1498],{"class":205},[199,68085,887],{"class":1086},[199,68087,68088],{"class":205}," cks.",[199,68090,1631],{"class":1018},[199,68092,1507],{"class":205},[199,68094,1510],{"class":1086},[199,68096,1513],{"class":205},[199,68098,68099,68102,68104,68107],{"class":201,"line":19700},[199,68100,68101],{"class":205},"        cks[i].checked ",[199,68103,895],{"class":1086},[199,68105,68106],{"class":1018}," this",[199,68108,68109],{"class":205},".checked\n",[199,68111,68112],{"class":201,"line":19714},[199,68113,2092],{"class":205},[199,68115,68116],{"class":201,"line":19726},[199,68117,36302],{"class":205},[199,68119,68120],{"class":201,"line":19731},[199,68121,68122],{"class":1454},"    \u002F\u002F 5. 小复选框控制大复选框\n",[199,68124,68125],{"class":201,"line":19744},[199,68126,907],{"emptyLinePlaceholder":906},[199,68128,68129,68131,68133,68135,68137,68139,68141,68143,68145,68147,68149,68151,68153],{"class":201,"line":19749},[199,68130,1937],{"class":1086},[199,68132,1484],{"class":205},[199,68134,1487],{"class":1086},[199,68136,1490],{"class":205},[199,68138,895],{"class":1086},[199,68140,1621],{"class":1018},[199,68142,1498],{"class":205},[199,68144,887],{"class":1086},[199,68146,68088],{"class":205},[199,68148,1631],{"class":1018},[199,68150,1507],{"class":205},[199,68152,1510],{"class":1086},[199,68154,1513],{"class":205},[199,68156,68157],{"class":201,"line":19754},[199,68158,68159],{"class":1454},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[199,68161,68162,68165,68167,68169,68171,68173,68175],{"class":201,"line":19759},[199,68163,68164],{"class":205},"      cks[i].",[199,68166,60072],{"class":878},[199,68168,1537],{"class":205},[199,68170,60077],{"class":898},[199,68172,1912],{"class":205},[199,68174,56708],{"class":1086},[199,68176,56711],{"class":205},[199,68178,68179],{"class":201,"line":19772},[199,68180,68181],{"class":1454},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[199,68183,68184],{"class":201,"line":19777},[199,68185,68186],{"class":1454},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[199,68188,68189],{"class":201,"line":35475},[199,68190,68191],{"class":1454},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[199,68193,68194],{"class":201,"line":35481},[199,68195,68196],{"class":1454},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[199,68198,68199,68202,68204,68206,68208,68210,68213,68215,68217,68219,68221],{"class":201,"line":35487},[199,68200,68201],{"class":205},"        checkAll.checked ",[199,68203,895],{"class":1086},[199,68205,56655],{"class":205},[199,68207,57940],{"class":878},[199,68209,1537],{"class":205},[199,68211,68212],{"class":898},"'.ck:checked'",[199,68214,33668],{"class":205},[199,68216,1631],{"class":1018},[199,68218,60165],{"class":1086},[199,68220,68088],{"class":205},[199,68222,58090],{"class":1018},[199,68224,68225],{"class":201,"line":35493},[199,68226,67074],{"class":205},[199,68228,68229],{"class":201,"line":35499},[199,68230,2097],{"class":205},[199,68232,68233,68235,68237],{"class":201,"line":35510},[199,68234,2112],{"class":205},[199,68236,1446],{"class":874},[199,68238,882],{"class":205},[199,68240,68241,68243,68245],{"class":201,"line":35516},[199,68242,1414],{"class":205},[199,68244,1431],{"class":874},[199,68246,882],{"class":205},[199,68248,68249],{"class":201,"line":35536},[199,68250,907],{"emptyLinePlaceholder":906},[199,68252,68253,68255,68257],{"class":201,"line":35542},[199,68254,1414],{"class":205},[199,68256,194],{"class":874},[199,68258,882],{"class":205},[31,68260,68261],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[31,68263,68264],{},"用好之间比较得到的布尔值！！！",[31,68266,68267,68268,68271,68272,1484,68275,3664,68277,68280],{},"在 JS 里访问的时候，",[196,68269,68270],{},"checkbox.checked"," 是一个 ",[49,68273,68274],{},"布尔值",[196,68276,4302],{},[196,68278,68279],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[31,68282,68283,68284,68287,68288],{},"HTML 的 ",[196,68285,68286],{},"checked=\"checked\""," 只是 ",[49,68289,68290,68291,68294],{},"初始值；JS 的 ",[196,68292,68293],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[31,68296,68297],{},"：checked是一个伪类选择器",[31,68299,68300],{},[55,68301],{"alt":57,"src":68302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[31,68304,68305,68308],{},[68306,68307],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[31,68310,68311],{},[55,68312],{"alt":57,"src":68313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68315,68317],{"id":68316},"_33-dom事件进阶","3.3 DOM事件进阶",[19,68319,68321],{"id":68320},"_331-事件流","3.3.1 事件流",[31,68323,68324],{},[55,68325],{"alt":57,"src":68326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[627,68328,68330],{"id":68329},"_3311-事件捕获","3.3.1.1 事件捕获",[31,68332,68333],{},[55,68334],{"alt":57,"src":68335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[190,68337,68339],{"className":192,"code":68338,"language":194,"meta":57,"style":57},"\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",[196,68340,68341,68351,68365,68369,68377,68391,68411,68423,68431,68438,68450,68462,68472,68476,68480,68487,68499,68511,68521,68525,68533,68541,68545,68553,68568,68587,68595,68603,68623,68643,68659,68670,68678,68695,68706,68714,68731,68742,68750,68758,68766,68770],{"__ignoreMap":57},[199,68342,68343,68345,68347,68349],{"class":201,"line":202},[199,68344,871],{"class":205},[199,68346,875],{"class":874},[199,68348,879],{"class":878},[199,68350,882],{"class":205},[199,68352,68353,68355,68357,68359,68361,68363],{"class":201,"line":36},[199,68354,887],{"class":205},[199,68356,194],{"class":874},[199,68358,892],{"class":878},[199,68360,895],{"class":205},[199,68362,899],{"class":898},[199,68364,882],{"class":205},[199,68366,68367],{"class":201,"line":73},[199,68368,907],{"emptyLinePlaceholder":906},[199,68370,68371,68373,68375],{"class":201,"line":333},[199,68372,887],{"class":205},[199,68374,914],{"class":874},[199,68376,882],{"class":205},[199,68378,68379,68381,68383,68385,68387,68389],{"class":201,"line":227},[199,68380,1824],{"class":205},[199,68382,924],{"class":874},[199,68384,927],{"class":878},[199,68386,895],{"class":205},[199,68388,932],{"class":898},[199,68390,882],{"class":205},[199,68392,68393,68395,68397,68399,68401,68403,68405,68407,68409],{"class":201,"line":238},[199,68394,1824],{"class":205},[199,68396,924],{"class":874},[199,68398,967],{"class":878},[199,68400,895],{"class":205},[199,68402,972],{"class":898},[199,68404,951],{"class":878},[199,68406,895],{"class":205},[199,68408,979],{"class":898},[199,68410,882],{"class":205},[199,68412,68413,68415,68417,68419,68421],{"class":201,"line":252},[199,68414,1824],{"class":205},[199,68416,988],{"class":874},[199,68418,991],{"class":205},[199,68420,988],{"class":874},[199,68422,882],{"class":205},[199,68424,68425,68427,68429],{"class":201,"line":388},[199,68426,1824],{"class":205},[199,68428,1002],{"class":874},[199,68430,882],{"class":205},[199,68432,68433,68436],{"class":201,"line":415},[199,68434,68435],{"class":878},"    .father",[199,68437,1012],{"class":205},[199,68439,68440,68442,68444,68446,68448],{"class":201,"line":426},[199,68441,57030],{"class":1018},[199,68443,1022],{"class":205},[199,68445,67333],{"class":1018},[199,68447,1087],{"class":1086},[199,68449,1028],{"class":205},[199,68451,68452,68454,68456,68458,68460],{"class":201,"line":1015},[199,68453,57044],{"class":1018},[199,68455,1022],{"class":205},[199,68457,67333],{"class":1018},[199,68459,1087],{"class":1086},[199,68461,1028],{"class":205},[199,68463,68464,68466,68468,68470],{"class":201,"line":1031},[199,68465,57143],{"class":1018},[199,68467,1022],{"class":205},[199,68469,1257],{"class":1018},[199,68471,1028],{"class":205},[199,68473,68474],{"class":201,"line":1043},[199,68475,2097],{"class":205},[199,68477,68478],{"class":201,"line":1049},[199,68479,907],{"emptyLinePlaceholder":906},[199,68481,68482,68485],{"class":201,"line":1054},[199,68483,68484],{"class":878},"    .son",[199,68486,1012],{"class":205},[199,68488,68489,68491,68493,68495,68497],{"class":201,"line":1062},[199,68490,57030],{"class":1018},[199,68492,1022],{"class":205},[199,68494,4647],{"class":1018},[199,68496,1087],{"class":1086},[199,68498,1028],{"class":205},[199,68500,68501,68503,68505,68507,68509],{"class":201,"line":1075},[199,68502,57044],{"class":1018},[199,68504,1022],{"class":205},[199,68506,4647],{"class":1018},[199,68508,1087],{"class":1086},[199,68510,1028],{"class":205},[199,68512,68513,68515,68517,68519],{"class":201,"line":1092},[199,68514,57143],{"class":1018},[199,68516,1022],{"class":205},[199,68518,57148],{"class":1018},[199,68520,1028],{"class":205},[199,68522,68523],{"class":201,"line":1107},[199,68524,2097],{"class":205},[199,68526,68527,68529,68531],{"class":201,"line":1128},[199,68528,2112],{"class":205},[199,68530,1002],{"class":874},[199,68532,882],{"class":205},[199,68534,68535,68537,68539],{"class":201,"line":1146},[199,68536,1414],{"class":205},[199,68538,914],{"class":874},[199,68540,882],{"class":205},[199,68542,68543],{"class":201,"line":1163},[199,68544,907],{"emptyLinePlaceholder":906},[199,68546,68547,68549,68551],{"class":201,"line":1176},[199,68548,887],{"class":205},[199,68550,1431],{"class":874},[199,68552,882],{"class":205},[199,68554,68555,68557,68559,68561,68563,68566],{"class":201,"line":1189},[199,68556,1824],{"class":205},[199,68558,1220],{"class":874},[199,68560,55745],{"class":878},[199,68562,895],{"class":205},[199,68564,68565],{"class":898},"\"father\"",[199,68567,882],{"class":205},[199,68569,68570,68572,68574,68576,68578,68581,68583,68585],{"class":201,"line":1202},[199,68571,921],{"class":205},[199,68573,1220],{"class":874},[199,68575,55745],{"class":878},[199,68577,895],{"class":205},[199,68579,68580],{"class":898},"\"son\"",[199,68582,57573],{"class":205},[199,68584,1220],{"class":874},[199,68586,882],{"class":205},[199,68588,68589,68591,68593],{"class":201,"line":1207},[199,68590,2112],{"class":205},[199,68592,1220],{"class":874},[199,68594,882],{"class":205},[199,68596,68597,68599,68601],{"class":201,"line":1212},[199,68598,1824],{"class":205},[199,68600,1446],{"class":874},[199,68602,882],{"class":205},[199,68604,68605,68607,68610,68612,68614,68616,68618,68621],{"class":201,"line":1225},[199,68606,14084],{"class":1086},[199,68608,68609],{"class":1018}," fa",[199,68611,16425],{"class":1086},[199,68613,56655],{"class":205},[199,68615,56658],{"class":878},[199,68617,1537],{"class":205},[199,68619,68620],{"class":898},"'.father'",[199,68622,1594],{"class":205},[199,68624,68625,68627,68630,68632,68634,68636,68638,68641],{"class":201,"line":1236},[199,68626,14084],{"class":1086},[199,68628,68629],{"class":1018}," son",[199,68631,16425],{"class":1086},[199,68633,56655],{"class":205},[199,68635,56658],{"class":878},[199,68637,1537],{"class":205},[199,68639,68640],{"class":898},"'.son'",[199,68642,1594],{"class":205},[199,68644,68645,68647,68649,68651,68653,68655,68657],{"class":201,"line":1249},[199,68646,2102],{"class":205},[199,68648,60072],{"class":878},[199,68650,1537],{"class":205},[199,68652,60077],{"class":898},[199,68654,1912],{"class":205},[199,68656,56708],{"class":1086},[199,68658,56711],{"class":205},[199,68660,68661,68663,68665,68668],{"class":201,"line":1262},[199,68662,61184],{"class":878},[199,68664,1537],{"class":205},[199,68666,68667],{"class":898},"'woshiu1'",[199,68669,1594],{"class":205},[199,68671,68672,68674,68676],{"class":201,"line":1275},[199,68673,56794],{"class":205},[199,68675,4302],{"class":1018},[199,68677,1594],{"class":205},[199,68679,68680,68683,68685,68687,68689,68691,68693],{"class":201,"line":1287},[199,68681,68682],{"class":205},"    fa.",[199,68684,60072],{"class":878},[199,68686,1537],{"class":205},[199,68688,60077],{"class":898},[199,68690,1912],{"class":205},[199,68692,56708],{"class":1086},[199,68694,56711],{"class":205},[199,68696,68697,68699,68701,68704],{"class":201,"line":1292},[199,68698,61184],{"class":878},[199,68700,1537],{"class":205},[199,68702,68703],{"class":898},"'1'",[199,68705,1594],{"class":205},[199,68707,68708,68710,68712],{"class":201,"line":1297},[199,68709,56794],{"class":205},[199,68711,4302],{"class":1018},[199,68713,1594],{"class":205},[199,68715,68716,68719,68721,68723,68725,68727,68729],{"class":201,"line":1310},[199,68717,68718],{"class":205},"    son.",[199,68720,60072],{"class":878},[199,68722,1537],{"class":205},[199,68724,60077],{"class":898},[199,68726,1912],{"class":205},[199,68728,56708],{"class":1086},[199,68730,56711],{"class":205},[199,68732,68733,68735,68737,68740],{"class":201,"line":1315},[199,68734,61184],{"class":878},[199,68736,1537],{"class":205},[199,68738,68739],{"class":898},"'2'",[199,68741,1594],{"class":205},[199,68743,68744,68746,68748],{"class":201,"line":1330},[199,68745,56794],{"class":205},[199,68747,4302],{"class":1018},[199,68749,1594],{"class":205},[199,68751,68752,68754,68756],{"class":201,"line":1335},[199,68753,2112],{"class":205},[199,68755,1446],{"class":874},[199,68757,882],{"class":205},[199,68759,68760,68762,68764],{"class":201,"line":1340},[199,68761,1414],{"class":205},[199,68763,1431],{"class":874},[199,68765,882],{"class":205},[199,68767,68768],{"class":201,"line":1352},[199,68769,907],{"emptyLinePlaceholder":906},[199,68771,68772,68774,68776],{"class":201,"line":1367},[199,68773,1414],{"class":205},[199,68775,194],{"class":874},[199,68777,882],{"class":205},[31,68779,68780],{},[55,68781],{"alt":57,"src":68782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[31,68784,68785],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[627,68787,68789],{"id":68788},"_3312-事件冒泡","3.3.1.2 事件冒泡",[31,68791,68792],{},[55,68793],{"alt":57,"src":68794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[31,68796,68797],{},"反着来",[31,68799,68800],{},"注意是同名事件，比如都是‘click’",[627,68802,68804],{"id":68803},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[31,68806,68807],{},[55,68808],{"alt":57,"src":68809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[627,68811,68813],{"id":68812},"_3314-解绑事件","3.3.1.4 解绑事件",[31,68815,68816],{},[55,68817],{"alt":57,"src":68818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[31,68820,68821],{},[55,68822],{"alt":57,"src":68823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[627,68825,68827],{"id":68826},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[24,68829,68830],{},[27,68831,68832],{},"事件类型的区别",[31,68834,68835],{},[55,68836],{"alt":57,"src":68837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[31,68839,68840],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[24,68842,68843],{"start":36},[27,68844,68845],{},"注册事件的区别",[31,68847,68848],{},[55,68849],{"alt":57,"src":68850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[627,68852,68854],{"id":68853},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[31,68856,68857],{},[55,68858],{"alt":57,"src":68859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[31,68861,68862],{},[55,68863],{"alt":57,"src":68864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[190,68866,68868],{"className":2763,"code":68867,"language":2765,"meta":57,"style":57},"\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",[196,68869,68870,68878,68895,68918,68926,68931,68936,68941,68945,68953,68961],{"__ignoreMap":57},[199,68871,68872,68874,68876],{"class":201,"line":202},[199,68873,887],{"class":205},[199,68875,1431],{"class":874},[199,68877,882],{"class":205},[199,68879,68880,68882,68885,68888,68890,68893],{"class":201,"line":36},[199,68881,1824],{"class":205},[199,68883,68884],{"class":874},"form",[199,68886,68887],{"class":878}," action",[199,68889,895],{"class":205},[199,68891,68892],{"class":898},"\"http:\u002F\u002Fwww.itcast.cn\"",[199,68894,882],{"class":205},[199,68896,68897,68899,68901,68903,68905,68908,68911,68913,68916],{"class":201,"line":73},[199,68898,921],{"class":205},[199,68900,56080],{"class":874},[199,68902,56083],{"class":878},[199,68904,895],{"class":205},[199,68906,68907],{"class":898},"\"submit\"",[199,68909,68910],{"class":878}," value",[199,68912,895],{"class":205},[199,68914,68915],{"class":898},"\"免费注册\"",[199,68917,882],{"class":205},[199,68919,68920,68922,68924],{"class":201,"line":333},[199,68921,921],{"class":205},[199,68923,1446],{"class":874},[199,68925,882],{"class":205},[199,68927,68928],{"class":201,"line":227},[199,68929,68930],{"class":205},"      const form = document.querySelector('form')\n",[199,68932,68933],{"class":201,"line":238},[199,68934,68935],{"class":205},"      form.addEventListener('submit', function (e) {\n",[199,68937,68938],{"class":201,"line":252},[199,68939,68940],{"class":205},"        e.preventDefault()\n",[199,68942,68943],{"class":201,"line":388},[199,68944,67074],{"class":205},[199,68946,68947,68949,68951],{"class":201,"line":415},[199,68948,1404],{"class":205},[199,68950,1446],{"class":874},[199,68952,882],{"class":205},[199,68954,68955,68957,68959],{"class":201,"line":426},[199,68956,2112],{"class":205},[199,68958,68884],{"class":874},[199,68960,882],{"class":205},[199,68962,68963,68965,68967],{"class":201,"line":1015},[199,68964,1414],{"class":205},[199,68966,1431],{"class":874},[199,68968,882],{"class":205},[31,68970,68971],{},"点击不在跳转！！！",[19,68973,68975],{"id":68974},"_332-事件委托","3.3.2 事件委托",[31,68977,68978],{},[55,68979],{"alt":57,"src":68980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[190,68982,68984],{"className":192,"code":68983,"language":194,"meta":57,"style":57},"\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",[196,68985,68986,68996,69010,69014,69022,69036,69056,69068,69076,69080,69088,69096,69108,69120,69132,69144,69156,69169,69177,69185,69190,69209,69230,69235,69240,69245,69250,69259,69263,69273,69277,69282,69287,69301,69311,69315,69319,69327,69335,69339],{"__ignoreMap":57},[199,68987,68988,68990,68992,68994],{"class":201,"line":202},[199,68989,871],{"class":205},[199,68991,875],{"class":874},[199,68993,879],{"class":878},[199,68995,882],{"class":205},[199,68997,68998,69000,69002,69004,69006,69008],{"class":201,"line":36},[199,68999,887],{"class":205},[199,69001,194],{"class":874},[199,69003,892],{"class":878},[199,69005,895],{"class":205},[199,69007,899],{"class":898},[199,69009,882],{"class":205},[199,69011,69012],{"class":201,"line":73},[199,69013,907],{"emptyLinePlaceholder":906},[199,69015,69016,69018,69020],{"class":201,"line":333},[199,69017,887],{"class":205},[199,69019,914],{"class":874},[199,69021,882],{"class":205},[199,69023,69024,69026,69028,69030,69032,69034],{"class":201,"line":227},[199,69025,1824],{"class":205},[199,69027,924],{"class":874},[199,69029,927],{"class":878},[199,69031,895],{"class":205},[199,69033,932],{"class":898},[199,69035,882],{"class":205},[199,69037,69038,69040,69042,69044,69046,69048,69050,69052,69054],{"class":201,"line":238},[199,69039,1824],{"class":205},[199,69041,924],{"class":874},[199,69043,967],{"class":878},[199,69045,895],{"class":205},[199,69047,972],{"class":898},[199,69049,951],{"class":878},[199,69051,895],{"class":205},[199,69053,979],{"class":898},[199,69055,882],{"class":205},[199,69057,69058,69060,69062,69064,69066],{"class":201,"line":252},[199,69059,1824],{"class":205},[199,69061,988],{"class":874},[199,69063,991],{"class":205},[199,69065,988],{"class":874},[199,69067,882],{"class":205},[199,69069,69070,69072,69074],{"class":201,"line":388},[199,69071,1414],{"class":205},[199,69073,914],{"class":874},[199,69075,882],{"class":205},[199,69077,69078],{"class":201,"line":415},[199,69079,907],{"emptyLinePlaceholder":906},[199,69081,69082,69084,69086],{"class":201,"line":426},[199,69083,887],{"class":205},[199,69085,1431],{"class":874},[199,69087,882],{"class":205},[199,69089,69090,69092,69094],{"class":201,"line":1015},[199,69091,1824],{"class":205},[199,69093,176],{"class":874},[199,69095,882],{"class":205},[199,69097,69098,69100,69102,69104,69106],{"class":201,"line":1031},[199,69099,921],{"class":205},[199,69101,27],{"class":874},[199,69103,56225],{"class":205},[199,69105,27],{"class":874},[199,69107,882],{"class":205},[199,69109,69110,69112,69114,69116,69118],{"class":201,"line":1043},[199,69111,921],{"class":205},[199,69113,27],{"class":874},[199,69115,56244],{"class":205},[199,69117,27],{"class":874},[199,69119,882],{"class":205},[199,69121,69122,69124,69126,69128,69130],{"class":201,"line":1049},[199,69123,921],{"class":205},[199,69125,27],{"class":874},[199,69127,56263],{"class":205},[199,69129,27],{"class":874},[199,69131,882],{"class":205},[199,69133,69134,69136,69138,69140,69142],{"class":201,"line":1054},[199,69135,921],{"class":205},[199,69137,27],{"class":874},[199,69139,56282],{"class":205},[199,69141,27],{"class":874},[199,69143,882],{"class":205},[199,69145,69146,69148,69150,69152,69154],{"class":201,"line":1062},[199,69147,921],{"class":205},[199,69149,27],{"class":874},[199,69151,56301],{"class":205},[199,69153,27],{"class":874},[199,69155,882],{"class":205},[199,69157,69158,69160,69162,69165,69167],{"class":201,"line":1075},[199,69159,921],{"class":205},[199,69161,31],{"class":874},[199,69163,69164],{"class":205},">我不需要变色\u003C\u002F",[199,69166,31],{"class":874},[199,69168,882],{"class":205},[199,69170,69171,69173,69175],{"class":201,"line":1092},[199,69172,2112],{"class":205},[199,69174,176],{"class":874},[199,69176,882],{"class":205},[199,69178,69179,69181,69183],{"class":201,"line":1107},[199,69180,1824],{"class":205},[199,69182,1446],{"class":874},[199,69184,882],{"class":205},[199,69186,69187],{"class":201,"line":1128},[199,69188,69189],{"class":1454},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[199,69191,69192,69194,69196,69198,69200,69202,69204,69207],{"class":201,"line":1146},[199,69193,14084],{"class":1086},[199,69195,63551],{"class":1018},[199,69197,16425],{"class":1086},[199,69199,56655],{"class":205},[199,69201,56658],{"class":878},[199,69203,1537],{"class":205},[199,69205,69206],{"class":898},"'ul'",[199,69208,1594],{"class":205},[199,69210,69211,69214,69216,69218,69220,69222,69224,69226,69228],{"class":201,"line":1163},[199,69212,69213],{"class":205},"    ul.",[199,69215,60072],{"class":878},[199,69217,1537],{"class":205},[199,69219,60077],{"class":898},[199,69221,1912],{"class":205},[199,69223,56708],{"class":1086},[199,69225,1484],{"class":205},[199,69227,3166],{"class":8113},[199,69229,1513],{"class":205},[199,69231,69232],{"class":201,"line":1176},[199,69233,69234],{"class":1454},"      \u002F\u002F alert(1)\n",[199,69236,69237],{"class":201,"line":1189},[199,69238,69239],{"class":1454},"      \u002F\u002F e.target就是我们点击的对象\n",[199,69241,69242],{"class":201,"line":1202},[199,69243,69244],{"class":1454},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[199,69246,69247],{"class":201,"line":1207},[199,69248,69249],{"class":1454},"      \u002F\u002F e.target.style.color = 'red'\n",[199,69251,69252,69254,69256],{"class":201,"line":1212},[199,69253,60503],{"class":205},[199,69255,60506],{"class":878},[199,69257,69258],{"class":205},"(e)\n",[199,69260,69261],{"class":201,"line":1225},[199,69262,907],{"emptyLinePlaceholder":906},[199,69264,69265,69267,69270],{"class":201,"line":1236},[199,69266,60503],{"class":205},[199,69268,69269],{"class":878},"dir",[199,69271,69272],{"class":205},"(e.target)\n",[199,69274,69275],{"class":201,"line":1249},[199,69276,907],{"emptyLinePlaceholder":906},[199,69278,69279],{"class":201,"line":1262},[199,69280,69281],{"class":1454},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[199,69283,69284],{"class":201,"line":1275},[199,69285,69286],{"class":1454},"      \u002F\u002F 通过tagName来进行判断\n",[199,69288,69289,69291,69294,69296,69299],{"class":201,"line":1287},[199,69290,56739],{"class":1086},[199,69292,69293],{"class":205}," (e.target.tagName ",[199,69295,56745],{"class":1086},[199,69297,69298],{"class":898}," 'LI'",[199,69300,1513],{"class":205},[199,69302,69303,69306,69308],{"class":201,"line":1292},[199,69304,69305],{"class":205},"        e.target.style.color ",[199,69307,895],{"class":1086},[199,69309,69310],{"class":898}," 'red'\n",[199,69312,69313],{"class":201,"line":1297},[199,69314,2092],{"class":205},[199,69316,69317],{"class":201,"line":1310},[199,69318,36302],{"class":205},[199,69320,69321,69323,69325],{"class":201,"line":1315},[199,69322,2112],{"class":205},[199,69324,1446],{"class":874},[199,69326,882],{"class":205},[199,69328,69329,69331,69333],{"class":201,"line":1330},[199,69330,1414],{"class":205},[199,69332,1431],{"class":874},[199,69334,882],{"class":205},[199,69336,69337],{"class":201,"line":1335},[199,69338,907],{"emptyLinePlaceholder":906},[199,69340,69341,69343,69345],{"class":201,"line":1340},[199,69342,1414],{"class":205},[199,69344,194],{"class":874},[199,69346,882],{"class":205},[31,69348,69349],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[31,69351,69352],{},"if(e.target.ragName==='P') {}",[31,69354,69355],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[31,69357,69358],{},"通过事件委托的方式实现tab栏切换改造：",[31,69360,69361],{},"一定要记住自定义属性！！！！！！",[31,69363,69364],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[31,69366,69367],{},"id是自定义的属性名",[31,69369,69370],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[190,69372,69374],{"className":192,"code":69373,"language":194,"meta":57,"style":57},"\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",[196,69375,69376,69386,69400,69404,69412,69426,69446,69466,69478,69486,69492,69502,69512,69516,69520,69526,69538,69550,69562,69578,69582,69586,69592,69604,69616,69628,69638,69648,69652,69656,69664,69676,69686,69698,69702,69706,69714,69724,69734,69744,69748,69752,69762,69776,69788,69792,69796,69808,69818,69834,69844,69848,69852,69866,69876,69886,69890,69894,69900,69914,69918,69922,69930,69940,69944,69948,69957,69967,69971,69979,69987,69991,69999,70013,70027,70039,70047,70086,70118,70150,70182,70214,70222,70230,70244,70278,70312,70346,70380,70414,70422,70430,70438,70443,70448,70467,70472,70492,70500,70505,70518,70539,70552,70556,70561,70566,70579,70599,70627,70631,70635,70639,70647,70655,70659],{"__ignoreMap":57},[199,69377,69378,69380,69382,69384],{"class":201,"line":202},[199,69379,871],{"class":205},[199,69381,875],{"class":874},[199,69383,879],{"class":878},[199,69385,882],{"class":205},[199,69387,69388,69390,69392,69394,69396,69398],{"class":201,"line":36},[199,69389,887],{"class":205},[199,69391,194],{"class":874},[199,69393,892],{"class":878},[199,69395,895],{"class":205},[199,69397,899],{"class":898},[199,69399,882],{"class":205},[199,69401,69402],{"class":201,"line":73},[199,69403,907],{"emptyLinePlaceholder":906},[199,69405,69406,69408,69410],{"class":201,"line":333},[199,69407,887],{"class":205},[199,69409,914],{"class":874},[199,69411,882],{"class":205},[199,69413,69414,69416,69418,69420,69422,69424],{"class":201,"line":227},[199,69415,1824],{"class":205},[199,69417,924],{"class":874},[199,69419,927],{"class":878},[199,69421,895],{"class":205},[199,69423,932],{"class":898},[199,69425,61386],{"class":205},[199,69427,69428,69430,69432,69434,69436,69438,69440,69442,69444],{"class":201,"line":238},[199,69429,1824],{"class":205},[199,69431,924],{"class":874},[199,69433,943],{"class":878},[199,69435,895],{"class":205},[199,69437,948],{"class":898},[199,69439,951],{"class":878},[199,69441,895],{"class":205},[199,69443,956],{"class":898},[199,69445,61386],{"class":205},[199,69447,69448,69450,69452,69454,69456,69458,69460,69462,69464],{"class":201,"line":252},[199,69449,1824],{"class":205},[199,69451,924],{"class":874},[199,69453,967],{"class":878},[199,69455,895],{"class":205},[199,69457,972],{"class":898},[199,69459,951],{"class":878},[199,69461,895],{"class":205},[199,69463,979],{"class":898},[199,69465,61386],{"class":205},[199,69467,69468,69470,69472,69474,69476],{"class":201,"line":388},[199,69469,1824],{"class":205},[199,69471,988],{"class":874},[199,69473,65884],{"class":205},[199,69475,988],{"class":874},[199,69477,882],{"class":205},[199,69479,69480,69482,69484],{"class":201,"line":415},[199,69481,1824],{"class":205},[199,69483,1002],{"class":874},[199,69485,882],{"class":205},[199,69487,69488,69490],{"class":201,"line":426},[199,69489,9300],{"class":874},[199,69491,1012],{"class":205},[199,69493,69494,69496,69498,69500],{"class":201,"line":1015},[199,69495,56965],{"class":1018},[199,69497,1022],{"class":205},[199,69499,1025],{"class":1018},[199,69501,1028],{"class":205},[199,69503,69504,69506,69508,69510],{"class":201,"line":1031},[199,69505,56954],{"class":1018},[199,69507,1022],{"class":205},[199,69509,1025],{"class":1018},[199,69511,1028],{"class":205},[199,69513,69514],{"class":201,"line":1043},[199,69515,2097],{"class":205},[199,69517,69518],{"class":201,"line":1049},[199,69519,907],{"emptyLinePlaceholder":906},[199,69521,69522,69524],{"class":201,"line":1054},[199,69523,65935],{"class":878},[199,69525,1012],{"class":205},[199,69527,69528,69530,69532,69534,69536],{"class":201,"line":1062},[199,69529,57030],{"class":1018},[199,69531,1022],{"class":205},[199,69533,65946],{"class":1018},[199,69535,1087],{"class":1086},[199,69537,1028],{"class":205},[199,69539,69540,69542,69544,69546,69548],{"class":201,"line":1075},[199,69541,57044],{"class":1018},[199,69543,1022],{"class":205},[199,69545,65959],{"class":1018},[199,69547,1087],{"class":1086},[199,69549,1028],{"class":205},[199,69551,69552,69554,69556,69558,69560],{"class":201,"line":1092},[199,69553,56965],{"class":1018},[199,69555,1022],{"class":205},[199,69557,3779],{"class":1018},[199,69559,1087],{"class":1086},[199,69561,1028],{"class":205},[199,69563,69564,69566,69568,69570,69572,69574,69576],{"class":201,"line":1107},[199,69565,64236],{"class":1018},[199,69567,1022],{"class":205},[199,69569,1115],{"class":1018},[199,69571,1087],{"class":1086},[199,69573,1120],{"class":1018},[199,69575,64503],{"class":1018},[199,69577,1028],{"class":205},[199,69579,69580],{"class":201,"line":1128},[199,69581,2097],{"class":205},[199,69583,69584],{"class":201,"line":1146},[199,69585,907],{"emptyLinePlaceholder":906},[199,69587,69588,69590],{"class":201,"line":1163},[199,69589,66004],{"class":878},[199,69591,1012],{"class":205},[199,69593,69594,69596,69598,69600,69602],{"class":201,"line":1176},[199,69595,57030],{"class":1018},[199,69597,1022],{"class":205},[199,69599,3396],{"class":1018},[199,69601,3412],{"class":1086},[199,69603,1028],{"class":205},[199,69605,69606,69608,69610,69612,69614],{"class":201,"line":1189},[199,69607,57044],{"class":1018},[199,69609,1022],{"class":205},[199,69611,3985],{"class":1018},[199,69613,1087],{"class":1086},[199,69615,1028],{"class":205},[199,69617,69618,69620,69622,69624,69626],{"class":201,"line":1202},[199,69619,59618],{"class":1018},[199,69621,1022],{"class":205},[199,69623,3985],{"class":1018},[199,69625,1087],{"class":1086},[199,69627,1028],{"class":205},[199,69629,69630,69632,69634,69636],{"class":201,"line":1207},[199,69631,57268],{"class":1018},[199,69633,1022],{"class":205},[199,69635,1070],{"class":1018},[199,69637,1028],{"class":205},[199,69639,69640,69642,69644,69646],{"class":201,"line":1212},[199,69641,57279],{"class":1018},[199,69643,1022],{"class":205},[199,69645,1282],{"class":1018},[199,69647,1028],{"class":205},[199,69649,69650],{"class":201,"line":1225},[199,69651,2097],{"class":205},[199,69653,69654],{"class":201,"line":1236},[199,69655,907],{"emptyLinePlaceholder":906},[199,69657,69658,69660,69662],{"class":201,"line":1249},[199,69659,66004],{"class":878},[199,69661,66077],{"class":874},[199,69663,1012],{"class":205},[199,69665,69666,69668,69670,69672,69674],{"class":201,"line":1262},[199,69667,57181],{"class":1018},[199,69669,1022],{"class":205},[199,69671,3879],{"class":1018},[199,69673,1087],{"class":1086},[199,69675,1028],{"class":205},[199,69677,69678,69680,69682,69684],{"class":201,"line":1275},[199,69679,64593],{"class":1018},[199,69681,1022],{"class":205},[199,69683,66100],{"class":1018},[199,69685,1028],{"class":205},[199,69687,69688,69690,69692,69694,69696],{"class":201,"line":1287},[199,69689,64259],{"class":1018},[199,69691,1022],{"class":205},[199,69693,3779],{"class":1018},[199,69695,1087],{"class":1086},[199,69697,1028],{"class":205},[199,69699,69700],{"class":201,"line":1292},[199,69701,2097],{"class":205},[199,69703,69704],{"class":201,"line":1297},[199,69705,907],{"emptyLinePlaceholder":906},[199,69707,69708,69710,69712],{"class":201,"line":1310},[199,69709,66004],{"class":878},[199,69711,63551],{"class":874},[199,69713,1012],{"class":205},[199,69715,69716,69718,69720,69722],{"class":201,"line":1315},[199,69717,56991],{"class":1018},[199,69719,1022],{"class":205},[199,69721,56996],{"class":1018},[199,69723,1028],{"class":205},[199,69725,69726,69728,69730,69732],{"class":201,"line":1330},[199,69727,57268],{"class":1018},[199,69729,1022],{"class":205},[199,69731,1070],{"class":1018},[199,69733,1028],{"class":205},[199,69735,69736,69738,69740,69742],{"class":201,"line":1335},[199,69737,57279],{"class":1018},[199,69739,1022],{"class":205},[199,69741,1184],{"class":1018},[199,69743,1028],{"class":205},[199,69745,69746],{"class":201,"line":1340},[199,69747,2097],{"class":205},[199,69749,69750],{"class":201,"line":1352},[199,69751,907],{"emptyLinePlaceholder":906},[199,69753,69754,69756,69758,69760],{"class":201,"line":1367},[199,69755,66004],{"class":878},[199,69757,63551],{"class":874},[199,69759,57334],{"class":874},[199,69761,1012],{"class":205},[199,69763,69764,69766,69768,69770,69772,69774],{"class":201,"line":1381},[199,69765,56965],{"class":1018},[199,69767,1022],{"class":205},[199,69769,1025],{"class":1018},[199,69771,11837],{"class":1018},[199,69773,1087],{"class":1086},[199,69775,1028],{"class":205},[199,69777,69778,69780,69782,69784,69786],{"class":201,"line":1396},[199,69779,57181],{"class":1018},[199,69781,1022],{"class":205},[199,69783,3629],{"class":1018},[199,69785,1087],{"class":1086},[199,69787,1028],{"class":205},[199,69789,69790],{"class":201,"line":1401},[199,69791,2097],{"class":205},[199,69793,69794],{"class":201,"line":1411},[199,69795,907],{"emptyLinePlaceholder":906},[199,69797,69798,69800,69802,69804,69806],{"class":201,"line":1421},[199,69799,66004],{"class":878},[199,69801,63551],{"class":874},[199,69803,57334],{"class":874},[199,69805,4338],{"class":874},[199,69807,1012],{"class":205},[199,69809,69810,69812,69814,69816],{"class":201,"line":1426},[199,69811,66229],{"class":1018},[199,69813,1022],{"class":205},[199,69815,56996],{"class":1018},[199,69817,1028],{"class":205},[199,69819,69820,69822,69824,69826,69828,69830,69832],{"class":201,"line":1436},[199,69821,64491],{"class":1018},[199,69823,1022],{"class":205},[199,69825,1925],{"class":1018},[199,69827,1087],{"class":1086},[199,69829,1120],{"class":1018},[199,69831,66250],{"class":1018},[199,69833,1028],{"class":205},[199,69835,69836,69838,69840,69842],{"class":201,"line":1441},[199,69837,59675],{"class":1018},[199,69839,1022],{"class":205},[199,69841,64628],{"class":1018},[199,69843,1028],{"class":205},[199,69845,69846],{"class":201,"line":1451},[199,69847,2097],{"class":205},[199,69849,69850],{"class":201,"line":1458},[199,69851,907],{"emptyLinePlaceholder":906},[199,69853,69854,69856,69858,69860,69862,69864],{"class":201,"line":1464},[199,69855,66004],{"class":878},[199,69857,63551],{"class":874},[199,69859,57334],{"class":874},[199,69861,4338],{"class":874},[199,69863,66283],{"class":878},[199,69865,1012],{"class":205},[199,69867,69868,69870,69872,69874],{"class":201,"line":1478},[199,69869,64050],{"class":1018},[199,69871,1022],{"class":205},[199,69873,66294],{"class":1018},[199,69875,1028],{"class":205},[199,69877,69878,69880,69882,69884],{"class":201,"line":1516},[199,69879,59675],{"class":1018},[199,69881,1022],{"class":205},[199,69883,66294],{"class":1018},[199,69885,1028],{"class":205},[199,69887,69888],{"class":201,"line":1522},[199,69889,2097],{"class":205},[199,69891,69892],{"class":201,"line":1528},[199,69893,907],{"emptyLinePlaceholder":906},[199,69895,69896,69898],{"class":201,"line":1557},[199,69897,66319],{"class":878},[199,69899,1012],{"class":205},[199,69901,69902,69904,69906,69908,69910,69912],{"class":201,"line":1563},[199,69903,56954],{"class":1018},[199,69905,1022],{"class":205},[199,69907,1025],{"class":1018},[199,69909,66332],{"class":1018},[199,69911,1087],{"class":1086},[199,69913,1028],{"class":205},[199,69915,69916],{"class":201,"line":1568},[199,69917,2097],{"class":205},[199,69919,69920],{"class":201,"line":1574},[199,69921,907],{"emptyLinePlaceholder":906},[199,69923,69924,69926,69928],{"class":201,"line":1580},[199,69925,66319],{"class":878},[199,69927,64433],{"class":878},[199,69929,1012],{"class":205},[199,69931,69932,69934,69936,69938],{"class":201,"line":1597},[199,69933,57268],{"class":1018},[199,69935,1022],{"class":205},[199,69937,56996],{"class":1018},[199,69939,1028],{"class":205},[199,69941,69942],{"class":201,"line":1602},[199,69943,2097],{"class":205},[199,69945,69946],{"class":201,"line":1608},[199,69947,907],{"emptyLinePlaceholder":906},[199,69949,69950,69952,69955],{"class":201,"line":1640},[199,69951,66319],{"class":878},[199,69953,69954],{"class":878}," .active",[199,69956,1012],{"class":205},[199,69958,69959,69961,69963,69965],{"class":201,"line":1653},[199,69960,57268],{"class":1018},[199,69962,1022],{"class":205},[199,69964,63128],{"class":1018},[199,69966,1028],{"class":205},[199,69968,69969],{"class":201,"line":1673},[199,69970,2097],{"class":205},[199,69972,69973,69975,69977],{"class":201,"line":1690},[199,69974,2112],{"class":205},[199,69976,1002],{"class":874},[199,69978,882],{"class":205},[199,69980,69981,69983,69985],{"class":201,"line":1706},[199,69982,1414],{"class":205},[199,69984,914],{"class":874},[199,69986,882],{"class":205},[199,69988,69989],{"class":201,"line":1712},[199,69990,907],{"emptyLinePlaceholder":906},[199,69992,69993,69995,69997],{"class":201,"line":1720},[199,69994,887],{"class":205},[199,69996,1431],{"class":874},[199,69998,882],{"class":205},[199,70000,70001,70003,70005,70007,70009,70011],{"class":201,"line":1725},[199,70002,1824],{"class":205},[199,70004,1220],{"class":874},[199,70006,55745],{"class":878},[199,70008,895],{"class":205},[199,70010,66434],{"class":898},[199,70012,882],{"class":205},[199,70014,70015,70017,70019,70021,70023,70025],{"class":201,"line":1731},[199,70016,921],{"class":205},[199,70018,1220],{"class":874},[199,70020,55745],{"class":878},[199,70022,895],{"class":205},[199,70024,66449],{"class":898},[199,70026,882],{"class":205},[199,70028,70029,70031,70033,70035,70037],{"class":201,"line":1745},[199,70030,57493],{"class":205},[199,70032,19],{"class":874},[199,70034,66460],{"class":205},[199,70036,19],{"class":874},[199,70038,882],{"class":205},[199,70040,70041,70043,70045],{"class":201,"line":1754},[199,70042,57493],{"class":205},[199,70044,176],{"class":874},[199,70046,882],{"class":205},[199,70048,70049,70051,70053,70055,70057,70059,70061,70063,70065,70067,70069,70071,70073,70076,70078,70080,70082,70084],{"class":201,"line":1763},[199,70050,57561],{"class":205},[199,70052,27],{"class":874},[199,70054,63311],{"class":205},[199,70056,2867],{"class":874},[199,70058,55745],{"class":878},[199,70060,895],{"class":205},[199,70062,61965],{"class":898},[199,70064,63316],{"class":878},[199,70066,895],{"class":205},[199,70068,66495],{"class":898},[199,70070,56210],{"class":878},[199,70072,895],{"class":205},[199,70074,70075],{"class":898},"\"0\"",[199,70077,66498],{"class":205},[199,70079,2867],{"class":874},[199,70081,57573],{"class":205},[199,70083,27],{"class":874},[199,70085,882],{"class":205},[199,70087,70088,70090,70092,70094,70096,70098,70100,70102,70104,70106,70108,70110,70112,70114,70116],{"class":201,"line":1768},[199,70089,57561],{"class":205},[199,70091,27],{"class":874},[199,70093,63311],{"class":205},[199,70095,2867],{"class":874},[199,70097,63316],{"class":878},[199,70099,895],{"class":205},[199,70101,66495],{"class":898},[199,70103,56210],{"class":878},[199,70105,895],{"class":205},[199,70107,6579],{"class":898},[199,70109,66525],{"class":205},[199,70111,2867],{"class":874},[199,70113,57573],{"class":205},[199,70115,27],{"class":874},[199,70117,882],{"class":205},[199,70119,70120,70122,70124,70126,70128,70130,70132,70134,70136,70138,70140,70142,70144,70146,70148],{"class":201,"line":19628},[199,70121,57561],{"class":205},[199,70123,27],{"class":874},[199,70125,63311],{"class":205},[199,70127,2867],{"class":874},[199,70129,63316],{"class":878},[199,70131,895],{"class":205},[199,70133,66495],{"class":898},[199,70135,56210],{"class":878},[199,70137,895],{"class":205},[199,70139,6602],{"class":898},[199,70141,66552],{"class":205},[199,70143,2867],{"class":874},[199,70145,57573],{"class":205},[199,70147,27],{"class":874},[199,70149,882],{"class":205},[199,70151,70152,70154,70156,70158,70160,70162,70164,70166,70168,70170,70172,70174,70176,70178,70180],{"class":201,"line":19641},[199,70153,57561],{"class":205},[199,70155,27],{"class":874},[199,70157,63311],{"class":205},[199,70159,2867],{"class":874},[199,70161,63316],{"class":878},[199,70163,895],{"class":205},[199,70165,66495],{"class":898},[199,70167,56210],{"class":878},[199,70169,895],{"class":205},[199,70171,6615],{"class":898},[199,70173,66579],{"class":205},[199,70175,2867],{"class":874},[199,70177,57573],{"class":205},[199,70179,27],{"class":874},[199,70181,882],{"class":205},[199,70183,70184,70186,70188,70190,70192,70194,70196,70198,70200,70202,70204,70206,70208,70210,70212],{"class":201,"line":19646},[199,70185,57561],{"class":205},[199,70187,27],{"class":874},[199,70189,63311],{"class":205},[199,70191,2867],{"class":874},[199,70193,63316],{"class":878},[199,70195,895],{"class":205},[199,70197,66495],{"class":898},[199,70199,56210],{"class":878},[199,70201,895],{"class":205},[199,70203,6628],{"class":898},[199,70205,66606],{"class":205},[199,70207,2867],{"class":874},[199,70209,57573],{"class":205},[199,70211,27],{"class":874},[199,70213,882],{"class":205},[199,70215,70216,70218,70220],{"class":201,"line":19660},[199,70217,57666],{"class":205},[199,70219,176],{"class":874},[199,70221,882],{"class":205},[199,70223,70224,70226,70228],{"class":201,"line":19665},[199,70225,1404],{"class":205},[199,70227,1220],{"class":874},[199,70229,882],{"class":205},[199,70231,70232,70234,70236,70238,70240,70242],{"class":201,"line":19671},[199,70233,921],{"class":205},[199,70235,1220],{"class":874},[199,70237,55745],{"class":878},[199,70239,895],{"class":205},[199,70241,66643],{"class":898},[199,70243,882],{"class":205},[199,70245,70246,70248,70250,70252,70254,70256,70258,70260,70262,70264,70266,70268,70270,70272,70274,70276],{"class":201,"line":19676},[199,70247,57493],{"class":205},[199,70249,1220],{"class":874},[199,70251,55745],{"class":878},[199,70253,895],{"class":205},[199,70255,66658],{"class":898},[199,70257,63311],{"class":205},[199,70259,55],{"class":874},[199,70261,57498],{"class":878},[199,70263,895],{"class":205},[199,70265,66669],{"class":898},[199,70267,57506],{"class":878},[199,70269,895],{"class":205},[199,70271,10549],{"class":898},[199,70273,66678],{"class":205},[199,70275,1220],{"class":874},[199,70277,882],{"class":205},[199,70279,70280,70282,70284,70286,70288,70290,70292,70294,70296,70298,70300,70302,70304,70306,70308,70310],{"class":201,"line":19690},[199,70281,57493],{"class":205},[199,70283,1220],{"class":874},[199,70285,55745],{"class":878},[199,70287,895],{"class":205},[199,70289,64882],{"class":898},[199,70291,63311],{"class":205},[199,70293,55],{"class":874},[199,70295,57498],{"class":878},[199,70297,895],{"class":205},[199,70299,66705],{"class":898},[199,70301,57506],{"class":878},[199,70303,895],{"class":205},[199,70305,10549],{"class":898},[199,70307,66678],{"class":205},[199,70309,1220],{"class":874},[199,70311,882],{"class":205},[199,70313,70314,70316,70318,70320,70322,70324,70326,70328,70330,70332,70334,70336,70338,70340,70342,70344],{"class":201,"line":19695},[199,70315,57493],{"class":205},[199,70317,1220],{"class":874},[199,70319,55745],{"class":878},[199,70321,895],{"class":205},[199,70323,64882],{"class":898},[199,70325,63311],{"class":205},[199,70327,55],{"class":874},[199,70329,57498],{"class":878},[199,70331,895],{"class":205},[199,70333,66740],{"class":898},[199,70335,57506],{"class":878},[199,70337,895],{"class":205},[199,70339,10549],{"class":898},[199,70341,66678],{"class":205},[199,70343,1220],{"class":874},[199,70345,882],{"class":205},[199,70347,70348,70350,70352,70354,70356,70358,70360,70362,70364,70366,70368,70370,70372,70374,70376,70378],{"class":201,"line":19700},[199,70349,57493],{"class":205},[199,70351,1220],{"class":874},[199,70353,55745],{"class":878},[199,70355,895],{"class":205},[199,70357,64882],{"class":898},[199,70359,63311],{"class":205},[199,70361,55],{"class":874},[199,70363,57498],{"class":878},[199,70365,895],{"class":205},[199,70367,66775],{"class":898},[199,70369,57506],{"class":878},[199,70371,895],{"class":205},[199,70373,10549],{"class":898},[199,70375,66678],{"class":205},[199,70377,1220],{"class":874},[199,70379,882],{"class":205},[199,70381,70382,70384,70386,70388,70390,70392,70394,70396,70398,70400,70402,70404,70406,70408,70410,70412],{"class":201,"line":19714},[199,70383,57493],{"class":205},[199,70385,1220],{"class":874},[199,70387,55745],{"class":878},[199,70389,895],{"class":205},[199,70391,64882],{"class":898},[199,70393,63311],{"class":205},[199,70395,55],{"class":874},[199,70397,57498],{"class":878},[199,70399,895],{"class":205},[199,70401,66810],{"class":898},[199,70403,57506],{"class":878},[199,70405,895],{"class":205},[199,70407,10549],{"class":898},[199,70409,66678],{"class":205},[199,70411,1220],{"class":874},[199,70413,882],{"class":205},[199,70415,70416,70418,70420],{"class":201,"line":19726},[199,70417,1404],{"class":205},[199,70419,1220],{"class":874},[199,70421,882],{"class":205},[199,70423,70424,70426,70428],{"class":201,"line":19731},[199,70425,2112],{"class":205},[199,70427,1220],{"class":874},[199,70429,882],{"class":205},[199,70431,70432,70434,70436],{"class":201,"line":19744},[199,70433,1824],{"class":205},[199,70435,1446],{"class":874},[199,70437,882],{"class":205},[199,70439,70440],{"class":201,"line":19749},[199,70441,70442],{"class":1454},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[199,70444,70445],{"class":201,"line":19754},[199,70446,70447],{"class":1454},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[199,70449,70450,70452,70454,70456,70458,70460,70462,70465],{"class":201,"line":19759},[199,70451,14084],{"class":1086},[199,70453,63551],{"class":1018},[199,70455,16425],{"class":1086},[199,70457,56655],{"class":205},[199,70459,56658],{"class":878},[199,70461,1537],{"class":205},[199,70463,70464],{"class":898},"'.tab-nav ul'",[199,70466,1594],{"class":205},[199,70468,70469],{"class":201,"line":19772},[199,70470,70471],{"class":1454},"    \u002F\u002F 2.添加事件\n",[199,70473,70474,70476,70478,70480,70482,70484,70486,70488,70490],{"class":201,"line":19777},[199,70475,69213],{"class":205},[199,70477,60072],{"class":878},[199,70479,1537],{"class":205},[199,70481,60077],{"class":898},[199,70483,1912],{"class":205},[199,70485,56708],{"class":1086},[199,70487,1484],{"class":205},[199,70489,3166],{"class":8113},[199,70491,1513],{"class":205},[199,70493,70494,70496,70498],{"class":201,"line":35475},[199,70495,60503],{"class":205},[199,70497,69269],{"class":878},[199,70499,69272],{"class":205},[199,70501,70502],{"class":201,"line":35481},[199,70503,70504],{"class":1454},"      \u002F\u002Fe.targer是我们点击的对象\n",[199,70506,70507,70509,70511,70513,70516],{"class":201,"line":35487},[199,70508,56739],{"class":1086},[199,70510,69293],{"class":205},[199,70512,56745],{"class":1086},[199,70514,70515],{"class":898}," 'A'",[199,70517,1513],{"class":205},[199,70519,70520,70522,70524,70526,70529,70531,70533,70535,70537],{"class":201,"line":35493},[199,70521,1583],{"class":205},[199,70523,56658],{"class":878},[199,70525,1537],{"class":205},[199,70527,70528],{"class":898},"'.active'",[199,70530,59262],{"class":205},[199,70532,59265],{"class":878},[199,70534,1537],{"class":205},[199,70536,66973],{"class":898},[199,70538,1594],{"class":205},[199,70540,70541,70544,70546,70548,70550],{"class":201,"line":35499},[199,70542,70543],{"class":205},"        e.target.classList.",[199,70545,8231],{"class":878},[199,70547,1537],{"class":205},[199,70549,66973],{"class":898},[199,70551,1594],{"class":205},[199,70553,70554],{"class":201,"line":35510},[199,70555,907],{"emptyLinePlaceholder":906},[199,70557,70558],{"class":201,"line":35516},[199,70559,70560],{"class":1454},"        \u002F\u002F 下面大盒子模块\n",[199,70562,70563],{"class":201,"line":35536},[199,70564,70565],{"class":1454},"        \u002F\u002F console.log(e.target.dataset.id)\n",[199,70567,70568,70570,70572,70574,70576],{"class":201,"line":35542},[199,70569,63529],{"class":1086},[199,70571,5936],{"class":1018},[199,70573,16425],{"class":1086},[199,70575,1698],{"class":1086},[199,70577,70578],{"class":205},"e.target.dataset.id\n",[199,70580,70581,70583,70585,70587,70589,70591,70593,70595,70597],{"class":201,"line":35553},[199,70582,1583],{"class":205},[199,70584,56658],{"class":878},[199,70586,1537],{"class":205},[199,70588,67021],{"class":898},[199,70590,59262],{"class":205},[199,70592,59265],{"class":878},[199,70594,1537],{"class":205},[199,70596,66973],{"class":898},[199,70598,1594],{"class":205},[199,70600,70601,70603,70605,70607,70609,70611,70613,70615,70617,70619,70621,70623,70625],{"class":201,"line":35559},[199,70602,1583],{"class":205},[199,70604,56658],{"class":878},[199,70606,1537],{"class":205},[199,70608,67047],{"class":898},[199,70610,1548],{"class":205},[199,70612,1698],{"class":1086},[199,70614,1495],{"class":1018},[199,70616,59291],{"class":898},[199,70618,59262],{"class":205},[199,70620,8231],{"class":878},[199,70622,1537],{"class":205},[199,70624,66973],{"class":898},[199,70626,1594],{"class":205},[199,70628,70629],{"class":201,"line":35565},[199,70630,907],{"emptyLinePlaceholder":906},[199,70632,70633],{"class":201,"line":35571},[199,70634,2092],{"class":205},[199,70636,70637],{"class":201,"line":35577},[199,70638,36302],{"class":205},[199,70640,70641,70643,70645],{"class":201,"line":35583},[199,70642,2112],{"class":205},[199,70644,1446],{"class":874},[199,70646,882],{"class":205},[199,70648,70649,70651,70653],{"class":201,"line":35589},[199,70650,1414],{"class":205},[199,70652,1431],{"class":874},[199,70654,882],{"class":205},[199,70656,70657],{"class":201,"line":35595},[199,70658,907],{"emptyLinePlaceholder":906},[199,70660,70661,70663,70665],{"class":201,"line":35615},[199,70662,1414],{"class":205},[199,70664,194],{"class":874},[199,70666,882],{"class":205},[19,70668,70670],{"id":70669},"_333-页面加载事件","3.3.3 页面加载事件",[24,70672,70673],{},[27,70674,70675],{},"load",[31,70677,70678],{},[55,70679],{"alt":57,"src":70680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[31,70682,70683],{},"window代表整个窗口，比document还要大",[31,70685,70686],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[31,70688,70689],{},"img.addEventListener('load', function () {",[31,70691,70692],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[31,70694,2159],{},[24,70696,70697],{"start":36},[27,70698,70699],{},"DOMContentLoaded",[31,70701,70702],{},[55,70703],{"alt":57,"src":70704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[31,70706,70707],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[19,70709,70711],{"id":70710},"_334-元素滚动事件","3.3.4 元素滚动事件",[31,70713,70714],{},[55,70715],{"alt":57,"src":70716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[31,70718,70719],{},[55,70720],{"alt":57,"src":70721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[31,70723,70724],{},[55,70725],{"alt":57,"src":70726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[31,70728,70729],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[31,70731,70732],{},"获得的是数字型数据，不带单位",[31,70734,70735],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[31,70737,70738],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[31,70740,70741],{},"它是通过document.documentElement来获取",[31,70743,70744],{},[55,70745],{"alt":57,"src":70746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[31,70748,70749],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[19,70751,70753],{"id":70752},"_335-页面缩放事件","3.3.5 页面缩放事件",[31,70755,70756],{},[55,70757],{"alt":57,"src":70758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[31,70760,70761],{},[55,70762],{"alt":57,"src":70763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[19,70765,70767],{"id":70766},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[31,70769,70770],{},[55,70771],{"alt":57,"src":70772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[31,70774,70775],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[31,70777,70778],{},[55,70779],{"alt":57,"src":70780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[31,70782,70783],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[31,70785,70786],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[31,70788,70789],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[31,70791,70792],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[31,70794,70795],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[31,70797,70798],{},[55,70799],{"alt":57,"src":70800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[31,70802,70803],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[31,70805,70806],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[31,70808,70809],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[31,70811,70812],{},"e.pageX-box.getBoundingClientRect()",[19,70814,70816],{"id":70815},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[31,70818,70819],{},[55,70820],{"alt":57,"src":70821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[31,70823,70824],{},"这个是相对于视口来说的，它是个方法，不是属性值",[19,70826,70828],{"id":70827},"_338-总结","3.3.8 总结",[31,70830,70831],{},[55,70832],{"alt":57,"src":70833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[31,70835,70836],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[31,70838,70839],{},"修改盒子的宽高只能通过width和height来实现",[19,70841,70843],{"id":70842},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[190,70845,70847],{"className":192,"code":70846,"language":194,"meta":57,"style":57},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[196,70848,70849,70854,70859,70864,70869],{"__ignoreMap":57},[199,70850,70851],{"class":201,"line":202},[199,70852,70853],{"class":205},"\u002F* 页面滑动 *\u002F\n",[199,70855,70856],{"class":201,"line":36},[199,70857,70858],{"class":205},"html {\n",[199,70860,70861],{"class":201,"line":73},[199,70862,70863],{"class":205},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[199,70865,70866],{"class":201,"line":333},[199,70867,70868],{"class":205},"  scroll-behavior: smooth;\n",[199,70870,70871],{"class":201,"line":227},[199,70872,671],{"class":205},[31,70874,70875],{},"默认是auto",[19,70877,70879],{"id":70878},"_3310-日期对象","3.3.10 日期对象",[627,70881,70883],{"id":70882},"_33101-实例化","3.3.10.1 实例化",[31,70885,70886],{},[55,70887],{"alt":57,"src":70888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[627,70890,70892],{"id":70891},"_33102-时期对象方法","3.3.10.2 时期对象方法",[31,70894,70895],{},[55,70896],{"alt":57,"src":70897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[31,70899,70900],{},"月份+1",[31,70902,70903],{},"老外认为第一天为0，星期天",[31,70905,70906],{},"方法使用的时候必须要跟括号",[31,70908,70909],{},"快速获得日期",[31,70911,70912],{},"\u002F\u002F 得到年月日",[31,70914,70915],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[31,70917,70918],{},"\u002F\u002F 得到当地日期",[31,70920,70921],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[31,70923,70924],{},"\u002F\u002F 得到当地时间",[31,70926,70927],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[31,70929,70930],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[31,70932,70933],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[1446,70935,70936],{},"\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",[31,70938,70939],{},"学会去封装函数！",[627,70941,70943],{"id":70942},"_33103-时间戳","3.3.10.3 时间戳",[31,70945,70946],{},[55,70947],{"alt":57,"src":70948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[31,70950,70951],{},[55,70952],{"alt":57,"src":70953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[31,70955,70956],{},"三种方法记住一个就可以",[19,70958,70960],{"id":70959},"_3311-节点操作","3.3.11 节点操作",[627,70962,70964],{"id":70963},"_33111-dom节点","3.3.11.1 DOM节点",[31,70966,70967],{},[55,70968],{"alt":57,"src":70969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[31,70971,70972],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[627,70974,70976],{"id":70975},"_33112-查找节点","3.3.11.2 查找节点",[31,70978,70979],{},"前边的document.querySelector()是获取的元素",[31,70981,70982],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[31,70984,70985],{},[55,70986],{"alt":57,"src":70987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[24,70989,70990],{},[27,70991,70992],{},"父节点",[31,70994,70995],{},[55,70996],{"alt":57,"src":70997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[24,70999,71000],{"start":36},[27,71001,71002],{},"子节点",[31,71004,71005],{},[55,71006],{"alt":57,"src":71007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[31,71009,71010],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[31,71012,71013],{},"children获得的是伪数组，是亲儿子",[24,71015,71016],{"start":73},[27,71017,71018],{},"兄弟节点",[31,71020,71021],{},[55,71022],{"alt":57,"src":71023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[627,71025,71027],{"id":71026},"_33113-增加节点","3.3.11.3 增加节点",[31,71029,71030],{},[55,71031],{"alt":57,"src":71032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[31,71034,71035],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[31,71037,71038],{},[55,71039],{"alt":57,"src":71040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[31,71042,71043],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[31,71045,71046],{},"下面是写法的部分展示，就按照下边的格式来写",[31,71048,71049],{},"例：",[1446,71051,71052],{},"\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",[31,71054,71055],{},[55,71056],{"alt":57,"src":71057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[31,71059,71060],{},"false只克隆标签，里边的内容不会克隆过来",[190,71062,71064],{"className":192,"code":71063,"language":194,"meta":57,"style":57},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[196,71065,71066],{"__ignoreMap":57},[199,71067,71068],{"class":201,"line":202},[199,71069,71063],{"class":205},[627,71071,71073],{"id":71072},"_33114-删除节点","3.3.11.4 删除节点",[31,71075,71076],{},[55,71077],{"alt":57,"src":71078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[31,71080,71081],{},"父亲删儿子",[31,71083,71084],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[19,71086,71088],{"id":71087},"_3312-m端事件","3.3.12 M端事件",[31,71090,71091],{},"M端就是移动端",[31,71093,71094],{},[55,71095],{"alt":57,"src":71096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[19,71098,71100],{"id":71099},"_3313-插件","3.3.13 插件",[31,71102,71103],{},"要熟悉官网！！！",[31,71105,71106],{},[2867,71107,71108],{"href":71108,"rel":71109},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[2871],[31,71111,71112],{},[2867,71113,71114],{"href":71114,"rel":71115},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[2871],[19,71117,71119],{"id":71118},"_3314-学生信息表","3.3.14 学生信息表",[24,71121,71122,71125,71128,71131,71134,71137,71140,71143],{},[27,71123,71124],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[27,71126,71127],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[27,71129,71130],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[27,71132,71133],{},"用好表单元素自带的属性，value,name等",[27,71135,71136],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[27,71138,71139],{},"不要忘记事件对象",[27,71141,71142],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[27,71144,71145],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[31,71147,71148],{},"结构：",[190,71150,71152],{"className":192,"code":71151,"language":194,"meta":57,"style":57},"\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",[196,71153,71154,71164,71178,71182,71190,71204,71224,71245,71258,71282,71290,71294,71302,71315,71336,71364,71392,71397,71419,71439,71458,71466,71494,71516,71536,71556,71576,71596,71616,71624,71644,71652,71656,71669,71677,71685,71693,71706,71719,71732,71745,71758,71771,71784,71792,71800,71808,71813,71818,71823,71828,71833,71838,71843,71848,71853,71858,71863,71868,71873,71881,71889,71897,71901,71921,71940,71960,71980,72000,72020,72024,72029,72049,72054,72064,72069,72074,72094,72116,72121,72131,72135,72139,72144,72149,72178,72192,72207,72211,72215,72219,72224,72235,72248,72253,72258,72263,72268,72273,72277,72282,72287,72296,72301,72306,72318,72323,72330,72334,72339,72349,72354,72364,72369,72397,72418,72428,72448,72466,72483,72500,72517,72534,72538,72548,72553,72558,72563,72574,72578,72582,72586,72591,72596,72617,72629,72634,72639,72644,72658,72663,72670,72674,72678,72686,72690,72698,72702],{"__ignoreMap":57},[199,71155,71156,71158,71160,71162],{"class":201,"line":202},[199,71157,871],{"class":205},[199,71159,875],{"class":874},[199,71161,879],{"class":878},[199,71163,882],{"class":205},[199,71165,71166,71168,71170,71172,71174,71176],{"class":201,"line":36},[199,71167,887],{"class":205},[199,71169,194],{"class":874},[199,71171,892],{"class":878},[199,71173,895],{"class":205},[199,71175,899],{"class":898},[199,71177,882],{"class":205},[199,71179,71180],{"class":201,"line":73},[199,71181,907],{"emptyLinePlaceholder":906},[199,71183,71184,71186,71188],{"class":201,"line":333},[199,71185,887],{"class":205},[199,71187,914],{"class":874},[199,71189,882],{"class":205},[199,71191,71192,71194,71196,71198,71200,71202],{"class":201,"line":227},[199,71193,1824],{"class":205},[199,71195,924],{"class":874},[199,71197,927],{"class":878},[199,71199,895],{"class":205},[199,71201,932],{"class":898},[199,71203,61386],{"class":205},[199,71205,71206,71208,71210,71212,71214,71216,71218,71220,71222],{"class":201,"line":238},[199,71207,1824],{"class":205},[199,71209,924],{"class":874},[199,71211,967],{"class":878},[199,71213,895],{"class":205},[199,71215,972],{"class":898},[199,71217,951],{"class":878},[199,71219,895],{"class":205},[199,71221,979],{"class":898},[199,71223,61386],{"class":205},[199,71225,71226,71228,71230,71232,71234,71236,71238,71240,71243],{"class":201,"line":252},[199,71227,1824],{"class":205},[199,71229,924],{"class":874},[199,71231,943],{"class":878},[199,71233,895],{"class":205},[199,71235,948],{"class":898},[199,71237,951],{"class":878},[199,71239,895],{"class":205},[199,71241,71242],{"class":898},"\"ie=edge\"",[199,71244,61386],{"class":205},[199,71246,71247,71249,71251,71254,71256],{"class":201,"line":388},[199,71248,1824],{"class":205},[199,71250,988],{"class":874},[199,71252,71253],{"class":205},">学生信息管理\u003C\u002F",[199,71255,988],{"class":874},[199,71257,882],{"class":205},[199,71259,71260,71262,71265,71268,71270,71273,71275,71277,71280],{"class":201,"line":415},[199,71261,1824],{"class":205},[199,71263,71264],{"class":874},"link",[199,71266,71267],{"class":878}," rel",[199,71269,895],{"class":205},[199,71271,71272],{"class":898},"\"stylesheet\"",[199,71274,63316],{"class":878},[199,71276,895],{"class":205},[199,71278,71279],{"class":898},"\"css\u002Findex.css\"",[199,71281,61386],{"class":205},[199,71283,71284,71286,71288],{"class":201,"line":426},[199,71285,1414],{"class":205},[199,71287,914],{"class":874},[199,71289,882],{"class":205},[199,71291,71292],{"class":201,"line":1015},[199,71293,907],{"emptyLinePlaceholder":906},[199,71295,71296,71298,71300],{"class":201,"line":1031},[199,71297,887],{"class":205},[199,71299,1431],{"class":874},[199,71301,882],{"class":205},[199,71303,71304,71306,71308,71311,71313],{"class":201,"line":1043},[199,71305,1824],{"class":205},[199,71307,10],{"class":874},[199,71309,71310],{"class":205},">新增学员\u003C\u002F",[199,71312,10],{"class":874},[199,71314,882],{"class":205},[199,71316,71317,71319,71321,71323,71325,71327,71330,71332,71334],{"class":201,"line":1049},[199,71318,1824],{"class":205},[199,71320,68884],{"class":874},[199,71322,55745],{"class":878},[199,71324,895],{"class":205},[199,71326,64923],{"class":898},[199,71328,71329],{"class":878}," autocomplete",[199,71331,895],{"class":205},[199,71333,34618],{"class":898},[199,71335,882],{"class":205},[199,71337,71338,71341,71343,71345,71347,71349,71351,71353,71356,71358,71360,71362],{"class":201,"line":1054},[199,71339,71340],{"class":205},"    姓名：\u003C",[199,71342,56080],{"class":874},[199,71344,56083],{"class":878},[199,71346,895],{"class":205},[199,71348,64958],{"class":898},[199,71350,55745],{"class":878},[199,71352,895],{"class":205},[199,71354,71355],{"class":898},"\"uname\"",[199,71357,967],{"class":878},[199,71359,895],{"class":205},[199,71361,71355],{"class":898},[199,71363,61386],{"class":205},[199,71365,71366,71369,71371,71373,71375,71377,71379,71381,71384,71386,71388,71390],{"class":201,"line":1062},[199,71367,71368],{"class":205},"    年龄：\u003C",[199,71370,56080],{"class":874},[199,71372,56083],{"class":878},[199,71374,895],{"class":205},[199,71376,64958],{"class":898},[199,71378,55745],{"class":878},[199,71380,895],{"class":205},[199,71382,71383],{"class":898},"\"age\"",[199,71385,967],{"class":878},[199,71387,895],{"class":205},[199,71389,71383],{"class":898},[199,71391,61386],{"class":205},[199,71393,71394],{"class":201,"line":1075},[199,71395,71396],{"class":205},"    性别:\n",[199,71398,71399,71401,71404,71406,71408,71411,71413,71415,71417],{"class":201,"line":1092},[199,71400,921],{"class":205},[199,71402,71403],{"class":874},"select",[199,71405,967],{"class":878},[199,71407,895],{"class":205},[199,71409,71410],{"class":898},"\"gender\"",[199,71412,55745],{"class":878},[199,71414,895],{"class":205},[199,71416,71410],{"class":898},[199,71418,882],{"class":205},[199,71420,71421,71423,71426,71428,71430,71432,71435,71437],{"class":201,"line":1107},[199,71422,57493],{"class":205},[199,71424,71425],{"class":874},"option",[199,71427,68910],{"class":878},[199,71429,895],{"class":205},[199,71431,12824],{"class":898},[199,71433,71434],{"class":205},">男\u003C\u002F",[199,71436,71425],{"class":874},[199,71438,882],{"class":205},[199,71440,71441,71443,71445,71447,71449,71451,71454,71456],{"class":201,"line":1128},[199,71442,57493],{"class":205},[199,71444,71425],{"class":874},[199,71446,68910],{"class":878},[199,71448,895],{"class":205},[199,71450,12893],{"class":898},[199,71452,71453],{"class":205},">女\u003C\u002F",[199,71455,71425],{"class":874},[199,71457,882],{"class":205},[199,71459,71460,71462,71464],{"class":201,"line":1146},[199,71461,1404],{"class":205},[199,71463,71403],{"class":874},[199,71465,882],{"class":205},[199,71467,71468,71471,71473,71475,71477,71479,71481,71483,71486,71488,71490,71492],{"class":201,"line":1163},[199,71469,71470],{"class":205},"    薪资：\u003C",[199,71472,56080],{"class":874},[199,71474,56083],{"class":878},[199,71476,895],{"class":205},[199,71478,64958],{"class":898},[199,71480,55745],{"class":878},[199,71482,895],{"class":205},[199,71484,71485],{"class":898},"\"salary\"",[199,71487,967],{"class":878},[199,71489,895],{"class":205},[199,71491,71485],{"class":898},[199,71493,61386],{"class":205},[199,71495,71496,71499,71501,71503,71505,71508,71510,71512,71514],{"class":201,"line":1176},[199,71497,71498],{"class":205},"    就业城市：\u003C",[199,71500,71403],{"class":874},[199,71502,967],{"class":878},[199,71504,895],{"class":205},[199,71506,71507],{"class":898},"\"city\"",[199,71509,55745],{"class":878},[199,71511,895],{"class":205},[199,71513,71507],{"class":898},[199,71515,882],{"class":205},[199,71517,71518,71520,71522,71524,71526,71529,71532,71534],{"class":201,"line":1189},[199,71519,57493],{"class":205},[199,71521,71425],{"class":874},[199,71523,68910],{"class":878},[199,71525,895],{"class":205},[199,71527,71528],{"class":898},"\"北京\"",[199,71530,71531],{"class":205},">北京\u003C\u002F",[199,71533,71425],{"class":874},[199,71535,882],{"class":205},[199,71537,71538,71540,71542,71544,71546,71549,71552,71554],{"class":201,"line":1202},[199,71539,57493],{"class":205},[199,71541,71425],{"class":874},[199,71543,68910],{"class":878},[199,71545,895],{"class":205},[199,71547,71548],{"class":898},"\"上海\"",[199,71550,71551],{"class":205},">上海\u003C\u002F",[199,71553,71425],{"class":874},[199,71555,882],{"class":205},[199,71557,71558,71560,71562,71564,71566,71569,71572,71574],{"class":201,"line":1207},[199,71559,57493],{"class":205},[199,71561,71425],{"class":874},[199,71563,68910],{"class":878},[199,71565,895],{"class":205},[199,71567,71568],{"class":898},"\"广州\"",[199,71570,71571],{"class":205},">广州\u003C\u002F",[199,71573,71425],{"class":874},[199,71575,882],{"class":205},[199,71577,71578,71580,71582,71584,71586,71589,71592,71594],{"class":201,"line":1212},[199,71579,57493],{"class":205},[199,71581,71425],{"class":874},[199,71583,68910],{"class":878},[199,71585,895],{"class":205},[199,71587,71588],{"class":898},"\"深圳\"",[199,71590,71591],{"class":205},">深圳\u003C\u002F",[199,71593,71425],{"class":874},[199,71595,882],{"class":205},[199,71597,71598,71600,71602,71604,71606,71609,71612,71614],{"class":201,"line":1225},[199,71599,57493],{"class":205},[199,71601,71425],{"class":874},[199,71603,68910],{"class":878},[199,71605,895],{"class":205},[199,71607,71608],{"class":898},"\"曹县\"",[199,71610,71611],{"class":205},">曹县\u003C\u002F",[199,71613,71425],{"class":874},[199,71615,882],{"class":205},[199,71617,71618,71620,71622],{"class":201,"line":1236},[199,71619,1404],{"class":205},[199,71621,71403],{"class":874},[199,71623,882],{"class":205},[199,71625,71626,71628,71630,71632,71634,71637,71640,71642],{"class":201,"line":1249},[199,71627,921],{"class":205},[199,71629,56146],{"class":874},[199,71631,55745],{"class":878},[199,71633,895],{"class":205},[199,71635,71636],{"class":898},"\"add\"",[199,71638,71639],{"class":205},">录入\u003C\u002F",[199,71641,56146],{"class":874},[199,71643,882],{"class":205},[199,71645,71646,71648,71650],{"class":201,"line":1262},[199,71647,2112],{"class":205},[199,71649,68884],{"class":874},[199,71651,882],{"class":205},[199,71653,71654],{"class":201,"line":1275},[199,71655,907],{"emptyLinePlaceholder":906},[199,71657,71658,71660,71662,71665,71667],{"class":201,"line":1287},[199,71659,1824],{"class":205},[199,71661,10],{"class":874},[199,71663,71664],{"class":205},">就业榜\u003C\u002F",[199,71666,10],{"class":874},[199,71668,882],{"class":205},[199,71670,71671,71673,71675],{"class":201,"line":1292},[199,71672,1824],{"class":205},[199,71674,3227],{"class":874},[199,71676,882],{"class":205},[199,71678,71679,71681,71683],{"class":201,"line":1297},[199,71680,921],{"class":205},[199,71682,3230],{"class":874},[199,71684,882],{"class":205},[199,71686,71687,71689,71691],{"class":201,"line":1310},[199,71688,57493],{"class":205},[199,71690,3233],{"class":874},[199,71692,882],{"class":205},[199,71694,71695,71697,71699,71702,71704],{"class":201,"line":1315},[199,71696,57561],{"class":205},[199,71698,3236],{"class":874},[199,71700,71701],{"class":205},">序号\u003C\u002F",[199,71703,3236],{"class":874},[199,71705,882],{"class":205},[199,71707,71708,71710,71712,71715,71717],{"class":201,"line":1330},[199,71709,57561],{"class":205},[199,71711,3236],{"class":874},[199,71713,71714],{"class":205},">姓名\u003C\u002F",[199,71716,3236],{"class":874},[199,71718,882],{"class":205},[199,71720,71721,71723,71725,71728,71730],{"class":201,"line":1335},[199,71722,57561],{"class":205},[199,71724,3236],{"class":874},[199,71726,71727],{"class":205},">年龄\u003C\u002F",[199,71729,3236],{"class":874},[199,71731,882],{"class":205},[199,71733,71734,71736,71738,71741,71743],{"class":201,"line":1340},[199,71735,57561],{"class":205},[199,71737,3236],{"class":874},[199,71739,71740],{"class":205},">性别\u003C\u002F",[199,71742,3236],{"class":874},[199,71744,882],{"class":205},[199,71746,71747,71749,71751,71754,71756],{"class":201,"line":1352},[199,71748,57561],{"class":205},[199,71750,3236],{"class":874},[199,71752,71753],{"class":205},">薪资\u003C\u002F",[199,71755,3236],{"class":874},[199,71757,882],{"class":205},[199,71759,71760,71762,71764,71767,71769],{"class":201,"line":1367},[199,71761,57561],{"class":205},[199,71763,3236],{"class":874},[199,71765,71766],{"class":205},">就业城市\u003C\u002F",[199,71768,3236],{"class":874},[199,71770,882],{"class":205},[199,71772,71773,71775,71777,71780,71782],{"class":201,"line":1381},[199,71774,57561],{"class":205},[199,71776,3236],{"class":874},[199,71778,71779],{"class":205},">操作\u003C\u002F",[199,71781,3236],{"class":874},[199,71783,882],{"class":205},[199,71785,71786,71788,71790],{"class":201,"line":1396},[199,71787,57666],{"class":205},[199,71789,3233],{"class":874},[199,71791,882],{"class":205},[199,71793,71794,71796,71798],{"class":201,"line":1401},[199,71795,1404],{"class":205},[199,71797,3230],{"class":874},[199,71799,882],{"class":205},[199,71801,71802,71804,71806],{"class":201,"line":1411},[199,71803,921],{"class":205},[199,71805,3273],{"class":874},[199,71807,882],{"class":205},[199,71809,71810],{"class":201,"line":1421},[199,71811,71812],{"class":1454},"      \u003C!-- \n",[199,71814,71815],{"class":201,"line":1426},[199,71816,71817],{"class":1454},"        \u003Ctr>\n",[199,71819,71820],{"class":201,"line":1436},[199,71821,71822],{"class":1454},"          \u003Ctd>1001\u003C\u002Ftd>\n",[199,71824,71825],{"class":201,"line":1441},[199,71826,71827],{"class":1454},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[199,71829,71830],{"class":201,"line":1451},[199,71831,71832],{"class":1454},"          \u003Ctd>19\u003C\u002Ftd>\n",[199,71834,71835],{"class":201,"line":1458},[199,71836,71837],{"class":1454},"          \u003Ctd>男\u003C\u002Ftd>\n",[199,71839,71840],{"class":201,"line":1464},[199,71841,71842],{"class":1454},"          \u003Ctd>15000\u003C\u002Ftd>\n",[199,71844,71845],{"class":201,"line":1478},[199,71846,71847],{"class":1454},"          \u003Ctd>上海\u003C\u002Ftd>\n",[199,71849,71850],{"class":201,"line":1516},[199,71851,71852],{"class":1454},"          \u003Ctd>\n",[199,71854,71855],{"class":201,"line":1522},[199,71856,71857],{"class":1454},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[199,71859,71860],{"class":201,"line":1528},[199,71861,71862],{"class":1454},"          \u003C\u002Ftd>\n",[199,71864,71865],{"class":201,"line":1557},[199,71866,71867],{"class":1454},"        \u003C\u002Ftr> \n",[199,71869,71870],{"class":201,"line":1563},[199,71871,71872],{"class":1454},"        -->\n",[199,71874,71875,71877,71879],{"class":201,"line":1568},[199,71876,1404],{"class":205},[199,71878,3273],{"class":874},[199,71880,882],{"class":205},[199,71882,71883,71885,71887],{"class":201,"line":1574},[199,71884,2112],{"class":205},[199,71886,3227],{"class":874},[199,71888,882],{"class":205},[199,71890,71891,71893,71895],{"class":201,"line":1580},[199,71892,1824],{"class":205},[199,71894,1446],{"class":874},[199,71896,882],{"class":205},[199,71898,71899],{"class":201,"line":1597},[199,71900,62217],{"class":1454},[199,71902,71903,71905,71908,71910,71912,71914,71916,71919],{"class":201,"line":1602},[199,71904,14084],{"class":1086},[199,71906,71907],{"class":1018}," uname",[199,71909,16425],{"class":1086},[199,71911,56655],{"class":205},[199,71913,56658],{"class":878},[199,71915,1537],{"class":205},[199,71917,71918],{"class":898},"'.uname'",[199,71920,1594],{"class":205},[199,71922,71923,71925,71927,71929,71931,71933,71935,71938],{"class":201,"line":1608},[199,71924,14084],{"class":1086},[199,71926,18547],{"class":1018},[199,71928,16425],{"class":1086},[199,71930,56655],{"class":205},[199,71932,56658],{"class":878},[199,71934,1537],{"class":205},[199,71936,71937],{"class":898},"'.age'",[199,71939,1594],{"class":205},[199,71941,71942,71944,71947,71949,71951,71953,71955,71958],{"class":201,"line":1640},[199,71943,14084],{"class":1086},[199,71945,71946],{"class":1018}," gender",[199,71948,16425],{"class":1086},[199,71950,56655],{"class":205},[199,71952,56658],{"class":878},[199,71954,1537],{"class":205},[199,71956,71957],{"class":898},"'.gender'",[199,71959,1594],{"class":205},[199,71961,71962,71964,71967,71969,71971,71973,71975,71978],{"class":201,"line":1653},[199,71963,14084],{"class":1086},[199,71965,71966],{"class":1018}," salary",[199,71968,16425],{"class":1086},[199,71970,56655],{"class":205},[199,71972,56658],{"class":878},[199,71974,1537],{"class":205},[199,71976,71977],{"class":898},"'.salary'",[199,71979,1594],{"class":205},[199,71981,71982,71984,71987,71989,71991,71993,71995,71998],{"class":201,"line":1673},[199,71983,14084],{"class":1086},[199,71985,71986],{"class":1018}," city",[199,71988,16425],{"class":1086},[199,71990,56655],{"class":205},[199,71992,56658],{"class":878},[199,71994,1537],{"class":205},[199,71996,71997],{"class":898},"'.city'",[199,71999,1594],{"class":205},[199,72001,72002,72004,72007,72009,72011,72013,72015,72018],{"class":201,"line":1690},[199,72003,14084],{"class":1086},[199,72005,72006],{"class":1018}," tbody",[199,72008,16425],{"class":1086},[199,72010,56655],{"class":205},[199,72012,56658],{"class":878},[199,72014,1537],{"class":205},[199,72016,72017],{"class":898},"'tbody'",[199,72019,1594],{"class":205},[199,72021,72022],{"class":201,"line":1706},[199,72023,907],{"emptyLinePlaceholder":906},[199,72025,72026],{"class":201,"line":1712},[199,72027,72028],{"class":1454},"    \u002F\u002F 获取所有带有name属性的元素\n",[199,72030,72031,72033,72036,72038,72040,72042,72044,72047],{"class":201,"line":1720},[199,72032,14084],{"class":1086},[199,72034,72035],{"class":1018}," items",[199,72037,16425],{"class":1086},[199,72039,56655],{"class":205},[199,72041,57940],{"class":878},[199,72043,1537],{"class":205},[199,72045,72046],{"class":898},"'[name]'",[199,72048,1594],{"class":205},[199,72050,72051],{"class":201,"line":1725},[199,72052,72053],{"class":1454},"    \u002F\u002F 声明一个空的数组\n",[199,72055,72056,72058,72060,72062],{"class":201,"line":1731},[199,72057,14084],{"class":1086},[199,72059,59954],{"class":1018},[199,72061,16425],{"class":1086},[199,72063,1475],{"class":205},[199,72065,72066],{"class":201,"line":1745},[199,72067,72068],{"class":1454},"    \u002F\u002F 1.录入模块\n",[199,72070,72071],{"class":201,"line":1754},[199,72072,72073],{"class":1454},"    \u002F\u002F 1.1这是一个表单提交事件\n",[199,72075,72076,72078,72081,72083,72085,72087,72089,72092],{"class":201,"line":1763},[199,72077,14084],{"class":1086},[199,72079,72080],{"class":1018}," info",[199,72082,16425],{"class":1086},[199,72084,56655],{"class":205},[199,72086,56658],{"class":878},[199,72088,1537],{"class":205},[199,72090,72091],{"class":898},"'.info'",[199,72093,1594],{"class":205},[199,72095,72096,72099,72101,72103,72106,72108,72110,72112,72114],{"class":201,"line":1768},[199,72097,72098],{"class":205},"    info.",[199,72100,60072],{"class":878},[199,72102,1537],{"class":205},[199,72104,72105],{"class":898},"'submit'",[199,72107,1912],{"class":205},[199,72109,56708],{"class":1086},[199,72111,1484],{"class":205},[199,72113,3166],{"class":8113},[199,72115,1513],{"class":205},[199,72117,72118],{"class":201,"line":19628},[199,72119,72120],{"class":1454},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[199,72122,72123,72126,72129],{"class":201,"line":19641},[199,72124,72125],{"class":205},"      e.",[199,72127,72128],{"class":878},"preventDefault",[199,72130,4892],{"class":205},[199,72132,72133],{"class":201,"line":19646},[199,72134,62271],{"class":1454},[199,72136,72137],{"class":201,"line":19660},[199,72138,907],{"emptyLinePlaceholder":906},[199,72140,72141],{"class":201,"line":19665},[199,72142,72143],{"class":1454},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[199,72145,72146],{"class":201,"line":19671},[199,72147,72148],{"class":1454},"      \u002F\u002F 先遍历循环\n",[199,72150,72151,72153,72155,72157,72159,72161,72163,72165,72167,72170,72172,72174,72176],{"class":201,"line":19676},[199,72152,1971],{"class":1086},[199,72154,1484],{"class":205},[199,72156,1487],{"class":1086},[199,72158,1490],{"class":205},[199,72160,895],{"class":1086},[199,72162,1621],{"class":1018},[199,72164,1498],{"class":205},[199,72166,887],{"class":1086},[199,72168,72169],{"class":205}," items.",[199,72171,1631],{"class":1018},[199,72173,1507],{"class":205},[199,72175,1510],{"class":1086},[199,72177,1513],{"class":205},[199,72179,72180,72182,72185,72187,72190],{"class":201,"line":19690},[199,72181,2017],{"class":1086},[199,72183,72184],{"class":205}," (items[i].value ",[199,72186,56745],{"class":1086},[199,72188,72189],{"class":898}," ''",[199,72191,1513],{"class":205},[199,72193,72194,72197,72200,72202,72205],{"class":201,"line":19695},[199,72195,72196],{"class":1086},"          return",[199,72198,72199],{"class":878}," alert",[199,72201,1537],{"class":205},[199,72203,72204],{"class":898},"'输入内容不能为空'",[199,72206,1594],{"class":205},[199,72208,72209],{"class":201,"line":19700},[199,72210,1046],{"class":205},[199,72212,72213],{"class":201,"line":19714},[199,72214,2092],{"class":205},[199,72216,72217],{"class":201,"line":19726},[199,72218,907],{"emptyLinePlaceholder":906},[199,72220,72221],{"class":201,"line":19731},[199,72222,72223],{"class":1454},"      \u002F\u002F 创建新的对象\n",[199,72225,72226,72228,72231,72233],{"class":201,"line":19744},[199,72227,60487],{"class":1086},[199,72229,72230],{"class":1018}," obj",[199,72232,16425],{"class":1086},[199,72234,1012],{"class":205},[199,72236,72237,72240,72242,72244,72246],{"class":201,"line":19749},[199,72238,72239],{"class":205},"        stuID: arr.",[199,72241,1631],{"class":1018},[199,72243,1698],{"class":1086},[199,72245,1495],{"class":1018},[199,72247,34308],{"class":205},[199,72249,72250],{"class":201,"line":19754},[199,72251,72252],{"class":205},"        uname: uname.value,\n",[199,72254,72255],{"class":201,"line":19759},[199,72256,72257],{"class":205},"        age: age.value,\n",[199,72259,72260],{"class":201,"line":19772},[199,72261,72262],{"class":205},"        gender: gender.value,\n",[199,72264,72265],{"class":201,"line":19777},[199,72266,72267],{"class":205},"        salary: salary.value,\n",[199,72269,72270],{"class":201,"line":35475},[199,72271,72272],{"class":205},"        city: city.value\n",[199,72274,72275],{"class":201,"line":35481},[199,72276,2092],{"class":205},[199,72278,72279],{"class":201,"line":35487},[199,72280,72281],{"class":1454},"      \u002F\u002F console.log(obj);\n",[199,72283,72284],{"class":201,"line":35493},[199,72285,72286],{"class":1454},"      \u002F\u002F 追加到数组里面\n",[199,72288,72289,72291,72293],{"class":201,"line":35499},[199,72290,60266],{"class":205},[199,72292,1534],{"class":878},[199,72294,72295],{"class":205},"(obj)\n",[199,72297,72298],{"class":201,"line":35510},[199,72299,72300],{"class":1454},"      \u002F\u002F console.log(arr);\n",[199,72302,72303],{"class":201,"line":35516},[199,72304,72305],{"class":1454},"      \u002F\u002F 清空表单  reset重置表单\n",[199,72307,72308,72311,72313,72316],{"class":201,"line":35536},[199,72309,72310],{"class":1018},"      this",[199,72312,3638],{"class":205},[199,72314,72315],{"class":878},"reset",[199,72317,4892],{"class":205},[199,72319,72320],{"class":201,"line":35542},[199,72321,72322],{"class":1454},"      \u002F\u002F 调用渲染函数\n",[199,72324,72325,72328],{"class":201,"line":35553},[199,72326,72327],{"class":878},"      render",[199,72329,4892],{"class":205},[199,72331,72332],{"class":201,"line":35559},[199,72333,36302],{"class":205},[199,72335,72336],{"class":201,"line":35565},[199,72337,72338],{"class":1454},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[199,72340,72341,72344,72347],{"class":201,"line":35571},[199,72342,72343],{"class":1086},"    function",[199,72345,72346],{"class":878}," render",[199,72348,13716],{"class":205},[199,72350,72351],{"class":201,"line":35577},[199,72352,72353],{"class":1454},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[199,72355,72356,72359,72361],{"class":201,"line":35583},[199,72357,72358],{"class":205},"      tbody.innerHTML ",[199,72360,895],{"class":1086},[199,72362,72363],{"class":898}," ''\n",[199,72365,72366],{"class":201,"line":35589},[199,72367,72368],{"class":1454},"      \u002F\u002F 遍历数组\n",[199,72370,72371,72373,72375,72377,72379,72381,72383,72385,72387,72389,72391,72393,72395],{"class":201,"line":35595},[199,72372,1971],{"class":1086},[199,72374,1484],{"class":205},[199,72376,1487],{"class":1086},[199,72378,1490],{"class":205},[199,72380,895],{"class":1086},[199,72382,1621],{"class":1018},[199,72384,1498],{"class":205},[199,72386,887],{"class":1086},[199,72388,1628],{"class":205},[199,72390,1631],{"class":1018},[199,72392,1507],{"class":205},[199,72394,1510],{"class":1086},[199,72396,1513],{"class":205},[199,72398,72399,72401,72404,72406,72408,72411,72413,72416],{"class":201,"line":35615},[199,72400,63529],{"class":1086},[199,72402,72403],{"class":1018}," tr",[199,72405,16425],{"class":1086},[199,72407,56655],{"class":205},[199,72409,72410],{"class":878},"createElement",[199,72412,1537],{"class":205},[199,72414,72415],{"class":898},"'tr'",[199,72417,1594],{"class":205},[199,72419,72420,72423,72425],{"class":201,"line":35621},[199,72421,72422],{"class":205},"        tr.innerHTML ",[199,72424,895],{"class":1086},[199,72426,72427],{"class":898}," `\n",[199,72429,72430,72433,72435,72437,72439,72442,72445],{"class":201,"line":35637},[199,72431,72432],{"class":898},"        \u003Ctd>${",[199,72434,1659],{"class":205},[199,72436,1662],{"class":898},[199,72438,1548],{"class":205},[199,72440,72441],{"class":898},"].",[199,72443,72444],{"class":205},"stuID",[199,72446,72447],{"class":898},"}\u003C\u002Ftd>\n",[199,72449,72450,72453,72455,72457,72459,72461,72464],{"class":201,"line":35643},[199,72451,72452],{"class":898},"          \u003Ctd>${",[199,72454,1659],{"class":205},[199,72456,1662],{"class":898},[199,72458,1548],{"class":205},[199,72460,72441],{"class":898},[199,72462,72463],{"class":205},"uname",[199,72465,72447],{"class":898},[199,72467,72468,72470,72472,72474,72476,72478,72481],{"class":201,"line":35657},[199,72469,72452],{"class":898},[199,72471,1659],{"class":205},[199,72473,1662],{"class":898},[199,72475,1548],{"class":205},[199,72477,72441],{"class":898},[199,72479,72480],{"class":205},"age",[199,72482,72447],{"class":898},[199,72484,72485,72487,72489,72491,72493,72495,72498],{"class":201,"line":35663},[199,72486,72452],{"class":898},[199,72488,1659],{"class":205},[199,72490,1662],{"class":898},[199,72492,1548],{"class":205},[199,72494,72441],{"class":898},[199,72496,72497],{"class":205},"gender",[199,72499,72447],{"class":898},[199,72501,72502,72504,72506,72508,72510,72512,72515],{"class":201,"line":35678},[199,72503,72452],{"class":898},[199,72505,1659],{"class":205},[199,72507,1662],{"class":898},[199,72509,1548],{"class":205},[199,72511,72441],{"class":898},[199,72513,72514],{"class":205},"salary",[199,72516,72447],{"class":898},[199,72518,72519,72521,72523,72525,72527,72529,72532],{"class":201,"line":35684},[199,72520,72452],{"class":898},[199,72522,1659],{"class":205},[199,72524,1662],{"class":898},[199,72526,1548],{"class":205},[199,72528,72441],{"class":898},[199,72530,72531],{"class":205},"city",[199,72533,72447],{"class":898},[199,72535,72536],{"class":201,"line":35693},[199,72537,71852],{"class":898},[199,72539,72540,72543,72545],{"class":201,"line":35699},[199,72541,72542],{"class":898},"            \u003Ca href=\"javascript:\" data-id=${",[199,72544,1548],{"class":205},[199,72546,72547],{"class":898},"}>删除\u003C\u002Fa>\n",[199,72549,72550],{"class":201,"line":35708},[199,72551,72552],{"class":898},"          \u003C\u002Ftd> \n",[199,72554,72555],{"class":201,"line":35714},[199,72556,72557],{"class":898},"          `\n",[199,72559,72560],{"class":201,"line":35720},[199,72561,72562],{"class":1454},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[199,72564,72565,72568,72571],{"class":201,"line":35729},[199,72566,72567],{"class":205},"        tbody.",[199,72569,72570],{"class":878},"appendChild",[199,72572,72573],{"class":205},"(tr)\n",[199,72575,72576],{"class":201,"line":35735},[199,72577,2092],{"class":205},[199,72579,72580],{"class":201,"line":35746},[199,72581,2097],{"class":205},[199,72583,72584],{"class":201,"line":35752},[199,72585,907],{"emptyLinePlaceholder":906},[199,72587,72588],{"class":201,"line":35771},[199,72589,72590],{"class":1454},"    \u002F\u002F 3.删除委托\n",[199,72592,72593],{"class":201,"line":35777},[199,72594,72595],{"class":1454},"    \u002F\u002F 3.1 事件委托 tbody\n",[199,72597,72598,72601,72603,72605,72607,72609,72611,72613,72615],{"class":201,"line":35788},[199,72599,72600],{"class":205},"    tbody.",[199,72602,60072],{"class":878},[199,72604,1537],{"class":205},[199,72606,60077],{"class":898},[199,72608,1912],{"class":205},[199,72610,56708],{"class":1086},[199,72612,1484],{"class":205},[199,72614,3166],{"class":8113},[199,72616,1513],{"class":205},[199,72618,72619,72621,72623,72625,72627],{"class":201,"line":35794},[199,72620,56739],{"class":1086},[199,72622,69293],{"class":205},[199,72624,56745],{"class":1086},[199,72626,70515],{"class":898},[199,72628,1513],{"class":205},[199,72630,72631],{"class":201,"line":35814},[199,72632,72633],{"class":1454},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[199,72635,72636],{"class":201,"line":35830},[199,72637,72638],{"class":1454},"        \u002F\u002F console.log(e.target.dataset.id);\n",[199,72640,72641],{"class":201,"line":35836},[199,72642,72643],{"class":1454},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[199,72645,72646,72649,72651,72654,72656],{"class":201,"line":35850},[199,72647,72648],{"class":205},"        arr.",[199,72650,60269],{"class":878},[199,72652,72653],{"class":205},"(e.target.dataset.id, ",[199,72655,1115],{"class":1018},[199,72657,1594],{"class":205},[199,72659,72660],{"class":201,"line":35856},[199,72661,72662],{"class":1454},"        \u002F\u002F 重新渲染一次\n",[199,72664,72665,72668],{"class":201,"line":35862},[199,72666,72667],{"class":878},"        render",[199,72669,4892],{"class":205},[199,72671,72672],{"class":201,"line":35873},[199,72673,2092],{"class":205},[199,72675,72676],{"class":201,"line":35879},[199,72677,36302],{"class":205},[199,72679,72680,72682,72684],{"class":201,"line":35885},[199,72681,2112],{"class":205},[199,72683,1446],{"class":874},[199,72685,882],{"class":205},[199,72687,72688],{"class":201,"line":35895},[199,72689,907],{"emptyLinePlaceholder":906},[199,72691,72692,72694,72696],{"class":201,"line":35901},[199,72693,1414],{"class":205},[199,72695,1431],{"class":874},[199,72697,882],{"class":205},[199,72699,72700],{"class":201,"line":35912},[199,72701,907],{"emptyLinePlaceholder":906},[199,72703,72704,72706,72708],{"class":201,"line":35918},[199,72705,1414],{"class":205},[199,72707,194],{"class":874},[199,72709,882],{"class":205},[31,72711,72712],{},"样式：",[190,72714,72718],{"className":72715,"code":72716,"language":72717,"meta":57,"style":57},"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",[196,72719,72720,72725,72735,72744,72748,72752,72757,72767,72772,72776,72781,72791,72796,72805,72809,72813,72818,72823,72833,72843,72848,72852,72857,72866,72876,72881,72891,72901,72905,72910,72918,72922,72927,72932,72937,72945,72954,72958,72963,72972,72976,72981,72990,72994,72999,73008,73017,73025,73029,73034,73043,73053,73062,73072,73078,73087,73097,73107,73111,73116,73125,73133,73143,73151,73160,73169,73179,73187,73191,73196,73205],{"__ignoreMap":57},[199,72721,72722],{"class":201,"line":202},[199,72723,72724],{"class":205},"* {\n",[199,72726,72727,72730,72732],{"class":201,"line":36},[199,72728,72729],{"class":874},"  margin",[199,72731,1022],{"class":205},[199,72733,72734],{"class":898},"0;\n",[199,72736,72737,72740,72742],{"class":201,"line":73},[199,72738,72739],{"class":898},"  padding",[199,72741,1022],{"class":205},[199,72743,72734],{"class":898},[199,72745,72746],{"class":201,"line":333},[199,72747,671],{"class":205},[199,72749,72750],{"class":201,"line":227},[199,72751,907],{"emptyLinePlaceholder":906},[199,72753,72754],{"class":201,"line":238},[199,72755,72756],{"class":898},"a {\n",[199,72758,72759,72762,72764],{"class":201,"line":252},[199,72760,72761],{"class":874},"  text-decoration",[199,72763,1022],{"class":205},[199,72765,72766],{"class":898},"none;\n",[199,72768,72769],{"class":201,"line":388},[199,72770,72771],{"class":898},"  color:#721c24;\n",[199,72773,72774],{"class":201,"line":415},[199,72775,671],{"class":205},[199,72777,72778],{"class":201,"line":426},[199,72779,72780],{"class":898},"h1 {\n",[199,72782,72783,72786,72788],{"class":201,"line":1015},[199,72784,72785],{"class":874},"  text-align",[199,72787,1022],{"class":205},[199,72789,72790],{"class":898},"center;\n",[199,72792,72793],{"class":201,"line":1031},[199,72794,72795],{"class":898},"  color:#333;\n",[199,72797,72798,72800,72802],{"class":201,"line":1043},[199,72799,72729],{"class":874},[199,72801,1022],{"class":205},[199,72803,72804],{"class":898},"20px 0;\n",[199,72806,72807],{"class":201,"line":1049},[199,72808,5578],{"class":205},[199,72810,72811],{"class":201,"line":1054},[199,72812,671],{"class":205},[199,72814,72815],{"class":201,"line":1062},[199,72816,72817],{"class":898},"table {\n",[199,72819,72820],{"class":201,"line":1075},[199,72821,72822],{"class":898},"  margin:0 auto;\n",[199,72824,72825,72828,72830],{"class":201,"line":1092},[199,72826,72827],{"class":874},"  width",[199,72829,1022],{"class":205},[199,72831,72832],{"class":898},"800px;\n",[199,72834,72835,72838,72840],{"class":201,"line":1107},[199,72836,72837],{"class":874},"  border-collapse",[199,72839,1022],{"class":205},[199,72841,72842],{"class":898},"collapse;\n",[199,72844,72845],{"class":201,"line":1128},[199,72846,72847],{"class":898},"  color:#004085;\n",[199,72849,72850],{"class":201,"line":1146},[199,72851,671],{"class":205},[199,72853,72854],{"class":201,"line":1163},[199,72855,72856],{"class":898},"th {\n",[199,72858,72859,72861,72863],{"class":201,"line":1176},[199,72860,72739],{"class":874},[199,72862,1022],{"class":205},[199,72864,72865],{"class":898},"10px;\n",[199,72867,72868,72871,72873],{"class":201,"line":1189},[199,72869,72870],{"class":874},"  background",[199,72872,1022],{"class":205},[199,72874,72875],{"class":1454},"#cfe5ff;\n",[199,72877,72878],{"class":201,"line":1202},[199,72879,72880],{"class":205},"  \n",[199,72882,72883,72886,72888],{"class":201,"line":1207},[199,72884,72885],{"class":874},"  font-size",[199,72887,1022],{"class":205},[199,72889,72890],{"class":898},"20px;\n",[199,72892,72893,72896,72898],{"class":201,"line":1212},[199,72894,72895],{"class":874},"  font-weight",[199,72897,1022],{"class":205},[199,72899,72900],{"class":898},"400;\n",[199,72902,72903],{"class":201,"line":1225},[199,72904,671],{"class":205},[199,72906,72907],{"class":201,"line":1236},[199,72908,72909],{"class":898},"td,th {\n",[199,72911,72912,72915],{"class":201,"line":1249},[199,72913,72914],{"class":898},"  border:1px solid",[199,72916,72917],{"class":1454}," #b8daff;\n",[199,72919,72920],{"class":201,"line":1262},[199,72921,671],{"class":205},[199,72923,72924],{"class":201,"line":1275},[199,72925,72926],{"class":898},"td {\n",[199,72928,72929],{"class":201,"line":1287},[199,72930,72931],{"class":898},"  padding:10px;\n",[199,72933,72934],{"class":201,"line":1292},[199,72935,72936],{"class":898},"  color:#666;\n",[199,72938,72939,72941,72943],{"class":201,"line":1297},[199,72940,72785],{"class":874},[199,72942,1022],{"class":205},[199,72944,72790],{"class":898},[199,72946,72947,72949,72951],{"class":201,"line":1310},[199,72948,72885],{"class":874},[199,72950,1022],{"class":205},[199,72952,72953],{"class":898},"16px;\n",[199,72955,72956],{"class":201,"line":1315},[199,72957,671],{"class":205},[199,72959,72960],{"class":201,"line":1330},[199,72961,72962],{"class":898},"tbody tr {\n",[199,72964,72965,72967,72969],{"class":201,"line":1335},[199,72966,72870],{"class":874},[199,72968,1022],{"class":205},[199,72970,72971],{"class":1454},"#fff;\n",[199,72973,72974],{"class":201,"line":1340},[199,72975,671],{"class":205},[199,72977,72978],{"class":201,"line":1352},[199,72979,72980],{"class":898},"tbody tr:hover {\n",[199,72982,72983,72985,72987],{"class":201,"line":1367},[199,72984,72870],{"class":874},[199,72986,1022],{"class":205},[199,72988,72989],{"class":1454},"#e1ecf8;\n",[199,72991,72992],{"class":201,"line":1381},[199,72993,671],{"class":205},[199,72995,72996],{"class":201,"line":1396},[199,72997,72998],{"class":898},".info {\n",[199,73000,73001,73003,73005],{"class":201,"line":1401},[199,73002,72827],{"class":874},[199,73004,1022],{"class":205},[199,73006,73007],{"class":898},"900px;\n",[199,73009,73010,73012,73014],{"class":201,"line":1411},[199,73011,72729],{"class":874},[199,73013,1022],{"class":205},[199,73015,73016],{"class":898},"50px auto;\n",[199,73018,73019,73021,73023],{"class":201,"line":1421},[199,73020,72785],{"class":874},[199,73022,1022],{"class":205},[199,73024,72790],{"class":898},[199,73026,73027],{"class":201,"line":1426},[199,73028,671],{"class":205},[199,73030,73031],{"class":201,"line":1436},[199,73032,73033],{"class":898},".info  input, .info select {\n",[199,73035,73036,73038,73040],{"class":201,"line":1441},[199,73037,72827],{"class":874},[199,73039,1022],{"class":205},[199,73041,73042],{"class":898},"80px;\n",[199,73044,73045,73048,73050],{"class":201,"line":1451},[199,73046,73047],{"class":874},"  height",[199,73049,1022],{"class":205},[199,73051,73052],{"class":898},"27px;\n",[199,73054,73055,73058,73060],{"class":201,"line":1458},[199,73056,73057],{"class":874},"  outline",[199,73059,1022],{"class":205},[199,73061,72766],{"class":898},[199,73063,73064,73067,73069],{"class":201,"line":1464},[199,73065,73066],{"class":874},"  border-radius",[199,73068,1022],{"class":205},[199,73070,73071],{"class":898},"5px;\n",[199,73073,73074,73076],{"class":201,"line":1478},[199,73075,72914],{"class":898},[199,73077,72917],{"class":1454},[199,73079,73080,73083,73085],{"class":201,"line":1516},[199,73081,73082],{"class":874},"  padding-left",[199,73084,1022],{"class":205},[199,73086,73071],{"class":898},[199,73088,73089,73092,73094],{"class":201,"line":1522},[199,73090,73091],{"class":874},"  box-sizing",[199,73093,1022],{"class":205},[199,73095,73096],{"class":898},"border-box;\n",[199,73098,73099,73102,73104],{"class":201,"line":1528},[199,73100,73101],{"class":874},"  margin-right",[199,73103,1022],{"class":205},[199,73105,73106],{"class":898},"15px;\n",[199,73108,73109],{"class":201,"line":1557},[199,73110,671],{"class":205},[199,73112,73113],{"class":201,"line":1563},[199,73114,73115],{"class":898},".info button {\n",[199,73117,73118,73120,73122],{"class":201,"line":1568},[199,73119,72827],{"class":874},[199,73121,1022],{"class":205},[199,73123,73124],{"class":898},"60px;\n",[199,73126,73127,73129,73131],{"class":201,"line":1574},[199,73128,73047],{"class":874},[199,73130,1022],{"class":205},[199,73132,73052],{"class":898},[199,73134,73135,73138,73140],{"class":201,"line":1580},[199,73136,73137],{"class":874},"  background-color",[199,73139,1022],{"class":205},[199,73141,73142],{"class":1454},"#004085;\n",[199,73144,73145,73147,73149],{"class":201,"line":1597},[199,73146,73057],{"class":874},[199,73148,1022],{"class":205},[199,73150,72766],{"class":898},[199,73152,73153,73156,73158],{"class":201,"line":1602},[199,73154,73155],{"class":874},"  border",[199,73157,1022],{"class":205},[199,73159,72734],{"class":898},[199,73161,73162,73165,73167],{"class":201,"line":1608},[199,73163,73164],{"class":874},"  color",[199,73166,1022],{"class":205},[199,73168,72971],{"class":1454},[199,73170,73171,73174,73176],{"class":201,"line":1640},[199,73172,73173],{"class":874},"  cursor",[199,73175,1022],{"class":205},[199,73177,73178],{"class":898},"pointer;\n",[199,73180,73181,73183,73185],{"class":201,"line":1653},[199,73182,73066],{"class":874},[199,73184,1022],{"class":205},[199,73186,73071],{"class":898},[199,73188,73189],{"class":201,"line":1673},[199,73190,671],{"class":205},[199,73192,73193],{"class":201,"line":1690},[199,73194,73195],{"class":898},".info .age {\n",[199,73197,73198,73200,73202],{"class":201,"line":1706},[199,73199,72827],{"class":874},[199,73201,1022],{"class":205},[199,73203,73204],{"class":898},"50px;\n",[199,73206,73207],{"class":201,"line":1712},[199,73208,671],{"class":205},[31,73210,73211],{},"思路：",[31,73213,73214],{},[55,73215],{"alt":57,"src":73216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[31,73218,73219],{},[55,73220],{"alt":57,"src":73221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[31,73223,73224],{},[55,73225],{"alt":57,"src":73226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[19,73228,73230],{"id":73229},"_3315-重绘回流","3.3.15 重绘回流",[31,73232,73233],{},[55,73234],{"alt":57,"src":73235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[31,73237,73238],{},[55,73239],{"alt":57,"src":73240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[31,73242,73243],{},[55,73244],{"alt":57,"src":73245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73247,73249],{"id":73248},"_34-bom","3.4 BOM",[31,73251,73252],{},[55,73253],{"alt":57,"src":73254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[31,73256,73257],{},"平时写的document省略了window而已，实际上是window.document",[31,73259,73260],{},"函数也是这样，调用的时候实际为window.fn()",[31,73262,73263],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[31,73265,73266],{},"window大部分情况下可以省略",[19,73268,73270],{"id":73269},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[31,73272,73273],{},"只执行一次",[31,73275,73276],{},[55,73277],{"alt":57,"src":73278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[31,73280,73281],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[31,73283,73284],{},[55,73285],{"alt":57,"src":73286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[19,73288,73290],{"id":73289},"_342-js执行机制","3.4.2 JS执行机制",[31,73292,73293],{},[55,73294],{"alt":57,"src":73295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[31,73297,73298],{},"两个的结果都是1111 3333 2222",[31,73300,73301],{},[55,73302],{"alt":57,"src":73303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[31,73305,73306],{},[55,73307],{"alt":57,"src":73308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[31,73310,73311],{},[55,73312],{"alt":57,"src":73313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[31,73315,73316],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[31,73318,73319],{},"工作流程：",[31,73321,73322],{},[55,73323],{"alt":57,"src":73324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[31,73326,73327],{},[55,73328],{"alt":57,"src":73329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[31,73331,73332],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[31,73334,73335],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[19,73337,73339],{"id":73338},"_343-location对象","3.4.3 location对象",[31,73341,73342],{},"location对象属于window这个全局对象下的，可以 省略window",[31,73344,73345],{},[55,73346],{"alt":57,"src":73347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[31,73349,73350],{},"href可以跳转页面",[24,73352,73353],{},[27,73354,73355],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[31,73357,73358],{},"search得到提交信息之后网站后边的地址",[31,73360,73361],{},[55,73362],{"alt":57,"src":73363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[31,73365,73366],{},[55,73367],{"alt":57,"src":73368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[24,73370,73371],{"start":36},[27,73372,73373],{},"hash:这个获取单页面应用#后边的地址",[31,73375,73376],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[31,73378,73379],{},[55,73380],{"alt":57,"src":73381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[190,73383,73385],{"className":2763,"code":73384,"language":2765,"meta":57,"style":57},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[196,73386,73387,73407,73427],{"__ignoreMap":57},[199,73388,73389,73391,73393,73395,73397,73400,73403,73405],{"class":201,"line":202},[199,73390,1824],{"class":205},[199,73392,2867],{"class":874},[199,73394,63316],{"class":878},[199,73396,895],{"class":205},[199,73398,73399],{"class":898},"\"#\u002Fmy\"",[199,73401,73402],{"class":205},">我的\u003C\u002F",[199,73404,2867],{"class":874},[199,73406,882],{"class":205},[199,73408,73409,73411,73413,73415,73417,73420,73423,73425],{"class":201,"line":36},[199,73410,1824],{"class":205},[199,73412,2867],{"class":874},[199,73414,63316],{"class":878},[199,73416,895],{"class":205},[199,73418,73419],{"class":898},"\"#\u002Ffriend\"",[199,73421,73422],{"class":205},">关注\u003C\u002F",[199,73424,2867],{"class":874},[199,73426,882],{"class":205},[199,73428,73429,73431,73433,73435,73437,73440,73443,73445],{"class":201,"line":73},[199,73430,1824],{"class":205},[199,73432,2867],{"class":874},[199,73434,63316],{"class":878},[199,73436,895],{"class":205},[199,73438,73439],{"class":898},"\"#\u002Fdownload\"",[199,73441,73442],{"class":205},">下载\u003C\u002F",[199,73444,2867],{"class":874},[199,73446,882],{"class":205},[31,73448,73449],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[24,73451,73452],{"start":73},[27,73453,73454,73455,73457,73458,73460],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55975,73456],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55975,73459],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[19,73462,73464],{"id":73463},"_345-navigator对象","3.4.5 navigator对象",[31,73466,73467],{},[55,73468],{"alt":57,"src":73469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[190,73471,73475],{"className":73472,"code":73473,"language":73474,"meta":57,"style":57},"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",[196,73476,73477,73482,73493,73505,73510,73561,73602,73607,73620,73632,73637],{"__ignoreMap":57},[199,73478,73479],{"class":201,"line":202},[199,73480,73481],{"class":1454},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[199,73483,73484,73486,73488,73490],{"class":201,"line":36},[199,73485,3313],{"class":1086},[199,73487,1537],{"class":205},[199,73489,56708],{"class":1086},[199,73491,73492],{"class":205}," () { \n",[199,73494,73495,73497,73500,73502],{"class":201,"line":73},[199,73496,9689],{"class":1086},[199,73498,73499],{"class":1018}," userAgent",[199,73501,16425],{"class":1086},[199,73503,73504],{"class":205}," navigator.userAgent \n",[199,73506,73507],{"class":201,"line":333},[199,73508,73509],{"class":1454},"\u002F\u002F 验证是否为Android或iPhone \n",[199,73511,73512,73514,73517,73519,73522,73525,73527,73529,73532,73534,73537,73541,73543,73545,73547,73550,73552,73554,73556,73558],{"class":201,"line":227},[199,73513,9689],{"class":1086},[199,73515,73516],{"class":1018}," android",[199,73518,16425],{"class":1086},[199,73520,73521],{"class":205}," userAgent.",[199,73523,73524],{"class":878},"match",[199,73526,1537],{"class":205},[199,73528,3664],{"class":898},[199,73530,73531],{"class":50817},"(Android);",[199,73533,4060],{"class":1086},[199,73535,73536],{"class":1018},"[\\s",[199,73538,73540],{"class":73539},"snhLl","\\\u002F",[199,73542,1667],{"class":1018},[199,73544,2028],{"class":1086},[199,73546,1537],{"class":50817},[199,73548,73549],{"class":1018},"[\\d.]",[199,73551,2028],{"class":1086},[199,73553,3512],{"class":50817},[199,73555,4060],{"class":1086},[199,73557,3664],{"class":898},[199,73559,73560],{"class":205},") \n",[199,73562,73563,73565,73568,73570,73572,73574,73576,73578,73581,73584,73587,73589,73591,73594,73596,73598,73600],{"class":201,"line":238},[199,73564,9689],{"class":1086},[199,73566,73567],{"class":1018}," iphone",[199,73569,16425],{"class":1086},[199,73571,73521],{"class":205},[199,73573,73524],{"class":878},[199,73575,1537],{"class":205},[199,73577,3664],{"class":898},[199,73579,73580],{"class":50817},"(iPhone",[199,73582,73583],{"class":1018},"\\s",[199,73585,73586],{"class":50817},"OS)",[199,73588,73583],{"class":1018},[199,73590,1537],{"class":50817},[199,73592,73593],{"class":1018},"[\\d_]",[199,73595,2028],{"class":1086},[199,73597,3512],{"class":50817},[199,73599,3664],{"class":898},[199,73601,73560],{"class":205},[199,73603,73604],{"class":201,"line":252},[199,73605,73606],{"class":1454},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[199,73608,73609,73611,73614,73617],{"class":201,"line":388},[199,73610,4470],{"class":1086},[199,73612,73613],{"class":205}," (android ",[199,73615,73616],{"class":1086},"||",[199,73618,73619],{"class":205}," iphone) { \n",[199,73621,73622,73625,73627,73630],{"class":201,"line":415},[199,73623,73624],{"class":205},"location.href ",[199,73626,895],{"class":1086},[199,73628,73629],{"class":898}," 'http:\u002F\u002Fm.itcast.cn'",[199,73631,5578],{"class":205},[199,73633,73634],{"class":201,"line":426},[199,73635,73636],{"class":205},"} \n",[199,73638,73639],{"class":201,"line":1015},[199,73640,73641],{"class":205},"})()\n",[19,73643,73645],{"id":73644},"_346-histroy对象","3.4.6 histroy对象",[31,73647,73648],{},[55,73649],{"alt":57,"src":73650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[31,73652,73653],{},"浏览器地址的前进与后退!!!",[31,73655,73656],{},"history.back() 等效于 history.go(-1)",[31,73658,73659],{},"history.forward() 等效于 history.go(1)",[14,73661,73663],{"id":73662},"_35-本地存储","3.5 本地存储",[24,73665,73666,73669,73672],{},[27,73667,73668],{},"数据存储在用户浏览器中",[27,73670,73671],{},"设置、读取方便、甚至页面刷新不丢失数据",[27,73673,73674],{},"容量较大，sessionStorage和localStorage约 5M 左右",[19,73676,73678],{"id":73677},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[31,73680,73681],{},"只能存储字符串",[31,73683,73684],{},[55,73685],{"alt":57,"src":73686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[31,73688,73689],{},[55,73690],{"alt":57,"src":73691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[31,73693,73694],{},"键值对要加引号,不然就会当变量来看了",[31,73696,73697],{},"localStorage.setItem('uname', 'pink')",[31,73699,73700],{},"刷新之后信息不再丢失",[31,73702,73703],{},"操作key,value会跟着变",[31,73705,73706],{},"删除只删除键就可以,即名字",[31,73708,73697],{},[31,73710,73711],{},"改:",[31,73713,73714],{},"localStorage.setItem('uname','red')",[31,73716,73717],{},"有这个键就是改,没有这个键就是改",[31,73719,73720],{},[55,73721],{"alt":57,"src":73722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[31,73724,73725],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[31,73727,73728],{},[55,73729],{"alt":57,"src":73730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[31,73732,73733],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[19,73735,73737],{"id":73736},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[31,73739,73740],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[31,73742,73743],{},"特性:",[24,73745,73746,73749,73752,73755],{},[27,73747,73748],{},"生命周期为关闭浏览器窗口",[27,73750,73751],{},"在同一个窗口(页面)下数据可以共享",[27,73753,73754],{},"以键值对的形式存储使用",[27,73756,73757],{},"用法跟localStorage 基本相同",[19,73759,73761],{"id":73760},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[31,73763,73764],{},"本地只能存储字符串,无法直接存储复杂数据类型",[190,73766,73768],{"className":2763,"code":73767,"language":2765,"meta":57,"style":57},"\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",[196,73769,73770,73778,73783,73788,73793,73798,73802,73807,73812],{"__ignoreMap":57},[199,73771,73772,73774,73776],{"class":201,"line":202},[199,73773,887],{"class":205},[199,73775,1446],{"class":874},[199,73777,882],{"class":205},[199,73779,73780],{"class":201,"line":36},[199,73781,73782],{"class":205},"    const obj = {\n",[199,73784,73785],{"class":201,"line":73},[199,73786,73787],{"class":205},"      uname: 'pink老师',\n",[199,73789,73790],{"class":201,"line":333},[199,73791,73792],{"class":205},"      age: 18,\n",[199,73794,73795],{"class":201,"line":227},[199,73796,73797],{"class":205},"      gender: '女'\n",[199,73799,73800],{"class":201,"line":238},[199,73801,2097],{"class":205},[199,73803,73804],{"class":201,"line":252},[199,73805,73806],{"class":205},"    \u002F\u002F 存储复杂数据类型\n",[199,73808,73809],{"class":201,"line":388},[199,73810,73811],{"class":205},"    localStorage.setItem('obj', obj)\n",[199,73813,73814,73816,73818],{"class":201,"line":415},[199,73815,2112],{"class":205},[199,73817,1446],{"class":874},[199,73819,882],{"class":205},[31,73821,73822],{},[55,73823],{"alt":57,"src":73824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[31,73826,73827],{},"如果获取一下数据:",[31,73829,73830],{},"log(localStorage.getItem('obj'))",[31,73832,73833],{},[55,73834],{"alt":57,"src":73835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[31,73837,73838],{},"发现直接存对象是使用不了的!!!",[627,73840,73842],{"id":73841},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[31,73844,73845],{},[55,73846],{"alt":57,"src":73847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[190,73849,73851],{"className":192,"code":73850,"language":194,"meta":57,"style":57},"\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",[196,73852,73853,73861,73871,73881,73890,73898,73902,73906,73932,73951,73959,73963,73968,73973],{"__ignoreMap":57},[199,73854,73855,73857,73859],{"class":201,"line":202},[199,73856,887],{"class":205},[199,73858,1446],{"class":874},[199,73860,882],{"class":205},[199,73862,73863,73865,73867,73869],{"class":201,"line":36},[199,73864,14084],{"class":1086},[199,73866,72230],{"class":1018},[199,73868,16425],{"class":1086},[199,73870,1012],{"class":205},[199,73872,73873,73876,73879],{"class":201,"line":73},[199,73874,73875],{"class":205},"      uname: ",[199,73877,73878],{"class":898},"'pink老师'",[199,73880,34308],{"class":205},[199,73882,73883,73886,73888],{"class":201,"line":333},[199,73884,73885],{"class":205},"      age: ",[199,73887,3730],{"class":1018},[199,73889,34308],{"class":205},[199,73891,73892,73895],{"class":201,"line":227},[199,73893,73894],{"class":205},"      gender: ",[199,73896,73897],{"class":898},"'女'\n",[199,73899,73900],{"class":201,"line":238},[199,73901,2097],{"class":205},[199,73903,73904],{"class":201,"line":252},[199,73905,73806],{"class":1454},[199,73907,73908,73911,73914,73916,73919,73921,73924,73926,73929],{"class":201,"line":388},[199,73909,73910],{"class":205},"  localStorage.",[199,73912,73913],{"class":878},"setItem",[199,73915,1537],{"class":205},[199,73917,73918],{"class":898},"'obj'",[199,73920,1912],{"class":205},[199,73922,73923],{"class":1018},"JSON",[199,73925,3638],{"class":205},[199,73927,73928],{"class":878},"stringify",[199,73930,73931],{"class":205},"(obj))\n",[199,73933,73934,73937,73939,73942,73945,73947,73949],{"class":201,"line":415},[199,73935,73936],{"class":205},"  console.",[199,73938,60506],{"class":878},[199,73940,73941],{"class":205},"(localStorage.",[199,73943,73944],{"class":878},"getItem",[199,73946,1537],{"class":205},[199,73948,73918],{"class":898},[199,73950,1554],{"class":205},[199,73952,73953,73955,73957],{"class":201,"line":426},[199,73954,2112],{"class":205},[199,73956,1446],{"class":874},[199,73958,882],{"class":205},[199,73960,73961],{"class":201,"line":1015},[199,73962,72880],{"class":205},[199,73964,73965],{"class":201,"line":1031},[199,73966,73967],{"class":205},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[199,73969,73970],{"class":201,"line":1043},[199,73971,73972],{"class":205},"  类型是字符串的\n",[199,73974,73975],{"class":201,"line":1049},[199,73976,73977],{"class":205},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[627,73979,73981],{"id":73980},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[31,73983,73984],{},[55,73985],{"alt":57,"src":73986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[31,73988,73989],{},[55,73990],{"alt":57,"src":73991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[190,73993,73995],{"className":2763,"code":73994,"language":2765,"meta":57,"style":57},"  \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",[196,73996,73997,74005,74009,74013,74017,74021,74025,74030,74035,74040,74045,74050,74055,74060,74065],{"__ignoreMap":57},[199,73998,73999,74001,74003],{"class":201,"line":202},[199,74000,1824],{"class":205},[199,74002,1446],{"class":874},[199,74004,882],{"class":205},[199,74006,74007],{"class":201,"line":36},[199,74008,73782],{"class":205},[199,74010,74011],{"class":201,"line":73},[199,74012,73787],{"class":205},[199,74014,74015],{"class":201,"line":333},[199,74016,73792],{"class":205},[199,74018,74019],{"class":201,"line":227},[199,74020,73797],{"class":205},[199,74022,74023],{"class":201,"line":238},[199,74024,2097],{"class":205},[199,74026,74027],{"class":201,"line":252},[199,74028,74029],{"class":205},"    \u002F\u002F 1.存储复杂数据类型\n",[199,74031,74032],{"class":201,"line":388},[199,74033,74034],{"class":205},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[199,74036,74037],{"class":201,"line":415},[199,74038,74039],{"class":205},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[199,74041,74042],{"class":201,"line":426},[199,74043,74044],{"class":205},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[199,74046,74047],{"class":201,"line":1015},[199,74048,74049],{"class":205},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[199,74051,74052],{"class":201,"line":1031},[199,74053,74054],{"class":205},"    \u002F\u002F 取\n",[199,74056,74057],{"class":201,"line":1043},[199,74058,74059],{"class":205},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[199,74061,74062],{"class":201,"line":1049},[199,74063,74064],{"class":205},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[199,74066,74067,74069,74071],{"class":201,"line":1054},[199,74068,2112],{"class":205},[199,74070,1446],{"class":874},[199,74072,882],{"class":205},[31,74074,74075],{},[55,74076],{"alt":57,"src":74077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[19,74079,74081],{"id":74080},"_356-数组map方法","3.5.6 数组map方法",[31,74083,74084],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[31,74086,74087],{},[55,74088],{"alt":57,"src":74089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[31,74091,74092],{},[55,74093],{"alt":57,"src":74094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[31,74096,74097,74100],{},[49,74098,74099],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[31,74102,74103],{},"map有返回值，但是forEach没有返回值",[31,74105,74106],{},"map是个方法。用的时候要加 ()",[31,74108,74109],{},"map返回的是一个数组",[19,74111,74113],{"id":74112},"_357-数组中join方法","3.5.7 数组中join方法",[31,74115,74116],{},[55,74117],{"alt":57,"src":74118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[31,74120,74121],{},"类似于python中拼接字符串一样！",[24,74123,74124,74127,74130],{},[27,74125,74126],{},"小括号为空则逗号分开",[27,74128,74129],{},"小括号为空字符串 ''，则元素之间没有分隔符",[27,74131,74132],{},"小括号用啥符号就用进行分割",[19,74134,74136],{"id":74135},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[24,74138,74139,74142,74145,74148,74151],{},[27,74140,74141],{},"记住本地时间获取快速方式：new Date().toDateString()",[27,74143,74144],{},"尽量减少DOM操作，用好map+join的渲染方式",[27,74146,74147],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[27,74149,74150],{},"return可以实现函数的结束",[27,74152,74153],{},"禁止跳转是 preventDefault() 不要忘记",[190,74155,74157],{"className":192,"code":74156,"language":194,"meta":57,"style":57},"\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",[196,74158,74159,74169,74183,74187,74195,74209,74229,74241,74249,74255,74265,74275,74279,74283,74289,74299,74311,74315,74319,74326,74338,74352,74362,74366,74370,74377,74384,74391,74403,74415,74425,74437,74441,74445,74452,74459,74471,74483,74493,74505,74535,74539,74543,74550,74562,74574,74598,74608,74618,74622,74626,74634,74645,74657,74669,74681,74698,74710,74722,74726,74730,74737,74749,74761,74773,74784,74802,74815,74827,74851,74862,74866,74870,74878,74888,74892,74896,74902,74914,74925,74935,74939,74943,74949,74971,74975,74979,74985,74991,75003,75013,75025,75055,75068,75085,75089,75093,75104,75126,75136,75140,75144,75157,75167,75179,75191,75203,75215,75225,75235,75245,75256,75269,75273,75281,75289,75293,75301,75314,75334,75367,75400,75433,75459,75477,75495,75503,75529,75547,75565,75583,75601,75619,75627,75635,75653,75661,75690,75698,75706,75714,75727,75739,75751,75763,75775,75787,75800,75812,75820,75828,75836,75841,75846,75850,75854,75858,75862,75866,75870,75875,75880,75885,75890,75898,75906,75914,75919,75924,75929,75934,75939,75944,75949,75954,75959,75964,75969,75974,75979,75984,75988,75993,75998,76008,76017,76021,76026,76035,76051,76093,76133,76172,76237,76245,76249,76254,76272,76280,76285,76290,76320,76326,76331,76344,76356,76368,76380,76392,76404,76416,76420,76430,76434,76439,76444,76448,76457,76461,76466,76471,76490,76495,76515,76519,76524,76528,76533,76551,76569,76587,76606,76625,76644,76649,76655,76676,76682,76691,76697,76703,76709,76736,76749,76754,76764,76770,76776,76782,76788,76793,76799,76805,76811,76817,76850,76855,76860,76865,76870,76876,76882,76888,76899,76904,76910,76917,76931,76937,76961,76966,76971,76977,76983,77004,77010,77023,77029,77035,77041,77047,77052,77058,77064,77070,77088,77102,77108,77116,77122,77144,77149,77154,77159,77164,77169,77178,77187,77192],{"__ignoreMap":57},[199,74160,74161,74163,74165,74167],{"class":201,"line":202},[199,74162,871],{"class":205},[199,74164,875],{"class":874},[199,74166,879],{"class":878},[199,74168,882],{"class":205},[199,74170,74171,74173,74175,74177,74179,74181],{"class":201,"line":36},[199,74172,887],{"class":205},[199,74174,194],{"class":874},[199,74176,892],{"class":878},[199,74178,895],{"class":205},[199,74180,899],{"class":898},[199,74182,882],{"class":205},[199,74184,74185],{"class":201,"line":73},[199,74186,907],{"emptyLinePlaceholder":906},[199,74188,74189,74191,74193],{"class":201,"line":333},[199,74190,887],{"class":205},[199,74192,914],{"class":874},[199,74194,882],{"class":205},[199,74196,74197,74199,74201,74203,74205,74207],{"class":201,"line":227},[199,74198,1824],{"class":205},[199,74200,924],{"class":874},[199,74202,927],{"class":878},[199,74204,895],{"class":205},[199,74206,932],{"class":898},[199,74208,882],{"class":205},[199,74210,74211,74213,74215,74217,74219,74221,74223,74225,74227],{"class":201,"line":238},[199,74212,1824],{"class":205},[199,74214,924],{"class":874},[199,74216,967],{"class":878},[199,74218,895],{"class":205},[199,74220,972],{"class":898},[199,74222,951],{"class":878},[199,74224,895],{"class":205},[199,74226,979],{"class":898},[199,74228,882],{"class":205},[199,74230,74231,74233,74235,74237,74239],{"class":201,"line":252},[199,74232,1824],{"class":205},[199,74234,988],{"class":874},[199,74236,991],{"class":205},[199,74238,988],{"class":874},[199,74240,882],{"class":205},[199,74242,74243,74245,74247],{"class":201,"line":388},[199,74244,1824],{"class":205},[199,74246,1002],{"class":874},[199,74248,882],{"class":205},[199,74250,74251,74253],{"class":201,"line":415},[199,74252,9300],{"class":874},[199,74254,1012],{"class":205},[199,74256,74257,74259,74261,74263],{"class":201,"line":426},[199,74258,56954],{"class":1018},[199,74260,1022],{"class":205},[199,74262,1025],{"class":1018},[199,74264,1028],{"class":205},[199,74266,74267,74269,74271,74273],{"class":201,"line":1015},[199,74268,56965],{"class":1018},[199,74270,1022],{"class":205},[199,74272,1025],{"class":1018},[199,74274,1028],{"class":205},[199,74276,74277],{"class":201,"line":1031},[199,74278,2097],{"class":205},[199,74280,74281],{"class":201,"line":1043},[199,74282,907],{"emptyLinePlaceholder":906},[199,74284,74285,74287],{"class":201,"line":1049},[199,74286,59538],{"class":874},[199,74288,1012],{"class":205},[199,74290,74291,74293,74295,74297],{"class":201,"line":1054},[199,74292,59545],{"class":1018},[199,74294,1022],{"class":205},[199,74296,1197],{"class":1018},[199,74298,1028],{"class":205},[199,74300,74301,74303,74305,74307,74309],{"class":201,"line":1062},[199,74302,64336],{"class":1018},[199,74304,1022],{"class":205},[199,74306,3779],{"class":1018},[199,74308,1087],{"class":1086},[199,74310,1028],{"class":205},[199,74312,74313],{"class":201,"line":1075},[199,74314,2097],{"class":205},[199,74316,74317],{"class":201,"line":1092},[199,74318,907],{"emptyLinePlaceholder":906},[199,74320,74321,74324],{"class":201,"line":1107},[199,74322,74323],{"class":878},"    .info",[199,74325,1012],{"class":205},[199,74327,74328,74330,74332,74334,74336],{"class":201,"line":1128},[199,74329,57030],{"class":1018},[199,74331,1022],{"class":205},[199,74333,1083],{"class":1018},[199,74335,1087],{"class":1086},[199,74337,1028],{"class":205},[199,74339,74340,74342,74344,74346,74348,74350],{"class":201,"line":1146},[199,74341,56965],{"class":1018},[199,74343,1022],{"class":205},[199,74345,3528],{"class":1018},[199,74347,1087],{"class":1086},[199,74349,1158],{"class":1018},[199,74351,1028],{"class":205},[199,74353,74354,74356,74358,74360],{"class":201,"line":1163},[199,74355,59545],{"class":1018},[199,74357,1022],{"class":205},[199,74359,1197],{"class":1018},[199,74361,1028],{"class":205},[199,74363,74364],{"class":201,"line":1176},[199,74365,2097],{"class":205},[199,74367,74368],{"class":201,"line":1189},[199,74369,907],{"emptyLinePlaceholder":906},[199,74371,74372,74375],{"class":201,"line":1202},[199,74373,74374],{"class":878},"    .uname",[199,74376,34308],{"class":205},[199,74378,74379,74382],{"class":201,"line":1207},[199,74380,74381],{"class":878},"    .age",[199,74383,34308],{"class":205},[199,74385,74386,74389],{"class":201,"line":1212},[199,74387,74388],{"class":878},"    .salary",[199,74390,1012],{"class":205},[199,74392,74393,74395,74397,74399,74401],{"class":201,"line":1225},[199,74394,57030],{"class":1018},[199,74396,1022],{"class":205},[199,74398,3396],{"class":1018},[199,74400,1087],{"class":1086},[199,74402,1028],{"class":205},[199,74404,74405,74407,74409,74411,74413],{"class":201,"line":1236},[199,74406,57044],{"class":1018},[199,74408,1022],{"class":205},[199,74410,3779],{"class":1018},[199,74412,1087],{"class":1086},[199,74414,1028],{"class":205},[199,74416,74417,74419,74421,74423],{"class":201,"line":1249},[199,74418,64039],{"class":1018},[199,74420,1022],{"class":205},[199,74422,56996],{"class":1018},[199,74424,1028],{"class":205},[199,74426,74427,74429,74431,74433,74435],{"class":201,"line":1262},[199,74428,64009],{"class":1018},[199,74430,1022],{"class":205},[199,74432,3655],{"class":1018},[199,74434,1087],{"class":1086},[199,74436,1028],{"class":205},[199,74438,74439],{"class":201,"line":1275},[199,74440,2097],{"class":205},[199,74442,74443],{"class":201,"line":1287},[199,74444,907],{"emptyLinePlaceholder":906},[199,74446,74447,74450],{"class":201,"line":1292},[199,74448,74449],{"class":878},"    .gender",[199,74451,34308],{"class":205},[199,74453,74454,74457],{"class":201,"line":1297},[199,74455,74456],{"class":878},"    .city",[199,74458,1012],{"class":205},[199,74460,74461,74463,74465,74467,74469],{"class":201,"line":1310},[199,74462,57030],{"class":1018},[199,74464,1022],{"class":205},[199,74466,3396],{"class":1018},[199,74468,1087],{"class":1086},[199,74470,1028],{"class":205},[199,74472,74473,74475,74477,74479,74481],{"class":201,"line":1315},[199,74474,57044],{"class":1018},[199,74476,1022],{"class":205},[199,74478,3904],{"class":1018},[199,74480,1087],{"class":1086},[199,74482,1028],{"class":205},[199,74484,74485,74487,74489,74491],{"class":201,"line":1330},[199,74486,64039],{"class":1018},[199,74488,1022],{"class":205},[199,74490,56996],{"class":1018},[199,74492,1028],{"class":205},[199,74494,74495,74497,74499,74501,74503],{"class":201,"line":1335},[199,74496,64009],{"class":1018},[199,74498,1022],{"class":205},[199,74500,3655],{"class":1018},[199,74502,1087],{"class":1086},[199,74504,1028],{"class":205},[199,74506,74507,74509,74511,74513,74515,74517,74520,74522,74524,74526,74529,74531,74533],{"class":201,"line":1340},[199,74508,64236],{"class":1018},[199,74510,1022],{"class":205},[199,74512,1115],{"class":1018},[199,74514,1087],{"class":1086},[199,74516,1120],{"class":1018},[199,74518,74519],{"class":1018}," rgb",[199,74521,1537],{"class":205},[199,74523,4647],{"class":1018},[199,74525,1912],{"class":205},[199,74527,74528],{"class":1018},"197",[199,74530,1912],{"class":205},[199,74532,74528],{"class":1018},[199,74534,5623],{"class":205},[199,74536,74537],{"class":201,"line":1352},[199,74538,2097],{"class":205},[199,74540,74541],{"class":201,"line":1367},[199,74542,907],{"emptyLinePlaceholder":906},[199,74544,74545,74548],{"class":201,"line":1381},[199,74546,74547],{"class":874},"    button",[199,74549,1012],{"class":205},[199,74551,74552,74554,74556,74558,74560],{"class":201,"line":1396},[199,74553,57044],{"class":1018},[199,74555,1022],{"class":205},[199,74557,3904],{"class":1018},[199,74559,1087],{"class":1086},[199,74561,1028],{"class":205},[199,74563,74564,74566,74568,74570,74572],{"class":201,"line":1401},[199,74565,57030],{"class":1018},[199,74567,1022],{"class":205},[199,74569,3565],{"class":1018},[199,74571,1087],{"class":1086},[199,74573,1028],{"class":205},[199,74575,74576,74578,74580,74583,74585,74587,74589,74592,74594,74596],{"class":201,"line":1411},[199,74577,57143],{"class":1018},[199,74579,1022],{"class":205},[199,74581,74582],{"class":1018},"rgb",[199,74584,1537],{"class":205},[199,74586,4043],{"class":1018},[199,74588,1912],{"class":205},[199,74590,74591],{"class":1018},"187",[199,74593,1912],{"class":205},[199,74595,3384],{"class":1018},[199,74597,5623],{"class":205},[199,74599,74600,74602,74604,74606],{"class":201,"line":1421},[199,74601,59675],{"class":1018},[199,74603,1022],{"class":205},[199,74605,63101],{"class":1018},[199,74607,1028],{"class":205},[199,74609,74610,74612,74614,74616],{"class":201,"line":1426},[199,74611,64236],{"class":1018},[199,74613,1022],{"class":205},[199,74615,1025],{"class":1018},[199,74617,1028],{"class":205},[199,74619,74620],{"class":201,"line":1436},[199,74621,2097],{"class":205},[199,74623,74624],{"class":201,"line":1441},[199,74625,907],{"emptyLinePlaceholder":906},[199,74627,74628,74630,74632],{"class":201,"line":1451},[199,74629,74547],{"class":874},[199,74631,1305],{"class":874},[199,74633,1012],{"class":205},[199,74635,74636,74638,74640,74643],{"class":201,"line":1458},[199,74637,57268],{"class":1018},[199,74639,1022],{"class":205},[199,74641,74642],{"class":1018},"inline-block",[199,74644,1028],{"class":205},[199,74646,74647,74649,74651,74653,74655],{"class":201,"line":1464},[199,74648,57030],{"class":1018},[199,74650,1022],{"class":205},[199,74652,3528],{"class":1018},[199,74654,1087],{"class":1086},[199,74656,1028],{"class":205},[199,74658,74659,74661,74663,74665,74667],{"class":201,"line":1478},[199,74660,57044],{"class":1018},[199,74662,1022],{"class":205},[199,74664,3528],{"class":1018},[199,74666,1087],{"class":1086},[199,74668,1028],{"class":205},[199,74670,74671,74673,74675,74677,74679],{"class":201,"line":1516},[199,74672,59618],{"class":1018},[199,74674,1022],{"class":205},[199,74676,3554],{"class":1018},[199,74678,1087],{"class":1086},[199,74680,1028],{"class":205},[199,74682,74683,74685,74687,74689,74691,74693,74696],{"class":201,"line":1522},[199,74684,64236],{"class":1018},[199,74686,1022],{"class":205},[199,74688,1115],{"class":1018},[199,74690,1087],{"class":1086},[199,74692,1120],{"class":1018},[199,74694,74695],{"class":1018}," #fff",[199,74697,1028],{"class":205},[199,74699,74700,74702,74704,74706,74708],{"class":201,"line":1528},[199,74701,57393],{"class":1018},[199,74703,1022],{"class":205},[199,74705,1909],{"class":1018},[199,74707,1087],{"class":1086},[199,74709,1028],{"class":205},[199,74711,74712,74714,74716,74718,74720],{"class":201,"line":1557},[199,74713,64009],{"class":1018},[199,74715,1022],{"class":205},[199,74717,1115],{"class":1018},[199,74719,1087],{"class":1086},[199,74721,1028],{"class":205},[199,74723,74724],{"class":201,"line":1563},[199,74725,2097],{"class":205},[199,74727,74728],{"class":201,"line":1568},[199,74729,907],{"emptyLinePlaceholder":906},[199,74731,74732,74735],{"class":201,"line":1574},[199,74733,74734],{"class":878},"    .total",[199,74736,1012],{"class":205},[199,74738,74739,74741,74743,74745,74747],{"class":201,"line":1580},[199,74740,57030],{"class":1018},[199,74742,1022],{"class":205},[199,74744,63888],{"class":1018},[199,74746,1087],{"class":1086},[199,74748,1028],{"class":205},[199,74750,74751,74753,74755,74757,74759],{"class":201,"line":1597},[199,74752,57044],{"class":1018},[199,74754,1022],{"class":205},[199,74756,3484],{"class":1018},[199,74758,1087],{"class":1086},[199,74760,1028],{"class":205},[199,74762,74763,74765,74767,74769,74771],{"class":201,"line":1602},[199,74764,59618],{"class":1018},[199,74766,1022],{"class":205},[199,74768,3484],{"class":1018},[199,74770,1087],{"class":1086},[199,74772,1028],{"class":205},[199,74774,74775,74777,74779,74782],{"class":201,"line":1608},[199,74776,59545],{"class":1018},[199,74778,1022],{"class":205},[199,74780,74781],{"class":1018},"right",[199,74783,1028],{"class":205},[199,74785,74786,74788,74790,74792,74794,74796,74798,74800],{"class":201,"line":1640},[199,74787,56965],{"class":1018},[199,74789,1022],{"class":205},[199,74791,3484],{"class":1018},[199,74793,1087],{"class":1086},[199,74795,1158],{"class":1018},[199,74797,4954],{"class":1018},[199,74799,1087],{"class":1086},[199,74801,1028],{"class":205},[199,74803,74804,74807,74809,74811,74813],{"class":201,"line":1653},[199,74805,74806],{"class":1018},"      padding-right",[199,74808,1022],{"class":205},[199,74810,3528],{"class":1018},[199,74812,1087],{"class":1086},[199,74814,1028],{"class":205},[199,74816,74817,74819,74821,74823,74825],{"class":201,"line":1673},[199,74818,57181],{"class":1018},[199,74820,1022],{"class":205},[199,74822,3604],{"class":1018},[199,74824,1087],{"class":1086},[199,74826,1028],{"class":205},[199,74828,74829,74831,74833,74835,74837,74840,74842,74845,74847,74849],{"class":201,"line":1690},[199,74830,57143],{"class":1018},[199,74832,1022],{"class":205},[199,74834,74582],{"class":1018},[199,74836,1537],{"class":205},[199,74838,74839],{"class":1018},"237",[199,74841,1912],{"class":205},[199,74843,74844],{"class":1018},"235",[199,74846,1912],{"class":205},[199,74848,74844],{"class":1018},[199,74850,5623],{"class":205},[199,74852,74853,74856,74858,74860],{"class":201,"line":1706},[199,74854,74855],{"class":1018},"      box-sizing",[199,74857,1022],{"class":205},[199,74859,62764],{"class":1018},[199,74861,1028],{"class":205},[199,74863,74864],{"class":201,"line":1712},[199,74865,2097],{"class":205},[199,74867,74868],{"class":201,"line":1720},[199,74869,907],{"emptyLinePlaceholder":906},[199,74871,74872,74874,74876],{"class":201,"line":1725},[199,74873,74734],{"class":878},[199,74875,1305],{"class":874},[199,74877,1012],{"class":205},[199,74879,74880,74882,74884,74886],{"class":201,"line":1731},[199,74881,59675],{"class":1018},[199,74883,1022],{"class":205},[199,74885,59680],{"class":1018},[199,74887,1028],{"class":205},[199,74889,74890],{"class":201,"line":1745},[199,74891,2097],{"class":205},[199,74893,74894],{"class":201,"line":1754},[199,74895,907],{"emptyLinePlaceholder":906},[199,74897,74898,74900],{"class":201,"line":1763},[199,74899,67282],{"class":874},[199,74901,1012],{"class":205},[199,74903,74904,74906,74908,74910,74912],{"class":201,"line":1768},[199,74905,57030],{"class":1018},[199,74907,1022],{"class":205},[199,74909,63888],{"class":1018},[199,74911,1087],{"class":1086},[199,74913,1028],{"class":205},[199,74915,74916,74918,74920,74923],{"class":201,"line":19628},[199,74917,56965],{"class":1018},[199,74919,1022],{"class":205},[199,74921,74922],{"class":1018},"auto",[199,74924,1028],{"class":205},[199,74926,74927,74929,74931,74933],{"class":201,"line":19641},[199,74928,67289],{"class":1018},[199,74930,1022],{"class":205},[199,74932,67294],{"class":1018},[199,74934,1028],{"class":205},[199,74936,74937],{"class":201,"line":19646},[199,74938,2097],{"class":205},[199,74940,74941],{"class":201,"line":19660},[199,74942,907],{"emptyLinePlaceholder":906},[199,74944,74945,74947],{"class":201,"line":19665},[199,74946,67374],{"class":874},[199,74948,1012],{"class":205},[199,74950,74951,74953,74955,74957,74959,74961,74963,74965,74967,74969],{"class":201,"line":19671},[199,74952,57143],{"class":1018},[199,74954,1022],{"class":205},[199,74956,74582],{"class":1018},[199,74958,1537],{"class":205},[199,74960,74839],{"class":1018},[199,74962,1912],{"class":205},[199,74964,74844],{"class":1018},[199,74966,1912],{"class":205},[199,74968,74844],{"class":1018},[199,74970,5623],{"class":205},[199,74972,74973],{"class":201,"line":19676},[199,74974,2097],{"class":205},[199,74976,74977],{"class":201,"line":19690},[199,74978,907],{"emptyLinePlaceholder":906},[199,74980,74981,74983],{"class":201,"line":19695},[199,74982,67374],{"class":874},[199,74984,34308],{"class":205},[199,74986,74987,74989],{"class":201,"line":19700},[199,74988,67440],{"class":874},[199,74990,1012],{"class":205},[199,74992,74993,74995,74997,74999,75001],{"class":201,"line":19714},[199,74994,57044],{"class":1018},[199,74996,1022],{"class":205},[199,74998,3359],{"class":1018},[199,75000,1087],{"class":1086},[199,75002,1028],{"class":205},[199,75004,75005,75007,75009,75011],{"class":201,"line":19726},[199,75006,59545],{"class":1018},[199,75008,1022],{"class":205},[199,75010,26580],{"class":1018},[199,75012,1028],{"class":205},[199,75014,75015,75017,75019,75021,75023],{"class":201,"line":19731},[199,75016,57181],{"class":1018},[199,75018,1022],{"class":205},[199,75020,3629],{"class":1018},[199,75022,1087],{"class":1086},[199,75024,1028],{"class":205},[199,75026,75027,75029,75031,75033,75035,75037,75039,75041,75044,75046,75049,75051,75053],{"class":201,"line":19744},[199,75028,64236],{"class":1018},[199,75030,1022],{"class":205},[199,75032,1115],{"class":1018},[199,75034,1087],{"class":1086},[199,75036,1120],{"class":1018},[199,75038,74519],{"class":1018},[199,75040,1537],{"class":205},[199,75042,75043],{"class":1018},"228",[199,75045,1912],{"class":205},[199,75047,75048],{"class":1018},"225",[199,75050,1912],{"class":205},[199,75052,75048],{"class":1018},[199,75054,5623],{"class":205},[199,75056,75057,75060,75062,75064,75066],{"class":201,"line":19749},[199,75058,75059],{"class":1018},"      padding-left",[199,75061,1022],{"class":205},[199,75063,1909],{"class":1018},[199,75065,1087],{"class":1086},[199,75067,1028],{"class":205},[199,75069,75070,75072,75074,75076,75079,75081,75083],{"class":201,"line":19754},[199,75071,64119],{"class":1018},[199,75073,1022],{"class":205},[199,75075,30964],{"class":1018},[199,75077,75078],{"class":1018}," linear",[199,75080,64126],{"class":1018},[199,75082,3774],{"class":1086},[199,75084,1028],{"class":205},[199,75086,75087],{"class":201,"line":19759},[199,75088,2097],{"class":205},[199,75090,75091],{"class":201,"line":19772},[199,75092,907],{"emptyLinePlaceholder":906},[199,75094,75095,75098,75100,75102],{"class":201,"line":19777},[199,75096,75097],{"class":874},"    tbody",[199,75099,72403],{"class":874},[199,75101,63199],{"class":878},[199,75103,1012],{"class":205},[199,75105,75106,75108,75110,75112,75114,75116,75118,75120,75122,75124],{"class":201,"line":35475},[199,75107,57143],{"class":1018},[199,75109,1022],{"class":205},[199,75111,74582],{"class":1018},[199,75113,1537],{"class":205},[199,75115,74839],{"class":1018},[199,75117,1912],{"class":205},[199,75119,74844],{"class":1018},[199,75121,1912],{"class":205},[199,75123,74844],{"class":1018},[199,75125,5623],{"class":205},[199,75127,75128,75130,75132,75134],{"class":201,"line":35481},[199,75129,64284],{"class":1018},[199,75131,1022],{"class":205},[199,75133,64289],{"class":1018},[199,75135,1028],{"class":205},[199,75137,75138],{"class":201,"line":35487},[199,75139,2097],{"class":205},[199,75141,75142],{"class":201,"line":35493},[199,75143,907],{"emptyLinePlaceholder":906},[199,75145,75146,75148,75150,75153,75155],{"class":201,"line":35499},[199,75147,75097],{"class":874},[199,75149,72403],{"class":874},[199,75151,75152],{"class":874}," td",[199,75154,4338],{"class":874},[199,75156,1012],{"class":205},[199,75158,75159,75161,75163,75165],{"class":201,"line":35510},[199,75160,57268],{"class":1018},[199,75162,1022],{"class":205},[199,75164,63128],{"class":1018},[199,75166,1028],{"class":205},[199,75168,75169,75171,75173,75175,75177],{"class":201,"line":35516},[199,75170,57030],{"class":1018},[199,75172,1022],{"class":205},[199,75174,3985],{"class":1018},[199,75176,1087],{"class":1086},[199,75178,1028],{"class":205},[199,75180,75181,75183,75185,75187,75189],{"class":201,"line":35536},[199,75182,57044],{"class":1018},[199,75184,1022],{"class":205},[199,75186,3904],{"class":1018},[199,75188,1087],{"class":1086},[199,75190,1028],{"class":205},[199,75192,75193,75195,75197,75199,75201],{"class":201,"line":35542},[199,75194,59618],{"class":1018},[199,75196,1022],{"class":205},[199,75198,3904],{"class":1018},[199,75200,1087],{"class":1086},[199,75202,1028],{"class":205},[199,75204,75205,75207,75209,75211,75213],{"class":201,"line":35553},[199,75206,64336],{"class":1018},[199,75208,1022],{"class":205},[199,75210,1925],{"class":1018},[199,75212,1087],{"class":1086},[199,75214,1028],{"class":205},[199,75216,75217,75219,75221,75223],{"class":201,"line":35559},[199,75218,59675],{"class":1018},[199,75220,1022],{"class":205},[199,75222,63101],{"class":1018},[199,75224,1028],{"class":205},[199,75226,75227,75229,75231,75233],{"class":201,"line":35565},[199,75228,59545],{"class":1018},[199,75230,1022],{"class":205},[199,75232,1197],{"class":1018},[199,75234,1028],{"class":205},[199,75236,75237,75239,75241,75243],{"class":201,"line":35571},[199,75238,66229],{"class":1018},[199,75240,1022],{"class":205},[199,75242,56996],{"class":1018},[199,75244,1028],{"class":205},[199,75246,75247,75249,75251,75254],{"class":201,"line":35577},[199,75248,57143],{"class":1018},[199,75250,1022],{"class":205},[199,75252,75253],{"class":1018},"orange",[199,75255,1028],{"class":205},[199,75257,75258,75260,75262,75265,75267],{"class":201,"line":35583},[199,75259,57393],{"class":1018},[199,75261,1022],{"class":205},[199,75263,75264],{"class":1018},"12.5",[199,75266,1087],{"class":1086},[199,75268,1028],{"class":205},[199,75270,75271],{"class":201,"line":35589},[199,75272,2097],{"class":205},[199,75274,75275,75277,75279],{"class":201,"line":35595},[199,75276,2112],{"class":205},[199,75278,1002],{"class":874},[199,75280,882],{"class":205},[199,75282,75283,75285,75287],{"class":201,"line":35615},[199,75284,1414],{"class":205},[199,75286,914],{"class":874},[199,75288,882],{"class":205},[199,75290,75291],{"class":201,"line":35621},[199,75292,907],{"emptyLinePlaceholder":906},[199,75294,75295,75297,75299],{"class":201,"line":35637},[199,75296,887],{"class":205},[199,75298,1431],{"class":874},[199,75300,882],{"class":205},[199,75302,75303,75305,75307,75310,75312],{"class":201,"line":35643},[199,75304,1824],{"class":205},[199,75306,14],{"class":874},[199,75308,75309],{"class":205},">学生就业统计表\u003C\u002F",[199,75311,14],{"class":874},[199,75313,882],{"class":205},[199,75315,75316,75318,75320,75322,75324,75326,75328,75330,75332],{"class":201,"line":35657},[199,75317,1824],{"class":205},[199,75319,68884],{"class":874},[199,75321,55745],{"class":878},[199,75323,895],{"class":205},[199,75325,64923],{"class":898},[199,75327,71329],{"class":878},[199,75329,895],{"class":205},[199,75331,34618],{"class":898},[199,75333,882],{"class":205},[199,75335,75336,75338,75340,75342,75344,75346,75348,75350,75352,75354,75356,75359,75361,75363,75365],{"class":201,"line":35663},[199,75337,921],{"class":205},[199,75339,56080],{"class":874},[199,75341,56083],{"class":878},[199,75343,895],{"class":205},[199,75345,64958],{"class":898},[199,75347,967],{"class":878},[199,75349,895],{"class":205},[199,75351,71355],{"class":898},[199,75353,63279],{"class":878},[199,75355,895],{"class":205},[199,75357,75358],{"class":898},"\"姓名\"",[199,75360,55745],{"class":878},[199,75362,895],{"class":205},[199,75364,71355],{"class":898},[199,75366,882],{"class":205},[199,75368,75369,75371,75373,75375,75377,75379,75381,75383,75385,75387,75389,75392,75394,75396,75398],{"class":201,"line":35678},[199,75370,921],{"class":205},[199,75372,56080],{"class":874},[199,75374,56083],{"class":878},[199,75376,895],{"class":205},[199,75378,64958],{"class":898},[199,75380,967],{"class":878},[199,75382,895],{"class":205},[199,75384,71383],{"class":898},[199,75386,63279],{"class":878},[199,75388,895],{"class":205},[199,75390,75391],{"class":898},"\"年龄\"",[199,75393,55745],{"class":878},[199,75395,895],{"class":205},[199,75397,71383],{"class":898},[199,75399,882],{"class":205},[199,75401,75402,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422,75425,75427,75429,75431],{"class":201,"line":35684},[199,75403,921],{"class":205},[199,75405,56080],{"class":874},[199,75407,56083],{"class":878},[199,75409,895],{"class":205},[199,75411,64958],{"class":898},[199,75413,967],{"class":878},[199,75415,895],{"class":205},[199,75417,71485],{"class":898},[199,75419,63279],{"class":878},[199,75421,895],{"class":205},[199,75423,75424],{"class":898},"\"薪资\"",[199,75426,55745],{"class":878},[199,75428,895],{"class":205},[199,75430,71485],{"class":898},[199,75432,882],{"class":205},[199,75434,75435,75437,75439,75441,75443,75445,75447,75449,75451,75453,75455,75457],{"class":201,"line":35693},[199,75436,921],{"class":205},[199,75438,71403],{"class":874},[199,75440,967],{"class":878},[199,75442,895],{"class":205},[199,75444,71410],{"class":898},[199,75446,17818],{"class":878},[199,75448,895],{"class":205},[199,75450,10549],{"class":898},[199,75452,55745],{"class":878},[199,75454,895],{"class":205},[199,75456,71410],{"class":898},[199,75458,882],{"class":205},[199,75460,75461,75463,75465,75467,75469,75471,75473,75475],{"class":201,"line":35699},[199,75462,57493],{"class":205},[199,75464,71425],{"class":874},[199,75466,68910],{"class":878},[199,75468,895],{"class":205},[199,75470,12824],{"class":898},[199,75472,71434],{"class":205},[199,75474,71425],{"class":874},[199,75476,882],{"class":205},[199,75478,75479,75481,75483,75485,75487,75489,75491,75493],{"class":201,"line":35708},[199,75480,57493],{"class":205},[199,75482,71425],{"class":874},[199,75484,68910],{"class":878},[199,75486,895],{"class":205},[199,75488,12893],{"class":898},[199,75490,71453],{"class":205},[199,75492,71425],{"class":874},[199,75494,882],{"class":205},[199,75496,75497,75499,75501],{"class":201,"line":35714},[199,75498,1404],{"class":205},[199,75500,71403],{"class":874},[199,75502,882],{"class":205},[199,75504,75505,75507,75509,75511,75513,75515,75517,75519,75521,75523,75525,75527],{"class":201,"line":35720},[199,75506,921],{"class":205},[199,75508,71403],{"class":874},[199,75510,967],{"class":878},[199,75512,895],{"class":205},[199,75514,71507],{"class":898},[199,75516,17818],{"class":878},[199,75518,895],{"class":205},[199,75520,10549],{"class":898},[199,75522,55745],{"class":878},[199,75524,895],{"class":205},[199,75526,71507],{"class":898},[199,75528,882],{"class":205},[199,75530,75531,75533,75535,75537,75539,75541,75543,75545],{"class":201,"line":35729},[199,75532,57493],{"class":205},[199,75534,71425],{"class":874},[199,75536,68910],{"class":878},[199,75538,895],{"class":205},[199,75540,71528],{"class":898},[199,75542,71531],{"class":205},[199,75544,71425],{"class":874},[199,75546,882],{"class":205},[199,75548,75549,75551,75553,75555,75557,75559,75561,75563],{"class":201,"line":35735},[199,75550,57493],{"class":205},[199,75552,71425],{"class":874},[199,75554,68910],{"class":878},[199,75556,895],{"class":205},[199,75558,71548],{"class":898},[199,75560,71551],{"class":205},[199,75562,71425],{"class":874},[199,75564,882],{"class":205},[199,75566,75567,75569,75571,75573,75575,75577,75579,75581],{"class":201,"line":35746},[199,75568,57493],{"class":205},[199,75570,71425],{"class":874},[199,75572,68910],{"class":878},[199,75574,895],{"class":205},[199,75576,71568],{"class":898},[199,75578,71571],{"class":205},[199,75580,71425],{"class":874},[199,75582,882],{"class":205},[199,75584,75585,75587,75589,75591,75593,75595,75597,75599],{"class":201,"line":35752},[199,75586,57493],{"class":205},[199,75588,71425],{"class":874},[199,75590,68910],{"class":878},[199,75592,895],{"class":205},[199,75594,71588],{"class":898},[199,75596,71591],{"class":205},[199,75598,71425],{"class":874},[199,75600,882],{"class":205},[199,75602,75603,75605,75607,75609,75611,75613,75615,75617],{"class":201,"line":35771},[199,75604,57493],{"class":205},[199,75606,71425],{"class":874},[199,75608,68910],{"class":878},[199,75610,895],{"class":205},[199,75612,71608],{"class":898},[199,75614,71611],{"class":205},[199,75616,71425],{"class":874},[199,75618,882],{"class":205},[199,75620,75621,75623,75625],{"class":201,"line":35777},[199,75622,1404],{"class":205},[199,75624,71403],{"class":874},[199,75626,882],{"class":205},[199,75628,75629,75631,75633],{"class":201,"line":35788},[199,75630,921],{"class":205},[199,75632,56146],{"class":874},[199,75634,882],{"class":205},[199,75636,75637,75639,75641,75644,75646,75649,75651],{"class":201,"line":35794},[199,75638,57493],{"class":205},[199,75640,199],{"class":874},[199,75642,75643],{"class":205},">+\u003C\u002F",[199,75645,199],{"class":874},[199,75647,75648],{"class":205},">添加\u003C\u002F",[199,75650,56146],{"class":874},[199,75652,882],{"class":205},[199,75654,75655,75657,75659],{"class":201,"line":35814},[199,75656,2112],{"class":205},[199,75658,68884],{"class":874},[199,75660,882],{"class":205},[199,75662,75663,75665,75667,75669,75671,75673,75676,75678,75681,75683,75686,75688],{"class":201,"line":35830},[199,75664,1824],{"class":205},[199,75666,1220],{"class":874},[199,75668,55745],{"class":878},[199,75670,895],{"class":205},[199,75672,64839],{"class":898},[199,75674,75675],{"class":205},">共有数据 \u003C",[199,75677,199],{"class":874},[199,75679,75680],{"class":205},">0\u003C\u002F",[199,75682,199],{"class":874},[199,75684,75685],{"class":205},"> 条\u003C\u002F",[199,75687,1220],{"class":874},[199,75689,882],{"class":205},[199,75691,75692,75694,75696],{"class":201,"line":35836},[199,75693,1824],{"class":205},[199,75695,3227],{"class":874},[199,75697,882],{"class":205},[199,75699,75700,75702,75704],{"class":201,"line":35850},[199,75701,921],{"class":205},[199,75703,3230],{"class":874},[199,75705,882],{"class":205},[199,75707,75708,75710,75712],{"class":201,"line":35856},[199,75709,57493],{"class":205},[199,75711,3233],{"class":874},[199,75713,882],{"class":205},[199,75715,75716,75718,75720,75723,75725],{"class":201,"line":35862},[199,75717,57561],{"class":205},[199,75719,3236],{"class":874},[199,75721,75722],{"class":205},">ID\u003C\u002F",[199,75724,3236],{"class":874},[199,75726,882],{"class":205},[199,75728,75729,75731,75733,75735,75737],{"class":201,"line":35873},[199,75730,57561],{"class":205},[199,75732,3236],{"class":874},[199,75734,71714],{"class":205},[199,75736,3236],{"class":874},[199,75738,882],{"class":205},[199,75740,75741,75743,75745,75747,75749],{"class":201,"line":35879},[199,75742,57561],{"class":205},[199,75744,3236],{"class":874},[199,75746,71727],{"class":205},[199,75748,3236],{"class":874},[199,75750,882],{"class":205},[199,75752,75753,75755,75757,75759,75761],{"class":201,"line":35885},[199,75754,57561],{"class":205},[199,75756,3236],{"class":874},[199,75758,71740],{"class":205},[199,75760,3236],{"class":874},[199,75762,882],{"class":205},[199,75764,75765,75767,75769,75771,75773],{"class":201,"line":35895},[199,75766,57561],{"class":205},[199,75768,3236],{"class":874},[199,75770,71753],{"class":205},[199,75772,3236],{"class":874},[199,75774,882],{"class":205},[199,75776,75777,75779,75781,75783,75785],{"class":201,"line":35901},[199,75778,57561],{"class":205},[199,75780,3236],{"class":874},[199,75782,71766],{"class":205},[199,75784,3236],{"class":874},[199,75786,882],{"class":205},[199,75788,75789,75791,75793,75796,75798],{"class":201,"line":35912},[199,75790,57561],{"class":205},[199,75792,3236],{"class":874},[199,75794,75795],{"class":205},">录入时间\u003C\u002F",[199,75797,3236],{"class":874},[199,75799,882],{"class":205},[199,75801,75802,75804,75806,75808,75810],{"class":201,"line":35918},[199,75803,57561],{"class":205},[199,75805,3236],{"class":874},[199,75807,71779],{"class":205},[199,75809,3236],{"class":874},[199,75811,882],{"class":205},[199,75813,75814,75816,75818],{"class":201,"line":35928},[199,75815,57666],{"class":205},[199,75817,3233],{"class":874},[199,75819,882],{"class":205},[199,75821,75822,75824,75826],{"class":201,"line":35933},[199,75823,1404],{"class":205},[199,75825,3230],{"class":874},[199,75827,882],{"class":205},[199,75829,75830,75832,75834],{"class":201,"line":35939},[199,75831,921],{"class":205},[199,75833,3273],{"class":874},[199,75835,882],{"class":205},[199,75837,75838],{"class":201,"line":35988},[199,75839,75840],{"class":1454},"      \u003C!-- \u003Ctr>\n",[199,75842,75843],{"class":201,"line":36035},[199,75844,75845],{"class":1454},"        \u003Ctd>1\u003C\u002Ftd>\n",[199,75847,75848],{"class":201,"line":36040},[199,75849,75845],{"class":1454},[199,75851,75852],{"class":201,"line":36046},[199,75853,75845],{"class":1454},[199,75855,75856],{"class":201,"line":36065},[199,75857,75845],{"class":1454},[199,75859,75860],{"class":201,"line":36071},[199,75861,75845],{"class":1454},[199,75863,75864],{"class":201,"line":36090},[199,75865,75845],{"class":1454},[199,75867,75868],{"class":201,"line":36096},[199,75869,75845],{"class":1454},[199,75871,75872],{"class":201,"line":36102},[199,75873,75874],{"class":1454},"        \u003Ctd>\n",[199,75876,75877],{"class":201,"line":36112},[199,75878,75879],{"class":1454},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[199,75881,75882],{"class":201,"line":36117},[199,75883,75884],{"class":1454},"        \u003C\u002Ftd>\n",[199,75886,75887],{"class":201,"line":36123},[199,75888,75889],{"class":1454},"      \u003C\u002Ftr> -->\n",[199,75891,75892,75894,75896],{"class":201,"line":36139},[199,75893,1404],{"class":205},[199,75895,3273],{"class":874},[199,75897,882],{"class":205},[199,75899,75900,75902,75904],{"class":201,"line":36184},[199,75901,2112],{"class":205},[199,75903,3227],{"class":874},[199,75905,882],{"class":205},[199,75907,75908,75910,75912],{"class":201,"line":36190},[199,75909,1824],{"class":205},[199,75911,1446],{"class":874},[199,75913,882],{"class":205},[199,75915,75916],{"class":201,"line":36196},[199,75917,75918],{"class":1454},"    \u002F\u002F const initData = [{\n",[199,75920,75921],{"class":201,"line":36202},[199,75922,75923],{"class":1454},"    \u002F\u002F   unameId: 1,\n",[199,75925,75926],{"class":201,"line":36213},[199,75927,75928],{"class":1454},"    \u002F\u002F   uname: '华晨宇',\n",[199,75930,75931],{"class":201,"line":36219},[199,75932,75933],{"class":1454},"    \u002F\u002F   age: 22,\n",[199,75935,75936],{"class":201,"line":36225},[199,75937,75938],{"class":1454},"    \u002F\u002F   salary: 12000,\n",[199,75940,75941],{"class":201,"line":36231},[199,75942,75943],{"class":1454},"    \u002F\u002F   gender: '男',\n",[199,75945,75946],{"class":201,"line":36249},[199,75947,75948],{"class":1454},"    \u002F\u002F   city: '北京',\n",[199,75950,75951],{"class":201,"line":36263},[199,75952,75953],{"class":1454},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[199,75955,75956],{"class":201,"line":36272},[199,75957,75958],{"class":1454},"    \u002F\u002F }]\n",[199,75960,75961],{"class":201,"line":36281},[199,75962,75963],{"class":1454},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[199,75965,75966],{"class":201,"line":36290},[199,75967,75968],{"class":1454},"    \u002F\u002F 1.渲染业务\n",[199,75970,75971],{"class":201,"line":36299},[199,75972,75973],{"class":1454},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[199,75975,75976],{"class":201,"line":36305},[199,75977,75978],{"class":1454},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[199,75980,75981],{"class":201,"line":36311},[199,75982,75983],{"class":1454},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[199,75985,75986],{"class":201,"line":36319},[199,75987,907],{"emptyLinePlaceholder":906},[199,75989,75990],{"class":201,"line":36324},[199,75991,75992],{"class":1454},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[199,75994,75995],{"class":201,"line":36330},[199,75996,75997],{"class":1454},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[199,75999,76000,76002,76004,76006],{"class":201,"line":36341},[199,76001,14084],{"class":1086},[199,76003,59954],{"class":1018},[199,76005,16425],{"class":1086},[199,76007,1475],{"class":205},[199,76009,76010,76013,76015],{"class":201,"line":36347},[199,76011,76012],{"class":205},"    console.",[199,76014,60506],{"class":878},[199,76016,2107],{"class":205},[199,76018,76019],{"class":201,"line":36367},[199,76020,907],{"emptyLinePlaceholder":906},[199,76022,76023],{"class":201,"line":36373},[199,76024,76025],{"class":1454},"    \u002F\u002F 时间函数\n",[199,76027,76028,76030,76033],{"class":201,"line":36379},[199,76029,72343],{"class":1086},[199,76031,76032],{"class":878}," getTime",[199,76034,13716],{"class":205},[199,76036,76037,76039,76042,76044,76046,76049],{"class":201,"line":36385},[199,76038,60487],{"class":1086},[199,76040,76041],{"class":1018}," date",[199,76043,16425],{"class":1086},[199,76045,14441],{"class":1086},[199,76047,76048],{"class":878}," Date",[199,76050,4892],{"class":205},[199,76052,76053,76055,76057,76059,76062,76065,76067,76069,76071,76074,76077,76079,76081,76083,76085,76087,76089,76091],{"class":201,"line":36402},[199,76054,60487],{"class":1086},[199,76056,18949],{"class":1018},[199,76058,16425],{"class":1086},[199,76060,76061],{"class":205}," date.",[199,76063,76064],{"class":878},"getHours",[199,76066,15911],{"class":205},[199,76068,887],{"class":1086},[199,76070,4954],{"class":1018},[199,76072,76073],{"class":1086}," ?",[199,76075,76076],{"class":898}," '0'",[199,76078,1698],{"class":1086},[199,76080,76061],{"class":205},[199,76082,76064],{"class":878},[199,76084,15911],{"class":205},[199,76086,3938],{"class":1086},[199,76088,76061],{"class":205},[199,76090,76064],{"class":878},[199,76092,4892],{"class":205},[199,76094,76095,76097,76100,76102,76104,76107,76109,76111,76113,76115,76117,76119,76121,76123,76125,76127,76129,76131],{"class":201,"line":36408},[199,76096,60487],{"class":1086},[199,76098,76099],{"class":1018}," m",[199,76101,16425],{"class":1086},[199,76103,76061],{"class":205},[199,76105,76106],{"class":878},"getMinutes",[199,76108,15911],{"class":205},[199,76110,887],{"class":1086},[199,76112,4954],{"class":1018},[199,76114,76073],{"class":1086},[199,76116,76076],{"class":898},[199,76118,1698],{"class":1086},[199,76120,76061],{"class":205},[199,76122,76106],{"class":878},[199,76124,15911],{"class":205},[199,76126,3938],{"class":1086},[199,76128,76061],{"class":205},[199,76130,76106],{"class":878},[199,76132,4892],{"class":205},[199,76134,76135,76137,76139,76141,76143,76146,76148,76150,76152,76154,76156,76158,76160,76162,76164,76166,76168,76170],{"class":201,"line":36414},[199,76136,60487],{"class":1086},[199,76138,11315],{"class":1018},[199,76140,16425],{"class":1086},[199,76142,76061],{"class":205},[199,76144,76145],{"class":878},"getSeconds",[199,76147,15911],{"class":205},[199,76149,887],{"class":1086},[199,76151,4954],{"class":1018},[199,76153,76073],{"class":1086},[199,76155,76076],{"class":898},[199,76157,1698],{"class":1086},[199,76159,76061],{"class":205},[199,76161,76145],{"class":878},[199,76163,15911],{"class":205},[199,76165,3938],{"class":1086},[199,76167,76061],{"class":205},[199,76169,76145],{"class":878},[199,76171,4892],{"class":205},[199,76173,76174,76176,76179,76181,76183,76186,76188,76191,76193,76196,76198,76200,76203,76205,76207,76209,76211,76213,76215,76218,76220,76223,76225,76228,76230,76232,76234],{"class":201,"line":36420},[199,76175,60487],{"class":1086},[199,76177,76178],{"class":1018}," str",[199,76180,16425],{"class":1086},[199,76182,65162],{"class":898},[199,76184,76185],{"class":205},"date",[199,76187,3638],{"class":898},[199,76189,76190],{"class":878},"getFullYear",[199,76192,5340],{"class":898},[199,76194,76195],{"class":898},"}\u002F${",[199,76197,76185],{"class":205},[199,76199,3638],{"class":898},[199,76201,76202],{"class":878},"getMonth",[199,76204,15911],{"class":898},[199,76206,2028],{"class":1086},[199,76208,1495],{"class":1018},[199,76210,76195],{"class":898},[199,76212,76185],{"class":205},[199,76214,3638],{"class":898},[199,76216,76217],{"class":878},"getDate",[199,76219,5340],{"class":898},[199,76221,76222],{"class":898},"} ${",[199,76224,3498],{"class":205},[199,76226,76227],{"class":898},"}:${",[199,76229,3624],{"class":205},[199,76231,76227],{"class":898},[199,76233,3774],{"class":205},[199,76235,76236],{"class":898},"}`\n",[199,76238,76239,76242],{"class":201,"line":36426},[199,76240,76241],{"class":1086},"      return",[199,76243,76244],{"class":205}," str\n",[199,76246,76247],{"class":201,"line":36432},[199,76248,2097],{"class":205},[199,76250,76251],{"class":201,"line":36459},[199,76252,76253],{"class":1454},"    \u002F\u002F 渲染函数\n",[199,76255,76256,76258,76260,76262,76264,76266,76268,76270],{"class":201,"line":36483},[199,76257,14084],{"class":1086},[199,76259,72006],{"class":1018},[199,76261,16425],{"class":1086},[199,76263,56655],{"class":205},[199,76265,56658],{"class":878},[199,76267,1537],{"class":205},[199,76269,72017],{"class":898},[199,76271,1594],{"class":205},[199,76273,76274,76276,76278],{"class":201,"line":36489},[199,76275,72343],{"class":1086},[199,76277,72346],{"class":878},[199,76279,13716],{"class":205},[199,76281,76282],{"class":201,"line":36495},[199,76283,76284],{"class":1454},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[199,76286,76287],{"class":201,"line":36501},[199,76288,76289],{"class":1454},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[199,76291,76292,76294,76297,76299,76301,76304,76306,76308,76310,76313,76315,76318],{"class":201,"line":36512},[199,76293,60487],{"class":1086},[199,76295,76296],{"class":1018}," trArr",[199,76298,16425],{"class":1086},[199,76300,1628],{"class":205},[199,76302,76303],{"class":878},"map",[199,76305,1537],{"class":205},[199,76307,56708],{"class":1086},[199,76309,1484],{"class":205},[199,76311,76312],{"class":8113},"ele",[199,76314,1912],{"class":205},[199,76316,76317],{"class":8113},"index",[199,76319,1513],{"class":205},[199,76321,76322,76324],{"class":201,"line":36523},[199,76323,17612],{"class":1086},[199,76325,72427],{"class":898},[199,76327,76328],{"class":201,"line":36529},[199,76329,76330],{"class":898},"      \u003Ctr>\n",[199,76332,76333,76335,76337,76339,76342],{"class":201,"line":36546},[199,76334,72432],{"class":898},[199,76336,76312],{"class":205},[199,76338,3638],{"class":898},[199,76340,76341],{"class":205},"unameId",[199,76343,72447],{"class":898},[199,76345,76346,76348,76350,76352,76354],{"class":201,"line":36569},[199,76347,72432],{"class":898},[199,76349,76312],{"class":205},[199,76351,3638],{"class":898},[199,76353,72463],{"class":205},[199,76355,72447],{"class":898},[199,76357,76358,76360,76362,76364,76366],{"class":201,"line":36592},[199,76359,72432],{"class":898},[199,76361,76312],{"class":205},[199,76363,3638],{"class":898},[199,76365,72480],{"class":205},[199,76367,72447],{"class":898},[199,76369,76370,76372,76374,76376,76378],{"class":201,"line":36598},[199,76371,72432],{"class":898},[199,76373,76312],{"class":205},[199,76375,3638],{"class":898},[199,76377,72497],{"class":205},[199,76379,72447],{"class":898},[199,76381,76382,76384,76386,76388,76390],{"class":201,"line":36603},[199,76383,72432],{"class":898},[199,76385,76312],{"class":205},[199,76387,3638],{"class":898},[199,76389,72514],{"class":205},[199,76391,72447],{"class":898},[199,76393,76394,76396,76398,76400,76402],{"class":201,"line":36612},[199,76395,72432],{"class":898},[199,76397,76312],{"class":205},[199,76399,3638],{"class":898},[199,76401,72531],{"class":205},[199,76403,72447],{"class":898},[199,76405,76406,76408,76410,76412,76414],{"class":201,"line":36622},[199,76407,72432],{"class":898},[199,76409,76312],{"class":205},[199,76411,3638],{"class":898},[199,76413,5301],{"class":205},[199,76415,72447],{"class":898},[199,76417,76418],{"class":201,"line":36628},[199,76419,75874],{"class":898},[199,76421,76422,76425,76427],{"class":201,"line":36633},[199,76423,76424],{"class":898},"          \u003Ca href=\"#\" data-id=\"${",[199,76426,76317],{"class":205},[199,76428,76429],{"class":898},"}\">删除\u003C\u002Fa>\n",[199,76431,76432],{"class":201,"line":36639},[199,76433,75884],{"class":898},[199,76435,76436],{"class":201,"line":36652},[199,76437,76438],{"class":898},"      \u003C\u002Ftr>\n",[199,76440,76441],{"class":201,"line":36658},[199,76442,76443],{"class":898},"  `\n",[199,76445,76446],{"class":201,"line":36669},[199,76447,67074],{"class":205},[199,76449,76450,76452,76454],{"class":201,"line":36680},[199,76451,60503],{"class":205},[199,76453,60506],{"class":878},[199,76455,76456],{"class":205},"(trArr)\n",[199,76458,76459],{"class":201,"line":36699},[199,76460,907],{"emptyLinePlaceholder":906},[199,76462,76463],{"class":201,"line":52358},[199,76464,76465],{"class":1454},"      \u002F\u002F (2) 把数组转换为字符串join\n",[199,76467,76468],{"class":201,"line":52363},[199,76469,76470],{"class":1454},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[199,76472,76473,76475,76477,76480,76483,76485,76488],{"class":201,"line":52372},[199,76474,72358],{"class":205},[199,76476,895],{"class":1086},[199,76478,76479],{"class":205}," trArr.",[199,76481,76482],{"class":878},"join",[199,76484,1537],{"class":205},[199,76486,76487],{"class":898},"''",[199,76489,1594],{"class":205},[199,76491,76492],{"class":201,"line":52381},[199,76493,76494],{"class":1454},"      \u002F\u002F 显示共有几条\n",[199,76496,76497,76499,76501,76503,76506,76509,76511,76513],{"class":201,"line":52386},[199,76498,58030],{"class":205},[199,76500,56658],{"class":878},[199,76502,1537],{"class":205},[199,76504,76505],{"class":898},"'.total span'",[199,76507,76508],{"class":205},").innerHTML ",[199,76510,895],{"class":1086},[199,76512,1628],{"class":205},[199,76514,58090],{"class":1018},[199,76516,76517],{"class":201,"line":52391},[199,76518,2097],{"class":205},[199,76520,76521],{"class":201,"line":52396},[199,76522,76523],{"class":1454},"    \u002F\u002F render()\n",[199,76525,76526],{"class":201,"line":52409},[199,76527,907],{"emptyLinePlaceholder":906},[199,76529,76530],{"class":201,"line":52414},[199,76531,76532],{"class":1454},"    \u002F\u002F 获取DOM对象\n",[199,76534,76535,76537,76539,76541,76543,76545,76547,76549],{"class":201,"line":52423},[199,76536,14084],{"class":1086},[199,76538,72080],{"class":1018},[199,76540,16425],{"class":1086},[199,76542,56655],{"class":205},[199,76544,56658],{"class":878},[199,76546,1537],{"class":205},[199,76548,72091],{"class":898},[199,76550,1594],{"class":205},[199,76552,76553,76555,76557,76559,76561,76563,76565,76567],{"class":201,"line":52432},[199,76554,14084],{"class":1086},[199,76556,71907],{"class":1018},[199,76558,16425],{"class":1086},[199,76560,56655],{"class":205},[199,76562,56658],{"class":878},[199,76564,1537],{"class":205},[199,76566,71918],{"class":898},[199,76568,1594],{"class":205},[199,76570,76571,76573,76575,76577,76579,76581,76583,76585],{"class":201,"line":52449},[199,76572,14084],{"class":1086},[199,76574,18547],{"class":1018},[199,76576,16425],{"class":1086},[199,76578,56655],{"class":205},[199,76580,56658],{"class":878},[199,76582,1537],{"class":205},[199,76584,71937],{"class":898},[199,76586,1594],{"class":205},[199,76588,76590,76592,76594,76596,76598,76600,76602,76604],{"class":201,"line":76589},231,[199,76591,14084],{"class":1086},[199,76593,71966],{"class":1018},[199,76595,16425],{"class":1086},[199,76597,56655],{"class":205},[199,76599,56658],{"class":878},[199,76601,1537],{"class":205},[199,76603,71977],{"class":898},[199,76605,1594],{"class":205},[199,76607,76609,76611,76613,76615,76617,76619,76621,76623],{"class":201,"line":76608},232,[199,76610,14084],{"class":1086},[199,76612,71946],{"class":1018},[199,76614,16425],{"class":1086},[199,76616,56655],{"class":205},[199,76618,56658],{"class":878},[199,76620,1537],{"class":205},[199,76622,71957],{"class":898},[199,76624,1594],{"class":205},[199,76626,76628,76630,76632,76634,76636,76638,76640,76642],{"class":201,"line":76627},233,[199,76629,14084],{"class":1086},[199,76631,71986],{"class":1018},[199,76633,16425],{"class":1086},[199,76635,56655],{"class":205},[199,76637,56658],{"class":878},[199,76639,1537],{"class":205},[199,76641,71997],{"class":898},[199,76643,1594],{"class":205},[199,76645,76647],{"class":201,"line":76646},234,[199,76648,907],{"emptyLinePlaceholder":906},[199,76650,76652],{"class":201,"line":76651},235,[199,76653,76654],{"class":1454},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[199,76656,76658,76660,76662,76664,76666,76668,76670,76672,76674],{"class":201,"line":76657},236,[199,76659,72098],{"class":205},[199,76661,60072],{"class":878},[199,76663,1537],{"class":205},[199,76665,72105],{"class":898},[199,76667,1912],{"class":205},[199,76669,56708],{"class":1086},[199,76671,1484],{"class":205},[199,76673,3166],{"class":8113},[199,76675,1513],{"class":205},[199,76677,76679],{"class":201,"line":76678},237,[199,76680,76681],{"class":1454},"      \u002F\u002F 禁止浏览器跳转\n",[199,76683,76685,76687,76689],{"class":201,"line":76684},238,[199,76686,72125],{"class":205},[199,76688,72128],{"class":878},[199,76690,4892],{"class":205},[199,76692,76694],{"class":201,"line":76693},239,[199,76695,76696],{"class":1454},"      \u002F\u002F 非空判断\n",[199,76698,76700],{"class":201,"line":76699},240,[199,76701,76702],{"class":1454},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[199,76704,76706],{"class":201,"line":76705},241,[199,76707,76708],{"class":1454},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[199,76710,76712,76714,76716,76718,76721,76723,76726,76729,76731,76733],{"class":201,"line":76711},242,[199,76713,56739],{"class":1086},[199,76715,1484],{"class":205},[199,76717,3313],{"class":1086},[199,76719,76720],{"class":205},"uname.value ",[199,76722,73616],{"class":1086},[199,76724,76725],{"class":1086}," !",[199,76727,76728],{"class":205},"age.value ",[199,76730,73616],{"class":1086},[199,76732,76725],{"class":1086},[199,76734,76735],{"class":205},"salary.value) {\n",[199,76737,76739,76741,76743,76745,76747],{"class":201,"line":76738},243,[199,76740,17612],{"class":1086},[199,76742,72199],{"class":878},[199,76744,1537],{"class":205},[199,76746,72204],{"class":898},[199,76748,1594],{"class":205},[199,76750,76752],{"class":201,"line":76751},244,[199,76753,2092],{"class":205},[199,76755,76757,76759,76761],{"class":201,"line":76756},245,[199,76758,60266],{"class":205},[199,76760,1534],{"class":878},[199,76762,76763],{"class":205},"({\n",[199,76765,76767],{"class":201,"line":76766},246,[199,76768,76769],{"class":1454},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[199,76771,76773],{"class":201,"line":76772},247,[199,76774,76775],{"class":1454},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[199,76777,76779],{"class":201,"line":76778},248,[199,76780,76781],{"class":1454},"        \u002F\u002F 对象的序号应为数组长度+1\n",[199,76783,76785],{"class":201,"line":76784},249,[199,76786,76787],{"class":1454},"        \u002F\u002F unameId: arr.length + 1,\n",[199,76789,76791],{"class":201,"line":76790},250,[199,76792,907],{"emptyLinePlaceholder":906},[199,76794,76796],{"class":201,"line":76795},251,[199,76797,76798],{"class":1454},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[199,76800,76802],{"class":201,"line":76801},252,[199,76803,76804],{"class":1454},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[199,76806,76808],{"class":201,"line":76807},253,[199,76809,76810],{"class":1454},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[199,76812,76814],{"class":201,"line":76813},254,[199,76815,76816],{"class":1454},"        \u002F\u002F 0当假看\n",[199,76818,76820,76823,76825,76827,76830,76832,76834,76836,76839,76841,76843,76846,76848],{"class":201,"line":76819},255,[199,76821,76822],{"class":205},"        unameId: arr.",[199,76824,1631],{"class":1018},[199,76826,76073],{"class":1086},[199,76828,76829],{"class":205}," arr[arr.",[199,76831,1631],{"class":1018},[199,76833,1958],{"class":1086},[199,76835,1495],{"class":1018},[199,76837,76838],{"class":205},"].unameId ",[199,76840,2028],{"class":1086},[199,76842,1495],{"class":1018},[199,76844,76845],{"class":1086}," :",[199,76847,1495],{"class":1018},[199,76849,34308],{"class":205},[199,76851,76853],{"class":201,"line":76852},256,[199,76854,72252],{"class":205},[199,76856,76858],{"class":201,"line":76857},257,[199,76859,72257],{"class":205},[199,76861,76863],{"class":201,"line":76862},258,[199,76864,72267],{"class":205},[199,76866,76868],{"class":201,"line":76867},259,[199,76869,72262],{"class":205},[199,76871,76873],{"class":201,"line":76872},260,[199,76874,76875],{"class":205},"        city: city.value,\n",[199,76877,76879],{"class":201,"line":76878},261,[199,76880,76881],{"class":1454},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[199,76883,76885],{"class":201,"line":76884},262,[199,76886,76887],{"class":1454},"        \u002F\u002F time: new Date().toDateString()\n",[199,76889,76891,76894,76897],{"class":201,"line":76890},263,[199,76892,76893],{"class":205},"        time: ",[199,76895,76896],{"class":878},"getTime",[199,76898,4892],{"class":205},[199,76900,76902],{"class":201,"line":76901},264,[199,76903,67074],{"class":205},[199,76905,76907],{"class":201,"line":76906},265,[199,76908,76909],{"class":1454},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[199,76911,76913,76915],{"class":201,"line":76912},266,[199,76914,72327],{"class":878},[199,76916,4892],{"class":205},[199,76918,76920,76922,76924,76926,76928],{"class":201,"line":76919},267,[199,76921,72310],{"class":1018},[199,76923,3638],{"class":205},[199,76925,72315],{"class":878},[199,76927,15911],{"class":205},[199,76929,76930],{"class":1454},"\u002F\u002F重置表单\n",[199,76932,76934],{"class":201,"line":76933},268,[199,76935,76936],{"class":1454},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[199,76938,76940,76943,76945,76947,76950,76952,76954,76956,76958],{"class":201,"line":76939},269,[199,76941,76942],{"class":205},"      localStorage.",[199,76944,73913],{"class":878},[199,76946,1537],{"class":205},[199,76948,76949],{"class":898},"'data'",[199,76951,1912],{"class":205},[199,76953,73923],{"class":1018},[199,76955,3638],{"class":205},[199,76957,73928],{"class":878},[199,76959,76960],{"class":205},"(arr))\n",[199,76962,76964],{"class":201,"line":76963},270,[199,76965,36302],{"class":205},[199,76967,76969],{"class":201,"line":76968},271,[199,76970,907],{"emptyLinePlaceholder":906},[199,76972,76974],{"class":201,"line":76973},272,[199,76975,76976],{"class":1454},"    \u002F\u002F 3.删除业务\n",[199,76978,76980],{"class":201,"line":76979},273,[199,76981,76982],{"class":1454},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[199,76984,76986,76988,76990,76992,76994,76996,76998,77000,77002],{"class":201,"line":76985},274,[199,76987,72600],{"class":205},[199,76989,60072],{"class":878},[199,76991,1537],{"class":205},[199,76993,60077],{"class":898},[199,76995,1912],{"class":205},[199,76997,56708],{"class":1086},[199,76999,1484],{"class":205},[199,77001,3166],{"class":8113},[199,77003,1513],{"class":205},[199,77005,77007],{"class":201,"line":77006},275,[199,77008,77009],{"class":1454},"      \u002F\u002F 判断是否点击的是删除按钮\n",[199,77011,77013,77015,77017,77019,77021],{"class":201,"line":77012},276,[199,77014,56739],{"class":1086},[199,77016,69293],{"class":205},[199,77018,56745],{"class":1086},[199,77020,70515],{"class":898},[199,77022,1513],{"class":205},[199,77024,77026],{"class":201,"line":77025},277,[199,77027,77028],{"class":1454},"        \u002F\u002F alert(1)\n",[199,77030,77032],{"class":201,"line":77031},278,[199,77033,77034],{"class":1454},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[199,77036,77038],{"class":201,"line":77037},279,[199,77039,77040],{"class":1454},"        \u002F\u002F console.log(e.target)\n",[199,77042,77044],{"class":201,"line":77043},280,[199,77045,77046],{"class":1454},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[199,77048,77050],{"class":201,"line":77049},281,[199,77051,907],{"emptyLinePlaceholder":906},[199,77053,77055],{"class":201,"line":77054},282,[199,77056,77057],{"class":1454},"        \u002F\u002F 确认框，确然是否真的要删除\n",[199,77059,77061],{"class":201,"line":77060},283,[199,77062,77063],{"class":1454},"        \u002F\u002F confirm()为确认框\n",[199,77065,77067],{"class":201,"line":77066},284,[199,77068,77069],{"class":1454},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[199,77071,77073,77075,77077,77080,77082,77085],{"class":201,"line":77072},285,[199,77074,2017],{"class":1086},[199,77076,1484],{"class":205},[199,77078,77079],{"class":878},"confirm",[199,77081,1537],{"class":205},[199,77083,77084],{"class":898},"'您确定要删除这条数据吗？'",[199,77086,77087],{"class":205},")) {\n",[199,77089,77091,77094,77096,77098,77100],{"class":201,"line":77090},286,[199,77092,77093],{"class":205},"          arr.",[199,77095,60269],{"class":878},[199,77097,72653],{"class":205},[199,77099,1115],{"class":1018},[199,77101,1594],{"class":205},[199,77103,77105],{"class":201,"line":77104},287,[199,77106,77107],{"class":1454},"          \u002F\u002F 3.4 重新渲染页面\n",[199,77109,77111,77114],{"class":201,"line":77110},288,[199,77112,77113],{"class":878},"          render",[199,77115,4892],{"class":205},[199,77117,77119],{"class":201,"line":77118},289,[199,77120,77121],{"class":1454},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[199,77123,77125,77128,77130,77132,77134,77136,77138,77140,77142],{"class":201,"line":77124},290,[199,77126,77127],{"class":205},"          localStorage.",[199,77129,73913],{"class":878},[199,77131,1537],{"class":205},[199,77133,76949],{"class":898},[199,77135,1912],{"class":205},[199,77137,73923],{"class":1018},[199,77139,3638],{"class":205},[199,77141,73928],{"class":878},[199,77143,76960],{"class":205},[199,77145,77147],{"class":201,"line":77146},291,[199,77148,1046],{"class":205},[199,77150,77152],{"class":201,"line":77151},292,[199,77153,2092],{"class":205},[199,77155,77157],{"class":201,"line":77156},293,[199,77158,907],{"emptyLinePlaceholder":906},[199,77160,77162],{"class":201,"line":77161},294,[199,77163,36302],{"class":205},[199,77165,77167],{"class":201,"line":77166},295,[199,77168,907],{"emptyLinePlaceholder":906},[199,77170,77172,77174,77176],{"class":201,"line":77171},296,[199,77173,2112],{"class":205},[199,77175,1446],{"class":874},[199,77177,882],{"class":205},[199,77179,77181,77183,77185],{"class":201,"line":77180},297,[199,77182,1414],{"class":205},[199,77184,1431],{"class":874},[199,77186,882],{"class":205},[199,77188,77190],{"class":201,"line":77189},298,[199,77191,907],{"emptyLinePlaceholder":906},[199,77193,77195,77197,77199],{"class":201,"line":77194},299,[199,77196,1414],{"class":205},[199,77198,194],{"class":874},[199,77200,882],{"class":205},[14,77202,77204],{"id":77203},"_36-正则表达式","3.6 正则表达式",[31,77206,77207],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[31,77209,77210],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[31,77212,77213],{},"正则表达式的作用：",[176,77215,77216,77223,77229],{},[27,77217,77218,77219,77222],{},"表单验证（ ",[49,77220,77221],{},"匹配"," ）",[27,77224,77225,77226,77222],{},"过滤敏感词（ ",[49,77227,77228],{},"替换",[27,77230,77231,77232,77222],{},"字符串中提取我们想要的部分（ ",[49,77233,77234],{},"提取",[19,77236,77238],{"id":77237},"_361-语法","3.6.1 语法",[31,77240,77241],{},"正则表达式使用步骤：",[24,77243,77244,77247],{},[27,77245,77246],{},"定义规则",[27,77248,77249],{},"查找是否匹配",[31,77251,77252],{},"正则表达式里边不需要写引号",[31,77254,77255],{},[55,77256],{"alt":57,"src":77257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[31,77259,77260],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[31,77262,77263],{},"reg.test(str)",[31,77265,77266],{},[55,77267],{"alt":57,"src":77268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[31,77270,77271],{},[55,77272],{"alt":57,"src":77273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[19,77275,77277],{"id":77276},"_362-元字符","3.6.2 元字符",[24,77279,77280,77283,77286,77289,77296],{},[27,77281,77282],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[27,77284,77285],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[27,77287,77288],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[27,77290,77291,77292],{},"正则验证工具：",[2867,77293,77294],{"href":77294,"rel":77295},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[2871],[27,77297,77298],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[627,77300,77302],{"id":77301},"_3621-边界符","3.6.2.1 边界符",[31,77304,77305],{},[55,77306],{"alt":57,"src":77307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[31,77309,77310],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[31,77312,77313],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[31,77315,77316],{},"只匹配一次",[31,77318,77319],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[627,77321,77323],{"id":77322},"_3622-量词","3.6.2.2 量词",[31,77325,77326],{},[55,77327],{"alt":57,"src":77328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[31,77330,77331],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[627,77333,77335],{"id":77334},"_3623-元字符","3.6.2.3 元字符",[31,77337,77338],{},[55,77339],{"alt":57,"src":77340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[31,77342,77343],{},"匹配的是a或b或c []只选一个",[31,77345,77346],{},[55,77347],{"alt":57,"src":77348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[31,77350,77351],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[31,77353,77354],{},[55,77355],{"alt":57,"src":77356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[31,77358,77359],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[31,77361,77362],{},[55,77363],{"alt":57,"src":77364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[190,77366,77368],{"className":192,"code":77367,"language":194,"meta":57,"style":57},"\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",[196,77369,77370,77380,77394,77398,77406,77420,77440,77452,77460,77464,77472,77480,77485,77516,77543,77571,77575,77580,77608,77639,77644,77649,77680,77712,77744,77748,77753,77784,77814,77844,77848,77853,77884,77915,77945,77975,77979,77984,78017,78021,78026,78057,78088,78092,78097,78128,78158,78189,78193,78198,78230,78261,78292,78319,78350,78382,78415,78446,78477,78509,78540,78548,78556,78560],{"__ignoreMap":57},[199,77371,77372,77374,77376,77378],{"class":201,"line":202},[199,77373,871],{"class":205},[199,77375,875],{"class":874},[199,77377,879],{"class":878},[199,77379,882],{"class":205},[199,77381,77382,77384,77386,77388,77390,77392],{"class":201,"line":36},[199,77383,887],{"class":205},[199,77385,194],{"class":874},[199,77387,892],{"class":878},[199,77389,895],{"class":205},[199,77391,899],{"class":898},[199,77393,882],{"class":205},[199,77395,77396],{"class":201,"line":73},[199,77397,907],{"emptyLinePlaceholder":906},[199,77399,77400,77402,77404],{"class":201,"line":333},[199,77401,887],{"class":205},[199,77403,914],{"class":874},[199,77405,882],{"class":205},[199,77407,77408,77410,77412,77414,77416,77418],{"class":201,"line":227},[199,77409,1824],{"class":205},[199,77411,924],{"class":874},[199,77413,927],{"class":878},[199,77415,895],{"class":205},[199,77417,932],{"class":898},[199,77419,882],{"class":205},[199,77421,77422,77424,77426,77428,77430,77432,77434,77436,77438],{"class":201,"line":238},[199,77423,1824],{"class":205},[199,77425,924],{"class":874},[199,77427,967],{"class":878},[199,77429,895],{"class":205},[199,77431,972],{"class":898},[199,77433,951],{"class":878},[199,77435,895],{"class":205},[199,77437,979],{"class":898},[199,77439,882],{"class":205},[199,77441,77442,77444,77446,77448,77450],{"class":201,"line":252},[199,77443,1824],{"class":205},[199,77445,988],{"class":874},[199,77447,991],{"class":205},[199,77449,988],{"class":874},[199,77451,882],{"class":205},[199,77453,77454,77456,77458],{"class":201,"line":388},[199,77455,1414],{"class":205},[199,77457,914],{"class":874},[199,77459,882],{"class":205},[199,77461,77462],{"class":201,"line":415},[199,77463,907],{"emptyLinePlaceholder":906},[199,77465,77466,77468,77470],{"class":201,"line":426},[199,77467,887],{"class":205},[199,77469,1431],{"class":874},[199,77471,882],{"class":205},[199,77473,77474,77476,77478],{"class":201,"line":1015},[199,77475,1824],{"class":205},[199,77477,1446],{"class":874},[199,77479,882],{"class":205},[199,77481,77482],{"class":201,"line":1031},[199,77483,77484],{"class":1454},"    \u002F\u002F 元字符中\n",[199,77486,77487,77489,77491,77493,77495,77498,77500,77502,77505,77507,77510,77513],{"class":201,"line":1043},[199,77488,76012],{"class":205},[199,77490,60506],{"class":878},[199,77492,1537],{"class":205},[199,77494,3664],{"class":898},[199,77496,77497],{"class":50817},"哈",[199,77499,3664],{"class":898},[199,77501,3638],{"class":205},[199,77503,77504],{"class":878},"test",[199,77506,1537],{"class":205},[199,77508,77509],{"class":898},"'哈'",[199,77511,77512],{"class":205},"))  ",[199,77514,77515],{"class":1454},"\u002F\u002Ftrue\n",[199,77517,77518,77520,77522,77524,77526,77528,77530,77532,77534,77536,77539,77541],{"class":201,"line":1049},[199,77519,76012],{"class":205},[199,77521,60506],{"class":878},[199,77523,1537],{"class":205},[199,77525,3664],{"class":898},[199,77527,77497],{"class":50817},[199,77529,3664],{"class":898},[199,77531,3638],{"class":205},[199,77533,77504],{"class":878},[199,77535,1537],{"class":205},[199,77537,77538],{"class":898},"'哈哈'",[199,77540,77512],{"class":205},[199,77542,77515],{"class":1454},[199,77544,77545,77547,77549,77551,77553,77555,77557,77559,77561,77563,77566,77569],{"class":201,"line":1054},[199,77546,76012],{"class":205},[199,77548,60506],{"class":878},[199,77550,1537],{"class":205},[199,77552,3664],{"class":898},[199,77554,77497],{"class":50817},[199,77556,3664],{"class":898},[199,77558,3638],{"class":205},[199,77560,77504],{"class":878},[199,77562,1537],{"class":205},[199,77564,77565],{"class":898},"'二哈'",[199,77567,77568],{"class":205},"))   ",[199,77570,77515],{"class":1454},[199,77572,77573],{"class":201,"line":1062},[199,77574,907],{"emptyLinePlaceholder":906},[199,77576,77577],{"class":201,"line":1075},[199,77578,77579],{"class":1454},"    \u002F\u002F 1.边界符\n",[199,77581,77582,77584,77586,77588,77590,77592,77594,77596,77598,77600,77602,77604,77606],{"class":201,"line":1092},[199,77583,76012],{"class":205},[199,77585,60506],{"class":878},[199,77587,1537],{"class":205},[199,77589,3664],{"class":898},[199,77591,4040],{"class":1086},[199,77593,77497],{"class":50817},[199,77595,3664],{"class":898},[199,77597,3638],{"class":205},[199,77599,77504],{"class":878},[199,77601,1537],{"class":205},[199,77603,77509],{"class":898},[199,77605,77512],{"class":205},[199,77607,77515],{"class":1454},[199,77609,77610,77612,77614,77616,77618,77620,77622,77624,77626,77628,77630,77632,77634,77636],{"class":201,"line":1107},[199,77611,76012],{"class":205},[199,77613,60506],{"class":878},[199,77615,1537],{"class":205},[199,77617,3664],{"class":898},[199,77619,4040],{"class":1086},[199,77621,77497],{"class":50817},[199,77623,3387],{"class":1086},[199,77625,3664],{"class":898},[199,77627,3638],{"class":205},[199,77629,77504],{"class":878},[199,77631,1537],{"class":205},[199,77633,77538],{"class":898},[199,77635,77512],{"class":205},[199,77637,77638],{"class":1454},"\u002F\u002Ffalse\n",[199,77640,77641],{"class":201,"line":1128},[199,77642,77643],{"class":1454},"    \u002F\u002F 2.量词\n",[199,77645,77646],{"class":201,"line":1146},[199,77647,77648],{"class":1454},"    \u002F\u002F 量词 * 类似于 >= 0\n",[199,77650,77651,77653,77655,77657,77659,77661,77663,77666,77668,77670,77672,77674,77676,77678],{"class":201,"line":1163},[199,77652,76012],{"class":205},[199,77654,60506],{"class":878},[199,77656,1537],{"class":205},[199,77658,3664],{"class":898},[199,77660,4040],{"class":1086},[199,77662,77497],{"class":50817},[199,77664,77665],{"class":1086},"*$",[199,77667,3664],{"class":898},[199,77669,3638],{"class":205},[199,77671,77504],{"class":878},[199,77673,1537],{"class":205},[199,77675,77538],{"class":898},[199,77677,77512],{"class":205},[199,77679,77515],{"class":1454},[199,77681,77682,77684,77686,77688,77690,77692,77694,77696,77698,77700,77702,77704,77707,77709],{"class":201,"line":1176},[199,77683,76012],{"class":205},[199,77685,60506],{"class":878},[199,77687,1537],{"class":205},[199,77689,3664],{"class":898},[199,77691,4040],{"class":1086},[199,77693,77497],{"class":50817},[199,77695,77665],{"class":1086},[199,77697,3664],{"class":898},[199,77699,3638],{"class":205},[199,77701,77504],{"class":878},[199,77703,1537],{"class":205},[199,77705,77706],{"class":898},"'二哈好傻'",[199,77708,77512],{"class":205},[199,77710,77711],{"class":1454},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[199,77713,77714,77716,77718,77720,77722,77724,77726,77728,77730,77732,77734,77736,77739,77741],{"class":201,"line":1189},[199,77715,76012],{"class":205},[199,77717,60506],{"class":878},[199,77719,1537],{"class":205},[199,77721,3664],{"class":898},[199,77723,4040],{"class":1086},[199,77725,77497],{"class":50817},[199,77727,77665],{"class":1086},[199,77729,3664],{"class":898},[199,77731,3638],{"class":205},[199,77733,77504],{"class":878},[199,77735,1537],{"class":205},[199,77737,77738],{"class":898},"'哈好哈'",[199,77740,77568],{"class":205},[199,77742,77743],{"class":1454},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[199,77745,77746],{"class":201,"line":1202},[199,77747,907],{"emptyLinePlaceholder":906},[199,77749,77750],{"class":201,"line":1207},[199,77751,77752],{"class":1454},"    \u002F\u002F +类似于>=1\n",[199,77754,77755,77757,77759,77761,77763,77765,77767,77770,77772,77774,77776,77778,77780,77782],{"class":201,"line":1212},[199,77756,76012],{"class":205},[199,77758,60506],{"class":878},[199,77760,1537],{"class":205},[199,77762,3664],{"class":898},[199,77764,4040],{"class":1086},[199,77766,77497],{"class":50817},[199,77768,77769],{"class":1086},"+$",[199,77771,3664],{"class":898},[199,77773,3638],{"class":205},[199,77775,77504],{"class":878},[199,77777,1537],{"class":205},[199,77779,77538],{"class":898},[199,77781,77512],{"class":205},[199,77783,77515],{"class":1454},[199,77785,77786,77788,77790,77792,77794,77796,77798,77800,77802,77804,77806,77808,77810,77812],{"class":201,"line":1225},[199,77787,76012],{"class":205},[199,77789,60506],{"class":878},[199,77791,1537],{"class":205},[199,77793,3664],{"class":898},[199,77795,4040],{"class":1086},[199,77797,77497],{"class":50817},[199,77799,77769],{"class":1086},[199,77801,3664],{"class":898},[199,77803,3638],{"class":205},[199,77805,77504],{"class":878},[199,77807,1537],{"class":205},[199,77809,77706],{"class":898},[199,77811,77512],{"class":205},[199,77813,77711],{"class":1454},[199,77815,77816,77818,77820,77822,77824,77826,77828,77830,77832,77834,77836,77838,77840,77842],{"class":201,"line":1236},[199,77817,76012],{"class":205},[199,77819,60506],{"class":878},[199,77821,1537],{"class":205},[199,77823,3664],{"class":898},[199,77825,4040],{"class":1086},[199,77827,77497],{"class":50817},[199,77829,77769],{"class":1086},[199,77831,3664],{"class":898},[199,77833,3638],{"class":205},[199,77835,77504],{"class":878},[199,77837,1537],{"class":205},[199,77839,77738],{"class":898},[199,77841,77568],{"class":205},[199,77843,77638],{"class":1454},[199,77845,77846],{"class":201,"line":1249},[199,77847,907],{"emptyLinePlaceholder":906},[199,77849,77850],{"class":201,"line":1262},[199,77851,77852],{"class":1454},"    \u002F\u002F ?类似于0次或一次\n",[199,77854,77855,77857,77859,77861,77863,77865,77868,77870,77872,77874,77876,77878,77880,77882],{"class":201,"line":1275},[199,77856,76012],{"class":205},[199,77858,60506],{"class":878},[199,77860,1537],{"class":205},[199,77862,3664],{"class":898},[199,77864,4040],{"class":1086},[199,77866,77867],{"class":50817},"哈？",[199,77869,3387],{"class":1086},[199,77871,3664],{"class":898},[199,77873,3638],{"class":205},[199,77875,77504],{"class":878},[199,77877,1537],{"class":205},[199,77879,76487],{"class":898},[199,77881,77568],{"class":205},[199,77883,77515],{"class":1454},[199,77885,77886,77888,77890,77892,77894,77896,77898,77901,77903,77905,77907,77909,77911,77913],{"class":201,"line":1287},[199,77887,76012],{"class":205},[199,77889,60506],{"class":878},[199,77891,1537],{"class":205},[199,77893,3664],{"class":898},[199,77895,4040],{"class":1086},[199,77897,77497],{"class":50817},[199,77899,77900],{"class":1086},"?$",[199,77902,3664],{"class":898},[199,77904,3638],{"class":205},[199,77906,77504],{"class":878},[199,77908,1537],{"class":205},[199,77910,77538],{"class":898},[199,77912,77512],{"class":205},[199,77914,77638],{"class":1454},[199,77916,77917,77919,77921,77923,77925,77927,77929,77931,77933,77935,77937,77939,77941,77943],{"class":201,"line":1292},[199,77918,76012],{"class":205},[199,77920,60506],{"class":878},[199,77922,1537],{"class":205},[199,77924,3664],{"class":898},[199,77926,4040],{"class":1086},[199,77928,77497],{"class":50817},[199,77930,77900],{"class":1086},[199,77932,3664],{"class":898},[199,77934,3638],{"class":205},[199,77936,77504],{"class":878},[199,77938,1537],{"class":205},[199,77940,77706],{"class":898},[199,77942,77512],{"class":205},[199,77944,77711],{"class":1454},[199,77946,77947,77949,77951,77953,77955,77957,77959,77961,77963,77965,77967,77969,77971,77973],{"class":201,"line":1297},[199,77948,76012],{"class":205},[199,77950,60506],{"class":878},[199,77952,1537],{"class":205},[199,77954,3664],{"class":898},[199,77956,4040],{"class":1086},[199,77958,77497],{"class":50817},[199,77960,77900],{"class":1086},[199,77962,3664],{"class":898},[199,77964,3638],{"class":205},[199,77966,77504],{"class":878},[199,77968,1537],{"class":205},[199,77970,77738],{"class":898},[199,77972,77512],{"class":205},[199,77974,77638],{"class":1454},[199,77976,77977],{"class":201,"line":1310},[199,77978,907],{"emptyLinePlaceholder":906},[199,77980,77981],{"class":201,"line":1315},[199,77982,77983],{"class":1454},"    \u002F\u002F {n}写几，就必须出现几次\n",[199,77985,77986,77988,77990,77992,77994,77996,77998,78001,78003,78005,78007,78009,78012,78015],{"class":201,"line":1330},[199,77987,76012],{"class":205},[199,77989,60506],{"class":878},[199,77991,1537],{"class":205},[199,77993,3664],{"class":898},[199,77995,4040],{"class":1086},[199,77997,77497],{"class":50817},[199,77999,78000],{"class":1086},"{4}$",[199,78002,3664],{"class":898},[199,78004,3638],{"class":205},[199,78006,77504],{"class":878},[199,78008,1537],{"class":205},[199,78010,78011],{"class":898},"'哈哈哈哈'",[199,78013,78014],{"class":205},")) ",[199,78016,77515],{"class":1454},[199,78018,78019],{"class":201,"line":1335},[199,78020,907],{"emptyLinePlaceholder":906},[199,78022,78023],{"class":201,"line":1340},[199,78024,78025],{"class":1454},"    \u002F\u002F {n,}大于等于n次\n",[199,78027,78028,78030,78032,78034,78036,78038,78040,78043,78045,78047,78049,78051,78053,78055],{"class":201,"line":1352},[199,78029,76012],{"class":205},[199,78031,60506],{"class":878},[199,78033,1537],{"class":205},[199,78035,3664],{"class":898},[199,78037,4040],{"class":1086},[199,78039,77497],{"class":50817},[199,78041,78042],{"class":1086},"{4,}$",[199,78044,3664],{"class":898},[199,78046,3638],{"class":205},[199,78048,77504],{"class":878},[199,78050,1537],{"class":205},[199,78052,78011],{"class":898},[199,78054,78014],{"class":205},[199,78056,77515],{"class":1454},[199,78058,78059,78061,78063,78065,78067,78069,78071,78073,78075,78077,78079,78081,78084,78086],{"class":201,"line":1367},[199,78060,76012],{"class":205},[199,78062,60506],{"class":878},[199,78064,1537],{"class":205},[199,78066,3664],{"class":898},[199,78068,4040],{"class":1086},[199,78070,77497],{"class":50817},[199,78072,78042],{"class":1086},[199,78074,3664],{"class":898},[199,78076,3638],{"class":205},[199,78078,77504],{"class":878},[199,78080,1537],{"class":205},[199,78082,78083],{"class":898},"'哈哈哈哈哈'",[199,78085,78014],{"class":205},[199,78087,77515],{"class":1454},[199,78089,78090],{"class":201,"line":1381},[199,78091,907],{"emptyLinePlaceholder":906},[199,78093,78094],{"class":201,"line":1396},[199,78095,78096],{"class":1454},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[199,78098,78099,78101,78103,78105,78107,78109,78111,78114,78116,78118,78120,78122,78124,78126],{"class":201,"line":1401},[199,78100,76012],{"class":205},[199,78102,60506],{"class":878},[199,78104,1537],{"class":205},[199,78106,3664],{"class":898},[199,78108,4040],{"class":1086},[199,78110,77497],{"class":50817},[199,78112,78113],{"class":1086},"{4,6}$",[199,78115,3664],{"class":898},[199,78117,3638],{"class":205},[199,78119,77504],{"class":878},[199,78121,1537],{"class":205},[199,78123,78011],{"class":898},[199,78125,78014],{"class":205},[199,78127,77515],{"class":1454},[199,78129,78130,78132,78134,78136,78138,78140,78142,78144,78146,78148,78150,78152,78154,78156],{"class":201,"line":1411},[199,78131,76012],{"class":205},[199,78133,60506],{"class":878},[199,78135,1537],{"class":205},[199,78137,3664],{"class":898},[199,78139,4040],{"class":1086},[199,78141,77497],{"class":50817},[199,78143,78113],{"class":1086},[199,78145,3664],{"class":898},[199,78147,3638],{"class":205},[199,78149,77504],{"class":878},[199,78151,1537],{"class":205},[199,78153,78083],{"class":898},[199,78155,78014],{"class":205},[199,78157,77515],{"class":1454},[199,78159,78160,78162,78164,78166,78168,78170,78172,78174,78176,78178,78180,78182,78185,78187],{"class":201,"line":1421},[199,78161,76012],{"class":205},[199,78163,60506],{"class":878},[199,78165,1537],{"class":205},[199,78167,3664],{"class":898},[199,78169,4040],{"class":1086},[199,78171,77497],{"class":50817},[199,78173,78113],{"class":1086},[199,78175,3664],{"class":898},[199,78177,3638],{"class":205},[199,78179,77504],{"class":878},[199,78181,1537],{"class":205},[199,78183,78184],{"class":898},"'哈哈哈哈哈哈哈'",[199,78186,78014],{"class":205},[199,78188,77638],{"class":1454},[199,78190,78191],{"class":201,"line":1426},[199,78192,907],{"emptyLinePlaceholder":906},[199,78194,78195],{"class":201,"line":1436},[199,78196,78197],{"class":1454},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[199,78199,78200,78202,78204,78206,78208,78210,78213,78215,78217,78219,78221,78223,78226,78228],{"class":201,"line":1441},[199,78201,76012],{"class":205},[199,78203,60506],{"class":878},[199,78205,1537],{"class":205},[199,78207,3664],{"class":898},[199,78209,4040],{"class":1086},[199,78211,78212],{"class":1018},"[abc]",[199,78214,3387],{"class":1086},[199,78216,3664],{"class":898},[199,78218,3638],{"class":205},[199,78220,77504],{"class":878},[199,78222,1537],{"class":205},[199,78224,78225],{"class":898},"'a'",[199,78227,77512],{"class":205},[199,78229,77515],{"class":1454},[199,78231,78232,78234,78236,78238,78240,78242,78244,78246,78248,78250,78252,78254,78257,78259],{"class":201,"line":1451},[199,78233,76012],{"class":205},[199,78235,60506],{"class":878},[199,78237,1537],{"class":205},[199,78239,3664],{"class":898},[199,78241,4040],{"class":1086},[199,78243,78212],{"class":1018},[199,78245,3387],{"class":1086},[199,78247,3664],{"class":898},[199,78249,3638],{"class":205},[199,78251,77504],{"class":878},[199,78253,1537],{"class":205},[199,78255,78256],{"class":898},"'b'",[199,78258,77512],{"class":205},[199,78260,77515],{"class":1454},[199,78262,78263,78265,78267,78269,78271,78273,78275,78277,78279,78281,78283,78285,78288,78290],{"class":201,"line":1458},[199,78264,76012],{"class":205},[199,78266,60506],{"class":878},[199,78268,1537],{"class":205},[199,78270,3664],{"class":898},[199,78272,4040],{"class":1086},[199,78274,78212],{"class":1018},[199,78276,3387],{"class":1086},[199,78278,3664],{"class":898},[199,78280,3638],{"class":205},[199,78282,77504],{"class":878},[199,78284,1537],{"class":205},[199,78286,78287],{"class":898},"'c'",[199,78289,77512],{"class":205},[199,78291,77515],{"class":1454},[199,78293,78294,78296,78298,78300,78302,78304,78306,78308,78310,78312,78315,78317],{"class":201,"line":1464},[199,78295,76012],{"class":205},[199,78297,60506],{"class":878},[199,78299,1537],{"class":205},[199,78301,3664],{"class":898},[199,78303,78212],{"class":1018},[199,78305,3664],{"class":898},[199,78307,3638],{"class":205},[199,78309,77504],{"class":878},[199,78311,1537],{"class":205},[199,78313,78314],{"class":898},"'ab'",[199,78316,77512],{"class":205},[199,78318,77515],{"class":1454},[199,78320,78321,78323,78325,78327,78329,78331,78333,78335,78337,78339,78341,78343,78345,78347],{"class":201,"line":1478},[199,78322,76012],{"class":205},[199,78324,60506],{"class":878},[199,78326,1537],{"class":205},[199,78328,3664],{"class":898},[199,78330,4040],{"class":1086},[199,78332,78212],{"class":1018},[199,78334,3387],{"class":1086},[199,78336,3664],{"class":898},[199,78338,3638],{"class":205},[199,78340,77504],{"class":878},[199,78342,1537],{"class":205},[199,78344,78314],{"class":898},[199,78346,77512],{"class":205},[199,78348,78349],{"class":1454},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[199,78351,78352,78354,78356,78358,78360,78362,78364,78367,78369,78371,78373,78375,78377,78379],{"class":201,"line":1516},[199,78353,76012],{"class":205},[199,78355,60506],{"class":878},[199,78357,1537],{"class":205},[199,78359,3664],{"class":898},[199,78361,4040],{"class":1086},[199,78363,78212],{"class":1018},[199,78365,78366],{"class":1086},"{2}$",[199,78368,3664],{"class":898},[199,78370,3638],{"class":205},[199,78372,77504],{"class":878},[199,78374,1537],{"class":205},[199,78376,78314],{"class":898},[199,78378,77512],{"class":205},[199,78380,78381],{"class":1454},"\u002F\u002Ftrue   可以选两个\n",[199,78383,78384,78386,78388,78390,78392,78394,78397,78399,78401,78403,78405,78407,78410,78412],{"class":201,"line":1522},[199,78385,76012],{"class":205},[199,78387,60506],{"class":878},[199,78389,1537],{"class":205},[199,78391,3664],{"class":898},[199,78393,4040],{"class":1086},[199,78395,78396],{"class":1018},"[a-z]",[199,78398,3387],{"class":1086},[199,78400,3664],{"class":898},[199,78402,3638],{"class":205},[199,78404,77504],{"class":878},[199,78406,1537],{"class":205},[199,78408,78409],{"class":898},"'p'",[199,78411,77568],{"class":205},[199,78413,78414],{"class":1454},"\u002F\u002Ftrue   依然只能选一个\n",[199,78416,78417,78419,78421,78423,78425,78427,78430,78432,78434,78436,78438,78440,78442,78444],{"class":201,"line":1528},[199,78418,76012],{"class":205},[199,78420,60506],{"class":878},[199,78422,1537],{"class":205},[199,78424,3664],{"class":898},[199,78426,4040],{"class":1086},[199,78428,78429],{"class":1018},"[A-Z]",[199,78431,3387],{"class":1086},[199,78433,3664],{"class":898},[199,78435,3638],{"class":205},[199,78437,77504],{"class":878},[199,78439,1537],{"class":205},[199,78441,78409],{"class":898},[199,78443,77568],{"class":205},[199,78445,77638],{"class":1454},[199,78447,78448,78450,78452,78454,78456,78458,78460,78462,78464,78466,78468,78470,78473,78475],{"class":201,"line":1557},[199,78449,76012],{"class":205},[199,78451,60506],{"class":878},[199,78453,1537],{"class":205},[199,78455,3664],{"class":898},[199,78457,4040],{"class":1086},[199,78459,78429],{"class":1018},[199,78461,3387],{"class":1086},[199,78463,3664],{"class":898},[199,78465,3638],{"class":205},[199,78467,77504],{"class":878},[199,78469,1537],{"class":205},[199,78471,78472],{"class":898},"'P'",[199,78474,77568],{"class":205},[199,78476,77515],{"class":1454},[199,78478,78479,78481,78483,78485,78487,78489,78492,78494,78496,78498,78500,78502,78505,78507],{"class":201,"line":1563},[199,78480,76012],{"class":205},[199,78482,60506],{"class":878},[199,78484,1537],{"class":205},[199,78486,3664],{"class":898},[199,78488,4040],{"class":1086},[199,78490,78491],{"class":1018},"[0-9]",[199,78493,3387],{"class":1086},[199,78495,3664],{"class":898},[199,78497,3638],{"class":205},[199,78499,77504],{"class":878},[199,78501,1537],{"class":205},[199,78503,78504],{"class":898},"'0'",[199,78506,77568],{"class":205},[199,78508,77515],{"class":1454},[199,78510,78511,78513,78515,78517,78519,78521,78524,78526,78528,78530,78532,78534,78536,78538],{"class":201,"line":1568},[199,78512,76012],{"class":205},[199,78514,60506],{"class":878},[199,78516,1537],{"class":205},[199,78518,3664],{"class":898},[199,78520,4040],{"class":1086},[199,78522,78523],{"class":1018},"[a-zA-Z0-9]",[199,78525,3387],{"class":1086},[199,78527,3664],{"class":898},[199,78529,3638],{"class":205},[199,78531,77504],{"class":878},[199,78533,1537],{"class":205},[199,78535,78409],{"class":898},[199,78537,77512],{"class":205},[199,78539,77515],{"class":1454},[199,78541,78542,78544,78546],{"class":201,"line":1574},[199,78543,2112],{"class":205},[199,78545,1446],{"class":874},[199,78547,882],{"class":205},[199,78549,78550,78552,78554],{"class":201,"line":1580},[199,78551,1414],{"class":205},[199,78553,1431],{"class":874},[199,78555,882],{"class":205},[199,78557,78558],{"class":201,"line":1597},[199,78559,907],{"emptyLinePlaceholder":906},[199,78561,78562,78564,78566],{"class":201,"line":1602},[199,78563,1414],{"class":205},[199,78565,194],{"class":874},[199,78567,882],{"class":205},[627,78569,78571],{"id":78570},"_3624-修饰符","3.6.2.4 修饰符",[31,78573,78574],{},[55,78575],{"alt":57,"src":78576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[31,78578,78579],{},"replace是个方法，使用的时候一定不要忘记括号()",[31,78581,78582],{},[55,78583],{"alt":57,"src":78584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[190,78586,78588],{"className":192,"code":78587,"language":194,"meta":57,"style":57},"\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",[196,78589,78590,78600,78614,78622,78636,78656,78668,78676,78684,78692,78724,78755,78760,78792,78803,78836,78845,78853,78861],{"__ignoreMap":57},[199,78591,78592,78594,78596,78598],{"class":201,"line":202},[199,78593,871],{"class":205},[199,78595,875],{"class":874},[199,78597,879],{"class":878},[199,78599,882],{"class":205},[199,78601,78602,78604,78606,78608,78610,78612],{"class":201,"line":36},[199,78603,887],{"class":205},[199,78605,194],{"class":874},[199,78607,892],{"class":878},[199,78609,895],{"class":205},[199,78611,899],{"class":898},[199,78613,882],{"class":205},[199,78615,78616,78618,78620],{"class":201,"line":73},[199,78617,887],{"class":205},[199,78619,914],{"class":874},[199,78621,882],{"class":205},[199,78623,78624,78626,78628,78630,78632,78634],{"class":201,"line":333},[199,78625,1824],{"class":205},[199,78627,924],{"class":874},[199,78629,927],{"class":878},[199,78631,895],{"class":205},[199,78633,932],{"class":898},[199,78635,882],{"class":205},[199,78637,78638,78640,78642,78644,78646,78648,78650,78652,78654],{"class":201,"line":227},[199,78639,1824],{"class":205},[199,78641,924],{"class":874},[199,78643,967],{"class":878},[199,78645,895],{"class":205},[199,78647,972],{"class":898},[199,78649,951],{"class":878},[199,78651,895],{"class":205},[199,78653,979],{"class":898},[199,78655,882],{"class":205},[199,78657,78658,78660,78662,78664,78666],{"class":201,"line":238},[199,78659,1824],{"class":205},[199,78661,988],{"class":874},[199,78663,991],{"class":205},[199,78665,988],{"class":874},[199,78667,882],{"class":205},[199,78669,78670,78672,78674],{"class":201,"line":252},[199,78671,1414],{"class":205},[199,78673,914],{"class":874},[199,78675,882],{"class":205},[199,78677,78678,78680,78682],{"class":201,"line":388},[199,78679,887],{"class":205},[199,78681,1431],{"class":874},[199,78683,882],{"class":205},[199,78685,78686,78688,78690],{"class":201,"line":415},[199,78687,1824],{"class":205},[199,78689,1446],{"class":874},[199,78691,882],{"class":205},[199,78693,78694,78696,78698,78700,78702,78704,78707,78709,78711,78713,78715,78717,78720,78722],{"class":201,"line":426},[199,78695,76012],{"class":205},[199,78697,60506],{"class":878},[199,78699,1537],{"class":205},[199,78701,3664],{"class":898},[199,78703,4040],{"class":1086},[199,78705,78706],{"class":50817},"java",[199,78708,3387],{"class":1086},[199,78710,3664],{"class":898},[199,78712,3638],{"class":205},[199,78714,77504],{"class":878},[199,78716,1537],{"class":205},[199,78718,78719],{"class":898},"'java'",[199,78721,78014],{"class":205},[199,78723,77515],{"class":1454},[199,78725,78726,78728,78730,78732,78734,78736,78738,78740,78742,78744,78746,78748,78751,78753],{"class":201,"line":1015},[199,78727,76012],{"class":205},[199,78729,60506],{"class":878},[199,78731,1537],{"class":205},[199,78733,3664],{"class":898},[199,78735,4040],{"class":1086},[199,78737,78706],{"class":50817},[199,78739,3387],{"class":1086},[199,78741,3664],{"class":898},[199,78743,3638],{"class":205},[199,78745,77504],{"class":878},[199,78747,1537],{"class":205},[199,78749,78750],{"class":898},"'Java'",[199,78752,78014],{"class":205},[199,78754,77638],{"class":1454},[199,78756,78757],{"class":201,"line":1031},[199,78758,78759],{"class":1454},"    \u002F\u002F 不区分大小写、\n",[199,78761,78762,78764,78766,78768,78770,78772,78774,78776,78778,78780,78782,78784,78786,78788,78790],{"class":201,"line":1043},[199,78763,76012],{"class":205},[199,78765,60506],{"class":878},[199,78767,1537],{"class":205},[199,78769,3664],{"class":898},[199,78771,4040],{"class":1086},[199,78773,78706],{"class":50817},[199,78775,3387],{"class":1086},[199,78777,3664],{"class":898},[199,78779,1548],{"class":1086},[199,78781,3638],{"class":205},[199,78783,77504],{"class":878},[199,78785,1537],{"class":205},[199,78787,78750],{"class":898},[199,78789,78014],{"class":205},[199,78791,77515],{"class":1454},[199,78793,78794,78796,78798,78800],{"class":201,"line":1049},[199,78795,14084],{"class":1086},[199,78797,76178],{"class":1018},[199,78799,16425],{"class":1086},[199,78801,78802],{"class":898}," 'java是一门编程语言，学完java工资很高'\n",[199,78804,78805,78807,78810,78812,78815,78818,78820,78822,78824,78826,78829,78831,78834],{"class":201,"line":1054},[199,78806,14084],{"class":1086},[199,78808,78809],{"class":1018}," result",[199,78811,16425],{"class":1086},[199,78813,78814],{"class":205}," str.",[199,78816,78817],{"class":878},"replace",[199,78819,1537],{"class":205},[199,78821,3664],{"class":898},[199,78823,78706],{"class":50817},[199,78825,3664],{"class":898},[199,78827,78828],{"class":1086},"ig",[199,78830,1912],{"class":205},[199,78832,78833],{"class":898},"'前端'",[199,78835,1594],{"class":205},[199,78837,78838,78840,78842],{"class":201,"line":1062},[199,78839,76012],{"class":205},[199,78841,60506],{"class":878},[199,78843,78844],{"class":205},"(result)\n",[199,78846,78847,78849,78851],{"class":201,"line":1075},[199,78848,2112],{"class":205},[199,78850,1446],{"class":874},[199,78852,882],{"class":205},[199,78854,78855,78857,78859],{"class":201,"line":1092},[199,78856,1414],{"class":205},[199,78858,1431],{"class":874},[199,78860,882],{"class":205},[199,78862,78863,78865,78867],{"class":201,"line":1107},[199,78864,1414],{"class":205},[199,78866,194],{"class":874},[199,78868,882],{"class":205},[1002,78870,78871],{},"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":57,"searchDepth":36,"depth":36,"links":78873},[78874,78884,78896,78913,78920,78928],{"id":55619,"depth":36,"text":55620,"children":78875},[78876,78877,78878,78879,78880,78881,78882,78883],{"id":55623,"depth":73,"text":55624},{"id":55656,"depth":73,"text":55657},{"id":55695,"depth":73,"text":55696},{"id":55853,"depth":73,"text":55854},{"id":55901,"depth":73,"text":55902},{"id":56038,"depth":73,"text":56039},{"id":56360,"depth":73,"text":56361},{"id":59348,"depth":73,"text":59349},{"id":59376,"depth":36,"text":59377,"children":78885},[78886,78887,78888,78889,78890,78891,78892,78893,78894,78895],{"id":59380,"depth":73,"text":59381},{"id":59403,"depth":73,"text":59404},{"id":60318,"depth":73,"text":60319},{"id":61008,"depth":73,"text":61009},{"id":61290,"depth":73,"text":61291},{"id":65451,"depth":73,"text":65452},{"id":65621,"depth":73,"text":65622},{"id":65749,"depth":73,"text":65750},{"id":65774,"depth":73,"text":65775},{"id":67163,"depth":73,"text":67164},{"id":68316,"depth":36,"text":68317,"children":78897},[78898,78899,78900,78901,78902,78903,78904,78905,78906,78907,78908,78909,78910,78911,78912],{"id":68320,"depth":73,"text":68321},{"id":68974,"depth":73,"text":68975},{"id":70669,"depth":73,"text":70670},{"id":70710,"depth":73,"text":70711},{"id":70752,"depth":73,"text":70753},{"id":70766,"depth":73,"text":70767},{"id":70815,"depth":73,"text":70816},{"id":70827,"depth":73,"text":70828},{"id":70842,"depth":73,"text":70843},{"id":70878,"depth":73,"text":70879},{"id":70959,"depth":73,"text":70960},{"id":71087,"depth":73,"text":71088},{"id":71099,"depth":73,"text":71100},{"id":71118,"depth":73,"text":71119},{"id":73229,"depth":73,"text":73230},{"id":73248,"depth":36,"text":73249,"children":78914},[78915,78916,78917,78918,78919],{"id":73269,"depth":73,"text":73270},{"id":73289,"depth":73,"text":73290},{"id":73338,"depth":73,"text":73339},{"id":73463,"depth":73,"text":73464},{"id":73644,"depth":73,"text":73645},{"id":73662,"depth":36,"text":73663,"children":78921},[78922,78923,78924,78925,78926,78927],{"id":73677,"depth":73,"text":73678},{"id":73736,"depth":73,"text":73737},{"id":73760,"depth":73,"text":73761},{"id":74080,"depth":73,"text":74081},{"id":74112,"depth":73,"text":74113},{"id":74135,"depth":73,"text":74136},{"id":77203,"depth":36,"text":77204,"children":78929},[78930,78931],{"id":77237,"depth":73,"text":77238},{"id":77276,"depth":73,"text":77277},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55591,"description":3023},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78938,"title":78939,"body":78940,"description":3023,"extension":3024,"meta":95077,"navigation":906,"path":95078,"seo":95079,"stem":95080,"__hash__":95081},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78941,"toc":95013},[78942,78945,78948,78952,78956,78961,78966,78977,78981,78986,78989,78993,78996,79001,79005,79009,79012,79017,79020,79024,79027,79035,79038,79042,79047,79052,79055,79059,79064,79069,79072,79076,79081,79084,79089,79092,79097,79100,79105,79110,79113,79116,79120,79125,79130,79133,79137,79141,79144,79147,79150,79154,79158,79163,79168,79171,79175,79180,79185,79188,79191,79194,79197,79200,79203,79206,79209,79212,79217,79221,79226,79231,79234,79237,79240,79243,79246,79249,79252,79255,79259,79263,79266,79269,79272,79277,79279,79282,79285,79288,79291,79294,79297,79300,79303,79306,79309,79312,79315,79318,79323,79328,79333,79336,79340,79343,79348,79352,79354,79365,79370,79471,79474,79477,79480,79483,79486,79489,79492,79495,79497,79500,79503,79506,79509,79512,79514,79517,79520,79523,79526,79529,79532,79534,79537,79539,79541,79544,79548,79552,79555,79558,79561,79564,79567,79570,79573,79576,79579,79584,79704,79707,79710,79715,79718,79721,79724,79727,79732,79735,79738,79741,79744,79749,79752,79852,79917,79991,79995,79998,80001,80005,80008,80022,80051,80054,80057,80060,80063,80066,80069,80072,80074,80077,80080,80083,80086,80090,80095,80099,80104,80179,80182,80365,80368,80371,80374,80377,80380,80382,80385,80388,80391,80394,80397,80400,80402,80406,80409,80414,80417,80420,80423,80426,80428,80433,80436,80439,80442,80445,80447,80452,80455,80458,80460,80462,80465,80469,80472,80475,80480,80483,80486,80489,80539,80544,80548,80553,80556,80625,80628,80637,80641,80646,80649,80652,80660,80663,80680,82482,82486,82490,82495,82498,82502,82508,82514,82666,82671,82676,82679,82682,82685,82688,82691,82694,82697,82700,82703,82706,82709,82712,82717,82721,82724,82735,82739,82744,82747,82750,82753,82756,82759,82761,82764,82767,82770,82773,82775,82792,82795,82799,82802,82807,82812,82815,82818,82822,82825,82828,82837,82840,82844,82847,82852,82857,82924,82928,82931,82934,82939,82944,83030,83035,83039,83042,83045,83060,83063,83068,83072,83077,83186,83189,83200,83350,83354,83359,83468,83472,83477,83482,83487,83490,83497,83517,83553,83717,83722,83725,83730,83737,83740,83743,83746,83805,83861,83917,83921,83926,84241,84244,84248,84251,84256,84365,84370,84374,84379,84383,84454,84458,84460,84463,84466,84504,84780,84784,84801,84867,84901,84905,84908,84913,84942,84949,84958,84963,84978,84983,84992,84995,85132,85136,85198,85202,85207,85452,85456,85461,85464,85467,85470,85473,85477,85482,87063,87067,87071,87077,87080,87085,87089,87092,87097,87100,87111,87115,87120,87124,87129,87134,87137,87142,87146,87150,87153,87158,87163,87166,87169,87172,87294,87299,87401,87404,87407,87411,87416,87588,87593,87597,87600,87605,87671,87676,87679,87810,87813,87818,87821,87824,87915,87920,87923,87926,87929,87932,87937,87942,87945,87950,87955,87960,87964,87967,87970,87975,87980,87985,87990,88044,88047,88050,88055,88058,88061,88066,88071,88076,88080,88085,88099,88104,88107,88112,88116,88121,88126,88131,88136,88141,88146,88151,88156,88159,88163,88168,88171,88174,88177,88182,88187,88190,88193,88197,88200,88203,88208,88213,88218,88223,88226,88231,88236,88297,88302,88305,88310,89551,89556,89560,89564,89569,89572,89577,89582,89585,89590,89592,89597,89601,89604,89607,89618,89622,89627,89632,89687,89692,89697,89702,89913,89918,89922,89927,89930,89932,89935,89938,90385,90390,90397,90403,90406,90409,90673,90678,90682,90947,90952,90956,90961,90966,90971,90976,91307,91310,91315,91320,91323,91327,91331,91336,91341,91346,91351,91356,91361,91365,91368,91373,91378,91381,91455,91460,91465,91470,91472,91475,91845,91850,91855,91860,91863,91866,91968,91973,91978,92081,92085,92090,92094,92098,92103,92108,92111,92116,92119,92122,92515,92520,92523,92526,92529,92532,93052,93056,93061,93066,93071,93074,93079,93082,93085,93467,93472,93474,93476,93479,93482,93994,93998,94059,94062,94065,94068,94072,94075,94080,94085,95010],[10,78943,78939],{"id":78944},"_4js进阶",[31,78946,78947],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78949,78951],{"id":78950},"_41-作用域","4.1 作用域",[19,78953,78955],{"id":78954},"_411-局部作用域","4.1.1 局部作用域",[31,78957,78958],{},[55,78959],{"alt":57,"src":78960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[31,78962,78963],{},[55,78964],{"alt":57,"src":78965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[176,78967,78968,78971,78974],{},[27,78969,78970],{},"函数作用域在函数内部",[27,78972,78973],{},"块级作用域在{}",[27,78975,78976],{},"对象的那个{}不是作用域，不是块作用域",[19,78978,78980],{"id":78979},"_412-全局作用域","4.1.2 全局作用域",[31,78982,78983],{},[55,78984],{"alt":57,"src":78985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[31,78987,78988],{},"window.a=10不要这样写",[19,78990,78992],{"id":78991},"_413-作用域链","4.1.3 作用域链",[31,78994,78995],{},"变量查找机制",[31,78997,78998],{},[55,78999],{"alt":57,"src":79000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,79002,79004],{"id":79003},"_42-垃圾回收机制","4.2 垃圾回收机制",[19,79006,79008],{"id":79007},"_421-大体介绍","4.2.1 大体介绍",[31,79010,79011],{},"垃圾回收机制(Garbage Collection) 简称 GC",[31,79013,79014],{},[55,79015],{"alt":57,"src":79016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[31,79018,79019],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[19,79021,79023],{"id":79022},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[31,79025,79026],{},"堆栈空间分配区别：",[24,79028,79029,79032],{},[27,79030,79031],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[27,79033,79034],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[31,79036,79037],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[627,79039,79041],{"id":79040},"_4221-引用计数","4.2.2.1 引用计数",[31,79043,79044],{},[55,79045],{"alt":57,"src":79046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[31,79048,79049],{},[55,79050],{"alt":57,"src":79051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[31,79053,79054],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[627,79056,79058],{"id":79057},"_4222-标记清除法","4.2.2.2 标记清除法",[31,79060,79061],{},[55,79062],{"alt":57,"src":79063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[31,79065,79066],{},[55,79067],{"alt":57,"src":79068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[31,79070,79071],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,79073,79075],{"id":79074},"_43-闭包","4.3 闭包",[31,79077,79078],{},[55,79079],{"alt":57,"src":79080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[31,79082,79083],{},"闭包：内层函数+外层函数的变量",[31,79085,79086],{},[55,79087],{"alt":57,"src":79088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[31,79090,79091],{},"closure就是闭包",[31,79093,79094],{},[55,79095],{"alt":57,"src":79096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[31,79098,79099],{},"内层函数必须包含外层函数的变量才是闭包",[31,79101,79102],{},[55,79103],{"alt":57,"src":79104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[31,79106,79107],{},[55,79108],{"alt":57,"src":79109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[31,79111,79112],{},"闭包可能会引起内存泄漏",[31,79114,79115],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,79117,79119],{"id":79118},"_44-变量提升","4.4 变量提升",[31,79121,79122],{},[55,79123],{"alt":57,"src":79124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[31,79126,79127],{},[55,79128],{"alt":57,"src":79129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[31,79131,79132],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,79134,79136],{"id":79135},"_45-函数进阶","4.5 函数进阶",[19,79138,79140],{"id":79139},"_451-函数提升","4.5.1 函数提升",[31,79142,79143],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[31,79145,79146],{},"只提升函数声明，不提升函数调用",[1446,79148,79149],{},"\n\nfn()\n\nfunction fn() {\n\nconsole.log('函数提升')\n\n}\n\n上方程序在执行前将函数的声明进行了提前，但是不提前调用，然后我们去调用，是没有问题的\n\nfun()\n\nvar fun = function () {\n\nconsole.log('我将报错')\n\n}\n\n这个一个用var声明的变量，赋值等于一个匿名函数，var声明的变量会提前，但赋值不提前，所有在前边调用，此时会报错\n\n",[19,79151,79153],{"id":79152},"_452-函数参数","4.5.2 函数参数",[627,79155,79157],{"id":79156},"_4521-动态参数","4.5.2.1 动态参数",[31,79159,79160],{},[55,79161],{"alt":57,"src":79162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[31,79164,79165],{},[55,79166],{"alt":57,"src":79167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[31,79169,79170],{},"箭头函数里边没有arguments",[627,79172,79174],{"id":79173},"_4522-剩余参数","4.5.2.2 剩余参数",[31,79176,79177],{},[55,79178],{"alt":57,"src":79179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[31,79181,79182],{},[55,79183],{"alt":57,"src":79184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[31,79186,79187],{},"剩余参数使用的时候不需要写...",[31,79189,79190],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[31,79192,79193],{},"  function getSum(a,b,...arr) {",[31,79195,79196],{},"  console.log(11)",[31,79198,79199],{},"  }",[31,79201,79202],{},"  getSum(1,2,3,4)",[31,79204,79205],{},"  将1传给a，2传给b，剩下的传给剩余参数",[31,79207,79208],{},"  getSum(1,2)",[31,79210,79211],{},"  将1传给a，2传给b，剩余参数为一个空数组",[31,79213,79214],{},[55,79215],{"alt":57,"src":79216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[627,79218,79220],{"id":79219},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[31,79222,79223],{},[55,79224],{"alt":57,"src":79225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[31,79227,79228],{},[55,79229],{"alt":57,"src":79230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[31,79232,79233],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[31,79235,79236],{},"展开运算符可以用于数组之间的合并：",[31,79238,79239],{},"const arr1 = [1, 2, 3]",[31,79241,79242],{},"const arr2 = [3, 4, 5]",[31,79244,79245],{},"const arr = [...arr1, ...arr2]",[31,79247,79248],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[31,79250,79251],{},"剩余参数：函数参数使用，得到真数组",[31,79253,79254],{},"展开运算符：数组中使用，数组展开",[19,79256,79258],{"id":79257},"_453-箭头函数","4.5.3 箭头函数",[627,79260,79262],{"id":79261},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[31,79264,79265],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[31,79267,79268],{},"它不是万能的！！！",[31,79270,79271],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[31,79273,79274],{},[55,79275],{"alt":57,"src":79276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[31,79278,3125],{},[31,79280,79281],{},"① 只有一个形参的时候，可以省略小括号：",[31,79283,79284],{},"const fn=x=>{console.log(x)}",[31,79286,79287],{},"② 只有一行代码时可以省略大括号：",[31,79289,79290],{},"const fn=x=>console.log(11)",[31,79292,79293],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[31,79295,79296],{},"const fn=x=>x+x",[31,79298,79299],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[31,79301,79302],{},"⑤ 阻止表单默认提交：",[31,79304,79305],{},"const form = document.querySelector('form')",[31,79307,79308],{},"form.addEventListener('click', ev => ev.preventDefault())",[31,79310,79311],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[31,79313,79314],{},"const fn=uname=>({uname:uname})",[31,79316,79317],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[31,79319,79320],{},[55,79321],{"alt":57,"src":79322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[31,79324,79325],{},[55,79326],{"alt":57,"src":79327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[31,79329,79330],{},[55,79331],{"alt":57,"src":79332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[31,79334,79335],{},"一定不要忘记用()，有()就理解为自带return",[627,79337,79339],{"id":79338},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[31,79341,79342],{},"箭头函数是没有动态参数的arguments",[31,79344,79345],{},[55,79346],{"alt":57,"src":79347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[627,79349,79351],{"id":79350},"_4533-箭头函数this","4.5.3.3 箭头函数this",[31,79353,14195],{},[24,79355,79356,79359,79362],{},[27,79357,79358],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[27,79360,79361],{},"事件回调函数使用箭头函数时，this 为全局的 window",[27,79363,79364],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[31,79366,79367],{},[55,79368],{"alt":57,"src":79369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[190,79371,79373],{"className":2763,"code":79372,"language":2765,"meta":57,"style":57},"  \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",[196,79374,79375,79383,79388,79393,79398,79403,79408,79412,79417,79421,79425,79430,79435,79440,79444,79448,79453,79458,79463],{"__ignoreMap":57},[199,79376,79377,79379,79381],{"class":201,"line":202},[199,79378,1824],{"class":205},[199,79380,1446],{"class":874},[199,79382,882],{"class":205},[199,79384,79385],{"class":201,"line":36},[199,79386,79387],{"class":205},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[199,79389,79390],{"class":201,"line":73},[199,79391,79392],{"class":205},"    console.log(this) \u002F\u002F指向window\n",[199,79394,79395],{"class":201,"line":333},[199,79396,79397],{"class":205},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[199,79399,79400],{"class":201,"line":227},[199,79401,79402],{"class":205},"    function fn() {\n",[199,79404,79405],{"class":201,"line":238},[199,79406,79407],{"class":205},"      console.log(this)  \u002F\u002F指向window\n",[199,79409,79410],{"class":201,"line":252},[199,79411,2097],{"class":205},[199,79413,79414],{"class":201,"line":388},[199,79415,79416],{"class":205},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[199,79418,79419],{"class":201,"line":415},[199,79420,907],{"emptyLinePlaceholder":906},[199,79422,79423],{"class":201,"line":426},[199,79424,73782],{"class":205},[199,79426,79427],{"class":201,"line":1015},[199,79428,79429],{"class":205},"      name: 'andy',\n",[199,79431,79432],{"class":201,"line":1031},[199,79433,79434],{"class":205},"      sayHai: function () {\n",[199,79436,79437],{"class":201,"line":1043},[199,79438,79439],{"class":205},"        console.log(this)\n",[199,79441,79442],{"class":201,"line":1049},[199,79443,2092],{"class":205},[199,79445,79446],{"class":201,"line":1054},[199,79447,2097],{"class":205},[199,79449,79450],{"class":201,"line":1062},[199,79451,79452],{"class":205},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[199,79454,79455],{"class":201,"line":1075},[199,79456,79457],{"class":205},"    \u002F\u002F 2.箭头函数的this\n",[199,79459,79460],{"class":201,"line":1092},[199,79461,79462],{"class":205},"    const fn = () => console.log(this)\n",[199,79464,79465,79467,79469],{"class":201,"line":1107},[199,79466,2112],{"class":205},[199,79468,1446],{"class":874},[199,79470,882],{"class":205},[31,79472,79473],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[31,79475,79476],{},"const fn = () => console.log(this)",[31,79478,79479],{},"fn() \u002F\u002F指向window",[31,79481,79482],{},"\u002F\u002F 3.对象方法箭头函数 this",[31,79484,79485],{},"①",[31,79487,79488],{},"const obj = {",[31,79490,79491],{},"uname: 'pink老师',",[31,79493,79494],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[31,79496,759],{},[31,79498,79499],{},"调用对象里边的函数",[31,79501,79502],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[31,79504,79505],{},"obj.sayHai()",[31,79507,79508],{},"②",[31,79510,79511],{},"const obj1 = {",[31,79513,79491],{},[31,79515,79516],{},"sayHai: function () {",[31,79518,79519],{},"let i = 10",[31,79521,79522],{},"const count = () => {",[31,79524,79525],{},"console.log(this)",[31,79527,79528],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[31,79530,79531],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[31,79533,759],{},[31,79535,79536],{},"count()",[31,79538,759],{},[31,79540,759],{},[31,79542,79543],{},"obj1.sayHai()",[14,79545,79547],{"id":79546},"_46-解构赋值","4.6 解构赋值",[19,79549,79551],{"id":79550},"_461-数组解构","4.6.1 数组解构",[31,79553,79554],{},"以前要是使用数组中的值的话：",[31,79556,79557],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[31,79559,79560],{},"const arr=[100,60,80]",[31,79562,79563],{},"const max=arr[0]",[31,79565,79566],{},"const min=arr[1]",[31,79568,79569],{},"const avg=arr[2]",[31,79571,79572],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[31,79574,79575],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[31,79577,79578],{},"这个写法就类似于上边的那种用很多const的方法",[31,79580,79581],{},[55,79582],{"alt":57,"src":79583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[190,79585,79587],{"className":192,"code":79586,"language":194,"meta":57,"style":57},"①变量之间交换值:\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",[196,79588,79589,79594,79599,79604,79609,79614,79618,79622,79627,79631,79636,79641,79645,79650,79655,79666,79676,79681,79686,79691,79695,79699],{"__ignoreMap":57},[199,79590,79591],{"class":201,"line":202},[199,79592,79593],{"class":205},"①变量之间交换值:\n",[199,79595,79596],{"class":201,"line":36},[199,79597,79598],{"class":205},"let a=1\n",[199,79600,79601],{"class":201,"line":73},[199,79602,79603],{"class":205},"let b=2;\n",[199,79605,79606],{"class":201,"line":333},[199,79607,79608],{"class":205},"必须加这行代码，不然就会报错\n",[199,79610,79611],{"class":201,"line":227},[199,79612,79613],{"class":205},"[b,a]=[a,b]\n",[199,79615,79616],{"class":201,"line":238},[199,79617,907],{"emptyLinePlaceholder":906},[199,79619,79620],{"class":201,"line":252},[199,79621,907],{"emptyLinePlaceholder":906},[199,79623,79624],{"class":201,"line":388},[199,79625,79626],{"class":205},"可以写成下面的方式：\n",[199,79628,79629],{"class":201,"line":415},[199,79630,79598],{"class":205},[199,79632,79633],{"class":201,"line":426},[199,79634,79635],{"class":205},"let b=2\n",[199,79637,79638],{"class":201,"line":1015},[199,79639,79640],{"class":205},";[b,a]=[a,b]\n",[199,79642,79643],{"class":201,"line":1031},[199,79644,907],{"emptyLinePlaceholder":906},[199,79646,79647],{"class":201,"line":1043},[199,79648,79649],{"class":205},"②排序\n",[199,79651,79652],{"class":201,"line":1049},[199,79653,79654],{"class":205},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[199,79656,79657,79660,79663],{"class":201,"line":1054},[199,79658,79659],{"class":205},"for (let i = 0; i ",[199,79661,887],{"class":79662},"s7hpK",[199,79664,79665],{"class":205}," arr1.length; i++) {\n",[199,79667,79668,79671,79673],{"class":201,"line":1062},[199,79669,79670],{"class":205},"   for (let j = 0; j ",[199,79672,887],{"class":79662},[199,79674,79675],{"class":205}," arr1.length - 1; j++) {\n",[199,79677,79678],{"class":201,"line":1075},[199,79679,79680],{"class":205},"      if (arr1[j] > arr1[j + 1]) {\n",[199,79682,79683],{"class":201,"line":1092},[199,79684,79685],{"class":205},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[199,79687,79688],{"class":201,"line":1107},[199,79689,79690],{"class":205},"       }\n",[199,79692,79693],{"class":201,"line":1128},[199,79694,7207],{"class":205},[199,79696,79697],{"class":201,"line":1146},[199,79698,671],{"class":205},[199,79700,79701],{"class":201,"line":1163},[199,79702,79703],{"class":205},"console.log(arr1)\n",[31,79705,79706],{},"数组解构的细节：",[31,79708,79709],{},"①变量多，单元值少",[31,79711,79712],{},[55,79713],{"alt":57,"src":79714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[31,79716,79717],{},"防止出现undefined的方法：",[31,79719,79720],{},"const [a=0,b=0] =[1]",[31,79722,79723],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[31,79725,79726],{},"②变量少，单元值多",[31,79728,79729],{},[55,79730],{"alt":57,"src":79731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[31,79733,79734],{},"此时可以使用剩余参数来接收多余的值",[31,79736,79737],{},"const [a,b,...c]=[1,2,3,4]",[31,79739,79740],{},"console.log(c) 输出[3,4]",[31,79742,79743],{},"③可以按需导入，忽略某些返回值",[31,79745,79746],{},[55,79747],{"alt":57,"src":79748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[31,79750,79751],{},"④支持多维数组的结构",[190,79753,79757],{"className":79754,"code":79755,"language":79756,"meta":57,"style":57},"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",[196,79758,79759,79787,79803,79818,79833],{"__ignoreMap":57},[199,79760,79761,79763,79765,79767,79769,79771,79773,79775,79778,79780,79782,79784],{"class":201,"line":202},[199,79762,9689],{"class":1086},[199,79764,1470],{"class":205},[199,79766,895],{"class":1086},[199,79768,1906],{"class":205},[199,79770,1115],{"class":1018},[199,79772,1912],{"class":205},[199,79774,1925],{"class":1018},[199,79776,79777],{"class":205},", [",[199,79779,1920],{"class":1018},[199,79781,1912],{"class":205},[199,79783,1915],{"class":1018},[199,79785,79786],{"class":205},"]]\n",[199,79788,79789,79792,79794,79796,79798,79800],{"class":201,"line":36},[199,79790,79791],{"class":205},"console.",[199,79793,60506],{"class":878},[199,79795,6752],{"class":205},[199,79797,1025],{"class":1018},[199,79799,7114],{"class":205},[199,79801,79802],{"class":1454},"  \u002F\u002F1\n",[199,79804,79805,79807,79809,79811,79813,79815],{"class":201,"line":73},[199,79806,79791],{"class":205},[199,79808,60506],{"class":878},[199,79810,6752],{"class":205},[199,79812,1115],{"class":1018},[199,79814,7114],{"class":205},[199,79816,79817],{"class":1454},"  \u002F\u002F2\n",[199,79819,79820,79822,79824,79826,79828,79830],{"class":201,"line":333},[199,79821,79791],{"class":205},[199,79823,60506],{"class":878},[199,79825,6752],{"class":205},[199,79827,1925],{"class":1018},[199,79829,7114],{"class":205},[199,79831,79832],{"class":1454},"  \u002F\u002F[3,4]\n",[199,79834,79835,79837,79839,79841,79843,79845,79847,79849],{"class":201,"line":227},[199,79836,79791],{"class":205},[199,79838,60506],{"class":878},[199,79840,6752],{"class":205},[199,79842,1925],{"class":1018},[199,79844,7798],{"class":205},[199,79846,1025],{"class":1018},[199,79848,7114],{"class":205},[199,79850,79851],{"class":1454},"  \u002F\u002F3\n",[190,79853,79855],{"className":79754,"code":79854,"language":79756,"meta":57,"style":57},"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",[196,79856,79857,79884,79895,79906],{"__ignoreMap":57},[199,79858,79859,79861,79864,79866,79868,79870,79872,79874,79876,79878,79880,79882],{"class":201,"line":202},[199,79860,9689],{"class":1086},[199,79862,79863],{"class":205}," [a, b, c] ",[199,79865,895],{"class":1086},[199,79867,1906],{"class":205},[199,79869,1115],{"class":1018},[199,79871,1912],{"class":205},[199,79873,1925],{"class":1018},[199,79875,79777],{"class":205},[199,79877,1920],{"class":1018},[199,79879,1912],{"class":205},[199,79881,1915],{"class":1018},[199,79883,79786],{"class":205},[199,79885,79886,79888,79890,79893],{"class":201,"line":36},[199,79887,79791],{"class":205},[199,79889,60506],{"class":878},[199,79891,79892],{"class":205},"(a)",[199,79894,79802],{"class":1454},[199,79896,79897,79899,79901,79904],{"class":201,"line":73},[199,79898,79791],{"class":205},[199,79900,60506],{"class":878},[199,79902,79903],{"class":205},"(b)",[199,79905,79817],{"class":1454},[199,79907,79908,79910,79912,79915],{"class":201,"line":333},[199,79909,79791],{"class":205},[199,79911,60506],{"class":878},[199,79913,79914],{"class":205},"(c)",[199,79916,79832],{"class":1454},[190,79918,79920],{"className":79754,"code":79919,"language":79756,"meta":57,"style":57},"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",[196,79921,79922,79949,79959,79969,79979],{"__ignoreMap":57},[199,79923,79924,79926,79929,79931,79933,79935,79937,79939,79941,79943,79945,79947],{"class":201,"line":202},[199,79925,9689],{"class":1086},[199,79927,79928],{"class":205}," [a, b, [c, d]] ",[199,79930,895],{"class":1086},[199,79932,1906],{"class":205},[199,79934,1115],{"class":1018},[199,79936,1912],{"class":205},[199,79938,1925],{"class":1018},[199,79940,79777],{"class":205},[199,79942,1920],{"class":1018},[199,79944,1912],{"class":205},[199,79946,1915],{"class":1018},[199,79948,79786],{"class":205},[199,79950,79951,79953,79955,79957],{"class":201,"line":36},[199,79952,79791],{"class":205},[199,79954,60506],{"class":878},[199,79956,79892],{"class":205},[199,79958,79802],{"class":1454},[199,79960,79961,79963,79965,79967],{"class":201,"line":73},[199,79962,79791],{"class":205},[199,79964,60506],{"class":878},[199,79966,79903],{"class":205},[199,79968,79817],{"class":1454},[199,79970,79971,79973,79975,79977],{"class":201,"line":333},[199,79972,79791],{"class":205},[199,79974,60506],{"class":878},[199,79976,79914],{"class":205},[199,79978,79851],{"class":1454},[199,79980,79981,79983,79985,79988],{"class":201,"line":227},[199,79982,79791],{"class":205},[199,79984,60506],{"class":878},[199,79986,79987],{"class":205},"(d)",[199,79989,79990],{"class":1454},"  \u002F\u002F4\n",[19,79992,79994],{"id":79993},"_462-对象解构","4.6.2 对象解构",[31,79996,79997],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[31,79999,80000],{},"用的非常非常多！！！！！！",[627,80002,80004],{"id":80003},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[31,80006,80007],{},"基本语法：",[24,80009,80010,80013,80016,80019],{},[27,80011,80012],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[27,80014,80015],{},"对象属性的值将被赋值给与属性名相同的变量",[27,80017,80018],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[27,80020,80021],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[190,80023,80025],{"className":192,"code":80024,"language":194,"meta":57,"style":57},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[196,80026,80027,80032,80037,80042,80046],{"__ignoreMap":57},[199,80028,80029],{"class":201,"line":202},[199,80030,80031],{"class":205},"const obj = {\n",[199,80033,80034],{"class":201,"line":36},[199,80035,80036],{"class":205},"   uname: 'pink老师',\n",[199,80038,80039],{"class":201,"line":73},[199,80040,80041],{"class":205},"   age: 18,\n",[199,80043,80044],{"class":201,"line":333},[199,80045,671],{"class":205},[199,80047,80048],{"class":201,"line":227},[199,80049,80050],{"class":205},"const { uname, age } = obj\n",[31,80052,80053],{},"上方代码这样写等价于：",[31,80055,80056],{},"const uname等价于obj.uname",[31,80058,80059],{},"变量名可以重新改名：",[31,80061,80062],{},"const uname='red老师'",[31,80064,80065],{},"const user={",[31,80067,80068],{},"  uname:'pink老师',",[31,80070,80071],{},"  age:18",[31,80073,759],{},[31,80075,80076],{},"const {uname,age}=user",[31,80078,80079],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[31,80081,80082],{},"const {旧变量名：新变量名}=对象",[31,80084,80085],{},"const {uname:username,age}=user",[627,80087,80089],{"id":80088},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[31,80091,80092],{},[55,80093],{"alt":57,"src":80094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[627,80096,80098],{"id":80097},"_4623-多级对象解构","4.6.2.3 多级对象解构",[31,80100,80101],{},[55,80102],{"alt":57,"src":80103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[190,80105,80107],{"className":2763,"code":80106,"language":2765,"meta":57,"style":57},"  \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",[196,80108,80109,80117,80122,80127,80132,80137,80142,80147,80152,80157,80161,80166,80171],{"__ignoreMap":57},[199,80110,80111,80113,80115],{"class":201,"line":202},[199,80112,1824],{"class":205},[199,80114,1446],{"class":874},[199,80116,882],{"class":205},[199,80118,80119],{"class":201,"line":36},[199,80120,80121],{"class":205},"    const pig = {\n",[199,80123,80124],{"class":201,"line":73},[199,80125,80126],{"class":205},"      name: '佩奇',\n",[199,80128,80129],{"class":201,"line":333},[199,80130,80131],{"class":205},"      family: {\n",[199,80133,80134],{"class":201,"line":227},[199,80135,80136],{"class":205},"        mother: '猪妈妈',\n",[199,80138,80139],{"class":201,"line":238},[199,80140,80141],{"class":205},"        father: '猪爸爸',\n",[199,80143,80144],{"class":201,"line":252},[199,80145,80146],{"class":205},"        sister: '乔治'\n",[199,80148,80149],{"class":201,"line":388},[199,80150,80151],{"class":205},"      },\n",[199,80153,80154],{"class":201,"line":415},[199,80155,80156],{"class":205},"      age: 6\n",[199,80158,80159],{"class":201,"line":426},[199,80160,2097],{"class":205},[199,80162,80163],{"class":201,"line":1015},[199,80164,80165],{"class":205},"    \u002F\u002F 多级对象解构\n",[199,80167,80168],{"class":201,"line":1031},[199,80169,80170],{"class":205},"    const { name, family: { mother, father, sister }, age } = pig\n",[199,80172,80173,80175,80177],{"class":201,"line":1043},[199,80174,2112],{"class":205},[199,80176,1446],{"class":874},[199,80178,882],{"class":205},[31,80180,80181],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[190,80183,80186],{"className":80184,"code":80185,"language":78706,"meta":57,"style":57},"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",[196,80187,80188,80193,80204,80216,80228,80237,80241,80252,80264,80274,80279,80283,80293,80304,80313,80317,80321,80332,80343,80352,80356,80361],{"__ignoreMap":57},[199,80189,80190],{"class":201,"line":202},[199,80191,80192],{"class":1454},"    \u002F\u002F 这是后台传递过来的数据\n",[199,80194,80195,80197,80200,80202],{"class":201,"line":36},[199,80196,14084],{"class":1086},[199,80198,80199],{"class":205}," msg ",[199,80201,895],{"class":1086},[199,80203,1012],{"class":205},[199,80205,80206,80209,80211,80214],{"class":201,"line":73},[199,80207,80208],{"class":898},"      \"code\"",[199,80210,3938],{"class":1086},[199,80212,80213],{"class":1018}," 200",[199,80215,34308],{"class":205},[199,80217,80218,80221,80223,80226],{"class":201,"line":333},[199,80219,80220],{"class":898},"      \"msg\"",[199,80222,3938],{"class":1086},[199,80224,80225],{"class":898}," \"获取新闻列表成功\"",[199,80227,34308],{"class":205},[199,80229,80230,80233,80235],{"class":201,"line":227},[199,80231,80232],{"class":898},"      \"data\"",[199,80234,3938],{"class":1086},[199,80236,57706],{"class":205},[199,80238,80239],{"class":201,"line":238},[199,80240,5422],{"class":205},[199,80242,80243,80246,80248,80250],{"class":201,"line":252},[199,80244,80245],{"class":898},"          \"id\"",[199,80247,3938],{"class":1086},[199,80249,1495],{"class":1018},[199,80251,34308],{"class":205},[199,80253,80254,80257,80259,80262],{"class":201,"line":388},[199,80255,80256],{"class":898},"          \"title\"",[199,80258,3938],{"class":1086},[199,80260,80261],{"class":898}," \"5G商用自己，三大运用商收入下降\"",[199,80263,34308],{"class":205},[199,80265,80266,80269,80271],{"class":201,"line":415},[199,80267,80268],{"class":898},"          \"count\"",[199,80270,3938],{"class":1086},[199,80272,80273],{"class":1018}," 58\n",[199,80275,80276],{"class":201,"line":426},[199,80277,80278],{"class":205},"        },\n",[199,80280,80281],{"class":201,"line":1015},[199,80282,5422],{"class":205},[199,80284,80285,80287,80289,80291],{"class":201,"line":1031},[199,80286,80245],{"class":898},[199,80288,3938],{"class":1086},[199,80290,17615],{"class":1018},[199,80292,34308],{"class":205},[199,80294,80295,80297,80299,80302],{"class":201,"line":1043},[199,80296,80256],{"class":898},[199,80298,3938],{"class":1086},[199,80300,80301],{"class":898}," \"国际媒体头条速览\"",[199,80303,34308],{"class":205},[199,80305,80306,80308,80310],{"class":201,"line":1049},[199,80307,80268],{"class":898},[199,80309,3938],{"class":1086},[199,80311,80312],{"class":1018}," 56\n",[199,80314,80315],{"class":201,"line":1054},[199,80316,80278],{"class":205},[199,80318,80319],{"class":201,"line":1062},[199,80320,5422],{"class":205},[199,80322,80323,80325,80327,80330],{"class":201,"line":1075},[199,80324,80245],{"class":898},[199,80326,3938],{"class":1086},[199,80328,80329],{"class":1018}," 3",[199,80331,34308],{"class":205},[199,80333,80334,80336,80338,80341],{"class":201,"line":1092},[199,80335,80256],{"class":898},[199,80337,3938],{"class":1086},[199,80339,80340],{"class":898}," \"乌克兰和俄罗斯持续冲突\"",[199,80342,34308],{"class":205},[199,80344,80345,80347,80349],{"class":201,"line":1107},[199,80346,80268],{"class":898},[199,80348,3938],{"class":1086},[199,80350,80351],{"class":1018}," 1669\n",[199,80353,80354],{"class":201,"line":1128},[199,80355,80278],{"class":205},[199,80357,80358],{"class":201,"line":1146},[199,80359,80360],{"class":205},"      ]\n",[199,80362,80363],{"class":201,"line":1163},[199,80364,2097],{"class":205},[31,80366,80367],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[31,80369,80370],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[31,80372,80373],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[31,80375,80376],{},"function({data}) {",[31,80378,80379],{},"console.log(data)",[31,80381,759],{},[31,80383,80384],{},"render(msg)",[31,80386,80387],{},"实参传递给形参的时候解构了",[31,80389,80390],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[31,80392,80393],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[31,80395,80396],{},"function render({data:mydata}) {",[31,80398,80399],{},"  console.log(data)",[31,80401,759],{},[19,80403,80405],{"id":80404},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[31,80407,80408],{},"有两种情况：一个是数组结构，一个是立即执行函数",[24,80410,80411],{},[27,80412,80413],{},"如果对一个数组进行遍历，有两种方式：",[31,80415,80416],{},"①法1",[31,80418,80419],{},"const arr=[1,2,3]",[31,80421,80422],{},"arr.map(function(item,index) {",[31,80424,80425],{},"  console.log(item)",[31,80427,2159],{},[31,80429,80430],{},[55,80431],{"alt":57,"src":80432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[31,80434,80435],{},"②法2",[31,80437,80438],{},"const str='pink'",[31,80440,80441],{},"[1,2,3].map(function(item,index) {",[31,80443,80444],{},"console.log(item)",[31,80446,2159],{},[31,80448,80449],{},[55,80450],{"alt":57,"src":80451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[31,80453,80454],{},"此时会报错",[31,80456,80457],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[31,80459,80444],{},[31,80461,2159],{},[31,80463,80464],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80466,80468],{"id":80467},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[31,80470,80471],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[31,80473,80474],{},"可以理解为加强版的for循环",[31,80476,80477],{},[55,80478],{"alt":57,"src":80479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[31,80481,80482],{},"里边不写return，不返回数组，只遍历不返回",[31,80484,80485],{},"map是返回数组",[31,80487,80488],{},"forEach主要用于遍历数组对象",[190,80490,80492],{"className":2763,"code":80491,"language":2765,"meta":57,"style":57},"  \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",[196,80493,80494,80502,80507,80512,80517,80522,80526,80531],{"__ignoreMap":57},[199,80495,80496,80498,80500],{"class":201,"line":202},[199,80497,1824],{"class":205},[199,80499,1446],{"class":874},[199,80501,882],{"class":205},[199,80503,80504],{"class":201,"line":36},[199,80505,80506],{"class":205},"    const arr = ['red', 'green', 'pink']\n",[199,80508,80509],{"class":201,"line":73},[199,80510,80511],{"class":205},"    const result = arr.forEach(function (item, index) {\n",[199,80513,80514],{"class":201,"line":333},[199,80515,80516],{"class":205},"      console.log(item)\n",[199,80518,80519],{"class":201,"line":227},[199,80520,80521],{"class":205},"      console.log(index)\n",[199,80523,80524],{"class":201,"line":238},[199,80525,36302],{"class":205},[199,80527,80528],{"class":201,"line":252},[199,80529,80530],{"class":205},"    console.log(result)\n",[199,80532,80533,80535,80537],{"class":201,"line":388},[199,80534,2112],{"class":205},[199,80536,1446],{"class":874},[199,80538,882],{"class":205},[31,80540,80541],{},[55,80542],{"alt":57,"src":80543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80545,80547],{"id":80546},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[31,80549,80550],{},[55,80551],{"alt":57,"src":80552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[31,80554,80555],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[190,80557,80559],{"className":2763,"code":80558,"language":2765,"meta":57,"style":57},"\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",[196,80560,80561,80569,80577,80582,80587,80591,80595,80600,80604,80609,80617],{"__ignoreMap":57},[199,80562,80563,80565,80567],{"class":201,"line":202},[199,80564,887],{"class":205},[199,80566,1431],{"class":874},[199,80568,882],{"class":205},[199,80570,80571,80573,80575],{"class":201,"line":36},[199,80572,1824],{"class":205},[199,80574,1446],{"class":874},[199,80576,882],{"class":205},[199,80578,80579],{"class":201,"line":73},[199,80580,80581],{"class":205},"    const arr = [10, 20, 30]\n",[199,80583,80584],{"class":201,"line":333},[199,80585,80586],{"class":205},"    const newArr = arr.filter(function (item, index) {\n",[199,80588,80589],{"class":201,"line":227},[199,80590,80516],{"class":205},[199,80592,80593],{"class":201,"line":238},[199,80594,80521],{"class":205},[199,80596,80597],{"class":201,"line":252},[199,80598,80599],{"class":205},"      return item >= 20\n",[199,80601,80602],{"class":201,"line":388},[199,80603,36302],{"class":205},[199,80605,80606],{"class":201,"line":415},[199,80607,80608],{"class":205},"    console.log(newArr)\n",[199,80610,80611,80613,80615],{"class":201,"line":426},[199,80612,2112],{"class":205},[199,80614,1446],{"class":874},[199,80616,882],{"class":205},[199,80618,80619,80621,80623],{"class":201,"line":1015},[199,80620,1414],{"class":205},[199,80622,1431],{"class":874},[199,80624,882],{"class":205},[31,80626,80627],{},"这个也可以写成箭头函数：",[190,80629,80631],{"className":192,"code":80630,"language":194,"meta":57,"style":57},"const newArr = arr.filter(item => item >= 20)\n",[196,80632,80633],{"__ignoreMap":57},[199,80634,80635],{"class":201,"line":202},[199,80636,80630],{"class":205},[14,80638,80640],{"id":80639},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[31,80642,80643],{},[55,80644],{"alt":57,"src":80645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[31,80647,80648],{},"步骤：",[31,80650,80651],{},"①：渲染页面模块",[176,80653,80654,80657],{},[27,80655,80656],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[27,80658,80659],{},"用forEach+字符串的形式",[31,80661,80662],{},"②：点击不同需求，显示不同页面内容",[176,80664,80665,80668,80671,80674,80677],{},[27,80666,80667],{},"点击采取事件委托方式 .filter",[27,80669,80670],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[27,80672,80673],{},"筛选条件是根据点击的 data-index 来判断",[27,80675,80676],{},"可以使用对象解构，把事件对象解构",[27,80678,80679],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[190,80681,80683],{"className":192,"code":80682,"language":194,"meta":57,"style":57},"\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",[196,80684,80685,80695,80709,80713,80721,80735,80755,80767,80775,80781,80791,80801,80811,80815,80819,80825,80838,80850,80860,80872,80876,80880,80887,80900,80912,80929,80947,80960,80964,80968,80980,80990,80994,80998,81005,81046,81073,81083,81087,81091,81099,81111,81115,81119,81127,81139,81151,81162,81166,81170,81179,81191,81202,81206,81210,81219,81231,81243,81247,81251,81258,81268,81280,81292,81307,81311,81315,81323,81339,81349,81359,81369,81381,81385,81389,81399,81410,81420,81424,81432,81440,81444,81452,81467,81493,81518,81543,81562,81570,81584,81589,81594,81599,81604,81609,81617,81625,81630,81641,81646,81656,81666,81676,81686,81690,81694,81703,81712,81721,81730,81734,81738,81747,81756,81765,81774,81778,81782,81791,81800,81809,81818,81822,81826,81835,81844,81853,81862,81866,81870,81879,81888,81897,81906,81910,81914,81923,81932,81941,81950,81954,81958,81967,81976,81984,81993,81997,82001,82005,82010,82022,82027,82039,82043,82060,82088,82097,82102,82112,82122,82131,82136,82141,82145,82150,82167,82171,82176,82184,82189,82216,82221,82241,82246,82258,82263,82268,82273,82284,82298,82335,82353,82386,82403,82427,82431,82436,82442,82446,82450,82454,82462,82470,82474],{"__ignoreMap":57},[199,80686,80687,80689,80691,80693],{"class":201,"line":202},[199,80688,871],{"class":205},[199,80690,875],{"class":874},[199,80692,879],{"class":878},[199,80694,882],{"class":205},[199,80696,80697,80699,80701,80703,80705,80707],{"class":201,"line":36},[199,80698,887],{"class":205},[199,80700,194],{"class":874},[199,80702,892],{"class":878},[199,80704,895],{"class":205},[199,80706,899],{"class":898},[199,80708,882],{"class":205},[199,80710,80711],{"class":201,"line":73},[199,80712,907],{"emptyLinePlaceholder":906},[199,80714,80715,80717,80719],{"class":201,"line":333},[199,80716,887],{"class":205},[199,80718,914],{"class":874},[199,80720,882],{"class":205},[199,80722,80723,80725,80727,80729,80731,80733],{"class":201,"line":227},[199,80724,1824],{"class":205},[199,80726,924],{"class":874},[199,80728,927],{"class":878},[199,80730,895],{"class":205},[199,80732,932],{"class":898},[199,80734,882],{"class":205},[199,80736,80737,80739,80741,80743,80745,80747,80749,80751,80753],{"class":201,"line":238},[199,80738,1824],{"class":205},[199,80740,924],{"class":874},[199,80742,967],{"class":878},[199,80744,895],{"class":205},[199,80746,972],{"class":898},[199,80748,951],{"class":878},[199,80750,895],{"class":205},[199,80752,979],{"class":898},[199,80754,882],{"class":205},[199,80756,80757,80759,80761,80763,80765],{"class":201,"line":252},[199,80758,1824],{"class":205},[199,80760,988],{"class":874},[199,80762,991],{"class":205},[199,80764,988],{"class":874},[199,80766,882],{"class":205},[199,80768,80769,80771,80773],{"class":201,"line":388},[199,80770,1824],{"class":205},[199,80772,1002],{"class":874},[199,80774,882],{"class":205},[199,80776,80777,80779],{"class":201,"line":415},[199,80778,9300],{"class":874},[199,80780,1012],{"class":205},[199,80782,80783,80785,80787,80789],{"class":201,"line":426},[199,80784,56954],{"class":1018},[199,80786,1022],{"class":205},[199,80788,1025],{"class":1018},[199,80790,1028],{"class":205},[199,80792,80793,80795,80797,80799],{"class":201,"line":1015},[199,80794,56965],{"class":1018},[199,80796,1022],{"class":205},[199,80798,1025],{"class":1018},[199,80800,1028],{"class":205},[199,80802,80803,80805,80807,80809],{"class":201,"line":1031},[199,80804,74855],{"class":1018},[199,80806,1022],{"class":205},[199,80808,62764],{"class":1018},[199,80810,1028],{"class":205},[199,80812,80813],{"class":201,"line":1043},[199,80814,2097],{"class":205},[199,80816,80817],{"class":201,"line":1049},[199,80818,907],{"emptyLinePlaceholder":906},[199,80820,80821,80823],{"class":201,"line":1054},[199,80822,64382],{"class":878},[199,80824,1012],{"class":205},[199,80826,80827,80829,80831,80834,80836],{"class":201,"line":1062},[199,80828,57030],{"class":1018},[199,80830,1022],{"class":205},[199,80832,80833],{"class":1018},"990",[199,80835,1087],{"class":1086},[199,80837,1028],{"class":205},[199,80839,80840,80842,80844,80846,80848],{"class":201,"line":1075},[199,80841,56965],{"class":1018},[199,80843,1022],{"class":205},[199,80845,1025],{"class":1018},[199,80847,1158],{"class":1018},[199,80849,1028],{"class":205},[199,80851,80852,80854,80856,80858],{"class":201,"line":1092},[199,80853,57268],{"class":1018},[199,80855,1022],{"class":205},[199,80857,1070],{"class":1018},[199,80859,1028],{"class":205},[199,80861,80862,80865,80867,80870],{"class":201,"line":1107},[199,80863,80864],{"class":1018},"      flex-wrap",[199,80866,1022],{"class":205},[199,80868,80869],{"class":1018},"wrap",[199,80871,1028],{"class":205},[199,80873,80874],{"class":201,"line":1128},[199,80875,2097],{"class":205},[199,80877,80878],{"class":201,"line":1146},[199,80879,907],{"emptyLinePlaceholder":906},[199,80881,80882,80885],{"class":201,"line":1163},[199,80883,80884],{"class":878},"    .item",[199,80886,1012],{"class":205},[199,80888,80889,80891,80893,80896,80898],{"class":201,"line":1176},[199,80890,57030],{"class":1018},[199,80892,1022],{"class":205},[199,80894,80895],{"class":1018},"240",[199,80897,1087],{"class":1086},[199,80899,1028],{"class":205},[199,80901,80902,80904,80906,80908,80910],{"class":201,"line":1189},[199,80903,64259],{"class":1018},[199,80905,1022],{"class":205},[199,80907,3528],{"class":1018},[199,80909,1087],{"class":1086},[199,80911,1028],{"class":205},[199,80913,80914,80916,80918,80920,80922,80925,80927],{"class":201,"line":1202},[199,80915,56954],{"class":1018},[199,80917,1022],{"class":205},[199,80919,3779],{"class":1018},[199,80921,1087],{"class":1086},[199,80923,80924],{"class":1018}," 30",[199,80926,1087],{"class":1086},[199,80928,1028],{"class":205},[199,80930,80931,80933,80935,80937,80940,80943,80945],{"class":201,"line":1207},[199,80932,64119],{"class":1018},[199,80934,1022],{"class":205},[199,80936,30964],{"class":1018},[199,80938,80939],{"class":1018}," ease",[199,80941,80942],{"class":1018}," .5",[199,80944,3774],{"class":1086},[199,80946,1028],{"class":205},[199,80948,80949,80952,80954,80956,80958],{"class":201,"line":1212},[199,80950,80951],{"class":1018},"      margin-bottom",[199,80953,1022],{"class":205},[199,80955,3779],{"class":1018},[199,80957,1087],{"class":1086},[199,80959,1028],{"class":205},[199,80961,80962],{"class":201,"line":1225},[199,80963,2097],{"class":205},[199,80965,80966],{"class":201,"line":1236},[199,80967,907],{"emptyLinePlaceholder":906},[199,80969,80970,80973,80975,80978],{"class":201,"line":1249},[199,80971,80972],{"class":878},"    .item:nth-child",[199,80974,1537],{"class":205},[199,80976,80977],{"class":1018},"4n",[199,80979,1513],{"class":205},[199,80981,80982,80984,80986,80988],{"class":201,"line":1262},[199,80983,64259],{"class":1018},[199,80985,1022],{"class":205},[199,80987,1025],{"class":1018},[199,80989,1028],{"class":205},[199,80991,80992],{"class":201,"line":1275},[199,80993,2097],{"class":205},[199,80995,80996],{"class":201,"line":1287},[199,80997,907],{"emptyLinePlaceholder":906},[199,80999,81000,81003],{"class":201,"line":1292},[199,81001,81002],{"class":878},"    .item:hover",[199,81004,1012],{"class":205},[199,81006,81007,81010,81012,81014,81016,81018,81020,81022,81024,81027,81029,81031,81033,81035,81037,81039,81041,81044],{"class":201,"line":1297},[199,81008,81009],{"class":1018},"      box-shadow",[199,81011,1022],{"class":205},[199,81013,1025],{"class":1018},[199,81015,1087],{"class":1086},[199,81017,1621],{"class":1018},[199,81019,1087],{"class":1086},[199,81021,5064],{"class":1018},[199,81023,1087],{"class":1086},[199,81025,81026],{"class":1018}," rgba",[199,81028,1537],{"class":205},[199,81030,1025],{"class":1018},[199,81032,1912],{"class":205},[199,81034,1025],{"class":1018},[199,81036,1912],{"class":205},[199,81038,1025],{"class":1018},[199,81040,1912],{"class":205},[199,81042,81043],{"class":1018},".2",[199,81045,5623],{"class":205},[199,81047,81048,81051,81053,81056,81058,81060,81062,81065,81067,81069,81071],{"class":201,"line":1310},[199,81049,81050],{"class":1018},"      transform",[199,81052,1022],{"class":205},[199,81054,81055],{"class":1018},"translate3d",[199,81057,1537],{"class":205},[199,81059,1025],{"class":1018},[199,81061,1912],{"class":205},[199,81063,81064],{"class":1018},"-4",[199,81066,1087],{"class":1086},[199,81068,1912],{"class":205},[199,81070,1025],{"class":1018},[199,81072,5623],{"class":205},[199,81074,81075,81077,81079,81081],{"class":201,"line":1315},[199,81076,64284],{"class":1018},[199,81078,1022],{"class":205},[199,81080,64289],{"class":1018},[199,81082,1028],{"class":205},[199,81084,81085],{"class":201,"line":1330},[199,81086,2097],{"class":205},[199,81088,81089],{"class":201,"line":1335},[199,81090,907],{"emptyLinePlaceholder":906},[199,81092,81093,81095,81097],{"class":201,"line":1340},[199,81094,80884],{"class":878},[199,81096,57874],{"class":874},[199,81098,1012],{"class":205},[199,81100,81101,81103,81105,81107,81109],{"class":201,"line":1352},[199,81102,57030],{"class":1018},[199,81104,1022],{"class":205},[199,81106,3396],{"class":1018},[199,81108,3412],{"class":1086},[199,81110,1028],{"class":205},[199,81112,81113],{"class":201,"line":1367},[199,81114,2097],{"class":205},[199,81116,81117],{"class":201,"line":1381},[199,81118,907],{"emptyLinePlaceholder":906},[199,81120,81121,81123,81125],{"class":201,"line":1396},[199,81122,80884],{"class":878},[199,81124,64563],{"class":878},[199,81126,1012],{"class":205},[199,81128,81129,81131,81133,81135,81137],{"class":201,"line":1401},[199,81130,57181],{"class":1018},[199,81132,1022],{"class":205},[199,81134,3730],{"class":1018},[199,81136,1087],{"class":1086},[199,81138,1028],{"class":205},[199,81140,81141,81143,81145,81147,81149],{"class":201,"line":1411},[199,81142,80951],{"class":1018},[199,81144,1022],{"class":205},[199,81146,3528],{"class":1018},[199,81148,1087],{"class":1086},[199,81150,1028],{"class":205},[199,81152,81153,81155,81157,81160],{"class":201,"line":1421},[199,81154,59675],{"class":1018},[199,81156,1022],{"class":205},[199,81158,81159],{"class":1018},"#666",[199,81161,1028],{"class":205},[199,81163,81164],{"class":201,"line":1426},[199,81165,2097],{"class":205},[199,81167,81168],{"class":201,"line":1436},[199,81169,907],{"emptyLinePlaceholder":906},[199,81171,81172,81174,81177],{"class":201,"line":1441},[199,81173,80884],{"class":878},[199,81175,81176],{"class":878}," .price",[199,81178,1012],{"class":205},[199,81180,81181,81183,81185,81187,81189],{"class":201,"line":1451},[199,81182,57181],{"class":1018},[199,81184,1022],{"class":205},[199,81186,3829],{"class":1018},[199,81188,1087],{"class":1086},[199,81190,1028],{"class":205},[199,81192,81193,81195,81197,81200],{"class":201,"line":1458},[199,81194,59675],{"class":1018},[199,81196,1022],{"class":205},[199,81198,81199],{"class":1018},"firebrick",[199,81201,1028],{"class":205},[199,81203,81204],{"class":201,"line":1464},[199,81205,2097],{"class":205},[199,81207,81208],{"class":201,"line":1478},[199,81209,907],{"emptyLinePlaceholder":906},[199,81211,81212,81214,81217],{"class":201,"line":1516},[199,81213,80884],{"class":878},[199,81215,81216],{"class":878}," .price::before",[199,81218,1012],{"class":205},[199,81220,81221,81224,81226,81229],{"class":201,"line":1522},[199,81222,81223],{"class":1018},"      content",[199,81225,1022],{"class":205},[199,81227,81228],{"class":898},"'￥'",[199,81230,1028],{"class":205},[199,81232,81233,81235,81237,81239,81241],{"class":201,"line":1528},[199,81234,57181],{"class":1018},[199,81236,1022],{"class":205},[199,81238,3629],{"class":1018},[199,81240,1087],{"class":1086},[199,81242,1028],{"class":205},[199,81244,81245],{"class":201,"line":1557},[199,81246,2097],{"class":205},[199,81248,81249],{"class":201,"line":1563},[199,81250,907],{"emptyLinePlaceholder":906},[199,81252,81253,81256],{"class":201,"line":1568},[199,81254,81255],{"class":878},"    .filter",[199,81257,1012],{"class":205},[199,81259,81260,81262,81264,81266],{"class":201,"line":1574},[199,81261,57268],{"class":1018},[199,81263,1022],{"class":205},[199,81265,1070],{"class":1018},[199,81267,1028],{"class":205},[199,81269,81270,81272,81274,81276,81278],{"class":201,"line":1580},[199,81271,57030],{"class":1018},[199,81273,1022],{"class":205},[199,81275,80833],{"class":1018},[199,81277,1087],{"class":1086},[199,81279,1028],{"class":205},[199,81281,81282,81284,81286,81288,81290],{"class":201,"line":1597},[199,81283,56965],{"class":1018},[199,81285,1022],{"class":205},[199,81287,1025],{"class":1018},[199,81289,1158],{"class":1018},[199,81291,1028],{"class":205},[199,81293,81294,81296,81298,81300,81302,81304],{"class":201,"line":1602},[199,81295,56954],{"class":1018},[199,81297,1022],{"class":205},[199,81299,1153],{"class":1018},[199,81301,1087],{"class":1086},[199,81303,80924],{"class":1018},[199,81305,81306],{"class":1086},"px\n",[199,81308,81309],{"class":201,"line":1608},[199,81310,2097],{"class":205},[199,81312,81313],{"class":201,"line":1640},[199,81314,907],{"emptyLinePlaceholder":906},[199,81316,81317,81319,81321],{"class":201,"line":1653},[199,81318,81255],{"class":878},[199,81320,4338],{"class":874},[199,81322,1012],{"class":205},[199,81324,81325,81327,81329,81331,81333,81335,81337],{"class":201,"line":1673},[199,81326,56954],{"class":1018},[199,81328,1022],{"class":205},[199,81330,3528],{"class":1018},[199,81332,1087],{"class":1086},[199,81334,11837],{"class":1018},[199,81336,1087],{"class":1086},[199,81338,1028],{"class":205},[199,81340,81341,81343,81345,81347],{"class":201,"line":1690},[199,81342,63980],{"class":1018},[199,81344,1022],{"class":205},[199,81346,64077],{"class":1018},[199,81348,1028],{"class":205},[199,81350,81351,81353,81355,81357],{"class":201,"line":1706},[199,81352,59675],{"class":1018},[199,81354,1022],{"class":205},[199,81356,81159],{"class":1018},[199,81358,1028],{"class":205},[199,81360,81361,81363,81365,81367],{"class":201,"line":1712},[199,81362,66229],{"class":1018},[199,81364,1022],{"class":205},[199,81366,56996],{"class":1018},[199,81368,1028],{"class":205},[199,81370,81371,81373,81375,81377,81379],{"class":201,"line":1720},[199,81372,64009],{"class":1018},[199,81374,1022],{"class":205},[199,81376,3779],{"class":1018},[199,81378,1087],{"class":1086},[199,81380,1028],{"class":205},[199,81382,81383],{"class":201,"line":1725},[199,81384,2097],{"class":205},[199,81386,81387],{"class":201,"line":1731},[199,81388,907],{"emptyLinePlaceholder":906},[199,81390,81391,81393,81395,81397],{"class":201,"line":1745},[199,81392,81255],{"class":878},[199,81394,4338],{"class":874},[199,81396,64159],{"class":878},[199,81398,1012],{"class":205},[199,81400,81401,81403,81405,81408],{"class":201,"line":1754},[199,81402,57143],{"class":1018},[199,81404,1022],{"class":205},[199,81406,81407],{"class":1018},"#05943c",[199,81409,1028],{"class":205},[199,81411,81412,81414,81416,81418],{"class":201,"line":1763},[199,81413,59675],{"class":1018},[199,81415,1022],{"class":205},[199,81417,63101],{"class":1018},[199,81419,1028],{"class":205},[199,81421,81422],{"class":201,"line":1768},[199,81423,2097],{"class":205},[199,81425,81426,81428,81430],{"class":201,"line":19628},[199,81427,2112],{"class":205},[199,81429,1002],{"class":874},[199,81431,882],{"class":205},[199,81433,81434,81436,81438],{"class":201,"line":19641},[199,81435,1414],{"class":205},[199,81437,914],{"class":874},[199,81439,882],{"class":205},[199,81441,81442],{"class":201,"line":19646},[199,81443,907],{"emptyLinePlaceholder":906},[199,81445,81446,81448,81450],{"class":201,"line":19660},[199,81447,887],{"class":205},[199,81449,1431],{"class":874},[199,81451,882],{"class":205},[199,81453,81454,81456,81458,81460,81462,81465],{"class":201,"line":19665},[199,81455,1824],{"class":205},[199,81457,1220],{"class":874},[199,81459,55745],{"class":878},[199,81461,895],{"class":205},[199,81463,81464],{"class":898},"\"filter\"",[199,81466,882],{"class":205},[199,81468,81469,81471,81473,81475,81477,81479,81482,81484,81486,81489,81491],{"class":201,"line":19671},[199,81470,921],{"class":205},[199,81472,2867],{"class":874},[199,81474,63316],{"class":878},[199,81476,895],{"class":205},[199,81478,63321],{"class":898},[199,81480,81481],{"class":878}," data-index",[199,81483,895],{"class":205},[199,81485,6579],{"class":898},[199,81487,81488],{"class":205},">0-100元\u003C\u002F",[199,81490,2867],{"class":874},[199,81492,882],{"class":205},[199,81494,81495,81497,81499,81501,81503,81505,81507,81509,81511,81514,81516],{"class":201,"line":19676},[199,81496,921],{"class":205},[199,81498,2867],{"class":874},[199,81500,63316],{"class":878},[199,81502,895],{"class":205},[199,81504,63321],{"class":898},[199,81506,81481],{"class":878},[199,81508,895],{"class":205},[199,81510,6602],{"class":898},[199,81512,81513],{"class":205},">100-300元\u003C\u002F",[199,81515,2867],{"class":874},[199,81517,882],{"class":205},[199,81519,81520,81522,81524,81526,81528,81530,81532,81534,81536,81539,81541],{"class":201,"line":19690},[199,81521,921],{"class":205},[199,81523,2867],{"class":874},[199,81525,63316],{"class":878},[199,81527,895],{"class":205},[199,81529,63321],{"class":898},[199,81531,81481],{"class":878},[199,81533,895],{"class":205},[199,81535,6615],{"class":898},[199,81537,81538],{"class":205},">300元以上\u003C\u002F",[199,81540,2867],{"class":874},[199,81542,882],{"class":205},[199,81544,81545,81547,81549,81551,81553,81555,81558,81560],{"class":201,"line":19695},[199,81546,921],{"class":205},[199,81548,2867],{"class":874},[199,81550,63316],{"class":878},[199,81552,895],{"class":205},[199,81554,63321],{"class":898},[199,81556,81557],{"class":205},">全部区间\u003C\u002F",[199,81559,2867],{"class":874},[199,81561,882],{"class":205},[199,81563,81564,81566,81568],{"class":201,"line":19700},[199,81565,2112],{"class":205},[199,81567,1220],{"class":874},[199,81569,882],{"class":205},[199,81571,81572,81574,81576,81578,81580,81582],{"class":201,"line":19714},[199,81573,1824],{"class":205},[199,81575,1220],{"class":874},[199,81577,55745],{"class":878},[199,81579,895],{"class":205},[199,81581,64867],{"class":898},[199,81583,882],{"class":205},[199,81585,81586],{"class":201,"line":19726},[199,81587,81588],{"class":1454},"    \u003C!-- \u003Cdiv class=\"item\">\n",[199,81590,81591],{"class":201,"line":19731},[199,81592,81593],{"class":1454},"      \u003Cimg src=\"\" alt=\"\">\n",[199,81595,81596],{"class":201,"line":19744},[199,81597,81598],{"class":1454},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[199,81600,81601],{"class":201,"line":19749},[199,81602,81603],{"class":1454},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[199,81605,81606],{"class":201,"line":19754},[199,81607,81608],{"class":1454},"    \u003C\u002Fdiv> -->\n",[199,81610,81611,81613,81615],{"class":201,"line":19759},[199,81612,2112],{"class":205},[199,81614,1220],{"class":874},[199,81616,882],{"class":205},[199,81618,81619,81621,81623],{"class":201,"line":19772},[199,81620,1824],{"class":205},[199,81622,1446],{"class":874},[199,81624,882],{"class":205},[199,81626,81627],{"class":201,"line":19777},[199,81628,81629],{"class":1454},"    \u002F\u002F 2. 初始化数据\n",[199,81631,81632,81634,81637,81639],{"class":201,"line":35475},[199,81633,14084],{"class":1086},[199,81635,81636],{"class":1018}," goodsList",[199,81638,16425],{"class":1086},[199,81640,57706],{"class":205},[199,81642,81643],{"class":201,"line":35481},[199,81644,81645],{"class":205},"      {\n",[199,81647,81648,81651,81654],{"class":201,"line":35487},[199,81649,81650],{"class":205},"        id: ",[199,81652,81653],{"class":898},"'4001172'",[199,81655,34308],{"class":205},[199,81657,81658,81661,81664],{"class":201,"line":35493},[199,81659,81660],{"class":205},"        name: ",[199,81662,81663],{"class":898},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[199,81665,34308],{"class":205},[199,81667,81668,81671,81674],{"class":201,"line":35499},[199,81669,81670],{"class":205},"        price: ",[199,81672,81673],{"class":898},"'289.00'",[199,81675,34308],{"class":205},[199,81677,81678,81681,81684],{"class":201,"line":35510},[199,81679,81680],{"class":205},"        picture: ",[199,81682,81683],{"class":898},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[199,81685,34308],{"class":205},[199,81687,81688],{"class":201,"line":35516},[199,81689,80151],{"class":205},[199,81691,81692],{"class":201,"line":35536},[199,81693,81645],{"class":205},[199,81695,81696,81698,81701],{"class":201,"line":35542},[199,81697,81650],{"class":205},[199,81699,81700],{"class":898},"'4001594'",[199,81702,34308],{"class":205},[199,81704,81705,81707,81710],{"class":201,"line":35553},[199,81706,81660],{"class":205},[199,81708,81709],{"class":898},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[199,81711,34308],{"class":205},[199,81713,81714,81716,81719],{"class":201,"line":35559},[199,81715,81670],{"class":205},[199,81717,81718],{"class":898},"'288.00'",[199,81720,34308],{"class":205},[199,81722,81723,81725,81728],{"class":201,"line":35565},[199,81724,81680],{"class":205},[199,81726,81727],{"class":898},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[199,81729,34308],{"class":205},[199,81731,81732],{"class":201,"line":35571},[199,81733,80151],{"class":205},[199,81735,81736],{"class":201,"line":35577},[199,81737,81645],{"class":205},[199,81739,81740,81742,81745],{"class":201,"line":35583},[199,81741,81650],{"class":205},[199,81743,81744],{"class":898},"'4001009'",[199,81746,34308],{"class":205},[199,81748,81749,81751,81754],{"class":201,"line":35589},[199,81750,81660],{"class":205},[199,81752,81753],{"class":898},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[199,81755,34308],{"class":205},[199,81757,81758,81760,81763],{"class":201,"line":35595},[199,81759,81670],{"class":205},[199,81761,81762],{"class":898},"'109.00'",[199,81764,34308],{"class":205},[199,81766,81767,81769,81772],{"class":201,"line":35615},[199,81768,81680],{"class":205},[199,81770,81771],{"class":898},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[199,81773,34308],{"class":205},[199,81775,81776],{"class":201,"line":35621},[199,81777,80151],{"class":205},[199,81779,81780],{"class":201,"line":35637},[199,81781,81645],{"class":205},[199,81783,81784,81786,81789],{"class":201,"line":35643},[199,81785,81650],{"class":205},[199,81787,81788],{"class":898},"'4001874'",[199,81790,34308],{"class":205},[199,81792,81793,81795,81798],{"class":201,"line":35657},[199,81794,81660],{"class":205},[199,81796,81797],{"class":898},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[199,81799,34308],{"class":205},[199,81801,81802,81804,81807],{"class":201,"line":35663},[199,81803,81670],{"class":205},[199,81805,81806],{"class":898},"'488.00'",[199,81808,34308],{"class":205},[199,81810,81811,81813,81816],{"class":201,"line":35678},[199,81812,81680],{"class":205},[199,81814,81815],{"class":898},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[199,81817,34308],{"class":205},[199,81819,81820],{"class":201,"line":35684},[199,81821,80151],{"class":205},[199,81823,81824],{"class":201,"line":35693},[199,81825,81645],{"class":205},[199,81827,81828,81830,81833],{"class":201,"line":35699},[199,81829,81650],{"class":205},[199,81831,81832],{"class":898},"'4001649'",[199,81834,34308],{"class":205},[199,81836,81837,81839,81842],{"class":201,"line":35708},[199,81838,81660],{"class":205},[199,81840,81841],{"class":898},"'大师监制龙泉青瓷茶叶罐'",[199,81843,34308],{"class":205},[199,81845,81846,81848,81851],{"class":201,"line":35714},[199,81847,81670],{"class":205},[199,81849,81850],{"class":898},"'139.00'",[199,81852,34308],{"class":205},[199,81854,81855,81857,81860],{"class":201,"line":35720},[199,81856,81680],{"class":205},[199,81858,81859],{"class":898},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[199,81861,34308],{"class":205},[199,81863,81864],{"class":201,"line":35729},[199,81865,80151],{"class":205},[199,81867,81868],{"class":201,"line":35735},[199,81869,81645],{"class":205},[199,81871,81872,81874,81877],{"class":201,"line":35746},[199,81873,81650],{"class":205},[199,81875,81876],{"class":898},"'3997185'",[199,81878,34308],{"class":205},[199,81880,81881,81883,81886],{"class":201,"line":35752},[199,81882,81660],{"class":205},[199,81884,81885],{"class":898},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[199,81887,34308],{"class":205},[199,81889,81890,81892,81895],{"class":201,"line":35771},[199,81891,81670],{"class":205},[199,81893,81894],{"class":898},"'108.00'",[199,81896,34308],{"class":205},[199,81898,81899,81901,81904],{"class":201,"line":35777},[199,81900,81680],{"class":205},[199,81902,81903],{"class":898},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[199,81905,34308],{"class":205},[199,81907,81908],{"class":201,"line":35788},[199,81909,80151],{"class":205},[199,81911,81912],{"class":201,"line":35794},[199,81913,81645],{"class":205},[199,81915,81916,81918,81921],{"class":201,"line":35814},[199,81917,81650],{"class":205},[199,81919,81920],{"class":898},"'3997403'",[199,81922,34308],{"class":205},[199,81924,81925,81927,81930],{"class":201,"line":35830},[199,81926,81660],{"class":205},[199,81928,81929],{"class":898},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[199,81931,34308],{"class":205},[199,81933,81934,81936,81939],{"class":201,"line":35836},[199,81935,81670],{"class":205},[199,81937,81938],{"class":898},"'100.00'",[199,81940,34308],{"class":205},[199,81942,81943,81945,81948],{"class":201,"line":35850},[199,81944,81680],{"class":205},[199,81946,81947],{"class":898},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[199,81949,34308],{"class":205},[199,81951,81952],{"class":201,"line":35856},[199,81953,80151],{"class":205},[199,81955,81956],{"class":201,"line":35862},[199,81957,81645],{"class":205},[199,81959,81960,81962,81965],{"class":201,"line":35873},[199,81961,81650],{"class":205},[199,81963,81964],{"class":898},"'3998274'",[199,81966,34308],{"class":205},[199,81968,81969,81971,81974],{"class":201,"line":35879},[199,81970,81660],{"class":205},[199,81972,81973],{"class":898},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[199,81975,34308],{"class":205},[199,81977,81978,81980,81982],{"class":201,"line":35885},[199,81979,81670],{"class":205},[199,81981,81850],{"class":898},[199,81983,34308],{"class":205},[199,81985,81986,81988,81991],{"class":201,"line":35895},[199,81987,81680],{"class":205},[199,81989,81990],{"class":898},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[199,81992,34308],{"class":205},[199,81994,81995],{"class":201,"line":35901},[199,81996,80151],{"class":205},[199,81998,81999],{"class":201,"line":35912},[199,82000,2805],{"class":205},[199,82002,82003],{"class":201,"line":35918},[199,82004,907],{"emptyLinePlaceholder":906},[199,82006,82007],{"class":201,"line":35928},[199,82008,82009],{"class":1454},"    \u002F\u002F 1.渲染函数\n",[199,82011,82012,82014,82016,82018,82020],{"class":201,"line":35933},[199,82013,72343],{"class":1086},[199,82015,72346],{"class":878},[199,82017,1537],{"class":205},[199,82019,1659],{"class":8113},[199,82021,1513],{"class":205},[199,82023,82024],{"class":201,"line":35939},[199,82025,82026],{"class":1454},"      \u002F\u002F 声明空字符串\n",[199,82028,82029,82032,82035,82037],{"class":201,"line":35988},[199,82030,82031],{"class":1086},"      let",[199,82033,82034],{"class":205}," str ",[199,82036,895],{"class":1086},[199,82038,72363],{"class":898},[199,82040,82041],{"class":201,"line":36035},[199,82042,72368],{"class":1454},[199,82044,82045,82047,82050,82052,82055,82058],{"class":201,"line":36040},[199,82046,60266],{"class":205},[199,82048,82049],{"class":878},"forEach",[199,82051,1537],{"class":205},[199,82053,82054],{"class":8113},"item",[199,82056,82057],{"class":1086}," =>",[199,82059,1012],{"class":205},[199,82061,82062,82064,82067,82070,82072,82075,82077,82080,82083,82085],{"class":201,"line":36046},[199,82063,63529],{"class":1086},[199,82065,82066],{"class":205}," { ",[199,82068,82069],{"class":1018},"name",[199,82071,1912],{"class":205},[199,82073,82074],{"class":1018},"price",[199,82076,1912],{"class":205},[199,82078,82079],{"class":1018},"picture",[199,82081,82082],{"class":205}," } ",[199,82084,895],{"class":1086},[199,82086,82087],{"class":205}," item\n",[199,82089,82090,82093,82095],{"class":201,"line":36065},[199,82091,82092],{"class":205},"        str ",[199,82094,12362],{"class":1086},[199,82096,72427],{"class":898},[199,82098,82099],{"class":201,"line":36071},[199,82100,82101],{"class":898},"          \u003Cdiv class=\"item\">\n",[199,82103,82104,82107,82109],{"class":201,"line":36090},[199,82105,82106],{"class":898},"            \u003Cimg src=\"${",[199,82108,82079],{"class":205},[199,82110,82111],{"class":898},"}\" alt=\"\">\n",[199,82113,82114,82117,82119],{"class":201,"line":36096},[199,82115,82116],{"class":898},"            \u003Cp class=\"name\">${",[199,82118,82069],{"class":205},[199,82120,82121],{"class":898},"}\u003C\u002Fp>\n",[199,82123,82124,82127,82129],{"class":201,"line":36102},[199,82125,82126],{"class":898},"            \u003Cp class=\"price\">${",[199,82128,82074],{"class":205},[199,82130,82121],{"class":898},[199,82132,82133],{"class":201,"line":36112},[199,82134,82135],{"class":898},"          \u003C\u002Fdiv>\n",[199,82137,82138],{"class":201,"line":36117},[199,82139,82140],{"class":898},"        `\n",[199,82142,82143],{"class":201,"line":36123},[199,82144,67074],{"class":205},[199,82146,82147],{"class":201,"line":36139},[199,82148,82149],{"class":1454},"      \u002F\u002F 追加给List\n",[199,82151,82152,82154,82156,82158,82161,82163,82165],{"class":201,"line":36184},[199,82153,58030],{"class":205},[199,82155,56658],{"class":878},[199,82157,1537],{"class":205},[199,82159,82160],{"class":898},"'.list'",[199,82162,76508],{"class":205},[199,82164,895],{"class":1086},[199,82166,76244],{"class":205},[199,82168,82169],{"class":201,"line":36190},[199,82170,2097],{"class":205},[199,82172,82173],{"class":201,"line":36196},[199,82174,82175],{"class":1454},"    \u002F\u002F 页面一打开就需要渲染\n",[199,82177,82178,82181],{"class":201,"line":36202},[199,82179,82180],{"class":878},"    render",[199,82182,82183],{"class":205},"(goodsList)\n",[199,82185,82186],{"class":201,"line":36213},[199,82187,82188],{"class":1454},"    \u002F\u002F 2.过滤筛选\n",[199,82190,82191,82193,82195,82197,82200,82202,82204,82206,82208,82210,82212,82214],{"class":201,"line":36219},[199,82192,2102],{"class":205},[199,82194,56658],{"class":878},[199,82196,1537],{"class":205},[199,82198,82199],{"class":898},"'.filter'",[199,82201,33668],{"class":205},[199,82203,60072],{"class":878},[199,82205,1537],{"class":205},[199,82207,60077],{"class":898},[199,82209,1912],{"class":205},[199,82211,3166],{"class":8113},[199,82213,82057],{"class":1086},[199,82215,1012],{"class":205},[199,82217,82218],{"class":201,"line":36225},[199,82219,82220],{"class":1454},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[199,82222,82223,82225,82227,82230,82232,82234,82236,82238],{"class":201,"line":36231},[199,82224,60487],{"class":1086},[199,82226,82066],{"class":205},[199,82228,82229],{"class":1018},"tagName",[199,82231,1912],{"class":205},[199,82233,34379],{"class":1018},[199,82235,82082],{"class":205},[199,82237,895],{"class":1086},[199,82239,82240],{"class":205}," e.target\n",[199,82242,82243],{"class":201,"line":36249},[199,82244,82245],{"class":1454},"      \u002F\u002F 判断\n",[199,82247,82248,82250,82252,82254,82256],{"class":201,"line":36263},[199,82249,56739],{"class":1086},[199,82251,69293],{"class":205},[199,82253,56745],{"class":1086},[199,82255,70515],{"class":898},[199,82257,1513],{"class":205},[199,82259,82260],{"class":201,"line":36272},[199,82261,82262],{"class":1454},"        \u002F\u002F console.log(11)\n",[199,82264,82265],{"class":201,"line":36281},[199,82266,82267],{"class":1454},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[199,82269,82270],{"class":201,"line":36290},[199,82271,82272],{"class":1454},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[199,82274,82275,82277,82279,82281],{"class":201,"line":36299},[199,82276,1467],{"class":1086},[199,82278,1470],{"class":205},[199,82280,895],{"class":1086},[199,82282,82283],{"class":205}," goodsList\n",[199,82285,82286,82288,82291,82293,82296],{"class":201,"line":36305},[199,82287,2017],{"class":1086},[199,82289,82290],{"class":205}," (dataset.index ",[199,82292,56745],{"class":1086},[199,82294,82295],{"class":898}," '1'",[199,82297,1513],{"class":205},[199,82299,82300,82303,82305,82308,82311,82313,82315,82317,82320,82322,82324,82327,82329,82331,82333],{"class":201,"line":36311},[199,82301,82302],{"class":205},"          arr ",[199,82304,895],{"class":1086},[199,82306,82307],{"class":205}," goodsList.",[199,82309,82310],{"class":878},"filter",[199,82312,1537],{"class":205},[199,82314,82054],{"class":8113},[199,82316,82057],{"class":1086},[199,82318,82319],{"class":205}," item.price ",[199,82321,4635],{"class":1086},[199,82323,1621],{"class":1018},[199,82325,82326],{"class":1086}," &&",[199,82328,82319],{"class":205},[199,82330,1501],{"class":1086},[199,82332,8651],{"class":1018},[199,82334,1594],{"class":205},[199,82336,82337,82340,82342,82344,82346,82348,82351],{"class":201,"line":36319},[199,82338,82339],{"class":205},"        } ",[199,82341,4626],{"class":1086},[199,82343,4629],{"class":1086},[199,82345,82290],{"class":205},[199,82347,56745],{"class":1086},[199,82349,82350],{"class":898}," '2'",[199,82352,1513],{"class":205},[199,82354,82355,82357,82359,82361,82363,82365,82367,82369,82371,82373,82375,82377,82379,82381,82384],{"class":201,"line":36324},[199,82356,82302],{"class":205},[199,82358,895],{"class":1086},[199,82360,82307],{"class":205},[199,82362,82310],{"class":878},[199,82364,1537],{"class":205},[199,82366,82054],{"class":8113},[199,82368,82057],{"class":1086},[199,82370,82319],{"class":205},[199,82372,4635],{"class":1086},[199,82374,8651],{"class":1018},[199,82376,82326],{"class":1086},[199,82378,82319],{"class":205},[199,82380,1501],{"class":1086},[199,82382,82383],{"class":1018}," 300",[199,82385,1594],{"class":205},[199,82387,82388,82390,82392,82394,82396,82398,82401],{"class":201,"line":36330},[199,82389,82339],{"class":205},[199,82391,4626],{"class":1086},[199,82393,4629],{"class":1086},[199,82395,82290],{"class":205},[199,82397,56745],{"class":1086},[199,82399,82400],{"class":898}," '3'",[199,82402,1513],{"class":205},[199,82404,82405,82407,82409,82411,82413,82415,82417,82419,82421,82423,82425],{"class":201,"line":36341},[199,82406,82302],{"class":205},[199,82408,895],{"class":1086},[199,82410,82307],{"class":205},[199,82412,82310],{"class":878},[199,82414,1537],{"class":205},[199,82416,82054],{"class":8113},[199,82418,82057],{"class":1086},[199,82420,82319],{"class":205},[199,82422,4635],{"class":1086},[199,82424,82383],{"class":1018},[199,82426,1594],{"class":205},[199,82428,82429],{"class":201,"line":36347},[199,82430,1046],{"class":205},[199,82432,82433],{"class":201,"line":36367},[199,82434,82435],{"class":1454},"        \u002F\u002F 渲染函数\n",[199,82437,82438,82440],{"class":201,"line":36373},[199,82439,72667],{"class":878},[199,82441,2107],{"class":205},[199,82443,82444],{"class":201,"line":36379},[199,82445,2092],{"class":205},[199,82447,82448],{"class":201,"line":36385},[199,82449,907],{"emptyLinePlaceholder":906},[199,82451,82452],{"class":201,"line":36402},[199,82453,36302],{"class":205},[199,82455,82456,82458,82460],{"class":201,"line":36408},[199,82457,2112],{"class":205},[199,82459,1446],{"class":874},[199,82461,882],{"class":205},[199,82463,82464,82466,82468],{"class":201,"line":36414},[199,82465,1414],{"class":205},[199,82467,1431],{"class":874},[199,82469,882],{"class":205},[199,82471,82472],{"class":201,"line":36420},[199,82473,907],{"emptyLinePlaceholder":906},[199,82475,82476,82478,82480],{"class":201,"line":36426},[199,82477,1414],{"class":205},[199,82479,194],{"class":874},[199,82481,882],{"class":205},[14,82483,82485],{"id":82484},"_410-深入了解对象","4.10 深入了解对象",[19,82487,82489],{"id":82488},"_4101-创建对象","4.10.1 创建对象",[31,82491,82492],{},[55,82493],{"alt":57,"src":82494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[31,82496,82497],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[19,82499,82501],{"id":82500},"_4102-构造函数","4.10.2 构造函数",[31,82503,82504,82507],{},[49,82505,82506],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[31,82509,82510,82513],{},[49,82511,82512],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[190,82515,82517],{"className":192,"code":82516,"language":194,"meta":57,"style":57},"\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",[196,82518,82519,82527,82532,82553,82566,82578,82590,82594,82599,82626,82631,82658],{"__ignoreMap":57},[199,82520,82521,82523,82525],{"class":201,"line":202},[199,82522,887],{"class":205},[199,82524,1446],{"class":874},[199,82526,882],{"class":205},[199,82528,82529],{"class":201,"line":36},[199,82530,82531],{"class":1454},"\u002F\u002F例：\n",[199,82533,82534,82536,82539,82541,82543,82545,82547,82549,82551],{"class":201,"line":73},[199,82535,56708],{"class":1086},[199,82537,82538],{"class":878}," Pig",[199,82540,1537],{"class":205},[199,82542,82069],{"class":8113},[199,82544,3461],{"class":205},[199,82546,72480],{"class":8113},[199,82548,3461],{"class":205},[199,82550,72497],{"class":8113},[199,82552,1513],{"class":205},[199,82554,82555,82558,82561,82563],{"class":201,"line":333},[199,82556,82557],{"class":1018},"    this",[199,82559,82560],{"class":205},".name",[199,82562,895],{"class":1086},[199,82564,82565],{"class":205},"name\n",[199,82567,82568,82570,82573,82575],{"class":201,"line":227},[199,82569,82557],{"class":1018},[199,82571,82572],{"class":205},".age",[199,82574,895],{"class":1086},[199,82576,82577],{"class":205},"age\n",[199,82579,82580,82582,82585,82587],{"class":201,"line":238},[199,82581,82557],{"class":1018},[199,82583,82584],{"class":205},".gender",[199,82586,895],{"class":1086},[199,82588,82589],{"class":205},"gender    \n",[199,82591,82592],{"class":201,"line":252},[199,82593,671],{"class":205},[199,82595,82596],{"class":201,"line":388},[199,82597,82598],{"class":1454},"\u002F\u002F创建佩奇对象\n",[199,82600,82601,82603,82606,82608,82610,82612,82615,82617,82619,82621,82624],{"class":201,"line":415},[199,82602,9689],{"class":1086},[199,82604,82605],{"class":1018}," Peppa",[199,82607,14580],{"class":1086},[199,82609,82538],{"class":878},[199,82611,1537],{"class":205},[199,82613,82614],{"class":898},"'佩奇'",[199,82616,3461],{"class":205},[199,82618,3428],{"class":1018},[199,82620,3461],{"class":205},[199,82622,82623],{"class":898},"'女'",[199,82625,1594],{"class":205},[199,82627,82628],{"class":201,"line":426},[199,82629,82630],{"class":1454},"\u002F\u002F创建乔治对象\n",[199,82632,82633,82635,82638,82640,82642,82644,82647,82649,82651,82653,82656],{"class":201,"line":1015},[199,82634,9689],{"class":1086},[199,82636,82637],{"class":1018}," George",[199,82639,14580],{"class":1086},[199,82641,82538],{"class":878},[199,82643,1537],{"class":205},[199,82645,82646],{"class":898},"'乔治'",[199,82648,3461],{"class":205},[199,82650,1920],{"class":1018},[199,82652,3461],{"class":205},[199,82654,82655],{"class":898},"'男'",[199,82657,1594],{"class":205},[199,82659,82660,82662,82664],{"class":201,"line":1031},[199,82661,1414],{"class":205},[199,82663,1446],{"class":874},[199,82665,882],{"class":205},[31,82667,82668],{},[55,82669],{"alt":57,"src":82670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[31,82672,82673],{},[55,82674],{"alt":57,"src":82675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[31,82677,82678],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[31,82680,82681],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[31,82683,82684],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[31,82686,82687],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[31,82689,82690],{},"这里用等号是因为：对象.属性=值",[31,82692,82693],{},"①利用对象字面量创建对象",[31,82695,82696],{},"const o={",[31,82698,82699],{},"name:'pink'",[31,82701,82702],{},"} ②利用new Object创建对象",[31,82704,82705],{},"const o=new Object({name:'pink'})",[31,82707,82708],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[31,82710,82711],{},"构造函数创建对象的执行过程：",[31,82713,82714],{},[55,82715],{"alt":57,"src":82716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[19,82718,82720],{"id":82719},"_4103-实例成员","4.10.3 实例成员",[31,82722,82723],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[24,82725,82726,82729,82732],{},[27,82727,82728],{},"实例对象的属性和方法即为实例成员",[27,82730,82731],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[27,82733,82734],{},"构造函数创建的实例对象彼此独立互不影响",[19,82736,82738],{"id":82737},"_4104-静态成员","4.10.4 静态成员",[31,82740,82741],{},[55,82742],{"alt":57,"src":82743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[31,82745,82746],{},"静态成员有Date.now() Math.PI Math.random()",[31,82748,82749],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[31,82751,82752],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[31,82754,82755],{},"function Pig(name) n {",[31,82757,82758],{},"this.name=name",[31,82760,759],{},[31,82762,82763],{},"Pig.eyes=2",[31,82765,82766],{},"Pig.sayHai=function () { console.log(this) }",[31,82768,82769],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[31,82771,82772],{},"console.log(Pig.eyes) \u002F\u002F2",[31,82774,14195],{},[24,82776,82777,82780,82783,82786,82789],{},[27,82778,82779],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[27,82781,82782],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[27,82784,82785],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[27,82787,82788],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[27,82790,82791],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[31,82793,82794],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[19,82796,82798],{"id":82797},"_4105-内置构造函数","4.10.5 内置构造函数",[31,82800,82801],{},"内置构造函数包含：",[31,82803,82804],{},[55,82805],{"alt":57,"src":82806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[31,82808,82809],{},[55,82810],{"alt":57,"src":82811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[31,82813,82814],{},"这些基本数据类型，js对他们进行了包装",[1446,82816,82817],{},"\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",[627,82819,82821],{"id":82820},"_41051-object","4.10.5.1 Object",[31,82823,82824],{},"Object 是内置的构造函数，用于创建普通对象",[31,82826,82827],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[190,82829,82831],{"className":192,"code":82830,"language":194,"meta":57,"style":57},"const user=new Object({name:'小明',age:15})\n",[196,82832,82833],{"__ignoreMap":57},[199,82834,82835],{"class":201,"line":202},[199,82836,82830],{"class":205},[31,82838,82839],{},"三个常用的静态方法：",[25754,82841,82843],{"id":82842},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[31,82845,82846],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[31,82848,82849],{},[55,82850],{"alt":57,"src":82851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[31,82853,82854],{},[55,82855],{"alt":57,"src":82856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[190,82858,82860],{"className":2763,"code":82859,"language":2765,"meta":57,"style":57},"\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",[196,82861,82862,82870,82878,82883,82888,82893,82898,82903,82908,82916],{"__ignoreMap":57},[199,82863,82864,82866,82868],{"class":201,"line":202},[199,82865,887],{"class":205},[199,82867,1431],{"class":874},[199,82869,882],{"class":205},[199,82871,82872,82874,82876],{"class":201,"line":36},[199,82873,1824],{"class":205},[199,82875,1446],{"class":874},[199,82877,882],{"class":205},[199,82879,82880],{"class":201,"line":73},[199,82881,82882],{"class":205},"    const o = { name: 'pink', age: 6 }\n",[199,82884,82885],{"class":201,"line":333},[199,82886,82887],{"class":205},"    \u002F\u002F 获得所有属性名\n",[199,82889,82890],{"class":201,"line":227},[199,82891,82892],{"class":205},"    const arr = Object.keys(o)\n",[199,82894,82895],{"class":201,"line":238},[199,82896,82897],{"class":205},"    console.log(arr)\n",[199,82899,82900],{"class":201,"line":252},[199,82901,82902],{"class":205},"    \u002F\u002F 获得所有属性值\n",[199,82904,82905],{"class":201,"line":388},[199,82906,82907],{"class":205},"    console.log(Object.values(o))\n",[199,82909,82910,82912,82914],{"class":201,"line":415},[199,82911,2112],{"class":205},[199,82913,1446],{"class":874},[199,82915,882],{"class":205},[199,82917,82918,82920,82922],{"class":201,"line":426},[199,82919,1414],{"class":205},[199,82921,1431],{"class":874},[199,82923,882],{"class":205},[25754,82925,82927],{"id":82926},"_410512-object-assign","4.10.5.1.2 Object. assign",[31,82929,82930],{},"Object.assign(oo,o)",[31,82932,82933],{},"后的东西添加给前 是追加",[31,82935,82936],{},[55,82937],{"alt":57,"src":82938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[31,82940,82941],{},[55,82942],{"alt":57,"src":82943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[190,82945,82947],{"className":2763,"code":82946,"language":2765,"meta":57,"style":57},"\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",[196,82948,82949,82957,82965,82969,82973,82977,82981,82985,82989,82994,82999,83004,83009,83014,83022],{"__ignoreMap":57},[199,82950,82951,82953,82955],{"class":201,"line":202},[199,82952,887],{"class":205},[199,82954,1431],{"class":874},[199,82956,882],{"class":205},[199,82958,82959,82961,82963],{"class":201,"line":36},[199,82960,1824],{"class":205},[199,82962,1446],{"class":874},[199,82964,882],{"class":205},[199,82966,82967],{"class":201,"line":73},[199,82968,82882],{"class":205},[199,82970,82971],{"class":201,"line":333},[199,82972,82887],{"class":205},[199,82974,82975],{"class":201,"line":227},[199,82976,82892],{"class":205},[199,82978,82979],{"class":201,"line":238},[199,82980,82897],{"class":205},[199,82982,82983],{"class":201,"line":252},[199,82984,82902],{"class":205},[199,82986,82987],{"class":201,"line":388},[199,82988,82907],{"class":205},[199,82990,82991],{"class":201,"line":415},[199,82992,82993],{"class":205},"    const oo = {}\n",[199,82995,82996],{"class":201,"line":426},[199,82997,82998],{"class":205},"    Object.assign(oo, o)\n",[199,83000,83001],{"class":201,"line":1015},[199,83002,83003],{"class":205},"    console.log(oo)\n",[199,83005,83006],{"class":201,"line":1031},[199,83007,83008],{"class":205},"    Object.assign(o, { gender: '女' })\n",[199,83010,83011],{"class":201,"line":1043},[199,83012,83013],{"class":205},"    console.log(o)\n",[199,83015,83016,83018,83020],{"class":201,"line":1049},[199,83017,2112],{"class":205},[199,83019,1446],{"class":874},[199,83021,882],{"class":205},[199,83023,83024,83026,83028],{"class":201,"line":1054},[199,83025,1414],{"class":205},[199,83027,1431],{"class":874},[199,83029,882],{"class":205},[31,83031,83032],{},[55,83033],{"alt":57,"src":83034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[627,83036,83038],{"id":83037},"_41052-array","4.10.5.2 Array",[31,83040,83041],{},"Array 是内置的构造函数，用于创建数组",[31,83043,83044],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[190,83046,83048],{"className":192,"code":83047,"language":194,"meta":57,"style":57},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[196,83049,83050,83055],{"__ignoreMap":57},[199,83051,83052],{"class":201,"line":202},[199,83053,83054],{"class":205},"const arr=new Array(3,5)\n",[199,83056,83057],{"class":201,"line":36},[199,83058,83059],{"class":205},"console.log(arr)  \u002F\u002F[3,5]\n",[31,83061,83062],{},"Array的实例方法，这个方法是实例成员",[31,83064,83065],{},[55,83066],{"alt":57,"src":83067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[25754,83069,83071],{"id":83070},"_410521-reduce","4.10.5.2.1 reduce",[31,83073,83074],{},[55,83075],{"alt":57,"src":83076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[190,83078,83080],{"className":2763,"code":83079,"language":2765,"meta":57,"style":57},"\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",[196,83081,83082,83090,83098,83103,83108,83113,83118,83122,83127,83132,83137,83141,83146,83151,83155,83160,83165,83170,83178],{"__ignoreMap":57},[199,83083,83084,83086,83088],{"class":201,"line":202},[199,83085,887],{"class":205},[199,83087,1431],{"class":874},[199,83089,882],{"class":205},[199,83091,83092,83094,83096],{"class":201,"line":36},[199,83093,1824],{"class":205},[199,83095,1446],{"class":874},[199,83097,882],{"class":205},[199,83099,83100],{"class":201,"line":73},[199,83101,83102],{"class":205},"    const arr = [1, 5, 8]\n",[199,83104,83105],{"class":201,"line":333},[199,83106,83107],{"class":205},"    \u002F\u002F 1.没有初始值\n",[199,83109,83110],{"class":201,"line":227},[199,83111,83112],{"class":205},"    const total = arr.reduce(function (prev, current) {\n",[199,83114,83115],{"class":201,"line":238},[199,83116,83117],{"class":205},"      return prev + current\n",[199,83119,83120],{"class":201,"line":252},[199,83121,36302],{"class":205},[199,83123,83124],{"class":201,"line":388},[199,83125,83126],{"class":205},"    console.log(total)   \u002F\u002F14\n",[199,83128,83129],{"class":201,"line":415},[199,83130,83131],{"class":205},"    \u002F\u002F 2.有初始值\n",[199,83133,83134],{"class":201,"line":426},[199,83135,83136],{"class":205},"    const total1 = arr.reduce(function (prev, current) {\n",[199,83138,83139],{"class":201,"line":1015},[199,83140,83117],{"class":205},[199,83142,83143],{"class":201,"line":1031},[199,83144,83145],{"class":205},"    }, 10)\n",[199,83147,83148],{"class":201,"line":1043},[199,83149,83150],{"class":205},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[199,83152,83153],{"class":201,"line":1049},[199,83154,907],{"emptyLinePlaceholder":906},[199,83156,83157],{"class":201,"line":1054},[199,83158,83159],{"class":205},"    \u002F\u002F 3.箭头函数写法\n",[199,83161,83162],{"class":201,"line":1062},[199,83163,83164],{"class":205},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[199,83166,83167],{"class":201,"line":1075},[199,83168,83169],{"class":205},"    console.log(total2)   \u002F\u002F24\n",[199,83171,83172,83174,83176],{"class":201,"line":1092},[199,83173,2112],{"class":205},[199,83175,1446],{"class":874},[199,83177,882],{"class":205},[199,83179,83180,83182,83184],{"class":201,"line":1107},[199,83181,1414],{"class":205},[199,83183,1431],{"class":874},[199,83185,882],{"class":205},[31,83187,83188],{},"执行过程：",[24,83190,83191,83194,83197],{},[27,83192,83193],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[27,83195,83196],{},"每一次循环，把返回值给作为下一次循环的上一次值",[27,83198,83199],{},"如果有起始值，则起始值作为上一次值",[190,83201,83203],{"className":2763,"code":83202,"language":2765,"meta":57,"style":57},"\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",[196,83204,83205,83213,83221,83225,83229,83233,83237,83241,83245,83250,83255,83260,83265,83270,83274,83278,83282,83286,83290,83294,83299,83303,83308,83312,83317,83322,83326,83330,83334,83342],{"__ignoreMap":57},[199,83206,83207,83209,83211],{"class":201,"line":202},[199,83208,887],{"class":205},[199,83210,1431],{"class":874},[199,83212,882],{"class":205},[199,83214,83215,83217,83219],{"class":201,"line":36},[199,83216,1824],{"class":205},[199,83218,1446],{"class":874},[199,83220,882],{"class":205},[199,83222,83223],{"class":201,"line":73},[199,83224,83102],{"class":205},[199,83226,83227],{"class":201,"line":333},[199,83228,83107],{"class":205},[199,83230,83231],{"class":201,"line":227},[199,83232,83112],{"class":205},[199,83234,83235],{"class":201,"line":238},[199,83236,83117],{"class":205},[199,83238,83239],{"class":201,"line":252},[199,83240,36302],{"class":205},[199,83242,83243],{"class":201,"line":388},[199,83244,83126],{"class":205},[199,83246,83247],{"class":201,"line":415},[199,83248,83249],{"class":205},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[199,83251,83252],{"class":201,"line":426},[199,83253,83254],{"class":205},"    \u002F\u002F     1              5                    6\n",[199,83256,83257],{"class":201,"line":1015},[199,83258,83259],{"class":205},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[199,83261,83262],{"class":201,"line":1031},[199,83263,83264],{"class":205},"    \u002F\u002F     6              8                    14\n",[199,83266,83267],{"class":201,"line":1043},[199,83268,83269],{"class":205},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[199,83271,83272],{"class":201,"line":1049},[199,83273,83131],{"class":205},[199,83275,83276],{"class":201,"line":1054},[199,83277,83136],{"class":205},[199,83279,83280],{"class":201,"line":1062},[199,83281,83117],{"class":205},[199,83283,83284],{"class":201,"line":1075},[199,83285,83145],{"class":205},[199,83287,83288],{"class":201,"line":1092},[199,83289,83150],{"class":205},[199,83291,83292],{"class":201,"line":1107},[199,83293,83249],{"class":205},[199,83295,83296],{"class":201,"line":1128},[199,83297,83298],{"class":205},"    \u002F\u002F     10             1                     11\n",[199,83300,83301],{"class":201,"line":1146},[199,83302,83259],{"class":205},[199,83304,83305],{"class":201,"line":1163},[199,83306,83307],{"class":205},"    \u002F\u002F     11             5                    16\n",[199,83309,83310],{"class":201,"line":1176},[199,83311,83259],{"class":205},[199,83313,83314],{"class":201,"line":1189},[199,83315,83316],{"class":205},"    \u002F\u002F     16             8                    24\n",[199,83318,83319],{"class":201,"line":1202},[199,83320,83321],{"class":205},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[199,83323,83324],{"class":201,"line":1207},[199,83325,83159],{"class":205},[199,83327,83328],{"class":201,"line":1212},[199,83329,83164],{"class":205},[199,83331,83332],{"class":201,"line":1225},[199,83333,83169],{"class":205},[199,83335,83336,83338,83340],{"class":201,"line":1236},[199,83337,2112],{"class":205},[199,83339,1446],{"class":874},[199,83341,882],{"class":205},[199,83343,83344,83346,83348],{"class":201,"line":1249},[199,83345,1414],{"class":205},[199,83347,1431],{"class":874},[199,83349,882],{"class":205},[25754,83351,83353],{"id":83352},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[31,83355,83356],{},[55,83357],{"alt":57,"src":83358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[190,83360,83362],{"className":2763,"code":83361,"language":2765,"meta":57,"style":57},"\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",[196,83363,83364,83372,83380,83385,83390,83395,83400,83404,83409,83414,83419,83424,83429,83434,83438,83443,83447,83452,83460],{"__ignoreMap":57},[199,83365,83366,83368,83370],{"class":201,"line":202},[199,83367,887],{"class":205},[199,83369,1431],{"class":874},[199,83371,882],{"class":205},[199,83373,83374,83376,83378],{"class":201,"line":36},[199,83375,1824],{"class":205},[199,83377,1446],{"class":874},[199,83379,882],{"class":205},[199,83381,83382],{"class":201,"line":73},[199,83383,83384],{"class":205},"    const arr = [\n",[199,83386,83387],{"class":201,"line":333},[199,83388,83389],{"class":205},"      { name: '张三', salary: 10000 },\n",[199,83391,83392],{"class":201,"line":227},[199,83393,83394],{"class":205},"      { name: '李四', salary: 10000 },\n",[199,83396,83397],{"class":201,"line":238},[199,83398,83399],{"class":205},"      { name: '王五', salary: 10000 }\n",[199,83401,83402],{"class":201,"line":252},[199,83403,2805],{"class":205},[199,83405,83406],{"class":201,"line":388},[199,83407,83408],{"class":205},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[199,83410,83411],{"class":201,"line":415},[199,83412,83413],{"class":205},"    \u002F\u002F prev是累计值\n",[199,83415,83416],{"class":201,"line":426},[199,83417,83418],{"class":205},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[199,83420,83421],{"class":201,"line":1015},[199,83422,83423],{"class":205},"    console.log(total)\n",[199,83425,83426],{"class":201,"line":1031},[199,83427,83428],{"class":205},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[199,83430,83431],{"class":201,"line":1043},[199,83432,83433],{"class":205},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[199,83435,83436],{"class":201,"line":1049},[199,83437,83428],{"class":205},[199,83439,83440],{"class":201,"line":1054},[199,83441,83442],{"class":205},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[199,83444,83445],{"class":201,"line":1062},[199,83446,83428],{"class":205},[199,83448,83449],{"class":201,"line":1075},[199,83450,83451],{"class":205},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[199,83453,83454,83456,83458],{"class":201,"line":1092},[199,83455,2112],{"class":205},[199,83457,1446],{"class":874},[199,83459,882],{"class":205},[199,83461,83462,83464,83466],{"class":201,"line":1107},[199,83463,1414],{"class":205},[199,83465,1431],{"class":874},[199,83467,882],{"class":205},[25754,83469,83471],{"id":83470},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[31,83473,83474],{},[55,83475],{"alt":57,"src":83476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[31,83478,83479],{},[55,83480],{"alt":57,"src":83481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[24,83483,83484],{},[27,83485,83486],{},"find()",[31,83488,83489],{},"循环查找，找到第一个就ok",[31,83491,83492],{},[2867,83493,83496],{"href":83494,"rel":83495},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[2871],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[190,83498,83500],{"className":192,"code":83499,"language":194,"meta":57,"style":57},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[196,83501,83502,83507,83512],{"__ignoreMap":57},[199,83503,83504],{"class":201,"line":202},[199,83505,83506],{"class":205},"const array1 = [5, 12, 8, 130, 44]\n",[199,83508,83509],{"class":201,"line":36},[199,83510,83511],{"class":205},"const found = array1.find((element) => element > 10)\n",[199,83513,83514],{"class":201,"line":73},[199,83515,83516],{"class":205},"console.log(found)  \u002F\u002F12\n",[31,83518,83519,83521,83522,83527,83528,83531,83532,83534,83535,83540,83541,83543,83544,83546,83547,83549,83550],{},[196,83520,83486],{}," 方法是一个",[2867,83523,83526],{"href":83524,"rel":83525},"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",[2871],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[196,83529,83530],{},"callbackFn"," 函数，直到 ",[196,83533,83530],{}," 返回一个",[2867,83536,83539],{"href":83537,"rel":83538},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[2871],"真值","。然后 ",[196,83542,83486],{}," 返回该元素并停止迭代数组。如果 ",[196,83545,83530],{}," 从未返回真值，则 ",[196,83548,83486],{}," 返回 ",[196,83551,83552],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[190,83554,83556],{"className":2763,"code":83555,"language":2765,"meta":57,"style":57},"\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",[196,83557,83558,83566,83574,83579,83584,83589,83593,83598,83603,83607,83612,83617,83621,83625,83630,83635,83639,83643,83648,83653,83658,83663,83668,83672,83677,83682,83687,83692,83696,83701,83709],{"__ignoreMap":57},[199,83559,83560,83562,83564],{"class":201,"line":202},[199,83561,887],{"class":205},[199,83563,1431],{"class":874},[199,83565,882],{"class":205},[199,83567,83568,83570,83572],{"class":201,"line":36},[199,83569,1824],{"class":205},[199,83571,1446],{"class":874},[199,83573,882],{"class":205},[199,83575,83576],{"class":201,"line":73},[199,83577,83578],{"class":205},"    const arr = ['red', 'blue', 'green']\n",[199,83580,83581],{"class":201,"line":333},[199,83582,83583],{"class":205},"    const found = arr.find(item => item === 'pink')\n",[199,83585,83586],{"class":201,"line":227},[199,83587,83588],{"class":205},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[199,83590,83591],{"class":201,"line":238},[199,83592,907],{"emptyLinePlaceholder":906},[199,83594,83595],{"class":201,"line":252},[199,83596,83597],{"class":205},"    \u002F\u002F 使用场景，用于查找数据\n",[199,83599,83600],{"class":201,"line":388},[199,83601,83602],{"class":205},"    const arr1 = [\n",[199,83604,83605],{"class":201,"line":415},[199,83606,81645],{"class":205},[199,83608,83609],{"class":201,"line":426},[199,83610,83611],{"class":205},"        name: '小米',\n",[199,83613,83614],{"class":201,"line":1015},[199,83615,83616],{"class":205},"        price: 1999\n",[199,83618,83619],{"class":201,"line":1031},[199,83620,80151],{"class":205},[199,83622,83623],{"class":201,"line":1043},[199,83624,81645],{"class":205},[199,83626,83627],{"class":201,"line":1049},[199,83628,83629],{"class":205},"        name: '华为',\n",[199,83631,83632],{"class":201,"line":1054},[199,83633,83634],{"class":205},"        price: 3999\n",[199,83636,83637],{"class":201,"line":1062},[199,83638,2092],{"class":205},[199,83640,83641],{"class":201,"line":1075},[199,83642,2805],{"class":205},[199,83644,83645],{"class":201,"line":1092},[199,83646,83647],{"class":205},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[199,83649,83650],{"class":201,"line":1107},[199,83651,83652],{"class":205},"    \u002F\u002F const found1 = arr1.find(item => {\n",[199,83654,83655],{"class":201,"line":1128},[199,83656,83657],{"class":205},"    \u002F\u002F   if (item.name === '小米') {\n",[199,83659,83660],{"class":201,"line":1146},[199,83661,83662],{"class":205},"    \u002F\u002F     return item\n",[199,83664,83665],{"class":201,"line":1163},[199,83666,83667],{"class":205},"    \u002F\u002F   }\n",[199,83669,83670],{"class":201,"line":1176},[199,83671,65549],{"class":205},[199,83673,83674],{"class":201,"line":1189},[199,83675,83676],{"class":205},"    \u002F\u002F 另一种写法\n",[199,83678,83679],{"class":201,"line":1202},[199,83680,83681],{"class":205},"    const found1 = arr1.find(item => {\n",[199,83683,83684],{"class":201,"line":1207},[199,83685,83686],{"class":205},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[199,83688,83689],{"class":201,"line":1212},[199,83690,83691],{"class":205},"      return item.name = '小米'\n",[199,83693,83694],{"class":201,"line":1225},[199,83695,36302],{"class":205},[199,83697,83698],{"class":201,"line":1236},[199,83699,83700],{"class":205},"    console.log(found1)\n",[199,83702,83703,83705,83707],{"class":201,"line":1249},[199,83704,2112],{"class":205},[199,83706,1446],{"class":874},[199,83708,882],{"class":205},[199,83710,83711,83713,83715],{"class":201,"line":1262},[199,83712,1414],{"class":205},[199,83714,1431],{"class":874},[199,83716,882],{"class":205},[31,83718,83719],{},[55,83720],{"alt":57,"src":83721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[31,83723,83724],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[24,83726,83727],{"start":36},[27,83728,83729],{},"every()返回的是布尔值",[31,83731,83732],{},[2867,83733,83736],{"href":83734,"rel":83735},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[2871],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[31,83738,83739],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[31,83741,83742],{},"some是只有有一个就没问题",[31,83744,83745],{},"every是必须全是才行",[190,83747,83751],{"className":83748,"code":83749,"language":83750,"meta":57,"style":57},"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",[196,83752,83753,83769,83783,83787,83796],{"__ignoreMap":57},[199,83754,83755,83757,83760,83762,83764,83767],{"class":201,"line":202},[199,83756,56708],{"class":1086},[199,83758,83759],{"class":205}," isBigEnough(element, ",[199,83761,76317],{"class":1086},[199,83763,1912],{"class":205},[199,83765,83766],{"class":1086},"array",[199,83768,1513],{"class":205},[199,83770,83771,83774,83777,83779,83781],{"class":201,"line":36},[199,83772,83773],{"class":1086},"  return",[199,83775,83776],{"class":205}," element ",[199,83778,4635],{"class":1086},[199,83780,4954],{"class":1018},[199,83782,1028],{"class":205},[199,83784,83785],{"class":201,"line":73},[199,83786,671],{"class":205},[199,83788,83789,83792,83794],{"class":201,"line":333},[199,83790,83791],{"class":205},"[12, 5, 8, 130, 44].every(isBigEnough); ",[199,83793,36170],{"class":1086},[199,83795,56775],{"class":205},[199,83797,83798,83801,83803],{"class":201,"line":227},[199,83799,83800],{"class":205},"[12, 54, 18, 130, 44].every(isBigEnough); ",[199,83802,36170],{"class":1086},[199,83804,60199],{"class":205},[190,83806,83808],{"className":2763,"code":83807,"language":2765,"meta":57,"style":57},"\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",[196,83809,83810,83818,83826,83831,83835,83840,83845,83853],{"__ignoreMap":57},[199,83811,83812,83814,83816],{"class":201,"line":202},[199,83813,887],{"class":205},[199,83815,1431],{"class":874},[199,83817,882],{"class":205},[199,83819,83820,83822,83824],{"class":201,"line":36},[199,83821,1824],{"class":205},[199,83823,1446],{"class":874},[199,83825,882],{"class":205},[199,83827,83828],{"class":201,"line":73},[199,83829,83830],{"class":205},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[199,83832,83833],{"class":201,"line":333},[199,83834,80581],{"class":205},[199,83836,83837],{"class":201,"line":227},[199,83838,83839],{"class":205},"    const flag = arr.every(item => item >= 10)\n",[199,83841,83842],{"class":201,"line":238},[199,83843,83844],{"class":205},"    console.log(flag)    \u002F\u002Ftrue\n",[199,83846,83847,83849,83851],{"class":201,"line":252},[199,83848,2112],{"class":205},[199,83850,1446],{"class":874},[199,83852,882],{"class":205},[199,83854,83855,83857,83859],{"class":201,"line":388},[199,83856,1414],{"class":205},[199,83858,1431],{"class":874},[199,83860,882],{"class":205},[190,83862,83864],{"className":2763,"code":83863,"language":2765,"meta":57,"style":57},"\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",[196,83865,83866,83874,83882,83886,83891,83896,83901,83909],{"__ignoreMap":57},[199,83867,83868,83870,83872],{"class":201,"line":202},[199,83869,887],{"class":205},[199,83871,1431],{"class":874},[199,83873,882],{"class":205},[199,83875,83876,83878,83880],{"class":201,"line":36},[199,83877,1824],{"class":205},[199,83879,1446],{"class":874},[199,83881,882],{"class":205},[199,83883,83884],{"class":201,"line":73},[199,83885,83830],{"class":205},[199,83887,83888],{"class":201,"line":333},[199,83889,83890],{"class":205},"    const arr = [10, 0, 5]\n",[199,83892,83893],{"class":201,"line":227},[199,83894,83895],{"class":205},"    const flag = arr.some(item => item >= 10)\n",[199,83897,83898],{"class":201,"line":238},[199,83899,83900],{"class":205},"    console.log(flag)   \u002F\u002Ftrue\n",[199,83902,83903,83905,83907],{"class":201,"line":252},[199,83904,2112],{"class":205},[199,83906,1446],{"class":874},[199,83908,882],{"class":205},[199,83910,83911,83913,83915],{"class":201,"line":388},[199,83912,1414],{"class":205},[199,83914,1431],{"class":874},[199,83916,882],{"class":205},[25754,83918,83920],{"id":83919},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[31,83922,83923],{},[55,83924],{"alt":57,"src":83925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[190,83927,83929],{"className":192,"code":83928,"language":194,"meta":57,"style":57},"\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",[196,83930,83931,83941,83955,83959,83967,83981,84001,84013,84021,84028,84040,84052,84064,84076,84086,84096,84100,84108,84116,84120,84128,84140,84148,84170,84175,84180,84213,84221,84229,84233],{"__ignoreMap":57},[199,83932,83933,83935,83937,83939],{"class":201,"line":202},[199,83934,871],{"class":205},[199,83936,875],{"class":874},[199,83938,879],{"class":878},[199,83940,882],{"class":205},[199,83942,83943,83945,83947,83949,83951,83953],{"class":201,"line":36},[199,83944,887],{"class":205},[199,83946,194],{"class":874},[199,83948,892],{"class":878},[199,83950,895],{"class":205},[199,83952,899],{"class":898},[199,83954,882],{"class":205},[199,83956,83957],{"class":201,"line":73},[199,83958,907],{"emptyLinePlaceholder":906},[199,83960,83961,83963,83965],{"class":201,"line":333},[199,83962,887],{"class":205},[199,83964,914],{"class":874},[199,83966,882],{"class":205},[199,83968,83969,83971,83973,83975,83977,83979],{"class":201,"line":227},[199,83970,1824],{"class":205},[199,83972,924],{"class":874},[199,83974,927],{"class":878},[199,83976,895],{"class":205},[199,83978,932],{"class":898},[199,83980,882],{"class":205},[199,83982,83983,83985,83987,83989,83991,83993,83995,83997,83999],{"class":201,"line":238},[199,83984,1824],{"class":205},[199,83986,924],{"class":874},[199,83988,967],{"class":878},[199,83990,895],{"class":205},[199,83992,972],{"class":898},[199,83994,951],{"class":878},[199,83996,895],{"class":205},[199,83998,979],{"class":898},[199,84000,882],{"class":205},[199,84002,84003,84005,84007,84009,84011],{"class":201,"line":252},[199,84004,1824],{"class":205},[199,84006,988],{"class":874},[199,84008,991],{"class":205},[199,84010,988],{"class":874},[199,84012,882],{"class":205},[199,84014,84015,84017,84019],{"class":201,"line":388},[199,84016,1824],{"class":205},[199,84018,1002],{"class":874},[199,84020,882],{"class":205},[199,84022,84023,84026],{"class":201,"line":415},[199,84024,84025],{"class":874},"    div",[199,84027,1012],{"class":205},[199,84029,84030,84032,84034,84036,84038],{"class":201,"line":426},[199,84031,57030],{"class":1018},[199,84033,1022],{"class":205},[199,84035,4647],{"class":1018},[199,84037,1087],{"class":1086},[199,84039,1028],{"class":205},[199,84041,84042,84044,84046,84048,84050],{"class":201,"line":1015},[199,84043,57044],{"class":1018},[199,84045,1022],{"class":205},[199,84047,3484],{"class":1018},[199,84049,1087],{"class":1086},[199,84051,1028],{"class":205},[199,84053,84054,84056,84058,84060,84062],{"class":201,"line":1031},[199,84055,59618],{"class":1018},[199,84057,1022],{"class":205},[199,84059,3484],{"class":1018},[199,84061,1087],{"class":1086},[199,84063,1028],{"class":205},[199,84065,84066,84068,84070,84072,84074],{"class":201,"line":1043},[199,84067,67392],{"class":1018},[199,84069,1022],{"class":205},[199,84071,3579],{"class":1018},[199,84073,1087],{"class":1086},[199,84075,1028],{"class":205},[199,84077,84078,84080,84082,84084],{"class":201,"line":1049},[199,84079,59545],{"class":1018},[199,84081,1022],{"class":205},[199,84083,1197],{"class":1018},[199,84085,1028],{"class":205},[199,84087,84088,84090,84092,84094],{"class":201,"line":1054},[199,84089,57143],{"class":1018},[199,84091,1022],{"class":205},[199,84093,1257],{"class":1018},[199,84095,1028],{"class":205},[199,84097,84098],{"class":201,"line":1062},[199,84099,2097],{"class":205},[199,84101,84102,84104,84106],{"class":201,"line":1075},[199,84103,2112],{"class":205},[199,84105,1002],{"class":874},[199,84107,882],{"class":205},[199,84109,84110,84112,84114],{"class":201,"line":1092},[199,84111,1414],{"class":205},[199,84113,914],{"class":874},[199,84115,882],{"class":205},[199,84117,84118],{"class":201,"line":1107},[199,84119,907],{"emptyLinePlaceholder":906},[199,84121,84122,84124,84126],{"class":201,"line":1128},[199,84123,887],{"class":205},[199,84125,1431],{"class":874},[199,84127,882],{"class":205},[199,84129,84130,84132,84134,84136,84138],{"class":201,"line":1146},[199,84131,1824],{"class":205},[199,84133,1220],{"class":874},[199,84135,57573],{"class":205},[199,84137,1220],{"class":874},[199,84139,882],{"class":205},[199,84141,84142,84144,84146],{"class":201,"line":1163},[199,84143,1824],{"class":205},[199,84145,1446],{"class":874},[199,84147,882],{"class":205},[199,84149,84150,84152,84155,84157,84160,84163,84165,84168],{"class":201,"line":1176},[199,84151,14084],{"class":1086},[199,84153,84154],{"class":1018}," spec",[199,84156,16425],{"class":1086},[199,84158,84159],{"class":205}," { size: ",[199,84161,84162],{"class":898},"'40cm*40cm'",[199,84164,57723],{"class":205},[199,84166,84167],{"class":898},"'黑色'",[199,84169,57863],{"class":205},[199,84171,84172],{"class":201,"line":1189},[199,84173,84174],{"class":1454},"    \u002F\u002F const arr = Object.values(spec)\n",[199,84176,84177],{"class":201,"line":1202},[199,84178,84179],{"class":1454},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[199,84181,84182,84184,84186,84188,84191,84193,84195,84198,84201,84204,84206,84208,84211],{"class":201,"line":1207},[199,84183,2102],{"class":205},[199,84185,56658],{"class":878},[199,84187,1537],{"class":205},[199,84189,84190],{"class":898},"'div'",[199,84192,76508],{"class":205},[199,84194,895],{"class":1086},[199,84196,84197],{"class":205}," Object.",[199,84199,84200],{"class":878},"values",[199,84202,84203],{"class":205},"(spec).",[199,84205,76482],{"class":878},[199,84207,1537],{"class":205},[199,84209,84210],{"class":898},"'\u002F'",[199,84212,1594],{"class":205},[199,84214,84215,84217,84219],{"class":201,"line":1212},[199,84216,2112],{"class":205},[199,84218,1446],{"class":874},[199,84220,882],{"class":205},[199,84222,84223,84225,84227],{"class":201,"line":1225},[199,84224,1414],{"class":205},[199,84226,1431],{"class":874},[199,84228,882],{"class":205},[199,84230,84231],{"class":201,"line":1236},[199,84232,907],{"emptyLinePlaceholder":906},[199,84234,84235,84237,84239],{"class":201,"line":1249},[199,84236,1414],{"class":205},[199,84238,194],{"class":874},[199,84240,882],{"class":205},[31,84242,84243],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[25754,84245,84247],{"id":84246},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[31,84249,84250],{},"静态方法，将伪数组转换为真数组",[31,84252,84253],{},[55,84254],{"alt":57,"src":84255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[190,84257,84259],{"className":2763,"code":84258,"language":2765,"meta":57,"style":57},"\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",[196,84260,84261,84269,84277,84289,84301,84313,84321,84329,84334,84339,84344,84349,84357],{"__ignoreMap":57},[199,84262,84263,84265,84267],{"class":201,"line":202},[199,84264,887],{"class":205},[199,84266,1431],{"class":874},[199,84268,882],{"class":205},[199,84270,84271,84273,84275],{"class":201,"line":36},[199,84272,1824],{"class":205},[199,84274,176],{"class":874},[199,84276,882],{"class":205},[199,84278,84279,84281,84283,84285,84287],{"class":201,"line":73},[199,84280,921],{"class":205},[199,84282,27],{"class":874},[199,84284,57573],{"class":205},[199,84286,27],{"class":874},[199,84288,882],{"class":205},[199,84290,84291,84293,84295,84297,84299],{"class":201,"line":333},[199,84292,921],{"class":205},[199,84294,27],{"class":874},[199,84296,57573],{"class":205},[199,84298,27],{"class":874},[199,84300,882],{"class":205},[199,84302,84303,84305,84307,84309,84311],{"class":201,"line":227},[199,84304,921],{"class":205},[199,84306,27],{"class":874},[199,84308,57573],{"class":205},[199,84310,27],{"class":874},[199,84312,882],{"class":205},[199,84314,84315,84317,84319],{"class":201,"line":238},[199,84316,2112],{"class":205},[199,84318,176],{"class":874},[199,84320,882],{"class":205},[199,84322,84323,84325,84327],{"class":201,"line":252},[199,84324,1824],{"class":205},[199,84326,1446],{"class":874},[199,84328,882],{"class":205},[199,84330,84331],{"class":201,"line":388},[199,84332,84333],{"class":205},"    const lis = document.querySelectorAll('li')\n",[199,84335,84336],{"class":201,"line":415},[199,84337,84338],{"class":205},"    const liss = Array.from(lis)\n",[199,84340,84341],{"class":201,"line":426},[199,84342,84343],{"class":205},"    liss.pop()\n",[199,84345,84346],{"class":201,"line":1015},[199,84347,84348],{"class":205},"    console.log(liss)\n",[199,84350,84351,84353,84355],{"class":201,"line":1031},[199,84352,2112],{"class":205},[199,84354,1446],{"class":874},[199,84356,882],{"class":205},[199,84358,84359,84361,84363],{"class":201,"line":1043},[199,84360,1414],{"class":205},[199,84362,1431],{"class":874},[199,84364,882],{"class":205},[31,84366,84367],{},[55,84368],{"alt":57,"src":84369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[627,84371,84373],{"id":84372},"_41053-string","4.10.5.3 String",[31,84375,84376],{},[55,84377],{"alt":57,"src":84378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[25754,84380,84382],{"id":84381},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[190,84384,84386],{"className":2763,"code":84385,"language":2765,"meta":57,"style":57},"\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",[196,84387,84388,84396,84404,84409,84414,84419,84423,84428,84433,84438,84446],{"__ignoreMap":57},[199,84389,84390,84392,84394],{"class":201,"line":202},[199,84391,887],{"class":205},[199,84393,1431],{"class":874},[199,84395,882],{"class":205},[199,84397,84398,84400,84402],{"class":201,"line":36},[199,84399,1824],{"class":205},[199,84401,1446],{"class":874},[199,84403,882],{"class":205},[199,84405,84406],{"class":201,"line":73},[199,84407,84408],{"class":205},"    \u002F\u002F 把字符串转化为数组\n",[199,84410,84411],{"class":201,"line":333},[199,84412,84413],{"class":205},"    const str = 'pink,red'\n",[199,84415,84416],{"class":201,"line":227},[199,84417,84418],{"class":205},"    const arr = str.split(',')\n",[199,84420,84421],{"class":201,"line":238},[199,84422,82897],{"class":205},[199,84424,84425],{"class":201,"line":252},[199,84426,84427],{"class":205},"    const str1 = '2025-8-25'\n",[199,84429,84430],{"class":201,"line":388},[199,84431,84432],{"class":205},"    const arr1 = str1.split('-')\n",[199,84434,84435],{"class":201,"line":415},[199,84436,84437],{"class":205},"    console.log(arr1)\n",[199,84439,84440,84442,84444],{"class":201,"line":426},[199,84441,2112],{"class":205},[199,84443,1446],{"class":874},[199,84445,882],{"class":205},[199,84447,84448,84450,84452],{"class":201,"line":1015},[199,84449,1414],{"class":205},[199,84451,1431],{"class":874},[199,84453,882],{"class":205},[25754,84455,84457],{"id":84456},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[31,84459,8078],{},[31,84461,84462],{},"substring(indexStart)",[31,84464,84465],{},"substring(indexStart, indexEnd)",[176,84467,84468,84479,84491,84501],{},[27,84469,84470,84471,84474,84475,84478],{},"如果省略了 ",[196,84472,84473],{},"indexEnd","，则 ",[196,84476,84477],{},"substring()"," 提取字符直到字符串的末尾",[27,84480,84481,84482,84485,84486,84474,84488,84490],{},"如果 ",[196,84483,84484],{},"indexStart"," 等于 ",[196,84487,84473],{},[196,84489,84477],{}," 返回一个空字符串",[27,84492,84481,84493,84495,84496,84474,84498,84500],{},[196,84494,84484],{}," 大于 ",[196,84497,84473],{},[196,84499,84477],{}," 的效果就像交换了这两个参数一样",[27,84502,84503],{},"结束的索引号不包含想要截取的部分",[190,84505,84507],{"className":83748,"code":84506,"language":83750,"meta":57,"style":57},"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",[196,84508,84509,84521,84525,84559,84589,84593,84624,84628,84655,84685,84715,84719,84750],{"__ignoreMap":57},[199,84510,84511,84514,84516,84519],{"class":201,"line":202},[199,84512,84513],{"class":205},"const anyString ",[199,84515,895],{"class":1086},[199,84517,84518],{"class":898}," \"Mozilla\"",[199,84520,1028],{"class":205},[199,84522,84523],{"class":201,"line":36},[199,84524,907],{"emptyLinePlaceholder":906},[199,84526,84527,84530,84532,84534,84536,84539,84541,84544,84546,84548,84550,84552,84554,84556],{"class":201,"line":73},[199,84528,84529],{"class":1018},"console",[199,84531,3638],{"class":205},[199,84533,60506],{"class":1018},[199,84535,1537],{"class":205},[199,84537,84538],{"class":1018},"anyString",[199,84540,3638],{"class":205},[199,84542,84543],{"class":1018},"substring",[199,84545,1537],{"class":205},[199,84547,1025],{"class":1018},[199,84549,1912],{"class":205},[199,84551,1115],{"class":1018},[199,84553,77512],{"class":205},[199,84555,36170],{"class":1086},[199,84557,84558],{"class":898}," 'M'\n",[199,84560,84561,84563,84565,84567,84569,84571,84573,84575,84577,84579,84581,84583,84585,84587],{"class":201,"line":333},[199,84562,84529],{"class":1018},[199,84564,3638],{"class":205},[199,84566,60506],{"class":1018},[199,84568,1537],{"class":205},[199,84570,84538],{"class":1018},[199,84572,3638],{"class":205},[199,84574,84543],{"class":1018},[199,84576,1537],{"class":205},[199,84578,1115],{"class":1018},[199,84580,1912],{"class":205},[199,84582,1025],{"class":1018},[199,84584,77512],{"class":205},[199,84586,36170],{"class":1086},[199,84588,84558],{"class":898},[199,84590,84591],{"class":201,"line":227},[199,84592,907],{"emptyLinePlaceholder":906},[199,84594,84595,84597,84599,84601,84603,84605,84607,84609,84611,84613,84615,84617,84619,84621],{"class":201,"line":238},[199,84596,84529],{"class":1018},[199,84598,3638],{"class":205},[199,84600,60506],{"class":1018},[199,84602,1537],{"class":205},[199,84604,84538],{"class":1018},[199,84606,3638],{"class":205},[199,84608,84543],{"class":1018},[199,84610,1537],{"class":205},[199,84612,1025],{"class":1018},[199,84614,1912],{"class":205},[199,84616,3428],{"class":1018},[199,84618,77512],{"class":205},[199,84620,36170],{"class":1086},[199,84622,84623],{"class":898}," 'Mozill'\n",[199,84625,84626],{"class":201,"line":252},[199,84627,907],{"emptyLinePlaceholder":906},[199,84629,84630,84632,84634,84636,84638,84640,84642,84644,84646,84648,84650,84652],{"class":201,"line":388},[199,84631,84529],{"class":1018},[199,84633,3638],{"class":205},[199,84635,60506],{"class":1018},[199,84637,1537],{"class":205},[199,84639,84538],{"class":1018},[199,84641,3638],{"class":205},[199,84643,84543],{"class":1018},[199,84645,1537],{"class":205},[199,84647,1915],{"class":1018},[199,84649,77512],{"class":205},[199,84651,36170],{"class":1086},[199,84653,84654],{"class":898}," 'lla'\n",[199,84656,84657,84659,84661,84663,84665,84667,84669,84671,84673,84675,84677,84679,84681,84683],{"class":201,"line":415},[199,84658,84529],{"class":1018},[199,84660,3638],{"class":205},[199,84662,60506],{"class":1018},[199,84664,1537],{"class":205},[199,84666,84538],{"class":1018},[199,84668,3638],{"class":205},[199,84670,84543],{"class":1018},[199,84672,1537],{"class":205},[199,84674,1915],{"class":1018},[199,84676,1912],{"class":205},[199,84678,3452],{"class":1018},[199,84680,77568],{"class":205},[199,84682,36170],{"class":1086},[199,84684,84654],{"class":898},[199,84686,84687,84689,84691,84693,84695,84697,84699,84701,84703,84705,84707,84709,84711,84713],{"class":201,"line":426},[199,84688,84529],{"class":1018},[199,84690,3638],{"class":205},[199,84692,60506],{"class":1018},[199,84694,1537],{"class":205},[199,84696,84538],{"class":1018},[199,84698,3638],{"class":205},[199,84700,84543],{"class":1018},[199,84702,1537],{"class":205},[199,84704,3452],{"class":1018},[199,84706,1912],{"class":205},[199,84708,1915],{"class":1018},[199,84710,77512],{"class":205},[199,84712,36170],{"class":1086},[199,84714,84654],{"class":898},[199,84716,84717],{"class":201,"line":1015},[199,84718,907],{"emptyLinePlaceholder":906},[199,84720,84721,84723,84725,84727,84729,84731,84733,84735,84737,84739,84741,84743,84745,84747],{"class":201,"line":1031},[199,84722,84529],{"class":1018},[199,84724,3638],{"class":205},[199,84726,60506],{"class":1018},[199,84728,1537],{"class":205},[199,84730,84538],{"class":1018},[199,84732,3638],{"class":205},[199,84734,84543],{"class":1018},[199,84736,1537],{"class":205},[199,84738,1025],{"class":1018},[199,84740,1912],{"class":205},[199,84742,3452],{"class":1018},[199,84744,77512],{"class":205},[199,84746,36170],{"class":1086},[199,84748,84749],{"class":898}," 'Mozilla'\n",[199,84751,84752,84754,84756,84758,84760,84762,84764,84766,84768,84770,84772,84774,84776,84778],{"class":201,"line":1043},[199,84753,84529],{"class":1018},[199,84755,3638],{"class":205},[199,84757,60506],{"class":1018},[199,84759,1537],{"class":205},[199,84761,84538],{"class":1018},[199,84763,3638],{"class":205},[199,84765,84543],{"class":1018},[199,84767,1537],{"class":205},[199,84769,1025],{"class":1018},[199,84771,1912],{"class":205},[199,84773,3528],{"class":1018},[199,84775,77512],{"class":205},[199,84777,36170],{"class":1086},[199,84779,84749],{"class":898},[25754,84781,84783],{"id":84782},"_410533-startswith","4.10.5.3.3 startsWith",[31,84785,84786,84789,84790,84795,84796,84798,84799],{},[196,84787,84788],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[49,84791,84792],{},[196,84793,84794],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[196,84797,4302],{}," 或 ",[196,84800,68279],{},[190,84802,84804],{"className":79754,"code":84803,"language":79756,"meta":57,"style":57},"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",[196,84805,84806,84818,84837,84842,84862],{"__ignoreMap":57},[199,84807,84808,84810,84813,84815],{"class":201,"line":202},[199,84809,9689],{"class":1086},[199,84811,84812],{"class":205}," str1 ",[199,84814,895],{"class":1086},[199,84816,84817],{"class":898}," \"Saturday night plans\"\n",[199,84819,84820,84822,84824,84827,84830,84832,84835],{"class":201,"line":36},[199,84821,79791],{"class":205},[199,84823,60506],{"class":878},[199,84825,84826],{"class":205},"(str1.",[199,84828,84829],{"class":878},"startsWith",[199,84831,1537],{"class":205},[199,84833,84834],{"class":898},"\"Sat\"",[199,84836,1554],{"class":205},[199,84838,84839],{"class":201,"line":73},[199,84840,84841],{"class":1454},"\u002F\u002F Expected output: true\n",[199,84843,84844,84846,84848,84850,84852,84854,84856,84858,84860],{"class":201,"line":333},[199,84845,79791],{"class":205},[199,84847,60506],{"class":878},[199,84849,84826],{"class":205},[199,84851,84829],{"class":878},[199,84853,1537],{"class":205},[199,84855,84834],{"class":898},[199,84857,1912],{"class":205},[199,84859,1920],{"class":1018},[199,84861,1554],{"class":205},[199,84863,84864],{"class":201,"line":227},[199,84865,84866],{"class":1454},"\u002F\u002F Expected output: false\n",[190,84868,84870],{"className":192,"code":84869,"language":194,"meta":57,"style":57},"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",[196,84871,84872,84877,84882,84886,84891,84896],{"__ignoreMap":57},[199,84873,84874],{"class":201,"line":202},[199,84875,84876],{"class":205},"startsWith(searchString)\n",[199,84878,84879],{"class":201,"line":36},[199,84880,84881],{"class":205},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[199,84883,84884],{"class":201,"line":73},[199,84885,907],{"emptyLinePlaceholder":906},[199,84887,84888],{"class":201,"line":333},[199,84889,84890],{"class":205},"const str3 = 'pink老师上课中'\n",[199,84892,84893],{"class":201,"line":227},[199,84894,84895],{"class":205},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[199,84897,84898],{"class":201,"line":238},[199,84899,84900],{"class":205},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[25754,84902,84904],{"id":84903},"_410534-includes","4.10.5.3.4 includes",[31,84906,84907],{},"includes(searchString) includes(searchString, position)",[24,84909,84910],{},[27,84911,84912],{},"searchString:",[31,84914,84915,84916,84918,84919,84924,84925,84930,84931,24345,84934,84937,84938,84941],{},"一个要在 ",[196,84917,4242],{}," 中查找的字符串。",[2867,84920,84923],{"href":84921,"rel":84922},"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",[2871],"不能是正则表达式","。所有非正则表达式的值都会被",[2867,84926,84929],{"href":84927,"rel":84928},"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",[2871],"强制转换为字符串","，因此如果该参数被省略或传入 ",[196,84932,84933],{},"undefined",[196,84935,84936],{},"includes()"," 方法会在字符串中搜索 ",[196,84939,84940],{},"\"undefined\"","，这通常不是你想要的",[24,84943,84944],{"start":36},[27,84945,84946,3938],{},[196,84947,84948],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[31,84950,84951,84952,84955,84956],{},"在字符串中开始搜索 ",[196,84953,84954],{},"searchString"," 的位置。默认值为 ",[196,84957,1025],{},[24,84959,84960],{"start":73},[27,84961,84962],{},"返回值：",[31,84964,84965,84966,84968,84969,84973,84974],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[196,84967,84954],{}," 为空字符串的情况），则返回 ",[49,84970,84971],{},[196,84972,4302],{}," ，否则返回 ",[49,84975,84976],{},[196,84977,68279],{},[24,84979,84980],{"start":333},[27,84981,84982],{},"异常：",[31,84984,84481,84985,16656,84987,84991],{},[196,84986,84954],{},[2867,84988,84990],{"href":84921,"rel":84989},[2871],"是一个正则表达式","，则会抛出",[31,84993,84994],{},"只要是有就是true，不需要非得以谁开头结尾",[190,84996,84998],{"className":79754,"code":84997,"language":79756,"meta":57,"style":57},"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",[196,84999,85000,85011,85034,85053,85073,85095,85114],{"__ignoreMap":57},[199,85001,85002,85004,85006,85008],{"class":201,"line":202},[199,85003,9689],{"class":1086},[199,85005,82034],{"class":205},[199,85007,895],{"class":1086},[199,85009,85010],{"class":898}," \"To be, or not to be, that is the question.\"\n",[199,85012,85013,85015,85017,85020,85023,85025,85028,85031],{"class":201,"line":36},[199,85014,79791],{"class":205},[199,85016,60506],{"class":878},[199,85018,85019],{"class":205},"(str.",[199,85021,85022],{"class":878},"includes",[199,85024,1537],{"class":205},[199,85026,85027],{"class":898},"\"To be\"",[199,85029,85030],{"class":205},"))",[199,85032,85033],{"class":1454},"  \u002F\u002F true\n",[199,85035,85036,85038,85040,85042,85044,85046,85049,85051],{"class":201,"line":73},[199,85037,79791],{"class":205},[199,85039,60506],{"class":878},[199,85041,85019],{"class":205},[199,85043,85022],{"class":878},[199,85045,1537],{"class":205},[199,85047,85048],{"class":898},"\"question\"",[199,85050,85030],{"class":205},[199,85052,85033],{"class":1454},[199,85054,85055,85057,85059,85061,85063,85065,85068,85070],{"class":201,"line":333},[199,85056,79791],{"class":205},[199,85058,60506],{"class":878},[199,85060,85019],{"class":205},[199,85062,85022],{"class":878},[199,85064,1537],{"class":205},[199,85066,85067],{"class":898},"\"nonexistent\"",[199,85069,85030],{"class":205},[199,85071,85072],{"class":1454},"  \u002F\u002F false\n",[199,85074,85075,85077,85079,85081,85083,85085,85087,85089,85091,85093],{"class":201,"line":227},[199,85076,79791],{"class":205},[199,85078,60506],{"class":878},[199,85080,85019],{"class":205},[199,85082,85022],{"class":878},[199,85084,1537],{"class":205},[199,85086,85027],{"class":898},[199,85088,1912],{"class":205},[199,85090,1115],{"class":1018},[199,85092,85030],{"class":205},[199,85094,85072],{"class":1454},[199,85096,85097,85099,85101,85103,85105,85107,85110,85112],{"class":201,"line":238},[199,85098,79791],{"class":205},[199,85100,60506],{"class":878},[199,85102,85019],{"class":205},[199,85104,85022],{"class":878},[199,85106,1537],{"class":205},[199,85108,85109],{"class":898},"\"TO BE\"",[199,85111,85030],{"class":205},[199,85113,85072],{"class":1454},[199,85115,85116,85118,85120,85122,85124,85126,85128,85130],{"class":201,"line":252},[199,85117,79791],{"class":205},[199,85119,60506],{"class":878},[199,85121,85019],{"class":205},[199,85123,85022],{"class":878},[199,85125,1537],{"class":205},[199,85127,10549],{"class":898},[199,85129,85030],{"class":205},[199,85131,85033],{"class":1454},[25754,85133,85135],{"id":85134},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[190,85137,85139],{"className":2763,"code":85138,"language":2765,"meta":57,"style":57},"\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",[196,85140,85141,85149,85157,85162,85167,85172,85177,85182,85190],{"__ignoreMap":57},[199,85142,85143,85145,85147],{"class":201,"line":202},[199,85144,887],{"class":205},[199,85146,1431],{"class":874},[199,85148,882],{"class":205},[199,85150,85151,85153,85155],{"class":201,"line":36},[199,85152,1824],{"class":205},[199,85154,1446],{"class":874},[199,85156,882],{"class":205},[199,85158,85159],{"class":201,"line":73},[199,85160,85161],{"class":205},"    const num = 10\n",[199,85163,85164],{"class":201,"line":333},[199,85165,85166],{"class":205},"    \u002F\u002F 强制转换\n",[199,85168,85169],{"class":201,"line":227},[199,85170,85171],{"class":205},"    console.log(String(num))\n",[199,85173,85174],{"class":201,"line":238},[199,85175,85176],{"class":205},"    \u002F\u002F toString()方法转换\n",[199,85178,85179],{"class":201,"line":252},[199,85180,85181],{"class":205},"    console.log(num.toString())\n",[199,85183,85184,85186,85188],{"class":201,"line":388},[199,85185,2112],{"class":205},[199,85187,1446],{"class":874},[199,85189,882],{"class":205},[199,85191,85192,85194,85196],{"class":201,"line":415},[199,85193,1414],{"class":205},[199,85195,1431],{"class":874},[199,85197,882],{"class":205},[25754,85199,85201],{"id":85200},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[31,85203,85204],{},[55,85205],{"alt":57,"src":85206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[190,85208,85210],{"className":192,"code":85209,"language":194,"meta":57,"style":57},"\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",[196,85211,85212,85222,85236,85240,85248,85262,85282,85294,85302,85306,85314,85326,85334,85346,85351,85356,85361,85408,85424,85432,85440,85444],{"__ignoreMap":57},[199,85213,85214,85216,85218,85220],{"class":201,"line":202},[199,85215,871],{"class":205},[199,85217,875],{"class":874},[199,85219,879],{"class":878},[199,85221,882],{"class":205},[199,85223,85224,85226,85228,85230,85232,85234],{"class":201,"line":36},[199,85225,887],{"class":205},[199,85227,194],{"class":874},[199,85229,892],{"class":878},[199,85231,895],{"class":205},[199,85233,899],{"class":898},[199,85235,882],{"class":205},[199,85237,85238],{"class":201,"line":73},[199,85239,907],{"emptyLinePlaceholder":906},[199,85241,85242,85244,85246],{"class":201,"line":333},[199,85243,887],{"class":205},[199,85245,914],{"class":874},[199,85247,882],{"class":205},[199,85249,85250,85252,85254,85256,85258,85260],{"class":201,"line":227},[199,85251,1824],{"class":205},[199,85253,924],{"class":874},[199,85255,927],{"class":878},[199,85257,895],{"class":205},[199,85259,932],{"class":898},[199,85261,882],{"class":205},[199,85263,85264,85266,85268,85270,85272,85274,85276,85278,85280],{"class":201,"line":238},[199,85265,1824],{"class":205},[199,85267,924],{"class":874},[199,85269,967],{"class":878},[199,85271,895],{"class":205},[199,85273,972],{"class":898},[199,85275,951],{"class":878},[199,85277,895],{"class":205},[199,85279,979],{"class":898},[199,85281,882],{"class":205},[199,85283,85284,85286,85288,85290,85292],{"class":201,"line":252},[199,85285,1824],{"class":205},[199,85287,988],{"class":874},[199,85289,991],{"class":205},[199,85291,988],{"class":874},[199,85293,882],{"class":205},[199,85295,85296,85298,85300],{"class":201,"line":388},[199,85297,1414],{"class":205},[199,85299,914],{"class":874},[199,85301,882],{"class":205},[199,85303,85304],{"class":201,"line":415},[199,85305,907],{"emptyLinePlaceholder":906},[199,85307,85308,85310,85312],{"class":201,"line":426},[199,85309,887],{"class":205},[199,85311,1431],{"class":874},[199,85313,882],{"class":205},[199,85315,85316,85318,85320,85322,85324],{"class":201,"line":1015},[199,85317,1824],{"class":205},[199,85319,1220],{"class":874},[199,85321,57573],{"class":205},[199,85323,1220],{"class":874},[199,85325,882],{"class":205},[199,85327,85328,85330,85332],{"class":201,"line":1031},[199,85329,1824],{"class":205},[199,85331,1446],{"class":874},[199,85333,882],{"class":205},[199,85335,85336,85338,85341,85343],{"class":201,"line":1043},[199,85337,14084],{"class":1086},[199,85339,85340],{"class":1018}," gift",[199,85342,16425],{"class":1086},[199,85344,85345],{"class":898}," '50g的茶叶，清洗球'\n",[199,85347,85348],{"class":201,"line":1049},[199,85349,85350],{"class":1454},"    \u002F\u002F 1.把字符串拆分为数组\n",[199,85352,85353],{"class":201,"line":1054},[199,85354,85355],{"class":1454},"    \u002F\u002F console.log(gift.split(','))\n",[199,85357,85358],{"class":201,"line":1062},[199,85359,85360],{"class":1454},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[199,85362,85363,85365,85367,85369,85372,85375,85377,85380,85382,85384,85386,85388,85390,85393,85395,85398,85400,85402,85404,85406],{"class":201,"line":1075},[199,85364,14084],{"class":1086},[199,85366,76178],{"class":1018},[199,85368,16425],{"class":1086},[199,85370,85371],{"class":205}," gift.",[199,85373,85374],{"class":878},"split",[199,85376,1537],{"class":205},[199,85378,85379],{"class":898},"'，'",[199,85381,33668],{"class":205},[199,85383,76303],{"class":878},[199,85385,1537],{"class":205},[199,85387,82054],{"class":8113},[199,85389,82057],{"class":1086},[199,85391,85392],{"class":898}," `\u003Cspan>【赠品】${",[199,85394,82054],{"class":205},[199,85396,85397],{"class":898},"}\u003C\u002Fspan>\u003Cbr>`",[199,85399,33668],{"class":205},[199,85401,76482],{"class":878},[199,85403,1537],{"class":205},[199,85405,76487],{"class":898},[199,85407,1594],{"class":205},[199,85409,85410,85412,85414,85416,85418,85420,85422],{"class":201,"line":1092},[199,85411,2102],{"class":205},[199,85413,56658],{"class":878},[199,85415,1537],{"class":205},[199,85417,84190],{"class":898},[199,85419,76508],{"class":205},[199,85421,895],{"class":1086},[199,85423,76244],{"class":205},[199,85425,85426,85428,85430],{"class":201,"line":1107},[199,85427,2112],{"class":205},[199,85429,1446],{"class":874},[199,85431,882],{"class":205},[199,85433,85434,85436,85438],{"class":201,"line":1128},[199,85435,1414],{"class":205},[199,85437,1431],{"class":874},[199,85439,882],{"class":205},[199,85441,85442],{"class":201,"line":1146},[199,85443,907],{"emptyLinePlaceholder":906},[199,85445,85446,85448,85450],{"class":201,"line":1163},[199,85447,1414],{"class":205},[199,85449,194],{"class":874},[199,85451,882],{"class":205},[627,85453,85455],{"id":85454},"_41054-number","4.10.5.4 Number",[31,85457,85458],{},[55,85459],{"alt":57,"src":85460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[31,85462,85463],{},"整数也可以进行toFixed来保留小数",[31,85465,85466],{},"比如：",[31,85468,85469],{},"const price=10",[31,85471,85472],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[627,85474,85476],{"id":85475},"_41055-购物车展示","4.10.5.5 购物车展示",[31,85478,85479],{},[55,85480],{"alt":57,"src":85481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[190,85483,85485],{"className":192,"code":85484,"language":194,"meta":57,"style":57},"\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",[196,85486,85487,85497,85511,85515,85523,85537,85557,85569,85577,85583,85593,85603,85613,85617,85621,85627,85639,85653,85657,85661,85667,85679,85695,85705,85721,85725,85729,85735,85745,85755,85759,85763,85771,85783,85795,85807,85811,85815,85823,85835,85839,85843,85854,85864,85876,85888,85898,85902,85906,85914,85923,85935,85945,85955,85959,85963,85971,85980,85987,85997,86009,86013,86017,86026,86036,86047,86059,86071,86075,86079,86088,86098,86109,86113,86117,86123,86135,86147,86157,86167,86185,86197,86201,86205,86214,86226,86236,86246,86258,86262,86270,86278,86282,86290,86304,86312,86326,86354,86362,86370,86380,86384,86392,86400,86409,86417,86426,86436,86440,86444,86452,86460,86469,86477,86485,86498,86502,86506,86514,86522,86531,86539,86547,86562,86566,86570,86578,86586,86595,86603,86611,86625,86633,86637,86641,86646,86672,86677,86714,86719,86742,86747,86801,86806,86842,86846,86852,86857,86866,86880,86889,86908,86917,86927,86932,86937,86950,86955,87009,87035,87043,87051,87055],{"__ignoreMap":57},[199,85488,85489,85491,85493,85495],{"class":201,"line":202},[199,85490,871],{"class":205},[199,85492,875],{"class":874},[199,85494,879],{"class":878},[199,85496,882],{"class":205},[199,85498,85499,85501,85503,85505,85507,85509],{"class":201,"line":36},[199,85500,887],{"class":205},[199,85502,194],{"class":874},[199,85504,892],{"class":878},[199,85506,895],{"class":205},[199,85508,899],{"class":898},[199,85510,882],{"class":205},[199,85512,85513],{"class":201,"line":73},[199,85514,907],{"emptyLinePlaceholder":906},[199,85516,85517,85519,85521],{"class":201,"line":333},[199,85518,887],{"class":205},[199,85520,914],{"class":874},[199,85522,882],{"class":205},[199,85524,85525,85527,85529,85531,85533,85535],{"class":201,"line":227},[199,85526,1824],{"class":205},[199,85528,924],{"class":874},[199,85530,927],{"class":878},[199,85532,895],{"class":205},[199,85534,932],{"class":898},[199,85536,882],{"class":205},[199,85538,85539,85541,85543,85545,85547,85549,85551,85553,85555],{"class":201,"line":238},[199,85540,1824],{"class":205},[199,85542,924],{"class":874},[199,85544,967],{"class":878},[199,85546,895],{"class":205},[199,85548,972],{"class":898},[199,85550,951],{"class":878},[199,85552,895],{"class":205},[199,85554,979],{"class":898},[199,85556,882],{"class":205},[199,85558,85559,85561,85563,85565,85567],{"class":201,"line":252},[199,85560,1824],{"class":205},[199,85562,988],{"class":874},[199,85564,991],{"class":205},[199,85566,988],{"class":874},[199,85568,882],{"class":205},[199,85570,85571,85573,85575],{"class":201,"line":388},[199,85572,1824],{"class":205},[199,85574,1002],{"class":874},[199,85576,882],{"class":205},[199,85578,85579,85581],{"class":201,"line":415},[199,85580,9300],{"class":874},[199,85582,1012],{"class":205},[199,85584,85585,85587,85589,85591],{"class":201,"line":426},[199,85586,56954],{"class":1018},[199,85588,1022],{"class":205},[199,85590,1025],{"class":1018},[199,85592,1028],{"class":205},[199,85594,85595,85597,85599,85601],{"class":201,"line":1015},[199,85596,56965],{"class":1018},[199,85598,1022],{"class":205},[199,85600,1025],{"class":1018},[199,85602,1028],{"class":205},[199,85604,85605,85607,85609,85611],{"class":201,"line":1031},[199,85606,74855],{"class":1018},[199,85608,1022],{"class":205},[199,85610,62764],{"class":1018},[199,85612,1028],{"class":205},[199,85614,85615],{"class":201,"line":1043},[199,85616,2097],{"class":205},[199,85618,85619],{"class":201,"line":1049},[199,85620,907],{"emptyLinePlaceholder":906},[199,85622,85623,85625],{"class":201,"line":1054},[199,85624,64382],{"class":878},[199,85626,1012],{"class":205},[199,85628,85629,85631,85633,85635,85637],{"class":201,"line":1062},[199,85630,57030],{"class":1018},[199,85632,1022],{"class":205},[199,85634,80833],{"class":1018},[199,85636,1087],{"class":1086},[199,85638,1028],{"class":205},[199,85640,85641,85643,85645,85647,85649,85651],{"class":201,"line":1075},[199,85642,56965],{"class":1018},[199,85644,1022],{"class":205},[199,85646,3396],{"class":1018},[199,85648,1087],{"class":1086},[199,85650,1158],{"class":1018},[199,85652,1028],{"class":205},[199,85654,85655],{"class":201,"line":1092},[199,85656,2097],{"class":205},[199,85658,85659],{"class":201,"line":1107},[199,85660,907],{"emptyLinePlaceholder":906},[199,85662,85663,85665],{"class":201,"line":1128},[199,85664,80884],{"class":878},[199,85666,1012],{"class":205},[199,85668,85669,85671,85673,85675,85677],{"class":201,"line":1146},[199,85670,56954],{"class":1018},[199,85672,1022],{"class":205},[199,85674,3655],{"class":1018},[199,85676,1087],{"class":1086},[199,85678,1028],{"class":205},[199,85680,85681,85683,85685,85687,85689,85691,85693],{"class":201,"line":1163},[199,85682,64119],{"class":1018},[199,85684,1022],{"class":205},[199,85686,30964],{"class":1018},[199,85688,80939],{"class":1018},[199,85690,80942],{"class":1018},[199,85692,3774],{"class":1086},[199,85694,1028],{"class":205},[199,85696,85697,85699,85701,85703],{"class":201,"line":1176},[199,85698,57268],{"class":1018},[199,85700,1022],{"class":205},[199,85702,1070],{"class":1018},[199,85704,1028],{"class":205},[199,85706,85707,85709,85711,85713,85715,85717,85719],{"class":201,"line":1189},[199,85708,64236],{"class":1018},[199,85710,1022],{"class":205},[199,85712,1115],{"class":1018},[199,85714,1087],{"class":1086},[199,85716,1120],{"class":1018},[199,85718,64503],{"class":1018},[199,85720,1028],{"class":205},[199,85722,85723],{"class":201,"line":1202},[199,85724,2097],{"class":205},[199,85726,85727],{"class":201,"line":1207},[199,85728,907],{"emptyLinePlaceholder":906},[199,85730,85731,85733],{"class":201,"line":1212},[199,85732,81002],{"class":878},[199,85734,1012],{"class":205},[199,85736,85737,85739,85741,85743],{"class":201,"line":1225},[199,85738,64284],{"class":1018},[199,85740,1022],{"class":205},[199,85742,64289],{"class":1018},[199,85744,1028],{"class":205},[199,85746,85747,85749,85751,85753],{"class":201,"line":1236},[199,85748,57143],{"class":1018},[199,85750,1022],{"class":205},[199,85752,64077],{"class":1018},[199,85754,1028],{"class":205},[199,85756,85757],{"class":201,"line":1249},[199,85758,2097],{"class":205},[199,85760,85761],{"class":201,"line":1262},[199,85762,907],{"emptyLinePlaceholder":906},[199,85764,85765,85767,85769],{"class":201,"line":1275},[199,85766,80884],{"class":878},[199,85768,57874],{"class":874},[199,85770,1012],{"class":205},[199,85772,85773,85775,85777,85779,85781],{"class":201,"line":1287},[199,85774,57030],{"class":1018},[199,85776,1022],{"class":205},[199,85778,3692],{"class":1018},[199,85780,1087],{"class":1086},[199,85782,1028],{"class":205},[199,85784,85785,85787,85789,85791,85793],{"class":201,"line":1292},[199,85786,57044],{"class":1018},[199,85788,1022],{"class":205},[199,85790,3692],{"class":1018},[199,85792,1087],{"class":1086},[199,85794,1028],{"class":205},[199,85796,85797,85799,85801,85803,85805],{"class":201,"line":1297},[199,85798,64009],{"class":1018},[199,85800,1022],{"class":205},[199,85802,1909],{"class":1018},[199,85804,1087],{"class":1086},[199,85806,1028],{"class":205},[199,85808,85809],{"class":201,"line":1310},[199,85810,2097],{"class":205},[199,85812,85813],{"class":201,"line":1315},[199,85814,907],{"emptyLinePlaceholder":906},[199,85816,85817,85819,85821],{"class":201,"line":1330},[199,85818,80884],{"class":878},[199,85820,64563],{"class":878},[199,85822,1012],{"class":205},[199,85824,85825,85827,85829,85831,85833],{"class":201,"line":1335},[199,85826,57030],{"class":1018},[199,85828,1022],{"class":205},[199,85830,4647],{"class":1018},[199,85832,1087],{"class":1086},[199,85834,1028],{"class":205},[199,85836,85837],{"class":201,"line":1340},[199,85838,2097],{"class":205},[199,85840,85841],{"class":201,"line":1352},[199,85842,907],{"emptyLinePlaceholder":906},[199,85844,85845,85847,85849,85852],{"class":201,"line":1367},[199,85846,80884],{"class":878},[199,85848,64563],{"class":878},[199,85850,85851],{"class":878}," .tag",[199,85853,1012],{"class":205},[199,85855,85856,85858,85860,85862],{"class":201,"line":1381},[199,85857,57268],{"class":1018},[199,85859,1022],{"class":205},[199,85861,63128],{"class":1018},[199,85863,1028],{"class":205},[199,85865,85866,85868,85870,85872,85874],{"class":201,"line":1396},[199,85867,56954],{"class":1018},[199,85869,1022],{"class":205},[199,85871,1925],{"class":1018},[199,85873,1087],{"class":1086},[199,85875,1028],{"class":205},[199,85877,85878,85880,85882,85884,85886],{"class":201,"line":1401},[199,85879,57181],{"class":1018},[199,85881,1022],{"class":205},[199,85883,3579],{"class":1018},[199,85885,1087],{"class":1086},[199,85887,1028],{"class":205},[199,85889,85890,85892,85894,85896],{"class":201,"line":1411},[199,85891,59675],{"class":1018},[199,85893,1022],{"class":205},[199,85895,64329],{"class":1018},[199,85897,1028],{"class":205},[199,85899,85900],{"class":201,"line":1421},[199,85901,2097],{"class":205},[199,85903,85904],{"class":201,"line":1426},[199,85905,907],{"emptyLinePlaceholder":906},[199,85907,85908,85910,85912],{"class":201,"line":1436},[199,85909,80884],{"class":878},[199,85911,81176],{"class":878},[199,85913,34308],{"class":205},[199,85915,85916,85918,85921],{"class":201,"line":1441},[199,85917,80884],{"class":878},[199,85919,85920],{"class":878}," .sub-total",[199,85922,1012],{"class":205},[199,85924,85925,85927,85929,85931,85933],{"class":201,"line":1451},[199,85926,57181],{"class":1018},[199,85928,1022],{"class":205},[199,85930,3730],{"class":1018},[199,85932,1087],{"class":1086},[199,85934,1028],{"class":205},[199,85936,85937,85939,85941,85943],{"class":201,"line":1458},[199,85938,59675],{"class":1018},[199,85940,1022],{"class":205},[199,85942,81199],{"class":1018},[199,85944,1028],{"class":205},[199,85946,85947,85949,85951,85953],{"class":201,"line":1464},[199,85948,64096],{"class":1018},[199,85950,1022],{"class":205},[199,85952,1115],{"class":1018},[199,85954,1028],{"class":205},[199,85956,85957],{"class":201,"line":1478},[199,85958,2097],{"class":205},[199,85960,85961],{"class":201,"line":1516},[199,85962,907],{"emptyLinePlaceholder":906},[199,85964,85965,85967,85969],{"class":201,"line":1522},[199,85966,80884],{"class":878},[199,85968,81216],{"class":878},[199,85970,34308],{"class":205},[199,85972,85973,85975,85978],{"class":201,"line":1528},[199,85974,80884],{"class":878},[199,85976,85977],{"class":878}," .sub-total::before",[199,85979,34308],{"class":205},[199,85981,85982,85985],{"class":201,"line":1557},[199,85983,85984],{"class":878},"    .amount::before",[199,85986,1012],{"class":205},[199,85988,85989,85991,85993,85995],{"class":201,"line":1563},[199,85990,81223],{"class":1018},[199,85992,1022],{"class":205},[199,85994,81228],{"class":898},[199,85996,1028],{"class":205},[199,85998,85999,86001,86003,86005,86007],{"class":201,"line":1568},[199,86000,57181],{"class":1018},[199,86002,1022],{"class":205},[199,86004,3579],{"class":1018},[199,86006,1087],{"class":1086},[199,86008,1028],{"class":205},[199,86010,86011],{"class":201,"line":1574},[199,86012,2097],{"class":205},[199,86014,86015],{"class":201,"line":1580},[199,86016,907],{"emptyLinePlaceholder":906},[199,86018,86019,86021,86024],{"class":201,"line":1597},[199,86020,80884],{"class":878},[199,86022,86023],{"class":878}," .spec",[199,86025,1012],{"class":205},[199,86027,86028,86030,86032,86034],{"class":201,"line":1602},[199,86029,64096],{"class":1018},[199,86031,1022],{"class":205},[199,86033,1925],{"class":1018},[199,86035,1028],{"class":205},[199,86037,86038,86040,86042,86045],{"class":201,"line":1608},[199,86039,59675],{"class":1018},[199,86041,1022],{"class":205},[199,86043,86044],{"class":1018},"#888",[199,86046,1028],{"class":205},[199,86048,86049,86051,86053,86055,86057],{"class":201,"line":1640},[199,86050,57181],{"class":1018},[199,86052,1022],{"class":205},[199,86054,3629],{"class":1018},[199,86056,1087],{"class":1086},[199,86058,1028],{"class":205},[199,86060,86061,86063,86065,86067,86069],{"class":201,"line":1653},[199,86062,64259],{"class":1018},[199,86064,1022],{"class":205},[199,86066,3779],{"class":1018},[199,86068,1087],{"class":1086},[199,86070,1028],{"class":205},[199,86072,86073],{"class":201,"line":1673},[199,86074,2097],{"class":205},[199,86076,86077],{"class":201,"line":1690},[199,86078,907],{"emptyLinePlaceholder":906},[199,86080,86081,86083,86086],{"class":201,"line":1706},[199,86082,80884],{"class":878},[199,86084,86085],{"class":878}," .count",[199,86087,1012],{"class":205},[199,86089,86090,86092,86094,86096],{"class":201,"line":1712},[199,86091,64096],{"class":1018},[199,86093,1022],{"class":205},[199,86095,1115],{"class":1018},[199,86097,1028],{"class":205},[199,86099,86100,86102,86104,86107],{"class":201,"line":1720},[199,86101,59675],{"class":1018},[199,86103,1022],{"class":205},[199,86105,86106],{"class":1018},"#aaa",[199,86108,1028],{"class":205},[199,86110,86111],{"class":201,"line":1725},[199,86112,2097],{"class":205},[199,86114,86115],{"class":201,"line":1731},[199,86116,907],{"emptyLinePlaceholder":906},[199,86118,86119,86121],{"class":201,"line":1745},[199,86120,74734],{"class":878},[199,86122,1012],{"class":205},[199,86124,86125,86127,86129,86131,86133],{"class":201,"line":1754},[199,86126,57030],{"class":1018},[199,86128,1022],{"class":205},[199,86130,80833],{"class":1018},[199,86132,1087],{"class":1086},[199,86134,1028],{"class":205},[199,86136,86137,86139,86141,86143,86145],{"class":201,"line":1763},[199,86138,56965],{"class":1018},[199,86140,1022],{"class":205},[199,86142,1025],{"class":1018},[199,86144,1158],{"class":1018},[199,86146,1028],{"class":205},[199,86148,86149,86151,86153,86155],{"class":201,"line":1768},[199,86150,57268],{"class":1018},[199,86152,1022],{"class":205},[199,86154,1070],{"class":1018},[199,86156,1028],{"class":205},[199,86158,86159,86161,86163,86165],{"class":201,"line":19628},[199,86160,57279],{"class":1018},[199,86162,1022],{"class":205},[199,86164,1184],{"class":1018},[199,86166,1028],{"class":205},[199,86168,86169,86172,86174,86176,86178,86180,86183],{"class":201,"line":19641},[199,86170,86171],{"class":1018},"      border-top",[199,86173,1022],{"class":205},[199,86175,1115],{"class":1018},[199,86177,1087],{"class":1086},[199,86179,1120],{"class":1018},[199,86181,86182],{"class":1018}," #4e4e4e",[199,86184,1028],{"class":205},[199,86186,86187,86189,86191,86193,86195],{"class":201,"line":19646},[199,86188,56954],{"class":1018},[199,86190,1022],{"class":205},[199,86192,3779],{"class":1018},[199,86194,1087],{"class":1086},[199,86196,1028],{"class":205},[199,86198,86199],{"class":201,"line":19660},[199,86200,2097],{"class":205},[199,86202,86203],{"class":201,"line":19665},[199,86204,907],{"emptyLinePlaceholder":906},[199,86206,86207,86209,86212],{"class":201,"line":19671},[199,86208,74734],{"class":878},[199,86210,86211],{"class":878}," .amount",[199,86213,1012],{"class":205},[199,86215,86216,86218,86220,86222,86224],{"class":201,"line":19676},[199,86217,57181],{"class":1018},[199,86219,1022],{"class":205},[199,86221,3730],{"class":1018},[199,86223,1087],{"class":1086},[199,86225,1028],{"class":205},[199,86227,86228,86230,86232,86234],{"class":201,"line":19690},[199,86229,59675],{"class":1018},[199,86231,1022],{"class":205},[199,86233,81199],{"class":1018},[199,86235,1028],{"class":205},[199,86237,86238,86240,86242,86244],{"class":201,"line":19695},[199,86239,64593],{"class":1018},[199,86241,1022],{"class":205},[199,86243,1083],{"class":1018},[199,86245,1028],{"class":205},[199,86247,86248,86250,86252,86254,86256],{"class":201,"line":19700},[199,86249,64009],{"class":1018},[199,86251,1022],{"class":205},[199,86253,1153],{"class":1018},[199,86255,1087],{"class":1086},[199,86257,1028],{"class":205},[199,86259,86260],{"class":201,"line":19714},[199,86261,2097],{"class":205},[199,86263,86264,86266,86268],{"class":201,"line":19726},[199,86265,2112],{"class":205},[199,86267,1002],{"class":874},[199,86269,882],{"class":205},[199,86271,86272,86274,86276],{"class":201,"line":19731},[199,86273,1414],{"class":205},[199,86275,914],{"class":874},[199,86277,882],{"class":205},[199,86279,86280],{"class":201,"line":19744},[199,86281,907],{"emptyLinePlaceholder":906},[199,86283,86284,86286,86288],{"class":201,"line":19749},[199,86285,887],{"class":205},[199,86287,1431],{"class":874},[199,86289,882],{"class":205},[199,86291,86292,86294,86296,86298,86300,86302],{"class":201,"line":19754},[199,86293,1824],{"class":205},[199,86295,1220],{"class":874},[199,86297,55745],{"class":878},[199,86299,895],{"class":205},[199,86301,64867],{"class":898},[199,86303,882],{"class":205},[199,86305,86306,86308,86310],{"class":201,"line":19759},[199,86307,2112],{"class":205},[199,86309,1220],{"class":874},[199,86311,882],{"class":205},[199,86313,86314,86316,86318,86320,86322,86324],{"class":201,"line":19772},[199,86315,1824],{"class":205},[199,86317,1220],{"class":874},[199,86319,55745],{"class":878},[199,86321,895],{"class":205},[199,86323,64839],{"class":898},[199,86325,882],{"class":205},[199,86327,86328,86330,86332,86335,86337,86339,86341,86344,86346,86348,86350,86352],{"class":201,"line":19777},[199,86329,921],{"class":205},[199,86331,1220],{"class":874},[199,86333,86334],{"class":205},">合计：\u003C",[199,86336,199],{"class":874},[199,86338,55745],{"class":878},[199,86340,895],{"class":205},[199,86342,86343],{"class":898},"\"amount\"",[199,86345,57573],{"class":205},[199,86347,199],{"class":874},[199,86349,57573],{"class":205},[199,86351,1220],{"class":874},[199,86353,882],{"class":205},[199,86355,86356,86358,86360],{"class":201,"line":35475},[199,86357,2112],{"class":205},[199,86359,1220],{"class":874},[199,86361,882],{"class":205},[199,86363,86364,86366,86368],{"class":201,"line":35481},[199,86365,1824],{"class":205},[199,86367,1446],{"class":874},[199,86369,882],{"class":205},[199,86371,86372,86374,86376,86378],{"class":201,"line":35487},[199,86373,14084],{"class":1086},[199,86375,81636],{"class":1018},[199,86377,16425],{"class":1086},[199,86379,57706],{"class":205},[199,86381,86382],{"class":201,"line":35493},[199,86383,81645],{"class":205},[199,86385,86386,86388,86390],{"class":201,"line":35499},[199,86387,81650],{"class":205},[199,86389,81653],{"class":898},[199,86391,34308],{"class":205},[199,86393,86394,86396,86398],{"class":201,"line":35510},[199,86395,81660],{"class":205},[199,86397,81663],{"class":898},[199,86399,34308],{"class":205},[199,86401,86402,86404,86407],{"class":201,"line":35516},[199,86403,81670],{"class":205},[199,86405,86406],{"class":1018},"289.9",[199,86408,34308],{"class":205},[199,86410,86411,86413,86415],{"class":201,"line":35536},[199,86412,81680],{"class":205},[199,86414,81683],{"class":898},[199,86416,34308],{"class":205},[199,86418,86419,86422,86424],{"class":201,"line":35542},[199,86420,86421],{"class":205},"        count: ",[199,86423,1925],{"class":1018},[199,86425,34308],{"class":205},[199,86427,86428,86431,86434],{"class":201,"line":35553},[199,86429,86430],{"class":205},"        spec: { color: ",[199,86432,86433],{"class":898},"'白色'",[199,86435,57863],{"class":205},[199,86437,86438],{"class":201,"line":35559},[199,86439,80151],{"class":205},[199,86441,86442],{"class":201,"line":35565},[199,86443,81645],{"class":205},[199,86445,86446,86448,86450],{"class":201,"line":35571},[199,86447,81650],{"class":205},[199,86449,81744],{"class":898},[199,86451,34308],{"class":205},[199,86453,86454,86456,86458],{"class":201,"line":35577},[199,86455,81660],{"class":205},[199,86457,81753],{"class":898},[199,86459,34308],{"class":205},[199,86461,86462,86464,86467],{"class":201,"line":35583},[199,86463,81670],{"class":205},[199,86465,86466],{"class":1018},"109.8",[199,86468,34308],{"class":205},[199,86470,86471,86473,86475],{"class":201,"line":35589},[199,86472,81680],{"class":205},[199,86474,81771],{"class":898},[199,86476,34308],{"class":205},[199,86478,86479,86481,86483],{"class":201,"line":35595},[199,86480,86421],{"class":205},[199,86482,1920],{"class":1018},[199,86484,34308],{"class":205},[199,86486,86487,86490,86492,86494,86496],{"class":201,"line":35615},[199,86488,86489],{"class":205},"        spec: { size: ",[199,86491,84162],{"class":898},[199,86493,57723],{"class":205},[199,86495,84167],{"class":898},[199,86497,57863],{"class":205},[199,86499,86500],{"class":201,"line":35621},[199,86501,80151],{"class":205},[199,86503,86504],{"class":201,"line":35637},[199,86505,81645],{"class":205},[199,86507,86508,86510,86512],{"class":201,"line":35643},[199,86509,81650],{"class":205},[199,86511,81788],{"class":898},[199,86513,34308],{"class":205},[199,86515,86516,86518,86520],{"class":201,"line":35657},[199,86517,81660],{"class":205},[199,86519,81797],{"class":898},[199,86521,34308],{"class":205},[199,86523,86524,86526,86529],{"class":201,"line":35663},[199,86525,81670],{"class":205},[199,86527,86528],{"class":1018},"488",[199,86530,34308],{"class":205},[199,86532,86533,86535,86537],{"class":201,"line":35678},[199,86534,81680],{"class":205},[199,86536,81815],{"class":898},[199,86538,34308],{"class":205},[199,86540,86541,86543,86545],{"class":201,"line":35684},[199,86542,86421],{"class":205},[199,86544,1115],{"class":1018},[199,86546,34308],{"class":205},[199,86548,86549,86551,86554,86557,86560],{"class":201,"line":35693},[199,86550,86430],{"class":205},[199,86552,86553],{"class":898},"'青色'",[199,86555,86556],{"class":205},", sum: ",[199,86558,86559],{"class":898},"'一大四小'",[199,86561,57863],{"class":205},[199,86563,86564],{"class":201,"line":35699},[199,86565,80151],{"class":205},[199,86567,86568],{"class":201,"line":35708},[199,86569,81645],{"class":205},[199,86571,86572,86574,86576],{"class":201,"line":35714},[199,86573,81650],{"class":205},[199,86575,81832],{"class":898},[199,86577,34308],{"class":205},[199,86579,86580,86582,86584],{"class":201,"line":35720},[199,86581,81660],{"class":205},[199,86583,81841],{"class":898},[199,86585,34308],{"class":205},[199,86587,86588,86590,86593],{"class":201,"line":35729},[199,86589,81670],{"class":205},[199,86591,86592],{"class":1018},"139",[199,86594,34308],{"class":205},[199,86596,86597,86599,86601],{"class":201,"line":35735},[199,86598,81680],{"class":205},[199,86600,81859],{"class":898},[199,86602,34308],{"class":205},[199,86604,86605,86607,86609],{"class":201,"line":35746},[199,86606,86421],{"class":205},[199,86608,1115],{"class":1018},[199,86610,34308],{"class":205},[199,86612,86613,86615,86618,86620,86623],{"class":201,"line":35752},[199,86614,86489],{"class":205},[199,86616,86617],{"class":898},"'小号'",[199,86619,57723],{"class":205},[199,86621,86622],{"class":898},"'紫色'",[199,86624,57729],{"class":205},[199,86626,86627,86630],{"class":201,"line":35771},[199,86628,86629],{"class":205},"        gift: ",[199,86631,86632],{"class":898},"'50g茶叶,清洗球'\n",[199,86634,86635],{"class":201,"line":35777},[199,86636,2092],{"class":205},[199,86638,86639],{"class":201,"line":35788},[199,86640,2805],{"class":205},[199,86642,86643],{"class":201,"line":35794},[199,86644,86645],{"class":1454},"    \u002F\u002F  1.根据数据渲染页面\n",[199,86647,86648,86650,86652,86654,86656,86658,86660,86662,86664,86666,86668,86670],{"class":201,"line":35814},[199,86649,2102],{"class":205},[199,86651,56658],{"class":878},[199,86653,1537],{"class":205},[199,86655,82160],{"class":898},[199,86657,76508],{"class":205},[199,86659,895],{"class":1086},[199,86661,82307],{"class":205},[199,86663,76303],{"class":878},[199,86665,1537],{"class":205},[199,86667,82054],{"class":8113},[199,86669,82057],{"class":1086},[199,86671,1012],{"class":205},[199,86673,86674],{"class":201,"line":35830},[199,86675,86676],{"class":1454},"      \u002F\u002F 对象解构\n",[199,86678,86679,86681,86683,86685,86687,86689,86691,86694,86696,86698,86700,86703,86705,86708,86710,86712],{"class":201,"line":35836},[199,86680,60487],{"class":1086},[199,86682,82066],{"class":205},[199,86684,82079],{"class":1018},[199,86686,1912],{"class":205},[199,86688,82069],{"class":1018},[199,86690,1912],{"class":205},[199,86692,86693],{"class":1018},"count",[199,86695,1912],{"class":205},[199,86697,82074],{"class":1018},[199,86699,1912],{"class":205},[199,86701,86702],{"class":1018},"spec",[199,86704,1912],{"class":205},[199,86706,86707],{"class":1018},"gift",[199,86709,82082],{"class":205},[199,86711,895],{"class":1086},[199,86713,82087],{"class":205},[199,86715,86716],{"class":201,"line":35850},[199,86717,86718],{"class":1454},"      \u002F\u002F 规格文字模块处理\n",[199,86720,86721,86723,86726,86728,86730,86732,86734,86736,86738,86740],{"class":201,"line":35856},[199,86722,60487],{"class":1086},[199,86724,86725],{"class":1018}," text",[199,86727,16425],{"class":1086},[199,86729,84197],{"class":205},[199,86731,84200],{"class":878},[199,86733,84203],{"class":205},[199,86735,76482],{"class":878},[199,86737,1537],{"class":205},[199,86739,84210],{"class":898},[199,86741,1594],{"class":205},[199,86743,86744],{"class":201,"line":35862},[199,86745,86746],{"class":1454},"      \u002F\u002F 处理赠品模块\n",[199,86748,86749,86751,86753,86755,86758,86760,86762,86764,86766,86769,86771,86773,86775,86777,86779,86782,86784,86787,86789,86791,86793,86795,86797,86799],{"class":201,"line":35873},[199,86750,60487],{"class":1086},[199,86752,76178],{"class":1018},[199,86754,16425],{"class":1086},[199,86756,86757],{"class":205}," gift ",[199,86759,4060],{"class":1086},[199,86761,85371],{"class":205},[199,86763,85374],{"class":878},[199,86765,1537],{"class":205},[199,86767,86768],{"class":898},"','",[199,86770,33668],{"class":205},[199,86772,76303],{"class":878},[199,86774,1537],{"class":205},[199,86776,82054],{"class":8113},[199,86778,82057],{"class":1086},[199,86780,86781],{"class":898}," `\u003Cspan class=\"tag\">【赠品】${",[199,86783,82054],{"class":205},[199,86785,86786],{"class":898},"}\u003C\u002Fspan>`",[199,86788,33668],{"class":205},[199,86790,76482],{"class":878},[199,86792,1537],{"class":205},[199,86794,76487],{"class":898},[199,86796,16575],{"class":205},[199,86798,3938],{"class":1086},[199,86800,72363],{"class":898},[199,86802,86803],{"class":201,"line":35879},[199,86804,86805],{"class":1454},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[199,86807,86808,86810,86813,86815,86818,86820,86822,86824,86827,86829,86831,86833,86836,86838,86840],{"class":201,"line":35885},[199,86809,60487],{"class":1086},[199,86811,86812],{"class":1018}," subtotal",[199,86814,16425],{"class":1086},[199,86816,86817],{"class":205}," ((price ",[199,86819,3537],{"class":1086},[199,86821,8651],{"class":1018},[199,86823,9415],{"class":1086},[199,86825,86826],{"class":205}," count) ",[199,86828,3664],{"class":1086},[199,86830,8651],{"class":1018},[199,86832,33668],{"class":205},[199,86834,86835],{"class":878},"toFixed",[199,86837,1537],{"class":205},[199,86839,1925],{"class":1018},[199,86841,1594],{"class":205},[199,86843,86844],{"class":201,"line":35895},[199,86845,907],{"emptyLinePlaceholder":906},[199,86847,86848,86850],{"class":201,"line":35901},[199,86849,76241],{"class":1086},[199,86851,72427],{"class":898},[199,86853,86854],{"class":201,"line":35912},[199,86855,86856],{"class":898},"        \u003Cdiv class=\"item\">\n",[199,86858,86859,86862,86864],{"class":201,"line":35918},[199,86860,86861],{"class":898},"          \u003Cimg src=\"${",[199,86863,82079],{"class":205},[199,86865,82111],{"class":898},[199,86867,86868,86871,86873,86876,86878],{"class":201,"line":35928},[199,86869,86870],{"class":898},"          \u003Cp class=\"name\">${",[199,86872,82069],{"class":205},[199,86874,86875],{"class":898},"}${",[199,86877,4242],{"class":205},[199,86879,82121],{"class":898},[199,86881,86882,86885,86887],{"class":201,"line":35933},[199,86883,86884],{"class":898},"          \u003Cp class=\"spec\">${",[199,86886,8084],{"class":205},[199,86888,82121],{"class":898},[199,86890,86891,86894,86896,86898,86900,86902,86904,86906],{"class":201,"line":35939},[199,86892,86893],{"class":898},"          \u003Cp class=\"price\">${",[199,86895,82074],{"class":205},[199,86897,3638],{"class":898},[199,86899,86835],{"class":878},[199,86901,1537],{"class":898},[199,86903,1925],{"class":1018},[199,86905,3512],{"class":898},[199,86907,82121],{"class":898},[199,86909,86910,86913,86915],{"class":201,"line":35988},[199,86911,86912],{"class":898},"          \u003Cp class=\"count\">x${",[199,86914,86693],{"class":205},[199,86916,82121],{"class":898},[199,86918,86919,86922,86925],{"class":201,"line":36035},[199,86920,86921],{"class":898},"          \u003Cp class=\"sub-total\">${",[199,86923,86924],{"class":205},"subtotal",[199,86926,82121],{"class":898},[199,86928,86929],{"class":201,"line":36040},[199,86930,86931],{"class":898},"        \u003C\u002Fdiv> \n",[199,86933,86934],{"class":201,"line":36046},[199,86935,86936],{"class":898},"             `\n",[199,86938,86939,86942,86944,86946,86948],{"class":201,"line":36065},[199,86940,86941],{"class":205},"    }).",[199,86943,76482],{"class":878},[199,86945,1537],{"class":205},[199,86947,76487],{"class":898},[199,86949,1594],{"class":205},[199,86951,86952],{"class":201,"line":36071},[199,86953,86954],{"class":1454},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[199,86956,86957,86959,86961,86963,86965,86968,86970,86973,86975,86977,86979,86982,86985,86987,86990,86992,86994,86996,86999,87001,87003,87005,87007],{"class":201,"line":36090},[199,86958,14084],{"class":1086},[199,86960,65044],{"class":1018},[199,86962,16425],{"class":1086},[199,86964,82307],{"class":205},[199,86966,86967],{"class":878},"reduce",[199,86969,5290],{"class":205},[199,86971,86972],{"class":8113},"prev",[199,86974,1912],{"class":205},[199,86976,82054],{"class":8113},[199,86978,16575],{"class":205},[199,86980,86981],{"class":1086},"=>",[199,86983,86984],{"class":205}," prev ",[199,86986,2028],{"class":1086},[199,86988,86989],{"class":205}," (item.price ",[199,86991,3537],{"class":1086},[199,86993,8651],{"class":1018},[199,86995,9415],{"class":1086},[199,86997,86998],{"class":205}," item.count) ",[199,87000,3664],{"class":1086},[199,87002,8651],{"class":1018},[199,87004,1912],{"class":205},[199,87006,1025],{"class":1018},[199,87008,1594],{"class":205},[199,87010,87011,87013,87015,87017,87020,87022,87024,87027,87029,87031,87033],{"class":201,"line":36096},[199,87012,2102],{"class":205},[199,87014,56658],{"class":878},[199,87016,1537],{"class":205},[199,87018,87019],{"class":898},"'.amount'",[199,87021,76508],{"class":205},[199,87023,895],{"class":1086},[199,87025,87026],{"class":205}," total.",[199,87028,86835],{"class":878},[199,87030,1537],{"class":205},[199,87032,1925],{"class":1018},[199,87034,1594],{"class":205},[199,87036,87037,87039,87041],{"class":201,"line":36102},[199,87038,2112],{"class":205},[199,87040,1446],{"class":874},[199,87042,882],{"class":205},[199,87044,87045,87047,87049],{"class":201,"line":36112},[199,87046,1414],{"class":205},[199,87048,1431],{"class":874},[199,87050,882],{"class":205},[199,87052,87053],{"class":201,"line":36117},[199,87054,907],{"emptyLinePlaceholder":906},[199,87056,87057,87059,87061],{"class":201,"line":36123},[199,87058,1414],{"class":205},[199,87060,194],{"class":874},[199,87062,882],{"class":205},[14,87064,87066],{"id":87065},"_411-编程思想","4.11 编程思想",[19,87068,87070],{"id":87069},"_4111-面向过程介绍","4.11.1 面向过程介绍",[31,87072,87073,87076],{},[49,87074,87075],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[31,87078,87079],{},"调用就可以了",[31,87081,87082],{},[55,87083],{"alt":57,"src":87084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[19,87086,87088],{"id":87087},"_4112-面向对象","4.11.2 面向对象",[31,87090,87091],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[31,87093,87094],{},[55,87095],{"alt":57,"src":87096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[31,87098,87099],{},"面向对象的特性：",[176,87101,87102,87105,87108],{},[27,87103,87104],{},"封装性",[27,87106,87107],{},"继承性",[27,87109,87110],{},"多态性",[19,87112,87114],{"id":87113},"_4113-两者比较","4.11.3 两者比较",[31,87116,87117],{},[55,87118],{"alt":57,"src":87119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,87121,87123],{"id":87122},"_412-构造函数回顾","4.12 构造函数回顾",[31,87125,87126],{},[55,87127],{"alt":57,"src":87128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[31,87130,87131],{},[55,87132],{"alt":57,"src":87133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[31,87135,87136],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[31,87138,87139],{},[55,87140],{"alt":57,"src":87141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,87143,87145],{"id":87144},"_413-原型","4.13 原型",[19,87147,87149],{"id":87148},"_4131-原型对象的认识","4.13.1 原型对象的认识",[31,87151,87152],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[31,87154,87155],{},[55,87156],{"alt":57,"src":87157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[31,87159,87160],{},[55,87161],{"alt":57,"src":87162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[31,87164,87165],{},"原型是构造函数的属性，它也是一个对象",[31,87167,87168],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[31,87170,87171],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[190,87173,87175],{"className":2763,"code":87174,"language":2765,"meta":57,"style":57},"\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",[196,87176,87177,87185,87190,87198,87203,87208,87213,87218,87223,87227,87231,87235,87240,87245,87249,87254,87259,87264,87269,87274,87278,87286],{"__ignoreMap":57},[199,87178,87179,87181,87183],{"class":201,"line":202},[199,87180,887],{"class":205},[199,87182,1431],{"class":874},[199,87184,882],{"class":205},[199,87186,87187],{"class":201,"line":36},[199,87188,87189],{"class":1454},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[199,87191,87192,87194,87196],{"class":201,"line":73},[199,87193,1824],{"class":205},[199,87195,1446],{"class":874},[199,87197,882],{"class":205},[199,87199,87200],{"class":201,"line":333},[199,87201,87202],{"class":205},"    function Star(uname, age) {\n",[199,87204,87205],{"class":201,"line":227},[199,87206,87207],{"class":205},"      this.uname = uname,\n",[199,87209,87210],{"class":201,"line":238},[199,87211,87212],{"class":205},"        this.age = age\n",[199,87214,87215],{"class":201,"line":252},[199,87216,87217],{"class":205},"      \u002F\u002F this.sing = function () {\n",[199,87219,87220],{"class":201,"line":388},[199,87221,87222],{"class":205},"      \u002F\u002F   console.log('唱歌')\n",[199,87224,87225],{"class":201,"line":415},[199,87226,907],{"emptyLinePlaceholder":906},[199,87228,87229],{"class":201,"line":426},[199,87230,62296],{"class":205},[199,87232,87233],{"class":201,"line":1015},[199,87234,2097],{"class":205},[199,87236,87237],{"class":201,"line":1031},[199,87238,87239],{"class":205},"    Star.prototype.sing = function () {\n",[199,87241,87242],{"class":201,"line":1043},[199,87243,87244],{"class":205},"      console.log('唱歌')\n",[199,87246,87247],{"class":201,"line":1049},[199,87248,2097],{"class":205},[199,87250,87251],{"class":201,"line":1054},[199,87252,87253],{"class":205},"    \u002F\u002F console.dir(Star.prototype)\n",[199,87255,87256],{"class":201,"line":1062},[199,87257,87258],{"class":205},"    const pink = new Star('pink', 18)\n",[199,87260,87261],{"class":201,"line":1075},[199,87262,87263],{"class":205},"    const red = new Star('red', 20)\n",[199,87265,87266],{"class":201,"line":1092},[199,87267,87268],{"class":205},"    pink.sing()\n",[199,87270,87271],{"class":201,"line":1107},[199,87272,87273],{"class":205},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[199,87275,87276],{"class":201,"line":1128},[199,87277,907],{"emptyLinePlaceholder":906},[199,87279,87280,87282,87284],{"class":201,"line":1146},[199,87281,2112],{"class":205},[199,87283,1446],{"class":874},[199,87285,882],{"class":205},[199,87287,87288,87290,87292],{"class":201,"line":1163},[199,87289,1414],{"class":205},[199,87291,1431],{"class":874},[199,87293,882],{"class":205},[31,87295,87296],{},[55,87297],{"alt":57,"src":87298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[190,87300,87302],{"className":2763,"code":87301,"language":2765,"meta":57,"style":57},"\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",[196,87303,87304,87312,87320,87325,87330,87335,87340,87344,87349,87354,87359,87363,87368,87372,87376,87381,87385,87393],{"__ignoreMap":57},[199,87305,87306,87308,87310],{"class":201,"line":202},[199,87307,887],{"class":205},[199,87309,1431],{"class":874},[199,87311,882],{"class":205},[199,87313,87314,87316,87318],{"class":201,"line":36},[199,87315,1824],{"class":205},[199,87317,1446],{"class":874},[199,87319,882],{"class":205},[199,87321,87322],{"class":201,"line":73},[199,87323,87324],{"class":205},"    let that\n",[199,87326,87327],{"class":201,"line":333},[199,87328,87329],{"class":205},"    function Star(uname) {\n",[199,87331,87332],{"class":201,"line":227},[199,87333,87334],{"class":205},"      this.uname = uname\n",[199,87336,87337],{"class":201,"line":238},[199,87338,87339],{"class":205},"      that = this\n",[199,87341,87342],{"class":201,"line":252},[199,87343,2097],{"class":205},[199,87345,87346],{"class":201,"line":388},[199,87347,87348],{"class":205},"    \u002F\u002F 实例对象是 ldh\n",[199,87350,87351],{"class":201,"line":415},[199,87352,87353],{"class":205},"    const ldh = new Star('刘德华')\n",[199,87355,87356],{"class":201,"line":426},[199,87357,87358],{"class":205},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[199,87360,87361],{"class":201,"line":1015},[199,87362,907],{"emptyLinePlaceholder":906},[199,87364,87365],{"class":201,"line":1031},[199,87366,87367],{"class":205},"    Star.sing = function () {\n",[199,87369,87370],{"class":201,"line":1043},[199,87371,87244],{"class":205},[199,87373,87374],{"class":201,"line":1049},[199,87375,2097],{"class":205},[199,87377,87378],{"class":201,"line":1054},[199,87379,87380],{"class":205},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[199,87382,87383],{"class":201,"line":1062},[199,87384,907],{"emptyLinePlaceholder":906},[199,87386,87387,87389,87391],{"class":201,"line":1075},[199,87388,2112],{"class":205},[199,87390,1446],{"class":874},[199,87392,882],{"class":205},[199,87394,87395,87397,87399],{"class":201,"line":1092},[199,87396,1414],{"class":205},[199,87398,1431],{"class":874},[199,87400,882],{"class":205},[31,87402,87403],{},"构造函数的this指向的是实例对象；",[31,87405,87406],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[19,87408,87410],{"id":87409},"_4132-数组扩展方法","4.13.2 数组扩展方法",[31,87412,87413],{},[55,87414],{"alt":57,"src":87415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[190,87417,87419],{"className":2763,"code":87418,"language":2765,"meta":57,"style":57},"\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",[196,87420,87421,87429,87437,87442,87447,87452,87457,87462,87467,87472,87477,87482,87487,87491,87496,87501,87506,87511,87515,87520,87525,87530,87535,87539,87544,87549,87554,87559,87563,87568,87572,87580],{"__ignoreMap":57},[199,87422,87423,87425,87427],{"class":201,"line":202},[199,87424,887],{"class":205},[199,87426,1431],{"class":874},[199,87428,882],{"class":205},[199,87430,87431,87433,87435],{"class":201,"line":36},[199,87432,1824],{"class":205},[199,87434,1446],{"class":874},[199,87436,882],{"class":205},[199,87438,87439],{"class":201,"line":73},[199,87440,87441],{"class":205},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[199,87443,87444],{"class":201,"line":333},[199,87445,87446],{"class":205},"    const arr = [1, 2, 3]\n",[199,87448,87449],{"class":201,"line":227},[199,87450,87451],{"class":205},"    \u002F\u002F 自己定义数组的扩展方法\n",[199,87453,87454],{"class":201,"line":238},[199,87455,87456],{"class":205},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[199,87458,87459],{"class":201,"line":252},[199,87460,87461],{"class":205},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[199,87463,87464],{"class":201,"line":388},[199,87465,87466],{"class":205},"    \u002F\u002F ①.最大值\n",[199,87468,87469],{"class":201,"line":415},[199,87470,87471],{"class":205},"    Array.prototype.max = function () {\n",[199,87473,87474],{"class":201,"line":426},[199,87475,87476],{"class":205},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[199,87478,87479],{"class":201,"line":1015},[199,87480,87481],{"class":205},"      return Math.max(...this)\n",[199,87483,87484],{"class":201,"line":1031},[199,87485,87486],{"class":205},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[199,87488,87489],{"class":201,"line":1043},[199,87490,2097],{"class":205},[199,87492,87493],{"class":201,"line":1049},[199,87494,87495],{"class":205},"    console.log(arr.max())\n",[199,87497,87498],{"class":201,"line":1054},[199,87499,87500],{"class":205},"    \u002F\u002F ②最小值\n",[199,87502,87503],{"class":201,"line":1062},[199,87504,87505],{"class":205},"    Array.prototype.min = function () {\n",[199,87507,87508],{"class":201,"line":1075},[199,87509,87510],{"class":205},"      return Math.min(...this)\n",[199,87512,87513],{"class":201,"line":1092},[199,87514,2097],{"class":205},[199,87516,87517],{"class":201,"line":1107},[199,87518,87519],{"class":205},"    console.log(arr.min())\n",[199,87521,87522],{"class":201,"line":1128},[199,87523,87524],{"class":205},"    \u002F\u002F③求和\n",[199,87526,87527],{"class":201,"line":1146},[199,87528,87529],{"class":205},"    Array.prototype.sum = function () {\n",[199,87531,87532],{"class":201,"line":1163},[199,87533,87534],{"class":205},"      return this.reduce((prev, current) => prev + current, 0)\n",[199,87536,87537],{"class":201,"line":1176},[199,87538,2097],{"class":205},[199,87540,87541],{"class":201,"line":1189},[199,87542,87543],{"class":205},"    console.log(arr.sum())\n",[199,87545,87546],{"class":201,"line":1202},[199,87547,87548],{"class":205},"    \u002F\u002F ③排序\n",[199,87550,87551],{"class":201,"line":1207},[199,87552,87553],{"class":205},"    Array.prototype.rever = function () {\n",[199,87555,87556],{"class":201,"line":1212},[199,87557,87558],{"class":205},"      return this.reverse()\n",[199,87560,87561],{"class":201,"line":1225},[199,87562,2097],{"class":205},[199,87564,87565],{"class":201,"line":1236},[199,87566,87567],{"class":205},"    console.log(arr.rever())\n",[199,87569,87570],{"class":201,"line":1249},[199,87571,907],{"emptyLinePlaceholder":906},[199,87573,87574,87576,87578],{"class":201,"line":1262},[199,87575,2112],{"class":205},[199,87577,1446],{"class":874},[199,87579,882],{"class":205},[199,87581,87582,87584,87586],{"class":201,"line":1275},[199,87583,1414],{"class":205},[199,87585,1431],{"class":874},[199,87587,882],{"class":205},[31,87589,87590],{},[55,87591],{"alt":57,"src":87592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[19,87594,87596],{"id":87595},"_4133-constructor-属性","4.13.3 constructor 属性",[31,87598,87599],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[31,87601,87602],{},[55,87603],{"alt":57,"src":87604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[190,87606,87608],{"className":2763,"code":87607,"language":2765,"meta":57,"style":57},"\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",[196,87609,87610,87618,87626,87631,87636,87640,87645,87650,87655,87663],{"__ignoreMap":57},[199,87611,87612,87614,87616],{"class":201,"line":202},[199,87613,887],{"class":205},[199,87615,1431],{"class":874},[199,87617,882],{"class":205},[199,87619,87620,87622,87624],{"class":201,"line":36},[199,87621,1824],{"class":205},[199,87623,1446],{"class":874},[199,87625,882],{"class":205},[199,87627,87628],{"class":201,"line":73},[199,87629,87630],{"class":205},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[199,87632,87633],{"class":201,"line":333},[199,87634,87635],{"class":205},"    function Star() {\n",[199,87637,87638],{"class":201,"line":227},[199,87639,2097],{"class":205},[199,87641,87642],{"class":201,"line":238},[199,87643,87644],{"class":205},"    const ldh = new Star()\n",[199,87646,87647],{"class":201,"line":252},[199,87648,87649],{"class":205},"    console.log(Star.prototype)\n",[199,87651,87652],{"class":201,"line":388},[199,87653,87654],{"class":205},"    console.log(Star.prototype.constructor === Star)\n",[199,87656,87657,87659,87661],{"class":201,"line":415},[199,87658,2112],{"class":205},[199,87660,1446],{"class":874},[199,87662,882],{"class":205},[199,87664,87665,87667,87669],{"class":201,"line":426},[199,87666,1414],{"class":205},[199,87668,1431],{"class":874},[199,87670,882],{"class":205},[31,87672,87673],{},[55,87674],{"alt":57,"src":87675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[31,87677,87678],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[190,87680,87682],{"className":2763,"code":87681,"language":2765,"meta":57,"style":57},"  \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",[196,87683,87684,87692,87696,87700,87704,87709,87714,87719,87723,87728,87733,87738,87743,87748,87753,87757,87761,87766,87771,87776,87780,87785,87790,87794,87798,87802],{"__ignoreMap":57},[199,87685,87686,87688,87690],{"class":201,"line":202},[199,87687,1824],{"class":205},[199,87689,1446],{"class":874},[199,87691,882],{"class":205},[199,87693,87694],{"class":201,"line":36},[199,87695,87630],{"class":205},[199,87697,87698],{"class":201,"line":73},[199,87699,87635],{"class":205},[199,87701,87702],{"class":201,"line":333},[199,87703,2097],{"class":205},[199,87705,87706],{"class":201,"line":227},[199,87707,87708],{"class":205},"    \u002F\u002F const ldh = new Star()\n",[199,87710,87711],{"class":201,"line":238},[199,87712,87713],{"class":205},"    \u002F\u002F console.log(Star.prototype)\n",[199,87715,87716],{"class":201,"line":252},[199,87717,87718],{"class":205},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[199,87720,87721],{"class":201,"line":388},[199,87722,907],{"emptyLinePlaceholder":906},[199,87724,87725],{"class":201,"line":415},[199,87726,87727],{"class":205},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[199,87729,87730],{"class":201,"line":426},[199,87731,87732],{"class":205},"    \u002F\u002F Star.prototype.sing = function () {\n",[199,87734,87735],{"class":201,"line":1015},[199,87736,87737],{"class":205},"    \u002F\u002F   console.log('唱歌')\n",[199,87739,87740],{"class":201,"line":1031},[199,87741,87742],{"class":205},"    \u002F\u002F }\n",[199,87744,87745],{"class":201,"line":1043},[199,87746,87747],{"class":205},"    \u002F\u002F Star.prototype.dance = function () {\n",[199,87749,87750],{"class":201,"line":1049},[199,87751,87752],{"class":205},"    \u002F\u002F   console.log('跳舞')\n",[199,87754,87755],{"class":201,"line":1054},[199,87756,87742],{"class":205},[199,87758,87759],{"class":201,"line":1062},[199,87760,87649],{"class":205},[199,87762,87763],{"class":201,"line":1075},[199,87764,87765],{"class":205},"    Star.prototype = {\n",[199,87767,87768],{"class":201,"line":1092},[199,87769,87770],{"class":205},"      sing: function () {\n",[199,87772,87773],{"class":201,"line":1107},[199,87774,87775],{"class":205},"        console.log('唱歌')\n",[199,87777,87778],{"class":201,"line":1128},[199,87779,80151],{"class":205},[199,87781,87782],{"class":201,"line":1146},[199,87783,87784],{"class":205},"      dance: function () {\n",[199,87786,87787],{"class":201,"line":1163},[199,87788,87789],{"class":205},"        console.log('跳舞')\n",[199,87791,87792],{"class":201,"line":1176},[199,87793,2092],{"class":205},[199,87795,87796],{"class":201,"line":1189},[199,87797,2097],{"class":205},[199,87799,87800],{"class":201,"line":1202},[199,87801,87649],{"class":205},[199,87803,87804,87806,87808],{"class":201,"line":1207},[199,87805,2112],{"class":205},[199,87807,1446],{"class":874},[199,87809,882],{"class":205},[31,87811,87812],{},"进行输出结果后会发现：",[31,87814,87815],{},[55,87816],{"alt":57,"src":87817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[31,87819,87820],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[31,87822,87823],{},"所以，要重新指回创造这个原型对象的构造函数",[190,87825,87827],{"className":73472,"code":87826,"language":73474,"meta":57,"style":57},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[196,87828,87829,87843,87848,87853,87864,87877,87882,87893,87907,87911],{"__ignoreMap":57},[199,87830,87831,87834,87836,87839,87841],{"class":201,"line":202},[199,87832,87833],{"class":1018},"Star",[199,87835,3638],{"class":205},[199,87837,87838],{"class":1018},"prototype",[199,87840,16425],{"class":1086},[199,87842,1012],{"class":205},[199,87844,87845],{"class":201,"line":36},[199,87846,87847],{"class":1454},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[199,87849,87850],{"class":201,"line":73},[199,87851,87852],{"class":205},"  constructor: Star,\n",[199,87854,87855,87858,87860,87862],{"class":201,"line":333},[199,87856,87857],{"class":878},"  sing",[199,87859,1022],{"class":205},[199,87861,56708],{"class":1086},[199,87863,56711],{"class":205},[199,87865,87866,87868,87870,87872,87875],{"class":201,"line":227},[199,87867,76012],{"class":205},[199,87869,60506],{"class":878},[199,87871,1537],{"class":205},[199,87873,87874],{"class":898},"'唱歌'",[199,87876,1594],{"class":205},[199,87878,87879],{"class":201,"line":238},[199,87880,87881],{"class":205},"   },\n",[199,87883,87884,87887,87889,87891],{"class":201,"line":252},[199,87885,87886],{"class":878},"   dance",[199,87888,1022],{"class":205},[199,87890,56708],{"class":1086},[199,87892,56711],{"class":205},[199,87894,87895,87898,87900,87902,87905],{"class":201,"line":388},[199,87896,87897],{"class":205},"     console.",[199,87899,60506],{"class":878},[199,87901,1537],{"class":205},[199,87903,87904],{"class":898},"'跳舞'",[199,87906,1594],{"class":205},[199,87908,87909],{"class":201,"line":415},[199,87910,7207],{"class":205},[199,87912,87913],{"class":201,"line":426},[199,87914,671],{"class":205},[31,87916,87917],{},[55,87918],{"alt":57,"src":87919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[31,87921,87922],{},"总结1：",[31,87924,87925],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[31,87927,87928],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[31,87930,87931],{},"constructor指的是他的来源",[31,87933,87934],{},[55,87935],{"alt":57,"src":87936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[31,87938,87939],{},[55,87940],{"alt":57,"src":87941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[31,87943,87944],{},"总结2：",[31,87946,87947],{},[55,87948],{"alt":57,"src":87949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[31,87951,87952],{},[55,87953],{"alt":57,"src":87954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[31,87956,87957],{},[55,87958],{"alt":57,"src":87959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[19,87961,87963],{"id":87962},"_4134-对象原型","4.13.4 对象原型",[31,87965,87966],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[31,87968,87969],{},"对象原型就是__proto__这个属性",[31,87971,87972],{},[55,87973],{"alt":57,"src":87974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[31,87976,87977],{},[55,87978],{"alt":57,"src":87979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[31,87981,87982],{},[55,87983],{"alt":57,"src":87984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[31,87986,87987],{},[55,87988],{"alt":57,"src":87989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[190,87991,87993],{"className":2763,"code":87992,"language":2765,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[196,87994,87995,88003,88011,88015,88019,88023,88028,88036],{"__ignoreMap":57},[199,87996,87997,87999,88001],{"class":201,"line":202},[199,87998,887],{"class":205},[199,88000,1431],{"class":874},[199,88002,882],{"class":205},[199,88004,88005,88007,88009],{"class":201,"line":36},[199,88006,1824],{"class":205},[199,88008,1446],{"class":874},[199,88010,882],{"class":205},[199,88012,88013],{"class":201,"line":73},[199,88014,87635],{"class":205},[199,88016,88017],{"class":201,"line":333},[199,88018,2097],{"class":205},[199,88020,88021],{"class":201,"line":227},[199,88022,87644],{"class":205},[199,88024,88025],{"class":201,"line":238},[199,88026,88027],{"class":205},"    console.log(ldh)\n",[199,88029,88030,88032,88034],{"class":201,"line":252},[199,88031,2112],{"class":205},[199,88033,1446],{"class":874},[199,88035,882],{"class":205},[199,88037,88038,88040,88042],{"class":201,"line":388},[199,88039,1414],{"class":205},[199,88041,1431],{"class":874},[199,88043,882],{"class":205},[31,88045,88046],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[31,88048,88049],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[31,88051,88052],{},[55,88053],{"alt":57,"src":88054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[31,88056,88057],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[31,88059,88060],{},"对象原型指向原型对象",[31,88062,88063],{},[55,88064],{"alt":57,"src":88065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[31,88067,88068],{},[55,88069],{"alt":57,"src":88070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[31,88072,88073],{},[55,88074],{"alt":57,"src":88075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[19,88077,88079],{"id":88078},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[31,88081,88082],{},[55,88083],{"alt":57,"src":88084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[24,88086,88087,88090,88093,88096],{},[27,88088,88089],{},"构造函数通过new的形式实例化得到实例对象",[27,88091,88092],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[27,88094,88095],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[27,88097,88098],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[31,88100,88101],{},[55,88102],{"alt":57,"src":88103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[31,88105,88106],{},"题目梳理：",[31,88108,88109],{},[55,88110],{"alt":57,"src":88111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[19,88113,88115],{"id":88114},"_4136-原型继承","4.13.6 原型继承",[31,88117,88118],{},[55,88119],{"alt":57,"src":88120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[31,88122,88123],{},[55,88124],{"alt":57,"src":88125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[31,88127,88128],{},[55,88129],{"alt":57,"src":88130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[31,88132,88133],{},[55,88134],{"alt":57,"src":88135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[31,88137,88138],{},[55,88139],{"alt":57,"src":88140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[31,88142,88143],{},[55,88144],{"alt":57,"src":88145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[31,88147,88148],{},[55,88149],{"alt":57,"src":88150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[31,88152,88153],{},[55,88154],{"alt":57,"src":88155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[31,88157,88158],{},"回顾：构造函数每次new得到对象都是不同的",[19,88160,88162],{"id":88161},"_4137-原型链","4.13.7 原型链",[31,88164,88165],{},[55,88166],{"alt":57,"src":88167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[31,88169,88170],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[31,88172,88173],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[31,88175,88176],{},"大哥是Object",[31,88178,88179],{},[55,88180],{"alt":57,"src":88181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[31,88183,88184],{},[55,88185],{"alt":57,"src":88186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[31,88188,88189],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[31,88191,88192],{},"万物皆对象",[19,88194,88196],{"id":88195},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[31,88198,88199],{},"模态框",[31,88201,88202],{},"以后遇见这个效果直接使用这个就行",[31,88204,88205],{},[55,88206],{"alt":57,"src":88207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[31,88209,88210],{},[55,88211],{"alt":57,"src":88212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[31,88214,88215],{},[55,88216],{"alt":57,"src":88217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[31,88219,88220],{},[55,88221],{"alt":57,"src":88222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[31,88224,88225],{},"补充知识点：",[24,88227,88228],{},[27,88229,88230],{},"append()",[31,88232,88233],{},[55,88234],{"alt":57,"src":88235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[190,88237,88239],{"className":192,"code":88238,"language":194,"meta":57,"style":57},"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",[196,88240,88241,88246,88251,88256,88260,88264,88268,88273,88278,88283,88287],{"__ignoreMap":57},[199,88242,88243],{"class":201,"line":202},[199,88244,88245],{"class":205},"append(param1)\n",[199,88247,88248],{"class":201,"line":36},[199,88249,88250],{"class":205},"append(param1, param2)\n",[199,88252,88253],{"class":201,"line":73},[199,88254,88255],{"class":205},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[199,88257,88258],{"class":201,"line":333},[199,88259,907],{"emptyLinePlaceholder":906},[199,88261,88262],{"class":201,"line":227},[199,88263,907],{"emptyLinePlaceholder":906},[199,88265,88266],{"class":201,"line":238},[199,88267,907],{"emptyLinePlaceholder":906},[199,88269,88270],{"class":201,"line":252},[199,88271,88272],{"class":205},"let div = document.createElement(\"div\");\n",[199,88274,88275],{"class":201,"line":388},[199,88276,88277],{"class":205},"let p = document.createElement(\"p\");\n",[199,88279,88280],{"class":201,"line":415},[199,88281,88282],{"class":205},"div.append(p);\n",[199,88284,88285],{"class":201,"line":426},[199,88286,907],{"emptyLinePlaceholder":906},[199,88288,88289,88292,88294],{"class":201,"line":1015},[199,88290,88291],{"class":205},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[199,88293,31],{"class":874},[199,88295,88296],{"class":205},"> ]\n",[24,88298,88299],{"start":36},[27,88300,88301],{},"remove()",[31,88303,88304],{},"自己删自己",[31,88306,88307],{},[55,88308],{"alt":57,"src":88309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[190,88311,88313],{"className":192,"code":88312,"language":194,"meta":57,"style":57},"\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",[196,88314,88315,88325,88339,88343,88351,88365,88385,88397,88405,88412,88424,88437,88472,88484,88495,88507,88519,88531,88558,88568,88572,88576,88585,88597,88611,88621,88633,88637,88641,88651,88662,88672,88682,88695,88708,88718,88722,88726,88735,88745,88757,88761,88765,88774,88784,88794,88806,88810,88814,88824,88840,88851,88861,88871,88883,88895,88907,88911,88915,88928,88939,88943,88951,88959,88963,88971,88991,89011,89019,89024,89050,89055,89060,89079,89084,89096,89101,89112,89122,89132,89137,89142,89146,89151,89156,89161,89181,89186,89206,89211,89225,89230,89235,89240,89256,89260,89265,89294,89299,89304,89309,89320,89324,89328,89332,89337,89362,89367,89392,89397,89406,89410,89415,89440,89444,89469,89473,89482,89486,89491,89509,89519,89523,89531,89539,89543],{"__ignoreMap":57},[199,88316,88317,88319,88321,88323],{"class":201,"line":202},[199,88318,871],{"class":205},[199,88320,875],{"class":874},[199,88322,879],{"class":878},[199,88324,882],{"class":205},[199,88326,88327,88329,88331,88333,88335,88337],{"class":201,"line":36},[199,88328,887],{"class":205},[199,88330,194],{"class":874},[199,88332,892],{"class":878},[199,88334,895],{"class":205},[199,88336,899],{"class":898},[199,88338,882],{"class":205},[199,88340,88341],{"class":201,"line":73},[199,88342,907],{"emptyLinePlaceholder":906},[199,88344,88345,88347,88349],{"class":201,"line":333},[199,88346,887],{"class":205},[199,88348,914],{"class":874},[199,88350,882],{"class":205},[199,88352,88353,88355,88357,88359,88361,88363],{"class":201,"line":227},[199,88354,1824],{"class":205},[199,88356,924],{"class":874},[199,88358,927],{"class":878},[199,88360,895],{"class":205},[199,88362,932],{"class":898},[199,88364,882],{"class":205},[199,88366,88367,88369,88371,88373,88375,88377,88379,88381,88383],{"class":201,"line":238},[199,88368,1824],{"class":205},[199,88370,924],{"class":874},[199,88372,967],{"class":878},[199,88374,895],{"class":205},[199,88376,972],{"class":898},[199,88378,951],{"class":878},[199,88380,895],{"class":205},[199,88382,979],{"class":898},[199,88384,882],{"class":205},[199,88386,88387,88389,88391,88393,88395],{"class":201,"line":252},[199,88388,1824],{"class":205},[199,88390,988],{"class":874},[199,88392,991],{"class":205},[199,88394,988],{"class":874},[199,88396,882],{"class":205},[199,88398,88399,88401,88403],{"class":201,"line":388},[199,88400,1824],{"class":205},[199,88402,1002],{"class":874},[199,88404,882],{"class":205},[199,88406,88407,88410],{"class":201,"line":415},[199,88408,88409],{"class":878},"    .modal",[199,88411,1012],{"class":205},[199,88413,88414,88416,88418,88420,88422],{"class":201,"line":426},[199,88415,57030],{"class":1018},[199,88417,1022],{"class":205},[199,88419,1100],{"class":1018},[199,88421,1087],{"class":1086},[199,88423,1028],{"class":205},[199,88425,88426,88429,88431,88433,88435],{"class":201,"line":1015},[199,88427,88428],{"class":1018},"      min-height",[199,88430,1022],{"class":205},[199,88432,3396],{"class":1018},[199,88434,1087],{"class":1086},[199,88436,1028],{"class":205},[199,88438,88439,88441,88443,88445,88447,88449,88451,88453,88455,88457,88459,88461,88463,88465,88467,88470],{"class":201,"line":1031},[199,88440,81009],{"class":1018},[199,88442,1022],{"class":205},[199,88444,1025],{"class":1018},[199,88446,1621],{"class":1018},[199,88448,4954],{"class":1018},[199,88450,1087],{"class":1086},[199,88452,81026],{"class":1018},[199,88454,1537],{"class":205},[199,88456,1025],{"class":1018},[199,88458,1912],{"class":205},[199,88460,1025],{"class":1018},[199,88462,1912],{"class":205},[199,88464,1025],{"class":1018},[199,88466,1912],{"class":205},[199,88468,88469],{"class":1018},"0.1",[199,88471,5623],{"class":205},[199,88473,88474,88476,88478,88480,88482],{"class":201,"line":1043},[199,88475,57393],{"class":1018},[199,88477,1022],{"class":205},[199,88479,1915],{"class":1018},[199,88481,1087],{"class":1086},[199,88483,1028],{"class":205},[199,88485,88486,88488,88490,88493],{"class":201,"line":1049},[199,88487,57018],{"class":1018},[199,88489,1022],{"class":205},[199,88491,88492],{"class":1018},"fixed",[199,88494,1028],{"class":205},[199,88496,88497,88500,88502,88505],{"class":201,"line":1054},[199,88498,88499],{"class":1018},"      z-index",[199,88501,1022],{"class":205},[199,88503,88504],{"class":1018},"999",[199,88506,1028],{"class":205},[199,88508,88509,88511,88513,88515,88517],{"class":201,"line":1062},[199,88510,57097],{"class":1018},[199,88512,1022],{"class":205},[199,88514,1153],{"class":1018},[199,88516,3412],{"class":1086},[199,88518,1028],{"class":205},[199,88520,88521,88523,88525,88527,88529],{"class":201,"line":1075},[199,88522,57206],{"class":1018},[199,88524,1022],{"class":205},[199,88526,1153],{"class":1018},[199,88528,3412],{"class":1086},[199,88530,1028],{"class":205},[199,88532,88533,88535,88537,88539,88541,88544,88546,88548,88550,88552,88554,88556],{"class":201,"line":1092},[199,88534,81050],{"class":1018},[199,88536,1022],{"class":205},[199,88538,81055],{"class":1018},[199,88540,1537],{"class":205},[199,88542,88543],{"class":1018},"-50",[199,88545,3412],{"class":1086},[199,88547,1912],{"class":205},[199,88549,88543],{"class":1018},[199,88551,3412],{"class":1086},[199,88553,1912],{"class":205},[199,88555,1025],{"class":1018},[199,88557,5623],{"class":205},[199,88559,88560,88562,88564,88566],{"class":201,"line":1107},[199,88561,57143],{"class":1018},[199,88563,1022],{"class":205},[199,88565,63101],{"class":1018},[199,88567,1028],{"class":205},[199,88569,88570],{"class":201,"line":1128},[199,88571,2097],{"class":205},[199,88573,88574],{"class":201,"line":1146},[199,88575,907],{"emptyLinePlaceholder":906},[199,88577,88578,88580,88583],{"class":201,"line":1163},[199,88579,88409],{"class":878},[199,88581,88582],{"class":878}," .header",[199,88584,1012],{"class":205},[199,88586,88587,88589,88591,88593,88595],{"class":201,"line":1176},[199,88588,59618],{"class":1018},[199,88590,1022],{"class":205},[199,88592,3484],{"class":1018},[199,88594,1087],{"class":1086},[199,88596,1028],{"class":205},[199,88598,88599,88601,88603,88605,88607,88609],{"class":201,"line":1189},[199,88600,56954],{"class":1018},[199,88602,1022],{"class":205},[199,88604,1025],{"class":1018},[199,88606,4954],{"class":1018},[199,88608,1087],{"class":1086},[199,88610,1028],{"class":205},[199,88612,88613,88615,88617,88619],{"class":201,"line":1202},[199,88614,57018],{"class":1018},[199,88616,1022],{"class":205},[199,88618,57023],{"class":1018},[199,88620,1028],{"class":205},[199,88622,88623,88625,88627,88629,88631],{"class":201,"line":1207},[199,88624,57181],{"class":1018},[199,88626,1022],{"class":205},[199,88628,3779],{"class":1018},[199,88630,1087],{"class":1086},[199,88632,1028],{"class":205},[199,88634,88635],{"class":201,"line":1212},[199,88636,2097],{"class":205},[199,88638,88639],{"class":201,"line":1225},[199,88640,907],{"emptyLinePlaceholder":906},[199,88642,88643,88645,88647,88649],{"class":201,"line":1236},[199,88644,88409],{"class":878},[199,88646,88582],{"class":878},[199,88648,5936],{"class":874},[199,88650,1012],{"class":205},[199,88652,88653,88656,88658,88660],{"class":201,"line":1249},[199,88654,88655],{"class":1018},"      font-style",[199,88657,1022],{"class":205},[199,88659,66100],{"class":1018},[199,88661,1028],{"class":205},[199,88663,88664,88666,88668,88670],{"class":201,"line":1262},[199,88665,59675],{"class":1018},[199,88667,1022],{"class":205},[199,88669,64329],{"class":1018},[199,88671,1028],{"class":205},[199,88673,88674,88676,88678,88680],{"class":201,"line":1275},[199,88675,57018],{"class":1018},[199,88677,1022],{"class":205},[199,88679,57090],{"class":1018},[199,88681,1028],{"class":205},[199,88683,88684,88687,88689,88691,88693],{"class":201,"line":1287},[199,88685,88686],{"class":1018},"      right",[199,88688,1022],{"class":205},[199,88690,3655],{"class":1018},[199,88692,1087],{"class":1086},[199,88694,1028],{"class":205},[199,88696,88697,88699,88701,88704,88706],{"class":201,"line":1292},[199,88698,57206],{"class":1018},[199,88700,1022],{"class":205},[199,88702,88703],{"class":1018},"-2",[199,88705,1087],{"class":1086},[199,88707,1028],{"class":205},[199,88709,88710,88712,88714,88716],{"class":201,"line":1297},[199,88711,64284],{"class":1018},[199,88713,1022],{"class":205},[199,88715,64289],{"class":1018},[199,88717,1028],{"class":205},[199,88719,88720],{"class":201,"line":1310},[199,88721,2097],{"class":205},[199,88723,88724],{"class":201,"line":1315},[199,88725,907],{"emptyLinePlaceholder":906},[199,88727,88728,88730,88733],{"class":201,"line":1330},[199,88729,88409],{"class":878},[199,88731,88732],{"class":878}," .body",[199,88734,1012],{"class":205},[199,88736,88737,88739,88741,88743],{"class":201,"line":1335},[199,88738,59545],{"class":1018},[199,88740,1022],{"class":205},[199,88742,1197],{"class":1018},[199,88744,1028],{"class":205},[199,88746,88747,88749,88751,88753,88755],{"class":201,"line":1340},[199,88748,56954],{"class":1018},[199,88750,1022],{"class":205},[199,88752,3528],{"class":1018},[199,88754,1087],{"class":1086},[199,88756,1028],{"class":205},[199,88758,88759],{"class":201,"line":1352},[199,88760,2097],{"class":205},[199,88762,88763],{"class":201,"line":1367},[199,88764,907],{"emptyLinePlaceholder":906},[199,88766,88767,88769,88772],{"class":201,"line":1381},[199,88768,88409],{"class":878},[199,88770,88771],{"class":878}," .footer",[199,88773,1012],{"class":205},[199,88775,88776,88778,88780,88782],{"class":201,"line":1396},[199,88777,57268],{"class":1018},[199,88779,1022],{"class":205},[199,88781,1070],{"class":1018},[199,88783,1028],{"class":205},[199,88785,88786,88788,88790,88792],{"class":201,"line":1401},[199,88787,57279],{"class":1018},[199,88789,1022],{"class":205},[199,88791,1184],{"class":1018},[199,88793,1028],{"class":205},[199,88795,88796,88798,88800,88802,88804],{"class":201,"line":1411},[199,88797,56954],{"class":1018},[199,88799,1022],{"class":205},[199,88801,3528],{"class":1018},[199,88803,1087],{"class":1086},[199,88805,1028],{"class":205},[199,88807,88808],{"class":201,"line":1421},[199,88809,2097],{"class":205},[199,88811,88812],{"class":201,"line":1426},[199,88813,907],{"emptyLinePlaceholder":906},[199,88815,88816,88818,88820,88822],{"class":201,"line":1436},[199,88817,88409],{"class":878},[199,88819,88771],{"class":878},[199,88821,4338],{"class":874},[199,88823,1012],{"class":205},[199,88825,88826,88828,88830,88832,88834,88836,88838],{"class":201,"line":1441},[199,88827,56954],{"class":1018},[199,88829,1022],{"class":205},[199,88831,1920],{"class":1018},[199,88833,1087],{"class":1086},[199,88835,4999],{"class":1018},[199,88837,1087],{"class":1086},[199,88839,1028],{"class":205},[199,88841,88842,88844,88846,88849],{"class":201,"line":1451},[199,88843,63980],{"class":1018},[199,88845,1022],{"class":205},[199,88847,88848],{"class":1018},"#ccc",[199,88850,1028],{"class":205},[199,88852,88853,88855,88857,88859],{"class":201,"line":1458},[199,88854,66229],{"class":1018},[199,88856,1022],{"class":205},[199,88858,56996],{"class":1018},[199,88860,1028],{"class":205},[199,88862,88863,88865,88867,88869],{"class":201,"line":1464},[199,88864,59675],{"class":1018},[199,88866,1022],{"class":205},[199,88868,63101],{"class":1018},[199,88870,1028],{"class":205},[199,88872,88873,88875,88877,88879,88881],{"class":201,"line":1478},[199,88874,57393],{"class":1018},[199,88876,1022],{"class":205},[199,88878,1925],{"class":1018},[199,88880,1087],{"class":1086},[199,88882,1028],{"class":205},[199,88884,88885,88887,88889,88891,88893],{"class":201,"line":1516},[199,88886,64009],{"class":1018},[199,88888,1022],{"class":205},[199,88890,3528],{"class":1018},[199,88892,1087],{"class":1086},[199,88894,1028],{"class":205},[199,88896,88897,88899,88901,88903,88905],{"class":201,"line":1522},[199,88898,57181],{"class":1018},[199,88900,1022],{"class":205},[199,88902,3629],{"class":1018},[199,88904,1087],{"class":1086},[199,88906,1028],{"class":205},[199,88908,88909],{"class":201,"line":1528},[199,88910,2097],{"class":205},[199,88912,88913],{"class":201,"line":1557},[199,88914,907],{"emptyLinePlaceholder":906},[199,88916,88917,88919,88921,88923,88926],{"class":201,"line":1563},[199,88918,88409],{"class":878},[199,88920,88771],{"class":878},[199,88922,4338],{"class":874},[199,88924,88925],{"class":878},".submit",[199,88927,1012],{"class":205},[199,88929,88930,88932,88934,88937],{"class":201,"line":1568},[199,88931,57143],{"class":1018},[199,88933,1022],{"class":205},[199,88935,88936],{"class":1018},"#369",[199,88938,1028],{"class":205},[199,88940,88941],{"class":201,"line":1574},[199,88942,2097],{"class":205},[199,88944,88945,88947,88949],{"class":201,"line":1580},[199,88946,2112],{"class":205},[199,88948,1002],{"class":874},[199,88950,882],{"class":205},[199,88952,88953,88955,88957],{"class":201,"line":1597},[199,88954,1414],{"class":205},[199,88956,914],{"class":874},[199,88958,882],{"class":205},[199,88960,88961],{"class":201,"line":1602},[199,88962,907],{"emptyLinePlaceholder":906},[199,88964,88965,88967,88969],{"class":201,"line":1608},[199,88966,887],{"class":205},[199,88968,1431],{"class":874},[199,88970,882],{"class":205},[199,88972,88973,88975,88977,88979,88981,88984,88987,88989],{"class":201,"line":1640},[199,88974,1824],{"class":205},[199,88976,56146],{"class":874},[199,88978,17818],{"class":878},[199,88980,895],{"class":205},[199,88982,88983],{"class":898},"\"delete\"",[199,88985,88986],{"class":205},">删除\u003C\u002F",[199,88988,56146],{"class":874},[199,88990,882],{"class":205},[199,88992,88993,88995,88997,88999,89001,89004,89007,89009],{"class":201,"line":1653},[199,88994,1824],{"class":205},[199,88996,56146],{"class":874},[199,88998,17818],{"class":878},[199,89000,895],{"class":205},[199,89002,89003],{"class":898},"\"login\"",[199,89005,89006],{"class":205},">登录\u003C\u002F",[199,89008,56146],{"class":874},[199,89010,882],{"class":205},[199,89012,89013,89015,89017],{"class":201,"line":1673},[199,89014,1824],{"class":205},[199,89016,1446],{"class":874},[199,89018,882],{"class":205},[199,89020,89021],{"class":201,"line":1690},[199,89022,89023],{"class":1454},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[199,89025,89026,89028,89031,89033,89035,89037,89039,89041,89044,89046,89048],{"class":201,"line":1706},[199,89027,72343],{"class":1086},[199,89029,89030],{"class":878}," Modal",[199,89032,1537],{"class":205},[199,89034,988],{"class":8113},[199,89036,16425],{"class":1086},[199,89038,72189],{"class":898},[199,89040,1912],{"class":205},[199,89042,89043],{"class":8113},"message",[199,89045,16425],{"class":1086},[199,89047,72189],{"class":898},[199,89049,1513],{"class":205},[199,89051,89052],{"class":201,"line":1712},[199,89053,89054],{"class":1454},"      \u002F\u002F 创建Model 模态框盒子\n",[199,89056,89057],{"class":201,"line":1720},[199,89058,89059],{"class":1454},"      \u002F\u002F 1.1 创建div标签\n",[199,89061,89062,89064,89067,89069,89071,89073,89075,89077],{"class":201,"line":1725},[199,89063,72310],{"class":1018},[199,89065,89066],{"class":205},".modalBox ",[199,89068,895],{"class":1086},[199,89070,56655],{"class":205},[199,89072,72410],{"class":878},[199,89074,1537],{"class":205},[199,89076,84190],{"class":898},[199,89078,1594],{"class":205},[199,89080,89081],{"class":201,"line":1731},[199,89082,89083],{"class":1454},"      \u002F\u002F 1.2 给div 添加类名为model\n",[199,89085,89086,89088,89091,89093],{"class":201,"line":1745},[199,89087,72310],{"class":1018},[199,89089,89090],{"class":205},".modalBox.className ",[199,89092,895],{"class":1086},[199,89094,89095],{"class":898}," 'modal'\n",[199,89097,89098],{"class":201,"line":1754},[199,89099,89100],{"class":1454},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[199,89102,89103,89105,89108,89110],{"class":201,"line":1763},[199,89104,72310],{"class":1018},[199,89106,89107],{"class":205},".modalBox.innerHTML ",[199,89109,895],{"class":1086},[199,89111,72427],{"class":898},[199,89113,89114,89117,89119],{"class":201,"line":1768},[199,89115,89116],{"class":898},"        \u003Cdiv class=\"header\">${",[199,89118,988],{"class":205},[199,89120,89121],{"class":898},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[199,89123,89124,89127,89129],{"class":201,"line":19628},[199,89125,89126],{"class":898},"        \u003Cdiv class=\"body\">${",[199,89128,89043],{"class":205},[199,89130,89131],{"class":898},"}\u003C\u002Fdiv>\n",[199,89133,89134],{"class":201,"line":19641},[199,89135,89136],{"class":898},"      `\n",[199,89138,89139],{"class":201,"line":19646},[199,89140,89141],{"class":1454},"      \u002F\u002F console.log(this.modalBox)\n",[199,89143,89144],{"class":201,"line":19660},[199,89145,2097],{"class":205},[199,89147,89148],{"class":201,"line":19665},[199,89149,89150],{"class":1454},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[199,89152,89153],{"class":201,"line":19671},[199,89154,89155],{"class":1454},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[199,89157,89158],{"class":201,"line":19676},[199,89159,89160],{"class":1454},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[199,89162,89163,89166,89168,89170,89172,89175,89177,89179],{"class":201,"line":19690},[199,89164,89165],{"class":1018},"    Modal",[199,89167,3638],{"class":205},[199,89169,87838],{"class":1018},[199,89171,3638],{"class":205},[199,89173,89174],{"class":878},"open",[199,89176,16425],{"class":1086},[199,89178,61177],{"class":1086},[199,89180,56711],{"class":205},[199,89182,89183],{"class":201,"line":19695},[199,89184,89185],{"class":1454},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[199,89187,89188,89190,89193,89195,89197,89199,89201,89204],{"class":201,"line":19700},[199,89189,60487],{"class":1086},[199,89191,89192],{"class":1018}," box",[199,89194,16425],{"class":1086},[199,89196,56655],{"class":205},[199,89198,56658],{"class":878},[199,89200,1537],{"class":205},[199,89202,89203],{"class":898},"'.modal'",[199,89205,1594],{"class":205},[199,89207,89208],{"class":201,"line":19714},[199,89209,89210],{"class":1454},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[199,89212,89213,89216,89218,89221,89223],{"class":201,"line":19726},[199,89214,89215],{"class":205},"      box ",[199,89217,4640],{"class":1086},[199,89219,89220],{"class":205}," box.",[199,89222,59265],{"class":878},[199,89224,4892],{"class":205},[199,89226,89227],{"class":201,"line":19731},[199,89228,89229],{"class":1454},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[199,89231,89232],{"class":201,"line":19744},[199,89233,89234],{"class":1454},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[199,89236,89237],{"class":201,"line":19749},[199,89238,89239],{"class":1454},"      \u002F\u002F append可以增加对象\n",[199,89241,89242,89245,89248,89250,89253],{"class":201,"line":19754},[199,89243,89244],{"class":205},"      document.body.",[199,89246,89247],{"class":878},"append",[199,89249,1537],{"class":205},[199,89251,89252],{"class":1018},"this",[199,89254,89255],{"class":205},".modalBox)\n",[199,89257,89258],{"class":201,"line":19759},[199,89259,907],{"emptyLinePlaceholder":906},[199,89261,89262],{"class":201,"line":19772},[199,89263,89264],{"class":1454},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[199,89266,89267,89269,89272,89274,89276,89279,89281,89283,89285,89287,89290,89292],{"class":201,"line":19777},[199,89268,72310],{"class":1018},[199,89270,89271],{"class":205},".modalBox.",[199,89273,56658],{"class":878},[199,89275,1537],{"class":205},[199,89277,89278],{"class":898},"'i'",[199,89280,33668],{"class":205},[199,89282,60072],{"class":878},[199,89284,1537],{"class":205},[199,89286,60077],{"class":898},[199,89288,89289],{"class":205},", () ",[199,89291,86981],{"class":1086},[199,89293,1012],{"class":205},[199,89295,89296],{"class":201,"line":35475},[199,89297,89298],{"class":1454},"        \u002F\u002F 这个地方需要用到箭头函数\n",[199,89300,89301],{"class":201,"line":35481},[199,89302,89303],{"class":1454},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[199,89305,89306],{"class":201,"line":35487},[199,89307,89308],{"class":1454},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[199,89310,89311,89313,89315,89318],{"class":201,"line":35493},[199,89312,66985],{"class":1018},[199,89314,3638],{"class":205},[199,89316,89317],{"class":878},"close",[199,89319,4892],{"class":205},[199,89321,89322],{"class":201,"line":35499},[199,89323,67074],{"class":205},[199,89325,89326],{"class":201,"line":35510},[199,89327,2097],{"class":205},[199,89329,89330],{"class":201,"line":35516},[199,89331,907],{"emptyLinePlaceholder":906},[199,89333,89334],{"class":201,"line":35536},[199,89335,89336],{"class":1454},"    \u002F\u002F 测试一下 点击 删除按钮\n",[199,89338,89339,89341,89343,89345,89348,89350,89352,89354,89356,89358,89360],{"class":201,"line":35542},[199,89340,2102],{"class":205},[199,89342,56658],{"class":878},[199,89344,1537],{"class":205},[199,89346,89347],{"class":898},"'#delete'",[199,89349,33668],{"class":205},[199,89351,60072],{"class":878},[199,89353,1537],{"class":205},[199,89355,60077],{"class":898},[199,89357,89289],{"class":205},[199,89359,86981],{"class":1086},[199,89361,1012],{"class":205},[199,89363,89364],{"class":201,"line":35553},[199,89365,89366],{"class":1454},"      \u002F\u002F 先调用Model构造函数\n",[199,89368,89369,89371,89374,89376,89378,89380,89382,89385,89387,89390],{"class":201,"line":35559},[199,89370,60487],{"class":1086},[199,89372,89373],{"class":1018}," del",[199,89375,16425],{"class":1086},[199,89377,14441],{"class":1086},[199,89379,89030],{"class":878},[199,89381,1537],{"class":205},[199,89383,89384],{"class":898},"'温馨的提示'",[199,89386,1912],{"class":205},[199,89388,89389],{"class":898},"'您没有删除权限操作'",[199,89391,1594],{"class":205},[199,89393,89394],{"class":201,"line":35565},[199,89395,89396],{"class":1454},"      \u002F\u002F 实例对象调用open方法\n",[199,89398,89399,89402,89404],{"class":201,"line":35571},[199,89400,89401],{"class":205},"      del.",[199,89403,89174],{"class":878},[199,89405,4892],{"class":205},[199,89407,89408],{"class":201,"line":35577},[199,89409,36302],{"class":205},[199,89411,89412],{"class":201,"line":35583},[199,89413,89414],{"class":1454},"    \u002F\u002F 测试一下 点击 登录按钮\n",[199,89416,89417,89419,89421,89423,89426,89428,89430,89432,89434,89436,89438],{"class":201,"line":35589},[199,89418,2102],{"class":205},[199,89420,56658],{"class":878},[199,89422,1537],{"class":205},[199,89424,89425],{"class":898},"'#login'",[199,89427,33668],{"class":205},[199,89429,60072],{"class":878},[199,89431,1537],{"class":205},[199,89433,60077],{"class":898},[199,89435,89289],{"class":205},[199,89437,86981],{"class":1086},[199,89439,1012],{"class":205},[199,89441,89442],{"class":201,"line":35595},[199,89443,89366],{"class":1454},[199,89445,89446,89448,89451,89453,89455,89457,89459,89462,89464,89467],{"class":201,"line":35615},[199,89447,60487],{"class":1086},[199,89449,89450],{"class":1018}," log",[199,89452,16425],{"class":1086},[199,89454,14441],{"class":1086},[199,89456,89030],{"class":878},[199,89458,1537],{"class":205},[199,89460,89461],{"class":898},"'友情提示'",[199,89463,1912],{"class":205},[199,89465,89466],{"class":898},"'您还没有登录呢'",[199,89468,1594],{"class":205},[199,89470,89471],{"class":201,"line":35621},[199,89472,89396],{"class":1454},[199,89474,89475,89478,89480],{"class":201,"line":35637},[199,89476,89477],{"class":205},"      log.",[199,89479,89174],{"class":878},[199,89481,4892],{"class":205},[199,89483,89484],{"class":201,"line":35643},[199,89485,36302],{"class":205},[199,89487,89488],{"class":201,"line":35657},[199,89489,89490],{"class":1454},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[199,89492,89493,89495,89497,89499,89501,89503,89505,89507],{"class":201,"line":35663},[199,89494,89165],{"class":1018},[199,89496,3638],{"class":205},[199,89498,87838],{"class":1018},[199,89500,3638],{"class":205},[199,89502,89317],{"class":878},[199,89504,16425],{"class":1086},[199,89506,61177],{"class":1086},[199,89508,56711],{"class":205},[199,89510,89511,89513,89515,89517],{"class":201,"line":35678},[199,89512,72310],{"class":1018},[199,89514,89271],{"class":205},[199,89516,59265],{"class":878},[199,89518,4892],{"class":205},[199,89520,89521],{"class":201,"line":35684},[199,89522,2097],{"class":205},[199,89524,89525,89527,89529],{"class":201,"line":35693},[199,89526,2112],{"class":205},[199,89528,1446],{"class":874},[199,89530,882],{"class":205},[199,89532,89533,89535,89537],{"class":201,"line":35699},[199,89534,1414],{"class":205},[199,89536,1431],{"class":874},[199,89538,882],{"class":205},[199,89540,89541],{"class":201,"line":35708},[199,89542,907],{"emptyLinePlaceholder":906},[199,89544,89545,89547,89549],{"class":201,"line":35714},[199,89546,1414],{"class":205},[199,89548,194],{"class":874},[199,89550,882],{"class":205},[31,89552,89553],{},[55,89554],{"alt":57,"src":89555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89557,89559],{"id":89558},"_414-深浅拷贝","4.14 深浅拷贝",[19,89561,89563],{"id":89562},"_4141-浅拷贝","4.14.1 浅拷贝",[31,89565,89566],{},[55,89567],{"alt":57,"src":89568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[31,89570,89571],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[31,89573,89574],{},[55,89575],{"alt":57,"src":89576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[31,89578,89579],{},[55,89580],{"alt":57,"src":89581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[31,89583,89584],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[31,89586,89587],{},[55,89588],{"alt":57,"src":89589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[31,89591,14195],{},[31,89593,89594],{},[55,89595],{"alt":57,"src":89596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[19,89598,89600],{"id":89599},"_4142-深拷贝","4.14.2 深拷贝",[31,89602,89603],{},"深拷贝：拷贝的是对象，不是地址",[31,89605,89606],{},"常用的三种方法：",[24,89608,89609,89612,89615],{},[27,89610,89611],{},"通过递归实现深拷贝",[27,89613,89614],{},"lodash\u002FcloneDeep",[27,89616,89617],{},"通过JSON.stringify()实现",[627,89619,89621],{"id":89620},"_41421-递归函数","4.14.2.1 递归函数",[31,89623,89624],{},[55,89625],{"alt":57,"src":89626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[24,89628,89629],{},[27,89630,89631],{},"死递归占溢出：",[190,89633,89635],{"className":2763,"code":89634,"language":2765,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[196,89636,89637,89645,89653,89657,89662,89666,89671,89679],{"__ignoreMap":57},[199,89638,89639,89641,89643],{"class":201,"line":202},[199,89640,887],{"class":205},[199,89642,1431],{"class":874},[199,89644,882],{"class":205},[199,89646,89647,89649,89651],{"class":201,"line":36},[199,89648,1824],{"class":205},[199,89650,1446],{"class":874},[199,89652,882],{"class":205},[199,89654,89655],{"class":201,"line":73},[199,89656,79402],{"class":205},[199,89658,89659],{"class":201,"line":333},[199,89660,89661],{"class":205},"      fn()\n",[199,89663,89664],{"class":201,"line":227},[199,89665,2097],{"class":205},[199,89667,89668],{"class":201,"line":238},[199,89669,89670],{"class":205},"    fn()\n",[199,89672,89673,89675,89677],{"class":201,"line":252},[199,89674,2112],{"class":205},[199,89676,1446],{"class":874},[199,89678,882],{"class":205},[199,89680,89681,89683,89685],{"class":201,"line":388},[199,89682,1414],{"class":205},[199,89684,1431],{"class":874},[199,89686,882],{"class":205},[24,89688,89689],{"start":36},[27,89690,89691],{},"递归函数要加判断条件：",[31,89693,89694],{},[55,89695],{"alt":57,"src":89696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[24,89698,89699],{"start":73},[27,89700,89701],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[190,89703,89705],{"className":192,"code":89704,"language":194,"meta":57,"style":57},"\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",[196,89706,89707,89717,89731,89735,89743,89757,89777,89789,89797,89801,89809,89821,89829,89837,89862,89874,89878,89885,89893,89901,89905],{"__ignoreMap":57},[199,89708,89709,89711,89713,89715],{"class":201,"line":202},[199,89710,871],{"class":205},[199,89712,875],{"class":874},[199,89714,879],{"class":878},[199,89716,882],{"class":205},[199,89718,89719,89721,89723,89725,89727,89729],{"class":201,"line":36},[199,89720,887],{"class":205},[199,89722,194],{"class":874},[199,89724,892],{"class":878},[199,89726,895],{"class":205},[199,89728,899],{"class":898},[199,89730,882],{"class":205},[199,89732,89733],{"class":201,"line":73},[199,89734,907],{"emptyLinePlaceholder":906},[199,89736,89737,89739,89741],{"class":201,"line":333},[199,89738,887],{"class":205},[199,89740,914],{"class":874},[199,89742,882],{"class":205},[199,89744,89745,89747,89749,89751,89753,89755],{"class":201,"line":227},[199,89746,1824],{"class":205},[199,89748,924],{"class":874},[199,89750,927],{"class":878},[199,89752,895],{"class":205},[199,89754,932],{"class":898},[199,89756,882],{"class":205},[199,89758,89759,89761,89763,89765,89767,89769,89771,89773,89775],{"class":201,"line":238},[199,89760,1824],{"class":205},[199,89762,924],{"class":874},[199,89764,967],{"class":878},[199,89766,895],{"class":205},[199,89768,972],{"class":898},[199,89770,951],{"class":878},[199,89772,895],{"class":205},[199,89774,979],{"class":898},[199,89776,882],{"class":205},[199,89778,89779,89781,89783,89785,89787],{"class":201,"line":252},[199,89780,1824],{"class":205},[199,89782,988],{"class":874},[199,89784,991],{"class":205},[199,89786,988],{"class":874},[199,89788,882],{"class":205},[199,89790,89791,89793,89795],{"class":201,"line":388},[199,89792,1414],{"class":205},[199,89794,914],{"class":874},[199,89796,882],{"class":205},[199,89798,89799],{"class":201,"line":415},[199,89800,907],{"emptyLinePlaceholder":906},[199,89802,89803,89805,89807],{"class":201,"line":426},[199,89804,887],{"class":205},[199,89806,1431],{"class":874},[199,89808,882],{"class":205},[199,89810,89811,89813,89815,89817,89819],{"class":201,"line":1015},[199,89812,1824],{"class":205},[199,89814,1220],{"class":874},[199,89816,57573],{"class":205},[199,89818,1220],{"class":874},[199,89820,882],{"class":205},[199,89822,89823,89825,89827],{"class":201,"line":1031},[199,89824,1824],{"class":205},[199,89826,1446],{"class":874},[199,89828,882],{"class":205},[199,89830,89831,89833,89835],{"class":201,"line":1043},[199,89832,72343],{"class":1086},[199,89834,76032],{"class":878},[199,89836,13716],{"class":205},[199,89838,89839,89841,89843,89845,89847,89849,89851,89853,89855,89857,89860],{"class":201,"line":1049},[199,89840,58030],{"class":205},[199,89842,56658],{"class":878},[199,89844,1537],{"class":205},[199,89846,84190],{"class":898},[199,89848,76508],{"class":205},[199,89850,895],{"class":1086},[199,89852,14441],{"class":1086},[199,89854,76048],{"class":878},[199,89856,20106],{"class":205},[199,89858,89859],{"class":878},"toLocaleString",[199,89861,4892],{"class":205},[199,89863,89864,89867,89870,89872],{"class":201,"line":1054},[199,89865,89866],{"class":878},"      setTimeout",[199,89868,89869],{"class":205},"(getTime, ",[199,89871,9307],{"class":1018},[199,89873,1594],{"class":205},[199,89875,89876],{"class":201,"line":1062},[199,89877,2097],{"class":205},[199,89879,89880,89883],{"class":201,"line":1075},[199,89881,89882],{"class":878},"    getTime",[199,89884,4892],{"class":205},[199,89886,89887,89889,89891],{"class":201,"line":1092},[199,89888,2112],{"class":205},[199,89890,1446],{"class":874},[199,89892,882],{"class":205},[199,89894,89895,89897,89899],{"class":201,"line":1107},[199,89896,1414],{"class":205},[199,89898,1431],{"class":874},[199,89900,882],{"class":205},[199,89902,89903],{"class":201,"line":1128},[199,89904,907],{"emptyLinePlaceholder":906},[199,89906,89907,89909,89911],{"class":201,"line":1146},[199,89908,1414],{"class":205},[199,89910,194],{"class":874},[199,89912,882],{"class":205},[31,89914,89915],{},[55,89916],{"alt":57,"src":89917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[24,89919,89920],{"start":333},[27,89921,89611],{},[31,89923,89924],{},[55,89925],{"alt":57,"src":89926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[31,89928,89929],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[31,89931,42030],{},[31,89933,89934],{},"这个是简易版的递归函数深拷贝",[31,89936,89937],{},"一定要注意先数组再对象，因为万物皆可对象",[190,89939,89941],{"className":192,"code":89940,"language":194,"meta":57,"style":57},"\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",[196,89942,89943,89953,89967,89971,89979,89993,90013,90025,90033,90037,90045,90053,90063,90072,90080,90096,90100,90108,90112,90116,90128,90133,90152,90168,90173,90178,90183,90198,90203,90208,90217,90225,90242,90250,90256,90264,90269,90274,90283,90287,90291,90295,90306,90315,90325,90339,90349,90357,90365,90373,90377],{"__ignoreMap":57},[199,89944,89945,89947,89949,89951],{"class":201,"line":202},[199,89946,871],{"class":205},[199,89948,875],{"class":874},[199,89950,879],{"class":878},[199,89952,882],{"class":205},[199,89954,89955,89957,89959,89961,89963,89965],{"class":201,"line":36},[199,89956,887],{"class":205},[199,89958,194],{"class":874},[199,89960,892],{"class":878},[199,89962,895],{"class":205},[199,89964,899],{"class":898},[199,89966,882],{"class":205},[199,89968,89969],{"class":201,"line":73},[199,89970,907],{"emptyLinePlaceholder":906},[199,89972,89973,89975,89977],{"class":201,"line":333},[199,89974,887],{"class":205},[199,89976,914],{"class":874},[199,89978,882],{"class":205},[199,89980,89981,89983,89985,89987,89989,89991],{"class":201,"line":227},[199,89982,1824],{"class":205},[199,89984,924],{"class":874},[199,89986,927],{"class":878},[199,89988,895],{"class":205},[199,89990,932],{"class":898},[199,89992,882],{"class":205},[199,89994,89995,89997,89999,90001,90003,90005,90007,90009,90011],{"class":201,"line":238},[199,89996,1824],{"class":205},[199,89998,924],{"class":874},[199,90000,967],{"class":878},[199,90002,895],{"class":205},[199,90004,972],{"class":898},[199,90006,951],{"class":878},[199,90008,895],{"class":205},[199,90010,979],{"class":898},[199,90012,882],{"class":205},[199,90014,90015,90017,90019,90021,90023],{"class":201,"line":252},[199,90016,1824],{"class":205},[199,90018,988],{"class":874},[199,90020,991],{"class":205},[199,90022,988],{"class":874},[199,90024,882],{"class":205},[199,90026,90027,90029,90031],{"class":201,"line":388},[199,90028,1414],{"class":205},[199,90030,914],{"class":874},[199,90032,882],{"class":205},[199,90034,90035],{"class":201,"line":415},[199,90036,907],{"emptyLinePlaceholder":906},[199,90038,90039,90041,90043],{"class":201,"line":426},[199,90040,887],{"class":205},[199,90042,1431],{"class":874},[199,90044,882],{"class":205},[199,90046,90047,90049,90051],{"class":201,"line":1015},[199,90048,1824],{"class":205},[199,90050,1446],{"class":874},[199,90052,882],{"class":205},[199,90054,90055,90057,90059,90061],{"class":201,"line":1031},[199,90056,14084],{"class":1086},[199,90058,72230],{"class":1018},[199,90060,16425],{"class":1086},[199,90062,1012],{"class":205},[199,90064,90065,90067,90070],{"class":201,"line":1043},[199,90066,73875],{"class":205},[199,90068,90069],{"class":898},"'pink'",[199,90071,34308],{"class":205},[199,90073,90074,90076,90078],{"class":201,"line":1049},[199,90075,73885],{"class":205},[199,90077,3730],{"class":1018},[199,90079,34308],{"class":205},[199,90081,90082,90085,90088,90090,90093],{"class":201,"line":1054},[199,90083,90084],{"class":205},"      hobby: [",[199,90086,90087],{"class":898},"'乒乓球'",[199,90089,1912],{"class":205},[199,90091,90092],{"class":898},"'足球'",[199,90094,90095],{"class":205},"],\n",[199,90097,90098],{"class":201,"line":1062},[199,90099,80131],{"class":205},[199,90101,90102,90105],{"class":201,"line":1075},[199,90103,90104],{"class":205},"        baby: ",[199,90106,90107],{"class":898},"'小pink'\n",[199,90109,90110],{"class":201,"line":1092},[199,90111,2092],{"class":205},[199,90113,90114],{"class":201,"line":1107},[199,90115,2097],{"class":205},[199,90117,90118,90120,90123,90125],{"class":201,"line":1128},[199,90119,14084],{"class":1086},[199,90121,90122],{"class":1018}," o",[199,90124,16425],{"class":1086},[199,90126,90127],{"class":205}," {}\n",[199,90129,90130],{"class":201,"line":1146},[199,90131,90132],{"class":1454},"    \u002F\u002F 拷贝函数\n",[199,90134,90135,90137,90140,90142,90145,90147,90150],{"class":201,"line":1163},[199,90136,72343],{"class":1086},[199,90138,90139],{"class":878}," deepCopy",[199,90141,1537],{"class":205},[199,90143,90144],{"class":8113},"newObj",[199,90146,1912],{"class":205},[199,90148,90149],{"class":8113},"oldObj",[199,90151,1513],{"class":205},[199,90153,90154,90156,90158,90160,90163,90165],{"class":201,"line":1176},[199,90155,1971],{"class":1086},[199,90157,1484],{"class":205},[199,90159,1487],{"class":1086},[199,90161,90162],{"class":205}," k ",[199,90164,28886],{"class":1086},[199,90166,90167],{"class":205}," oldObj) {\n",[199,90169,90170],{"class":201,"line":1189},[199,90171,90172],{"class":1454},"        \u002F\u002F 处理数组的问题\n",[199,90174,90175],{"class":201,"line":1202},[199,90176,90177],{"class":1454},"        \u002F\u002F 判断是否属于数组\n",[199,90179,90180],{"class":201,"line":1207},[199,90181,90182],{"class":1454},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[199,90184,90185,90187,90190,90193,90196],{"class":201,"line":1212},[199,90186,2017],{"class":1086},[199,90188,90189],{"class":205}," (oldObj[k] ",[199,90191,90192],{"class":1086},"instanceof",[199,90194,90195],{"class":878}," Array",[199,90197,1513],{"class":205},[199,90199,90200],{"class":201,"line":1225},[199,90201,90202],{"class":1454},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[199,90204,90205],{"class":201,"line":1236},[199,90206,90207],{"class":1454},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[199,90209,90210,90213,90215],{"class":201,"line":1249},[199,90211,90212],{"class":205},"          newObj[k] ",[199,90214,895],{"class":1086},[199,90216,1475],{"class":205},[199,90218,90219,90222],{"class":201,"line":1262},[199,90220,90221],{"class":878},"          deepCopy",[199,90223,90224],{"class":205},"(newObj[k], oldObj[k])\n",[199,90226,90227,90229,90231,90233,90235,90237,90240],{"class":201,"line":1275},[199,90228,82339],{"class":205},[199,90230,4626],{"class":1086},[199,90232,4629],{"class":1086},[199,90234,90189],{"class":205},[199,90236,90192],{"class":1086},[199,90238,90239],{"class":878}," Object",[199,90241,1513],{"class":205},[199,90243,90244,90246,90248],{"class":201,"line":1287},[199,90245,90212],{"class":205},[199,90247,895],{"class":1086},[199,90249,90127],{"class":205},[199,90251,90252,90254],{"class":201,"line":1292},[199,90253,90221],{"class":878},[199,90255,90224],{"class":205},[199,90257,90258,90260,90262],{"class":201,"line":1297},[199,90259,82339],{"class":205},[199,90261,4626],{"class":1086},[199,90263,1012],{"class":205},[199,90265,90266],{"class":201,"line":1310},[199,90267,90268],{"class":1454},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[199,90270,90271],{"class":201,"line":1315},[199,90272,90273],{"class":1454},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[199,90275,90276,90278,90280],{"class":201,"line":1330},[199,90277,90212],{"class":205},[199,90279,895],{"class":1086},[199,90281,90282],{"class":205}," oldObj[k]\n",[199,90284,90285],{"class":201,"line":1335},[199,90286,1046],{"class":205},[199,90288,90289],{"class":201,"line":1340},[199,90290,2092],{"class":205},[199,90292,90293],{"class":201,"line":1352},[199,90294,2097],{"class":205},[199,90296,90297,90300,90303],{"class":201,"line":1367},[199,90298,90299],{"class":878},"    deepCopy",[199,90301,90302],{"class":205},"(o, obj) ",[199,90304,90305],{"class":1454},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[199,90307,90308,90310,90312],{"class":201,"line":1381},[199,90309,76012],{"class":205},[199,90311,60506],{"class":878},[199,90313,90314],{"class":205},"(o)\n",[199,90316,90317,90320,90322],{"class":201,"line":1396},[199,90318,90319],{"class":205},"    o.age ",[199,90321,895],{"class":1086},[199,90323,90324],{"class":1018}," 20\n",[199,90326,90327,90330,90332,90334,90336],{"class":201,"line":1401},[199,90328,90329],{"class":205},"    o.hobby[",[199,90331,1025],{"class":1018},[199,90333,2078],{"class":205},[199,90335,895],{"class":1086},[199,90337,90338],{"class":898}," '篮球'\n",[199,90340,90341,90344,90346],{"class":201,"line":1411},[199,90342,90343],{"class":205},"    o.family ",[199,90345,895],{"class":1086},[199,90347,90348],{"class":898}," '老pink'\n",[199,90350,90351,90353,90355],{"class":201,"line":1421},[199,90352,76012],{"class":205},[199,90354,60506],{"class":878},[199,90356,72295],{"class":205},[199,90358,90359,90361,90363],{"class":201,"line":1426},[199,90360,2112],{"class":205},[199,90362,1446],{"class":874},[199,90364,882],{"class":205},[199,90366,90367,90369,90371],{"class":201,"line":1436},[199,90368,1414],{"class":205},[199,90370,1431],{"class":874},[199,90372,882],{"class":205},[199,90374,90375],{"class":201,"line":1441},[199,90376,907],{"emptyLinePlaceholder":906},[199,90378,90379,90381,90383],{"class":201,"line":1451},[199,90380,1414],{"class":205},[199,90382,194],{"class":874},[199,90384,882],{"class":205},[31,90386,90387],{},[55,90388],{"alt":57,"src":90389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[627,90391,90393,90394],{"id":90392},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[49,90395,90396],{},"js库lodash里面cloneDeep内部实现了深拷贝",[31,90398,90399],{},[2867,90400,90401],{"href":90401,"rel":90402},"https:\u002F\u002Fwww.lodashjs.com\u002F",[2871],[31,90404,90405],{},"lodash里边的方法都要加上一个下划线_",[31,90407,90408],{},"_.cloneDeep()",[190,90410,90412],{"className":192,"code":90411,"language":194,"meta":57,"style":57},"\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",[196,90413,90414,90424,90438,90442,90450,90464,90484,90496,90504,90508,90516,90521,90540,90548,90558,90566,90574,90586,90590,90596,90600,90604,90620,90628,90637,90645,90653,90661,90665],{"__ignoreMap":57},[199,90415,90416,90418,90420,90422],{"class":201,"line":202},[199,90417,871],{"class":205},[199,90419,875],{"class":874},[199,90421,879],{"class":878},[199,90423,882],{"class":205},[199,90425,90426,90428,90430,90432,90434,90436],{"class":201,"line":36},[199,90427,887],{"class":205},[199,90429,194],{"class":874},[199,90431,892],{"class":878},[199,90433,895],{"class":205},[199,90435,899],{"class":898},[199,90437,882],{"class":205},[199,90439,90440],{"class":201,"line":73},[199,90441,907],{"emptyLinePlaceholder":906},[199,90443,90444,90446,90448],{"class":201,"line":333},[199,90445,887],{"class":205},[199,90447,914],{"class":874},[199,90449,882],{"class":205},[199,90451,90452,90454,90456,90458,90460,90462],{"class":201,"line":227},[199,90453,1824],{"class":205},[199,90455,924],{"class":874},[199,90457,927],{"class":878},[199,90459,895],{"class":205},[199,90461,932],{"class":898},[199,90463,882],{"class":205},[199,90465,90466,90468,90470,90472,90474,90476,90478,90480,90482],{"class":201,"line":238},[199,90467,1824],{"class":205},[199,90469,924],{"class":874},[199,90471,967],{"class":878},[199,90473,895],{"class":205},[199,90475,972],{"class":898},[199,90477,951],{"class":878},[199,90479,895],{"class":205},[199,90481,979],{"class":898},[199,90483,882],{"class":205},[199,90485,90486,90488,90490,90492,90494],{"class":201,"line":252},[199,90487,1824],{"class":205},[199,90489,988],{"class":874},[199,90491,991],{"class":205},[199,90493,988],{"class":874},[199,90495,882],{"class":205},[199,90497,90498,90500,90502],{"class":201,"line":388},[199,90499,1414],{"class":205},[199,90501,914],{"class":874},[199,90503,882],{"class":205},[199,90505,90506],{"class":201,"line":415},[199,90507,907],{"emptyLinePlaceholder":906},[199,90509,90510,90512,90514],{"class":201,"line":426},[199,90511,887],{"class":205},[199,90513,1431],{"class":874},[199,90515,882],{"class":205},[199,90517,90518],{"class":201,"line":1015},[199,90519,90520],{"class":1454},"  \u003C!-- 先引用这个库 -->\n",[199,90522,90523,90525,90527,90529,90531,90534,90536,90538],{"class":201,"line":1031},[199,90524,1824],{"class":205},[199,90526,1446],{"class":874},[199,90528,57498],{"class":878},[199,90530,895],{"class":205},[199,90532,90533],{"class":898},"\"lodash.min.js\"",[199,90535,57573],{"class":205},[199,90537,1446],{"class":874},[199,90539,882],{"class":205},[199,90541,90542,90544,90546],{"class":201,"line":1043},[199,90543,1824],{"class":205},[199,90545,1446],{"class":874},[199,90547,882],{"class":205},[199,90549,90550,90552,90554,90556],{"class":201,"line":1049},[199,90551,14084],{"class":1086},[199,90553,72230],{"class":1018},[199,90555,16425],{"class":1086},[199,90557,1012],{"class":205},[199,90559,90560,90562,90564],{"class":201,"line":1054},[199,90561,73875],{"class":205},[199,90563,90069],{"class":898},[199,90565,34308],{"class":205},[199,90567,90568,90570,90572],{"class":201,"line":1062},[199,90569,73885],{"class":205},[199,90571,3730],{"class":1018},[199,90573,34308],{"class":205},[199,90575,90576,90578,90580,90582,90584],{"class":201,"line":1075},[199,90577,90084],{"class":205},[199,90579,90087],{"class":898},[199,90581,1912],{"class":205},[199,90583,90092],{"class":898},[199,90585,90095],{"class":205},[199,90587,90588],{"class":201,"line":1092},[199,90589,80131],{"class":205},[199,90591,90592,90594],{"class":201,"line":1107},[199,90593,90104],{"class":205},[199,90595,90107],{"class":898},[199,90597,90598],{"class":201,"line":1128},[199,90599,2092],{"class":205},[199,90601,90602],{"class":201,"line":1146},[199,90603,2097],{"class":205},[199,90605,90606,90608,90610,90612,90615,90618],{"class":201,"line":1163},[199,90607,14084],{"class":1086},[199,90609,90122],{"class":1018},[199,90611,16425],{"class":1086},[199,90613,90614],{"class":205}," _.",[199,90616,90617],{"class":878},"cloneDeep",[199,90619,72295],{"class":205},[199,90621,90622,90624,90626],{"class":201,"line":1176},[199,90623,76012],{"class":205},[199,90625,60506],{"class":878},[199,90627,90314],{"class":205},[199,90629,90630,90633,90635],{"class":201,"line":1189},[199,90631,90632],{"class":205},"    o.family.baby ",[199,90634,895],{"class":1086},[199,90636,90348],{"class":898},[199,90638,90639,90641,90643],{"class":201,"line":1202},[199,90640,76012],{"class":205},[199,90642,60506],{"class":878},[199,90644,72295],{"class":205},[199,90646,90647,90649,90651],{"class":201,"line":1207},[199,90648,2112],{"class":205},[199,90650,1446],{"class":874},[199,90652,882],{"class":205},[199,90654,90655,90657,90659],{"class":201,"line":1212},[199,90656,1414],{"class":205},[199,90658,1431],{"class":874},[199,90660,882],{"class":205},[199,90662,90663],{"class":201,"line":1225},[199,90664,907],{"emptyLinePlaceholder":906},[199,90666,90667,90669,90671],{"class":201,"line":1236},[199,90668,1414],{"class":205},[199,90670,194],{"class":874},[199,90672,882],{"class":205},[31,90674,90675],{},[55,90676],{"alt":57,"src":90677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[627,90679,90681],{"id":90680},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[190,90683,90685],{"className":192,"code":90684,"language":194,"meta":57,"style":57},"\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",[196,90686,90687,90697,90711,90715,90723,90737,90757,90769,90777,90781,90789,90797,90807,90815,90823,90835,90839,90845,90849,90853,90858,90863,90868,90894,90902,90911,90919,90927,90935,90939],{"__ignoreMap":57},[199,90688,90689,90691,90693,90695],{"class":201,"line":202},[199,90690,871],{"class":205},[199,90692,875],{"class":874},[199,90694,879],{"class":878},[199,90696,882],{"class":205},[199,90698,90699,90701,90703,90705,90707,90709],{"class":201,"line":36},[199,90700,887],{"class":205},[199,90702,194],{"class":874},[199,90704,892],{"class":878},[199,90706,895],{"class":205},[199,90708,899],{"class":898},[199,90710,882],{"class":205},[199,90712,90713],{"class":201,"line":73},[199,90714,907],{"emptyLinePlaceholder":906},[199,90716,90717,90719,90721],{"class":201,"line":333},[199,90718,887],{"class":205},[199,90720,914],{"class":874},[199,90722,882],{"class":205},[199,90724,90725,90727,90729,90731,90733,90735],{"class":201,"line":227},[199,90726,1824],{"class":205},[199,90728,924],{"class":874},[199,90730,927],{"class":878},[199,90732,895],{"class":205},[199,90734,932],{"class":898},[199,90736,882],{"class":205},[199,90738,90739,90741,90743,90745,90747,90749,90751,90753,90755],{"class":201,"line":238},[199,90740,1824],{"class":205},[199,90742,924],{"class":874},[199,90744,967],{"class":878},[199,90746,895],{"class":205},[199,90748,972],{"class":898},[199,90750,951],{"class":878},[199,90752,895],{"class":205},[199,90754,979],{"class":898},[199,90756,882],{"class":205},[199,90758,90759,90761,90763,90765,90767],{"class":201,"line":252},[199,90760,1824],{"class":205},[199,90762,988],{"class":874},[199,90764,991],{"class":205},[199,90766,988],{"class":874},[199,90768,882],{"class":205},[199,90770,90771,90773,90775],{"class":201,"line":388},[199,90772,1414],{"class":205},[199,90774,914],{"class":874},[199,90776,882],{"class":205},[199,90778,90779],{"class":201,"line":415},[199,90780,907],{"emptyLinePlaceholder":906},[199,90782,90783,90785,90787],{"class":201,"line":426},[199,90784,887],{"class":205},[199,90786,1431],{"class":874},[199,90788,882],{"class":205},[199,90790,90791,90793,90795],{"class":201,"line":1015},[199,90792,1824],{"class":205},[199,90794,1446],{"class":874},[199,90796,882],{"class":205},[199,90798,90799,90801,90803,90805],{"class":201,"line":1031},[199,90800,14084],{"class":1086},[199,90802,72230],{"class":1018},[199,90804,16425],{"class":1086},[199,90806,1012],{"class":205},[199,90808,90809,90811,90813],{"class":201,"line":1043},[199,90810,73875],{"class":205},[199,90812,90069],{"class":898},[199,90814,34308],{"class":205},[199,90816,90817,90819,90821],{"class":201,"line":1049},[199,90818,73885],{"class":205},[199,90820,3730],{"class":1018},[199,90822,34308],{"class":205},[199,90824,90825,90827,90829,90831,90833],{"class":201,"line":1054},[199,90826,90084],{"class":205},[199,90828,90087],{"class":898},[199,90830,1912],{"class":205},[199,90832,90092],{"class":898},[199,90834,90095],{"class":205},[199,90836,90837],{"class":201,"line":1062},[199,90838,80131],{"class":205},[199,90840,90841,90843],{"class":201,"line":1075},[199,90842,90104],{"class":205},[199,90844,90107],{"class":898},[199,90846,90847],{"class":201,"line":1092},[199,90848,2092],{"class":205},[199,90850,90851],{"class":201,"line":1107},[199,90852,2097],{"class":205},[199,90854,90855],{"class":201,"line":1128},[199,90856,90857],{"class":1454},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[199,90859,90860],{"class":201,"line":1146},[199,90861,90862],{"class":1454},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[199,90864,90865],{"class":201,"line":1163},[199,90866,90867],{"class":1454},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[199,90869,90870,90872,90874,90876,90879,90881,90884,90886,90888,90890,90892],{"class":201,"line":1176},[199,90871,14084],{"class":1086},[199,90873,90122],{"class":1018},[199,90875,16425],{"class":1086},[199,90877,90878],{"class":1018}," JSON",[199,90880,3638],{"class":205},[199,90882,90883],{"class":878},"parse",[199,90885,1537],{"class":205},[199,90887,73923],{"class":1018},[199,90889,3638],{"class":205},[199,90891,73928],{"class":878},[199,90893,73931],{"class":205},[199,90895,90896,90898,90900],{"class":201,"line":1189},[199,90897,76012],{"class":205},[199,90899,60506],{"class":878},[199,90901,90314],{"class":205},[199,90903,90904,90906,90908],{"class":201,"line":1202},[199,90905,90632],{"class":205},[199,90907,895],{"class":1086},[199,90909,90910],{"class":898}," '123'\n",[199,90912,90913,90915,90917],{"class":201,"line":1207},[199,90914,76012],{"class":205},[199,90916,60506],{"class":878},[199,90918,72295],{"class":205},[199,90920,90921,90923,90925],{"class":201,"line":1212},[199,90922,2112],{"class":205},[199,90924,1446],{"class":874},[199,90926,882],{"class":205},[199,90928,90929,90931,90933],{"class":201,"line":1225},[199,90930,1414],{"class":205},[199,90932,1431],{"class":874},[199,90934,882],{"class":205},[199,90936,90937],{"class":201,"line":1236},[199,90938,907],{"emptyLinePlaceholder":906},[199,90940,90941,90943,90945],{"class":201,"line":1249},[199,90942,1414],{"class":205},[199,90944,194],{"class":874},[199,90946,882],{"class":205},[31,90948,90949],{},[55,90950],{"alt":57,"src":90951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90953,90955],{"id":90954},"_415-异常处理","4.15 异常处理",[24,90957,90958],{},[27,90959,90960],{},"throw抛异常",[31,90962,90963],{},[55,90964],{"alt":57,"src":90965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[24,90967,90968],{"start":36},[27,90969,90970],{},"try\u002Fcatch 捕获错误信息",[31,90972,90973],{},[55,90974],{"alt":57,"src":90975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[190,90977,90979],{"className":192,"code":90978,"language":194,"meta":57,"style":57},"\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",[196,90980,90981,90991,91005,91009,91017,91031,91051,91063,91071,91075,91083,91095,91103,91112,91119,91124,91143,91152,91163,91168,91178,91183,91188,91193,91210,91214,91219,91226,91238,91242,91254,91258,91262,91267,91272,91279,91287,91295,91299],{"__ignoreMap":57},[199,90982,90983,90985,90987,90989],{"class":201,"line":202},[199,90984,871],{"class":205},[199,90986,875],{"class":874},[199,90988,879],{"class":878},[199,90990,882],{"class":205},[199,90992,90993,90995,90997,90999,91001,91003],{"class":201,"line":36},[199,90994,887],{"class":205},[199,90996,194],{"class":874},[199,90998,892],{"class":878},[199,91000,895],{"class":205},[199,91002,899],{"class":898},[199,91004,882],{"class":205},[199,91006,91007],{"class":201,"line":73},[199,91008,907],{"emptyLinePlaceholder":906},[199,91010,91011,91013,91015],{"class":201,"line":333},[199,91012,887],{"class":205},[199,91014,914],{"class":874},[199,91016,882],{"class":205},[199,91018,91019,91021,91023,91025,91027,91029],{"class":201,"line":227},[199,91020,1824],{"class":205},[199,91022,924],{"class":874},[199,91024,927],{"class":878},[199,91026,895],{"class":205},[199,91028,932],{"class":898},[199,91030,882],{"class":205},[199,91032,91033,91035,91037,91039,91041,91043,91045,91047,91049],{"class":201,"line":238},[199,91034,1824],{"class":205},[199,91036,924],{"class":874},[199,91038,967],{"class":878},[199,91040,895],{"class":205},[199,91042,972],{"class":898},[199,91044,951],{"class":878},[199,91046,895],{"class":205},[199,91048,979],{"class":898},[199,91050,882],{"class":205},[199,91052,91053,91055,91057,91059,91061],{"class":201,"line":252},[199,91054,1824],{"class":205},[199,91056,988],{"class":874},[199,91058,991],{"class":205},[199,91060,988],{"class":874},[199,91062,882],{"class":205},[199,91064,91065,91067,91069],{"class":201,"line":388},[199,91066,1414],{"class":205},[199,91068,914],{"class":874},[199,91070,882],{"class":205},[199,91072,91073],{"class":201,"line":415},[199,91074,907],{"emptyLinePlaceholder":906},[199,91076,91077,91079,91081],{"class":201,"line":426},[199,91078,887],{"class":205},[199,91080,1431],{"class":874},[199,91082,882],{"class":205},[199,91084,91085,91087,91089,91091,91093],{"class":201,"line":1015},[199,91086,1824],{"class":205},[199,91088,31],{"class":874},[199,91090,55753],{"class":205},[199,91092,31],{"class":874},[199,91094,882],{"class":205},[199,91096,91097,91099,91101],{"class":201,"line":1031},[199,91098,1824],{"class":205},[199,91100,1446],{"class":874},[199,91102,882],{"class":205},[199,91104,91105,91107,91110],{"class":201,"line":1043},[199,91106,72343],{"class":1086},[199,91108,91109],{"class":878}," fn",[199,91111,13716],{"class":205},[199,91113,91114,91117],{"class":201,"line":1049},[199,91115,91116],{"class":1086},"      try",[199,91118,1012],{"class":205},[199,91120,91121],{"class":201,"line":1054},[199,91122,91123],{"class":1454},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[199,91125,91126,91128,91130,91132,91134,91136,91138,91141],{"class":201,"line":1062},[199,91127,63529],{"class":1086},[199,91129,9722],{"class":1018},[199,91131,16425],{"class":1086},[199,91133,56655],{"class":205},[199,91135,56658],{"class":878},[199,91137,1537],{"class":205},[199,91139,91140],{"class":898},"'.p'",[199,91142,1594],{"class":205},[199,91144,91145,91148,91150],{"class":201,"line":1075},[199,91146,91147],{"class":205},"        p.style.color ",[199,91149,895],{"class":1086},[199,91151,69310],{"class":898},[199,91153,91154,91157,91160],{"class":201,"line":1092},[199,91155,91156],{"class":205},"      } ",[199,91158,91159],{"class":1086},"catch",[199,91161,91162],{"class":205}," (err) {\n",[199,91164,91165],{"class":201,"line":1107},[199,91166,91167],{"class":1454},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[199,91169,91170,91173,91175],{"class":201,"line":1128},[199,91171,91172],{"class":205},"        console.",[199,91174,60506],{"class":878},[199,91176,91177],{"class":205},"(err.message)\n",[199,91179,91180],{"class":201,"line":1146},[199,91181,91182],{"class":1454},"        \u002F\u002F 想要中断程序，需要加return\n",[199,91184,91185],{"class":201,"line":1163},[199,91186,91187],{"class":1454},"        \u002F\u002F return\n",[199,91189,91190],{"class":201,"line":1176},[199,91191,91192],{"class":1454},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[199,91194,91195,91198,91200,91203,91205,91208],{"class":201,"line":1189},[199,91196,91197],{"class":1086},"        throw",[199,91199,14441],{"class":1086},[199,91201,91202],{"class":878}," Error",[199,91204,1537],{"class":205},[199,91206,91207],{"class":898},"'你看看，选择器错误了吧'",[199,91209,1594],{"class":205},[199,91211,91212],{"class":201,"line":1202},[199,91213,2092],{"class":205},[199,91215,91216],{"class":201,"line":1207},[199,91217,91218],{"class":1454},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[199,91220,91221,91224],{"class":201,"line":1212},[199,91222,91223],{"class":1086},"      finally",[199,91225,1012],{"class":205},[199,91227,91228,91231,91233,91236],{"class":201,"line":1225},[199,91229,91230],{"class":878},"        alert",[199,91232,1537],{"class":205},[199,91234,91235],{"class":898},"'弹出对话框'",[199,91237,1594],{"class":205},[199,91239,91240],{"class":201,"line":1236},[199,91241,2092],{"class":205},[199,91243,91244,91246,91248,91250,91252],{"class":201,"line":1249},[199,91245,60503],{"class":205},[199,91247,60506],{"class":878},[199,91249,1537],{"class":205},[199,91251,3554],{"class":1018},[199,91253,1594],{"class":205},[199,91255,91256],{"class":201,"line":1262},[199,91257,907],{"emptyLinePlaceholder":906},[199,91259,91260],{"class":201,"line":1275},[199,91261,2097],{"class":205},[199,91263,91264],{"class":201,"line":1287},[199,91265,91266],{"class":1454},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[199,91268,91269],{"class":201,"line":1292},[199,91270,91271],{"class":1454},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[199,91273,91274,91277],{"class":201,"line":1297},[199,91275,91276],{"class":878},"    fn",[199,91278,4892],{"class":205},[199,91280,91281,91283,91285],{"class":201,"line":1310},[199,91282,2112],{"class":205},[199,91284,1446],{"class":874},[199,91286,882],{"class":205},[199,91288,91289,91291,91293],{"class":201,"line":1315},[199,91290,1414],{"class":205},[199,91292,1431],{"class":874},[199,91294,882],{"class":205},[199,91296,91297],{"class":201,"line":1330},[199,91298,907],{"emptyLinePlaceholder":906},[199,91300,91301,91303,91305],{"class":201,"line":1335},[199,91302,1414],{"class":205},[199,91304,194],{"class":874},[199,91306,882],{"class":205},[31,91308,91309],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[24,91311,91312],{"start":73},[27,91313,91314],{},"debugger",[31,91316,91317],{},[55,91318],{"alt":57,"src":91319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[31,91321,91322],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91324,91326],{"id":91325},"_416-处理this","4.16 处理this",[19,91328,91330],{"id":91329},"_4161-this的指向","4.16.1 this的指向",[24,91332,91333],{},[27,91334,91335],{},"普通函数的this",[31,91337,91338],{},[55,91339],{"alt":57,"src":91340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[24,91342,91343],{"start":36},[27,91344,91345],{},"箭头函数的this",[31,91347,91348],{},[55,91349],{"alt":57,"src":91350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[31,91352,91353],{},[55,91354],{"alt":57,"src":91355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[31,91357,91358],{},[55,91359],{"alt":57,"src":91360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[19,91362,91364],{"id":91363},"_4162-this的改变","4.16.2 this的改变",[31,91366,91367],{},"call() apply() bind()",[24,91369,91370],{},[27,91371,91372],{},"call()",[31,91374,91375],{},[55,91376],{"alt":57,"src":91377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[31,91379,91380],{},"两个作用：①调用函数；②改变this指向",[190,91382,91384],{"className":2763,"code":91383,"language":2765,"meta":57,"style":57},"\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",[196,91385,91386,91394,91402,91406,91411,91415,91420,91425,91430,91434,91439,91447],{"__ignoreMap":57},[199,91387,91388,91390,91392],{"class":201,"line":202},[199,91389,887],{"class":205},[199,91391,1431],{"class":874},[199,91393,882],{"class":205},[199,91395,91396,91398,91400],{"class":201,"line":36},[199,91397,1824],{"class":205},[199,91399,1446],{"class":874},[199,91401,882],{"class":205},[199,91403,91404],{"class":201,"line":73},[199,91405,73782],{"class":205},[199,91407,91408],{"class":201,"line":333},[199,91409,91410],{"class":205},"      uname: 'pink'\n",[199,91412,91413],{"class":201,"line":227},[199,91414,2097],{"class":205},[199,91416,91417],{"class":201,"line":238},[199,91418,91419],{"class":205},"    function fn(x, y) {\n",[199,91421,91422],{"class":201,"line":252},[199,91423,91424],{"class":205},"      console.log(this)  \u002F\u002Fwindow\n",[199,91426,91427],{"class":201,"line":388},[199,91428,91429],{"class":205},"      console.log(x + y)\n",[199,91431,91432],{"class":201,"line":415},[199,91433,2097],{"class":205},[199,91435,91436],{"class":201,"line":426},[199,91437,91438],{"class":205},"    fn.call(obj, 1, 2)\n",[199,91440,91441,91443,91445],{"class":201,"line":1015},[199,91442,2112],{"class":205},[199,91444,1446],{"class":874},[199,91446,882],{"class":205},[199,91448,91449,91451,91453],{"class":201,"line":1031},[199,91450,1414],{"class":205},[199,91452,1431],{"class":874},[199,91454,882],{"class":205},[31,91456,91457],{},[55,91458],{"alt":57,"src":91459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[24,91461,91462],{"start":36},[27,91463,91464],{},"apply()",[31,91466,91467],{},[55,91468],{"alt":57,"src":91469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[31,91471,91380],{},[31,91473,91474],{},"call传递的是普通参数，而apply必须传递的是数组",[190,91476,91478],{"className":192,"code":91477,"language":194,"meta":57,"style":57},"\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",[196,91479,91480,91490,91504,91508,91516,91530,91550,91562,91570,91574,91582,91590,91600,91607,91611,91616,91632,91644,91658,91662,91667,91686,91691,91695,91700,91705,91713,91718,91740,91745,91761,91777,91789,91793,91798,91817,91825,91833,91837],{"__ignoreMap":57},[199,91481,91482,91484,91486,91488],{"class":201,"line":202},[199,91483,871],{"class":205},[199,91485,875],{"class":874},[199,91487,879],{"class":878},[199,91489,882],{"class":205},[199,91491,91492,91494,91496,91498,91500,91502],{"class":201,"line":36},[199,91493,887],{"class":205},[199,91495,194],{"class":874},[199,91497,892],{"class":878},[199,91499,895],{"class":205},[199,91501,899],{"class":898},[199,91503,882],{"class":205},[199,91505,91506],{"class":201,"line":73},[199,91507,907],{"emptyLinePlaceholder":906},[199,91509,91510,91512,91514],{"class":201,"line":333},[199,91511,887],{"class":205},[199,91513,914],{"class":874},[199,91515,882],{"class":205},[199,91517,91518,91520,91522,91524,91526,91528],{"class":201,"line":227},[199,91519,1824],{"class":205},[199,91521,924],{"class":874},[199,91523,927],{"class":878},[199,91525,895],{"class":205},[199,91527,932],{"class":898},[199,91529,882],{"class":205},[199,91531,91532,91534,91536,91538,91540,91542,91544,91546,91548],{"class":201,"line":238},[199,91533,1824],{"class":205},[199,91535,924],{"class":874},[199,91537,967],{"class":878},[199,91539,895],{"class":205},[199,91541,972],{"class":898},[199,91543,951],{"class":878},[199,91545,895],{"class":205},[199,91547,979],{"class":898},[199,91549,882],{"class":205},[199,91551,91552,91554,91556,91558,91560],{"class":201,"line":252},[199,91553,1824],{"class":205},[199,91555,988],{"class":874},[199,91557,991],{"class":205},[199,91559,988],{"class":874},[199,91561,882],{"class":205},[199,91563,91564,91566,91568],{"class":201,"line":388},[199,91565,1414],{"class":205},[199,91567,914],{"class":874},[199,91569,882],{"class":205},[199,91571,91572],{"class":201,"line":415},[199,91573,907],{"emptyLinePlaceholder":906},[199,91575,91576,91578,91580],{"class":201,"line":426},[199,91577,887],{"class":205},[199,91579,1431],{"class":874},[199,91581,882],{"class":205},[199,91583,91584,91586,91588],{"class":201,"line":1015},[199,91585,1824],{"class":205},[199,91587,1446],{"class":874},[199,91589,882],{"class":205},[199,91591,91592,91594,91596,91598],{"class":201,"line":1031},[199,91593,14084],{"class":1086},[199,91595,72230],{"class":1018},[199,91597,16425],{"class":1086},[199,91599,1012],{"class":205},[199,91601,91602,91604],{"class":201,"line":1043},[199,91603,73885],{"class":205},[199,91605,91606],{"class":1018},"18\n",[199,91608,91609],{"class":201,"line":1049},[199,91610,2097],{"class":205},[199,91612,91613],{"class":201,"line":1054},[199,91614,91615],{"class":1454},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[199,91617,91618,91620,91622,91624,91626,91628,91630],{"class":201,"line":1062},[199,91619,72343],{"class":1086},[199,91621,91109],{"class":878},[199,91623,1537],{"class":205},[199,91625,3899],{"class":8113},[199,91627,1912],{"class":205},[199,91629,3924],{"class":8113},[199,91631,1513],{"class":205},[199,91633,91634,91636,91638,91640,91642],{"class":201,"line":1075},[199,91635,60503],{"class":205},[199,91637,60506],{"class":878},[199,91639,1537],{"class":205},[199,91641,89252],{"class":1018},[199,91643,1594],{"class":205},[199,91645,91646,91648,91650,91653,91655],{"class":201,"line":1092},[199,91647,60503],{"class":205},[199,91649,60506],{"class":878},[199,91651,91652],{"class":205},"(x ",[199,91654,2028],{"class":1086},[199,91656,91657],{"class":205}," y)\n",[199,91659,91660],{"class":201,"line":1107},[199,91661,2097],{"class":205},[199,91663,91664],{"class":201,"line":1128},[199,91665,91666],{"class":1454},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[199,91668,91669,91672,91675,91678,91680,91682,91684],{"class":201,"line":1146},[199,91670,91671],{"class":205},"    fn.",[199,91673,91674],{"class":878},"apply",[199,91676,91677],{"class":205},"(obj, [",[199,91679,1115],{"class":1018},[199,91681,1912],{"class":205},[199,91683,1925],{"class":1018},[199,91685,7554],{"class":205},[199,91687,91688],{"class":201,"line":1163},[199,91689,91690],{"class":1454},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[199,91692,91693],{"class":201,"line":1176},[199,91694,907],{"emptyLinePlaceholder":906},[199,91696,91697],{"class":201,"line":1189},[199,91698,91699],{"class":1454},"    \u002F\u002F 使用场景：求数组最大值\n",[199,91701,91702],{"class":201,"line":1202},[199,91703,91704],{"class":1454},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[199,91706,91707,91710],{"class":201,"line":1207},[199,91708,91709],{"class":1454},"    \u002F\u002F console.log(max)",[199,91711,91712],{"class":1454},"   \u002F\u002F3\n",[199,91714,91715],{"class":201,"line":1212},[199,91716,91717],{"class":1454},"    \u002F\u002F 指向空或者Math都是可以的\n",[199,91719,91720,91722,91724,91726,91728,91730,91732,91734,91736,91738],{"class":201,"line":1225},[199,91721,14084],{"class":1086},[199,91723,59954],{"class":1018},[199,91725,16425],{"class":1086},[199,91727,1906],{"class":205},[199,91729,3396],{"class":1018},[199,91731,1912],{"class":205},[199,91733,3585],{"class":1018},[199,91735,1912],{"class":205},[199,91737,3615],{"class":1018},[199,91739,1932],{"class":205},[199,91741,91742],{"class":201,"line":1236},[199,91743,91744],{"class":1454},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[199,91746,91747,91749,91751,91753,91756,91758],{"class":201,"line":1249},[199,91748,14084],{"class":1086},[199,91750,8848],{"class":1018},[199,91752,16425],{"class":1086},[199,91754,91755],{"class":205}," Math.max.",[199,91757,91674],{"class":878},[199,91759,91760],{"class":205},"(Math, arr)\n",[199,91762,91763,91765,91768,91770,91773,91775],{"class":201,"line":1262},[199,91764,14084],{"class":1086},[199,91766,91767],{"class":1018}," min",[199,91769,16425],{"class":1086},[199,91771,91772],{"class":205}," Math.min.",[199,91774,91674],{"class":878},[199,91776,91760],{"class":205},[199,91778,91779,91781,91783,91786],{"class":201,"line":1275},[199,91780,76012],{"class":205},[199,91782,60506],{"class":878},[199,91784,91785],{"class":205},"(max, min)     ",[199,91787,91788],{"class":1454},"\u002F\u002F100,4\n",[199,91790,91791],{"class":201,"line":1287},[199,91792,907],{"emptyLinePlaceholder":906},[199,91794,91795],{"class":201,"line":1292},[199,91796,91797],{"class":1454},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[199,91799,91800,91802,91804,91807,91809,91811,91814],{"class":201,"line":1297},[199,91801,76012],{"class":205},[199,91803,60506],{"class":878},[199,91805,91806],{"class":205},"(Max.",[199,91808,8912],{"class":878},[199,91810,1537],{"class":205},[199,91812,91813],{"class":1086},"...",[199,91815,91816],{"class":205},"arr))\n",[199,91818,91819,91821,91823],{"class":201,"line":1310},[199,91820,2112],{"class":205},[199,91822,1446],{"class":874},[199,91824,882],{"class":205},[199,91826,91827,91829,91831],{"class":201,"line":1315},[199,91828,1414],{"class":205},[199,91830,1431],{"class":874},[199,91832,882],{"class":205},[199,91834,91835],{"class":201,"line":1330},[199,91836,907],{"emptyLinePlaceholder":906},[199,91838,91839,91841,91843],{"class":201,"line":1335},[199,91840,1414],{"class":205},[199,91842,194],{"class":874},[199,91844,882],{"class":205},[31,91846,91847],{},[55,91848],{"alt":57,"src":91849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[24,91851,91852],{"start":73},[27,91853,91854],{},"bind()",[31,91856,91857],{},[55,91858],{"alt":57,"src":91859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[31,91861,91862],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[31,91864,91865],{},"bind的语法跟call很相似",[190,91867,91869],{"className":2763,"code":91868,"language":2765,"meta":57,"style":57},"\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",[196,91870,91871,91879,91887,91891,91896,91900,91904,91909,91913,91918,91923,91928,91933,91938,91943,91948,91952,91960],{"__ignoreMap":57},[199,91872,91873,91875,91877],{"class":201,"line":202},[199,91874,887],{"class":205},[199,91876,1431],{"class":874},[199,91878,882],{"class":205},[199,91880,91881,91883,91885],{"class":201,"line":36},[199,91882,1824],{"class":205},[199,91884,1446],{"class":874},[199,91886,882],{"class":205},[199,91888,91889],{"class":201,"line":73},[199,91890,73782],{"class":205},[199,91892,91893],{"class":201,"line":333},[199,91894,91895],{"class":205},"      age: 18\n",[199,91897,91898],{"class":201,"line":227},[199,91899,2097],{"class":205},[199,91901,91902],{"class":201,"line":238},[199,91903,79402],{"class":205},[199,91905,91906],{"class":201,"line":252},[199,91907,91908],{"class":205},"      console.log(this)\n",[199,91910,91911],{"class":201,"line":388},[199,91912,2097],{"class":205},[199,91914,91915],{"class":201,"line":415},[199,91916,91917],{"class":205},"    \u002F\u002F 1.bind 不会调用函数\n",[199,91919,91920],{"class":201,"line":426},[199,91921,91922],{"class":205},"    \u002F\u002F 2.bind能改变this的指向\n",[199,91924,91925],{"class":201,"line":1015},[199,91926,91927],{"class":205},"    fn.bind()\n",[199,91929,91930],{"class":201,"line":1031},[199,91931,91932],{"class":205},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[199,91934,91935],{"class":201,"line":1043},[199,91936,91937],{"class":205},"    const fun = fn.bind(obj)\n",[199,91939,91940],{"class":201,"line":1049},[199,91941,91942],{"class":205},"    \u002F\u002F console.log(fun)\n",[199,91944,91945],{"class":201,"line":1054},[199,91946,91947],{"class":205},"    \u002F\u002F 调用,查看this的指向\n",[199,91949,91950],{"class":201,"line":1062},[199,91951,2347],{"class":205},[199,91953,91954,91956,91958],{"class":201,"line":1075},[199,91955,2112],{"class":205},[199,91957,1446],{"class":874},[199,91959,882],{"class":205},[199,91961,91962,91964,91966],{"class":201,"line":1092},[199,91963,1414],{"class":205},[199,91965,1431],{"class":874},[199,91967,882],{"class":205},[31,91969,91970],{},[55,91971],{"alt":57,"src":91972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[24,91974,91975],{"start":333},[27,91976,91977],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[190,91979,91981],{"className":2763,"code":91980,"language":2765,"meta":57,"style":57},"\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",[196,91982,91983,91991,92004,92012,92017,92021,92026,92031,92036,92041,92046,92051,92056,92061,92065,92073],{"__ignoreMap":57},[199,91984,91985,91987,91989],{"class":201,"line":202},[199,91986,887],{"class":205},[199,91988,1431],{"class":874},[199,91990,882],{"class":205},[199,91992,91993,91995,91997,92000,92002],{"class":201,"line":36},[199,91994,1824],{"class":205},[199,91996,56146],{"class":874},[199,91998,91999],{"class":205},">禁用\u003C\u002F",[199,92001,56146],{"class":874},[199,92003,882],{"class":205},[199,92005,92006,92008,92010],{"class":201,"line":73},[199,92007,1824],{"class":205},[199,92009,1446],{"class":874},[199,92011,882],{"class":205},[199,92013,92014],{"class":201,"line":333},[199,92015,92016],{"class":205},"    const btn = document.querySelector('button')\n",[199,92018,92019],{"class":201,"line":227},[199,92020,61275],{"class":205},[199,92022,92023],{"class":201,"line":238},[199,92024,92025],{"class":205},"      this.disabled = true\n",[199,92027,92028],{"class":201,"line":252},[199,92029,92030],{"class":205},"      \u002F\u002F 定时器是window进行调用的\n",[199,92032,92033],{"class":201,"line":388},[199,92034,92035],{"class":205},"      setTimeout(function () {\n",[199,92037,92038],{"class":201,"line":415},[199,92039,92040],{"class":205},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[199,92042,92043],{"class":201,"line":426},[199,92044,92045],{"class":205},"        this.disabled = false\n",[199,92047,92048],{"class":201,"line":1015},[199,92049,92050],{"class":205},"      }.bind(this), 2000)\n",[199,92052,92053],{"class":201,"line":1031},[199,92054,92055],{"class":205},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[199,92057,92058],{"class":201,"line":1043},[199,92059,92060],{"class":205},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[199,92062,92063],{"class":201,"line":1049},[199,92064,36302],{"class":205},[199,92066,92067,92069,92071],{"class":201,"line":1054},[199,92068,2112],{"class":205},[199,92070,1446],{"class":874},[199,92072,882],{"class":205},[199,92074,92075,92077,92079],{"class":201,"line":1062},[199,92076,1414],{"class":205},[199,92078,1431],{"class":874},[199,92080,882],{"class":205},[24,92082,92083],{"start":227},[27,92084,24798],{},[31,92086,92087],{},[55,92088],{"alt":57,"src":92089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,92091,92093],{"id":92092},"_417-性能优化","4.17 性能优化",[19,92095,92097],{"id":92096},"_4171-防抖","4.17.1 防抖",[31,92099,92100],{},[55,92101],{"alt":57,"src":92102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[31,92104,92105],{},[49,92106,92107],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[31,92109,92110],{},"防抖实现方式：",[176,92112,92113],{},[27,92114,92115],{},"lodash 提供了防抖处理",[31,92117,92118],{},"_.debounce(func,[wait=0],[options={}])",[31,92120,92121],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[190,92123,92125],{"className":192,"code":92124,"language":194,"meta":57,"style":57},"\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",[196,92126,92127,92137,92151,92155,92163,92177,92197,92209,92217,92223,92233,92245,92257,92268,92280,92290,92300,92313,92317,92325,92333,92337,92345,92363,92381,92389,92408,92418,92427,92438,92443,92447,92452,92457,92462,92487,92495,92503,92507],{"__ignoreMap":57},[199,92128,92129,92131,92133,92135],{"class":201,"line":202},[199,92130,871],{"class":205},[199,92132,875],{"class":874},[199,92134,879],{"class":878},[199,92136,882],{"class":205},[199,92138,92139,92141,92143,92145,92147,92149],{"class":201,"line":36},[199,92140,887],{"class":205},[199,92142,194],{"class":874},[199,92144,892],{"class":878},[199,92146,895],{"class":205},[199,92148,899],{"class":898},[199,92150,882],{"class":205},[199,92152,92153],{"class":201,"line":73},[199,92154,907],{"emptyLinePlaceholder":906},[199,92156,92157,92159,92161],{"class":201,"line":333},[199,92158,887],{"class":205},[199,92160,914],{"class":874},[199,92162,882],{"class":205},[199,92164,92165,92167,92169,92171,92173,92175],{"class":201,"line":227},[199,92166,1824],{"class":205},[199,92168,924],{"class":874},[199,92170,927],{"class":878},[199,92172,895],{"class":205},[199,92174,932],{"class":898},[199,92176,882],{"class":205},[199,92178,92179,92181,92183,92185,92187,92189,92191,92193,92195],{"class":201,"line":238},[199,92180,1824],{"class":205},[199,92182,924],{"class":874},[199,92184,967],{"class":878},[199,92186,895],{"class":205},[199,92188,972],{"class":898},[199,92190,951],{"class":878},[199,92192,895],{"class":205},[199,92194,979],{"class":898},[199,92196,882],{"class":205},[199,92198,92199,92201,92203,92205,92207],{"class":201,"line":252},[199,92200,1824],{"class":205},[199,92202,988],{"class":874},[199,92204,991],{"class":205},[199,92206,988],{"class":874},[199,92208,882],{"class":205},[199,92210,92211,92213,92215],{"class":201,"line":388},[199,92212,1824],{"class":205},[199,92214,1002],{"class":874},[199,92216,882],{"class":205},[199,92218,92219,92221],{"class":201,"line":415},[199,92220,57011],{"class":878},[199,92222,1012],{"class":205},[199,92224,92225,92227,92229,92231],{"class":201,"line":426},[199,92226,74855],{"class":1018},[199,92228,1022],{"class":205},[199,92230,62764],{"class":1018},[199,92232,1028],{"class":205},[199,92234,92235,92237,92239,92241,92243],{"class":201,"line":1015},[199,92236,57030],{"class":1018},[199,92238,1022],{"class":205},[199,92240,4647],{"class":1018},[199,92242,1087],{"class":1086},[199,92244,1028],{"class":205},[199,92246,92247,92249,92251,92253,92255],{"class":201,"line":1031},[199,92248,57044],{"class":1018},[199,92250,1022],{"class":205},[199,92252,4647],{"class":1018},[199,92254,1087],{"class":1086},[199,92256,1028],{"class":205},[199,92258,92259,92261,92263,92266],{"class":201,"line":1043},[199,92260,57143],{"class":1018},[199,92262,1022],{"class":205},[199,92264,92265],{"class":1018},"gray",[199,92267,1028],{"class":205},[199,92269,92270,92272,92274,92276,92278],{"class":201,"line":1049},[199,92271,57181],{"class":1018},[199,92273,1022],{"class":205},[199,92275,3904],{"class":1018},[199,92277,1087],{"class":1086},[199,92279,1028],{"class":205},[199,92281,92282,92284,92286,92288],{"class":201,"line":1054},[199,92283,59675],{"class":1018},[199,92285,1022],{"class":205},[199,92287,63101],{"class":1018},[199,92289,1028],{"class":205},[199,92291,92292,92294,92296,92298],{"class":201,"line":1062},[199,92293,59545],{"class":1018},[199,92295,1022],{"class":205},[199,92297,1197],{"class":1018},[199,92299,1028],{"class":205},[199,92301,92302,92305,92307,92309,92311],{"class":201,"line":1075},[199,92303,92304],{"class":1018},"      padding-top",[199,92306,1022],{"class":205},[199,92308,1909],{"class":1018},[199,92310,1087],{"class":1086},[199,92312,1028],{"class":205},[199,92314,92315],{"class":201,"line":1092},[199,92316,2097],{"class":205},[199,92318,92319,92321,92323],{"class":201,"line":1107},[199,92320,2112],{"class":205},[199,92322,1002],{"class":874},[199,92324,882],{"class":205},[199,92326,92327,92329,92331],{"class":201,"line":1128},[199,92328,1414],{"class":205},[199,92330,914],{"class":874},[199,92332,882],{"class":205},[199,92334,92335],{"class":201,"line":1146},[199,92336,907],{"emptyLinePlaceholder":906},[199,92338,92339,92341,92343],{"class":201,"line":1163},[199,92340,887],{"class":205},[199,92342,1431],{"class":874},[199,92344,882],{"class":205},[199,92346,92347,92349,92351,92353,92355,92357,92359,92361],{"class":201,"line":1176},[199,92348,1824],{"class":205},[199,92350,1220],{"class":874},[199,92352,55745],{"class":878},[199,92354,895],{"class":205},[199,92356,55750],{"class":898},[199,92358,57573],{"class":205},[199,92360,1220],{"class":874},[199,92362,882],{"class":205},[199,92364,92365,92367,92369,92371,92373,92375,92377,92379],{"class":201,"line":1189},[199,92366,1824],{"class":205},[199,92368,1446],{"class":874},[199,92370,57498],{"class":878},[199,92372,895],{"class":205},[199,92374,90533],{"class":898},[199,92376,57573],{"class":205},[199,92378,1446],{"class":874},[199,92380,882],{"class":205},[199,92382,92383,92385,92387],{"class":201,"line":1202},[199,92384,1824],{"class":205},[199,92386,1446],{"class":874},[199,92388,882],{"class":205},[199,92390,92391,92393,92395,92397,92399,92401,92403,92406],{"class":201,"line":1207},[199,92392,14084],{"class":1086},[199,92394,89192],{"class":1018},[199,92396,16425],{"class":1086},[199,92398,56655],{"class":205},[199,92400,56658],{"class":878},[199,92402,1537],{"class":205},[199,92404,92405],{"class":898},"'.box'",[199,92407,1594],{"class":205},[199,92409,92410,92412,92414,92416],{"class":201,"line":1212},[199,92411,1899],{"class":1086},[199,92413,1490],{"class":205},[199,92415,895],{"class":1086},[199,92417,50173],{"class":1018},[199,92419,92420,92422,92425],{"class":201,"line":1225},[199,92421,72343],{"class":1086},[199,92423,92424],{"class":878}," mouseMove",[199,92426,13716],{"class":205},[199,92428,92429,92432,92434,92436],{"class":201,"line":1236},[199,92430,92431],{"class":205},"      box.innerHTML ",[199,92433,895],{"class":1086},[199,92435,5936],{"class":205},[199,92437,5606],{"class":1086},[199,92439,92440],{"class":201,"line":1249},[199,92441,92442],{"class":1454},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[199,92444,92445],{"class":201,"line":1262},[199,92446,2097],{"class":205},[199,92448,92449],{"class":201,"line":1275},[199,92450,92451],{"class":1454},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[199,92453,92454],{"class":201,"line":1287},[199,92455,92456],{"class":1454},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[199,92458,92459],{"class":201,"line":1292},[199,92460,92461],{"class":1454},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[199,92463,92464,92467,92469,92471,92474,92477,92480,92483,92485],{"class":201,"line":1297},[199,92465,92466],{"class":205},"    box.",[199,92468,60072],{"class":878},[199,92470,1537],{"class":205},[199,92472,92473],{"class":898},"'mousemove'",[199,92475,92476],{"class":205},", _.",[199,92478,92479],{"class":878},"debounce",[199,92481,92482],{"class":205},"(mouseMove, ",[199,92484,67333],{"class":1018},[199,92486,1554],{"class":205},[199,92488,92489,92491,92493],{"class":201,"line":1310},[199,92490,2112],{"class":205},[199,92492,1446],{"class":874},[199,92494,882],{"class":205},[199,92496,92497,92499,92501],{"class":201,"line":1315},[199,92498,1414],{"class":205},[199,92500,1431],{"class":874},[199,92502,882],{"class":205},[199,92504,92505],{"class":201,"line":1330},[199,92506,907],{"emptyLinePlaceholder":906},[199,92508,92509,92511,92513],{"class":201,"line":1335},[199,92510,1414],{"class":205},[199,92512,194],{"class":874},[199,92514,882],{"class":205},[176,92516,92517],{},[27,92518,92519],{},"手写一个防抖函数来处理",[31,92521,92522],{},"防抖的核心就是利用定时器来实现的：",[31,92524,92525],{},"①声明一个定时器变量",[31,92527,92528],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[31,92530,92531],{},"③如果没有定时器则开启定时器，记得存到变量里面",[190,92533,92535],{"className":192,"code":92534,"language":194,"meta":57,"style":57},"\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",[196,92536,92537,92547,92561,92565,92573,92587,92607,92619,92627,92633,92643,92655,92667,92677,92689,92699,92709,92721,92725,92733,92741,92745,92753,92771,92789,92797,92815,92825,92833,92843,92847,92851,92855,92860,92865,92870,92875,92880,92885,92903,92910,92915,92923,92928,92941,92957,92967,92972,92976,92980,93000,93004,93009,93014,93019,93024,93032,93040,93044],{"__ignoreMap":57},[199,92538,92539,92541,92543,92545],{"class":201,"line":202},[199,92540,871],{"class":205},[199,92542,875],{"class":874},[199,92544,879],{"class":878},[199,92546,882],{"class":205},[199,92548,92549,92551,92553,92555,92557,92559],{"class":201,"line":36},[199,92550,887],{"class":205},[199,92552,194],{"class":874},[199,92554,892],{"class":878},[199,92556,895],{"class":205},[199,92558,899],{"class":898},[199,92560,882],{"class":205},[199,92562,92563],{"class":201,"line":73},[199,92564,907],{"emptyLinePlaceholder":906},[199,92566,92567,92569,92571],{"class":201,"line":333},[199,92568,887],{"class":205},[199,92570,914],{"class":874},[199,92572,882],{"class":205},[199,92574,92575,92577,92579,92581,92583,92585],{"class":201,"line":227},[199,92576,1824],{"class":205},[199,92578,924],{"class":874},[199,92580,927],{"class":878},[199,92582,895],{"class":205},[199,92584,932],{"class":898},[199,92586,882],{"class":205},[199,92588,92589,92591,92593,92595,92597,92599,92601,92603,92605],{"class":201,"line":238},[199,92590,1824],{"class":205},[199,92592,924],{"class":874},[199,92594,967],{"class":878},[199,92596,895],{"class":205},[199,92598,972],{"class":898},[199,92600,951],{"class":878},[199,92602,895],{"class":205},[199,92604,979],{"class":898},[199,92606,882],{"class":205},[199,92608,92609,92611,92613,92615,92617],{"class":201,"line":252},[199,92610,1824],{"class":205},[199,92612,988],{"class":874},[199,92614,991],{"class":205},[199,92616,988],{"class":874},[199,92618,882],{"class":205},[199,92620,92621,92623,92625],{"class":201,"line":388},[199,92622,1824],{"class":205},[199,92624,1002],{"class":874},[199,92626,882],{"class":205},[199,92628,92629,92631],{"class":201,"line":415},[199,92630,57011],{"class":878},[199,92632,1012],{"class":205},[199,92634,92635,92637,92639,92641],{"class":201,"line":426},[199,92636,74855],{"class":1018},[199,92638,1022],{"class":205},[199,92640,62764],{"class":1018},[199,92642,1028],{"class":205},[199,92644,92645,92647,92649,92651,92653],{"class":201,"line":1015},[199,92646,57030],{"class":1018},[199,92648,1022],{"class":205},[199,92650,4647],{"class":1018},[199,92652,1087],{"class":1086},[199,92654,1028],{"class":205},[199,92656,92657,92659,92661,92663,92665],{"class":201,"line":1031},[199,92658,57044],{"class":1018},[199,92660,1022],{"class":205},[199,92662,4647],{"class":1018},[199,92664,1087],{"class":1086},[199,92666,1028],{"class":205},[199,92668,92669,92671,92673,92675],{"class":201,"line":1043},[199,92670,57143],{"class":1018},[199,92672,1022],{"class":205},[199,92674,92265],{"class":1018},[199,92676,1028],{"class":205},[199,92678,92679,92681,92683,92685,92687],{"class":201,"line":1049},[199,92680,57181],{"class":1018},[199,92682,1022],{"class":205},[199,92684,3904],{"class":1018},[199,92686,1087],{"class":1086},[199,92688,1028],{"class":205},[199,92690,92691,92693,92695,92697],{"class":201,"line":1054},[199,92692,59675],{"class":1018},[199,92694,1022],{"class":205},[199,92696,63101],{"class":1018},[199,92698,1028],{"class":205},[199,92700,92701,92703,92705,92707],{"class":201,"line":1062},[199,92702,59545],{"class":1018},[199,92704,1022],{"class":205},[199,92706,1197],{"class":1018},[199,92708,1028],{"class":205},[199,92710,92711,92713,92715,92717,92719],{"class":201,"line":1075},[199,92712,92304],{"class":1018},[199,92714,1022],{"class":205},[199,92716,1909],{"class":1018},[199,92718,1087],{"class":1086},[199,92720,1028],{"class":205},[199,92722,92723],{"class":201,"line":1092},[199,92724,2097],{"class":205},[199,92726,92727,92729,92731],{"class":201,"line":1107},[199,92728,2112],{"class":205},[199,92730,1002],{"class":874},[199,92732,882],{"class":205},[199,92734,92735,92737,92739],{"class":201,"line":1128},[199,92736,1414],{"class":205},[199,92738,914],{"class":874},[199,92740,882],{"class":205},[199,92742,92743],{"class":201,"line":1146},[199,92744,907],{"emptyLinePlaceholder":906},[199,92746,92747,92749,92751],{"class":201,"line":1163},[199,92748,887],{"class":205},[199,92750,1431],{"class":874},[199,92752,882],{"class":205},[199,92754,92755,92757,92759,92761,92763,92765,92767,92769],{"class":201,"line":1176},[199,92756,1824],{"class":205},[199,92758,1220],{"class":874},[199,92760,55745],{"class":878},[199,92762,895],{"class":205},[199,92764,55750],{"class":898},[199,92766,57573],{"class":205},[199,92768,1220],{"class":874},[199,92770,882],{"class":205},[199,92772,92773,92775,92777,92779,92781,92783,92785,92787],{"class":201,"line":1189},[199,92774,1824],{"class":205},[199,92776,1446],{"class":874},[199,92778,57498],{"class":878},[199,92780,895],{"class":205},[199,92782,90533],{"class":898},[199,92784,57573],{"class":205},[199,92786,1446],{"class":874},[199,92788,882],{"class":205},[199,92790,92791,92793,92795],{"class":201,"line":1202},[199,92792,1824],{"class":205},[199,92794,1446],{"class":874},[199,92796,882],{"class":205},[199,92798,92799,92801,92803,92805,92807,92809,92811,92813],{"class":201,"line":1207},[199,92800,14084],{"class":1086},[199,92802,89192],{"class":1018},[199,92804,16425],{"class":1086},[199,92806,56655],{"class":205},[199,92808,56658],{"class":878},[199,92810,1537],{"class":205},[199,92812,92405],{"class":898},[199,92814,1594],{"class":205},[199,92816,92817,92819,92821,92823],{"class":201,"line":1212},[199,92818,1899],{"class":1086},[199,92820,1490],{"class":205},[199,92822,895],{"class":1086},[199,92824,50173],{"class":1018},[199,92826,92827,92829,92831],{"class":201,"line":1225},[199,92828,72343],{"class":1086},[199,92830,92424],{"class":878},[199,92832,13716],{"class":205},[199,92834,92835,92837,92839,92841],{"class":201,"line":1236},[199,92836,92431],{"class":205},[199,92838,895],{"class":1086},[199,92840,5936],{"class":205},[199,92842,5606],{"class":1086},[199,92844,92845],{"class":201,"line":1249},[199,92846,92442],{"class":1454},[199,92848,92849],{"class":201,"line":1262},[199,92850,2097],{"class":205},[199,92852,92853],{"class":201,"line":1275},[199,92854,92451],{"class":1454},[199,92856,92857],{"class":201,"line":1287},[199,92858,92859],{"class":1454},"    \u002F\u002F 手写防抖函数\n",[199,92861,92862],{"class":201,"line":1292},[199,92863,92864],{"class":1454},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[199,92866,92867],{"class":201,"line":1297},[199,92868,92869],{"class":1454},"    \u002F\u002F 1.声明定时器变量\n",[199,92871,92872],{"class":201,"line":1310},[199,92873,92874],{"class":1454},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[199,92876,92877],{"class":201,"line":1315},[199,92878,92879],{"class":1454},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[199,92881,92882],{"class":201,"line":1330},[199,92883,92884],{"class":1454},"    \u002F\u002F 4.定时器里面写函数调用\n",[199,92886,92887,92889,92892,92894,92897,92899,92901],{"class":201,"line":1335},[199,92888,72343],{"class":1086},[199,92890,92891],{"class":878}," debounce",[199,92893,1537],{"class":205},[199,92895,92896],{"class":8113},"fn",[199,92898,1912],{"class":205},[199,92900,3799],{"class":8113},[199,92902,1513],{"class":205},[199,92904,92905,92907],{"class":201,"line":1340},[199,92906,82031],{"class":1086},[199,92908,92909],{"class":205}," timer\n",[199,92911,92912],{"class":201,"line":1352},[199,92913,92914],{"class":1454},"      \u002F\u002F return 返回一个匿名函数\n",[199,92916,92917,92919,92921],{"class":201,"line":1367},[199,92918,76241],{"class":1086},[199,92920,61177],{"class":1086},[199,92922,56711],{"class":205},[199,92924,92925],{"class":201,"line":1381},[199,92926,92927],{"class":1454},"        \u002F\u002F 这里边写第二三四步\n",[199,92929,92930,92932,92935,92938],{"class":201,"line":1396},[199,92931,2017],{"class":1086},[199,92933,92934],{"class":205}," (timer) ",[199,92936,92937],{"class":878},"clearTimeout",[199,92939,92940],{"class":205},"(timer)\n",[199,92942,92943,92946,92948,92951,92953,92955],{"class":201,"line":1401},[199,92944,92945],{"class":205},"        timer ",[199,92947,895],{"class":1086},[199,92949,92950],{"class":878}," setTimeout",[199,92952,1537],{"class":205},[199,92954,56708],{"class":1086},[199,92956,56711],{"class":205},[199,92958,92959,92962,92964],{"class":201,"line":1411},[199,92960,92961],{"class":878},"          fn",[199,92963,15911],{"class":205},[199,92965,92966],{"class":1454},"\u002F\u002F加小括号调用fn }, t)\n",[199,92968,92969],{"class":201,"line":1421},[199,92970,92971],{"class":205},"        }, t)\n",[199,92973,92974],{"class":201,"line":1426},[199,92975,2092],{"class":205},[199,92977,92978],{"class":201,"line":1436},[199,92979,2097],{"class":205},[199,92981,92982,92984,92986,92988,92990,92992,92994,92996,92998],{"class":201,"line":1441},[199,92983,92466],{"class":205},[199,92985,60072],{"class":878},[199,92987,1537],{"class":205},[199,92989,92473],{"class":898},[199,92991,1912],{"class":205},[199,92993,92479],{"class":878},[199,92995,92482],{"class":205},[199,92997,67333],{"class":1018},[199,92999,1554],{"class":205},[199,93001,93002],{"class":201,"line":1451},[199,93003,907],{"emptyLinePlaceholder":906},[199,93005,93006],{"class":201,"line":1458},[199,93007,93008],{"class":1454},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[199,93010,93011],{"class":201,"line":1464},[199,93012,93013],{"class":1454},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[199,93015,93016],{"class":201,"line":1478},[199,93017,93018],{"class":1454},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[199,93020,93021],{"class":201,"line":1516},[199,93022,93023],{"class":1454},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[199,93025,93026,93028,93030],{"class":201,"line":1522},[199,93027,2112],{"class":205},[199,93029,1446],{"class":874},[199,93031,882],{"class":205},[199,93033,93034,93036,93038],{"class":201,"line":1528},[199,93035,1414],{"class":205},[199,93037,1431],{"class":874},[199,93039,882],{"class":205},[199,93041,93042],{"class":201,"line":1557},[199,93043,907],{"emptyLinePlaceholder":906},[199,93045,93046,93048,93050],{"class":201,"line":1563},[199,93047,1414],{"class":205},[199,93049,194],{"class":874},[199,93051,882],{"class":205},[19,93053,93055],{"id":93054},"_4172-节流","4.17.2 节流",[31,93057,93058],{},[55,93059],{"alt":57,"src":93060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[31,93062,93063],{},[55,93064],{"alt":57,"src":93065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[31,93067,93068],{},[49,93069,93070],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[31,93072,93073],{},"实现方式：",[176,93075,93076],{},[27,93077,93078],{},"lodash 提供的节流函数来处理",[31,93080,93081],{},"_.throttle(func,[wait=0],[options=])",[31,93083,93084],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[190,93086,93088],{"className":192,"code":93087,"language":194,"meta":57,"style":57},"\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",[196,93089,93090,93100,93114,93118,93126,93140,93160,93172,93180,93186,93196,93208,93220,93230,93242,93252,93262,93274,93278,93286,93294,93298,93306,93324,93342,93350,93368,93378,93386,93396,93400,93404,93408,93413,93418,93439,93447,93455,93459],{"__ignoreMap":57},[199,93091,93092,93094,93096,93098],{"class":201,"line":202},[199,93093,871],{"class":205},[199,93095,875],{"class":874},[199,93097,879],{"class":878},[199,93099,882],{"class":205},[199,93101,93102,93104,93106,93108,93110,93112],{"class":201,"line":36},[199,93103,887],{"class":205},[199,93105,194],{"class":874},[199,93107,892],{"class":878},[199,93109,895],{"class":205},[199,93111,899],{"class":898},[199,93113,882],{"class":205},[199,93115,93116],{"class":201,"line":73},[199,93117,907],{"emptyLinePlaceholder":906},[199,93119,93120,93122,93124],{"class":201,"line":333},[199,93121,887],{"class":205},[199,93123,914],{"class":874},[199,93125,882],{"class":205},[199,93127,93128,93130,93132,93134,93136,93138],{"class":201,"line":227},[199,93129,1824],{"class":205},[199,93131,924],{"class":874},[199,93133,927],{"class":878},[199,93135,895],{"class":205},[199,93137,932],{"class":898},[199,93139,882],{"class":205},[199,93141,93142,93144,93146,93148,93150,93152,93154,93156,93158],{"class":201,"line":238},[199,93143,1824],{"class":205},[199,93145,924],{"class":874},[199,93147,967],{"class":878},[199,93149,895],{"class":205},[199,93151,972],{"class":898},[199,93153,951],{"class":878},[199,93155,895],{"class":205},[199,93157,979],{"class":898},[199,93159,882],{"class":205},[199,93161,93162,93164,93166,93168,93170],{"class":201,"line":252},[199,93163,1824],{"class":205},[199,93165,988],{"class":874},[199,93167,991],{"class":205},[199,93169,988],{"class":874},[199,93171,882],{"class":205},[199,93173,93174,93176,93178],{"class":201,"line":388},[199,93175,1824],{"class":205},[199,93177,1002],{"class":874},[199,93179,882],{"class":205},[199,93181,93182,93184],{"class":201,"line":415},[199,93183,57011],{"class":878},[199,93185,1012],{"class":205},[199,93187,93188,93190,93192,93194],{"class":201,"line":426},[199,93189,74855],{"class":1018},[199,93191,1022],{"class":205},[199,93193,62764],{"class":1018},[199,93195,1028],{"class":205},[199,93197,93198,93200,93202,93204,93206],{"class":201,"line":1015},[199,93199,57030],{"class":1018},[199,93201,1022],{"class":205},[199,93203,4647],{"class":1018},[199,93205,1087],{"class":1086},[199,93207,1028],{"class":205},[199,93209,93210,93212,93214,93216,93218],{"class":201,"line":1031},[199,93211,57044],{"class":1018},[199,93213,1022],{"class":205},[199,93215,4647],{"class":1018},[199,93217,1087],{"class":1086},[199,93219,1028],{"class":205},[199,93221,93222,93224,93226,93228],{"class":201,"line":1043},[199,93223,57143],{"class":1018},[199,93225,1022],{"class":205},[199,93227,92265],{"class":1018},[199,93229,1028],{"class":205},[199,93231,93232,93234,93236,93238,93240],{"class":201,"line":1049},[199,93233,57181],{"class":1018},[199,93235,1022],{"class":205},[199,93237,3904],{"class":1018},[199,93239,1087],{"class":1086},[199,93241,1028],{"class":205},[199,93243,93244,93246,93248,93250],{"class":201,"line":1054},[199,93245,59675],{"class":1018},[199,93247,1022],{"class":205},[199,93249,63101],{"class":1018},[199,93251,1028],{"class":205},[199,93253,93254,93256,93258,93260],{"class":201,"line":1062},[199,93255,59545],{"class":1018},[199,93257,1022],{"class":205},[199,93259,1197],{"class":1018},[199,93261,1028],{"class":205},[199,93263,93264,93266,93268,93270,93272],{"class":201,"line":1075},[199,93265,92304],{"class":1018},[199,93267,1022],{"class":205},[199,93269,1909],{"class":1018},[199,93271,1087],{"class":1086},[199,93273,1028],{"class":205},[199,93275,93276],{"class":201,"line":1092},[199,93277,2097],{"class":205},[199,93279,93280,93282,93284],{"class":201,"line":1107},[199,93281,2112],{"class":205},[199,93283,1002],{"class":874},[199,93285,882],{"class":205},[199,93287,93288,93290,93292],{"class":201,"line":1128},[199,93289,1414],{"class":205},[199,93291,914],{"class":874},[199,93293,882],{"class":205},[199,93295,93296],{"class":201,"line":1146},[199,93297,907],{"emptyLinePlaceholder":906},[199,93299,93300,93302,93304],{"class":201,"line":1163},[199,93301,887],{"class":205},[199,93303,1431],{"class":874},[199,93305,882],{"class":205},[199,93307,93308,93310,93312,93314,93316,93318,93320,93322],{"class":201,"line":1176},[199,93309,1824],{"class":205},[199,93311,1220],{"class":874},[199,93313,55745],{"class":878},[199,93315,895],{"class":205},[199,93317,55750],{"class":898},[199,93319,57573],{"class":205},[199,93321,1220],{"class":874},[199,93323,882],{"class":205},[199,93325,93326,93328,93330,93332,93334,93336,93338,93340],{"class":201,"line":1189},[199,93327,1824],{"class":205},[199,93329,1446],{"class":874},[199,93331,57498],{"class":878},[199,93333,895],{"class":205},[199,93335,90533],{"class":898},[199,93337,57573],{"class":205},[199,93339,1446],{"class":874},[199,93341,882],{"class":205},[199,93343,93344,93346,93348],{"class":201,"line":1202},[199,93345,1824],{"class":205},[199,93347,1446],{"class":874},[199,93349,882],{"class":205},[199,93351,93352,93354,93356,93358,93360,93362,93364,93366],{"class":201,"line":1207},[199,93353,14084],{"class":1086},[199,93355,89192],{"class":1018},[199,93357,16425],{"class":1086},[199,93359,56655],{"class":205},[199,93361,56658],{"class":878},[199,93363,1537],{"class":205},[199,93365,92405],{"class":898},[199,93367,1594],{"class":205},[199,93369,93370,93372,93374,93376],{"class":201,"line":1212},[199,93371,1899],{"class":1086},[199,93373,1490],{"class":205},[199,93375,895],{"class":1086},[199,93377,50173],{"class":1018},[199,93379,93380,93382,93384],{"class":201,"line":1225},[199,93381,72343],{"class":1086},[199,93383,92424],{"class":878},[199,93385,13716],{"class":205},[199,93387,93388,93390,93392,93394],{"class":201,"line":1236},[199,93389,92431],{"class":205},[199,93391,895],{"class":1086},[199,93393,5936],{"class":205},[199,93395,5606],{"class":1086},[199,93397,93398],{"class":201,"line":1249},[199,93399,92442],{"class":1454},[199,93401,93402],{"class":201,"line":1262},[199,93403,2097],{"class":205},[199,93405,93406],{"class":201,"line":1275},[199,93407,92451],{"class":1454},[199,93409,93410],{"class":201,"line":1287},[199,93411,93412],{"class":1454},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[199,93414,93415],{"class":201,"line":1292},[199,93416,93417],{"class":1454},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[199,93419,93420,93422,93424,93426,93428,93430,93433,93435,93437],{"class":201,"line":1297},[199,93421,92466],{"class":205},[199,93423,60072],{"class":878},[199,93425,1537],{"class":205},[199,93427,92473],{"class":898},[199,93429,92476],{"class":205},[199,93431,93432],{"class":878},"throttle",[199,93434,92482],{"class":205},[199,93436,67333],{"class":1018},[199,93438,1554],{"class":205},[199,93440,93441,93443,93445],{"class":201,"line":1310},[199,93442,2112],{"class":205},[199,93444,1446],{"class":874},[199,93446,882],{"class":205},[199,93448,93449,93451,93453],{"class":201,"line":1315},[199,93450,1414],{"class":205},[199,93452,1431],{"class":874},[199,93454,882],{"class":205},[199,93456,93457],{"class":201,"line":1330},[199,93458,907],{"emptyLinePlaceholder":906},[199,93460,93461,93463,93465],{"class":201,"line":1335},[199,93462,1414],{"class":205},[199,93464,194],{"class":874},[199,93466,882],{"class":205},[176,93468,93469],{},[27,93470,93471],{},"手写一个节流函数来处理",[31,93473,73211],{},[31,93475,92525],{},[31,93477,93478],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[31,93480,93481],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[190,93483,93485],{"className":192,"code":93484,"language":194,"meta":57,"style":57},"\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",[196,93486,93487,93497,93511,93515,93523,93537,93557,93569,93577,93583,93593,93605,93617,93627,93639,93649,93659,93671,93675,93683,93691,93695,93703,93721,93739,93747,93765,93775,93783,93793,93797,93801,93805,93810,93815,93820,93825,93830,93835,93852,93858,93866,93877,93892,93899,93904,93909,93919,93924,93929,93934,93938,93942,93946,93966,93974,93982,93986],{"__ignoreMap":57},[199,93488,93489,93491,93493,93495],{"class":201,"line":202},[199,93490,871],{"class":205},[199,93492,875],{"class":874},[199,93494,879],{"class":878},[199,93496,882],{"class":205},[199,93498,93499,93501,93503,93505,93507,93509],{"class":201,"line":36},[199,93500,887],{"class":205},[199,93502,194],{"class":874},[199,93504,892],{"class":878},[199,93506,895],{"class":205},[199,93508,899],{"class":898},[199,93510,882],{"class":205},[199,93512,93513],{"class":201,"line":73},[199,93514,907],{"emptyLinePlaceholder":906},[199,93516,93517,93519,93521],{"class":201,"line":333},[199,93518,887],{"class":205},[199,93520,914],{"class":874},[199,93522,882],{"class":205},[199,93524,93525,93527,93529,93531,93533,93535],{"class":201,"line":227},[199,93526,1824],{"class":205},[199,93528,924],{"class":874},[199,93530,927],{"class":878},[199,93532,895],{"class":205},[199,93534,932],{"class":898},[199,93536,882],{"class":205},[199,93538,93539,93541,93543,93545,93547,93549,93551,93553,93555],{"class":201,"line":238},[199,93540,1824],{"class":205},[199,93542,924],{"class":874},[199,93544,967],{"class":878},[199,93546,895],{"class":205},[199,93548,972],{"class":898},[199,93550,951],{"class":878},[199,93552,895],{"class":205},[199,93554,979],{"class":898},[199,93556,882],{"class":205},[199,93558,93559,93561,93563,93565,93567],{"class":201,"line":252},[199,93560,1824],{"class":205},[199,93562,988],{"class":874},[199,93564,991],{"class":205},[199,93566,988],{"class":874},[199,93568,882],{"class":205},[199,93570,93571,93573,93575],{"class":201,"line":388},[199,93572,1824],{"class":205},[199,93574,1002],{"class":874},[199,93576,882],{"class":205},[199,93578,93579,93581],{"class":201,"line":415},[199,93580,57011],{"class":878},[199,93582,1012],{"class":205},[199,93584,93585,93587,93589,93591],{"class":201,"line":426},[199,93586,74855],{"class":1018},[199,93588,1022],{"class":205},[199,93590,62764],{"class":1018},[199,93592,1028],{"class":205},[199,93594,93595,93597,93599,93601,93603],{"class":201,"line":1015},[199,93596,57030],{"class":1018},[199,93598,1022],{"class":205},[199,93600,4647],{"class":1018},[199,93602,1087],{"class":1086},[199,93604,1028],{"class":205},[199,93606,93607,93609,93611,93613,93615],{"class":201,"line":1031},[199,93608,57044],{"class":1018},[199,93610,1022],{"class":205},[199,93612,4647],{"class":1018},[199,93614,1087],{"class":1086},[199,93616,1028],{"class":205},[199,93618,93619,93621,93623,93625],{"class":201,"line":1043},[199,93620,57143],{"class":1018},[199,93622,1022],{"class":205},[199,93624,92265],{"class":1018},[199,93626,1028],{"class":205},[199,93628,93629,93631,93633,93635,93637],{"class":201,"line":1049},[199,93630,57181],{"class":1018},[199,93632,1022],{"class":205},[199,93634,3904],{"class":1018},[199,93636,1087],{"class":1086},[199,93638,1028],{"class":205},[199,93640,93641,93643,93645,93647],{"class":201,"line":1054},[199,93642,59675],{"class":1018},[199,93644,1022],{"class":205},[199,93646,63101],{"class":1018},[199,93648,1028],{"class":205},[199,93650,93651,93653,93655,93657],{"class":201,"line":1062},[199,93652,59545],{"class":1018},[199,93654,1022],{"class":205},[199,93656,1197],{"class":1018},[199,93658,1028],{"class":205},[199,93660,93661,93663,93665,93667,93669],{"class":201,"line":1075},[199,93662,92304],{"class":1018},[199,93664,1022],{"class":205},[199,93666,1909],{"class":1018},[199,93668,1087],{"class":1086},[199,93670,1028],{"class":205},[199,93672,93673],{"class":201,"line":1092},[199,93674,2097],{"class":205},[199,93676,93677,93679,93681],{"class":201,"line":1107},[199,93678,2112],{"class":205},[199,93680,1002],{"class":874},[199,93682,882],{"class":205},[199,93684,93685,93687,93689],{"class":201,"line":1128},[199,93686,1414],{"class":205},[199,93688,914],{"class":874},[199,93690,882],{"class":205},[199,93692,93693],{"class":201,"line":1146},[199,93694,907],{"emptyLinePlaceholder":906},[199,93696,93697,93699,93701],{"class":201,"line":1163},[199,93698,887],{"class":205},[199,93700,1431],{"class":874},[199,93702,882],{"class":205},[199,93704,93705,93707,93709,93711,93713,93715,93717,93719],{"class":201,"line":1176},[199,93706,1824],{"class":205},[199,93708,1220],{"class":874},[199,93710,55745],{"class":878},[199,93712,895],{"class":205},[199,93714,55750],{"class":898},[199,93716,57573],{"class":205},[199,93718,1220],{"class":874},[199,93720,882],{"class":205},[199,93722,93723,93725,93727,93729,93731,93733,93735,93737],{"class":201,"line":1189},[199,93724,1824],{"class":205},[199,93726,1446],{"class":874},[199,93728,57498],{"class":878},[199,93730,895],{"class":205},[199,93732,90533],{"class":898},[199,93734,57573],{"class":205},[199,93736,1446],{"class":874},[199,93738,882],{"class":205},[199,93740,93741,93743,93745],{"class":201,"line":1202},[199,93742,1824],{"class":205},[199,93744,1446],{"class":874},[199,93746,882],{"class":205},[199,93748,93749,93751,93753,93755,93757,93759,93761,93763],{"class":201,"line":1207},[199,93750,14084],{"class":1086},[199,93752,89192],{"class":1018},[199,93754,16425],{"class":1086},[199,93756,56655],{"class":205},[199,93758,56658],{"class":878},[199,93760,1537],{"class":205},[199,93762,92405],{"class":898},[199,93764,1594],{"class":205},[199,93766,93767,93769,93771,93773],{"class":201,"line":1212},[199,93768,1899],{"class":1086},[199,93770,1490],{"class":205},[199,93772,895],{"class":1086},[199,93774,50173],{"class":1018},[199,93776,93777,93779,93781],{"class":201,"line":1225},[199,93778,72343],{"class":1086},[199,93780,92424],{"class":878},[199,93782,13716],{"class":205},[199,93784,93785,93787,93789,93791],{"class":201,"line":1236},[199,93786,92431],{"class":205},[199,93788,895],{"class":1086},[199,93790,5936],{"class":205},[199,93792,5606],{"class":1086},[199,93794,93795],{"class":201,"line":1249},[199,93796,92442],{"class":1454},[199,93798,93799],{"class":201,"line":1262},[199,93800,2097],{"class":205},[199,93802,93803],{"class":201,"line":1275},[199,93804,92451],{"class":1454},[199,93806,93807],{"class":201,"line":1287},[199,93808,93809],{"class":1454},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[199,93811,93812],{"class":201,"line":1292},[199,93813,93814],{"class":1454},"    \u002F\u002F 1.声明一个定时器变量\n",[199,93816,93817],{"class":201,"line":1297},[199,93818,93819],{"class":1454},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[199,93821,93822],{"class":201,"line":1310},[199,93823,93824],{"class":1454},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[199,93826,93827],{"class":201,"line":1315},[199,93828,93829],{"class":1454},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[199,93831,93832],{"class":201,"line":1330},[199,93833,93834],{"class":1454},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[199,93836,93837,93839,93842,93844,93846,93848,93850],{"class":201,"line":1335},[199,93838,72343],{"class":1086},[199,93840,93841],{"class":878}," throttle",[199,93843,1537],{"class":205},[199,93845,92896],{"class":8113},[199,93847,1912],{"class":205},[199,93849,3799],{"class":8113},[199,93851,1513],{"class":205},[199,93853,93854,93856],{"class":201,"line":1340},[199,93855,82031],{"class":1086},[199,93857,92909],{"class":205},[199,93859,93860,93862,93864],{"class":201,"line":1352},[199,93861,76241],{"class":1086},[199,93863,61177],{"class":1086},[199,93865,56711],{"class":205},[199,93867,93868,93870,93872,93874],{"class":201,"line":1367},[199,93869,2017],{"class":1086},[199,93871,1484],{"class":205},[199,93873,3313],{"class":1086},[199,93875,93876],{"class":205},"timer) {\n",[199,93878,93879,93882,93884,93886,93888,93890],{"class":201,"line":1381},[199,93880,93881],{"class":205},"          timer ",[199,93883,895],{"class":1086},[199,93885,92950],{"class":878},[199,93887,1537],{"class":205},[199,93889,56708],{"class":1086},[199,93891,56711],{"class":205},[199,93893,93894,93897],{"class":201,"line":1396},[199,93895,93896],{"class":878},"            fn",[199,93898,4892],{"class":205},[199,93900,93901],{"class":201,"line":1401},[199,93902,93903],{"class":1454},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[199,93905,93906],{"class":201,"line":1411},[199,93907,93908],{"class":1454},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[199,93910,93911,93914,93916],{"class":201,"line":1421},[199,93912,93913],{"class":205},"            timer ",[199,93915,895],{"class":1086},[199,93917,93918],{"class":1018}," null\n",[199,93920,93921],{"class":201,"line":1426},[199,93922,93923],{"class":1454},"            \u002F\u002F 不能用clearTimeout(timer)\n",[199,93925,93926],{"class":201,"line":1436},[199,93927,93928],{"class":1454},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[199,93930,93931],{"class":201,"line":1441},[199,93932,93933],{"class":205},"          }, t)\n",[199,93935,93936],{"class":201,"line":1451},[199,93937,1046],{"class":205},[199,93939,93940],{"class":201,"line":1458},[199,93941,2092],{"class":205},[199,93943,93944],{"class":201,"line":1464},[199,93945,2097],{"class":205},[199,93947,93948,93950,93952,93954,93956,93958,93960,93962,93964],{"class":201,"line":1478},[199,93949,92466],{"class":205},[199,93951,60072],{"class":878},[199,93953,1537],{"class":205},[199,93955,92473],{"class":898},[199,93957,1912],{"class":205},[199,93959,93432],{"class":878},[199,93961,92482],{"class":205},[199,93963,67333],{"class":1018},[199,93965,1554],{"class":205},[199,93967,93968,93970,93972],{"class":201,"line":1516},[199,93969,2112],{"class":205},[199,93971,1446],{"class":874},[199,93973,882],{"class":205},[199,93975,93976,93978,93980],{"class":201,"line":1522},[199,93977,1414],{"class":205},[199,93979,1431],{"class":874},[199,93981,882],{"class":205},[199,93983,93984],{"class":201,"line":1528},[199,93985,907],{"emptyLinePlaceholder":906},[199,93987,93988,93990,93992],{"class":201,"line":1557},[199,93989,1414],{"class":205},[199,93991,194],{"class":874},[199,93993,882],{"class":205},[19,93995,93997],{"id":93996},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[190,93999,94001],{"className":2763,"code":94000,"language":2765,"meta":57,"style":57},"\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",[196,94002,94003,94011,94019,94024,94029,94034,94039,94043,94051],{"__ignoreMap":57},[199,94004,94005,94007,94009],{"class":201,"line":202},[199,94006,887],{"class":205},[199,94008,1431],{"class":874},[199,94010,882],{"class":205},[199,94012,94013,94015,94017],{"class":201,"line":36},[199,94014,1824],{"class":205},[199,94016,1446],{"class":874},[199,94018,882],{"class":205},[199,94020,94021],{"class":201,"line":73},[199,94022,94023],{"class":205},"    let timer = null\n",[199,94025,94026],{"class":201,"line":333},[199,94027,94028],{"class":205},"    timer = setTimeout(() => {\n",[199,94030,94031],{"class":201,"line":227},[199,94032,94033],{"class":205},"      clearTimeout(timer)\n",[199,94035,94036],{"class":201,"line":238},[199,94037,94038],{"class":205},"      console.log(timer)\n",[199,94040,94041],{"class":201,"line":252},[199,94042,62484],{"class":205},[199,94044,94045,94047,94049],{"class":201,"line":388},[199,94046,2112],{"class":205},[199,94048,1446],{"class":874},[199,94050,882],{"class":205},[199,94052,94053,94055,94057],{"class":201,"line":415},[199,94054,1414],{"class":205},[199,94056,1431],{"class":874},[199,94058,882],{"class":205},[31,94060,94061],{},"输出为1",[31,94063,94064],{},"在开启的定时器里边写清除定时器",[31,94066,94067],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[19,94069,94071],{"id":94070},"_4174-节流综合案例","4.17.4 节流综合案例",[31,94073,94074],{},"页面打开，可以记录上一次的视频播放位置",[31,94076,94077],{},[55,94078],{"alt":57,"src":94079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[31,94081,94082],{},[55,94083],{"alt":57,"src":94084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[190,94086,94088],{"className":192,"code":94087,"language":194,"meta":57,"style":57},"\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",[196,94089,94090,94100,94114,94118,94126,94140,94160,94180,94202,94215,94223,94229,94239,94249,94259,94263,94267,94274,94287,94299,94303,94307,94317,94329,94343,94347,94351,94358,94368,94381,94393,94403,94413,94429,94441,94445,94449,94457,94467,94479,94489,94499,94509,94513,94517,94527,94538,94542,94550,94558,94562,94570,94585,94600,94615,94636,94644,94652,94667,94689,94697,94712,94738,94764,94790,94798,94806,94825,94833,94838,94857,94862,94880,94885,94890,94898,94903,94917,94925,94930,94947,94951,94956,94978,94982,94990,94998,95002],{"__ignoreMap":57},[199,94091,94092,94094,94096,94098],{"class":201,"line":202},[199,94093,871],{"class":205},[199,94095,875],{"class":874},[199,94097,879],{"class":878},[199,94099,882],{"class":205},[199,94101,94102,94104,94106,94108,94110,94112],{"class":201,"line":36},[199,94103,887],{"class":205},[199,94105,194],{"class":874},[199,94107,892],{"class":878},[199,94109,895],{"class":205},[199,94111,899],{"class":898},[199,94113,882],{"class":205},[199,94115,94116],{"class":201,"line":73},[199,94117,907],{"emptyLinePlaceholder":906},[199,94119,94120,94122,94124],{"class":201,"line":333},[199,94121,887],{"class":205},[199,94123,914],{"class":874},[199,94125,882],{"class":205},[199,94127,94128,94130,94132,94134,94136,94138],{"class":201,"line":227},[199,94129,1824],{"class":205},[199,94131,924],{"class":874},[199,94133,927],{"class":878},[199,94135,895],{"class":205},[199,94137,932],{"class":898},[199,94139,61386],{"class":205},[199,94141,94142,94144,94146,94148,94150,94152,94154,94156,94158],{"class":201,"line":238},[199,94143,1824],{"class":205},[199,94145,924],{"class":874},[199,94147,943],{"class":878},[199,94149,895],{"class":205},[199,94151,948],{"class":898},[199,94153,951],{"class":878},[199,94155,895],{"class":205},[199,94157,956],{"class":898},[199,94159,61386],{"class":205},[199,94161,94162,94164,94166,94168,94170,94172,94174,94176,94178],{"class":201,"line":252},[199,94163,1824],{"class":205},[199,94165,924],{"class":874},[199,94167,967],{"class":878},[199,94169,895],{"class":205},[199,94171,972],{"class":898},[199,94173,951],{"class":878},[199,94175,895],{"class":205},[199,94177,979],{"class":898},[199,94179,61386],{"class":205},[199,94181,94182,94184,94186,94188,94190,94193,94195,94197,94200],{"class":201,"line":388},[199,94183,1824],{"class":205},[199,94185,924],{"class":874},[199,94187,967],{"class":878},[199,94189,895],{"class":205},[199,94191,94192],{"class":898},"\"referrer\"",[199,94194,951],{"class":878},[199,94196,895],{"class":205},[199,94198,94199],{"class":898},"\"never\"",[199,94201,61386],{"class":205},[199,94203,94204,94206,94208,94211,94213],{"class":201,"line":415},[199,94205,1824],{"class":205},[199,94207,988],{"class":874},[199,94209,94210],{"class":205},">综合案例\u003C\u002F",[199,94212,988],{"class":874},[199,94214,882],{"class":205},[199,94216,94217,94219,94221],{"class":201,"line":426},[199,94218,1824],{"class":205},[199,94220,1002],{"class":874},[199,94222,882],{"class":205},[199,94224,94225,94227],{"class":201,"line":1015},[199,94226,9300],{"class":874},[199,94228,1012],{"class":205},[199,94230,94231,94233,94235,94237],{"class":201,"line":1031},[199,94232,56954],{"class":1018},[199,94234,1022],{"class":205},[199,94236,1025],{"class":1018},[199,94238,1028],{"class":205},[199,94240,94241,94243,94245,94247],{"class":201,"line":1043},[199,94242,56965],{"class":1018},[199,94244,1022],{"class":205},[199,94246,1025],{"class":1018},[199,94248,1028],{"class":205},[199,94250,94251,94253,94255,94257],{"class":201,"line":1049},[199,94252,74855],{"class":1018},[199,94254,1022],{"class":205},[199,94256,62764],{"class":1018},[199,94258,1028],{"class":205},[199,94260,94261],{"class":201,"line":1054},[199,94262,2097],{"class":205},[199,94264,94265],{"class":201,"line":1062},[199,94266,907],{"emptyLinePlaceholder":906},[199,94268,94269,94272],{"class":201,"line":1075},[199,94270,94271],{"class":878},"    .container",[199,94273,1012],{"class":205},[199,94275,94276,94278,94280,94283,94285],{"class":201,"line":1092},[199,94277,57030],{"class":1018},[199,94279,1022],{"class":205},[199,94281,94282],{"class":1018},"1200",[199,94284,1087],{"class":1086},[199,94286,1028],{"class":205},[199,94288,94289,94291,94293,94295,94297],{"class":201,"line":1107},[199,94290,56965],{"class":1018},[199,94292,1022],{"class":205},[199,94294,1025],{"class":1018},[199,94296,1158],{"class":1018},[199,94298,1028],{"class":205},[199,94300,94301],{"class":201,"line":1128},[199,94302,2097],{"class":205},[199,94304,94305],{"class":201,"line":1146},[199,94306,907],{"emptyLinePlaceholder":906},[199,94308,94309,94312,94315],{"class":201,"line":1163},[199,94310,94311],{"class":878},"    .video",[199,94313,94314],{"class":874}," video",[199,94316,1012],{"class":205},[199,94318,94319,94321,94323,94325,94327],{"class":201,"line":1176},[199,94320,57030],{"class":1018},[199,94322,1022],{"class":205},[199,94324,3396],{"class":1018},[199,94326,3412],{"class":1086},[199,94328,1028],{"class":205},[199,94330,94331,94333,94335,94337,94339,94341],{"class":201,"line":1189},[199,94332,56954],{"class":1018},[199,94334,1022],{"class":205},[199,94336,3779],{"class":1018},[199,94338,1087],{"class":1086},[199,94340,1621],{"class":1018},[199,94342,1028],{"class":205},[199,94344,94345],{"class":201,"line":1202},[199,94346,2097],{"class":205},[199,94348,94349],{"class":201,"line":1207},[199,94350,907],{"emptyLinePlaceholder":906},[199,94352,94353,94356],{"class":201,"line":1212},[199,94354,94355],{"class":878},"    .elevator",[199,94357,1012],{"class":205},[199,94359,94360,94362,94364,94366],{"class":201,"line":1225},[199,94361,57018],{"class":1018},[199,94363,1022],{"class":205},[199,94365,88492],{"class":1018},[199,94367,1028],{"class":205},[199,94369,94370,94372,94374,94377,94379],{"class":201,"line":1236},[199,94371,57206],{"class":1018},[199,94373,1022],{"class":205},[199,94375,94376],{"class":1018},"280",[199,94378,1087],{"class":1086},[199,94380,1028],{"class":205},[199,94382,94383,94385,94387,94389,94391],{"class":201,"line":1249},[199,94384,88686],{"class":1018},[199,94386,1022],{"class":205},[199,94388,3779],{"class":1018},[199,94390,1087],{"class":1086},[199,94392,1028],{"class":205},[199,94394,94395,94397,94399,94401],{"class":201,"line":1262},[199,94396,88499],{"class":1018},[199,94398,1022],{"class":205},[199,94400,88504],{"class":1018},[199,94402,1028],{"class":205},[199,94404,94405,94407,94409,94411],{"class":201,"line":1275},[199,94406,63980],{"class":1018},[199,94408,1022],{"class":205},[199,94410,63101],{"class":1018},[199,94412,1028],{"class":205},[199,94414,94415,94417,94419,94421,94423,94425,94427],{"class":201,"line":1287},[199,94416,64236],{"class":1018},[199,94418,1022],{"class":205},[199,94420,1115],{"class":1018},[199,94422,1087],{"class":1086},[199,94424,1120],{"class":1018},[199,94426,64503],{"class":1018},[199,94428,1028],{"class":205},[199,94430,94431,94433,94435,94437,94439],{"class":201,"line":1292},[199,94432,57030],{"class":1018},[199,94434,1022],{"class":205},[199,94436,3985],{"class":1018},[199,94438,1087],{"class":1086},[199,94440,1028],{"class":205},[199,94442,94443],{"class":201,"line":1297},[199,94444,2097],{"class":205},[199,94446,94447],{"class":201,"line":1310},[199,94448,907],{"emptyLinePlaceholder":906},[199,94450,94451,94453,94455],{"class":201,"line":1315},[199,94452,94355],{"class":878},[199,94454,4338],{"class":874},[199,94456,1012],{"class":205},[199,94458,94459,94461,94463,94465],{"class":201,"line":1330},[199,94460,57268],{"class":1018},[199,94462,1022],{"class":205},[199,94464,63128],{"class":1018},[199,94466,1028],{"class":205},[199,94468,94469,94471,94473,94475,94477],{"class":201,"line":1335},[199,94470,56954],{"class":1018},[199,94472,1022],{"class":205},[199,94474,3528],{"class":1018},[199,94476,1087],{"class":1086},[199,94478,1028],{"class":205},[199,94480,94481,94483,94485,94487],{"class":201,"line":1340},[199,94482,66229],{"class":1018},[199,94484,1022],{"class":205},[199,94486,56996],{"class":1018},[199,94488,1028],{"class":205},[199,94490,94491,94493,94495,94497],{"class":201,"line":1352},[199,94492,59545],{"class":1018},[199,94494,1022],{"class":205},[199,94496,1197],{"class":1018},[199,94498,1028],{"class":205},[199,94500,94501,94503,94505,94507],{"class":201,"line":1367},[199,94502,59675],{"class":1018},[199,94504,1022],{"class":205},[199,94506,64329],{"class":1018},[199,94508,1028],{"class":205},[199,94510,94511],{"class":201,"line":1381},[199,94512,2097],{"class":205},[199,94514,94515],{"class":201,"line":1396},[199,94516,907],{"emptyLinePlaceholder":906},[199,94518,94519,94521,94523,94525],{"class":201,"line":1401},[199,94520,94355],{"class":878},[199,94522,4338],{"class":874},[199,94524,66283],{"class":878},[199,94526,1012],{"class":205},[199,94528,94529,94531,94533,94536],{"class":201,"line":1411},[199,94530,59675],{"class":1018},[199,94532,1022],{"class":205},[199,94534,94535],{"class":1018},"#1286ff",[199,94537,1028],{"class":205},[199,94539,94540],{"class":201,"line":1421},[199,94541,2097],{"class":205},[199,94543,94544,94546,94548],{"class":201,"line":1426},[199,94545,2112],{"class":205},[199,94547,1002],{"class":874},[199,94549,882],{"class":205},[199,94551,94552,94554,94556],{"class":201,"line":1436},[199,94553,1414],{"class":205},[199,94555,914],{"class":874},[199,94557,882],{"class":205},[199,94559,94560],{"class":201,"line":1441},[199,94561,907],{"emptyLinePlaceholder":906},[199,94563,94564,94566,94568],{"class":201,"line":1451},[199,94565,887],{"class":205},[199,94567,1431],{"class":874},[199,94569,882],{"class":205},[199,94571,94572,94574,94576,94578,94580,94583],{"class":201,"line":1458},[199,94573,1824],{"class":205},[199,94575,1220],{"class":874},[199,94577,55745],{"class":878},[199,94579,895],{"class":205},[199,94581,94582],{"class":898},"\"container\"",[199,94584,882],{"class":205},[199,94586,94587,94589,94591,94593,94595,94598],{"class":201,"line":1464},[199,94588,921],{"class":205},[199,94590,1220],{"class":874},[199,94592,55745],{"class":878},[199,94594,895],{"class":205},[199,94596,94597],{"class":898},"\"header\"",[199,94599,882],{"class":205},[199,94601,94602,94604,94606,94608,94610,94613],{"class":201,"line":1478},[199,94603,57493],{"class":205},[199,94605,2867],{"class":874},[199,94607,63316],{"class":878},[199,94609,895],{"class":205},[199,94611,94612],{"class":898},"\"http:\u002F\u002Fpip.itcast.cn\"",[199,94614,882],{"class":205},[199,94616,94617,94619,94621,94623,94625,94628,94630,94632,94634],{"class":201,"line":1516},[199,94618,57561],{"class":205},[199,94620,55],{"class":874},[199,94622,57498],{"class":878},[199,94624,895],{"class":205},[199,94626,94627],{"class":898},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[199,94629,57506],{"class":878},[199,94631,895],{"class":205},[199,94633,10549],{"class":898},[199,94635,61386],{"class":205},[199,94637,94638,94640,94642],{"class":201,"line":1522},[199,94639,57666],{"class":205},[199,94641,2867],{"class":874},[199,94643,882],{"class":205},[199,94645,94646,94648,94650],{"class":201,"line":1528},[199,94647,1404],{"class":205},[199,94649,1220],{"class":874},[199,94651,882],{"class":205},[199,94653,94654,94656,94658,94660,94662,94665],{"class":201,"line":1557},[199,94655,921],{"class":205},[199,94657,1220],{"class":874},[199,94659,55745],{"class":878},[199,94661,895],{"class":205},[199,94663,94664],{"class":898},"\"video\"",[199,94666,882],{"class":205},[199,94668,94669,94671,94673,94675,94677,94680,94683,94685,94687],{"class":201,"line":1563},[199,94670,57493],{"class":205},[199,94672,31026],{"class":874},[199,94674,57498],{"class":878},[199,94676,895],{"class":205},[199,94678,94679],{"class":898},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[199,94681,94682],{"class":878}," controls",[199,94684,57573],{"class":205},[199,94686,31026],{"class":874},[199,94688,882],{"class":205},[199,94690,94691,94693,94695],{"class":201,"line":1568},[199,94692,1404],{"class":205},[199,94694,1220],{"class":874},[199,94696,882],{"class":205},[199,94698,94699,94701,94703,94705,94707,94710],{"class":201,"line":1574},[199,94700,921],{"class":205},[199,94702,1220],{"class":874},[199,94704,55745],{"class":878},[199,94706,895],{"class":205},[199,94708,94709],{"class":898},"\"elevator\"",[199,94711,882],{"class":205},[199,94713,94714,94716,94718,94720,94722,94724,94727,94729,94731,94734,94736],{"class":201,"line":1580},[199,94715,57493],{"class":205},[199,94717,2867],{"class":874},[199,94719,63316],{"class":878},[199,94721,895],{"class":205},[199,94723,66495],{"class":898},[199,94725,94726],{"class":878}," data-ref",[199,94728,895],{"class":205},[199,94730,94664],{"class":898},[199,94732,94733],{"class":205},">视频介绍\u003C\u002F",[199,94735,2867],{"class":874},[199,94737,882],{"class":205},[199,94739,94740,94742,94744,94746,94748,94750,94752,94754,94757,94760,94762],{"class":201,"line":1597},[199,94741,57493],{"class":205},[199,94743,2867],{"class":874},[199,94745,63316],{"class":878},[199,94747,895],{"class":205},[199,94749,66495],{"class":898},[199,94751,94726],{"class":878},[199,94753,895],{"class":205},[199,94755,94756],{"class":898},"\"intro\"",[199,94758,94759],{"class":205},">课程简介\u003C\u002F",[199,94761,2867],{"class":874},[199,94763,882],{"class":205},[199,94765,94766,94768,94770,94772,94774,94776,94778,94780,94783,94786,94788],{"class":201,"line":1602},[199,94767,57493],{"class":205},[199,94769,2867],{"class":874},[199,94771,63316],{"class":878},[199,94773,895],{"class":205},[199,94775,66495],{"class":898},[199,94777,94726],{"class":878},[199,94779,895],{"class":205},[199,94781,94782],{"class":898},"\"outline\"",[199,94784,94785],{"class":205},">评论列表\u003C\u002F",[199,94787,2867],{"class":874},[199,94789,882],{"class":205},[199,94791,94792,94794,94796],{"class":201,"line":1608},[199,94793,1404],{"class":205},[199,94795,1220],{"class":874},[199,94797,882],{"class":205},[199,94799,94800,94802,94804],{"class":201,"line":1640},[199,94801,2112],{"class":205},[199,94803,1220],{"class":874},[199,94805,882],{"class":205},[199,94807,94808,94810,94812,94814,94816,94819,94821,94823],{"class":201,"line":1653},[199,94809,1824],{"class":205},[199,94811,1446],{"class":874},[199,94813,57498],{"class":878},[199,94815,895],{"class":205},[199,94817,94818],{"class":898},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[199,94820,57573],{"class":205},[199,94822,1446],{"class":874},[199,94824,882],{"class":205},[199,94826,94827,94829,94831],{"class":201,"line":1673},[199,94828,1824],{"class":205},[199,94830,1446],{"class":874},[199,94832,882],{"class":205},[199,94834,94835],{"class":201,"line":1690},[199,94836,94837],{"class":1454},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[199,94839,94840,94842,94844,94846,94848,94850,94852,94855],{"class":201,"line":1706},[199,94841,14084],{"class":1086},[199,94843,94314],{"class":1018},[199,94845,16425],{"class":1086},[199,94847,56655],{"class":205},[199,94849,56658],{"class":878},[199,94851,1537],{"class":205},[199,94853,94854],{"class":898},"'video'",[199,94856,1594],{"class":205},[199,94858,94859],{"class":201,"line":1712},[199,94860,94861],{"class":1454},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[199,94863,94864,94867,94869,94871,94873,94876,94878],{"class":201,"line":1720},[199,94865,94866],{"class":205},"    video.ontimeupdate ",[199,94868,895],{"class":1086},[199,94870,90614],{"class":205},[199,94872,93432],{"class":878},[199,94874,94875],{"class":205},"(() ",[199,94877,86981],{"class":1086},[199,94879,1012],{"class":205},[199,94881,94882],{"class":201,"line":1725},[199,94883,94884],{"class":1454},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[199,94886,94887],{"class":201,"line":1731},[199,94888,94889],{"class":1454},"      \u002F\u002F 控制台输出当前的时间\n",[199,94891,94892,94895],{"class":201,"line":1745},[199,94893,94894],{"class":1454},"      \u002F\u002F console.log(video.currentTime)",[199,94896,94897],{"class":1454},"  \u002F\u002F获得当前的视频时间\n",[199,94899,94900],{"class":201,"line":1754},[199,94901,94902],{"class":1454},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[199,94904,94905,94907,94909,94911,94914],{"class":201,"line":1763},[199,94906,76942],{"class":205},[199,94908,73913],{"class":878},[199,94910,1537],{"class":205},[199,94912,94913],{"class":898},"'currentTime'",[199,94915,94916],{"class":205},", video.currentTime)\n",[199,94918,94919,94921,94923],{"class":201,"line":1768},[199,94920,56794],{"class":205},[199,94922,9307],{"class":1018},[199,94924,1594],{"class":205},[199,94926,94927],{"class":201,"line":19628},[199,94928,94929],{"class":1454},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[199,94931,94932,94935,94938,94940,94943,94945],{"class":201,"line":19641},[199,94933,94934],{"class":205},"    video.",[199,94936,94937],{"class":878},"onloadeddata",[199,94939,16425],{"class":1086},[199,94941,94942],{"class":205}," () ",[199,94944,86981],{"class":1086},[199,94946,1012],{"class":205},[199,94948,94949],{"class":201,"line":19646},[199,94950,62271],{"class":1454},[199,94952,94953],{"class":201,"line":19660},[199,94954,94955],{"class":1454},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[199,94957,94958,94961,94963,94966,94968,94970,94972,94974,94976],{"class":201,"line":19665},[199,94959,94960],{"class":205},"      video.currentTime ",[199,94962,895],{"class":1086},[199,94964,94965],{"class":205}," localStorage.",[199,94967,73944],{"class":878},[199,94969,1537],{"class":205},[199,94971,94913],{"class":898},[199,94973,16575],{"class":205},[199,94975,73616],{"class":1086},[199,94977,50173],{"class":1018},[199,94979,94980],{"class":201,"line":19671},[199,94981,2097],{"class":205},[199,94983,94984,94986,94988],{"class":201,"line":19676},[199,94985,2112],{"class":205},[199,94987,1446],{"class":874},[199,94989,882],{"class":205},[199,94991,94992,94994,94996],{"class":201,"line":19690},[199,94993,1414],{"class":205},[199,94995,1431],{"class":874},[199,94997,882],{"class":205},[199,94999,95000],{"class":201,"line":19695},[199,95001,907],{"emptyLinePlaceholder":906},[199,95003,95004,95006,95008],{"class":201,"line":19700},[199,95005,1414],{"class":205},[199,95007,194],{"class":874},[199,95009,882],{"class":205},[1002,95011,95012],{},"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":57,"searchDepth":36,"depth":36,"links":95014},[95015,95020,95024,95025,95026,95031,95036,95037,95038,95039,95046,95051,95052,95062,95066,95067,95071],{"id":78950,"depth":36,"text":78951,"children":95016},[95017,95018,95019],{"id":78954,"depth":73,"text":78955},{"id":78979,"depth":73,"text":78980},{"id":78991,"depth":73,"text":78992},{"id":79003,"depth":36,"text":79004,"children":95021},[95022,95023],{"id":79007,"depth":73,"text":79008},{"id":79022,"depth":73,"text":79023},{"id":79074,"depth":36,"text":79075},{"id":79118,"depth":36,"text":79119},{"id":79135,"depth":36,"text":79136,"children":95027},[95028,95029,95030],{"id":79139,"depth":73,"text":79140},{"id":79152,"depth":73,"text":79153},{"id":79257,"depth":73,"text":79258},{"id":79546,"depth":36,"text":79547,"children":95032},[95033,95034,95035],{"id":79550,"depth":73,"text":79551},{"id":79993,"depth":73,"text":79994},{"id":80404,"depth":73,"text":80405},{"id":80467,"depth":36,"text":80468},{"id":80546,"depth":36,"text":80547},{"id":80639,"depth":36,"text":80640},{"id":82484,"depth":36,"text":82485,"children":95040},[95041,95042,95043,95044,95045],{"id":82488,"depth":73,"text":82489},{"id":82500,"depth":73,"text":82501},{"id":82719,"depth":73,"text":82720},{"id":82737,"depth":73,"text":82738},{"id":82797,"depth":73,"text":82798},{"id":87065,"depth":36,"text":87066,"children":95047},[95048,95049,95050],{"id":87069,"depth":73,"text":87070},{"id":87087,"depth":73,"text":87088},{"id":87113,"depth":73,"text":87114},{"id":87122,"depth":36,"text":87123},{"id":87144,"depth":36,"text":87145,"children":95053},[95054,95055,95056,95057,95058,95059,95060,95061],{"id":87148,"depth":73,"text":87149},{"id":87409,"depth":73,"text":87410},{"id":87595,"depth":73,"text":87596},{"id":87962,"depth":73,"text":87963},{"id":88078,"depth":73,"text":88079},{"id":88114,"depth":73,"text":88115},{"id":88161,"depth":73,"text":88162},{"id":88195,"depth":73,"text":88196},{"id":89558,"depth":36,"text":89559,"children":95063},[95064,95065],{"id":89562,"depth":73,"text":89563},{"id":89599,"depth":73,"text":89600},{"id":90954,"depth":36,"text":90955},{"id":91325,"depth":36,"text":91326,"children":95068},[95069,95070],{"id":91329,"depth":73,"text":91330},{"id":91363,"depth":73,"text":91364},{"id":92092,"depth":36,"text":92093,"children":95072},[95073,95074,95075,95076],{"id":92096,"depth":73,"text":92097},{"id":93054,"depth":73,"text":93055},{"id":93996,"depth":73,"text":93997},{"id":94070,"depth":73,"text":94071},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78939,"description":3023},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95083,"title":95084,"body":95085,"description":95096,"extension":3024,"meta":95097,"navigation":906,"path":95099,"seo":95100,"stem":95101,"__hash__":95102},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95086,"toc":95094},[95087],[31,95088,95089,95090],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2867,95091,95092],{"href":95092,"rel":95093},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[2871],{"title":57,"searchDepth":36,"depth":36,"links":95095},[],"三件套第三套学习",{"category":95098},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95084,"description":95096},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95104,"title":95105,"body":95106,"description":3023,"extension":3024,"meta":95211,"navigation":906,"path":95212,"seo":95213,"stem":95214,"__hash__":95215},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95107,"toc":95206},[95108,95115,95118,95121,95124,95128,95137,95140,95143,95147,95156,95159,95163,95166,95186,95189,95203],[31,95109,95110],{},[2867,95111,95114],{"href":95112,"rel":95113},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[2871],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95116,95105],{"id":95117},"_1安装",[31,95119,95120],{},"numpy是科学计算基础库,底层是C语言",[31,95122,95123],{},"三种方式：",[14,95125,95127],{"id":95126},"_11-通过pip安装","1.1 通过pip安装",[190,95129,95131],{"className":33221,"code":95130,"language":33223,"meta":57,"style":57},"pip install numpy\n",[196,95132,95133],{"__ignoreMap":57},[199,95134,95135],{"class":201,"line":202},[199,95136,95130],{"class":205},[31,95138,95139],{},"首选方式，自动处理依赖项",[31,95141,95142],{},"在提示系统命令符中使用cmd",[14,95144,95146],{"id":95145},"_12-通过anaconda安装","1.2 通过Anaconda安装",[190,95148,95150],{"className":33221,"code":95149,"language":33223,"meta":57,"style":57},"conda install numpy\n",[196,95151,95152],{"__ignoreMap":57},[199,95153,95154],{"class":201,"line":202},[199,95155,95149],{"class":205},[31,95157,95158],{},"自动解决环境依赖",[14,95160,95162],{"id":95161},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[31,95164,95165],{},"对于Debian\u002FUbuntu",[190,95167,95169],{"className":33221,"code":95168,"language":33223,"meta":57,"style":57},"sudo apt-get install python3-numpy\n",[196,95170,95171],{"__ignoreMap":57},[199,95172,95173,95176,95178,95181,95183],{"class":201,"line":202},[199,95174,95175],{"class":205},"sudo apt",[199,95177,1998],{"class":1086},[199,95179,95180],{"class":205},"get install python3",[199,95182,1998],{"class":1086},[199,95184,95185],{"class":205},"numpy\n",[31,95187,95188],{},"对于Fedora:",[190,95190,95192],{"className":33221,"code":95191,"language":33223,"meta":57,"style":57},"sudo dnf install python3-numpy\n",[196,95193,95194],{"__ignoreMap":57},[199,95195,95196,95199,95201],{"class":201,"line":202},[199,95197,95198],{"class":205},"sudo dnf install python3",[199,95200,1998],{"class":1086},[199,95202,95185],{"class":205},[1002,95204,95205],{},"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":57,"searchDepth":36,"depth":36,"links":95207},[95208,95209,95210],{"id":95126,"depth":36,"text":95127},{"id":95145,"depth":36,"text":95146},{"id":95161,"depth":36,"text":95162},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95105,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95217,"title":95218,"body":95219,"description":3023,"extension":3024,"meta":95332,"navigation":906,"path":95333,"seo":95334,"stem":95335,"__hash__":95336},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95220,"toc":95330},[95221,95224,95227,95230,95233,95236,95239,95242,95245,95248,95324,95327],[10,95222,95218],{"id":95223},"_10算数函数",[31,95225,95226],{},"加减乘除运算跟python基础语法没区别",[31,95228,95229],{},"除了python那种方法外还可以使用函数",[31,95231,95232],{},"加：np.add(a,b)",[31,95234,95235],{},"减：np.subtract(a,b)",[31,95237,95238],{},"乘：np.multiply(a,b)",[31,95240,95241],{},"除：np.divide(a,b) == a\u002Fb",[31,95243,95244],{},"取余：np.mod(a,b) == a%b",[31,95246,95247],{},"必须会的用法：",[190,95249,95251],{"className":33221,"code":95250,"language":33223,"meta":57,"style":57},"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",[196,95252,95253,95275,95296,95306,95319],{"__ignoreMap":57},[199,95254,95255,95257,95259,95262,95264,95267,95269,95271,95273],{"class":201,"line":202},[199,95256,2867],{"class":205},[199,95258,895],{"class":1086},[199,95260,95261],{"class":205},"np.arange(",[199,95263,3503],{"class":1018},[199,95265,95266],{"class":205},").reshape(",[199,95268,1920],{"class":1018},[199,95270,3461],{"class":205},[199,95272,1920],{"class":1018},[199,95274,1594],{"class":205},[199,95276,95277,95279,95281,95284,95286,95288,95290,95292,95294],{"class":201,"line":36},[199,95278,3349],{"class":205},[199,95280,895],{"class":1086},[199,95282,95283],{"class":205},"np.array([",[199,95285,3528],{"class":1018},[199,95287,3461],{"class":205},[199,95289,3528],{"class":1018},[199,95291,3461],{"class":205},[199,95293,3528],{"class":1018},[199,95295,7554],{"class":205},[199,95297,95298,95301,95303],{"class":201,"line":73},[199,95299,95300],{"class":205},"result",[199,95302,895],{"class":1086},[199,95304,95305],{"class":205},"np.empty_like(a)\n",[199,95307,95308,95311,95314,95316],{"class":201,"line":333},[199,95309,95310],{"class":205},"np.add(a,b,",[199,95312,95313],{"class":8113},"out",[199,95315,895],{"class":1086},[199,95317,95318],{"class":205},"result)\n",[199,95320,95321],{"class":201,"line":227},[199,95322,95323],{"class":205},"result\n",[31,95325,95326],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1002,95328,95329],{},"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":57,"searchDepth":36,"depth":36,"links":95331},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95218,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95338,"title":95339,"body":95340,"description":3023,"extension":3024,"meta":96102,"navigation":906,"path":96103,"seo":96104,"stem":96105,"__hash__":96106},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95341,"toc":96089},[95342,95345,95348,95351,95355,95394,95398,95442,95502,95506,95509,95548,95551,95596,95600,95636,95640,95709,95713,95777,95781,95784,95787,95790,95793,95829,95833,95873,95877,95949,95952,95956,96019,96023,96086],[10,95343,95339],{"id":95344},"_11统计函数",[31,95346,95347],{},"sum max min mean",[31,95349,95350],{},"这些有axis参数，可以指定方向",[14,95352,95354],{"id":95353},"_111-sum求和函数","11.1 sum()求和函数",[190,95356,95358],{"className":33221,"code":95357,"language":33223,"meta":57,"style":57},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[196,95359,95360,95365,95386],{"__ignoreMap":57},[199,95361,95362],{"class":201,"line":202},[199,95363,95364],{"class":1454},"#创建一维数组\n",[199,95366,95367,95369,95371,95374,95376,95378,95380,95382,95384],{"class":201,"line":36},[199,95368,2867],{"class":205},[199,95370,895],{"class":1086},[199,95372,95373],{"class":205},"np.random.randint(",[199,95375,1115],{"class":1018},[199,95377,3461],{"class":205},[199,95379,3396],{"class":1018},[199,95381,3461],{"class":205},[199,95383,3779],{"class":1018},[199,95385,1594],{"class":205},[199,95387,95388,95391],{"class":201,"line":73},[199,95389,95390],{"class":205},"np.sum(a)",[199,95392,95393],{"class":1454},"#求和\n",[14,95395,95397],{"id":95396},"_112-max求最大值函数","11.2 max()求最大值函数",[190,95399,95401],{"className":33221,"code":95400,"language":33223,"meta":57,"style":57},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[196,95402,95403,95407,95427,95432,95437],{"__ignoreMap":57},[199,95404,95405],{"class":201,"line":202},[199,95406,95364],{"class":1454},[199,95408,95409,95411,95413,95415,95417,95419,95421,95423,95425],{"class":201,"line":36},[199,95410,2867],{"class":205},[199,95412,895],{"class":1086},[199,95414,95373],{"class":205},[199,95416,1115],{"class":1018},[199,95418,3461],{"class":205},[199,95420,3396],{"class":1018},[199,95422,3461],{"class":205},[199,95424,3779],{"class":1018},[199,95426,1594],{"class":205},[199,95428,95429],{"class":201,"line":73},[199,95430,95431],{"class":205},"np.max(a)\n",[199,95433,95434],{"class":201,"line":333},[199,95435,95436],{"class":1454},"#最大索引(求最大元素的索引)arg\n",[199,95438,95439],{"class":201,"line":227},[199,95440,95441],{"class":205},"np.argmax(a)\n",[190,95443,95445],{"className":33221,"code":95444,"language":33223,"meta":57,"style":57},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[196,95446,95447,95468,95488,95492],{"__ignoreMap":57},[199,95448,95449,95451,95453,95456,95458,95460,95462,95464,95466],{"class":201,"line":202},[199,95450,13782],{"class":205},[199,95452,895],{"class":1086},[199,95454,95455],{"class":205}," np.array([",[199,95457,1115],{"class":1018},[199,95459,1912],{"class":205},[199,95461,1909],{"class":1018},[199,95463,1912],{"class":205},[199,95465,1920],{"class":1018},[199,95467,7554],{"class":205},[199,95469,95470,95472,95474,95476,95478,95480,95482,95484,95486],{"class":201,"line":36},[199,95471,13808],{"class":205},[199,95473,895],{"class":1086},[199,95475,95455],{"class":205},[199,95477,1920],{"class":1018},[199,95479,1912],{"class":205},[199,95481,1925],{"class":1018},[199,95483,1912],{"class":205},[199,95485,1915],{"class":1018},[199,95487,7554],{"class":205},[199,95489,95490],{"class":201,"line":73},[199,95491,907],{"emptyLinePlaceholder":906},[199,95493,95494,95496,95499],{"class":201,"line":333},[199,95495,33258],{"class":1018},[199,95497,95498],{"class":205},"(np.maximum(a, b))   ",[199,95500,95501],{"class":1454},"# [3 5 4]，每个位置上取较大值\n",[14,95503,95505],{"id":95504},"_113-mean求平均值函数","11.3 mean()求平均值函数",[31,95507,95508],{},"①一维数组：",[190,95510,95512],{"className":33221,"code":95511,"language":33223,"meta":57,"style":57},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[196,95513,95514,95518,95538,95543],{"__ignoreMap":57},[199,95515,95516],{"class":201,"line":202},[199,95517,95364],{"class":1454},[199,95519,95520,95522,95524,95526,95528,95530,95532,95534,95536],{"class":201,"line":36},[199,95521,2867],{"class":205},[199,95523,895],{"class":1086},[199,95525,95373],{"class":205},[199,95527,1115],{"class":1018},[199,95529,3461],{"class":205},[199,95531,3396],{"class":1018},[199,95533,3461],{"class":205},[199,95535,3779],{"class":1018},[199,95537,1594],{"class":205},[199,95539,95540],{"class":201,"line":73},[199,95541,95542],{"class":1454},"#求平均值\n",[199,95544,95545],{"class":201,"line":333},[199,95546,95547],{"class":205},"np.mean(a)\n",[31,95549,95550],{},"②二维数组",[190,95552,95554],{"className":33221,"code":95553,"language":33223,"meta":57,"style":57},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[196,95555,95556,95561,95586,95591],{"__ignoreMap":57},[199,95557,95558],{"class":201,"line":202},[199,95559,95560],{"class":1454},"#二维数组\n",[199,95562,95563,95566,95568,95570,95572,95574,95576,95578,95580,95582,95584],{"class":201,"line":36},[199,95564,95565],{"class":205},"aa",[199,95567,895],{"class":1086},[199,95569,95261],{"class":205},[199,95571,1115],{"class":1018},[199,95573,3461],{"class":205},[199,95575,3604],{"class":1018},[199,95577,95266],{"class":205},[199,95579,1920],{"class":1018},[199,95581,3461],{"class":205},[199,95583,1915],{"class":1018},[199,95585,1594],{"class":205},[199,95587,95588],{"class":201,"line":73},[199,95589,95590],{"class":1454},"#对数组中的所有数求平均\n",[199,95592,95593],{"class":201,"line":333},[199,95594,95595],{"class":205},"np.mean(aa)\n",[14,95597,95599],{"id":95598},"_114-median求中位数函数","11.4 median()求中位数函数",[190,95601,95603],{"className":33221,"code":95602,"language":33223,"meta":57,"style":57},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[196,95604,95605,95610,95626,95631],{"__ignoreMap":57},[199,95606,95607],{"class":201,"line":202},[199,95608,95609],{"class":1454},"#求中位数\n",[199,95611,95612,95614,95616,95618,95620,95622,95624],{"class":201,"line":36},[199,95613,3349],{"class":205},[199,95615,895],{"class":1086},[199,95617,95261],{"class":205},[199,95619,1115],{"class":1018},[199,95621,3461],{"class":205},[199,95623,3528],{"class":1018},[199,95625,1594],{"class":205},[199,95627,95628],{"class":201,"line":73},[199,95629,95630],{"class":205},"np.median(b)\n",[199,95632,95633],{"class":201,"line":333},[199,95634,95635],{"class":1454},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95637,95639],{"id":95638},"_115-power求幂运算函数","11.5 power()求幂运算函数",[190,95641,95643],{"className":33221,"code":95642,"language":33223,"meta":57,"style":57},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[196,95644,95645,95661,95666,95671,95680,95685,95694],{"__ignoreMap":57},[199,95646,95647,95649,95651,95653,95655,95657,95659],{"class":201,"line":202},[199,95648,3349],{"class":205},[199,95650,895],{"class":1086},[199,95652,95261],{"class":205},[199,95654,1115],{"class":1018},[199,95656,3461],{"class":205},[199,95658,3528],{"class":1018},[199,95660,1594],{"class":205},[199,95662,95663],{"class":201,"line":36},[199,95664,95665],{"class":1454},"#幂运算\n",[199,95667,95668],{"class":201,"line":73},[199,95669,95670],{"class":1454},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[199,95672,95673,95676,95678],{"class":201,"line":333},[199,95674,95675],{"class":205},"np.power(b,",[199,95677,1925],{"class":1018},[199,95679,1594],{"class":205},[199,95681,95682],{"class":201,"line":227},[199,95683,95684],{"class":1454},"#或者以下代码，将数据存储起来\n",[199,95686,95687,95689,95691],{"class":201,"line":238},[199,95688,3924],{"class":205},[199,95690,895],{"class":1086},[199,95692,95693],{"class":205},"np.empty_like(b)\n",[199,95695,95696,95698,95700,95702,95704,95706],{"class":201,"line":252},[199,95697,95675],{"class":205},[199,95699,1925],{"class":1018},[199,95701,3461],{"class":205},[199,95703,95313],{"class":8113},[199,95705,895],{"class":1086},[199,95707,95708],{"class":205},"y)\n",[14,95710,95712],{"id":95711},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[190,95714,95716],{"className":33221,"code":95715,"language":33223,"meta":57,"style":57},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[196,95717,95718,95734,95739,95744,95748,95766],{"__ignoreMap":57},[199,95719,95720,95722,95724,95726,95728,95730,95732],{"class":201,"line":202},[199,95721,3349],{"class":205},[199,95723,895],{"class":1086},[199,95725,95261],{"class":205},[199,95727,1115],{"class":1018},[199,95729,3461],{"class":205},[199,95731,3528],{"class":1018},[199,95733,1594],{"class":205},[199,95735,95736],{"class":201,"line":36},[199,95737,95738],{"class":1454},"#开方\n",[199,95740,95741],{"class":201,"line":73},[199,95742,95743],{"class":205},"np.sqrt(b)\n",[199,95745,95746],{"class":201,"line":333},[199,95747,95684],{"class":1454},[199,95749,95750,95752,95754,95757,95760,95762,95764],{"class":201,"line":227},[199,95751,3924],{"class":205},[199,95753,895],{"class":1086},[199,95755,95756],{"class":205},"np.empty_like(b,",[199,95758,95759],{"class":8113},"dtype",[199,95761,895],{"class":1086},[199,95763,3135],{"class":1018},[199,95765,1594],{"class":205},[199,95767,95768,95771,95773,95775],{"class":201,"line":238},[199,95769,95770],{"class":205},"np.sqrt(b,",[199,95772,95313],{"class":8113},[199,95774,895],{"class":1086},[199,95776,95708],{"class":205},[14,95778,95780],{"id":95779},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[31,95782,95783],{},"对数组中的元素累计求和，可指定轴",[31,95785,95786],{},"#累计求和的意思是：",[31,95788,95789],{},"a = np.array([1, 2, 3, 4])",[31,95791,95792],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[190,95794,95796],{"className":33221,"code":95795,"language":33223,"meta":57,"style":57},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[196,95797,95798,95814,95819,95824],{"__ignoreMap":57},[199,95799,95800,95802,95804,95806,95808,95810,95812],{"class":201,"line":202},[199,95801,3349],{"class":205},[199,95803,895],{"class":1086},[199,95805,95261],{"class":205},[199,95807,1115],{"class":1018},[199,95809,3461],{"class":205},[199,95811,3528],{"class":1018},[199,95813,1594],{"class":205},[199,95815,95816],{"class":201,"line":36},[199,95817,95818],{"class":205},"np.cumsum(b)\n",[199,95820,95821],{"class":201,"line":73},[199,95822,95823],{"class":1454},"#结果：\n",[199,95825,95826],{"class":201,"line":333},[199,95827,95828],{"class":1454},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95830,95832],{"id":95831},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[190,95834,95836],{"className":33221,"code":95835,"language":33223,"meta":57,"style":57},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[196,95837,95838,95854,95859,95864,95868],{"__ignoreMap":57},[199,95839,95840,95842,95844,95846,95848,95850,95852],{"class":201,"line":202},[199,95841,3349],{"class":205},[199,95843,895],{"class":1086},[199,95845,95261],{"class":205},[199,95847,1115],{"class":1018},[199,95849,3461],{"class":205},[199,95851,3528],{"class":1018},[199,95853,1594],{"class":205},[199,95855,95856],{"class":201,"line":36},[199,95857,95858],{"class":1454},"#对数组中的元素累计求积，可指定轴\n",[199,95860,95861],{"class":201,"line":73},[199,95862,95863],{"class":205},"np.cumprod(b)\n",[199,95865,95866],{"class":201,"line":333},[199,95867,95823],{"class":1454},[199,95869,95870],{"class":201,"line":227},[199,95871,95872],{"class":1454},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95874,95876],{"id":95875},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[190,95878,95880],{"className":33221,"code":95879,"language":33223,"meta":57,"style":57},"#删除数组中的重复数据，并对数据进行排序\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",[196,95881,95882,95887,95935,95940,95944],{"__ignoreMap":57},[199,95883,95884],{"class":201,"line":202},[199,95885,95886],{"class":1454},"#删除数组中的重复数据，并对数据进行排序\n",[199,95888,95889,95891,95893,95895,95897,95899,95901,95903,95905,95907,95909,95911,95913,95915,95917,95919,95921,95923,95925,95927,95929,95931,95933],{"class":201,"line":36},[199,95890,2867],{"class":205},[199,95892,895],{"class":1086},[199,95894,95283],{"class":205},[199,95896,1115],{"class":1018},[199,95898,3461],{"class":205},[199,95900,1925],{"class":1018},[199,95902,3461],{"class":205},[199,95904,1920],{"class":1018},[199,95906,3461],{"class":205},[199,95908,3579],{"class":1018},[199,95910,3461],{"class":205},[199,95912,1920],{"class":1018},[199,95914,3461],{"class":205},[199,95916,3528],{"class":1018},[199,95918,3461],{"class":205},[199,95920,3285],{"class":1018},[199,95922,3461],{"class":205},[199,95924,1025],{"class":1018},[199,95926,3461],{"class":205},[199,95928,3854],{"class":1018},[199,95930,3461],{"class":205},[199,95932,1915],{"class":1018},[199,95934,7554],{"class":205},[199,95936,95937],{"class":201,"line":73},[199,95938,95939],{"class":205},"np.unique(a)\n",[199,95941,95942],{"class":201,"line":333},[199,95943,95823],{"class":1454},[199,95945,95946],{"class":201,"line":227},[199,95947,95948],{"class":1454},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[31,95950,95951],{},"升序形式排序",[14,95953,95955],{"id":95954},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[190,95957,95959],{"className":33221,"code":95958,"language":33223,"meta":57,"style":57},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[196,95960,95961,96009,96014],{"__ignoreMap":57},[199,95962,95963,95965,95967,95969,95971,95973,95975,95977,95979,95981,95983,95985,95987,95989,95991,95993,95995,95997,95999,96001,96003,96005,96007],{"class":201,"line":202},[199,95964,2867],{"class":205},[199,95966,895],{"class":1086},[199,95968,95283],{"class":205},[199,95970,1115],{"class":1018},[199,95972,3461],{"class":205},[199,95974,1925],{"class":1018},[199,95976,3461],{"class":205},[199,95978,1920],{"class":1018},[199,95980,3461],{"class":205},[199,95982,3579],{"class":1018},[199,95984,3461],{"class":205},[199,95986,1920],{"class":1018},[199,95988,3461],{"class":205},[199,95990,3528],{"class":1018},[199,95992,3461],{"class":205},[199,95994,3285],{"class":1018},[199,95996,3461],{"class":205},[199,95998,1025],{"class":1018},[199,96000,3461],{"class":205},[199,96002,3854],{"class":1018},[199,96004,3461],{"class":205},[199,96006,1915],{"class":1018},[199,96008,7554],{"class":205},[199,96010,96011],{"class":201,"line":36},[199,96012,96013],{"class":1454},"#返回数组中非零元素的索引\n",[199,96015,96016],{"class":201,"line":73},[199,96017,96018],{"class":205},"np.nonzero(a)\n",[14,96020,96022],{"id":96021},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[190,96024,96026],{"className":33221,"code":96025,"language":33223,"meta":57,"style":57},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[196,96027,96028,96076,96081],{"__ignoreMap":57},[199,96029,96030,96032,96034,96036,96038,96040,96042,96044,96046,96048,96050,96052,96054,96056,96058,96060,96062,96064,96066,96068,96070,96072,96074],{"class":201,"line":202},[199,96031,2867],{"class":205},[199,96033,895],{"class":1086},[199,96035,95283],{"class":205},[199,96037,1115],{"class":1018},[199,96039,3461],{"class":205},[199,96041,1925],{"class":1018},[199,96043,3461],{"class":205},[199,96045,1920],{"class":1018},[199,96047,3461],{"class":205},[199,96049,3579],{"class":1018},[199,96051,3461],{"class":205},[199,96053,1920],{"class":1018},[199,96055,3461],{"class":205},[199,96057,3528],{"class":1018},[199,96059,3461],{"class":205},[199,96061,3285],{"class":1018},[199,96063,3461],{"class":205},[199,96065,1025],{"class":1018},[199,96067,3461],{"class":205},[199,96069,3854],{"class":1018},[199,96071,3461],{"class":205},[199,96073,1915],{"class":1018},[199,96075,7554],{"class":205},[199,96077,96078],{"class":201,"line":36},[199,96079,96080],{"class":1454},"#计算一组数中最大值与最小值的差，可指定轴\n",[199,96082,96083],{"class":201,"line":73},[199,96084,96085],{"class":205},"np.ptp(a)\n",[1002,96087,96088],{},"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":57,"searchDepth":36,"depth":36,"links":96090},[96091,96092,96093,96094,96095,96096,96097,96098,96099,96100,96101],{"id":95353,"depth":36,"text":95354},{"id":95396,"depth":36,"text":95397},{"id":95504,"depth":36,"text":95505},{"id":95598,"depth":36,"text":95599},{"id":95638,"depth":36,"text":95639},{"id":95711,"depth":36,"text":95712},{"id":95779,"depth":36,"text":95780},{"id":95831,"depth":36,"text":95832},{"id":95875,"depth":36,"text":95876},{"id":95954,"depth":36,"text":95955},{"id":96021,"depth":36,"text":96022},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95339,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96108,"title":96109,"body":96110,"description":3023,"extension":3024,"meta":96765,"navigation":906,"path":96766,"seo":96767,"stem":96768,"__hash__":96769},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96111,"toc":96753},[96112,96115,96119,96122,96338,96342,96345,96554,96558,96624,96629,96633,96636,96639,96677,96681,96684,96689,96693,96696,96699,96704,96708,96711,96715,96718,96721,96726,96730,96733,96736,96741,96745,96750],[10,96113,96109],{"id":96114},"_12其他常用函数",[14,96116,96118],{"id":96117},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[31,96120,96121],{},"将数组的数据按照行列复制扩展",[190,96123,96125],{"className":33221,"code":96124,"language":33223,"meta":57,"style":57},"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",[196,96126,96127,96143,96152,96156,96161,96166,96179,96183,96188,96193,96198,96202,96207,96231,96243,96247,96251,96256,96261,96266,96271,96275,96288,96292,96296,96301,96306,96311,96316,96321,96325,96329,96334],{"__ignoreMap":57},[199,96128,96129,96131,96133,96135,96137,96139,96141],{"class":201,"line":202},[199,96130,2867],{"class":205},[199,96132,895],{"class":1086},[199,96134,95261],{"class":205},[199,96136,1115],{"class":1018},[199,96138,3461],{"class":205},[199,96140,1909],{"class":1018},[199,96142,1594],{"class":205},[199,96144,96145,96148,96150],{"class":201,"line":36},[199,96146,96147],{"class":205},"np.tile(a,",[199,96149,1925],{"class":1018},[199,96151,1594],{"class":205},[199,96153,96154],{"class":201,"line":73},[199,96155,95823],{"class":1454},[199,96157,96158],{"class":201,"line":333},[199,96159,96160],{"class":1454},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[199,96162,96163],{"class":201,"line":227},[199,96164,96165],{"class":1454},"#行复制两次，列复制三次\n",[199,96167,96168,96171,96173,96175,96177],{"class":201,"line":238},[199,96169,96170],{"class":205},"np.tile(a,(",[199,96172,1925],{"class":1018},[199,96174,3461],{"class":205},[199,96176,1920],{"class":1018},[199,96178,1554],{"class":205},[199,96180,96181],{"class":201,"line":252},[199,96182,95823],{"class":1454},[199,96184,96185],{"class":201,"line":388},[199,96186,96187],{"class":898},"'''\n",[199,96189,96190],{"class":201,"line":415},[199,96191,96192],{"class":898},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[199,96194,96195],{"class":201,"line":426},[199,96196,96197],{"class":898},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[199,96199,96200],{"class":201,"line":1015},[199,96201,96187],{"class":898},[199,96203,96204],{"class":201,"line":1031},[199,96205,96206],{"class":1454},"#创建二维数组\n",[199,96208,96209,96211,96213,96215,96217,96219,96221,96223,96225,96227,96229],{"class":201,"line":1043},[199,96210,95565],{"class":205},[199,96212,895],{"class":1086},[199,96214,95261],{"class":205},[199,96216,1115],{"class":1018},[199,96218,3461],{"class":205},[199,96220,3604],{"class":1018},[199,96222,95266],{"class":205},[199,96224,1915],{"class":1018},[199,96226,3461],{"class":205},[199,96228,1920],{"class":1018},[199,96230,1594],{"class":205},[199,96232,96233,96236,96238,96240],{"class":201,"line":1049},[199,96234,96235],{"class":205},"np.tile(aa,",[199,96237,1925],{"class":1018},[199,96239,3512],{"class":205},[199,96241,96242],{"class":1454},"#一个数的时候就是行\n",[199,96244,96245],{"class":201,"line":1054},[199,96246,95823],{"class":1454},[199,96248,96249],{"class":201,"line":1062},[199,96250,96187],{"class":898},[199,96252,96253],{"class":201,"line":1075},[199,96254,96255],{"class":898},"array([[ 1,  2,  3,  1,  2,  3],\n",[199,96257,96258],{"class":201,"line":1092},[199,96259,96260],{"class":898},"       [ 4,  5,  6,  4,  5,  6],\n",[199,96262,96263],{"class":201,"line":1107},[199,96264,96265],{"class":898},"       [ 7,  8,  9,  7,  8,  9],\n",[199,96267,96268],{"class":201,"line":1128},[199,96269,96270],{"class":898},"       [10, 11, 12, 10, 11, 12]])\n",[199,96272,96273],{"class":201,"line":1146},[199,96274,96187],{"class":898},[199,96276,96277,96280,96282,96284,96286],{"class":201,"line":1163},[199,96278,96279],{"class":205},"np.tile(aa,(",[199,96281,1925],{"class":1018},[199,96283,3461],{"class":205},[199,96285,1920],{"class":1018},[199,96287,1554],{"class":205},[199,96289,96290],{"class":201,"line":1176},[199,96291,95823],{"class":1454},[199,96293,96294],{"class":201,"line":1189},[199,96295,96187],{"class":898},[199,96297,96298],{"class":201,"line":1202},[199,96299,96300],{"class":898},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[199,96302,96303],{"class":201,"line":1207},[199,96304,96305],{"class":898},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[199,96307,96308],{"class":201,"line":1212},[199,96309,96310],{"class":898},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[199,96312,96313],{"class":201,"line":1225},[199,96314,96315],{"class":898},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[199,96317,96318],{"class":201,"line":1236},[199,96319,96320],{"class":898},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[199,96322,96323],{"class":201,"line":1249},[199,96324,96305],{"class":898},[199,96326,96327],{"class":201,"line":1262},[199,96328,96310],{"class":898},[199,96330,96331],{"class":201,"line":1275},[199,96332,96333],{"class":898},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[199,96335,96336],{"class":201,"line":1287},[199,96337,96187],{"class":898},[14,96339,96341],{"id":96340},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[31,96343,96344],{},"repeat()将数组中的每个元素重复若干次",[190,96346,96348],{"className":33221,"code":96347,"language":33223,"meta":57,"style":57},"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",[196,96349,96350,96366,96375,96379,96384,96408,96413,96422,96426,96431,96435,96440,96456,96460,96464,96469,96474,96479,96483,96488,96492,96497,96502,96506,96522,96526,96530,96535,96540,96545,96550],{"__ignoreMap":57},[199,96351,96352,96354,96356,96358,96360,96362,96364],{"class":201,"line":202},[199,96353,2867],{"class":205},[199,96355,895],{"class":1086},[199,96357,95261],{"class":205},[199,96359,1115],{"class":1018},[199,96361,3461],{"class":205},[199,96363,1909],{"class":1018},[199,96365,1594],{"class":205},[199,96367,96368,96371,96373],{"class":201,"line":36},[199,96369,96370],{"class":205},"np.repeat(a,",[199,96372,1920],{"class":1018},[199,96374,1594],{"class":205},[199,96376,96377],{"class":201,"line":73},[199,96378,95823],{"class":1454},[199,96380,96381],{"class":201,"line":333},[199,96382,96383],{"class":1454},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[199,96385,96386,96388,96390,96392,96394,96396,96398,96400,96402,96404,96406],{"class":201,"line":227},[199,96387,95565],{"class":205},[199,96389,895],{"class":1086},[199,96391,95261],{"class":205},[199,96393,1115],{"class":1018},[199,96395,3461],{"class":205},[199,96397,3604],{"class":1018},[199,96399,95266],{"class":205},[199,96401,1915],{"class":1018},[199,96403,3461],{"class":205},[199,96405,1920],{"class":1018},[199,96407,1594],{"class":205},[199,96409,96410],{"class":201,"line":238},[199,96411,96412],{"class":1454},"#这个重复之后二维变成一维\n",[199,96414,96415,96418,96420],{"class":201,"line":252},[199,96416,96417],{"class":205},"np.repeat(aa,",[199,96419,1925],{"class":1018},[199,96421,1594],{"class":205},[199,96423,96424],{"class":201,"line":388},[199,96425,96187],{"class":898},[199,96427,96428],{"class":201,"line":415},[199,96429,96430],{"class":898},"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",[199,96432,96433],{"class":201,"line":426},[199,96434,96187],{"class":898},[199,96436,96437],{"class":201,"line":1015},[199,96438,96439],{"class":1454},"#指定axis\n",[199,96441,96442,96444,96446,96448,96450,96452,96454],{"class":201,"line":1031},[199,96443,96417],{"class":205},[199,96445,1925],{"class":1018},[199,96447,3461],{"class":205},[199,96449,50354],{"class":8113},[199,96451,895],{"class":1086},[199,96453,1025],{"class":1018},[199,96455,1594],{"class":205},[199,96457,96458],{"class":201,"line":1043},[199,96459,95823],{"class":1454},[199,96461,96462],{"class":201,"line":1049},[199,96463,96187],{"class":898},[199,96465,96466],{"class":201,"line":1054},[199,96467,96468],{"class":898},"array([[ 1,  2,  3],\n",[199,96470,96471],{"class":201,"line":1062},[199,96472,96473],{"class":898},"       [ 1,  2,  3],\n",[199,96475,96476],{"class":201,"line":1075},[199,96477,96478],{"class":898},"       [ 4,  5,  6],\n",[199,96480,96481],{"class":201,"line":1092},[199,96482,96478],{"class":898},[199,96484,96485],{"class":201,"line":1107},[199,96486,96487],{"class":898},"       [ 7,  8,  9],\n",[199,96489,96490],{"class":201,"line":1128},[199,96491,96487],{"class":898},[199,96493,96494],{"class":201,"line":1146},[199,96495,96496],{"class":898},"       [10, 11, 12],\n",[199,96498,96499],{"class":201,"line":1163},[199,96500,96501],{"class":898},"       [10, 11, 12]])\n",[199,96503,96504],{"class":201,"line":1176},[199,96505,96187],{"class":898},[199,96507,96508,96510,96512,96514,96516,96518,96520],{"class":201,"line":1189},[199,96509,96417],{"class":205},[199,96511,1925],{"class":1018},[199,96513,3461],{"class":205},[199,96515,50354],{"class":8113},[199,96517,895],{"class":1086},[199,96519,1115],{"class":1018},[199,96521,1594],{"class":205},[199,96523,96524],{"class":201,"line":1202},[199,96525,95823],{"class":1454},[199,96527,96528],{"class":201,"line":1207},[199,96529,96187],{"class":898},[199,96531,96532],{"class":201,"line":1212},[199,96533,96534],{"class":898},"array([[ 1,  1,  2,  2,  3,  3],\n",[199,96536,96537],{"class":201,"line":1225},[199,96538,96539],{"class":898},"       [ 4,  4,  5,  5,  6,  6],\n",[199,96541,96542],{"class":201,"line":1236},[199,96543,96544],{"class":898},"       [ 7,  7,  8,  8,  9,  9],\n",[199,96546,96547],{"class":201,"line":1249},[199,96548,96549],{"class":898},"       [10, 10, 11, 11, 12, 12]])\n",[199,96551,96552],{"class":201,"line":1262},[199,96553,96187],{"class":898},[14,96555,96557],{"id":96556},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[190,96559,96561],{"className":33221,"code":96560,"language":33223,"meta":57,"style":57},"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",[196,96562,96563,96579,96584,96596,96600,96605,96615,96619],{"__ignoreMap":57},[199,96564,96565,96567,96569,96571,96573,96575,96577],{"class":201,"line":202},[199,96566,2867],{"class":205},[199,96568,895],{"class":1086},[199,96570,95261],{"class":205},[199,96572,1115],{"class":1018},[199,96574,3461],{"class":205},[199,96576,1909],{"class":1018},[199,96578,1594],{"class":205},[199,96580,96581],{"class":201,"line":36},[199,96582,96583],{"class":1454},"#array([，2，3，4])\n",[199,96585,96586,96589,96591,96593],{"class":201,"line":73},[199,96587,96588],{"class":205},"np.roll(a,",[199,96590,1925],{"class":1018},[199,96592,3512],{"class":205},[199,96594,96595],{"class":1454},"#传正数向后调多少位，传负数向前调多少位\n",[199,96597,96598],{"class":201,"line":333},[199,96599,95823],{"class":1454},[199,96601,96602],{"class":201,"line":227},[199,96603,96604],{"class":1454},"#array([3, 4, 1, 2])\n",[199,96606,96607,96609,96611,96613],{"class":201,"line":238},[199,96608,96588],{"class":205},[199,96610,1998],{"class":1086},[199,96612,1115],{"class":1018},[199,96614,1594],{"class":205},[199,96616,96617],{"class":201,"line":252},[199,96618,95823],{"class":1454},[199,96620,96621],{"class":201,"line":388},[199,96622,96623],{"class":1454},"#array([2, 3, 4, 1])\n",[31,96625,96626],{},[55,96627],{"alt":57,"src":96628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96630,96632],{"id":96631},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[31,96634,96635],{},"resize()重新调整数组的大小",[31,96637,96638],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[190,96640,96642],{"className":33221,"code":96641,"language":33223,"meta":57,"style":57},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[196,96643,96644,96649,96662],{"__ignoreMap":57},[199,96645,96646],{"class":201,"line":202},[199,96647,96648],{"class":1454},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[199,96650,96651,96654,96656,96658,96660],{"class":201,"line":36},[199,96652,96653],{"class":205},"np.resize(aa,(",[199,96655,1925],{"class":1018},[199,96657,3461],{"class":205},[199,96659,3428],{"class":1018},[199,96661,1554],{"class":205},[199,96663,96664,96666,96668,96670,96672,96674],{"class":201,"line":73},[199,96665,96653],{"class":205},[199,96667,1925],{"class":1018},[199,96669,3461],{"class":205},[199,96671,3503],{"class":1018},[199,96673,85030],{"class":205},[199,96675,96676],{"class":1454},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96678,96680],{"id":96679},"_125-placeput函数","12.5 place()\u002Fput()函数",[31,96682,96683],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[31,96685,96686],{},[55,96687],{"alt":57,"src":96688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96690,96692],{"id":96691},"_126-保存加载文件","12.6 保存加载文件",[31,96694,96695],{},"savetxt():将数据保存到txt文件中",[31,96697,96698],{},"loadtxt():从文件加载数据",[31,96700,96701],{},[55,96702],{"alt":57,"src":96703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96705,96707],{"id":96706},"_127-genfromtxt函数","12.7 genfromtxt()函数",[31,96709,96710],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96712,96714],{"id":96713},"_128-anyall函数","12.8 any()\u002Fall()函数",[31,96716,96717],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[31,96719,96720],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[31,96722,96723],{},[55,96724],{"alt":57,"src":96725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96727,96729],{"id":96728},"_129-where语句","12.9 where语句",[31,96731,96732],{},"np.where(条件,x,y)",[31,96734,96735],{},"如果条件为True,对应值为x,否则对应值为y",[31,96737,96738],{},[55,96739],{"alt":57,"src":96740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96742,96744],{"id":96743},"_1210-dot矩阵","12.10 dot()矩阵",[31,96746,96747],{},[55,96748],{"alt":57,"src":96749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1002,96751,96752],{},"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":57,"searchDepth":36,"depth":36,"links":96754},[96755,96756,96757,96758,96759,96760,96761,96762,96763,96764],{"id":96117,"depth":36,"text":96118},{"id":96340,"depth":36,"text":96341},{"id":96556,"depth":36,"text":96557},{"id":96631,"depth":36,"text":96632},{"id":96679,"depth":36,"text":96680},{"id":96691,"depth":36,"text":96692},{"id":96706,"depth":36,"text":96707},{"id":96713,"depth":36,"text":96714},{"id":96728,"depth":36,"text":96729},{"id":96743,"depth":36,"text":96744},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96109,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96771,"title":96772,"body":96773,"description":3023,"extension":3024,"meta":97126,"navigation":906,"path":97127,"seo":97128,"stem":97129,"__hash__":97130},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96774,"toc":97124},[96775,96778,96781,96784,96787,96790,96855,96857,97121],[10,96776,96772],{"id":96777},"_13数组排序",[31,96779,96780],{},"排序主要用到的方法是np.sort和np.argsort",[31,96782,96783],{},"其中np.sort()对数组直接排序",[31,96785,96786],{},"而np.argsort()是返回排序后的原始索引",[31,96788,96789],{},"①一维数组",[190,96791,96793],{"className":33221,"code":96792,"language":33223,"meta":57,"style":57},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[196,96794,96795,96799,96839,96847],{"__ignoreMap":57},[199,96796,96797],{"class":201,"line":202},[199,96798,95364],{"class":1454},[199,96800,96801,96803,96805,96807,96809,96811,96813,96815,96817,96819,96821,96823,96825,96827,96829,96831,96833,96835,96837],{"class":201,"line":36},[199,96802,2867],{"class":205},[199,96804,895],{"class":1086},[199,96806,95283],{"class":205},[199,96808,1920],{"class":1018},[199,96810,3461],{"class":205},[199,96812,3579],{"class":1018},[199,96814,3461],{"class":205},[199,96816,3478],{"class":1018},[199,96818,3461],{"class":205},[199,96820,3854],{"class":1018},[199,96822,3461],{"class":205},[199,96824,3365],{"class":1018},[199,96826,3461],{"class":205},[199,96828,3971],{"class":1018},[199,96830,3461],{"class":205},[199,96832,3428],{"class":1018},[199,96834,3461],{"class":205},[199,96836,3528],{"class":1018},[199,96838,7554],{"class":205},[199,96840,96841,96844],{"class":201,"line":73},[199,96842,96843],{"class":205},"np.sort(a)",[199,96845,96846],{"class":1454},"#升序排序\n",[199,96848,96849,96852],{"class":201,"line":333},[199,96850,96851],{"class":205},"np.argsort(a)",[199,96853,96854],{"class":1454},"#按照元素大小来索引排序\n",[31,96856,95550],{},[190,96858,96860],{"className":33221,"code":96859,"language":33223,"meta":57,"style":57},"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",[196,96861,96862,96874,96900,96905,96909,96914,96919,96924,96929,96933,96941,96945,96950,96955,96960,96965,96969,96974,96987,96991,96996,97001,97006,97011,97015,97020,97032,97036,97040,97044,97048,97052,97056,97061,97076,97081,97090,97095,97099,97103,97108,97112,97117],{"__ignoreMap":57},[199,96863,96864,96867,96869,96871],{"class":201,"line":202},[199,96865,96866],{"class":205},"np.random.seed(",[199,96868,1025],{"class":1018},[199,96870,3512],{"class":205},[199,96872,96873],{"class":1454},"#保证每次值一样\n",[199,96875,96876,96878,96880,96882,96884,96886,96888,96890,96892,96894,96896,96898],{"class":201,"line":36},[199,96877,95565],{"class":205},[199,96879,895],{"class":1086},[199,96881,95373],{"class":205},[199,96883,3396],{"class":1018},[199,96885,3461],{"class":205},[199,96887,34338],{"class":8113},[199,96889,895],{"class":1086},[199,96891,1537],{"class":205},[199,96893,1915],{"class":1018},[199,96895,3461],{"class":205},[199,96897,3428],{"class":1018},[199,96899,1554],{"class":205},[199,96901,96902],{"class":201,"line":73},[199,96903,96904],{"class":1454},"#原数组：\n",[199,96906,96907],{"class":201,"line":333},[199,96908,96187],{"class":898},[199,96910,96911],{"class":201,"line":227},[199,96912,96913],{"class":898},"array([[44, 47, 64, 67, 67,  9],\n",[199,96915,96916],{"class":201,"line":238},[199,96917,96918],{"class":898},"       [83, 21, 36, 87, 70, 88],\n",[199,96920,96921],{"class":201,"line":252},[199,96922,96923],{"class":898},"       [88, 12, 58, 65, 39, 87],\n",[199,96925,96926],{"class":201,"line":388},[199,96927,96928],{"class":898},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[199,96930,96931],{"class":201,"line":415},[199,96932,96187],{"class":898},[199,96934,96935,96938],{"class":201,"line":426},[199,96936,96937],{"class":205},"np.sort(aa)",[199,96939,96940],{"class":1454},"#每行进行了排序\n",[199,96942,96943],{"class":201,"line":1015},[199,96944,96187],{"class":898},[199,96946,96947],{"class":201,"line":1031},[199,96948,96949],{"class":898},"array([[ 9, 44, 47, 64, 67, 67],\n",[199,96951,96952],{"class":201,"line":1043},[199,96953,96954],{"class":898},"       [21, 36, 70, 83, 87, 88],\n",[199,96956,96957],{"class":201,"line":1049},[199,96958,96959],{"class":898},"       [12, 39, 58, 65, 87, 88],\n",[199,96961,96962],{"class":201,"line":1054},[199,96963,96964],{"class":898},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[199,96966,96967],{"class":201,"line":1062},[199,96968,96187],{"class":898},[199,96970,96971],{"class":201,"line":1075},[199,96972,96973],{"class":1454},"#axis=0时\n",[199,96975,96976,96979,96981,96983,96985],{"class":201,"line":1092},[199,96977,96978],{"class":205},"np.sort(aa,",[199,96980,50354],{"class":8113},[199,96982,895],{"class":1086},[199,96984,1025],{"class":1018},[199,96986,1594],{"class":205},[199,96988,96989],{"class":201,"line":1107},[199,96990,96187],{"class":898},[199,96992,96993],{"class":201,"line":1128},[199,96994,96995],{"class":898},"array([[44, 12, 36, 37, 25,  9],\n",[199,96997,96998],{"class":201,"line":1146},[199,96999,97000],{"class":898},"       [46, 21, 58, 65, 39, 77],\n",[199,97002,97003],{"class":201,"line":1163},[199,97004,97005],{"class":898},"       [83, 47, 64, 67, 67, 87],\n",[199,97007,97008],{"class":201,"line":1176},[199,97009,97010],{"class":898},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[199,97012,97013],{"class":201,"line":1189},[199,97014,96187],{"class":898},[199,97016,97017],{"class":201,"line":1202},[199,97018,97019],{"class":1454},"#axis=1时,为默认值\n",[199,97021,97022,97024,97026,97028,97030],{"class":201,"line":1207},[199,97023,96978],{"class":205},[199,97025,50354],{"class":8113},[199,97027,895],{"class":1086},[199,97029,1115],{"class":1018},[199,97031,1594],{"class":205},[199,97033,97034],{"class":201,"line":1212},[199,97035,96187],{"class":898},[199,97037,97038],{"class":201,"line":1225},[199,97039,96949],{"class":898},[199,97041,97042],{"class":201,"line":1236},[199,97043,96954],{"class":898},[199,97045,97046],{"class":201,"line":1249},[199,97047,96959],{"class":898},[199,97049,97050],{"class":201,"line":1262},[199,97051,96964],{"class":898},[199,97053,97054],{"class":201,"line":1275},[199,97055,96187],{"class":898},[199,97057,97058],{"class":201,"line":1287},[199,97059,97060],{"class":1454},"#按最后一列排序\n",[199,97062,97063,97065,97067,97070,97072,97074],{"class":201,"line":1292},[199,97064,3349],{"class":205},[199,97066,895],{"class":1086},[199,97068,97069],{"class":205},"aa[:,",[199,97071,1998],{"class":1086},[199,97073,1115],{"class":1018},[199,97075,1932],{"class":205},[199,97077,97078],{"class":201,"line":1297},[199,97079,97080],{"class":1454},"#获取最后一列排好序的索引\n",[199,97082,97083,97085,97087],{"class":201,"line":1310},[199,97084,76317],{"class":205},[199,97086,895],{"class":1086},[199,97088,97089],{"class":205},"np.argsort(b)\n",[199,97091,97092],{"class":201,"line":1315},[199,97093,97094],{"class":205},"aa[index]\n",[199,97096,97097],{"class":201,"line":1330},[199,97098,96187],{"class":898},[199,97100,97101],{"class":201,"line":1335},[199,97102,96913],{"class":898},[199,97104,97105],{"class":201,"line":1340},[199,97106,97107],{"class":898},"       [46, 88, 81, 37, 25, 77],\n",[199,97109,97110],{"class":201,"line":1352},[199,97111,96923],{"class":898},[199,97113,97114],{"class":201,"line":1367},[199,97115,97116],{"class":898},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[199,97118,97119],{"class":201,"line":1381},[199,97120,96187],{"class":898},[1002,97122,97123],{},"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":57,"searchDepth":36,"depth":36,"links":97125},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96772,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97132,"title":97133,"body":97134,"description":3023,"extension":3024,"meta":97164,"navigation":906,"path":97165,"seo":97166,"stem":97167,"__hash__":97168},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97135,"toc":97162},[97136,97139,97142,97145,97148,97151,97154,97157],[10,97137,97133],{"id":97138},"_14广播机制",[31,97140,97141],{},"广播的规则：",[31,97143,97144],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[31,97146,97147],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[31,97149,97150],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[31,97152,97153],{},"3.如果没有维度形状为1，则会引发异常",[31,97155,97156],{},"也就是只有维度或者个数为1才可以进行广播操作",[31,97158,97159],{},[55,97160],{"alt":57,"src":97161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":57,"searchDepth":36,"depth":36,"links":97163},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97133,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97170,"title":97171,"body":97172,"description":3023,"extension":3024,"meta":97270,"navigation":906,"path":97271,"seo":97272,"stem":97273,"__hash__":97274},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97173,"toc":97268},[97174,97177,97180,97265],[10,97175,97171],{"id":97176},"_15比较掩码",[31,97178,97179],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[190,97181,97183],{"className":33221,"code":97182,"language":33223,"meta":57,"style":57},"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",[196,97184,97185,97231,97242,97256,97260],{"__ignoreMap":57},[199,97186,97187,97189,97191,97194,97196,97198,97200,97202,97204,97206,97208,97210,97212,97214,97216,97218,97220,97222,97224,97226,97228],{"class":201,"line":202},[199,97188,2867],{"class":205},[199,97190,895],{"class":1086},[199,97192,97193],{"class":205},"np.array([[",[199,97195,1115],{"class":1018},[199,97197,3461],{"class":205},[199,97199,1925],{"class":1018},[199,97201,3461],{"class":205},[199,97203,1920],{"class":1018},[199,97205,50870],{"class":205},[199,97207,3554],{"class":1018},[199,97209,3461],{"class":205},[199,97211,3579],{"class":1018},[199,97213,3461],{"class":205},[199,97215,3604],{"class":1018},[199,97217,50870],{"class":205},[199,97219,3804],{"class":1018},[199,97221,3461],{"class":205},[199,97223,3829],{"class":1018},[199,97225,3461],{"class":205},[199,97227,3854],{"class":1018},[199,97229,97230],{"class":205},"]])\n",[199,97232,97233,97235,97237,97239],{"class":201,"line":36},[199,97234,2867],{"class":205},[199,97236,887],{"class":1086},[199,97238,3779],{"class":1018},[199,97240,97241],{"class":1454},"#结果是一个由True,False组成的数组\n",[199,97243,97244,97247,97249,97251,97253],{"class":201,"line":73},[199,97245,97246],{"class":205},"a[a",[199,97248,887],{"class":1086},[199,97250,3779],{"class":1018},[199,97252,1667],{"class":205},[199,97254,97255],{"class":1454},"#小于20的元素会存到这个数组中\n",[199,97257,97258],{"class":201,"line":333},[199,97259,95823],{"class":1454},[199,97261,97262],{"class":201,"line":227},[199,97263,97264],{"class":1454},"#array([ 1,  2,  3, 11, 12, 13])\n",[1002,97266,97267],{},"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":57,"searchDepth":36,"depth":36,"links":97269},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97171,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97276,"title":97277,"body":97278,"description":3023,"extension":3024,"meta":97370,"navigation":906,"path":97371,"seo":97372,"stem":97373,"__hash__":97374},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97279,"toc":97368},[97280,97283,97286,97289,97292,97295,97360,97365],[10,97281,97277],{"id":97282},"_16魔法命令time",[31,97284,97285],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[31,97287,97288],{},"%:行模式",[31,97290,97291],{},"%%:单元格模式",[31,97293,97294],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[190,97296,97298],{"className":33221,"code":97297,"language":33223,"meta":57,"style":57},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[196,97299,97300,97305,97312,97317,97326,97339,97343,97351],{"__ignoreMap":57},[199,97301,97302],{"class":201,"line":202},[199,97303,97304],{"class":1454},"#程序执行时间\n",[199,97306,97307,97309],{"class":201,"line":36},[199,97308,33235],{"class":1086},[199,97310,97311],{"class":205}," time \n",[199,97313,97314],{"class":201,"line":73},[199,97315,97316],{"class":1454},"#获取时间\n",[199,97318,97319,97322,97324],{"class":201,"line":333},[199,97320,97321],{"class":205},"start",[199,97323,895],{"class":1086},[199,97325,35260],{"class":205},[199,97327,97328,97331,97334,97336],{"class":201,"line":227},[199,97329,97330],{"class":205},"time.sleep(",[199,97332,97333],{"class":1018},"0.4",[199,97335,3512],{"class":205},[199,97337,97338],{"class":1454},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[199,97340,97341],{"class":201,"line":238},[199,97342,97316],{"class":1454},[199,97344,97345,97347,97349],{"class":201,"line":252},[199,97346,48641],{"class":205},[199,97348,895],{"class":1086},[199,97350,35260],{"class":205},[199,97352,97353,97355,97357],{"class":201,"line":388},[199,97354,48641],{"class":205},[199,97356,1998],{"class":1086},[199,97358,97359],{"class":205},"start\n",[31,97361,97362],{},[55,97363],{"alt":57,"src":97364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1002,97366,97367],{},"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":57,"searchDepth":36,"depth":36,"links":97369},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97277,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97376,"title":97377,"body":97378,"description":3023,"extension":3024,"meta":97413,"navigation":906,"path":97414,"seo":97415,"stem":97416,"__hash__":97417},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97379,"toc":97411},[97380,97383,97386,97389,97392,97395,97398,97401,97406],[10,97381,97377],{"id":97382},"_17魔法命令timeit",[31,97384,97385],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[31,97387,97388],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[31,97390,97391],{},"单元格模式：",[31,97393,97394],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[31,97396,97397],{},"初始化语句执行次数由轮数来决定",[31,97399,97400],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[31,97402,97403],{},[55,97404],{"alt":57,"src":97405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[31,97407,97408],{},[55,97409],{"alt":57,"src":97410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":57,"searchDepth":36,"depth":36,"links":97412},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97377,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97419,"title":97420,"body":97421,"description":3023,"extension":3024,"meta":97439,"navigation":906,"path":97440,"seo":97441,"stem":97442,"__hash__":97443},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97422,"toc":97437},[97423,97426,97429,97432],[10,97424,97420],{"id":97425},"_18魔法命令writefile和run",[31,97427,97428],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[31,97430,97431],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[31,97433,97434],{},[55,97435],{"alt":57,"src":97436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":57,"searchDepth":36,"depth":36,"links":97438},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97420,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97445,"title":97446,"body":97447,"description":3023,"extension":3024,"meta":97500,"navigation":906,"path":97501,"seo":97502,"stem":97503,"__hash__":97504},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97448,"toc":97498},[97449,97452,97455,97457,97460,97463,97468,97471,97474,97477,97480,97483,97486,97489,97492,97495],[10,97450,97446],{"id":97451},"_19魔法命令memit",[31,97453,97454],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[31,97456,27443],{},[31,97458,97459],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[31,97461,97462],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[31,97464,97465],{},[55,97466],{"alt":57,"src":97467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[31,97469,97470],{},"补充：",[31,97472,97473],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[31,97475,97476],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[31,97478,97479],{},"解决方法：",[31,97481,97482],{},"1.cmd",[31,97484,97485],{},"2.依次输入以下代码：",[31,97487,97488],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[31,97490,97491],{},"pip install --upgrade ipython",[31,97493,97494],{},"#升级 memory_profiler 和 setuptools",[31,97496,97497],{},"pip install --upgrade memory_profiler setuptools",{"title":57,"searchDepth":36,"depth":36,"links":97499},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97446,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97506,"title":97507,"body":97508,"description":3023,"extension":3024,"meta":99154,"navigation":906,"path":99155,"seo":99156,"stem":99157,"__hash__":99158},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97509,"toc":99124},[97510,97513,97517,97521,97582,97585,97590,97594,97599,97604,97609,97614,97617,97622,97626,97630,97663,97666,97669,97672,97724,97727,97763,97766,97808,97812,97833,97835,97872,97874,97879,97881,97886,97890,97893,97921,97925,97929,97982,97986,98078,98082,98086,98089,98094,98098,98123,98128,98132,98135,98138,98141,98144,98147,98150,98153,98165,98169,98173,98176,98208,98211,98234,98237,98263,98266,98292,98295,98329,98332,98394,98398,98401,98405,98408,98434,98437,98440,98445,98448,98517,98519,98524,98585,98588,98599,98605,98610,98614,98617,98630,98634,98649,98651,98674,98676,98702,98705,98708,98711,98759,98761,98766,98770,98774,98801,98805,98832,98835,98840,98845,98935,98939,98997,99002,99005,99008,99050,99054,99110,99115,99118,99121],[10,97511,97507],{"id":97512},"_2创建数组",[14,97514,97516],{"id":97515},"_21-array函数创建数组","2.1 array()函数创建数组",[19,97518,97520],{"id":97519},"_221-函数语句","2.2.1 函数语句",[190,97522,97524],{"className":33221,"code":97523,"language":33223,"meta":57,"style":57},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[196,97525,97526],{"__ignoreMap":57},[199,97527,97528,97531,97534,97536,97538,97540,97542,97544,97547,97549,97552,97554,97557,97559,97561,97563,97566,97568,97571,97573,97576,97578,97580],{"class":201,"line":202},[199,97529,97530],{"class":205},"numpy.array(",[199,97532,97533],{"class":1018},"object",[199,97535,1912],{"class":205},[199,97537,95759],{"class":8113},[199,97539,16425],{"class":1086},[199,97541,41774],{"class":1018},[199,97543,1912],{"class":205},[199,97545,97546],{"class":8113},"copy",[199,97548,16425],{"class":1086},[199,97550,97551],{"class":1018}," True",[199,97553,1912],{"class":205},[199,97555,97556],{"class":8113},"order",[199,97558,16425],{"class":1086},[199,97560,41774],{"class":1018},[199,97562,1912],{"class":205},[199,97564,97565],{"class":8113},"subok",[199,97567,16425],{"class":1086},[199,97569,97570],{"class":1018}," False",[199,97572,1912],{"class":205},[199,97574,97575],{"class":8113},"ndmin",[199,97577,16425],{"class":1086},[199,97579,1621],{"class":1018},[199,97581,1594],{"class":205},[31,97583,97584],{},"参数：",[31,97586,97587],{},[55,97588],{"alt":57,"src":97589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[19,97591,97593],{"id":97592},"_222-实例","2.2.2 实例",[31,97595,97596],{},[55,97597],{"alt":57,"src":97598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[31,97600,97601],{},[55,97602],{"alt":57,"src":97603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[31,97605,97606],{},[55,97607],{"alt":57,"src":97608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[31,97610,97611],{},[55,97612],{"alt":57,"src":97613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[31,97615,97616],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[31,97618,97619],{},[55,97620],{"alt":57,"src":97621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97623,97625],{"id":97624},"_22-随机数创建数组","2.2 随机数创建数组",[19,97627,97629],{"id":97628},"_221-random语句","2.2.1 random语句",[190,97631,97633],{"className":33221,"code":97632,"language":33223,"meta":57,"style":57},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[196,97634,97635,97640,97645,97653,97658],{"__ignoreMap":57},[199,97636,97637],{"class":201,"line":202},[199,97638,97639],{"class":1454},"#random.random()\n",[199,97641,97642],{"class":201,"line":36},[199,97643,97644],{"class":1454},"#确定随机种子,就是每次运行结果是相同的\n",[199,97646,97647,97649,97651],{"class":201,"line":73},[199,97648,96866],{"class":205},[199,97650,1025],{"class":1018},[199,97652,1594],{"class":205},[199,97654,97655],{"class":201,"line":333},[199,97656,97657],{"class":205},"np.random.random()\n",[199,97659,97660],{"class":201,"line":227},[199,97661,97662],{"class":1454},"#生成一个随机的数目\n",[31,97664,97665],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[31,97667,97668],{},"可以指定数组形状 size",[31,97670,97671],{},"①生成一维数组",[190,97673,97675],{"className":33221,"code":97674,"language":33223,"meta":57,"style":57},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[196,97676,97677,97682,97695,97700,97716],{"__ignoreMap":57},[199,97678,97679],{"class":201,"line":202},[199,97680,97681],{"class":1454},"#random.random(size())\n",[199,97683,97684,97687,97689,97691,97693],{"class":201,"line":36},[199,97685,97686],{"class":205},"np.random.random(",[199,97688,34338],{"class":8113},[199,97690,895],{"class":1086},[199,97692,1909],{"class":1018},[199,97694,1594],{"class":205},[199,97696,97697],{"class":201,"line":73},[199,97698,97699],{"class":1454},"#生成一位的五个元素\n",[199,97701,97702,97704,97706,97708,97710,97712,97714],{"class":201,"line":333},[199,97703,2867],{"class":205},[199,97705,895],{"class":1086},[199,97707,97686],{"class":205},[199,97709,34338],{"class":8113},[199,97711,895],{"class":1086},[199,97713,1915],{"class":1018},[199,97715,1594],{"class":205},[199,97717,97718,97721],{"class":201,"line":227},[199,97719,97720],{"class":205},"a.shape ",[199,97722,97723],{"class":1454},"#输出数组形状\n",[31,97725,97726],{},"②生成二维数组",[190,97728,97730],{"className":33221,"code":97729,"language":33223,"meta":57,"style":57},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[196,97731,97732,97736,97758],{"__ignoreMap":57},[199,97733,97734],{"class":201,"line":202},[199,97735,95560],{"class":1454},[199,97737,97738,97740,97742,97744,97746,97748,97750,97752,97754,97756],{"class":201,"line":36},[199,97739,95565],{"class":205},[199,97741,895],{"class":1086},[199,97743,97686],{"class":205},[199,97745,34338],{"class":8113},[199,97747,895],{"class":1086},[199,97749,1537],{"class":205},[199,97751,1915],{"class":1018},[199,97753,3461],{"class":205},[199,97755,1909],{"class":1018},[199,97757,1554],{"class":205},[199,97759,97760],{"class":201,"line":73},[199,97761,97762],{"class":1454},"#生成四行五列的数组\n",[31,97764,97765],{},"③生成三维数组",[190,97767,97769],{"className":33221,"code":97768,"language":33223,"meta":57,"style":57},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[196,97770,97771,97776,97803],{"__ignoreMap":57},[199,97772,97773],{"class":201,"line":202},[199,97774,97775],{"class":1454},"#三维数组\n",[199,97777,97778,97781,97783,97785,97787,97789,97791,97793,97795,97797,97799,97801],{"class":201,"line":36},[199,97779,97780],{"class":205},"aaa",[199,97782,895],{"class":1086},[199,97784,97686],{"class":205},[199,97786,34338],{"class":8113},[199,97788,895],{"class":1086},[199,97790,1537],{"class":205},[199,97792,1925],{"class":1018},[199,97794,3461],{"class":205},[199,97796,1920],{"class":1018},[199,97798,3461],{"class":205},[199,97800,1915],{"class":1018},[199,97802,1554],{"class":205},[199,97804,97805],{"class":201,"line":73},[199,97806,97807],{"class":205},"aaa.shape\n",[19,97809,97811],{"id":97810},"_222-randint语句","2.2.2 randint语句",[190,97813,97815],{"className":33221,"code":97814,"language":33223,"meta":57,"style":57},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[196,97816,97817,97822],{"__ignoreMap":57},[199,97818,97819],{"class":201,"line":202},[199,97820,97821],{"class":1454},"#生成随机的整数 random.randint(low,high,size)\n",[199,97823,97824,97826,97828,97830],{"class":201,"line":36},[199,97825,95373],{"class":205},[199,97827,1909],{"class":1018},[199,97829,16575],{"class":205},[199,97831,97832],{"class":1454},"#0~5中的随机一个数\n",[31,97834,97671],{},[190,97836,97838],{"className":33221,"code":97837,"language":33223,"meta":57,"style":57},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[196,97839,97840,97845,97867],{"__ignoreMap":57},[199,97841,97842],{"class":201,"line":202},[199,97843,97844],{"class":1454},"#一维\n",[199,97846,97847,97849,97851,97853,97855,97857,97859,97861,97863,97865],{"class":201,"line":36},[199,97848,95373],{"class":205},[199,97850,1115],{"class":1018},[199,97852,3461],{"class":205},[199,97854,3554],{"class":1018},[199,97856,3461],{"class":205},[199,97858,34338],{"class":8113},[199,97860,895],{"class":1086},[199,97862,1537],{"class":205},[199,97864,3528],{"class":1018},[199,97866,1554],{"class":205},[199,97868,97869],{"class":201,"line":73},[199,97870,97871],{"class":1454},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[31,97873,97726],{},[31,97875,97876],{},[55,97877],{"alt":57,"src":97878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[31,97880,97765],{},[31,97882,97883],{},[55,97884],{"alt":57,"src":97885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[19,97887,97889],{"id":97888},"_222-rand语句","2.2.2 rand语句",[31,97891,97892],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[190,97894,97896],{"className":33221,"code":97895,"language":33223,"meta":57,"style":57},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[196,97897,97898,97911,97916],{"__ignoreMap":57},[199,97899,97900,97903,97905,97907,97909],{"class":201,"line":202},[199,97901,97902],{"class":205},"np.random.rand(",[199,97904,3396],{"class":1018},[199,97906,3461],{"class":205},[199,97908,3528],{"class":1018},[199,97910,1594],{"class":205},[199,97912,97913],{"class":201,"line":36},[199,97914,97915],{"class":1454},"#第一个参数100：行数，表示有100个样本\n",[199,97917,97918],{"class":201,"line":73},[199,97919,97920],{"class":1454},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97922,97924],{"id":97923},"_23-arange创建数组","2.3 arange()创建数组",[19,97926,97928],{"id":97927},"_231-函数语句","2.3.1 函数语句",[190,97930,97932],{"className":33221,"code":97931,"language":33223,"meta":57,"style":57},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[196,97933,97934,97948,97953,97958,97963,97968,97973,97978],{"__ignoreMap":57},[199,97935,97936,97939,97941,97943,97946],{"class":201,"line":202},[199,97937,97938],{"class":205},"numpy.arange([start,] stop[, step], ",[199,97940,95759],{"class":8113},[199,97942,895],{"class":1086},[199,97944,97945],{"class":1018},"None",[199,97947,1594],{"class":205},[199,97949,97950],{"class":201,"line":36},[199,97951,97952],{"class":1454},"#参数\n",[199,97954,97955],{"class":201,"line":73},[199,97956,97957],{"class":898},"\"\"\"\n",[199,97959,97960],{"class":201,"line":333},[199,97961,97962],{"class":898},"start:起始值，可选，默认从 0 开始。\n",[199,97964,97965],{"class":201,"line":227},[199,97966,97967],{"class":898},"stop:结束值（不包含该值）。\n",[199,97969,97970],{"class":201,"line":238},[199,97971,97972],{"class":898},"step:步长，可选，默认是 1。可以为浮点数。\n",[199,97974,97975],{"class":201,"line":252},[199,97976,97977],{"class":898},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[199,97979,97980],{"class":201,"line":388},[199,97981,97957],{"class":898},[19,97983,97985],{"id":97984},"_232-实例","2.3.2 实例",[190,97987,97989],{"className":33221,"code":97988,"language":33223,"meta":57,"style":57},"#创建一维数组\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",[196,97990,97991,97995,98019,98024,98029,98033,98056,98060,98064,98069,98074],{"__ignoreMap":57},[199,97992,97993],{"class":201,"line":202},[199,97994,95364],{"class":1454},[199,97996,97997,97999,98001,98003,98005,98007,98009,98011,98013,98015,98017],{"class":201,"line":36},[199,97998,95261],{"class":205},[199,98000,1115],{"class":1018},[199,98002,3461],{"class":205},[199,98004,3804],{"class":1018},[199,98006,3461],{"class":205},[199,98008,1115],{"class":1018},[199,98010,3461],{"class":205},[199,98012,95759],{"class":8113},[199,98014,895],{"class":1086},[199,98016,3100],{"class":1018},[199,98018,1594],{"class":205},[199,98020,98021],{"class":201,"line":73},[199,98022,98023],{"class":1454},"#输出结果：\n",[199,98025,98026],{"class":201,"line":333},[199,98027,98028],{"class":1454},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[199,98030,98031],{"class":201,"line":227},[199,98032,96206],{"class":1454},[199,98034,98035,98038,98040,98042,98044,98047,98049,98051,98053],{"class":201,"line":238},[199,98036,98037],{"class":205},"np.array([np.arange(",[199,98039,1115],{"class":1018},[199,98041,3461],{"class":205},[199,98043,1915],{"class":1018},[199,98045,98046],{"class":205},"),np.arange(",[199,98048,1915],{"class":1018},[199,98050,3461],{"class":205},[199,98052,3452],{"class":1018},[199,98054,98055],{"class":205},")])\n",[199,98057,98058],{"class":201,"line":252},[199,98059,95823],{"class":1454},[199,98061,98062],{"class":201,"line":388},[199,98063,97957],{"class":898},[199,98065,98066],{"class":201,"line":415},[199,98067,98068],{"class":898},"array([[1, 2, 3],\n",[199,98070,98071],{"class":201,"line":426},[199,98072,98073],{"class":898},"       [4, 5, 6]])\n",[199,98075,98076],{"class":201,"line":1015},[199,98077,97957],{"class":898},[14,98079,98081],{"id":98080},"_24-生态分布","2.4 生态分布",[19,98083,98085],{"id":98084},"_241-标准正态分布","2.4.1 标准正态分布",[31,98087,98088],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[31,98090,98091],{},[55,98092],{"alt":57,"src":98093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[19,98095,98097],{"id":98096},"_242-常规正态分布","2.4.2 常规正态分布",[190,98099,98101],{"className":33221,"code":98100,"language":33223,"meta":57,"style":57},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[196,98102,98103,98108,98113,98118],{"__ignoreMap":57},[199,98104,98105],{"class":201,"line":202},[199,98106,98107],{"class":205},"random.normal(loc,scale,size)也可以生成正态分布\n",[199,98109,98110],{"class":201,"line":36},[199,98111,98112],{"class":1454},"#loc:期望\n",[199,98114,98115],{"class":201,"line":73},[199,98116,98117],{"class":1454},"#scale:方差\n",[199,98119,98120],{"class":201,"line":333},[199,98121,98122],{"class":1454},"#size:用于确定是几维的数列\n",[31,98124,98125],{},[55,98126],{"alt":57,"src":98127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,98129,98131],{"id":98130},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[31,98133,98134],{},"ndim:秩，维度个数",[31,98136,98137],{},"size:数组元素的个数",[31,98139,98140],{},"shape:数组的形状",[31,98142,98143],{},"dtype:数组元素的类型",[31,98145,98146],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[31,98148,98149],{},"他们都是属性，通过数组.属性的形式来确定",[31,98151,98152],{},"如果需要输出多个可以通过以下方式：",[190,98154,98156],{"className":33221,"code":98155,"language":33223,"meta":57,"style":57},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[196,98157,98158],{"__ignoreMap":57},[199,98159,98160,98162],{"class":201,"line":202},[199,98161,33258],{"class":1018},[199,98163,98164],{"class":205},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98166,98168],{"id":98167},"_26-其他方式创建数组","2.6 其他方式创建数组",[19,98170,98172],{"id":98171},"_261-zeros创建数组","2.6.1 zeros()创建数组",[31,98174,98175],{},"①创建一维数组",[190,98177,98179],{"className":33221,"code":98178,"language":33223,"meta":57,"style":57},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[196,98180,98181,98190,98194,98199,98204],{"__ignoreMap":57},[199,98182,98183,98186,98188],{"class":201,"line":202},[199,98184,98185],{"class":205},"np.zeros(",[199,98187,3528],{"class":1018},[199,98189,1594],{"class":205},[199,98191,98192],{"class":201,"line":36},[199,98193,97957],{"class":898},[199,98195,98196],{"class":201,"line":73},[199,98197,98198],{"class":898},"输出结果：\n",[199,98200,98201],{"class":201,"line":333},[199,98202,98203],{"class":898},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[199,98205,98206],{"class":201,"line":227},[199,98207,97957],{"class":898},[31,98209,98210],{},"上方代码等价于：",[190,98212,98214],{"className":33221,"code":98213,"language":33223,"meta":57,"style":57},"np.zeros(shape=(10))#创建10个元素的0数组\n",[196,98215,98216],{"__ignoreMap":57},[199,98217,98218,98220,98223,98225,98227,98229,98231],{"class":201,"line":202},[199,98219,98185],{"class":205},[199,98221,98222],{"class":8113},"shape",[199,98224,895],{"class":1086},[199,98226,1537],{"class":205},[199,98228,3528],{"class":1018},[199,98230,85030],{"class":205},[199,98232,98233],{"class":1454},"#创建10个元素的0数组\n",[31,98235,98236],{},"也可以指定类型",[190,98238,98240],{"className":33221,"code":98239,"language":33223,"meta":57,"style":57},"#指定类型\nnp.zeros(5,dtype=int)\n",[196,98241,98242,98247],{"__ignoreMap":57},[199,98243,98244],{"class":201,"line":202},[199,98245,98246],{"class":1454},"#指定类型\n",[199,98248,98249,98251,98253,98255,98257,98259,98261],{"class":201,"line":36},[199,98250,98185],{"class":205},[199,98252,1909],{"class":1018},[199,98254,3461],{"class":205},[199,98256,95759],{"class":8113},[199,98258,895],{"class":1086},[199,98260,3100],{"class":1018},[199,98262,1594],{"class":205},[31,98264,98265],{},"②创建二维数组",[190,98267,98269],{"className":33221,"code":98268,"language":33223,"meta":57,"style":57},"np.zeros((3,4),dtype=int)\n",[196,98270,98271],{"__ignoreMap":57},[199,98272,98273,98276,98278,98280,98282,98284,98286,98288,98290],{"class":201,"line":202},[199,98274,98275],{"class":205},"np.zeros((",[199,98277,1920],{"class":1018},[199,98279,3461],{"class":205},[199,98281,1915],{"class":1018},[199,98283,45097],{"class":205},[199,98285,95759],{"class":8113},[199,98287,895],{"class":1086},[199,98289,3100],{"class":1018},[199,98291,1594],{"class":205},[31,98293,98294],{},"③创建三维数组",[190,98296,98298],{"className":33221,"code":98297,"language":33223,"meta":57,"style":57},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[196,98299,98300,98305],{"__ignoreMap":57},[199,98301,98302],{"class":201,"line":202},[199,98303,98304],{"class":1454},"#创建三维数组\n",[199,98306,98307,98309,98311,98313,98315,98317,98319,98321,98323,98325,98327],{"class":201,"line":36},[199,98308,98275],{"class":205},[199,98310,1920],{"class":1018},[199,98312,3461],{"class":205},[199,98314,1915],{"class":1018},[199,98316,3461],{"class":205},[199,98318,1909],{"class":1018},[199,98320,45097],{"class":205},[199,98322,95759],{"class":8113},[199,98324,895],{"class":1086},[199,98326,3100],{"class":1018},[199,98328,1594],{"class":205},[31,98330,98331],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[190,98333,98335],{"className":33221,"code":98334,"language":33223,"meta":57,"style":57},"#使用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",[196,98336,98337,98342,98357,98362,98367,98389],{"__ignoreMap":57},[199,98338,98339],{"class":201,"line":202},[199,98340,98341],{"class":1454},"#使用zeros_like将创建的一维数组变成全0的数组\n",[199,98343,98344,98346,98348,98350,98352,98354],{"class":201,"line":36},[199,98345,2867],{"class":205},[199,98347,895],{"class":1086},[199,98349,95261],{"class":205},[199,98351,1915],{"class":1018},[199,98353,3512],{"class":205},[199,98355,98356],{"class":1454},"#这个得到的结果：一维数组0，1，2，3\n",[199,98358,98359],{"class":201,"line":73},[199,98360,98361],{"class":205},"np.zeros_like(a)\n",[199,98363,98364],{"class":201,"line":333},[199,98365,98366],{"class":1454},"#使用zeros_like将创建的二维数组变成全0的数组\n",[199,98368,98369,98371,98373,98375,98377,98379,98381,98383,98385,98387],{"class":201,"line":227},[199,98370,95565],{"class":205},[199,98372,895],{"class":1086},[199,98374,97686],{"class":205},[199,98376,34338],{"class":8113},[199,98378,895],{"class":1086},[199,98380,1537],{"class":205},[199,98382,1915],{"class":1018},[199,98384,3461],{"class":205},[199,98386,1909],{"class":1018},[199,98388,1554],{"class":205},[199,98390,98391],{"class":201,"line":238},[199,98392,98393],{"class":205},"np.zeros_like(aa)\n",[19,98395,98397],{"id":98396},"_262-ones创建数组","2.6.2 ones()创建数组",[31,98399,98400],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[19,98402,98404],{"id":98403},"_263-empty创建数组","2.6.3 empty()创建数组",[31,98406,98407],{},"①empty()用法",[190,98409,98411],{"className":33221,"code":98410,"language":33223,"meta":57,"style":57},"numpy.empty(shape,dtype=float,order='c')\n",[196,98412,98413],{"__ignoreMap":57},[199,98414,98415,98418,98420,98422,98424,98426,98428,98430,98432],{"class":201,"line":202},[199,98416,98417],{"class":205},"numpy.empty(shape,",[199,98419,95759],{"class":8113},[199,98421,895],{"class":1086},[199,98423,3135],{"class":1018},[199,98425,3461],{"class":205},[199,98427,97556],{"class":8113},[199,98429,895],{"class":1086},[199,98431,78287],{"class":898},[199,98433,1594],{"class":205},[31,98435,98436],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[31,98438,98439],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[31,98441,98442],{},[55,98443],{"alt":57,"src":98444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[31,98446,98447],{},"②empty()用法",[190,98449,98451],{"className":33221,"code":98450,"language":33223,"meta":57,"style":57},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[196,98452,98453,98474,98486,98507,98512],{"__ignoreMap":57},[199,98454,98455,98457,98459,98462,98464,98466,98468,98470,98472],{"class":201,"line":202},[199,98456,3924],{"class":205},[199,98458,895],{"class":1086},[199,98460,98461],{"class":205},"np.empty(",[199,98463,3528],{"class":1018},[199,98465,3461],{"class":205},[199,98467,95759],{"class":8113},[199,98469,895],{"class":1086},[199,98471,3100],{"class":1018},[199,98473,1594],{"class":205},[199,98475,98476,98478,98480,98482,98484],{"class":201,"line":36},[199,98477,3899],{"class":205},[199,98479,895],{"class":1086},[199,98481,95261],{"class":205},[199,98483,1909],{"class":1018},[199,98485,1594],{"class":205},[199,98487,98488,98491,98493,98496,98498,98500,98503,98505],{"class":201,"line":73},[199,98489,98490],{"class":205},"np.add(",[199,98492,1925],{"class":1018},[199,98494,98495],{"class":205},",x,",[199,98497,95313],{"class":8113},[199,98499,895],{"class":1086},[199,98501,98502],{"class":205},"y[:",[199,98504,1909],{"class":1018},[199,98506,7554],{"class":205},[199,98508,98509],{"class":201,"line":333},[199,98510,98511],{"class":1454},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[199,98513,98514],{"class":201,"line":227},[199,98515,98516],{"class":205},"y\n",[31,98518,14377],{},[31,98520,98521],{},[55,98522],{"alt":57,"src":98523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[190,98525,98527],{"className":33221,"code":98526,"language":33223,"meta":57,"style":57},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[196,98528,98529,98545,98565,98580],{"__ignoreMap":57},[199,98530,98531,98533,98535,98537,98539,98541,98543],{"class":201,"line":202},[199,98532,3899],{"class":205},[199,98534,895],{"class":1086},[199,98536,95261],{"class":205},[199,98538,1115],{"class":1018},[199,98540,3461],{"class":205},[199,98542,3428],{"class":1018},[199,98544,1594],{"class":205},[199,98546,98547,98549,98551,98553,98555,98557,98559,98561,98563],{"class":201,"line":36},[199,98548,3924],{"class":205},[199,98550,895],{"class":1086},[199,98552,98461],{"class":205},[199,98554,1909],{"class":1018},[199,98556,3461],{"class":205},[199,98558,95759],{"class":8113},[199,98560,895],{"class":1086},[199,98562,3100],{"class":1018},[199,98564,1594],{"class":205},[199,98566,98567,98570,98572,98574,98576,98578],{"class":201,"line":73},[199,98568,98569],{"class":205},"np.add(x,",[199,98571,1925],{"class":1018},[199,98573,3461],{"class":205},[199,98575,95313],{"class":8113},[199,98577,895],{"class":1086},[199,98579,95708],{"class":205},[199,98581,98582],{"class":201,"line":333},[199,98583,98584],{"class":1454},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[31,98586,98587],{},"③empty_like()",[31,98589,98590],{},[49,98591,98592,98593,98598],{},"创建一个",[49,98594,98595],{},[49,98596,98597],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[31,98600,98601,98604],{},[196,98602,98603],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[31,98606,98607],{},[55,98608],{"alt":57,"src":98609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[19,98611,98613],{"id":98612},"_264-用法","2.6.4 ？？用法",[31,98615,98616],{},"当想查看一个函数的参数时，可以通过？？来实现",[190,98618,98620],{"className":33221,"code":98619,"language":33223,"meta":57,"style":57},"np.full??\n",[196,98621,98622],{"__ignoreMap":57},[199,98623,98624,98627],{"class":201,"line":202},[199,98625,98626],{"class":205},"np.full",[199,98628,98629],{"class":79662},"??\n",[19,98631,98633],{"id":98632},"_265-full创建数组","2.6.5 full()创建数组",[190,98635,98637],{"className":33221,"code":98636,"language":33223,"meta":57,"style":57},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[196,98638,98639,98644],{"__ignoreMap":57},[199,98640,98641],{"class":201,"line":202},[199,98642,98643],{"class":205},"full(shape,fill_value)\n",[199,98645,98646],{"class":201,"line":36},[199,98647,98648],{"class":205},"创建全为某个指定值的数组\n",[31,98650,96789],{},[190,98652,98654],{"className":33221,"code":98653,"language":33223,"meta":57,"style":57},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[196,98655,98656,98661],{"__ignoreMap":57},[199,98657,98658],{"class":201,"line":202},[199,98659,98660],{"class":1454},"#创建一个一维数组,以20进行填充\n",[199,98662,98663,98666,98668,98670,98672],{"class":201,"line":36},[199,98664,98665],{"class":205},"np.full(",[199,98667,3528],{"class":1018},[199,98669,3461],{"class":205},[199,98671,3779],{"class":1018},[199,98673,1594],{"class":205},[31,98675,95550],{},[190,98677,98679],{"className":33221,"code":98678,"language":33223,"meta":57,"style":57},"#创建二维数组\nnp.full((3,5),11)\n",[196,98680,98681,98685],{"__ignoreMap":57},[199,98682,98683],{"class":201,"line":202},[199,98684,96206],{"class":1454},[199,98686,98687,98690,98692,98694,98696,98698,98700],{"class":201,"line":36},[199,98688,98689],{"class":205},"np.full((",[199,98691,1920],{"class":1018},[199,98693,3461],{"class":205},[199,98695,1909],{"class":1018},[199,98697,45097],{"class":205},[199,98699,3554],{"class":1018},[199,98701,1594],{"class":205},[31,98703,98704],{},"③full_like用法",[31,98706,98707],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[31,98709,98710],{},"这里是指定填充而已",[190,98712,98714],{"className":33221,"code":98713,"language":33223,"meta":57,"style":57},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[196,98715,98716,98721,98745,98750],{"__ignoreMap":57},[199,98717,98718],{"class":201,"line":202},[199,98719,98720],{"class":1454},"#创建一个指定形状数组\n",[199,98722,98723,98725,98727,98729,98731,98733,98735,98737,98739,98741,98743],{"class":201,"line":36},[199,98724,2867],{"class":205},[199,98726,895],{"class":1086},[199,98728,95261],{"class":205},[199,98730,1115],{"class":1018},[199,98732,3461],{"class":205},[199,98734,3409],{"class":1018},[199,98736,95266],{"class":205},[199,98738,1915],{"class":1018},[199,98740,3461],{"class":205},[199,98742,3503],{"class":1018},[199,98744,1594],{"class":205},[199,98746,98747],{"class":201,"line":73},[199,98748,98749],{"class":1454},"#进行指定填充\n",[199,98751,98752,98755,98757],{"class":201,"line":333},[199,98753,98754],{"class":205},"np.full_like(a,",[199,98756,3528],{"class":1018},[199,98758,1594],{"class":205},[31,98760,14377],{},[31,98762,98763],{},[55,98764],{"alt":57,"src":98765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[19,98767,98769],{"id":98768},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[627,98771,98773],{"id":98772},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[190,98775,98777],{"className":33221,"code":98776,"language":33223,"meta":57,"style":57},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[196,98778,98779,98796],{"__ignoreMap":57},[199,98780,98781,98784,98786,98788,98790,98792,98794],{"class":201,"line":202},[199,98782,98783],{"class":205},"np.eye(",[199,98785,1915],{"class":1018},[199,98787,3461],{"class":205},[199,98789,95759],{"class":8113},[199,98791,895],{"class":1086},[199,98793,3100],{"class":1018},[199,98795,1594],{"class":205},[199,98797,98798],{"class":201,"line":36},[199,98799,98800],{"class":1454},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[627,98802,98804],{"id":98803},"_2662-法2identity","2.6.6.2 法2：identity()",[190,98806,98808],{"className":33221,"code":98807,"language":33223,"meta":57,"style":57},"#identity()\nnp.identity(5,dtype=int)\n",[196,98809,98810,98815],{"__ignoreMap":57},[199,98811,98812],{"class":201,"line":202},[199,98813,98814],{"class":1454},"#identity()\n",[199,98816,98817,98820,98822,98824,98826,98828,98830],{"class":201,"line":36},[199,98818,98819],{"class":205},"np.identity(",[199,98821,1909],{"class":1018},[199,98823,3461],{"class":205},[199,98825,95759],{"class":8113},[199,98827,895],{"class":1086},[199,98829,3100],{"class":1018},[199,98831,1594],{"class":205},[31,98833,98834],{},"两个函数是有区别的",[31,98836,98837],{},[55,98838],{"alt":57,"src":98839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[31,98841,98842],{},[55,98843],{"alt":57,"src":98844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[190,98846,98848],{"className":33221,"code":98847,"language":33223,"meta":57,"style":57},"# 创建一个 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",[196,98849,98850,98855,98867,98872,98877,98882,98887,98891,98896,98916,98920,98925,98930],{"__ignoreMap":57},[199,98851,98852],{"class":201,"line":202},[199,98853,98854],{"class":1454},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[199,98856,98857,98859,98861,98863,98865],{"class":201,"line":36},[199,98858,98783],{"class":205},[199,98860,1920],{"class":1018},[199,98862,1912],{"class":205},[199,98864,1915],{"class":1018},[199,98866,1594],{"class":205},[199,98868,98869],{"class":201,"line":73},[199,98870,98871],{"class":1454},"# 输出:\n",[199,98873,98874],{"class":201,"line":333},[199,98875,98876],{"class":1454},"# [[1. 0. 0. 0.]\n",[199,98878,98879],{"class":201,"line":227},[199,98880,98881],{"class":1454},"#  [0. 1. 0. 0.]\n",[199,98883,98884],{"class":201,"line":238},[199,98885,98886],{"class":1454},"#  [0. 0. 1. 0.]]\n",[199,98888,98889],{"class":201,"line":252},[199,98890,907],{"emptyLinePlaceholder":906},[199,98892,98893],{"class":201,"line":388},[199,98894,98895],{"class":1454},"# 对角线向上偏移1\n",[199,98897,98898,98900,98902,98904,98906,98908,98910,98912,98914],{"class":201,"line":415},[199,98899,98783],{"class":205},[199,98901,1920],{"class":1018},[199,98903,1912],{"class":205},[199,98905,1915],{"class":1018},[199,98907,1912],{"class":205},[199,98909,3574],{"class":8113},[199,98911,895],{"class":1086},[199,98913,1115],{"class":1018},[199,98915,1594],{"class":205},[199,98917,98918],{"class":201,"line":426},[199,98919,98871],{"class":1454},[199,98921,98922],{"class":201,"line":1015},[199,98923,98924],{"class":1454},"# [[0. 1. 0. 0.]\n",[199,98926,98927],{"class":201,"line":1031},[199,98928,98929],{"class":1454},"#  [0. 0. 1. 0.]\n",[199,98931,98932],{"class":201,"line":1043},[199,98933,98934],{"class":1454},"#  [0. 0. 0. 1.]]\n",[19,98936,98938],{"id":98937},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[190,98940,98942],{"className":33221,"code":98941,"language":33223,"meta":57,"style":57},"#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",[196,98943,98944,98949,98953,98958,98963,98968,98973,98978,98983,98988,98993],{"__ignoreMap":57},[199,98945,98946],{"class":201,"line":202},[199,98947,98948],{"class":1454},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[199,98950,98951],{"class":201,"line":36},[199,98952,97957],{"class":898},[199,98954,98955],{"class":201,"line":73},[199,98956,98957],{"class":898},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[199,98959,98960],{"class":201,"line":333},[199,98961,98962],{"class":898},"参数介绍：\n",[199,98964,98965],{"class":201,"line":227},[199,98966,98967],{"class":898},"start：序列的起始值\n",[199,98969,98970],{"class":201,"line":238},[199,98971,98972],{"class":898},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[199,98974,98975],{"class":201,"line":252},[199,98976,98977],{"class":898},"num：要生长的等步长的样本数量，默认为50\n",[199,98979,98980],{"class":201,"line":388},[199,98981,98982],{"class":898},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[199,98984,98985],{"class":201,"line":415},[199,98986,98987],{"class":898},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[199,98989,98990],{"class":201,"line":426},[199,98991,98992],{"class":898},"dtype：ndarry的数据类型\n",[199,98994,98995],{"class":201,"line":1015},[199,98996,97957],{"class":898},[31,98998,98999],{},[55,99000],{"alt":57,"src":99001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[31,99003,99004],{},"这里num=是可以省略的",[31,99006,99007],{},"也就是下方两行代码结果是一模一样的",[190,99009,99011],{"className":33221,"code":99010,"language":33223,"meta":57,"style":57},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[196,99012,99013,99030],{"__ignoreMap":57},[199,99014,99015,99018,99020,99022,99024,99026,99028],{"class":201,"line":202},[199,99016,99017],{"class":205},"np.linspace(",[199,99019,1115],{"class":1018},[199,99021,3461],{"class":205},[199,99023,1909],{"class":1018},[199,99025,3461],{"class":205},[199,99027,1909],{"class":1018},[199,99029,1594],{"class":205},[199,99031,99032,99034,99036,99038,99040,99042,99044,99046,99048],{"class":201,"line":36},[199,99033,99017],{"class":205},[199,99035,1115],{"class":1018},[199,99037,3461],{"class":205},[199,99039,1909],{"class":1018},[199,99041,3461],{"class":205},[199,99043,4594],{"class":8113},[199,99045,895],{"class":1086},[199,99047,1909],{"class":1018},[199,99049,1594],{"class":205},[19,99051,99053],{"id":99052},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[190,99055,99057],{"className":33221,"code":99056,"language":33223,"meta":57,"style":57},"#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",[196,99058,99059,99064,99068,99073,99078,99083,99088,99092,99097,99102,99106],{"__ignoreMap":57},[199,99060,99061],{"class":201,"line":202},[199,99062,99063],{"class":1454},"#logspace函数用于创建一个等比数列，格式如下：\n",[199,99065,99066],{"class":201,"line":36},[199,99067,97957],{"class":898},[199,99069,99070],{"class":201,"line":73},[199,99071,99072],{"class":898},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[199,99074,99075],{"class":201,"line":333},[199,99076,99077],{"class":898},"参数为：\n",[199,99079,99080],{"class":201,"line":227},[199,99081,99082],{"class":898},"start:序列的起始位置为：base**start\n",[199,99084,99085],{"class":201,"line":238},[199,99086,99087],{"class":898},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[199,99089,99090],{"class":201,"line":252},[199,99091,98977],{"class":898},[199,99093,99094],{"class":201,"line":388},[199,99095,99096],{"class":898},"endpoint：是否包含 stop 这个值，默认是 True\n",[199,99098,99099],{"class":201,"line":415},[199,99100,99101],{"class":898},"base：对数的底数，默认是 10（常见对数）\n",[199,99103,99104],{"class":201,"line":426},[199,99105,98992],{"class":898},[199,99107,99108],{"class":201,"line":1015},[199,99109,97957],{"class":898},[31,99111,99112],{},[55,99113],{"alt":57,"src":99114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[31,99116,99117],{},"logspace()函数中的num参数也是可以不写num=的",[31,99119,99120],{},"endpoint是不可以省略的",[1002,99122,99123],{},"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":57,"searchDepth":36,"depth":36,"links":99125},[99126,99130,99135,99139,99143,99144],{"id":97515,"depth":36,"text":97516,"children":99127},[99128,99129],{"id":97519,"depth":73,"text":97520},{"id":97592,"depth":73,"text":97593},{"id":97624,"depth":36,"text":97625,"children":99131},[99132,99133,99134],{"id":97628,"depth":73,"text":97629},{"id":97810,"depth":73,"text":97811},{"id":97888,"depth":73,"text":97889},{"id":97923,"depth":36,"text":97924,"children":99136},[99137,99138],{"id":97927,"depth":73,"text":97928},{"id":97984,"depth":73,"text":97985},{"id":98080,"depth":36,"text":98081,"children":99140},[99141,99142],{"id":98084,"depth":73,"text":98085},{"id":98096,"depth":73,"text":98097},{"id":98130,"depth":36,"text":98131},{"id":98167,"depth":36,"text":98168,"children":99145},[99146,99147,99148,99149,99150,99151,99152,99153],{"id":98171,"depth":73,"text":98172},{"id":98396,"depth":73,"text":98397},{"id":98403,"depth":73,"text":98404},{"id":98612,"depth":73,"text":98613},{"id":98632,"depth":73,"text":98633},{"id":98768,"depth":73,"text":98769},{"id":98937,"depth":73,"text":98938},{"id":99052,"depth":73,"text":99053},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97507,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99160,"title":99161,"body":99162,"description":3023,"extension":3024,"meta":99255,"navigation":906,"path":99256,"seo":99257,"stem":99258,"__hash__":99259},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99163,"toc":99253},[99164,99167,99170,99173,99176,99179,99182,99185,99188,99191,99194,99197,99199,99202,99205,99210,99213,99216,99250],[10,99165,99161],{"id":99166},"_20魔法命令mprun",[31,99168,99169],{},"逐行分析数据内存的使用情况",[31,99171,99172],{},"语法格式：",[31,99174,99175],{},"%mprun -f 模块名.函数名 模块名.函数名()",[31,99177,99178],{},"分析结果列如下：",[31,99180,99181],{},"Line行号",[31,99183,99184],{},"Mem usage内存使用大小",[31,99186,99187],{},"increment内存增量",[31,99189,99190],{},"Line content代码内容",[31,99192,99193],{},"补充说明：",[31,99195,99196],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[31,99198,97462],{},[31,99200,99201],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[31,99203,99204],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[31,99206,99207],{},[55,99208],{"alt":57,"src":99209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[31,99211,99212],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[31,99214,99215],{},"这时候需要重新加载模块",[190,99217,99219],{"className":33221,"code":99218,"language":33223,"meta":57,"style":57},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[196,99220,99221,99226,99233,99238],{"__ignoreMap":57},[199,99222,99223],{"class":201,"line":202},[199,99224,99225],{"class":1454},"#重新加载模块\n",[199,99227,99228,99230],{"class":201,"line":36},[199,99229,33235],{"class":1086},[199,99231,99232],{"class":205}," importlib\n",[199,99234,99235],{"class":201,"line":73},[199,99236,99237],{"class":205},"importlib.reload(mprun_test)\n",[199,99239,99240,99242,99245,99247],{"class":201,"line":333},[199,99241,3412],{"class":1086},[199,99243,99244],{"class":205},"mprun ",[199,99246,1998],{"class":1086},[199,99248,99249],{"class":205},"f mprun_test.fun_test mprun_test.fun_test()\n",[1002,99251,99252],{},"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":57,"searchDepth":36,"depth":36,"links":99254},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99161,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99261,"title":99262,"body":99263,"description":3023,"extension":3024,"meta":99280,"navigation":906,"path":99281,"seo":99282,"stem":99283,"__hash__":99284},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99264,"toc":99278},[99265,99268,99273],[10,99266,99262],{"id":99267},"_3一维数组的索引和切片",[31,99269,99270],{},[55,99271],{"alt":57,"src":99272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[31,99274,99275],{},[55,99276],{"alt":57,"src":99277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":57,"searchDepth":36,"depth":36,"links":99279},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99262,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99286,"title":99287,"body":99288,"description":3023,"extension":3024,"meta":99771,"navigation":906,"path":99772,"seo":99773,"stem":99774,"__hash__":99775},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99289,"toc":99769},[99290,99293,99296,99301,99334,99337,99375,99378,99412,99415,99520,99523,99560,99563,99664,99667,99718,99721,99763,99766],[10,99291,99287],{"id":99292},"_4二维数组的索引与切片",[31,99294,99295],{},"①获取指定单个元素",[31,99297,99298],{},[55,99299],{"alt":57,"src":99300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[190,99302,99304],{"className":33221,"code":99303,"language":33223,"meta":57,"style":57},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[196,99305,99306,99311,99316,99321],{"__ignoreMap":57},[199,99307,99308],{"class":201,"line":202},[199,99309,99310],{"class":1454},"#获取元素9\n",[199,99312,99313],{"class":201,"line":36},[199,99314,99315],{"class":1454},"#先获取所在行，再获取所在列\n",[199,99317,99318],{"class":201,"line":73},[199,99319,99320],{"class":1454},"#数组[行索引号，列索引号]\n",[199,99322,99323,99326,99328,99330,99332],{"class":201,"line":333},[199,99324,99325],{"class":205},"a[",[199,99327,1115],{"class":1018},[199,99329,3461],{"class":205},[199,99331,1925],{"class":1018},[199,99333,1932],{"class":205},[31,99335,99336],{},"②获取整行元素",[190,99338,99340],{"className":33221,"code":99339,"language":33223,"meta":57,"style":57},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[196,99341,99342,99347,99352,99360,99365],{"__ignoreMap":57},[199,99343,99344],{"class":201,"line":202},[199,99345,99346],{"class":1454},"#获取整行 数组[行索引号]\n",[199,99348,99349],{"class":201,"line":36},[199,99350,99351],{"class":1454},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[199,99353,99354,99356,99358],{"class":201,"line":73},[199,99355,99325],{"class":205},[199,99357,1925],{"class":1018},[199,99359,1932],{"class":205},[199,99361,99362],{"class":201,"line":333},[199,99363,99364],{"class":1454},"#也可以负索引获取一行\n",[199,99366,99367,99369,99371,99373],{"class":201,"line":227},[199,99368,99325],{"class":205},[199,99370,1998],{"class":1086},[199,99372,1115],{"class":1018},[199,99374,1932],{"class":205},[31,99376,99377],{},"③获取整列元素",[190,99379,99381],{"className":33221,"code":99380,"language":33223,"meta":57,"style":57},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[196,99382,99383,99388,99397,99402],{"__ignoreMap":57},[199,99384,99385],{"class":201,"line":202},[199,99386,99387],{"class":1454},"#获取整列 数组名[:,列索引]\n",[199,99389,99390,99393,99395],{"class":201,"line":36},[199,99391,99392],{"class":205},"a[:,",[199,99394,1925],{"class":1018},[199,99396,1932],{"class":205},[199,99398,99399],{"class":201,"line":73},[199,99400,99401],{"class":1454},"#也可以负索引获取一列\n",[199,99403,99404,99406,99408,99410],{"class":201,"line":333},[199,99405,99392],{"class":205},[199,99407,1998],{"class":1086},[199,99409,1115],{"class":1018},[199,99411,1932],{"class":205},[31,99413,99414],{},"④部分行部分列的元素",[190,99416,99418],{"className":33221,"code":99417,"language":33223,"meta":57,"style":57},"#部分行部分列 数组名[行切片，列切片]\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",[196,99419,99420,99425,99435,99439,99443,99448,99453,99457,99469,99473,99477,99482,99487,99492,99497,99501,99506],{"__ignoreMap":57},[199,99421,99422],{"class":201,"line":202},[199,99423,99424],{"class":1454},"#部分行部分列 数组名[行切片，列切片]\n",[199,99426,99427,99430,99432],{"class":201,"line":36},[199,99428,99429],{"class":205},"a[:",[199,99431,1925],{"class":1018},[199,99433,99434],{"class":205},",:]\n",[199,99436,99437],{"class":201,"line":73},[199,99438,95823],{"class":1454},[199,99440,99441],{"class":201,"line":333},[199,99442,96187],{"class":898},[199,99444,99445],{"class":201,"line":227},[199,99446,99447],{"class":898},"array([[ 1,  2,  3,  4,  5,  6],\n",[199,99449,99450],{"class":201,"line":238},[199,99451,99452],{"class":898},"       [ 7,  8,  9, 10, 11, 12]])\n",[199,99454,99455],{"class":201,"line":252},[199,99456,96187],{"class":898},[199,99458,99459,99461,99463,99465,99467],{"class":201,"line":388},[199,99460,99392],{"class":205},[199,99462,1115],{"class":1018},[199,99464,3938],{"class":205},[199,99466,1915],{"class":1018},[199,99468,1932],{"class":205},[199,99470,99471],{"class":201,"line":415},[199,99472,95823],{"class":1454},[199,99474,99475],{"class":201,"line":426},[199,99476,96187],{"class":898},[199,99478,99479],{"class":201,"line":1015},[199,99480,99481],{"class":898},"array([[ 2,  3,  4],\n",[199,99483,99484],{"class":201,"line":1031},[199,99485,99486],{"class":898},"       [ 8,  9, 10],\n",[199,99488,99489],{"class":201,"line":1043},[199,99490,99491],{"class":898},"       [14, 15, 16],\n",[199,99493,99494],{"class":201,"line":1049},[199,99495,99496],{"class":898},"       [20, 21, 22]])\n",[199,99498,99499],{"class":201,"line":1054},[199,99500,96187],{"class":898},[199,99502,99503],{"class":201,"line":1062},[199,99504,99505],{"class":1454},"#对列行同时进行切片，使用了step参数\n",[199,99507,99508,99511,99513,99516,99518],{"class":201,"line":1075},[199,99509,99510],{"class":205},"a[::",[199,99512,1925],{"class":1018},[199,99514,99515],{"class":205},",::",[199,99517,1925],{"class":1018},[199,99519,1932],{"class":205},[31,99521,99522],{},"⑤同时获取两个元素",[190,99524,99526],{"className":33221,"code":99525,"language":33223,"meta":57,"style":57},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[196,99527,99528,99533,99538],{"__ignoreMap":57},[199,99529,99530],{"class":201,"line":202},[199,99531,99532],{"class":1454},"#同时获取第三行第二列，第四行第一列\n",[199,99534,99535],{"class":201,"line":36},[199,99536,99537],{"class":1454},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[199,99539,99540,99543,99545,99547,99549,99551,99553,99555,99557],{"class":201,"line":73},[199,99541,99542],{"class":205},"a[(",[199,99544,1925],{"class":1018},[199,99546,3461],{"class":205},[199,99548,1920],{"class":1018},[199,99550,45088],{"class":205},[199,99552,1115],{"class":1018},[199,99554,3461],{"class":205},[199,99556,1025],{"class":1018},[199,99558,99559],{"class":205},")]\n",[31,99561,99562],{},"⑥切片，对行进行反向获取",[190,99564,99566],{"className":33221,"code":99565,"language":33223,"meta":57,"style":57},"#切片 对所有行进行反向获取\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",[196,99567,99568,99573,99583,99587,99591,99596,99601,99606,99611,99615,99620,99636,99640,99645,99650,99655,99660],{"__ignoreMap":57},[199,99569,99570],{"class":201,"line":202},[199,99571,99572],{"class":1454},"#切片 对所有行进行反向获取\n",[199,99574,99575,99577,99579,99581],{"class":201,"line":36},[199,99576,99510],{"class":205},[199,99578,1998],{"class":1086},[199,99580,1115],{"class":1018},[199,99582,1932],{"class":205},[199,99584,99585],{"class":201,"line":73},[199,99586,95823],{"class":1454},[199,99588,99589],{"class":201,"line":333},[199,99590,96187],{"class":898},[199,99592,99593],{"class":201,"line":227},[199,99594,99595],{"class":898},"array([[19, 20, 21, 22, 23, 24],\n",[199,99597,99598],{"class":201,"line":238},[199,99599,99600],{"class":898},"       [13, 14, 15, 16, 17, 18],\n",[199,99602,99603],{"class":201,"line":252},[199,99604,99605],{"class":898},"       [ 7,  8,  9, 10, 11, 12],\n",[199,99607,99608],{"class":201,"line":388},[199,99609,99610],{"class":898},"       [ 1,  2,  3,  4,  5,  6]])\n",[199,99612,99613],{"class":201,"line":415},[199,99614,96187],{"class":898},[199,99616,99617],{"class":201,"line":426},[199,99618,99619],{"class":1454},"#对行列都进行反向切片获取\n",[199,99621,99622,99624,99626,99628,99630,99632,99634],{"class":201,"line":1015},[199,99623,99510],{"class":205},[199,99625,1998],{"class":1086},[199,99627,1115],{"class":1018},[199,99629,99515],{"class":205},[199,99631,1998],{"class":1086},[199,99633,1115],{"class":1018},[199,99635,1932],{"class":205},[199,99637,99638],{"class":201,"line":1031},[199,99639,96187],{"class":898},[199,99641,99642],{"class":201,"line":1043},[199,99643,99644],{"class":898},"array([[24, 23, 22, 21, 20, 19],\n",[199,99646,99647],{"class":201,"line":1049},[199,99648,99649],{"class":898},"       [18, 17, 16, 15, 14, 13],\n",[199,99651,99652],{"class":201,"line":1054},[199,99653,99654],{"class":898},"       [12, 11, 10,  9,  8,  7],\n",[199,99656,99657],{"class":201,"line":1062},[199,99658,99659],{"class":898},"       [ 6,  5,  4,  3,  2,  1]])\n",[199,99661,99662],{"class":201,"line":1075},[199,99663,96187],{"class":898},[31,99665,99666],{},"⑦修改元素",[190,99668,99670],{"className":33221,"code":99669,"language":33223,"meta":57,"style":57},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[196,99671,99672,99677,99695,99700],{"__ignoreMap":57},[199,99673,99674],{"class":201,"line":202},[199,99675,99676],{"class":1454},"#获取前两行和前两列\n",[199,99678,99679,99682,99684,99686,99688,99691,99693],{"class":201,"line":36},[199,99680,99681],{"class":205},"sub_a",[199,99683,895],{"class":1086},[199,99685,99429],{"class":205},[199,99687,1925],{"class":1018},[199,99689,99690],{"class":205},",:",[199,99692,1925],{"class":1018},[199,99694,1932],{"class":205},[199,99696,99697],{"class":201,"line":73},[199,99698,99699],{"class":1454},"#修改sub_a第一个元素的值\n",[199,99701,99702,99705,99707,99709,99711,99713,99715],{"class":201,"line":333},[199,99703,99704],{"class":205},"sub_a[",[199,99706,1025],{"class":1018},[199,99708,3461],{"class":205},[199,99710,1025],{"class":1018},[199,99712,1667],{"class":205},[199,99714,895],{"class":1086},[199,99716,99717],{"class":1018},"100\n",[31,99719,99720],{},"⑧数组复制copy()",[190,99722,99724],{"className":33221,"code":99723,"language":33223,"meta":57,"style":57},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[196,99725,99726,99731,99741,99746],{"__ignoreMap":57},[199,99727,99728],{"class":201,"line":202},[199,99729,99730],{"class":1454},"#数组复制\n",[199,99732,99733,99736,99738],{"class":201,"line":36},[199,99734,99735],{"class":205},"copy_a",[199,99737,895],{"class":1086},[199,99739,99740],{"class":205},"np.copy(sub_a)\n",[199,99742,99743],{"class":201,"line":73},[199,99744,99745],{"class":1454},"#修改copy_a后不影响原数组\n",[199,99747,99748,99751,99753,99755,99757,99759,99761],{"class":201,"line":333},[199,99749,99750],{"class":205},"copy_a[",[199,99752,1025],{"class":1018},[199,99754,3461],{"class":205},[199,99756,1025],{"class":1018},[199,99758,1667],{"class":205},[199,99760,895],{"class":1086},[199,99762,99717],{"class":1018},[31,99764,99765],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1002,99767,99768],{},"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":57,"searchDepth":36,"depth":36,"links":99770},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99287,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99777,"title":99778,"body":99779,"description":3023,"extension":3024,"meta":100271,"navigation":906,"path":100272,"seo":100273,"stem":100274,"__hash__":100275},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99780,"toc":100263},[99781,99784,99788,99791,99794,99847,99850,99875,99878,99897,99917,99920,99936,99940,99986,99990,100032,100036,100039,100042,100045,100048,100051,100113,100173,100177,100180,100237,100241,100246,100255,100260],[10,99782,99778],{"id":99783},"_5改变数组的维度",[14,99785,99787],{"id":99786},"_51-使用reshape","5.1 使用reshape()",[31,99789,99790],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[31,99792,99793],{},"①一维数组转换为二维数组",[190,99795,99797],{"className":33221,"code":99796,"language":33223,"meta":57,"style":57},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[196,99798,99799,99815,99820,99825,99830],{"__ignoreMap":57},[199,99800,99801,99803,99805,99807,99809,99811,99813],{"class":201,"line":202},[199,99802,2867],{"class":205},[199,99804,895],{"class":1086},[199,99806,95261],{"class":205},[199,99808,1115],{"class":1018},[199,99810,3461],{"class":205},[199,99812,3604],{"class":1018},[199,99814,1594],{"class":205},[199,99816,99817],{"class":201,"line":36},[199,99818,99819],{"class":1454},"#将一维数组进行转换\n",[199,99821,99822],{"class":201,"line":73},[199,99823,99824],{"class":1454},"#注意点：元素个数不可以变\n",[199,99826,99827],{"class":201,"line":333},[199,99828,99829],{"class":1454},"#转换维度要保持一致，不一致就异常！！！\n",[199,99831,99832,99834,99836,99839,99841,99843,99845],{"class":201,"line":227},[199,99833,95565],{"class":205},[199,99835,895],{"class":1086},[199,99837,99838],{"class":205},"a.reshape(",[199,99840,1925],{"class":1018},[199,99842,3461],{"class":205},[199,99844,3428],{"class":1018},[199,99846,1594],{"class":205},[31,99848,99849],{},"②一维数组转换为三维数组",[190,99851,99853],{"className":33221,"code":99852,"language":33223,"meta":57,"style":57},"aaa=a.reshape(2,3,2)\n",[196,99854,99855],{"__ignoreMap":57},[199,99856,99857,99859,99861,99863,99865,99867,99869,99871,99873],{"class":201,"line":202},[199,99858,97780],{"class":205},[199,99860,895],{"class":1086},[199,99862,99838],{"class":205},[199,99864,1925],{"class":1018},[199,99866,3461],{"class":205},[199,99868,1920],{"class":1018},[199,99870,3461],{"class":205},[199,99872,1925],{"class":1018},[199,99874,1594],{"class":205},[31,99876,99877],{},"③二维数组转化为一维数组",[190,99879,99881],{"className":33221,"code":99880,"language":33223,"meta":57,"style":57},"#知道元素个数：\naa.reshape(12)\n",[196,99882,99883,99888],{"__ignoreMap":57},[199,99884,99885],{"class":201,"line":202},[199,99886,99887],{"class":1454},"#知道元素个数：\n",[199,99889,99890,99893,99895],{"class":201,"line":36},[199,99891,99892],{"class":205},"aa.reshape(",[199,99894,3579],{"class":1018},[199,99896,1594],{"class":205},[190,99898,99900],{"className":33221,"code":99899,"language":33223,"meta":57,"style":57},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[196,99901,99902,99907],{"__ignoreMap":57},[199,99903,99904],{"class":201,"line":202},[199,99905,99906],{"class":1454},"#不知道元素个数，参数传递-1\n",[199,99908,99909,99911,99913,99915],{"class":201,"line":36},[199,99910,99892],{"class":205},[199,99912,1998],{"class":1086},[199,99914,1115],{"class":1018},[199,99916,1594],{"class":205},[31,99918,99919],{},"④三维数组转换为一维数组",[190,99921,99923],{"className":33221,"code":99922,"language":33223,"meta":57,"style":57},"aaa.reshape(-1)\n",[196,99924,99925],{"__ignoreMap":57},[199,99926,99927,99930,99932,99934],{"class":201,"line":202},[199,99928,99929],{"class":205},"aaa.reshape(",[199,99931,1998],{"class":1086},[199,99933,1115],{"class":1018},[199,99935,1594],{"class":205},[14,99937,99939],{"id":99938},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[190,99941,99943],{"className":33221,"code":99942,"language":33223,"meta":57,"style":57},"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",[196,99944,99945,99972,99977,99981],{"__ignoreMap":57},[199,99946,99947,99949,99951,99953,99955,99957,99959,99961,99963,99965,99967,99969],{"class":201,"line":202},[199,99948,95565],{"class":205},[199,99950,895],{"class":1086},[199,99952,95261],{"class":205},[199,99954,1115],{"class":1018},[199,99956,3461],{"class":205},[199,99958,3604],{"class":1018},[199,99960,95266],{"class":205},[199,99962,1925],{"class":1018},[199,99964,3461],{"class":205},[199,99966,3428],{"class":1018},[199,99968,3512],{"class":205},[199,99970,99971],{"class":1454},"#转换为2行6列的数组\n",[199,99973,99974],{"class":201,"line":36},[199,99975,99976],{"class":205},"aa.revel()\n",[199,99978,99979],{"class":201,"line":73},[199,99980,95823],{"class":1454},[199,99982,99983],{"class":201,"line":333},[199,99984,99985],{"class":1454},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99987,99989],{"id":99988},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[190,99991,99993],{"className":33221,"code":99992,"language":33223,"meta":57,"style":57},"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",[196,99994,99995,100019,100024,100028],{"__ignoreMap":57},[199,99996,99997,99999,100001,100003,100005,100007,100009,100011,100013,100015,100017],{"class":201,"line":202},[199,99998,95565],{"class":205},[199,100000,895],{"class":1086},[199,100002,95261],{"class":205},[199,100004,1115],{"class":1018},[199,100006,3461],{"class":205},[199,100008,3604],{"class":1018},[199,100010,95266],{"class":205},[199,100012,1925],{"class":1018},[199,100014,3461],{"class":205},[199,100016,3428],{"class":1018},[199,100018,1594],{"class":205},[199,100020,100021],{"class":201,"line":36},[199,100022,100023],{"class":205},"aa.flatten()\n",[199,100025,100026],{"class":201,"line":73},[199,100027,95823],{"class":1454},[199,100029,100030],{"class":201,"line":333},[199,100031,99985],{"class":1454},[14,100033,100035],{"id":100034},"_54-使用resize","5.4 使用resize()",[31,100037,100038],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[31,100040,100041],{},"通过resize方法可以改变数组的维度",[31,100043,100044],{},"#resize修改数组维度",[31,100046,100047],{},"#以元组的形式指定形状",[31,100049,100050],{},"#改变的是原数组",[190,100052,100054],{"className":33221,"code":100053,"language":33223,"meta":57,"style":57},"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",[196,100055,100056,100072,100092,100105,100109],{"__ignoreMap":57},[199,100057,100058,100060,100062,100064,100066,100068,100070],{"class":201,"line":202},[199,100059,2867],{"class":205},[199,100061,895],{"class":1086},[199,100063,95261],{"class":205},[199,100065,1115],{"class":1018},[199,100067,3461],{"class":205},[199,100069,3604],{"class":1018},[199,100071,1594],{"class":205},[199,100073,100074,100077,100079,100081,100083,100085,100087,100089],{"class":201,"line":36},[199,100075,100076],{"class":205},"a.shape",[199,100078,895],{"class":1086},[199,100080,1537],{"class":205},[199,100082,1925],{"class":1018},[199,100084,3461],{"class":205},[199,100086,3428],{"class":1018},[199,100088,3512],{"class":205},[199,100090,100091],{"class":1454},"#改变了原数组\n",[199,100093,100094,100096,100098,100101,100103],{"class":201,"line":73},[199,100095,2867],{"class":205},[199,100097,895],{"class":1086},[199,100099,100100],{"class":205},"resize((",[199,100102,3579],{"class":1018},[199,100104,1554],{"class":205},[199,100106,100107],{"class":201,"line":333},[199,100108,95823],{"class":1454},[199,100110,100111],{"class":201,"line":227},[199,100112,99985],{"class":1454},[190,100114,100116],{"className":33221,"code":100115,"language":33223,"meta":57,"style":57},"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",[196,100117,100118,100131,100135,100139,100144,100149,100154,100159,100164,100169],{"__ignoreMap":57},[199,100119,100120,100123,100125,100127,100129],{"class":201,"line":202},[199,100121,100122],{"class":205},"a.resize((",[199,100124,3428],{"class":1018},[199,100126,3461],{"class":205},[199,100128,1925],{"class":1018},[199,100130,1554],{"class":205},[199,100132,100133],{"class":201,"line":36},[199,100134,95823],{"class":1454},[199,100136,100137],{"class":201,"line":73},[199,100138,96187],{"class":898},[199,100140,100141],{"class":201,"line":333},[199,100142,100143],{"class":898},"array([[ 1,  2],\n",[199,100145,100146],{"class":201,"line":227},[199,100147,100148],{"class":898},"       [ 3,  4],\n",[199,100150,100151],{"class":201,"line":238},[199,100152,100153],{"class":898},"       [ 5,  6],\n",[199,100155,100156],{"class":201,"line":252},[199,100157,100158],{"class":898},"       [ 7,  8],\n",[199,100160,100161],{"class":201,"line":388},[199,100162,100163],{"class":898},"       [ 9, 10],\n",[199,100165,100166],{"class":201,"line":415},[199,100167,100168],{"class":898},"       [11, 12]])\n",[199,100170,100171],{"class":201,"line":426},[199,100172,96187],{"class":898},[14,100174,100176],{"id":100175},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[31,100178,100179],{},"改变了原数组",[190,100181,100183],{"className":33221,"code":100182,"language":33223,"meta":57,"style":57},"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",[196,100184,100185,100201,100217,100221,100225,100229,100233],{"__ignoreMap":57},[199,100186,100187,100189,100191,100193,100195,100197,100199],{"class":201,"line":202},[199,100188,2867],{"class":205},[199,100190,895],{"class":1086},[199,100192,95261],{"class":205},[199,100194,1115],{"class":1018},[199,100196,3461],{"class":205},[199,100198,3604],{"class":1018},[199,100200,1594],{"class":205},[199,100202,100203,100205,100207,100209,100211,100213,100215],{"class":201,"line":36},[199,100204,100076],{"class":205},[199,100206,895],{"class":1086},[199,100208,1537],{"class":205},[199,100210,1925],{"class":1018},[199,100212,3461],{"class":205},[199,100214,3428],{"class":1018},[199,100216,1594],{"class":205},[199,100218,100219],{"class":201,"line":73},[199,100220,95823],{"class":1454},[199,100222,100223],{"class":201,"line":333},[199,100224,96187],{"class":898},[199,100226,100227],{"class":201,"line":227},[199,100228,99447],{"class":898},[199,100230,100231],{"class":201,"line":238},[199,100232,99452],{"class":898},[199,100234,100235],{"class":201,"line":252},[199,100236,96187],{"class":898},[14,100238,100240],{"id":100239},"_56-重要比较","5.6 重要比较：",[31,100242,100243],{},[55,100244],{"alt":57,"src":100245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[31,100247,100248,100249,100251,100252,100254],{},"口诀：NumPy 函数要么用 ",[196,100250,98222],{},"，要么用 ",[196,100253,34338],{},"，创建结构用 shape，造数据用 size",[31,100256,100257],{},[55,100258],{"alt":57,"src":100259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1002,100261,100262],{},"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":57,"searchDepth":36,"depth":36,"links":100264},[100265,100266,100267,100268,100269,100270],{"id":99786,"depth":36,"text":99787},{"id":99938,"depth":36,"text":99939},{"id":99988,"depth":36,"text":99989},{"id":100034,"depth":36,"text":100035},{"id":100175,"depth":36,"text":100176},{"id":100239,"depth":36,"text":100240},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99778,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100277,"title":100278,"body":100279,"description":3023,"extension":3024,"meta":101351,"navigation":906,"path":101352,"seo":101353,"stem":101354,"__hash__":101355},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100280,"toc":101345},[100281,100284,100288,100291,100294,100297,100362,100365,100405,100408,100490,100493,100498,100520,100522,100527,100532,100535,100538,100693,100696,100898,100902,100905,100908,100976,100978,100983,100986,100989,101069,101073,101076,101078,101151,101153,101158,101160,101240,101244,101247,101250,101253,101256,101259,101262,101342],[10,100282,100278],{"id":100283},"_6数组的拼接",[14,100285,100287],{"id":100286},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[31,100289,100290],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[31,100292,100293],{},"函数内部传两个数列构成的数列或者元组",[31,100295,100296],{},"①一维数组的拼接",[190,100298,100300],{"className":33221,"code":100299,"language":33223,"meta":57,"style":57},"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",[196,100301,100302,100322,100342,100347,100352,100357],{"__ignoreMap":57},[199,100303,100304,100306,100308,100310,100312,100314,100316,100318,100320],{"class":201,"line":202},[199,100305,2867],{"class":205},[199,100307,895],{"class":1086},[199,100309,95283],{"class":205},[199,100311,1115],{"class":1018},[199,100313,3461],{"class":205},[199,100315,1925],{"class":1018},[199,100317,3461],{"class":205},[199,100319,1920],{"class":1018},[199,100321,7554],{"class":205},[199,100323,100324,100326,100328,100330,100332,100334,100336,100338,100340],{"class":201,"line":36},[199,100325,3349],{"class":205},[199,100327,895],{"class":1086},[199,100329,95283],{"class":205},[199,100331,1915],{"class":1018},[199,100333,3461],{"class":205},[199,100335,1909],{"class":1018},[199,100337,3461],{"class":205},[199,100339,3428],{"class":1018},[199,100341,7554],{"class":205},[199,100343,100344],{"class":201,"line":73},[199,100345,100346],{"class":1454},"#调用concatenate进行数组拼接\n",[199,100348,100349],{"class":201,"line":333},[199,100350,100351],{"class":205},"np.concatenate((a,b))\n",[199,100353,100354],{"class":201,"line":227},[199,100355,100356],{"class":1454},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[199,100358,100359],{"class":201,"line":238},[199,100360,100361],{"class":1454},"#np.concatenate([a,b])\n",[31,100363,100364],{},"②一维多个数组拼接",[190,100366,100368],{"className":33221,"code":100367,"language":33223,"meta":57,"style":57},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[196,100369,100370,100375,100395,100400],{"__ignoreMap":57},[199,100371,100372],{"class":201,"line":202},[199,100373,100374],{"class":1454},"#也可以多个数组进行拼接\n",[199,100376,100377,100379,100381,100383,100385,100387,100389,100391,100393],{"class":201,"line":36},[199,100378,3374],{"class":205},[199,100380,895],{"class":1086},[199,100382,95283],{"class":205},[199,100384,3528],{"class":1018},[199,100386,3461],{"class":205},[199,100388,3554],{"class":1018},[199,100390,3461],{"class":205},[199,100392,3604],{"class":1018},[199,100394,7554],{"class":205},[199,100396,100397],{"class":201,"line":73},[199,100398,100399],{"class":205},"c\n",[199,100401,100402],{"class":201,"line":333},[199,100403,100404],{"class":205},"np.concatenate((a,b,c))\n",[31,100406,100407],{},"③二维数组拼接",[190,100409,100411],{"className":33221,"code":100410,"language":33223,"meta":57,"style":57},"#二维数组使用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",[196,100412,100413,100418,100442,100467,100472,100477],{"__ignoreMap":57},[199,100414,100415],{"class":201,"line":202},[199,100416,100417],{"class":1454},"#二维数组使用concatenate进行拼接\n",[199,100419,100420,100422,100424,100426,100428,100430,100432,100434,100436,100438,100440],{"class":201,"line":36},[199,100421,95565],{"class":205},[199,100423,895],{"class":1086},[199,100425,95261],{"class":205},[199,100427,1115],{"class":1018},[199,100429,3461],{"class":205},[199,100431,3604],{"class":1018},[199,100433,95266],{"class":205},[199,100435,1920],{"class":1018},[199,100437,3461],{"class":205},[199,100439,1915],{"class":1018},[199,100441,1594],{"class":205},[199,100443,100444,100447,100449,100451,100453,100455,100457,100459,100461,100463,100465],{"class":201,"line":73},[199,100445,100446],{"class":205},"bb",[199,100448,895],{"class":1086},[199,100450,95261],{"class":205},[199,100452,3421],{"class":1018},[199,100454,3461],{"class":205},[199,100456,3722],{"class":1018},[199,100458,95266],{"class":205},[199,100460,1920],{"class":1018},[199,100462,3461],{"class":205},[199,100464,1915],{"class":1018},[199,100466,1594],{"class":205},[199,100468,100469],{"class":201,"line":333},[199,100470,100471],{"class":1454},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[199,100473,100474],{"class":201,"line":227},[199,100475,100476],{"class":1454},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[199,100478,100479,100482,100484,100486,100488],{"class":201,"line":238},[199,100480,100481],{"class":205},"np.concatenate((aa,bb),",[199,100483,50354],{"class":8113},[199,100485,895],{"class":1086},[199,100487,1025],{"class":1018},[199,100489,1594],{"class":205},[31,100491,100492],{},"结果：",[31,100494,100495],{},[55,100496],{"alt":57,"src":100497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[190,100499,100501],{"className":33221,"code":100500,"language":33223,"meta":57,"style":57},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[196,100502,100503,100508],{"__ignoreMap":57},[199,100504,100505],{"class":201,"line":202},[199,100506,100507],{"class":1454},"#指定axis为1进行拼接\n",[199,100509,100510,100512,100514,100516,100518],{"class":201,"line":36},[199,100511,100481],{"class":205},[199,100513,50354],{"class":8113},[199,100515,895],{"class":1086},[199,100517,1115],{"class":1018},[199,100519,1594],{"class":205},[31,100521,100492],{},[31,100523,100524],{},[55,100525],{"alt":57,"src":100526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[31,100528,100529],{},[49,100530,100531],{},"二维数组总结：0竖着方向，1横着方向",[31,100533,100534],{},"④三维数组拼接",[31,100536,100537],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[190,100539,100541],{"className":33221,"code":100540,"language":33223,"meta":57,"style":57},"#两个三行六列\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",[196,100542,100543,100548,100576,100606,100611,100628,100633,100638,100643,100660,100665,100670,100675,100688],{"__ignoreMap":57},[199,100544,100545],{"class":201,"line":202},[199,100546,100547],{"class":1454},"#两个三行六列\n",[199,100549,100550,100552,100554,100556,100558,100560,100562,100564,100566,100568,100570,100572,100574],{"class":201,"line":36},[199,100551,97780],{"class":205},[199,100553,895],{"class":1086},[199,100555,95261],{"class":205},[199,100557,1115],{"class":1018},[199,100559,3461],{"class":205},[199,100561,3409],{"class":1018},[199,100563,95266],{"class":205},[199,100565,1925],{"class":1018},[199,100567,3461],{"class":205},[199,100569,1920],{"class":1018},[199,100571,3461],{"class":205},[199,100573,3428],{"class":1018},[199,100575,1594],{"class":205},[199,100577,100578,100581,100583,100585,100587,100589,100592,100594,100596,100598,100600,100602,100604],{"class":201,"line":73},[199,100579,100580],{"class":205},"bbb",[199,100582,895],{"class":1086},[199,100584,95261],{"class":205},[199,100586,3421],{"class":1018},[199,100588,3461],{"class":205},[199,100590,100591],{"class":1018},"137",[199,100593,95266],{"class":205},[199,100595,1925],{"class":1018},[199,100597,3461],{"class":205},[199,100599,1920],{"class":1018},[199,100601,3461],{"class":205},[199,100603,3428],{"class":1018},[199,100605,1594],{"class":205},[199,100607,100608],{"class":201,"line":333},[199,100609,100610],{"class":1454},"#axis=0\n",[199,100612,100613,100615,100617,100620,100622,100624,100626],{"class":201,"line":227},[199,100614,3774],{"class":205},[199,100616,895],{"class":1086},[199,100618,100619],{"class":205},"np.concatenate((aaa,bbb),",[199,100621,50354],{"class":8113},[199,100623,895],{"class":1086},[199,100625,1025],{"class":1018},[199,100627,1594],{"class":205},[199,100629,100630],{"class":201,"line":238},[199,100631,100632],{"class":205},"s.shape\n",[199,100634,100635],{"class":201,"line":252},[199,100636,100637],{"class":1454},"#输出：(4,3,6)\n",[199,100639,100640],{"class":201,"line":388},[199,100641,100642],{"class":1454},"#axis=1\n",[199,100644,100645,100648,100650,100652,100654,100656,100658],{"class":201,"line":415},[199,100646,100647],{"class":205},"ss",[199,100649,895],{"class":1086},[199,100651,100619],{"class":205},[199,100653,50354],{"class":8113},[199,100655,895],{"class":1086},[199,100657,1115],{"class":1018},[199,100659,1594],{"class":205},[199,100661,100662],{"class":201,"line":426},[199,100663,100664],{"class":205},"ss.shape\n",[199,100666,100667],{"class":201,"line":1015},[199,100668,100669],{"class":1454},"#输出：(2,6,6)\n",[199,100671,100672],{"class":201,"line":1031},[199,100673,100674],{"class":1454},"#axis=2\n",[199,100676,100677,100679,100681,100683,100685],{"class":201,"line":1043},[199,100678,100619],{"class":205},[199,100680,50354],{"class":8113},[199,100682,895],{"class":1086},[199,100684,1925],{"class":1018},[199,100686,100687],{"class":205},").shape\n",[199,100689,100690],{"class":201,"line":1049},[199,100691,100692],{"class":1454},"#输出：（2，3，12）\n",[31,100694,100695],{},"⑤四维数组拼接",[190,100697,100699],{"className":33221,"code":100698,"language":33223,"meta":57,"style":57},"#两个三行六列\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",[196,100700,100701,100705,100733,100761,100786,100812,100816,100829,100834,100838,100850,100855,100859,100871,100876,100881,100893],{"__ignoreMap":57},[199,100702,100703],{"class":201,"line":202},[199,100704,100547],{"class":1454},[199,100706,100707,100709,100711,100713,100715,100717,100719,100721,100723,100725,100727,100729,100731],{"class":201,"line":36},[199,100708,97780],{"class":205},[199,100710,895],{"class":1086},[199,100712,95261],{"class":205},[199,100714,1115],{"class":1018},[199,100716,3461],{"class":205},[199,100718,3409],{"class":1018},[199,100720,95266],{"class":205},[199,100722,1925],{"class":1018},[199,100724,3461],{"class":205},[199,100726,1920],{"class":1018},[199,100728,3461],{"class":205},[199,100730,3428],{"class":1018},[199,100732,1594],{"class":205},[199,100734,100735,100737,100739,100741,100743,100745,100747,100749,100751,100753,100755,100757,100759],{"class":201,"line":73},[199,100736,100580],{"class":205},[199,100738,895],{"class":1086},[199,100740,95261],{"class":205},[199,100742,3421],{"class":1018},[199,100744,3461],{"class":205},[199,100746,100591],{"class":1018},[199,100748,95266],{"class":205},[199,100750,1925],{"class":1018},[199,100752,3461],{"class":205},[199,100754,1920],{"class":1018},[199,100756,3461],{"class":205},[199,100758,3428],{"class":1018},[199,100760,1594],{"class":205},[199,100762,100763,100766,100768,100770,100772,100774,100776,100778,100780,100782,100784],{"class":201,"line":333},[199,100764,100765],{"class":205},"aaaa",[199,100767,895],{"class":1086},[199,100769,99929],{"class":205},[199,100771,1925],{"class":1018},[199,100773,3461],{"class":205},[199,100775,1920],{"class":1018},[199,100777,3461],{"class":205},[199,100779,1920],{"class":1018},[199,100781,3461],{"class":205},[199,100783,1925],{"class":1018},[199,100785,1594],{"class":205},[199,100787,100788,100791,100793,100796,100798,100800,100802,100804,100806,100808,100810],{"class":201,"line":227},[199,100789,100790],{"class":205},"bbbb",[199,100792,895],{"class":1086},[199,100794,100795],{"class":205},"bbb.reshape(",[199,100797,1925],{"class":1018},[199,100799,3461],{"class":205},[199,100801,1920],{"class":1018},[199,100803,3461],{"class":205},[199,100805,1920],{"class":1018},[199,100807,3461],{"class":205},[199,100809,1925],{"class":1018},[199,100811,1594],{"class":205},[199,100813,100814],{"class":201,"line":238},[199,100815,100610],{"class":1454},[199,100817,100818,100821,100823,100825,100827],{"class":201,"line":252},[199,100819,100820],{"class":205},"np.concatenate((aaaa,bbbb),",[199,100822,50354],{"class":8113},[199,100824,895],{"class":1086},[199,100826,1025],{"class":1018},[199,100828,100687],{"class":205},[199,100830,100831],{"class":201,"line":388},[199,100832,100833],{"class":1454},"#结果：（4，3，3，2）\n",[199,100835,100836],{"class":201,"line":415},[199,100837,100642],{"class":1454},[199,100839,100840,100842,100844,100846,100848],{"class":201,"line":426},[199,100841,100820],{"class":205},[199,100843,50354],{"class":8113},[199,100845,895],{"class":1086},[199,100847,1115],{"class":1018},[199,100849,100687],{"class":205},[199,100851,100852],{"class":201,"line":1015},[199,100853,100854],{"class":1454},"#结果：（2，6，3，2）\n",[199,100856,100857],{"class":201,"line":1031},[199,100858,100674],{"class":1454},[199,100860,100861,100863,100865,100867,100869],{"class":201,"line":1043},[199,100862,100820],{"class":205},[199,100864,50354],{"class":8113},[199,100866,895],{"class":1086},[199,100868,1925],{"class":1018},[199,100870,100687],{"class":205},[199,100872,100873],{"class":201,"line":1049},[199,100874,100875],{"class":1454},"#结果：（2，3，6，2）\n",[199,100877,100878],{"class":201,"line":1054},[199,100879,100880],{"class":1454},"#axis=3\n",[199,100882,100883,100885,100887,100889,100891],{"class":201,"line":1062},[199,100884,100820],{"class":205},[199,100886,50354],{"class":8113},[199,100888,895],{"class":1086},[199,100890,1920],{"class":1018},[199,100892,100687],{"class":205},[199,100894,100895],{"class":201,"line":1075},[199,100896,100897],{"class":1454},"#结果：（2，3，3，4）\n",[14,100899,100901],{"id":100900},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[31,100903,100904],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[31,100906,100907],{},"①二维数组",[190,100909,100911],{"className":33221,"code":100910,"language":33223,"meta":57,"style":57},"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",[196,100912,100913,100937,100961,100966,100971],{"__ignoreMap":57},[199,100914,100915,100917,100919,100921,100923,100925,100927,100929,100931,100933,100935],{"class":201,"line":202},[199,100916,95565],{"class":205},[199,100918,895],{"class":1086},[199,100920,95261],{"class":205},[199,100922,1115],{"class":1018},[199,100924,3461],{"class":205},[199,100926,3604],{"class":1018},[199,100928,95266],{"class":205},[199,100930,1920],{"class":1018},[199,100932,3461],{"class":205},[199,100934,1915],{"class":1018},[199,100936,1594],{"class":205},[199,100938,100939,100941,100943,100945,100947,100949,100951,100953,100955,100957,100959],{"class":201,"line":36},[199,100940,100446],{"class":205},[199,100942,895],{"class":1086},[199,100944,95261],{"class":205},[199,100946,3421],{"class":1018},[199,100948,3461],{"class":205},[199,100950,3722],{"class":1018},[199,100952,95266],{"class":205},[199,100954,1920],{"class":1018},[199,100956,3461],{"class":205},[199,100958,1915],{"class":1018},[199,100960,1594],{"class":205},[199,100962,100963],{"class":201,"line":73},[199,100964,100965],{"class":205},"np.hstack((aa,bb))\n",[199,100967,100968],{"class":201,"line":333},[199,100969,100970],{"class":1454},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[199,100972,100973],{"class":201,"line":227},[199,100974,100975],{"class":1454},"#np.hstack([aa,bb])\n",[31,100977,100492],{},[31,100979,100980],{},[55,100981],{"alt":57,"src":100982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[31,100984,100985],{},"等效于concatenate()函数中axis=1时的情况",[31,100987,100988],{},"②三维数组",[190,100990,100992],{"className":33221,"code":100991,"language":33223,"meta":57,"style":57},"#两个三行六列\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",[196,100993,100994,100998,101026,101054,101059,101064],{"__ignoreMap":57},[199,100995,100996],{"class":201,"line":202},[199,100997,100547],{"class":1454},[199,100999,101000,101002,101004,101006,101008,101010,101012,101014,101016,101018,101020,101022,101024],{"class":201,"line":36},[199,101001,97780],{"class":205},[199,101003,895],{"class":1086},[199,101005,95261],{"class":205},[199,101007,1115],{"class":1018},[199,101009,3461],{"class":205},[199,101011,3409],{"class":1018},[199,101013,95266],{"class":205},[199,101015,1925],{"class":1018},[199,101017,3461],{"class":205},[199,101019,1920],{"class":1018},[199,101021,3461],{"class":205},[199,101023,3428],{"class":1018},[199,101025,1594],{"class":205},[199,101027,101028,101030,101032,101034,101036,101038,101040,101042,101044,101046,101048,101050,101052],{"class":201,"line":73},[199,101029,100580],{"class":205},[199,101031,895],{"class":1086},[199,101033,95261],{"class":205},[199,101035,3421],{"class":1018},[199,101037,3461],{"class":205},[199,101039,100591],{"class":1018},[199,101041,95266],{"class":205},[199,101043,1925],{"class":1018},[199,101045,3461],{"class":205},[199,101047,1920],{"class":1018},[199,101049,3461],{"class":205},[199,101051,3428],{"class":1018},[199,101053,1594],{"class":205},[199,101055,101056],{"class":201,"line":333},[199,101057,101058],{"class":1454},"#使用hstack\n",[199,101060,101061],{"class":201,"line":227},[199,101062,101063],{"class":205},"np.hstack((aaa,bbb)).shape\n",[199,101065,101066],{"class":201,"line":238},[199,101067,101068],{"class":1454},"#输出：（2，6，6）\n",[14,101070,101072],{"id":101071},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[31,101074,101075],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[31,101077,100907],{},[190,101079,101081],{"className":33221,"code":101080,"language":33223,"meta":57,"style":57},"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",[196,101082,101083,101107,101131,101136,101141,101146],{"__ignoreMap":57},[199,101084,101085,101087,101089,101091,101093,101095,101097,101099,101101,101103,101105],{"class":201,"line":202},[199,101086,95565],{"class":205},[199,101088,895],{"class":1086},[199,101090,95261],{"class":205},[199,101092,1115],{"class":1018},[199,101094,3461],{"class":205},[199,101096,3604],{"class":1018},[199,101098,95266],{"class":205},[199,101100,1920],{"class":1018},[199,101102,3461],{"class":205},[199,101104,1915],{"class":1018},[199,101106,1594],{"class":205},[199,101108,101109,101111,101113,101115,101117,101119,101121,101123,101125,101127,101129],{"class":201,"line":36},[199,101110,100446],{"class":205},[199,101112,895],{"class":1086},[199,101114,95261],{"class":205},[199,101116,3421],{"class":1018},[199,101118,3461],{"class":205},[199,101120,3722],{"class":1018},[199,101122,95266],{"class":205},[199,101124,1920],{"class":1018},[199,101126,3461],{"class":205},[199,101128,1915],{"class":1018},[199,101130,1594],{"class":205},[199,101132,101133],{"class":201,"line":73},[199,101134,101135],{"class":1454},"#vstack 垂直方向进行堆叠\n",[199,101137,101138],{"class":201,"line":333},[199,101139,101140],{"class":205},"np.vstack((aa,bb))\n",[199,101142,101143],{"class":201,"line":227},[199,101144,101145],{"class":1454},"#与hstack传的参数类似，等价于：\n",[199,101147,101148],{"class":201,"line":238},[199,101149,101150],{"class":205},"np.vstack([aa,bb])\n",[31,101152,100492],{},[31,101154,101155],{},[55,101156],{"alt":57,"src":101157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[31,101159,100988],{},[190,101161,101163],{"className":33221,"code":101162,"language":33223,"meta":57,"style":57},"#两个三行六列\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",[196,101164,101165,101169,101197,101225,101230,101235],{"__ignoreMap":57},[199,101166,101167],{"class":201,"line":202},[199,101168,100547],{"class":1454},[199,101170,101171,101173,101175,101177,101179,101181,101183,101185,101187,101189,101191,101193,101195],{"class":201,"line":36},[199,101172,97780],{"class":205},[199,101174,895],{"class":1086},[199,101176,95261],{"class":205},[199,101178,1115],{"class":1018},[199,101180,3461],{"class":205},[199,101182,3409],{"class":1018},[199,101184,95266],{"class":205},[199,101186,1925],{"class":1018},[199,101188,3461],{"class":205},[199,101190,1920],{"class":1018},[199,101192,3461],{"class":205},[199,101194,3428],{"class":1018},[199,101196,1594],{"class":205},[199,101198,101199,101201,101203,101205,101207,101209,101211,101213,101215,101217,101219,101221,101223],{"class":201,"line":73},[199,101200,100580],{"class":205},[199,101202,895],{"class":1086},[199,101204,95261],{"class":205},[199,101206,3421],{"class":1018},[199,101208,3461],{"class":205},[199,101210,100591],{"class":1018},[199,101212,95266],{"class":205},[199,101214,1925],{"class":1018},[199,101216,3461],{"class":205},[199,101218,1920],{"class":1018},[199,101220,3461],{"class":205},[199,101222,3428],{"class":1018},[199,101224,1594],{"class":205},[199,101226,101227],{"class":201,"line":333},[199,101228,101229],{"class":1454},"#使用vstack\n",[199,101231,101232],{"class":201,"line":227},[199,101233,101234],{"class":205},"np.vstack((aaa,bbb)).shape\n",[199,101236,101237],{"class":201,"line":238},[199,101238,101239],{"class":1454},"#输出：（4，3，6）\n",[14,101241,101243],{"id":101242},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[31,101245,101246],{},"该方法是三维数组特有的方法",[31,101248,101249],{},"也就是说",[31,101251,101252],{},"一维数组拼接方法用：concatenate()",[31,101254,101255],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[31,101257,101258],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[31,101260,101261],{},"四维数组及多维数组只能用concatenate进行拼接",[190,101263,101265],{"className":33221,"code":101264,"language":33223,"meta":57,"style":57},"#两个三行六列\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",[196,101266,101267,101271,101299,101327,101332,101337],{"__ignoreMap":57},[199,101268,101269],{"class":201,"line":202},[199,101270,100547],{"class":1454},[199,101272,101273,101275,101277,101279,101281,101283,101285,101287,101289,101291,101293,101295,101297],{"class":201,"line":36},[199,101274,97780],{"class":205},[199,101276,895],{"class":1086},[199,101278,95261],{"class":205},[199,101280,1115],{"class":1018},[199,101282,3461],{"class":205},[199,101284,3409],{"class":1018},[199,101286,95266],{"class":205},[199,101288,1925],{"class":1018},[199,101290,3461],{"class":205},[199,101292,1920],{"class":1018},[199,101294,3461],{"class":205},[199,101296,3428],{"class":1018},[199,101298,1594],{"class":205},[199,101300,101301,101303,101305,101307,101309,101311,101313,101315,101317,101319,101321,101323,101325],{"class":201,"line":73},[199,101302,100580],{"class":205},[199,101304,895],{"class":1086},[199,101306,95261],{"class":205},[199,101308,3421],{"class":1018},[199,101310,3461],{"class":205},[199,101312,100591],{"class":1018},[199,101314,95266],{"class":205},[199,101316,1925],{"class":1018},[199,101318,3461],{"class":205},[199,101320,1920],{"class":1018},[199,101322,3461],{"class":205},[199,101324,3428],{"class":1018},[199,101326,1594],{"class":205},[199,101328,101329],{"class":201,"line":333},[199,101330,101331],{"class":1454},"#使用dstack\n",[199,101333,101334],{"class":201,"line":227},[199,101335,101336],{"class":205},"np.dstack((aaa,bbb)).shape\n",[199,101338,101339],{"class":201,"line":238},[199,101340,101341],{"class":1454},"#结果：（2，3，12）\n",[1002,101343,101344],{},"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":57,"searchDepth":36,"depth":36,"links":101346},[101347,101348,101349,101350],{"id":100286,"depth":36,"text":100287},{"id":100900,"depth":36,"text":100901},{"id":101071,"depth":36,"text":101072},{"id":101242,"depth":36,"text":101243},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100278,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101357,"title":101358,"body":101359,"description":3023,"extension":3024,"meta":101634,"navigation":906,"path":101635,"seo":101636,"stem":101637,"__hash__":101638},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101360,"toc":101632},[101361,101364,101367,101461,101464,101467,101470,101473,101476,101479,101482,101485,101629],[10,101362,101358],{"id":101363},"_7数组转置",[31,101365,101366],{},"使用transpose()函数",[190,101368,101370],{"className":33221,"code":101369,"language":33223,"meta":57,"style":57},"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",[196,101371,101372,101382,101406,101411,101416,101421,101426,101434,101438,101442,101447,101452,101457],{"__ignoreMap":57},[199,101373,101374,101376,101378,101380],{"class":201,"line":202},[199,101375,33235],{"class":1086},[199,101377,34222],{"class":205},[199,101379,34225],{"class":1086},[199,101381,34228],{"class":205},[199,101383,101384,101386,101388,101390,101392,101394,101396,101398,101400,101402,101404],{"class":201,"line":36},[199,101385,2867],{"class":205},[199,101387,895],{"class":1086},[199,101389,34559],{"class":205},[199,101391,1115],{"class":1018},[199,101393,3461],{"class":205},[199,101395,3604],{"class":1018},[199,101397,95266],{"class":205},[199,101399,1915],{"class":1018},[199,101401,3461],{"class":205},[199,101403,1920],{"class":1018},[199,101405,1594],{"class":205},[199,101407,101408],{"class":201,"line":73},[199,101409,101410],{"class":1454},"#二维数组转置\n",[199,101412,101413],{"class":201,"line":333},[199,101414,101415],{"class":1454},"#调用transpose()函数\n",[199,101417,101418],{"class":201,"line":227},[199,101419,101420],{"class":205},"a.transpose()\n",[199,101422,101423],{"class":201,"line":238},[199,101424,101425],{"class":1454},"#对于二维数组也可以采用.T来实现\n",[199,101427,101428,101431],{"class":201,"line":252},[199,101429,101430],{"class":205},"a.T",[199,101432,101433],{"class":1454},"#与上述代码一样\n",[199,101435,101436],{"class":201,"line":388},[199,101437,95823],{"class":1454},[199,101439,101440],{"class":201,"line":415},[199,101441,96187],{"class":898},[199,101443,101444],{"class":201,"line":426},[199,101445,101446],{"class":898},"array([[ 1,  4,  7, 10],\n",[199,101448,101449],{"class":201,"line":1015},[199,101450,101451],{"class":898},"       [ 2,  5,  8, 11],\n",[199,101453,101454],{"class":201,"line":1031},[199,101455,101456],{"class":898},"       [ 3,  6,  9, 12]])\n",[199,101458,101459],{"class":201,"line":1043},[199,101460,96187],{"class":898},[31,101462,101463],{},"也可以使用np.transpose()的形式",[31,101465,101466],{},"#多维数组进行转置 np.transpose()",[31,101468,101469],{},"#对二维数组也可以使用np.transpose()进行转置",[31,101471,101472],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[31,101474,101475],{},"第二个参数，维度可以理解为用axis中的数来理解",[31,101477,101478],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[31,101480,101481],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[31,101483,101484],{},"四维及以上的数组也是一样的道理",[190,101486,101488],{"className":33221,"code":101487,"language":33223,"meta":57,"style":57},"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",[196,101489,101490,101518,101523,101528,101533,101551,101556,101588,101593,101598,101603,101624],{"__ignoreMap":57},[199,101491,101492,101494,101496,101498,101500,101502,101504,101506,101508,101510,101512,101514,101516],{"class":201,"line":202},[199,101493,3899],{"class":205},[199,101495,895],{"class":1086},[199,101497,95261],{"class":205},[199,101499,1115],{"class":1018},[199,101501,3461],{"class":205},[199,101503,3409],{"class":1018},[199,101505,95266],{"class":205},[199,101507,1920],{"class":1018},[199,101509,3461],{"class":205},[199,101511,3428],{"class":1018},[199,101513,3461],{"class":205},[199,101515,1925],{"class":1018},[199,101517,1594],{"class":205},[199,101519,101520],{"class":201,"line":36},[199,101521,101522],{"class":205},"x.shape\n",[199,101524,101525],{"class":201,"line":73},[199,101526,101527],{"class":1454},"#结果：（3,6,2）\n",[199,101529,101530],{"class":201,"line":333},[199,101531,101532],{"class":1454},"#使用np.transpose()进行转置 变为(2,6,3)\n",[199,101534,101535,101538,101540,101542,101544,101546,101548],{"class":201,"line":227},[199,101536,101537],{"class":205},"np.transpose(x,(",[199,101539,1925],{"class":1018},[199,101541,3461],{"class":205},[199,101543,1115],{"class":1018},[199,101545,3461],{"class":205},[199,101547,1025],{"class":1018},[199,101549,101550],{"class":205},")).shape\n",[199,101552,101553],{"class":201,"line":238},[199,101554,101555],{"class":1454},"#结果：(2,6,3)\n",[199,101557,101558,101560,101562,101564,101566,101568,101570,101572,101574,101576,101578,101580,101582,101584,101586],{"class":201,"line":252},[199,101559,100765],{"class":205},[199,101561,895],{"class":1086},[199,101563,95261],{"class":205},[199,101565,1115],{"class":1018},[199,101567,3461],{"class":205},[199,101569,3409],{"class":1018},[199,101571,95266],{"class":205},[199,101573,1920],{"class":1018},[199,101575,3461],{"class":205},[199,101577,1925],{"class":1018},[199,101579,3461],{"class":205},[199,101581,1115],{"class":1018},[199,101583,3461],{"class":205},[199,101585,3428],{"class":1018},[199,101587,1594],{"class":205},[199,101589,101590],{"class":201,"line":388},[199,101591,101592],{"class":205},"aaaa.shape\n",[199,101594,101595],{"class":201,"line":415},[199,101596,101597],{"class":1454},"#结果：（3，2，1，6）\n",[199,101599,101600],{"class":201,"line":426},[199,101601,101602],{"class":1454},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[199,101604,101605,101608,101610,101612,101614,101616,101618,101620,101622],{"class":201,"line":1015},[199,101606,101607],{"class":205},"np.transpose(aaaa,(",[199,101609,1115],{"class":1018},[199,101611,3461],{"class":205},[199,101613,1925],{"class":1018},[199,101615,3461],{"class":205},[199,101617,1025],{"class":1018},[199,101619,3461],{"class":205},[199,101621,1920],{"class":1018},[199,101623,101550],{"class":205},[199,101625,101626],{"class":201,"line":1031},[199,101627,101628],{"class":1454},"#结果：(2,1,3,6)\n",[1002,101630,101631],{},"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":57,"searchDepth":36,"depth":36,"links":101633},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101358,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101640,"title":101641,"body":101642,"description":3023,"extension":3024,"meta":102376,"navigation":906,"path":102377,"seo":102378,"stem":102379,"__hash__":102380},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101643,"toc":102374},[101644,101647,101650,101653,101656,101659,101662,101665,101668,101777,101780,101783,102371],[10,101645,101641],{"id":101646},"_8数组分割",[31,101648,101649],{},"split分割",[31,101651,101652],{},"numpy.split(ary,indics_or_sections,axis)",[31,101654,101655],{},"解释：",[31,101657,101658],{},"ary:被分割的数组",[31,101660,101661],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[31,101663,101664],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[31,101666,101667],{},"①一维数组的分割",[190,101669,101671],{"className":33221,"code":101670,"language":33223,"meta":57,"style":57},"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",[196,101672,101673,101689,101694,101703,101707,101712,101720,101724,101729,101734,101747,101751,101756,101768,101772],{"__ignoreMap":57},[199,101674,101675,101677,101679,101681,101683,101685,101687],{"class":201,"line":202},[199,101676,2867],{"class":205},[199,101678,895],{"class":1086},[199,101680,95261],{"class":205},[199,101682,1115],{"class":1018},[199,101684,3461],{"class":205},[199,101686,3503],{"class":1018},[199,101688,1594],{"class":205},[199,101690,101691],{"class":201,"line":36},[199,101692,101693],{"class":1454},"#如果传入整数，必须能够平分，否则会报错\n",[199,101695,101696,101699,101701],{"class":201,"line":73},[199,101697,101698],{"class":205},"np.split(a,",[199,101700,1925],{"class":1018},[199,101702,1594],{"class":205},[199,101704,101705],{"class":201,"line":333},[199,101706,95823],{"class":1454},[199,101708,101709],{"class":201,"line":227},[199,101710,101711],{"class":1454},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[199,101713,101714,101716,101718],{"class":201,"line":238},[199,101715,101698],{"class":205},[199,101717,1915],{"class":1018},[199,101719,1594],{"class":205},[199,101721,101722],{"class":201,"line":252},[199,101723,95823],{"class":1454},[199,101725,101726],{"class":201,"line":388},[199,101727,101728],{"class":1454},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[199,101730,101731],{"class":201,"line":415},[199,101732,101733],{"class":1454},"#传入数组\n",[199,101735,101736,101739,101741,101743,101745],{"class":201,"line":426},[199,101737,101738],{"class":205},"np.split(a,[",[199,101740,1920],{"class":1018},[199,101742,3461],{"class":205},[199,101744,1909],{"class":1018},[199,101746,7554],{"class":205},[199,101748,101749],{"class":201,"line":1015},[199,101750,95823],{"class":1454},[199,101752,101753],{"class":201,"line":1031},[199,101754,101755],{"class":1454},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[199,101757,101758,101760,101762,101764,101766],{"class":201,"line":1043},[199,101759,101738],{"class":205},[199,101761,1909],{"class":1018},[199,101763,3461],{"class":205},[199,101765,3452],{"class":1018},[199,101767,7554],{"class":205},[199,101769,101770],{"class":201,"line":1049},[199,101771,95823],{"class":1454},[199,101773,101774],{"class":201,"line":1054},[199,101775,101776],{"class":1454},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[31,101778,101779],{},"②二维数组的分割",[31,101781,101782],{},"使用split()",[190,101784,101786],{"className":33221,"code":101785,"language":33223,"meta":57,"style":57},"#二维数组分割\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",[196,101787,101788,101793,101817,101822,101831,101835,101839,101844,101849,101854,101859,101864,101869,101874,101878,101891,101895,101899,101903,101907,101911,101916,101921,101926,101930,101935,101951,101955,101959,101964,101969,101974,101979,101984,101989,101994,101999,102004,102009,102014,102019,102024,102029,102034,102039,102044,102049,102053,102057,102077,102081,102085,102090,102095,102100,102105,102110,102115,102120,102125,102130,102135,102140,102145,102150,102155,102160,102165,102170,102175,102179,102184,102193,102197,102201,102205,102209,102213,102217,102221,102225,102229,102238,102242,102246,102250,102254,102258,102262,102266,102270,102274,102278,102282,102286,102290,102294,102298,102302,102306,102310,102314,102318,102322,102335,102339,102343,102347,102351,102355,102359,102363,102367],{"__ignoreMap":57},[199,101789,101790],{"class":201,"line":202},[199,101791,101792],{"class":1454},"#二维数组分割\n",[199,101794,101795,101797,101799,101801,101803,101805,101807,101809,101811,101813,101815],{"class":201,"line":36},[199,101796,95565],{"class":205},[199,101798,895],{"class":1086},[199,101800,95261],{"class":205},[199,101802,1115],{"class":1018},[199,101804,3461],{"class":205},[199,101806,3409],{"class":1018},[199,101808,95266],{"class":205},[199,101810,3428],{"class":1018},[199,101812,3461],{"class":205},[199,101814,3428],{"class":1018},[199,101816,1594],{"class":205},[199,101818,101819],{"class":201,"line":73},[199,101820,101821],{"class":1454},"#默认axis=0  传入整数平均分,按行来的\n",[199,101823,101824,101827,101829],{"class":201,"line":333},[199,101825,101826],{"class":205},"np.split(aa,",[199,101828,1920],{"class":1018},[199,101830,1594],{"class":205},[199,101832,101833],{"class":201,"line":227},[199,101834,98023],{"class":1454},[199,101836,101837],{"class":201,"line":238},[199,101838,96187],{"class":898},[199,101840,101841],{"class":201,"line":252},[199,101842,101843],{"class":898},"[array([[ 1,  2,  3,  4,  5,  6],\n",[199,101845,101846],{"class":201,"line":388},[199,101847,101848],{"class":898},"        [ 7,  8,  9, 10, 11, 12]]),\n",[199,101850,101851],{"class":201,"line":415},[199,101852,101853],{"class":898}," array([[13, 14, 15, 16, 17, 18],\n",[199,101855,101856],{"class":201,"line":426},[199,101857,101858],{"class":898},"        [19, 20, 21, 22, 23, 24]]),\n",[199,101860,101861],{"class":201,"line":1015},[199,101862,101863],{"class":898}," array([[25, 26, 27, 28, 29, 30],\n",[199,101865,101866],{"class":201,"line":1031},[199,101867,101868],{"class":898},"        [31, 32, 33, 34, 35, 36]])]\n",[199,101870,101871],{"class":201,"line":1043},[199,101872,101873],{"class":898}," '''\n",[199,101875,101876],{"class":201,"line":1049},[199,101877,101733],{"class":1454},[199,101879,101880,101883,101885,101887,101889],{"class":201,"line":1054},[199,101881,101882],{"class":205},"np.split(aa,[",[199,101884,1925],{"class":1018},[199,101886,3461],{"class":205},[199,101888,1909],{"class":1018},[199,101890,7554],{"class":205},[199,101892,101893],{"class":201,"line":1062},[199,101894,98023],{"class":1454},[199,101896,101897],{"class":201,"line":1075},[199,101898,96187],{"class":898},[199,101900,101901],{"class":201,"line":1092},[199,101902,101843],{"class":898},[199,101904,101905],{"class":201,"line":1107},[199,101906,101848],{"class":898},[199,101908,101909],{"class":201,"line":1128},[199,101910,101853],{"class":898},[199,101912,101913],{"class":201,"line":1146},[199,101914,101915],{"class":898},"        [19, 20, 21, 22, 23, 24],\n",[199,101917,101918],{"class":201,"line":1163},[199,101919,101920],{"class":898},"        [25, 26, 27, 28, 29, 30]]),\n",[199,101922,101923],{"class":201,"line":1176},[199,101924,101925],{"class":898}," array([[31, 32, 33, 34, 35, 36]])]\n",[199,101927,101928],{"class":201,"line":1189},[199,101929,96187],{"class":898},[199,101931,101932],{"class":201,"line":1202},[199,101933,101934],{"class":1454},"#axis=1 按照列来分\n",[199,101936,101937,101939,101941,101943,101945,101947,101949],{"class":201,"line":1207},[199,101938,101826],{"class":205},[199,101940,1920],{"class":1018},[199,101942,3461],{"class":205},[199,101944,50354],{"class":8113},[199,101946,895],{"class":1086},[199,101948,1115],{"class":1018},[199,101950,1594],{"class":205},[199,101952,101953],{"class":201,"line":1212},[199,101954,98023],{"class":1454},[199,101956,101957],{"class":201,"line":1225},[199,101958,96187],{"class":898},[199,101960,101961],{"class":201,"line":1236},[199,101962,101963],{"class":898},"[array([[ 1,  2],\n",[199,101965,101966],{"class":201,"line":1249},[199,101967,101968],{"class":898},"        [ 7,  8],\n",[199,101970,101971],{"class":201,"line":1262},[199,101972,101973],{"class":898},"        [13, 14],\n",[199,101975,101976],{"class":201,"line":1275},[199,101977,101978],{"class":898},"        [19, 20],\n",[199,101980,101981],{"class":201,"line":1287},[199,101982,101983],{"class":898},"        [25, 26],\n",[199,101985,101986],{"class":201,"line":1292},[199,101987,101988],{"class":898},"        [31, 32]]),\n",[199,101990,101991],{"class":201,"line":1297},[199,101992,101993],{"class":898}," array([[ 3,  4],\n",[199,101995,101996],{"class":201,"line":1310},[199,101997,101998],{"class":898},"        [ 9, 10],\n",[199,102000,102001],{"class":201,"line":1315},[199,102002,102003],{"class":898},"        [15, 16],\n",[199,102005,102006],{"class":201,"line":1330},[199,102007,102008],{"class":898},"        [21, 22],\n",[199,102010,102011],{"class":201,"line":1335},[199,102012,102013],{"class":898},"        [27, 28],\n",[199,102015,102016],{"class":201,"line":1340},[199,102017,102018],{"class":898},"        [33, 34]]),\n",[199,102020,102021],{"class":201,"line":1352},[199,102022,102023],{"class":898}," array([[ 5,  6],\n",[199,102025,102026],{"class":201,"line":1367},[199,102027,102028],{"class":898},"        [11, 12],\n",[199,102030,102031],{"class":201,"line":1381},[199,102032,102033],{"class":898},"        [17, 18],\n",[199,102035,102036],{"class":201,"line":1396},[199,102037,102038],{"class":898},"        [23, 24],\n",[199,102040,102041],{"class":201,"line":1401},[199,102042,102043],{"class":898},"        [29, 30],\n",[199,102045,102046],{"class":201,"line":1411},[199,102047,102048],{"class":898},"        [35, 36]])]\n",[199,102050,102051],{"class":201,"line":1421},[199,102052,101873],{"class":898},[199,102054,102055],{"class":201,"line":1426},[199,102056,101733],{"class":1454},[199,102058,102059,102061,102063,102065,102067,102069,102071,102073,102075],{"class":201,"line":1436},[199,102060,101882],{"class":205},[199,102062,1115],{"class":1018},[199,102064,3461],{"class":205},[199,102066,1925],{"class":1018},[199,102068,44450],{"class":205},[199,102070,50354],{"class":8113},[199,102072,895],{"class":1086},[199,102074,1115],{"class":1018},[199,102076,1594],{"class":205},[199,102078,102079],{"class":201,"line":1441},[199,102080,95823],{"class":1454},[199,102082,102083],{"class":201,"line":1451},[199,102084,96187],{"class":898},[199,102086,102087],{"class":201,"line":1458},[199,102088,102089],{"class":898},"[array([[ 1],\n",[199,102091,102092],{"class":201,"line":1464},[199,102093,102094],{"class":898},"        [ 7],\n",[199,102096,102097],{"class":201,"line":1478},[199,102098,102099],{"class":898},"        [13],\n",[199,102101,102102],{"class":201,"line":1516},[199,102103,102104],{"class":898},"        [19],\n",[199,102106,102107],{"class":201,"line":1522},[199,102108,102109],{"class":898},"        [25],\n",[199,102111,102112],{"class":201,"line":1528},[199,102113,102114],{"class":898},"        [31]]),\n",[199,102116,102117],{"class":201,"line":1557},[199,102118,102119],{"class":898}," array([[ 2],\n",[199,102121,102122],{"class":201,"line":1563},[199,102123,102124],{"class":898},"        [ 8],\n",[199,102126,102127],{"class":201,"line":1568},[199,102128,102129],{"class":898},"        [14],\n",[199,102131,102132],{"class":201,"line":1574},[199,102133,102134],{"class":898},"        [20],\n",[199,102136,102137],{"class":201,"line":1580},[199,102138,102139],{"class":898},"        [26],\n",[199,102141,102142],{"class":201,"line":1597},[199,102143,102144],{"class":898},"        [32]]),\n",[199,102146,102147],{"class":201,"line":1602},[199,102148,102149],{"class":898}," array([[ 3,  4,  5,  6],\n",[199,102151,102152],{"class":201,"line":1608},[199,102153,102154],{"class":898},"        [ 9, 10, 11, 12],\n",[199,102156,102157],{"class":201,"line":1640},[199,102158,102159],{"class":898},"        [15, 16, 17, 18],\n",[199,102161,102162],{"class":201,"line":1653},[199,102163,102164],{"class":898},"        [21, 22, 23, 24],\n",[199,102166,102167],{"class":201,"line":1673},[199,102168,102169],{"class":898},"        [27, 28, 29, 30],\n",[199,102171,102172],{"class":201,"line":1690},[199,102173,102174],{"class":898},"        [33, 34, 35, 36]])]\n",[199,102176,102177],{"class":201,"line":1706},[199,102178,96187],{"class":898},[199,102180,102181],{"class":201,"line":1712},[199,102182,102183],{"class":1454},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[199,102185,102186,102189,102191],{"class":201,"line":1720},[199,102187,102188],{"class":205},"np.vsplit(aa,",[199,102190,1920],{"class":1018},[199,102192,1594],{"class":205},[199,102194,102195],{"class":201,"line":1725},[199,102196,95823],{"class":1454},[199,102198,102199],{"class":201,"line":1731},[199,102200,96187],{"class":898},[199,102202,102203],{"class":201,"line":1745},[199,102204,101843],{"class":898},[199,102206,102207],{"class":201,"line":1754},[199,102208,101848],{"class":898},[199,102210,102211],{"class":201,"line":1763},[199,102212,101853],{"class":898},[199,102214,102215],{"class":201,"line":1768},[199,102216,101858],{"class":898},[199,102218,102219],{"class":201,"line":19628},[199,102220,101863],{"class":898},[199,102222,102223],{"class":201,"line":19641},[199,102224,101868],{"class":898},[199,102226,102227],{"class":201,"line":19646},[199,102228,96187],{"class":898},[199,102230,102231,102234,102236],{"class":201,"line":19660},[199,102232,102233],{"class":205},"np.hsplit(aa,",[199,102235,1920],{"class":1018},[199,102237,1594],{"class":205},[199,102239,102240],{"class":201,"line":19665},[199,102241,95823],{"class":1454},[199,102243,102244],{"class":201,"line":19671},[199,102245,96187],{"class":898},[199,102247,102248],{"class":201,"line":19676},[199,102249,101963],{"class":898},[199,102251,102252],{"class":201,"line":19690},[199,102253,101968],{"class":898},[199,102255,102256],{"class":201,"line":19695},[199,102257,101973],{"class":898},[199,102259,102260],{"class":201,"line":19700},[199,102261,101978],{"class":898},[199,102263,102264],{"class":201,"line":19714},[199,102265,101983],{"class":898},[199,102267,102268],{"class":201,"line":19726},[199,102269,101988],{"class":898},[199,102271,102272],{"class":201,"line":19731},[199,102273,101993],{"class":898},[199,102275,102276],{"class":201,"line":19744},[199,102277,101998],{"class":898},[199,102279,102280],{"class":201,"line":19749},[199,102281,102003],{"class":898},[199,102283,102284],{"class":201,"line":19754},[199,102285,102008],{"class":898},[199,102287,102288],{"class":201,"line":19759},[199,102289,102013],{"class":898},[199,102291,102292],{"class":201,"line":19772},[199,102293,102018],{"class":898},[199,102295,102296],{"class":201,"line":19777},[199,102297,102023],{"class":898},[199,102299,102300],{"class":201,"line":35475},[199,102301,102028],{"class":898},[199,102303,102304],{"class":201,"line":35481},[199,102305,102033],{"class":898},[199,102307,102308],{"class":201,"line":35487},[199,102309,102038],{"class":898},[199,102311,102312],{"class":201,"line":35493},[199,102313,102043],{"class":898},[199,102315,102316],{"class":201,"line":35499},[199,102317,102048],{"class":898},[199,102319,102320],{"class":201,"line":35510},[199,102321,96187],{"class":898},[199,102323,102324,102327,102329,102331,102333],{"class":201,"line":35516},[199,102325,102326],{"class":205},"np.vsplit(aa,[",[199,102328,1925],{"class":1018},[199,102330,3461],{"class":205},[199,102332,1909],{"class":1018},[199,102334,7554],{"class":205},[199,102336,102337],{"class":201,"line":35536},[199,102338,95823],{"class":1454},[199,102340,102341],{"class":201,"line":35542},[199,102342,96187],{"class":898},[199,102344,102345],{"class":201,"line":35553},[199,102346,101843],{"class":898},[199,102348,102349],{"class":201,"line":35559},[199,102350,101848],{"class":898},[199,102352,102353],{"class":201,"line":35565},[199,102354,101853],{"class":898},[199,102356,102357],{"class":201,"line":35571},[199,102358,101915],{"class":898},[199,102360,102361],{"class":201,"line":35577},[199,102362,101920],{"class":898},[199,102364,102365],{"class":201,"line":35583},[199,102366,101925],{"class":898},[199,102368,102369],{"class":201,"line":35589},[199,102370,101873],{"class":898},[1002,102372,102373],{},"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":57,"searchDepth":36,"depth":36,"links":102375},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101641,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102382,"title":102383,"body":102384,"description":3023,"extension":3024,"meta":102878,"navigation":906,"path":102879,"seo":102880,"stem":102881,"__hash__":102882},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102385,"toc":102869},[102386,102389,102392,102417,102421,102480,102532,102536,102538,102574,102628,102630,102668,102739,102743,102748,102752,102755,102788,102791,102795,102798,102801,102804,102807,102812,102816,102819,102822,102825,102828,102833,102837,102842,102845,102866],[10,102387,102383],{"id":102388},"_9数学函数",[31,102390,102391],{},"补充回顾：python的列表推导式",[190,102393,102395],{"className":33221,"code":102394,"language":33223,"meta":57,"style":57},"[1\u002Fi for i in a]\n",[196,102396,102397],{"__ignoreMap":57},[199,102398,102399,102401,102403,102405,102408,102410,102412,102414],{"class":201,"line":202},[199,102400,1662],{"class":205},[199,102402,1115],{"class":1018},[199,102404,3664],{"class":1086},[199,102406,102407],{"class":205},"i ",[199,102409,5929],{"class":1086},[199,102411,1490],{"class":205},[199,102413,28886],{"class":1086},[199,102415,102416],{"class":205}," a]\n",[14,102418,102420],{"id":102419},"_91-求倒数","9.1 求倒数",[190,102422,102424],{"className":33221,"code":102423,"language":33223,"meta":57,"style":57},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[196,102425,102426,102431,102459,102471],{"__ignoreMap":57},[199,102427,102428],{"class":201,"line":202},[199,102429,102430],{"class":1454},"#数组求倒数\n",[199,102432,102433,102435,102437,102439,102441,102443,102445,102447,102449,102451,102453,102455,102457],{"class":201,"line":36},[199,102434,2867],{"class":205},[199,102436,895],{"class":1086},[199,102438,1662],{"class":205},[199,102440,1115],{"class":1018},[199,102442,3461],{"class":205},[199,102444,1925],{"class":1018},[199,102446,3461],{"class":205},[199,102448,1920],{"class":1018},[199,102450,3461],{"class":205},[199,102452,1915],{"class":1018},[199,102454,3461],{"class":205},[199,102456,1909],{"class":1018},[199,102458,1932],{"class":205},[199,102460,102461,102463,102465,102468],{"class":201,"line":73},[199,102462,3349],{"class":205},[199,102464,895],{"class":1086},[199,102466,102467],{"class":205},"np.array(a)",[199,102469,102470],{"class":1454},"#将列表转换为数组\n",[199,102472,102473,102475,102477],{"class":201,"line":333},[199,102474,1115],{"class":1018},[199,102476,3664],{"class":1086},[199,102478,102479],{"class":205},"b\n",[190,102481,102483],{"className":33221,"code":102482,"language":33223,"meta":57,"style":57},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[196,102484,102485,102513,102522,102527],{"__ignoreMap":57},[199,102486,102487,102489,102491,102493,102495,102497,102499,102501,102503,102505,102507,102509,102511],{"class":201,"line":202},[199,102488,2867],{"class":205},[199,102490,895],{"class":1086},[199,102492,1662],{"class":205},[199,102494,1115],{"class":1018},[199,102496,3461],{"class":205},[199,102498,1925],{"class":1018},[199,102500,3461],{"class":205},[199,102502,1920],{"class":1018},[199,102504,3461],{"class":205},[199,102506,1915],{"class":1018},[199,102508,3461],{"class":205},[199,102510,1909],{"class":1018},[199,102512,1932],{"class":205},[199,102514,102515,102517,102519],{"class":201,"line":36},[199,102516,3349],{"class":205},[199,102518,895],{"class":1086},[199,102520,102521],{"class":205},"np.array(a)\n",[199,102523,102524],{"class":201,"line":73},[199,102525,102526],{"class":1454},"#调用numpy中的函数reciprocal()\n",[199,102528,102529],{"class":201,"line":333},[199,102530,102531],{"class":205},"np.reciprocal(b)\n",[14,102533,102535],{"id":102534},"_92-求平方","9.2 求平方",[31,102537,96789],{},[190,102539,102541],{"className":33221,"code":102540,"language":33223,"meta":57,"style":57},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[196,102542,102543,102548,102553,102569],{"__ignoreMap":57},[199,102544,102545],{"class":201,"line":202},[199,102546,102547],{"class":1454},"#square()，求平方\n",[199,102549,102550],{"class":201,"line":36},[199,102551,102552],{"class":1454},"#一维数组\n",[199,102554,102555,102557,102559,102561,102563,102565,102567],{"class":201,"line":73},[199,102556,2867],{"class":205},[199,102558,895],{"class":1086},[199,102560,95261],{"class":205},[199,102562,1115],{"class":1018},[199,102564,3461],{"class":205},[199,102566,3528],{"class":1018},[199,102568,1594],{"class":205},[199,102570,102571],{"class":201,"line":333},[199,102572,102573],{"class":205},"np.square(a)\n",[190,102575,102577],{"className":33221,"code":102576,"language":33223,"meta":57,"style":57},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[196,102578,102579,102584,102589,102610],{"__ignoreMap":57},[199,102580,102581],{"class":201,"line":202},[199,102582,102583],{"class":1454},"#或者通过循环遍历的形式来计算\n",[199,102585,102586],{"class":201,"line":36},[199,102587,102588],{"class":1454},"#这是一个列表\n",[199,102590,102591,102594,102596,102598,102600,102602,102604,102607],{"class":201,"line":73},[199,102592,102593],{"class":205},"[i",[199,102595,3537],{"class":1086},[199,102597,102407],{"class":205},[199,102599,5929],{"class":1086},[199,102601,1490],{"class":205},[199,102603,28886],{"class":1086},[199,102605,102606],{"class":205}," a]",[199,102608,102609],{"class":1454},"#这个求完之后在数列当中\n",[199,102611,102612,102615,102617,102619,102621,102623,102625],{"class":201,"line":333},[199,102613,102614],{"class":205},"np.array([i",[199,102616,3537],{"class":1086},[199,102618,102407],{"class":205},[199,102620,5929],{"class":1086},[199,102622,1490],{"class":205},[199,102624,28886],{"class":1086},[199,102626,102627],{"class":205}," a])\n",[31,102629,95550],{},[190,102631,102633],{"className":33221,"code":102632,"language":33223,"meta":57,"style":57},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[196,102634,102635,102639,102663],{"__ignoreMap":57},[199,102636,102637],{"class":201,"line":202},[199,102638,95560],{"class":1454},[199,102640,102641,102643,102645,102647,102649,102651,102653,102655,102657,102659,102661],{"class":201,"line":36},[199,102642,95565],{"class":205},[199,102644,895],{"class":1086},[199,102646,95261],{"class":205},[199,102648,1115],{"class":1018},[199,102650,3461],{"class":205},[199,102652,3604],{"class":1018},[199,102654,95266],{"class":205},[199,102656,1915],{"class":1018},[199,102658,3461],{"class":205},[199,102660,1920],{"class":1018},[199,102662,1594],{"class":205},[199,102664,102665],{"class":201,"line":73},[199,102666,102667],{"class":205},"np.square(aa)\n",[190,102669,102671],{"className":33221,"code":102670,"language":33223,"meta":57,"style":57},"#传统的方式\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",[196,102672,102673,102678,102687,102703,102719,102734],{"__ignoreMap":57},[199,102674,102675],{"class":201,"line":202},[199,102676,102677],{"class":1454},"#传统的方式\n",[199,102679,102680,102682,102684],{"class":201,"line":36},[199,102681,100446],{"class":205},[199,102683,895],{"class":1086},[199,102685,102686],{"class":205},"np.empty_like(aa)\n",[199,102688,102689,102691,102693,102695,102697,102699,102701],{"class":201,"line":73},[199,102690,5929],{"class":1086},[199,102692,1490],{"class":205},[199,102694,28886],{"class":1086},[199,102696,35285],{"class":1018},[199,102698,1537],{"class":205},[199,102700,1915],{"class":1018},[199,102702,33628],{"class":205},[199,102704,102705,102707,102709,102711,102713,102715,102717],{"class":201,"line":333},[199,102706,1937],{"class":1086},[199,102708,1978],{"class":205},[199,102710,28886],{"class":1086},[199,102712,35285],{"class":1018},[199,102714,1537],{"class":205},[199,102716,1920],{"class":1018},[199,102718,33628],{"class":205},[199,102720,102721,102724,102726,102729,102731],{"class":201,"line":227},[199,102722,102723],{"class":205},"        bb[i,j]",[199,102725,895],{"class":1086},[199,102727,102728],{"class":205},"aa[i,j]",[199,102730,3537],{"class":1086},[199,102732,102733],{"class":205},"aa[i,j]\n",[199,102735,102736],{"class":201,"line":238},[199,102737,102738],{"class":205},"bb\n",[14,102740,102742],{"id":102741},"_93-求各元素的符号","9.3 求各元素的符号",[31,102744,102745],{},[55,102746],{"alt":57,"src":102747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102749,102751],{"id":102750},"_94-modf函数","9.4 modf函数",[31,102753,102754],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[190,102756,102758],{"className":33221,"code":102757,"language":33223,"meta":57,"style":57},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[196,102759,102760,102783],{"__ignoreMap":57},[199,102761,102762,102764,102766,102768,102770,102772,102774,102776,102778,102781],{"class":201,"line":202},[199,102763,2867],{"class":205},[199,102765,895],{"class":1086},[199,102767,95261],{"class":205},[199,102769,1998],{"class":1086},[199,102771,3528],{"class":1018},[199,102773,3461],{"class":205},[199,102775,3528],{"class":1018},[199,102777,3461],{"class":205},[199,102779,102780],{"class":1018},"0.3",[199,102782,1594],{"class":205},[199,102784,102785],{"class":201,"line":36},[199,102786,102787],{"class":205},"np.modf(a)\n",[31,102789,102790],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102792,102794],{"id":102793},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[31,102796,102797],{},"np.cell()",[31,102799,102800],{},"np.floor()",[31,102802,102803],{},"np.rint()",[31,102805,102806],{},"对各元素分别向上取整、向下取整、四舍五入",[31,102808,102809],{},[55,102810],{"alt":57,"src":102811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102813,102815],{"id":102814},"_96-around函数","9.6 around()函数",[31,102817,102818],{},"around()函数也可以实现对数的小数位数进行操作",[31,102820,102821],{},"其中的参数：",[31,102823,102824],{},"1.要传的数组",[31,102826,102827],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[31,102829,102830],{},[55,102831],{"alt":57,"src":102832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102834,102836],{"id":102835},"_97-三角函数","9.7 三角函数",[31,102838,102839],{},[55,102840],{"alt":57,"src":102841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[31,102843,102844],{},"引入图像模块非常重要",[190,102846,102848],{"className":33221,"code":102847,"language":33223,"meta":57,"style":57},"from matplotlib import pyplot as plt\n",[196,102849,102850],{"__ignoreMap":57},[199,102851,102852,102854,102857,102859,102862,102864],{"class":201,"line":202},[199,102853,33579],{"class":1086},[199,102855,102856],{"class":205}," matplotlib ",[199,102858,33235],{"class":1086},[199,102860,102861],{"class":205}," pyplot ",[199,102863,34225],{"class":1086},[199,102865,34279],{"class":205},[1002,102867,102868],{},"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":57,"searchDepth":36,"depth":36,"links":102870},[102871,102872,102873,102874,102875,102876,102877],{"id":102419,"depth":36,"text":102420},{"id":102534,"depth":36,"text":102535},{"id":102741,"depth":36,"text":102742},{"id":102750,"depth":36,"text":102751},{"id":102793,"depth":36,"text":102794},{"id":102814,"depth":36,"text":102815},{"id":102835,"depth":36,"text":102836},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102383,"description":3023},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102884,"title":102885,"body":102886,"description":3023,"extension":3024,"meta":102890,"navigation":906,"path":102891,"seo":102892,"stem":102893,"__hash__":102894},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102887,"toc":102888},[],{"title":57,"searchDepth":36,"depth":36,"links":102889},[],{"category":53260},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102885,"description":3023},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102896,"title":102897,"body":102898,"description":57,"extension":3024,"meta":104906,"navigation":906,"path":104907,"seo":104908,"stem":104909,"__hash__":104910},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102899,"toc":104882},[102900,102903,102907,102910,102913,102919,102922,102945,102948,102982,102985,103026,103030,103033,103126,103129,103173,103176,103193,103196,103210,103213,103216,103261,103264,103301,103305,103308,103314,103319,103339,103343,103346,103412,103415,103433,103437,103440,103469,103479,103485,103489,103492,103498,103509,103513,103516,103546,103549,103829,103832,103835,103846,103849,103852,103874,103881,103884,103902,103905,103908,103922,103930,103933,103959,103965,103968,103971,103981,103993,104013,104022,104042,104052,104076,104089,104103,104108,104149,104166,104191,104203,104223,104229,104274,104293,104310,104323,104339,104346,104358,104367,104402,104423,104448,104461,104485,104500,104525,104528,104549,104558,104561,104572,104576,104579,104585,104597,104604,104608,104611,104623,104626,104640,104643,104653,104663,104666,104706,104709,104713,104719,104722,104736,104740,104743,104776,104780,104783,104806,104814,104817,104823,104829,104832,104835,104863,104867,104870,104876,104879],[10,102901,102897],{"id":102902},"_1环境安装与第一个-mujoco-程序",[14,102904,102906],{"id":102905},"_1目标说明","1.目标说明",[31,102908,102909],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[31,102911,102912],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[190,102914,102917],{"className":102915,"code":102916,"language":8084,"meta":57},[8082],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[196,102918,102916],{"__ignoreMap":57},[31,102920,102921],{},"需要掌握:",[24,102923,102924,102927,102930,102935,102940],{},[27,102925,102926],{},"Fedora 44 下 MuJoCo 的系统依赖",[27,102928,102929],{},"Python 虚拟环境创建",[27,102931,102932],{},[196,102933,102934],{},"mujoco.MjModel",[27,102936,102937],{},[196,102938,102939],{},"mujoco.MjData",[27,102941,102942],{},[196,102943,102944],{},"mujoco.mj_step(model, data)",[31,102946,102947],{},"MuJoCo 中最重要的两个对象:",[3227,102949,102950,102960],{},[3230,102951,102952],{},[3233,102953,102954,102957],{},[3236,102955,102956],{"align":26580},"对象",[3236,102958,102959],{"align":26580},"含义",[3273,102961,102962,102972],{},[3233,102963,102964,102969],{},[3278,102965,102966],{"align":26580},[196,102967,102968],{},"MjModel",[3278,102970,102971],{"align":26580},"模型结构，来自 XML，基本不随时间变化",[3233,102973,102974,102979],{},[3278,102975,102976],{"align":26580},[196,102977,102978],{},"MjData",[3278,102980,102981],{"align":26580},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[31,102983,102984],{},"可以先用一个类比理解：",[3227,102986,102987,102997],{},[3230,102988,102989],{},[3233,102990,102991,102994],{},[3236,102992,102993],{"align":26580},"类比",[3236,102995,102996],{"align":26580},"MuJoCo 对象",[3273,102998,102999,103008,103017],{},[3233,103000,103001,103004],{},[3278,103002,103003],{"align":26580},"游戏地图和角色配置",[3278,103005,103006],{"align":26580},[196,103007,102968],{},[3233,103009,103010,103013],{},[3278,103011,103012],{"align":26580},"游戏运行到当前帧的状态",[3278,103014,103015],{"align":26580},[196,103016,102978],{},[3233,103018,103019,103022],{},[3278,103020,103021],{"align":26580},"前进一帧",[3278,103023,103024],{"align":26580},[196,103025,102944],{},[14,103027,103029],{"id":103028},"_2环境与依赖安装","2.环境与依赖安装",[31,103031,103032],{},"Fedora 44 系统依赖:",[190,103034,103036],{"className":26666,"code":103035,"language":26668,"meta":57,"style":57},"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",[196,103037,103038,103050,103063,103076,103086,103096,103115],{"__ignoreMap":57},[199,103039,103040,103042,103044,103046,103048],{"class":201,"line":202},[199,103041,27420],{"class":878},[199,103043,29158],{"class":898},[199,103045,26678],{"class":898},[199,103047,29243],{"class":1018},[199,103049,27522],{"class":1018},[199,103051,103052,103055,103058,103061],{"class":201,"line":36},[199,103053,103054],{"class":898},"  python3",[199,103056,103057],{"class":898}," python3-pip",[199,103059,103060],{"class":898}," python3-virtualenv",[199,103062,27522],{"class":1018},[199,103064,103065,103068,103071,103074],{"class":201,"line":73},[199,103066,103067],{"class":898},"  mesa-libGL",[199,103069,103070],{"class":898}," mesa-libGLU",[199,103072,103073],{"class":898}," mesa-dri-drivers",[199,103075,27522],{"class":1018},[199,103077,103078,103081,103084],{"class":201,"line":333},[199,103079,103080],{"class":898},"  libglvnd-glx",[199,103082,103083],{"class":898}," libglvnd-opengl",[199,103085,27522],{"class":1018},[199,103087,103088,103091,103094],{"class":201,"line":227},[199,103089,103090],{"class":898},"  glfw",[199,103092,103093],{"class":898}," glfw-devel",[199,103095,27522],{"class":1018},[199,103097,103098,103101,103104,103107,103110,103113],{"class":201,"line":238},[199,103099,103100],{"class":898},"  libX11",[199,103102,103103],{"class":898}," libXcursor",[199,103105,103106],{"class":898}," libXi",[199,103108,103109],{"class":898}," libXinerama",[199,103111,103112],{"class":898}," libXrandr",[199,103114,27522],{"class":1018},[199,103116,103117,103120,103123],{"class":201,"line":252},[199,103118,103119],{"class":898},"  gcc",[199,103121,103122],{"class":898}," gcc-c++",[199,103124,103125],{"class":898}," make\n",[31,103127,103128],{},"创建 Python 环境:",[190,103130,103132],{"className":26666,"code":103131,"language":26668,"meta":57,"style":57},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[196,103133,103134,103148,103156],{"__ignoreMap":57},[199,103135,103136,103139,103142,103145],{"class":201,"line":202},[199,103137,103138],{"class":878},"python3",[199,103140,103141],{"class":1018}," -m",[199,103143,103144],{"class":898}," venv",[199,103146,103147],{"class":898}," .venv\n",[199,103149,103150,103153],{"class":201,"line":36},[199,103151,103152],{"class":1018},"source",[199,103154,103155],{"class":898}," .venv\u002Fbin\u002Factivate\n",[199,103157,103158,103160,103162,103165,103167,103170],{"class":201,"line":73},[199,103159,33223],{"class":878},[199,103161,103141],{"class":1018},[199,103163,103164],{"class":898}," pip",[199,103166,26678],{"class":898},[199,103168,103169],{"class":1018}," --upgrade",[199,103171,103172],{"class":898}," pip\n",[31,103174,103175],{},"pip 安装:",[190,103177,103179],{"className":26666,"code":103178,"language":26668,"meta":57,"style":57},"pip install \"mujoco>=2.3\" numpy\n",[196,103180,103181],{"__ignoreMap":57},[199,103182,103183,103185,103187,103190],{"class":201,"line":202},[199,103184,26675],{"class":878},[199,103186,26678],{"class":898},[199,103188,103189],{"class":898}," \"mujoco>=2.3\"",[199,103191,103192],{"class":898}," numpy\n",[31,103194,103195],{},"安装完成后，先做最小检查：",[190,103197,103199],{"className":26666,"code":103198,"language":26668,"meta":57,"style":57},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[196,103200,103201],{"__ignoreMap":57},[199,103202,103203,103205,103207],{"class":201,"line":202},[199,103204,33223],{"class":878},[199,103206,33201],{"class":1018},[199,103208,103209],{"class":898}," \"import mujoco; print(mujoco.__version__)\"\n",[31,103211,103212],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[31,103214,103215],{},"conda 安装:",[190,103217,103219],{"className":26666,"code":103218,"language":26668,"meta":57,"style":57},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[196,103220,103221,103241,103251],{"__ignoreMap":57},[199,103222,103223,103225,103227,103229,103232,103235,103238],{"class":201,"line":202},[199,103224,33173],{"class":878},[199,103226,32019],{"class":898},[199,103228,27959],{"class":1018},[199,103230,103231],{"class":898}," mujoco-study",[199,103233,103234],{"class":898}," python=",[199,103236,103237],{"class":1018},"3.10",[199,103239,103240],{"class":1018}," -y\n",[199,103242,103243,103245,103248],{"class":201,"line":36},[199,103244,33173],{"class":878},[199,103246,103247],{"class":898}," activate",[199,103249,103250],{"class":898}," mujoco-study\n",[199,103252,103253,103255,103257,103259],{"class":201,"line":73},[199,103254,26675],{"class":878},[199,103256,26678],{"class":898},[199,103258,103189],{"class":898},[199,103260,103192],{"class":898},[31,103262,103263],{},"版本冲突说明:",[24,103265,103266,103272,103282,103291],{},[27,103267,103268,103269,31228],{},"不要安装 ",[196,103270,103271],{},"mujoco-py",[27,103273,103274,103275,103277,103278,103281],{},"如果旧项目里同时安装了 ",[196,103276,103271],{}," 和 ",[196,103279,103280],{},"mujoco","，建议新建干净虚拟环境。",[27,103283,103284,103287,103288,31228],{},[196,103285,103286],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[196,103289,103290],{},"~\u002F.mujoco\u002Fmujoco210",[27,103292,103293,103294,84798,103297,103300],{},"离屏渲染可能涉及 OpenGL 后端，",[196,103295,103296],{},"MUJOCO_GL=egl",[196,103298,103299],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103302,103304],{"id":103303},"_3核心概念解释","3.核心概念解释",[31,103306,103307],{},"MuJoCo 的基本执行流程:",[190,103309,103312],{"className":103310,"code":103311,"language":8084,"meta":57},[8082],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[196,103313,103311],{"__ignoreMap":57},[31,103315,103316,103318],{},[196,103317,102968],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[31,103320,103321,103323,103324,3300,103327,3300,103330,3300,103333,3300,103336,31228],{},[196,103322,102978],{}," 存放仿真运行时状态，例如 ",[196,103325,103326],{},"data.time",[196,103328,103329],{},"data.qpos",[196,103331,103332],{},"data.qvel",[196,103334,103335],{},"data.ctrl",[196,103337,103338],{},"data.xpos",[19,103340,103342],{"id":103341},"xml-是什么","XML 是什么",[31,103344,103345],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[190,103347,103349],{"className":2763,"code":103348,"language":2765,"meta":57,"style":57},"\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",[196,103350,103351,103373,103404],{"__ignoreMap":57},[199,103352,103353,103355,103357,103359,103361,103363,103366,103368,103371],{"class":201,"line":202},[199,103354,887],{"class":205},[199,103356,1431],{"class":874},[199,103358,967],{"class":878},[199,103360,895],{"class":205},[199,103362,55750],{"class":898},[199,103364,103365],{"class":878}," pos",[199,103367,895],{"class":205},[199,103369,103370],{"class":898},"\"0 0 1\"",[199,103372,882],{"class":205},[199,103374,103375,103377,103380,103382,103384,103387,103389,103391,103393,103396,103398,103401],{"class":201,"line":36},[199,103376,1824],{"class":205},[199,103378,103379],{"class":874},"geom",[199,103381,967],{"class":878},[199,103383,895],{"class":205},[199,103385,103386],{"class":898},"\"box_geom\"",[199,103388,56083],{"class":878},[199,103390,895],{"class":205},[199,103392,55750],{"class":898},[199,103394,103395],{"class":878}," size",[199,103397,895],{"class":205},[199,103399,103400],{"class":898},"\"0.1 0.1 0.1\"",[199,103402,103403],{"class":205},"\u002F>\n",[199,103405,103406,103408,103410],{"class":201,"line":73},[199,103407,1414],{"class":205},[199,103409,1431],{"class":874},[199,103411,882],{"class":205},[31,103413,103414],{},"这段意思是：",[24,103416,103417,103423,103430],{},[27,103418,103419,103420,103422],{},"创建一个叫 ",[196,103421,55973],{}," 的刚体。",[27,103424,103425,103426,103429],{},"它初始放在 ",[196,103427,103428],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[27,103431,103432],{},"它里面有一个盒子形状的几何体。",[19,103434,103436],{"id":103435},"timestep-是什么","timestep 是什么",[31,103438,103439],{},"XML 里的：",[190,103441,103443],{"className":2763,"code":103442,"language":2765,"meta":57,"style":57},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[196,103444,103445],{"__ignoreMap":57},[199,103446,103447,103449,103451,103454,103456,103459,103462,103464,103467],{"class":201,"line":202},[199,103448,887],{"class":205},[199,103450,71425],{"class":874},[199,103452,103453],{"class":878}," timestep",[199,103455,895],{"class":205},[199,103457,103458],{"class":898},"\"0.01\"",[199,103460,103461],{"class":878}," gravity",[199,103463,895],{"class":205},[199,103465,103466],{"class":898},"\"0 0 -9.81\"",[199,103468,103403],{"class":205},[31,103470,103471,103472,103475,103476,103478],{},"表示每调用一次 ",[196,103473,103474],{},"mj_step","，仿真时间前进 ",[196,103477,41827],{}," 秒。循环 100 次，大约就是 1 秒：",[190,103480,103483],{"className":103481,"code":103482,"language":8084,"meta":57},[8082],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[196,103484,103482],{"__ignoreMap":57},[19,103486,103488],{"id":103487},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[31,103490,103491],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[190,103493,103496],{"className":103494,"code":103495,"language":8084,"meta":57},[8082],"x y z qw qx qy qz\n",[196,103497,103495],{"__ignoreMap":57},[31,103499,103500,103501,103504,103505,103508],{},"表示一个自由刚体的位置和姿态。其中 ",[196,103502,103503],{},"x y z"," 是位置，",[196,103506,103507],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103510,103512],{"id":103511},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[31,103514,103515],{},"新建文件:",[190,103517,103519],{"className":26666,"code":103518,"language":26668,"meta":57,"style":57},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[196,103520,103521,103531,103538],{"__ignoreMap":57},[199,103522,103523,103526,103528],{"class":201,"line":202},[199,103524,103525],{"class":878},"mkdir",[199,103527,32059],{"class":1018},[199,103529,103530],{"class":898}," mujoco_tutorial\n",[199,103532,103533,103536],{"class":201,"line":36},[199,103534,103535],{"class":1018},"cd",[199,103537,103530],{"class":898},[199,103539,103540,103543],{"class":201,"line":73},[199,103541,103542],{"class":878},"touch",[199,103544,103545],{"class":898}," ch1_first_sim.py\n",[31,103547,103548],{},"写入:",[190,103550,103552],{"className":33221,"code":103551,"language":33223,"meta":57,"style":57},"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",[196,103553,103554,103561,103565,103569,103579,103584,103589,103593,103598,103603,103607,103612,103617,103622,103627,103632,103637,103641,103645,103649,103662,103676,103686,103690,103702,103714,103726,103738,103750,103754,103771,103776,103780,103791,103802,103806,103810,103824],{"__ignoreMap":57},[199,103555,103556,103558],{"class":201,"line":202},[199,103557,33235],{"class":1086},[199,103559,103560],{"class":205}," mujoco\n",[199,103562,103563],{"class":201,"line":36},[199,103564,907],{"emptyLinePlaceholder":906},[199,103566,103567],{"class":201,"line":73},[199,103568,907],{"emptyLinePlaceholder":906},[199,103570,103571,103574,103576],{"class":201,"line":333},[199,103572,103573],{"class":1018},"XML",[199,103575,16425],{"class":1086},[199,103577,103578],{"class":898}," \"\"\"\n",[199,103580,103581],{"class":201,"line":227},[199,103582,103583],{"class":898},"\u003Cmujoco model=\"first_sim\">\n",[199,103585,103586],{"class":201,"line":238},[199,103587,103588],{"class":898},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[199,103590,103591],{"class":201,"line":252},[199,103592,907],{"emptyLinePlaceholder":906},[199,103594,103595],{"class":201,"line":388},[199,103596,103597],{"class":898},"  \u003Cworldbody>\n",[199,103599,103600],{"class":201,"line":415},[199,103601,103602],{"class":898},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[199,103604,103605],{"class":201,"line":426},[199,103606,907],{"emptyLinePlaceholder":906},[199,103608,103609],{"class":201,"line":1015},[199,103610,103611],{"class":898},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[199,103613,103614],{"class":201,"line":1031},[199,103615,103616],{"class":898},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[199,103618,103619],{"class":201,"line":1043},[199,103620,103621],{"class":898},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[199,103623,103624],{"class":201,"line":1049},[199,103625,103626],{"class":898},"    \u003C\u002Fbody>\n",[199,103628,103629],{"class":201,"line":1054},[199,103630,103631],{"class":898},"  \u003C\u002Fworldbody>\n",[199,103633,103634],{"class":201,"line":1062},[199,103635,103636],{"class":898},"\u003C\u002Fmujoco>\n",[199,103638,103639],{"class":201,"line":1075},[199,103640,97957],{"class":898},[199,103642,103643],{"class":201,"line":1092},[199,103644,907],{"emptyLinePlaceholder":906},[199,103646,103647],{"class":201,"line":1107},[199,103648,907],{"emptyLinePlaceholder":906},[199,103650,103651,103653,103655,103658,103660],{"class":201,"line":1128},[199,103652,34789],{"class":1086},[199,103654,4889],{"class":878},[199,103656,103657],{"class":205},"() -> ",[199,103659,97945],{"class":1018},[199,103661,6640],{"class":205},[199,103663,103664,103667,103669,103672,103674],{"class":201,"line":1146},[199,103665,103666],{"class":205},"    model ",[199,103668,895],{"class":1086},[199,103670,103671],{"class":205}," mujoco.MjModel.from_xml_string(",[199,103673,103573],{"class":1018},[199,103675,1594],{"class":205},[199,103677,103678,103681,103683],{"class":201,"line":1163},[199,103679,103680],{"class":205},"    data ",[199,103682,895],{"class":1086},[199,103684,103685],{"class":205}," mujoco.MjData(model)\n",[199,103687,103688],{"class":201,"line":1176},[199,103689,907],{"emptyLinePlaceholder":906},[199,103691,103692,103694,103696,103699],{"class":201,"line":1189},[199,103693,34141],{"class":1018},[199,103695,1537],{"class":205},[199,103697,103698],{"class":898},"\"nq:\"",[199,103700,103701],{"class":205},", model.nq)\n",[199,103703,103704,103706,103708,103711],{"class":201,"line":1202},[199,103705,34141],{"class":1018},[199,103707,1537],{"class":205},[199,103709,103710],{"class":898},"\"nv:\"",[199,103712,103713],{"class":205},", model.nv)\n",[199,103715,103716,103718,103720,103723],{"class":201,"line":1207},[199,103717,34141],{"class":1018},[199,103719,1537],{"class":205},[199,103721,103722],{"class":898},"\"nu:\"",[199,103724,103725],{"class":205},", model.nu)\n",[199,103727,103728,103730,103732,103735],{"class":201,"line":1212},[199,103729,34141],{"class":1018},[199,103731,1537],{"class":205},[199,103733,103734],{"class":898},"\"initial time:\"",[199,103736,103737],{"class":205},", data.time)\n",[199,103739,103740,103742,103744,103747],{"class":201,"line":1225},[199,103741,34141],{"class":1018},[199,103743,1537],{"class":205},[199,103745,103746],{"class":898},"\"initial qpos:\"",[199,103748,103749],{"class":205},", data.qpos.copy())\n",[199,103751,103752],{"class":201,"line":1236},[199,103753,907],{"emptyLinePlaceholder":906},[199,103755,103756,103758,103761,103763,103765,103767,103769],{"class":201,"line":1249},[199,103757,1937],{"class":1086},[199,103759,103760],{"class":205}," _ ",[199,103762,28886],{"class":1086},[199,103764,35285],{"class":1018},[199,103766,1537],{"class":205},[199,103768,3396],{"class":1018},[199,103770,33628],{"class":205},[199,103772,103773],{"class":201,"line":1262},[199,103774,103775],{"class":205},"        mujoco.mj_step(model, data)\n",[199,103777,103778],{"class":201,"line":1275},[199,103779,907],{"emptyLinePlaceholder":906},[199,103781,103782,103784,103786,103789],{"class":201,"line":1287},[199,103783,34141],{"class":1018},[199,103785,1537],{"class":205},[199,103787,103788],{"class":898},"\"final time:\"",[199,103790,103737],{"class":205},[199,103792,103793,103795,103797,103800],{"class":201,"line":1292},[199,103794,34141],{"class":1018},[199,103796,1537],{"class":205},[199,103798,103799],{"class":898},"\"final qpos:\"",[199,103801,103749],{"class":205},[199,103803,103804],{"class":201,"line":1297},[199,103805,907],{"emptyLinePlaceholder":906},[199,103807,103808],{"class":201,"line":1310},[199,103809,907],{"emptyLinePlaceholder":906},[199,103811,103812,103814,103816,103819,103822],{"class":201,"line":1315},[199,103813,4470],{"class":1086},[199,103815,34062],{"class":1018},[199,103817,103818],{"class":1086}," ==",[199,103820,103821],{"class":898}," \"__main__\"",[199,103823,6640],{"class":205},[199,103825,103826],{"class":201,"line":1330},[199,103827,103828],{"class":205},"    main()\n",[19,103830,103831],{"id":103831},"代码逐段解释",[31,103833,103834],{},"导入库：",[190,103836,103838],{"className":33221,"code":103837,"language":33223,"meta":57,"style":57},"import mujoco\n",[196,103839,103840],{"__ignoreMap":57},[199,103841,103842,103844],{"class":201,"line":202},[199,103843,33235],{"class":1086},[199,103845,103560],{"class":205},[31,103847,103848],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[31,103850,103851],{},"定义 XML：",[190,103853,103855],{"className":33221,"code":103854,"language":33223,"meta":57,"style":57},"XML = \"\"\"\n...\n\"\"\"\n",[196,103856,103857,103865,103870],{"__ignoreMap":57},[199,103858,103859,103861,103863],{"class":201,"line":202},[199,103860,103573],{"class":1018},[199,103862,16425],{"class":1086},[199,103864,103578],{"class":898},[199,103866,103867],{"class":201,"line":36},[199,103868,103869],{"class":898},"...\n",[199,103871,103872],{"class":201,"line":73},[199,103873,97957],{"class":898},[31,103875,103876,103877,103880],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[196,103878,103879],{},"freejoint"," 的方块。",[31,103882,103883],{},"编译模型：",[190,103885,103887],{"className":33221,"code":103886,"language":33223,"meta":57,"style":57},"model = mujoco.MjModel.from_xml_string(XML)\n",[196,103888,103889],{"__ignoreMap":57},[199,103890,103891,103894,103896,103898,103900],{"class":201,"line":202},[199,103892,103893],{"class":205},"model ",[199,103895,895],{"class":1086},[199,103897,103671],{"class":205},[199,103899,103573],{"class":1018},[199,103901,1594],{"class":205},[31,103903,103904],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[31,103906,103907],{},"创建数据：",[190,103909,103911],{"className":33221,"code":103910,"language":33223,"meta":57,"style":57},"data = mujoco.MjData(model)\n",[196,103912,103913],{"__ignoreMap":57},[199,103914,103915,103918,103920],{"class":201,"line":202},[199,103916,103917],{"class":205},"data ",[199,103919,895],{"class":1086},[199,103921,103685],{"class":205},[31,103923,103924,103926,103927,103929],{},[196,103925,36242],{}," 会保存仿真当前状态。刚创建时，时间是 ",[196,103928,1025],{},"，方块还在初始位置。",[31,103931,103932],{},"推进仿真：",[190,103934,103936],{"className":33221,"code":103935,"language":33223,"meta":57,"style":57},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[196,103937,103938,103954],{"__ignoreMap":57},[199,103939,103940,103942,103944,103946,103948,103950,103952],{"class":201,"line":202},[199,103941,5929],{"class":1086},[199,103943,103760],{"class":205},[199,103945,28886],{"class":1086},[199,103947,35285],{"class":1018},[199,103949,1537],{"class":205},[199,103951,3396],{"class":1018},[199,103953,33628],{"class":205},[199,103955,103956],{"class":201,"line":36},[199,103957,103958],{"class":205},"    mujoco.mj_step(model, data)\n",[31,103960,103961,103962,103964],{},"每次 ",[196,103963,103474],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[19,103966,103967],{"id":103967},"代码逐行细讲",[31,103969,103970],{},"下面把完整代码按新手视角拆开讲。",[190,103972,103973],{"className":33221,"code":103837,"language":33223,"meta":57,"style":57},[196,103974,103975],{"__ignoreMap":57},[199,103976,103977,103979],{"class":201,"line":202},[199,103978,33235],{"class":1086},[199,103980,103560],{"class":205},[31,103982,103983,103985,103986,3300,103988,3300,103990,31228],{},[196,103984,33235],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[196,103987,102934],{},[196,103989,102939],{},[196,103991,103992],{},"mujoco.mj_step",[190,103994,103995],{"className":33221,"code":103854,"language":33223,"meta":57,"style":57},[196,103996,103997,104005,104009],{"__ignoreMap":57},[199,103998,103999,104001,104003],{"class":201,"line":202},[199,104000,103573],{"class":1018},[199,104002,16425],{"class":1086},[199,104004,103578],{"class":898},[199,104006,104007],{"class":201,"line":36},[199,104008,103869],{"class":898},[199,104010,104011],{"class":201,"line":73},[199,104012,97957],{"class":898},[31,104014,104015,104017,104018,104021],{},[196,104016,103573],{}," 是一个变量名。右边的三引号 ",[196,104019,104020],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[190,104023,104024],{"className":2763,"code":103583,"language":2765,"meta":57,"style":57},[196,104025,104026],{"__ignoreMap":57},[199,104027,104028,104030,104032,104035,104037,104040],{"class":201,"line":202},[199,104029,887],{"class":205},[199,104031,103280],{"class":874},[199,104033,104034],{"class":878}," model",[199,104036,895],{"class":205},[199,104038,104039],{"class":898},"\"first_sim\"",[199,104041,882],{"class":205},[31,104043,104044,104045,104048,104049,31228],{},"这是 XML 的根标签。",[196,104046,104047],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[196,104050,104051],{},"first_sim",[190,104053,104054],{"className":2763,"code":103442,"language":2765,"meta":57,"style":57},[196,104055,104056],{"__ignoreMap":57},[199,104057,104058,104060,104062,104064,104066,104068,104070,104072,104074],{"class":201,"line":202},[199,104059,887],{"class":205},[199,104061,71425],{"class":874},[199,104063,103453],{"class":878},[199,104065,895],{"class":205},[199,104067,103458],{"class":898},[199,104069,103461],{"class":878},[199,104071,895],{"class":205},[199,104073,103466],{"class":898},[199,104075,103403],{"class":205},[31,104077,104078,104080,104081,104084,104085,104088],{},[196,104079,71425],{}," 用来设置仿真参数。",[196,104082,104083],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[196,104086,104087],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[190,104090,104092],{"className":2763,"code":104091,"language":2765,"meta":57,"style":57},"\u003Cworldbody>\n",[196,104093,104094],{"__ignoreMap":57},[199,104095,104096,104098,104101],{"class":201,"line":202},[199,104097,887],{"class":205},[199,104099,104100],{"class":874},"worldbody",[199,104102,882],{"class":205},[31,104104,104105,104107],{},[196,104106,104100],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[190,104109,104111],{"className":2763,"code":104110,"language":2765,"meta":57,"style":57},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[196,104112,104113],{"__ignoreMap":57},[199,104114,104115,104117,104119,104121,104123,104126,104128,104130,104133,104135,104137,104140,104142,104144,104147],{"class":201,"line":202},[199,104116,887],{"class":205},[199,104118,103379],{"class":874},[199,104120,967],{"class":878},[199,104122,895],{"class":205},[199,104124,104125],{"class":898},"\"floor\"",[199,104127,56083],{"class":878},[199,104129,895],{"class":205},[199,104131,104132],{"class":898},"\"plane\"",[199,104134,103395],{"class":878},[199,104136,895],{"class":205},[199,104138,104139],{"class":898},"\"2 2 0.1\"",[199,104141,81026],{"class":878},[199,104143,895],{"class":205},[199,104145,104146],{"class":898},"\"0.8 0.8 0.8 1\"",[199,104148,103403],{"class":205},[31,104150,104151,104152,104154,104155,104158,104159,104162,104163,104165],{},"这行创建地面。",[196,104153,103379],{}," 是几何体。",[196,104156,104157],{},"name=\"floor\""," 是名字。",[196,104160,104161],{},"type=\"plane\""," 表示平面。",[196,104164,57369],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[190,104167,104169],{"className":2763,"code":104168,"language":2765,"meta":57,"style":57},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[196,104170,104171],{"__ignoreMap":57},[199,104172,104173,104175,104177,104179,104181,104183,104185,104187,104189],{"class":201,"line":202},[199,104174,887],{"class":205},[199,104176,1431],{"class":874},[199,104178,967],{"class":878},[199,104180,895],{"class":205},[199,104182,55750],{"class":898},[199,104184,103365],{"class":878},[199,104186,895],{"class":205},[199,104188,103370],{"class":898},[199,104190,882],{"class":205},[31,104192,104193,104194,31228,104196,104199,104200,104202],{},"这行创建一个刚体，名字叫 ",[196,104195,55973],{},[196,104197,104198],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[196,104201,103428],{},"，也就是离地面 1 米高。",[190,104204,104206],{"className":2763,"code":104205,"language":2765,"meta":57,"style":57},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[196,104207,104208],{"__ignoreMap":57},[199,104209,104210,104212,104214,104216,104218,104221],{"class":201,"line":202},[199,104211,887],{"class":205},[199,104213,103879],{"class":874},[199,104215,967],{"class":878},[199,104217,895],{"class":205},[199,104219,104220],{"class":898},"\"box_free\"",[199,104222,103403],{"class":205},[31,104224,104225,104226,104228],{},"这行很重要。",[196,104227,103879],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[190,104230,104232],{"className":2763,"code":104231,"language":2765,"meta":57,"style":57},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[196,104233,104234],{"__ignoreMap":57},[199,104235,104236,104238,104240,104242,104244,104246,104248,104250,104252,104254,104256,104258,104261,104263,104265,104267,104269,104272],{"class":201,"line":202},[199,104237,887],{"class":205},[199,104239,103379],{"class":874},[199,104241,967],{"class":878},[199,104243,895],{"class":205},[199,104245,103386],{"class":898},[199,104247,56083],{"class":878},[199,104249,895],{"class":205},[199,104251,55750],{"class":898},[199,104253,103395],{"class":878},[199,104255,895],{"class":205},[199,104257,103400],{"class":898},[199,104259,104260],{"class":878}," mass",[199,104262,895],{"class":205},[199,104264,6579],{"class":898},[199,104266,81026],{"class":878},[199,104268,895],{"class":205},[199,104270,104271],{"class":898},"\"1 0 0 1\"",[199,104273,103403],{"class":205},[31,104275,104276,104277,104280,104281,104284,104285,104288,104289,104292],{},"这行给 box body 添加一个盒子形状。",[196,104278,104279],{},"type=\"box\""," 表示形状是盒子。",[196,104282,104283],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[196,104286,104287],{},"mass=\"1\""," 表示质量是 1。",[196,104290,104291],{},"rgba=\"1 0 0 1\""," 表示红色。",[190,104294,104296],{"className":33221,"code":104295,"language":33223,"meta":57,"style":57},"def main() -> None:\n",[196,104297,104298],{"__ignoreMap":57},[199,104299,104300,104302,104304,104306,104308],{"class":201,"line":202},[199,104301,34789],{"class":1086},[199,104303,4889],{"class":878},[199,104305,103657],{"class":205},[199,104307,97945],{"class":1018},[199,104309,6640],{"class":205},[31,104311,104312,104314,104315,104318,104319,104322],{},[196,104313,34789],{}," 用来定义函数。这里定义了一个叫 ",[196,104316,104317],{},"main"," 的函数。",[196,104320,104321],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[190,104324,104325],{"className":33221,"code":103886,"language":33223,"meta":57,"style":57},[196,104326,104327],{"__ignoreMap":57},[199,104328,104329,104331,104333,104335,104337],{"class":201,"line":202},[199,104330,103893],{"class":205},[199,104332,895],{"class":1086},[199,104334,103671],{"class":205},[199,104336,103573],{"class":1018},[199,104338,1594],{"class":205},[31,104340,104341,104342,104345],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[196,104343,104344],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[190,104347,104348],{"className":33221,"code":103910,"language":33223,"meta":57,"style":57},[196,104349,104350],{"__ignoreMap":57},[199,104351,104352,104354,104356],{"class":201,"line":202},[199,104353,103917],{"class":205},[199,104355,895],{"class":1086},[199,104357,103685],{"class":205},[31,104359,104360,104361,104363,104364,104366],{},"这行创建仿真数据。",[196,104362,36242],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[196,104365,36242],{}," 都会变化。",[190,104368,104370],{"className":33221,"code":104369,"language":33223,"meta":57,"style":57},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[196,104371,104372,104382,104392],{"__ignoreMap":57},[199,104373,104374,104376,104378,104380],{"class":201,"line":202},[199,104375,33258],{"class":1018},[199,104377,1537],{"class":205},[199,104379,103698],{"class":898},[199,104381,103701],{"class":205},[199,104383,104384,104386,104388,104390],{"class":201,"line":36},[199,104385,33258],{"class":1018},[199,104387,1537],{"class":205},[199,104389,103710],{"class":898},[199,104391,103713],{"class":205},[199,104393,104394,104396,104398,104400],{"class":201,"line":73},[199,104395,33258],{"class":1018},[199,104397,1537],{"class":205},[199,104399,103722],{"class":898},[199,104401,103725],{"class":205},[31,104403,104404,104406,104407,104410,104411,104414,104415,104418,104419,104422],{},[196,104405,33258],{}," 用来输出信息。",[196,104408,104409],{},"model.nq"," 是位置变量数量，",[196,104412,104413],{},"model.nv"," 是速度变量数量，",[196,104416,104417],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[196,104420,104421],{},"nu"," 是 0。",[190,104424,104426],{"className":33221,"code":104425,"language":33223,"meta":57,"style":57},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[196,104427,104428,104438],{"__ignoreMap":57},[199,104429,104430,104432,104434,104436],{"class":201,"line":202},[199,104431,33258],{"class":1018},[199,104433,1537],{"class":205},[199,104435,103734],{"class":898},[199,104437,103737],{"class":205},[199,104439,104440,104442,104444,104446],{"class":201,"line":36},[199,104441,33258],{"class":1018},[199,104443,1537],{"class":205},[199,104445,103746],{"class":898},[199,104447,103749],{"class":205},[31,104449,104450,104451,104453,104454,104456,104457,104460],{},"这里打印初始时间和初始位置。",[196,104452,103326],{}," 一开始是 0。",[196,104455,103329],{}," 是位置数组。",[196,104458,104459],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[190,104462,104463],{"className":33221,"code":103935,"language":33223,"meta":57,"style":57},[196,104464,104465,104481],{"__ignoreMap":57},[199,104466,104467,104469,104471,104473,104475,104477,104479],{"class":201,"line":202},[199,104468,5929],{"class":1086},[199,104470,103760],{"class":205},[199,104472,28886],{"class":1086},[199,104474,35285],{"class":1018},[199,104476,1537],{"class":205},[199,104478,3396],{"class":1018},[199,104480,33628],{"class":205},[199,104482,104483],{"class":201,"line":36},[199,104484,103958],{"class":205},[31,104486,104487,104489,104490,104493,104494,104496,104497,104499],{},[196,104488,5929],{}," 是循环。",[196,104491,104492],{},"range(100)"," 表示循环 100 次。",[196,104495,4066],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[196,104498,103474],{},"，仿真就前进一步。",[190,104501,104503],{"className":33221,"code":104502,"language":33223,"meta":57,"style":57},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[196,104504,104505,104515],{"__ignoreMap":57},[199,104506,104507,104509,104511,104513],{"class":201,"line":202},[199,104508,33258],{"class":1018},[199,104510,1537],{"class":205},[199,104512,103788],{"class":898},[199,104514,103737],{"class":205},[199,104516,104517,104519,104521,104523],{"class":201,"line":36},[199,104518,33258],{"class":1018},[199,104520,1537],{"class":205},[199,104522,103799],{"class":898},[199,104524,103749],{"class":205},[31,104526,104527],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[190,104529,104531],{"className":33221,"code":104530,"language":33223,"meta":57,"style":57},"if __name__ == \"__main__\":\n    main()\n",[196,104532,104533,104545],{"__ignoreMap":57},[199,104534,104535,104537,104539,104541,104543],{"class":201,"line":202},[199,104536,4470],{"class":1086},[199,104538,34062],{"class":1018},[199,104540,103818],{"class":1086},[199,104542,103821],{"class":898},[199,104544,6640],{"class":205},[199,104546,104547],{"class":201,"line":36},[199,104548,103828],{"class":205},[31,104550,104551,104552,104555,104556,31228],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[196,104553,104554],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[196,104557,104554],{},[31,104559,104560],{},"运行:",[190,104562,104564],{"className":26666,"code":104563,"language":26668,"meta":57,"style":57},"python ch1_first_sim.py\n",[196,104565,104566],{"__ignoreMap":57},[199,104567,104568,104570],{"class":201,"line":202},[199,104569,33223],{"class":878},[199,104571,103545],{"class":898},[14,104573,104575],{"id":104574},"_5运行结果说明","5.运行结果说明",[31,104577,104578],{},"你应该看到类似输出:",[190,104580,104583],{"className":104581,"code":104582,"language":8084,"meta":57},[8082],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[196,104584,104582],{"__ignoreMap":57},[31,104586,104587,104589,104590,104593,104594,31228],{},[196,104588,103879],{}," 有 7 个位置变量: ",[196,104591,104592],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[196,104595,104596],{},"vx vy vz wx wy wz",[31,104598,104599,104600,104603],{},"你还会看到 ",[196,104601,104602],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104605,104607],{"id":104606},"_6验证步骤","6.验证步骤",[31,104609,104610],{},"确认版本:",[190,104612,104613],{"className":26666,"code":103198,"language":26668,"meta":57,"style":57},[196,104614,104615],{"__ignoreMap":57},[199,104616,104617,104619,104621],{"class":201,"line":202},[199,104618,33223],{"class":878},[199,104620,33201],{"class":1018},[199,104622,103209],{"class":898},[31,104624,104625],{},"确认导入的是官方 bindings:",[190,104627,104629],{"className":26666,"code":104628,"language":26668,"meta":57,"style":57},"python -c \"import mujoco; print(mujoco)\"\n",[196,104630,104631],{"__ignoreMap":57},[199,104632,104633,104635,104637],{"class":201,"line":202},[199,104634,33223],{"class":878},[199,104636,33201],{"class":1018},[199,104638,104639],{"class":898}," \"import mujoco; print(mujoco)\"\n",[31,104641,104642],{},"运行程序:",[190,104644,104645],{"className":26666,"code":104563,"language":26668,"meta":57,"style":57},[196,104646,104647],{"__ignoreMap":57},[199,104648,104649,104651],{"class":201,"line":202},[199,104650,33223],{"class":878},[199,104652,103545],{"class":898},[31,104654,104655,104656,104659,104660,31228],{},"检查 ",[196,104657,104658],{},"final time"," 是否约等于 ",[196,104661,104662],{},"1.0",[31,104664,104665],{},"再做几个小实验：",[24,104667,104668,104678,104686,104699],{},[27,104669,104670,104671,104673,104674,104677],{},"把 ",[196,104672,104198],{}," 改成 ",[196,104675,104676],{},"pos=\"0 0 2\"","，观察初始高度变化。",[27,104679,104670,104680,104673,104682,104685],{},[196,104681,104087],{},[196,104683,104684],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[27,104687,104670,104688,104673,104690,104693,104694,104696,104697,31228],{},[196,104689,104083],{},[196,104691,104692],{},"timestep=\"0.005\"","，观察 100 步后的 ",[196,104695,104658],{}," 是否变成约 ",[196,104698,38170],{},[27,104700,104701,104702,104705],{},"删除 ",[196,104703,104704],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[31,104707,104708],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104710,104712],{"id":104711},"_7常见错误与解决方案","7.常见错误与解决方案",[19,104714,104716],{"id":104715},"modulenotfounderror-no-module-named-mujoco",[196,104717,104718],{},"ModuleNotFoundError: No module named 'mujoco'",[31,104720,104721],{},"解决:",[190,104723,104725],{"className":26666,"code":104724,"language":26668,"meta":57,"style":57},"pip install \"mujoco>=2.3\"\n",[196,104726,104727],{"__ignoreMap":57},[199,104728,104729,104731,104733],{"class":201,"line":202},[199,104730,26675],{"class":878},[199,104732,26678],{"class":898},[199,104734,104735],{"class":898}," \"mujoco>=2.3\"\n",[19,104737,104739],{"id":104738},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[31,104741,104742],{},"先安装系统依赖:",[190,104744,104746],{"className":26666,"code":104745,"language":26668,"meta":57,"style":57},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[196,104747,104748],{"__ignoreMap":57},[199,104749,104750,104752,104754,104756,104758,104761,104763,104766,104768,104771,104773],{"class":201,"line":202},[199,104751,27420],{"class":878},[199,104753,29158],{"class":898},[199,104755,26678],{"class":898},[199,104757,29243],{"class":1018},[199,104759,104760],{"class":898}," mesa-libGL",[199,104762,103073],{"class":898},[199,104764,104765],{"class":898}," glfw",[199,104767,103093],{"class":898},[199,104769,104770],{"class":898}," libX11",[199,104772,103106],{"class":898},[199,104774,104775],{"class":898}," libXrandr\n",[19,104777,104779],{"id":104778},"xml-解析失败","XML 解析失败",[31,104781,104782],{},"检查:",[24,104784,104785,104788,104791,104797],{},[27,104786,104787],{},"标签是否闭合",[27,104789,104790],{},"属性是否带引号",[27,104792,104793,104794],{},"根节点是否是 ",[196,104795,104796],{},"\u003Cmujoco>",[27,104798,104799,104801,104802,104805],{},[196,104800,1431],{}," 是否放在 ",[196,104803,104804],{},"\u003Cworldbody>"," 内部",[19,104807,104809,104811,104812],{"id":104808},"final-time-不是严格等于-10",[196,104810,104658],{}," 不是严格等于 ",[196,104813,104662],{},[31,104815,104816],{},"这通常不是错误。浮点数计算可能得到：",[190,104818,104821],{"className":104819,"code":104820,"language":8084,"meta":57},[8082],"1.0000000000000007\n",[196,104822,104820],{"__ignoreMap":57},[31,104824,104825,104826,104828],{},"只要接近 ",[196,104827,104662],{}," 就正常。",[19,104830,104831],{"id":104831},"方块没有掉下来",[31,104833,104834],{},"检查：",[24,104836,104837,104843,104849,104854],{},[27,104838,104839,104840],{},"方块 body 里是否有 ",[196,104841,104842],{},"\u003Cfreejoint\u002F>",[27,104844,104845,104846],{},"重力是否是 ",[196,104847,104848],{},"0 0 -9.81",[27,104850,104851,104852],{},"是否真的调用了 ",[196,104853,102944],{},[27,104855,104856,104857,104859,104860],{},"你看的是否是 ",[196,104858,104602],{},"，不是 ",[196,104861,104862],{},"initial qpos",[14,104864,104866],{"id":104865},"_8本章小结","8.本章小结",[31,104868,104869],{},"本章你已经完成了 MuJoCo 的最小闭环：",[190,104871,104874],{"className":104872,"code":104873,"language":8084,"meta":57},[8082],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[196,104875,104873],{"__ignoreMap":57},[31,104877,104878],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1002,104880,104881],{},"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":57,"searchDepth":36,"depth":36,"links":104883},[104884,104885,104886,104891,104895,104896,104897,104905],{"id":102905,"depth":36,"text":102906},{"id":103028,"depth":36,"text":103029},{"id":103303,"depth":36,"text":103304,"children":104887},[104888,104889,104890],{"id":103341,"depth":73,"text":103342},{"id":103435,"depth":73,"text":103436},{"id":103487,"depth":73,"text":103488},{"id":103511,"depth":36,"text":103512,"children":104892},[104893,104894],{"id":103831,"depth":73,"text":103831},{"id":103967,"depth":73,"text":103967},{"id":104574,"depth":36,"text":104575},{"id":104606,"depth":36,"text":104607},{"id":104711,"depth":36,"text":104712,"children":104898},[104899,104900,104901,104902,104904],{"id":104715,"depth":73,"text":104718},{"id":104738,"depth":73,"text":104739},{"id":104778,"depth":73,"text":104779},{"id":104808,"depth":73,"text":104903},"final time 不是严格等于 1.0",{"id":104831,"depth":73,"text":104831},{"id":104865,"depth":36,"text":104866},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102897,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104912,"title":104913,"body":104914,"description":57,"extension":3024,"meta":106570,"navigation":906,"path":106571,"seo":106572,"stem":106573,"__hash__":106574},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104915,"toc":106546},[104916,104919,104921,104924,104927,104944,105039,105042,105048,105050,105052,105076,105079,105093,105096,105137,105139,105152,105154,105157,105205,105217,105220,105223,105229,105242,105309,105312,105331,105334,105337,105343,105345,105354,105357,105361,105370,105452,105461,105465,105471,105485,105495,105497,105827,105830,105842,105844,105855,105857,105860,105878,105881,105884,105902,105913,105916,105931,105941,105943,105964,105981,106001,106007,106047,106063,106079,106085,106088,106112,106128,106133,106163,106180,106205,106208,106223,106232,106247,106256,106271,106278,106280,106290,106303,106310,106313,106352,106359,106361,106413,106415,106421,106424,106431,106438,106441,106443,106461,106464,106467,106501,106513,106515,106518,106540,106543],[10,104917,104913],{"id":104918},"_2xml-与-mjcf-物理建模基础",[14,104920,102906],{"id":102905},[31,104922,104923],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[31,104925,104926],{},"本章结束后，你应该能看懂一个简单模型里：",[24,104928,104929,104932,104935,104938,104941],{},[27,104930,104931],{},"地面在哪里。",[27,104933,104934],{},"物体初始位置在哪里。",[27,104936,104937],{},"几何体是什么形状。",[27,104939,104940],{},"哪些 body 可以自由运动。",[27,104942,104943],{},"如何用名字在 Python 里找到 XML 中的对象。",[3227,104945,104946,104956],{},[3230,104947,104948],{},[3233,104949,104950,104953],{},[3236,104951,104952],{"align":26580},"标签",[3236,104954,104955],{"align":26580},"作用",[3273,104957,104958,104967,104977,104986,104996,105006,105019,105029],{},[3233,104959,104960,104964],{},[3278,104961,104962],{"align":26580},[196,104963,104796],{},[3278,104965,104966],{"align":26580},"根节点",[3233,104968,104969,104974],{},[3278,104970,104971],{"align":26580},[196,104972,104973],{},"\u003Coption>",[3278,104975,104976],{"align":26580},"仿真参数",[3233,104978,104979,104983],{},[3278,104980,104981],{"align":26580},[196,104982,104804],{},[3278,104984,104985],{"align":26580},"世界中的物体",[3233,104987,104988,104993],{},[3278,104989,104990],{"align":26580},[196,104991,104992],{},"\u003Cbody>",[3278,104994,104995],{"align":26580},"刚体",[3233,104997,104998,105003],{},[3278,104999,105000],{"align":26580},[196,105001,105002],{},"\u003Cgeom>",[3278,105004,105005],{"align":26580},"几何体、碰撞体、可视体",[3233,105007,105008,105016],{},[3278,105009,105010,27822,105013],{"align":26580},[196,105011,105012],{},"\u003Cjoint>",[196,105014,105015],{},"\u003Cfreejoint>",[3278,105017,105018],{"align":26580},"关节",[3233,105020,105021,105026],{},[3278,105022,105023],{"align":26580},[196,105024,105025],{},"\u003Csite>",[3278,105027,105028],{"align":26580},"标记点",[3233,105030,105031,105036],{},[3278,105032,105033],{"align":26580},[196,105034,105035],{},"\u003Cactuator>",[3278,105037,105038],{"align":26580},"控制器",[31,105040,105041],{},"初学时可以先记住：",[190,105043,105046],{"className":105044,"code":105045,"language":8084,"meta":57},[8082],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[196,105047,105045],{"__ignoreMap":57},[14,105049,103029],{"id":103028},[31,105051,103032],{},[190,105053,105055],{"className":26666,"code":105054,"language":26668,"meta":57,"style":57},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[196,105056,105057],{"__ignoreMap":57},[199,105058,105059,105061,105063,105065,105067,105069,105071,105073],{"class":201,"line":202},[199,105060,27420],{"class":878},[199,105062,29158],{"class":898},[199,105064,26678],{"class":898},[199,105066,29243],{"class":1018},[199,105068,104760],{"class":898},[199,105070,103073],{"class":898},[199,105072,104765],{"class":898},[199,105074,105075],{"class":898}," glfw-devel\n",[31,105077,105078],{},"pip:",[190,105080,105081],{"className":26666,"code":103178,"language":26668,"meta":57,"style":57},[196,105082,105083],{"__ignoreMap":57},[199,105084,105085,105087,105089,105091],{"class":201,"line":202},[199,105086,26675],{"class":878},[199,105088,26678],{"class":898},[199,105090,103189],{"class":898},[199,105092,103192],{"class":898},[31,105094,105095],{},"conda:",[190,105097,105099],{"className":26666,"code":105098,"language":26668,"meta":57,"style":57},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[196,105100,105101,105118,105127],{"__ignoreMap":57},[199,105102,105103,105105,105107,105109,105112,105114,105116],{"class":201,"line":202},[199,105104,33173],{"class":878},[199,105106,32019],{"class":898},[199,105108,27959],{"class":1018},[199,105110,105111],{"class":898}," mujoco-xml",[199,105113,103234],{"class":898},[199,105115,103237],{"class":1018},[199,105117,103240],{"class":1018},[199,105119,105120,105122,105124],{"class":201,"line":36},[199,105121,33173],{"class":878},[199,105123,103247],{"class":898},[199,105125,105126],{"class":898}," mujoco-xml\n",[199,105128,105129,105131,105133,105135],{"class":201,"line":73},[199,105130,26675],{"class":878},[199,105132,26678],{"class":898},[199,105134,103189],{"class":898},[199,105136,103192],{"class":898},[31,105138,103263],{},[24,105140,105141,105144,105149],{},[27,105142,105143],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[27,105145,105146,105147,31228],{},"本章使用基础标签，适用于 ",[196,105148,103286],{},[27,105150,105151],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,105153,103304],{"id":103303},[31,105155,105156],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[190,105158,105160],{"className":2763,"code":105159,"language":2765,"meta":57,"style":57},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[196,105161,105162,105176,105184,105189,105197],{"__ignoreMap":57},[199,105163,105164,105166,105168,105170,105172,105174],{"class":201,"line":202},[199,105165,887],{"class":205},[199,105167,103280],{"class":874},[199,105169,104034],{"class":878},[199,105171,895],{"class":205},[199,105173,64938],{"class":898},[199,105175,882],{"class":205},[199,105177,105178,105180,105182],{"class":201,"line":36},[199,105179,1824],{"class":205},[199,105181,104100],{"class":874},[199,105183,882],{"class":205},[199,105185,105186],{"class":201,"line":73},[199,105187,105188],{"class":205},"    ...\n",[199,105190,105191,105193,105195],{"class":201,"line":333},[199,105192,2112],{"class":205},[199,105194,104100],{"class":874},[199,105196,882],{"class":205},[199,105198,105199,105201,105203],{"class":201,"line":227},[199,105200,1414],{"class":205},[199,105202,103280],{"class":874},[199,105204,882],{"class":205},[31,105206,105207,105209,105210,105212,105213,105216],{},[196,105208,1431],{}," 表示刚体。",[196,105211,103379],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[196,105214,105215],{},"joint"," 表示刚体相对父刚体如何运动。",[19,105218,105219],{"id":105219},"层级结构非常重要",[31,105221,105222],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[190,105224,105227],{"className":105225,"code":105226,"language":8084,"meta":57},[8082],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[196,105228,105226],{"__ignoreMap":57},[31,105230,105231,103277,105234,105237,105238,105241],{},[196,105232,105233],{},"red_box_geom",[196,105235,105236],{},"box_center"," 都属于 ",[196,105239,105240],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[190,105243,105245],{"className":2763,"code":105244,"language":2765,"meta":57,"style":57},"\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",[196,105246,105247,105267,105281,105301],{"__ignoreMap":57},[199,105248,105249,105251,105253,105255,105257,105259,105261,105263,105265],{"class":201,"line":202},[199,105250,887],{"class":205},[199,105252,1431],{"class":874},[199,105254,967],{"class":878},[199,105256,895],{"class":205},[199,105258,55750],{"class":898},[199,105260,103365],{"class":878},[199,105262,895],{"class":205},[199,105264,103370],{"class":898},[199,105266,882],{"class":205},[199,105268,105269,105271,105273,105275,105277,105279],{"class":201,"line":36},[199,105270,1824],{"class":205},[199,105272,103879],{"class":874},[199,105274,967],{"class":878},[199,105276,895],{"class":205},[199,105278,104220],{"class":898},[199,105280,103403],{"class":205},[199,105282,105283,105285,105287,105289,105291,105293,105295,105297,105299],{"class":201,"line":73},[199,105284,1824],{"class":205},[199,105286,103379],{"class":874},[199,105288,56083],{"class":878},[199,105290,895],{"class":205},[199,105292,55750],{"class":898},[199,105294,103395],{"class":878},[199,105296,895],{"class":205},[199,105298,103400],{"class":898},[199,105300,103403],{"class":205},[199,105302,105303,105305,105307],{"class":201,"line":333},[199,105304,1414],{"class":205},[199,105306,1431],{"class":874},[199,105308,882],{"class":205},[31,105310,105311],{},"含义:",[24,105313,105314,105320,105325,105328],{},[27,105315,105316,105317,105319],{},"创建名为 ",[196,105318,55973],{}," 的刚体",[27,105321,105322,105323],{},"初始位置在世界坐标 ",[196,105324,103428],{},[27,105326,105327],{},"它有一个自由关节",[27,105329,105330],{},"它有一个盒子几何体",[19,105332,105333],{"id":105333},"坐标怎么理解",[31,105335,105336],{},"MuJoCo 默认使用三维坐标：",[190,105338,105341],{"className":105339,"code":105340,"language":8084,"meta":57},[8082],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[196,105342,105340],{"__ignoreMap":57},[31,105344,2323],{},[190,105346,105348],{"className":2763,"code":105347,"language":2765,"meta":57,"style":57},"pos=\"0 0 1\"\n",[196,105349,105350],{"__ignoreMap":57},[199,105351,105352],{"class":201,"line":202},[199,105353,105347],{"class":205},[31,105355,105356],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[19,105358,105360],{"id":105359},"geom-的-size-怎么理解","geom 的 size 怎么理解",[31,105362,105363,105364,84789,105367,105369],{},"不同 ",[196,105365,105366],{},"type",[196,105368,34338],{}," 含义不同：",[3227,105371,105372,105387],{},[3230,105373,105374],{},[3233,105375,105376,105380,105385],{},[3236,105377,105378],{"align":26580},[196,105379,105366],{},[3236,105381,105382,105384],{"align":26580},[196,105383,34338],{}," 示例",[3236,105386,102959],{"align":26580},[3273,105388,105389,105403,105418,105437],{},[3233,105390,105391,105395,105400],{},[3278,105392,105393],{"align":26580},[196,105394,55973],{},[3278,105396,105397],{"align":26580},[196,105398,105399],{},"size=\"0.1 0.2 0.3\"",[3278,105401,105402],{"align":26580},"x\u002Fy\u002Fz 半边长，不是完整长度",[3233,105404,105405,105410,105415],{},[3278,105406,105407],{"align":26580},[196,105408,105409],{},"sphere",[3278,105411,105412],{"align":26580},[196,105413,105414],{},"size=\"0.1\"",[3278,105416,105417],{"align":26580},"球半径",[3233,105419,105420,105425,105430],{},[3278,105421,105422],{"align":26580},[196,105423,105424],{},"capsule",[3278,105426,105427],{"align":26580},[196,105428,105429],{},"size=\"0.03\"",[3278,105431,105432,105433,105436],{"align":26580},"胶囊半径，长度常用 ",[196,105434,105435],{},"fromto"," 指定",[3233,105438,105439,105444,105449],{},[3278,105440,105441],{"align":26580},[196,105442,105443],{},"plane",[3278,105445,105446],{"align":26580},[196,105447,105448],{},"size=\"3 3 0.1\"",[3278,105450,105451],{"align":26580},"可视平面大小，通常当地面",[31,105453,105454,105455,105457,105458,105460],{},"最容易踩坑的是 box：",[196,105456,104283],{}," 表示边长大约是 ",[196,105459,34879],{},"，因为 MuJoCo 用的是半边长。",[19,105462,105464],{"id":105463},"site-是什么","site 是什么",[31,105466,105467,105470],{},[196,105468,105469],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[24,105472,105473,105476,105479,105482],{},[27,105474,105475],{},"标记机械臂末端。",[27,105477,105478],{},"标记目标位置。",[27,105480,105481],{},"放传感器或相机参考点。",[27,105483,105484],{},"在 Python 中读取某个关键点的世界坐标。",[31,105486,105487,105488,103277,105491,105494],{},"在后面的 Reacher 任务中，",[196,105489,105490],{},"tip",[196,105492,105493],{},"target"," 就会用 site 表示。",[14,105496,103512],{"id":103511},[190,105498,105500],{"className":33221,"code":105499,"language":33223,"meta":57,"style":57},"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",[196,105501,105502,105508,105518,105522,105526,105534,105539,105543,105547,105551,105556,105560,105565,105570,105575,105580,105584,105588,105592,105596,105600,105604,105616,105628,105636,105640,105655,105670,105674,105687,105702,105715,105728,105732,105748,105752,105756,105767,105779,105791,105803,105807,105811,105823],{"__ignoreMap":57},[199,105503,105504,105506],{"class":201,"line":202},[199,105505,33235],{"class":1086},[199,105507,103560],{"class":205},[199,105509,105510,105512,105514,105516],{"class":201,"line":36},[199,105511,33235],{"class":1086},[199,105513,34222],{"class":205},[199,105515,34225],{"class":1086},[199,105517,34228],{"class":205},[199,105519,105520],{"class":201,"line":73},[199,105521,907],{"emptyLinePlaceholder":906},[199,105523,105524],{"class":201,"line":333},[199,105525,907],{"emptyLinePlaceholder":906},[199,105527,105528,105530,105532],{"class":201,"line":227},[199,105529,103573],{"class":1018},[199,105531,16425],{"class":1086},[199,105533,103578],{"class":898},[199,105535,105536],{"class":201,"line":238},[199,105537,105538],{"class":898},"\u003Cmujoco model=\"xml_basic\">\n",[199,105540,105541],{"class":201,"line":252},[199,105542,103588],{"class":898},[199,105544,105545],{"class":201,"line":388},[199,105546,907],{"emptyLinePlaceholder":906},[199,105548,105549],{"class":201,"line":415},[199,105550,103597],{"class":898},[199,105552,105553],{"class":201,"line":426},[199,105554,105555],{"class":898},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[199,105557,105558],{"class":201,"line":1015},[199,105559,907],{"emptyLinePlaceholder":906},[199,105561,105562],{"class":201,"line":1031},[199,105563,105564],{"class":898},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[199,105566,105567],{"class":201,"line":1043},[199,105568,105569],{"class":898},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[199,105571,105572],{"class":201,"line":1049},[199,105573,105574],{"class":898},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[199,105576,105577],{"class":201,"line":1054},[199,105578,105579],{"class":898},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[199,105581,105582],{"class":201,"line":1062},[199,105583,103626],{"class":898},[199,105585,105586],{"class":201,"line":1075},[199,105587,103631],{"class":898},[199,105589,105590],{"class":201,"line":1092},[199,105591,103636],{"class":898},[199,105593,105594],{"class":201,"line":1107},[199,105595,97957],{"class":898},[199,105597,105598],{"class":201,"line":1128},[199,105599,907],{"emptyLinePlaceholder":906},[199,105601,105602],{"class":201,"line":1146},[199,105603,907],{"emptyLinePlaceholder":906},[199,105605,105606,105608,105610,105612,105614],{"class":201,"line":1163},[199,105607,34789],{"class":1086},[199,105609,4889],{"class":878},[199,105611,103657],{"class":205},[199,105613,97945],{"class":1018},[199,105615,6640],{"class":205},[199,105617,105618,105620,105622,105624,105626],{"class":201,"line":1176},[199,105619,103666],{"class":205},[199,105621,895],{"class":1086},[199,105623,103671],{"class":205},[199,105625,103573],{"class":1018},[199,105627,1594],{"class":205},[199,105629,105630,105632,105634],{"class":201,"line":1189},[199,105631,103680],{"class":205},[199,105633,895],{"class":1086},[199,105635,103685],{"class":205},[199,105637,105638],{"class":201,"line":1202},[199,105639,907],{"emptyLinePlaceholder":906},[199,105641,105642,105645,105647,105650,105653],{"class":201,"line":1207},[199,105643,105644],{"class":205},"    box_body_id ",[199,105646,895],{"class":1086},[199,105648,105649],{"class":205}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[199,105651,105652],{"class":898},"\"red_box\"",[199,105654,1594],{"class":205},[199,105656,105657,105660,105662,105665,105668],{"class":201,"line":1212},[199,105658,105659],{"class":205},"    site_id ",[199,105661,895],{"class":1086},[199,105663,105664],{"class":205}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[199,105666,105667],{"class":898},"\"box_center\"",[199,105669,1594],{"class":205},[199,105671,105672],{"class":201,"line":1225},[199,105673,907],{"emptyLinePlaceholder":906},[199,105675,105676,105678,105681,105683,105685],{"class":201,"line":1236},[199,105677,6005],{"class":1086},[199,105679,105680],{"class":205}," box_body_id ",[199,105682,887],{"class":1086},[199,105684,1621],{"class":1018},[199,105686,6640],{"class":205},[199,105688,105689,105692,105695,105697,105700],{"class":201,"line":1249},[199,105690,105691],{"class":1086},"        raise",[199,105693,105694],{"class":1018}," RuntimeError",[199,105696,1537],{"class":205},[199,105698,105699],{"class":898},"\"body red_box not found\"",[199,105701,1594],{"class":205},[199,105703,105704,105706,105709,105711,105713],{"class":201,"line":1262},[199,105705,6005],{"class":1086},[199,105707,105708],{"class":205}," site_id ",[199,105710,887],{"class":1086},[199,105712,1621],{"class":1018},[199,105714,6640],{"class":205},[199,105716,105717,105719,105721,105723,105726],{"class":201,"line":1275},[199,105718,105691],{"class":1086},[199,105720,105694],{"class":1018},[199,105722,1537],{"class":205},[199,105724,105725],{"class":898},"\"site box_center not found\"",[199,105727,1594],{"class":205},[199,105729,105730],{"class":201,"line":1287},[199,105731,907],{"emptyLinePlaceholder":906},[199,105733,105734,105736,105738,105740,105742,105744,105746],{"class":201,"line":1292},[199,105735,1937],{"class":1086},[199,105737,103760],{"class":205},[199,105739,28886],{"class":1086},[199,105741,35285],{"class":1018},[199,105743,1537],{"class":205},[199,105745,4647],{"class":1018},[199,105747,33628],{"class":205},[199,105749,105750],{"class":201,"line":1297},[199,105751,103775],{"class":205},[199,105753,105754],{"class":201,"line":1310},[199,105755,907],{"emptyLinePlaceholder":906},[199,105757,105758,105760,105762,105765],{"class":201,"line":1315},[199,105759,34141],{"class":1018},[199,105761,1537],{"class":205},[199,105763,105764],{"class":898},"\"simulation time:\"",[199,105766,103737],{"class":205},[199,105768,105769,105771,105773,105776],{"class":201,"line":1330},[199,105770,34141],{"class":1018},[199,105772,1537],{"class":205},[199,105774,105775],{"class":898},"\"box body position:\"",[199,105777,105778],{"class":205},", data.xpos[box_body_id].copy())\n",[199,105780,105781,105783,105785,105788],{"class":201,"line":1335},[199,105782,34141],{"class":1018},[199,105784,1537],{"class":205},[199,105786,105787],{"class":898},"\"site position:\"",[199,105789,105790],{"class":205},", data.site_xpos[site_id].copy())\n",[199,105792,105793,105795,105797,105800],{"class":201,"line":1340},[199,105794,34141],{"class":1018},[199,105796,1537],{"class":205},[199,105798,105799],{"class":898},"\"box qpos:\"",[199,105801,105802],{"class":205},", np.array(data.qpos))\n",[199,105804,105805],{"class":201,"line":1352},[199,105806,907],{"emptyLinePlaceholder":906},[199,105808,105809],{"class":201,"line":1367},[199,105810,907],{"emptyLinePlaceholder":906},[199,105812,105813,105815,105817,105819,105821],{"class":201,"line":1381},[199,105814,4470],{"class":1086},[199,105816,34062],{"class":1018},[199,105818,103818],{"class":1086},[199,105820,103821],{"class":898},[199,105822,6640],{"class":205},[199,105824,105825],{"class":201,"line":1396},[199,105826,103828],{"class":205},[31,105828,105829],{},"保存为：",[190,105831,105833],{"className":26666,"code":105832,"language":26668,"meta":57,"style":57},"touch ch2_xml_basic.py\n",[196,105834,105835],{"__ignoreMap":57},[199,105836,105837,105839],{"class":201,"line":202},[199,105838,103542],{"class":878},[199,105840,105841],{"class":898}," ch2_xml_basic.py\n",[31,105843,104560],{},[190,105845,105847],{"className":26666,"code":105846,"language":26668,"meta":57,"style":57},"python ch2_xml_basic.py\n",[196,105848,105849],{"__ignoreMap":57},[199,105850,105851,105853],{"class":201,"line":202},[199,105852,33223],{"class":878},[199,105854,105841],{"class":898},[19,105856,103831],{"id":103831},[31,105858,105859],{},"用名字查找 body：",[190,105861,105863],{"className":33221,"code":105862,"language":33223,"meta":57,"style":57},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[196,105864,105865],{"__ignoreMap":57},[199,105866,105867,105870,105872,105874,105876],{"class":201,"line":202},[199,105868,105869],{"class":205},"box_body_id ",[199,105871,895],{"class":1086},[199,105873,105649],{"class":205},[199,105875,105652],{"class":898},[199,105877,1594],{"class":205},[31,105879,105880],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[31,105882,105883],{},"用名字查找 site：",[190,105885,105887],{"className":33221,"code":105886,"language":33223,"meta":57,"style":57},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[196,105888,105889],{"__ignoreMap":57},[199,105890,105891,105894,105896,105898,105900],{"class":201,"line":202},[199,105892,105893],{"class":205},"site_id ",[199,105895,895],{"class":1086},[199,105897,105664],{"class":205},[199,105899,105667],{"class":898},[199,105901,1594],{"class":205},[31,105903,105904,105905,105908,105909,105912],{},"注意第二个参数是对象类型。查 body 就用 ",[196,105906,105907],{},"mjOBJ_BODY","，查 site 就用 ",[196,105910,105911],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[31,105914,105915],{},"读取世界坐标：",[190,105917,105919],{"className":33221,"code":105918,"language":33223,"meta":57,"style":57},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[196,105920,105921,105926],{"__ignoreMap":57},[199,105922,105923],{"class":201,"line":202},[199,105924,105925],{"class":205},"data.xpos[box_body_id]\n",[199,105927,105928],{"class":201,"line":36},[199,105929,105930],{"class":205},"data.site_xpos[site_id]\n",[31,105932,105933,105936,105937,105940],{},[196,105934,105935],{},"xpos"," 是 body 的世界坐标，",[196,105938,105939],{},"site_xpos"," 是 site 的世界坐标。",[19,105942,103967],{"id":103967},[190,105944,105946],{"className":33221,"code":105945,"language":33223,"meta":57,"style":57},"import mujoco\nimport numpy as np\n",[196,105947,105948,105954],{"__ignoreMap":57},[199,105949,105950,105952],{"class":201,"line":202},[199,105951,33235],{"class":1086},[199,105953,103560],{"class":205},[199,105955,105956,105958,105960,105962],{"class":201,"line":36},[199,105957,33235],{"class":1086},[199,105959,34222],{"class":205},[199,105961,34225],{"class":1086},[199,105963,34228],{"class":205},[31,105965,105966,105967,105970,105971,105974,105975,3300,105978,31228],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[196,105968,105969],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[196,105972,105973],{},"as np"," 是习惯写法，后面就可以写 ",[196,105976,105977],{},"np.array(...)",[196,105979,105980],{},"np.round(...)",[190,105982,105983],{"className":33221,"code":103854,"language":33223,"meta":57,"style":57},[196,105984,105985,105993,105997],{"__ignoreMap":57},[199,105986,105987,105989,105991],{"class":201,"line":202},[199,105988,103573],{"class":1018},[199,105990,16425],{"class":1086},[199,105992,103578],{"class":898},[199,105994,105995],{"class":201,"line":36},[199,105996,103869],{"class":898},[199,105998,105999],{"class":201,"line":73},[199,106000,97957],{"class":898},[31,106002,106003,106004,31228],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[196,106005,106006],{},"mujoco.MjModel.from_xml_string(XML)",[190,106008,106010],{"className":2763,"code":106009,"language":2765,"meta":57,"style":57},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[196,106011,106012],{"__ignoreMap":57},[199,106013,106014,106016,106018,106020,106022,106024,106026,106028,106031,106033,106035,106038,106040,106042,106045],{"class":201,"line":202},[199,106015,887],{"class":205},[199,106017,105469],{"class":874},[199,106019,967],{"class":878},[199,106021,895],{"class":205},[199,106023,105667],{"class":898},[199,106025,103365],{"class":878},[199,106027,895],{"class":205},[199,106029,106030],{"class":898},"\"0 0 0\"",[199,106032,103395],{"class":878},[199,106034,895],{"class":205},[199,106036,106037],{"class":898},"\"0.03\"",[199,106039,81026],{"class":878},[199,106041,895],{"class":205},[199,106043,106044],{"class":898},"\"0 1 0 1\"",[199,106046,103403],{"class":205},[31,106048,106049,106051,106052,106055,106056,106058,106059,106062],{},[196,106050,105469],{}," 是标记点。",[196,106053,106054],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[196,106057,105429],{}," 表示显示出来的小球大小。",[196,106060,106061],{},"rgba=\"0 1 0 1\""," 表示绿色。",[190,106064,106065],{"className":33221,"code":105862,"language":33223,"meta":57,"style":57},[196,106066,106067],{"__ignoreMap":57},[199,106068,106069,106071,106073,106075,106077],{"class":201,"line":202},[199,106070,105869],{"class":205},[199,106072,895],{"class":1086},[199,106074,105649],{"class":205},[199,106076,105652],{"class":898},[199,106078,1594],{"class":205},[31,106080,106081,106082,106084],{},"这行的作用是：根据名字 ",[196,106083,105652],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[31,106086,106087],{},"拆开看：",[24,106089,106090,106096,106101,106107],{},[27,106091,106092,106095],{},[196,106093,106094],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[27,106097,106098,106100],{},[196,106099,104344],{}," 是被查询的模型。",[27,106102,106103,106106],{},[196,106104,106105],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[27,106108,106109,106111],{},[196,106110,105652],{}," 是 XML 里写的名字。",[190,106113,106114],{"className":33221,"code":105886,"language":33223,"meta":57,"style":57},[196,106115,106116],{"__ignoreMap":57},[199,106117,106118,106120,106122,106124,106126],{"class":201,"line":202},[199,106119,105893],{"class":205},[199,106121,895],{"class":1086},[199,106123,105664],{"class":205},[199,106125,105667],{"class":898},[199,106127,1594],{"class":205},[31,106129,106130,106131,31228],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[196,106132,105667],{},[190,106134,106136],{"className":33221,"code":106135,"language":33223,"meta":57,"style":57},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[196,106137,106138,106150],{"__ignoreMap":57},[199,106139,106140,106142,106144,106146,106148],{"class":201,"line":202},[199,106141,4470],{"class":1086},[199,106143,105680],{"class":205},[199,106145,887],{"class":1086},[199,106147,1621],{"class":1018},[199,106149,6640],{"class":205},[199,106151,106152,106155,106157,106159,106161],{"class":201,"line":36},[199,106153,106154],{"class":1086},"    raise",[199,106156,105694],{"class":1018},[199,106158,1537],{"class":205},[199,106160,105699],{"class":898},[199,106162,1594],{"class":205},[31,106164,106165,106167,106168,106171,106172,106175,106176,106179],{},[196,106166,4470],{}," 是条件判断。",[196,106169,106170],{},"mj_name2id"," 找不到对象时会返回 ",[196,106173,106174],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[196,106177,106178],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[190,106181,106183],{"className":33221,"code":106182,"language":33223,"meta":57,"style":57},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[196,106184,106185,106201],{"__ignoreMap":57},[199,106186,106187,106189,106191,106193,106195,106197,106199],{"class":201,"line":202},[199,106188,5929],{"class":1086},[199,106190,103760],{"class":205},[199,106192,28886],{"class":1086},[199,106194,35285],{"class":1018},[199,106196,1537],{"class":205},[199,106198,4647],{"class":1018},[199,106200,33628],{"class":205},[199,106202,106203],{"class":201,"line":36},[199,106204,103958],{"class":205},[31,106206,106207],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[190,106209,106211],{"className":33221,"code":106210,"language":33223,"meta":57,"style":57},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[196,106212,106213],{"__ignoreMap":57},[199,106214,106215,106217,106219,106221],{"class":201,"line":202},[199,106216,33258],{"class":1018},[199,106218,1537],{"class":205},[199,106220,105775],{"class":898},[199,106222,105778],{"class":205},[31,106224,106225,106227,106228,106231],{},[196,106226,103338],{}," 保存所有 body 的世界坐标。",[196,106229,106230],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[190,106233,106235],{"className":33221,"code":106234,"language":33223,"meta":57,"style":57},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[196,106236,106237],{"__ignoreMap":57},[199,106238,106239,106241,106243,106245],{"class":201,"line":202},[199,106240,33258],{"class":1018},[199,106242,1537],{"class":205},[199,106244,105787],{"class":898},[199,106246,105790],{"class":205},[31,106248,106249,106252,106253,106255],{},[196,106250,106251],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[196,106254,105236],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[190,106257,106259],{"className":33221,"code":106258,"language":33223,"meta":57,"style":57},"print(\"box qpos:\", np.array(data.qpos))\n",[196,106260,106261],{"__ignoreMap":57},[199,106262,106263,106265,106267,106269],{"class":201,"line":202},[199,106264,33258],{"class":1018},[199,106266,1537],{"class":205},[199,106268,105799],{"class":898},[199,106270,105802],{"class":205},[31,106272,106273,106274,106277],{},"这里打印广义位置数组。",[196,106275,106276],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106279,104575],{"id":104574},[31,106281,106282,106283,106286,106287,31228],{},"程序会输出 ",[196,106284,106285],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[196,106288,106289],{},"qpos",[31,106291,106292,106294,106295,106298,106299,106302],{},[196,106293,106230],{}," 是 body 的世界坐标位置。",[196,106296,106297],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[196,106300,106301],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[31,106304,84481,106305,84789,106307,106309],{},[196,106306,105236],{},[196,106308,106054],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[31,106311,106312],{},"如果你把 site 改成：",[190,106314,106316],{"className":2763,"code":106315,"language":2765,"meta":57,"style":57},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[196,106317,106318],{"__ignoreMap":57},[199,106319,106320,106322,106324,106326,106328,106331,106333,106335,106338,106340,106342,106344,106346,106348,106350],{"class":201,"line":202},[199,106321,887],{"class":205},[199,106323,105469],{"class":874},[199,106325,967],{"class":878},[199,106327,895],{"class":205},[199,106329,106330],{"class":898},"\"box_top\"",[199,106332,103365],{"class":878},[199,106334,895],{"class":205},[199,106336,106337],{"class":898},"\"0 0 0.15\"",[199,106339,103395],{"class":878},[199,106341,895],{"class":205},[199,106343,106037],{"class":898},[199,106345,81026],{"class":878},[199,106347,895],{"class":205},[199,106349,106044],{"class":898},[199,106351,103403],{"class":205},[31,106353,106354,106355,106358],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[196,106356,106357],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106360,104607],{"id":104606},[24,106362,106363,106372,106375,106382,106388,106399],{},[27,106364,104670,106365,106367,106368,104673,106370,31228],{},[196,106366,105240],{}," 的初始高度从 ",[196,106369,1115],{},[196,106371,1925],{},[27,106373,106374],{},"重新运行程序。",[27,106376,106377,106378,106381],{},"观察 ",[196,106379,106380],{},"box qpos"," 和最终位置是否变化。",[27,106383,106384,106385,106387],{},"故意把 ",[196,106386,105469],{}," 名称改错，确认程序能报错。",[27,106389,104670,106390,106392,106393,104673,106395,106398],{},[196,106391,103379],{}," 的颜色 ",[196,106394,104291],{},[196,106396,106397],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[27,106400,104670,106401,84789,106403,104673,106406,106409,106410,106412],{},[196,106402,105236],{},[196,106404,106405],{},"pos",[196,106407,106408],{},"0 0 0.2","，观察 ",[196,106411,106357],{}," 如何变化。",[14,106414,104712],{"id":104711},[19,106416,106418],{"id":106417},"xml-error-schema-violation",[196,106419,106420],{},"XML Error: Schema violation",[31,106422,106423],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[19,106425,106427,83549,106429],{"id":106426},"mj_name2id-返回-1",[196,106428,106170],{},[196,106430,106174],{},[31,106432,106433,106434,106437],{},"说明名字没有找到。检查 XML 中 ",[196,106435,106436],{},"name=\"...\"","，并确认对象类型正确。",[19,106439,106440],{"id":106440},"物体不下落",[31,106442,104782],{},[24,106444,106445,106450,106455],{},[27,106446,106447,106448],{},"body 是否有 ",[196,106449,103879],{},[27,106451,106452,106453],{},"gravity 是否为 ",[196,106454,104848],{},[27,106456,106457,106458,106460],{},"body 是否被固定在 ",[196,106459,104100],{}," 中",[19,106462,106463],{"id":106463},"坐标看起来不符合预期",[31,106465,106466],{},"先区分两种坐标：",[3227,106468,106469,106478],{},[3230,106470,106471],{},[3233,106472,106473,106476],{},[3236,106474,106475],{"align":26580},"坐标",[3236,106477,102959],{"align":26580},[3273,106479,106480,106490],{},[3233,106481,106482,106487],{},[3278,106483,106484,106485],{"align":26580},"XML 里的 ",[196,106486,106405],{},[3278,106488,106489],{"align":26580},"相对父 body 的局部坐标",[3233,106491,106492,106498],{},[3278,106493,106494,27822,106496],{"align":26580},[196,106495,103338],{},[196,106497,106251],{},[3278,106499,106500],{"align":26580},"仿真更新后的世界坐标",[31,106502,106503,106504,106506,106507,84798,106510,106512],{},"如果你修改了 ",[196,106505,103329],{},"，但还没调用 ",[196,106508,106509],{},"mj_forward",[196,106511,103474],{},"，世界坐标可能还没有更新。",[14,106514,104866],{"id":104865},[31,106516,106517],{},"MJCF 建模先掌握四件事：",[24,106519,106520,106525,106530,106535],{},[27,106521,106522,106524],{},[196,106523,1431],{}," 表示刚体层级。",[27,106526,106527,106529],{},[196,106528,103379],{}," 表示形状、碰撞和质量。",[27,106531,106532,106534],{},[196,106533,105215],{}," 决定 body 能不能动、怎么动。",[27,106536,106537,106539],{},[196,106538,105469],{}," 用来标记关键点，方便 Python 读取位置。",[31,106541,106542],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1002,106544,106545],{},"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":57,"searchDepth":36,"depth":36,"links":106547},[106548,106549,106550,106556,106560,106561,106562,106569],{"id":102905,"depth":36,"text":102906},{"id":103028,"depth":36,"text":103029},{"id":103303,"depth":36,"text":103304,"children":106551},[106552,106553,106554,106555],{"id":105219,"depth":73,"text":105219},{"id":105333,"depth":73,"text":105333},{"id":105359,"depth":73,"text":105360},{"id":105463,"depth":73,"text":105464},{"id":103511,"depth":36,"text":103512,"children":106557},[106558,106559],{"id":103831,"depth":73,"text":103831},{"id":103967,"depth":73,"text":103967},{"id":104574,"depth":36,"text":104575},{"id":104606,"depth":36,"text":104607},{"id":104711,"depth":36,"text":104712,"children":106563},[106564,106565,106567,106568],{"id":106417,"depth":73,"text":106420},{"id":106426,"depth":73,"text":106566},"mj_name2id 返回 -1",{"id":106440,"depth":73,"text":106440},{"id":106463,"depth":73,"text":106463},{"id":104865,"depth":36,"text":104866},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104913,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106576,"title":106577,"body":106578,"description":57,"extension":3024,"meta":108073,"navigation":906,"path":108074,"seo":108075,"stem":108076,"__hash__":108077},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106579,"toc":108045},[106580,106583,106585,106588,106591,106629,106632,106638,106641,106643,106645,106672,106674,106688,106690,106731,106733,106757,106759,106762,106771,106780,106783,106792,106800,106809,106812,106822,106825,106877,106884,106890,106898,106946,106949,106968,106971,106979,106983,106992,107025,107027,107375,107377,107389,107391,107402,107404,107407,107428,107434,107437,107462,107472,107475,107483,107486,107489,107510,107521,107523,107543,107546,107567,107576,107595,107601,107626,107629,107643,107650,107674,107677,107685,107694,107710,107722,107730,107739,107741,107744,107768,107773,107776,107798,107800,107839,107841,107848,107850,107858,107861,107864,107876,107917,107924,107935,107942,107945,107994,107997,108000,108006,108008,108013,108039,108042],[10,106581,106577],{"id":106582},"_3python-控制接口读取状态与推进仿真",[14,106584,102906],{"id":102905},[31,106586,106587],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[31,106589,106590],{},"你将学习:",[24,106592,106593,106598,106603,106607,106612,106623],{},[27,106594,106595],{},[196,106596,106597],{},"MjModel.from_xml_string",[27,106599,106600],{},[196,106601,106602],{},"MjData(model)",[27,106604,106605],{},[196,106606,103474],{},[27,106608,106609],{},[196,106610,106611],{},"mj_resetData",[27,106613,106614,106615,3300,106617,3300,106620],{},"读取 ",[196,106616,106289],{},[196,106618,106619],{},"qvel",[196,106621,106622],{},"ctrl",[27,106624,106625,106626],{},"使用 ",[196,106627,106628],{},"model.opt.timestep",[31,106630,106631],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[190,106633,106636],{"className":106634,"code":106635,"language":8084,"meta":57},[8082],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[196,106637,106635],{"__ignoreMap":57},[31,106639,106640],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106642,103029],{"id":103028},[31,106644,103032],{},[190,106646,106648],{"className":26666,"code":106647,"language":26668,"meta":57,"style":57},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[196,106649,106650],{"__ignoreMap":57},[199,106651,106652,106654,106656,106658,106660,106663,106665,106667,106669],{"class":201,"line":202},[199,106653,27420],{"class":878},[199,106655,29158],{"class":898},[199,106657,26678],{"class":898},[199,106659,29243],{"class":1018},[199,106661,106662],{"class":898}," python3",[199,106664,103057],{"class":898},[199,106666,104760],{"class":898},[199,106668,103073],{"class":898},[199,106670,106671],{"class":898}," glfw\n",[31,106673,105078],{},[190,106675,106676],{"className":26666,"code":103178,"language":26668,"meta":57,"style":57},[196,106677,106678],{"__ignoreMap":57},[199,106679,106680,106682,106684,106686],{"class":201,"line":202},[199,106681,26675],{"class":878},[199,106683,26678],{"class":898},[199,106685,103189],{"class":898},[199,106687,103192],{"class":898},[31,106689,105095],{},[190,106691,106693],{"className":26666,"code":106692,"language":26668,"meta":57,"style":57},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[196,106694,106695,106712,106721],{"__ignoreMap":57},[199,106696,106697,106699,106701,106703,106706,106708,106710],{"class":201,"line":202},[199,106698,33173],{"class":878},[199,106700,32019],{"class":898},[199,106702,27959],{"class":1018},[199,106704,106705],{"class":898}," mujoco-python-api",[199,106707,103234],{"class":898},[199,106709,103237],{"class":1018},[199,106711,103240],{"class":1018},[199,106713,106714,106716,106718],{"class":201,"line":36},[199,106715,33173],{"class":878},[199,106717,103247],{"class":898},[199,106719,106720],{"class":898}," mujoco-python-api\n",[199,106722,106723,106725,106727,106729],{"class":201,"line":73},[199,106724,26675],{"class":878},[199,106726,26678],{"class":898},[199,106728,103189],{"class":898},[199,106730,103192],{"class":898},[31,106732,103263],{},[24,106734,106735,106742,106751],{},[27,106736,106737,103277,106739,106741],{},[196,106738,102934],{},[196,106740,102939],{}," 是官方 Python bindings 的类名。",[27,106743,106744,106745,106748,106749,31228],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[196,106746,106747],{},"mjModel"," 在 Python 中是 ",[196,106750,102968],{},[27,106752,106753,106754,31228],{},"不要使用 ",[196,106755,106756],{},"sim = mujoco_py.MjSim(...)",[14,106758,103304],{"id":103303},[31,106760,106761],{},"仿真推进核心代码:",[190,106763,106765],{"className":33221,"code":106764,"language":33223,"meta":57,"style":57},"mujoco.mj_step(model, data)\n",[196,106766,106767],{"__ignoreMap":57},[199,106768,106769],{"class":201,"line":202},[199,106770,106764],{"class":205},[31,106772,106773,106774,3300,106776,3300,106778,31228],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[196,106775,103329],{},[196,106777,103332],{},[196,106779,103326],{},[31,106781,106782],{},"重置仿真:",[190,106784,106786],{"className":33221,"code":106785,"language":33223,"meta":57,"style":57},"mujoco.mj_resetData(model, data)\n",[196,106787,106788],{"__ignoreMap":57},[199,106789,106790],{"class":201,"line":202},[199,106791,106785],{"class":205},[31,106793,106794,106795,84798,106797,106799],{},"如果手动修改了 ",[196,106796,103329],{},[196,106798,103332],{},"，通常应调用:",[190,106801,106803],{"className":33221,"code":106802,"language":33223,"meta":57,"style":57},"mujoco.mj_forward(model, data)\n",[196,106804,106805],{"__ignoreMap":57},[199,106806,106807],{"class":201,"line":202},[199,106808,106802],{"class":205},[31,106810,106811],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[19,106813,106815,3300,106817,3300,106819,106821],{"id":106814},"qposqvelctrl-是什么",[196,106816,106289],{},[196,106818,106619],{},[196,106820,106622],{}," 是什么",[31,106823,106824],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[3227,106826,106827,106839],{},[3230,106828,106829],{},[3233,106830,106831,106834,106836],{},[3236,106832,106833],{"align":26580},"字段",[3236,106835,102959],{"align":26580},[3236,106837,106838],{"align":26580},"谁来修改",[3273,106840,106841,106853,106865],{},[3233,106842,106843,106847,106850],{},[3278,106844,106845],{"align":26580},[196,106846,103329],{},[3278,106848,106849],{"align":26580},"广义位置，例如小车位置、关节角、自由物体位置姿态",[3278,106851,106852],{"align":26580},"MuJoCo 更新，也可以手动设置初始状态",[3233,106854,106855,106859,106862],{},[3278,106856,106857],{"align":26580},[196,106858,103332],{},[3278,106860,106861],{"align":26580},"广义速度，例如小车速度、关节角速度",[3278,106863,106864],{"align":26580},"MuJoCo 更新，也可以手动清零",[3233,106866,106867,106871,106874],{},[3278,106868,106869],{"align":26580},[196,106870,103335],{},[3278,106872,106873],{"align":26580},"actuator 的控制输入",[3278,106875,106876],{"align":26580},"主要由你的控制代码写入",[31,106878,11912,106879,103277,106881,106883],{},[196,106880,106289],{},[196,106882,106619],{}," 不一定同维。自由刚体就是典型例子：",[190,106885,106888],{"className":106886,"code":106887,"language":8084,"meta":57},[8082],"freejoint: qpos 7 维，qvel 6 维\n",[196,106889,106887],{"__ignoreMap":57},[19,106891,106893,103277,106895,106897],{"id":106892},"mj_step-和-mj_forward-的区别",[196,106894,103474],{},[196,106896,106509],{}," 的区别",[3227,106899,106900,106913],{},[3230,106901,106902],{},[3233,106903,106904,106907,106910],{},[3236,106905,106906],{"align":26580},"函数",[3236,106908,106909],{"align":26580},"是否推进时间",[3236,106911,106912],{"align":26580},"什么时候用",[3273,106914,106915,106928],{},[3233,106916,106917,106922,106925],{},[3278,106918,106919],{"align":26580},[196,106920,106921],{},"mj_step(model, data)",[3278,106923,106924],{"align":26580},"是",[3278,106926,106927],{"align":26580},"正常仿真循环，每调用一次前进一步",[3233,106929,106930,106935,106938],{},[3278,106931,106932],{"align":26580},[196,106933,106934],{},"mj_forward(model, data)",[3278,106936,106937],{"align":26580},"否",[3278,106939,106940,106941,3300,106943,106945],{"align":26580},"手动改了 ",[196,106942,106289],{},[196,106944,106619],{}," 后，刷新派生量",[31,106947,106948],{},"例如你写：",[190,106950,106952],{"className":33221,"code":106951,"language":33223,"meta":57,"style":57},"data.qpos[2] = 2.0\n",[196,106953,106954],{"__ignoreMap":57},[199,106955,106956,106959,106961,106963,106965],{"class":201,"line":202},[199,106957,106958],{"class":205},"data.qpos[",[199,106960,1925],{"class":1018},[199,106962,2078],{"class":205},[199,106964,895],{"class":1086},[199,106966,106967],{"class":1018}," 2.0\n",[31,106969,106970],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[190,106972,106973],{"className":33221,"code":106802,"language":33223,"meta":57,"style":57},[196,106974,106975],{"__ignoreMap":57},[199,106976,106977],{"class":201,"line":202},[199,106978,106802],{"class":205},[19,106980,106982],{"id":106981},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[31,106984,106985,106988,106989,106991],{},[196,106986,106987],{},"mujoco.mj_resetData(model, data)"," 会把 ",[196,106990,36242],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[190,106993,106995],{"className":33221,"code":106994,"language":33223,"meta":57,"style":57},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[196,106996,106997,107001,107011,107021],{"__ignoreMap":57},[199,106998,106999],{"class":201,"line":202},[199,107000,106785],{"class":205},[199,107002,107003,107006,107008],{"class":201,"line":36},[199,107004,107005],{"class":205},"data.qpos[:] ",[199,107007,895],{"class":1086},[199,107009,107010],{"class":205}," random_qpos\n",[199,107012,107013,107016,107018],{"class":201,"line":73},[199,107014,107015],{"class":205},"data.qvel[:] ",[199,107017,895],{"class":1086},[199,107019,107020],{"class":1018}," 0.0\n",[199,107022,107023],{"class":201,"line":333},[199,107024,106802],{"class":205},[14,107026,103512],{"id":103511},[190,107028,107030],{"className":33221,"code":107029,"language":33223,"meta":57,"style":57},"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",[196,107031,107032,107038,107048,107052,107056,107064,107069,107073,107077,107081,107086,107090,107095,107100,107105,107109,107113,107117,107121,107125,107129,107148,107155,107167,107178,107194,107210,107214,107218,107230,107242,107250,107254,107265,107269,107285,107289,107293,107302,107306,107311,107320,107324,107337,107342,107351,107355,107359,107371],{"__ignoreMap":57},[199,107033,107034,107036],{"class":201,"line":202},[199,107035,33235],{"class":1086},[199,107037,103560],{"class":205},[199,107039,107040,107042,107044,107046],{"class":201,"line":36},[199,107041,33235],{"class":1086},[199,107043,34222],{"class":205},[199,107045,34225],{"class":1086},[199,107047,34228],{"class":205},[199,107049,107050],{"class":201,"line":73},[199,107051,907],{"emptyLinePlaceholder":906},[199,107053,107054],{"class":201,"line":333},[199,107055,907],{"emptyLinePlaceholder":906},[199,107057,107058,107060,107062],{"class":201,"line":227},[199,107059,103573],{"class":1018},[199,107061,16425],{"class":1086},[199,107063,103578],{"class":898},[199,107065,107066],{"class":201,"line":238},[199,107067,107068],{"class":898},"\u003Cmujoco model=\"state_api\">\n",[199,107070,107071],{"class":201,"line":252},[199,107072,103588],{"class":898},[199,107074,107075],{"class":201,"line":388},[199,107076,907],{"emptyLinePlaceholder":906},[199,107078,107079],{"class":201,"line":415},[199,107080,103597],{"class":898},[199,107082,107083],{"class":201,"line":426},[199,107084,107085],{"class":898},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[199,107087,107088],{"class":201,"line":1015},[199,107089,907],{"emptyLinePlaceholder":906},[199,107091,107092],{"class":201,"line":1031},[199,107093,107094],{"class":898},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[199,107096,107097],{"class":201,"line":1043},[199,107098,107099],{"class":898},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[199,107101,107102],{"class":201,"line":1049},[199,107103,107104],{"class":898},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[199,107106,107107],{"class":201,"line":1054},[199,107108,103626],{"class":898},[199,107110,107111],{"class":201,"line":1062},[199,107112,103631],{"class":898},[199,107114,107115],{"class":201,"line":1075},[199,107116,103636],{"class":898},[199,107118,107119],{"class":201,"line":1092},[199,107120,97957],{"class":898},[199,107122,107123],{"class":201,"line":1107},[199,107124,907],{"emptyLinePlaceholder":906},[199,107126,107127],{"class":201,"line":1128},[199,107128,907],{"emptyLinePlaceholder":906},[199,107130,107131,107133,107136,107139,107141,107144,107146],{"class":201,"line":1146},[199,107132,34789],{"class":1086},[199,107134,107135],{"class":878}," print_state",[199,107137,107138],{"class":205},"(prefix: ",[199,107140,4242],{"class":1018},[199,107142,107143],{"class":205},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[199,107145,97945],{"class":1018},[199,107147,6640],{"class":205},[199,107149,107150,107152],{"class":201,"line":1163},[199,107151,34141],{"class":1018},[199,107153,107154],{"class":205},"(prefix)\n",[199,107156,107157,107159,107161,107164],{"class":201,"line":1176},[199,107158,34141],{"class":1018},[199,107160,1537],{"class":205},[199,107162,107163],{"class":898},"\"  timestep:\"",[199,107165,107166],{"class":205},", model.opt.timestep)\n",[199,107168,107169,107171,107173,107176],{"class":201,"line":1189},[199,107170,34141],{"class":1018},[199,107172,1537],{"class":205},[199,107174,107175],{"class":898},"\"  time:\"",[199,107177,103737],{"class":205},[199,107179,107180,107182,107184,107187,107190,107192],{"class":201,"line":1202},[199,107181,34141],{"class":1018},[199,107183,1537],{"class":205},[199,107185,107186],{"class":898},"\"  qpos:\"",[199,107188,107189],{"class":205},", np.round(data.qpos.copy(), ",[199,107191,1915],{"class":1018},[199,107193,1554],{"class":205},[199,107195,107196,107198,107200,107203,107206,107208],{"class":201,"line":1207},[199,107197,34141],{"class":1018},[199,107199,1537],{"class":205},[199,107201,107202],{"class":898},"\"  qvel:\"",[199,107204,107205],{"class":205},", np.round(data.qvel.copy(), ",[199,107207,1915],{"class":1018},[199,107209,1554],{"class":205},[199,107211,107212],{"class":201,"line":1212},[199,107213,907],{"emptyLinePlaceholder":906},[199,107215,107216],{"class":201,"line":1225},[199,107217,907],{"emptyLinePlaceholder":906},[199,107219,107220,107222,107224,107226,107228],{"class":201,"line":1236},[199,107221,34789],{"class":1086},[199,107223,4889],{"class":878},[199,107225,103657],{"class":205},[199,107227,97945],{"class":1018},[199,107229,6640],{"class":205},[199,107231,107232,107234,107236,107238,107240],{"class":201,"line":1249},[199,107233,103666],{"class":205},[199,107235,895],{"class":1086},[199,107237,103671],{"class":205},[199,107239,103573],{"class":1018},[199,107241,1594],{"class":205},[199,107243,107244,107246,107248],{"class":201,"line":1262},[199,107245,103680],{"class":205},[199,107247,895],{"class":1086},[199,107249,103685],{"class":205},[199,107251,107252],{"class":201,"line":1275},[199,107253,907],{"emptyLinePlaceholder":906},[199,107255,107256,107259,107262],{"class":201,"line":1287},[199,107257,107258],{"class":205},"    print_state(",[199,107260,107261],{"class":898},"\"initial\"",[199,107263,107264],{"class":205},", model, data)\n",[199,107266,107267],{"class":201,"line":1292},[199,107268,907],{"emptyLinePlaceholder":906},[199,107270,107271,107273,107275,107277,107279,107281,107283],{"class":201,"line":1297},[199,107272,1937],{"class":1086},[199,107274,103760],{"class":205},[199,107276,28886],{"class":1086},[199,107278,35285],{"class":1018},[199,107280,1537],{"class":205},[199,107282,1153],{"class":1018},[199,107284,33628],{"class":205},[199,107286,107287],{"class":201,"line":1310},[199,107288,103775],{"class":205},[199,107290,107291],{"class":201,"line":1315},[199,107292,907],{"emptyLinePlaceholder":906},[199,107294,107295,107297,107300],{"class":201,"line":1330},[199,107296,107258],{"class":205},[199,107298,107299],{"class":898},"\"after 50 steps\"",[199,107301,107264],{"class":205},[199,107303,107304],{"class":201,"line":1335},[199,107305,907],{"emptyLinePlaceholder":906},[199,107307,107308],{"class":201,"line":1340},[199,107309,107310],{"class":205},"    mujoco.mj_resetData(model, data)\n",[199,107312,107313,107315,107318],{"class":201,"line":1352},[199,107314,107258],{"class":205},[199,107316,107317],{"class":898},"\"after reset\"",[199,107319,107264],{"class":205},[199,107321,107322],{"class":201,"line":1367},[199,107323,907],{"emptyLinePlaceholder":906},[199,107325,107326,107329,107331,107333,107335],{"class":201,"line":1381},[199,107327,107328],{"class":205},"    data.qpos[",[199,107330,1925],{"class":1018},[199,107332,2078],{"class":205},[199,107334,895],{"class":1086},[199,107336,106967],{"class":1018},[199,107338,107339],{"class":201,"line":1396},[199,107340,107341],{"class":205},"    mujoco.mj_forward(model, data)\n",[199,107343,107344,107346,107349],{"class":201,"line":1401},[199,107345,107258],{"class":205},[199,107347,107348],{"class":898},"\"after manual qpos edit\"",[199,107350,107264],{"class":205},[199,107352,107353],{"class":201,"line":1411},[199,107354,907],{"emptyLinePlaceholder":906},[199,107356,107357],{"class":201,"line":1421},[199,107358,907],{"emptyLinePlaceholder":906},[199,107360,107361,107363,107365,107367,107369],{"class":201,"line":1426},[199,107362,4470],{"class":1086},[199,107364,34062],{"class":1018},[199,107366,103818],{"class":1086},[199,107368,103821],{"class":898},[199,107370,6640],{"class":205},[199,107372,107373],{"class":201,"line":1436},[199,107374,103828],{"class":205},[31,107376,105829],{},[190,107378,107380],{"className":26666,"code":107379,"language":26668,"meta":57,"style":57},"touch ch3_python_state.py\n",[196,107381,107382],{"__ignoreMap":57},[199,107383,107384,107386],{"class":201,"line":202},[199,107385,103542],{"class":878},[199,107387,107388],{"class":898}," ch3_python_state.py\n",[31,107390,104560],{},[190,107392,107394],{"className":26666,"code":107393,"language":26668,"meta":57,"style":57},"python ch3_python_state.py\n",[196,107395,107396],{"__ignoreMap":57},[199,107397,107398,107400],{"class":201,"line":202},[199,107399,33223],{"class":878},[199,107401,107388],{"class":898},[19,107403,103831],{"id":103831},[31,107405,107406],{},"打印状态的函数：",[190,107408,107410],{"className":33221,"code":107409,"language":33223,"meta":57,"style":57},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[196,107411,107412],{"__ignoreMap":57},[199,107413,107414,107416,107418,107420,107422,107424,107426],{"class":201,"line":202},[199,107415,34789],{"class":1086},[199,107417,107135],{"class":878},[199,107419,107138],{"class":205},[199,107421,4242],{"class":1018},[199,107423,107143],{"class":205},[199,107425,97945],{"class":1018},[199,107427,6640],{"class":205},[31,107429,107430,107431,107433],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[196,107432,36242],{}," 里发生了什么。",[31,107435,107436],{},"推进 50 步：",[190,107438,107440],{"className":33221,"code":107439,"language":33223,"meta":57,"style":57},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[196,107441,107442,107458],{"__ignoreMap":57},[199,107443,107444,107446,107448,107450,107452,107454,107456],{"class":201,"line":202},[199,107445,5929],{"class":1086},[199,107447,103760],{"class":205},[199,107449,28886],{"class":1086},[199,107451,35285],{"class":1018},[199,107453,1537],{"class":205},[199,107455,1153],{"class":1018},[199,107457,33628],{"class":205},[199,107459,107460],{"class":201,"line":36},[199,107461,103958],{"class":205},[31,107463,107464,107465,107468,107469,107471],{},"由于 ",[196,107466,107467],{},"timestep=0.01","，所以 50 步后时间约为 ",[196,107470,38170],{}," 秒。",[31,107473,107474],{},"重置：",[190,107476,107477],{"className":33221,"code":106785,"language":33223,"meta":57,"style":57},[196,107478,107479],{"__ignoreMap":57},[199,107480,107481],{"class":201,"line":202},[199,107482,106785],{"class":205},[31,107484,107485],{},"这会把时间、位置、速度恢复到初始状态。",[31,107487,107488],{},"手动改高度：",[190,107490,107492],{"className":33221,"code":107491,"language":33223,"meta":57,"style":57},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[196,107493,107494,107506],{"__ignoreMap":57},[199,107495,107496,107498,107500,107502,107504],{"class":201,"line":202},[199,107497,106958],{"class":205},[199,107499,1925],{"class":1018},[199,107501,2078],{"class":205},[199,107503,895],{"class":1086},[199,107505,106967],{"class":1018},[199,107507,107508],{"class":201,"line":36},[199,107509,106802],{"class":205},[31,107511,107512,107513,107516,107517,107520],{},"这个例子里 ",[196,107514,107515],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[196,107518,107519],{},"2.0"," 表示把小球放到更高的位置。",[19,107522,103967],{"id":103967},[190,107524,107525],{"className":33221,"code":107409,"language":33223,"meta":57,"style":57},[196,107526,107527],{"__ignoreMap":57},[199,107528,107529,107531,107533,107535,107537,107539,107541],{"class":201,"line":202},[199,107530,34789],{"class":1086},[199,107532,107135],{"class":878},[199,107534,107138],{"class":205},[199,107536,4242],{"class":1018},[199,107538,107143],{"class":205},[199,107540,97945],{"class":1018},[199,107542,6640],{"class":205},[31,107544,107545],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[24,107547,107548,107557,107562],{},[27,107549,107550,107553,107554,107556],{},[196,107551,107552],{},"prefix","：一段文字，比如 ",[196,107555,107261],{},"，用来说明现在打印的是哪个阶段。",[27,107558,107559,107561],{},[196,107560,104344],{},"：MuJoCo 模型。",[27,107563,107564,107566],{},[196,107565,36242],{},"：MuJoCo 当前状态。",[31,107568,107569,3300,107572,107575],{},[196,107570,107571],{},"prefix: str",[196,107573,107574],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[190,107577,107579],{"className":33221,"code":107578,"language":33223,"meta":57,"style":57},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[196,107580,107581],{"__ignoreMap":57},[199,107582,107583,107585,107587,107589,107591,107593],{"class":201,"line":202},[199,107584,33258],{"class":1018},[199,107586,1537],{"class":205},[199,107588,107186],{"class":898},[199,107590,107189],{"class":205},[199,107592,1915],{"class":1018},[199,107594,1554],{"class":205},[31,107596,107597,107600],{},[196,107598,107599],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[190,107602,107604],{"className":33221,"code":107603,"language":33223,"meta":57,"style":57},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[196,107605,107606,107618],{"__ignoreMap":57},[199,107607,107608,107610,107612,107614,107616],{"class":201,"line":202},[199,107609,103893],{"class":205},[199,107611,895],{"class":1086},[199,107613,103671],{"class":205},[199,107615,103573],{"class":1018},[199,107617,1594],{"class":205},[199,107619,107620,107622,107624],{"class":201,"line":36},[199,107621,103917],{"class":205},[199,107623,895],{"class":1086},[199,107625,103685],{"class":205},[31,107627,107628],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[190,107630,107632],{"className":33221,"code":107631,"language":33223,"meta":57,"style":57},"print_state(\"initial\", model, data)\n",[196,107633,107634],{"__ignoreMap":57},[199,107635,107636,107639,107641],{"class":201,"line":202},[199,107637,107638],{"class":205},"print_state(",[199,107640,107261],{"class":898},[199,107642,107264],{"class":205},[31,107644,107645,107646,107649],{},"调用刚才定义的 ",[196,107647,107648],{},"print_state"," 函数，打印初始状态。",[190,107651,107652],{"className":33221,"code":107439,"language":33223,"meta":57,"style":57},[196,107653,107654,107670],{"__ignoreMap":57},[199,107655,107656,107658,107660,107662,107664,107666,107668],{"class":201,"line":202},[199,107657,5929],{"class":1086},[199,107659,103760],{"class":205},[199,107661,28886],{"class":1086},[199,107663,35285],{"class":1018},[199,107665,1537],{"class":205},[199,107667,1153],{"class":1018},[199,107669,33628],{"class":205},[199,107671,107672],{"class":201,"line":36},[199,107673,103958],{"class":205},[31,107675,107676],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[190,107678,107679],{"className":33221,"code":106785,"language":33223,"meta":57,"style":57},[196,107680,107681],{"__ignoreMap":57},[199,107682,107683],{"class":201,"line":202},[199,107684,106785],{"class":205},[31,107686,107687,107688,107690,107691,107693],{},"重置 ",[196,107689,36242],{},"。注意它不会重新创建 ",[196,107692,104344],{},"，因为模型结构没有变，只是状态回到初始值。",[190,107695,107696],{"className":33221,"code":106951,"language":33223,"meta":57,"style":57},[196,107697,107698],{"__ignoreMap":57},[199,107699,107700,107702,107704,107706,107708],{"class":201,"line":202},[199,107701,106958],{"class":205},[199,107703,1925],{"class":1018},[199,107705,2078],{"class":205},[199,107707,895],{"class":1086},[199,107709,106967],{"class":1018},[31,107711,107712,107713,3300,107716,3300,107719,107721],{},"这行是“手动改状态”。在 freejoint 中，",[196,107714,107715],{},"qpos[0]",[196,107717,107718],{},"qpos[1]",[196,107720,107515],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[190,107723,107724],{"className":33221,"code":106802,"language":33223,"meta":57,"style":57},[196,107725,107726],{"__ignoreMap":57},[199,107727,107728],{"class":201,"line":202},[199,107729,106802],{"class":205},[31,107731,107732,107733,107735,107736,107738],{},"手动改完 ",[196,107734,106289],{}," 后，调用 ",[196,107737,106509],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107740,104575],{"id":104574},[31,107742,107743],{},"你会看到:",[24,107745,107746,107751,107756,107759],{},[27,107747,107748,107749],{},"初始时间为 ",[196,107750,1025],{},[27,107752,107753,107754],{},"50 步后时间约为 ",[196,107755,38170],{},[27,107757,107758],{},"reset 后状态恢复",[27,107760,107761,107762,107765,107766],{},"手动修改 ",[196,107763,107764],{},"data.qpos[2]"," 后，小球高度变为 ",[196,107767,107519],{},[31,107769,107770,107772],{},[196,107771,107515],{}," 在这个例子中表示自由刚体的 z 坐标。",[31,107774,107775],{},"输出里可以重点看三件事：",[24,107777,107778,107786,107791],{},[27,107779,107780,107782,107783,107785],{},[196,107781,5301],{}," 是否随着 ",[196,107784,103474],{}," 增加。",[27,107787,107788,107790],{},[196,107789,106289],{}," 的 z 坐标是否因为下落而变化。",[27,107792,107793,107795,107796,31228],{},[196,107794,106611],{}," 后时间是否回到 ",[196,107797,1025],{},[14,107799,104607],{"id":104606},[24,107801,107802,107808,107814,107820,107823,107832],{},[27,107803,107804,107805,31228],{},"修改 timestep 为 ",[196,107806,107807],{},"0.005",[27,107809,107810,107811,31228],{},"重新运行，检查 50 步后时间是否约为 ",[196,107812,107813],{},"0.25",[27,107815,107816,107817,31228],{},"修改重力为 ",[196,107818,107819],{},"0 0 -1.0",[27,107821,107822],{},"观察小球下降速度是否变慢。",[27,107824,104670,107825,104673,107828,107831],{},[196,107826,107827],{},"data.qpos[2] = 2.0",[196,107829,107830],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[27,107833,107834,107835,107838],{},"注释掉 ",[196,107836,107837],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107840,104712],{"id":104711},[19,107842,107844,107845,107847],{"id":107843},"修改-dataqpos-后位置没有更新","修改 ",[196,107846,103329],{}," 后位置没有更新",[31,107849,104721],{},[190,107851,107852],{"className":33221,"code":106802,"language":33223,"meta":57,"style":57},[196,107853,107854],{"__ignoreMap":57},[199,107855,107856],{"class":201,"line":202},[199,107857,106802],{"class":205},[19,107859,107860],{"id":107860},"数组维度看不懂",[31,107862,107863],{},"打印模型维度:",[190,107865,107867],{"className":33221,"code":107866,"language":33223,"meta":57,"style":57},"print(model.nq, model.nv, model.nu)\n",[196,107868,107869],{"__ignoreMap":57},[199,107870,107871,107873],{"class":201,"line":202},[199,107872,33258],{"class":1018},[199,107874,107875],{"class":205},"(model.nq, model.nv, model.nu)\n",[3227,107877,107878,107886],{},[3230,107879,107880],{},[3233,107881,107882,107884],{},[3236,107883,106833],{"align":26580},[3236,107885,102959],{"align":26580},[3273,107887,107888,107898,107908],{},[3233,107889,107890,107895],{},[3278,107891,107892],{"align":26580},[196,107893,107894],{},"nq",[3278,107896,107897],{"align":26580},"位置变量数量",[3233,107899,107900,107905],{},[3278,107901,107902],{"align":26580},[196,107903,107904],{},"nv",[3278,107906,107907],{"align":26580},"速度变量数量",[3233,107909,107910,107914],{},[3278,107911,107912],{"align":26580},[196,107913,104421],{},[3278,107915,107916],{"align":26580},"控制输入数量",[19,107918,107920,107921,107923],{"id":107919},"误以为-qpos-一定等于关节数","误以为 ",[196,107922,106289],{}," 一定等于关节数",[31,107925,107926,107927,84789,107929,107931,107932,107934],{},"不是。例如 ",[196,107928,103879],{},[196,107930,106289],{}," 是 7 维，但 ",[196,107933,106619],{}," 是 6 维。",[19,107936,107938,107939,107941],{"id":107937},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[196,107940,106289],{}," 的第几位",[31,107943,107944],{},"初学时可以先打印：",[190,107946,107948],{"className":33221,"code":107947,"language":33223,"meta":57,"style":57},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[196,107949,107950,107960,107970,107982],{"__ignoreMap":57},[199,107951,107952,107954,107956,107958],{"class":201,"line":202},[199,107953,33258],{"class":1018},[199,107955,1537],{"class":205},[199,107957,103698],{"class":898},[199,107959,103701],{"class":205},[199,107961,107962,107964,107966,107968],{"class":201,"line":36},[199,107963,33258],{"class":1018},[199,107965,1537],{"class":205},[199,107967,103710],{"class":898},[199,107969,103713],{"class":205},[199,107971,107972,107974,107976,107979],{"class":201,"line":73},[199,107973,33258],{"class":1018},[199,107975,1537],{"class":205},[199,107977,107978],{"class":898},"\"qpos:\"",[199,107980,107981],{"class":205},", data.qpos)\n",[199,107983,107984,107986,107988,107991],{"class":201,"line":333},[199,107985,33258],{"class":1018},[199,107987,1537],{"class":205},[199,107989,107990],{"class":898},"\"qvel:\"",[199,107992,107993],{"class":205},", data.qvel)\n",[31,107995,107996],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[19,107998,107999],{"id":107999},"仿真结果每次都一样",[31,108001,108002,108003,108005],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[196,108004,106289],{},"、目标点或控制输入。",[14,108007,104866],{"id":104865},[31,108009,108010,108011,27462],{},"Python 控制 MuJoCo 的核心就是读写 ",[196,108012,36242],{},[24,108014,108015,108023,108028,108033],{},[27,108016,108017,108018,103277,108020,108022],{},"用 ",[196,108019,103329],{},[196,108021,103332],{}," 读取状态。",[27,108024,108017,108025,108027],{},[196,108026,103335],{}," 写入控制。",[27,108029,108017,108030,108032],{},[196,108031,103474],{}," 推进时间。",[27,108034,108035,108036,108038],{},"手动改状态后用 ",[196,108037,106509],{}," 刷新派生量。",[31,108040,108041],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1002,108043,108044],{},"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":57,"searchDepth":36,"depth":36,"links":108046},[108047,108048,108049,108056,108060,108061,108062,108072],{"id":102905,"depth":36,"text":102906},{"id":103028,"depth":36,"text":103029},{"id":103303,"depth":36,"text":103304,"children":108050},[108051,108053,108055],{"id":106814,"depth":73,"text":108052},"qpos、qvel、ctrl 是什么",{"id":106892,"depth":73,"text":108054},"mj_step 和 mj_forward 的区别",{"id":106981,"depth":73,"text":106982},{"id":103511,"depth":36,"text":103512,"children":108057},[108058,108059],{"id":103831,"depth":73,"text":103831},{"id":103967,"depth":73,"text":103967},{"id":104574,"depth":36,"text":104575},{"id":104606,"depth":36,"text":104607},{"id":104711,"depth":36,"text":104712,"children":108063},[108064,108066,108067,108069,108071],{"id":107843,"depth":73,"text":108065},"修改 data.qpos 后位置没有更新",{"id":107860,"depth":73,"text":107860},{"id":107919,"depth":73,"text":108068},"误以为 qpos 一定等于关节数",{"id":107937,"depth":73,"text":108070},"不知道某个元素在 qpos 的第几位",{"id":107999,"depth":73,"text":107999},{"id":104865,"depth":36,"text":104866},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106577,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108079,"title":108080,"body":108081,"description":57,"extension":3024,"meta":109771,"navigation":906,"path":109772,"seo":109773,"stem":109774,"__hash__":109775},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108082,"toc":109747},[108083,108086,108088,108091,108093,108118,108121,108140,108143,108145,108147,108171,108173,108187,108189,108230,108232,108256,108258,108261,108295,108297,108310,108313,108381,108390,108394,108397,108431,108437,108440,108444,108483,108486,108506,108510,108553,108555,108584,108587,108593,108596,108598,108992,108994,109006,109008,109019,109021,109024,109053,109061,109064,109099,109102,109104,109112,109115,109117,109128,109138,109158,109161,109197,109209,109257,109276,109318,109331,109359,109364,109385,109395,109413,109416,109450,109453,109473,109476,109495,109501,109503,109506,109512,109518,109528,109531,109537,109546,109548,109594,109596,109602,109608,109611,109614,109634,109637,109643,109649,109651,109674,109677,109680,109689,109692,109730,109732,109735,109741,109744],[10,108084,108080],{"id":108085},"_4关节actuator-与力控制",[14,108087,102906],{"id":102905},[31,108089,108090],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[31,108092,106590],{},[24,108094,108095,108101,108106,108110,108115],{},[27,108096,108097,108100],{},[196,108098,108099],{},"hinge"," 关节",[27,108102,108103],{},[196,108104,108105],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[27,108107,108108],{},[196,108109,103335],{},[27,108111,108112],{},[196,108113,108114],{},"ctrlrange",[27,108116,108117],{},"读取关节角和角速度",[31,108119,108120],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[190,108122,108124],{"className":33221,"code":108123,"language":33223,"meta":57,"style":57},"data.ctrl[0] = ...\n",[196,108125,108126],{"__ignoreMap":57},[199,108127,108128,108131,108133,108135,108137],{"class":201,"line":202},[199,108129,108130],{"class":205},"data.ctrl[",[199,108132,1025],{"class":1018},[199,108134,2078],{"class":205},[199,108136,895],{"class":1086},[199,108138,108139],{"class":1018}," ...\n",[31,108141,108142],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,108144,103029],{"id":103028},[31,108146,103032],{},[190,108148,108149],{"className":26666,"code":106647,"language":26668,"meta":57,"style":57},[196,108150,108151],{"__ignoreMap":57},[199,108152,108153,108155,108157,108159,108161,108163,108165,108167,108169],{"class":201,"line":202},[199,108154,27420],{"class":878},[199,108156,29158],{"class":898},[199,108158,26678],{"class":898},[199,108160,29243],{"class":1018},[199,108162,106662],{"class":898},[199,108164,103057],{"class":898},[199,108166,104760],{"class":898},[199,108168,103073],{"class":898},[199,108170,106671],{"class":898},[31,108172,105078],{},[190,108174,108175],{"className":26666,"code":103178,"language":26668,"meta":57,"style":57},[196,108176,108177],{"__ignoreMap":57},[199,108178,108179,108181,108183,108185],{"class":201,"line":202},[199,108180,26675],{"class":878},[199,108182,26678],{"class":898},[199,108184,103189],{"class":898},[199,108186,103192],{"class":898},[31,108188,105095],{},[190,108190,108192],{"className":26666,"code":108191,"language":26668,"meta":57,"style":57},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[196,108193,108194,108211,108220],{"__ignoreMap":57},[199,108195,108196,108198,108200,108202,108205,108207,108209],{"class":201,"line":202},[199,108197,33173],{"class":878},[199,108199,32019],{"class":898},[199,108201,27959],{"class":1018},[199,108203,108204],{"class":898}," mujoco-control",[199,108206,103234],{"class":898},[199,108208,103237],{"class":1018},[199,108210,103240],{"class":1018},[199,108212,108213,108215,108217],{"class":201,"line":36},[199,108214,33173],{"class":878},[199,108216,103247],{"class":898},[199,108218,108219],{"class":898}," mujoco-control\n",[199,108221,108222,108224,108226,108228],{"class":201,"line":73},[199,108223,26675],{"class":878},[199,108225,26678],{"class":898},[199,108227,103189],{"class":898},[199,108229,103192],{"class":898},[31,108231,103263],{},[24,108233,108234,108240,108247,108253],{},[27,108235,108236,108239],{},[196,108237,108238],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[27,108241,108242,108244,108245,31228],{},[196,108243,103335],{}," 长度等于 ",[196,108246,104417],{},[27,108248,84481,108249,108252],{},[196,108250,108251],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[27,108254,108255],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108257,103304],{"id":103303},[31,108259,108260],{},"关节决定 body 如何运动:",[190,108262,108264],{"className":2763,"code":108263,"language":2765,"meta":57,"style":57},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[196,108265,108266],{"__ignoreMap":57},[199,108267,108268,108270,108272,108274,108276,108279,108281,108283,108285,108288,108290,108293],{"class":201,"line":202},[199,108269,887],{"class":205},[199,108271,105215],{"class":874},[199,108273,967],{"class":878},[199,108275,895],{"class":205},[199,108277,108278],{"class":898},"\"hinge\"",[199,108280,56083],{"class":878},[199,108282,895],{"class":205},[199,108284,108278],{"class":898},[199,108286,108287],{"class":878}," axis",[199,108289,895],{"class":205},[199,108291,108292],{"class":898},"\"0 1 0\"",[199,108294,103403],{"class":205},[31,108296,105311],{},[24,108298,108299,108304,108307],{},[27,108300,108301,108302],{},"名字是 ",[196,108303,108099],{},[27,108305,108306],{},"类型是旋转关节",[27,108308,108309],{},"绕 y 轴旋转",[31,108311,108312],{},"actuator 决定如何施加控制:",[190,108314,108316],{"className":2763,"code":108315,"language":2765,"meta":57,"style":57},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[196,108317,108318,108327,108373],{"__ignoreMap":57},[199,108319,108320,108322,108325],{"class":201,"line":202},[199,108321,887],{"class":205},[199,108323,108324],{"class":874},"actuator",[199,108326,882],{"class":205},[199,108328,108329,108331,108334,108336,108338,108341,108344,108346,108348,108351,108353,108355,108358,108360,108363,108366,108368,108371],{"class":201,"line":36},[199,108330,1824],{"class":205},[199,108332,108333],{"class":874},"motor",[199,108335,967],{"class":878},[199,108337,895],{"class":205},[199,108339,108340],{"class":898},"\"hinge_motor\"",[199,108342,108343],{"class":878}," joint",[199,108345,895],{"class":205},[199,108347,108278],{"class":898},[199,108349,108350],{"class":878}," gear",[199,108352,895],{"class":205},[199,108354,6579],{"class":898},[199,108356,108357],{"class":878}," ctrlrange",[199,108359,895],{"class":205},[199,108361,108362],{"class":898},"\"-2 2\"",[199,108364,108365],{"class":878}," ctrllimited",[199,108367,895],{"class":205},[199,108369,108370],{"class":898},"\"true\"",[199,108372,103403],{"class":205},[199,108374,108375,108377,108379],{"class":201,"line":73},[199,108376,1414],{"class":205},[199,108378,108324],{"class":874},[199,108380,882],{"class":205},[31,108382,108383,108386,108387,31228],{},[196,108384,108385],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[196,108388,108389],{},"[-2, 2]",[19,108391,108393],{"id":108392},"joint-和-actuator-的关系","joint 和 actuator 的关系",[31,108395,108396],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[3227,108398,108399,108409],{},[3230,108400,108401],{},[3233,108402,108403,108405,108407],{},[3236,108404,28596],{"align":26580},[3236,108406,104955],{"align":26580},[3236,108408,102993],{"align":26580},[3273,108410,108411,108421],{},[3233,108412,108413,108415,108418],{},[3278,108414,105215],{"align":26580},[3278,108416,108417],{"align":26580},"定义能怎么动",[3278,108419,108420],{"align":26580},"门轴允许门旋转",[3233,108422,108423,108425,108428],{},[3278,108424,108324],{"align":26580},[3278,108426,108427],{"align":26580},"定义怎么施力或控制",[3278,108429,108430],{"align":26580},"人推门、马达带动门",[31,108432,108433,108434,108436],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[196,108435,103335],{}," 主动控制它。",[31,108438,108439],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[19,108441,108443],{"id":108442},"hinge-joint","hinge joint",[190,108445,108447],{"className":2763,"code":108446,"language":2765,"meta":57,"style":57},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[196,108448,108449],{"__ignoreMap":57},[199,108450,108451,108453,108455,108457,108459,108461,108463,108465,108467,108469,108471,108473,108476,108478,108481],{"class":201,"line":202},[199,108452,887],{"class":205},[199,108454,105215],{"class":874},[199,108456,967],{"class":878},[199,108458,895],{"class":205},[199,108460,108278],{"class":898},[199,108462,56083],{"class":878},[199,108464,895],{"class":205},[199,108466,108278],{"class":898},[199,108468,108287],{"class":878},[199,108470,895],{"class":205},[199,108472,108292],{"class":898},[199,108474,108475],{"class":878}," damping",[199,108477,895],{"class":205},[199,108479,108480],{"class":898},"\"0.1\"",[199,108482,103403],{"class":205},[31,108484,108485],{},"含义：",[24,108487,108488,108494,108500],{},[27,108489,108490,108493],{},[196,108491,108492],{},"type=\"hinge\"","：只能绕一个轴旋转。",[27,108495,108496,108499],{},[196,108497,108498],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[27,108501,108502,108505],{},[196,108503,108504],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[19,108507,108509],{"id":108508},"motor-actuator","motor actuator",[190,108511,108513],{"className":2763,"code":108512,"language":2765,"meta":57,"style":57},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[196,108514,108515],{"__ignoreMap":57},[199,108516,108517,108519,108521,108523,108525,108527,108529,108531,108533,108535,108537,108539,108541,108543,108545,108547,108549,108551],{"class":201,"line":202},[199,108518,887],{"class":205},[199,108520,108333],{"class":874},[199,108522,967],{"class":878},[199,108524,895],{"class":205},[199,108526,108340],{"class":898},[199,108528,108343],{"class":878},[199,108530,895],{"class":205},[199,108532,108278],{"class":898},[199,108534,108350],{"class":878},[199,108536,895],{"class":205},[199,108538,6579],{"class":898},[199,108540,108357],{"class":878},[199,108542,895],{"class":205},[199,108544,108362],{"class":898},[199,108546,108365],{"class":878},[199,108548,895],{"class":205},[199,108550,108370],{"class":898},[199,108552,103403],{"class":205},[31,108554,108485],{},[24,108556,108557,108566,108572,108578],{},[27,108558,108559,108562,108563,108565],{},[196,108560,108561],{},"joint=\"hinge\"","：这个电机作用在名为 ",[196,108564,108099],{}," 的关节上。",[27,108567,108568,108571],{},[196,108569,108570],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[27,108573,108574,108577],{},[196,108575,108576],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[27,108579,108580,108583],{},[196,108581,108582],{},"ctrllimited=\"true\"","：启用控制范围限制。",[31,108585,108586],{},"简单理解：",[190,108588,108591],{"className":108589,"code":108590,"language":8084,"meta":57},[8082],"实际施加效果 ≈ data.ctrl[0] * gear\n",[196,108592,108590],{"__ignoreMap":57},[31,108594,108595],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108597,103512],{"id":103511},[190,108599,108601],{"className":33221,"code":108600,"language":33223,"meta":57,"style":57},"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",[196,108602,108603,108610,108614,108620,108630,108634,108638,108646,108651,108656,108660,108664,108669,108674,108678,108683,108688,108693,108698,108702,108706,108710,108715,108720,108725,108729,108733,108737,108741,108753,108765,108773,108777,108787,108797,108807,108811,108824,108837,108841,108858,108872,108907,108911,108915,108926,108941,108956,108968,108972,108976,108988],{"__ignoreMap":57},[199,108604,108605,108607],{"class":201,"line":202},[199,108606,33235],{"class":1086},[199,108608,108609],{"class":205}," math\n",[199,108611,108612],{"class":201,"line":36},[199,108613,907],{"emptyLinePlaceholder":906},[199,108615,108616,108618],{"class":201,"line":73},[199,108617,33235],{"class":1086},[199,108619,103560],{"class":205},[199,108621,108622,108624,108626,108628],{"class":201,"line":333},[199,108623,33235],{"class":1086},[199,108625,34222],{"class":205},[199,108627,34225],{"class":1086},[199,108629,34228],{"class":205},[199,108631,108632],{"class":201,"line":227},[199,108633,907],{"emptyLinePlaceholder":906},[199,108635,108636],{"class":201,"line":238},[199,108637,907],{"emptyLinePlaceholder":906},[199,108639,108640,108642,108644],{"class":201,"line":252},[199,108641,103573],{"class":1018},[199,108643,16425],{"class":1086},[199,108645,103578],{"class":898},[199,108647,108648],{"class":201,"line":388},[199,108649,108650],{"class":898},"\u003Cmujoco model=\"one_link_motor\">\n",[199,108652,108653],{"class":201,"line":415},[199,108654,108655],{"class":898},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[199,108657,108658],{"class":201,"line":426},[199,108659,907],{"emptyLinePlaceholder":906},[199,108661,108662],{"class":201,"line":1015},[199,108663,103597],{"class":898},[199,108665,108666],{"class":201,"line":1031},[199,108667,108668],{"class":898},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[199,108670,108671],{"class":201,"line":1043},[199,108672,108673],{"class":898},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[199,108675,108676],{"class":201,"line":1049},[199,108677,907],{"emptyLinePlaceholder":906},[199,108679,108680],{"class":201,"line":1054},[199,108681,108682],{"class":898},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[199,108684,108685],{"class":201,"line":1062},[199,108686,108687],{"class":898},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[199,108689,108690],{"class":201,"line":1075},[199,108691,108692],{"class":898},"        \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",[199,108694,108695],{"class":201,"line":1092},[199,108696,108697],{"class":898},"      \u003C\u002Fbody>\n",[199,108699,108700],{"class":201,"line":1107},[199,108701,103626],{"class":898},[199,108703,108704],{"class":201,"line":1128},[199,108705,103631],{"class":898},[199,108707,108708],{"class":201,"line":1146},[199,108709,907],{"emptyLinePlaceholder":906},[199,108711,108712],{"class":201,"line":1163},[199,108713,108714],{"class":898},"  \u003Cactuator>\n",[199,108716,108717],{"class":201,"line":1176},[199,108718,108719],{"class":898},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[199,108721,108722],{"class":201,"line":1189},[199,108723,108724],{"class":898},"  \u003C\u002Factuator>\n",[199,108726,108727],{"class":201,"line":1202},[199,108728,103636],{"class":898},[199,108730,108731],{"class":201,"line":1207},[199,108732,97957],{"class":898},[199,108734,108735],{"class":201,"line":1212},[199,108736,907],{"emptyLinePlaceholder":906},[199,108738,108739],{"class":201,"line":1225},[199,108740,907],{"emptyLinePlaceholder":906},[199,108742,108743,108745,108747,108749,108751],{"class":201,"line":1236},[199,108744,34789],{"class":1086},[199,108746,4889],{"class":878},[199,108748,103657],{"class":205},[199,108750,97945],{"class":1018},[199,108752,6640],{"class":205},[199,108754,108755,108757,108759,108761,108763],{"class":201,"line":1249},[199,108756,103666],{"class":205},[199,108758,895],{"class":1086},[199,108760,103671],{"class":205},[199,108762,103573],{"class":1018},[199,108764,1594],{"class":205},[199,108766,108767,108769,108771],{"class":201,"line":1262},[199,108768,103680],{"class":205},[199,108770,895],{"class":1086},[199,108772,103685],{"class":205},[199,108774,108775],{"class":201,"line":1275},[199,108776,907],{"emptyLinePlaceholder":906},[199,108778,108779,108781,108783,108785],{"class":201,"line":1287},[199,108780,34141],{"class":1018},[199,108782,1537],{"class":205},[199,108784,103698],{"class":898},[199,108786,103701],{"class":205},[199,108788,108789,108791,108793,108795],{"class":201,"line":1292},[199,108790,34141],{"class":1018},[199,108792,1537],{"class":205},[199,108794,103710],{"class":898},[199,108796,103713],{"class":205},[199,108798,108799,108801,108803,108805],{"class":201,"line":1297},[199,108800,34141],{"class":1018},[199,108802,1537],{"class":205},[199,108804,103722],{"class":898},[199,108806,103725],{"class":205},[199,108808,108809],{"class":201,"line":1310},[199,108810,907],{"emptyLinePlaceholder":906},[199,108812,108813,108815,108818,108820,108822],{"class":201,"line":1315},[199,108814,6005],{"class":1086},[199,108816,108817],{"class":205}," model.nu ",[199,108819,23793],{"class":1086},[199,108821,1495],{"class":1018},[199,108823,6640],{"class":205},[199,108825,108826,108828,108830,108832,108835],{"class":201,"line":1330},[199,108827,105691],{"class":1086},[199,108829,105694],{"class":1018},[199,108831,1537],{"class":205},[199,108833,108834],{"class":898},"\"expected exactly one actuator\"",[199,108836,1594],{"class":205},[199,108838,108839],{"class":201,"line":1335},[199,108840,907],{"emptyLinePlaceholder":906},[199,108842,108843,108845,108847,108849,108851,108853,108856],{"class":201,"line":1340},[199,108844,1937],{"class":1086},[199,108846,34458],{"class":205},[199,108848,28886],{"class":1086},[199,108850,35285],{"class":1018},[199,108852,1537],{"class":205},[199,108854,108855],{"class":1018},"2000",[199,108857,33628],{"class":205},[199,108859,108860,108863,108865,108867,108869],{"class":201,"line":1352},[199,108861,108862],{"class":205},"        t ",[199,108864,895],{"class":1086},[199,108866,34458],{"class":205},[199,108868,3537],{"class":1086},[199,108870,108871],{"class":205}," model.opt.timestep\n",[199,108873,108874,108877,108879,108881,108883,108886,108888,108891,108893,108895,108898,108900,108902,108904],{"class":201,"line":1367},[199,108875,108876],{"class":205},"        data.ctrl[",[199,108878,1025],{"class":1018},[199,108880,2078],{"class":205},[199,108882,895],{"class":1086},[199,108884,108885],{"class":1018}," 1.5",[199,108887,9415],{"class":1086},[199,108889,108890],{"class":205}," math.sin(",[199,108892,107519],{"class":1018},[199,108894,9415],{"class":1086},[199,108896,108897],{"class":205}," math.pi ",[199,108899,3537],{"class":1086},[199,108901,64126],{"class":1018},[199,108903,9415],{"class":1086},[199,108905,108906],{"class":205}," t)\n",[199,108908,108909],{"class":201,"line":1381},[199,108910,103775],{"class":205},[199,108912,108913],{"class":201,"line":1396},[199,108914,907],{"emptyLinePlaceholder":906},[199,108916,108917,108919,108921,108924],{"class":201,"line":1401},[199,108918,34141],{"class":1018},[199,108920,1537],{"class":205},[199,108922,108923],{"class":898},"\"time:\"",[199,108925,103737],{"class":205},[199,108927,108928,108930,108932,108935,108937,108939],{"class":201,"line":1411},[199,108929,34141],{"class":1018},[199,108931,1537],{"class":205},[199,108933,108934],{"class":898},"\"joint qpos:\"",[199,108936,107189],{"class":205},[199,108938,1915],{"class":1018},[199,108940,1554],{"class":205},[199,108942,108943,108945,108947,108950,108952,108954],{"class":201,"line":1421},[199,108944,34141],{"class":1018},[199,108946,1537],{"class":205},[199,108948,108949],{"class":898},"\"joint qvel:\"",[199,108951,107205],{"class":205},[199,108953,1915],{"class":1018},[199,108955,1554],{"class":205},[199,108957,108958,108960,108962,108965],{"class":201,"line":1426},[199,108959,34141],{"class":1018},[199,108961,1537],{"class":205},[199,108963,108964],{"class":898},"\"last ctrl:\"",[199,108966,108967],{"class":205},", data.ctrl.copy())\n",[199,108969,108970],{"class":201,"line":1436},[199,108971,907],{"emptyLinePlaceholder":906},[199,108973,108974],{"class":201,"line":1441},[199,108975,907],{"emptyLinePlaceholder":906},[199,108977,108978,108980,108982,108984,108986],{"class":201,"line":1451},[199,108979,4470],{"class":1086},[199,108981,34062],{"class":1018},[199,108983,103818],{"class":1086},[199,108985,103821],{"class":898},[199,108987,6640],{"class":205},[199,108989,108990],{"class":201,"line":1458},[199,108991,103828],{"class":205},[31,108993,105829],{},[190,108995,108997],{"className":26666,"code":108996,"language":26668,"meta":57,"style":57},"touch ch4_joint_motor.py\n",[196,108998,108999],{"__ignoreMap":57},[199,109000,109001,109003],{"class":201,"line":202},[199,109002,103542],{"class":878},[199,109004,109005],{"class":898}," ch4_joint_motor.py\n",[31,109007,104560],{},[190,109009,109011],{"className":26666,"code":109010,"language":26668,"meta":57,"style":57},"python ch4_joint_motor.py\n",[196,109012,109013],{"__ignoreMap":57},[199,109014,109015,109017],{"class":201,"line":202},[199,109016,33223],{"class":878},[199,109018,109005],{"class":898},[19,109020,103831],{"id":103831},[31,109022,109023],{},"检查 actuator 数量：",[190,109025,109027],{"className":33221,"code":109026,"language":33223,"meta":57,"style":57},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[196,109028,109029,109041],{"__ignoreMap":57},[199,109030,109031,109033,109035,109037,109039],{"class":201,"line":202},[199,109032,4470],{"class":1086},[199,109034,108817],{"class":205},[199,109036,23793],{"class":1086},[199,109038,1495],{"class":1018},[199,109040,6640],{"class":205},[199,109042,109043,109045,109047,109049,109051],{"class":201,"line":36},[199,109044,106154],{"class":1086},[199,109046,105694],{"class":1018},[199,109048,1537],{"class":205},[199,109050,108834],{"class":898},[199,109052,1594],{"class":205},[31,109054,109055,109057,109058,109060],{},[196,109056,104417],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[196,109059,103335],{}," 长度应该是 1。",[31,109062,109063],{},"产生正弦控制信号：",[190,109065,109067],{"className":33221,"code":109066,"language":33223,"meta":57,"style":57},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[196,109068,109069],{"__ignoreMap":57},[199,109070,109071,109073,109075,109077,109079,109081,109083,109085,109087,109089,109091,109093,109095,109097],{"class":201,"line":202},[199,109072,108130],{"class":205},[199,109074,1025],{"class":1018},[199,109076,2078],{"class":205},[199,109078,895],{"class":1086},[199,109080,108885],{"class":1018},[199,109082,9415],{"class":1086},[199,109084,108890],{"class":205},[199,109086,107519],{"class":1018},[199,109088,9415],{"class":1086},[199,109090,108897],{"class":205},[199,109092,3537],{"class":1086},[199,109094,64126],{"class":1018},[199,109096,9415],{"class":1086},[199,109098,108906],{"class":205},[31,109100,109101],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[31,109103,103932],{},[190,109105,109106],{"className":33221,"code":106764,"language":33223,"meta":57,"style":57},[196,109107,109108],{"__ignoreMap":57},[199,109109,109110],{"class":201,"line":202},[199,109111,106764],{"class":205},[31,109113,109114],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[19,109116,103967],{"id":103967},[190,109118,109120],{"className":33221,"code":109119,"language":33223,"meta":57,"style":57},"import math\n",[196,109121,109122],{"__ignoreMap":57},[199,109123,109124,109126],{"class":201,"line":202},[199,109125,33235],{"class":1086},[199,109127,108609],{"class":205},[31,109129,109130,109131,103277,109134,109137],{},"导入 Python 标准库里的数学模块。后面要用 ",[196,109132,109133],{},"math.sin",[196,109135,109136],{},"math.pi"," 生成周期变化的控制信号。",[190,109139,109140],{"className":33221,"code":105945,"language":33223,"meta":57,"style":57},[196,109141,109142,109148],{"__ignoreMap":57},[199,109143,109144,109146],{"class":201,"line":202},[199,109145,33235],{"class":1086},[199,109147,103560],{"class":205},[199,109149,109150,109152,109154,109156],{"class":201,"line":36},[199,109151,33235],{"class":1086},[199,109153,34222],{"class":205},[199,109155,34225],{"class":1086},[199,109157,34228],{"class":205},[31,109159,109160],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[190,109162,109163],{"className":2763,"code":108446,"language":2765,"meta":57,"style":57},[196,109164,109165],{"__ignoreMap":57},[199,109166,109167,109169,109171,109173,109175,109177,109179,109181,109183,109185,109187,109189,109191,109193,109195],{"class":201,"line":202},[199,109168,887],{"class":205},[199,109170,105215],{"class":874},[199,109172,967],{"class":878},[199,109174,895],{"class":205},[199,109176,108278],{"class":898},[199,109178,56083],{"class":878},[199,109180,895],{"class":205},[199,109182,108278],{"class":898},[199,109184,108287],{"class":878},[199,109186,895],{"class":205},[199,109188,108292],{"class":898},[199,109190,108475],{"class":878},[199,109192,895],{"class":205},[199,109194,108480],{"class":898},[199,109196,103403],{"class":205},[31,109198,109199,109200,109202,109203,109205,109206,109208],{},"这行定义关节。",[196,109201,108099],{}," 表示旋转关节。",[196,109204,108498],{}," 表示绕 y 轴旋转。",[196,109207,108504],{}," 表示有一点阻尼，运动不会完全无损耗。",[190,109210,109212],{"className":2763,"code":109211,"language":2765,"meta":57,"style":57},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[196,109213,109214],{"__ignoreMap":57},[199,109215,109216,109218,109220,109222,109224,109227,109229,109231,109234,109237,109239,109242,109244,109246,109248,109250,109252,109255],{"class":201,"line":202},[199,109217,887],{"class":205},[199,109219,103379],{"class":874},[199,109221,967],{"class":878},[199,109223,895],{"class":205},[199,109225,109226],{"class":898},"\"link_geom\"",[199,109228,56083],{"class":878},[199,109230,895],{"class":205},[199,109232,109233],{"class":898},"\"capsule\"",[199,109235,109236],{"class":878}," fromto",[199,109238,895],{"class":205},[199,109240,109241],{"class":898},"\"0 0 0 0 0 0.5\"",[199,109243,103395],{"class":878},[199,109245,895],{"class":205},[199,109247,106037],{"class":898},[199,109249,104260],{"class":878},[199,109251,895],{"class":205},[199,109253,109254],{"class":898},"\"0.5\"",[199,109256,103403],{"class":205},[31,109258,109259,109260,109262,109263,109265,109266,109269,109270,31228,109273,109275],{},"这行定义摆杆的形状。",[196,109261,105424],{}," 是胶囊体，适合表示杆子。",[196,109264,105435],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[196,109267,109268],{},"(0,0,0)"," 延伸到 ",[196,109271,109272],{},"(0,0,0.5)",[196,109274,105429],{}," 是半径。",[190,109277,109278],{"className":2763,"code":108512,"language":2765,"meta":57,"style":57},[196,109279,109280],{"__ignoreMap":57},[199,109281,109282,109284,109286,109288,109290,109292,109294,109296,109298,109300,109302,109304,109306,109308,109310,109312,109314,109316],{"class":201,"line":202},[199,109283,887],{"class":205},[199,109285,108333],{"class":874},[199,109287,967],{"class":878},[199,109289,895],{"class":205},[199,109291,108340],{"class":898},[199,109293,108343],{"class":878},[199,109295,895],{"class":205},[199,109297,108278],{"class":898},[199,109299,108350],{"class":878},[199,109301,895],{"class":205},[199,109303,6579],{"class":898},[199,109305,108357],{"class":878},[199,109307,895],{"class":205},[199,109309,108362],{"class":898},[199,109311,108365],{"class":878},[199,109313,895],{"class":205},[199,109315,108370],{"class":898},[199,109317,103403],{"class":205},[31,109319,109320,109321,109323,109324,109327,109328,109330],{},"这行定义电机。它作用在 ",[196,109322,108099],{}," 关节上。",[196,109325,109326],{},"gear"," 可以理解成放大倍数。",[196,109329,108114],{}," 限制控制输入范围。",[190,109332,109333],{"className":33221,"code":109026,"language":33223,"meta":57,"style":57},[196,109334,109335,109347],{"__ignoreMap":57},[199,109336,109337,109339,109341,109343,109345],{"class":201,"line":202},[199,109338,4470],{"class":1086},[199,109340,108817],{"class":205},[199,109342,23793],{"class":1086},[199,109344,1495],{"class":1018},[199,109346,6640],{"class":205},[199,109348,109349,109351,109353,109355,109357],{"class":201,"line":36},[199,109350,106154],{"class":1086},[199,109352,105694],{"class":1018},[199,109354,1537],{"class":205},[199,109356,108834],{"class":898},[199,109358,1594],{"class":205},[31,109360,109361,109363],{},[196,109362,104417],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[190,109365,109367],{"className":33221,"code":109366,"language":33223,"meta":57,"style":57},"for step in range(2000):\n",[196,109368,109369],{"__ignoreMap":57},[199,109370,109371,109373,109375,109377,109379,109381,109383],{"class":201,"line":202},[199,109372,5929],{"class":1086},[199,109374,34458],{"class":205},[199,109376,28886],{"class":1086},[199,109378,35285],{"class":1018},[199,109380,1537],{"class":205},[199,109382,108855],{"class":1018},[199,109384,33628],{"class":205},[31,109386,109387,109388,109390,109391,109394],{},"循环 2000 步。这里没有用 ",[196,109389,4066],{},"，而是用 ",[196,109392,109393],{},"step","，因为后面要用当前步数计算时间。",[190,109396,109398],{"className":33221,"code":109397,"language":33223,"meta":57,"style":57},"t = step * model.opt.timestep\n",[196,109399,109400],{"__ignoreMap":57},[199,109401,109402,109405,109407,109409,109411],{"class":201,"line":202},[199,109403,109404],{"class":205},"t ",[199,109406,895],{"class":1086},[199,109408,34458],{"class":205},[199,109410,3537],{"class":1086},[199,109412,108871],{"class":205},[31,109414,109415],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[190,109417,109418],{"className":33221,"code":109066,"language":33223,"meta":57,"style":57},[196,109419,109420],{"__ignoreMap":57},[199,109421,109422,109424,109426,109428,109430,109432,109434,109436,109438,109440,109442,109444,109446,109448],{"class":201,"line":202},[199,109423,108130],{"class":205},[199,109425,1025],{"class":1018},[199,109427,2078],{"class":205},[199,109429,895],{"class":1086},[199,109431,108885],{"class":1018},[199,109433,9415],{"class":1086},[199,109435,108890],{"class":205},[199,109437,107519],{"class":1018},[199,109439,9415],{"class":1086},[199,109441,108897],{"class":205},[199,109443,3537],{"class":1086},[199,109445,64126],{"class":1018},[199,109447,9415],{"class":1086},[199,109449,108906],{"class":205},[31,109451,109452],{},"这行给电机输入一个正弦波。拆开看：",[24,109454,109455,109461,109467],{},[27,109456,109457,109460],{},[196,109458,109459],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[27,109462,109463,109466],{},[196,109464,109465],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[27,109468,109469,109472],{},[196,109470,109471],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[31,109474,109475],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[190,109477,109479],{"className":33221,"code":109478,"language":33223,"meta":57,"style":57},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[196,109480,109481],{"__ignoreMap":57},[199,109482,109483,109485,109487,109489,109491,109493],{"class":201,"line":202},[199,109484,33258],{"class":1018},[199,109486,1537],{"class":205},[199,109488,108934],{"class":898},[199,109490,107189],{"class":205},[199,109492,1915],{"class":1018},[199,109494,1554],{"class":205},[31,109496,109497,109498,109500],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[196,109499,103329],{}," 只有一个数。",[14,109502,104575],{"id":104574},[31,109504,109505],{},"输出类似:",[190,109507,109510],{"className":109508,"code":109509,"language":8084,"meta":57},[8082],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[196,109511,109509],{"__ignoreMap":57},[31,109513,109514,109515,109517],{},"这里 ",[196,109516,108385],{}," 是电机输入。",[31,109519,109520,109523,109524,109527],{},[196,109521,109522],{},"joint qpos"," 是关节角度，单位通常是弧度。",[196,109525,109526],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[31,109529,109530],{},"角度单位提示：",[190,109532,109535],{"className":109533,"code":109534,"language":8084,"meta":57},[8082],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[196,109536,109534],{"__ignoreMap":57},[31,109538,109539,109540,109542,109543,109545],{},"如果你看到 ",[196,109541,106289],{}," 是 ",[196,109544,38170],{},"，大约就是 28.6 度。",[14,109547,104607],{"id":104606},[24,109549,109550,109557,109560,109567,109570,109578,109586],{},[27,109551,104670,109552,104673,109554,31228],{},[196,109553,108570],{},[196,109555,109556],{},"gear=\"5\"",[27,109558,109559],{},"重新运行，观察关节运动是否更剧烈。",[27,109561,104670,109562,104673,109564,31228],{},[196,109563,108114],{},[196,109565,109566],{},"-0.2 0.2",[27,109568,109569],{},"重新运行，观察控制能力是否变弱。",[27,109571,109572,109573,109575,109576,31228],{},"去掉 actuator，确认 ",[196,109574,104417],{}," 变成 ",[196,109577,1025],{},[27,109579,104670,109580,104673,109582,109585],{},[196,109581,108504],{},[196,109583,109584],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[27,109587,104670,109588,104673,109590,109593],{},[196,109589,108498],{},[196,109591,109592],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109595,104712],{"id":104711},[19,109597,109599],{"id":109598},"indexerror-index-0-is-out-of-bounds",[196,109600,109601],{},"IndexError: index 0 is out of bounds",[31,109603,109604,109605,109607],{},"原因是 ",[196,109606,108251],{},"，没有 actuator。",[19,109609,109610],{"id":109610},"关节几乎不动",[31,109612,109613],{},"可能原因:",[24,109615,109616,109621,109625,109631],{},[27,109617,109618,109620],{},[196,109619,109326],{}," 太小",[27,109622,109623,109620],{},[196,109624,108114],{},[27,109626,109627,109630],{},[196,109628,109629],{},"damping"," 太大",[27,109632,109633],{},"重力方向导致运动不明显",[19,109635,109636],{"id":109636},"模型编译失败",[31,109638,109639,109640,109642],{},"检查 actuator 引用的 ",[196,109641,108561],{}," 是否存在，joint 名称是否拼写一致。",[19,109644,109646,109648],{"id":109645},"datactrl0-写了但没有效果",[196,109647,108385],{}," 写了但没有效果",[31,109650,104834],{},[24,109652,109653,109658,109661,109666,109671],{},[27,109654,109655,109657],{},[196,109656,104417],{}," 是否大于 0。",[27,109659,109660],{},"motor 是否引用了正确 joint。",[27,109662,109663,109665],{},[196,109664,109326],{}," 是否太小。",[27,109667,109668,109670],{},[196,109669,108114],{}," 是否把输入限制得太小。",[27,109672,109673],{},"body 是否真的有可动 joint。",[19,109675,109676],{"id":109676},"控制输入超过范围会怎样",[31,109678,109679],{},"如果设置了：",[190,109681,109683],{"className":2763,"code":109682,"language":2765,"meta":57,"style":57},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[196,109684,109685],{"__ignoreMap":57},[199,109686,109687],{"class":201,"line":202},[199,109688,109682],{"class":205},[31,109690,109691],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[190,109693,109695],{"className":33221,"code":109694,"language":33223,"meta":57,"style":57},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[196,109696,109697,109717],{"__ignoreMap":57},[199,109698,109699,109702,109704,109707,109709,109711,109713,109715],{"class":201,"line":202},[199,109700,109701],{"class":205},"action ",[199,109703,895],{"class":1086},[199,109705,109706],{"class":205}," np.clip(action, ",[199,109708,1998],{"class":1086},[199,109710,107519],{"class":1018},[199,109712,1912],{"class":205},[199,109714,107519],{"class":1018},[199,109716,1594],{"class":205},[199,109718,109719,109721,109723,109725,109727],{"class":201,"line":36},[199,109720,108130],{"class":205},[199,109722,1025],{"class":1018},[199,109724,2078],{"class":205},[199,109726,895],{"class":1086},[199,109728,109729],{"class":205}," action\n",[14,109731,104866],{"id":104865},[31,109733,109734],{},"这一章建立了控制任务的基本形式：",[190,109736,109739],{"className":109737,"code":109738,"language":8084,"meta":57},[8082],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[196,109740,109738],{"__ignoreMap":57},[31,109742,109743],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1002,109745,109746],{},"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":57,"searchDepth":36,"depth":36,"links":109748},[109749,109750,109751,109756,109760,109761,109762,109770],{"id":102905,"depth":36,"text":102906},{"id":103028,"depth":36,"text":103029},{"id":103303,"depth":36,"text":103304,"children":109752},[109753,109754,109755],{"id":108392,"depth":73,"text":108393},{"id":108442,"depth":73,"text":108443},{"id":108508,"depth":73,"text":108509},{"id":103511,"depth":36,"text":103512,"children":109757},[109758,109759],{"id":103831,"depth":73,"text":103831},{"id":103967,"depth":73,"text":103967},{"id":104574,"depth":36,"text":104575},{"id":104606,"depth":36,"text":104607},{"id":104711,"depth":36,"text":104712,"children":109763},[109764,109765,109766,109767,109769],{"id":109598,"depth":73,"text":109601},{"id":109610,"depth":73,"text":109610},{"id":109636,"depth":73,"text":109636},{"id":109645,"depth":73,"text":109768},"data.ctrl[0] 写了但没有效果",{"id":109676,"depth":73,"text":109676},{"id":104865,"depth":36,"text":104866},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108080,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109777,"title":109778,"body":109779,"description":57,"extension":3024,"meta":111688,"navigation":906,"path":111689,"seo":111690,"stem":111691,"__hash__":111692},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109780,"toc":111664},[109781,109784,109786,109789,109797,109800,109817,109820,109845,109848,109894,109896,109898,109953,109955,109974,109976,110019,110022,110039,110042,110058,110068,110075,110077,110080,110083,110117,110120,110168,110172,110175,110189,110198,110202,110205,110230,110233,110237,110250,110253,110259,110262,110277,110279,110282,110542,110544,110556,110559,110871,110873,110885,110887,110890,110905,110910,110913,110935,110938,110941,110975,110978,110982,110993,110996,111013,111016,111030,111037,111057,111064,111078,111081,111093,111108,111128,111131,111153,111156,111160,111175,111186,111201,111204,111234,111250,111279,111287,111311,111314,111332,111342,111354,111361,111370,111376,111385,111388,111390,111399,111402,111417,111419,111422,111433,111436,111447,111450,111468,111470,111487,111490,111518,111520,111524,111527,111557,111563,111566,111570,111578,111581,111583,111604,111607,111610,111626,111629,111645,111647,111650,111661],[10,109782,109778],{"id":109783},"_5viewer-可视化与-renderer-离屏渲染",[14,109785,102906],{"id":102905},[31,109787,109788],{},"本章掌握两类可视化方式:",[24,109790,109791,109794],{},[27,109792,109793],{},"交互式 viewer: 适合人工观察仿真",[27,109795,109796],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[31,109798,109799],{},"使用官方接口:",[190,109801,109803],{"className":33221,"code":109802,"language":33223,"meta":57,"style":57},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[196,109804,109805,109812],{"__ignoreMap":57},[199,109806,109807,109809],{"class":201,"line":202},[199,109808,33235],{"class":1086},[199,109810,109811],{"class":205}," mujoco.viewer\n",[199,109813,109814],{"class":201,"line":36},[199,109815,109816],{"class":205},"mujoco.viewer.launch_passive(model, data)\n",[31,109818,109819],{},"以及:",[190,109821,109823],{"className":33221,"code":109822,"language":33223,"meta":57,"style":57},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[196,109824,109825,109835],{"__ignoreMap":57},[199,109826,109827,109830,109832],{"class":201,"line":202},[199,109828,109829],{"class":205},"renderer ",[199,109831,895],{"class":1086},[199,109833,109834],{"class":205}," mujoco.Renderer(model)\n",[199,109836,109837,109840,109842],{"class":201,"line":36},[199,109838,109839],{"class":205},"image ",[199,109841,895],{"class":1086},[199,109843,109844],{"class":205}," renderer.render()\n",[31,109846,109847],{},"新手建议先理解二者区别：",[3227,109849,109850,109866],{},[3230,109851,109852],{},[3233,109853,109854,109857,109860,109863],{},[3236,109855,109856],{"align":26580},"工具",[3236,109858,109859],{"align":26580},"用途",[3236,109861,109862],{"align":26580},"是否打开窗口",[3236,109864,109865],{"align":26580},"常见场景",[3273,109867,109868,109881],{},[3233,109869,109870,109873,109876,109878],{},[3278,109871,109872],{"align":26580},"Viewer",[3278,109874,109875],{"align":26580},"人眼实时观察仿真",[3278,109877,106924],{"align":26580},[3278,109879,109880],{"align":26580},"调试模型、看控制效果",[3233,109882,109883,109886,109889,109891],{},[3278,109884,109885],{"align":26580},"Renderer",[3278,109887,109888],{"align":26580},"生成图像数组",[3278,109890,106937],{"align":26580},[3278,109892,109893],{"align":26580},"保存图片、训练视觉策略、服务器批量采集",[14,109895,103029],{"id":103028},[31,109897,103032],{},[190,109899,109901],{"className":26666,"code":109900,"language":26668,"meta":57,"style":57},"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",[196,109902,109903,109915,109925,109933,109941],{"__ignoreMap":57},[199,109904,109905,109907,109909,109911,109913],{"class":201,"line":202},[199,109906,27420],{"class":878},[199,109908,29158],{"class":898},[199,109910,26678],{"class":898},[199,109912,29243],{"class":1018},[199,109914,27522],{"class":1018},[199,109916,109917,109919,109921,109923],{"class":201,"line":36},[199,109918,103067],{"class":898},[199,109920,103070],{"class":898},[199,109922,103073],{"class":898},[199,109924,27522],{"class":1018},[199,109926,109927,109929,109931],{"class":201,"line":73},[199,109928,103080],{"class":898},[199,109930,103083],{"class":898},[199,109932,27522],{"class":1018},[199,109934,109935,109937,109939],{"class":201,"line":333},[199,109936,103090],{"class":898},[199,109938,103093],{"class":898},[199,109940,27522],{"class":1018},[199,109942,109943,109945,109947,109949,109951],{"class":201,"line":227},[199,109944,103100],{"class":898},[199,109946,103103],{"class":898},[199,109948,103106],{"class":898},[199,109950,103109],{"class":898},[199,109952,104775],{"class":898},[31,109954,105078],{},[190,109956,109958],{"className":26666,"code":109957,"language":26668,"meta":57,"style":57},"pip install \"mujoco>=2.3\" numpy pillow\n",[196,109959,109960],{"__ignoreMap":57},[199,109961,109962,109964,109966,109968,109971],{"class":201,"line":202},[199,109963,26675],{"class":878},[199,109965,26678],{"class":898},[199,109967,103189],{"class":898},[199,109969,109970],{"class":898}," numpy",[199,109972,109973],{"class":898}," pillow\n",[31,109975,105095],{},[190,109977,109979],{"className":26666,"code":109978,"language":26668,"meta":57,"style":57},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[196,109980,109981,109998,110007],{"__ignoreMap":57},[199,109982,109983,109985,109987,109989,109992,109994,109996],{"class":201,"line":202},[199,109984,33173],{"class":878},[199,109986,32019],{"class":898},[199,109988,27959],{"class":1018},[199,109990,109991],{"class":898}," mujoco-render",[199,109993,103234],{"class":898},[199,109995,103237],{"class":1018},[199,109997,103240],{"class":1018},[199,109999,110000,110002,110004],{"class":201,"line":36},[199,110001,33173],{"class":878},[199,110003,103247],{"class":898},[199,110005,110006],{"class":898}," mujoco-render\n",[199,110008,110009,110011,110013,110015,110017],{"class":201,"line":73},[199,110010,26675],{"class":878},[199,110012,26678],{"class":898},[199,110014,103189],{"class":898},[199,110016,109970],{"class":898},[199,110018,109973],{"class":898},[31,110020,110021],{},"离屏渲染后端:",[190,110023,110025],{"className":26666,"code":110024,"language":26668,"meta":57,"style":57},"export MUJOCO_GL=egl\n",[196,110026,110027],{"__ignoreMap":57},[199,110028,110029,110031,110034,110036],{"class":201,"line":202},[199,110030,27886],{"class":1086},[199,110032,110033],{"class":205}," MUJOCO_GL",[199,110035,895],{"class":1086},[199,110037,110038],{"class":205},"egl\n",[31,110040,110041],{},"或:",[190,110043,110045],{"className":26666,"code":110044,"language":26668,"meta":57,"style":57},"export MUJOCO_GL=osmesa\n",[196,110046,110047],{"__ignoreMap":57},[199,110048,110049,110051,110053,110055],{"class":201,"line":202},[199,110050,27886],{"class":1086},[199,110052,110033],{"class":205},[199,110054,895],{"class":1086},[199,110056,110057],{"class":205},"osmesa\n",[31,110059,110060,110061,110064,110065,31228],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[196,110062,110063],{},"egl"," 失败，再尝试 ",[196,110066,110067],{},"osmesa",[31,110069,110070,110071,110074],{},"如果你在本机桌面环境运行，通常先不要设置 ",[196,110072,110073],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,110076,103304],{"id":103303},[31,110078,110079],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[31,110081,110082],{},"典型 viewer 流程:",[190,110084,110086],{"className":33221,"code":110085,"language":33223,"meta":57,"style":57},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[196,110087,110088,110101,110108,110112],{"__ignoreMap":57},[199,110089,110090,110093,110096,110098],{"class":201,"line":202},[199,110091,110092],{"class":1086},"with",[199,110094,110095],{"class":205}," mujoco.viewer.launch_passive(model, data) ",[199,110097,34225],{"class":1086},[199,110099,110100],{"class":205}," viewer:\n",[199,110102,110103,110105],{"class":201,"line":36},[199,110104,5166],{"class":1086},[199,110106,110107],{"class":205}," viewer.is_running():\n",[199,110109,110110],{"class":201,"line":73},[199,110111,103775],{"class":205},[199,110113,110114],{"class":201,"line":333},[199,110115,110116],{"class":205},"        viewer.sync()\n",[31,110118,110119],{},"典型 renderer 流程:",[190,110121,110123],{"className":33221,"code":110122,"language":33223,"meta":57,"style":57},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[196,110124,110125,110151,110155,110160],{"__ignoreMap":57},[199,110126,110127,110129,110131,110134,110136,110138,110140,110142,110144,110146,110149],{"class":201,"line":202},[199,110128,109829],{"class":205},[199,110130,895],{"class":1086},[199,110132,110133],{"class":205}," mujoco.Renderer(model, ",[199,110135,27825],{"class":8113},[199,110137,895],{"class":1086},[199,110139,45183],{"class":1018},[199,110141,1912],{"class":205},[199,110143,27821],{"class":8113},[199,110145,895],{"class":1086},[199,110147,110148],{"class":1018},"640",[199,110150,1594],{"class":205},[199,110152,110153],{"class":201,"line":36},[199,110154,106764],{"class":205},[199,110156,110157],{"class":201,"line":73},[199,110158,110159],{"class":205},"renderer.update_scene(data)\n",[199,110161,110162,110164,110166],{"class":201,"line":333},[199,110163,109839],{"class":205},[199,110165,895],{"class":1086},[199,110167,109844],{"class":205},[19,110169,110171],{"id":110170},"viewer-的同步逻辑","viewer 的同步逻辑",[31,110173,110174],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[190,110176,110178],{"className":33221,"code":110177,"language":33223,"meta":57,"style":57},"mujoco.mj_step(model, data)\nviewer.sync()\n",[196,110179,110180,110184],{"__ignoreMap":57},[199,110181,110182],{"class":201,"line":202},[199,110183,106764],{"class":205},[199,110185,110186],{"class":201,"line":36},[199,110187,110188],{"class":205},"viewer.sync()\n",[31,110190,110191,110193,110194,110197],{},[196,110192,103474],{}," 负责算物理，",[196,110195,110196],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[19,110199,110201],{"id":110200},"为什么要-sleep","为什么要 sleep",[31,110203,110204],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[190,110206,110208],{"className":33221,"code":110207,"language":33223,"meta":57,"style":57},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[196,110209,110210],{"__ignoreMap":57},[199,110211,110212,110215,110217,110220,110222,110225,110227],{"class":201,"line":202},[199,110213,110214],{"class":205},"sleep_time ",[199,110216,895],{"class":1086},[199,110218,110219],{"class":205}," model.opt.timestep ",[199,110221,1998],{"class":1086},[199,110223,110224],{"class":205}," (time.time() ",[199,110226,1998],{"class":1086},[199,110228,110229],{"class":205}," step_start)\n",[31,110231,110232],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[19,110234,110236],{"id":110235},"renderer-输出是什么","renderer 输出是什么",[190,110238,110240],{"className":33221,"code":110239,"language":33223,"meta":57,"style":57},"image = renderer.render()\n",[196,110241,110242],{"__ignoreMap":57},[199,110243,110244,110246,110248],{"class":201,"line":202},[199,110245,109839],{"class":205},[199,110247,895],{"class":1086},[199,110249,109844],{"class":205},[31,110251,110252],{},"得到的是 NumPy 数组，形状通常是：",[190,110254,110257],{"className":110255,"code":110256,"language":8084,"meta":57},[8082],"(height, width, 3)\n",[196,110258,110256],{"__ignoreMap":57},[31,110260,110261],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[190,110263,110265],{"className":33221,"code":110264,"language":33223,"meta":57,"style":57},"Image.fromarray(image).save(\"render_output.png\")\n",[196,110266,110267],{"__ignoreMap":57},[199,110268,110269,110272,110275],{"class":201,"line":202},[199,110270,110271],{"class":205},"Image.fromarray(image).save(",[199,110273,110274],{"class":898},"\"render_output.png\"",[199,110276,1594],{"class":205},[14,110278,103512],{"id":103511},[31,110280,110281],{},"交互式 Viewer:",[190,110283,110285],{"className":33221,"code":110284,"language":33223,"meta":57,"style":57},"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",[196,110286,110287,110293,110297,110303,110309,110313,110317,110325,110330,110334,110338,110342,110347,110352,110356,110360,110364,110369,110373,110377,110381,110385,110389,110393,110405,110417,110425,110429,110439,110459,110469,110474,110479,110483,110500,110513,110518,110522,110526,110538],{"__ignoreMap":57},[199,110288,110289,110291],{"class":201,"line":202},[199,110290,33235],{"class":1086},[199,110292,34671],{"class":205},[199,110294,110295],{"class":201,"line":36},[199,110296,907],{"emptyLinePlaceholder":906},[199,110298,110299,110301],{"class":201,"line":73},[199,110300,33235],{"class":1086},[199,110302,103560],{"class":205},[199,110304,110305,110307],{"class":201,"line":333},[199,110306,33235],{"class":1086},[199,110308,109811],{"class":205},[199,110310,110311],{"class":201,"line":227},[199,110312,907],{"emptyLinePlaceholder":906},[199,110314,110315],{"class":201,"line":238},[199,110316,907],{"emptyLinePlaceholder":906},[199,110318,110319,110321,110323],{"class":201,"line":252},[199,110320,103573],{"class":1018},[199,110322,16425],{"class":1086},[199,110324,103578],{"class":898},[199,110326,110327],{"class":201,"line":388},[199,110328,110329],{"class":898},"\u003Cmujoco model=\"viewer_demo\">\n",[199,110331,110332],{"class":201,"line":415},[199,110333,103588],{"class":898},[199,110335,110336],{"class":201,"line":426},[199,110337,907],{"emptyLinePlaceholder":906},[199,110339,110340],{"class":201,"line":1015},[199,110341,103597],{"class":898},[199,110343,110344],{"class":201,"line":1031},[199,110345,110346],{"class":898},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[199,110348,110349],{"class":201,"line":1043},[199,110350,110351],{"class":898},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[199,110353,110354],{"class":201,"line":1049},[199,110355,907],{"emptyLinePlaceholder":906},[199,110357,110358],{"class":201,"line":1054},[199,110359,103611],{"class":898},[199,110361,110362],{"class":201,"line":1062},[199,110363,103616],{"class":898},[199,110365,110366],{"class":201,"line":1075},[199,110367,110368],{"class":898},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[199,110370,110371],{"class":201,"line":1092},[199,110372,103626],{"class":898},[199,110374,110375],{"class":201,"line":1107},[199,110376,103631],{"class":898},[199,110378,110379],{"class":201,"line":1128},[199,110380,103636],{"class":898},[199,110382,110383],{"class":201,"line":1146},[199,110384,97957],{"class":898},[199,110386,110387],{"class":201,"line":1163},[199,110388,907],{"emptyLinePlaceholder":906},[199,110390,110391],{"class":201,"line":1176},[199,110392,907],{"emptyLinePlaceholder":906},[199,110394,110395,110397,110399,110401,110403],{"class":201,"line":1189},[199,110396,34789],{"class":1086},[199,110398,4889],{"class":878},[199,110400,103657],{"class":205},[199,110402,97945],{"class":1018},[199,110404,6640],{"class":205},[199,110406,110407,110409,110411,110413,110415],{"class":201,"line":1202},[199,110408,103666],{"class":205},[199,110410,895],{"class":1086},[199,110412,103671],{"class":205},[199,110414,103573],{"class":1018},[199,110416,1594],{"class":205},[199,110418,110419,110421,110423],{"class":201,"line":1207},[199,110420,103680],{"class":205},[199,110422,895],{"class":1086},[199,110424,103685],{"class":205},[199,110426,110427],{"class":201,"line":1212},[199,110428,907],{"emptyLinePlaceholder":906},[199,110430,110431,110433,110435,110437],{"class":201,"line":1225},[199,110432,37019],{"class":1086},[199,110434,110095],{"class":205},[199,110436,34225],{"class":1086},[199,110438,110100],{"class":205},[199,110440,110441,110444,110447,110449,110452,110454,110457],{"class":201,"line":1236},[199,110442,110443],{"class":1086},"        while",[199,110445,110446],{"class":205}," viewer.is_running() ",[199,110448,33305],{"class":1086},[199,110450,110451],{"class":205}," data.time ",[199,110453,887],{"class":1086},[199,110455,110456],{"class":1018}," 5.0",[199,110458,6640],{"class":205},[199,110460,110461,110464,110466],{"class":201,"line":1249},[199,110462,110463],{"class":205},"            step_start ",[199,110465,895],{"class":1086},[199,110467,110468],{"class":205}," time.time()\n",[199,110470,110471],{"class":201,"line":1262},[199,110472,110473],{"class":205},"            mujoco.mj_step(model, data)\n",[199,110475,110476],{"class":201,"line":1275},[199,110477,110478],{"class":205},"            viewer.sync()\n",[199,110480,110481],{"class":201,"line":1287},[199,110482,907],{"emptyLinePlaceholder":906},[199,110484,110485,110488,110490,110492,110494,110496,110498],{"class":201,"line":1292},[199,110486,110487],{"class":205},"            sleep_time ",[199,110489,895],{"class":1086},[199,110491,110219],{"class":205},[199,110493,1998],{"class":1086},[199,110495,110224],{"class":205},[199,110497,1998],{"class":1086},[199,110499,110229],{"class":205},[199,110501,110502,110504,110507,110509,110511],{"class":201,"line":1297},[199,110503,7539],{"class":1086},[199,110505,110506],{"class":205}," sleep_time ",[199,110508,1217],{"class":1086},[199,110510,1621],{"class":1018},[199,110512,6640],{"class":205},[199,110514,110515],{"class":201,"line":1310},[199,110516,110517],{"class":205},"                time.sleep(sleep_time)\n",[199,110519,110520],{"class":201,"line":1315},[199,110521,907],{"emptyLinePlaceholder":906},[199,110523,110524],{"class":201,"line":1330},[199,110525,907],{"emptyLinePlaceholder":906},[199,110527,110528,110530,110532,110534,110536],{"class":201,"line":1335},[199,110529,4470],{"class":1086},[199,110531,34062],{"class":1018},[199,110533,103818],{"class":1086},[199,110535,103821],{"class":898},[199,110537,6640],{"class":205},[199,110539,110540],{"class":201,"line":1340},[199,110541,103828],{"class":205},[31,110543,105829],{},[190,110545,110547],{"className":26666,"code":110546,"language":26668,"meta":57,"style":57},"touch ch5_viewer.py\n",[196,110548,110549],{"__ignoreMap":57},[199,110550,110551,110553],{"class":201,"line":202},[199,110552,103542],{"class":878},[199,110554,110555],{"class":898}," ch5_viewer.py\n",[31,110557,110558],{},"离屏 Renderer 保存图片:",[190,110560,110562],{"className":33221,"code":110561,"language":33223,"meta":57,"style":57},"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",[196,110563,110564,110576,110580,110586,110596,110600,110604,110612,110617,110621,110625,110629,110633,110638,110642,110646,110650,110654,110658,110662,110666,110670,110674,110678,110682,110694,110706,110714,110739,110743,110759,110763,110767,110782,110791,110795,110809,110814,110819,110823,110835,110847,110851,110855,110867],{"__ignoreMap":57},[199,110565,110566,110568,110571,110573],{"class":201,"line":202},[199,110567,33579],{"class":1086},[199,110569,110570],{"class":205}," pathlib ",[199,110572,33235],{"class":1086},[199,110574,110575],{"class":205}," Path\n",[199,110577,110578],{"class":201,"line":36},[199,110579,907],{"emptyLinePlaceholder":906},[199,110581,110582,110584],{"class":201,"line":73},[199,110583,33235],{"class":1086},[199,110585,103560],{"class":205},[199,110587,110588,110590,110592,110594],{"class":201,"line":333},[199,110589,33579],{"class":1086},[199,110591,50103],{"class":1018},[199,110593,50106],{"class":1086},[199,110595,50109],{"class":205},[199,110597,110598],{"class":201,"line":227},[199,110599,907],{"emptyLinePlaceholder":906},[199,110601,110602],{"class":201,"line":238},[199,110603,907],{"emptyLinePlaceholder":906},[199,110605,110606,110608,110610],{"class":201,"line":252},[199,110607,103573],{"class":1018},[199,110609,16425],{"class":1086},[199,110611,103578],{"class":898},[199,110613,110614],{"class":201,"line":388},[199,110615,110616],{"class":898},"\u003Cmujoco model=\"renderer_demo\">\n",[199,110618,110619],{"class":201,"line":415},[199,110620,103588],{"class":898},[199,110622,110623],{"class":201,"line":426},[199,110624,907],{"emptyLinePlaceholder":906},[199,110626,110627],{"class":201,"line":1015},[199,110628,103597],{"class":898},[199,110630,110631],{"class":201,"line":1031},[199,110632,110346],{"class":898},[199,110634,110635],{"class":201,"line":1043},[199,110636,110637],{"class":898},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[199,110639,110640],{"class":201,"line":1049},[199,110641,110351],{"class":898},[199,110643,110644],{"class":201,"line":1054},[199,110645,907],{"emptyLinePlaceholder":906},[199,110647,110648],{"class":201,"line":1062},[199,110649,103611],{"class":898},[199,110651,110652],{"class":201,"line":1075},[199,110653,103616],{"class":898},[199,110655,110656],{"class":201,"line":1092},[199,110657,110368],{"class":898},[199,110659,110660],{"class":201,"line":1107},[199,110661,103626],{"class":898},[199,110663,110664],{"class":201,"line":1128},[199,110665,103631],{"class":898},[199,110667,110668],{"class":201,"line":1146},[199,110669,103636],{"class":898},[199,110671,110672],{"class":201,"line":1163},[199,110673,97957],{"class":898},[199,110675,110676],{"class":201,"line":1176},[199,110677,907],{"emptyLinePlaceholder":906},[199,110679,110680],{"class":201,"line":1189},[199,110681,907],{"emptyLinePlaceholder":906},[199,110683,110684,110686,110688,110690,110692],{"class":201,"line":1202},[199,110685,34789],{"class":1086},[199,110687,4889],{"class":878},[199,110689,103657],{"class":205},[199,110691,97945],{"class":1018},[199,110693,6640],{"class":205},[199,110695,110696,110698,110700,110702,110704],{"class":201,"line":1207},[199,110697,103666],{"class":205},[199,110699,895],{"class":1086},[199,110701,103671],{"class":205},[199,110703,103573],{"class":1018},[199,110705,1594],{"class":205},[199,110707,110708,110710,110712],{"class":201,"line":1212},[199,110709,103680],{"class":205},[199,110711,895],{"class":1086},[199,110713,103685],{"class":205},[199,110715,110716,110719,110721,110723,110725,110727,110729,110731,110733,110735,110737],{"class":201,"line":1225},[199,110717,110718],{"class":205},"    renderer ",[199,110720,895],{"class":1086},[199,110722,110133],{"class":205},[199,110724,27825],{"class":8113},[199,110726,895],{"class":1086},[199,110728,45183],{"class":1018},[199,110730,1912],{"class":205},[199,110732,27821],{"class":8113},[199,110734,895],{"class":1086},[199,110736,110148],{"class":1018},[199,110738,1594],{"class":205},[199,110740,110741],{"class":201,"line":1236},[199,110742,907],{"emptyLinePlaceholder":906},[199,110744,110745,110747,110749,110751,110753,110755,110757],{"class":201,"line":1249},[199,110746,1937],{"class":1086},[199,110748,103760],{"class":205},[199,110750,28886],{"class":1086},[199,110752,35285],{"class":1018},[199,110754,1537],{"class":205},[199,110756,3396],{"class":1018},[199,110758,33628],{"class":205},[199,110760,110761],{"class":201,"line":1262},[199,110762,103775],{"class":205},[199,110764,110765],{"class":201,"line":1275},[199,110766,907],{"emptyLinePlaceholder":906},[199,110768,110769,110772,110775,110777,110780],{"class":201,"line":1287},[199,110770,110771],{"class":205},"    renderer.update_scene(data, ",[199,110773,110774],{"class":8113},"camera",[199,110776,895],{"class":1086},[199,110778,110779],{"class":898},"\"fixed_camera\"",[199,110781,1594],{"class":205},[199,110783,110784,110787,110789],{"class":201,"line":1292},[199,110785,110786],{"class":205},"    image ",[199,110788,895],{"class":1086},[199,110790,109844],{"class":205},[199,110792,110793],{"class":201,"line":1297},[199,110794,907],{"emptyLinePlaceholder":906},[199,110796,110797,110800,110802,110805,110807],{"class":201,"line":1310},[199,110798,110799],{"class":205},"    output_path ",[199,110801,895],{"class":1086},[199,110803,110804],{"class":205}," Path(",[199,110806,110274],{"class":898},[199,110808,1594],{"class":205},[199,110810,110811],{"class":201,"line":1315},[199,110812,110813],{"class":205},"    Image.fromarray(image).save(output_path)\n",[199,110815,110816],{"class":201,"line":1330},[199,110817,110818],{"class":205},"    renderer.close()\n",[199,110820,110821],{"class":201,"line":1335},[199,110822,907],{"emptyLinePlaceholder":906},[199,110824,110825,110827,110829,110832],{"class":201,"line":1340},[199,110826,34141],{"class":1018},[199,110828,1537],{"class":205},[199,110830,110831],{"class":898},"\"saved:\"",[199,110833,110834],{"class":205},", output_path.resolve())\n",[199,110836,110837,110839,110841,110844],{"class":201,"line":1352},[199,110838,34141],{"class":1018},[199,110840,1537],{"class":205},[199,110842,110843],{"class":898},"\"image shape:\"",[199,110845,110846],{"class":205},", image.shape)\n",[199,110848,110849],{"class":201,"line":1367},[199,110850,907],{"emptyLinePlaceholder":906},[199,110852,110853],{"class":201,"line":1381},[199,110854,907],{"emptyLinePlaceholder":906},[199,110856,110857,110859,110861,110863,110865],{"class":201,"line":1396},[199,110858,4470],{"class":1086},[199,110860,34062],{"class":1018},[199,110862,103818],{"class":1086},[199,110864,103821],{"class":898},[199,110866,6640],{"class":205},[199,110868,110869],{"class":201,"line":1401},[199,110870,103828],{"class":205},[31,110872,105829],{},[190,110874,110876],{"className":26666,"code":110875,"language":26668,"meta":57,"style":57},"touch ch5_renderer.py\n",[196,110877,110878],{"__ignoreMap":57},[199,110879,110880,110882],{"class":201,"line":202},[199,110881,103542],{"class":878},[199,110883,110884],{"class":898}," ch5_renderer.py\n",[19,110886,103831],{"id":103831},[31,110888,110889],{},"viewer 上下文：",[190,110891,110893],{"className":33221,"code":110892,"language":33223,"meta":57,"style":57},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[196,110894,110895],{"__ignoreMap":57},[199,110896,110897,110899,110901,110903],{"class":201,"line":202},[199,110898,110092],{"class":1086},[199,110900,110095],{"class":205},[199,110902,34225],{"class":1086},[199,110904,110100],{"class":205},[31,110906,110907,110909],{},[196,110908,110092],{}," 语句会创建窗口，并在退出时自动清理资源。",[31,110911,110912],{},"窗口循环：",[190,110914,110916],{"className":33221,"code":110915,"language":33223,"meta":57,"style":57},"while viewer.is_running() and data.time \u003C 5.0:\n",[196,110917,110918],{"__ignoreMap":57},[199,110919,110920,110923,110925,110927,110929,110931,110933],{"class":201,"line":202},[199,110921,110922],{"class":1086},"while",[199,110924,110446],{"class":205},[199,110926,33305],{"class":1086},[199,110928,110451],{"class":205},[199,110930,887],{"class":1086},[199,110932,110456],{"class":1018},[199,110934,6640],{"class":205},[31,110936,110937],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[31,110939,110940],{},"固定相机：",[190,110942,110944],{"className":2763,"code":110943,"language":2765,"meta":57,"style":57},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[196,110945,110946],{"__ignoreMap":57},[199,110947,110948,110950,110952,110954,110956,110958,110960,110962,110965,110968,110970,110973],{"class":201,"line":202},[199,110949,887],{"class":205},[199,110951,110774],{"class":874},[199,110953,967],{"class":878},[199,110955,895],{"class":205},[199,110957,110779],{"class":898},[199,110959,103365],{"class":878},[199,110961,895],{"class":205},[199,110963,110964],{"class":898},"\"1.5 -2.0 1.2\"",[199,110966,110967],{"class":878}," xyaxes",[199,110969,895],{"class":205},[199,110971,110972],{"class":898},"\"1 0.75 0 0 0 1\"",[199,110974,103403],{"class":205},[31,110976,110977],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[19,110979,110981],{"id":110980},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[190,110983,110985],{"className":33221,"code":110984,"language":33223,"meta":57,"style":57},"import time\n",[196,110986,110987],{"__ignoreMap":57},[199,110988,110989,110991],{"class":201,"line":202},[199,110990,33235],{"class":1086},[199,110992,34671],{"class":205},[31,110994,110995],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[190,110997,110999],{"className":33221,"code":110998,"language":33223,"meta":57,"style":57},"import mujoco\nimport mujoco.viewer\n",[196,111000,111001,111007],{"__ignoreMap":57},[199,111002,111003,111005],{"class":201,"line":202},[199,111004,33235],{"class":1086},[199,111006,103560],{"class":205},[199,111008,111009,111011],{"class":201,"line":36},[199,111010,33235],{"class":1086},[199,111012,109811],{"class":205},[31,111014,111015],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[190,111017,111018],{"className":33221,"code":110892,"language":33223,"meta":57,"style":57},[196,111019,111020],{"__ignoreMap":57},[199,111021,111022,111024,111026,111028],{"class":201,"line":202},[199,111023,110092],{"class":1086},[199,111025,110095],{"class":205},[199,111027,34225],{"class":1086},[199,111029,110100],{"class":205},[31,111031,111032,111033,111036],{},"打开一个 viewer 窗口。",[196,111034,111035],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[190,111038,111039],{"className":33221,"code":110915,"language":33223,"meta":57,"style":57},[196,111040,111041],{"__ignoreMap":57},[199,111042,111043,111045,111047,111049,111051,111053,111055],{"class":201,"line":202},[199,111044,110922],{"class":1086},[199,111046,110446],{"class":205},[199,111048,33305],{"class":1086},[199,111050,110451],{"class":205},[199,111052,887],{"class":1086},[199,111054,110456],{"class":1018},[199,111056,6640],{"class":205},[31,111058,111059,111060,111063],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[196,111061,111062],{},"viewer.is_running()"," 会变成 false，循环结束。",[190,111065,111067],{"className":33221,"code":111066,"language":33223,"meta":57,"style":57},"step_start = time.time()\n",[196,111068,111069],{"__ignoreMap":57},[199,111070,111071,111074,111076],{"class":201,"line":202},[199,111072,111073],{"class":205},"step_start ",[199,111075,895],{"class":1086},[199,111077,110468],{"class":205},[31,111079,111080],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[190,111082,111083],{"className":33221,"code":110177,"language":33223,"meta":57,"style":57},[196,111084,111085,111089],{"__ignoreMap":57},[199,111086,111087],{"class":201,"line":202},[199,111088,106764],{"class":205},[199,111090,111091],{"class":201,"line":36},[199,111092,110188],{"class":205},[31,111094,111095,111097,111098,111100,111101,111103,111104,111107],{},[196,111096,103474],{}," 推进物理仿真。",[196,111099,110196],{}," 把最新的 ",[196,111102,36242],{}," 同步到窗口里显示。没有 ",[196,111105,111106],{},"sync()","，窗口可能看不到最新状态。",[190,111109,111110],{"className":33221,"code":110207,"language":33223,"meta":57,"style":57},[196,111111,111112],{"__ignoreMap":57},[199,111113,111114,111116,111118,111120,111122,111124,111126],{"class":201,"line":202},[199,111115,110214],{"class":205},[199,111117,895],{"class":1086},[199,111119,110219],{"class":205},[199,111121,1998],{"class":1086},[199,111123,110224],{"class":205},[199,111125,1998],{"class":1086},[199,111127,110229],{"class":205},[31,111129,111130],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[190,111132,111134],{"className":33221,"code":111133,"language":33223,"meta":57,"style":57},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[196,111135,111136,111148],{"__ignoreMap":57},[199,111137,111138,111140,111142,111144,111146],{"class":201,"line":202},[199,111139,4470],{"class":1086},[199,111141,110506],{"class":205},[199,111143,1217],{"class":1086},[199,111145,1621],{"class":1018},[199,111147,6640],{"class":205},[199,111149,111150],{"class":201,"line":36},[199,111151,111152],{"class":205},"    time.sleep(sleep_time)\n",[31,111154,111155],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[19,111157,111159],{"id":111158},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[190,111161,111163],{"className":33221,"code":111162,"language":33223,"meta":57,"style":57},"from pathlib import Path\n",[196,111164,111165],{"__ignoreMap":57},[199,111166,111167,111169,111171,111173],{"class":201,"line":202},[199,111168,33579],{"class":1086},[199,111170,110570],{"class":205},[199,111172,33235],{"class":1086},[199,111174,110575],{"class":205},[31,111176,111177,111178,111181,111182,111185],{},"导入 ",[196,111179,111180],{},"Path","，用来处理文件路径。相比直接写字符串，",[196,111183,111184],{},"Path(\"render_output.png\")"," 更清晰。",[190,111187,111189],{"className":33221,"code":111188,"language":33223,"meta":57,"style":57},"from PIL import Image\n",[196,111190,111191],{"__ignoreMap":57},[199,111192,111193,111195,111197,111199],{"class":201,"line":202},[199,111194,33579],{"class":1086},[199,111196,50103],{"class":1018},[199,111198,50106],{"class":1086},[199,111200,50109],{"class":205},[31,111202,111203],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[190,111205,111206],{"className":2763,"code":110943,"language":2765,"meta":57,"style":57},[196,111207,111208],{"__ignoreMap":57},[199,111209,111210,111212,111214,111216,111218,111220,111222,111224,111226,111228,111230,111232],{"class":201,"line":202},[199,111211,887],{"class":205},[199,111213,110774],{"class":874},[199,111215,967],{"class":878},[199,111217,895],{"class":205},[199,111219,110779],{"class":898},[199,111221,103365],{"class":878},[199,111223,895],{"class":205},[199,111225,110964],{"class":898},[199,111227,110967],{"class":878},[199,111229,895],{"class":205},[199,111231,110972],{"class":898},[199,111233,103403],{"class":205},[31,111235,111236,111237,111239,111240,111242,111243,111246,111247,111249],{},"定义一个相机。",[196,111238,82069],{}," 是相机名字。",[196,111241,106405],{}," 是相机在世界里的位置。",[196,111244,111245],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[196,111248,106405],{}," 来调视角。",[190,111251,111253],{"className":33221,"code":111252,"language":33223,"meta":57,"style":57},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[196,111254,111255],{"__ignoreMap":57},[199,111256,111257,111259,111261,111263,111265,111267,111269,111271,111273,111275,111277],{"class":201,"line":202},[199,111258,109829],{"class":205},[199,111260,895],{"class":1086},[199,111262,110133],{"class":205},[199,111264,27825],{"class":8113},[199,111266,895],{"class":1086},[199,111268,45183],{"class":1018},[199,111270,1912],{"class":205},[199,111272,27821],{"class":8113},[199,111274,895],{"class":1086},[199,111276,110148],{"class":1018},[199,111278,1594],{"class":205},[31,111280,111281,111282,103277,111284,111286],{},"创建离屏渲染器。",[196,111283,27825],{},[196,111285,27821],{}," 决定输出图片大小。",[190,111288,111289],{"className":33221,"code":103935,"language":33223,"meta":57,"style":57},[196,111290,111291,111307],{"__ignoreMap":57},[199,111292,111293,111295,111297,111299,111301,111303,111305],{"class":201,"line":202},[199,111294,5929],{"class":1086},[199,111296,103760],{"class":205},[199,111298,28886],{"class":1086},[199,111300,35285],{"class":1018},[199,111302,1537],{"class":205},[199,111304,3396],{"class":1018},[199,111306,33628],{"class":205},[199,111308,111309],{"class":201,"line":36},[199,111310,103958],{"class":205},[31,111312,111313],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[190,111315,111317],{"className":33221,"code":111316,"language":33223,"meta":57,"style":57},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[196,111318,111319],{"__ignoreMap":57},[199,111320,111321,111324,111326,111328,111330],{"class":201,"line":202},[199,111322,111323],{"class":205},"renderer.update_scene(data, ",[199,111325,110774],{"class":8113},[199,111327,895],{"class":1086},[199,111329,110779],{"class":898},[199,111331,1594],{"class":205},[31,111333,111334,111335,111337,111338,111341],{},"告诉 renderer：用当前 ",[196,111336,36242],{}," 的状态更新画面，并使用名为 ",[196,111339,111340],{},"fixed_camera"," 的相机视角。",[190,111343,111344],{"className":33221,"code":110239,"language":33223,"meta":57,"style":57},[196,111345,111346],{"__ignoreMap":57},[199,111347,111348,111350,111352],{"class":201,"line":202},[199,111349,109839],{"class":205},[199,111351,895],{"class":1086},[199,111353,109844],{"class":205},[31,111355,111356,111357,111360],{},"真正渲染出图像。",[196,111358,111359],{},"image"," 是一个 NumPy 数组，不是文件。",[190,111362,111364],{"className":33221,"code":111363,"language":33223,"meta":57,"style":57},"Image.fromarray(image).save(output_path)\n",[196,111365,111366],{"__ignoreMap":57},[199,111367,111368],{"class":201,"line":202},[199,111369,111363],{"class":205},[31,111371,111372,111373,31228],{},"把数组转换成图片，并保存到 ",[196,111374,111375],{},"render_output.png",[190,111377,111379],{"className":33221,"code":111378,"language":33223,"meta":57,"style":57},"renderer.close()\n",[196,111380,111381],{"__ignoreMap":57},[199,111382,111383],{"class":201,"line":202},[199,111384,111378],{"class":205},[31,111386,111387],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111389,104575],{"id":104574},[31,111391,111392,111393,111395,111396,31228],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[196,111394,111375],{},"，并输出图像数组形状，例如 ",[196,111397,111398],{},"(480, 640, 3)",[31,111400,111401],{},"如果图片里看不到方块，先检查：",[24,111403,111404,111407,111410],{},[27,111405,111406],{},"方块是否掉到相机视野外。",[27,111408,111409],{},"camera 位置是否合理。",[27,111411,111412,111413,111416],{},"是否在 ",[196,111414,111415],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111418,104607],{"id":104606},[31,111420,111421],{},"运行 viewer:",[190,111423,111425],{"className":26666,"code":111424,"language":26668,"meta":57,"style":57},"python ch5_viewer.py\n",[196,111426,111427],{"__ignoreMap":57},[199,111428,111429,111431],{"class":201,"line":202},[199,111430,33223],{"class":878},[199,111432,110555],{"class":898},[31,111434,111435],{},"运行 renderer:",[190,111437,111439],{"className":26666,"code":111438,"language":26668,"meta":57,"style":57},"python ch5_renderer.py\n",[196,111440,111441],{"__ignoreMap":57},[199,111442,111443,111445],{"class":201,"line":202},[199,111444,33223],{"class":878},[199,111446,110884],{"class":898},[31,111448,111449],{},"如果在服务器上运行:",[190,111451,111453],{"className":26666,"code":111452,"language":26668,"meta":57,"style":57},"MUJOCO_GL=egl python ch5_renderer.py\n",[196,111454,111455],{"__ignoreMap":57},[199,111456,111457,111459,111461,111463,111466],{"class":201,"line":202},[199,111458,110073],{"class":205},[199,111460,895],{"class":1086},[199,111462,110063],{"class":898},[199,111464,111465],{"class":878}," python",[199,111467,110884],{"class":898},[31,111469,110041],{},[190,111471,111473],{"className":26666,"code":111472,"language":26668,"meta":57,"style":57},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[196,111474,111475],{"__ignoreMap":57},[199,111476,111477,111479,111481,111483,111485],{"class":201,"line":202},[199,111478,110073],{"class":205},[199,111480,895],{"class":1086},[199,111482,110067],{"class":898},[199,111484,111465],{"class":878},[199,111486,110884],{"class":898},[31,111488,111489],{},"再做几个练习：",[24,111491,111492,111499,111502,111508],{},[27,111493,111494,111495,111498],{},"把 renderer 分辨率改成 ",[196,111496,111497],{},"height=240, width=320","，观察输出 shape。",[27,111500,111501],{},"把方块颜色改成蓝色，重新保存图片。",[27,111503,111504,111505,111507],{},"把相机 ",[196,111506,106405],{}," 改远一点，观察画面中物体是否变小。",[27,111509,111510,111511,104673,111514,111517],{},"把 viewer 示例中的 ",[196,111512,111513],{},"data.time \u003C 5.0",[196,111515,111516],{},"data.time \u003C 20.0","，观察更长时间。",[14,111519,104712],{"id":104711},[19,111521,111523],{"id":111522},"viewer-窗口打不开","viewer 窗口打不开",[31,111525,111526],{},"安装:",[190,111528,111530],{"className":26666,"code":111529,"language":26668,"meta":57,"style":57},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[196,111531,111532],{"__ignoreMap":57},[199,111533,111534,111536,111538,111540,111542,111544,111546,111548,111550,111552,111554],{"class":201,"line":202},[199,111535,27420],{"class":878},[199,111537,29158],{"class":898},[199,111539,26678],{"class":898},[199,111541,29243],{"class":1018},[199,111543,104765],{"class":898},[199,111545,103093],{"class":898},[199,111547,104770],{"class":898},[199,111549,103106],{"class":898},[199,111551,103112],{"class":898},[199,111553,103103],{"class":898},[199,111555,111556],{"class":898}," libXinerama\n",[19,111558,111560],{"id":111559},"glfwerror",[196,111561,111562],{},"GLFWError",[31,111564,111565],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[19,111567,111569],{"id":111568},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[31,111571,111572,111573,84798,111575,111577],{},"尝试 ",[196,111574,103296],{},[196,111576,103299],{},"。可能存在版本差异。",[19,111579,111580],{"id":111580},"保存图片是黑的",[31,111582,104834],{},[24,111584,111585,111588,111591,111601],{},[27,111586,111587],{},"XML 里是否有 light。",[27,111589,111590],{},"相机是否对着模型。",[27,111592,111593,111594,111597,111598,31228],{},"是否先 ",[196,111595,111596],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[196,111599,111600],{},"renderer.render()",[27,111602,111603],{},"物体是否已经掉出视野。",[19,111605,111606],{"id":111606},"远程服务器没有显示器",[31,111608,111609],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[190,111611,111612],{"className":26666,"code":111452,"language":26668,"meta":57,"style":57},[196,111613,111614],{"__ignoreMap":57},[199,111615,111616,111618,111620,111622,111624],{"class":201,"line":202},[199,111617,110073],{"class":205},[199,111619,895],{"class":1086},[199,111621,110063],{"class":898},[199,111623,111465],{"class":878},[199,111625,110884],{"class":898},[31,111627,111628],{},"如果 EGL 不可用，再尝试：",[190,111630,111631],{"className":26666,"code":111472,"language":26668,"meta":57,"style":57},[196,111632,111633],{"__ignoreMap":57},[199,111634,111635,111637,111639,111641,111643],{"class":201,"line":202},[199,111636,110073],{"class":205},[199,111638,895],{"class":1086},[199,111640,110067],{"class":898},[199,111642,111465],{"class":878},[199,111644,110884],{"class":898},[14,111646,104866],{"id":104865},[31,111648,111649],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[24,111651,111652,111655,111658],{},[27,111653,111654],{},"先用 viewer 看模型和控制是否正常。",[27,111656,111657],{},"再用 renderer 保存图片或构造视觉观测。",[27,111659,111660],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1002,111662,111663],{},"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":57,"searchDepth":36,"depth":36,"links":111665},[111666,111667,111668,111673,111678,111679,111680,111687],{"id":102905,"depth":36,"text":102906},{"id":103028,"depth":36,"text":103029},{"id":103303,"depth":36,"text":103304,"children":111669},[111670,111671,111672],{"id":110170,"depth":73,"text":110171},{"id":110200,"depth":73,"text":110201},{"id":110235,"depth":73,"text":110236},{"id":103511,"depth":36,"text":103512,"children":111674},[111675,111676,111677],{"id":103831,"depth":73,"text":103831},{"id":110980,"depth":73,"text":110981},{"id":111158,"depth":73,"text":111159},{"id":104574,"depth":36,"text":104575},{"id":104606,"depth":36,"text":104607},{"id":104711,"depth":36,"text":104712,"children":111681},[111682,111683,111684,111685,111686],{"id":111522,"depth":73,"text":111523},{"id":111559,"depth":73,"text":111562},{"id":111568,"depth":73,"text":111569},{"id":111580,"depth":73,"text":111580},{"id":111606,"depth":73,"text":111606},{"id":104865,"depth":36,"text":104866},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109778,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111694,"title":111695,"body":111696,"description":57,"extension":3024,"meta":113607,"navigation":906,"path":113608,"seo":113609,"stem":113610,"__hash__":113611},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111697,"toc":113583},[111698,111701,111703,111706,111708,111727,111730,111736,111739,111741,111743,111767,111769,111783,111785,111826,111828,111839,111841,111844,111850,111853,111887,111890,111922,111925,111957,111961,111964,112004,112007,112013,112016,112022,112026,112029,112035,112038,112042,112045,112085,112087,112100,112103,112105,112687,112689,112701,112704,112715,112717,112720,112739,112751,112754,112775,112778,112781,112824,112827,112830,112850,112857,112859,112877,112892,112895,112901,112904,112910,112927,112934,112965,112976,113010,113021,113038,113047,113055,113060,113074,113077,113098,113104,113118,113123,113153,113163,113188,113196,113219,113222,113238,113241,113249,113255,113277,113290,113311,113320,113359,113370,113372,113375,113381,113384,113387,113393,113396,113416,113419,113421,113460,113462,113465,113473,113476,113479,113506,113509,113519,113525,113528,113534,113536,113542,113546,113549,113551,113554,113578,113581],[10,111699,111695],{"id":111700},"_6控制任务cartpole",[14,111702,102906],{"id":102905},[31,111704,111705],{},"本章搭建一个最小 Cartpole 控制任务。",[31,111707,106590],{},[24,111709,111710,111713,111715,111718,111721,111724],{},[27,111711,111712],{},"slide joint",[27,111714,108443],{},[27,111716,111717],{},"cart force actuator",[27,111719,111720],{},"状态观测",[27,111722,111723],{},"简单控制循环",[27,111725,111726],{},"reward 设计雏形",[31,111728,111729],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[190,111731,111734],{"className":111732,"code":111733,"language":8084,"meta":57},[8082],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[196,111735,111733],{"__ignoreMap":57},[31,111737,111738],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111740,103029],{"id":103028},[31,111742,103032],{},[190,111744,111745],{"className":26666,"code":106647,"language":26668,"meta":57,"style":57},[196,111746,111747],{"__ignoreMap":57},[199,111748,111749,111751,111753,111755,111757,111759,111761,111763,111765],{"class":201,"line":202},[199,111750,27420],{"class":878},[199,111752,29158],{"class":898},[199,111754,26678],{"class":898},[199,111756,29243],{"class":1018},[199,111758,106662],{"class":898},[199,111760,103057],{"class":898},[199,111762,104760],{"class":898},[199,111764,103073],{"class":898},[199,111766,106671],{"class":898},[31,111768,105078],{},[190,111770,111771],{"className":26666,"code":103178,"language":26668,"meta":57,"style":57},[196,111772,111773],{"__ignoreMap":57},[199,111774,111775,111777,111779,111781],{"class":201,"line":202},[199,111776,26675],{"class":878},[199,111778,26678],{"class":898},[199,111780,103189],{"class":898},[199,111782,103192],{"class":898},[31,111784,105095],{},[190,111786,111788],{"className":26666,"code":111787,"language":26668,"meta":57,"style":57},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[196,111789,111790,111807,111816],{"__ignoreMap":57},[199,111791,111792,111794,111796,111798,111801,111803,111805],{"class":201,"line":202},[199,111793,33173],{"class":878},[199,111795,32019],{"class":898},[199,111797,27959],{"class":1018},[199,111799,111800],{"class":898}," mujoco-cartpole",[199,111802,103234],{"class":898},[199,111804,103237],{"class":1018},[199,111806,103240],{"class":1018},[199,111808,111809,111811,111813],{"class":201,"line":36},[199,111810,33173],{"class":878},[199,111812,103247],{"class":898},[199,111814,111815],{"class":898}," mujoco-cartpole\n",[199,111817,111818,111820,111822,111824],{"class":201,"line":73},[199,111819,26675],{"class":878},[199,111821,26678],{"class":898},[199,111823,103189],{"class":898},[199,111825,103192],{"class":898},[31,111827,103263],{},[24,111829,111830,111833,111836],{},[27,111831,111832],{},"本章不依赖 Gymnasium。",[27,111834,111835],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[27,111837,111838],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111840,103304],{"id":103303},[31,111842,111843],{},"Cartpole 的模型结构:",[190,111845,111848],{"className":111846,"code":111847,"language":8084,"meta":57},[8082],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[196,111849,111847],{"__ignoreMap":57},[31,111851,111852],{},"小车通过 slide joint 左右移动:",[190,111854,111856],{"className":2763,"code":111855,"language":2765,"meta":57,"style":57},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[196,111857,111858],{"__ignoreMap":57},[199,111859,111860,111862,111864,111866,111868,111871,111873,111875,111878,111880,111882,111885],{"class":201,"line":202},[199,111861,887],{"class":205},[199,111863,105215],{"class":874},[199,111865,967],{"class":878},[199,111867,895],{"class":205},[199,111869,111870],{"class":898},"\"cart_x\"",[199,111872,56083],{"class":878},[199,111874,895],{"class":205},[199,111876,111877],{"class":898},"\"slide\"",[199,111879,108287],{"class":878},[199,111881,895],{"class":205},[199,111883,111884],{"class":898},"\"1 0 0\"",[199,111886,103403],{"class":205},[31,111888,111889],{},"杆子通过 hinge joint 旋转:",[190,111891,111893],{"className":2763,"code":111892,"language":2765,"meta":57,"style":57},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[196,111894,111895],{"__ignoreMap":57},[199,111896,111897,111899,111901,111903,111905,111908,111910,111912,111914,111916,111918,111920],{"class":201,"line":202},[199,111898,887],{"class":205},[199,111900,105215],{"class":874},[199,111902,967],{"class":878},[199,111904,895],{"class":205},[199,111906,111907],{"class":898},"\"pole_hinge\"",[199,111909,56083],{"class":878},[199,111911,895],{"class":205},[199,111913,108278],{"class":898},[199,111915,108287],{"class":878},[199,111917,895],{"class":205},[199,111919,108292],{"class":898},[199,111921,103403],{"class":205},[31,111923,111924],{},"控制力作用在小车 slide joint 上:",[190,111926,111928],{"className":2763,"code":111927,"language":2765,"meta":57,"style":57},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[196,111929,111930],{"__ignoreMap":57},[199,111931,111932,111934,111936,111938,111940,111943,111945,111947,111949,111951,111953,111955],{"class":201,"line":202},[199,111933,887],{"class":205},[199,111935,108333],{"class":874},[199,111937,967],{"class":878},[199,111939,895],{"class":205},[199,111941,111942],{"class":898},"\"cart_motor\"",[199,111944,108343],{"class":878},[199,111946,895],{"class":205},[199,111948,111870],{"class":898},[199,111950,108350],{"class":878},[199,111952,895],{"class":205},[199,111954,56575],{"class":898},[199,111956,103403],{"class":205},[19,111958,111960],{"id":111959},"cartpole-的状态是什么","Cartpole 的状态是什么",[31,111962,111963],{},"这个简化模型有两个关节：",[3227,111965,111966,111977],{},[3230,111967,111968],{},[3233,111969,111970,111972,111974],{},[3236,111971,105018],{"align":26580},[3236,111973,26581],{"align":26580},[3236,111975,111976],{"align":26580},"对应状态",[3273,111978,111979,111992],{},[3233,111980,111981,111986,111989],{},[3278,111982,111983],{"align":26580},[196,111984,111985],{},"cart_x",[3278,111987,111988],{"align":26580},"slide",[3278,111990,111991],{"align":26580},"小车 x 位置",[3233,111993,111994,111999,112001],{},[3278,111995,111996],{"align":26580},[196,111997,111998],{},"pole_hinge",[3278,112000,108099],{"align":26580},[3278,112002,112003],{"align":26580},"杆子角度",[31,112005,112006],{},"所以：",[190,112008,112011],{"className":112009,"code":112010,"language":8084,"meta":57},[8082],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[196,112012,112010],{"__ignoreMap":57},[31,112014,112015],{},"把它们拼起来就是观测：",[190,112017,112020],{"className":112018,"code":112019,"language":8084,"meta":57},[8082],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[196,112021,112019],{"__ignoreMap":57},[19,112023,112025],{"id":112024},"action-是什么","action 是什么",[31,112027,112028],{},"本章只有一个 actuator：",[190,112030,112033],{"className":112031,"code":112032,"language":8084,"meta":57},[8082],"data.ctrl[0] = action\n",[196,112034,112032],{"__ignoreMap":57},[31,112036,112037],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[19,112039,112041],{"id":112040},"reward-是什么","reward 是什么",[31,112043,112044],{},"奖励函数：",[190,112046,112048],{"className":33221,"code":112047,"language":33223,"meta":57,"style":57},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[196,112049,112050],{"__ignoreMap":57},[199,112051,112052,112054,112057,112059,112061,112063,112066,112068,112071,112073,112075,112077,112080,112082],{"class":201,"line":202},[199,112053,19891],{"class":1086},[199,112055,112056],{"class":1018}," float",[199,112058,1537],{"class":205},[199,112060,104662],{"class":1018},[199,112062,1958],{"class":1086},[199,112064,112065],{"class":1018}," 0.1",[199,112067,9415],{"class":1086},[199,112069,112070],{"class":205}," cart_x ",[199,112072,3537],{"class":1086},[199,112074,112070],{"class":205},[199,112076,1998],{"class":1086},[199,112078,112079],{"class":205}," pole_angle ",[199,112081,3537],{"class":1086},[199,112083,112084],{"class":205}," pole_angle)\n",[31,112086,108485],{},[24,112088,112089,112094,112097],{},[27,112090,112091,112092,31228],{},"基础奖励是 ",[196,112093,104662],{},[27,112095,112096],{},"小车离中心越远，扣分越多。",[27,112098,112099],{},"杆子角度越大，扣分越多。",[31,112101,112102],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,112104,103512],{"id":103511},[190,112106,112108],{"className":33221,"code":112107,"language":33223,"meta":57,"style":57},"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",[196,112109,112110,112116,112126,112130,112134,112142,112147,112151,112155,112159,112164,112168,112173,112178,112183,112187,112192,112197,112202,112206,112210,112214,112218,112222,112227,112231,112235,112239,112243,112247,112257,112264,112268,112272,112286,112300,112313,112343,112347,112351,112363,112375,112383,112387,112400,112404,112408,112417,112421,112437,112447,112460,112473,112477,112500,112518,112522,112534,112538,112542,112552,112562,112566,112582,112623,112627,112647,112663,112667,112671,112683],{"__ignoreMap":57},[199,112111,112112,112114],{"class":201,"line":202},[199,112113,33235],{"class":1086},[199,112115,103560],{"class":205},[199,112117,112118,112120,112122,112124],{"class":201,"line":36},[199,112119,33235],{"class":1086},[199,112121,34222],{"class":205},[199,112123,34225],{"class":1086},[199,112125,34228],{"class":205},[199,112127,112128],{"class":201,"line":73},[199,112129,907],{"emptyLinePlaceholder":906},[199,112131,112132],{"class":201,"line":333},[199,112133,907],{"emptyLinePlaceholder":906},[199,112135,112136,112138,112140],{"class":201,"line":227},[199,112137,103573],{"class":1018},[199,112139,16425],{"class":1086},[199,112141,103578],{"class":898},[199,112143,112144],{"class":201,"line":238},[199,112145,112146],{"class":898},"\u003Cmujoco model=\"cartpole\">\n",[199,112148,112149],{"class":201,"line":252},[199,112150,103588],{"class":898},[199,112152,112153],{"class":201,"line":388},[199,112154,907],{"emptyLinePlaceholder":906},[199,112156,112157],{"class":201,"line":415},[199,112158,103597],{"class":898},[199,112160,112161],{"class":201,"line":426},[199,112162,112163],{"class":898},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[199,112165,112166],{"class":201,"line":1015},[199,112167,907],{"emptyLinePlaceholder":906},[199,112169,112170],{"class":201,"line":1031},[199,112171,112172],{"class":898},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[199,112174,112175],{"class":201,"line":1043},[199,112176,112177],{"class":898},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[199,112179,112180],{"class":201,"line":1049},[199,112181,112182],{"class":898},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[199,112184,112185],{"class":201,"line":1054},[199,112186,907],{"emptyLinePlaceholder":906},[199,112188,112189],{"class":201,"line":1062},[199,112190,112191],{"class":898},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[199,112193,112194],{"class":201,"line":1075},[199,112195,112196],{"class":898},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[199,112198,112199],{"class":201,"line":1092},[199,112200,112201],{"class":898},"        \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",[199,112203,112204],{"class":201,"line":1107},[199,112205,108697],{"class":898},[199,112207,112208],{"class":201,"line":1128},[199,112209,103626],{"class":898},[199,112211,112212],{"class":201,"line":1146},[199,112213,103631],{"class":898},[199,112215,112216],{"class":201,"line":1163},[199,112217,907],{"emptyLinePlaceholder":906},[199,112219,112220],{"class":201,"line":1176},[199,112221,108714],{"class":898},[199,112223,112224],{"class":201,"line":1189},[199,112225,112226],{"class":898},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[199,112228,112229],{"class":201,"line":1202},[199,112230,108724],{"class":898},[199,112232,112233],{"class":201,"line":1207},[199,112234,103636],{"class":898},[199,112236,112237],{"class":201,"line":1212},[199,112238,97957],{"class":898},[199,112240,112241],{"class":201,"line":1225},[199,112242,907],{"emptyLinePlaceholder":906},[199,112244,112245],{"class":201,"line":1236},[199,112246,907],{"emptyLinePlaceholder":906},[199,112248,112249,112251,112254],{"class":201,"line":1249},[199,112250,34789],{"class":1086},[199,112252,112253],{"class":878}," get_observation",[199,112255,112256],{"class":205},"(data: mujoco.MjData) -> np.ndarray:\n",[199,112258,112259,112261],{"class":201,"line":1262},[199,112260,6989],{"class":1086},[199,112262,112263],{"class":205}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[199,112265,112266],{"class":201,"line":1275},[199,112267,907],{"emptyLinePlaceholder":906},[199,112269,112270],{"class":201,"line":1287},[199,112271,907],{"emptyLinePlaceholder":906},[199,112273,112274,112276,112279,112282,112284],{"class":201,"line":1292},[199,112275,34789],{"class":1086},[199,112277,112278],{"class":878}," compute_reward",[199,112280,112281],{"class":205},"(obs: np.ndarray) -> ",[199,112283,3135],{"class":1018},[199,112285,6640],{"class":205},[199,112287,112288,112291,112293,112296,112298],{"class":201,"line":1297},[199,112289,112290],{"class":205},"    cart_x ",[199,112292,895],{"class":1086},[199,112294,112295],{"class":205}," obs[",[199,112297,1025],{"class":1018},[199,112299,1932],{"class":205},[199,112301,112302,112305,112307,112309,112311],{"class":201,"line":1310},[199,112303,112304],{"class":205},"    pole_angle ",[199,112306,895],{"class":1086},[199,112308,112295],{"class":205},[199,112310,1115],{"class":1018},[199,112312,1932],{"class":205},[199,112314,112315,112317,112319,112321,112323,112325,112327,112329,112331,112333,112335,112337,112339,112341],{"class":201,"line":1315},[199,112316,6989],{"class":1086},[199,112318,112056],{"class":1018},[199,112320,1537],{"class":205},[199,112322,104662],{"class":1018},[199,112324,1958],{"class":1086},[199,112326,112065],{"class":1018},[199,112328,9415],{"class":1086},[199,112330,112070],{"class":205},[199,112332,3537],{"class":1086},[199,112334,112070],{"class":205},[199,112336,1998],{"class":1086},[199,112338,112079],{"class":205},[199,112340,3537],{"class":1086},[199,112342,112084],{"class":205},[199,112344,112345],{"class":201,"line":1330},[199,112346,907],{"emptyLinePlaceholder":906},[199,112348,112349],{"class":201,"line":1335},[199,112350,907],{"emptyLinePlaceholder":906},[199,112352,112353,112355,112357,112359,112361],{"class":201,"line":1340},[199,112354,34789],{"class":1086},[199,112356,4889],{"class":878},[199,112358,103657],{"class":205},[199,112360,97945],{"class":1018},[199,112362,6640],{"class":205},[199,112364,112365,112367,112369,112371,112373],{"class":201,"line":1352},[199,112366,103666],{"class":205},[199,112368,895],{"class":1086},[199,112370,103671],{"class":205},[199,112372,103573],{"class":1018},[199,112374,1594],{"class":205},[199,112376,112377,112379,112381],{"class":201,"line":1367},[199,112378,103680],{"class":205},[199,112380,895],{"class":1086},[199,112382,103685],{"class":205},[199,112384,112385],{"class":201,"line":1381},[199,112386,907],{"emptyLinePlaceholder":906},[199,112388,112389,112391,112393,112395,112397],{"class":201,"line":1396},[199,112390,107328],{"class":205},[199,112392,1115],{"class":1018},[199,112394,2078],{"class":205},[199,112396,895],{"class":1086},[199,112398,112399],{"class":1018}," 0.1\n",[199,112401,112402],{"class":201,"line":1401},[199,112403,107341],{"class":205},[199,112405,112406],{"class":201,"line":1411},[199,112407,907],{"emptyLinePlaceholder":906},[199,112409,112410,112413,112415],{"class":201,"line":1421},[199,112411,112412],{"class":205},"    total_reward ",[199,112414,895],{"class":1086},[199,112416,107020],{"class":1018},[199,112418,112419],{"class":201,"line":1426},[199,112420,907],{"emptyLinePlaceholder":906},[199,112422,112423,112425,112427,112429,112431,112433,112435],{"class":201,"line":1436},[199,112424,1937],{"class":1086},[199,112426,34458],{"class":205},[199,112428,28886],{"class":1086},[199,112430,35285],{"class":1018},[199,112432,1537],{"class":205},[199,112434,9307],{"class":1018},[199,112436,33628],{"class":205},[199,112438,112439,112442,112444],{"class":201,"line":1441},[199,112440,112441],{"class":205},"        obs ",[199,112443,895],{"class":1086},[199,112445,112446],{"class":205}," get_observation(data)\n",[199,112448,112449,112452,112454,112456,112458],{"class":201,"line":1451},[199,112450,112451],{"class":205},"        pole_angle ",[199,112453,895],{"class":1086},[199,112455,112295],{"class":205},[199,112457,1115],{"class":1018},[199,112459,1932],{"class":205},[199,112461,112462,112465,112467,112469,112471],{"class":201,"line":1458},[199,112463,112464],{"class":205},"        pole_angular_velocity ",[199,112466,895],{"class":1086},[199,112468,112295],{"class":205},[199,112470,1920],{"class":1018},[199,112472,1932],{"class":205},[199,112474,112475],{"class":201,"line":1464},[199,112476,907],{"emptyLinePlaceholder":906},[199,112478,112479,112482,112484,112487,112489,112491,112493,112495,112497],{"class":201,"line":1478},[199,112480,112481],{"class":205},"        action ",[199,112483,895],{"class":1086},[199,112485,112486],{"class":1018}," 2.0",[199,112488,9415],{"class":1086},[199,112490,112079],{"class":205},[199,112492,2028],{"class":1086},[199,112494,64126],{"class":1018},[199,112496,9415],{"class":1086},[199,112498,112499],{"class":205}," pole_angular_velocity\n",[199,112501,112502,112504,112506,112508,112510,112512,112514,112516],{"class":201,"line":1516},[199,112503,112481],{"class":205},[199,112505,895],{"class":1086},[199,112507,109706],{"class":205},[199,112509,1998],{"class":1086},[199,112511,104662],{"class":1018},[199,112513,1912],{"class":205},[199,112515,104662],{"class":1018},[199,112517,1594],{"class":205},[199,112519,112520],{"class":201,"line":1522},[199,112521,907],{"emptyLinePlaceholder":906},[199,112523,112524,112526,112528,112530,112532],{"class":201,"line":1528},[199,112525,108876],{"class":205},[199,112527,1025],{"class":1018},[199,112529,2078],{"class":205},[199,112531,895],{"class":1086},[199,112533,109729],{"class":205},[199,112535,112536],{"class":201,"line":1557},[199,112537,103775],{"class":205},[199,112539,112540],{"class":201,"line":1563},[199,112541,907],{"emptyLinePlaceholder":906},[199,112543,112544,112547,112549],{"class":201,"line":1568},[199,112545,112546],{"class":205},"        reward ",[199,112548,895],{"class":1086},[199,112550,112551],{"class":205}," compute_reward(get_observation(data))\n",[199,112553,112554,112557,112559],{"class":201,"line":1574},[199,112555,112556],{"class":205},"        total_reward ",[199,112558,12362],{"class":1086},[199,112560,112561],{"class":205}," reward\n",[199,112563,112564],{"class":201,"line":1580},[199,112565,907],{"emptyLinePlaceholder":906},[199,112567,112568,112570,112572,112574,112576,112578,112580],{"class":201,"line":1597},[199,112569,2017],{"class":1086},[199,112571,34458],{"class":205},[199,112573,3412],{"class":1086},[199,112575,8651],{"class":1018},[199,112577,103818],{"class":1086},[199,112579,1621],{"class":1018},[199,112581,6640],{"class":205},[199,112583,112584,112586,112588,112591,112594,112597,112600,112602,112605,112608,112610,112612,112614,112616,112619,112621],{"class":201,"line":1602},[199,112585,37491],{"class":1018},[199,112587,1537],{"class":205},[199,112589,112590],{"class":898},"\"step:\"",[199,112592,112593],{"class":205},", step, ",[199,112595,112596],{"class":898},"\"obs:\"",[199,112598,112599],{"class":205},", np.round(obs, ",[199,112601,1920],{"class":1018},[199,112603,112604],{"class":205},"), ",[199,112606,112607],{"class":898},"\"action:\"",[199,112609,1912],{"class":205},[199,112611,34860],{"class":1018},[199,112613,1537],{"class":205},[199,112615,3135],{"class":1018},[199,112617,112618],{"class":205},"(action), ",[199,112620,1920],{"class":1018},[199,112622,1554],{"class":205},[199,112624,112625],{"class":201,"line":1608},[199,112626,907],{"emptyLinePlaceholder":906},[199,112628,112629,112631,112633,112636,112638,112640,112643,112645],{"class":201,"line":1640},[199,112630,34141],{"class":1018},[199,112632,1537],{"class":205},[199,112634,112635],{"class":898},"\"total_reward:\"",[199,112637,1912],{"class":205},[199,112639,34860],{"class":1018},[199,112641,112642],{"class":205},"(total_reward, ",[199,112644,1920],{"class":1018},[199,112646,1554],{"class":205},[199,112648,112649,112651,112653,112656,112659,112661],{"class":201,"line":1653},[199,112650,34141],{"class":1018},[199,112652,1537],{"class":205},[199,112654,112655],{"class":898},"\"final obs:\"",[199,112657,112658],{"class":205},", np.round(get_observation(data), ",[199,112660,1920],{"class":1018},[199,112662,1554],{"class":205},[199,112664,112665],{"class":201,"line":1673},[199,112666,907],{"emptyLinePlaceholder":906},[199,112668,112669],{"class":201,"line":1690},[199,112670,907],{"emptyLinePlaceholder":906},[199,112672,112673,112675,112677,112679,112681],{"class":201,"line":1706},[199,112674,4470],{"class":1086},[199,112676,34062],{"class":1018},[199,112678,103818],{"class":1086},[199,112680,103821],{"class":898},[199,112682,6640],{"class":205},[199,112684,112685],{"class":201,"line":1712},[199,112686,103828],{"class":205},[31,112688,105829],{},[190,112690,112692],{"className":26666,"code":112691,"language":26668,"meta":57,"style":57},"touch ch6_cartpole.py\n",[196,112693,112694],{"__ignoreMap":57},[199,112695,112696,112698],{"class":201,"line":202},[199,112697,103542],{"class":878},[199,112699,112700],{"class":898}," ch6_cartpole.py\n",[31,112702,112703],{},"运行：",[190,112705,112707],{"className":26666,"code":112706,"language":26668,"meta":57,"style":57},"python ch6_cartpole.py\n",[196,112708,112709],{"__ignoreMap":57},[199,112710,112711,112713],{"class":201,"line":202},[199,112712,33223],{"class":878},[199,112714,112700],{"class":898},[19,112716,103831],{"id":103831},[31,112718,112719],{},"构造观测：",[190,112721,112723],{"className":33221,"code":112722,"language":33223,"meta":57,"style":57},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[196,112724,112725,112733],{"__ignoreMap":57},[199,112726,112727,112729,112731],{"class":201,"line":202},[199,112728,34789],{"class":1086},[199,112730,112253],{"class":878},[199,112732,112256],{"class":205},[199,112734,112735,112737],{"class":201,"line":36},[199,112736,6989],{"class":1086},[199,112738,112263],{"class":205},[31,112740,112741,112744,112745,112747,112748,112750],{},[196,112742,112743],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[196,112746,106289],{}," 2 维，",[196,112749,106619],{}," 2 维，所以 obs 是 4 维。",[31,112752,112753],{},"设置初始角度：",[190,112755,112757],{"className":33221,"code":112756,"language":33223,"meta":57,"style":57},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[196,112758,112759,112771],{"__ignoreMap":57},[199,112760,112761,112763,112765,112767,112769],{"class":201,"line":202},[199,112762,106958],{"class":205},[199,112764,1115],{"class":1018},[199,112766,2078],{"class":205},[199,112768,895],{"class":1086},[199,112770,112399],{"class":1018},[199,112772,112773],{"class":201,"line":36},[199,112774,106802],{"class":205},[31,112776,112777],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[31,112779,112780],{},"简单反馈控制：",[190,112782,112784],{"className":33221,"code":112783,"language":33223,"meta":57,"style":57},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[196,112785,112786,112806],{"__ignoreMap":57},[199,112787,112788,112790,112792,112794,112796,112798,112800,112802,112804],{"class":201,"line":202},[199,112789,109701],{"class":205},[199,112791,895],{"class":1086},[199,112793,112486],{"class":1018},[199,112795,9415],{"class":1086},[199,112797,112079],{"class":205},[199,112799,2028],{"class":1086},[199,112801,64126],{"class":1018},[199,112803,9415],{"class":1086},[199,112805,112499],{"class":205},[199,112807,112808,112810,112812,112814,112816,112818,112820,112822],{"class":201,"line":36},[199,112809,109701],{"class":205},[199,112811,895],{"class":1086},[199,112813,109706],{"class":205},[199,112815,1998],{"class":1086},[199,112817,104662],{"class":1018},[199,112819,1912],{"class":205},[199,112821,104662],{"class":1018},[199,112823,1594],{"class":205},[31,112825,112826],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[31,112828,112829],{},"限制动作：",[190,112831,112833],{"className":33221,"code":112832,"language":33223,"meta":57,"style":57},"np.clip(action, -1.0, 1.0)\n",[196,112834,112835],{"__ignoreMap":57},[199,112836,112837,112840,112842,112844,112846,112848],{"class":201,"line":202},[199,112838,112839],{"class":205},"np.clip(action, ",[199,112841,1998],{"class":1086},[199,112843,104662],{"class":1018},[199,112845,1912],{"class":205},[199,112847,104662],{"class":1018},[199,112849,1594],{"class":205},[31,112851,112852,112853,112856],{},"因为 XML 里 ",[196,112854,112855],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[19,112858,103967],{"id":103967},[190,112860,112861],{"className":33221,"code":112722,"language":33223,"meta":57,"style":57},[196,112862,112863,112871],{"__ignoreMap":57},[199,112864,112865,112867,112869],{"class":201,"line":202},[199,112866,34789],{"class":1086},[199,112868,112253],{"class":878},[199,112870,112256],{"class":205},[199,112872,112873,112875],{"class":201,"line":36},[199,112874,6989],{"class":1086},[199,112876,112263],{"class":205},[31,112878,112879,112880,112883,112884,112887,112888,112891],{},"这段定义了一个函数，用来获取当前观测。",[196,112881,112882],{},"data.qpos.copy()"," 是位置数组副本，",[196,112885,112886],{},"data.qvel.copy()"," 是速度数组副本。",[196,112889,112890],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[31,112893,112894],{},"在本章模型里：",[190,112896,112899],{"className":112897,"code":112898,"language":8084,"meta":57},[8082],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[196,112900,112898],{"__ignoreMap":57},[31,112902,112903],{},"所以返回的 obs 是：",[190,112905,112908],{"className":112906,"code":112907,"language":8084,"meta":57},[8082],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[196,112909,112907],{"__ignoreMap":57},[190,112911,112913],{"className":33221,"code":112912,"language":33223,"meta":57,"style":57},"def compute_reward(obs: np.ndarray) -> float:\n",[196,112914,112915],{"__ignoreMap":57},[199,112916,112917,112919,112921,112923,112925],{"class":201,"line":202},[199,112918,34789],{"class":1086},[199,112920,112278],{"class":878},[199,112922,112281],{"class":205},[199,112924,3135],{"class":1018},[199,112926,6640],{"class":205},[31,112928,112929,112930,112933],{},"这行定义奖励函数。输入是观测 ",[196,112931,112932],{},"obs","，输出是一个浮点数奖励。",[190,112935,112937],{"className":33221,"code":112936,"language":33223,"meta":57,"style":57},"cart_x = obs[0]\npole_angle = obs[1]\n",[196,112938,112939,112952],{"__ignoreMap":57},[199,112940,112941,112944,112946,112948,112950],{"class":201,"line":202},[199,112942,112943],{"class":205},"cart_x ",[199,112945,895],{"class":1086},[199,112947,112295],{"class":205},[199,112949,1025],{"class":1018},[199,112951,1932],{"class":205},[199,112953,112954,112957,112959,112961,112963],{"class":201,"line":36},[199,112955,112956],{"class":205},"pole_angle ",[199,112958,895],{"class":1086},[199,112960,112295],{"class":205},[199,112962,1115],{"class":1018},[199,112964,1932],{"class":205},[31,112966,112967,112968,112971,112972,112975],{},"数组索引从 0 开始。",[196,112969,112970],{},"obs[0]"," 是第一个元素，也就是小车位置。",[196,112973,112974],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[190,112977,112978],{"className":33221,"code":112047,"language":33223,"meta":57,"style":57},[196,112979,112980],{"__ignoreMap":57},[199,112981,112982,112984,112986,112988,112990,112992,112994,112996,112998,113000,113002,113004,113006,113008],{"class":201,"line":202},[199,112983,19891],{"class":1086},[199,112985,112056],{"class":1018},[199,112987,1537],{"class":205},[199,112989,104662],{"class":1018},[199,112991,1958],{"class":1086},[199,112993,112065],{"class":1018},[199,112995,9415],{"class":1086},[199,112997,112070],{"class":205},[199,112999,3537],{"class":1086},[199,113001,112070],{"class":205},[199,113003,1998],{"class":1086},[199,113005,112079],{"class":205},[199,113007,3537],{"class":1086},[199,113009,112084],{"class":205},[31,113011,113012,113013,113016,113017,113020],{},"这行计算奖励。",[196,113014,113015],{},"cart_x * cart_x"," 是小车位置的平方，",[196,113018,113019],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[190,113022,113024],{"className":33221,"code":113023,"language":33223,"meta":57,"style":57},"data.qpos[1] = 0.1\n",[196,113025,113026],{"__ignoreMap":57},[199,113027,113028,113030,113032,113034,113036],{"class":201,"line":202},[199,113029,106958],{"class":205},[199,113031,1115],{"class":1018},[199,113033,2078],{"class":205},[199,113035,895],{"class":1086},[199,113037,112399],{"class":1018},[31,113039,113040,113041,113043,113044,113046],{},"手动设置杆子的初始角度。因为 ",[196,113042,107715],{}," 是小车位置，",[196,113045,107718],{}," 是杆子角度，所以这里改的是杆子。",[190,113048,113049],{"className":33221,"code":106802,"language":33223,"meta":57,"style":57},[196,113050,113051],{"__ignoreMap":57},[199,113052,113053],{"class":201,"line":202},[199,113054,106802],{"class":205},[31,113056,107761,113057,113059],{},[196,113058,106289],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[190,113061,113063],{"className":33221,"code":113062,"language":33223,"meta":57,"style":57},"total_reward = 0.0\n",[196,113064,113065],{"__ignoreMap":57},[199,113066,113067,113070,113072],{"class":201,"line":202},[199,113068,113069],{"class":205},"total_reward ",[199,113071,895],{"class":1086},[199,113073,107020],{"class":1018},[31,113075,113076],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[190,113078,113080],{"className":33221,"code":113079,"language":33223,"meta":57,"style":57},"for step in range(1000):\n",[196,113081,113082],{"__ignoreMap":57},[199,113083,113084,113086,113088,113090,113092,113094,113096],{"class":201,"line":202},[199,113085,5929],{"class":1086},[199,113087,34458],{"class":205},[199,113089,28886],{"class":1086},[199,113091,35285],{"class":1018},[199,113093,1537],{"class":205},[199,113095,9307],{"class":1018},[199,113097,33628],{"class":205},[31,113099,113100,113101,113103],{},"循环 1000 步。",[196,113102,109393],{}," 是当前步数，从 0 到 999。",[190,113105,113107],{"className":33221,"code":113106,"language":33223,"meta":57,"style":57},"obs = get_observation(data)\n",[196,113108,113109],{"__ignoreMap":57},[199,113110,113111,113114,113116],{"class":201,"line":202},[199,113112,113113],{"class":205},"obs ",[199,113115,895],{"class":1086},[199,113117,112446],{"class":205},[31,113119,113120,113121,31228],{},"读取当前状态，保存到 ",[196,113122,112932],{},[190,113124,113126],{"className":33221,"code":113125,"language":33223,"meta":57,"style":57},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[196,113127,113128,113140],{"__ignoreMap":57},[199,113129,113130,113132,113134,113136,113138],{"class":201,"line":202},[199,113131,112956],{"class":205},[199,113133,895],{"class":1086},[199,113135,112295],{"class":205},[199,113137,1115],{"class":1018},[199,113139,1932],{"class":205},[199,113141,113142,113145,113147,113149,113151],{"class":201,"line":36},[199,113143,113144],{"class":205},"pole_angular_velocity ",[199,113146,895],{"class":1086},[199,113148,112295],{"class":205},[199,113150,1920],{"class":1018},[199,113152,1932],{"class":205},[31,113154,113155,113156,113159,113160,31228],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[196,113157,113158],{},"obs[3]","？因为 obs 的顺序是 ",[196,113161,113162],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[190,113164,113166],{"className":33221,"code":113165,"language":33223,"meta":57,"style":57},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[196,113167,113168],{"__ignoreMap":57},[199,113169,113170,113172,113174,113176,113178,113180,113182,113184,113186],{"class":201,"line":202},[199,113171,109701],{"class":205},[199,113173,895],{"class":1086},[199,113175,112486],{"class":1018},[199,113177,9415],{"class":1086},[199,113179,112079],{"class":205},[199,113181,2028],{"class":1086},[199,113183,64126],{"class":1018},[199,113185,9415],{"class":1086},[199,113187,112499],{"class":205},[31,113189,113190,113191,103277,113193,113195],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[196,113192,107519],{},[196,113194,38170],{}," 是人为设置的系数，不是固定公式。",[190,113197,113199],{"className":33221,"code":113198,"language":33223,"meta":57,"style":57},"action = np.clip(action, -1.0, 1.0)\n",[196,113200,113201],{"__ignoreMap":57},[199,113202,113203,113205,113207,113209,113211,113213,113215,113217],{"class":201,"line":202},[199,113204,109701],{"class":205},[199,113206,895],{"class":1086},[199,113208,109706],{"class":205},[199,113210,1998],{"class":1086},[199,113212,104662],{"class":1018},[199,113214,1912],{"class":205},[199,113216,104662],{"class":1018},[199,113218,1594],{"class":205},[31,113220,113221],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[190,113223,113224],{"className":33221,"code":112032,"language":33223,"meta":57,"style":57},[196,113225,113226],{"__ignoreMap":57},[199,113227,113228,113230,113232,113234,113236],{"class":201,"line":202},[199,113229,108130],{"class":205},[199,113231,1025],{"class":1018},[199,113233,2078],{"class":205},[199,113235,895],{"class":1086},[199,113237,109729],{"class":205},[31,113239,113240],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[190,113242,113243],{"className":33221,"code":106764,"language":33223,"meta":57,"style":57},[196,113244,113245],{"__ignoreMap":57},[199,113246,113247],{"class":201,"line":202},[199,113248,106764],{"class":205},[31,113250,113251,113252,113254],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[196,113253,108385],{}," 计算小车和杆子的下一刻状态。",[190,113256,113258],{"className":33221,"code":113257,"language":33223,"meta":57,"style":57},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[196,113259,113260,113269],{"__ignoreMap":57},[199,113261,113262,113265,113267],{"class":201,"line":202},[199,113263,113264],{"class":205},"reward ",[199,113266,895],{"class":1086},[199,113268,112551],{"class":205},[199,113270,113271,113273,113275],{"class":201,"line":36},[199,113272,113069],{"class":205},[199,113274,12362],{"class":1086},[199,113276,112561],{"class":205},[31,113278,113279,113280,113282,113283,113286,113287,31228],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[196,113281,12362],{}," 是简写，",[196,113284,113285],{},"total_reward += reward"," 等价于 ",[196,113288,113289],{},"total_reward = total_reward + reward",[190,113291,113293],{"className":33221,"code":113292,"language":33223,"meta":57,"style":57},"if step % 100 == 0:\n",[196,113294,113295],{"__ignoreMap":57},[199,113296,113297,113299,113301,113303,113305,113307,113309],{"class":201,"line":202},[199,113298,4470],{"class":1086},[199,113300,34458],{"class":205},[199,113302,3412],{"class":1086},[199,113304,8651],{"class":1018},[199,113306,103818],{"class":1086},[199,113308,1621],{"class":1018},[199,113310,6640],{"class":205},[31,113312,113313,113315,113316,113319],{},[196,113314,3412],{}," 是取余数。",[196,113317,113318],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[190,113321,113323],{"className":33221,"code":113322,"language":33223,"meta":57,"style":57},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[196,113324,113325],{"__ignoreMap":57},[199,113326,113327,113329,113331,113333,113335,113337,113339,113341,113343,113345,113347,113349,113351,113353,113355,113357],{"class":201,"line":202},[199,113328,33258],{"class":1018},[199,113330,1537],{"class":205},[199,113332,112590],{"class":898},[199,113334,112593],{"class":205},[199,113336,112596],{"class":898},[199,113338,112599],{"class":205},[199,113340,1920],{"class":1018},[199,113342,112604],{"class":205},[199,113344,112607],{"class":898},[199,113346,1912],{"class":205},[199,113348,34860],{"class":1018},[199,113350,1537],{"class":205},[199,113352,3135],{"class":1018},[199,113354,112618],{"class":205},[199,113356,1920],{"class":1018},[199,113358,1554],{"class":205},[31,113360,113361,113362,113365,113366,113369],{},"打印当前步数、观测和动作。",[196,113363,113364],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[196,113367,113368],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113371,104575],{"id":104574},[31,113373,113374],{},"观测向量:",[190,113376,113379],{"className":113377,"code":113378,"language":8084,"meta":57},[8082],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[196,113380,113378],{"__ignoreMap":57},[31,113382,113383],{},"控制器是教学用的简单线性反馈，不保证最优。",[31,113385,113386],{},"每隔 100 步会打印一次：",[190,113388,113391],{"className":113389,"code":113390,"language":8084,"meta":57},[8082],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[196,113392,113390],{"__ignoreMap":57},[31,113394,113395],{},"重点观察：",[24,113397,113398,113404,113409],{},[27,113399,113400,113403],{},[196,113401,113402],{},"pole_angle"," 是否越来越大。",[27,113405,113406,113408],{},[196,113407,111985],{}," 是否跑得太远。",[27,113410,113411,113412,84798,113414,31228],{},"action 是否经常被 clip 到 ",[196,113413,106174],{},[196,113415,1115],{},[31,113417,113418],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113420,104607],{"id":104606},[24,113422,113423,113429,113432,113438,113448,113454,113457],{},[27,113424,113425,113426,31228],{},"把初始角度改为 ",[196,113427,113428],{},"data.qpos[1] = 0.3",[27,113430,113431],{},"重新运行，观察控制是否变差。",[27,113433,113434,113435,113437],{},"把 actuator ",[196,113436,109326],{}," 改小。",[27,113439,113440,113441,113444,113445,31228],{},"打印 ",[196,113442,113443],{},"model.nq, model.nv, model.nu","，应为 ",[196,113446,113447],{},"2 2 1",[27,113449,113450,113451,113453],{},"把 reward 里的 ",[196,113452,113019],{}," 系数改大，观察总奖励变化。",[27,113455,113456],{},"把控制器改成反号，观察杆子是否更容易倒。",[27,113458,113459],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113461,104712],{"id":104711},[19,113463,113464],{"id":113464},"杆子方向和预期不一致",[31,113466,104655,113467,113469,113470,113472],{},[196,113468,108498],{}," 和 capsule 的 ",[196,113471,105435],{},"，必要时用 viewer 可视化确认。",[19,113474,113475],{"id":113475},"控制器越控越倒",[31,113477,113478],{},"说明反馈符号可能反了，尝试:",[190,113480,113482],{"className":33221,"code":113481,"language":33223,"meta":57,"style":57},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[196,113483,113484],{"__ignoreMap":57},[199,113485,113486,113488,113490,113492,113494,113496,113498,113500,113502,113504],{"class":201,"line":202},[199,113487,109701],{"class":205},[199,113489,895],{"class":1086},[199,113491,1958],{"class":1086},[199,113493,107519],{"class":1018},[199,113495,9415],{"class":1086},[199,113497,112079],{"class":205},[199,113499,1998],{"class":1086},[199,113501,64126],{"class":1018},[199,113503,9415],{"class":1086},[199,113505,112499],{"class":205},[19,113507,113508],{"id":113508},"小车飞走",[31,113510,113511,113512,113514,113515,113518],{},"降低 ",[196,113513,109326],{}," 或缩小 ",[196,113516,113517],{},"action"," 的 clip 范围。",[19,113520,113522,113524],{"id":113521},"obs3-为什么是杆子角速度",[196,113523,113158],{}," 为什么是杆子角速度",[31,113526,113527],{},"因为这个模型里：",[190,113529,113532],{"className":113530,"code":113531,"language":8084,"meta":57},[8082],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[196,113533,113531],{"__ignoreMap":57},[31,113535,112006],{},[190,113537,113540],{"className":113538,"code":113539,"language":8084,"meta":57},[8082],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[196,113541,113539],{"__ignoreMap":57},[19,113543,113545],{"id":113544},"reward-变成负数是否错误","reward 变成负数是否错误",[31,113547,113548],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113550,104866],{"id":104865},[31,113552,113553],{},"一个控制任务通常包含：",[24,113555,113556,113559,113567,113572,113575],{},[27,113557,113558],{},"模型：Cartpole 的 body、joint、actuator。",[27,113560,113561,113562,3300,113564,113566],{},"观测：从 ",[196,113563,106289],{},[196,113565,106619],{}," 里取状态。",[27,113568,113569,113570,31228],{},"动作：写入 ",[196,113571,103335],{},[27,113573,113574],{},"奖励：根据任务目标打分。",[27,113576,113577],{},"循环：obs -> action -> step -> reward。",[31,113579,113580],{},"这就是后面 Gymnasium 环境的基本骨架。",[1002,113582,106545],{},{"title":57,"searchDepth":36,"depth":36,"links":113584},[113585,113586,113587,113592,113596,113597,113598,113606],{"id":102905,"depth":36,"text":102906},{"id":103028,"depth":36,"text":103029},{"id":103303,"depth":36,"text":103304,"children":113588},[113589,113590,113591],{"id":111959,"depth":73,"text":111960},{"id":112024,"depth":73,"text":112025},{"id":112040,"depth":73,"text":112041},{"id":103511,"depth":36,"text":103512,"children":113593},[113594,113595],{"id":103831,"depth":73,"text":103831},{"id":103967,"depth":73,"text":103967},{"id":104574,"depth":36,"text":104575},{"id":104606,"depth":36,"text":104607},{"id":104711,"depth":36,"text":104712,"children":113599},[113600,113601,113602,113603,113605],{"id":113464,"depth":73,"text":113464},{"id":113475,"depth":73,"text":113475},{"id":113508,"depth":73,"text":113508},{"id":113521,"depth":73,"text":113604},"obs[3] 为什么是杆子角速度",{"id":113544,"depth":73,"text":113545},{"id":104865,"depth":36,"text":104866},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111695,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113613,"title":113614,"body":113615,"description":57,"extension":3024,"meta":115629,"navigation":906,"path":115630,"seo":115631,"stem":115632,"__hash__":115633},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113616,"toc":115605},[113617,113620,113622,113625,113627,113644,113647,113650,113656,113659,113661,113663,113687,113689,113703,113705,113746,113748,113766,113768,113771,113777,113780,113808,113812,113818,113843,113846,113877,113884,113887,113890,113896,113899,113905,113908,113914,113918,113921,113946,113949,113951,114711,114713,114725,114727,114738,114740,114743,114760,114763,114765,114776,114779,114781,114827,114830,114843,114846,114928,114931,114933,114949,114959,114972,114975,115014,115024,115035,115045,115058,115061,115090,115093,115103,115106,115112,115129,115140,115142,115148,115165,115176,115197,115200,115212,115215,115236,115239,115247,115255,115272,115275,115344,115351,115359,115362,115375,115382,115384,115387,115393,115396,115399,115405,115411,115413,115453,115455,115461,115470,115473,115475,115495,115498,115501,115507,115511,115513,115540,115543,115546,115573,115579,115582,115585,115587,115590,115593,115599,115602],[10,113618,113614],{"id":113619},"_7控制任务reacher-机械臂到达目标",[14,113621,102906],{"id":102905},[31,113623,113624],{},"本章搭建一个二维两关节 reacher 任务。",[31,113626,106590],{},[24,113628,113629,113632,113635,113638,113641],{},[27,113630,113631],{},"两个 hinge joint",[27,113633,113634],{},"两个 motor actuator",[27,113636,113637],{},"site 作为末端点和目标点",[27,113639,113640],{},"根据末端和目标距离设计 reward",[27,113642,113643],{},"构造机械臂任务的基本形式",[31,113645,113646],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[31,113648,113649],{},"Reacher 任务可以理解为：",[190,113651,113654],{"className":113652,"code":113653,"language":8084,"meta":57},[8082],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[196,113655,113653],{"__ignoreMap":57},[31,113657,113658],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113660,103029],{"id":103028},[31,113662,103032],{},[190,113664,113665],{"className":26666,"code":106647,"language":26668,"meta":57,"style":57},[196,113666,113667],{"__ignoreMap":57},[199,113668,113669,113671,113673,113675,113677,113679,113681,113683,113685],{"class":201,"line":202},[199,113670,27420],{"class":878},[199,113672,29158],{"class":898},[199,113674,26678],{"class":898},[199,113676,29243],{"class":1018},[199,113678,106662],{"class":898},[199,113680,103057],{"class":898},[199,113682,104760],{"class":898},[199,113684,103073],{"class":898},[199,113686,106671],{"class":898},[31,113688,105078],{},[190,113690,113691],{"className":26666,"code":103178,"language":26668,"meta":57,"style":57},[196,113692,113693],{"__ignoreMap":57},[199,113694,113695,113697,113699,113701],{"class":201,"line":202},[199,113696,26675],{"class":878},[199,113698,26678],{"class":898},[199,113700,103189],{"class":898},[199,113702,103192],{"class":898},[31,113704,105095],{},[190,113706,113708],{"className":26666,"code":113707,"language":26668,"meta":57,"style":57},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[196,113709,113710,113727,113736],{"__ignoreMap":57},[199,113711,113712,113714,113716,113718,113721,113723,113725],{"class":201,"line":202},[199,113713,33173],{"class":878},[199,113715,32019],{"class":898},[199,113717,27959],{"class":1018},[199,113719,113720],{"class":898}," mujoco-reacher",[199,113722,103234],{"class":898},[199,113724,103237],{"class":1018},[199,113726,103240],{"class":1018},[199,113728,113729,113731,113733],{"class":201,"line":36},[199,113730,33173],{"class":878},[199,113732,103247],{"class":898},[199,113734,113735],{"class":898}," mujoco-reacher\n",[199,113737,113738,113740,113742,113744],{"class":201,"line":73},[199,113739,26675],{"class":878},[199,113741,26678],{"class":898},[199,113743,103189],{"class":898},[199,113745,103192],{"class":898},[31,113747,103263],{},[24,113749,113750,113753,113756],{},[27,113751,113752],{},"本章使用低维状态，不使用图像输入。",[27,113754,113755],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[27,113757,113758,113759,3300,113761,3300,113763,113765],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[196,113760,106289],{},[196,113762,106619],{},[196,113764,105939],{}," 的方法一致。",[14,113767,103304],{"id":103303},[31,113769,113770],{},"Reacher 任务核心:",[190,113772,113775],{"className":113773,"code":113774,"language":8084,"meta":57},[8082],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[196,113776,113774],{"__ignoreMap":57},[31,113778,113779],{},"读取 site 世界坐标:",[190,113781,113783],{"className":33221,"code":113782,"language":33223,"meta":57,"style":57},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[196,113784,113785,113798],{"__ignoreMap":57},[199,113786,113787,113789,113791,113793,113796],{"class":201,"line":202},[199,113788,105893],{"class":205},[199,113790,895],{"class":1086},[199,113792,105664],{"class":205},[199,113794,113795],{"class":898},"\"tip\"",[199,113797,1594],{"class":205},[199,113799,113800,113803,113805],{"class":201,"line":36},[199,113801,113802],{"class":205},"tip_pos ",[199,113804,895],{"class":1086},[199,113806,113807],{"class":205}," data.site_xpos[site_id]\n",[19,113809,113811],{"id":113810},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[31,113813,113814,113815,113817],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[196,113816,106289],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[190,113819,113821],{"className":33221,"code":113820,"language":33223,"meta":57,"style":57},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[196,113822,113823,113833],{"__ignoreMap":57},[199,113824,113825,113828,113830],{"class":201,"line":202},[199,113826,113827],{"class":205},"tip ",[199,113829,895],{"class":1086},[199,113831,113832],{"class":205}," data.site_xpos[tip_site_id]\n",[199,113834,113835,113838,113840],{"class":201,"line":36},[199,113836,113837],{"class":205},"target ",[199,113839,895],{"class":1086},[199,113841,113842],{"class":205}," data.site_xpos[target_site_id]\n",[31,113844,113845],{},"这样 reward 就很容易写：",[190,113847,113849],{"className":33221,"code":113848,"language":33223,"meta":57,"style":57},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[196,113850,113851,113866],{"__ignoreMap":57},[199,113852,113853,113856,113858,113861,113863],{"class":201,"line":202},[199,113854,113855],{"class":205},"dist ",[199,113857,895],{"class":1086},[199,113859,113860],{"class":205}," np.linalg.norm(tip ",[199,113862,1998],{"class":1086},[199,113864,113865],{"class":205}," target)\n",[199,113867,113868,113870,113872,113874],{"class":201,"line":36},[199,113869,113264],{"class":205},[199,113871,895],{"class":1086},[199,113873,1958],{"class":1086},[199,113875,113876],{"class":205},"dist\n",[31,113878,113879,113880,113883],{},"距离越小，",[196,113881,113882],{},"-dist"," 越接近 0，奖励越高。",[19,113885,113886],{"id":113886},"两关节机械臂的状态",[31,113888,113889],{},"这个模型有两个 hinge joint：",[190,113891,113894],{"className":113892,"code":113893,"language":8084,"meta":57},[8082],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[196,113895,113893],{"__ignoreMap":57},[31,113897,113898],{},"再加上末端和目标位置：",[190,113900,113903],{"className":113901,"code":113902,"language":8084,"meta":57},[8082],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[196,113904,113902],{"__ignoreMap":57},[31,113906,113907],{},"总维度：",[190,113909,113912],{"className":113910,"code":113911,"language":8084,"meta":57},[8082],"2 + 2 + 3 + 3 = 10\n",[196,113913,113911],{"__ignoreMap":57},[19,113915,113917],{"id":113916},"为什么-gravity-是-0","为什么 gravity 是 0",[31,113919,113920],{},"本章把重力设为：",[190,113922,113924],{"className":2763,"code":113923,"language":2765,"meta":57,"style":57},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[196,113925,113926],{"__ignoreMap":57},[199,113927,113928,113930,113932,113934,113936,113938,113940,113942,113944],{"class":201,"line":202},[199,113929,887],{"class":205},[199,113931,71425],{"class":874},[199,113933,103453],{"class":878},[199,113935,895],{"class":205},[199,113937,103458],{"class":898},[199,113939,103461],{"class":878},[199,113941,895],{"class":205},[199,113943,106030],{"class":898},[199,113945,103403],{"class":205},[31,113947,113948],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113950,103512],{"id":103511},[190,113952,113954],{"className":33221,"code":113953,"language":33223,"meta":57,"style":57},"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",[196,113955,113956,113962,113972,113976,113980,113988,113993,113998,114002,114006,114011,114016,114020,114025,114030,114035,114039,114044,114049,114054,114059,114063,114067,114071,114075,114079,114084,114089,114093,114097,114101,114105,114109,114124,114133,114145,114168,114175,114179,114183,114193,114207,114221,114228,114232,114236,114250,114262,114274,114287,114302,114319,114323,114327,114339,114351,114359,114367,114371,114387,114392,114405,114418,114433,114437,114472,114504,114508,114512,114521,114525,114541,114551,114562,114578,114594,114610,114626,114630,114648,114668,114687,114691,114695,114707],{"__ignoreMap":57},[199,113957,113958,113960],{"class":201,"line":202},[199,113959,33235],{"class":1086},[199,113961,103560],{"class":205},[199,113963,113964,113966,113968,113970],{"class":201,"line":36},[199,113965,33235],{"class":1086},[199,113967,34222],{"class":205},[199,113969,34225],{"class":1086},[199,113971,34228],{"class":205},[199,113973,113974],{"class":201,"line":73},[199,113975,907],{"emptyLinePlaceholder":906},[199,113977,113978],{"class":201,"line":333},[199,113979,907],{"emptyLinePlaceholder":906},[199,113981,113982,113984,113986],{"class":201,"line":227},[199,113983,103573],{"class":1018},[199,113985,16425],{"class":1086},[199,113987,103578],{"class":898},[199,113989,113990],{"class":201,"line":238},[199,113991,113992],{"class":898},"\u003Cmujoco model=\"two_link_reacher\">\n",[199,113994,113995],{"class":201,"line":252},[199,113996,113997],{"class":898},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[199,113999,114000],{"class":201,"line":388},[199,114001,907],{"emptyLinePlaceholder":906},[199,114003,114004],{"class":201,"line":415},[199,114005,103597],{"class":898},[199,114007,114008],{"class":201,"line":426},[199,114009,114010],{"class":898},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[199,114012,114013],{"class":201,"line":1015},[199,114014,114015],{"class":898},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[199,114017,114018],{"class":201,"line":1031},[199,114019,907],{"emptyLinePlaceholder":906},[199,114021,114022],{"class":201,"line":1043},[199,114023,114024],{"class":898},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[199,114026,114027],{"class":201,"line":1049},[199,114028,114029],{"class":898},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[199,114031,114032],{"class":201,"line":1054},[199,114033,114034],{"class":898},"      \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",[199,114036,114037],{"class":201,"line":1062},[199,114038,907],{"emptyLinePlaceholder":906},[199,114040,114041],{"class":201,"line":1075},[199,114042,114043],{"class":898},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[199,114045,114046],{"class":201,"line":1092},[199,114047,114048],{"class":898},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[199,114050,114051],{"class":201,"line":1107},[199,114052,114053],{"class":898},"        \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",[199,114055,114056],{"class":201,"line":1128},[199,114057,114058],{"class":898},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[199,114060,114061],{"class":201,"line":1146},[199,114062,108697],{"class":898},[199,114064,114065],{"class":201,"line":1163},[199,114066,103626],{"class":898},[199,114068,114069],{"class":201,"line":1176},[199,114070,103631],{"class":898},[199,114072,114073],{"class":201,"line":1189},[199,114074,907],{"emptyLinePlaceholder":906},[199,114076,114077],{"class":201,"line":1202},[199,114078,108714],{"class":898},[199,114080,114081],{"class":201,"line":1207},[199,114082,114083],{"class":898},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[199,114085,114086],{"class":201,"line":1212},[199,114087,114088],{"class":898},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[199,114090,114091],{"class":201,"line":1225},[199,114092,108724],{"class":898},[199,114094,114095],{"class":201,"line":1236},[199,114096,103636],{"class":898},[199,114098,114099],{"class":201,"line":1249},[199,114100,97957],{"class":898},[199,114102,114103],{"class":201,"line":1262},[199,114104,907],{"emptyLinePlaceholder":906},[199,114106,114107],{"class":201,"line":1275},[199,114108,907],{"emptyLinePlaceholder":906},[199,114110,114111,114113,114116,114119,114121],{"class":201,"line":1287},[199,114112,34789],{"class":1086},[199,114114,114115],{"class":878}," site_position",[199,114117,114118],{"class":205},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[199,114120,4242],{"class":1018},[199,114122,114123],{"class":205},") -> np.ndarray:\n",[199,114125,114126,114128,114130],{"class":201,"line":1292},[199,114127,105659],{"class":205},[199,114129,895],{"class":1086},[199,114131,114132],{"class":205}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[199,114134,114135,114137,114139,114141,114143],{"class":201,"line":1297},[199,114136,6005],{"class":1086},[199,114138,105708],{"class":205},[199,114140,887],{"class":1086},[199,114142,1621],{"class":1018},[199,114144,6640],{"class":205},[199,114146,114147,114149,114151,114153,114155,114158,114160,114162,114164,114166],{"class":201,"line":1310},[199,114148,105691],{"class":1086},[199,114150,105694],{"class":1018},[199,114152,1537],{"class":205},[199,114154,3146],{"class":1086},[199,114156,114157],{"class":898},"\"site not found: ",[199,114159,3974],{"class":1018},[199,114161,82069],{"class":205},[199,114163,759],{"class":1018},[199,114165,3337],{"class":898},[199,114167,1594],{"class":205},[199,114169,114170,114172],{"class":201,"line":1315},[199,114171,6989],{"class":1086},[199,114173,114174],{"class":205}," data.site_xpos[site_id].copy()\n",[199,114176,114177],{"class":201,"line":1330},[199,114178,907],{"emptyLinePlaceholder":906},[199,114180,114181],{"class":201,"line":1335},[199,114182,907],{"emptyLinePlaceholder":906},[199,114184,114185,114187,114190],{"class":201,"line":1340},[199,114186,34789],{"class":1086},[199,114188,114189],{"class":878}," get_obs",[199,114191,114192],{"class":205},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[199,114194,114195,114198,114200,114203,114205],{"class":201,"line":1352},[199,114196,114197],{"class":205},"    tip ",[199,114199,895],{"class":1086},[199,114201,114202],{"class":205}," site_position(model, data, ",[199,114204,113795],{"class":898},[199,114206,1594],{"class":205},[199,114208,114209,114212,114214,114216,114219],{"class":201,"line":1367},[199,114210,114211],{"class":205},"    target ",[199,114213,895],{"class":1086},[199,114215,114202],{"class":205},[199,114217,114218],{"class":898},"\"target\"",[199,114220,1594],{"class":205},[199,114222,114223,114225],{"class":201,"line":1381},[199,114224,6989],{"class":1086},[199,114226,114227],{"class":205}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[199,114229,114230],{"class":201,"line":1396},[199,114231,907],{"emptyLinePlaceholder":906},[199,114233,114234],{"class":201,"line":1401},[199,114235,907],{"emptyLinePlaceholder":906},[199,114237,114238,114240,114243,114246,114248],{"class":201,"line":1411},[199,114239,34789],{"class":1086},[199,114241,114242],{"class":878}," reward",[199,114244,114245],{"class":205},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[199,114247,3135],{"class":1018},[199,114249,6640],{"class":205},[199,114251,114252,114254,114256,114258,114260],{"class":201,"line":1421},[199,114253,114197],{"class":205},[199,114255,895],{"class":1086},[199,114257,114202],{"class":205},[199,114259,113795],{"class":898},[199,114261,1594],{"class":205},[199,114263,114264,114266,114268,114270,114272],{"class":201,"line":1426},[199,114265,114211],{"class":205},[199,114267,895],{"class":1086},[199,114269,114202],{"class":205},[199,114271,114218],{"class":898},[199,114273,1594],{"class":205},[199,114275,114276,114279,114281,114283,114285],{"class":201,"line":1436},[199,114277,114278],{"class":205},"    dist ",[199,114280,895],{"class":1086},[199,114282,113860],{"class":205},[199,114284,1998],{"class":1086},[199,114286,113865],{"class":205},[199,114288,114289,114292,114294,114297,114299],{"class":201,"line":1441},[199,114290,114291],{"class":205},"    control_cost ",[199,114293,895],{"class":1086},[199,114295,114296],{"class":1018}," 0.01",[199,114298,9415],{"class":1086},[199,114300,114301],{"class":205}," np.sum(np.square(data.ctrl))\n",[199,114303,114304,114306,114308,114310,114312,114314,114316],{"class":201,"line":1451},[199,114305,6989],{"class":1086},[199,114307,112056],{"class":1018},[199,114309,1537],{"class":205},[199,114311,1998],{"class":1086},[199,114313,113855],{"class":205},[199,114315,1998],{"class":1086},[199,114317,114318],{"class":205}," control_cost)\n",[199,114320,114321],{"class":201,"line":1458},[199,114322,907],{"emptyLinePlaceholder":906},[199,114324,114325],{"class":201,"line":1464},[199,114326,907],{"emptyLinePlaceholder":906},[199,114328,114329,114331,114333,114335,114337],{"class":201,"line":1478},[199,114330,34789],{"class":1086},[199,114332,4889],{"class":878},[199,114334,103657],{"class":205},[199,114336,97945],{"class":1018},[199,114338,6640],{"class":205},[199,114340,114341,114343,114345,114347,114349],{"class":201,"line":1516},[199,114342,103666],{"class":205},[199,114344,895],{"class":1086},[199,114346,103671],{"class":205},[199,114348,103573],{"class":1018},[199,114350,1594],{"class":205},[199,114352,114353,114355,114357],{"class":201,"line":1522},[199,114354,103680],{"class":205},[199,114356,895],{"class":1086},[199,114358,103685],{"class":205},[199,114360,114361,114363,114365],{"class":201,"line":1528},[199,114362,112412],{"class":205},[199,114364,895],{"class":1086},[199,114366,107020],{"class":1018},[199,114368,114369],{"class":201,"line":1557},[199,114370,907],{"emptyLinePlaceholder":906},[199,114372,114373,114375,114377,114379,114381,114383,114385],{"class":201,"line":1563},[199,114374,1937],{"class":1086},[199,114376,34458],{"class":205},[199,114378,28886],{"class":1086},[199,114380,35285],{"class":1018},[199,114382,1537],{"class":205},[199,114384,67333],{"class":1018},[199,114386,33628],{"class":205},[199,114388,114389],{"class":201,"line":1568},[199,114390,114391],{"class":205},"        mujoco.mj_forward(model, data)\n",[199,114393,114394,114397,114399,114401,114403],{"class":201,"line":1574},[199,114395,114396],{"class":205},"        tip ",[199,114398,895],{"class":1086},[199,114400,114202],{"class":205},[199,114402,113795],{"class":898},[199,114404,1594],{"class":205},[199,114406,114407,114410,114412,114414,114416],{"class":201,"line":1580},[199,114408,114409],{"class":205},"        target ",[199,114411,895],{"class":1086},[199,114413,114202],{"class":205},[199,114415,114218],{"class":898},[199,114417,1594],{"class":205},[199,114419,114420,114423,114425,114428,114430],{"class":201,"line":1597},[199,114421,114422],{"class":205},"        error ",[199,114424,895],{"class":1086},[199,114426,114427],{"class":205}," target ",[199,114429,1998],{"class":1086},[199,114431,114432],{"class":205}," tip\n",[199,114434,114435],{"class":201,"line":1602},[199,114436,907],{"emptyLinePlaceholder":906},[199,114438,114439,114441,114443,114445,114447,114450,114452,114454,114457,114459,114462,114464,114466,114468,114470],{"class":201,"line":1608},[199,114440,108876],{"class":205},[199,114442,1025],{"class":1018},[199,114444,2078],{"class":205},[199,114446,895],{"class":1086},[199,114448,114449],{"class":205}," np.clip(",[199,114451,107519],{"class":1018},[199,114453,9415],{"class":1086},[199,114455,114456],{"class":205}," error[",[199,114458,1925],{"class":1018},[199,114460,114461],{"class":205},"], ",[199,114463,1998],{"class":1086},[199,114465,104662],{"class":1018},[199,114467,1912],{"class":205},[199,114469,104662],{"class":1018},[199,114471,1594],{"class":205},[199,114473,114474,114476,114478,114480,114482,114484,114486,114488,114490,114492,114494,114496,114498,114500,114502],{"class":201,"line":1640},[199,114475,108876],{"class":205},[199,114477,1115],{"class":1018},[199,114479,2078],{"class":205},[199,114481,895],{"class":1086},[199,114483,114449],{"class":205},[199,114485,107519],{"class":1018},[199,114487,9415],{"class":1086},[199,114489,114456],{"class":205},[199,114491,1025],{"class":1018},[199,114493,114461],{"class":205},[199,114495,1998],{"class":1086},[199,114497,104662],{"class":1018},[199,114499,1912],{"class":205},[199,114501,104662],{"class":1018},[199,114503,1594],{"class":205},[199,114505,114506],{"class":201,"line":1653},[199,114507,907],{"emptyLinePlaceholder":906},[199,114509,114510],{"class":201,"line":1673},[199,114511,103775],{"class":205},[199,114513,114514,114516,114518],{"class":201,"line":1690},[199,114515,112556],{"class":205},[199,114517,12362],{"class":1086},[199,114519,114520],{"class":205}," reward(model, data)\n",[199,114522,114523],{"class":201,"line":1706},[199,114524,907],{"emptyLinePlaceholder":906},[199,114526,114527,114529,114531,114533,114535,114537,114539],{"class":201,"line":1712},[199,114528,2017],{"class":1086},[199,114530,34458],{"class":205},[199,114532,3412],{"class":1086},[199,114534,8651],{"class":1018},[199,114536,103818],{"class":1086},[199,114538,1621],{"class":1018},[199,114540,6640],{"class":205},[199,114542,114543,114546,114548],{"class":201,"line":1720},[199,114544,114545],{"class":205},"            obs ",[199,114547,895],{"class":1086},[199,114549,114550],{"class":205}," get_obs(model, data)\n",[199,114552,114553,114555,114557,114559],{"class":201,"line":1725},[199,114554,37491],{"class":1018},[199,114556,1537],{"class":205},[199,114558,112590],{"class":898},[199,114560,114561],{"class":205},", step)\n",[199,114563,114564,114566,114568,114571,114574,114576],{"class":201,"line":1731},[199,114565,37491],{"class":1018},[199,114567,1537],{"class":205},[199,114569,114570],{"class":898},"\"  tip:\"",[199,114572,114573],{"class":205},", np.round(tip, ",[199,114575,1920],{"class":1018},[199,114577,1554],{"class":205},[199,114579,114580,114582,114584,114587,114590,114592],{"class":201,"line":1745},[199,114581,37491],{"class":1018},[199,114583,1537],{"class":205},[199,114585,114586],{"class":898},"\"  target:\"",[199,114588,114589],{"class":205},", np.round(target, ",[199,114591,1920],{"class":1018},[199,114593,1554],{"class":205},[199,114595,114596,114598,114600,114603,114606,114608],{"class":201,"line":1754},[199,114597,37491],{"class":1018},[199,114599,1537],{"class":205},[199,114601,114602],{"class":898},"\"  ctrl:\"",[199,114604,114605],{"class":205},", np.round(data.ctrl.copy(), ",[199,114607,1920],{"class":1018},[199,114609,1554],{"class":205},[199,114611,114612,114614,114616,114619,114622,114624],{"class":201,"line":1763},[199,114613,37491],{"class":1018},[199,114615,1537],{"class":205},[199,114617,114618],{"class":898},"\"  obs_dim:\"",[199,114620,114621],{"class":205},", obs.shape[",[199,114623,1025],{"class":1018},[199,114625,7554],{"class":205},[199,114627,114628],{"class":201,"line":1768},[199,114629,907],{"emptyLinePlaceholder":906},[199,114631,114632,114634,114636,114638,114640,114642,114644,114646],{"class":201,"line":19628},[199,114633,34141],{"class":1018},[199,114635,1537],{"class":205},[199,114637,112635],{"class":898},[199,114639,1912],{"class":205},[199,114641,34860],{"class":1018},[199,114643,112642],{"class":205},[199,114645,1920],{"class":1018},[199,114647,1554],{"class":205},[199,114649,114650,114652,114654,114657,114660,114662,114664,114666],{"class":201,"line":19641},[199,114651,34141],{"class":1018},[199,114653,1537],{"class":205},[199,114655,114656],{"class":898},"\"final tip:\"",[199,114658,114659],{"class":205},", np.round(site_position(model, data, ",[199,114661,113795],{"class":898},[199,114663,112604],{"class":205},[199,114665,1920],{"class":1018},[199,114667,1554],{"class":205},[199,114669,114670,114672,114674,114677,114679,114681,114683,114685],{"class":201,"line":19646},[199,114671,34141],{"class":1018},[199,114673,1537],{"class":205},[199,114675,114676],{"class":898},"\"target:\"",[199,114678,114659],{"class":205},[199,114680,114218],{"class":898},[199,114682,112604],{"class":205},[199,114684,1920],{"class":1018},[199,114686,1554],{"class":205},[199,114688,114689],{"class":201,"line":19660},[199,114690,907],{"emptyLinePlaceholder":906},[199,114692,114693],{"class":201,"line":19665},[199,114694,907],{"emptyLinePlaceholder":906},[199,114696,114697,114699,114701,114703,114705],{"class":201,"line":19671},[199,114698,4470],{"class":1086},[199,114700,34062],{"class":1018},[199,114702,103818],{"class":1086},[199,114704,103821],{"class":898},[199,114706,6640],{"class":205},[199,114708,114709],{"class":201,"line":19676},[199,114710,103828],{"class":205},[31,114712,105829],{},[190,114714,114716],{"className":26666,"code":114715,"language":26668,"meta":57,"style":57},"touch ch7_reacher.py\n",[196,114717,114718],{"__ignoreMap":57},[199,114719,114720,114722],{"class":201,"line":202},[199,114721,103542],{"class":878},[199,114723,114724],{"class":898}," ch7_reacher.py\n",[31,114726,112703],{},[190,114728,114730],{"className":26666,"code":114729,"language":26668,"meta":57,"style":57},"python ch7_reacher.py\n",[196,114731,114732],{"__ignoreMap":57},[199,114733,114734,114736],{"class":201,"line":202},[199,114735,33223],{"class":878},[199,114737,114724],{"class":898},[19,114739,103831],{"id":103831},[31,114741,114742],{},"读取 site 坐标：",[190,114744,114746],{"className":33221,"code":114745,"language":33223,"meta":57,"style":57},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[196,114747,114748],{"__ignoreMap":57},[199,114749,114750,114752,114754,114756,114758],{"class":201,"line":202},[199,114751,34789],{"class":1086},[199,114753,114115],{"class":878},[199,114755,114118],{"class":205},[199,114757,4242],{"class":1018},[199,114759,114123],{"class":205},[31,114761,114762],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[31,114764,112719],{},[190,114766,114768],{"className":33221,"code":114767,"language":33223,"meta":57,"style":57},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[196,114769,114770],{"__ignoreMap":57},[199,114771,114772,114774],{"class":201,"line":202},[199,114773,19891],{"class":1086},[199,114775,114227],{"class":205},[31,114777,114778],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[31,114780,112044],{},[190,114782,114784],{"className":33221,"code":114783,"language":33223,"meta":57,"style":57},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[196,114785,114786,114798,114811],{"__ignoreMap":57},[199,114787,114788,114790,114792,114794,114796],{"class":201,"line":202},[199,114789,113855],{"class":205},[199,114791,895],{"class":1086},[199,114793,113860],{"class":205},[199,114795,1998],{"class":1086},[199,114797,113865],{"class":205},[199,114799,114800,114803,114805,114807,114809],{"class":201,"line":36},[199,114801,114802],{"class":205},"control_cost ",[199,114804,895],{"class":1086},[199,114806,114296],{"class":1018},[199,114808,9415],{"class":1086},[199,114810,114301],{"class":205},[199,114812,114813,114815,114817,114819,114821,114823,114825],{"class":201,"line":73},[199,114814,19891],{"class":1086},[199,114816,112056],{"class":1018},[199,114818,1537],{"class":205},[199,114820,1998],{"class":1086},[199,114822,113855],{"class":205},[199,114824,1998],{"class":1086},[199,114826,114318],{"class":205},[31,114828,114829],{},"奖励由两部分组成：",[24,114831,114832,114837],{},[27,114833,114834,114836],{},[196,114835,113882],{},"：末端离目标越远，奖励越低。",[27,114838,114839,114842],{},[196,114840,114841],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[31,114844,114845],{},"简单控制器：",[190,114847,114849],{"className":33221,"code":114848,"language":33223,"meta":57,"style":57},"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",[196,114850,114851,114864,114896],{"__ignoreMap":57},[199,114852,114853,114856,114858,114860,114862],{"class":201,"line":202},[199,114854,114855],{"class":205},"error ",[199,114857,895],{"class":1086},[199,114859,114427],{"class":205},[199,114861,1998],{"class":1086},[199,114863,114432],{"class":205},[199,114865,114866,114868,114870,114872,114874,114876,114878,114880,114882,114884,114886,114888,114890,114892,114894],{"class":201,"line":36},[199,114867,108130],{"class":205},[199,114869,1025],{"class":1018},[199,114871,2078],{"class":205},[199,114873,895],{"class":1086},[199,114875,114449],{"class":205},[199,114877,107519],{"class":1018},[199,114879,9415],{"class":1086},[199,114881,114456],{"class":205},[199,114883,1925],{"class":1018},[199,114885,114461],{"class":205},[199,114887,1998],{"class":1086},[199,114889,104662],{"class":1018},[199,114891,1912],{"class":205},[199,114893,104662],{"class":1018},[199,114895,1594],{"class":205},[199,114897,114898,114900,114902,114904,114906,114908,114910,114912,114914,114916,114918,114920,114922,114924,114926],{"class":201,"line":73},[199,114899,108130],{"class":205},[199,114901,1115],{"class":1018},[199,114903,2078],{"class":205},[199,114905,895],{"class":1086},[199,114907,114449],{"class":205},[199,114909,107519],{"class":1018},[199,114911,9415],{"class":1086},[199,114913,114456],{"class":205},[199,114915,1025],{"class":1018},[199,114917,114461],{"class":205},[199,114919,1998],{"class":1086},[199,114921,104662],{"class":1018},[199,114923,1912],{"class":205},[199,114925,104662],{"class":1018},[199,114927,1594],{"class":205},[31,114929,114930],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[19,114932,103967],{"id":103967},[190,114934,114935],{"className":33221,"code":114745,"language":33223,"meta":57,"style":57},[196,114936,114937],{"__ignoreMap":57},[199,114938,114939,114941,114943,114945,114947],{"class":201,"line":202},[199,114940,34789],{"class":1086},[199,114942,114115],{"class":878},[199,114944,114118],{"class":205},[199,114946,4242],{"class":1018},[199,114948,114123],{"class":205},[31,114950,114951,114952,114954,114955,84798,114957,31228],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[196,114953,82069],{}," 是 site 的名字，比如 ",[196,114956,113795],{},[196,114958,114218],{},[190,114960,114962],{"className":33221,"code":114961,"language":33223,"meta":57,"style":57},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[196,114963,114964],{"__ignoreMap":57},[199,114965,114966,114968,114970],{"class":201,"line":202},[199,114967,105893],{"class":205},[199,114969,895],{"class":1086},[199,114971,114132],{"class":205},[31,114973,114974],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[190,114976,114978],{"className":33221,"code":114977,"language":33223,"meta":57,"style":57},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[196,114979,114980,114992],{"__ignoreMap":57},[199,114981,114982,114984,114986,114988,114990],{"class":201,"line":202},[199,114983,4470],{"class":1086},[199,114985,105708],{"class":205},[199,114987,887],{"class":1086},[199,114989,1621],{"class":1018},[199,114991,6640],{"class":205},[199,114993,114994,114996,114998,115000,115002,115004,115006,115008,115010,115012],{"class":201,"line":36},[199,114995,106154],{"class":1086},[199,114997,105694],{"class":1018},[199,114999,1537],{"class":205},[199,115001,3146],{"class":1086},[199,115003,114157],{"class":898},[199,115005,3974],{"class":1018},[199,115007,82069],{"class":205},[199,115009,759],{"class":1018},[199,115011,3337],{"class":898},[199,115013,1594],{"class":205},[31,115015,115016,115017,115020,115021,115023],{},"如果 site 没找到，就主动报错。",[196,115018,115019],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[196,115022,82069],{}," 的值放进字符串里。",[190,115025,115027],{"className":33221,"code":115026,"language":33223,"meta":57,"style":57},"return data.site_xpos[site_id].copy()\n",[196,115028,115029],{"__ignoreMap":57},[199,115030,115031,115033],{"class":201,"line":202},[199,115032,19891],{"class":1086},[199,115034,114174],{"class":205},[31,115036,115037,115038,115040,115041,115044],{},"返回这个 site 的世界坐标。",[196,115039,105939],{}," 里的每一行都是一个 site 的 ",[196,115042,115043],{},"(x, y, z)"," 坐标。",[190,115046,115048],{"className":33221,"code":115047,"language":33223,"meta":57,"style":57},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[196,115049,115050],{"__ignoreMap":57},[199,115051,115052,115054,115056],{"class":201,"line":202},[199,115053,34789],{"class":1086},[199,115055,114189],{"class":878},[199,115057,114192],{"class":205},[31,115059,115060],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[190,115062,115064],{"className":33221,"code":115063,"language":33223,"meta":57,"style":57},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[196,115065,115066,115078],{"__ignoreMap":57},[199,115067,115068,115070,115072,115074,115076],{"class":201,"line":202},[199,115069,113827],{"class":205},[199,115071,895],{"class":1086},[199,115073,114202],{"class":205},[199,115075,113795],{"class":898},[199,115077,1594],{"class":205},[199,115079,115080,115082,115084,115086,115088],{"class":201,"line":36},[199,115081,113837],{"class":205},[199,115083,895],{"class":1086},[199,115085,114202],{"class":205},[199,115087,114218],{"class":898},[199,115089,1594],{"class":205},[31,115091,115092],{},"分别读取末端点和目标点的世界坐标。",[190,115094,115095],{"className":33221,"code":114767,"language":33223,"meta":57,"style":57},[196,115096,115097],{"__ignoreMap":57},[199,115098,115099,115101],{"class":201,"line":202},[199,115100,19891],{"class":1086},[199,115102,114227],{"class":205},[31,115104,115105],{},"把四部分拼成一个观测数组：",[190,115107,115110],{"className":115108,"code":115109,"language":8084,"meta":57},[8082],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[196,115111,115109],{"__ignoreMap":57},[190,115113,115115],{"className":33221,"code":115114,"language":33223,"meta":57,"style":57},"dist = np.linalg.norm(tip - target)\n",[196,115116,115117],{"__ignoreMap":57},[199,115118,115119,115121,115123,115125,115127],{"class":201,"line":202},[199,115120,113855],{"class":205},[199,115122,895],{"class":1086},[199,115124,113860],{"class":205},[199,115126,1998],{"class":1086},[199,115128,113865],{"class":205},[31,115130,115131,115132,115135,115136,115139],{},"计算 tip 到 target 的距离。",[196,115133,115134],{},"tip - target"," 得到一个三维向量，",[196,115137,115138],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[31,115141,2323],{},[190,115143,115146],{"className":115144,"code":115145,"language":8084,"meta":57},[8082],"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",[196,115147,115145],{"__ignoreMap":57},[190,115149,115151],{"className":33221,"code":115150,"language":33223,"meta":57,"style":57},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[196,115152,115153],{"__ignoreMap":57},[199,115154,115155,115157,115159,115161,115163],{"class":201,"line":202},[199,115156,114802],{"class":205},[199,115158,895],{"class":1086},[199,115160,114296],{"class":1018},[199,115162,9415],{"class":1086},[199,115164,114301],{"class":205},[31,115166,115167,115168,115171,115172,115175],{},"计算动作惩罚。",[196,115169,115170],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[196,115173,115174],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[190,115177,115179],{"className":33221,"code":115178,"language":33223,"meta":57,"style":57},"return float(-dist - control_cost)\n",[196,115180,115181],{"__ignoreMap":57},[199,115182,115183,115185,115187,115189,115191,115193,115195],{"class":201,"line":202},[199,115184,19891],{"class":1086},[199,115186,112056],{"class":1018},[199,115188,1537],{"class":205},[199,115190,1998],{"class":1086},[199,115192,113855],{"class":205},[199,115194,1998],{"class":1086},[199,115196,114318],{"class":205},[31,115198,115199],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[190,115201,115202],{"className":33221,"code":113062,"language":33223,"meta":57,"style":57},[196,115203,115204],{"__ignoreMap":57},[199,115205,115206,115208,115210],{"class":201,"line":202},[199,115207,113069],{"class":205},[199,115209,895],{"class":1086},[199,115211,107020],{"class":1018},[31,115213,115214],{},"累计奖励变量，记录整个运行过程的总分。",[190,115216,115218],{"className":33221,"code":115217,"language":33223,"meta":57,"style":57},"for step in range(500):\n",[196,115219,115220],{"__ignoreMap":57},[199,115221,115222,115224,115226,115228,115230,115232,115234],{"class":201,"line":202},[199,115223,5929],{"class":1086},[199,115225,34458],{"class":205},[199,115227,28886],{"class":1086},[199,115229,35285],{"class":1018},[199,115231,1537],{"class":205},[199,115233,67333],{"class":1018},[199,115235,33628],{"class":205},[31,115237,115238],{},"运行 500 个控制步。",[190,115240,115241],{"className":33221,"code":106802,"language":33223,"meta":57,"style":57},[196,115242,115243],{"__ignoreMap":57},[199,115244,115245],{"class":201,"line":202},[199,115246,106802],{"class":205},[31,115248,115249,115250,103277,115252,115254],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[196,115251,105490],{},[196,115253,105493],{}," 是当前状态下的坐标。",[190,115256,115258],{"className":33221,"code":115257,"language":33223,"meta":57,"style":57},"error = target - tip\n",[196,115259,115260],{"__ignoreMap":57},[199,115261,115262,115264,115266,115268,115270],{"class":201,"line":202},[199,115263,114855],{"class":205},[199,115265,895],{"class":1086},[199,115267,114427],{"class":205},[199,115269,1998],{"class":1086},[199,115271,114432],{"class":205},[31,115273,115274],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[190,115276,115278],{"className":33221,"code":115277,"language":33223,"meta":57,"style":57},"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",[196,115279,115280,115312],{"__ignoreMap":57},[199,115281,115282,115284,115286,115288,115290,115292,115294,115296,115298,115300,115302,115304,115306,115308,115310],{"class":201,"line":202},[199,115283,108130],{"class":205},[199,115285,1025],{"class":1018},[199,115287,2078],{"class":205},[199,115289,895],{"class":1086},[199,115291,114449],{"class":205},[199,115293,107519],{"class":1018},[199,115295,9415],{"class":1086},[199,115297,114456],{"class":205},[199,115299,1925],{"class":1018},[199,115301,114461],{"class":205},[199,115303,1998],{"class":1086},[199,115305,104662],{"class":1018},[199,115307,1912],{"class":205},[199,115309,104662],{"class":1018},[199,115311,1594],{"class":205},[199,115313,115314,115316,115318,115320,115322,115324,115326,115328,115330,115332,115334,115336,115338,115340,115342],{"class":201,"line":36},[199,115315,108130],{"class":205},[199,115317,1115],{"class":1018},[199,115319,2078],{"class":205},[199,115321,895],{"class":1086},[199,115323,114449],{"class":205},[199,115325,107519],{"class":1018},[199,115327,9415],{"class":1086},[199,115329,114456],{"class":205},[199,115331,1025],{"class":1018},[199,115333,114461],{"class":205},[199,115335,1998],{"class":1086},[199,115337,104662],{"class":1018},[199,115339,1912],{"class":205},[199,115341,104662],{"class":1018},[199,115343,1594],{"class":205},[31,115345,115346,115347,115350],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[196,115348,115349],{},"error -> ctrl -> step"," 的流程。",[190,115352,115353],{"className":33221,"code":106764,"language":33223,"meta":57,"style":57},[196,115354,115355],{"__ignoreMap":57},[199,115356,115357],{"class":201,"line":202},[199,115358,106764],{"class":205},[31,115360,115361],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[190,115363,115365],{"className":33221,"code":115364,"language":33223,"meta":57,"style":57},"obs = get_obs(model, data)\n",[196,115366,115367],{"__ignoreMap":57},[199,115368,115369,115371,115373],{"class":201,"line":202},[199,115370,113113],{"class":205},[199,115372,895],{"class":1086},[199,115374,114550],{"class":205},[31,115376,115377,115378,115381],{},"读取最新观测。后面打印 ",[196,115379,115380],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,115383,104575],{"id":104574},[31,115385,115386],{},"观测维度为:",[190,115388,115391],{"className":115389,"code":115390,"language":8084,"meta":57},[8082],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[196,115392,115390],{"__ignoreMap":57},[31,115394,115395],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[31,115397,115398],{},"程序每 100 步打印：",[190,115400,115403],{"className":115401,"code":115402,"language":8084,"meta":57},[8082],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[196,115404,115402],{"__ignoreMap":57},[31,115406,115407,115408,115410],{},"如果控制有效，你应该看到最终 ",[196,115409,105490],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,115412,104607],{"id":104606},[24,115414,115415,115418,115421,115427,115433,115440,115450],{},[27,115416,115417],{},"修改目标点位置。",[27,115419,115420],{},"重新运行，观察最终 tip 是否变化。",[27,115422,115423,115424,115426],{},"把 gravity 改成 ",[196,115425,104848],{},"，观察控制是否变差。",[27,115428,113440,115429,113444,115431,31228],{},[196,115430,104417],{},[196,115432,1925],{},[27,115434,104670,115435,104673,115437,115439],{},[196,115436,112855],{},[196,115438,109566],{},"，观察机械臂是否更难移动。",[27,115441,104670,115442,84789,115444,104673,115446,115449],{},[196,115443,105493],{},[196,115445,106405],{},[196,115447,115448],{},"0.2 0 0.6","，观察 reward 和 final tip。",[27,115451,115452],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,115454,104712],{"id":104711},[19,115456,115458],{"id":115457},"site-not-found",[196,115459,115460],{},"site not found",[31,115462,115463,115464,103277,115467,31228],{},"检查 XML 中是否有 ",[196,115465,115466],{},"site name=\"tip\"",[196,115468,115469],{},"site name=\"target\"",[19,115471,115472],{"id":115472},"机械臂完全不动",[31,115474,104782],{},[24,115476,115477,115482,115485,115490],{},[27,115478,115479,115481],{},[196,115480,104417],{}," 是否为 2",[27,115483,115484],{},"actuator 是否引用正确 joint",[27,115486,115487,115489],{},[196,115488,103335],{}," 是否被赋值",[27,115491,115492,115493],{},"是否执行了 ",[196,115494,102944],{},[19,115496,115497],{"id":115497},"控制效果不好",[31,115499,115500],{},"正常。本章重点不是控制器最优，而是任务结构:",[190,115502,115505],{"className":115503,"code":115504,"language":8084,"meta":57},[8082],"obs → action → mj_step → reward → next_obs\n",[196,115506,115504],{"__ignoreMap":57},[19,115508,115510],{"id":115509},"tip-坐标不变化","tip 坐标不变化",[31,115512,104834],{},[24,115514,115515,115520,115528,115537],{},[27,115516,115517,115518,31228],{},"是否每步调用了 ",[196,115519,102944],{},[27,115521,115522,115523,103277,115525,31228],{},"是否写入了 ",[196,115524,108385],{},[196,115526,115527],{},"data.ctrl[1]",[27,115529,115530,115531,3300,115534,31228],{},"actuator 是否正确引用 ",[196,115532,115533],{},"joint1",[196,115535,115536],{},"joint2",[27,115538,115539],{},"控制输入是否太小。",[19,115541,115542],{"id":115542},"目标点不会动",[31,115544,115545],{},"本章的 target 是固定 site：",[190,115547,115549],{"className":2763,"code":115548,"language":2765,"meta":57,"style":57},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[196,115550,115551],{"__ignoreMap":57},[199,115552,115553,115555,115557,115559,115561,115563,115565,115567,115570],{"class":201,"line":202},[199,115554,887],{"class":205},[199,115556,105469],{"class":874},[199,115558,967],{"class":878},[199,115560,895],{"class":205},[199,115562,114218],{"class":898},[199,115564,103365],{"class":878},[199,115566,895],{"class":205},[199,115568,115569],{"class":898},"\"0.5 0 0.4\"",[199,115571,115572],{"class":205}," ...\u002F>\n",[31,115574,115575,115576,115578],{},"它直接挂在 ",[196,115577,104100],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[19,115580,115581],{"id":115581},"机械臂不像真实机械臂",[31,115583,115584],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115586,104866],{"id":104865},[31,115588,115589],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[31,115591,115592],{},"核心公式：",[190,115594,115597],{"className":115595,"code":115596,"language":8084,"meta":57},[8082],"distance = ||tip - target||\nreward = -distance - action_cost\n",[196,115598,115596],{"__ignoreMap":57},[31,115600,115601],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1002,115603,115604],{},"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":57,"searchDepth":36,"depth":36,"links":115606},[115607,115608,115609,115614,115618,115619,115620,115628],{"id":102905,"depth":36,"text":102906},{"id":103028,"depth":36,"text":103029},{"id":103303,"depth":36,"text":103304,"children":115610},[115611,115612,115613],{"id":113810,"depth":73,"text":113811},{"id":113886,"depth":73,"text":113886},{"id":113916,"depth":73,"text":113917},{"id":103511,"depth":36,"text":103512,"children":115615},[115616,115617],{"id":103831,"depth":73,"text":103831},{"id":103967,"depth":73,"text":103967},{"id":104574,"depth":36,"text":104575},{"id":104606,"depth":36,"text":104607},{"id":104711,"depth":36,"text":104712,"children":115621},[115622,115623,115624,115625,115626,115627],{"id":115457,"depth":73,"text":115460},{"id":115472,"depth":73,"text":115472},{"id":115497,"depth":73,"text":115497},{"id":115509,"depth":73,"text":115510},{"id":115542,"depth":73,"text":115542},{"id":115581,"depth":73,"text":115581},{"id":104865,"depth":36,"text":104866},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113614,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115635,"title":115636,"body":115637,"description":57,"extension":3024,"meta":119099,"navigation":906,"path":119100,"seo":119101,"stem":119102,"__hash__":119103},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115638,"toc":119070},[115639,115642,115644,115647,115650,115675,115678,115684,115687,115693,115695,115697,115721,115723,115741,115743,115786,115788,115815,115817,115820,115872,115875,115881,115890,115893,115931,115934,115973,115976,115984,115991,115994,116000,116002,116056,116063,116108,116111,116115,116131,116141,116143,117404,117406,117418,117420,117431,117433,117436,117457,117460,117463,117496,117502,117505,117538,117541,117544,117585,117590,117604,117607,117620,117625,117648,117650,117665,117675,117690,117697,117717,117732,117750,117753,117770,117778,117794,117800,117832,117845,117877,117887,117922,117936,117982,117996,118038,118049,118062,118068,118101,118104,118131,118141,118181,118191,118208,118215,118233,118236,118277,118290,118305,118308,118331,118334,118346,118349,118368,118373,118394,118397,118412,118415,118449,118461,118476,118479,118504,118507,118526,118529,118561,118564,118588,118594,118624,118631,118644,118647,118649,118651,118657,118660,118663,118675,118678,118680,118734,118736,118740,118746,118755,118758,118765,118767,118790,118793,118797,118799,118817,118823,118825,118858,118861,118867,118871,118874,118894,118899,118903,118910,118930,118935,118939,118942,118962,118965,119051,119055,119058,119064,119067],[10,115640,115636],{"id":115641},"_8gymnasium-风格强化学习接口基础",[14,115643,102906],{"id":102905},[31,115645,115646],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[31,115648,115649],{},"你将实现:",[190,115651,115653],{"className":33221,"code":115652,"language":33223,"meta":57,"style":57},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[196,115654,115655,115665],{"__ignoreMap":57},[199,115656,115657,115660,115662],{"class":201,"line":202},[199,115658,115659],{"class":205},"obs, info ",[199,115661,895],{"class":1086},[199,115663,115664],{"class":205}," env.reset()\n",[199,115666,115667,115670,115672],{"class":201,"line":36},[199,115668,115669],{"class":205},"obs, reward, terminated, truncated, info ",[199,115671,895],{"class":1086},[199,115673,115674],{"class":205}," env.step(action)\n",[31,115676,115677],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[31,115679,115680,115681,115683],{},"前面章节的代码都是“脚本式”的：在 ",[196,115682,104554],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[31,115685,115686],{},"可以先记住 Gymnasium 环境的核心交互：",[190,115688,115691],{"className":115689,"code":115690,"language":8084,"meta":57},[8082],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[196,115692,115690],{"__ignoreMap":57},[14,115694,103029],{"id":103028},[31,115696,103032],{},[190,115698,115699],{"className":26666,"code":106647,"language":26668,"meta":57,"style":57},[196,115700,115701],{"__ignoreMap":57},[199,115702,115703,115705,115707,115709,115711,115713,115715,115717,115719],{"class":201,"line":202},[199,115704,27420],{"class":878},[199,115706,29158],{"class":898},[199,115708,26678],{"class":898},[199,115710,29243],{"class":1018},[199,115712,106662],{"class":898},[199,115714,103057],{"class":898},[199,115716,104760],{"class":898},[199,115718,103073],{"class":898},[199,115720,106671],{"class":898},[31,115722,105078],{},[190,115724,115726],{"className":26666,"code":115725,"language":26668,"meta":57,"style":57},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[196,115727,115728],{"__ignoreMap":57},[199,115729,115730,115732,115734,115736,115738],{"class":201,"line":202},[199,115731,26675],{"class":878},[199,115733,26678],{"class":898},[199,115735,103189],{"class":898},[199,115737,109970],{"class":898},[199,115739,115740],{"class":898}," gymnasium\n",[31,115742,105095],{},[190,115744,115746],{"className":26666,"code":115745,"language":26668,"meta":57,"style":57},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[196,115747,115748,115765,115774],{"__ignoreMap":57},[199,115749,115750,115752,115754,115756,115759,115761,115763],{"class":201,"line":202},[199,115751,33173],{"class":878},[199,115753,32019],{"class":898},[199,115755,27959],{"class":1018},[199,115757,115758],{"class":898}," mujoco-gym-api",[199,115760,103234],{"class":898},[199,115762,103237],{"class":1018},[199,115764,103240],{"class":1018},[199,115766,115767,115769,115771],{"class":201,"line":36},[199,115768,33173],{"class":878},[199,115770,103247],{"class":898},[199,115772,115773],{"class":898}," mujoco-gym-api\n",[199,115775,115776,115778,115780,115782,115784],{"class":201,"line":73},[199,115777,26675],{"class":878},[199,115779,26678],{"class":898},[199,115781,103189],{"class":898},[199,115783,109970],{"class":898},[199,115785,115740],{"class":898},[31,115787,103263],{},[24,115789,115790,115800,115803,115809],{},[27,115791,115792,115793,115796,115797,31228],{},"本章使用 ",[196,115794,115795],{},"gymnasium","，不是旧版 ",[196,115798,115799],{},"gym",[27,115801,115802],{},"Gymnasium API 与旧 Gym API 有差异。",[27,115804,115805,115806,31228],{},"旧 Gym 常见返回值是 4 个: ",[196,115807,115808],{},"obs, reward, done, info",[27,115810,115811,115812,31228],{},"Gymnasium 返回值是 5 个: ",[196,115813,115814],{},"obs, reward, terminated, truncated, info",[14,115816,103304],{"id":103303},[31,115818,115819],{},"强化学习环境接口包含:",[3227,115821,115822,115831],{},[3230,115823,115824],{},[3233,115825,115826,115829],{},[3236,115827,115828],{"align":26580},"方法",[3236,115830,104955],{"align":26580},[3273,115832,115833,115843,115853,115863],{},[3233,115834,115835,115840],{},[3278,115836,115837],{"align":26580},[196,115838,115839],{},"reset()",[3278,115841,115842],{"align":26580},"重置环境",[3233,115844,115845,115850],{},[3278,115846,115847],{"align":26580},[196,115848,115849],{},"step(action)",[3278,115851,115852],{"align":26580},"执行动作",[3233,115854,115855,115860],{},[3278,115856,115857],{"align":26580},[196,115858,115859],{},"observation_space",[3278,115861,115862],{"align":26580},"观测空间",[3233,115864,115865,115870],{},[3278,115866,115867],{"align":26580},[196,115868,115869],{},"action_space",[3278,115871,26498],{"align":26580},[31,115873,115874],{},"一个最小环境需要完成:",[190,115876,115879],{"className":115877,"code":115878,"language":8084,"meta":57},[8082],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[196,115880,115878],{"__ignoreMap":57},[19,115882,115884,103277,115887,106897],{"id":115883},"terminated-和-truncated-的区别",[196,115885,115886],{},"terminated",[196,115888,115889],{},"truncated",[31,115891,115892],{},"Gymnasium 把“结束”拆成两个概念：",[3227,115894,115895,115905],{},[3230,115896,115897],{},[3233,115898,115899,115901,115903],{},[3236,115900,106833],{"align":26580},[3236,115902,102959],{"align":26580},[3236,115904,24032],{"align":26580},[3273,115906,115907,115919],{},[3233,115908,115909,115913,115916],{},[3278,115910,115911],{"align":26580},[196,115912,115886],{},[3278,115914,115915],{"align":26580},"任务自然结束",[3278,115917,115918],{"align":26580},"机械臂到达目标、机器人摔倒",[3233,115920,115921,115925,115928],{},[3278,115922,115923],{"align":26580},[196,115924,115889],{},[3278,115926,115927],{"align":26580},"因外部限制截断",[3278,115929,115930],{"align":26580},"达到最大步数、时间限制",[31,115932,115933],{},"本章中：",[190,115935,115937],{"className":33221,"code":115936,"language":33223,"meta":57,"style":57},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[196,115938,115939,115954],{"__ignoreMap":57},[199,115940,115941,115944,115946,115949,115951],{"class":201,"line":202},[199,115942,115943],{"class":205},"terminated ",[199,115945,895],{"class":1086},[199,115947,115948],{"class":205}," dist ",[199,115950,887],{"class":1086},[199,115952,115953],{"class":1018}," 0.05\n",[199,115955,115956,115959,115961,115963,115966,115968,115970],{"class":201,"line":36},[199,115957,115958],{"class":205},"truncated ",[199,115960,895],{"class":1086},[199,115962,41714],{"class":1018},[199,115964,115965],{"class":205},".steps ",[199,115967,4635],{"class":1086},[199,115969,41714],{"class":1018},[199,115971,115972],{"class":205},".max_steps\n",[31,115974,115975],{},"也就是：",[24,115977,115978,115981],{},[27,115979,115980],{},"末端距离目标小于 0.05，任务成功结束。",[27,115982,115983],{},"步数超过上限，episode 被截断。",[19,115985,115987,103277,115989],{"id":115986},"observation_space-和-action_space",[196,115988,115859],{},[196,115990,115869],{},[31,115992,115993],{},"这两个对象告诉算法：",[190,115995,115998],{"className":115996,"code":115997,"language":8084,"meta":57},[8082],"观测长什么样\n动作允许多大\n",[196,115999,115997],{"__ignoreMap":57},[31,116001,2323],{},[190,116003,116005],{"className":33221,"code":116004,"language":33223,"meta":57,"style":57},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[196,116006,116007],{"__ignoreMap":57},[199,116008,116009,116011,116014,116016,116019,116022,116025,116027,116029,116032,116034,116036,116038,116040,116042,116044,116046,116049,116051,116053],{"class":201,"line":202},[199,116010,33665],{"class":1018},[199,116012,116013],{"class":205},".action_space ",[199,116015,895],{"class":1086},[199,116017,116018],{"class":205}," spaces.Box(",[199,116020,116021],{"class":8113},"low",[199,116023,116024],{"class":1086},"=-",[199,116026,104662],{"class":1018},[199,116028,1912],{"class":205},[199,116030,116031],{"class":8113},"high",[199,116033,895],{"class":1086},[199,116035,104662],{"class":1018},[199,116037,1912],{"class":205},[199,116039,98222],{"class":8113},[199,116041,895],{"class":1086},[199,116043,1537],{"class":205},[199,116045,1925],{"class":1018},[199,116047,116048],{"class":205},",), ",[199,116050,95759],{"class":8113},[199,116052,895],{"class":1086},[199,116054,116055],{"class":205},"np.float32)\n",[31,116057,116058,116059,116062],{},"表示动作是 2 维数组，每个值都在 ",[196,116060,116061],{},"[-1, 1]"," 范围内。",[190,116064,116066],{"className":33221,"code":116065,"language":33223,"meta":57,"style":57},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[196,116067,116068],{"__ignoreMap":57},[199,116069,116070,116072,116075,116077,116079,116081,116083,116086,116088,116090,116092,116094,116096,116098,116100,116102,116104,116106],{"class":201,"line":202},[199,116071,33665],{"class":1018},[199,116073,116074],{"class":205},".observation_space ",[199,116076,895],{"class":1086},[199,116078,116018],{"class":205},[199,116080,116021],{"class":8113},[199,116082,116024],{"class":1086},[199,116084,116085],{"class":205},"np.inf, ",[199,116087,116031],{"class":8113},[199,116089,895],{"class":1086},[199,116091,116085],{"class":205},[199,116093,98222],{"class":8113},[199,116095,895],{"class":1086},[199,116097,1537],{"class":205},[199,116099,3528],{"class":1018},[199,116101,116048],{"class":205},[199,116103,95759],{"class":8113},[199,116105,895],{"class":1086},[199,116107,116055],{"class":205},[31,116109,116110],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[19,116112,116114],{"id":116113},"frame_skip-是什么","frame_skip 是什么",[190,116116,116118],{"className":33221,"code":116117,"language":33223,"meta":57,"style":57},"self.frame_skip = 5\n",[196,116119,116120],{"__ignoreMap":57},[199,116121,116122,116124,116127,116129],{"class":201,"line":202},[199,116123,33665],{"class":1018},[199,116125,116126],{"class":205},".frame_skip ",[199,116128,895],{"class":1086},[199,116130,56686],{"class":1018},[31,116132,116133,116134,116137,116138,116140],{},"表示外部调用一次 ",[196,116135,116136],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[196,116139,103474],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,116142,103512],{"id":103511},[190,116144,116146],{"className":33221,"code":116145,"language":33223,"meta":57,"style":57},"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",[196,116147,116148,116160,116166,116176,116187,116191,116195,116203,116208,116212,116216,116220,116224,116228,116232,116236,116241,116245,116249,116253,116258,116262,116266,116270,116274,116278,116282,116286,116290,116294,116298,116302,116306,116310,116328,116343,116347,116360,116370,116385,116402,116406,116427,116446,116471,116485,116489,116499,116511,116521,116525,116567,116605,116609,116619,116635,116650,116669,116676,116680,116693,116708,116723,116736,116755,116771,116775,116816,116831,116846,116850,116889,116900,116913,116917,116927,116936,116940,116950,116965,116983,116987,116998,117015,117028,117032,117042,117046,117057,117068,117072,117086,117100,117116,117120,117133,117150,117165,117172,117176,117180,117192,117202,117220,117232,117244,117248,117256,117272,117281,117290,117298,117340,117353,117358,117362,117380,117384,117388,117400],{"__ignoreMap":57},[199,116149,116150,116152,116155,116157],{"class":201,"line":202},[199,116151,33235],{"class":1086},[199,116153,116154],{"class":205}," gymnasium ",[199,116156,34225],{"class":1086},[199,116158,116159],{"class":205}," gym\n",[199,116161,116162,116164],{"class":201,"line":36},[199,116163,33235],{"class":1086},[199,116165,103560],{"class":205},[199,116167,116168,116170,116172,116174],{"class":201,"line":73},[199,116169,33235],{"class":1086},[199,116171,34222],{"class":205},[199,116173,34225],{"class":1086},[199,116175,34228],{"class":205},[199,116177,116178,116180,116182,116184],{"class":201,"line":333},[199,116179,33579],{"class":1086},[199,116181,116154],{"class":205},[199,116183,33235],{"class":1086},[199,116185,116186],{"class":205}," spaces\n",[199,116188,116189],{"class":201,"line":227},[199,116190,907],{"emptyLinePlaceholder":906},[199,116192,116193],{"class":201,"line":238},[199,116194,907],{"emptyLinePlaceholder":906},[199,116196,116197,116199,116201],{"class":201,"line":252},[199,116198,103573],{"class":1018},[199,116200,16425],{"class":1086},[199,116202,103578],{"class":898},[199,116204,116205],{"class":201,"line":388},[199,116206,116207],{"class":898},"\u003Cmujoco model=\"gym_reacher\">\n",[199,116209,116210],{"class":201,"line":415},[199,116211,113997],{"class":898},[199,116213,116214],{"class":201,"line":426},[199,116215,907],{"emptyLinePlaceholder":906},[199,116217,116218],{"class":201,"line":1015},[199,116219,103597],{"class":898},[199,116221,116222],{"class":201,"line":1031},[199,116223,114015],{"class":898},[199,116225,116226],{"class":201,"line":1043},[199,116227,907],{"emptyLinePlaceholder":906},[199,116229,116230],{"class":201,"line":1049},[199,116231,114024],{"class":898},[199,116233,116234],{"class":201,"line":1054},[199,116235,114029],{"class":898},[199,116237,116238],{"class":201,"line":1062},[199,116239,116240],{"class":898},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[199,116242,116243],{"class":201,"line":1075},[199,116244,907],{"emptyLinePlaceholder":906},[199,116246,116247],{"class":201,"line":1092},[199,116248,114043],{"class":898},[199,116250,116251],{"class":201,"line":1107},[199,116252,114048],{"class":898},[199,116254,116255],{"class":201,"line":1128},[199,116256,116257],{"class":898},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[199,116259,116260],{"class":201,"line":1146},[199,116261,114058],{"class":898},[199,116263,116264],{"class":201,"line":1163},[199,116265,108697],{"class":898},[199,116267,116268],{"class":201,"line":1176},[199,116269,103626],{"class":898},[199,116271,116272],{"class":201,"line":1189},[199,116273,103631],{"class":898},[199,116275,116276],{"class":201,"line":1202},[199,116277,907],{"emptyLinePlaceholder":906},[199,116279,116280],{"class":201,"line":1207},[199,116281,108714],{"class":898},[199,116283,116284],{"class":201,"line":1212},[199,116285,114083],{"class":898},[199,116287,116288],{"class":201,"line":1225},[199,116289,114088],{"class":898},[199,116291,116292],{"class":201,"line":1236},[199,116293,108724],{"class":898},[199,116295,116296],{"class":201,"line":1249},[199,116297,103636],{"class":898},[199,116299,116300],{"class":201,"line":1262},[199,116301,97957],{"class":898},[199,116303,116304],{"class":201,"line":1275},[199,116305,907],{"emptyLinePlaceholder":906},[199,116307,116308],{"class":201,"line":1287},[199,116309,907],{"emptyLinePlaceholder":906},[199,116311,116312,116314,116317,116319,116321,116323,116326],{"class":201,"line":1292},[199,116313,17554],{"class":1086},[199,116315,116316],{"class":878}," ReacherEnv",[199,116318,1537],{"class":205},[199,116320,115799],{"class":878},[199,116322,3638],{"class":205},[199,116324,116325],{"class":878},"Env",[199,116327,33628],{"class":205},[199,116329,116330,116333,116335,116337,116340],{"class":201,"line":1297},[199,116331,116332],{"class":205},"    metadata ",[199,116334,895],{"class":1086},[199,116336,7345],{"class":205},[199,116338,116339],{"class":898},"\"render_modes\"",[199,116341,116342],{"class":205},": []}\n",[199,116344,116345],{"class":201,"line":1310},[199,116346,907],{"emptyLinePlaceholder":906},[199,116348,116349,116351,116353,116356,116358],{"class":201,"line":1315},[199,116350,33643],{"class":1086},[199,116352,33646],{"class":1018},[199,116354,116355],{"class":205},"(self) -> ",[199,116357,97945],{"class":1018},[199,116359,6640],{"class":205},[199,116361,116362,116364,116366,116368],{"class":201,"line":1330},[199,116363,33659],{"class":1018},[199,116365,20106],{"class":205},[199,116367,33671],{"class":1018},[199,116369,4892],{"class":205},[199,116371,116372,116374,116377,116379,116381,116383],{"class":201,"line":1335},[199,116373,33687],{"class":1018},[199,116375,116376],{"class":205},".model ",[199,116378,895],{"class":1086},[199,116380,103671],{"class":205},[199,116382,103573],{"class":1018},[199,116384,1594],{"class":205},[199,116386,116387,116389,116392,116394,116397,116399],{"class":201,"line":1340},[199,116388,33687],{"class":1018},[199,116390,116391],{"class":205},".data ",[199,116393,895],{"class":1086},[199,116395,116396],{"class":205}," mujoco.MjData(",[199,116398,33665],{"class":1018},[199,116400,116401],{"class":205},".model)\n",[199,116403,116404],{"class":201,"line":1352},[199,116405,907],{"emptyLinePlaceholder":906},[199,116407,116408,116410,116413,116415,116418,116420,116423,116425],{"class":201,"line":1367},[199,116409,33687],{"class":1018},[199,116411,116412],{"class":205},".tip_site_id ",[199,116414,895],{"class":1086},[199,116416,116417],{"class":205}," mujoco.mj_name2id(",[199,116419,33665],{"class":1018},[199,116421,116422],{"class":205},".model, mujoco.mjtObj.mjOBJ_SITE, ",[199,116424,113795],{"class":898},[199,116426,1594],{"class":205},[199,116428,116429,116431,116434,116436,116438,116440,116442,116444],{"class":201,"line":1381},[199,116430,33687],{"class":1018},[199,116432,116433],{"class":205},".target_site_id ",[199,116435,895],{"class":1086},[199,116437,116417],{"class":205},[199,116439,33665],{"class":1018},[199,116441,116422],{"class":205},[199,116443,114218],{"class":898},[199,116445,1594],{"class":205},[199,116447,116448,116450,116452,116454,116456,116458,116461,116463,116465,116467,116469],{"class":201,"line":1396},[199,116449,2017],{"class":1086},[199,116451,41714],{"class":1018},[199,116453,116412],{"class":205},[199,116455,887],{"class":1086},[199,116457,1621],{"class":1018},[199,116459,116460],{"class":1086}," or",[199,116462,41714],{"class":1018},[199,116464,116433],{"class":205},[199,116466,887],{"class":1086},[199,116468,1621],{"class":1018},[199,116470,6640],{"class":205},[199,116472,116473,116476,116478,116480,116483],{"class":201,"line":1401},[199,116474,116475],{"class":1086},"            raise",[199,116477,105694],{"class":1018},[199,116479,1537],{"class":205},[199,116481,116482],{"class":898},"\"required sites not found\"",[199,116484,1594],{"class":205},[199,116486,116487],{"class":201,"line":1411},[199,116488,907],{"emptyLinePlaceholder":906},[199,116490,116491,116493,116495,116497],{"class":201,"line":1421},[199,116492,33687],{"class":1018},[199,116494,116126],{"class":205},[199,116496,895],{"class":1086},[199,116498,56686],{"class":1018},[199,116500,116501,116503,116506,116508],{"class":201,"line":1426},[199,116502,33687],{"class":1018},[199,116504,116505],{"class":205},".max_steps ",[199,116507,895],{"class":1086},[199,116509,116510],{"class":1018}," 200\n",[199,116512,116513,116515,116517,116519],{"class":201,"line":1436},[199,116514,33687],{"class":1018},[199,116516,115965],{"class":205},[199,116518,895],{"class":1086},[199,116520,50173],{"class":1018},[199,116522,116523],{"class":201,"line":1441},[199,116524,907],{"emptyLinePlaceholder":906},[199,116526,116527,116529,116531,116533,116535,116537,116539,116541,116543,116545,116547,116549,116551,116553,116555,116557,116559,116561,116563,116565],{"class":201,"line":1451},[199,116528,33687],{"class":1018},[199,116530,116013],{"class":205},[199,116532,895],{"class":1086},[199,116534,116018],{"class":205},[199,116536,116021],{"class":8113},[199,116538,116024],{"class":1086},[199,116540,104662],{"class":1018},[199,116542,1912],{"class":205},[199,116544,116031],{"class":8113},[199,116546,895],{"class":1086},[199,116548,104662],{"class":1018},[199,116550,1912],{"class":205},[199,116552,98222],{"class":8113},[199,116554,895],{"class":1086},[199,116556,1537],{"class":205},[199,116558,1925],{"class":1018},[199,116560,116048],{"class":205},[199,116562,95759],{"class":8113},[199,116564,895],{"class":1086},[199,116566,116055],{"class":205},[199,116568,116569,116571,116573,116575,116577,116579,116581,116583,116585,116587,116589,116591,116593,116595,116597,116599,116601,116603],{"class":201,"line":1458},[199,116570,33687],{"class":1018},[199,116572,116074],{"class":205},[199,116574,895],{"class":1086},[199,116576,116018],{"class":205},[199,116578,116021],{"class":8113},[199,116580,116024],{"class":1086},[199,116582,116085],{"class":205},[199,116584,116031],{"class":8113},[199,116586,895],{"class":1086},[199,116588,116085],{"class":205},[199,116590,98222],{"class":8113},[199,116592,895],{"class":1086},[199,116594,1537],{"class":205},[199,116596,3528],{"class":1018},[199,116598,116048],{"class":205},[199,116600,95759],{"class":8113},[199,116602,895],{"class":1086},[199,116604,116055],{"class":205},[199,116606,116607],{"class":201,"line":1464},[199,116608,907],{"emptyLinePlaceholder":906},[199,116610,116611,116613,116616],{"class":201,"line":1478},[199,116612,33643],{"class":1086},[199,116614,116615],{"class":878}," _get_obs",[199,116617,116618],{"class":205},"(self) -> np.ndarray:\n",[199,116620,116621,116623,116625,116627,116630,116632],{"class":201,"line":1516},[199,116622,114396],{"class":205},[199,116624,895],{"class":1086},[199,116626,41714],{"class":1018},[199,116628,116629],{"class":205},".data.site_xpos[",[199,116631,33665],{"class":1018},[199,116633,116634],{"class":205},".tip_site_id].copy()\n",[199,116636,116637,116639,116641,116643,116645,116647],{"class":201,"line":1522},[199,116638,114409],{"class":205},[199,116640,895],{"class":1086},[199,116642,41714],{"class":1018},[199,116644,116629],{"class":205},[199,116646,33665],{"class":1018},[199,116648,116649],{"class":205},".target_site_id].copy()\n",[199,116651,116652,116654,116656,116659,116661,116664,116666],{"class":201,"line":1528},[199,116653,112441],{"class":205},[199,116655,895],{"class":1086},[199,116657,116658],{"class":205}," np.concatenate([",[199,116660,33665],{"class":1018},[199,116662,116663],{"class":205},".data.qpos.copy(), ",[199,116665,33665],{"class":1018},[199,116667,116668],{"class":205},".data.qvel.copy(), tip, target])\n",[199,116670,116671,116673],{"class":201,"line":1557},[199,116672,17612],{"class":1086},[199,116674,116675],{"class":205}," obs.astype(np.float32)\n",[199,116677,116678],{"class":201,"line":1563},[199,116679,907],{"emptyLinePlaceholder":906},[199,116681,116682,116684,116687,116689,116691],{"class":201,"line":1568},[199,116683,33643],{"class":1086},[199,116685,116686],{"class":878}," _get_reward",[199,116688,116355],{"class":205},[199,116690,3135],{"class":1018},[199,116692,6640],{"class":205},[199,116694,116695,116697,116699,116701,116703,116705],{"class":201,"line":1574},[199,116696,114396],{"class":205},[199,116698,895],{"class":1086},[199,116700,41714],{"class":1018},[199,116702,116629],{"class":205},[199,116704,33665],{"class":1018},[199,116706,116707],{"class":205},".tip_site_id]\n",[199,116709,116710,116712,116714,116716,116718,116720],{"class":201,"line":1580},[199,116711,114409],{"class":205},[199,116713,895],{"class":1086},[199,116715,41714],{"class":1018},[199,116717,116629],{"class":205},[199,116719,33665],{"class":1018},[199,116721,116722],{"class":205},".target_site_id]\n",[199,116724,116725,116728,116730,116732,116734],{"class":201,"line":1597},[199,116726,116727],{"class":205},"        dist ",[199,116729,895],{"class":1086},[199,116731,113860],{"class":205},[199,116733,1998],{"class":1086},[199,116735,113865],{"class":205},[199,116737,116738,116741,116743,116745,116747,116750,116752],{"class":201,"line":1602},[199,116739,116740],{"class":205},"        control_cost ",[199,116742,895],{"class":1086},[199,116744,114296],{"class":1018},[199,116746,9415],{"class":1086},[199,116748,116749],{"class":205}," np.sum(np.square(",[199,116751,33665],{"class":1018},[199,116753,116754],{"class":205},".data.ctrl))\n",[199,116756,116757,116759,116761,116763,116765,116767,116769],{"class":201,"line":1608},[199,116758,17612],{"class":1086},[199,116760,112056],{"class":1018},[199,116762,1537],{"class":205},[199,116764,1998],{"class":1086},[199,116766,113855],{"class":205},[199,116768,1998],{"class":1086},[199,116770,114318],{"class":205},[199,116772,116773],{"class":201,"line":1640},[199,116774,907],{"emptyLinePlaceholder":906},[199,116776,116777,116779,116782,116785,116787,116790,116792,116794,116796,116798,116800,116803,116806,116808,116810,116812,116814],{"class":201,"line":1653},[199,116778,33643],{"class":1086},[199,116780,116781],{"class":878}," reset",[199,116783,116784],{"class":205},"(self, ",[199,116786,3537],{"class":1086},[199,116788,116789],{"class":205},", seed: ",[199,116791,3100],{"class":1018},[199,116793,27953],{"class":1086},[199,116795,41774],{"class":1018},[199,116797,16425],{"class":1086},[199,116799,41774],{"class":1018},[199,116801,116802],{"class":205},", options: ",[199,116804,116805],{"class":1018},"dict",[199,116807,27953],{"class":1086},[199,116809,41774],{"class":1018},[199,116811,16425],{"class":1086},[199,116813,41774],{"class":1018},[199,116815,33628],{"class":205},[199,116817,116818,116820,116823,116826,116828],{"class":201,"line":1673},[199,116819,33659],{"class":1018},[199,116821,116822],{"class":205},"().reset(",[199,116824,116825],{"class":8113},"seed",[199,116827,895],{"class":1086},[199,116829,116830],{"class":205},"seed)\n",[199,116832,116833,116836,116838,116841,116843],{"class":201,"line":1690},[199,116834,116835],{"class":205},"        mujoco.mj_resetData(",[199,116837,33665],{"class":1018},[199,116839,116840],{"class":205},".model, ",[199,116842,33665],{"class":1018},[199,116844,116845],{"class":205},".data)\n",[199,116847,116848],{"class":201,"line":1706},[199,116849,907],{"emptyLinePlaceholder":906},[199,116851,116852,116854,116857,116859,116861,116864,116866,116868,116870,116872,116874,116876,116878,116880,116882,116884,116886],{"class":201,"line":1712},[199,116853,33687],{"class":1018},[199,116855,116856],{"class":205},".data.qpos[:] ",[199,116858,895],{"class":1086},[199,116860,41714],{"class":1018},[199,116862,116863],{"class":205},".np_random.uniform(",[199,116865,116021],{"class":8113},[199,116867,116024],{"class":1086},[199,116869,88469],{"class":1018},[199,116871,1912],{"class":205},[199,116873,116031],{"class":8113},[199,116875,895],{"class":1086},[199,116877,88469],{"class":1018},[199,116879,1912],{"class":205},[199,116881,34338],{"class":8113},[199,116883,895],{"class":1086},[199,116885,33665],{"class":1018},[199,116887,116888],{"class":205},".model.nq)\n",[199,116890,116891,116893,116896,116898],{"class":201,"line":1720},[199,116892,33687],{"class":1018},[199,116894,116895],{"class":205},".data.qvel[:] ",[199,116897,895],{"class":1086},[199,116899,107020],{"class":1018},[199,116901,116902,116905,116907,116909,116911],{"class":201,"line":1725},[199,116903,116904],{"class":205},"        mujoco.mj_forward(",[199,116906,33665],{"class":1018},[199,116908,116840],{"class":205},[199,116910,33665],{"class":1018},[199,116912,116845],{"class":205},[199,116914,116915],{"class":201,"line":1731},[199,116916,907],{"emptyLinePlaceholder":906},[199,116918,116919,116921,116923,116925],{"class":201,"line":1745},[199,116920,33687],{"class":1018},[199,116922,115965],{"class":205},[199,116924,895],{"class":1086},[199,116926,50173],{"class":1018},[199,116928,116929,116931,116933],{"class":201,"line":1754},[199,116930,17612],{"class":1086},[199,116932,41714],{"class":1018},[199,116934,116935],{"class":205},"._get_obs(), {}\n",[199,116937,116938],{"class":201,"line":1763},[199,116939,907],{"emptyLinePlaceholder":906},[199,116941,116942,116944,116947],{"class":201,"line":1768},[199,116943,33643],{"class":1086},[199,116945,116946],{"class":878}," step",[199,116948,116949],{"class":205},"(self, action):\n",[199,116951,116952,116954,116956,116959,116961,116963],{"class":201,"line":19628},[199,116953,112481],{"class":205},[199,116955,895],{"class":1086},[199,116957,116958],{"class":205}," np.asarray(action, ",[199,116960,95759],{"class":8113},[199,116962,895],{"class":1086},[199,116964,116055],{"class":205},[199,116966,116967,116969,116971,116973,116975,116978,116980],{"class":201,"line":19641},[199,116968,112481],{"class":205},[199,116970,895],{"class":1086},[199,116972,109706],{"class":205},[199,116974,33665],{"class":1018},[199,116976,116977],{"class":205},".action_space.low, ",[199,116979,33665],{"class":1018},[199,116981,116982],{"class":205},".action_space.high)\n",[199,116984,116985],{"class":201,"line":19646},[199,116986,907],{"emptyLinePlaceholder":906},[199,116988,116989,116991,116994,116996],{"class":201,"line":19660},[199,116990,33687],{"class":1018},[199,116992,116993],{"class":205},".data.ctrl[:] ",[199,116995,895],{"class":1086},[199,116997,109729],{"class":205},[199,116999,117000,117002,117004,117006,117008,117010,117012],{"class":201,"line":19665},[199,117001,1481],{"class":1086},[199,117003,103760],{"class":205},[199,117005,28886],{"class":1086},[199,117007,35285],{"class":1018},[199,117009,1537],{"class":205},[199,117011,33665],{"class":1018},[199,117013,117014],{"class":205},".frame_skip):\n",[199,117016,117017,117020,117022,117024,117026],{"class":201,"line":19671},[199,117018,117019],{"class":205},"            mujoco.mj_step(",[199,117021,33665],{"class":1018},[199,117023,116840],{"class":205},[199,117025,33665],{"class":1018},[199,117027,116845],{"class":205},[199,117029,117030],{"class":201,"line":19676},[199,117031,907],{"emptyLinePlaceholder":906},[199,117033,117034,117036,117038,117040],{"class":201,"line":19690},[199,117035,33687],{"class":1018},[199,117037,115965],{"class":205},[199,117039,12362],{"class":1086},[199,117041,57958],{"class":1018},[199,117043,117044],{"class":201,"line":19695},[199,117045,907],{"emptyLinePlaceholder":906},[199,117047,117048,117050,117052,117054],{"class":201,"line":19700},[199,117049,112441],{"class":205},[199,117051,895],{"class":1086},[199,117053,41714],{"class":1018},[199,117055,117056],{"class":205},"._get_obs()\n",[199,117058,117059,117061,117063,117065],{"class":201,"line":19714},[199,117060,112546],{"class":205},[199,117062,895],{"class":1086},[199,117064,41714],{"class":1018},[199,117066,117067],{"class":205},"._get_reward()\n",[199,117069,117070],{"class":201,"line":19726},[199,117071,907],{"emptyLinePlaceholder":906},[199,117073,117074,117076,117078,117080,117082,117084],{"class":201,"line":19731},[199,117075,114396],{"class":205},[199,117077,895],{"class":1086},[199,117079,41714],{"class":1018},[199,117081,116629],{"class":205},[199,117083,33665],{"class":1018},[199,117085,116707],{"class":205},[199,117087,117088,117090,117092,117094,117096,117098],{"class":201,"line":19744},[199,117089,114409],{"class":205},[199,117091,895],{"class":1086},[199,117093,41714],{"class":1018},[199,117095,116629],{"class":205},[199,117097,33665],{"class":1018},[199,117099,116722],{"class":205},[199,117101,117102,117104,117106,117108,117111,117113],{"class":201,"line":19749},[199,117103,116727],{"class":205},[199,117105,895],{"class":1086},[199,117107,112056],{"class":1018},[199,117109,117110],{"class":205},"(np.linalg.norm(tip ",[199,117112,1998],{"class":1086},[199,117114,117115],{"class":205}," target))\n",[199,117117,117118],{"class":201,"line":19754},[199,117119,907],{"emptyLinePlaceholder":906},[199,117121,117122,117125,117127,117129,117131],{"class":201,"line":19759},[199,117123,117124],{"class":205},"        terminated ",[199,117126,895],{"class":1086},[199,117128,115948],{"class":205},[199,117130,887],{"class":1086},[199,117132,115953],{"class":1018},[199,117134,117135,117138,117140,117142,117144,117146,117148],{"class":201,"line":19772},[199,117136,117137],{"class":205},"        truncated ",[199,117139,895],{"class":1086},[199,117141,41714],{"class":1018},[199,117143,115965],{"class":205},[199,117145,4635],{"class":1086},[199,117147,41714],{"class":1018},[199,117149,115972],{"class":205},[199,117151,117152,117155,117157,117159,117162],{"class":201,"line":19777},[199,117153,117154],{"class":205},"        info ",[199,117156,895],{"class":1086},[199,117158,7345],{"class":205},[199,117160,117161],{"class":898},"\"distance\"",[199,117163,117164],{"class":205},": dist}\n",[199,117166,117167,117169],{"class":201,"line":35475},[199,117168,17612],{"class":1086},[199,117170,117171],{"class":205}," obs, reward, terminated, truncated, info\n",[199,117173,117174],{"class":201,"line":35481},[199,117175,907],{"emptyLinePlaceholder":906},[199,117177,117178],{"class":201,"line":35487},[199,117179,907],{"emptyLinePlaceholder":906},[199,117181,117182,117184,117186,117188,117190],{"class":201,"line":35493},[199,117183,34789],{"class":1086},[199,117185,4889],{"class":878},[199,117187,103657],{"class":205},[199,117189,97945],{"class":1018},[199,117191,6640],{"class":205},[199,117193,117194,117197,117199],{"class":201,"line":35499},[199,117195,117196],{"class":205},"    env ",[199,117198,895],{"class":1086},[199,117200,117201],{"class":205}," ReacherEnv()\n",[199,117203,117204,117207,117209,117212,117214,117216,117218],{"class":201,"line":35510},[199,117205,117206],{"class":205},"    obs, info ",[199,117208,895],{"class":1086},[199,117210,117211],{"class":205}," env.reset(",[199,117213,116825],{"class":8113},[199,117215,895],{"class":1086},[199,117217,1025],{"class":1018},[199,117219,1594],{"class":205},[199,117221,117222,117224,117226,117229],{"class":201,"line":35516},[199,117223,34141],{"class":1018},[199,117225,1537],{"class":205},[199,117227,117228],{"class":898},"\"initial obs shape:\"",[199,117230,117231],{"class":205},", obs.shape)\n",[199,117233,117234,117236,117238,117241],{"class":201,"line":35536},[199,117235,34141],{"class":1018},[199,117237,1537],{"class":205},[199,117239,117240],{"class":898},"\"initial info:\"",[199,117242,117243],{"class":205},", info)\n",[199,117245,117246],{"class":201,"line":35542},[199,117247,907],{"emptyLinePlaceholder":906},[199,117249,117250,117252,117254],{"class":201,"line":35553},[199,117251,112412],{"class":205},[199,117253,895],{"class":1086},[199,117255,107020],{"class":1018},[199,117257,117258,117260,117262,117264,117266,117268,117270],{"class":201,"line":35559},[199,117259,1937],{"class":1086},[199,117261,34458],{"class":205},[199,117263,28886],{"class":1086},[199,117265,35285],{"class":1018},[199,117267,1537],{"class":205},[199,117269,3779],{"class":1018},[199,117271,33628],{"class":205},[199,117273,117274,117276,117278],{"class":201,"line":35565},[199,117275,112481],{"class":205},[199,117277,895],{"class":1086},[199,117279,117280],{"class":205}," env.action_space.sample()\n",[199,117282,117283,117286,117288],{"class":201,"line":35571},[199,117284,117285],{"class":205},"        obs, reward, terminated, truncated, info ",[199,117287,895],{"class":1086},[199,117289,115674],{"class":205},[199,117291,117292,117294,117296],{"class":201,"line":35577},[199,117293,112556],{"class":205},[199,117295,12362],{"class":1086},[199,117297,112561],{"class":205},[199,117299,117300,117302,117304,117306,117308,117311,117313,117315,117318,117320,117322,117325,117327,117329,117332,117334,117336,117338],{"class":201,"line":35583},[199,117301,35293],{"class":1018},[199,117303,1537],{"class":205},[199,117305,112590],{"class":898},[199,117307,112593],{"class":205},[199,117309,117310],{"class":898},"\"reward:\"",[199,117312,1912],{"class":205},[199,117314,34860],{"class":1018},[199,117316,117317],{"class":205},"(reward, ",[199,117319,1920],{"class":1018},[199,117321,112604],{"class":205},[199,117323,117324],{"class":898},"\"distance:\"",[199,117326,1912],{"class":205},[199,117328,34860],{"class":1018},[199,117330,117331],{"class":205},"(info[",[199,117333,117161],{"class":898},[199,117335,114461],{"class":205},[199,117337,1920],{"class":1018},[199,117339,1554],{"class":205},[199,117341,117342,117344,117347,117350],{"class":201,"line":35589},[199,117343,2017],{"class":1086},[199,117345,117346],{"class":205}," terminated ",[199,117348,117349],{"class":1086},"or",[199,117351,117352],{"class":205}," truncated:\n",[199,117354,117355],{"class":201,"line":35595},[199,117356,117357],{"class":1086},"            break\n",[199,117359,117360],{"class":201,"line":35615},[199,117361,907],{"emptyLinePlaceholder":906},[199,117363,117364,117366,117368,117370,117372,117374,117376,117378],{"class":201,"line":35621},[199,117365,34141],{"class":1018},[199,117367,1537],{"class":205},[199,117369,112635],{"class":898},[199,117371,1912],{"class":205},[199,117373,34860],{"class":1018},[199,117375,112642],{"class":205},[199,117377,1920],{"class":1018},[199,117379,1554],{"class":205},[199,117381,117382],{"class":201,"line":35637},[199,117383,907],{"emptyLinePlaceholder":906},[199,117385,117386],{"class":201,"line":35643},[199,117387,907],{"emptyLinePlaceholder":906},[199,117389,117390,117392,117394,117396,117398],{"class":201,"line":35657},[199,117391,4470],{"class":1086},[199,117393,34062],{"class":1018},[199,117395,103818],{"class":1086},[199,117397,103821],{"class":898},[199,117399,6640],{"class":205},[199,117401,117402],{"class":201,"line":35663},[199,117403,103828],{"class":205},[31,117405,105829],{},[190,117407,117409],{"className":26666,"code":117408,"language":26668,"meta":57,"style":57},"touch ch8_gym_env.py\n",[196,117410,117411],{"__ignoreMap":57},[199,117412,117413,117415],{"class":201,"line":202},[199,117414,103542],{"class":878},[199,117416,117417],{"class":898}," ch8_gym_env.py\n",[31,117419,112703],{},[190,117421,117423],{"className":26666,"code":117422,"language":26668,"meta":57,"style":57},"python ch8_gym_env.py\n",[196,117424,117425],{"__ignoreMap":57},[199,117426,117427,117429],{"class":201,"line":202},[199,117428,33223],{"class":878},[199,117430,117417],{"class":898},[19,117432,103831],{"id":103831},[31,117434,117435],{},"继承 Gymnasium 环境：",[190,117437,117439],{"className":33221,"code":117438,"language":33223,"meta":57,"style":57},"class ReacherEnv(gym.Env):\n",[196,117440,117441],{"__ignoreMap":57},[199,117442,117443,117445,117447,117449,117451,117453,117455],{"class":201,"line":202},[199,117444,17554],{"class":1086},[199,117446,116316],{"class":878},[199,117448,1537],{"class":205},[199,117450,115799],{"class":878},[199,117452,3638],{"class":205},[199,117454,116325],{"class":878},[199,117456,33628],{"class":205},[31,117458,117459],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[31,117461,117462],{},"初始化模型：",[190,117464,117466],{"className":33221,"code":117465,"language":33223,"meta":57,"style":57},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[196,117467,117468,117482],{"__ignoreMap":57},[199,117469,117470,117472,117474,117476,117478,117480],{"class":201,"line":202},[199,117471,33665],{"class":1018},[199,117473,116376],{"class":205},[199,117475,895],{"class":1086},[199,117477,103671],{"class":205},[199,117479,103573],{"class":1018},[199,117481,1594],{"class":205},[199,117483,117484,117486,117488,117490,117492,117494],{"class":201,"line":36},[199,117485,33665],{"class":1018},[199,117487,116391],{"class":205},[199,117489,895],{"class":1086},[199,117491,116396],{"class":205},[199,117493,33665],{"class":1018},[199,117495,116401],{"class":205},[31,117497,117498,117499,117501],{},"这和前面章节一样，只是现在放到了类的 ",[196,117500,33671],{}," 里。",[31,117503,117504],{},"缓存 site ID：",[190,117506,117508],{"className":33221,"code":117507,"language":33223,"meta":57,"style":57},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[196,117509,117510,117524],{"__ignoreMap":57},[199,117511,117512,117514,117516,117518,117520,117522],{"class":201,"line":202},[199,117513,33665],{"class":1018},[199,117515,116412],{"class":205},[199,117517,895],{"class":1086},[199,117519,116417],{"class":205},[199,117521,91813],{"class":1018},[199,117523,1594],{"class":205},[199,117525,117526,117528,117530,117532,117534,117536],{"class":201,"line":36},[199,117527,33665],{"class":1018},[199,117529,116433],{"class":205},[199,117531,895],{"class":1086},[199,117533,116417],{"class":205},[199,117535,91813],{"class":1018},[199,117537,1594],{"class":205},[31,117539,117540],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[31,117542,117543],{},"reset：",[190,117545,117547],{"className":33221,"code":117546,"language":33223,"meta":57,"style":57},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[196,117548,117549],{"__ignoreMap":57},[199,117550,117551,117553,117555,117557,117559,117561,117563,117565,117567,117569,117571,117573,117575,117577,117579,117581,117583],{"class":201,"line":202},[199,117552,34789],{"class":1086},[199,117554,116781],{"class":878},[199,117556,116784],{"class":205},[199,117558,3537],{"class":1086},[199,117560,116789],{"class":205},[199,117562,3100],{"class":1018},[199,117564,27953],{"class":1086},[199,117566,41774],{"class":1018},[199,117568,16425],{"class":1086},[199,117570,41774],{"class":1018},[199,117572,116802],{"class":205},[199,117574,116805],{"class":1018},[199,117576,27953],{"class":1086},[199,117578,41774],{"class":1018},[199,117580,16425],{"class":1086},[199,117582,41774],{"class":1018},[199,117584,33628],{"class":205},[31,117586,117587,117589],{},[196,117588,72315],{}," 做四件事：",[24,117591,117592,117595,117598,117601],{},[27,117593,117594],{},"设置随机种子。",[27,117596,117597],{},"重置 MuJoCo data。",[27,117599,117600],{},"随机初始化关节角。",[27,117602,117603],{},"返回初始观测和 info。",[31,117605,117606],{},"step：",[190,117608,117610],{"className":33221,"code":117609,"language":33223,"meta":57,"style":57},"def step(self, action):\n",[196,117611,117612],{"__ignoreMap":57},[199,117613,117614,117616,117618],{"class":201,"line":202},[199,117615,34789],{"class":1086},[199,117617,116946],{"class":878},[199,117619,116949],{"class":205},[31,117621,117622,117624],{},[196,117623,109393],{}," 做六件事：",[24,117626,117627,117630,117636,117639,117642,117645],{},[27,117628,117629],{},"检查并裁剪 action。",[27,117631,117632,117633,31228],{},"写入 ",[196,117634,117635],{},"self.data.ctrl",[27,117637,117638],{},"连续推进若干个 MuJoCo 物理步。",[27,117640,117641],{},"计算新观测。",[27,117643,117644],{},"计算奖励和结束条件。",[27,117646,117647],{},"返回 Gymnasium 标准五元组。",[19,117649,103967],{"id":103967},[190,117651,117653],{"className":33221,"code":117652,"language":33223,"meta":57,"style":57},"import gymnasium as gym\n",[196,117654,117655],{"__ignoreMap":57},[199,117656,117657,117659,117661,117663],{"class":201,"line":202},[199,117658,33235],{"class":1086},[199,117660,116154],{"class":205},[199,117662,34225],{"class":1086},[199,117664,116159],{"class":205},[31,117666,117667,117668,117670,117671,117674],{},"导入 Gymnasium，并起别名 ",[196,117669,115799],{},"。后面写 ",[196,117672,117673],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[190,117676,117678],{"className":33221,"code":117677,"language":33223,"meta":57,"style":57},"from gymnasium import spaces\n",[196,117679,117680],{"__ignoreMap":57},[199,117681,117682,117684,117686,117688],{"class":201,"line":202},[199,117683,33579],{"class":1086},[199,117685,116154],{"class":205},[199,117687,33235],{"class":1086},[199,117689,116186],{"class":205},[31,117691,117692,117693,117696],{},"导入空间定义工具。",[196,117694,117695],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[190,117698,117699],{"className":33221,"code":117438,"language":33223,"meta":57,"style":57},[196,117700,117701],{"__ignoreMap":57},[199,117702,117703,117705,117707,117709,117711,117713,117715],{"class":201,"line":202},[199,117704,17554],{"class":1086},[199,117706,116316],{"class":878},[199,117708,1537],{"class":205},[199,117710,115799],{"class":878},[199,117712,3638],{"class":205},[199,117714,116325],{"class":878},[199,117716,33628],{"class":205},[31,117718,117719,117720,117723,117724,117726,117727,103277,117729,117731],{},"定义一个类，名字叫 ",[196,117721,117722],{},"ReacherEnv","。括号里的 ",[196,117725,117673],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[196,117728,72315],{},[196,117730,109393],{}," 这两个核心方法。",[190,117733,117735],{"className":33221,"code":117734,"language":33223,"meta":57,"style":57},"metadata = {\"render_modes\": []}\n",[196,117736,117737],{"__ignoreMap":57},[199,117738,117739,117742,117744,117746,117748],{"class":201,"line":202},[199,117740,117741],{"class":205},"metadata ",[199,117743,895],{"class":1086},[199,117745,7345],{"class":205},[199,117747,116339],{"class":898},[199,117749,116342],{"class":205},[31,117751,117752],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[190,117754,117756],{"className":33221,"code":117755,"language":33223,"meta":57,"style":57},"def __init__(self) -> None:\n",[196,117757,117758],{"__ignoreMap":57},[199,117759,117760,117762,117764,117766,117768],{"class":201,"line":202},[199,117761,34789],{"class":1086},[199,117763,33646],{"class":1018},[199,117765,116355],{"class":205},[199,117767,97945],{"class":1018},[199,117769,6640],{"class":205},[31,117771,117772,117774,117775,31228],{},[196,117773,33671],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[196,117776,117777],{},"env = ReacherEnv()",[190,117779,117781],{"className":33221,"code":117780,"language":33223,"meta":57,"style":57},"super().__init__()\n",[196,117782,117783],{"__ignoreMap":57},[199,117784,117785,117788,117790,117792],{"class":201,"line":202},[199,117786,117787],{"class":1018},"super",[199,117789,20106],{"class":205},[199,117791,33671],{"class":1018},[199,117793,4892],{"class":205},[31,117795,117796,117797,117799],{},"调用父类 ",[196,117798,117673],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[190,117801,117802],{"className":33221,"code":117465,"language":33223,"meta":57,"style":57},[196,117803,117804,117818],{"__ignoreMap":57},[199,117805,117806,117808,117810,117812,117814,117816],{"class":201,"line":202},[199,117807,33665],{"class":1018},[199,117809,116376],{"class":205},[199,117811,895],{"class":1086},[199,117813,103671],{"class":205},[199,117815,103573],{"class":1018},[199,117817,1594],{"class":205},[199,117819,117820,117822,117824,117826,117828,117830],{"class":201,"line":36},[199,117821,33665],{"class":1018},[199,117823,116391],{"class":205},[199,117825,895],{"class":1086},[199,117827,116396],{"class":205},[199,117829,33665],{"class":1018},[199,117831,116401],{"class":205},[31,117833,117834,117835,117837,117838,103277,117841,117844],{},"把 MuJoCo 模型和状态保存到 ",[196,117836,33665],{}," 上。",[196,117839,117840],{},"self.model",[196,117842,117843],{},"self.data"," 表示这个环境对象自己的模型和状态。",[190,117846,117847],{"className":33221,"code":117507,"language":33223,"meta":57,"style":57},[196,117848,117849,117863],{"__ignoreMap":57},[199,117850,117851,117853,117855,117857,117859,117861],{"class":201,"line":202},[199,117852,33665],{"class":1018},[199,117854,116412],{"class":205},[199,117856,895],{"class":1086},[199,117858,116417],{"class":205},[199,117860,91813],{"class":1018},[199,117862,1594],{"class":205},[199,117864,117865,117867,117869,117871,117873,117875],{"class":201,"line":36},[199,117866,33665],{"class":1018},[199,117868,116433],{"class":205},[199,117870,895],{"class":1086},[199,117872,116417],{"class":205},[199,117874,91813],{"class":1018},[199,117876,1594],{"class":205},[31,117878,117879,117880,103277,117883,117886],{},"提前查好 tip 和 target 的 site ID。这样 ",[196,117881,117882],{},"_get_obs",[196,117884,117885],{},"_get_reward"," 里就不用每次按名字查找。",[190,117888,117890],{"className":33221,"code":117889,"language":33223,"meta":57,"style":57},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[196,117891,117892,117902,117912],{"__ignoreMap":57},[199,117893,117894,117896,117898,117900],{"class":201,"line":202},[199,117895,33665],{"class":1018},[199,117897,116126],{"class":205},[199,117899,895],{"class":1086},[199,117901,56686],{"class":1018},[199,117903,117904,117906,117908,117910],{"class":201,"line":36},[199,117905,33665],{"class":1018},[199,117907,116505],{"class":205},[199,117909,895],{"class":1086},[199,117911,116510],{"class":1018},[199,117913,117914,117916,117918,117920],{"class":201,"line":73},[199,117915,33665],{"class":1018},[199,117917,115965],{"class":205},[199,117919,895],{"class":1086},[199,117921,50173],{"class":1018},[31,117923,117924,117927,117928,117931,117932,117935],{},[196,117925,117926],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[196,117929,117930],{},"max_steps"," 是一个 episode 最多运行多少步。",[196,117933,117934],{},"steps"," 记录当前 episode 已经走了多少步。",[190,117937,117938],{"className":33221,"code":116004,"language":33223,"meta":57,"style":57},[196,117939,117940],{"__ignoreMap":57},[199,117941,117942,117944,117946,117948,117950,117952,117954,117956,117958,117960,117962,117964,117966,117968,117970,117972,117974,117976,117978,117980],{"class":201,"line":202},[199,117943,33665],{"class":1018},[199,117945,116013],{"class":205},[199,117947,895],{"class":1086},[199,117949,116018],{"class":205},[199,117951,116021],{"class":8113},[199,117953,116024],{"class":1086},[199,117955,104662],{"class":1018},[199,117957,1912],{"class":205},[199,117959,116031],{"class":8113},[199,117961,895],{"class":1086},[199,117963,104662],{"class":1018},[199,117965,1912],{"class":205},[199,117967,98222],{"class":8113},[199,117969,895],{"class":1086},[199,117971,1537],{"class":205},[199,117973,1925],{"class":1018},[199,117975,116048],{"class":205},[199,117977,95759],{"class":8113},[199,117979,895],{"class":1086},[199,117981,116055],{"class":205},[31,117983,117984,117985,117988,117989,103277,117992,117995],{},"定义动作空间。",[196,117986,117987],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[196,117990,117991],{},"low=-1.0",[196,117993,117994],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[190,117997,117998],{"className":33221,"code":116065,"language":33223,"meta":57,"style":57},[196,117999,118000],{"__ignoreMap":57},[199,118001,118002,118004,118006,118008,118010,118012,118014,118016,118018,118020,118022,118024,118026,118028,118030,118032,118034,118036],{"class":201,"line":202},[199,118003,33665],{"class":1018},[199,118005,116074],{"class":205},[199,118007,895],{"class":1086},[199,118009,116018],{"class":205},[199,118011,116021],{"class":8113},[199,118013,116024],{"class":1086},[199,118015,116085],{"class":205},[199,118017,116031],{"class":8113},[199,118019,895],{"class":1086},[199,118021,116085],{"class":205},[199,118023,98222],{"class":8113},[199,118025,895],{"class":1086},[199,118027,1537],{"class":205},[199,118029,3528],{"class":1018},[199,118031,116048],{"class":205},[199,118033,95759],{"class":8113},[199,118035,895],{"class":1086},[199,118037,116055],{"class":205},[31,118039,118040,118041,118044,118045,118048],{},"定义观测空间。",[196,118042,118043],{},"shape=(10,)"," 表示观测是 10 个数。",[196,118046,118047],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[190,118050,118052],{"className":33221,"code":118051,"language":33223,"meta":57,"style":57},"def _get_obs(self) -> np.ndarray:\n",[196,118053,118054],{"__ignoreMap":57},[199,118055,118056,118058,118060],{"class":201,"line":202},[199,118057,34789],{"class":1086},[199,118059,116615],{"class":878},[199,118061,116618],{"class":205},[31,118063,118064,118065,118067],{},"定义内部函数，用来生成观测。函数名前面的 ",[196,118066,4066],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[190,118069,118071],{"className":33221,"code":118070,"language":33223,"meta":57,"style":57},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[196,118072,118073,118087],{"__ignoreMap":57},[199,118074,118075,118077,118079,118081,118083,118085],{"class":201,"line":202},[199,118076,113827],{"class":205},[199,118078,895],{"class":1086},[199,118080,41714],{"class":1018},[199,118082,116629],{"class":205},[199,118084,33665],{"class":1018},[199,118086,116634],{"class":205},[199,118088,118089,118091,118093,118095,118097,118099],{"class":201,"line":36},[199,118090,113837],{"class":205},[199,118092,895],{"class":1086},[199,118094,41714],{"class":1018},[199,118096,116629],{"class":205},[199,118098,33665],{"class":1018},[199,118100,116649],{"class":205},[31,118102,118103],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[190,118105,118107],{"className":33221,"code":118106,"language":33223,"meta":57,"style":57},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[196,118108,118109,118125],{"__ignoreMap":57},[199,118110,118111,118113,118115,118117,118119,118121,118123],{"class":201,"line":202},[199,118112,113113],{"class":205},[199,118114,895],{"class":1086},[199,118116,116658],{"class":205},[199,118118,33665],{"class":1018},[199,118120,116663],{"class":205},[199,118122,33665],{"class":1018},[199,118124,116668],{"class":205},[199,118126,118127,118129],{"class":201,"line":36},[199,118128,19891],{"class":1086},[199,118130,116675],{"class":205},[31,118132,118133,118134,118137,118138,118140],{},"拼接观测，并转换成 ",[196,118135,118136],{},"float32","。很多强化学习库默认使用 ",[196,118139,118136],{},"，所以这里主动转换。",[190,118142,118143],{"className":33221,"code":117546,"language":33223,"meta":57,"style":57},[196,118144,118145],{"__ignoreMap":57},[199,118146,118147,118149,118151,118153,118155,118157,118159,118161,118163,118165,118167,118169,118171,118173,118175,118177,118179],{"class":201,"line":202},[199,118148,34789],{"class":1086},[199,118150,116781],{"class":878},[199,118152,116784],{"class":205},[199,118154,3537],{"class":1086},[199,118156,116789],{"class":205},[199,118158,3100],{"class":1018},[199,118160,27953],{"class":1086},[199,118162,41774],{"class":1018},[199,118164,16425],{"class":1086},[199,118166,41774],{"class":1018},[199,118168,116802],{"class":205},[199,118170,116805],{"class":1018},[199,118172,27953],{"class":1086},[199,118174,41774],{"class":1018},[199,118176,16425],{"class":1086},[199,118178,41774],{"class":1018},[199,118180,33628],{"class":205},[31,118182,118183,118184,118186,118187,118190],{},"定义 reset。",[196,118185,116825],{}," 用来控制随机数，保证实验可以复现。",[196,118188,118189],{},"options"," 用来接收额外配置，本章暂时不用。",[190,118192,118194],{"className":33221,"code":118193,"language":33223,"meta":57,"style":57},"super().reset(seed=seed)\n",[196,118195,118196],{"__ignoreMap":57},[199,118197,118198,118200,118202,118204,118206],{"class":201,"line":202},[199,118199,117787],{"class":1018},[199,118201,116822],{"class":205},[199,118203,116825],{"class":8113},[199,118205,895],{"class":1086},[199,118207,116830],{"class":205},[31,118209,118210,118211,118214],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[196,118212,118213],{},"self.np_random"," 生成可复现的随机数。",[190,118216,118218],{"className":33221,"code":118217,"language":33223,"meta":57,"style":57},"mujoco.mj_resetData(self.model, self.data)\n",[196,118219,118220],{"__ignoreMap":57},[199,118221,118222,118225,118227,118229,118231],{"class":201,"line":202},[199,118223,118224],{"class":205},"mujoco.mj_resetData(",[199,118226,33665],{"class":1018},[199,118228,116840],{"class":205},[199,118230,33665],{"class":1018},[199,118232,116845],{"class":205},[31,118234,118235],{},"把 MuJoCo 状态重置到默认状态。",[190,118237,118239],{"className":33221,"code":118238,"language":33223,"meta":57,"style":57},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[196,118240,118241],{"__ignoreMap":57},[199,118242,118243,118245,118247,118249,118251,118253,118255,118257,118259,118261,118263,118265,118267,118269,118271,118273,118275],{"class":201,"line":202},[199,118244,33665],{"class":1018},[199,118246,116856],{"class":205},[199,118248,895],{"class":1086},[199,118250,41714],{"class":1018},[199,118252,116863],{"class":205},[199,118254,116021],{"class":8113},[199,118256,116024],{"class":1086},[199,118258,88469],{"class":1018},[199,118260,1912],{"class":205},[199,118262,116031],{"class":8113},[199,118264,895],{"class":1086},[199,118266,88469],{"class":1018},[199,118268,1912],{"class":205},[199,118270,34338],{"class":8113},[199,118272,895],{"class":1086},[199,118274,33665],{"class":1018},[199,118276,116888],{"class":205},[31,118278,117600,118279,118282,118283,118286,118287,118289],{},[196,118280,118281],{},"[:]"," 表示修改整个数组。",[196,118284,118285],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[196,118288,104409],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[190,118291,118293],{"className":33221,"code":118292,"language":33223,"meta":57,"style":57},"self.data.qvel[:] = 0.0\n",[196,118294,118295],{"__ignoreMap":57},[199,118296,118297,118299,118301,118303],{"class":201,"line":202},[199,118298,33665],{"class":1018},[199,118300,116895],{"class":205},[199,118302,895],{"class":1086},[199,118304,107020],{"class":1018},[31,118306,118307],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[190,118309,118311],{"className":33221,"code":118310,"language":33223,"meta":57,"style":57},"self.steps = 0\nreturn self._get_obs(), {}\n",[196,118312,118313,118323],{"__ignoreMap":57},[199,118314,118315,118317,118319,118321],{"class":201,"line":202},[199,118316,33665],{"class":1018},[199,118318,115965],{"class":205},[199,118320,895],{"class":1086},[199,118322,50173],{"class":1018},[199,118324,118325,118327,118329],{"class":201,"line":36},[199,118326,19891],{"class":1086},[199,118328,41714],{"class":1018},[199,118330,116935],{"class":205},[31,118332,118333],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[190,118335,118336],{"className":33221,"code":117609,"language":33223,"meta":57,"style":57},[196,118337,118338],{"__ignoreMap":57},[199,118339,118340,118342,118344],{"class":201,"line":202},[199,118341,34789],{"class":1086},[199,118343,116946],{"class":878},[199,118345,116949],{"class":205},[31,118347,118348],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[190,118350,118352],{"className":33221,"code":118351,"language":33223,"meta":57,"style":57},"action = np.asarray(action, dtype=np.float32)\n",[196,118353,118354],{"__ignoreMap":57},[199,118355,118356,118358,118360,118362,118364,118366],{"class":201,"line":202},[199,118357,109701],{"class":205},[199,118359,895],{"class":1086},[199,118361,116958],{"class":205},[199,118363,95759],{"class":8113},[199,118365,895],{"class":1086},[199,118367,116055],{"class":205},[31,118369,118370,118371,31228],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[196,118372,118136],{},[190,118374,118376],{"className":33221,"code":118375,"language":33223,"meta":57,"style":57},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[196,118377,118378],{"__ignoreMap":57},[199,118379,118380,118382,118384,118386,118388,118390,118392],{"class":201,"line":202},[199,118381,109701],{"class":205},[199,118383,895],{"class":1086},[199,118385,109706],{"class":205},[199,118387,33665],{"class":1018},[199,118389,116977],{"class":205},[199,118391,33665],{"class":1018},[199,118393,116982],{"class":205},[31,118395,118396],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[190,118398,118400],{"className":33221,"code":118399,"language":33223,"meta":57,"style":57},"self.data.ctrl[:] = action\n",[196,118401,118402],{"__ignoreMap":57},[199,118403,118404,118406,118408,118410],{"class":201,"line":202},[199,118405,33665],{"class":1018},[199,118407,116993],{"class":205},[199,118409,895],{"class":1086},[199,118411,109729],{"class":205},[31,118413,118414],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[190,118416,118418],{"className":33221,"code":118417,"language":33223,"meta":57,"style":57},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[196,118419,118420,118436],{"__ignoreMap":57},[199,118421,118422,118424,118426,118428,118430,118432,118434],{"class":201,"line":202},[199,118423,5929],{"class":1086},[199,118425,103760],{"class":205},[199,118427,28886],{"class":1086},[199,118429,35285],{"class":1018},[199,118431,1537],{"class":205},[199,118433,33665],{"class":1018},[199,118435,117014],{"class":205},[199,118437,118438,118441,118443,118445,118447],{"class":201,"line":36},[199,118439,118440],{"class":205},"    mujoco.mj_step(",[199,118442,33665],{"class":1018},[199,118444,116840],{"class":205},[199,118446,33665],{"class":1018},[199,118448,116845],{"class":205},[31,118450,118451,118452,118455,118456,118458,118459,31228],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[196,118453,118454],{},"frame_skip=5","，所以外部调用一次 ",[196,118457,116136],{},"，内部实际执行 5 次 ",[196,118460,103474],{},[190,118462,118464],{"className":33221,"code":118463,"language":33223,"meta":57,"style":57},"self.steps += 1\n",[196,118465,118466],{"__ignoreMap":57},[199,118467,118468,118470,118472,118474],{"class":201,"line":202},[199,118469,33665],{"class":1018},[199,118471,115965],{"class":205},[199,118473,12362],{"class":1086},[199,118475,57958],{"class":1018},[31,118477,118478],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[190,118480,118482],{"className":33221,"code":118481,"language":33223,"meta":57,"style":57},"obs = self._get_obs()\nreward = self._get_reward()\n",[196,118483,118484,118494],{"__ignoreMap":57},[199,118485,118486,118488,118490,118492],{"class":201,"line":202},[199,118487,113113],{"class":205},[199,118489,895],{"class":1086},[199,118491,41714],{"class":1018},[199,118493,117056],{"class":205},[199,118495,118496,118498,118500,118502],{"class":201,"line":36},[199,118497,113264],{"class":205},[199,118499,895],{"class":1086},[199,118501,41714],{"class":1018},[199,118503,117067],{"class":205},[31,118505,118506],{},"计算新的观测和奖励。",[190,118508,118510],{"className":33221,"code":118509,"language":33223,"meta":57,"style":57},"dist = float(np.linalg.norm(tip - target))\n",[196,118511,118512],{"__ignoreMap":57},[199,118513,118514,118516,118518,118520,118522,118524],{"class":201,"line":202},[199,118515,113855],{"class":205},[199,118517,895],{"class":1086},[199,118519,112056],{"class":1018},[199,118521,117110],{"class":205},[199,118523,1998],{"class":1086},[199,118525,117115],{"class":205},[31,118527,118528],{},"计算末端到目标的距离，并转换成 Python float。",[190,118530,118531],{"className":33221,"code":115936,"language":33223,"meta":57,"style":57},[196,118532,118533,118545],{"__ignoreMap":57},[199,118534,118535,118537,118539,118541,118543],{"class":201,"line":202},[199,118536,115943],{"class":205},[199,118538,895],{"class":1086},[199,118540,115948],{"class":205},[199,118542,887],{"class":1086},[199,118544,115953],{"class":1018},[199,118546,118547,118549,118551,118553,118555,118557,118559],{"class":201,"line":36},[199,118548,115958],{"class":205},[199,118550,895],{"class":1086},[199,118552,41714],{"class":1018},[199,118554,115965],{"class":205},[199,118556,4635],{"class":1086},[199,118558,41714],{"class":1018},[199,118560,115972],{"class":205},[31,118562,118563],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[190,118565,118567],{"className":33221,"code":118566,"language":33223,"meta":57,"style":57},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[196,118568,118569,118582],{"__ignoreMap":57},[199,118570,118571,118574,118576,118578,118580],{"class":201,"line":202},[199,118572,118573],{"class":205},"info ",[199,118575,895],{"class":1086},[199,118577,7345],{"class":205},[199,118579,117161],{"class":898},[199,118581,117164],{"class":205},[199,118583,118584,118586],{"class":201,"line":36},[199,118585,19891],{"class":1086},[199,118587,117171],{"class":205},[31,118589,118590,118593],{},[196,118591,118592],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[190,118595,118597],{"className":33221,"code":118596,"language":33223,"meta":57,"style":57},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[196,118598,118599,118608],{"__ignoreMap":57},[199,118600,118601,118604,118606],{"class":201,"line":202},[199,118602,118603],{"class":205},"env ",[199,118605,895],{"class":1086},[199,118607,117201],{"class":205},[199,118609,118610,118612,118614,118616,118618,118620,118622],{"class":201,"line":36},[199,118611,115659],{"class":205},[199,118613,895],{"class":1086},[199,118615,117211],{"class":205},[199,118617,116825],{"class":8113},[199,118619,895],{"class":1086},[199,118621,1025],{"class":1018},[199,118623,1594],{"class":205},[31,118625,118626,118627,118630],{},"创建环境并重置。",[196,118628,118629],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[190,118632,118634],{"className":33221,"code":118633,"language":33223,"meta":57,"style":57},"action = env.action_space.sample()\n",[196,118635,118636],{"__ignoreMap":57},[199,118637,118638,118640,118642],{"class":201,"line":202},[199,118639,109701],{"class":205},[199,118641,895],{"class":1086},[199,118643,117280],{"class":205},[31,118645,118646],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118648,104575],{"id":104574},[31,118650,107743],{},[190,118652,118655],{"className":118653,"code":118654,"language":8084,"meta":57},[8082],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[196,118656,118654],{"__ignoreMap":57},[31,118658,118659],{},"这个环境已经具备强化学习环境的基本结构。",[31,118661,118662],{},"主函数里使用随机动作：",[190,118664,118665],{"className":33221,"code":118633,"language":33223,"meta":57,"style":57},[196,118666,118667],{"__ignoreMap":57},[199,118668,118669,118671,118673],{"class":201,"line":202},[199,118670,109701],{"class":205},[199,118672,895],{"class":1086},[199,118674,117280],{"class":205},[31,118676,118677],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118679,104607],{"id":104606},[24,118681,118682,118685,118691,118700,118709,118718,118724],{},[27,118683,118684],{},"运行程序。",[27,118686,118687,118688,31228],{},"确认 ",[196,118689,118690],{},"obs.shape == (10,)",[27,118692,113440,118693,118696,118697,31228],{},[196,118694,118695],{},"env.action_space","，应类似 ",[196,118698,118699],{},"Box(-1.0, 1.0, (2,), float32)",[27,118701,107844,118702,118705,118706,31228],{},[196,118703,118704],{},"self.max_steps = 10","，确认环境会更快 ",[196,118707,118708],{},"truncated=True",[27,118710,104670,118711,104673,118714,118717],{},[196,118712,118713],{},"terminated = dist \u003C 0.05",[196,118715,118716],{},"dist \u003C 0.2","，观察是否更容易结束。",[27,118719,104670,118720,118723],{},[196,118721,118722],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[27,118725,118726,118727,118729,118730,118733],{},"在 ",[196,118728,118592],{}," 里加入 ",[196,118731,118732],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118735,104712],{"id":104711},[19,118737,118739],{"id":118738},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[31,118741,118742,118743,118745],{},"Gymnasium 的 ",[196,118744,109393],{}," 返回 5 个值:",[190,118747,118749],{"className":33221,"code":118748,"language":33223,"meta":57,"style":57},"obs, reward, terminated, truncated, info\n",[196,118750,118751],{"__ignoreMap":57},[199,118752,118753],{"class":201,"line":202},[199,118754,118748],{"class":205},[31,118756,118757],{},"不是旧 Gym 的 4 个值。",[19,118759,118761,118764],{"id":118760},"datactrl-action-维度错误",[196,118762,118763],{},"data.ctrl[:] = action"," 维度错误",[31,118766,104782],{},[190,118768,118770],{"className":33221,"code":118769,"language":33223,"meta":57,"style":57},"print(self.model.nu)\nprint(action.shape)\n",[196,118771,118772,118783],{"__ignoreMap":57},[199,118773,118774,118776,118778,118780],{"class":201,"line":202},[199,118775,33258],{"class":1018},[199,118777,1537],{"class":205},[199,118779,33665],{"class":1018},[199,118781,118782],{"class":205},".model.nu)\n",[199,118784,118785,118787],{"class":201,"line":36},[199,118786,33258],{"class":1018},[199,118788,118789],{"class":205},"(action.shape)\n",[31,118791,118792],{},"两者必须匹配。",[19,118794,118796],{"id":118795},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[31,118798,104721],{},[190,118800,118802],{"className":33221,"code":118801,"language":33223,"meta":57,"style":57},"mujoco.mj_forward(self.model, self.data)\n",[196,118803,118804],{"__ignoreMap":57},[199,118805,118806,118809,118811,118813,118815],{"class":201,"line":202},[199,118807,118808],{"class":205},"mujoco.mj_forward(",[199,118810,33665],{"class":1018},[199,118812,116840],{"class":205},[199,118814,33665],{"class":1018},[199,118816,116845],{"class":205},[19,118818,118820,118822],{"id":118819},"observation_space-维度和-obs-不一致",[196,118821,115859],{}," 维度和 obs 不一致",[31,118824,104834],{},[190,118826,118828],{"className":33221,"code":118827,"language":33223,"meta":57,"style":57},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[196,118829,118830,118840,118847],{"__ignoreMap":57},[199,118831,118832,118834,118836,118838],{"class":201,"line":202},[199,118833,113113],{"class":205},[199,118835,895],{"class":1086},[199,118837,41714],{"class":1018},[199,118839,117056],{"class":205},[199,118841,118842,118844],{"class":201,"line":36},[199,118843,33258],{"class":1018},[199,118845,118846],{"class":205},"(obs.shape)\n",[199,118848,118849,118851,118853,118855],{"class":201,"line":73},[199,118850,33258],{"class":1018},[199,118852,1537],{"class":205},[199,118854,33665],{"class":1018},[199,118856,118857],{"class":205},".observation_space.shape)\n",[31,118859,118860],{},"两者必须一致。本章观测是：",[190,118862,118865],{"className":118863,"code":118864,"language":8084,"meta":57},[8082],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[196,118866,118864],{"__ignoreMap":57},[19,118868,118870],{"id":118869},"action-超过范围","action 超过范围",[31,118872,118873],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[190,118875,118876],{"className":33221,"code":118375,"language":33223,"meta":57,"style":57},[196,118877,118878],{"__ignoreMap":57},[199,118879,118880,118882,118884,118886,118888,118890,118892],{"class":201,"line":202},[199,118881,109701],{"class":205},[199,118883,895],{"class":1086},[199,118885,109706],{"class":205},[199,118887,33665],{"class":1018},[199,118889,116977],{"class":205},[199,118891,33665],{"class":1018},[199,118893,116982],{"class":205},[31,118895,118896,118897,31228],{},"这能避免无效动作直接写入 ",[196,118898,103335],{},[19,118900,118902],{"id":118901},"忘记返回-info","忘记返回 info",[31,118904,118742,118905,103277,118907,118909],{},[196,118906,72315],{},[196,118908,109393],{}," 都会返回 info：",[190,118911,118912],{"className":33221,"code":115652,"language":33223,"meta":57,"style":57},[196,118913,118914,118922],{"__ignoreMap":57},[199,118915,118916,118918,118920],{"class":201,"line":202},[199,118917,115659],{"class":205},[199,118919,895],{"class":1086},[199,118921,115664],{"class":205},[199,118923,118924,118926,118928],{"class":201,"line":36},[199,118925,115669],{"class":205},[199,118927,895],{"class":1086},[199,118929,115674],{"class":205},[31,118931,118932,118933,31228],{},"即使暂时没有额外信息，也返回 ",[196,118934,35301],{},[14,118936,118938],{"id":118937},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[31,118940,118941],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[24,118943,118944,118947,118950,118953,118956,118959],{},[27,118945,118946],{},"更稳定的 reward。",[27,118948,118949],{},"合理的 episode 长度。",[27,118951,118952],{},"可重复的随机目标采样。",[27,118954,118955],{},"render 接口。",[27,118957,118958],{},"环境注册代码。",[27,118960,118961],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[31,118963,118964],{},"如果只是自己写训练循环，最小形式是：",[190,118966,118968],{"className":33221,"code":118967,"language":33223,"meta":57,"style":57},"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",[196,118969,118970,118978,118994,118998,119014,119023,119032,119042],{"__ignoreMap":57},[199,118971,118972,118974,118976],{"class":201,"line":202},[199,118973,118603],{"class":205},[199,118975,895],{"class":1086},[199,118977,117201],{"class":205},[199,118979,118980,118982,118984,118986,118988,118990,118992],{"class":201,"line":36},[199,118981,115659],{"class":205},[199,118983,895],{"class":1086},[199,118985,117211],{"class":205},[199,118987,116825],{"class":8113},[199,118989,895],{"class":1086},[199,118991,1025],{"class":1018},[199,118993,1594],{"class":205},[199,118995,118996],{"class":201,"line":73},[199,118997,907],{"emptyLinePlaceholder":906},[199,118999,119000,119002,119004,119006,119008,119010,119012],{"class":201,"line":333},[199,119001,5929],{"class":1086},[199,119003,103760],{"class":205},[199,119005,28886],{"class":1086},[199,119007,35285],{"class":1018},[199,119009,1537],{"class":205},[199,119011,9307],{"class":1018},[199,119013,33628],{"class":205},[199,119015,119016,119019,119021],{"class":201,"line":227},[199,119017,119018],{"class":205},"    action ",[199,119020,895],{"class":1086},[199,119022,117280],{"class":205},[199,119024,119025,119028,119030],{"class":201,"line":238},[199,119026,119027],{"class":205},"    obs, reward, terminated, truncated, info ",[199,119029,895],{"class":1086},[199,119031,115674],{"class":205},[199,119033,119034,119036,119038,119040],{"class":201,"line":252},[199,119035,6005],{"class":1086},[199,119037,117346],{"class":205},[199,119039,117349],{"class":1086},[199,119041,117352],{"class":205},[199,119043,119044,119047,119049],{"class":201,"line":388},[199,119045,119046],{"class":205},"        obs, info ",[199,119048,895],{"class":1086},[199,119050,115664],{"class":205},[14,119052,119054],{"id":119053},"_9本章小结","9.本章小结",[31,119056,119057],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[190,119059,119062],{"className":119060,"code":119061,"language":8084,"meta":57},[8082],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[196,119063,119061],{"__ignoreMap":57},[31,119065,119066],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1002,119068,119069],{},"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":57,"searchDepth":36,"depth":36,"links":119071},[119072,119073,119074,119081,119085,119086,119087,119097,119098],{"id":102905,"depth":36,"text":102906},{"id":103028,"depth":36,"text":103029},{"id":103303,"depth":36,"text":103304,"children":119075},[119076,119078,119080],{"id":115883,"depth":73,"text":119077},"terminated 和 truncated 的区别",{"id":115986,"depth":73,"text":119079},"observation_space 和 action_space",{"id":116113,"depth":73,"text":116114},{"id":103511,"depth":36,"text":103512,"children":119082},[119083,119084],{"id":103831,"depth":73,"text":103831},{"id":103967,"depth":73,"text":103967},{"id":104574,"depth":36,"text":104575},{"id":104606,"depth":36,"text":104607},{"id":104711,"depth":36,"text":104712,"children":119088},[119089,119090,119092,119093,119095,119096],{"id":118738,"depth":73,"text":118739},{"id":118760,"depth":73,"text":119091},"data.ctrl[:] = action 维度错误",{"id":118795,"depth":73,"text":118796},{"id":118819,"depth":73,"text":119094},"observation_space 维度和 obs 不一致",{"id":118869,"depth":73,"text":118870},{"id":118901,"depth":73,"text":118902},{"id":118937,"depth":36,"text":118938},{"id":119053,"depth":36,"text":119054},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115636,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119105,"title":119106,"body":119107,"description":119530,"extension":3024,"meta":119531,"navigation":906,"path":119532,"seo":119533,"stem":119534,"__hash__":119535},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119108,"toc":119520},[119109,119113,119116,119119,119139,119145,119151,119161,119164,119167,119187,119190,119194,119197,119203,119206,119220,119223,119226,119300,119303,119309,119312,119335,119338,119388,119391,119397,119400,119403,119406,119425,119428,119434,119437,119440,119443,119463,119466,119469,119472,119517],[10,119110,119112],{"id":119111},"mujoco-学习","MuJoCo 学习",[31,119114,119115],{},"初版",[31,119117,119118],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[24,119120,119121,119124,119127,119136],{},[27,119122,119123],{},"MuJoCo 模型文件在描述什么。",[27,119125,119126],{},"Python 代码怎样读取和推进仿真。",[27,119128,119129,3300,119131,3300,119133,119135],{},[196,119130,106289],{},[196,119132,106619],{},[196,119134,106622],{}," 这些数组为什么重要。",[27,119137,119138],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[31,119140,119141,119142,119144],{},"默认环境为 Fedora 44、Python >= 3.10、",[196,119143,103286],{}," 官方 Python bindings。",[31,119146,119147,119148,119150],{},"注意：本文禁止使用 ",[196,119149,103271],{},"。所有示例均使用：",[190,119152,119153],{"className":33221,"code":103837,"language":33223,"meta":57,"style":57},[196,119154,119155],{"__ignoreMap":57},[199,119156,119157,119159],{"class":201,"line":202},[199,119158,33235],{"class":1086},[199,119160,103560],{"class":205},[14,119162,119163],{"id":119163},"适合谁阅读",[31,119165,119166],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[24,119168,119169,119172,119175,119178],{},[27,119170,119171],{},"没学过 MuJoCo，只会一点 Python。",[27,119173,119174],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[27,119176,119177],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[27,119179,119180,119181,119183,119184,119186],{},"以前接触过 ",[196,119182,103271],{},"，现在想迁移到官方 ",[196,119185,103280],{}," Python bindings。",[31,119188,119189],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119191,119193],{"id":119192},"mujoco-到底是什么","MuJoCo 到底是什么",[31,119195,119196],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[190,119198,119201],{"className":119199,"code":119200,"language":8084,"meta":57},[8082],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[196,119202,119200],{"__ignoreMap":57},[31,119204,119205],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[24,119207,119208,119211,119214,119217],{},[27,119209,119210],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[27,119212,119213],{},"快速测试控制算法，不必一开始就上真实机器人。",[27,119215,119216],{},"生成强化学习环境。",[27,119218,119219],{},"采集状态、动作、图像、奖励等训练数据。",[14,119221,119222],{"id":119222},"学习前的心智模型",[31,119224,119225],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[3227,119227,119228,119240],{},[3230,119229,119230],{},[3233,119231,119232,119235,119238],{},[3236,119233,119234],{"align":26580},"部分",[3236,119236,119237],{"align":26580},"负责什么",[3236,119239,24032],{"align":26580},[3273,119241,119242,119253,119265,119277,119289],{},[3233,119243,119244,119247,119250],{},[3278,119245,119246],{"align":26580},"MJCF XML",[3278,119248,119249],{"align":26580},"定义世界和机器人结构",[3278,119251,119252],{"align":26580},"地面、盒子、关节、电机、摄像头",[3233,119254,119255,119259,119262],{},[3278,119256,119257],{"align":26580},[196,119258,102968],{},[3278,119260,119261],{"align":26580},"编译后的静态模型",[3278,119263,119264],{"align":26580},"有几个关节、有几个电机、时间步长是多少",[3233,119266,119267,119271,119274],{},[3278,119268,119269],{"align":26580},[196,119270,102978],{},[3278,119272,119273],{"align":26580},"运行中的动态状态",[3278,119275,119276],{"align":26580},"当前时间、位置、速度、电机输入",[3233,119278,119279,119283,119286],{},[3278,119280,119281],{"align":26580},[196,119282,103474],{},[3278,119284,119285],{"align":26580},"推进一步物理仿真",[3278,119287,119288],{"align":26580},"根据重力、力、碰撞更新状态",[3233,119290,119291,119294,119297],{},[3278,119292,119293],{"align":26580},"Viewer \u002F Renderer",[3278,119295,119296],{"align":26580},"把仿真显示出来",[3278,119298,119299],{"align":26580},"打开窗口或保存图片",[31,119301,119302],{},"一句话总结：",[190,119304,119307],{"className":119305,"code":119306,"language":8084,"meta":57},[8082],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[196,119308,119306],{"__ignoreMap":57},[31,119310,119311],{},"参考来源：",[176,119313,119314,119321,119328],{},[27,119315,119316,119317],{},"MuJoCo Python 官方文档：",[2867,119318,119319],{"href":119319,"rel":119320},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[2871],[27,119322,119323,119324],{},"MuJoCo XML Reference：",[2867,119325,119326],{"href":119326,"rel":119327},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[2871],[27,119329,119330,119331],{},"MuJoCo Overview：",[2867,119332,119333],{"href":119333,"rel":119334},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[2871],[14,119336,119337],{"id":119337},"章节目录",[24,119339,119340,119346,119352,119358,119364,119370,119376,119382],{},[27,119341,119342],{},[2867,119343,119345],{"href":119344},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[27,119347,119348],{},[2867,119349,119351],{"href":119350},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[27,119353,119354],{},[2867,119355,119357],{"href":119356},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[27,119359,119360],{},[2867,119361,119363],{"href":119362},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[27,119365,119366],{},[2867,119367,119369],{"href":119368},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[27,119371,119372],{},[2867,119373,119375],{"href":119374},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[27,119377,119378],{},[2867,119379,119381],{"href":119380},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[27,119383,119384],{},[2867,119385,119387],{"href":119386},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,119389,119390],{"id":119390},"推荐学习路线",[190,119392,119395],{"className":119393,"code":119394,"language":8084,"meta":57},[8082],"环境安装\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",[196,119396,119394],{"__ignoreMap":57},[31,119398,119399],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,119401,119402],{"id":119402},"建议的目录结构",[31,119404,119405],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[190,119407,119409],{"className":26666,"code":119408,"language":26668,"meta":57,"style":57},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[196,119410,119411,119419],{"__ignoreMap":57},[199,119412,119413,119415,119417],{"class":201,"line":202},[199,119414,103525],{"class":878},[199,119416,32059],{"class":1018},[199,119418,103530],{"class":898},[199,119420,119421,119423],{"class":201,"line":36},[199,119422,103535],{"class":1018},[199,119424,103530],{"class":898},[31,119426,119427],{},"每一章的代码都单独保存：",[190,119429,119432],{"className":119430,"code":119431,"language":8084,"meta":57},[8082],"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",[196,119433,119431],{"__ignoreMap":57},[31,119435,119436],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,119438,119439],{"id":119439},"学习方法",[31,119441,119442],{},"每章建议按这个顺序操作：",[24,119444,119445,119448,119451,119454,119457,119460],{},[27,119446,119447],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[27,119449,119450],{},"复制最小可运行代码，保存成指定文件。",[27,119452,119453],{},"运行代码，确认没有报错。",[27,119455,119456],{},"对照“运行结果说明”理解输出。",[27,119458,119459],{},"做“验证步骤”，主动改一两个参数。",[27,119461,119462],{},"遇到报错先看“常见错误与解决方案”。",[31,119464,119465],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,119467,119468],{"id":119468},"全局排错顺序",[31,119470,119471],{},"遇到问题时，按下面顺序查：",[24,119473,119474,119480,119486,119491,119494,119497,119504,119514],{},[27,119475,119476,119477],{},"Python 环境是否激活：",[196,119478,119479],{},"which python",[27,119481,119482,119483],{},"MuJoCo 是否能导入：",[196,119484,119485],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[27,119487,119488,119489],{},"是否误装了 ",[196,119490,103271],{},[27,119492,119493],{},"XML 标签是否闭合、属性是否拼写正确",[27,119495,119496],{},"actuator 引用的 joint 名字是否存在",[27,119498,119499,119501,119502],{},[196,119500,103335],{}," 的长度是否等于 ",[196,119503,104417],{},[27,119505,107844,119506,84798,119508,119510,119511],{},[196,119507,106289],{},[196,119509,106619],{}," 后是否调用了 ",[196,119512,119513],{},"mujoco.mj_forward",[27,119515,119516],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1002,119518,119519],{},"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":57,"searchDepth":36,"depth":36,"links":119521},[119522,119523,119524,119525,119526,119527,119528,119529],{"id":119163,"depth":36,"text":119163},{"id":119192,"depth":36,"text":119193},{"id":119222,"depth":36,"text":119222},{"id":119337,"depth":36,"text":119337},{"id":119390,"depth":36,"text":119390},{"id":119402,"depth":36,"text":119402},{"id":119439,"depth":36,"text":119439},{"id":119468,"depth":36,"text":119468},"仿真搭建。",{"category":26222},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119106,"description":119530},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119537,"title":119538,"body":119539,"description":3023,"extension":3024,"meta":119994,"navigation":906,"path":119995,"seo":119996,"stem":119997,"__hash__":119998},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119540,"toc":119992},[119541,119544,119547,119553,119989],[10,119542,119538],{"id":119543},"_1-最常用的基本操作更新",[31,119545,119546],{},"装linux系统教程：",[31,119548,119549],{},[2867,119550,119551],{"href":119551,"rel":119552},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[2871],[190,119554,119558],{"className":119555,"code":119556,"language":119557,"meta":57,"style":57},"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",[196,119559,119560,119565,119570,119579,119584,119593,119598,119618,119623,119634,119639,119648,119653,119681,119686,119705,119710,119729,119733,119738,119754,119758,119763,119793,119797,119802,119818,119822,119827,119842,119846,119851,119867,119871,119876,119888,119900,119904,119909,119926,119930,119935,119953,119957,119962,119971,119975,119980],{"__ignoreMap":57},[199,119561,119562],{"class":201,"line":202},[199,119563,119564],{"class":1454},"#更新相关的知识\n",[199,119566,119567],{"class":201,"line":36},[199,119568,119569],{"class":1454},"# 更新软件包列表（从服务器获取最新软件信息）\n",[199,119571,119572,119574,119577],{"class":201,"line":73},[199,119573,27420],{"class":878},[199,119575,119576],{"class":898}," apt",[199,119578,29085],{"class":898},[199,119580,119581],{"class":201,"line":333},[199,119582,119583],{"class":1454},"# 升级所有可更新的软件包（不删除旧包）\n",[199,119585,119586,119588,119590],{"class":201,"line":227},[199,119587,27420],{"class":878},[199,119589,119576],{"class":898},[199,119591,119592],{"class":898}," upgrade\n",[199,119594,119595],{"class":201,"line":238},[199,119596,119597],{"class":1454},"#更新和升级软件包\n",[199,119599,119600,119602,119604,119607,119609,119611,119613,119616],{"class":201,"line":252},[199,119601,27420],{"class":878},[199,119603,119576],{"class":898},[199,119605,119606],{"class":898}," update",[199,119608,29033],{"class":205},[199,119610,27420],{"class":878},[199,119612,119576],{"class":898},[199,119614,119615],{"class":898}," upgrade",[199,119617,103240],{"class":1018},[199,119619,119620],{"class":201,"line":388},[199,119621,119622],{"class":1454},"#列出可更新的软件包及版本信息\n",[199,119624,119625,119628,119631],{"class":201,"line":415},[199,119626,119627],{"class":878},"apt",[199,119629,119630],{"class":898}," list",[199,119632,119633],{"class":1018}," --upgradable\n",[199,119635,119636],{"class":201,"line":426},[199,119637,119638],{"class":1454},"#彻底升级（处理依赖关系，可能删除旧包）\n",[199,119640,119641,119643,119645],{"class":201,"line":1015},[199,119642,27420],{"class":878},[199,119644,119576],{"class":898},[199,119646,119647],{"class":898}," full-upgrade\n",[199,119649,119650],{"class":201,"line":1031},[199,119651,119652],{"class":1454},"#设置指定版本\n",[199,119654,119655,119657,119659,119661,119663,119666,119668,119670,119672,119674,119677,119679],{"class":201,"line":1043},[199,119656,27420],{"class":878},[199,119658,119576],{"class":898},[199,119660,26678],{"class":898},[199,119662,31745],{"class":1086},[199,119664,119665],{"class":898},"package_nam",[199,119667,3166],{"class":205},[199,119669,1217],{"class":1086},[199,119671,895],{"class":898},[199,119673,887],{"class":1086},[199,119675,119676],{"class":898},"version_numbe",[199,119678,3749],{"class":205},[199,119680,882],{"class":1086},[199,119682,119683],{"class":201,"line":1049},[199,119684,119685],{"class":1454},"#只安装软件包不升级\n",[199,119687,119688,119690,119692,119694,119696,119698,119700,119702],{"class":201,"line":1054},[199,119689,27420],{"class":878},[199,119691,119576],{"class":898},[199,119693,26678],{"class":898},[199,119695,31745],{"class":1086},[199,119697,119665],{"class":898},[199,119699,3166],{"class":205},[199,119701,1217],{"class":1086},[199,119703,119704],{"class":1018}," --no-upgrade\n",[199,119706,119707],{"class":201,"line":1062},[199,119708,119709],{"class":1454},"#只升级，不存在就不安装\n",[199,119711,119712,119714,119716,119718,119720,119722,119724,119726],{"class":201,"line":1075},[199,119713,27420],{"class":878},[199,119715,119576],{"class":898},[199,119717,26678],{"class":898},[199,119719,31745],{"class":1086},[199,119721,119665],{"class":898},[199,119723,3166],{"class":205},[199,119725,1217],{"class":1086},[199,119727,119728],{"class":1018}," --only-upgrade\n",[199,119730,119731],{"class":201,"line":1092},[199,119732,907],{"emptyLinePlaceholder":906},[199,119734,119735],{"class":201,"line":1107},[199,119736,119737],{"class":1454},"#安装指定的软件命令\n",[199,119739,119740,119742,119744,119746,119748,119750,119752],{"class":201,"line":1128},[199,119741,27420],{"class":878},[199,119743,119576],{"class":898},[199,119745,26678],{"class":898},[199,119747,31745],{"class":1086},[199,119749,119665],{"class":898},[199,119751,3166],{"class":205},[199,119753,882],{"class":1086},[199,119755,119756],{"class":201,"line":1146},[199,119757,907],{"emptyLinePlaceholder":906},[199,119759,119760],{"class":201,"line":1163},[199,119761,119762],{"class":1454},"#安装多个软件包\n",[199,119764,119765,119767,119769,119771,119773,119776,119779,119781,119783,119786,119788,119790],{"class":201,"line":1176},[199,119766,27420],{"class":878},[199,119768,119576],{"class":898},[199,119770,26678],{"class":898},[199,119772,31745],{"class":1086},[199,119774,119775],{"class":898},"package_",[199,119777,119778],{"class":1086},"1>",[199,119780,31745],{"class":1086},[199,119782,119775],{"class":898},[199,119784,119785],{"class":1086},"2>",[199,119787,31745],{"class":1086},[199,119789,119775],{"class":898},[199,119791,119792],{"class":1086},"3>\n",[199,119794,119795],{"class":201,"line":1189},[199,119796,907],{"emptyLinePlaceholder":906},[199,119798,119799],{"class":201,"line":1202},[199,119800,119801],{"class":1454},"#更新指定的软件命令\n",[199,119803,119804,119806,119808,119810,119812,119814,119816],{"class":201,"line":1207},[199,119805,27420],{"class":878},[199,119807,119576],{"class":898},[199,119809,119606],{"class":898},[199,119811,31745],{"class":1086},[199,119813,119665],{"class":898},[199,119815,3166],{"class":205},[199,119817,882],{"class":1086},[199,119819,119820],{"class":201,"line":1212},[199,119821,907],{"emptyLinePlaceholder":906},[199,119823,119824],{"class":201,"line":1225},[199,119825,119826],{"class":1454},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[199,119828,119829,119831,119834,119836,119838,119840],{"class":201,"line":1236},[199,119830,119627],{"class":878},[199,119832,119833],{"class":898}," show",[199,119835,31745],{"class":1086},[199,119837,119665],{"class":898},[199,119839,3166],{"class":205},[199,119841,882],{"class":1086},[199,119843,119844],{"class":201,"line":1249},[199,119845,907],{"emptyLinePlaceholder":906},[199,119847,119848],{"class":201,"line":1262},[199,119849,119850],{"class":1454},"#删除软件包命令\n",[199,119852,119853,119855,119857,119859,119861,119863,119865],{"class":201,"line":1275},[199,119854,27420],{"class":878},[199,119856,119576],{"class":898},[199,119858,28922],{"class":898},[199,119860,31745],{"class":1086},[199,119862,119665],{"class":898},[199,119864,3166],{"class":205},[199,119866,882],{"class":1086},[199,119868,119869],{"class":201,"line":1287},[199,119870,907],{"emptyLinePlaceholder":906},[199,119872,119873],{"class":201,"line":1292},[199,119874,119875],{"class":1454},"# 清理旧版本和缓存（释放磁盘空间）\n",[199,119877,119878,119880,119882,119885],{"class":201,"line":1297},[199,119879,27420],{"class":878},[199,119881,119576],{"class":898},[199,119883,119884],{"class":898}," autoremove",[199,119886,119887],{"class":1454},"  # 删除不再需要的依赖和库文件\n",[199,119889,119890,119892,119894,119897],{"class":201,"line":1310},[199,119891,27420],{"class":878},[199,119893,119576],{"class":898},[199,119895,119896],{"class":898}," clean",[199,119898,119899],{"class":1454},"       # 清理下载的缓存包\n",[199,119901,119902],{"class":201,"line":1315},[199,119903,907],{"emptyLinePlaceholder":906},[199,119905,119906],{"class":201,"line":1330},[199,119907,119908],{"class":1454},"#移除软件包及配置文件\n",[199,119910,119911,119913,119915,119918,119920,119922,119924],{"class":201,"line":1335},[199,119912,27420],{"class":878},[199,119914,119576],{"class":898},[199,119916,119917],{"class":898}," purge",[199,119919,31745],{"class":1086},[199,119921,119665],{"class":898},[199,119923,3166],{"class":205},[199,119925,882],{"class":1086},[199,119927,119928],{"class":201,"line":1340},[199,119929,907],{"emptyLinePlaceholder":906},[199,119931,119932],{"class":201,"line":1352},[199,119933,119934],{"class":1454},"#查找软件包命令\n",[199,119936,119937,119939,119941,119944,119946,119949,119951],{"class":201,"line":1367},[199,119938,27420],{"class":878},[199,119940,119576],{"class":898},[199,119942,119943],{"class":898}," search",[199,119945,31745],{"class":1086},[199,119947,119948],{"class":898},"keywor",[199,119950,3399],{"class":205},[199,119952,882],{"class":1086},[199,119954,119955],{"class":201,"line":1381},[199,119956,907],{"emptyLinePlaceholder":906},[199,119958,119959],{"class":201,"line":1396},[199,119960,119961],{"class":1454},"#列出所有已安装的包\n",[199,119963,119964,119966,119968],{"class":201,"line":1401},[199,119965,119627],{"class":878},[199,119967,119630],{"class":898},[199,119969,119970],{"class":1018}," --installed\n",[199,119972,119973],{"class":201,"line":1411},[199,119974,907],{"emptyLinePlaceholder":906},[199,119976,119977],{"class":201,"line":1421},[199,119978,119979],{"class":1454},"#列出所有已安装的包的版本信息\n",[199,119981,119982,119984,119986],{"class":201,"line":1426},[199,119983,119627],{"class":878},[199,119985,119630],{"class":898},[199,119987,119988],{"class":1018}," --all-versions\n",[1002,119990,119991],{},"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":57,"searchDepth":36,"depth":36,"links":119993},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119538,"description":3023},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":120000,"title":120001,"body":120002,"description":3023,"extension":3024,"meta":120743,"navigation":906,"path":120744,"seo":120745,"stem":120746,"__hash__":120747},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":120003,"toc":120730},[120004,120007,120011,120014,120020,120024,120028,120034,120039,120044,120049,120054,120059,120062,120065,120068,120071,120075,120078,120083,120086,120091,120094,120099,120106,120109,120112,120115,120118,120121,120132,120136,120140,120145,120150,120154,120159,120163,120168,120172,120176,120181,120184,120229,120234,120238,120242,120247,120253,120258,120268,120273,120283,120288,120293,120320,120324,120327,120332,120335,120360,120364,120369,120372,120377,120382,120402,120407,120410,120425,120429,120482,120485,120490,120494,120497,120512,120515,120518,120523,120527,120531,120534,120538,120542,120545,120550,120555,120559,120566,120574,120577,120584,120589,120594,120597,120602,120609,120614,120621,120625,120627,120632,120636,120639,120642,120647,120650,120655,120658,120663,120668,120673,120677,120682,120686,120727],[10,120005,120001],{"id":120006},"_2-linux装机教程",[14,120008,120010],{"id":120009},"_21-实体机","2.1 实体机",[31,120012,120013],{},"使用清华源：（Ubuntu24.04）",[31,120015,120016],{},[2867,120017,120018],{"href":120018,"rel":120019},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[2871],[14,120021,120023],{"id":120022},"_22-普通虚拟机","2.2 普通虚拟机",[19,120025,120027],{"id":120026},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[31,120029,120030],{},[2867,120031,120032],{"href":120032,"rel":120033},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[2871],[31,120035,120036],{},[55,120037],{"alt":57,"src":120038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[31,120040,120041],{},[55,120042],{"alt":57,"src":120043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[31,120045,120046],{},[55,120047],{"alt":57,"src":120048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[31,120050,120051],{},[55,120052],{"alt":57,"src":120053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[31,120055,120056],{},[55,120057],{"alt":57,"src":120058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[31,120060,120061],{},"内存4G（4096MB）；",[31,120063,120064],{},"CPU给4个核；",[31,120066,120067],{},"硬盘动态分配60G；",[31,120069,120070],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[19,120072,120074],{"id":120073},"_222-安装ubuntu","2.2.2 安装Ubuntu",[31,120076,120077],{},"按照1.1的步骤下载Ubuntu",[31,120079,120080],{},[55,120081],{"alt":57,"src":120082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[31,120084,120085],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[31,120087,120088],{},[55,120089],{"alt":57,"src":120090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[31,120092,120093],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[31,120095,120096],{},[55,120097],{"alt":57,"src":120098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[31,120100,120101,120102,120105],{},"选择“正常安装”(找不到都用Alt+F7)， ",[49,120103,120104],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[31,120107,120108],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[31,120110,120111],{},"将改动写入磁盘吗 继续",[31,120113,120114],{},"选择东八区（shanghai，大致在地图上点一下），继续",[31,120116,120117],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[31,120119,120120],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[31,120122,120123,120124,120127,120128,120131],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[49,120125,120126],{},"除了"," 选不发送系统信息与不升级之外， ",[49,120129,120130],{},"其它"," 都跳过或前进）",[19,120133,120135],{"id":120134},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[627,120137,120139],{"id":120138},"_2231-全屏","2.2.3.1 全屏",[31,120141,120142],{},[55,120143],{"alt":57,"src":120144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[31,120146,120147],{},[55,120148],{"alt":57,"src":120149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[627,120151,120153],{"id":120152},"_2232-文件交换","2.2.3.2 文件交换",[31,120155,120156],{},[55,120157],{"alt":57,"src":120158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[627,120160,120162],{"id":120161},"_2233-新建文本文档","2.2.3.3 新建文本文档",[31,120164,120165],{},[55,120166],{"alt":57,"src":120167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120169,120171],{"id":120170},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[19,120173,120175],{"id":120174},"_231-简介与优缺点","2.3.1 简介与优缺点",[24,120177,120178],{},[27,120179,120180],{},"什么情况下推荐？",[31,120182,120183],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[24,120185,120186],{"start":36},[27,120187,120188,120189],{},"优缺点：",[24,120190,120191,120221],{},[27,120192,120193,120194],{},"优点：",[24,120195,120196,120199,120206,120209,120212,120215,120218],{},[27,120197,120198],{},"WSL2是最好的Linux发行版;(bushi)",[27,120200,120201,120202,120205],{},"性能损耗极低。且比在Windows上跑深度性能 ",[49,120203,120204],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[27,120207,120208],{},"非常方便调用USB设备，可以USB直通;",[27,120210,120211],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[27,120213,120214],{},"非常方便Win与WSL2互相传文件等协同操作;",[27,120216,120217],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[27,120219,120220],{},"非常方便使用Windows的VScode远程开发;",[27,120222,120223,120224],{},"缺点：",[24,120225,120226],{},[27,120227,120228],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[31,120230,120231],{},[55,120232],{"alt":57,"src":120233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[19,120235,120237],{"id":120236},"_232-安装教程","2.3.2 安装教程",[627,120239,120241],{"id":120240},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[24,120243,120244],{},[27,120245,120246],{},"方法一(图形界面)",[31,120248,120249,120250,27462],{},"用Win+R输入",[196,120251,120252],{},"appwiz.cpl",[31,120254,120255],{},[55,120256],{"alt":57,"src":120257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[31,120259,120260,120261,120264,120265,29316],{},"点击OK进入 ",[49,120262,120263],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[49,120266,120267],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[31,120269,120270],{},[55,120271],{"alt":57,"src":120272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[31,120274,120275,120276,103277,120279,120282],{},"选择 ",[49,120277,120278],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[49,120280,120281],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[31,120284,120285],{},[55,120286],{"alt":57,"src":120287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[24,120289,120290],{"start":36},[27,120291,120292],{},"方法二(命令行)",[190,120294,120298],{"className":120295,"code":120296,"language":120297,"meta":57,"style":57},"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",[196,120299,120300,120305,120310,120315],{"__ignoreMap":57},[199,120301,120302],{"class":201,"line":202},[199,120303,120304],{},"# 开启 Linux 子系统\n",[199,120306,120307],{"class":201,"line":36},[199,120308,120309],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[199,120311,120312],{"class":201,"line":73},[199,120313,120314],{},"# 开启虚拟机平台\n",[199,120316,120317],{"class":201,"line":333},[199,120318,120319],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[627,120321,120323],{"id":120322},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[31,120325,120326],{},"用管理员权限打开powershell",[31,120328,120329],{},[55,120330],{"alt":57,"src":120331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[31,120333,120334],{},"升级WSL并设置默认版本为WSL2",[190,120336,120338],{"className":120295,"code":120337,"language":120297,"meta":57,"style":57},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[196,120339,120340,120345,120350,120355],{"__ignoreMap":57},[199,120341,120342],{"class":201,"line":202},[199,120343,120344],{},"# 更新 wsl\n",[199,120346,120347],{"class":201,"line":36},[199,120348,120349],{},"wsl --update\n",[199,120351,120352],{"class":201,"line":73},[199,120353,120354],{},"# 将 wsl 版本设置为 wsl2\n",[199,120356,120357],{"class":201,"line":333},[199,120358,120359],{},"wsl --set-default-version 2\n",[627,120361,120363],{"id":120362},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[24,120365,120366],{},[27,120367,120368],{},"方式一(商店下载)",[31,120370,120371],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[31,120373,120374],{},[55,120375],{"alt":57,"src":120376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[24,120378,120379],{"start":36},[27,120380,120381],{},"方式二(命令行安装)",[190,120383,120385],{"className":120295,"code":120384,"language":120297,"meta":57,"style":57},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[196,120386,120387,120392,120397],{"__ignoreMap":57},[199,120388,120389],{"class":201,"line":202},[199,120390,120391],{},"# 列出可安装的 Linux 版本\n",[199,120393,120394],{"class":201,"line":36},[199,120395,120396],{},"#（需要科学手段）\n",[199,120398,120399],{"class":201,"line":73},[199,120400,120401],{},"wsl --list --online\n",[31,120403,120404],{},[55,120405],{"alt":57,"src":120406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[31,120408,120409],{},"选择对应发行版并安装",[190,120411,120413],{"className":120295,"code":120412,"language":120297,"meta":57,"style":57},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[196,120414,120415,120420],{"__ignoreMap":57},[199,120416,120417],{"class":201,"line":202},[199,120418,120419],{},"# Ubuntu安装完毕后需要重启系统\n",[199,120421,120422],{"class":201,"line":36},[199,120423,120424],{},"wsl --install -d Ubuntu-24.04\n",[627,120426,120428],{"id":120427},"_2324-查看系统状态","2.3.2.4 查看系统状态",[190,120430,120432],{"className":120295,"code":120431,"language":120297,"meta":57,"style":57},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[196,120433,120434,120439,120444,120449,120454,120458,120462,120467,120472,120477],{"__ignoreMap":57},[199,120435,120436],{"class":201,"line":202},[199,120437,120438],{},"# 查看 wsl\n",[199,120440,120441],{"class":201,"line":36},[199,120442,120443],{},"wsl -l\n",[199,120445,120446],{"class":201,"line":73},[199,120447,120448],{},"# 查看 wsl 运行版本或模式\n",[199,120450,120451],{"class":201,"line":333},[199,120452,120453],{},"wsl -l -v\n",[199,120455,120456],{"class":201,"line":227},[199,120457,907],{"emptyLinePlaceholder":906},[199,120459,120460],{"class":201,"line":238},[199,120461,907],{"emptyLinePlaceholder":906},[199,120463,120464],{"class":201,"line":252},[199,120465,120466],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[199,120468,120469],{"class":201,"line":388},[199,120470,120471],{},"wsl --set-version \u003Cdistro> 2\n",[199,120473,120474],{"class":201,"line":415},[199,120475,120476],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[199,120478,120479],{"class":201,"line":426},[199,120480,120481],{},"wsl --unregister \u003Cdistro>\n",[31,120483,120484],{},"输出Version为2即正常",[31,120486,120487],{},[55,120488],{"alt":57,"src":120489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[627,120491,120493],{"id":120492},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[31,120495,120496],{},"直接在Powershell里输入wsl命令进入子系统",[190,120498,120500],{"className":120295,"code":120499,"language":120297,"meta":57,"style":57},"# 进入子系统\nwsl\n",[196,120501,120502,120507],{"__ignoreMap":57},[199,120503,120504],{"class":201,"line":202},[199,120505,120506],{},"# 进入子系统\n",[199,120508,120509],{"class":201,"line":36},[199,120510,120511],{},"wsl\n",[31,120513,120514],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[31,120516,120517],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[31,120519,120520],{},[55,120521],{"alt":57,"src":120522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[19,120524,120526],{"id":120525},"_233-配置各种环境","2.3.3 配置各种环境",[627,120528,120530],{"id":120529},"_2331-换源","2.3.3.1 换源",[31,120532,120533],{},"(同实体机LINUX，往下找教程)",[627,120535,120537],{"id":120536},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[25754,120539,120541],{"id":120540},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[31,120543,120544],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[31,120546,120547],{},[55,120548],{"alt":57,"src":120549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[31,120551,120552],{},[55,120553],{"alt":57,"src":120554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[25754,120556,120558],{"id":120557},"_23322-cuda","2.3.3.2.2 CUDA",[31,120560,120561,120562],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2867,120563,120564],{"href":120564,"rel":120565},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[2871],[31,120567,120568,120571],{},[55,120569],{"alt":57,"src":120570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[55,120572],{"alt":57,"src":120573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[31,120575,120576],{},"在下方的网站，选择合适的版本。",[31,120578,120579,120580],{},"WSL2 专属 CUDA 指南：",[2867,120581,120582],{"href":120582,"rel":120583},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[2871],[31,120585,120586],{},[49,120587,120588],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[31,120590,120591],{},[55,120592],{"alt":57,"src":120593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[31,120595,120596],{},"挨行敲一遍",[31,120598,120599],{},[55,120600],{"alt":57,"src":120601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[31,120603,120604,120605,120608],{},"敲完后，输入",[196,120606,120607],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[31,120610,120611],{},[55,120612],{"alt":57,"src":120613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[31,120615,120616,120617,120620],{},"（请详看下方教程的",[49,120618,120619],{},"安装CUDA的配置环境来看","如何配置环境）",[25754,120622,120624],{"id":120623},"_23323-cudnn","2.3.3.2.3 cuDNN",[31,120626,120533],{},[31,120628,120629],{},[55,120630],{"alt":57,"src":120631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[627,120633,120635],{"id":120634},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[31,120637,120638],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[31,120640,120641],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[31,120643,120644],{},[55,120645],{"alt":57,"src":120646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[31,120648,120649],{},"连接WSL2",[31,120651,120652],{},[55,120653],{"alt":57,"src":120654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[31,120656,120657],{},"远程开发成功。",[31,120659,120660],{},[55,120661],{"alt":57,"src":120662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[31,120664,120665],{},[55,120666],{"alt":57,"src":120667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[31,120669,120670],{},[55,120671],{"alt":57,"src":120672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[627,120674,120676],{"id":120675},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[31,120678,120679],{},[55,120680],{"alt":57,"src":120681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[627,120683,120685],{"id":120684},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[190,120687,120689],{"className":119555,"code":120688,"language":119557,"meta":57,"style":57},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[196,120690,120691,120699,120707,120718,120722],{"__ignoreMap":57},[199,120692,120693,120695,120697],{"class":201,"line":202},[199,120694,27420],{"class":878},[199,120696,119576],{"class":898},[199,120698,29085],{"class":898},[199,120700,120701,120703,120705],{"class":201,"line":36},[199,120702,27420],{"class":878},[199,120704,119576],{"class":898},[199,120706,119592],{"class":898},[199,120708,120709,120711,120713,120715],{"class":201,"line":73},[199,120710,27420],{"class":878},[199,120712,119576],{"class":898},[199,120714,26678],{"class":898},[199,120716,120717],{"class":898}," mesa-utils\n",[199,120719,120720],{"class":201,"line":333},[199,120721,907],{"emptyLinePlaceholder":906},[199,120723,120724],{"class":201,"line":227},[199,120725,120726],{"class":1454},"#然后重启wsl2即可\n",[1002,120728,120729],{},"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":57,"searchDepth":36,"depth":36,"links":120731},[120732,120733,120738],{"id":120009,"depth":36,"text":120010},{"id":120022,"depth":36,"text":120023,"children":120734},[120735,120736,120737],{"id":120026,"depth":73,"text":120027},{"id":120073,"depth":73,"text":120074},{"id":120134,"depth":73,"text":120135},{"id":120170,"depth":36,"text":120171,"children":120739},[120740,120741,120742],{"id":120174,"depth":73,"text":120175},{"id":120236,"depth":73,"text":120237},{"id":120525,"depth":73,"text":120526},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":120001,"description":3023},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120749,"title":120750,"body":120751,"description":3023,"extension":3024,"meta":123687,"navigation":906,"path":123688,"seo":123689,"stem":123690,"__hash__":123691},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120752,"toc":123659},[120753,120756,120760,120766,120770,120776,120780,120968,120971,120976,120980,120984,120987,120990,120996,121001,121004,121007,121012,121045,121050,121054,121131,121134,121139,121143,121146,121185,121188,121197,121215,121220,121227,121344,121349,121352,121379,121384,121388,121397,121447,121454,121458,121461,121475,121482,121516,121521,121525,121548,121551,121556,121560,121563,121566,121569,121611,121615,121618,121621,121662,121666,121670,121673,121678,121683,121686,121709,121712,121720,121725,121728,121733,121738,121741,121746,121750,121755,121778,121783,121845,121853,121858,121863,121866,121871,121874,121879,121884,121902,121907,121913,121918,121932,121936,121939,121942,121945,121988,121991,121996,122097,122100,122105,122109,122113,122150,122154,122158,122162,122208,122212,122257,122261,122268,122276,122331,122334,122411,122414,122437,122441,122444,122449,122454,122462,122465,122470,122475,122480,122483,122488,122497,122500,122505,122508,122579,122584,122587,122592,122595,122600,122603,122608,122611,122616,122621,122624,122699,122702,122715,122720,122723,122737,122740,122769,122774,122803,122806,122811,122815,122820,122829,122832,122837,122840,122845,122848,122851,122856,122859,122864,122869,122872,122877,122880,123005,123010,123040,123043,123048,123053,123070,123073,123116,123119,123146,123151,123164,123307,123311,123316,123330,123333,123384,123387,123417,123420,123436,123441,123455,123458,123525,123530,123539,123544,123547,123559,123564,123571,123595,123598,123603,123606,123625,123630,123637,123649,123656],[10,120754,120750],{"id":120755},"_3-安装必备配置",[14,120757,120759],{"id":120758},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[190,120761,120764],{"className":120762,"code":120763,"language":8084},[8082],"  打开下方网站（注意，该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",[196,120765,120763],{"__ignoreMap":57},[19,120767,120769],{"id":120768},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[190,120771,120774],{"className":120772,"code":120773,"language":8084},[8082],"  输入以下命令\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",[196,120775,120773],{"__ignoreMap":57},[19,120777,120779],{"id":120778},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[190,120781,120785],{"className":120782,"code":120783,"language":120784,"meta":57,"style":57},"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",[196,120786,120787,120795,120806,120818,120832,120836,120846,120851,120855,120859,120864,120868,120880,120884,120889,120893,120904,120908,120924,120928,120939,120943,120948,120952,120960],{"__ignoreMap":57},[199,120788,120789,120791,120793],{"class":201,"line":202},[199,120790,27420],{"class":878},[199,120792,119576],{"class":898},[199,120794,29085],{"class":898},[199,120796,120797,120799,120801,120803],{"class":201,"line":36},[199,120798,27420],{"class":878},[199,120800,119576],{"class":898},[199,120802,26678],{"class":898},[199,120804,120805],{"class":898}," vim\n",[199,120807,120808,120810,120813,120815],{"class":201,"line":73},[199,120809,27420],{"class":878},[199,120811,120812],{"class":898}," rm",[199,120814,28168],{"class":1018},[199,120816,120817],{"class":898}," \u002Fetc\u002Fapt\u002Fsources.list\n",[199,120819,120820,120822,120824,120826,120829],{"class":201,"line":333},[199,120821,27420],{"class":878},[199,120823,120812],{"class":898},[199,120825,28168],{"class":1018},[199,120827,120828],{"class":898}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[199,120830,120831],{"class":1018},"**\n",[199,120833,120834],{"class":201,"line":227},[199,120835,907],{"emptyLinePlaceholder":906},[199,120837,120838,120840,120843],{"class":201,"line":238},[199,120839,27420],{"class":878},[199,120841,120842],{"class":898}," vim",[199,120844,120845],{"class":898}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[199,120847,120848],{"class":201,"line":252},[199,120849,120850],{"class":898},"```\n",[199,120852,120853],{"class":201,"line":388},[199,120854,907],{"emptyLinePlaceholder":906},[199,120856,120857],{"class":201,"line":415},[199,120858,907],{"emptyLinePlaceholder":906},[199,120860,120861],{"class":201,"line":426},[199,120862,120863],{"class":878},"选择好Ubuntu版本后，复制下方的内容。\n",[199,120865,120866],{"class":201,"line":1015},[199,120867,907],{"emptyLinePlaceholder":906},[199,120869,120870,120872,120875,120878],{"class":201,"line":1031},[199,120871,3313],{"class":1086},[199,120873,120874],{"class":898},"[](",[199,120876,120877],{"class":878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[199,120879,1594],{"class":898},[199,120881,120882],{"class":201,"line":1043},[199,120883,907],{"emptyLinePlaceholder":906},[199,120885,120886],{"class":201,"line":1049},[199,120887,120888],{"class":878},"粘贴进去\n",[199,120890,120891],{"class":201,"line":1054},[199,120892,907],{"emptyLinePlaceholder":906},[199,120894,120895,120897,120899,120902],{"class":201,"line":1062},[199,120896,3313],{"class":1086},[199,120898,120874],{"class":898},[199,120900,120901],{"class":878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[199,120903,1594],{"class":898},[199,120905,120906],{"class":201,"line":1075},[199,120907,907],{"emptyLinePlaceholder":906},[199,120909,120910,120913,120916,120919,120921],{"class":201,"line":1092},[199,120911,120912],{"class":878},"按一下ESC，然后英文冒号，输入",[199,120914,120915],{"class":898}," `",[199,120917,120918],{"class":878},":wq!",[199,120920,4046],{"class":898},[199,120922,120923],{"class":878},"然后回车\n",[199,120925,120926],{"class":201,"line":1107},[199,120927,907],{"emptyLinePlaceholder":906},[199,120929,120930,120932,120934,120937],{"class":201,"line":1128},[199,120931,3313],{"class":1086},[199,120933,120874],{"class":898},[199,120935,120936],{"class":878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[199,120938,1594],{"class":898},[199,120940,120941],{"class":201,"line":1146},[199,120942,907],{"emptyLinePlaceholder":906},[199,120944,120945],{"class":201,"line":1163},[199,120946,120947],{"class":878},"输入以下命令\n",[199,120949,120950],{"class":201,"line":1176},[199,120951,907],{"emptyLinePlaceholder":906},[199,120953,120954,120957],{"class":201,"line":1189},[199,120955,120956],{"class":898},"```",[199,120958,120959],{"class":878},"Bash\n",[199,120961,120962,120964,120966],{"class":201,"line":1202},[199,120963,27420],{"class":878},[199,120965,119576],{"class":898},[199,120967,29085],{"class":898},[31,120969,120970],{},"这里被替换成对应学校则成功",[31,120972,120973],{},[55,120974],{"alt":57,"src":120975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120977,120979],{"id":120978},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[19,120981,120983],{"id":120982},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[31,120985,120986],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[31,120988,120989],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[31,120991,120992],{},[2867,120993,120994],{"href":120994,"rel":120995},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[2871],[31,120997,120998],{},[55,120999],{"alt":57,"src":121000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[31,121002,121003],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[31,121005,121006],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[31,121008,121009],{},[55,121010],{"alt":57,"src":121011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[190,121013,121015],{"className":119555,"code":121014,"language":119557,"meta":57,"style":57},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[196,121016,121017,121022,121029,121034],{"__ignoreMap":57},[199,121018,121019],{"class":201,"line":202},[199,121020,121021],{"class":1454},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[199,121023,121024,121026],{"class":201,"line":36},[199,121025,103535],{"class":1018},[199,121027,121028],{"class":898}," ~\u002FDownloads\n",[199,121030,121031],{"class":201,"line":73},[199,121032,121033],{"class":1454},"#下方chrome安装包名不一定是这个，根据名字来看\n",[199,121035,121036,121038,121040,121042],{"class":201,"line":333},[199,121037,27420],{"class":878},[199,121039,119576],{"class":898},[199,121041,26678],{"class":898},[199,121043,121044],{"class":898}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[31,121046,121047],{},[55,121048],{"alt":57,"src":121049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[19,121051,121053],{"id":121052},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[190,121055,121057],{"className":119555,"code":121056,"language":119557,"meta":57,"style":57},"# 老版\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",[196,121058,121059,121064,121072,121083,121088,121092,121097,121107,121115,121126],{"__ignoreMap":57},[199,121060,121061],{"class":201,"line":202},[199,121062,121063],{"class":1454},"# 老版\n",[199,121065,121066,121068,121070],{"class":201,"line":36},[199,121067,27420],{"class":878},[199,121069,119576],{"class":898},[199,121071,29085],{"class":898},[199,121073,121074,121076,121078,121080],{"class":201,"line":73},[199,121075,27420],{"class":878},[199,121077,119576],{"class":898},[199,121079,26678],{"class":898},[199,121081,121082],{"class":898}," neofetch\n",[199,121084,121085],{"class":201,"line":333},[199,121086,121087],{"class":878},"neofetch\n",[199,121089,121090],{"class":201,"line":227},[199,121091,907],{"emptyLinePlaceholder":906},[199,121093,121094],{"class":201,"line":238},[199,121095,121096],{"class":1454},"# 新版\n",[199,121098,121099,121101,121104],{"class":201,"line":252},[199,121100,27420],{"class":878},[199,121102,121103],{"class":898}," add-apt-repository",[199,121105,121106],{"class":898}," ppa:zhangsongcui3371\u002Ffastfetch\n",[199,121108,121109,121111,121113],{"class":201,"line":388},[199,121110,27420],{"class":878},[199,121112,119576],{"class":898},[199,121114,29085],{"class":898},[199,121116,121117,121119,121121,121123],{"class":201,"line":415},[199,121118,27420],{"class":878},[199,121120,119576],{"class":898},[199,121122,26678],{"class":898},[199,121124,121125],{"class":898}," fastfetch\n",[199,121127,121128],{"class":201,"line":426},[199,121129,121130],{"class":878},"fastfetch\n",[31,121132,121133],{},"这里显示，一共有3162个debian的程序，7个snap程序",[31,121135,121136],{},[55,121137],{"alt":57,"src":121138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[19,121140,121142],{"id":121141},"_323-移除snap应用","3.2.3 移除snap应用",[31,121144,121145],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[190,121147,121149],{"className":119555,"code":121148,"language":119557,"meta":57,"style":57},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[196,121150,121151,121163,121174],{"__ignoreMap":57},[199,121152,121153,121155,121157,121160],{"class":201,"line":202},[199,121154,27420],{"class":878},[199,121156,29356],{"class":898},[199,121158,121159],{"class":898}," disable",[199,121161,121162],{"class":898}," snapd.service\n",[199,121164,121165,121167,121169,121171],{"class":201,"line":36},[199,121166,27420],{"class":878},[199,121168,29356],{"class":898},[199,121170,121159],{"class":898},[199,121172,121173],{"class":898}," snapd.socket\n",[199,121175,121176,121178,121180,121182],{"class":201,"line":73},[199,121177,27420],{"class":878},[199,121179,29356],{"class":898},[199,121181,121159],{"class":898},[199,121183,121184],{"class":898}," snapd.seeded.service\n",[31,121186,121187],{},"然后查看snap应用列表",[31,121189,121190,121191,121196],{},"根据你安装的选择不同（最小安装或普通安装），有",[2867,121192,121195],{"href":121193,"rel":121194},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[2871],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[190,121198,121200],{"className":119555,"code":121199,"language":119557,"meta":57,"style":57},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[196,121201,121202,121207],{"__ignoreMap":57},[199,121203,121204],{"class":201,"line":202},[199,121205,121206],{"class":1454},"# 查询当前系统上snap安装了哪些app\n",[199,121208,121209,121212],{"class":201,"line":36},[199,121210,121211],{"class":878},"snap",[199,121213,121214],{"class":898}," list\n",[31,121216,121217],{},[55,121218],{"alt":57,"src":121219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[31,121221,121222,121223,121226],{},"卸载掉图中所有应用，按照 ",[49,121224,121225],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[190,121228,121230],{"className":119555,"code":121229,"language":119557,"meta":57,"style":57},"#移除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",[196,121231,121232,121237,121249,121254,121265,121270,121281,121286,121297,121302,121306,121311,121322,121333],{"__ignoreMap":57},[199,121233,121234],{"class":201,"line":202},[199,121235,121236],{"class":1454},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[199,121238,121239,121241,121244,121246],{"class":201,"line":36},[199,121240,27420],{"class":878},[199,121242,121243],{"class":898}," snap",[199,121245,28922],{"class":898},[199,121247,121248],{"class":898}," snap-store\n",[199,121250,121251],{"class":201,"line":73},[199,121252,121253],{"class":1454},"#移除firefox浏览器\n",[199,121255,121256,121258,121260,121262],{"class":201,"line":333},[199,121257,27420],{"class":878},[199,121259,121243],{"class":898},[199,121261,28922],{"class":898},[199,121263,121264],{"class":898}," firefox\n",[199,121266,121267],{"class":201,"line":227},[199,121268,121269],{"class":1454},"#移除gnome-42-2204\n",[199,121271,121272,121274,121276,121278],{"class":201,"line":238},[199,121273,27420],{"class":878},[199,121275,121243],{"class":898},[199,121277,28922],{"class":898},[199,121279,121280],{"class":898}," gnome-42-2204\n",[199,121282,121283],{"class":201,"line":252},[199,121284,121285],{"class":1454},"#移除gtk-common-themes\n",[199,121287,121288,121290,121292,121294],{"class":201,"line":388},[199,121289,27420],{"class":878},[199,121291,121243],{"class":898},[199,121293,28922],{"class":898},[199,121295,121296],{"class":898}," gtk-common-themes\n",[199,121298,121299],{"class":201,"line":415},[199,121300,121301],{"class":1454},"#移除其它...\n",[199,121303,121304],{"class":201,"line":426},[199,121305,5578],{"class":205},[199,121307,121308],{"class":201,"line":1015},[199,121309,121310],{"class":1454},"#移除core22,bare以及snapd\n",[199,121312,121313,121315,121317,121319],{"class":201,"line":1031},[199,121314,27420],{"class":878},[199,121316,121243],{"class":898},[199,121318,28922],{"class":898},[199,121320,121321],{"class":898}," core22\n",[199,121323,121324,121326,121328,121330],{"class":201,"line":1043},[199,121325,27420],{"class":878},[199,121327,121243],{"class":898},[199,121329,28922],{"class":898},[199,121331,121332],{"class":898}," bare\n",[199,121334,121335,121337,121339,121341],{"class":201,"line":1049},[199,121336,27420],{"class":878},[199,121338,121243],{"class":898},[199,121340,28922],{"class":898},[199,121342,121343],{"class":898}," snapd\n",[31,121345,121346],{},[55,121347],{"alt":57,"src":121348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[31,121350,121351],{},"输入以下命令查看是否还有snap包",[190,121353,121355],{"className":119555,"code":121354,"language":119557,"meta":57,"style":57},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[196,121356,121357,121363,121367,121371,121375],{"__ignoreMap":57},[199,121358,121359,121361],{"class":201,"line":202},[199,121360,121211],{"class":878},[199,121362,121214],{"class":898},[199,121364,121365],{"class":201,"line":36},[199,121366,121063],{"class":1454},[199,121368,121369],{"class":201,"line":73},[199,121370,121087],{"class":878},[199,121372,121373],{"class":201,"line":333},[199,121374,121096],{"class":1454},[199,121376,121377],{"class":201,"line":227},[199,121378,121130],{"class":878},[31,121380,121381],{},[55,121382],{"alt":57,"src":121383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[19,121385,121387],{"id":121386},"_324-移除snap","3.2.4 移除snap",[31,121389,121390,121391,121396],{},"在删除掉",[2867,121392,121395],{"href":121393,"rel":121394},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[2871],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[190,121398,121400],{"className":119555,"code":121399,"language":119557,"meta":57,"style":57}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[196,121401,121402,121407,121420,121425,121436],{"__ignoreMap":57},[199,121403,121404],{"class":201,"line":202},[199,121405,121406],{"class":1454}," #使用apt移除掉snap\n",[199,121408,121409,121411,121413,121415,121418],{"class":201,"line":36},[199,121410,27420],{"class":878},[199,121412,119576],{"class":898},[199,121414,119884],{"class":898},[199,121416,121417],{"class":1018}," --purge",[199,121419,121343],{"class":898},[199,121421,121422],{"class":201,"line":73},[199,121423,121424],{"class":1454},"#移除snapd的一些目录\n",[199,121426,121427,121429,121431,121433],{"class":201,"line":333},[199,121428,27420],{"class":878},[199,121430,120812],{"class":898},[199,121432,28168],{"class":1018},[199,121434,121435],{"class":898}," \u002Fvar\u002Fcache\u002Fsnapd\n",[199,121437,121438,121440,121442,121444],{"class":201,"line":227},[199,121439,27420],{"class":878},[199,121441,120812],{"class":898},[199,121443,28168],{"class":1018},[199,121445,121446],{"class":898}," ~\u002Fsnap\n",[31,121448,121449,121450,121453],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[196,121451,121452],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[19,121455,121457],{"id":121456},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[31,121459,121460],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[190,121462,121464],{"className":119555,"code":121463,"language":119557,"meta":57,"style":57},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[196,121465,121466],{"__ignoreMap":57},[199,121467,121468,121470,121472],{"class":201,"line":202},[199,121469,27420],{"class":878},[199,121471,120842],{"class":898},[199,121473,121474],{"class":898}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[31,121476,121477,121478,121481],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[196,121479,121480],{},":wq"," 回车",[190,121483,121485],{"className":119555,"code":121484,"language":119557,"meta":57,"style":57},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[196,121486,121487,121494,121508],{"__ignoreMap":57},[199,121488,121489,121492],{"class":201,"line":202},[199,121490,121491],{"class":878},"Package:",[199,121493,121343],{"class":898},[199,121495,121496,121499,121502,121505],{"class":201,"line":36},[199,121497,121498],{"class":878},"Pin:",[199,121500,121501],{"class":898}," release",[199,121503,121504],{"class":898}," a=",[199,121506,121507],{"class":1018},"*\n",[199,121509,121510,121513],{"class":201,"line":73},[199,121511,121512],{"class":878},"Pin-Priority:",[199,121514,121515],{"class":1018}," -10\n",[31,121517,121518],{},[55,121519],{"alt":57,"src":121520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[19,121522,121524],{"id":121523},"_326-测试是否成功","3.2.6 测试是否成功",[190,121526,121528],{"className":119555,"code":121527,"language":119557,"meta":57,"style":57},"sudo apt update\nsudo apt install firefox\n",[196,121529,121530,121538],{"__ignoreMap":57},[199,121531,121532,121534,121536],{"class":201,"line":202},[199,121533,27420],{"class":878},[199,121535,119576],{"class":898},[199,121537,29085],{"class":898},[199,121539,121540,121542,121544,121546],{"class":201,"line":36},[199,121541,27420],{"class":878},[199,121543,119576],{"class":898},[199,121545,26678],{"class":898},[199,121547,121264],{"class":898},[31,121549,121550],{},"这里提示snapd无法被安装，就证明成功了",[31,121552,121553],{},[55,121554],{"alt":57,"src":121555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[19,121557,121559],{"id":121558},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[31,121561,121562],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[31,121564,121565],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[31,121567,121568],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[190,121570,121572],{"className":119555,"code":121571,"language":119557,"meta":57,"style":57},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[196,121573,121574,121579,121588,121593,121601],{"__ignoreMap":57},[199,121575,121576],{"class":201,"line":202},[199,121577,121578],{"class":1454},"# 添加Mozilla提供的源\n",[199,121580,121581,121583,121585],{"class":201,"line":36},[199,121582,27420],{"class":878},[199,121584,121103],{"class":898},[199,121586,121587],{"class":898}," ppa:mozillateam\u002Fppa\n",[199,121589,121590],{"class":201,"line":73},[199,121591,121592],{"class":1454},"# 安装Firefox\n",[199,121594,121595,121597,121599],{"class":201,"line":333},[199,121596,27420],{"class":878},[199,121598,119576],{"class":898},[199,121600,29085],{"class":898},[199,121602,121603,121605,121607,121609],{"class":201,"line":227},[199,121604,27420],{"class":878},[199,121606,119576],{"class":898},[199,121608,26678],{"class":898},[199,121610,121264],{"class":898},[19,121612,121614],{"id":121613},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[31,121616,121617],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[31,121619,121620],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[190,121622,121624],{"className":119555,"code":121623,"language":119557,"meta":57,"style":57},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[196,121625,121626,121631,121641,121649,121653],{"__ignoreMap":57},[199,121627,121628],{"class":201,"line":202},[199,121629,121630],{"class":1454},"#删掉禁止安装snap的配置文件\n",[199,121632,121633,121635,121637,121639],{"class":201,"line":36},[199,121634,27420],{"class":878},[199,121636,120812],{"class":898},[199,121638,28168],{"class":1018},[199,121640,121474],{"class":898},[199,121642,121643,121645,121647],{"class":201,"line":73},[199,121644,27420],{"class":878},[199,121646,119576],{"class":898},[199,121648,29085],{"class":898},[199,121650,121651],{"class":201,"line":333},[199,121652,907],{"emptyLinePlaceholder":906},[199,121654,121655,121657,121659],{"class":201,"line":227},[199,121656,27420],{"class":878},[199,121658,119576],{"class":898},[199,121660,121661],{"class":898}," dist-update\n",[14,121663,121665],{"id":121664},"_33-中文输入法","3.3 中文输入法",[19,121667,121669],{"id":121668},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[31,121671,121672],{},"官网下载搜狗输入法",[31,121674,121675],{},[55,121676],{"alt":57,"src":121677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[31,121679,121680],{},[55,121681],{"alt":57,"src":121682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[31,121684,121685],{},"打开终端输入如下",[190,121687,121689],{"className":119555,"code":121688,"language":119557,"meta":57,"style":57},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[196,121690,121691,121698],{"__ignoreMap":57},[199,121692,121693,121695],{"class":201,"line":202},[199,121694,103535],{"class":1018},[199,121696,121697],{"class":898}," ~\u002FDownloads\u002F\n",[199,121699,121700,121702,121704,121706],{"class":201,"line":36},[199,121701,27420],{"class":878},[199,121703,119576],{"class":898},[199,121705,26678],{"class":898},[199,121707,121708],{"class":898}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[31,121710,121711],{},"打开Fcitx",[31,121713,121714,121717],{},[55,121715],{"alt":57,"src":121716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[55,121718],{"alt":57,"src":121719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[31,121721,121722],{},[55,121723],{"alt":57,"src":121724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[31,121726,121727],{},"添加搜狗输入法",[31,121729,121730],{},[55,121731],{"alt":57,"src":121732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[31,121734,121735],{},[55,121736],{"alt":57,"src":121737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[31,121739,121740],{},"将搜狗输入法设置为唯一输入法",[31,121742,121743],{},[55,121744],{"alt":57,"src":121745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[19,121747,121749],{"id":121748},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[24,121751,121752],{},[27,121753,121754],{},"卸载旧输入法",[190,121756,121758],{"className":120782,"code":121757,"language":120784,"meta":57,"style":57},"sudo apt purge fcitx* ibus*\n",[196,121759,121760],{"__ignoreMap":57},[199,121761,121762,121764,121766,121768,121771,121773,121776],{"class":201,"line":202},[199,121763,27420],{"class":878},[199,121765,119576],{"class":898},[199,121767,119917],{"class":898},[199,121769,121770],{"class":898}," fcitx",[199,121772,3537],{"class":1018},[199,121774,121775],{"class":898}," ibus",[199,121777,121507],{"class":1018},[24,121779,121780],{"start":36},[27,121781,121782],{},"安装Fcitx5",[190,121784,121786],{"className":119555,"code":121785,"language":119557,"meta":57,"style":57},"# 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",[196,121787,121788,121793,121807,121811,121816,121825,121833],{"__ignoreMap":57},[199,121789,121790],{"class":201,"line":202},[199,121791,121792],{"class":1454},"# Ubuntu22.04及以上、Debian12及以上\n",[199,121794,121795,121797,121799,121801,121804],{"class":201,"line":36},[199,121796,27420],{"class":878},[199,121798,119576],{"class":898},[199,121800,26678],{"class":898},[199,121802,121803],{"class":898}," fcitx5",[199,121805,121806],{"class":898}," fcitx5-chinese-addons\n",[199,121808,121809],{"class":201,"line":73},[199,121810,907],{"emptyLinePlaceholder":906},[199,121812,121813],{"class":201,"line":333},[199,121814,121815],{"class":1454},"# Ubuntu20.04\n",[199,121817,121818,121820,121822],{"class":201,"line":227},[199,121819,27420],{"class":878},[199,121821,121103],{"class":898},[199,121823,121824],{"class":898}," ppa:zhsj\u002Ffcitx5\n",[199,121826,121827,121829,121831],{"class":201,"line":238},[199,121828,27420],{"class":878},[199,121830,119576],{"class":898},[199,121832,29085],{"class":898},[199,121834,121835,121837,121839,121841,121843],{"class":201,"line":252},[199,121836,27420],{"class":878},[199,121838,119576],{"class":898},[199,121840,26678],{"class":898},[199,121842,121803],{"class":898},[199,121844,121806],{"class":898},[24,121846,121847,121850],{"start":73},[27,121848,121849],{},"Reboot System",[27,121851,121852],{},"启动Fcitx5",[31,121854,121855],{},[55,121856],{"alt":57,"src":121857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[24,121859,121860],{"start":227},[27,121861,121862],{},"修改一些设置",[31,121864,121865],{},"将Pinyin和Keyboard - English US加入到左边。",[31,121867,121868],{},[55,121869],{"alt":57,"src":121870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[31,121872,121873],{},"添加快捷键以便于更好切换中英文",[31,121875,121876],{},[55,121877],{"alt":57,"src":121878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[24,121880,121881],{"start":238},[27,121882,121883],{},"重启",[190,121885,121887],{"className":120782,"code":121886,"language":120784,"meta":57,"style":57},"sudo shutdown -r now\n",[196,121888,121889],{"__ignoreMap":57},[199,121890,121891,121893,121896,121899],{"class":201,"line":202},[199,121892,27420],{"class":878},[199,121894,121895],{"class":898}," shutdown",[199,121897,121898],{"class":1018}," -r",[199,121900,121901],{"class":898}," now\n",[24,121903,121904],{"start":252},[27,121905,121906],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[31,121908,121909],{},[2867,121910,121911],{"href":121911,"rel":121912},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[2871],[24,121914,121915],{"start":388},[27,121916,121917],{},"再重启",[190,121919,121920],{"className":120782,"code":121886,"language":120784,"meta":57,"style":57},[196,121921,121922],{"__ignoreMap":57},[199,121923,121924,121926,121928,121930],{"class":201,"line":202},[199,121925,27420],{"class":878},[199,121927,121895],{"class":898},[199,121929,121898],{"class":1018},[199,121931,121901],{"class":898},[14,121933,121935],{"id":121934},"_34-pip3源替换","3.4 pip3源替换",[31,121937,121938],{},"非Debian系发行版需要做。",[31,121940,121941],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[31,121943,121944],{},"使用dnf的系统也可能不用做。",[190,121946,121948],{"className":119555,"code":121947,"language":119557,"meta":57,"style":57},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[196,121949,121950,121955,121962,121967,121972],{"__ignoreMap":57},[199,121951,121952],{"class":201,"line":202},[199,121953,121954],{"class":1454},"# 检查是否已安装 pip\n",[199,121956,121957,121960],{"class":201,"line":36},[199,121958,121959],{"class":878},"pip3",[199,121961,29136],{"class":1018},[199,121963,121964],{"class":201,"line":73},[199,121965,121966],{"class":1454},"# 如果未安装，先安装 pip3（见下方）\n",[199,121968,121969],{"class":201,"line":333},[199,121970,121971],{"class":1454},"# 配置 pip 使用清华源\n",[199,121973,121974,121976,121979,121982,121985],{"class":201,"line":227},[199,121975,121959],{"class":878},[199,121977,121978],{"class":898}," config",[199,121980,121981],{"class":898}," set",[199,121983,121984],{"class":898}," global.index-url",[199,121986,121987],{"class":898}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[31,121989,121990],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[31,121992,121993],{},[55,121994],{"alt":57,"src":121995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[190,121997,121999],{"className":119555,"code":121998,"language":119557,"meta":57,"style":57},"#安装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",[196,122000,122001,122006,122014,122025,122029,122034,122053,122057,122062,122074,122078,122083],{"__ignoreMap":57},[199,122002,122003],{"class":201,"line":202},[199,122004,122005],{"class":1454},"#安装pip3\n",[199,122007,122008,122010,122012],{"class":201,"line":36},[199,122009,27420],{"class":878},[199,122011,119576],{"class":898},[199,122013,29085],{"class":898},[199,122015,122016,122018,122020,122022],{"class":201,"line":73},[199,122017,27420],{"class":878},[199,122019,28919],{"class":898},[199,122021,26678],{"class":898},[199,122023,122024],{"class":898}," python3-pip\n",[199,122026,122027],{"class":201,"line":333},[199,122028,907],{"emptyLinePlaceholder":906},[199,122030,122031],{"class":201,"line":227},[199,122032,122033],{"class":1454},"#更新pip3\n",[199,122035,122036,122038,122040,122042,122044,122046,122049,122051],{"class":201,"line":238},[199,122037,103138],{"class":878},[199,122039,103141],{"class":1018},[199,122041,103164],{"class":898},[199,122043,26678],{"class":898},[199,122045,29273],{"class":1018},[199,122047,122048],{"class":898}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[199,122050,103169],{"class":1018},[199,122052,103172],{"class":898},[199,122054,122055],{"class":201,"line":252},[199,122056,907],{"emptyLinePlaceholder":906},[199,122058,122059],{"class":201,"line":388},[199,122060,122061],{"class":1454},"#设置pip源为清华源\n",[199,122063,122064,122066,122068,122070,122072],{"class":201,"line":415},[199,122065,121959],{"class":878},[199,122067,121978],{"class":898},[199,122069,121981],{"class":898},[199,122071,121984],{"class":898},[199,122073,121987],{"class":898},[199,122075,122076],{"class":201,"line":426},[199,122077,907],{"emptyLinePlaceholder":906},[199,122079,122080],{"class":201,"line":1015},[199,122081,122082],{"class":1454},"#测试\n",[199,122084,122085,122087,122089,122091,122093,122095],{"class":201,"line":1031},[199,122086,103138],{"class":878},[199,122088,103141],{"class":1018},[199,122090,103164],{"class":898},[199,122092,26678],{"class":898},[199,122094,103169],{"class":1018},[199,122096,103172],{"class":898},[31,122098,122099],{},"成功的话，会看到Looking后面是tsinghua字样。",[31,122101,122102],{},[55,122103],{"alt":57,"src":122104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,122106,122108],{"id":122107},"_35-显卡驱动安装","3.5 显卡驱动安装",[19,122110,122112],{"id":122111},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[190,122114,122116],{"className":120782,"code":122115,"language":120784,"meta":57,"style":57},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[196,122117,122118,122123,122138,122143],{"__ignoreMap":57},[199,122119,122120],{"class":201,"line":202},[199,122121,122122],{"class":1454},"# 如果是使用apt安装的驱动\n",[199,122124,122125,122127,122129,122131,122133,122136],{"class":201,"line":36},[199,122126,27420],{"class":878},[199,122128,28919],{"class":898},[199,122130,28922],{"class":898},[199,122132,121417],{"class":1018},[199,122134,122135],{"class":898}," nvidia",[199,122137,121507],{"class":1018},[199,122139,122140],{"class":201,"line":73},[199,122141,122142],{"class":1454},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[199,122144,122145,122147],{"class":201,"line":333},[199,122146,27420],{"class":878},[199,122148,122149],{"class":898}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[19,122151,122153],{"id":122152},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[627,122155,122157],{"id":122156},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[25754,122159,122161],{"id":122160},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[190,122163,122165],{"className":120782,"code":122164,"language":120784,"meta":57,"style":57},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[196,122166,122167,122172,122183,122188,122198,122203],{"__ignoreMap":57},[199,122168,122169],{"class":201,"line":202},[199,122170,122171],{"class":1454},"# 安装英伟达驱动\n",[199,122173,122174,122176,122178,122180],{"class":201,"line":36},[199,122175,27420],{"class":878},[199,122177,119576],{"class":898},[199,122179,26678],{"class":898},[199,122181,122182],{"class":898}," nvidia-driver-版本号\n",[199,122184,122185],{"class":201,"line":73},[199,122186,122187],{"class":1454},"# 重启 \n",[199,122189,122190,122192,122194,122196],{"class":201,"line":333},[199,122191,27420],{"class":878},[199,122193,121895],{"class":898},[199,122195,121898],{"class":1018},[199,122197,121901],{"class":898},[199,122199,122200],{"class":201,"line":227},[199,122201,122202],{"class":1454},"# 检查驱动是否安装成功\n",[199,122204,122205],{"class":201,"line":238},[199,122206,122207],{"class":878},"nvidia-smi\n",[25754,122209,122211],{"id":122210},"_35212-debian","3.5.2.1.2 Debian",[190,122213,122215],{"className":120782,"code":122214,"language":120784,"meta":57,"style":57},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[196,122216,122217,122221,122235,122239,122249,122253],{"__ignoreMap":57},[199,122218,122219],{"class":201,"line":202},[199,122220,122171],{"class":1454},[199,122222,122223,122225,122227,122229,122232],{"class":201,"line":36},[199,122224,27420],{"class":878},[199,122226,119576],{"class":898},[199,122228,26678],{"class":898},[199,122230,122231],{"class":898}," nvidia-driver",[199,122233,122234],{"class":898}," nvidia-settings\n",[199,122236,122237],{"class":201,"line":73},[199,122238,122187],{"class":1454},[199,122240,122241,122243,122245,122247],{"class":201,"line":333},[199,122242,27420],{"class":878},[199,122244,121895],{"class":898},[199,122246,121898],{"class":1018},[199,122248,121901],{"class":898},[199,122250,122251],{"class":201,"line":227},[199,122252,122202],{"class":1454},[199,122254,122255],{"class":201,"line":238},[199,122256,122207],{"class":878},[627,122258,122260],{"id":122259},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[31,122262,122263,122264,122267],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[49,122265,122266],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[31,122269,122270,122271],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[26397,122272,122273],{},[49,122274,122275],{},"（也可以不禁用桌面环境，直接进行下一步。）",[190,122277,122279],{"className":120782,"code":122278,"language":120784,"meta":57,"style":57},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[196,122280,122281,122286,122296,122301,122314,122319],{"__ignoreMap":57},[199,122282,122283],{"class":201,"line":202},[199,122284,122285],{"class":1454},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[199,122287,122288,122290,122293],{"class":201,"line":36},[199,122289,27420],{"class":878},[199,122291,122292],{"class":898}," telinit",[199,122294,122295],{"class":1018}," 3\n",[199,122297,122298],{"class":201,"line":73},[199,122299,122300],{"class":1454},"# ubuntu 使用下方命令\n",[199,122302,122303,122305,122308,122311],{"class":201,"line":333},[199,122304,27420],{"class":878},[199,122306,122307],{"class":898}," service",[199,122309,122310],{"class":898}," lightdm",[199,122312,122313],{"class":898}," stop\n",[199,122315,122316],{"class":201,"line":227},[199,122317,122318],{"class":1454},"# Fedora 使用下方命令\n",[199,122320,122321,122323,122325,122328],{"class":201,"line":238},[199,122322,27420],{"class":878},[199,122324,29356],{"class":898},[199,122326,122327],{"class":898}," isolate",[199,122329,122330],{"class":898}," multi-user.target\n",[31,122332,122333],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[190,122335,122337],{"className":120782,"code":122336,"language":120784,"meta":57,"style":57},"# 编译环境+准备工作\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",[196,122338,122339,122344,122355,122360,122367,122372,122384,122389,122396,122401],{"__ignoreMap":57},[199,122340,122341],{"class":201,"line":202},[199,122342,122343],{"class":1454},"# 编译环境+准备工作\n",[199,122345,122346,122348,122350,122352],{"class":201,"line":36},[199,122347,27420],{"class":878},[199,122349,119576],{"class":898},[199,122351,26678],{"class":898},[199,122353,122354],{"class":898}," build-essential\n",[199,122356,122357],{"class":201,"line":73},[199,122358,122359],{"class":1454},"# 进入到.run目录中\n",[199,122361,122362,122364],{"class":201,"line":333},[199,122363,103535],{"class":1018},[199,122365,122366],{"class":898}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[199,122368,122369],{"class":201,"line":227},[199,122370,122371],{"class":1454},"# 给驱动文件增加可执行权限：\n",[199,122373,122374,122376,122378,122381],{"class":201,"line":238},[199,122375,27420],{"class":878},[199,122377,27423],{"class":898},[199,122379,122380],{"class":898}," a+x",[199,122382,122383],{"class":898}," NVIDIA-Linux-x86_64-550.107.02.run\n",[199,122385,122386],{"class":201,"line":252},[199,122387,122388],{"class":1454},"# 然后执行安装：\n",[199,122390,122391,122393],{"class":201,"line":388},[199,122392,27420],{"class":878},[199,122394,122395],{"class":898}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[199,122397,122398],{"class":201,"line":415},[199,122399,122400],{"class":1454},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[199,122402,122403,122405,122408],{"class":201,"line":426},[199,122404,27420],{"class":878},[199,122406,122407],{"class":898}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[199,122409,122410],{"class":1018},"  --no-opengl-files\n",[31,122412,122413],{},"安装完毕重启即可",[190,122415,122417],{"className":120782,"code":122416,"language":120784,"meta":57,"style":57},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[196,122418,122419,122423,122429,122433],{"__ignoreMap":57},[199,122420,122421],{"class":201,"line":202},[199,122422,122187],{"class":1454},[199,122424,122425,122427],{"class":201,"line":36},[199,122426,27420],{"class":878},[199,122428,29490],{"class":898},[199,122430,122431],{"class":201,"line":73},[199,122432,122202],{"class":1454},[199,122434,122435],{"class":201,"line":333},[199,122436,122207],{"class":878},[19,122438,122440],{"id":122439},"_353-安装cuda","3.5.3 安装CUDA",[31,122442,122443],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[31,122445,122446],{},[55,122447],{"alt":57,"src":122448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[24,122450,122451],{},[27,122452,122453],{},"先查看显卡驱动所支持的最高CUDA版本",[190,122455,122456],{"className":120782,"code":122207,"language":120784,"meta":57,"style":57},[196,122457,122458],{"__ignoreMap":57},[199,122459,122460],{"class":201,"line":202},[199,122461,122207],{"class":878},[31,122463,122464],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[31,122466,122467],{},[55,122468],{"alt":57,"src":122469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[24,122471,122472],{"start":36},[27,122473,122474],{},"下载CUDA并安装CUDA",[31,122476,120561,122477],{},[2867,122478,120564],{"href":120564,"rel":122479},[2871],[31,122481,122482],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[31,122484,122485],{},[55,122486],{"alt":57,"src":122487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[31,122489,122490,122491,122496],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2867,122492,122495],{"href":122493,"rel":122494},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[2871],"Vinci机器人队单片机教程","）",[31,122498,122499],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[31,122501,122502],{},[55,122503],{"alt":57,"src":122504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[31,122506,122507],{},"将最下方框框里的命令敲入终端",[190,122509,122511],{"className":120782,"code":122510,"language":120784,"meta":57,"style":57},"# 在当前文件夹下创建一个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",[196,122512,122513,122518,122527,122532,122539,122544,122552,122557,122568,122573],{"__ignoreMap":57},[199,122514,122515],{"class":201,"line":202},[199,122516,122517],{"class":1454},"# 在当前文件夹下创建一个ttt的子文件夹\n",[199,122519,122520,122522,122524],{"class":201,"line":36},[199,122521,103525],{"class":878},[199,122523,32059],{"class":1018},[199,122525,122526],{"class":898}," .\u002Fttt\n",[199,122528,122529],{"class":201,"line":73},[199,122530,122531],{"class":1454},"# 进入ttt文件夹\n",[199,122533,122534,122536],{"class":201,"line":333},[199,122535,103535],{"class":1018},[199,122537,122538],{"class":898}," ttt\n",[199,122540,122541],{"class":201,"line":227},[199,122542,122543],{"class":1454},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[199,122545,122546,122549],{"class":201,"line":238},[199,122547,122548],{"class":878},"wget",[199,122550,122551],{"class":898}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[199,122553,122554],{"class":201,"line":252},[199,122555,122556],{"class":1454},"# 给予权限\n",[199,122558,122559,122561,122563,122565],{"class":201,"line":388},[199,122560,27420],{"class":878},[199,122562,27423],{"class":898},[199,122564,122380],{"class":898},[199,122566,122567],{"class":898}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[199,122569,122570],{"class":201,"line":415},[199,122571,122572],{"class":1454},"# 运行脚本\n",[199,122574,122575,122577],{"class":201,"line":426},[199,122576,27420],{"class":878},[199,122578,122567],{"class":898},[31,122580,122581],{},[55,122582],{"alt":57,"src":122583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[31,122585,122586],{},"正在安装中：",[31,122588,122589],{},[55,122590],{"alt":57,"src":122591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[31,122593,122594],{},"输入accept接受即可",[31,122596,122597],{},[55,122598],{"alt":57,"src":122599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[31,122601,122602],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[31,122604,122605],{},[55,122606],{"alt":57,"src":122607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[31,122609,122610],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[31,122612,122613],{},[55,122614],{"alt":57,"src":122615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[24,122617,122618],{"start":73},[27,122619,122620],{},"配置环境",[31,122622,122623],{},"根据上方确认一下路径，比如我上面红色框起来的为",[190,122625,122627],{"className":120782,"code":122626,"language":120784,"meta":57,"style":57},"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",[196,122628,122629,122645,122660],{"__ignoreMap":57},[199,122630,122631,122634,122637,122640,122643],{"class":201,"line":202},[199,122632,122633],{"class":878},"Please",[199,122635,122636],{"class":898}," make",[199,122638,122639],{"class":898}," sure",[199,122641,122642],{"class":898}," that",[199,122644,5578],{"class":205},[199,122646,122647,122649,122652,122655,122658],{"class":201,"line":36},[199,122648,1958],{"class":878},[199,122650,122651],{"class":898},"   PATH",[199,122653,122654],{"class":898}," includes",[199,122656,122657],{"class":898}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[199,122659,5578],{"class":205},[199,122661,122662,122664,122667,122669,122672,122675,122677,122680,122683,122686,122689,122691,122694,122696],{"class":201,"line":73},[199,122663,1958],{"class":878},[199,122665,122666],{"class":898},"   LD_LIBRARY_PATH",[199,122668,122654],{"class":898},[199,122670,122671],{"class":898}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[199,122673,122674],{"class":898}," or,",[199,122676,8106],{"class":898},[199,122678,122679],{"class":898}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[199,122681,122682],{"class":898}," to",[199,122684,122685],{"class":898}," \u002Fetc\u002Fld.so.conf",[199,122687,122688],{"class":898}," and",[199,122690,30073],{"class":898},[199,122692,122693],{"class":898}," ldconfig",[199,122695,66863],{"class":898},[199,122697,122698],{"class":898}," root\n",[31,122700,122701],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[190,122703,122705],{"className":120782,"code":122704,"language":120784,"meta":57,"style":57},"which nvcc\n",[196,122706,122707],{"__ignoreMap":57},[199,122708,122709,122712],{"class":201,"line":202},[199,122710,122711],{"class":1018},"which",[199,122713,122714],{"class":898}," nvcc\n",[31,122716,122717],{},[55,122718],{"alt":57,"src":122719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[31,122721,122722],{},"所以我进行以下操作：",[190,122724,122726],{"className":120782,"code":122725,"language":120784,"meta":57,"style":57},"sudo vim ~\u002F.bashrc\n",[196,122727,122728],{"__ignoreMap":57},[199,122729,122730,122732,122734],{"class":201,"line":202},[199,122731,27420],{"class":878},[199,122733,120842],{"class":898},[199,122735,122736],{"class":898}," ~\u002F.bashrc\n",[31,122738,122739],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[190,122741,122743],{"className":120782,"code":122742,"language":120784,"meta":57,"style":57},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[196,122744,122745,122757],{"__ignoreMap":57},[199,122746,122747,122749,122752,122754],{"class":201,"line":202},[199,122748,27886],{"class":1086},[199,122750,122751],{"class":205}," PATH",[199,122753,895],{"class":1086},[199,122755,122756],{"class":205},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[199,122758,122759,122761,122764,122766],{"class":201,"line":36},[199,122760,27886],{"class":1086},[199,122762,122763],{"class":205}," LD_LIBRARY_PATH",[199,122765,895],{"class":1086},[199,122767,122768],{"class":205},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[31,122770,122771],{},[55,122772],{"alt":57,"src":122773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[190,122775,122777],{"className":120782,"code":122776,"language":120784,"meta":57,"style":57},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[196,122778,122779,122784,122790,122795],{"__ignoreMap":57},[199,122780,122781],{"class":201,"line":202},[199,122782,122783],{"class":1454},"# 刷新当前终端的环境变量\n",[199,122785,122786,122788],{"class":201,"line":36},[199,122787,103152],{"class":1018},[199,122789,122736],{"class":898},[199,122791,122792],{"class":201,"line":73},[199,122793,122794],{"class":1454},"# 验证CUDA是否安装成功\n",[199,122796,122797,122800],{"class":201,"line":333},[199,122798,122799],{"class":878},"nvcc",[199,122801,122802],{"class":1018}," -V\n",[31,122804,122805],{},"出现下图这种则安装成功。",[31,122807,122808],{},[55,122809],{"alt":57,"src":122810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[19,122812,122814],{"id":122813},"_354-安装cudnn","3.5.4 安装cuDNN",[24,122816,122817],{},[27,122818,122819],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[31,122821,122822,122823,122828],{},"前往 NVIDIA cuDNN 下载页面：",[2867,122824,122827],{"href":122825,"rel":122826},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[2871],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[31,122830,122831],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[31,122833,122834],{},[55,122835],{"alt":57,"src":122836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[31,122838,122839],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[31,122841,122842],{},[55,122843],{"alt":57,"src":122844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[31,122846,122847],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[31,122849,122850],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[31,122852,122853],{},[49,122854,122855],{},"我这里选择所有Linux X86_64最通用的办法：",[31,122857,122858],{},"下载好的：",[31,122860,122861],{},[55,122862],{"alt":57,"src":122863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[24,122865,122866],{"start":36},[27,122867,122868],{},"安装cuDNN",[31,122870,122871],{},"找到该文件所在目录，并打开终端，cd到该目录。",[31,122873,122874],{},[55,122875],{"alt":57,"src":122876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[31,122878,122879],{},"解压文件，并复制到对应位置完成安装",[190,122881,122883],{"className":120782,"code":122882,"language":120784,"meta":57,"style":57},"# 解压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",[196,122884,122885,122890,122901,122906,122913,122918,122934,122948,122953,122964,122973,122977,122993],{"__ignoreMap":57},[199,122886,122887],{"class":201,"line":202},[199,122888,122889],{"class":1454},"# 解压cuDNN文件\n",[199,122891,122892,122895,122898],{"class":201,"line":36},[199,122893,122894],{"class":878},"tar",[199,122896,122897],{"class":1018}," -xvf",[199,122899,122900],{"class":898}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[199,122902,122903],{"class":201,"line":73},[199,122904,122905],{"class":1454},"# cd进文件夹\n",[199,122907,122908,122910],{"class":201,"line":333},[199,122909,103535],{"class":1018},[199,122911,122912],{"class":898}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[199,122914,122915],{"class":201,"line":227},[199,122916,122917],{"class":1454},"# 复制cuDNN文件到CUDA目录\n",[199,122919,122920,122922,122924,122927,122929,122932],{"class":201,"line":238},[199,122921,27420],{"class":878},[199,122923,30704],{"class":898},[199,122925,122926],{"class":898}," include\u002Fcudnn",[199,122928,3537],{"class":1018},[199,122930,122931],{"class":898},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[199,122933,5578],{"class":205},[199,122935,122936,122938,122940,122943,122945],{"class":201,"line":252},[199,122937,27420],{"class":878},[199,122939,30704],{"class":898},[199,122941,122942],{"class":898}," lib\u002Flibcudnn",[199,122944,3537],{"class":1018},[199,122946,122947],{"class":898},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[199,122949,122950],{"class":201,"line":388},[199,122951,122952],{"class":1454},"# 对比一下有没有缺文件\n",[199,122954,122955,122957,122960,122962],{"class":201,"line":415},[199,122956,29604],{"class":878},[199,122958,122959],{"class":898}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[199,122961,3537],{"class":1018},[199,122963,5578],{"class":205},[199,122965,122966,122968,122971],{"class":201,"line":426},[199,122967,29604],{"class":878},[199,122969,122970],{"class":898}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[199,122972,121507],{"class":1018},[199,122974,122975],{"class":201,"line":1015},[199,122976,122556],{"class":1454},[199,122978,122979,122981,122983,122986,122988,122990],{"class":201,"line":1031},[199,122980,27420],{"class":878},[199,122982,27423],{"class":898},[199,122984,122985],{"class":898}," a+r",[199,122987,122959],{"class":898},[199,122989,3537],{"class":1018},[199,122991,122992],{"class":205},"   \n",[199,122994,122995,122997,122999,123001,123003],{"class":201,"line":1043},[199,122996,27420],{"class":878},[199,122998,27423],{"class":898},[199,123000,122985],{"class":898},[199,123002,122970],{"class":898},[199,123004,121507],{"class":1018},[24,123006,123007],{"start":73},[27,123008,123009],{},"检查是否安装成功",[190,123011,123013],{"className":120782,"code":123012,"language":120784,"meta":57,"style":57},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[196,123014,123015,123020],{"__ignoreMap":57},[199,123016,123017],{"class":201,"line":202},[199,123018,123019],{"class":1454},"# 检查cuDNN版本命令\n",[199,123021,123022,123025,123028,123030,123032,123035,123038],{"class":201,"line":36},[199,123023,123024],{"class":878},"cat",[199,123026,123027],{"class":898}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[199,123029,27953],{"class":1086},[199,123031,33079],{"class":878},[199,123033,123034],{"class":898}," CUDNN_MAJOR",[199,123036,123037],{"class":1018}," -A",[199,123039,50563],{"class":1018},[31,123041,123042],{},"出现下图这样的就是安装成功了",[31,123044,123045],{},[55,123046],{"alt":57,"src":123047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[24,123049,123050],{"start":333},[27,123051,123052],{},"软链接(一般不需要)",[190,123054,123056],{"className":120782,"code":123055,"language":120784,"meta":57,"style":57},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[196,123057,123058,123063],{"__ignoreMap":57},[199,123059,123060],{"class":201,"line":202},[199,123061,123062],{"class":1454},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[199,123064,123065,123067],{"class":201,"line":36},[199,123066,27420],{"class":878},[199,123068,123069],{"class":898}," ldconfig\n",[31,123071,123072],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[190,123074,123079],{"className":123075,"code":123076,"language":123077,"meta":123078,"style":57},"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",[196,123080,123081,123086,123091,123096,123101,123106,123111],{"__ignoreMap":57},[199,123082,123083],{"class":201,"line":202},[199,123084,123085],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[199,123087,123088],{"class":201,"line":36},[199,123089,123090],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[199,123092,123093],{"class":201,"line":73},[199,123094,123095],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[199,123097,123098],{"class":201,"line":333},[199,123099,123100],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[199,123102,123103],{"class":201,"line":227},[199,123104,123105],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[199,123107,123108],{"class":201,"line":238},[199,123109,123110],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[199,123112,123113],{"class":201,"line":252},[199,123114,123115],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[31,123117,123118],{},"运行下方的命令",[190,123120,123122],{"className":120782,"code":123121,"language":120784,"meta":57,"style":57},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[196,123123,123124,123129,123136,123141],{"__ignoreMap":57},[199,123125,123126],{"class":201,"line":202},[199,123127,123128],{"class":1454},"# cd进入CUDA路径\n",[199,123130,123131,123133],{"class":201,"line":36},[199,123132,103535],{"class":1018},[199,123134,123135],{"class":898}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[199,123137,123138],{"class":201,"line":73},[199,123139,123140],{"class":1454}," # 查看本路径下的需要软链接的文件名\n",[199,123142,123143],{"class":201,"line":333},[199,123144,123145],{"class":878}," ls\n",[31,123147,123148],{},[55,123149],{"alt":57,"src":123150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[31,123152,123153,123154,21255,123157,21255,123160,123163],{},"如上图，我需要将",[196,123155,123156],{},"libcudnn_xxx_xxxxx.so.8.9.7",[196,123158,123159],{},"libcudnn_xxx_xxxxx.so.8",[196,123161,123162],{},"libcudnn_xxx_xxxxx.so","软链接",[190,123165,123167],{"className":120782,"code":123166,"language":120784,"meta":57,"style":57},"# 创建符号链接。对于每个 .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",[196,123168,123169,123174,123190,123204,123218,123232,123246,123260,123274,123279,123285,123290],{"__ignoreMap":57},[199,123170,123171],{"class":201,"line":202},[199,123172,123173],{"class":1454},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[199,123175,123176,123178,123181,123184,123187],{"class":201,"line":36},[199,123177,27420],{"class":878},[199,123179,123180],{"class":898}," ln",[199,123182,123183],{"class":1018}," -sf",[199,123185,123186],{"class":898}," libcudnn_cnn_train.so.8.9.7",[199,123188,123189],{"class":898}," libcudnn_cnn_train.so.8\n",[199,123191,123192,123194,123196,123198,123201],{"class":201,"line":73},[199,123193,27420],{"class":878},[199,123195,123180],{"class":898},[199,123197,123183],{"class":1018},[199,123199,123200],{"class":898}," libcudnn_adv_infer.so.8.9.7",[199,123202,123203],{"class":898}," libcudnn_adv_infer.so.8\n",[199,123205,123206,123208,123210,123212,123215],{"class":201,"line":333},[199,123207,27420],{"class":878},[199,123209,123180],{"class":898},[199,123211,123183],{"class":1018},[199,123213,123214],{"class":898}," libcudnn_adv_train.so.8.9.7",[199,123216,123217],{"class":898}," libcudnn_adv_train.so.8\n",[199,123219,123220,123222,123224,123226,123229],{"class":201,"line":227},[199,123221,27420],{"class":878},[199,123223,123180],{"class":898},[199,123225,123183],{"class":1018},[199,123227,123228],{"class":898}," libcudnn_cnn_infer.so.8.9.7",[199,123230,123231],{"class":898}," libcudnn_cnn_infer.so.8\n",[199,123233,123234,123236,123238,123240,123243],{"class":201,"line":238},[199,123235,27420],{"class":878},[199,123237,123180],{"class":898},[199,123239,123183],{"class":1018},[199,123241,123242],{"class":898}," libcudnn.so.8.9.7",[199,123244,123245],{"class":898}," libcudnn.so.8\n",[199,123247,123248,123250,123252,123254,123257],{"class":201,"line":252},[199,123249,27420],{"class":878},[199,123251,123180],{"class":898},[199,123253,123183],{"class":1018},[199,123255,123256],{"class":898}," libcudnn_ops_infer.so.8.9.7",[199,123258,123259],{"class":898}," libcudnn_ops_infer.so.8\n",[199,123261,123262,123264,123266,123268,123271],{"class":201,"line":388},[199,123263,27420],{"class":878},[199,123265,123180],{"class":898},[199,123267,123183],{"class":1018},[199,123269,123270],{"class":898}," libcudnn_ops_train.so.8.9.7",[199,123272,123273],{"class":898}," libcudnn_ops_train.so.8\n",[199,123275,123276],{"class":201,"line":415},[199,123277,123278],{"class":1454},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[199,123280,123281,123283],{"class":201,"line":426},[199,123282,27420],{"class":878},[199,123284,123069],{"class":898},[199,123286,123287],{"class":201,"line":1015},[199,123288,123289],{"class":1454},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[199,123291,123292,123294,123297,123300,123302,123305],{"class":201,"line":1031},[199,123293,29604],{"class":878},[199,123295,123296],{"class":1018}," -l",[199,123298,123299],{"class":898}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[199,123301,3537],{"class":1018},[199,123303,123304],{"class":898},".so",[199,123306,121507],{"class":1018},[19,123308,123310],{"id":123309},"_355-常见问题","3.5.5 常见问题",[24,123312,123313],{},[27,123314,123315],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[190,123317,123319],{"className":120782,"code":123318,"language":120784,"meta":57,"style":57},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[196,123320,123321],{"__ignoreMap":57},[199,123322,123323,123325,123327],{"class":201,"line":202},[199,123324,27420],{"class":878},[199,123326,120842],{"class":898},[199,123328,123329],{"class":898}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[31,123331,123332],{},"blacklist-nouveau.conf文件内容如下：",[190,123334,123336],{"className":120782,"code":123335,"language":120784,"meta":57,"style":57},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[196,123337,123338,123346,123353,123365,123375],{"__ignoreMap":57},[199,123339,123340,123343],{"class":201,"line":202},[199,123341,123342],{"class":878},"blacklist",[199,123344,123345],{"class":898}," nouveau\n",[199,123347,123348,123350],{"class":201,"line":36},[199,123349,123342],{"class":878},[199,123351,123352],{"class":898}," lbm-nouveau\n",[199,123354,123355,123357,123360,123363],{"class":201,"line":73},[199,123356,118189],{"class":878},[199,123358,123359],{"class":898}," nouveau",[199,123361,123362],{"class":898}," modeset=",[199,123364,5989],{"class":1018},[199,123366,123367,123370,123372],{"class":201,"line":333},[199,123368,123369],{"class":1018},"alias",[199,123371,123359],{"class":898},[199,123373,123374],{"class":898}," off\n",[199,123376,123377,123379,123382],{"class":201,"line":227},[199,123378,123369],{"class":1018},[199,123380,123381],{"class":898}," lbm-nouveau",[199,123383,123374],{"class":898},[31,123385,123386],{},"接着运行下方命令",[190,123388,123390],{"className":120782,"code":123389,"language":120784,"meta":57,"style":57},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[196,123391,123392,123402,123407],{"__ignoreMap":57},[199,123393,123394,123396,123399],{"class":201,"line":202},[199,123395,27420],{"class":878},[199,123397,123398],{"class":898}," update-initramfs",[199,123400,123401],{"class":1018}," -u\n",[199,123403,123404],{"class":201,"line":36},[199,123405,123406],{"class":878},"或者\n",[199,123408,123409,123411,123414],{"class":201,"line":73},[199,123410,27420],{"class":878},[199,123412,123413],{"class":898}," dracut",[199,123415,123416],{"class":1018}," --force\n",[31,123418,123419],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[190,123421,123423],{"className":120782,"code":123422,"language":120784,"meta":57,"style":57},"lsmod | grep nouveau\n",[196,123424,123425],{"__ignoreMap":57},[199,123426,123427,123430,123432,123434],{"class":201,"line":202},[199,123428,123429],{"class":878},"lsmod",[199,123431,27953],{"class":1086},[199,123433,33079],{"class":878},[199,123435,123345],{"class":898},[24,123437,123438],{"start":36},[27,123439,123440],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[190,123442,123444],{"className":120782,"code":123443,"language":120784,"meta":57,"style":57},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[196,123445,123446],{"__ignoreMap":57},[199,123447,123448,123450,123452],{"class":201,"line":202},[199,123449,27420],{"class":878},[199,123451,120842],{"class":898},[199,123453,123454],{"class":898}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[31,123456,123457],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[190,123459,123461],{"className":120782,"code":123460,"language":120784,"meta":57,"style":57},"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",[196,123462,123463,123471,123479,123487,123494,123502,123512,123520],{"__ignoreMap":57},[199,123464,123465,123468],{"class":201,"line":202},[199,123466,123467],{"class":878},"Section",[199,123469,123470],{"class":898}," \"OutputClass\"\n",[199,123472,123473,123476],{"class":201,"line":36},[199,123474,123475],{"class":878},"   Identifier",[199,123477,123478],{"class":898}," \"nvidia\"\n",[199,123480,123481,123484],{"class":201,"line":73},[199,123482,123483],{"class":878},"   MatchDriver",[199,123485,123486],{"class":898}," \"nvidia-drm\"\n",[199,123488,123489,123492],{"class":201,"line":333},[199,123490,123491],{"class":878},"   Driver",[199,123493,123478],{"class":898},[199,123495,123496,123499],{"class":201,"line":227},[199,123497,123498],{"class":878},"   Option",[199,123500,123501],{"class":898}," \"AllowEmptyInitialConfiguration\"\n",[199,123503,123504,123506,123509],{"class":201,"line":238},[199,123505,123498],{"class":878},[199,123507,123508],{"class":898}," \"PrimaryGPU\"",[199,123510,123511],{"class":898}," \"yes\"\n",[199,123513,123514,123517],{"class":201,"line":252},[199,123515,123516],{"class":878},"   ModulePath",[199,123518,123519],{"class":898}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[199,123521,123522],{"class":201,"line":388},[199,123523,123524],{"class":878},"EndSection\n",[24,123526,123527],{"start":73},[27,123528,123529],{},"安装N卡驱动提示错误",[190,123531,123533],{"className":123075,"code":123532,"language":123077,"meta":123078,"style":57},"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",[196,123534,123535],{"__ignoreMap":57},[199,123536,123537],{"class":201,"line":202},[199,123538,123532],{},[24,123540,123541],{},[27,123542,123543],{},"检查当前运行的内核版本：",[31,123545,123546],{},"运行以下命令以查看你当前正在使用的内核版本：",[190,123548,123550],{"className":119555,"code":123549,"language":119557,"meta":57,"style":57},"uname -r\n",[196,123551,123552],{"__ignoreMap":57},[199,123553,123554,123556],{"class":201,"line":202},[199,123555,72463],{"class":878},[199,123557,123558],{"class":1018}," -r\n",[24,123560,123561],{"start":36},[27,123562,123563],{},"安装内核开发文件：",[31,123565,123566,123567,123570],{},"确保你已经安装了与当前内核版本相匹配的 ",[196,123568,123569],{},"kernel-devel"," 包。运行以下命令来安装：",[190,123572,123574],{"className":119555,"code":123573,"language":119557,"meta":57,"style":57},"sudo dnf install kernel-devel-$(uname -r)\n",[196,123575,123576],{"__ignoreMap":57},[199,123577,123578,123580,123582,123584,123587,123589,123591,123593],{"class":201,"line":202},[199,123579,27420],{"class":878},[199,123581,29158],{"class":898},[199,123583,26678],{"class":898},[199,123585,123586],{"class":898}," kernel-devel-",[199,123588,27943],{"class":205},[199,123590,72463],{"class":878},[199,123592,121898],{"class":1018},[199,123594,1594],{"class":205},[31,123596,123597],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[24,123599,123600],{"start":73},[27,123601,123602],{},"安装内核源代码（如果需要）：",[31,123604,123605],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[190,123607,123609],{"className":119555,"code":123608,"language":119557,"meta":57,"style":57},"sudo dnf install kernel-headers kernel-source\n",[196,123610,123611],{"__ignoreMap":57},[199,123612,123613,123615,123617,123619,123622],{"class":201,"line":202},[199,123614,27420],{"class":878},[199,123616,29158],{"class":898},[199,123618,26678],{"class":898},[199,123620,123621],{"class":898}," kernel-headers",[199,123623,123624],{"class":898}," kernel-source\n",[24,123626,123627],{"start":333},[27,123628,123629],{},"检查安装：",[31,123631,123632,123633,123636],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[196,123634,123635],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[190,123638,123640],{"className":119555,"code":123639,"language":119557,"meta":57,"style":57},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[196,123641,123642],{"__ignoreMap":57},[199,123643,123644,123646],{"class":201,"line":202},[199,123645,29604],{"class":878},[199,123647,123648],{"class":898}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[31,123650,123651,123652,123655],{},"如果仍然遇到问题，可以通过 ",[196,123653,123654],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1002,123657,123658],{},"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":57,"searchDepth":36,"depth":36,"links":123660},[123661,123665,123675,123679,123680],{"id":120758,"depth":36,"text":120759,"children":123662},[123663,123664],{"id":120768,"depth":73,"text":120769},{"id":120778,"depth":73,"text":120779},{"id":120978,"depth":36,"text":120979,"children":123666},[123667,123668,123669,123670,123671,123672,123673,123674],{"id":120982,"depth":73,"text":120983},{"id":121052,"depth":73,"text":121053},{"id":121141,"depth":73,"text":121142},{"id":121386,"depth":73,"text":121387},{"id":121456,"depth":73,"text":121457},{"id":121523,"depth":73,"text":121524},{"id":121558,"depth":73,"text":121559},{"id":121613,"depth":73,"text":121614},{"id":121664,"depth":36,"text":121665,"children":123676},[123677,123678],{"id":121668,"depth":73,"text":121669},{"id":121748,"depth":73,"text":121749},{"id":121934,"depth":36,"text":121935},{"id":122107,"depth":36,"text":122108,"children":123681},[123682,123683,123684,123685,123686],{"id":122111,"depth":73,"text":122112},{"id":122152,"depth":73,"text":122153},{"id":122439,"depth":73,"text":122440},{"id":122813,"depth":73,"text":122814},{"id":123309,"depth":73,"text":123310},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120750,"description":3023},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123693,"title":123694,"body":123695,"description":3023,"extension":3024,"meta":124035,"navigation":906,"path":124036,"seo":124037,"stem":124038,"__hash__":124039},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123696,"toc":124033},[123697,123700,123705,123708,123954,123959,123962,123998,124001,124030],[10,123698,123694],{"id":123699},"_4-命令教程长期积累",[24,123701,123702],{},[27,123703,123704],{},"大多数命令",[31,123706,123707],{},"常用 Linux 命令速查：",[190,123709,123711],{"className":119555,"code":123710,"language":119557,"meta":57,"style":57},"# 文件与目录\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",[196,123712,123713,123718,123725,123732,123740,123747,123754,123762,123770,123777,123784,123792,123796,123801,123808,123816,123823,123827,123832,123839,123847,123855,123863,123871,123875,123880,123888,123895,123902,123910,123918,123922,123927,123936,123945],{"__ignoreMap":57},[199,123714,123715],{"class":201,"line":202},[199,123716,123717],{"class":1454},"# 文件与目录\n",[199,123719,123720,123722],{"class":201,"line":36},[199,123721,29604],{"class":878},[199,123723,123724],{"class":1454},"        # 列出目录内容\n",[199,123726,123727,123729],{"class":201,"line":73},[199,123728,103535],{"class":1018},[199,123730,123731],{"class":1454},"        # 切换目录\n",[199,123733,123734,123737],{"class":201,"line":333},[199,123735,123736],{"class":1018},"pwd",[199,123738,123739],{"class":1454},"       # 显示当前路径\n",[199,123741,123742,123744],{"class":201,"line":227},[199,123743,103525],{"class":878},[199,123745,123746],{"class":1454},"     # 创建目录\n",[199,123748,123749,123751],{"class":201,"line":238},[199,123750,28165],{"class":878},[199,123752,123753],{"class":1454},"        # 删除文件或目录\n",[199,123755,123756,123759],{"class":201,"line":252},[199,123757,123758],{"class":878},"cp",[199,123760,123761],{"class":1454},"        # 复制文件或目录\n",[199,123763,123764,123767],{"class":201,"line":388},[199,123765,123766],{"class":878},"mv",[199,123768,123769],{"class":1454},"        # 移动\u002F重命名文件或目录\n",[199,123771,123772,123774],{"class":201,"line":415},[199,123773,103542],{"class":878},[199,123775,123776],{"class":1454},"     # 创建空文件\n",[199,123778,123779,123781],{"class":201,"line":426},[199,123780,123024],{"class":878},[199,123782,123783],{"class":1454},"       # 查看文件内容\n",[199,123785,123786,123789],{"class":201,"line":1015},[199,123787,123788],{"class":878},"head\u002Ftail",[199,123790,123791],{"class":1454}," # 查看文件头部\u002F尾部\n",[199,123793,123794],{"class":201,"line":1031},[199,123795,907],{"emptyLinePlaceholder":906},[199,123797,123798],{"class":201,"line":1043},[199,123799,123800],{"class":1454},"# 权限管理\n",[199,123802,123803,123805],{"class":201,"line":1049},[199,123804,27455],{"class":878},[199,123806,123807],{"class":1454},"     # 修改文件权限\n",[199,123809,123810,123813],{"class":201,"line":1054},[199,123811,123812],{"class":878},"chown",[199,123814,123815],{"class":1454},"     # 修改文件所有者\n",[199,123817,123818,123820],{"class":201,"line":1062},[199,123819,27420],{"class":878},[199,123821,123822],{"class":1454},"      # 以管理员身份执行\n",[199,123824,123825],{"class":201,"line":1075},[199,123826,907],{"emptyLinePlaceholder":906},[199,123828,123829],{"class":201,"line":1092},[199,123830,123831],{"class":1454},"# 系统信息\n",[199,123833,123834,123836],{"class":201,"line":1107},[199,123835,72463],{"class":878},[199,123837,123838],{"class":1454},"     # 系统信息\n",[199,123840,123841,123844],{"class":201,"line":1128},[199,123842,123843],{"class":878},"df",[199,123845,123846],{"class":1454},"        # 磁盘使用情况\n",[199,123848,123849,123852],{"class":201,"line":1146},[199,123850,123851],{"class":878},"free",[199,123853,123854],{"class":1454},"      # 内存使用情况\n",[199,123856,123857,123860],{"class":201,"line":1163},[199,123858,123859],{"class":878},"top\u002Fhtop",[199,123861,123862],{"class":1454},"  # 进程监控\n",[199,123864,123865,123868],{"class":201,"line":1176},[199,123866,123867],{"class":878},"ps",[199,123869,123870],{"class":1454},"        # 查看进程\n",[199,123872,123873],{"class":201,"line":1189},[199,123874,907],{"emptyLinePlaceholder":906},[199,123876,123877],{"class":201,"line":1202},[199,123878,123879],{"class":1454},"# 网络\n",[199,123881,123882,123885],{"class":201,"line":1207},[199,123883,123884],{"class":878},"ping",[199,123886,123887],{"class":1454},"      # 测试网络连通性\n",[199,123889,123890,123892],{"class":201,"line":1212},[199,123891,29692],{"class":878},[199,123893,123894],{"class":1454},"      # 发送 HTTP 请求\n",[199,123896,123897,123899],{"class":201,"line":1225},[199,123898,122548],{"class":878},[199,123900,123901],{"class":1454},"      # 下载文件\n",[199,123903,123904,123907],{"class":201,"line":1236},[199,123905,123906],{"class":878},"ssh",[199,123908,123909],{"class":1454},"       # 远程登录\n",[199,123911,123912,123915],{"class":201,"line":1249},[199,123913,123914],{"class":878},"scp",[199,123916,123917],{"class":1454},"       # 远程文件传输\n",[199,123919,123920],{"class":201,"line":1262},[199,123921,907],{"emptyLinePlaceholder":906},[199,123923,123924],{"class":201,"line":1275},[199,123925,123926],{"class":1454},"# 包管理（Debian\u002FUbuntu）\n",[199,123928,123929,123931,123933],{"class":201,"line":1287},[199,123930,119627],{"class":878},[199,123932,119606],{"class":898},[199,123934,123935],{"class":1454},"   # 更新软件源\n",[199,123937,123938,123940,123942],{"class":201,"line":1292},[199,123939,119627],{"class":878},[199,123941,26678],{"class":898},[199,123943,123944],{"class":1454},"  # 安装软件包\n",[199,123946,123947,123949,123951],{"class":201,"line":1297},[199,123948,119627],{"class":878},[199,123950,28922],{"class":898},[199,123952,123953],{"class":1454},"   # 卸载软件包\n",[24,123955,123956],{"start":36},[27,123957,123958],{},"KDE Dolphin 以root打开",[31,123960,123961],{},"kde5",[190,123963,123965],{"className":119555,"code":123964,"language":119557,"meta":57,"style":57},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[196,123966,123967],{"__ignoreMap":57},[199,123968,123969,123972,123975,123978,123980,123982,123985,123988,123990,123993,123995],{"class":201,"line":202},[199,123970,123971],{"class":878},"pkexec",[199,123973,123974],{"class":898}," env",[199,123976,123977],{"class":898}," DISPLAY=",[199,123979,30986],{"class":205},[199,123981,31044],{"class":898},[199,123983,123984],{"class":205},"$XAUTHORITY ",[199,123986,123987],{"class":898},"KDE_SESSION_VERSION=",[199,123989,1909],{"class":1018},[199,123991,123992],{"class":898}," KDE_FULL_SESSION=",[199,123994,4302],{"class":1018},[199,123996,123997],{"class":898}," dolphin\n",[31,123999,124000],{},"kde6",[190,124002,124004],{"className":119555,"code":124003,"language":119557,"meta":57,"style":57},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[196,124005,124006],{"__ignoreMap":57},[199,124007,124008,124010,124012,124014,124016,124018,124020,124022,124024,124026,124028],{"class":201,"line":202},[199,124009,123971],{"class":878},[199,124011,123974],{"class":898},[199,124013,123977],{"class":898},[199,124015,30986],{"class":205},[199,124017,31044],{"class":898},[199,124019,123984],{"class":205},[199,124021,123987],{"class":898},[199,124023,3428],{"class":1018},[199,124025,123992],{"class":898},[199,124027,4302],{"class":1018},[199,124029,123997],{"class":898},[1002,124031,124032],{},"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":57,"searchDepth":36,"depth":36,"links":124034},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123694,"description":3023},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124041,"title":124042,"body":124043,"description":3023,"extension":3024,"meta":124057,"navigation":906,"path":124058,"seo":124059,"stem":124060,"__hash__":124061},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124044,"toc":124055},[124045,124048],[10,124046,124042],{"id":124047},"_5-各种环境配置",[31,124049,124050],{},[2867,124051,124054],{"href":124052,"rel":124053},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[2871],"电控组环境搭建大全",{"title":57,"searchDepth":36,"depth":36,"links":124056},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124042,"description":3023},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124063,"title":124064,"body":124065,"description":3023,"extension":3024,"meta":124413,"navigation":906,"path":124414,"seo":124415,"stem":124416,"__hash__":124417},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124066,"toc":124405},[124067,124070,124074,124078,124082,124087,124094,124098,124391,124395,124402],[10,124068,124064],{"id":124069},"_6-拓展功能",[14,124071,124073],{"id":124072},"_61-wine","6.1 Wine",[14,124075,124077],{"id":124076},"_62-android","6.2 Android",[19,124079,124081],{"id":124080},"_621-i卡a卡","6.2.1 I卡、A卡",[24,124083,124084],{},[27,124085,124086],{},"Wayland-Waydroid(体验超级好)",[31,124088,124089,124090],{},"Waydroid 官网与安装指南：",[2867,124091,124092],{"href":124092,"rel":124093},"https:\u002F\u002Fwaydro.id\u002F",[2871],[19,124095,124097],{"id":124096},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[24,124099,124100],{},[27,124101,124102,124103,124105,124106,124110,124112,124115,124120,124317],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55975,124104],{},"BlissOS 官网下载：",[2867,124107,124108],{"href":124108,"rel":124109},"https:\u002F\u002Fblissos.org\u002F",[2871],[55975,124111],{},[55,124113],{"alt":57,"src":124114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[24,124116,124117],{"start":73},[27,124118,124119],{},"比较推荐的配置",[190,124121,124123],{"className":119555,"code":124122,"language":119557,"meta":57,"style":57},"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",[196,124124,124125,124132,124142,124152,124162,124174,124184,124191,124201,124210,124219,124229,124239,124248,124258,124268,124280,124290,124299,124309],{"__ignoreMap":57},[199,124126,124127,124130],{"class":201,"line":202},[199,124128,124129],{"class":878},"qemu-system-x86_64",[199,124131,27522],{"class":1018},[199,124133,124134,124137,124140],{"class":201,"line":36},[199,124135,124136],{"class":1018},"        -M",[199,124138,124139],{"class":898}," q35,vmport=off",[199,124141,27522],{"class":1018},[199,124143,124144,124147,124150],{"class":201,"line":73},[199,124145,124146],{"class":1018},"        -accel",[199,124148,124149],{"class":898}," kvm",[199,124151,27522],{"class":1018},[199,124153,124154,124157,124160],{"class":201,"line":333},[199,124155,124156],{"class":1018},"        -cpu",[199,124158,124159],{"class":898}," qemu64,+sse3,+sse4.2",[199,124161,27522],{"class":1018},[199,124163,124164,124167,124170,124172],{"class":201,"line":227},[199,124165,124166],{"class":1018},"        -smp",[199,124168,124169],{"class":898}," 8,cores=",[199,124171,1915],{"class":1018},[199,124173,27522],{"class":1018},[199,124175,124176,124179,124182],{"class":201,"line":238},[199,124177,124178],{"class":1018},"        -m",[199,124180,124181],{"class":898}," 6G",[199,124183,27522],{"class":1018},[199,124185,124186,124189],{"class":201,"line":252},[199,124187,124188],{"class":1018},"        -usb",[199,124190,27522],{"class":1018},[199,124192,124193,124196,124199],{"class":201,"line":388},[199,124194,124195],{"class":1018},"        -device",[199,124197,124198],{"class":898}," virtio-tablet",[199,124200,27522],{"class":1018},[199,124202,124203,124205,124208],{"class":201,"line":415},[199,124204,124195],{"class":1018},[199,124206,124207],{"class":898}," virtio-keyboard",[199,124209,27522],{"class":1018},[199,124211,124212,124214,124217],{"class":201,"line":426},[199,124213,124195],{"class":1018},[199,124215,124216],{"class":898}," usb-tablet",[199,124218,27522],{"class":1018},[199,124220,124221,124224,124227],{"class":201,"line":1015},[199,124222,124223],{"class":1018},"        -bios",[199,124225,124226],{"class":898}," OVMF-pure-efi64.fd",[199,124228,27522],{"class":1018},[199,124230,124231,124234,124237],{"class":201,"line":1031},[199,124232,124233],{"class":1018},"        -net",[199,124235,124236],{"class":898}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[199,124238,27522],{"class":1018},[199,124240,124241,124243,124246],{"class":201,"line":1043},[199,124242,124233],{"class":1018},[199,124244,124245],{"class":898}," nic,model=virtio",[199,124247,27522],{"class":1018},[199,124249,124250,124253,124256],{"class":201,"line":1049},[199,124251,124252],{"class":1018},"        -audio",[199,124254,124255],{"class":898}," sdl,model=hda",[199,124257,27522],{"class":1018},[199,124259,124260,124263,124266],{"class":201,"line":1054},[199,124261,124262],{"class":1018},"        -display",[199,124264,124265],{"class":898}," sdl,gl=on,show-cursor=on",[199,124267,27522],{"class":1018},[199,124269,124270,124272,124275,124278],{"class":201,"line":1062},[199,124271,124195],{"class":1018},[199,124273,124274],{"class":898}," virtio-vga-gl,xres=1920,yres=",[199,124276,124277],{"class":1018},"1080",[199,124279,27522],{"class":1018},[199,124281,124282,124285,124288],{"class":201,"line":1075},[199,124283,124284],{"class":1018},"        -drive",[199,124286,124287],{"class":898}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[199,124289,27522],{"class":1018},[199,124291,124292,124294,124297],{"class":201,"line":1092},[199,124293,124284],{"class":1018},[199,124295,124296],{"class":898}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[199,124298,27522],{"class":1018},[199,124300,124301,124304,124307],{"class":201,"line":1107},[199,124302,124303],{"class":1018},"        -monitor",[199,124305,124306],{"class":898}," stdio",[199,124308,27522],{"class":1018},[199,124310,124311,124314],{"class":201,"line":1128},[199,124312,124313],{"class":1018},"        -serial",[199,124315,124316],{"class":898}," none\n",[24,124318,124319],{"start":227},[27,124320,124321,124322],{},"常用操作：",[24,124323,124324,124327,124383],{},[27,124325,124326],{},"全屏：Ctrl+Alt+F",[27,124328,124329,124330,124335],{},"adb调试",[24,124331,124332],{},[27,124333,124334],{},"使Linux与Android用ADB连接。",[190,124336,124338],{"className":119555,"code":124337,"language":119557,"meta":57,"style":57},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[196,124339,124340,124345,124356,124361,124373,124378],{"__ignoreMap":57},[199,124341,124342],{"class":201,"line":202},[199,124343,124344],{"class":1454},"# 连接安卓\n",[199,124346,124347,124350,124353],{"class":201,"line":36},[199,124348,124349],{"class":878},"adb",[199,124351,124352],{"class":898}," connect",[199,124354,124355],{"class":1018}," 127.0.0.1\n",[199,124357,124358],{"class":201,"line":73},[199,124359,124360],{"class":1454},"# 打开shell\n",[199,124362,124363,124365,124367,124370],{"class":201,"line":333},[199,124364,124349],{"class":878},[199,124366,29726],{"class":1018},[199,124368,124369],{"class":898}," 127.0.0.1:5555",[199,124371,124372],{"class":898}," shell\n",[199,124374,124375],{"class":201,"line":227},[199,124376,124377],{"class":1454},"# 使用root权限\n",[199,124379,124380],{"class":201,"line":238},[199,124381,124382],{"class":878},"su\n",[27,124384,124385,124386],{},"中文输入法",[24,124387,124388],{},[27,124389,124390],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124392,124394],{"id":124393},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[31,124396,124397,124398],{},"rEFInd 官网与文档：",[2867,124399,124400],{"href":124400,"rel":124401},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[2871],[1002,124403,124404],{},"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":57,"searchDepth":36,"depth":36,"links":124406},[124407,124408,124412],{"id":124072,"depth":36,"text":124073},{"id":124076,"depth":36,"text":124077,"children":124409},[124410,124411],{"id":124080,"depth":73,"text":124081},{"id":124096,"depth":73,"text":124097},{"id":124393,"depth":36,"text":124394},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124064,"description":3023},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124419,"title":124420,"body":124421,"description":3023,"extension":3024,"meta":127720,"navigation":906,"path":127721,"seo":127722,"stem":127723,"__hash__":127724},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124422,"toc":127694},[124423,124426,124430,124433,124440,124690,124693,124765,124768,124772,124776,124781,124784,124787,124790,124795,124798,124801,124804,124809,124812,124817,124820,124823,124828,124831,124836,124839,124843,124847,124850,124855,124858,124872,124875,124878,124887,124890,124899,124902,124905,124914,124917,124926,124929,124932,124941,124944,124947,124962,124965,124968,124977,124982,124985,124988,124997,125000,125009,125012,125021,125024,125033,125038,125041,125049,125054,125057,125066,125069,125077,125082,125085,125094,125097,125100,125104,125107,125112,125115,125120,125134,125139,125144,125155,125160,125166,125171,125186,125191,125194,125199,125204,125209,125217,125222,125229,125234,125245,125250,125253,125257,125260,125263,125268,125271,125290,125295,125298,125307,125312,125315,125337,125340,125370,125373,125378,125381,125395,125400,125419,125422,125425,125430,125442,125447,125452,125455,125460,125463,125478,125481,125486,125491,125495,125500,125540,125543,125547,125553,125559,125564,125567,125574,125579,125586,125589,125592,125599,125613,125616,125676,125679,125693,125705,125708,125711,125714,125778,125781,125784,125787,125807,125810,125815,125822,125826,125829,125833,125838,125843,125847,125850,125853,125895,125900,125903,125925,125940,125942,125947,125959,126019,126021,126023,126077,126079,126081,126087,126092,126095,126100,126104,126107,126169,126174,126177,126179,126183,126195,126277,126279,126281,126335,126341,126343,126347,126352,126354,126359,126363,126383,126418,126422,126425,126428,126431,126438,126441,126453,126456,126471,126474,126493,126541,126544,126561,126564,126578,126583,126586,126595,126610,126622,126660,126665,126674,126679,126684,126710,126719,126723,126727,126732,126735,126739,126743,126748,126751,126756,126759,126764,126767,126772,126775,126779,126784,126787,126792,126795,126799,126804,126807,126812,126815,126820,126823,126827,126832,126835,126840,126843,126848,126851,126855,126860,126863,126868,126871,126876,126879,126884,126887,126892,126895,126900,126903,126907,126912,126915,126920,126927,126931,126936,126939,126944,126947,126951,126956,126959,126962,126965,126968,126971,126975,126978,126988,126993,126998,127020,127025,127030,127037,127041,127046,127049,127052,127057,127060,127063,127066,127069,127072,127075,127078,127081,127084,127087,127090,127093,127098,127103,127108,127113,127118,127123,127128,127131,127135,127138,127142,127147,127152,127157,127162,127166,127172,127180,127185,127188,127193,127208,127211,127216,127250,127265,127268,127323,127349,127361,127364,127373,127376,127391,127396,127399,127405,127410,127413,127418,127421,127426,127431,127438,127441,127456,127459,127494,127499,127507,127545,127548,127551,127556,127559,127564,127575,127609,127614,127617,127626,127631,127637,127640,127645,127654,127659,127662,127665,127670,127678,127681,127686,127691],[10,124424,124420],{"id":124425},"_7-其他操作",[14,124427,124429],{"id":124428},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[31,124431,124432],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[31,124434,124435,124436,124439],{},"进入工控机的硬盘目录，进入",[196,124437,124438],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[190,124441,124445],{"className":124442,"code":124443,"language":124444,"meta":57,"style":57},"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",[196,124446,124447,124455,124466,124473,124480,124492,124499,124511,124522,124533,124540,124547,124554,124566,124578,124585,124597,124609,124616,124628,124640,124652,124663,124670,124681],{"__ignoreMap":57},[199,124448,124449,124452],{"class":201,"line":202},[199,124450,124451],{"class":874},"network",[199,124453,124454],{"class":205},": \n",[199,124456,124457,124460,124462,124464],{"class":201,"line":36},[199,124458,124459],{"class":874},"  version",[199,124461,1022],{"class":205},[199,124463,1925],{"class":1018},[199,124465,5578],{"class":205},[199,124467,124468,124471],{"class":201,"line":73},[199,124469,124470],{"class":874},"  wifis",[199,124472,124454],{"class":205},[199,124474,124475,124478],{"class":201,"line":333},[199,124476,124477],{"class":874},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[199,124479,124454],{"class":205},[199,124481,124482,124485,124487,124490],{"class":201,"line":227},[199,124483,124484],{"class":874},"      renderer",[199,124486,1022],{"class":205},[199,124488,124489],{"class":898},"NetworkManager",[199,124491,5578],{"class":205},[199,124493,124494,124497],{"class":201,"line":238},[199,124495,124496],{"class":874},"      match",[199,124498,124454],{"class":205},[199,124500,124501,124504,124506,124509],{"class":201,"line":252},[199,124502,124503],{"class":874},"        name",[199,124505,1022],{"class":205},[199,124507,124508],{"class":898},"\"wlan0\"",[199,124510,5578],{"class":205},[199,124512,124513,124516,124518,124520],{"class":201,"line":388},[199,124514,124515],{"class":874},"      dhcp4",[199,124517,1022],{"class":205},[199,124519,4302],{"class":1018},[199,124521,5578],{"class":205},[199,124523,124524,124527,124529,124531],{"class":201,"line":415},[199,124525,124526],{"class":874},"      dhcp6",[199,124528,1022],{"class":205},[199,124530,4302],{"class":1018},[199,124532,5578],{"class":205},[199,124534,124535,124538],{"class":201,"line":426},[199,124536,124537],{"class":874},"      access-points",[199,124539,124454],{"class":205},[199,124541,124542,124545],{"class":201,"line":1015},[199,124543,124544],{"class":898},"        \"EMIS_Vinci_Robocon_5G\"",[199,124546,124454],{"class":205},[199,124548,124549,124552],{"class":201,"line":1031},[199,124550,124551],{"class":874},"          auth",[199,124553,124454],{"class":205},[199,124555,124556,124559,124561,124564],{"class":201,"line":1043},[199,124557,124558],{"class":874},"            key-management",[199,124560,1022],{"class":205},[199,124562,124563],{"class":898},"\"psk\"",[199,124565,5578],{"class":205},[199,124567,124568,124571,124573,124576],{"class":201,"line":1049},[199,124569,124570],{"class":874},"            password",[199,124572,1022],{"class":205},[199,124574,124575],{"class":898},"\"vinci666\"",[199,124577,5578],{"class":205},[199,124579,124580,124583],{"class":201,"line":1054},[199,124581,124582],{"class":874},"          networkmanager",[199,124584,124454],{"class":205},[199,124586,124587,124590,124592,124595],{"class":201,"line":1062},[199,124588,124589],{"class":874},"            uuid",[199,124591,1022],{"class":205},[199,124593,124594],{"class":898},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[199,124596,5578],{"class":205},[199,124598,124599,124602,124604,124607],{"class":201,"line":1075},[199,124600,124601],{"class":874},"            name",[199,124603,1022],{"class":205},[199,124605,124606],{"class":898},"\"EMIS_Vinci_Robocon_5G\"",[199,124608,5578],{"class":205},[199,124610,124611,124614],{"class":201,"line":1092},[199,124612,124613],{"class":874},"            passthrough",[199,124615,124454],{"class":205},[199,124617,124618,124621,124623,124626],{"class":201,"line":1107},[199,124619,124620],{"class":874},"              wifi-security.auth-alg",[199,124622,1022],{"class":205},[199,124624,124625],{"class":898},"\"open\"",[199,124627,5578],{"class":205},[199,124629,124630,124633,124635,124638],{"class":201,"line":1128},[199,124631,124632],{"class":874},"              ipv6.addr-gen-mode",[199,124634,1022],{"class":205},[199,124636,124637],{"class":898},"\"default\"",[199,124639,5578],{"class":205},[199,124641,124642,124645,124647,124650],{"class":201,"line":1146},[199,124643,124644],{"class":874},"              ipv6.ip6-privacy",[199,124646,1022],{"class":205},[199,124648,124649],{"class":898},"\"-1\"",[199,124651,5578],{"class":205},[199,124653,124654,124657,124659,124661],{"class":201,"line":1163},[199,124655,124656],{"class":874},"              proxy._",[199,124658,1022],{"class":205},[199,124660,10549],{"class":898},[199,124662,5578],{"class":205},[199,124664,124665,124668],{"class":201,"line":1176},[199,124666,124667],{"class":874},"      networkmanager",[199,124669,124454],{"class":205},[199,124671,124672,124675,124677,124679],{"class":201,"line":1189},[199,124673,124674],{"class":874},"        uuid",[199,124676,1022],{"class":205},[199,124678,124594],{"class":898},[199,124680,5578],{"class":205},[199,124682,124683,124685,124687],{"class":201,"line":1202},[199,124684,124503],{"class":874},[199,124686,1022],{"class":205},[199,124688,124689],{"class":898},"\"EMIS_Vinci_Robocon_5G\"\n",[31,124691,124692],{},"将其改为新wifi的名和密码：",[190,124694,124696],{"className":124442,"code":124695,"language":124444,"meta":57,"style":57},"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",[196,124697,124698,124704,124713,124719,124726,124735,124743,124749,124755],{"__ignoreMap":57},[199,124699,124700,124702],{"class":201,"line":202},[199,124701,124451],{"class":874},[199,124703,6640],{"class":205},[199,124705,124706,124708,124710],{"class":201,"line":36},[199,124707,124459],{"class":874},[199,124709,1022],{"class":205},[199,124711,124712],{"class":1018},"2\n",[199,124714,124715,124717],{"class":201,"line":73},[199,124716,124470],{"class":874},[199,124718,6640],{"class":205},[199,124720,124721,124724],{"class":201,"line":333},[199,124722,124723],{"class":874},"    wlan0",[199,124725,6640],{"class":205},[199,124727,124728,124730,124732],{"class":201,"line":227},[199,124729,124515],{"class":874},[199,124731,1022],{"class":205},[199,124733,124734],{"class":1018},"true\n",[199,124736,124737,124739,124741],{"class":201,"line":238},[199,124738,124526],{"class":874},[199,124740,1022],{"class":205},[199,124742,124734],{"class":1018},[199,124744,124745,124747],{"class":201,"line":252},[199,124746,124537],{"class":874},[199,124748,6640],{"class":205},[199,124750,124751,124753],{"class":201,"line":388},[199,124752,124544],{"class":898},[199,124754,6640],{"class":205},[199,124756,124757,124760,124762],{"class":201,"line":415},[199,124758,124759],{"class":874},"          password",[199,124761,1022],{"class":205},[199,124763,124764],{"class":898},"\"vinci666\"\n",[31,124766,124767],{},"工控机开机即可连上网。",[14,124769,124771],{"id":124770},"_72-ssh远程开发","7.2 SSH远程开发",[19,124773,124775],{"id":124774},"_721-环境准备","7.2.1 环境准备",[31,124777,124778],{},[49,124779,124780],{},"1.硬件准备",[31,124782,124783],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[31,124785,124786],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[31,124788,124789],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[31,124791,124792],{},[49,124793,124794],{},"2.设置固定IP",[31,124796,124797],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[31,124799,124800],{},"1.进入设置界面",[31,124802,124803],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[31,124805,124806],{},[55,124807],{"alt":57,"src":124808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[31,124810,124811],{},"2.配置所连接的网络",[31,124813,124814],{},[55,124815],{"alt":57,"src":124816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[31,124818,124819],{},"3.设置固定IP",[31,124821,124822],{},"查看当前IP地址。",[31,124824,124825],{},[55,124826],{"alt":57,"src":124827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[31,124829,124830],{},"设置固定IP。",[31,124832,124833],{},[55,124834],{"alt":57,"src":124835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[31,124837,124838],{},"至此，IP配置完毕。",[19,124840,124842],{"id":124841},"_722-环境搭建","7.2.2 环境搭建",[31,124844,124845],{},[49,124846,28596],{},[31,124848,124849],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[31,124851,124852],{},[49,124853,124854],{},"实现",[31,124856,124857],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[24,124859,124860,124863,124866,124869],{},[27,124861,124862],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[27,124864,124865],{},"远程主机启动SSH服务；",[27,124867,124868],{},"本地主机登陆远程主机；",[27,124870,124871],{},"实现数据传输。",[31,124873,124874],{},"1.安装SSH客户端与服务端",[31,124876,124877],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[190,124879,124881],{"className":123075,"code":124880,"language":123077,"meta":123078,"style":57}," sudo apt install openssh-server\n",[196,124882,124883],{"__ignoreMap":57},[199,124884,124885],{"class":201,"line":202},[199,124886,124880],{},[31,124888,124889],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[190,124891,124893],{"className":123075,"code":124892,"language":123077,"meta":123078,"style":57},"sudo apt install openssh-client\n",[196,124894,124895],{"__ignoreMap":57},[199,124896,124897],{"class":201,"line":202},[199,124898,124892],{},[31,124900,124901],{},"2.远程主机启动SSH服务",[31,124903,124904],{},"远程主机启动 ssh 服务命令如下：",[190,124906,124908],{"className":123075,"code":124907,"language":123077,"meta":123078,"style":57},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[196,124909,124910],{"__ignoreMap":57},[199,124911,124912],{"class":201,"line":202},[199,124913,124907],{},[31,124915,124916],{},"启动后可使用如下命令查看服务是否正常运行：",[190,124918,124920],{"className":123075,"code":124919,"language":123077,"meta":123078,"style":57},"ps -e | grep ssh\n",[196,124921,124922],{"__ignoreMap":57},[199,124923,124924],{"class":201,"line":202},[199,124925,124919],{},[31,124927,124928],{},"如果启动成功，会包含 sshd 程序。",[31,124930,124931],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[190,124933,124935],{"className":123075,"code":124934,"language":123077,"meta":123078,"style":57},"sudo systemctl enable ssh\n",[196,124936,124937],{"__ignoreMap":57},[199,124938,124939],{"class":201,"line":202},[199,124940,124934],{},[31,124942,124943],{},"3.本地远程登录",[31,124945,124946],{},"登录远程主机可以调用如下命令:",[190,124948,124950],{"className":119555,"code":124949,"language":119557,"meta":57,"style":57},"ssh -X 用户名@ip地址\n",[196,124951,124952],{"__ignoreMap":57},[199,124953,124954,124956,124959],{"class":201,"line":202},[199,124955,123906],{"class":878},[199,124957,124958],{"class":1018}," -X",[199,124960,124961],{"class":898}," 用户名@ip地址\n",[31,124963,124964],{},"然后根据提示，录入登陆密码，即可成功登录。",[31,124966,124967],{},"如果退出，可以调用exit命令：",[190,124969,124971],{"className":123075,"code":124970,"language":123077,"meta":123078,"style":57},"exit\n",[196,124972,124973],{"__ignoreMap":57},[199,124974,124975],{"class":201,"line":202},[199,124976,124970],{},[31,124978,124979],{},[49,124980,124981],{},"4.实现数据传输",[31,124983,124984],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[31,124986,124987],{},"上传文件指令格式如下：",[190,124989,124991],{"className":123075,"code":124990,"language":123077,"meta":123078,"style":57},"scp 本地文件路径 账号@ip:路径\n",[196,124992,124993],{"__ignoreMap":57},[199,124994,124995],{"class":201,"line":202},[199,124996,124990],{},[31,124998,124999],{},"上传文件夹指令格式如下：",[190,125001,125003],{"className":123075,"code":125002,"language":123077,"meta":123078,"style":57},"scp -r 本地文件夹路径 账号@ip:路径\n",[196,125004,125005],{"__ignoreMap":57},[199,125006,125007],{"class":201,"line":202},[199,125008,125002],{},[31,125010,125011],{},"下载文件指令格式如下：",[190,125013,125015],{"className":123075,"code":125014,"language":123077,"meta":123078,"style":57},"scp 账号@ip:路径 本地文件夹路径\n",[196,125016,125017],{"__ignoreMap":57},[199,125018,125019],{"class":201,"line":202},[199,125020,125014],{},[31,125022,125023],{},"下载文件夹指令格式如下：",[190,125025,125027],{"className":123075,"code":125026,"language":123077,"meta":123078,"style":57},"scp -r 账号@ip:路径 本地文件夹路径\n",[196,125028,125029],{"__ignoreMap":57},[199,125030,125031],{"class":201,"line":202},[199,125032,125026],{},[31,125034,125035],{},[49,125036,125037],{},"优化",[31,125039,125040],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[24,125042,125043,125046],{},[27,125044,125045],{},"本地生成密钥对；",[27,125047,125048],{},"将公钥上传至远程主机。",[31,125050,125051],{},[49,125052,125053],{},"1.生成密钥对",[31,125055,125056],{},"本地客户端生成公私钥：（一路回车默认即可）",[190,125058,125060],{"className":123075,"code":125059,"language":123077,"meta":123078,"style":57},"ssh-keygen\n",[196,125061,125062],{"__ignoreMap":57},[199,125063,125064],{"class":201,"line":202},[199,125065,125059],{},[31,125067,125068],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[24,125070,125071,125074],{},[27,125072,125073],{},"id_rsa （私钥）；",[27,125075,125076],{},"id_rsa.pub (公钥)。",[31,125078,125079],{},[49,125080,125081],{},"2.公钥上传",[31,125083,125084],{},"上传指令如下：",[190,125086,125088],{"className":123075,"code":125087,"language":123077,"meta":123078,"style":57},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[196,125089,125090],{"__ignoreMap":57},[199,125091,125092],{"class":201,"line":202},[199,125093,125087],{},[31,125095,125096],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[31,125098,125099],{},"以后再远程登录就无需录入密码了。",[19,125101,125103],{"id":125102},"_723-使用vscode优化","7.2.3 使用VScode优化",[31,125105,125106],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[31,125108,125109],{},[49,125110,125111],{},"1.准备工作",[31,125113,125114],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[31,125116,125117],{},[49,125118,125119],{},"2.为VScode安装远程开发插件",[31,125121,125122,125123,125126,125127,125130,125131,31228],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[196,125124,125125],{},"扩展：商店","的搜索栏输入",[196,125128,125129],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[196,125132,125133],{},"安装",[31,125135,125136],{},[55,125137],{"alt":57,"src":125138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[31,125140,125141],{},[49,125142,125143],{},"3.配置远程连接",[31,125145,125146,125147,125150,125151,125154],{},"步骤1：使用快捷键",[196,125148,125149],{},"ctrl + shift + p","打开命令输入窗口，并输入",[196,125152,125153],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[31,125156,125157],{},[55,125158],{"alt":57,"src":125159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[31,125161,125162,125163,31228],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[196,125164,125165],{},"Add New SSH Host",[31,125167,125168],{},[55,125169],{"alt":57,"src":125170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[31,125172,125173,125174,125177,125178,125181,125182,125185],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[196,125175,125176],{},"ssh +X ubuntu@192.168.43.164","，其中，",[196,125179,125180],{},"ubuntu","需要替换为你的登录用户名，",[196,125183,125184],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[31,125187,125188],{},[55,125189],{"alt":57,"src":125190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[31,125192,125193],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[31,125195,125196],{},[55,125197],{"alt":57,"src":125198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[31,125200,125201],{},[55,125202],{"alt":57,"src":125203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[31,125205,125206],{},[49,125207,125208],{},"4.使用",[31,125210,125211,125212,125150,125214,125216],{},"步骤1：继续使用快捷键",[196,125213,125149],{},[196,125215,125153],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[31,125218,125219],{},[55,125220],{"alt":57,"src":125221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[31,125223,125224,125225,125228],{},"或者，也可以点击侧边栏的",[196,125226,125227],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[31,125230,125231],{},[55,125232],{"alt":57,"src":125233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[31,125235,125236,125237,125240,125241,125244],{},"步骤2：选择菜单栏的",[196,125238,125239],{},"文件","下的",[196,125242,125243],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[31,125246,125247],{},[55,125248],{"alt":57,"src":125249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[31,125251,125252],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,125254,125256],{"id":125255},"_73-远程桌面","7.3 远程桌面",[31,125258,125259],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[31,125261,125262],{},"我们选择使用VNC来看。",[24,125264,125265],{},[27,125266,125267],{},"安装VNC服务器：",[31,125269,125270],{},"这里以TigerVNC为例进行安装：",[190,125272,125274],{"className":119555,"code":125273,"language":119557,"meta":57,"style":57},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[196,125275,125276],{"__ignoreMap":57},[199,125277,125278,125280,125282,125284,125287],{"class":201,"line":202},[199,125279,27420],{"class":878},[199,125281,119576],{"class":898},[199,125283,26678],{"class":898},[199,125285,125286],{"class":898}," tigervnc-standalone-server",[199,125288,125289],{"class":898}," tigervnc-common\n",[24,125291,125292],{"start":36},[27,125293,125294],{},"设置VNC密码：",[31,125296,125297],{},"为VNC用户设置密码，运行以下命令：",[190,125299,125301],{"className":119555,"code":125300,"language":119557,"meta":57,"style":57},"vncpasswd\n",[196,125302,125303],{"__ignoreMap":57},[199,125304,125305],{"class":201,"line":202},[199,125306,125300],{"class":878},[24,125308,125309],{"start":73},[27,125310,125311],{},"配置VNC启动脚本:",[31,125313,125314],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[190,125316,125318],{"className":119555,"code":125317,"language":119557,"meta":57,"style":57},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[196,125319,125320,125329],{"__ignoreMap":57},[199,125321,125322,125324,125326],{"class":201,"line":202},[199,125323,103525],{"class":878},[199,125325,32059],{"class":1018},[199,125327,125328],{"class":898}," ~\u002F.vnc\n",[199,125330,125331,125334],{"class":201,"line":36},[199,125332,125333],{"class":878},"nano",[199,125335,125336],{"class":898}," ~\u002F.vnc\u002Fxstartup\n",[31,125338,125339],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[190,125341,125343],{"className":119555,"code":125342,"language":119557,"meta":57,"style":57},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[196,125344,125345,125350,125358,125365],{"__ignoreMap":57},[199,125346,125347],{"class":201,"line":202},[199,125348,125349],{"class":1454},"#!\u002Fbin\u002Fsh\n",[199,125351,125352,125355],{"class":201,"line":36},[199,125353,125354],{"class":1018},"unset",[199,125356,125357],{"class":898}," SESSION_MANAGER\n",[199,125359,125360,125362],{"class":201,"line":73},[199,125361,125354],{"class":1018},[199,125363,125364],{"class":898}," DBUS_SESSION_BUS_ADDRESS\n",[199,125366,125367],{"class":201,"line":333},[199,125368,125369],{"class":878},"gnome-session\n",[31,125371,125372],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[24,125374,125375],{"start":333},[27,125376,125377],{},"给予执行权限：",[31,125379,125380],{},"为xstartup文件设置执行权限：",[190,125382,125384],{"className":119555,"code":125383,"language":119557,"meta":57,"style":57},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[196,125385,125386],{"__ignoreMap":57},[199,125387,125388,125390,125393],{"class":201,"line":202},[199,125389,27455],{"class":878},[199,125391,125392],{"class":898}," +x",[199,125394,125336],{"class":898},[24,125396,125397],{"start":227},[27,125398,125399],{},"启动VNC服务器：",[190,125401,125403],{"className":119555,"code":125402,"language":119557,"meta":57,"style":57},"vncserver -geometry 1920x1080 -localhost=0\n",[196,125404,125405],{"__ignoreMap":57},[199,125406,125407,125410,125413,125416],{"class":201,"line":202},[199,125408,125409],{"class":878},"vncserver",[199,125411,125412],{"class":1018}," -geometry",[199,125414,125415],{"class":898}," 1920x1080",[199,125417,125418],{"class":1018}," -localhost=0\n",[31,125420,125421],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[31,125423,125424],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[24,125426,125427],{"start":238},[27,125428,125429],{},"查看已开启的VNC服务器：",[190,125431,125433],{"className":119555,"code":125432,"language":119557,"meta":57,"style":57},"vncserver -list\n",[196,125434,125435],{"__ignoreMap":57},[199,125436,125437,125439],{"class":201,"line":202},[199,125438,125409],{"class":878},[199,125440,125441],{"class":1018}," -list\n",[31,125443,125444],{},[55,125445],{"alt":57,"src":125446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[24,125448,125449],{"start":252},[27,125450,125451],{},"连接到VNC服务器：",[31,125453,125454],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[24,125456,125457],{"start":388},[27,125458,125459],{},"停止VNC服务器：",[31,125461,125462],{},"如果需要停止VNC服务器，可以使用以下命令：",[190,125464,125466],{"className":119555,"code":125465,"language":119557,"meta":57,"style":57},"vncserver -kill :1\n",[196,125467,125468],{"__ignoreMap":57},[199,125469,125470,125472,125475],{"class":201,"line":202},[199,125471,125409],{"class":878},[199,125473,125474],{"class":1018}," -kill",[199,125476,125477],{"class":898}," :1\n",[31,125479,125480],{},"将:1替换为你实际使用的显示编号。",[31,125482,125483],{},[55,125484],{"alt":57,"src":125485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[31,125487,125488],{},[55,125489],{"alt":57,"src":125490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125492,125494],{"id":125493},"_74-usb端口设置","7.4 USB端口设置",[31,125496,125497],{},[49,125498,125499],{},"首先先配置好权限",[190,125501,125503],{"className":119555,"code":125502,"language":119557,"meta":57,"style":57},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[196,125504,125505,125510,125523,125530,125535],{"__ignoreMap":57},[199,125506,125507],{"class":201,"line":202},[199,125508,125509],{"class":1454},"# 将用户权限提高\n",[199,125511,125512,125514,125516,125518,125521],{"class":201,"line":36},[199,125513,27420],{"class":878},[199,125515,29417],{"class":898},[199,125517,29420],{"class":1018},[199,125519,125520],{"class":898}," dialout",[199,125522,29425],{"class":205},[199,125524,125525,125527],{"class":201,"line":73},[199,125526,29444],{"class":878},[199,125528,125529],{"class":898}," dialout\n",[199,125531,125532],{"class":201,"line":333},[199,125533,125534],{"class":1454},"# 查看下面命令是否输出dialout（若输出才正常）\n",[199,125536,125537],{"class":201,"line":227},[199,125538,125539],{"class":878},"groups\n",[31,125541,125542],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[19,125544,125546],{"id":125545},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[31,125548,125549,125552],{},[49,125550,125551],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[31,125554,125555,125558],{},[49,125556,125557],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[31,125560,125561],{},[49,125562,125563],{},"流程如下：",[31,125565,125566],{},"（1）.查找设备idVendor和idProduct",[31,125568,125569,125570,125573],{},"接入两个USB设备，在终端调用指令",[196,125571,125572],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[31,125575,125576],{},[55,125577],{"alt":57,"src":125578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[31,125580,125581,125582,125585],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[196,125583,125584],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[31,125587,125588],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[31,125590,125591],{},"（2）.编写映射规则",[31,125593,125594,125595,125598],{},"在",[196,125596,125597],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[190,125600,125602],{"className":119555,"code":125601,"language":119557,"meta":57,"style":57},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[196,125603,125604],{"__ignoreMap":57},[199,125605,125606,125608,125610],{"class":201,"line":202},[199,125607,27420],{"class":878},[199,125609,120842],{"class":898},[199,125611,125612],{"class":898}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[31,125614,125615],{},"输入如下内容：",[190,125617,125619],{"className":119555,"code":125618,"language":119557,"meta":57,"style":57},"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",[196,125620,125621,125651],{"__ignoreMap":57},[199,125622,125623,125626,125628,125631,125634,125637,125640,125642,125645,125648],{"class":201,"line":202},[199,125624,125625],{"class":205},"KERNEL",[199,125627,895],{"class":1086},[199,125629,125630],{"class":898},"=\"ttyUSB*\",",[199,125632,125633],{"class":878}," ATTRS",[199,125635,125636],{"class":898},"{idVendor}==",[199,125638,125639],{"class":878},"\"10c4\"",[199,125641,3461],{"class":878},[199,125643,125644],{"class":898}," ATTRS{idProduct}==\"ea60\",",[199,125646,125647],{"class":898}," MODE:=\"0777\",",[199,125649,125650],{"class":898}," SYMLINK+=\"mylidar\"\n",[199,125652,125653,125655,125657,125659,125661,125663,125666,125668,125671,125673],{"class":201,"line":36},[199,125654,125625],{"class":205},[199,125656,895],{"class":1086},[199,125658,125630],{"class":898},[199,125660,125633],{"class":878},[199,125662,125636],{"class":898},[199,125664,125665],{"class":878},"\"1a86\"",[199,125667,3461],{"class":878},[199,125669,125670],{"class":898}," ATTRS{idProduct}==\"7523\",",[199,125672,125647],{"class":898},[199,125674,125675],{"class":898}," SYMLINK+=\"mycar\"\n",[31,125677,125678],{},"代码解释：",[176,125680,125681,125684,125687,125690],{},[27,125682,125683],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[27,125685,125686],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[27,125688,125689],{},"SYMLINK是符号连接，即绑定的别名；",[27,125691,125692],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[31,125694,125695,125696,125699,125702],{},"***小提示：***",[26397,125697,125698],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[196,125700,125701],{},"\u002Fetc\u002Fudev\u002Frule.d",[26397,125703,125704],{},"目录即可。",[31,125706,125707],{},"表格 还在加载中，请等待加载完成后再尝试复制",[31,125709,125710],{},"（3）.使规则生效",[31,125712,125713],{},"在终端下输入如下指令：",[190,125715,125717],{"className":119555,"code":125716,"language":119557,"meta":57,"style":57},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[196,125718,125719,125724,125736,125747,125751,125756,125769],{"__ignoreMap":57},[199,125720,125721],{"class":201,"line":202},[199,125722,125723],{"class":1454},"# Ubuntu用下方命令\n",[199,125725,125726,125728,125730,125733],{"class":201,"line":36},[199,125727,27420],{"class":878},[199,125729,122307],{"class":898},[199,125731,125732],{"class":898}," udev",[199,125734,125735],{"class":898}," reload\n",[199,125737,125738,125740,125742,125744],{"class":201,"line":73},[199,125739,27420],{"class":878},[199,125741,122307],{"class":898},[199,125743,125732],{"class":898},[199,125745,125746],{"class":898}," restart\n",[199,125748,125749],{"class":201,"line":333},[199,125750,907],{"emptyLinePlaceholder":906},[199,125752,125753],{"class":201,"line":227},[199,125754,125755],{"class":1454},"#Fedora用下方命令\n",[199,125757,125758,125760,125763,125766],{"class":201,"line":238},[199,125759,27420],{"class":878},[199,125761,125762],{"class":898}," udevadm",[199,125764,125765],{"class":898}," control",[199,125767,125768],{"class":1018}," --reload\n",[199,125770,125771,125773,125775],{"class":201,"line":252},[199,125772,27420],{"class":878},[199,125774,125762],{"class":898},[199,125776,125777],{"class":898}," trigger\n",[31,125779,125780],{},"再重新插拔设备即可。",[31,125782,125783],{},"（4）.测试",[31,125785,125786],{},"终端下输入如下指令",[190,125788,125790],{"className":119555,"code":125789,"language":119557,"meta":57,"style":57},"ll \u002Fdev | grep ttyUSB\n",[196,125791,125792],{"__ignoreMap":57},[199,125793,125794,125797,125800,125802,125804],{"class":201,"line":202},[199,125795,125796],{"class":878},"ll",[199,125798,125799],{"class":898}," \u002Fdev",[199,125801,27953],{"class":1086},[199,125803,33079],{"class":878},[199,125805,125806],{"class":898}," ttyUSB\n",[31,125808,125809],{},"运行结果如下：",[31,125811,125812],{},[55,125813],{"alt":57,"src":125814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[31,125816,125817,125818,125821],{},"也可以多次插拔USB设备，会发现设备端口",[196,125819,125820],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[31,125823,125824],{},[49,125825,120223],{},[31,125827,125828],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[19,125830,125832],{"id":125831},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[31,125834,125835,125837],{},[49,125836,125551],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[31,125839,125840,125842],{},[49,125841,125557],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[31,125844,125845],{},[49,125846,125563],{},[31,125848,125849],{},"（1）.查看所连接的主机USB接口的KERNELS",[31,125851,125852],{},"调用如下指令查看第一台雷达的USB信息：",[190,125854,125856],{"className":119555,"code":125855,"language":119557,"meta":57,"style":57},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[196,125857,125858,125878],{"__ignoreMap":57},[199,125859,125860,125863,125865,125868,125871,125873,125875],{"class":201,"line":202},[199,125861,125862],{"class":878},"udevadm",[199,125864,72080],{"class":898},[199,125866,125867],{"class":1018}," --attribute-walk",[199,125869,125870],{"class":1018}," --name=\u002Fdev\u002FttyUSB0",[199,125872,27953],{"class":1086},[199,125874,33079],{"class":878},[199,125876,125877],{"class":898}," KERNELS\n",[199,125879,125880,125882,125884,125886,125889,125891,125893],{"class":201,"line":36},[199,125881,125862],{"class":878},[199,125883,72080],{"class":898},[199,125885,125867],{"class":1018},[199,125887,125888],{"class":1018}," --name=\u002Fdev\u002FttyACM0",[199,125890,27953],{"class":1086},[199,125892,33079],{"class":878},[199,125894,125877],{"class":898},[31,125896,125897],{},[55,125898],{"alt":57,"src":125899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[31,125901,125902],{},"调用如下指令查看第二台雷达的USB信息：",[190,125904,125906],{"className":119555,"code":125905,"language":119557,"meta":57,"style":57},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[196,125907,125908],{"__ignoreMap":57},[199,125909,125910,125912,125914,125916,125919,125921,125923],{"class":201,"line":202},[199,125911,125862],{"class":878},[199,125913,72080],{"class":898},[199,125915,125867],{"class":1018},[199,125917,125918],{"class":1018}," --name=\u002Fdev\u002FttyUSB1",[199,125920,27953],{"class":1086},[199,125922,33079],{"class":878},[199,125924,125877],{"class":898},[31,125926,125927,125928,125931,125932,125935,125936,125939],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[196,125929,125930],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[196,125933,125934],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[49,125937,125938],{},"唯一性标识","”。",[31,125941,125591],{},[31,125943,125594,125944,125946],{},[196,125945,125597],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[190,125948,125949],{"className":119555,"code":125601,"language":119557,"meta":57,"style":57},[196,125950,125951],{"__ignoreMap":57},[199,125952,125953,125955,125957],{"class":201,"line":202},[199,125954,27420],{"class":878},[199,125956,120842],{"class":898},[199,125958,125612],{"class":898},[190,125960,125962],{"className":119555,"code":125961,"language":119557,"meta":57,"style":57},"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",[196,125963,125964,125993],{"__ignoreMap":57},[199,125965,125966,125968,125970,125972,125975,125977,125980,125983,125985,125988,125990],{"class":201,"line":202},[199,125967,125625],{"class":205},[199,125969,895],{"class":1086},[199,125971,125630],{"class":898},[199,125973,125974],{"class":205}," KERNELS",[199,125976,895],{"class":1086},[199,125978,125979],{"class":898},"=\"1-1.3:1.0\",",[199,125981,125982],{"class":878}," MODE:",[199,125984,895],{"class":898},[199,125986,125987],{"class":878},"\"0777\"",[199,125989,3461],{"class":878},[199,125991,125992],{"class":898}," SYMLINK+=\"rplidar_front\"\n",[199,125994,125995,125997,125999,126001,126003,126005,126008,126010,126012,126014,126016],{"class":201,"line":36},[199,125996,125625],{"class":205},[199,125998,895],{"class":1086},[199,126000,125630],{"class":898},[199,126002,125974],{"class":205},[199,126004,895],{"class":1086},[199,126006,126007],{"class":898},"=\"1-1.4:1.0\",",[199,126009,125982],{"class":878},[199,126011,895],{"class":898},[199,126013,125987],{"class":878},[199,126015,3461],{"class":878},[199,126017,126018],{"class":898}," SYMLINK+=\"rplidar_back\"\n",[31,126020,125710],{},[31,126022,125713],{},[190,126024,126025],{"className":119555,"code":125716,"language":119557,"meta":57,"style":57},[196,126026,126027,126031,126041,126051,126055,126059,126069],{"__ignoreMap":57},[199,126028,126029],{"class":201,"line":202},[199,126030,125723],{"class":1454},[199,126032,126033,126035,126037,126039],{"class":201,"line":36},[199,126034,27420],{"class":878},[199,126036,122307],{"class":898},[199,126038,125732],{"class":898},[199,126040,125735],{"class":898},[199,126042,126043,126045,126047,126049],{"class":201,"line":73},[199,126044,27420],{"class":878},[199,126046,122307],{"class":898},[199,126048,125732],{"class":898},[199,126050,125746],{"class":898},[199,126052,126053],{"class":201,"line":333},[199,126054,907],{"emptyLinePlaceholder":906},[199,126056,126057],{"class":201,"line":227},[199,126058,125755],{"class":1454},[199,126060,126061,126063,126065,126067],{"class":201,"line":238},[199,126062,27420],{"class":878},[199,126064,125762],{"class":898},[199,126066,125765],{"class":898},[199,126068,125768],{"class":1018},[199,126070,126071,126073,126075],{"class":201,"line":252},[199,126072,27420],{"class":878},[199,126074,125762],{"class":898},[199,126076,125777],{"class":898},[31,126078,125780],{},[31,126080,125783],{},[31,126082,125786,126083,126086],{},[196,126084,126085],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[31,126088,126089],{},[55,126090],{"alt":57,"src":126091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[31,126093,126094],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[31,126096,126097,126099],{},[49,126098,120223],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[19,126101,126103],{"id":126102},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[31,126105,126106],{},"（1）.查看所连接的主机USB接口的信息",[190,126108,126110],{"className":119555,"code":126109,"language":119557,"meta":57,"style":57},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[196,126111,126112,126142],{"__ignoreMap":57},[199,126113,126114,126116,126118,126121,126123,126125,126127,126129,126132,126135,126137,126140],{"class":201,"line":202},[199,126115,125862],{"class":878},[199,126117,72080],{"class":898},[199,126119,126120],{"class":1018}," -a",[199,126122,32059],{"class":1018},[199,126124,31265],{"class":205},[199,126126,125862],{"class":878},[199,126128,72080],{"class":898},[199,126130,126131],{"class":1018}," -q",[199,126133,126134],{"class":898}," path",[199,126136,27959],{"class":1018},[199,126138,126139],{"class":898}," \u002Fdev\u002FttyACM0",[199,126141,1594],{"class":205},[199,126143,126144,126146,126148,126150,126152,126154,126156,126158,126160,126162,126164,126167],{"class":201,"line":36},[199,126145,125862],{"class":878},[199,126147,72080],{"class":898},[199,126149,126120],{"class":1018},[199,126151,32059],{"class":1018},[199,126153,31265],{"class":205},[199,126155,125862],{"class":878},[199,126157,72080],{"class":898},[199,126159,126131],{"class":1018},[199,126161,126134],{"class":898},[199,126163,27959],{"class":1018},[199,126165,126166],{"class":898}," \u002Fdev\u002FttyUSB0",[199,126168,1594],{"class":205},[31,126170,126171],{},[55,126172],{"alt":57,"src":126173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[31,126175,126176],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[31,126178,125591],{},[31,126180,125594,126181,125946],{},[196,126182,125597],{},[190,126184,126185],{"className":119555,"code":125601,"language":119557,"meta":57,"style":57},[196,126186,126187],{"__ignoreMap":57},[199,126188,126189,126191,126193],{"class":201,"line":202},[199,126190,27420],{"class":878},[199,126192,120842],{"class":898},[199,126194,125612],{"class":898},[190,126196,126198],{"className":119555,"code":126197,"language":119557,"meta":57,"style":57},"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",[196,126199,126200,126228,126254],{"__ignoreMap":57},[199,126201,126202,126204,126206,126209,126211,126213,126215,126217,126220,126223,126225],{"class":201,"line":202},[199,126203,125625],{"class":205},[199,126205,895],{"class":1086},[199,126207,126208],{"class":898},"=\"ttyACM*\",",[199,126210,125633],{"class":878},[199,126212,125636],{"class":898},[199,126214,125665],{"class":878},[199,126216,3461],{"class":878},[199,126218,126219],{"class":898}," ATTRS{idProduct}==\"55d4\",",[199,126221,126222],{"class":898}," ATTRS{serial}==\"0001\",",[199,126224,125647],{"class":898},[199,126226,126227],{"class":898}," SYMLINK+=\"ttyACM_MCU\"\n",[199,126229,126230,126232,126234,126236,126238,126240,126242,126244,126246,126249,126251],{"class":201,"line":36},[199,126231,125625],{"class":205},[199,126233,895],{"class":1086},[199,126235,126208],{"class":898},[199,126237,125633],{"class":878},[199,126239,125636],{"class":898},[199,126241,125665],{"class":878},[199,126243,3461],{"class":878},[199,126245,126219],{"class":898},[199,126247,126248],{"class":898}," ATTRS{serial}==\"0002\",",[199,126250,125647],{"class":898},[199,126252,126253],{"class":898}," SYMLINK+=\"ttyACM_Lidar\"\n",[199,126255,126256,126258,126260,126262,126264,126266,126268,126270,126272,126274],{"class":201,"line":73},[199,126257,125625],{"class":205},[199,126259,895],{"class":1086},[199,126261,125630],{"class":898},[199,126263,125633],{"class":878},[199,126265,125636],{"class":898},[199,126267,125665],{"class":878},[199,126269,3461],{"class":878},[199,126271,125670],{"class":898},[199,126273,125647],{"class":898},[199,126275,126276],{"class":898}," SYMLINK+=\"ttyUSB_IMU\"\n",[31,126278,125710],{},[31,126280,125713],{},[190,126282,126283],{"className":119555,"code":125716,"language":119557,"meta":57,"style":57},[196,126284,126285,126289,126299,126309,126313,126317,126327],{"__ignoreMap":57},[199,126286,126287],{"class":201,"line":202},[199,126288,125723],{"class":1454},[199,126290,126291,126293,126295,126297],{"class":201,"line":36},[199,126292,27420],{"class":878},[199,126294,122307],{"class":898},[199,126296,125732],{"class":898},[199,126298,125735],{"class":898},[199,126300,126301,126303,126305,126307],{"class":201,"line":73},[199,126302,27420],{"class":878},[199,126304,122307],{"class":898},[199,126306,125732],{"class":898},[199,126308,125746],{"class":898},[199,126310,126311],{"class":201,"line":333},[199,126312,907],{"emptyLinePlaceholder":906},[199,126314,126315],{"class":201,"line":227},[199,126316,125755],{"class":1454},[199,126318,126319,126321,126323,126325],{"class":201,"line":238},[199,126320,27420],{"class":878},[199,126322,125762],{"class":898},[199,126324,125765],{"class":898},[199,126326,125768],{"class":1018},[199,126328,126329,126331,126333],{"class":201,"line":252},[199,126330,27420],{"class":878},[199,126332,125762],{"class":898},[199,126334,125777],{"class":898},[31,126336,126337,126338],{},"再重新插拔设备即可，或者 ",[49,126339,126340],{},"直接重启系统。",[31,126342,125783],{},[31,126344,125786,126345,126086],{},[196,126346,126085],{},[31,126348,126349],{},[55,126350],{"alt":57,"src":126351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[31,126353,126094],{},[31,126355,126356,126358],{},[49,126357,120223],{}," 一些设备可能没有串口号等。",[19,126360,126362],{"id":126361},"_744-其他注意事项","7.4.4 其他注意事项",[31,126364,126365,126366,126368,126369,126372,126373,21255,126376,126379,126380,126382],{},"并非所有的USB设备端口号都是",[196,126367,125820],{},"的格式，比如Arduino的端口号可能是",[196,126370,126371],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[196,126374,126375],{},"videon",[196,126377,126378],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[196,126381,126375],{},"端口，绑定时需要关联的也是该接口。",[31,126384,126385,126386,126389,126390,126393,126394,126396,126397,126400,126401,126404,126405,126408,126409,126408,126412,126408,126415,31228],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[196,126387,126388],{},"KERNEL==\"ttyUSB*\"","修改为",[196,126391,126392],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[196,126395,126388],{},"修改为类似于",[196,126398,126399],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[196,126402,126403],{},"video[0,2,4,6]","表示可以绑定的端口为",[196,126406,126407],{},"video0","或",[196,126410,126411],{},"video2",[196,126413,126414],{},"video4",[196,126416,126417],{},"video6",[14,126419,126421],{"id":126420},"_75-挂载内网网页","7.5 挂载内网网页",[31,126423,126424],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[31,126426,126427],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[31,126429,126430],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[31,126432,126433,126434],{},"Termux 下载地址（F-Droid）：",[2867,126435,126436],{"href":126436,"rel":126437},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[2871],[31,126439,126440],{},"首先打开app后，先更新软件缓存：",[190,126442,126444],{"className":119555,"code":126443,"language":119557,"meta":57,"style":57},"pkg update\n",[196,126445,126446],{"__ignoreMap":57},[199,126447,126448,126451],{"class":201,"line":202},[199,126449,126450],{"class":878},"pkg",[199,126452,29085],{"class":898},[31,126454,126455],{},"然后换源",[190,126457,126459],{"className":119555,"code":126458,"language":119557,"meta":57,"style":57},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[196,126460,126461],{"__ignoreMap":57},[199,126462,126463,126465,126468],{"class":201,"line":202},[199,126464,125333],{"class":878},[199,126466,126467],{"class":205}," $PREFIX",[199,126469,126470],{"class":898},"\u002Fetc\u002Fapt\u002Fsources.list\n",[31,126472,126473],{},"将该文件内容替换为下面：",[190,126475,126477],{"className":119555,"code":126476,"language":119557,"meta":57,"style":57},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[196,126478,126479],{"__ignoreMap":57},[199,126480,126481,126484,126487,126490],{"class":201,"line":202},[199,126482,126483],{"class":878},"deb",[199,126485,126486],{"class":898}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[199,126488,126489],{"class":898}," stable",[199,126491,126492],{"class":898}," main\n",[176,126494,126495,126522],{},[27,126496,126497,126498,126500,126501],{},"如果你使用的是",[196,126499,125333],{},"编辑器：",[176,126502,126503,126510,126516],{},[27,126504,126505,126506,126509],{},"按 ",[196,126507,126508],{},"Ctrl+O"," 保存文件。",[27,126511,126505,126512,126515],{},[196,126513,126514],{},"Enter"," 确认文件名。",[27,126517,126505,126518,126521],{},[196,126519,126520],{},"Ctrl+X"," 退出编辑器。",[27,126523,126497,126524,126500,126527],{},[196,126525,126526],{},"vim",[176,126528,126529,126535],{},[27,126530,126505,126531,126534],{},[196,126532,126533],{},"Esc"," 退出编辑模式。",[27,126536,126537,126538,126540],{},"输入 ",[196,126539,121480],{}," 保存并退出。",[31,126542,126543],{},"接下来重新更新软件源：",[190,126545,126547],{"className":119555,"code":126546,"language":119557,"meta":57,"style":57},"pkg update && pkg upgrade\n",[196,126548,126549],{"__ignoreMap":57},[199,126550,126551,126553,126555,126557,126559],{"class":201,"line":202},[199,126552,126450],{"class":878},[199,126554,119606],{"class":898},[199,126556,29033],{"class":205},[199,126558,126450],{"class":878},[199,126560,119592],{"class":898},[31,126562,126563],{},"安装python：",[190,126565,126567],{"className":119555,"code":126566,"language":119557,"meta":57,"style":57},"pkg install python\n",[196,126568,126569],{"__ignoreMap":57},[199,126570,126571,126573,126575],{"class":201,"line":202},[199,126572,126450],{"class":878},[199,126574,26678],{"class":898},[199,126576,126577],{"class":898}," python\n",[31,126579,126580,29316],{},[49,126581,126582],{},"通过Termux访问设备存储",[31,126584,126585],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[190,126587,126589],{"className":119555,"code":126588,"language":119557,"meta":57,"style":57},"termux-setup-storage\n",[196,126590,126591],{"__ignoreMap":57},[199,126592,126593],{"class":201,"line":202},[199,126594,126588],{"class":878},[24,126596,126597],{},[27,126598,126599,29316,126602],{},[49,126600,126601],{},"进入HTML文件所在的目录",[24,126603,126604],{},[27,126605,126606,126607,126609],{},"使用",[196,126608,103535],{},"命令进入HTML文件所在的目录：",[190,126611,126613],{"className":119555,"code":126612,"language":119557,"meta":57,"style":57},"cd ~\u002Fyour_html_folder\n",[196,126614,126615],{"__ignoreMap":57},[199,126616,126617,126619],{"class":201,"line":202},[199,126618,103535],{"class":1018},[199,126620,126621],{"class":898}," ~\u002Fyour_html_folder\n",[24,126623,126624],{"start":36},[27,126625,126626,29316,126629,126634,126651],{},[49,126627,126628],{},"启动Python HTTP服务器",[24,126630,126631],{},[27,126632,126633],{},"运行以下命令启动一个简单的HTTP服务器：",[190,126635,126637],{"className":119555,"code":126636,"language":119557,"meta":57,"style":57},"python -m http.server 8000\n",[196,126638,126639],{"__ignoreMap":57},[199,126640,126641,126643,126645,126648],{"class":201,"line":202},[199,126642,33223],{"class":878},[199,126644,103141],{"class":1018},[199,126646,126647],{"class":898}," http.server",[199,126649,126650],{"class":1018}," 8000\n",[24,126652,126653],{"start":73},[27,126654,126655,126656,126659],{},"这会在端口",[196,126657,126658],{},"8000","上启动一个Web服务器。",[176,126661,126662],{},[27,126663,126664],{},"启动服务器后，Termux会显示日志信息，例如：",[190,126666,126668],{"className":123075,"code":126667,"language":123077,"meta":123078,"style":57},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[196,126669,126670],{"__ignoreMap":57},[199,126671,126672],{"class":201,"line":202},[199,126673,126667],{},[176,126675,126676],{},[27,126677,126678],{},"这表示服务器已成功启动。",[31,126680,126681],{},[49,126682,126683],{},"在浏览器中访问HTML文件",[24,126685,126686],{},[27,126687,126688,29316,126691,126696],{},[49,126689,126690],{},"在同一设备上访问",[24,126692,126693],{},[27,126694,126695],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[190,126697,126700],{"className":126698,"code":126699,"language":73923,"meta":57,"style":57},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[196,126701,126702],{"__ignoreMap":57},[199,126703,126704,126707],{"class":201,"line":202},[199,126705,126706],{"class":205},"http:",[199,126708,126709],{"class":1454},"\u002F\u002Flocalhost:8000\n",[176,126711,126712],{},[27,126713,126714,126715,126718],{},"如果HTML文件中有",[196,126716,126717],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126720,126722],{"id":126721},"_76-linux重点知识","7.6 Linux重点知识",[19,126724,126726],{"id":126725},"_761-关于点的说明","7.6.1 关于点的说明",[31,126728,126729],{},[55,126730],{"alt":57,"src":126731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[31,126733,126734],{},"一点本目录，两点上目录",[19,126736,126738],{"id":126737},"_762-目录","7.6.2 目录",[627,126740,126742],{"id":126741},"_7621-系统启动必须","7.6.2.1 系统启动必须",[31,126744,126745],{},[49,126746,126747],{},"\u002Fboot:",[31,126749,126750],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[31,126752,126753],{},[49,126754,126755],{},"\u002Fetc:",[31,126757,126758],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[31,126760,126761],{},[49,126762,126763],{},"\u002Flib：",[31,126765,126766],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[31,126768,126769],{},[49,126770,126771],{},"\u002Fsys:",[31,126773,126774],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[627,126776,126778],{"id":126777},"_7622-指令集合","7.6.2.2 指令集合",[31,126780,126781],{},[49,126782,126783],{},"\u002Fbin:",[31,126785,126786],{},"为二进制文件的缩写，存放最经常使用的命令",[31,126788,126789],{},[49,126790,126791],{},"\u002Fsbin:",[31,126793,126794],{},"只有系统管理员才能使用的程序和指令",[627,126796,126798],{"id":126797},"_7623-外部文件管理","7.6.2.3 外部文件管理",[31,126800,126801],{},[49,126802,126803],{},"\u002Fdev:",[31,126805,126806],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[31,126808,126809],{},[49,126810,126811],{},"\u002Fmedia:",[31,126813,126814],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[31,126816,126817],{},[49,126818,126819],{},"\u002Fmnt:",[31,126821,126822],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[627,126824,126826],{"id":126825},"_7624-临时文件","7.6.2.4 临时文件",[31,126828,126829],{},[49,126830,126831],{},"\u002Frun:",[31,126833,126834],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[31,126836,126837],{},[49,126838,126839],{},"\u002Flost+found:",[31,126841,126842],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[31,126844,126845],{},[49,126846,126847],{},"\u002Ftmp:",[31,126849,126850],{},"这个目录是用来存放一些临时文件的",[627,126852,126854],{"id":126853},"_7625-账户","7.6.2.5 账户",[31,126856,126857],{},[49,126858,126859],{},"\u002Froot：",[31,126861,126862],{},"系统管理员的用户主目录",[31,126864,126865,29316],{},[49,126866,126867],{},"\u002Fhome",[31,126869,126870],{},"用户的主目录，以用户的账号命名的",[31,126872,126873,29316],{},[49,126874,126875],{},"\u002Fusr",[31,126877,126878],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[31,126880,126881],{},[49,126882,126883],{},"\u002Fusr\u002Fbin：",[31,126885,126886],{},"系统用户使用的应用程序与指令",[31,126888,126889],{},[49,126890,126891],{},"\u002Fusr\u002Fsbin：",[31,126893,126894],{},"超级用户使用的比较高级的管理程序和系统守护程序",[31,126896,126897],{},[49,126898,126899],{},"\u002Fusr\u002Fsrc：",[31,126901,126902],{},"内核源代码默认的放置目录",[627,126904,126906],{"id":126905},"_7626-运行过程要用","7.6.2.6 运行过程要用",[31,126908,126909],{},[49,126910,126911],{},"\u002Fvar：",[31,126913,126914],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[31,126916,126917],{},[49,126918,126919],{},"\u002Fproc:",[31,126921,126922,126923,126926],{},"管理 ",[49,126924,126925],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[627,126928,126930],{"id":126929},"_7627-扩展用的","7.6.2.7 扩展用的",[31,126932,126933],{},[49,126934,126935],{},"\u002Fopt:",[31,126937,126938],{},"默认是空的，我们安装额外软件可以放在这个里面",[31,126940,126941],{},[49,126942,126943],{},"\u002Fsrv:",[31,126945,126946],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[19,126948,126950],{"id":126949},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[31,126952,126953],{},[55,126954],{"alt":57,"src":126955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[31,126957,126958],{},"windows-->linux:",[31,126960,126961],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[31,126963,126964],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[31,126966,126967],{},"linux传输文件到windows",[31,126969,126970],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[19,126972,126974],{"id":126973},"_764-易忘知识","7.6.4 易忘知识",[31,126976,126977],{},"操作系统内核查看",[190,126979,126980],{"className":119555,"code":123549,"language":119557,"meta":57,"style":57},[196,126981,126982],{"__ignoreMap":57},[199,126983,126984,126986],{"class":201,"line":202},[199,126985,72463],{"class":878},[199,126987,123558],{"class":1018},[31,126989,126990],{},[55,126991],{"alt":57,"src":126992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[31,126994,126995],{},[55,126996],{"alt":57,"src":126997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[190,126999,127001],{"className":119555,"code":127000,"language":119557,"meta":57,"style":57},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[196,127002,127003,127015],{"__ignoreMap":57},[199,127004,127005,127007,127010,127013],{"class":201,"line":202},[199,127006,123766],{"class":878},[199,127008,127009],{"class":898}," mvtest",[199,127011,127012],{"class":898}," mvtest2",[199,127014,5578],{"class":205},[199,127016,127017],{"class":201,"line":36},[199,127018,127019],{"class":878},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[31,127021,127022],{},[55,127023],{"alt":57,"src":127024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[31,127026,127027],{},[55,127028],{"alt":57,"src":127029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[31,127031,127032,127033,127036],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[196,127034,127035],{},"du -a"," 可以快速查看磁盘使用细节。",[19,127038,127040],{"id":127039},"_765-vim","7.6.5 Vim",[31,127042,127043],{},[55,127044],{"alt":57,"src":127045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[31,127047,127048],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[31,127050,127051],{},"一开始进去为命令模式，此时点击输入的字母为命令",[31,127053,127054],{},[49,127055,127056],{},"1.命令模式：",[31,127058,127059],{},"i 切换到输入模式，在光标当前位置开始输入文本",[31,127061,127062],{},"x 删除当前光标所在处的字符",[31,127064,127065],{},"：切换到底线命令模式，以在最底一行输入命令",[31,127067,127068],{},"a 进行插入模式，在光标下一个位置输入文本",[31,127070,127071],{},"o 在当前的下方插入一个新行，并进入插入模式",[31,127073,127074],{},"0 在当前行的上方插入一个新行，并进入插入模式",[31,127076,127077],{},"dd 剪切当前行",[31,127079,127080],{},"yy 复制当前行",[31,127082,127083],{},"p 粘贴剪贴板内容到光标下方",[31,127085,127086],{},"P 粘贴剪贴板内容到光标上方",[31,127088,127089],{},"u 撤销上一次操作",[31,127091,127092],{},"ctrl+r 重做上一次操作",[31,127094,127095,127097],{},[3874,127096],{}," 保存文件",[31,127099,127100,127102],{},[3725,127101],{}," 退出Vim编辑器",[31,127104,127105,127107],{},[3725,127106],{},"! 强制退出Vim编辑器，不保存修改",[31,127109,127110],{},[49,127111,127112],{},"2.输入模式：",[31,127114,127115],{},[55,127116],{"alt":57,"src":127117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[31,127119,127120],{},[49,127121,127122],{},"3.底线命令模式：",[31,127124,127125],{},[55,127126],{"alt":57,"src":127127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[31,127129,127130],{},"按下esc可以退出底线命令模式",[19,127132,127134],{"id":127133},"_766-apt","7.6.6 apt",[31,127136,127137],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[19,127139,127141],{"id":127140},"_767-home与root的区别","7.6.7 home与root的区别",[31,127143,127144],{},[55,127145],{"alt":57,"src":127146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[31,127148,127149],{},[55,127150],{"alt":57,"src":127151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[31,127153,127154],{},[55,127155],{"alt":57,"src":127156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[31,127158,127159],{},[55,127160],{"alt":57,"src":127161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[19,127163,127165],{"id":127164},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[31,127167,127168],{},[2867,127169,127170],{"href":127170,"rel":127171},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[2871],[24,127173,127174,127177],{},[27,127175,127176],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[27,127178,127179],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[31,127181,127182],{},[55,127183],{"alt":57,"src":127184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[31,127186,127187],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[31,127189,127190],{},[55,127191],{"alt":57,"src":127192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[190,127194,127196],{"className":123075,"code":127195,"language":123077,"meta":123078,"style":57},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[196,127197,127198,127203],{"__ignoreMap":57},[199,127199,127200],{"class":201,"line":202},[199,127201,127202],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[199,127204,127205],{"class":201,"line":36},[199,127206,127207],{},".\u002Fpycharm.sh\n",[31,127209,127210],{},"3️⃣创建.desktop文件",[31,127212,127213],{},[49,127214,127215],{},"原理：",[176,127217,127218,127228],{},[27,127219,127220,127221,127227],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[49,127222,127223,127226],{},[196,127224,127225],{},".desktop"," 文件"," 来识别应用。",[27,127229,127230,127232,127233],{},[196,127231,127225],{}," 文件相当于一个“应用注册表”，告诉系统：",[176,127234,127235,127238,127241,127244,127247],{},[27,127236,127237],{},"应用名字（Name）",[27,127239,127240],{},"图标（Icon）",[27,127242,127243],{},"执行命令（Exec）",[27,127245,127246],{},"分类（Categories）",[27,127248,127249],{},"是否需要终端（Terminal）",[190,127251,127253],{"className":123075,"code":127252,"language":123077,"meta":123078,"style":57},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[196,127254,127255,127260],{"__ignoreMap":57},[199,127256,127257],{"class":201,"line":202},[199,127258,127259],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[199,127261,127262],{"class":201,"line":36},[199,127263,127264],{},"nano pycharm.desktop\n",[31,127266,127267],{},"nano是一个命令行下的编辑器，也可以使用vim",[190,127269,127271],{"className":123075,"code":127270,"language":123077,"meta":123078,"style":57},"[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",[196,127272,127273,127278,127283,127288,127293,127298,127303,127308,127313,127318],{"__ignoreMap":57},[199,127274,127275],{"class":201,"line":202},[199,127276,127277],{},"[Desktop Entry]\n",[199,127279,127280],{"class":201,"line":36},[199,127281,127282],{},"Version=1.0\n",[199,127284,127285],{"class":201,"line":73},[199,127286,127287],{},"Type=Application\n",[199,127289,127290],{"class":201,"line":333},[199,127291,127292],{},"Name=PyCharm\n",[199,127294,127295],{"class":201,"line":227},[199,127296,127297],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[199,127299,127300],{"class":201,"line":238},[199,127301,127302],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[199,127304,127305],{"class":201,"line":252},[199,127306,127307],{},"Comment=JetBrains PyCharm IDE\n",[199,127309,127310],{"class":201,"line":388},[199,127311,127312],{},"Categories=Development;IDE;\n",[199,127314,127315],{"class":201,"line":415},[199,127316,127317],{},"Terminal=false\n",[199,127319,127320],{"class":201,"line":426},[199,127321,127322],{},"StartupWMClass=jetbrains-pycharm\n",[176,127324,127325,127331,127337,127343],{},[27,127326,127327,127330],{},[196,127328,127329],{},"Exec"," → 点击图标时执行的命令",[27,127332,127333,127336],{},[196,127334,127335],{},"Icon"," → 显示在菜单和桌面上的图标",[27,127338,127339,127342],{},[196,127340,127341],{},"Terminal=false"," → 不打开终端",[27,127344,127345,127348],{},[196,127346,127347],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127350,127351,127352],"blockquote",{},[31,127353,127354,127355,127357,127358],{},"可以理解成 ",[196,127356,127225],{}," 文件是 Linux 的 ",[49,127359,127360],{},"快捷方式配置文件",[31,127362,127363],{},"4️⃣设置可执行权限",[190,127365,127367],{"className":123075,"code":127366,"language":123077,"meta":123078,"style":57},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[196,127368,127369],{"__ignoreMap":57},[199,127370,127371],{"class":201,"line":202},[199,127372,127366],{},[31,127374,127375],{},"5️⃣桌面图标启动的话如下：",[190,127377,127379],{"className":123075,"code":127378,"language":123077,"meta":123078,"style":57},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[196,127380,127381,127386],{"__ignoreMap":57},[199,127382,127383],{"class":201,"line":202},[199,127384,127385],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[199,127387,127388],{"class":201,"line":36},[199,127389,127390],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[24,127392,127393],{"start":73},[27,127394,127395],{},"下载Appimage文件实现软件的安装",[31,127397,127398],{},"1️⃣先下载appimage",[31,127400,127401],{},[2867,127402,127403],{"href":127403,"rel":127404},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[2871],[31,127406,127407],{},[55,127408],{"alt":57,"src":127409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[31,127411,127412],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[31,127414,127415],{},[55,127416],{"alt":57,"src":127417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[31,127419,127420],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[31,127422,127423],{},[55,127424],{"alt":57,"src":127425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[31,127427,127428],{},[55,127429],{"alt":57,"src":127430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[31,127432,127433,127434,127437],{},"3️⃣给他们放在",[196,127435,127436],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[31,127439,127440],{},"4️⃣给软件执行权限",[190,127442,127444],{"className":123075,"code":127443,"language":123077,"meta":123078,"style":57},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[196,127445,127446,127451],{"__ignoreMap":57},[199,127447,127448],{"class":201,"line":202},[199,127449,127450],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[199,127452,127453],{"class":201,"line":36},[199,127454,127455],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[31,127457,127458],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[190,127460,127462],{"className":119555,"code":127461,"language":119557,"meta":57,"style":57},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[196,127463,127464,127471,127478,127484],{"__ignoreMap":57},[199,127465,127466,127468],{"class":201,"line":202},[199,127467,103535],{"class":1018},[199,127469,127470],{"class":898}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[199,127472,127473,127475],{"class":201,"line":36},[199,127474,103542],{"class":878},[199,127476,127477],{"class":898}," .\u002Fqqmusic.desktop\n",[199,127479,127480,127482],{"class":201,"line":73},[199,127481,126526],{"class":878},[199,127483,127477],{"class":898},[199,127485,127486,127488,127490,127492],{"class":201,"line":333},[199,127487,27420],{"class":878},[199,127489,27423],{"class":898},[199,127491,125392],{"class":898},[199,127493,127477],{"class":898},[31,127495,127496,127498],{},[196,127497,103542],{},"：一个 Linux 命令，主要功能是：",[176,127500,127501,127504],{},[27,127502,127503],{},"如果文件不存在，就创建一个新的空文件",[27,127505,127506],{},"如果文件已存在，就更新该文件的最后修改时间",[190,127508,127510],{"className":123075,"code":127509,"language":123077,"meta":123078,"style":57},"[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",[196,127511,127512,127516,127521,127526,127531,127535,127540],{"__ignoreMap":57},[199,127513,127514],{"class":201,"line":202},[199,127515,127277],{},[199,127517,127518],{"class":201,"line":36},[199,127519,127520],{},"Name=QQ音乐\n",[199,127522,127523],{"class":201,"line":73},[199,127524,127525],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[199,127527,127528],{"class":201,"line":333},[199,127529,127530],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[199,127532,127533],{"class":201,"line":227},[199,127534,127287],{},[199,127536,127537],{"class":201,"line":238},[199,127538,127539],{},"Categories=Audio;Music;Player;\n",[199,127541,127542],{"class":201,"line":252},[199,127543,127544],{},"Comment=QQ Music Client for Linux\n",[31,127546,127547],{},"将文件复制进去",[31,127549,127550],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[31,127552,127553],{},[55,127554],{"alt":57,"src":127555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[31,127557,127558],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[31,127560,127561],{},[55,127562],{"alt":57,"src":127563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[31,127565,127566,127567,127570,127571,127574],{},"如果你用的不是KDE，那么也可以直接修改",[196,127568,127569],{},"qqmuic.desktop","：在exec的末尾加上",[196,127572,127573],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[190,127576,127578],{"className":123075,"code":127577,"language":123077,"meta":123078,"style":57},"[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",[196,127579,127580,127584,127588,127593,127597,127601,127605],{"__ignoreMap":57},[199,127581,127582],{"class":201,"line":202},[199,127583,127277],{},[199,127585,127586],{"class":201,"line":36},[199,127587,127520],{},[199,127589,127590],{"class":201,"line":73},[199,127591,127592],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[199,127594,127595],{"class":201,"line":333},[199,127596,127530],{},[199,127598,127599],{"class":201,"line":227},[199,127600,127287],{},[199,127602,127603],{"class":201,"line":238},[199,127604,127539],{},[199,127606,127607],{"class":201,"line":252},[199,127608,127544],{},[31,127610,127611],{},[55,127612],{"alt":57,"src":127613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[31,127615,127616],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[190,127618,127620],{"className":123075,"code":127619,"language":123077,"meta":123078,"style":57},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[196,127621,127622],{"__ignoreMap":57},[199,127623,127624],{"class":201,"line":202},[199,127625,127619],{},[24,127627,127628],{"start":333},[27,127629,127630],{},"去Flathub上安装软件",[31,127632,127633],{},[2867,127634,127635],{"href":127635,"rel":127636},"https:\u002F\u002Fflathub.org\u002F",[2871],[31,127638,127639],{},"1️⃣去上面的官网搜索软件+下载软件",[31,127641,127642],{},[55,127643],{"alt":57,"src":127644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[190,127646,127648],{"className":123075,"code":127647,"language":123077,"meta":123078,"style":57},"flatpak install flathub com.obsproject.Studio\n",[196,127649,127650],{"__ignoreMap":57},[199,127651,127652],{"class":201,"line":202},[199,127653,127647],{},[31,127655,127656],{},[55,127657],{"alt":57,"src":127658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[31,127660,127661],{},"2️⃣运行软件",[31,127663,127664],{},"a.官方方式：",[31,127666,127667],{},[55,127668],{"alt":57,"src":127669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[190,127671,127672],{"className":123075,"code":127647,"language":123077,"meta":123078,"style":57},[196,127673,127674],{"__ignoreMap":57},[199,127675,127676],{"class":201,"line":202},[199,127677,127647],{},[31,127679,127680],{},"b.当普通软件运行：",[31,127682,127683],{},[55,127684],{"alt":57,"src":127685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[31,127687,127688],{},[55,127689],{"alt":57,"src":127690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1002,127692,127693],{},"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":57,"searchDepth":36,"depth":36,"links":127695},[127696,127697,127702,127703,127709,127710],{"id":124428,"depth":36,"text":124429},{"id":124770,"depth":36,"text":124771,"children":127698},[127699,127700,127701],{"id":124774,"depth":73,"text":124775},{"id":124841,"depth":73,"text":124842},{"id":125102,"depth":73,"text":125103},{"id":125255,"depth":36,"text":125256},{"id":125493,"depth":36,"text":125494,"children":127704},[127705,127706,127707,127708],{"id":125545,"depth":73,"text":125546},{"id":125831,"depth":73,"text":125832},{"id":126102,"depth":73,"text":126103},{"id":126361,"depth":73,"text":126362},{"id":126420,"depth":36,"text":126421},{"id":126721,"depth":36,"text":126722,"children":127711},[127712,127713,127714,127715,127716,127717,127718,127719],{"id":126725,"depth":73,"text":126726},{"id":126737,"depth":73,"text":126738},{"id":126949,"depth":73,"text":126950},{"id":126973,"depth":73,"text":126974},{"id":127039,"depth":73,"text":127040},{"id":127133,"depth":73,"text":127134},{"id":127140,"depth":73,"text":127141},{"id":127164,"depth":73,"text":127165},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124420,"description":3023},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127726,"title":127727,"body":127728,"description":3023,"extension":3024,"meta":127732,"navigation":906,"path":127733,"seo":127734,"stem":127735,"__hash__":127736},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127729,"toc":127730},[],{"title":57,"searchDepth":36,"depth":36,"links":127731},[],{"category":33106},"\u002Fwiki\u002F2025-01-27-linux",{"title":127727,"description":3023},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127738,"title":127739,"body":127740,"description":127744,"extension":3024,"meta":128135,"navigation":906,"path":128136,"seo":128137,"stem":128138,"__hash__":128139},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127741,"toc":128133},[127742,127745,127749,127766,127769,127822,127826,127828,127868,127877,127881,127884,128125,128130],[31,127743,127744],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127746,127748],{"id":127747},"_1ubuntu环境配置","1.Ubuntu环境配置",[24,127750,127751,127754,127757,127760,127763],{},[27,127752,127753],{},"ubuntu环境换源",[27,127755,127756],{},"安装cuda",[27,127758,127759],{},"安装miniconda",[27,127761,127762],{},"安装pytorch",[27,127764,127765],{},"安装genesis",[31,127767,127768],{},"参考链接：",[190,127770,127772],{"className":26666,"code":127771,"language":26668,"meta":57,"style":57},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[196,127773,127774],{"__ignoreMap":57},[199,127775,127776,127779,127782,127785,127787,127790,127793,127795,127798,127801,127803,127806,127809,127811,127814,127817,127819],{"class":201,"line":202},[199,127777,127778],{"class":878},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[199,127780,127781],{"class":898},"=blogdetail",[199,127783,127784],{"class":205},"&sharetype",[199,127786,895],{"class":1086},[199,127788,127789],{"class":898},"blogdetail",[199,127791,127792],{"class":205},"&sharerId",[199,127794,895],{"class":1086},[199,127796,127797],{"class":898},"144728092",[199,127799,127800],{"class":205},"&sharerefer",[199,127802,895],{"class":1086},[199,127804,127805],{"class":898},"PC",[199,127807,127808],{"class":205},"&sharesource",[199,127810,895],{"class":1086},[199,127812,127813],{"class":898},"qq_69379513",[199,127815,127816],{"class":205},"&sharefrom",[199,127818,895],{"class":1086},[199,127820,127821],{"class":898},"from_link\n",[10,127823,127825],{"id":127824},"_2genesis-报错issue","2.Genesis 报错issue",[31,127827,127768],{},[190,127829,127830],{"className":26666,"code":127771,"language":26668,"meta":57,"style":57},[196,127831,127832],{"__ignoreMap":57},[199,127833,127834,127836,127838,127840,127842,127844,127846,127848,127850,127852,127854,127856,127858,127860,127862,127864,127866],{"class":201,"line":202},[199,127835,127778],{"class":878},[199,127837,127781],{"class":898},[199,127839,127784],{"class":205},[199,127841,895],{"class":1086},[199,127843,127789],{"class":898},[199,127845,127792],{"class":205},[199,127847,895],{"class":1086},[199,127849,127797],{"class":898},[199,127851,127800],{"class":205},[199,127853,895],{"class":1086},[199,127855,127805],{"class":898},[199,127857,127808],{"class":205},[199,127859,895],{"class":1086},[199,127861,127813],{"class":898},[199,127863,127816],{"class":205},[199,127865,895],{"class":1086},[199,127867,127821],{"class":898},[190,127869,127871],{"className":26666,"code":127870,"language":26668,"meta":57,"style":57},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[196,127872,127873],{"__ignoreMap":57},[199,127874,127875],{"class":201,"line":202},[199,127876,127870],{"class":878},[10,127878,127880],{"id":127879},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[31,127882,127883],{},"hello_robot.py",[190,127885,127887],{"className":33221,"code":127886,"language":33223,"meta":57,"style":57},"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",[196,127888,127889,127895,127910,127914,127926,127938,127942,127955,127959,127978,127988,127998,128012,128016,128020,128025,128029,128039,128046,128060,128067,128077,128082,128086,128104,128109,128113,128120],{"__ignoreMap":57},[199,127890,127891,127893],{"class":201,"line":202},[199,127892,33235],{"class":1086},[199,127894,48146],{"class":205},[199,127896,127897,127900,127903,127905,127907],{"class":201,"line":36},[199,127898,127899],{"class":205},"os.environ[",[199,127901,127902],{"class":898},"'PYOPENGL_PLATFORM'",[199,127904,2078],{"class":205},[199,127906,895],{"class":1086},[199,127908,127909],{"class":898}," 'glx'\n",[199,127911,127912],{"class":201,"line":73},[199,127913,907],{"emptyLinePlaceholder":906},[199,127915,127916,127918,127921,127923],{"class":201,"line":333},[199,127917,33235],{"class":1086},[199,127919,127920],{"class":205}," genesis ",[199,127922,34225],{"class":1086},[199,127924,127925],{"class":205}," gs\n",[199,127927,127928,127930,127933,127935],{"class":201,"line":227},[199,127929,33579],{"class":1086},[199,127931,127932],{"class":205}," pynput ",[199,127934,33235],{"class":1086},[199,127936,127937],{"class":205}," keyboard\n",[199,127939,127940],{"class":201,"line":238},[199,127941,907],{"emptyLinePlaceholder":906},[199,127943,127944,127947,127950,127952],{"class":201,"line":252},[199,127945,127946],{"class":205},"gs.init(",[199,127948,127949],{"class":8113},"backend",[199,127951,895],{"class":1086},[199,127953,127954],{"class":205},"gs.gpu)\n",[199,127956,127957],{"class":201,"line":388},[199,127958,907],{"emptyLinePlaceholder":906},[199,127960,127961,127964,127966,127969,127972,127974,127976],{"class":201,"line":415},[199,127962,127963],{"class":205},"scene ",[199,127965,895],{"class":1086},[199,127967,127968],{"class":205}," gs.Scene(",[199,127970,127971],{"class":8113},"show_viewer",[199,127973,895],{"class":1086},[199,127975,34318],{"class":1018},[199,127977,1594],{"class":205},[199,127979,127980,127983,127985],{"class":201,"line":426},[199,127981,127982],{"class":205},"plane ",[199,127984,895],{"class":1086},[199,127986,127987],{"class":205}," scene.add_entity(gs.morphs.Plane())\n",[199,127989,127990,127993,127995],{"class":201,"line":1015},[199,127991,127992],{"class":205},"franka ",[199,127994,895],{"class":1086},[199,127996,127997],{"class":205}," scene.add_entity(\n",[199,127999,128000,128003,128005,128007,128010],{"class":201,"line":1031},[199,128001,128002],{"class":205},"    gs.morphs.MJCF(",[199,128004,48195],{"class":8113},[199,128006,895],{"class":1086},[199,128008,128009],{"class":898},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[199,128011,40888],{"class":205},[199,128013,128014],{"class":201,"line":1043},[199,128015,1594],{"class":205},[199,128017,128018],{"class":201,"line":1049},[199,128019,907],{"emptyLinePlaceholder":906},[199,128021,128022],{"class":201,"line":1054},[199,128023,128024],{"class":205},"scene.build()\n",[199,128026,128027],{"class":201,"line":1062},[199,128028,907],{"emptyLinePlaceholder":906},[199,128030,128031,128033,128036],{"class":201,"line":1075},[199,128032,34789],{"class":1086},[199,128034,128035],{"class":878}," on_press",[199,128037,128038],{"class":205},"(key):\n",[199,128040,128041,128044],{"class":201,"line":1092},[199,128042,128043],{"class":1086},"    try",[199,128045,6640],{"class":205},[199,128047,128048,128050,128053,128055,128058],{"class":201,"line":1107},[199,128049,2017],{"class":1086},[199,128051,128052],{"class":205}," key.char ",[199,128054,5853],{"class":1086},[199,128056,128057],{"class":898}," 'q'",[199,128059,6640],{"class":205},[199,128061,128062,128064],{"class":201,"line":1128},[199,128063,18590],{"class":1086},[199,128065,128066],{"class":1018}," False\n",[199,128068,128069,128072,128075],{"class":201,"line":1146},[199,128070,128071],{"class":1086},"    except",[199,128073,128074],{"class":1018}," AttributeError",[199,128076,6640],{"class":205},[199,128078,128079],{"class":201,"line":1163},[199,128080,128081],{"class":1086},"        pass\n",[199,128083,128084],{"class":201,"line":1176},[199,128085,907],{"emptyLinePlaceholder":906},[199,128087,128088,128091,128093,128096,128099,128101],{"class":201,"line":1189},[199,128089,128090],{"class":205},"listener ",[199,128092,895],{"class":1086},[199,128094,128095],{"class":205}," keyboard.Listener(",[199,128097,128098],{"class":8113},"on_press",[199,128100,895],{"class":1086},[199,128102,128103],{"class":205},"on_press)\n",[199,128105,128106],{"class":201,"line":1202},[199,128107,128108],{"class":205},"listener.start()\n",[199,128110,128111],{"class":201,"line":1207},[199,128112,907],{"emptyLinePlaceholder":906},[199,128114,128115,128117],{"class":201,"line":1212},[199,128116,110922],{"class":1086},[199,128118,128119],{"class":205}," listener.running:\n",[199,128121,128122],{"class":201,"line":1225},[199,128123,128124],{"class":205},"    scene.step()\n",[31,128126,128127],{},[55,128128],{"alt":57,"src":128129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1002,128131,128132],{},"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":57,"searchDepth":36,"depth":36,"links":128134},[],{"category":26222},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127739,"description":127744},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128141,"title":128142,"body":128143,"description":3023,"extension":3024,"meta":128158,"navigation":906,"path":128159,"seo":128160,"stem":128161,"__hash__":128162},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128144,"toc":128155},[128145,128148,128152],[10,128146,128142],{"id":128147},"_1-基础知识",[14,128149,128151],{"id":128150},"_11-js的组成","1.1 js的组成",[31,128153,128154],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":57,"searchDepth":36,"depth":36,"links":128156},[128157],{"id":128150,"depth":36,"text":128151},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128142,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128164,"title":128165,"body":128166,"description":3023,"extension":3024,"meta":128305,"navigation":906,"path":128306,"seo":128307,"stem":128308,"__hash__":128309},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128167,"toc":128293},[128168,128171,128175,128178,128182,128192,128196,128199,128202,128205,128209,128216,128222,128226,128232,128243,128247,128250,128254,128257,128261,128264,128268,128271,128275,128278,128281,128284,128287,128290],[10,128169,128165],{"id":128170},"_2-vscode必备内容",[14,128172,128174],{"id":128173},"_21-标签分类","2.1 标签分类",[31,128176,128177],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128179,128181],{"id":128180},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[31,128183,128184,128185,128187,128188,128191],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[196,128186,3313],{}," 然后按 ",[196,128189,128190],{},"Tab","，快速自动生成基本结构。",[14,128193,128195],{"id":128194},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[31,128197,128198],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[31,128200,128201],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[31,128203,128204],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128206,128208],{"id":128207},"_24-视图缩放","2.4 视图缩放",[31,128210,128211,128212,128215],{},"缩放视图 ",[196,128213,128214],{},"ctrl+"," 可实现代码增大。",[31,128217,128218,128221],{},[196,128219,128220],{},"ctrl-"," 可实现代码减小。",[14,128223,128225],{"id":128224},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[31,128227,128228,128229,31228],{},"VSCode 新建文件快捷键为 ",[196,128230,128231],{},"ctrl+N",[31,128233,128234,128235,128238,128239,128242],{},"保存快捷键为 ",[196,128236,128237],{},"ctrl+S","，将文本保存为 ",[196,128240,128241],{},".html"," 文件。",[14,128244,128246],{"id":128245},"_26-auto-rename-tag","2.6 Auto Rename Tag",[31,128248,128249],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128251,128253],{"id":128252},"_27-vscode-icons","2.7 vscode-icons",[31,128255,128256],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128258,128260],{"id":128259},"_28-easy-less","2.8 Easy LESS",[31,128262,128263],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128265,128267],{"id":128266},"_29-会了吧插件","2.9 会了吧插件",[31,128269,128270],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128272,128274],{"id":128273},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[31,128276,128277],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[31,128279,128280],{},"②选定多个相同的单词:ctrl+D",[31,128282,128283],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[31,128285,128286],{},"④全局替换某些单词:ctrl+h",[31,128288,128289],{},"⑤快速定位到某一行:ctrl+g",[31,128291,128292],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":57,"searchDepth":36,"depth":36,"links":128294},[128295,128296,128297,128298,128299,128300,128301,128302,128303,128304],{"id":128173,"depth":36,"text":128174},{"id":128180,"depth":36,"text":128181},{"id":128194,"depth":36,"text":128195},{"id":128207,"depth":36,"text":128208},{"id":128224,"depth":36,"text":128225},{"id":128245,"depth":36,"text":128246},{"id":128252,"depth":36,"text":128253},{"id":128259,"depth":36,"text":128260},{"id":128266,"depth":36,"text":128267},{"id":128273,"depth":36,"text":128274},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128165,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128311,"title":128312,"body":128313,"description":3023,"extension":3024,"meta":128472,"navigation":906,"path":128473,"seo":128474,"stem":128475,"__hash__":128476},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128314,"toc":128464},[128315,128318,128322,128332,128338,128344,128348,128357,128361,128366,128369,128372,128376,128379,128389,128398,128407,128416,128426,128433,128438,128443,128456],[10,128316,128312],{"id":128317},"_3-html文本与容器标签",[14,128319,128321],{"id":128320},"_31-标题标签","3.1 标题标签",[31,128323,128324,128327,128328,128331],{},[196,128325,128326],{},"\u003Ch1>","我是一级标签",[196,128329,128330],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[31,128333,128334,128327,128336],{},[196,128335,128326],{},[196,128337,128330],{},[31,128339,125594,128340,128343],{},[196,128341,128342],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128345,128347],{"id":128346},"_32-段落标签","3.2 段落标签",[31,128349,128350,128353,128354],{},[196,128351,128352],{},"\u003Cp>","....",[196,128355,128356],{},"\u003C\u002Fp>",[14,128358,128360],{"id":128359},"_33-换行标签","3.3 换行标签",[31,128362,128363],{},[196,128364,128365],{},"\u003Cbr \u002F>",[31,128367,128368],{},"具有强制换行的作用",[31,128370,128371],{},"单标签",[14,128373,128375],{"id":128374},"_34-文本格式化标签","3.4 文本格式化标签",[31,128377,128378],{},"提供粗体、斜体和下划线等效果",[31,128380,128381,128382,84798,128385,128388],{},"加粗：",[196,128383,128384],{},"\u003Cstrong>...\u003C\u002Fstrong>",[196,128386,128387],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[31,128390,128391,128392,84798,128395,128388],{},"斜体：",[196,128393,128394],{},"\u003Cem>...\u003C\u002Fem>",[196,128396,128397],{},"\u003Ci>...\u003C\u002Fi>",[31,128399,128400,128401,84798,128404,128388],{},"删除线：",[196,128402,128403],{},"\u003Cdel>...\u003C\u002Fdel>",[196,128405,128406],{},"\u003Cs>...\u003C\u002Fs>",[31,128408,128409,128410,84798,128413,128388],{},"下划线：",[196,128411,128412],{},"\u003Cins>...\u003C\u002Fins>",[196,128414,128415],{},"\u003Cu>...\u003C\u002Fu>",[14,128417,128419,128420,21255,128423,104952],{"id":128418},"_35-div和span标签","3.5 ",[196,128421,128422],{},"\u003Cdiv>",[196,128424,128425],{},"\u003Cspan>",[31,128427,128428,103277,128430,128432],{},[196,128429,128422],{},[196,128431,128425],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[31,128434,128435],{},[196,128436,128437],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[31,128439,128440],{},[196,128441,128442],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[31,128444,128445,128446,128448,128449,128451,128452,128455],{},"两者特点：①",[196,128447,128422],{}," 标签用来布局，但一行通常只放一个 ",[196,128450,128422],{},"。可以理解为一个大盒子，独占一行，在 ",[196,128453,128454],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[31,128457,79508,128458,128460,128461,128463],{},[196,128459,128425],{}," 标签也可用于布局，一行可以放多个 ",[196,128462,128425],{},"，可理解为小盒子。",{"title":57,"searchDepth":36,"depth":36,"links":128465},[128466,128467,128468,128469,128470],{"id":128320,"depth":36,"text":128321},{"id":128346,"depth":36,"text":128347},{"id":128359,"depth":36,"text":128360},{"id":128374,"depth":36,"text":128375},{"id":128418,"depth":36,"text":128471},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128312,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128478,"title":128479,"body":128480,"description":3023,"extension":3024,"meta":128677,"navigation":906,"path":128678,"seo":128679,"stem":128680,"__hash__":128681},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128481,"toc":128669},[128482,128485,128489,128492,128498,128505,128511,128517,128520,128523,128526,128529,128532,128535,128538,128542,128545,128548,128551,128557,128563,128569,128576,128580,128586,128592,128595,128598,128604,128610,128616,128619,128622,128626,128629,128639,128645,128649,128658,128662,128665],[10,128483,128479],{"id":128484},"_4-html图像与链接",[14,128486,128488],{"id":128487},"_41-图像标签","4.1 图像标签",[31,128490,128491],{},"（1）标签",[31,128493,128494,128497],{},[196,128495,128496],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[31,128499,128500,128501,128504],{},"src是",[196,128502,128503],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[31,128506,128507,128508],{},"alt:文本，替换文本。图像不能显示的文字 ",[196,128509,128510],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[31,128512,128513,128514],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[196,128515,128516],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[31,128518,128519],{},"width:像素，设置图像的宽度",[31,128521,128522],{},"height:像素，设置图像的高度",[31,128524,128525],{},"border：像素，设置图像的边框粗细",[31,128527,128528],{},"（2）图像标签属性的注意点：",[31,128530,128531],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[31,128533,128534],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[31,128536,128537],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128539,128541],{"id":128540},"_42-路径注意要点","4.2 路径注意要点：",[31,128543,128544],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[31,128546,128547],{},"（2）根目录：就是打开文件夹的第一层根目录",[31,128549,128550],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[31,128552,128553,128554],{},"①同一级路径：图像文件位于HTML文件同一级，如",[196,128555,128556],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[31,128558,128559,128560],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[196,128561,128562],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[31,128564,128565,128566],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[196,128567,128568],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[31,128570,128571,128572,3337],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2867,128573,128574],{"href":128574,"rel":128575},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[2871],[14,128577,128579],{"id":128578},"_43-超链接标签","4.3 超链接标签",[31,128581,128582,128585],{},[196,128583,128584],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[31,128587,128588,128589],{},"①语法格式：",[196,128590,128591],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[31,128593,128594],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[31,128596,128597],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[31,128599,128600,128601],{},"③链接分类：外部链接：",[196,128602,128603],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[31,128605,128606,128607],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[196,128608,128609],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[31,128611,128612,128613],{},"空链接：如果当时没有确定链接目标时，",[196,128614,128615],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[31,128617,128618],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[31,128620,128621],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128623,128625],{"id":128624},"_44-锚点链接","4.4 锚点链接",[31,128627,128628],{},"点我们点击链接，可以快速定位到页面中的某个位置",[31,128630,128631,128632,128635,128636],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[196,128633,128634],{},"\u003Ca href=\"#two\">","第二级",[196,128637,128638],{},"\u003C\u002Fa>",[31,128640,128641,128642],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[196,128643,128644],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128646,128648],{"id":128647},"_45-注释标签","4.5 注释标签",[31,128650,128651,128654,128655],{},[196,128652,128653],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[196,128656,128657],{},"ctrl+\u002F",[14,128659,128661],{"id":128660},"_46-特殊字符","4.6 特殊字符",[31,128663,128664],{},"可以实现添加多个空格",[55,128666],{"style":128667,"src":128668},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":57,"searchDepth":36,"depth":36,"links":128670},[128671,128672,128673,128674,128675,128676],{"id":128487,"depth":36,"text":128488},{"id":128540,"depth":36,"text":128541},{"id":128578,"depth":36,"text":128579},{"id":128624,"depth":36,"text":128625},{"id":128647,"depth":36,"text":128648},{"id":128660,"depth":36,"text":128661},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128479,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128683,"title":128684,"body":128685,"description":3023,"extension":3024,"meta":128978,"navigation":906,"path":128979,"seo":128980,"stem":128981,"__hash__":128982},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128686,"toc":128969},[128687,128690,128694,128697,128700,128703,128706,128709,128712,128715,128718,128721,128741,128747,128751,128754,128757,128760,128763,128766,128769,128773,128776,128779,128782,128785,128798,128803,128806,128809,128824,128827,128830,128833,128836,128839,128843,128846,128853,128856,128859,128862,128865,128868,128874,128877,128880,128886,128889,128892,128895,128901,128904,128907,128921,128928,128931,128934,128941,128950,128953,128956,128959,128963,128966],[10,128688,128684],{"id":128689},"_5-html表格列表与表单",[14,128691,128693],{"id":128692},"_51-表格标签","5.1 表格标签",[31,128695,128696],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[31,128698,128699],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[31,128701,128702],{},"②表格基本语法：",[55,128704],{"style":128667,"src":128705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[31,128707,128708],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[55,128710],{"style":128667,"src":128711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[31,128713,128714],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[55,128716],{"style":128667,"src":128717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[31,128719,128720],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[31,128722,128723,128726,128727,128729,128730,128733,128734,128736,128737,128740],{},[196,128724,128725],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[196,128728,128725],{},"内部必须拥有",[196,128731,128732],{},"\u003Ctr>","标签，一般位于第一行，",[196,128735,128725],{},"比",[196,128738,128739],{},"\u003Cth>","范围广",[31,128742,128743,128746],{},[196,128744,128745],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128748,128750],{"id":128749},"_52-合并单元格","5.2 合并单元格",[31,128752,128753],{},"（1）合并单元格方式：",[31,128755,128756],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[31,128758,128759],{},"②跨列合并：colspan=\"合并单元格的个数\"",[31,128761,128762],{},"（2）目标单元格：",[31,128764,128765],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[31,128767,128768],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128770,128772],{"id":128771},"_53-列表标签","5.3 列表标签",[31,128774,128775],{},"（1）分类：无序列表、有序列表、自定义列表",[31,128777,128778],{},"①无序列表：",[55,128780],{"style":128667,"src":128781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[31,128783,128784],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[31,128786,128787,128790,128791,128794,128795,128797],{},[196,128788,128789],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[196,128792,128793],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[196,128796,128789],{},"中输入其他标签或文字是不对的",[31,128799,128800,128802],{},[196,128801,128793],{},"之间相当于一个容器，可以容纳所有元素",[31,128804,128805],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[31,128807,128808],{},"在css中去除前边的小圆点采用如下代码:",[190,128810,128814],{"className":128811,"code":128812,"language":128813,"meta":57,"style":57},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[196,128815,128816],{"__ignoreMap":57},[199,128817,128818,128821],{"class":201,"line":202},[199,128819,128820],{"class":874},"list-style",[199,128822,128823],{"class":205},": none;\n",[31,128825,128826],{},"②有序列表：",[55,128828],{"style":128667,"src":128829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[31,128831,128832],{},"③自定义列表：",[55,128834],{"style":128667,"src":128835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[55,128837],{"style":128667,"src":128838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128840,128842],{"id":128841},"_54-表单标签","5.4 表单标签",[31,128844,128845],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[31,128847,128848,128849,128852],{},"（1）表单域：包含单元素的区域，",[196,128850,128851],{},"\u003Cform>","标签可以实现信息的收集和传递。",[55,128854],{"style":128667,"src":128855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[31,128857,128858],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[31,128860,128861],{},"表单元素提交必须有name属性",[31,128863,128864],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[31,128866,128867],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[31,128869,79485,128870,128873],{},[196,128871,128872],{},"\u003Cinput>","输入表单元素",[55,128875],{"style":128667,"src":128876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[55,128878],{"style":128667,"src":128879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[31,128881,128882,128883],{},"单选按钮：",[196,128884,128885],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[55,128887],{"style":128667,"src":128888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[31,128890,128891],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[55,128893],{"style":128667,"src":128894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[31,128896,128897,128900],{},[49,128898,128899],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[31,128902,128903],{},"②select下拉表单元素：可以节约页面控件",[55,128905],{"style":128667,"src":128906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[31,128908,128909,16656,128911,128914,128915,128917,128918,128920],{},[49,128910,3125],{},[196,128912,128913],{},"\u003Cselect>","中至少包含一对",[196,128916,104973],{},"；在",[196,128919,104973],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[31,128922,128923,128924,128927],{},"③",[196,128925,128926],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[55,128929],{"style":128667,"src":128930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[31,128932,128933],{},"3行20列",[14,128935,128937,128938,104952],{"id":128936},"_55-lable标签","5.5 ",[196,128939,128940],{},"\u003Clable>",[31,128942,128943,128944,128946,128947,128949],{},"它不是表单标签，但常常与表单标签搭配使用，",[196,128945,128940],{},"标签用于绑定一个表单标签，当点击",[196,128948,128940],{},"标签内的文本",[31,128951,128952],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[55,128954],{"style":128667,"src":128955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[55,128957],{"style":128667,"src":128958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128960,128962],{"id":128961},"_56-实例","5.6 实例",[55,128964],{"style":128667,"src":128965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1002,128967,128968],{},"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":57,"searchDepth":36,"depth":36,"links":128970},[128971,128972,128973,128974,128975,128977],{"id":128692,"depth":36,"text":128693},{"id":128749,"depth":36,"text":128750},{"id":128771,"depth":36,"text":128772},{"id":128841,"depth":36,"text":128842},{"id":128936,"depth":36,"text":128976},"5.5 \u003Clable>标签",{"id":128961,"depth":36,"text":128962},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128684,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128984,"title":128985,"body":128986,"description":3023,"extension":3024,"meta":129535,"navigation":906,"path":129536,"seo":129537,"stem":129538,"__hash__":129539},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128987,"toc":129510},[128988,128991,128995,128998,129001,129005,129008,129011,129014,129017,129020,129023,129026,129030,129033,129037,129040,129043,129046,129050,129053,129056,129059,129065,129068,129071,129074,129077,129080,129083,129086,129119,129123,129126,129129,129132,129136,129139,129142,129145,129148,129151,129155,129158,129161,129164,129168,129171,129175,129178,129182,129185,129190,129194,129197,129201,129204,129207,129210,129213,129240,129243,129247,129250,129253,129258,129261,129264,129268,129271,129276,129279,129282,129285,129289,129292,129295,129298,129302,129305,129308,129311,129315,129319,129322,129362,129365,129369,129376,129379,129383,129386,129432,129436,129439,129442,129445,129473,129477,129480,129507],[10,128989,128985],{"id":128990},"_6-css语法与文本样式",[14,128992,128994],{"id":128993},"_61-css语法规范","6.1 css语法规范",[31,128996,128997],{},"由两部分组成，选择器及一条或多条声明",[55,128999],{"style":128667,"src":129000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[31,129002,129003],{},[49,129004,3125],{},[31,129006,129007],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[31,129009,129010],{},"②属性与属性值以“键值对”的形式出现",[31,129012,129013],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[31,129015,129016],{},"④属性和属性值之间用英文“;”分开",[55,129018],{"style":128667,"src":129019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[55,129021],{"style":128667,"src":129022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[55,129024],{"style":128667,"src":129025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,129027,129029],{"id":129028},"_62-css选择器","6.2 css选择器",[31,129031,129032],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[19,129034,129036],{"id":129035},"_621-标签选择器","6.2.1 标签选择器",[31,129038,129039],{},"①优点：能快速为页面中同类型的标签统一设置样式",[31,129041,129042],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[55,129044],{"style":128667,"src":129045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[19,129047,129049],{"id":129048},"_622-类选择器","6.2.2 类选择器",[31,129051,129052],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[31,129054,129055],{},"②样例",[55,129057],{"style":128667,"src":129058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[31,129060,129061,129062,129064],{},"③ ",[49,129063,128899],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[31,129066,129067],{},"可以理解为给这个标签起了个名字，来表示；",[31,129069,129070],{},"长名称或词组可以使用横线来为选择器命名；",[31,129072,129073],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[31,129075,129076],{},"命名要有意义；",[55,129078],{"style":128667,"src":129079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[31,129081,129082],{},"类选择器也可以指定特殊的元素p.center{}",[31,129084,129085],{},"p.center和.center都对",[190,129087,129089],{"className":128811,"code":129088,"language":128813,"meta":57,"style":57},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[196,129090,129091,129096,129105,129115],{"__ignoreMap":57},[199,129092,129093],{"class":201,"line":202},[199,129094,129095],{"class":1454},"\u002F* 类选择器指定特殊元素 *\u002F\n",[199,129097,129098,129100,129103],{"class":201,"line":36},[199,129099,31],{"class":874},[199,129101,129102],{"class":878},".center",[199,129104,1012],{"class":205},[199,129106,129107,129109,129111,129113],{"class":201,"line":73},[199,129108,72785],{"class":1018},[199,129110,1022],{"class":205},[199,129112,1197],{"class":1018},[199,129114,1028],{"class":205},[199,129116,129117],{"class":201,"line":333},[199,129118,671],{"class":205},[19,129120,129122],{"id":129121},"_623-多类名使用","6.2.3 多类名使用",[31,129124,129125],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[55,129127],{"style":128667,"src":129128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[31,129130,129131],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[19,129133,129135],{"id":129134},"_624-id选择器","6.2.4 id选择器",[31,129137,129138],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[31,129140,129141],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[55,129143],{"style":128667,"src":129144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[31,129146,129147],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[31,129149,129150],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[19,129152,129154],{"id":129153},"_625-通配符选择器","6.2.5 通配符选择器",[31,129156,129157],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[31,129159,129160],{},"* {",[31,129162,129163],{},"color=\"red\"}",[19,129165,129167],{"id":129166},"_626-总结","6.2.6 总结",[55,129169],{"style":128667,"src":129170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129172,129174],{"id":129173},"_63-css字体属性","6.3 css字体属性",[31,129176,129177],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[19,129179,129181],{"id":129180},"_631-字体系列","6.3.1 字体系列",[31,129183,129184],{},"font-family: '宋体';",[31,129186,129187,129189],{},[49,129188,3125],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[19,129191,129193],{"id":129192},"_632-字体大小","6.3.2 字体大小",[31,129195,129196],{},"font-size: 20px",[31,129198,129199,29316],{},[49,129200,128899],{},[31,129202,129203],{},"①px（像素）大小是网页的最常用单位",[31,129205,129206],{},"②谷歌浏览器默认为16px",[31,129208,129209],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[31,129211,129212],{},"④可以给body指定整个页面的大小：会自动引用",[190,129214,129216],{"className":128811,"code":129215,"language":128813,"meta":57,"style":57},"body {\n  font-size: 16px;\n}\n",[196,129217,129218,129224,129236],{"__ignoreMap":57},[199,129219,129220,129222],{"class":201,"line":202},[199,129221,1431],{"class":874},[199,129223,1012],{"class":205},[199,129225,129226,129228,129230,129232,129234],{"class":201,"line":36},[199,129227,72885],{"class":1018},[199,129229,1022],{"class":205},[199,129231,3681],{"class":1018},[199,129233,1087],{"class":1086},[199,129235,1028],{"class":205},[199,129237,129238],{"class":201,"line":73},[199,129239,671],{"class":205},[31,129241,129242],{},"⑤标题标签比较特殊，需要单独指定大小",[19,129244,129246],{"id":129245},"_633-字体粗细","6.3.3 字体粗细",[31,129248,129249],{},"font-weight: bold;",[31,129251,129252],{},"font-weight: 100；",[31,129254,129255,129257],{},[49,129256,3125],{}," ①粗体文字变细：尽量别用normal，多用数字",[31,129259,129260],{},"font-weight= 400;",[31,129262,129263],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[19,129265,129267],{"id":129266},"_634-文字样式","6.3.4 文字样式",[31,129269,129270],{},"font-style: normal；",[31,129272,129273,29316],{},[49,129274,129275],{},"属性值",[31,129277,129278],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[31,129280,129281],{},"②italic：浏览器会显示斜体的字体样式",[55,129283],{"style":128667,"src":129284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[19,129286,129288],{"id":129287},"_635-字体符合属性","6.3.5 字体符合属性",[55,129290],{"style":128667,"src":129291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[55,129293],{"style":128667,"src":129294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[31,129296,129297],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[31,129299,129300,29316],{},[49,129301,128899],{},[31,129303,129304],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[31,129306,129307],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[31,129309,129310],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129312,129314],{"id":129313},"_64-css-test文本属性","6.4 css test文本属性",[19,129316,129318],{"id":129317},"_641-文本颜色","6.4.1 文本颜色",[31,129320,129321],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[190,129323,129325],{"className":128811,"code":129324,"language":128813,"meta":57,"style":57},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[196,129326,129327,129332,129338,129348,129353,129358],{"__ignoreMap":57},[199,129328,129329],{"class":201,"line":202},[199,129330,129331],{"class":1454},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[199,129333,129334,129336],{"class":201,"line":36},[199,129335,31],{"class":874},[199,129337,1012],{"class":205},[199,129339,129340,129342,129344,129346],{"class":201,"line":73},[199,129341,73164],{"class":1018},[199,129343,1022],{"class":205},[199,129345,59680],{"class":1018},[199,129347,1028],{"class":205},[199,129349,129350],{"class":201,"line":333},[199,129351,129352],{"class":1454},"  \u002F* color: #ff0000; *\u002F\n",[199,129354,129355],{"class":201,"line":227},[199,129356,129357],{"class":1454},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[199,129359,129360],{"class":201,"line":238},[199,129361,671],{"class":205},[55,129363],{"style":128667,"src":129364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[19,129366,129368],{"id":129367},"_642-对齐文本","6.4.2 对齐文本",[31,129370,129371,129372,129375],{},"text-align属于用于设置元素内文本内容的 ",[49,129373,129374],{},"水平对齐"," 方式",[31,129377,129378],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[19,129380,129382],{"id":129381},"_643-装饰文本","6.4.3 装饰文本",[31,129384,129385],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[190,129387,129389],{"className":128811,"code":129388,"language":128813,"meta":57,"style":57},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[196,129390,129391,129397,129407,129411,129417,129428],{"__ignoreMap":57},[199,129392,129393,129395],{"class":201,"line":202},[199,129394,2867],{"class":874},[199,129396,1012],{"class":205},[199,129398,129399,129401,129403,129405],{"class":201,"line":36},[199,129400,72761],{"class":1018},[199,129402,1022],{"class":205},[199,129404,56996],{"class":1018},[199,129406,1028],{"class":205},[199,129408,129409],{"class":201,"line":73},[199,129410,671],{"class":205},[199,129412,129413,129415],{"class":201,"line":333},[199,129414,31],{"class":874},[199,129416,1012],{"class":205},[199,129418,129419,129421,129423,129426],{"class":201,"line":227},[199,129420,72761],{"class":1018},[199,129422,1022],{"class":205},[199,129424,129425],{"class":1018},"underline",[199,129427,1028],{"class":205},[199,129429,129430],{"class":201,"line":238},[199,129431,671],{"class":205},[19,129433,129435],{"id":129434},"_644-文本缩进","6.4.4 文本缩进",[31,129437,129438],{},"实现文本的第一行首行缩进自己指定的距离",[31,129440,129441],{},"20px往右边走；-20px往左边走",[31,129443,129444],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[190,129446,129448],{"className":128811,"code":129447,"language":128813,"meta":57,"style":57},"p {\n  text-indent: 2em;\n}\n",[196,129449,129450,129456,129469],{"__ignoreMap":57},[199,129451,129452,129454],{"class":201,"line":202},[199,129453,31],{"class":874},[199,129455,1012],{"class":205},[199,129457,129458,129461,129463,129465,129467],{"class":201,"line":36},[199,129459,129460],{"class":1018},"  text-indent",[199,129462,1022],{"class":205},[199,129464,1925],{"class":1018},[199,129466,26397],{"class":1086},[199,129468,1028],{"class":205},[199,129470,129471],{"class":201,"line":73},[199,129472,671],{"class":205},[19,129474,129476],{"id":129475},"_645-行间距","6.4.5 行间距",[31,129478,129479],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[190,129481,129483],{"className":128811,"code":129482,"language":128813,"meta":57,"style":57},"p {\n  line-height: 1.6;\n}\n",[196,129484,129485,129491,129503],{"__ignoreMap":57},[199,129486,129487,129489],{"class":201,"line":202},[199,129488,31],{"class":874},[199,129490,1012],{"class":205},[199,129492,129493,129496,129498,129501],{"class":201,"line":36},[199,129494,129495],{"class":1018},"  line-height",[199,129497,1022],{"class":205},[199,129499,129500],{"class":1018},"1.6",[199,129502,1028],{"class":205},[199,129504,129505],{"class":201,"line":73},[199,129506,671],{"class":205},[1002,129508,129509],{},"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":57,"searchDepth":36,"depth":36,"links":129511},[129512,129513,129521,129528],{"id":128993,"depth":36,"text":128994},{"id":129028,"depth":36,"text":129029,"children":129514},[129515,129516,129517,129518,129519,129520],{"id":129035,"depth":73,"text":129036},{"id":129048,"depth":73,"text":129049},{"id":129121,"depth":73,"text":129122},{"id":129134,"depth":73,"text":129135},{"id":129153,"depth":73,"text":129154},{"id":129166,"depth":73,"text":129167},{"id":129173,"depth":36,"text":129174,"children":129522},[129523,129524,129525,129526,129527],{"id":129180,"depth":73,"text":129181},{"id":129192,"depth":73,"text":129193},{"id":129245,"depth":73,"text":129246},{"id":129266,"depth":73,"text":129267},{"id":129287,"depth":73,"text":129288},{"id":129313,"depth":36,"text":129314,"children":129529},[129530,129531,129532,129533,129534],{"id":129317,"depth":73,"text":129318},{"id":129367,"depth":73,"text":129368},{"id":129381,"depth":73,"text":129382},{"id":129434,"depth":73,"text":129435},{"id":129475,"depth":73,"text":129476},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128985,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129541,"title":129542,"body":129543,"description":3023,"extension":3024,"meta":130192,"navigation":906,"path":130193,"seo":130194,"stem":130195,"__hash__":130196},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129544,"toc":130173},[129545,129548,129552,129556,129616,129620,129630,129633,129636,129640,129665,129669,129672,129675,129678,129681,129684,129688,129691,129694,129736,129739,129765,129771,129774,129778,129782,129788,129791,129794,129797,129800,129803,129806,129851,129855,129858,129861,129865,129869,129898,129901,129906,129909,129912,129915,129918,129922,129926,129929,129931,129934,129938,129941,129945,129948,129951,129954,129958,129962,129968,129978,129981,129984,129987,129990,129993,130116,130124,130132,130170],[10,129546,129542],{"id":129547},"_7-css引入方式与选择器进阶",[14,129549,129551],{"id":129550},"_71-css引入方式","7.1 css引入方式",[19,129553,129555],{"id":129554},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[190,129557,129561],{"className":129558,"code":129559,"language":129560,"meta":57,"style":57},"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",[196,129562,129563,129571,129578,129590,129603,129608],{"__ignoreMap":57},[199,129564,129565,129567,129569],{"class":201,"line":202},[199,129566,887],{"class":205},[199,129568,1002],{"class":874},[199,129570,882],{"class":205},[199,129572,129573,129576],{"class":201,"line":36},[199,129574,129575],{"class":874},"  h1",[199,129577,1012],{"class":205},[199,129579,129580,129583,129585,129588],{"class":201,"line":73},[199,129581,129582],{"class":1018},"    color",[199,129584,1022],{"class":205},[199,129586,129587],{"class":1018},"blue",[199,129589,1028],{"class":205},[199,129591,129592,129595,129597,129599,129601],{"class":201,"line":333},[199,129593,129594],{"class":1018},"    font-size",[199,129596,1022],{"class":205},[199,129598,3879],{"class":1018},[199,129600,1087],{"class":1086},[199,129602,1028],{"class":205},[199,129604,129605],{"class":201,"line":227},[199,129606,129607],{"class":205},"  }\n",[199,129609,129610,129612,129614],{"class":201,"line":238},[199,129611,1414],{"class":205},[199,129613,1002],{"class":874},[199,129615,882],{"class":205},[31,129617,129618,29316],{},[49,129619,128899],{},[31,129621,79485,129622,129625,129626,129629],{},[196,129623,129624],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[196,129627,129628],{},"\u003Chead>","标签中",[31,129631,129632],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[31,129634,129635],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[19,129637,129639],{"id":129638},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[190,129641,129643],{"className":129558,"code":129642,"language":129560,"meta":57,"style":57},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[196,129644,129645],{"__ignoreMap":57},[199,129646,129647,129649,129651,129653,129655,129658,129661,129663],{"class":201,"line":202},[199,129648,887],{"class":205},[199,129650,31],{"class":874},[199,129652,64885],{"class":878},[199,129654,895],{"class":205},[199,129656,129657],{"class":898},"\"color: red; font-size: 16px;\"",[199,129659,129660],{"class":205},">这是一个段落\u003C\u002F",[199,129662,31],{"class":874},[199,129664,882],{"class":205},[31,129666,129667,29316],{},[49,129668,128899],{},[31,129670,129671],{},"①style其实就是标签的属性",[31,129673,129674],{},"②在双引号中间，写法要符合css规范",[31,129676,129677],{},"③可以控制当前的标签设置样式",[31,129679,129680],{},"④书写繁琐，简单时才用",[31,129682,129683],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[19,129685,129687],{"id":129686},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[31,129689,129690],{},"使用最多，单独建一个css文件，然后html引用",[31,129692,129693],{},"①css文件部分： style.css",[190,129695,129697],{"className":128811,"code":129696,"language":128813,"meta":57,"style":57},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[196,129698,129699,129704,129710,129720,129732],{"__ignoreMap":57},[199,129700,129701],{"class":201,"line":202},[199,129702,129703],{"class":1454},"\u002F* style.css *\u002F\n",[199,129705,129706,129708],{"class":201,"line":36},[199,129707,10],{"class":874},[199,129709,1012],{"class":205},[199,129711,129712,129714,129716,129718],{"class":201,"line":73},[199,129713,73164],{"class":1018},[199,129715,1022],{"class":205},[199,129717,129587],{"class":1018},[199,129719,1028],{"class":205},[199,129721,129722,129724,129726,129728,129730],{"class":201,"line":333},[199,129723,72885],{"class":1018},[199,129725,1022],{"class":205},[199,129727,3879],{"class":1018},[199,129729,1087],{"class":1086},[199,129731,1028],{"class":205},[199,129733,129734],{"class":201,"line":227},[199,129735,671],{"class":205},[31,129737,129738],{},"②html部分",[190,129740,129742],{"className":129558,"code":129741,"language":129560,"meta":57,"style":57},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[196,129743,129744],{"__ignoreMap":57},[199,129745,129746,129748,129750,129752,129754,129756,129758,129760,129763],{"class":201,"line":202},[199,129747,887],{"class":205},[199,129749,71264],{"class":874},[199,129751,71267],{"class":878},[199,129753,895],{"class":205},[199,129755,71272],{"class":898},[199,129757,63316],{"class":878},[199,129759,895],{"class":205},[199,129761,129762],{"class":898},"\"style.css\"",[199,129764,882],{"class":205},[31,129766,129767,129770],{},[196,129768,129769],{},"\u003Chr>","水平线标签（但是不常用！）",[31,129772,129773],{},"ctrl+0回到页面原来大小",[14,129775,129777],{"id":129776},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[19,129779,129781],{"id":129780},"_721-快速生成html","7.2.1 快速生成html",[31,129783,129784,129785],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[196,129786,129787],{},"\u003Cdiv>``\u003C\u002Fdiv>",[31,129789,129790],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[31,129792,129793],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[31,129795,129796],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[31,129798,129799],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[31,129801,129802],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[31,129804,129805],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[190,129807,129809],{"className":129558,"code":129808,"language":129560,"meta":57,"style":57},"\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",[196,129810,129811,129816,129821,129826,129831,129836,129841,129846],{"__ignoreMap":57},[199,129812,129813],{"class":201,"line":202},[199,129814,129815],{"class":1454},"\u003C!-- Emmet 语法示例 -->\n",[199,129817,129818],{"class":201,"line":36},[199,129819,129820],{"class":1454},"\u003C!-- div*3        → 生成3个div -->\n",[199,129822,129823],{"class":201,"line":73},[199,129824,129825],{"class":1454},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[199,129827,129828],{"class":201,"line":333},[199,129829,129830],{"class":1454},"\u003C!-- div+p        → 兄弟div和p -->\n",[199,129832,129833],{"class":201,"line":227},[199,129834,129835],{"class":1454},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[199,129837,129838],{"class":201,"line":238},[199,129839,129840],{"class":1454},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[199,129842,129843],{"class":201,"line":252},[199,129844,129845],{"class":1454},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[199,129847,129848],{"class":201,"line":388},[199,129849,129850],{"class":1454},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[19,129852,129854],{"id":129853},"_722-快速生成css","7.2.2 快速生成css",[31,129856,129857],{},"简写开头",[31,129859,129860],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129862,129864],{"id":129863},"_73-css复合选择器","7.3 css复合选择器",[19,129866,129868],{"id":129867},"_731-后代选择器","7.3.1 后代选择器",[190,129870,129872],{"className":128811,"code":129871,"language":128813,"meta":57,"style":57},".parent .child {\n  color: blue;\n}\n",[196,129873,129874,129884,129894],{"__ignoreMap":57},[199,129875,129876,129879,129882],{"class":201,"line":202},[199,129877,129878],{"class":878},".parent",[199,129880,129881],{"class":878}," .child",[199,129883,1012],{"class":205},[199,129885,129886,129888,129890,129892],{"class":201,"line":36},[199,129887,73164],{"class":1018},[199,129889,1022],{"class":205},[199,129891,129587],{"class":1018},[199,129893,1028],{"class":205},[199,129895,129896],{"class":201,"line":73},[199,129897,671],{"class":205},[31,129899,129900],{},"元素1 元素2 {样式声明}",[31,129902,129903],{},[49,129904,129905],{},"注意点:",[31,129907,129908],{},"①元素1和元素2中间用空格隔开",[31,129910,129911],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[31,129913,129914],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[31,129916,129917],{},"④元素1和元素2可以是任意基础选择器",[19,129919,129921],{"id":129920},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[31,129923,129924],{},[49,129925,129905],{},[31,129927,129928],{},"①元素1和元素2中间用大于号隔开",[31,129930,129911],{},[31,129932,129933],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[19,129935,129937],{"id":129936},"_733-并集选择器","7.3.3 并集选择器",[31,129939,129940],{},"元素1，元素2 {样式声明}",[31,129942,129943],{},[49,129944,129905],{},[31,129946,129947],{},"①元素1和元素2中间用逗号隔开",[31,129949,129950],{},"②逗号可以理解为和的意思",[31,129952,129953],{},"③并集选择器通常用于集体声明",[19,129955,129957],{"id":129956},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[31,129959,129960],{},[49,129961,129905],{},[31,129963,129964,129965,129967],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71264,129966],{},"－:visited－:hover－:active。",[31,129969,129970,129971,129974,129975,28583],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129972,129973],"hover",{}," 、 ",[129976,129977],"first-child",{},[31,129979,129980],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[31,129982,129983],{},"link对没访问的进行设置",[31,129985,129986],{},"vistied对已访问的进行改变",[31,129988,129989],{},"hover鼠标经过就会变",[31,129991,129992],{},"active常按(点)就会变",[190,129994,129996],{"className":128811,"code":129995,"language":128813,"meta":57,"style":57},"\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",[196,129997,129998,130003,130012,130022,130032,130036,130045,130056,130060,130068,130078,130088,130092,130101,130112],{"__ignoreMap":57},[199,129999,130000],{"class":201,"line":202},[199,130001,130002],{"class":1454},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[199,130004,130005,130007,130010],{"class":201,"line":36},[199,130006,2867],{"class":874},[199,130008,130009],{"class":878},":link",[199,130011,1012],{"class":205},[199,130013,130014,130016,130018,130020],{"class":201,"line":73},[199,130015,73164],{"class":1018},[199,130017,1022],{"class":205},[199,130019,64628],{"class":1018},[199,130021,1028],{"class":205},[199,130023,130024,130026,130028,130030],{"class":201,"line":333},[199,130025,72761],{"class":1018},[199,130027,1022],{"class":205},[199,130029,56996],{"class":1018},[199,130031,1028],{"class":205},[199,130033,130034],{"class":201,"line":227},[199,130035,671],{"class":205},[199,130037,130038,130040,130043],{"class":201,"line":238},[199,130039,2867],{"class":874},[199,130041,130042],{"class":878},":visited",[199,130044,1012],{"class":205},[199,130046,130047,130049,130051,130054],{"class":201,"line":252},[199,130048,73164],{"class":1018},[199,130050,1022],{"class":205},[199,130052,130053],{"class":1018},"purple",[199,130055,1028],{"class":205},[199,130057,130058],{"class":201,"line":388},[199,130059,671],{"class":205},[199,130061,130062,130064,130066],{"class":201,"line":415},[199,130063,2867],{"class":874},[199,130065,63199],{"class":878},[199,130067,1012],{"class":205},[199,130069,130070,130072,130074,130076],{"class":201,"line":426},[199,130071,73164],{"class":1018},[199,130073,1022],{"class":205},[199,130075,57148],{"class":1018},[199,130077,1028],{"class":205},[199,130079,130080,130082,130084,130086],{"class":201,"line":1015},[199,130081,72761],{"class":1018},[199,130083,1022],{"class":205},[199,130085,129425],{"class":1018},[199,130087,1028],{"class":205},[199,130089,130090],{"class":201,"line":1031},[199,130091,671],{"class":205},[199,130093,130094,130096,130099],{"class":201,"line":1043},[199,130095,2867],{"class":874},[199,130097,130098],{"class":878},":active",[199,130100,1012],{"class":205},[199,130102,130103,130105,130107,130110],{"class":201,"line":1049},[199,130104,73164],{"class":1018},[199,130106,1022],{"class":205},[199,130108,130109],{"class":1018},"green",[199,130111,1028],{"class":205},[199,130113,130114],{"class":201,"line":1054},[199,130115,671],{"class":205},[19,130117,130119,130120,130123],{"id":130118},"_735-伪类选择器","7.3.5 ",[130121,130122],"focus",{},"伪类选择器",[31,130125,130126,130128,130129,130131],{},[130121,130127],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[196,130130,128872],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[190,130133,130135],{"className":128811,"code":130134,"language":128813,"meta":57,"style":57},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[196,130136,130137,130145,130156,130166],{"__ignoreMap":57},[199,130138,130139,130141,130143],{"class":201,"line":202},[199,130140,56080],{"class":874},[199,130142,64159],{"class":878},[199,130144,1012],{"class":205},[199,130146,130147,130150,130152,130154],{"class":201,"line":36},[199,130148,130149],{"class":1018},"  border-color",[199,130151,1022],{"class":205},[199,130153,57148],{"class":1018},[199,130155,1028],{"class":205},[199,130157,130158,130160,130162,130164],{"class":201,"line":73},[199,130159,73057],{"class":1018},[199,130161,1022],{"class":205},[199,130163,56996],{"class":1018},[199,130165,1028],{"class":205},[199,130167,130168],{"class":201,"line":333},[199,130169,671],{"class":205},[1002,130171,130172],{},"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":57,"searchDepth":36,"depth":36,"links":130174},[130175,130180,130184],{"id":129550,"depth":36,"text":129551,"children":130176},[130177,130178,130179],{"id":129554,"depth":73,"text":129555},{"id":129638,"depth":73,"text":129639},{"id":129686,"depth":73,"text":129687},{"id":129776,"depth":36,"text":129777,"children":130181},[130182,130183],{"id":129780,"depth":73,"text":129781},{"id":129853,"depth":73,"text":129854},{"id":129863,"depth":36,"text":129864,"children":130185},[130186,130187,130188,130189,130190],{"id":129867,"depth":73,"text":129868},{"id":129920,"depth":73,"text":129921},{"id":129936,"depth":73,"text":129937},{"id":129956,"depth":73,"text":129957},{"id":130118,"depth":73,"text":130191},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129542,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130198,"title":130199,"body":130200,"description":3023,"extension":3024,"meta":132123,"navigation":906,"path":132124,"seo":132125,"stem":132126,"__hash__":132127},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130201,"toc":132097},[130202,130205,130209,130218,130222,130248,130253,130256,130259,130262,130265,130269,130272,130282,130290,130294,130329,130334,130337,130340,130343,130346,130350,130353,130362,130366,130379,130384,130387,130390,130393,130397,130400,130404,130407,130462,130465,130496,130499,130553,130557,130560,130726,130849,130852,130855,130858,130861,130865,130868,130872,130875,130878,130882,130885,130916,130943,130971,130974,130978,131004,131047,131051,131145,131148,131175,131178,131181,131184,131187,131190,131193,131196,131199,131202,131206,131263,131290,131294,131342,131346,131387,131389,131392,131395,131398,131401,131405,131497,131500,131503,131506,131510,131633,131834,131838,131842,131845,131848,131851,131855,131858,131861,131886,131889,131892,131895,131898,131901,131905,131913,131975,131978,132036,132039,132042,132045,132048,132051,132054,132057,132094],[10,130203,130199],{"id":130204},"_8-css显示模式与背景特性",[14,130206,130208],{"id":130207},"_81-css元素显示模式","8.1 css元素显示模式",[31,130210,130211,130212,130214,130215,130217],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[196,130213,128422],{},"自己占一行，比如一行可以放多个",[196,130216,128425],{},"，HTML 元素一般分为块元素和行内元素两种类型",[19,130219,130221],{"id":130220},"_811-块元素","8.1.1 块元素",[31,130223,130224,130225,130227,130228,3300,130231,3300,130233,3300,130235,3300,130238,3300,130241,130244,130245,130247],{},"常见的块元素有",[196,130226,128326],{},"~",[196,130229,130230],{},"\u003Ch6>",[196,130232,128352],{},[196,130234,128422],{},[196,130236,130237],{},"\u003Cul>",[196,130239,130240],{},"\u003Col>",[196,130242,130243],{},"\u003Cli>","等，其中 ",[196,130246,128422],{}," 标签是最典型的块元素",[31,130249,130250],{},[49,130251,130252],{},"块级元素的特点：",[31,130254,130255],{},"① 比较霸道，自己独占一行。",[31,130257,130258],{},"② 高度，宽度、外边距以及内边距都可以控制。",[31,130260,130261],{},"③ 宽度默认是容器（父级宽度）的100%。",[31,130263,130264],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[31,130266,130267],{},[49,130268,3125],{},[31,130270,130271],{},"①文字类的元素内不能使用块级元素",[31,130273,79508,130274,130276,130277,130279,130280],{},[196,130275,128352],{}," 标签主要用于存放文字，因此 ",[196,130278,128352],{}," 里面不能放块级元素，特别是不能放",[196,130281,128422],{},[31,130283,130284,130285,130227,130287,130289],{},"⑥同理， ",[196,130286,128326],{},[196,130288,130230],{},"等都是文字类块级标签，里面也不能放其他块级元素",[19,130291,130293],{"id":130292},"_812-行内元素","8.1.2 行内元素",[31,130295,130296,130297,3300,130299,3300,130302,3300,130305,3300,130308,3300,130311,3300,130314,3300,130317,3300,130320,3300,130323,130325,130326,130328],{},"常见的行内元素有 ",[196,130298,128584],{},[196,130300,130301],{},"\u003Cstrong>",[196,130303,130304],{},"\u003Cb>",[196,130306,130307],{},"\u003Cem>",[196,130309,130310],{},"\u003Ci>",[196,130312,130313],{},"\u003Cdel>",[196,130315,130316],{},"\u003Cs>",[196,130318,130319],{},"\u003Cins>",[196,130321,130322],{},"\u003Cu>",[196,130324,128425],{}," 等，其中 ",[196,130327,128425],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[31,130330,130331],{},[49,130332,130333],{},"特点：",[31,130335,130336],{},"① 相邻行内元素在一行上，一行可以显示多个。",[31,130338,130339],{},"② 高、宽直接设置是无效的。",[31,130341,130342],{},"③ 默认宽度就是它本身内容的宽度。",[31,130344,130345],{},"④ 行内元素只能容纳文本或其他行内元素。",[31,130347,130348],{},[49,130349,3125],{},[31,130351,130352],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[31,130354,130355,130356,130358,130359,130361],{},"②特殊情况链接 ",[196,130357,128584],{}," 里面可以放块级元素，但是给 ",[196,130360,128584],{}," 转换一下块级模式最安全",[19,130363,130365],{"id":130364},"_813-行内块元素","8.1.3 行内块元素",[31,130367,130368,130369,3300,130372,3300,130375,130378],{},"在行内元素中有几个特殊的标签 —— ",[196,130370,130371],{},"\u003Cimg \u002F>",[196,130373,130374],{},"\u003Cinput \u002F>",[196,130376,130377],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[31,130380,130381],{},[49,130382,130383],{},"行内块元素的特点：",[31,130385,130386],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[31,130388,130389],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[31,130391,130392],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[19,130394,130396],{"id":130395},"_814-总结","8.1.4 总结",[55,130398],{"style":128667,"src":130399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[19,130401,130403],{"id":130402},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[31,130405,130406],{},"①转换为块元素：display:block;",[190,130408,130410],{"className":128811,"code":130409,"language":128813,"meta":57,"style":57},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[196,130411,130412,130417,130423,130434,130446,130458],{"__ignoreMap":57},[199,130413,130414],{"class":201,"line":202},[199,130415,130416],{"class":1454},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[199,130418,130419,130421],{"class":201,"line":36},[199,130420,2867],{"class":874},[199,130422,1012],{"class":205},[199,130424,130425,130428,130430,130432],{"class":201,"line":73},[199,130426,130427],{"class":1018},"  display",[199,130429,1022],{"class":205},[199,130431,63128],{"class":1018},[199,130433,1028],{"class":205},[199,130435,130436,130438,130440,130442,130444],{"class":201,"line":333},[199,130437,72827],{"class":1018},[199,130439,1022],{"class":205},[199,130441,3396],{"class":1018},[199,130443,1087],{"class":1086},[199,130445,1028],{"class":205},[199,130447,130448,130450,130452,130454,130456],{"class":201,"line":227},[199,130449,73047],{"class":1018},[199,130451,1022],{"class":205},[199,130453,3484],{"class":1018},[199,130455,1087],{"class":1086},[199,130457,1028],{"class":205},[199,130459,130460],{"class":201,"line":238},[199,130461,671],{"class":205},[31,130463,130464],{},"②转换为行内元素：display:inline;",[190,130466,130468],{"className":128811,"code":130467,"language":128813,"meta":57,"style":57},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[196,130469,130470,130475,130481,130492],{"__ignoreMap":57},[199,130471,130472],{"class":201,"line":202},[199,130473,130474],{"class":1454},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[199,130476,130477,130479],{"class":201,"line":36},[199,130478,1220],{"class":874},[199,130480,1012],{"class":205},[199,130482,130483,130485,130487,130490],{"class":201,"line":73},[199,130484,130427],{"class":1018},[199,130486,1022],{"class":205},[199,130488,130489],{"class":1018},"inline",[199,130491,1028],{"class":205},[199,130493,130494],{"class":201,"line":333},[199,130495,671],{"class":205},[31,130497,130498],{},"③转换为行内块：display:inline-block;",[190,130500,130502],{"className":128811,"code":130501,"language":128813,"meta":57,"style":57},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[196,130503,130504,130509,130515,130525,130537,130549],{"__ignoreMap":57},[199,130505,130506],{"class":201,"line":202},[199,130507,130508],{"class":1454},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[199,130510,130511,130513],{"class":201,"line":36},[199,130512,199],{"class":874},[199,130514,1012],{"class":205},[199,130516,130517,130519,130521,130523],{"class":201,"line":73},[199,130518,130427],{"class":1018},[199,130520,1022],{"class":205},[199,130522,74642],{"class":1018},[199,130524,1028],{"class":205},[199,130526,130527,130529,130531,130533,130535],{"class":201,"line":333},[199,130528,72827],{"class":1018},[199,130530,1022],{"class":205},[199,130532,3692],{"class":1018},[199,130534,1087],{"class":1086},[199,130536,1028],{"class":205},[199,130538,130539,130541,130543,130545,130547],{"class":201,"line":227},[199,130540,73047],{"class":1018},[199,130542,1022],{"class":205},[199,130544,4026],{"class":1018},[199,130546,1087],{"class":1086},[199,130548,1028],{"class":205},[199,130550,130551],{"class":201,"line":238},[199,130552,671],{"class":205},[19,130554,130556],{"id":130555},"_816-小米侧边栏","8.1.6 小米侧边栏",[55,130558],{"style":128667,"src":130559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[190,130561,130563],{"className":129558,"code":130562,"language":129560,"meta":57,"style":57},"\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",[196,130564,130565,130570,130585,130604,130623,130642,130661,130680,130699,130718],{"__ignoreMap":57},[199,130566,130567],{"class":201,"line":202},[199,130568,130569],{"class":1454},"\u003C!-- 小米侧边栏案例 -->\n",[199,130571,130572,130574,130576,130578,130580,130583],{"class":201,"line":36},[199,130573,887],{"class":205},[199,130575,1220],{"class":874},[199,130577,55745],{"class":878},[199,130579,895],{"class":205},[199,130581,130582],{"class":898},"\"sidebar\"",[199,130584,882],{"class":205},[199,130586,130587,130589,130591,130593,130595,130597,130600,130602],{"class":201,"line":73},[199,130588,1824],{"class":205},[199,130590,2867],{"class":874},[199,130592,63316],{"class":878},[199,130594,895],{"class":205},[199,130596,63321],{"class":898},[199,130598,130599],{"class":205},">手机 电话卡\u003C\u002F",[199,130601,2867],{"class":874},[199,130603,882],{"class":205},[199,130605,130606,130608,130610,130612,130614,130616,130619,130621],{"class":201,"line":333},[199,130607,1824],{"class":205},[199,130609,2867],{"class":874},[199,130611,63316],{"class":878},[199,130613,895],{"class":205},[199,130615,63321],{"class":898},[199,130617,130618],{"class":205},">电视 盒子\u003C\u002F",[199,130620,2867],{"class":874},[199,130622,882],{"class":205},[199,130624,130625,130627,130629,130631,130633,130635,130638,130640],{"class":201,"line":227},[199,130626,1824],{"class":205},[199,130628,2867],{"class":874},[199,130630,63316],{"class":878},[199,130632,895],{"class":205},[199,130634,63321],{"class":898},[199,130636,130637],{"class":205},">笔记本 平板\u003C\u002F",[199,130639,2867],{"class":874},[199,130641,882],{"class":205},[199,130643,130644,130646,130648,130650,130652,130654,130657,130659],{"class":201,"line":238},[199,130645,1824],{"class":205},[199,130647,2867],{"class":874},[199,130649,63316],{"class":878},[199,130651,895],{"class":205},[199,130653,63321],{"class":898},[199,130655,130656],{"class":205},">出行 穿戴\u003C\u002F",[199,130658,2867],{"class":874},[199,130660,882],{"class":205},[199,130662,130663,130665,130667,130669,130671,130673,130676,130678],{"class":201,"line":252},[199,130664,1824],{"class":205},[199,130666,2867],{"class":874},[199,130668,63316],{"class":878},[199,130670,895],{"class":205},[199,130672,63321],{"class":898},[199,130674,130675],{"class":205},">智能 路由器\u003C\u002F",[199,130677,2867],{"class":874},[199,130679,882],{"class":205},[199,130681,130682,130684,130686,130688,130690,130692,130695,130697],{"class":201,"line":388},[199,130683,1824],{"class":205},[199,130685,2867],{"class":874},[199,130687,63316],{"class":878},[199,130689,895],{"class":205},[199,130691,63321],{"class":898},[199,130693,130694],{"class":205},">健康 儿童\u003C\u002F",[199,130696,2867],{"class":874},[199,130698,882],{"class":205},[199,130700,130701,130703,130705,130707,130709,130711,130714,130716],{"class":201,"line":415},[199,130702,1824],{"class":205},[199,130704,2867],{"class":874},[199,130706,63316],{"class":878},[199,130708,895],{"class":205},[199,130710,63321],{"class":898},[199,130712,130713],{"class":205},">耳机 音响\u003C\u002F",[199,130715,2867],{"class":874},[199,130717,882],{"class":205},[199,130719,130720,130722,130724],{"class":201,"line":426},[199,130721,1414],{"class":205},[199,130723,1220],{"class":874},[199,130725,882],{"class":205},[190,130727,130729],{"className":128811,"code":130728,"language":128813,"meta":57,"style":57},".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",[196,130730,130731,130740,130750,130763,130775,130787,130799,130809,130820,130824,130834,130845],{"__ignoreMap":57},[199,130732,130733,130736,130738],{"class":201,"line":202},[199,130734,130735],{"class":878},".sidebar",[199,130737,4338],{"class":874},[199,130739,1012],{"class":205},[199,130741,130742,130744,130746,130748],{"class":201,"line":36},[199,130743,130427],{"class":1018},[199,130745,1022],{"class":205},[199,130747,63128],{"class":1018},[199,130749,1028],{"class":205},[199,130751,130752,130754,130756,130759,130761],{"class":201,"line":73},[199,130753,72827],{"class":1018},[199,130755,1022],{"class":205},[199,130757,130758],{"class":1018},"234",[199,130760,1087],{"class":1086},[199,130762,1028],{"class":205},[199,130764,130765,130767,130769,130771,130773],{"class":201,"line":333},[199,130766,73047],{"class":1018},[199,130768,1022],{"class":205},[199,130770,3534],{"class":1018},[199,130772,1087],{"class":1086},[199,130774,1028],{"class":205},[199,130776,130777,130779,130781,130783,130785],{"class":201,"line":227},[199,130778,129495],{"class":1018},[199,130780,1022],{"class":205},[199,130782,3534],{"class":1018},[199,130784,1087],{"class":1086},[199,130786,1028],{"class":205},[199,130788,130789,130791,130793,130795,130797],{"class":201,"line":238},[199,130790,73082],{"class":1018},[199,130792,1022],{"class":205},[199,130794,4026],{"class":1018},[199,130796,1087],{"class":1086},[199,130798,1028],{"class":205},[199,130800,130801,130803,130805,130807],{"class":201,"line":252},[199,130802,73164],{"class":1018},[199,130804,1022],{"class":205},[199,130806,63101],{"class":1018},[199,130808,1028],{"class":205},[199,130810,130811,130813,130815,130818],{"class":201,"line":388},[199,130812,73137],{"class":1018},[199,130814,1022],{"class":205},[199,130816,130817],{"class":1018},"#55585a",[199,130819,1028],{"class":205},[199,130821,130822],{"class":201,"line":415},[199,130823,671],{"class":205},[199,130825,130826,130828,130830,130832],{"class":201,"line":426},[199,130827,130735],{"class":878},[199,130829,4338],{"class":874},[199,130831,63199],{"class":878},[199,130833,1012],{"class":205},[199,130835,130836,130838,130840,130843],{"class":201,"line":1015},[199,130837,73137],{"class":1018},[199,130839,1022],{"class":205},[199,130841,130842],{"class":1018},"#ff6700",[199,130844,1028],{"class":205},[199,130846,130847],{"class":201,"line":1031},[199,130848,671],{"class":205},[55,130850],{"style":128667,"src":130851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[31,130853,130854],{},"行高=盒子高度：实现文字的垂直居中",[31,130856,130857],{},"原理讲解：",[55,130859],{"style":128667,"src":130860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130862,130864],{"id":130863},"_82-css背景","8.2 css背景",[31,130866,130867],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[19,130869,130871],{"id":130870},"_821-背景颜色","8.2.1 背景颜色",[31,130873,130874],{},"background-color:颜色值;",[31,130876,130877],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[19,130879,130881],{"id":130880},"_822-背景图片","8.2.2 背景图片",[31,130883,130884],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[190,130886,130888],{"className":128811,"code":130887,"language":128813,"meta":57,"style":57},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[196,130889,130890,130896,130912],{"__ignoreMap":57},[199,130891,130892,130894],{"class":201,"line":202},[199,130893,1220],{"class":874},[199,130895,1012],{"class":205},[199,130897,130898,130901,130903,130905,130907,130910],{"class":201,"line":36},[199,130899,130900],{"class":1018},"  background-image",[199,130902,1022],{"class":205},[199,130904,63985],{"class":1018},[199,130906,1537],{"class":205},[199,130908,130909],{"class":8113},"images\u002Fbg.png",[199,130911,5623],{"class":205},[199,130913,130914],{"class":201,"line":73},[199,130915,671],{"class":205},[3227,130917,130918,130927],{},[3230,130919,130920],{},[3233,130921,130922,130925],{},[3236,130923,130924],{"align":26580},"参数值",[3236,130926,104955],{"align":26580},[3273,130928,130929,130936],{},[3233,130930,130931,130933],{},[3278,130932,56996],{"align":26580},[3278,130934,130935],{"align":26580},"无背景图（默认的）",[3233,130937,130938,130940],{},[3278,130939,63985],{"align":26580},[3278,130941,130942],{"align":26580},"使用绝对或相对地址指定背景图像",[190,130944,130945],{"className":128811,"code":130887,"language":128813,"meta":57,"style":57},[196,130946,130947,130953,130967],{"__ignoreMap":57},[199,130948,130949,130951],{"class":201,"line":202},[199,130950,1220],{"class":874},[199,130952,1012],{"class":205},[199,130954,130955,130957,130959,130961,130963,130965],{"class":201,"line":36},[199,130956,130900],{"class":1018},[199,130958,1022],{"class":205},[199,130960,63985],{"class":1018},[199,130962,1537],{"class":205},[199,130964,130909],{"class":8113},[199,130966,5623],{"class":205},[199,130968,130969],{"class":201,"line":73},[199,130970,671],{"class":205},[31,130972,130973],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[19,130975,130977],{"id":130976},"_823-背景平铺","8.2.3 背景平铺",[190,130979,130981],{"className":128811,"code":130980,"language":128813,"meta":57,"style":57},"div {\n  background-repeat: no-repeat;\n}\n",[196,130982,130983,130989,131000],{"__ignoreMap":57},[199,130984,130985,130987],{"class":201,"line":202},[199,130986,1220],{"class":874},[199,130988,1012],{"class":205},[199,130990,130991,130994,130996,130998],{"class":201,"line":36},[199,130992,130993],{"class":1018},"  background-repeat",[199,130995,1022],{"class":205},[199,130997,63995],{"class":1018},[199,130999,1028],{"class":205},[199,131001,131002],{"class":201,"line":73},[199,131003,671],{"class":205},[3227,131005,131006,131014],{},[3230,131007,131008],{},[3233,131009,131010,131012],{},[3236,131011,130924],{"align":26580},[3236,131013,104955],{"align":26580},[3273,131015,131016,131024,131031,131039],{},[3233,131017,131018,131021],{},[3278,131019,131020],{"align":26580},"repeat",[3278,131022,131023],{"align":26580},"背景图像在纵向和横向上平铺（默认的）",[3233,131025,131026,131028],{},[3278,131027,63995],{"align":26580},[3278,131029,131030],{"align":26580},"背景图像不平铺",[3233,131032,131033,131036],{},[3278,131034,131035],{"align":26580},"repeat-x",[3278,131037,131038],{"align":26580},"背景图像在横向上平铺",[3233,131040,131041,131044],{},[3278,131042,131043],{"align":26580},"repeat-y",[3278,131045,131046],{"align":26580},"背景图像在纵向平铺",[19,131048,131050],{"id":131049},"_824-背景图片位置","8.2.4 背景图片位置",[190,131052,131054],{"className":128811,"code":131053,"language":128813,"meta":57,"style":57},"\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",[196,131055,131056,131061,131067,131081,131085,131090,131096,131112,131116,131121,131127,131141],{"__ignoreMap":57},[199,131057,131058],{"class":201,"line":202},[199,131059,131060],{"class":1454},"\u002F* 方位名词 *\u002F\n",[199,131062,131063,131065],{"class":201,"line":36},[199,131064,1220],{"class":874},[199,131066,1012],{"class":205},[199,131068,131069,131072,131074,131076,131079],{"class":201,"line":73},[199,131070,131071],{"class":1018},"  background-position",[199,131073,1022],{"class":205},[199,131075,1197],{"class":1018},[199,131077,131078],{"class":1018}," top",[199,131080,1028],{"class":205},[199,131082,131083],{"class":201,"line":333},[199,131084,671],{"class":205},[199,131086,131087],{"class":201,"line":227},[199,131088,131089],{"class":1454},"\u002F* 精确单位 *\u002F\n",[199,131091,131092,131094],{"class":201,"line":238},[199,131093,1220],{"class":874},[199,131095,1012],{"class":205},[199,131097,131098,131100,131102,131104,131106,131108,131110],{"class":201,"line":252},[199,131099,131071],{"class":1018},[199,131101,1022],{"class":205},[199,131103,3779],{"class":1018},[199,131105,1087],{"class":1086},[199,131107,59763],{"class":1018},[199,131109,1087],{"class":1086},[199,131111,1028],{"class":205},[199,131113,131114],{"class":201,"line":388},[199,131115,671],{"class":205},[199,131117,131118],{"class":201,"line":415},[199,131119,131120],{"class":1454},"\u002F* 混合单位 *\u002F\n",[199,131122,131123,131125],{"class":201,"line":426},[199,131124,1220],{"class":874},[199,131126,1012],{"class":205},[199,131128,131129,131131,131133,131135,131137,131139],{"class":201,"line":1015},[199,131130,131071],{"class":1018},[199,131132,1022],{"class":205},[199,131134,3779],{"class":1018},[199,131136,1087],{"class":1086},[199,131138,19989],{"class":1018},[199,131140,1028],{"class":205},[199,131142,131143],{"class":201,"line":1031},[199,131144,671],{"class":205},[31,131146,131147],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[3227,131149,131150,131158],{},[3230,131151,131152],{},[3233,131153,131154,131156],{},[3236,131155,130924],{"align":26580},[3236,131157,28712],{"align":26580},[3273,131159,131160,131167],{},[3233,131161,131162,131164],{},[3278,131163,1631],{"align":26580},[3278,131165,131166],{"align":26580},"百分数|由浮点数和单位标识符组成的长度值",[3233,131168,131169,131172],{},[3278,131170,131171],{"align":26580},"position",[3278,131173,131174],{"align":26580},"top|center|bottom|left|center|right 方位名词",[31,131176,131177],{},"其他说明：",[31,131179,131180],{},"①参数是方位名词",[31,131182,131183],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[31,131185,131186],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[31,131188,131189],{},"②参数是精确单位",[31,131191,131192],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[31,131194,131195],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[31,131197,131198],{},"③参数是混合单位",[31,131200,131201],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[19,131203,131205],{"id":131204},"_825-背景图片固定","8.2.5 背景图片固定",[190,131207,131209],{"className":128811,"code":131208,"language":128813,"meta":57,"style":57},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[196,131210,131211,131216,131222,131234,131238,131243,131249,131259],{"__ignoreMap":57},[199,131212,131213],{"class":201,"line":202},[199,131214,131215],{"class":1454},"\u002F* 背景滚动（默认） *\u002F\n",[199,131217,131218,131220],{"class":201,"line":36},[199,131219,1220],{"class":874},[199,131221,1012],{"class":205},[199,131223,131224,131227,131229,131232],{"class":201,"line":73},[199,131225,131226],{"class":1018},"  background-attachment",[199,131228,1022],{"class":205},[199,131230,131231],{"class":1018},"scroll",[199,131233,1028],{"class":205},[199,131235,131236],{"class":201,"line":333},[199,131237,671],{"class":205},[199,131239,131240],{"class":201,"line":227},[199,131241,131242],{"class":1454},"\u002F* 背景固定 *\u002F\n",[199,131244,131245,131247],{"class":201,"line":238},[199,131246,1220],{"class":874},[199,131248,1012],{"class":205},[199,131250,131251,131253,131255,131257],{"class":201,"line":252},[199,131252,131226],{"class":1018},[199,131254,1022],{"class":205},[199,131256,88492],{"class":1018},[199,131258,1028],{"class":205},[199,131260,131261],{"class":201,"line":388},[199,131262,671],{"class":205},[3227,131264,131265,131274],{},[3230,131266,131267],{},[3233,131268,131269,131272],{},[3236,131270,131271],{"align":26580},"参数",[3236,131273,104955],{"align":26580},[3273,131275,131276,131283],{},[3233,131277,131278,131280],{},[3278,131279,131231],{"align":26580},[3278,131281,131282],{"align":26580},"背景图像是随对象内容滚动",[3233,131284,131285,131287],{},[3278,131286,88492],{"align":26580},[3278,131288,131289],{"align":26580},"背景图像固定",[19,131291,131293],{"id":131292},"_826-背景样式合写","8.2.6 背景样式合写",[190,131295,131297],{"className":128811,"code":131296,"language":128813,"meta":57,"style":57},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[196,131298,131299,131304,131310,131338],{"__ignoreMap":57},[199,131300,131301],{"class":201,"line":202},[199,131302,131303],{"class":1454},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[199,131305,131306,131308],{"class":201,"line":36},[199,131307,1220],{"class":874},[199,131309,1012],{"class":205},[199,131311,131312,131314,131316,131318,131321,131323,131325,131327,131329,131332,131334,131336],{"class":201,"line":73},[199,131313,72870],{"class":1018},[199,131315,1022],{"class":205},[199,131317,63101],{"class":1018},[199,131319,131320],{"class":1018}," url",[199,131322,1537],{"class":205},[199,131324,130909],{"class":8113},[199,131326,16575],{"class":205},[199,131328,63995],{"class":1018},[199,131330,131331],{"class":1018}," fixed",[199,131333,19989],{"class":1018},[199,131335,131078],{"class":1018},[199,131337,1028],{"class":205},[199,131339,131340],{"class":201,"line":333},[199,131341,671],{"class":205},[19,131343,131345],{"id":131344},"_827-背景色半透明","8.2.7 背景色半透明",[190,131347,131349],{"className":128811,"code":131348,"language":128813,"meta":57,"style":57},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[196,131350,131351,131357,131383],{"__ignoreMap":57},[199,131352,131353,131355],{"class":201,"line":202},[199,131354,1220],{"class":874},[199,131356,1012],{"class":205},[199,131358,131359,131361,131363,131365,131367,131369,131371,131373,131375,131377,131379,131381],{"class":201,"line":36},[199,131360,72870],{"class":1018},[199,131362,1022],{"class":205},[199,131364,57369],{"class":1018},[199,131366,1537],{"class":205},[199,131368,1025],{"class":1018},[199,131370,1912],{"class":205},[199,131372,1025],{"class":1018},[199,131374,1912],{"class":205},[199,131376,1025],{"class":1018},[199,131378,1912],{"class":205},[199,131380,102780],{"class":1018},[199,131382,5623],{"class":205},[199,131384,131385],{"class":201,"line":73},[199,131386,671],{"class":205},[31,131388,101655],{},[31,131390,131391],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[31,131393,131394],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[31,131396,131397],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[31,131399,131400],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[19,131402,131404],{"id":131403},"_828-总结","8.2.8 总结",[3227,131406,131407,131418],{},[3230,131408,131409],{},[3233,131410,131411,131414,131416],{},[3236,131412,131413],{"align":26580},"属性",[3236,131415,104955],{"align":26580},[3236,131417,3241],{"align":26580},[3273,131419,131420,131431,131442,131453,131464,131475,131486],{},[3233,131421,131422,131425,131428],{},[3278,131423,131424],{"align":26580},"background-color",[3278,131426,131427],{"align":26580},"背景颜色",[3278,131429,131430],{"align":26580},"预定义的颜色值\u002F十六进制\u002FRGB代码",[3233,131432,131433,131436,131439],{},[3278,131434,131435],{"align":26580},"background-image",[3278,131437,131438],{"align":26580},"背景图片",[3278,131440,131441],{"align":26580},"url(图片路径)",[3233,131443,131444,131447,131450],{},[3278,131445,131446],{"align":26580},"background-repeat",[3278,131448,131449],{"align":26580},"是否平铺",[3278,131451,131452],{"align":26580},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[3233,131454,131455,131458,131461],{},[3278,131456,131457],{"align":26580},"background-position",[3278,131459,131460],{"align":26580},"背景位置",[3278,131462,131463],{"align":26580},"length\u002Fposition 分别是x和y坐标",[3233,131465,131466,131469,131472],{},[3278,131467,131468],{"align":26580},"background-attachment",[3278,131470,131471],{"align":26580},"背景附着",[3278,131473,131474],{"align":26580},"scroll(背景滚动) \u002Ffixed (背景固定)",[3233,131476,131477,131480,131483],{},[3278,131478,131479],{"align":26580},"背景简写",[3278,131481,131482],{"align":26580},"书写更简单",[3278,131484,131485],{"align":26580},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[3233,131487,131488,131491,131494],{},[3278,131489,131490],{"align":26580},"背景半透明",[3278,131492,131493],{"align":26580},"背景颜色半透明",[3278,131495,131496],{"align":26580},"background: rgba(0,0,0.3); 后面必须是4个值",[31,131498,131499],{},"颜色渐变：",[55,131501],{"style":128667,"src":131502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[55,131504],{"style":128667,"src":131505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[19,131507,131509],{"id":131508},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[190,131511,131513],{"className":129558,"code":131512,"language":129560,"meta":57,"style":57},"\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",[196,131514,131515,131530,131549,131568,131587,131606,131625],{"__ignoreMap":57},[199,131516,131517,131519,131521,131523,131525,131528],{"class":201,"line":202},[199,131518,887],{"class":205},[199,131520,1220],{"class":874},[199,131522,55745],{"class":878},[199,131524,895],{"class":205},[199,131526,131527],{"class":898},"\"nav\"",[199,131529,882],{"class":205},[199,131531,131532,131534,131536,131538,131540,131542,131545,131547],{"class":201,"line":36},[199,131533,1824],{"class":205},[199,131535,2867],{"class":874},[199,131537,63316],{"class":878},[199,131539,895],{"class":205},[199,131541,63321],{"class":898},[199,131543,131544],{"class":205},">五彩导航1\u003C\u002F",[199,131546,2867],{"class":874},[199,131548,882],{"class":205},[199,131550,131551,131553,131555,131557,131559,131561,131564,131566],{"class":201,"line":73},[199,131552,1824],{"class":205},[199,131554,2867],{"class":874},[199,131556,63316],{"class":878},[199,131558,895],{"class":205},[199,131560,63321],{"class":898},[199,131562,131563],{"class":205},">五彩导航2\u003C\u002F",[199,131565,2867],{"class":874},[199,131567,882],{"class":205},[199,131569,131570,131572,131574,131576,131578,131580,131583,131585],{"class":201,"line":333},[199,131571,1824],{"class":205},[199,131573,2867],{"class":874},[199,131575,63316],{"class":878},[199,131577,895],{"class":205},[199,131579,63321],{"class":898},[199,131581,131582],{"class":205},">五彩导航3\u003C\u002F",[199,131584,2867],{"class":874},[199,131586,882],{"class":205},[199,131588,131589,131591,131593,131595,131597,131599,131602,131604],{"class":201,"line":227},[199,131590,1824],{"class":205},[199,131592,2867],{"class":874},[199,131594,63316],{"class":878},[199,131596,895],{"class":205},[199,131598,63321],{"class":898},[199,131600,131601],{"class":205},">五彩导航4\u003C\u002F",[199,131603,2867],{"class":874},[199,131605,882],{"class":205},[199,131607,131608,131610,131612,131614,131616,131618,131621,131623],{"class":201,"line":238},[199,131609,1824],{"class":205},[199,131611,2867],{"class":874},[199,131613,63316],{"class":878},[199,131615,895],{"class":205},[199,131617,63321],{"class":898},[199,131619,131620],{"class":205},">五彩导航5\u003C\u002F",[199,131622,2867],{"class":874},[199,131624,882],{"class":205},[199,131626,131627,131629,131631],{"class":201,"line":252},[199,131628,1414],{"class":205},[199,131630,1220],{"class":874},[199,131632,882],{"class":205},[190,131634,131636],{"className":128811,"code":131635,"language":128813,"meta":57,"style":57},".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",[196,131637,131638,131647,131657,131669,131681,131691,131703,131713,131717,131742,131765,131788,131811],{"__ignoreMap":57},[199,131639,131640,131643,131645],{"class":201,"line":202},[199,131641,131642],{"class":878},".nav",[199,131644,4338],{"class":874},[199,131646,1012],{"class":205},[199,131648,131649,131651,131653,131655],{"class":201,"line":36},[199,131650,130427],{"class":1018},[199,131652,1022],{"class":205},[199,131654,74642],{"class":1018},[199,131656,1028],{"class":205},[199,131658,131659,131661,131663,131665,131667],{"class":201,"line":73},[199,131660,72827],{"class":1018},[199,131662,1022],{"class":205},[199,131664,3896],{"class":1018},[199,131666,1087],{"class":1086},[199,131668,1028],{"class":205},[199,131670,131671,131673,131675,131677,131679],{"class":201,"line":333},[199,131672,73047],{"class":1018},[199,131674,1022],{"class":205},[199,131676,3935],{"class":1018},[199,131678,1087],{"class":1086},[199,131680,1028],{"class":205},[199,131682,131683,131685,131687,131689],{"class":201,"line":227},[199,131684,72785],{"class":1018},[199,131686,1022],{"class":205},[199,131688,1197],{"class":1018},[199,131690,1028],{"class":205},[199,131692,131693,131695,131697,131699,131701],{"class":201,"line":238},[199,131694,129495],{"class":1018},[199,131696,1022],{"class":205},[199,131698,3935],{"class":1018},[199,131700,1087],{"class":1086},[199,131702,1028],{"class":205},[199,131704,131705,131707,131709,131711],{"class":201,"line":252},[199,131706,73164],{"class":1018},[199,131708,1022],{"class":205},[199,131710,63101],{"class":1018},[199,131712,1028],{"class":205},[199,131714,131715],{"class":201,"line":388},[199,131716,671],{"class":205},[199,131718,131719,131721,131723,131726,131728,131730,131733,131735,131737,131739],{"class":201,"line":415},[199,131720,131642],{"class":878},[199,131722,4338],{"class":874},[199,131724,131725],{"class":878},":nth-child",[199,131727,1537],{"class":205},[199,131729,1115],{"class":1018},[199,131731,131732],{"class":205},") { ",[199,131734,131424],{"class":1018},[199,131736,1022],{"class":205},[199,131738,130842],{"class":1018},[199,131740,131741],{"class":205},"; }\n",[199,131743,131744,131746,131748,131750,131752,131754,131756,131758,131760,131763],{"class":201,"line":426},[199,131745,131642],{"class":878},[199,131747,4338],{"class":874},[199,131749,131725],{"class":878},[199,131751,1537],{"class":205},[199,131753,1925],{"class":1018},[199,131755,131732],{"class":205},[199,131757,131424],{"class":1018},[199,131759,1022],{"class":205},[199,131761,131762],{"class":1018},"#ff0000",[199,131764,131741],{"class":205},[199,131766,131767,131769,131771,131773,131775,131777,131779,131781,131783,131786],{"class":201,"line":1015},[199,131768,131642],{"class":878},[199,131770,4338],{"class":874},[199,131772,131725],{"class":878},[199,131774,1537],{"class":205},[199,131776,1920],{"class":1018},[199,131778,131732],{"class":205},[199,131780,131424],{"class":1018},[199,131782,1022],{"class":205},[199,131784,131785],{"class":1018},"#00a4ff",[199,131787,131741],{"class":205},[199,131789,131790,131792,131794,131796,131798,131800,131802,131804,131806,131809],{"class":201,"line":1031},[199,131791,131642],{"class":878},[199,131793,4338],{"class":874},[199,131795,131725],{"class":878},[199,131797,1537],{"class":205},[199,131799,1915],{"class":1018},[199,131801,131732],{"class":205},[199,131803,131424],{"class":1018},[199,131805,1022],{"class":205},[199,131807,131808],{"class":1018},"#ff00ff",[199,131810,131741],{"class":205},[199,131812,131813,131815,131817,131819,131821,131823,131825,131827,131829,131832],{"class":201,"line":1043},[199,131814,131642],{"class":878},[199,131816,4338],{"class":874},[199,131818,131725],{"class":878},[199,131820,1537],{"class":205},[199,131822,1909],{"class":1018},[199,131824,131732],{"class":205},[199,131826,131424],{"class":1018},[199,131828,1022],{"class":205},[199,131830,131831],{"class":1018},"#00ff00",[199,131833,131741],{"class":205},[14,131835,131837],{"id":131836},"_83-css三大特性","8.3 css三大特性",[19,131839,131841],{"id":131840},"_831-层叠性","8.3.1 层叠性",[31,131843,131844],{},"为了解决样式冲突问题",[31,131846,131847],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[31,131849,131850],{},"   ②样式不冲突，不会层叠",[19,131852,131854],{"id":131853},"_832-继承性","8.3.2 继承性",[31,131856,131857],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[31,131859,131860],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[190,131862,131864],{"className":128811,"code":131863,"language":128813,"meta":57,"style":57},"p {\n  color: #333;\n}\n",[196,131865,131866,131872,131882],{"__ignoreMap":57},[199,131867,131868,131870],{"class":201,"line":202},[199,131869,31],{"class":874},[199,131871,1012],{"class":205},[199,131873,131874,131876,131878,131880],{"class":201,"line":36},[199,131875,73164],{"class":1018},[199,131877,1022],{"class":205},[199,131879,64628],{"class":1018},[199,131881,1028],{"class":205},[199,131883,131884],{"class":201,"line":73},[199,131885,671],{"class":205},[55,131887],{"style":128667,"src":131888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[31,131890,131891],{},"解释：①行高可以跟单位也可以不跟单位",[31,131893,131894],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[31,131896,131897],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[31,131899,131900],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[19,131902,131904],{"id":131903},"_833-优先级","8.3.3 优先级",[24,131906,131907,131910],{},[27,131908,131909],{},"选择器相同，则执行层叠性",[27,131911,131912],{},"选择器不同，则根据选择器权重执行",[3227,131914,131915,131925],{},[3230,131916,131917],{},[3233,131918,131919,131922],{},[3236,131920,131921],{"align":26580},"选择器",[3236,131923,131924],{"align":26580},"选择器权重",[3273,131926,131927,131935,131943,131951,131959,131967],{},[3233,131928,131929,131932],{},[3278,131930,131931],{"align":26580},"继承 或者*",[3278,131933,131934],{"align":26580},"0，0，0，0",[3233,131936,131937,131940],{},[3278,131938,131939],{"align":26580},"标签选择器",[3278,131941,131942],{"align":26580},"0，0，0，1",[3233,131944,131945,131948],{},[3278,131946,131947],{"align":26580},"类选择器，伪类选择器",[3278,131949,131950],{"align":26580},"0，0，1，0",[3233,131952,131953,131956],{},[3278,131954,131955],{"align":26580},"ID选择器",[3278,131957,131958],{"align":26580},"0，1，0，0",[3233,131960,131961,131964],{},[3278,131962,131963],{"align":26580},"行内样式",[3278,131965,131966],{"align":26580},"1，0，0，0",[3233,131968,131969,131972],{},[3278,131970,131971],{"align":26580},"！important",[3278,131973,131974],{"align":26580},"无穷大",[31,131976,131977],{},"! important用法：",[190,131979,131981],{"className":128811,"code":131980,"language":128813,"meta":57,"style":57},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[196,131982,131983,131988,131994,132007,132011,132016,132022,132032],{"__ignoreMap":57},[199,131984,131985],{"class":201,"line":202},[199,131986,131987],{"class":1454},"\u002F* !important 拥有最高优先级 *\u002F\n",[199,131989,131990,131992],{"class":201,"line":36},[199,131991,1220],{"class":874},[199,131993,1012],{"class":205},[199,131995,131996,131998,132000,132002,132005],{"class":201,"line":73},[199,131997,73164],{"class":1018},[199,131999,1022],{"class":205},[199,132001,1257],{"class":1018},[199,132003,132004],{"class":1086}," !important",[199,132006,1028],{"class":205},[199,132008,132009],{"class":201,"line":333},[199,132010,671],{"class":205},[199,132012,132013],{"class":201,"line":227},[199,132014,132015],{"class":1454},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[199,132017,132018,132020],{"class":201,"line":238},[199,132019,1220],{"class":874},[199,132021,1012],{"class":205},[199,132023,132024,132026,132028,132030],{"class":201,"line":252},[199,132025,73164],{"class":1018},[199,132027,1022],{"class":205},[199,132029,59680],{"class":1018},[199,132031,1028],{"class":205},[199,132033,132034],{"class":201,"line":388},[199,132035,671],{"class":205},[31,132037,132038],{},"优先级注意点：",[31,132040,132041],{},"①权重是有4组数字组成,但是不会有进位",[31,132043,132044],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[31,132046,132047],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[31,132049,132050],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[31,132052,132053],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[31,132055,132056],{},"⑥复合选择器",[3227,132058,132059,132069],{},[3230,132060,132061],{},[3233,132062,132063,132066],{},[3236,132064,132065],{"align":26580},"div ul li",[3236,132067,132068],{"align":26580},"0,0,0,3",[3273,132070,132071,132079,132087],{},[3233,132072,132073,132076],{},[3278,132074,132075],{"align":26580},".nav ul li",[3278,132077,132078],{"align":26580},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[3233,132080,132081,132084],{},[3278,132082,132083],{"align":26580},"a:hover",[3278,132085,132086],{"align":26580},"0,0,1,1",[3233,132088,132089,132092],{},[3278,132090,132091],{"align":26580},".nav a",[3278,132093,132086],{"align":26580},[1002,132095,132096],{},"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":57,"searchDepth":36,"depth":36,"links":132098},[132099,132107,132118],{"id":130207,"depth":36,"text":130208,"children":132100},[132101,132102,132103,132104,132105,132106],{"id":130220,"depth":73,"text":130221},{"id":130292,"depth":73,"text":130293},{"id":130364,"depth":73,"text":130365},{"id":130395,"depth":73,"text":130396},{"id":130402,"depth":73,"text":130403},{"id":130555,"depth":73,"text":130556},{"id":130863,"depth":36,"text":130864,"children":132108},[132109,132110,132111,132112,132113,132114,132115,132116,132117],{"id":130870,"depth":73,"text":130871},{"id":130880,"depth":73,"text":130881},{"id":130976,"depth":73,"text":130977},{"id":131049,"depth":73,"text":131050},{"id":131204,"depth":73,"text":131205},{"id":131292,"depth":73,"text":131293},{"id":131344,"depth":73,"text":131345},{"id":131403,"depth":73,"text":131404},{"id":131508,"depth":73,"text":131509},{"id":131836,"depth":36,"text":131837,"children":132119},[132120,132121,132122],{"id":131840,"depth":73,"text":131841},{"id":131853,"depth":73,"text":131854},{"id":131903,"depth":73,"text":131904},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130199,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132129,"title":132130,"body":132131,"description":3023,"extension":3024,"meta":133721,"navigation":906,"path":133722,"seo":133723,"stem":133724,"__hash__":133725},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132132,"toc":133700},[132133,132136,132140,132143,132146,132149,132152,132155,132158,132161,132165,132173,132210,132246,132249,132263,132268,132302,132305,132398,132403,132406,132436,132439,132444,132452,132456,132463,132509,132553,132558,132561,132564,132567,132570,132573,132576,132578,132581,132585,132590,132634,132639,132642,132645,132682,132687,132690,132693,132696,132699,132731,132734,132737,132740,132772,132775,132778,132781,132785,132788,132820,132823,132827,132847,132850,132858,132861,132865,132870,132873,132905,132910,132913,132951,132955,132960,132963,132966,132997,133000,133017,133022,133074,133134,133139,133193,133231,133235,133239,133242,133246,133254,133257,133259,133270,133275,133323,133357,133360,133363,133366,133369,133413,133416,133419,133422,133425,133428,133431,133475,133478,133481,133484,133487,133490,133493,133499,133502,133546,133549,133552,133555,133558,133561,133605,133608,133610,133613,133617,133621,133659,133663,133666,133669,133673,133681,133685,133688,133691,133694,133697],[10,132134,132130],{"id":132135},"_9-css盒模型浮动与切图",[14,132137,132139],{"id":132138},"_91-盒子模型","9.1 盒子模型",[31,132141,132142],{},"利用盒子来设计网页",[31,132144,132145],{},"盒子包含：边框、外边距、内边距、实际内容",[31,132147,132148],{},"网页布局设置：",[31,132150,132151],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[31,132153,132154],{},"②利用css设置好盒子样式，然后摆放到相应位置",[31,132156,132157],{},"③往盒子里装内容",[55,132159],{"style":128667,"src":132160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[19,132162,132164],{"id":132163},"_911-边框border","9.1.1 边框（border）",[24,132166,132167,132170],{},[27,132168,132169],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[27,132171,132172],{},"语法",[190,132174,132176],{"className":128811,"code":132175,"language":128813,"meta":57,"style":57},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[196,132177,132178,132183,132189,132206],{"__ignoreMap":57},[199,132179,132180],{"class":201,"line":202},[199,132181,132182],{"class":1454},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[199,132184,132185,132187],{"class":201,"line":36},[199,132186,1220],{"class":874},[199,132188,1012],{"class":205},[199,132190,132191,132193,132195,132197,132199,132201,132204],{"class":201,"line":73},[199,132192,73155],{"class":1018},[199,132194,1022],{"class":205},[199,132196,1115],{"class":1018},[199,132198,1087],{"class":1086},[199,132200,1120],{"class":1018},[199,132202,132203],{"class":1018}," #ccc",[199,132205,1028],{"class":205},[199,132207,132208],{"class":201,"line":333},[199,132209,671],{"class":205},[3227,132211,132212,132220],{},[3230,132213,132214],{},[3233,132215,132216,132218],{},[3236,132217,131413],{"align":26580},[3236,132219,104955],{"align":26580},[3273,132221,132222,132230,132238],{},[3233,132223,132224,132227],{},[3278,132225,132226],{"align":26580},"border-width",[3278,132228,132229],{"align":26580},"定义边框粗细，单位是px",[3233,132231,132232,132235],{},[3278,132233,132234],{"align":26580},"border-style",[3278,132236,132237],{"align":26580},"边框的样式",[3233,132239,132240,132243],{},[3278,132241,132242],{"align":26580},"border-color",[3278,132244,132245],{"align":26580},"边框的颜色",[31,132247,132248],{},"边框样式 border-style 可以设置如下值：",[176,132250,132251,132254,132257,132260],{},[27,132252,132253],{},"none：没有边框即忽略所有边框的宽度（默认值）",[27,132255,132256],{},"solid：边框为单实线(最为常用的)",[27,132258,132259],{},"dashed：边框为虚线",[27,132261,132262],{},"dotted：边框为点线",[24,132264,132265],{"start":73},[27,132266,132267],{},"边框的合写分写",[190,132269,132270],{"className":128811,"code":132175,"language":128813,"meta":57,"style":57},[196,132271,132272,132276,132282,132298],{"__ignoreMap":57},[199,132273,132274],{"class":201,"line":202},[199,132275,132182],{"class":1454},[199,132277,132278,132280],{"class":201,"line":36},[199,132279,1220],{"class":874},[199,132281,1012],{"class":205},[199,132283,132284,132286,132288,132290,132292,132294,132296],{"class":201,"line":73},[199,132285,73155],{"class":1018},[199,132287,1022],{"class":205},[199,132289,1115],{"class":1018},[199,132291,1087],{"class":1086},[199,132293,1120],{"class":1018},[199,132295,132203],{"class":1018},[199,132297,1028],{"class":205},[199,132299,132300],{"class":201,"line":333},[199,132301,671],{"class":205},[31,132303,132304],{},"边框分开写法：",[190,132306,132308],{"className":128811,"code":132307,"language":128813,"meta":57,"style":57},"\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",[196,132309,132310,132315,132321,132339,132357,132376,132394],{"__ignoreMap":57},[199,132311,132312],{"class":201,"line":202},[199,132313,132314],{"class":1454},"\u002F* 边框分开写法 *\u002F\n",[199,132316,132317,132319],{"class":201,"line":36},[199,132318,1220],{"class":874},[199,132320,1012],{"class":205},[199,132322,132323,132326,132328,132330,132332,132334,132337],{"class":201,"line":73},[199,132324,132325],{"class":1018},"  border-top",[199,132327,1022],{"class":205},[199,132329,1115],{"class":1018},[199,132331,1087],{"class":1086},[199,132333,1120],{"class":1018},[199,132335,132336],{"class":1018}," #000",[199,132338,1028],{"class":205},[199,132340,132341,132344,132346,132348,132350,132352,132355],{"class":201,"line":333},[199,132342,132343],{"class":1018},"  border-right",[199,132345,1022],{"class":205},[199,132347,1925],{"class":1018},[199,132349,1087],{"class":1086},[199,132351,64500],{"class":1018},[199,132353,132354],{"class":1018}," #333",[199,132356,1028],{"class":205},[199,132358,132359,132362,132364,132366,132368,132371,132374],{"class":201,"line":227},[199,132360,132361],{"class":1018},"  border-bottom",[199,132363,1022],{"class":205},[199,132365,1920],{"class":1018},[199,132367,1087],{"class":1086},[199,132369,132370],{"class":1018}," dotted",[199,132372,132373],{"class":1018}," #666",[199,132375,1028],{"class":205},[199,132377,132378,132381,132383,132385,132387,132389,132392],{"class":201,"line":238},[199,132379,132380],{"class":1018},"  border-left",[199,132382,1022],{"class":205},[199,132384,1115],{"class":1018},[199,132386,1087],{"class":1086},[199,132388,1120],{"class":1018},[199,132390,132391],{"class":1018}," #999",[199,132393,1028],{"class":205},[199,132395,132396],{"class":201,"line":252},[199,132397,671],{"class":205},[24,132399,132400],{"start":333},[27,132401,132402],{},"表格的细线边框",[31,132404,132405],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[190,132407,132409],{"className":128811,"code":132408,"language":128813,"meta":57,"style":57},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[196,132410,132411,132416,132422,132432],{"__ignoreMap":57},[199,132412,132413],{"class":201,"line":202},[199,132414,132415],{"class":1454},"\u002F* 表格细线边框合并 *\u002F\n",[199,132417,132418,132420],{"class":201,"line":36},[199,132419,3227],{"class":874},[199,132421,1012],{"class":205},[199,132423,132424,132426,132428,132430],{"class":201,"line":73},[199,132425,72837],{"class":1018},[199,132427,1022],{"class":205},[199,132429,67294],{"class":1018},[199,132431,1028],{"class":205},[199,132433,132434],{"class":201,"line":333},[199,132435,671],{"class":205},[31,132437,132438],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[24,132440,132441],{"start":227},[27,132442,132443],{},"解决边框额外增加盒子的实际大小的方法：",[176,132445,132446,132449],{},[27,132447,132448],{},"测量盒子大小的时候,不量边框",[27,132450,132451],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[19,132453,132455],{"id":132454},"_912-内边距","9.1.2 内边距",[24,132457,132458,132461],{},[27,132459,132460],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[27,132462,132172],{},[3227,132464,132465,132475],{},[3230,132466,132467],{},[3233,132468,132469,132472],{},[3236,132470,132471],{"align":26580},"值的个数",[3236,132473,132474],{"align":26580},"表达意思",[3273,132476,132477,132485,132493,132501],{},[3233,132478,132479,132482],{},[3278,132480,132481],{"align":26580},"padding: 5px;",[3278,132483,132484],{"align":26580},"1个值，代表上下左右都有5个元素",[3233,132486,132487,132490],{},[3278,132488,132489],{"align":26580},"padding: 5px 10px;",[3278,132491,132492],{"align":26580},"2个值，代表上下内边距为5像素，左右内边距为10像素",[3233,132494,132495,132498],{},[3278,132496,132497],{"align":26580},"padding: 5px 10px 20px;",[3278,132499,132500],{"align":26580},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[3233,132502,132503,132506],{},[3278,132504,132505],{"align":26580},"padding: 5px 10px 20px 30px;",[3278,132507,132508],{"align":26580},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[3227,132510,132511,132519],{},[3230,132512,132513],{},[3233,132514,132515,132517],{},[3236,132516,131413],{"align":26580},[3236,132518,104955],{"align":26580},[3273,132520,132521,132529,132537,132545],{},[3233,132522,132523,132526],{},[3278,132524,132525],{"align":26580},"padding-left",[3278,132527,132528],{"align":26580},"左内边距",[3233,132530,132531,132534],{},[3278,132532,132533],{"align":26580},"padding-right",[3278,132535,132536],{"align":26580},"右内边距",[3233,132538,132539,132542],{},[3278,132540,132541],{"align":26580},"padding-top",[3278,132543,132544],{"align":26580},"上内边距",[3233,132546,132547,132550],{},[3278,132548,132549],{"align":26580},"padding-bottom",[3278,132551,132552],{"align":26580},"下内边距",[24,132554,132555],{"start":73},[27,132556,132557],{},"内边距会影响盒子的实际大小",[31,132559,132560],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[31,132562,132563],{},"①内容和边框有了距离，添加了内边距",[31,132565,132566],{},"②padding影响了盒子实际大小",[31,132568,132569],{},"内边距对盒子大小的影响：",[31,132571,132572],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[31,132574,132575],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[31,132577,97479],{},[31,132579,132580],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[19,132582,132584],{"id":132583},"_913-外边距","9.1.3 外边距",[24,132586,132587],{},[27,132588,132589],{},"控制盒子与盒子之间的距离",[3227,132591,132592,132600],{},[3230,132593,132594],{},[3233,132595,132596,132598],{},[3236,132597,131413],{"align":26580},[3236,132599,104955],{"align":26580},[3273,132601,132602,132610,132618,132626],{},[3233,132603,132604,132607],{},[3278,132605,132606],{"align":26580},"margin-left",[3278,132608,132609],{"align":26580},"左外边距",[3233,132611,132612,132615],{},[3278,132613,132614],{"align":26580},"margin-right",[3278,132616,132617],{"align":26580},"右外边距",[3233,132619,132620,132623],{},[3278,132621,132622],{"align":26580},"margin-top",[3278,132624,132625],{"align":26580},"上外边距",[3233,132627,132628,132631],{},[3278,132629,132630],{"align":26580},"margin-bottom",[3278,132632,132633],{"align":26580},"下外边距",[24,132635,132636],{"start":36},[27,132637,132638],{},"外边距可以让块级盒子水平居中的两个条件：",[31,132640,132641],{},"①盒子必须指定了宽度（width）",[31,132643,132644],{},"②盒子左右的外边距都设置为 auto",[190,132646,132648],{"className":128811,"code":132647,"language":128813,"meta":57,"style":57},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[196,132649,132650,132655,132662,132678],{"__ignoreMap":57},[199,132651,132652],{"class":201,"line":202},[199,132653,132654],{"class":1454},"\u002F* margin 复合写法（同上） *\u002F\n",[199,132656,132657,132660],{"class":201,"line":36},[199,132658,132659],{"class":878},".box",[199,132661,1012],{"class":205},[199,132663,132664,132666,132668,132670,132672,132675],{"class":201,"line":73},[199,132665,72729],{"class":1018},[199,132667,1022],{"class":205},[199,132669,1025],{"class":1018},[199,132671,1158],{"class":1018},[199,132673,132674],{"class":205},";  ",[199,132676,132677],{"class":1454},"\u002F* 块级盒子水平居中 *\u002F\n",[199,132679,132680],{"class":201,"line":333},[199,132681,671],{"class":205},[24,132683,132684],{"start":73},[27,132685,132686],{},"外边距塌陷问题",[31,132688,132689],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[55,132691],{"style":128667,"src":132692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[31,132694,132695],{},"解决方案：",[31,132697,132698],{},"①可以为父亲元素定义上边距",[190,132700,132701],{"className":128811,"code":132647,"language":128813,"meta":57,"style":57},[196,132702,132703,132707,132713,132727],{"__ignoreMap":57},[199,132704,132705],{"class":201,"line":202},[199,132706,132654],{"class":1454},[199,132708,132709,132711],{"class":201,"line":36},[199,132710,132659],{"class":878},[199,132712,1012],{"class":205},[199,132714,132715,132717,132719,132721,132723,132725],{"class":201,"line":73},[199,132716,72729],{"class":1018},[199,132718,1022],{"class":205},[199,132720,1025],{"class":1018},[199,132722,1158],{"class":1018},[199,132724,132674],{"class":205},[199,132726,132677],{"class":1454},[199,132728,132729],{"class":201,"line":333},[199,132730,671],{"class":205},[31,132732,132733],{},"②可以为父亲元素定义上内边距",[31,132735,132736],{},"③可以为父亲元素添加overflow:hidden",[55,132738],{"style":128667,"src":132739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[190,132741,132742],{"className":128811,"code":132647,"language":128813,"meta":57,"style":57},[196,132743,132744,132748,132754,132768],{"__ignoreMap":57},[199,132745,132746],{"class":201,"line":202},[199,132747,132654],{"class":1454},[199,132749,132750,132752],{"class":201,"line":36},[199,132751,132659],{"class":878},[199,132753,1012],{"class":205},[199,132755,132756,132758,132760,132762,132764,132766],{"class":201,"line":73},[199,132757,72729],{"class":1018},[199,132759,1022],{"class":205},[199,132761,1025],{"class":1018},[199,132763,1158],{"class":1018},[199,132765,132674],{"class":205},[199,132767,132677],{"class":1454},[199,132769,132770],{"class":201,"line":333},[199,132771,671],{"class":205},[55,132773],{"style":128667,"src":132774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[31,132776,132777],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[31,132779,132780],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[19,132782,132784],{"id":132783},"_914-清除内外边距","9.1.4 清除内外边距",[31,132786,132787],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[190,132789,132790],{"className":128811,"code":132647,"language":128813,"meta":57,"style":57},[196,132791,132792,132796,132802,132816],{"__ignoreMap":57},[199,132793,132794],{"class":201,"line":202},[199,132795,132654],{"class":1454},[199,132797,132798,132800],{"class":201,"line":36},[199,132799,132659],{"class":878},[199,132801,1012],{"class":205},[199,132803,132804,132806,132808,132810,132812,132814],{"class":201,"line":73},[199,132805,72729],{"class":1018},[199,132807,1022],{"class":205},[199,132809,1025],{"class":1018},[199,132811,1158],{"class":1018},[199,132813,132674],{"class":205},[199,132815,132677],{"class":1454},[199,132817,132818],{"class":201,"line":333},[199,132819,671],{"class":205},[31,132821,132822],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[19,132824,132826],{"id":132825},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[176,132828,132829,132832,132835,132838,132841,132844],{},[27,132830,132831],{},"文件→打开 ：可以打开我们要测量的图片",[27,132833,132834],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[27,132836,132837],{},"右击标尺，把里面的单位改为像素",[27,132839,132840],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[27,132842,132843],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[27,132845,132846],{},"用选区拖动 可以测量大小",[55,132848],{"style":128667,"src":132849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[176,132851,132852,132855],{},[27,132853,132854],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[27,132856,132857],{},"吸管取色工具",[55,132859],{"style":128667,"src":132860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[19,132862,132864],{"id":132863},"_916-案例","9.1.6 案例",[24,132866,132867],{},[27,132868,132869],{},"小米商品",[55,132871],{"style":128667,"src":132872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[190,132874,132875],{"className":128811,"code":132647,"language":128813,"meta":57,"style":57},[196,132876,132877,132881,132887,132901],{"__ignoreMap":57},[199,132878,132879],{"class":201,"line":202},[199,132880,132654],{"class":1454},[199,132882,132883,132885],{"class":201,"line":36},[199,132884,132659],{"class":878},[199,132886,1012],{"class":205},[199,132888,132889,132891,132893,132895,132897,132899],{"class":201,"line":73},[199,132890,72729],{"class":1018},[199,132892,1022],{"class":205},[199,132894,1025],{"class":1018},[199,132896,1158],{"class":1018},[199,132898,132674],{"class":205},[199,132900,132677],{"class":1454},[199,132902,132903],{"class":201,"line":333},[199,132904,671],{"class":205},[24,132906,132907],{"start":36},[27,132908,132909],{},"快报模块",[55,132911],{"style":128667,"src":132912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[190,132914,132916],{"className":129558,"code":132915,"language":129560,"meta":57,"style":57},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[196,132917,132918,132923,132938,132943],{"__ignoreMap":57},[199,132919,132920],{"class":201,"line":202},[199,132921,132922],{"class":1454},"\u003C!-- HTML 代码示例 -->\n",[199,132924,132925,132927,132929,132931,132933,132936],{"class":201,"line":36},[199,132926,887],{"class":205},[199,132928,1220],{"class":874},[199,132930,55745],{"class":878},[199,132932,895],{"class":205},[199,132934,132935],{"class":898},"\"example\"",[199,132937,882],{"class":205},[199,132939,132940],{"class":201,"line":73},[199,132941,132942],{"class":205},"  示例内容\n",[199,132944,132945,132947,132949],{"class":201,"line":333},[199,132946,1414],{"class":205},[199,132948,1220],{"class":874},[199,132950,882],{"class":205},[19,132952,132954],{"id":132953},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[24,132956,132957],{},[27,132958,132959],{},"圆角边框",[31,132961,132962],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[55,132964],{"style":128667,"src":132965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[190,132967,132969],{"className":128811,"code":132968,"language":128813,"meta":57,"style":57},"div {\n  border: 1px solid #ccc;\n}\n",[196,132970,132971,132977,132993],{"__ignoreMap":57},[199,132972,132973,132975],{"class":201,"line":202},[199,132974,1220],{"class":874},[199,132976,1012],{"class":205},[199,132978,132979,132981,132983,132985,132987,132989,132991],{"class":201,"line":36},[199,132980,73155],{"class":1018},[199,132982,1022],{"class":205},[199,132984,1115],{"class":1018},[199,132986,1087],{"class":1086},[199,132988,1120],{"class":1018},[199,132990,132203],{"class":1018},[199,132992,1028],{"class":205},[199,132994,132995],{"class":201,"line":73},[199,132996,671],{"class":205},[31,132998,132999],{},"解释:",[176,133001,133002,133005,133008,133011,133014],{},[27,133003,133004],{},"参数值可以为数值或百分比的形式",[27,133006,133007],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[27,133009,133010],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[27,133012,133013],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[27,133015,133016],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[24,133018,133019],{"start":36},[27,133020,133021],{},"盒子阴影",[190,133023,133025],{"className":128811,"code":133024,"language":128813,"meta":57,"style":57},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[196,133026,133027,133033,133070],{"__ignoreMap":57},[199,133028,133029,133031],{"class":201,"line":202},[199,133030,1220],{"class":874},[199,133032,1012],{"class":205},[199,133034,133035,133038,133040,133042,133044,133046,133048,133050,133052,133054,133056,133058,133060,133062,133064,133066,133068],{"class":201,"line":36},[199,133036,133037],{"class":1018},"  box-shadow",[199,133039,1022],{"class":205},[199,133041,1025],{"class":1018},[199,133043,17615],{"class":1018},[199,133045,1087],{"class":1086},[199,133047,4954],{"class":1018},[199,133049,1087],{"class":1086},[199,133051,81026],{"class":1018},[199,133053,1537],{"class":205},[199,133055,1025],{"class":1018},[199,133057,1912],{"class":205},[199,133059,1025],{"class":1018},[199,133061,1912],{"class":205},[199,133063,1025],{"class":1018},[199,133065,1912],{"class":205},[199,133067,88469],{"class":1018},[199,133069,5623],{"class":205},[199,133071,133072],{"class":201,"line":73},[199,133073,671],{"class":205},[3227,133075,133076,133084],{},[3230,133077,133078],{},[3233,133079,133080,133082],{},[3236,133081,3241],{"align":26580},[3236,133083,30332],{"align":26580},[3273,133085,133086,133094,133102,133110,133118,133126],{},[3233,133087,133088,133091],{},[3278,133089,133090],{"align":26580},"h-shadow",[3278,133092,133093],{"align":26580},"必需,水平阴影的位置,允许负值",[3233,133095,133096,133099],{},[3278,133097,133098],{"align":26580},"v-shadow",[3278,133100,133101],{"align":26580},"必需,垂直阴影的位置,允许负值",[3233,133103,133104,133107],{},[3278,133105,133106],{"align":26580},"blur",[3278,133108,133109],{"align":26580},"可选,模糊距离,就是影子的虚实",[3233,133111,133112,133115],{},[3278,133113,133114],{"align":26580},"spread",[3278,133116,133117],{"align":26580},"可选,阴影尺寸",[3233,133119,133120,133123],{},[3278,133121,133122],{"align":26580},"color",[3278,133124,133125],{"align":26580},"可选,阴影的颜色",[3233,133127,133128,133131],{},[3278,133129,133130],{"align":26580},"inset",[3278,133132,133133],{"align":26580},"可选,将外部阴影(outset)改为内部阴影",[24,133135,133136],{"start":73},[27,133137,133138],{},"文字阴影",[190,133140,133142],{"className":128811,"code":133141,"language":128813,"meta":57,"style":57},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[196,133143,133144,133150,133189],{"__ignoreMap":57},[199,133145,133146,133148],{"class":201,"line":202},[199,133147,31],{"class":874},[199,133149,1012],{"class":205},[199,133151,133152,133155,133157,133159,133161,133163,133165,133167,133169,133171,133173,133175,133177,133179,133181,133183,133185,133187],{"class":201,"line":36},[199,133153,133154],{"class":1018},"  text-shadow",[199,133156,1022],{"class":205},[199,133158,1115],{"class":1018},[199,133160,1087],{"class":1086},[199,133162,1495],{"class":1018},[199,133164,1087],{"class":1086},[199,133166,17615],{"class":1018},[199,133168,1087],{"class":1086},[199,133170,81026],{"class":1018},[199,133172,1537],{"class":205},[199,133174,1025],{"class":1018},[199,133176,1912],{"class":205},[199,133178,1025],{"class":1018},[199,133180,1912],{"class":205},[199,133182,1025],{"class":1018},[199,133184,1912],{"class":205},[199,133186,102780],{"class":1018},[199,133188,5623],{"class":205},[199,133190,133191],{"class":201,"line":73},[199,133192,671],{"class":205},[3227,133194,133195,133203],{},[3230,133196,133197],{},[3233,133198,133199,133201],{},[3236,133200,3241],{"align":26580},[3236,133202,30332],{"align":26580},[3273,133204,133205,133211,133218,133225],{},[3233,133206,133207,133209],{},[3278,133208,133090],{"align":26580},[3278,133210,133093],{"align":26580},[3233,133212,133213,133215],{},[3278,133214,133098],{"align":26580},[3278,133216,133217],{"align":26580},"必需,垂直阴影位置,允许负值",[3233,133219,133220,133222],{},[3278,133221,133106],{"align":26580},[3278,133223,133224],{"align":26580},"可选,模糊的距离",[3233,133226,133227,133229],{},[3278,133228,133122],{"align":26580},[3278,133230,133125],{"align":26580},[14,133232,133234],{"id":133233},"_92-浮动","9.2 浮动",[19,133236,133238],{"id":133237},"_921-浮动介绍","9.2.1 浮动介绍",[31,133240,133241],{},"在16.2中详细介绍",[19,133243,133245],{"id":133244},"_922-清除浮动","9.2.2 清除浮动",[24,133247,133248,133251],{},[27,133249,133250],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[27,133252,133253],{},"清除浮动的本质",[31,133255,133256],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[31,133258,11912],{},[176,133260,133261,133264,133267],{},[27,133262,133263],{},"如果父盒子本身有高度，则不需要清除浮动",[27,133265,133266],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[27,133268,133269],{},"父级有了高度，就不会影响下面的标准流了",[24,133271,133272],{"start":73},[27,133273,133274],{},"清除浮动样式",[190,133276,133278],{"className":128811,"code":133277,"language":128813,"meta":57,"style":57},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[196,133279,133280,133287,133298,133302,133309,133319],{"__ignoreMap":57},[199,133281,133282,133285],{"class":201,"line":202},[199,133283,133284],{"class":878},".left",[199,133286,1012],{"class":205},[199,133288,133289,133292,133294,133296],{"class":201,"line":36},[199,133290,133291],{"class":1018},"  float",[199,133293,1022],{"class":205},[199,133295,26580],{"class":1018},[199,133297,1028],{"class":205},[199,133299,133300],{"class":201,"line":73},[199,133301,671],{"class":205},[199,133303,133304,133307],{"class":201,"line":333},[199,133305,133306],{"class":878},".right",[199,133308,1012],{"class":205},[199,133310,133311,133313,133315,133317],{"class":201,"line":227},[199,133312,133291],{"class":1018},[199,133314,1022],{"class":205},[199,133316,74781],{"class":1018},[199,133318,1028],{"class":205},[199,133320,133321],{"class":201,"line":238},[199,133322,671],{"class":205},[3227,133324,133325,133333],{},[3230,133326,133327],{},[3233,133328,133329,133331],{},[3236,133330,129275],{"align":26580},[3236,133332,30332],{"align":26580},[3273,133334,133335,133342,133349],{},[3233,133336,133337,133339],{},[3278,133338,26580],{"align":26580},[3278,133340,133341],{"align":26580},"不允许左侧有浮动元素（清除左侧浮动的影响）",[3233,133343,133344,133346],{},[3278,133345,74781],{"align":26580},[3278,133347,133348],{"align":26580},"不允许右侧有浮动元素（清除右侧浮动的影响）",[3233,133350,133351,133354],{},[3278,133352,133353],{"align":26580},"both",[3278,133355,133356],{"align":26580},"同时清除左右侧浮动的影响",[31,133358,133359],{},"法一",[31,133361,133362],{},"额外标签法也称为隔墙法",[31,133364,133365],{},"使用方式：",[31,133367,133368],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[190,133370,133371],{"className":128811,"code":133277,"language":128813,"meta":57,"style":57},[196,133372,133373,133379,133389,133393,133399,133409],{"__ignoreMap":57},[199,133374,133375,133377],{"class":201,"line":202},[199,133376,133284],{"class":878},[199,133378,1012],{"class":205},[199,133380,133381,133383,133385,133387],{"class":201,"line":36},[199,133382,133291],{"class":1018},[199,133384,1022],{"class":205},[199,133386,26580],{"class":1018},[199,133388,1028],{"class":205},[199,133390,133391],{"class":201,"line":73},[199,133392,671],{"class":205},[199,133394,133395,133397],{"class":201,"line":333},[199,133396,133306],{"class":878},[199,133398,1012],{"class":205},[199,133400,133401,133403,133405,133407],{"class":201,"line":227},[199,133402,133291],{"class":1018},[199,133404,1022],{"class":205},[199,133406,74781],{"class":1018},[199,133408,1028],{"class":205},[199,133410,133411],{"class":201,"line":238},[199,133412,671],{"class":205},[31,133414,133415],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[31,133417,133418],{},"优点： 通俗易懂，书写方便",[31,133420,133421],{},"缺点： 添加许多无意义的标签，结构化较差",[31,133423,133424],{},"注意： 要求这个新的空标签必须是块级元素。",[31,133426,133427],{},"法二",[31,133429,133430],{},"父级添加overflow属性",[190,133432,133433],{"className":128811,"code":133277,"language":128813,"meta":57,"style":57},[196,133434,133435,133441,133451,133455,133461,133471],{"__ignoreMap":57},[199,133436,133437,133439],{"class":201,"line":202},[199,133438,133284],{"class":878},[199,133440,1012],{"class":205},[199,133442,133443,133445,133447,133449],{"class":201,"line":36},[199,133444,133291],{"class":1018},[199,133446,1022],{"class":205},[199,133448,26580],{"class":1018},[199,133450,1028],{"class":205},[199,133452,133453],{"class":201,"line":73},[199,133454,671],{"class":205},[199,133456,133457,133459],{"class":201,"line":333},[199,133458,133306],{"class":878},[199,133460,1012],{"class":205},[199,133462,133463,133465,133467,133469],{"class":201,"line":227},[199,133464,133291],{"class":1018},[199,133466,1022],{"class":205},[199,133468,74781],{"class":1018},[199,133470,1028],{"class":205},[199,133472,133473],{"class":201,"line":238},[199,133474,671],{"class":205},[31,133476,133477],{},"overflow: hidden;",[31,133479,133480],{},"优点：代码简洁",[31,133482,133483],{},"缺点：无法显示溢出的部分",[31,133485,133486],{},"注意：是给父元素添加代码",[31,133488,133489],{},"法三",[31,133491,133492],{},"父级添加after伪元素",[31,133494,133495,133498],{},[133496,133497],"after",{}," 方式是额外标签法的升级版",[31,133500,133501],{},"使用的时候复制就可以",[190,133503,133504],{"className":128811,"code":133277,"language":128813,"meta":57,"style":57},[196,133505,133506,133512,133522,133526,133532,133542],{"__ignoreMap":57},[199,133507,133508,133510],{"class":201,"line":202},[199,133509,133284],{"class":878},[199,133511,1012],{"class":205},[199,133513,133514,133516,133518,133520],{"class":201,"line":36},[199,133515,133291],{"class":1018},[199,133517,1022],{"class":205},[199,133519,26580],{"class":1018},[199,133521,1028],{"class":205},[199,133523,133524],{"class":201,"line":73},[199,133525,671],{"class":205},[199,133527,133528,133530],{"class":201,"line":333},[199,133529,133306],{"class":878},[199,133531,1012],{"class":205},[199,133533,133534,133536,133538,133540],{"class":201,"line":227},[199,133535,133291],{"class":1018},[199,133537,1022],{"class":205},[199,133539,74781],{"class":1018},[199,133541,1028],{"class":205},[199,133543,133544],{"class":201,"line":238},[199,133545,671],{"class":205},[31,133547,133548],{},"优点：没有增加标签，结构更简单",[31,133550,133551],{},"缺点：照顾低版本浏览器",[31,133553,133554],{},"代表网站： 百度、淘宝网、网易等",[31,133556,133557],{},"法四",[31,133559,133560],{},"父级添加双伪元素",[190,133562,133563],{"className":128811,"code":133277,"language":128813,"meta":57,"style":57},[196,133564,133565,133571,133581,133585,133591,133601],{"__ignoreMap":57},[199,133566,133567,133569],{"class":201,"line":202},[199,133568,133284],{"class":878},[199,133570,1012],{"class":205},[199,133572,133573,133575,133577,133579],{"class":201,"line":36},[199,133574,133291],{"class":1018},[199,133576,1022],{"class":205},[199,133578,26580],{"class":1018},[199,133580,1028],{"class":205},[199,133582,133583],{"class":201,"line":73},[199,133584,671],{"class":205},[199,133586,133587,133589],{"class":201,"line":333},[199,133588,133306],{"class":878},[199,133590,1012],{"class":205},[199,133592,133593,133595,133597,133599],{"class":201,"line":227},[199,133594,133291],{"class":1018},[199,133596,1022],{"class":205},[199,133598,74781],{"class":1018},[199,133600,1028],{"class":205},[199,133602,133603],{"class":201,"line":238},[199,133604,671],{"class":205},[31,133606,133607],{},"优点：代码更简洁",[31,133609,133551],{},[31,133611,133612],{},"代表网站：小米、腾讯等",[14,133614,133616],{"id":133615},"_93-ps切图","9.3 PS切图",[19,133618,133620],{"id":133619},"_931-常见图片格式","9.3.1 常见图片格式",[3227,133622,133623,133633],{},[3230,133624,133625],{},[3233,133626,133627,133630],{},[3236,133628,133629],{"align":26580},"jpg图像格式",[3236,133631,133632],{"align":26580},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[3273,133634,133635,133643,133651],{},[3233,133636,133637,133640],{},[3278,133638,133639],{"align":26580},"gif图像格式",[3278,133641,133642],{"align":26580},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[3233,133644,133645,133648],{},[3278,133646,133647],{"align":26580},"png图像格式",[3278,133649,133650],{"align":26580},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[3233,133652,133653,133656],{},[3278,133654,133655],{"align":26580},"PSD图像格式",[3278,133657,133658],{"align":26580},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[19,133660,133662],{"id":133661},"_932-图层切图","9.3.2 图层切图",[31,133664,133665],{},"最简单的切图方式：右击图层 → 导出 → 切片",[31,133667,133668],{},"按住shift选中两个图层->图层菜单->合并图层",[19,133670,133672],{"id":133671},"_933-切片切图","9.3.3 切片切图",[176,133674,133675,133678],{},[27,133676,133677],{},"利用切片工具手动划出",[27,133679,133680],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[19,133682,133684],{"id":133683},"_934-切图步骤","9.3.4 切图步骤",[31,133686,133687],{},"用切片工具选中：",[55,133689],{"style":128667,"src":133690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[31,133692,133693],{},"文件 -> 导出",[55,133695],{"style":128667,"src":133696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1002,133698,133699],{},"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":57,"searchDepth":36,"depth":36,"links":133701},[133702,133711,133715],{"id":132138,"depth":36,"text":132139,"children":133703},[133704,133705,133706,133707,133708,133709,133710],{"id":132163,"depth":73,"text":132164},{"id":132454,"depth":73,"text":132455},{"id":132583,"depth":73,"text":132584},{"id":132783,"depth":73,"text":132784},{"id":132825,"depth":73,"text":132826},{"id":132863,"depth":73,"text":132864},{"id":132953,"depth":73,"text":132954},{"id":133233,"depth":36,"text":133234,"children":133712},[133713,133714],{"id":133237,"depth":73,"text":133238},{"id":133244,"depth":73,"text":133245},{"id":133615,"depth":36,"text":133616,"children":133716},[133717,133718,133719,133720],{"id":133619,"depth":73,"text":133620},{"id":133661,"depth":73,"text":133662},{"id":133671,"depth":73,"text":133672},{"id":133683,"depth":73,"text":133684},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132130,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133727,"title":133728,"body":133729,"description":3023,"extension":3024,"meta":134370,"navigation":906,"path":134371,"seo":134372,"stem":134373,"__hash__":134374},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133730,"toc":134358},[133731,133734,133738,133764,133798,133802,133806,133809,133851,133858,133868,133876,133878,133881,133884,133887,133894,133908,133912,133915,133944,133948,133951,133965,133969,133972,134000,134004,134007,134033,134037,134042,134075,134080,134108,134112,134129,134175,134180,134224,134241,134348,134356],[10,133732,133728],{"id":133733},"_10-css规范与学成在线案例",[14,133735,133737],{"id":133736},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[24,133739,133740,133746,133752,133758],{},[27,133741,133742,133745],{},[49,133743,133744],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[27,133747,133748,133751],{},[49,133749,133750],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[27,133753,133754,133757],{},[49,133755,133756],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[27,133759,133760,133763],{},[49,133761,133762],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[190,133765,133766],{"className":128811,"code":132175,"language":128813,"meta":57,"style":57},[196,133767,133768,133772,133778,133794],{"__ignoreMap":57},[199,133769,133770],{"class":201,"line":202},[199,133771,132182],{"class":1454},[199,133773,133774,133776],{"class":201,"line":36},[199,133775,1220],{"class":874},[199,133777,1012],{"class":205},[199,133779,133780,133782,133784,133786,133788,133790,133792],{"class":201,"line":73},[199,133781,73155],{"class":1018},[199,133783,1022],{"class":205},[199,133785,1115],{"class":1018},[199,133787,1087],{"class":1086},[199,133789,1120],{"class":1018},[199,133791,132203],{"class":1018},[199,133793,1028],{"class":205},[199,133795,133796],{"class":201,"line":333},[199,133797,671],{"class":205},[14,133799,133801],{"id":133800},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[19,133803,133805],{"id":133804},"_1021-header头部制作","10.2.1 header头部制作",[55,133807],{"style":128667,"src":133808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[176,133810,133811,133818,133825,133831,133838,133845],{},[27,133812,133813,133814,133817],{},"1号是版心盒子 ",[49,133815,133816],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[27,133819,133820,133821,133824],{},"版心盒子 里面包含 2号盒子 ",[49,133822,133823],{},"logo"," 图标",[27,133826,133827,133828,133830],{},"版心盒子 里面包含 3号盒子 ",[49,133829,55972],{}," 导航栏",[27,133832,133833,133834,133837],{},"版心盒子 里面包含 4号盒子 ",[49,133835,133836],{},"search"," 搜索框",[27,133839,133840,133841,133844],{},"版心盒子 里面包含 5号盒子 ",[49,133842,133843],{},"user"," 个人信息",[27,133846,133847,133848],{},"注意，要求里面的 ",[49,133849,133850],{},"4个子盒子 必须都浮动",[24,133852,133853],{},[27,133854,133855],{},[49,133856,133857],{},"导航栏注意点:",[31,133859,133860,133861,133864,133865],{},"实际开发中， ",[49,133862,133863],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[49,133866,133867],{},"用 li 包含链接(li+a)的做法",[176,133869,133870,133873],{},[27,133871,133872],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[27,133874,133875],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[31,133877,11912],{},[31,133879,133880],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[31,133882,133883],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[31,133885,133886],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[24,133888,133889],{"start":36},[27,133890,133891],{},[49,133892,133893],{},"4号盒子search的细节：",[176,133895,133896,133899,133902],{},[27,133897,133898],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[27,133900,133901],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[27,133903,133904,133907],{},[196,133905,133906],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[19,133909,133911],{"id":133910},"_1022-banner制作","10.2.2 banner制作",[55,133913],{"style":128667,"src":133914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[176,133916,133917,133924,133930,133937],{},[27,133918,133919,133920,133923],{},"1号盒子是通栏的大盒子 ",[49,133921,133922],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[27,133925,133926,133927,133929],{},"2号盒子是版心 ",[49,133928,3874],{}," ， 要水平居中对齐",[27,133931,133932,133933,133936],{},"3号盒子版心内，左对齐 ",[49,133934,133935],{},"subnav"," 侧导航栏",[27,133938,133939,133940,133943],{},"4号盒子版心内，右对齐 ",[49,133941,133942],{},"course"," 课程",[19,133945,133947],{"id":133946},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[55,133949],{"style":128667,"src":133950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[176,133952,133953,133956,133959,133962],{},[27,133954,133955],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[27,133957,133958],{},"1号盒子是标题 H3 左侧浮动",[27,133960,133961],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[27,133963,133964],{},"3号盒子 右浮动 mod 修改",[19,133966,133968],{"id":133967},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[55,133970],{"style":128667,"src":133971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[176,133973,133974,133980,133987,133994,133997],{},[27,133975,133976,133977,133979],{},"1号盒子为最大的盒子 ",[49,133978,55973],{}," 版心水平居中对齐",[27,133981,133982,133983,133986],{},"2号盒子为上面部分 ",[49,133984,133985],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[27,133988,133989,133990,133993],{},"3号盒子为底下部分 ",[49,133991,133992],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[27,133995,133996],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[27,133998,133999],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[19,134001,134003],{"id":134002},"_1025-底部模块制作","10.2.5 底部模块制作",[55,134005],{"style":128667,"src":134006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[176,134008,134009,134016,134019,134026],{},[27,134010,134011,134012,134015],{},"1号盒子通栏大盒子 底部 ",[49,134013,134014],{},"footer"," 给高度 底色是白色",[27,134017,134018],{},"2号盒子版心水平居中",[27,134020,134021,134022,134025],{},"3号盒子版权 ",[49,134023,134024],{},"copyright"," 左对齐",[27,134027,134028,134029,134032],{},"4号盒子 链接组 ",[49,134030,134031],{},"links"," 右对齐",[19,134034,134036],{"id":134035},"_1026-代码模块","10.2.6 代码模块",[24,134038,134039],{},[27,134040,134041],{},"html部分",[190,134043,134045],{"className":129558,"code":134044,"language":129560,"meta":57,"style":57},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[196,134046,134047],{"__ignoreMap":57},[199,134048,134049,134051,134053,134055,134057,134060,134063,134065,134068,134071,134073],{"class":201,"line":202},[199,134050,887],{"class":205},[199,134052,2867],{"class":874},[199,134054,63316],{"class":878},[199,134056,895],{"class":205},[199,134058,134059],{"class":898},"\"https:\u002F\u002Fexample.com\"",[199,134061,134062],{"class":878}," target",[199,134064,895],{"class":205},[199,134066,134067],{"class":898},"\"_blank\"",[199,134069,134070],{"class":205},">链接文字\u003C\u002F",[199,134072,2867],{"class":874},[199,134074,882],{"class":205},[24,134076,134077],{"start":36},[27,134078,134079],{},"css部分",[190,134081,134082],{"className":129558,"code":134044,"language":129560,"meta":57,"style":57},[196,134083,134084],{"__ignoreMap":57},[199,134085,134086,134088,134090,134092,134094,134096,134098,134100,134102,134104,134106],{"class":201,"line":202},[199,134087,887],{"class":205},[199,134089,2867],{"class":874},[199,134091,63316],{"class":878},[199,134093,895],{"class":205},[199,134095,134059],{"class":898},[199,134097,134062],{"class":878},[199,134099,895],{"class":205},[199,134101,134067],{"class":898},[199,134103,134070],{"class":205},[199,134105,2867],{"class":874},[199,134107,882],{"class":205},[19,134109,134111],{"id":134110},"_1027-收获","10.2.7 收获",[24,134113,134114,134117,134120,134123,134126],{},[27,134115,134116],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[27,134118,134119],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[27,134121,134122],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[27,134124,134125],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[27,134127,134128],{},"遗忘代码",[190,134130,134132],{"className":128811,"code":134131,"language":128813,"meta":57,"style":57},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[196,134133,134134,134156,134161,134171],{"__ignoreMap":57},[199,134135,134136,134138,134140,134142,134144,134146,134148,134150,134152,134154],{"class":201,"line":202},[199,134137,1220],{"class":874},[199,134139,1912],{"class":205},[199,134141,31],{"class":874},[199,134143,1912],{"class":205},[199,134145,10],{"class":874},[199,134147,1912],{"class":205},[199,134149,176],{"class":874},[199,134151,1912],{"class":205},[199,134153,27],{"class":874},[199,134155,1012],{"class":205},[199,134157,134158],{"class":201,"line":36},[199,134159,134160],{"class":1454},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[199,134162,134163,134165,134167,134169],{"class":201,"line":73},[199,134164,130427],{"class":1018},[199,134166,1022],{"class":205},[199,134168,63128],{"class":1018},[199,134170,1028],{"class":205},[199,134172,134173],{"class":201,"line":333},[199,134174,671],{"class":205},[24,134176,134177],{"start":238},[27,134178,134179],{},"html引css的程序",[190,134181,134182],{"className":128811,"code":134131,"language":128813,"meta":57,"style":57},[196,134183,134184,134206,134210,134220],{"__ignoreMap":57},[199,134185,134186,134188,134190,134192,134194,134196,134198,134200,134202,134204],{"class":201,"line":202},[199,134187,1220],{"class":874},[199,134189,1912],{"class":205},[199,134191,31],{"class":874},[199,134193,1912],{"class":205},[199,134195,10],{"class":874},[199,134197,1912],{"class":205},[199,134199,176],{"class":874},[199,134201,1912],{"class":205},[199,134203,27],{"class":874},[199,134205,1012],{"class":205},[199,134207,134208],{"class":201,"line":36},[199,134209,134160],{"class":1454},[199,134211,134212,134214,134216,134218],{"class":201,"line":73},[199,134213,130427],{"class":1018},[199,134215,1022],{"class":205},[199,134217,63128],{"class":1018},[199,134219,1028],{"class":205},[199,134221,134222],{"class":201,"line":333},[199,134223,671],{"class":205},[24,134225,134226,134229,134232,134235,134238],{"start":252},[27,134227,134228],{},"浮动的盒子不会有外边距合并问题",[27,134230,134231],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[27,134233,134234],{},"ctrl+g快速定位行；shift+alt多个光标",[27,134236,134237],{},"学习上方各个模块的选择器起名方法，以后就这样用",[27,134239,134240],{},"在写选择器时尽量写全一些，例如",[190,134242,134244],{"className":128811,"code":134243,"language":128813,"meta":57,"style":57},"\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",[196,134245,134246,134251,134267,134272,134287,134292,134307,134312,134327,134332],{"__ignoreMap":57},[199,134247,134248],{"class":201,"line":202},[199,134249,134250],{"class":1454},"\u002F* 静态定位（默认） *\u002F\n",[199,134252,134253,134256,134258,134260,134262,134265],{"class":201,"line":36},[199,134254,134255],{"class":878},".static",[199,134257,82066],{"class":205},[199,134259,131171],{"class":1018},[199,134261,1022],{"class":205},[199,134263,134264],{"class":1018},"static",[199,134266,131741],{"class":205},[199,134268,134269],{"class":201,"line":73},[199,134270,134271],{"class":1454},"\u002F* 相对定位 *\u002F\n",[199,134273,134274,134277,134279,134281,134283,134285],{"class":201,"line":333},[199,134275,134276],{"class":878},".relative",[199,134278,82066],{"class":205},[199,134280,131171],{"class":1018},[199,134282,1022],{"class":205},[199,134284,57023],{"class":1018},[199,134286,131741],{"class":205},[199,134288,134289],{"class":201,"line":227},[199,134290,134291],{"class":1454},"\u002F* 绝对定位 *\u002F\n",[199,134293,134294,134297,134299,134301,134303,134305],{"class":201,"line":238},[199,134295,134296],{"class":878},".absolute",[199,134298,82066],{"class":205},[199,134300,131171],{"class":1018},[199,134302,1022],{"class":205},[199,134304,57090],{"class":1018},[199,134306,131741],{"class":205},[199,134308,134309],{"class":201,"line":252},[199,134310,134311],{"class":1454},"\u002F* 固定定位 *\u002F\n",[199,134313,134314,134317,134319,134321,134323,134325],{"class":201,"line":388},[199,134315,134316],{"class":878},".fixed",[199,134318,82066],{"class":205},[199,134320,131171],{"class":1018},[199,134322,1022],{"class":205},[199,134324,88492],{"class":1018},[199,134326,131741],{"class":205},[199,134328,134329],{"class":201,"line":415},[199,134330,134331],{"class":1454},"\u002F* 粘性定位 *\u002F\n",[199,134333,134334,134337,134339,134341,134343,134346],{"class":201,"line":426},[199,134335,134336],{"class":878},".sticky",[199,134338,82066],{"class":205},[199,134340,131171],{"class":1018},[199,134342,1022],{"class":205},[199,134344,134345],{"class":1018},"sticky",[199,134347,131741],{"class":205},[24,134349,134350,134353],{"start":1031},[27,134351,134352],{},"一定要用好注释",[27,134354,134355],{},"浮动的盒子不会有外边距合并的问题",[1002,134357,133699],{},{"title":57,"searchDepth":36,"depth":36,"links":134359},[134360,134361],{"id":133736,"depth":36,"text":133737},{"id":133800,"depth":36,"text":133801,"children":134362},[134363,134364,134365,134366,134367,134368,134369],{"id":133804,"depth":73,"text":133805},{"id":133910,"depth":73,"text":133911},{"id":133946,"depth":73,"text":133947},{"id":133967,"depth":73,"text":133968},{"id":134002,"depth":73,"text":134003},{"id":134035,"depth":73,"text":134036},{"id":134110,"depth":73,"text":134111},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133728,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134376,"title":134377,"body":134378,"description":3023,"extension":3024,"meta":135864,"navigation":906,"path":135865,"seo":135866,"stem":135867,"__hash__":135868},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134379,"toc":135856},[134380,134383,134387,134391,134402,134406,134423,134467,134500,134503,134520,134523,134526,134570,134574,134578,134581,134584,134588,134591,134602,134665,134706,134709,134724,134778,134786,134789,134800,134854,134880,134883,134896,134950,134982,135036,135059,135113,135116,135119,135126,135180,135201,135255,135258,135261,135346,135354,135411,135434,135438,135441,135459,135463,135482,135536,135574,135578,135581,135584,135606,135610,135618,135621,135626,135637,135640,135644,135658,135702,135705,135709,135712,135717,135743,135748,135825,135828,135832,135835,135838,135841,135844,135847,135850,135853],[10,134381,134377],{"id":134382},"_11-传统布局与定位体系",[14,134384,134386],{"id":134385},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[19,134388,134390],{"id":134389},"_1111-普通流标准流","11.1.1 普通流（标准流）",[176,134392,134393,134396,134399],{},[27,134394,134395],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[27,134397,134398],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[27,134400,134401],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[19,134403,134405],{"id":134404},"_1112-浮动","11.1.2 浮动",[176,134407,134408,134411,134414,134417,134420],{},[27,134409,134410],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[27,134412,134413],{},"浮动可以改变元素标签默认的排列方式",[27,134415,134416],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[27,134418,134419],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[27,134421,134422],{},"在使用行内块转换时盒子之间是有空隙的",[190,134424,134425],{"className":128811,"code":133277,"language":128813,"meta":57,"style":57},[196,134426,134427,134433,134443,134447,134453,134463],{"__ignoreMap":57},[199,134428,134429,134431],{"class":201,"line":202},[199,134430,133284],{"class":878},[199,134432,1012],{"class":205},[199,134434,134435,134437,134439,134441],{"class":201,"line":36},[199,134436,133291],{"class":1018},[199,134438,1022],{"class":205},[199,134440,26580],{"class":1018},[199,134442,1028],{"class":205},[199,134444,134445],{"class":201,"line":73},[199,134446,671],{"class":205},[199,134448,134449,134451],{"class":201,"line":333},[199,134450,133306],{"class":878},[199,134452,1012],{"class":205},[199,134454,134455,134457,134459,134461],{"class":201,"line":227},[199,134456,133291],{"class":1018},[199,134458,1022],{"class":205},[199,134460,74781],{"class":1018},[199,134462,1028],{"class":205},[199,134464,134465],{"class":201,"line":238},[199,134466,671],{"class":205},[3227,134468,134469,134477],{},[3230,134470,134471],{},[3233,134472,134473,134475],{},[3236,134474,129275],{"align":26580},[3236,134476,30332],{"align":26580},[3273,134478,134479,134486,134493],{},[3233,134480,134481,134483],{},[3278,134482,56996],{"align":26580},[3278,134484,134485],{"align":26580},"元素不浮动（默认值）",[3233,134487,134488,134490],{},[3278,134489,26580],{"align":26580},[3278,134491,134492],{"align":26580},"元素向左浮动",[3233,134494,134495,134497],{},[3278,134496,74781],{"align":26580},[3278,134498,134499],{"align":26580},"元素向右浮动",[31,134501,134502],{},"浮动重点：",[176,134504,134505,134508,134511,134514,134517],{},[27,134506,134507],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[27,134509,134510],{},"浮动的元素会一行内显示并且元素顶部对齐",[27,134512,134513],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[27,134515,134516],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[27,134518,134519],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[31,134521,134522],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[31,134524,134525],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[190,134527,134528],{"className":128811,"code":133277,"language":128813,"meta":57,"style":57},[196,134529,134530,134536,134546,134550,134556,134566],{"__ignoreMap":57},[199,134531,134532,134534],{"class":201,"line":202},[199,134533,133284],{"class":878},[199,134535,1012],{"class":205},[199,134537,134538,134540,134542,134544],{"class":201,"line":36},[199,134539,133291],{"class":1018},[199,134541,1022],{"class":205},[199,134543,26580],{"class":1018},[199,134545,1028],{"class":205},[199,134547,134548],{"class":201,"line":73},[199,134549,671],{"class":205},[199,134551,134552,134554],{"class":201,"line":333},[199,134553,133306],{"class":878},[199,134555,1012],{"class":205},[199,134557,134558,134560,134562,134564],{"class":201,"line":227},[199,134559,133291],{"class":1018},[199,134561,1022],{"class":205},[199,134563,74781],{"class":1018},[199,134565,1028],{"class":205},[199,134567,134568],{"class":201,"line":238},[199,134569,671],{"class":205},[19,134571,134573],{"id":134572},"_1113-定位","11.1.3 定位",[627,134575,134577],{"id":134576},"_11131-使用场景","11.1.3.1 使用场景",[31,134579,134580],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[31,134582,134583],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[627,134585,134587],{"id":134586},"_11132-定位组成","11.1.3.2 定位组成",[31,134589,134590],{},"定位 = 定位模式 + 边偏移",[24,134592,134593],{},[27,134594,134595,134598,134599],{},[49,134596,134597],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[49,134600,134601],{},"定位模式",[190,134603,134605],{"className":128811,"code":134604,"language":128813,"meta":57,"style":57},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[196,134606,134607,134613,134627,134644,134661],{"__ignoreMap":57},[199,134608,134609,134611],{"class":201,"line":202},[199,134610,132659],{"class":878},[199,134612,1012],{"class":205},[199,134614,134615,134618,134620,134622,134624],{"class":201,"line":36},[199,134616,134617],{"class":1018},"  position",[199,134619,1022],{"class":205},[199,134621,57023],{"class":1018},[199,134623,132674],{"class":205},[199,134625,134626],{"class":1454},"\u002F* 定位模式 *\u002F\n",[199,134628,134629,134632,134634,134636,134638,134641],{"class":201,"line":73},[199,134630,134631],{"class":1018},"  top",[199,134633,1022],{"class":205},[199,134635,3528],{"class":1018},[199,134637,1087],{"class":1086},[199,134639,134640],{"class":205},";           ",[199,134642,134643],{"class":1454},"\u002F* 边偏移：上 *\u002F\n",[199,134645,134646,134649,134651,134653,134655,134658],{"class":201,"line":333},[199,134647,134648],{"class":1018},"  left",[199,134650,1022],{"class":205},[199,134652,3779],{"class":1018},[199,134654,1087],{"class":1086},[199,134656,134657],{"class":205},";          ",[199,134659,134660],{"class":1454},"\u002F* 边偏移：左 *\u002F\n",[199,134662,134663],{"class":201,"line":227},[199,134664,671],{"class":205},[3227,134666,134667,134676],{},[3230,134668,134669],{},[3233,134670,134671,134673],{},[3236,134672,3241],{"align":26580},[3236,134674,134675],{"align":26580},"语义",[3273,134677,134678,134685,134692,134699],{},[3233,134679,134680,134682],{},[3278,134681,134264],{"align":26580},[3278,134683,134684],{"align":26580},"静态定位",[3233,134686,134687,134689],{},[3278,134688,57023],{"align":26580},[3278,134690,134691],{"align":26580},"相对定位",[3233,134693,134694,134696],{},[3278,134695,57090],{"align":26580},[3278,134697,134698],{"align":26580},"绝对定位",[3233,134700,134701,134703],{},[3278,134702,88492],{"align":26580},[3278,134704,134705],{"align":26580},"固定定位",[31,134707,134708],{},"（1）静态定位：",[176,134710,134711,134722],{},[27,134712,134713,134714,134717,134718,134721],{},"静态定位是元素的 ",[49,134715,134716],{},"默认定位方式"," ， ",[49,134719,134720],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[27,134723,8078],{},[190,134725,134726],{"className":128811,"code":134604,"language":128813,"meta":57,"style":57},[196,134727,134728,134734,134746,134760,134774],{"__ignoreMap":57},[199,134729,134730,134732],{"class":201,"line":202},[199,134731,132659],{"class":878},[199,134733,1012],{"class":205},[199,134735,134736,134738,134740,134742,134744],{"class":201,"line":36},[199,134737,134617],{"class":1018},[199,134739,1022],{"class":205},[199,134741,57023],{"class":1018},[199,134743,132674],{"class":205},[199,134745,134626],{"class":1454},[199,134747,134748,134750,134752,134754,134756,134758],{"class":201,"line":73},[199,134749,134631],{"class":1018},[199,134751,1022],{"class":205},[199,134753,3528],{"class":1018},[199,134755,1087],{"class":1086},[199,134757,134640],{"class":205},[199,134759,134643],{"class":1454},[199,134761,134762,134764,134766,134768,134770,134772],{"class":201,"line":333},[199,134763,134648],{"class":1018},[199,134765,1022],{"class":205},[199,134767,3779],{"class":1018},[199,134769,1087],{"class":1086},[199,134771,134657],{"class":205},[199,134773,134660],{"class":1454},[199,134775,134776],{"class":201,"line":227},[199,134777,671],{"class":205},[176,134779,134780,134783],{},[27,134781,134782],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[27,134784,134785],{},"静态定位在布局时我们几乎不用的",[31,134787,134788],{},"（2）相对定位",[176,134790,134791,134798],{},[27,134792,134793,134794,134797],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[49,134795,134796],{},"原来的位置"," 来说的（自恋型）",[27,134799,8078],{},[190,134801,134802],{"className":128811,"code":134604,"language":128813,"meta":57,"style":57},[196,134803,134804,134810,134822,134836,134850],{"__ignoreMap":57},[199,134805,134806,134808],{"class":201,"line":202},[199,134807,132659],{"class":878},[199,134809,1012],{"class":205},[199,134811,134812,134814,134816,134818,134820],{"class":201,"line":36},[199,134813,134617],{"class":1018},[199,134815,1022],{"class":205},[199,134817,57023],{"class":1018},[199,134819,132674],{"class":205},[199,134821,134626],{"class":1454},[199,134823,134824,134826,134828,134830,134832,134834],{"class":201,"line":73},[199,134825,134631],{"class":1018},[199,134827,1022],{"class":205},[199,134829,3528],{"class":1018},[199,134831,1087],{"class":1086},[199,134833,134640],{"class":205},[199,134835,134643],{"class":1454},[199,134837,134838,134840,134842,134844,134846,134848],{"class":201,"line":333},[199,134839,134648],{"class":1018},[199,134841,1022],{"class":205},[199,134843,3779],{"class":1018},[199,134845,1087],{"class":1086},[199,134847,134657],{"class":205},[199,134849,134660],{"class":1454},[199,134851,134852],{"class":201,"line":227},[199,134853,671],{"class":205},[176,134855,134856],{},[27,134857,134858,134859,134861,134862,134864,134865,134868,134869,134872,134873,134875,134876,134879],{},"相对定位的特点：",[55975,134860],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55975,134863],{},"  ② ",[49,134866,134867],{},"原来"," 在标准流的 ",[49,134870,134871],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55975,134874],{},"  ③因此， ",[49,134877,134878],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[31,134881,134882],{},"（3）绝对定位",[176,134884,134885,134894],{},[27,134886,134887,134889,134890,134893],{},[49,134888,134698],{}," 是元素在移动位置的时候，是相对于它 ",[49,134891,134892],{},"祖先元素"," 来说的（拼爹型）",[27,134895,8078],{},[190,134897,134898],{"className":128811,"code":134604,"language":128813,"meta":57,"style":57},[196,134899,134900,134906,134918,134932,134946],{"__ignoreMap":57},[199,134901,134902,134904],{"class":201,"line":202},[199,134903,132659],{"class":878},[199,134905,1012],{"class":205},[199,134907,134908,134910,134912,134914,134916],{"class":201,"line":36},[199,134909,134617],{"class":1018},[199,134911,1022],{"class":205},[199,134913,57023],{"class":1018},[199,134915,132674],{"class":205},[199,134917,134626],{"class":1454},[199,134919,134920,134922,134924,134926,134928,134930],{"class":201,"line":73},[199,134921,134631],{"class":1018},[199,134923,1022],{"class":205},[199,134925,3528],{"class":1018},[199,134927,1087],{"class":1086},[199,134929,134640],{"class":205},[199,134931,134643],{"class":1454},[199,134933,134934,134936,134938,134940,134942,134944],{"class":201,"line":333},[199,134935,134648],{"class":1018},[199,134937,1022],{"class":205},[199,134939,3779],{"class":1018},[199,134941,1087],{"class":1086},[199,134943,134657],{"class":205},[199,134945,134660],{"class":1454},[199,134947,134948],{"class":201,"line":227},[199,134949,671],{"class":205},[176,134951,134952,134967,134976,134979],{},[27,134953,134954,134955,134957,134958,134960,134961,134963,134964,134966],{},"绝对定位的特点：",[55975,134956],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55975,134959],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55975,134962],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55975,134965],{},"  (4)固定定位",[27,134968,134969,134971,134972,134975],{},[49,134970,134705],{}," 是元素 ",[49,134973,134974],{},"固定于浏览器可视区的位置"," 。（认死理型）",[27,134977,134978],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[27,134980,134981],{},"语法:",[190,134983,134984],{"className":128811,"code":134604,"language":128813,"meta":57,"style":57},[196,134985,134986,134992,135004,135018,135032],{"__ignoreMap":57},[199,134987,134988,134990],{"class":201,"line":202},[199,134989,132659],{"class":878},[199,134991,1012],{"class":205},[199,134993,134994,134996,134998,135000,135002],{"class":201,"line":36},[199,134995,134617],{"class":1018},[199,134997,1022],{"class":205},[199,134999,57023],{"class":1018},[199,135001,132674],{"class":205},[199,135003,134626],{"class":1454},[199,135005,135006,135008,135010,135012,135014,135016],{"class":201,"line":73},[199,135007,134631],{"class":1018},[199,135009,1022],{"class":205},[199,135011,3528],{"class":1018},[199,135013,1087],{"class":1086},[199,135015,134640],{"class":205},[199,135017,134643],{"class":1454},[199,135019,135020,135022,135024,135026,135028,135030],{"class":201,"line":333},[199,135021,134648],{"class":1018},[199,135023,1022],{"class":205},[199,135025,3779],{"class":1018},[199,135027,1087],{"class":1086},[199,135029,134657],{"class":205},[199,135031,134660],{"class":1454},[199,135033,135034],{"class":201,"line":227},[199,135035,671],{"class":205},[176,135037,135038,135047],{},[27,135039,135040,135041,135043,135044,135046],{},"特点:",[55975,135042],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55975,135045],{},"  ②固定定位不再占有原先的位置,完全脱标",[27,135048,135049,135050,135052,135053,135055,135056,135058],{},"固定在版心位置的方法:",[55975,135051],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55975,135054],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55975,135057],{},"  实例：",[190,135060,135061],{"className":128811,"code":134604,"language":128813,"meta":57,"style":57},[196,135062,135063,135069,135081,135095,135109],{"__ignoreMap":57},[199,135064,135065,135067],{"class":201,"line":202},[199,135066,132659],{"class":878},[199,135068,1012],{"class":205},[199,135070,135071,135073,135075,135077,135079],{"class":201,"line":36},[199,135072,134617],{"class":1018},[199,135074,1022],{"class":205},[199,135076,57023],{"class":1018},[199,135078,132674],{"class":205},[199,135080,134626],{"class":1454},[199,135082,135083,135085,135087,135089,135091,135093],{"class":201,"line":73},[199,135084,134631],{"class":1018},[199,135086,1022],{"class":205},[199,135088,3528],{"class":1018},[199,135090,1087],{"class":1086},[199,135092,134640],{"class":205},[199,135094,134643],{"class":1454},[199,135096,135097,135099,135101,135103,135105,135107],{"class":201,"line":333},[199,135098,134648],{"class":1018},[199,135100,1022],{"class":205},[199,135102,3779],{"class":1018},[199,135104,1087],{"class":1086},[199,135106,134657],{"class":205},[199,135108,134660],{"class":1454},[199,135110,135111],{"class":201,"line":227},[199,135112,671],{"class":205},[55,135114],{"style":128667,"src":135115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[31,135117,135118],{},"(5)粘性定位",[176,135120,135121,135124],{},[27,135122,135123],{},"粘性定位可以被认为是相对定位和固定定位的混合",[27,135125,8078],{},[190,135127,135128],{"className":128811,"code":134604,"language":128813,"meta":57,"style":57},[196,135129,135130,135136,135148,135162,135176],{"__ignoreMap":57},[199,135131,135132,135134],{"class":201,"line":202},[199,135133,132659],{"class":878},[199,135135,1012],{"class":205},[199,135137,135138,135140,135142,135144,135146],{"class":201,"line":36},[199,135139,134617],{"class":1018},[199,135141,1022],{"class":205},[199,135143,57023],{"class":1018},[199,135145,132674],{"class":205},[199,135147,134626],{"class":1454},[199,135149,135150,135152,135154,135156,135158,135160],{"class":201,"line":73},[199,135151,134631],{"class":1018},[199,135153,1022],{"class":205},[199,135155,3528],{"class":1018},[199,135157,1087],{"class":1086},[199,135159,134640],{"class":205},[199,135161,134643],{"class":1454},[199,135163,135164,135166,135168,135170,135172,135174],{"class":201,"line":333},[199,135165,134648],{"class":1018},[199,135167,1022],{"class":205},[199,135169,3779],{"class":1018},[199,135171,1087],{"class":1086},[199,135173,134657],{"class":205},[199,135175,134660],{"class":1454},[199,135177,135178],{"class":201,"line":227},[199,135179,671],{"class":205},[176,135181,135182],{},[27,135183,135184,135185,135187,135188,135190,135191,135193,135194,135197,135198,135200],{},"粘性定位的特点：",[55975,135186],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55975,135189],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55975,135192],{},"  ③必须添加 top 、left、right、bottom ",[49,135195,135196],{},"其中一个"," 才有效",[55975,135199],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[190,135202,135203],{"className":128811,"code":134604,"language":128813,"meta":57,"style":57},[196,135204,135205,135211,135223,135237,135251],{"__ignoreMap":57},[199,135206,135207,135209],{"class":201,"line":202},[199,135208,132659],{"class":878},[199,135210,1012],{"class":205},[199,135212,135213,135215,135217,135219,135221],{"class":201,"line":36},[199,135214,134617],{"class":1018},[199,135216,1022],{"class":205},[199,135218,57023],{"class":1018},[199,135220,132674],{"class":205},[199,135222,134626],{"class":1454},[199,135224,135225,135227,135229,135231,135233,135235],{"class":201,"line":73},[199,135226,134631],{"class":1018},[199,135228,1022],{"class":205},[199,135230,3528],{"class":1018},[199,135232,1087],{"class":1086},[199,135234,134640],{"class":205},[199,135236,134643],{"class":1454},[199,135238,135239,135241,135243,135245,135247,135249],{"class":201,"line":333},[199,135240,134648],{"class":1018},[199,135242,1022],{"class":205},[199,135244,3779],{"class":1018},[199,135246,1087],{"class":1086},[199,135248,134657],{"class":205},[199,135250,134660],{"class":1454},[199,135252,135253],{"class":201,"line":227},[199,135254,671],{"class":205},[55,135256],{"style":128667,"src":135257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[31,135259,135260],{},"(6)总结",[3227,135262,135263,135278],{},[3230,135264,135265],{},[3233,135266,135267,135269,135272,135275],{},[3236,135268,134601],{"align":26580},[3236,135270,135271],{"align":26580},"是否脱标",[3236,135273,135274],{"align":26580},"移动位置",[3236,135276,135277],{"align":26580},"是否常用",[3273,135279,135280,135293,135307,135321,135334],{},[3233,135281,135282,135285,135287,135290],{},[3278,135283,135284],{"align":26580},"Static 静态定位",[3278,135286,106937],{"align":26580},[3278,135288,135289],{"align":26580},"不能使用边偏移",[3278,135291,135292],{"align":26580},"很少",[3233,135294,135295,135298,135301,135304],{},[3278,135296,135297],{"align":26580},"Relative 相对定位",[3278,135299,135300],{"align":26580},"否(占有位置)",[3278,135302,135303],{"align":26580},"相对于自身位置移动",[3278,135305,135306],{"align":26580},"基本单独使用",[3233,135308,135309,135312,135315,135318],{},[3278,135310,135311],{"align":26580},"Absolute 绝对定位",[3278,135313,135314],{"align":26580},"是(不占有位置)",[3278,135316,135317],{"align":26580},"带有定位的父级",[3278,135319,135320],{"align":26580},"要和定位父级元素搭配使用",[3233,135322,135323,135326,135328,135331],{},[3278,135324,135325],{"align":26580},"Fixed 固定定位",[3278,135327,135314],{"align":26580},[3278,135329,135330],{"align":26580},"浏览器可视区",[3278,135332,135333],{"align":26580},"单独使用,不需要父级",[3233,135335,135336,135339,135341,135343],{},[3278,135337,135338],{"align":26580},"Sticky 粘性定位",[3278,135340,135300],{"align":26580},[3278,135342,135330],{"align":26580},[3278,135344,135345],{"align":26580},"当前阶段少",[24,135347,135348],{"start":36},[27,135349,135350,135353],{},[49,135351,135352],{},"边偏移"," 则决定了该元素的最终位置",[3227,135355,135356,135367],{},[3230,135357,135358],{},[3233,135359,135360,135363,135365],{},[3236,135361,135362],{"align":26580},"边偏移属性",[3236,135364,30335],{"align":26580},[3236,135366,30332],{"align":26580},[3273,135368,135369,135380,135391,135401],{},[3233,135370,135371,135374,135377],{},[3278,135372,135373],{"align":26580},"top",[3278,135375,135376],{"align":26580},"top: 80px;",[3278,135378,135379],{"align":26580},"顶端偏移量，定义元素相对于父元素上边线的距离",[3233,135381,135382,135385,135388],{},[3278,135383,135384],{"align":26580},"bottom",[3278,135386,135387],{"align":26580},"bottom: 80px ;",[3278,135389,135390],{"align":26580},"底部偏移量，定义元素相对于其父元素下边线的距离",[3233,135392,135393,135395,135398],{},[3278,135394,26580],{"align":26580},[3278,135396,135397],{"align":26580},"left: 80px ;",[3278,135399,135400],{"align":26580},"左侧偏移量，定义元素相对于其父元素左边线的距离",[3233,135402,135403,135405,135408],{},[3278,135404,74781],{"align":26580},[3278,135406,135407],{"align":26580},"right: 80px ;",[3278,135409,135410],{"align":26580},"右侧偏移量，定义元素相对于其父元素右边线的距离",[176,135412,135413],{},[27,135414,11912,135415,135417,135418,135420,135421,135423,135424,135427,135428,135430,135431,135433],{},[55975,135416],{},"  ① ",[49,135419,135352],{}," 需要和 ",[49,135422,134601],{}," 联合使用， ",[49,135425,135426],{},"单独使用无效"," ；",[55975,135429],{},"  ②top和bottom不要同时使用",[55975,135432],{},"  ③left和right不要同时使用",[627,135435,135437],{"id":135436},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[31,135439,135440],{},"子级是绝对定位的话，父级要用相对定位",[176,135442,135443,135446,135449,135452],{},[27,135444,135445],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[27,135447,135448],{},"父盒子需要加定位限制子盒子在父盒子内显示",[27,135450,135451],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[27,135453,135454,135455,135458],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[49,135456,135457],{},"子绝父绝"," 也会遇到",[627,135460,135462],{"id":135461},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[176,135464,135465,135480],{},[27,135466,135467,135468,135471,135472,135475,135476,135479],{},"在使用 ",[49,135469,135470],{},"定位"," 布局时，可能会 ",[49,135473,135474],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[49,135477,135478],{},"z-index"," 来控制盒子的前后次序 (z轴)",[27,135481,8078],{},[190,135483,135484],{"className":128811,"code":134604,"language":128813,"meta":57,"style":57},[196,135485,135486,135492,135504,135518,135532],{"__ignoreMap":57},[199,135487,135488,135490],{"class":201,"line":202},[199,135489,132659],{"class":878},[199,135491,1012],{"class":205},[199,135493,135494,135496,135498,135500,135502],{"class":201,"line":36},[199,135495,134617],{"class":1018},[199,135497,1022],{"class":205},[199,135499,57023],{"class":1018},[199,135501,132674],{"class":205},[199,135503,134626],{"class":1454},[199,135505,135506,135508,135510,135512,135514,135516],{"class":201,"line":73},[199,135507,134631],{"class":1018},[199,135509,1022],{"class":205},[199,135511,3528],{"class":1018},[199,135513,1087],{"class":1086},[199,135515,134640],{"class":205},[199,135517,134643],{"class":1454},[199,135519,135520,135522,135524,135526,135528,135530],{"class":201,"line":333},[199,135521,134648],{"class":1018},[199,135523,1022],{"class":205},[199,135525,3779],{"class":1018},[199,135527,1087],{"class":1086},[199,135529,134657],{"class":205},[199,135531,134660],{"class":1454},[199,135533,135534],{"class":201,"line":227},[199,135535,671],{"class":205},[176,135537,135538],{},[27,135539,135540,135541,135417,135543,135545,135546,129974,135549,84798,135552,135554,135555,135557,135558,135561,135562,135427,135565,135567,135568,135571,135573],{},"z-index的特性",[55975,135542],{},[49,135544,129275],{}," ： ",[49,135547,135548],{},"正整数",[49,135550,135551],{},"负整数",[49,135553,1025],{}," ，默认值是 0，数值越大，盒子越靠上；",[55975,135556],{},"  ②如果 ",[49,135559,135560],{},"属性值相同"," ，则按照书写顺序， ",[49,135563,135564],{},"后来居上",[55975,135566],{},"  ③数字后面 ",[49,135569,135570],{},"不能加单位",[55975,135572],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[627,135575,135577],{"id":135576},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[31,135579,135580],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[31,135582,135583],{},"方法:",[176,135585,135586,135596],{},[27,135587,135588,135589,135592,135593],{},"left: 50%; 让 ",[49,135590,135591],{},"盒子的左侧"," 移动到 ",[49,135594,135595],{},"父级元素的水平中心位置",[27,135597,135598,135599,135602,135603],{},"margin-left: -100px; 让盒子 ",[49,135600,135601],{},"向左"," 移动 ",[49,135604,135605],{},"自身宽度的一半",[627,135607,135609],{"id":135608},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[24,135611,135612,135615],{},[27,135613,135614],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[27,135616,135617],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[31,135619,135620],{},"也就是说绝对定位和固定定位和浮动类似",[24,135622,135623],{"start":73},[27,135624,135625],{},"display 是显示模式， 可以改变显示模式有以下方式:",[176,135627,135628,135631,135634],{},[27,135629,135630],{},"可以用inline-block 转换为行内块",[27,135632,135633],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[27,135635,135636],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[31,135638,135639],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[627,135641,135643],{"id":135642},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[24,135645,135646,135649,135652,135655],{},[27,135647,135648],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[27,135650,135651],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[27,135653,135654],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[27,135656,135657],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[190,135659,135660],{"className":128811,"code":133277,"language":128813,"meta":57,"style":57},[196,135661,135662,135668,135678,135682,135688,135698],{"__ignoreMap":57},[199,135663,135664,135666],{"class":201,"line":202},[199,135665,133284],{"class":878},[199,135667,1012],{"class":205},[199,135669,135670,135672,135674,135676],{"class":201,"line":36},[199,135671,133291],{"class":1018},[199,135673,1022],{"class":205},[199,135675,26580],{"class":1018},[199,135677,1028],{"class":205},[199,135679,135680],{"class":201,"line":73},[199,135681,671],{"class":205},[199,135683,135684,135686],{"class":201,"line":333},[199,135685,133306],{"class":878},[199,135687,1012],{"class":205},[199,135689,135690,135692,135694,135696],{"class":201,"line":227},[199,135691,133291],{"class":1018},[199,135693,1022],{"class":205},[199,135695,74781],{"class":1018},[199,135697,1028],{"class":205},[199,135699,135700],{"class":201,"line":238},[199,135701,671],{"class":205},[55,135703],{"style":128667,"src":135704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[627,135706,135708],{"id":135707},"_11138-轮播图","11.1.3.8 轮播图",[55,135710],{"style":128667,"src":135711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[24,135713,135714],{},[27,135715,135716],{},"制作顺序:",[176,135718,135719,135722,135725,135734],{},[27,135720,135721],{},"大盒子我们类名为： tb-promo 淘宝广告",[27,135723,135724],{},"里面先放一张图片",[27,135726,135727,135728,135730,135731,135733],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55975,135729],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55975,135732],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[27,135735,135736,135737,135739,135740,135742],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55975,135738],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55975,135741],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[24,135744,135745],{"start":36},[27,135746,135747],{},"代码模块",[190,135749,135751],{"className":128811,"code":135750,"language":128813,"meta":57,"style":57},"\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",[196,135752,135753,135758,135765,135775,135785,135795,135799,135804,135811,135821],{"__ignoreMap":57},[199,135754,135755],{"class":201,"line":202},[199,135756,135757],{"class":1454},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[199,135759,135760,135763],{"class":201,"line":36},[199,135761,135762],{"class":878},".son",[199,135764,1012],{"class":205},[199,135766,135767,135769,135771,135773],{"class":201,"line":73},[199,135768,134617],{"class":1018},[199,135770,1022],{"class":205},[199,135772,57090],{"class":1018},[199,135774,1028],{"class":205},[199,135776,135777,135779,135781,135783],{"class":201,"line":333},[199,135778,134631],{"class":1018},[199,135780,1022],{"class":205},[199,135782,1025],{"class":1018},[199,135784,1028],{"class":205},[199,135786,135787,135789,135791,135793],{"class":201,"line":227},[199,135788,134648],{"class":1018},[199,135790,1022],{"class":205},[199,135792,1025],{"class":1018},[199,135794,1028],{"class":205},[199,135796,135797],{"class":201,"line":238},[199,135798,671],{"class":205},[199,135800,135801],{"class":201,"line":252},[199,135802,135803],{"class":1454},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[199,135805,135806,135809],{"class":201,"line":388},[199,135807,135808],{"class":878},".father",[199,135810,1012],{"class":205},[199,135812,135813,135815,135817,135819],{"class":201,"line":415},[199,135814,134617],{"class":1018},[199,135816,1022],{"class":205},[199,135818,57023],{"class":1018},[199,135820,1028],{"class":205},[199,135822,135823],{"class":201,"line":426},[199,135824,671],{"class":205},[31,135826,135827],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[19,135829,135831],{"id":135830},"_1114-定位数值的移动","11.1.4 定位数值的移动",[55,135833],{"style":128667,"src":135834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[31,135836,135837],{},"✨ 黄金口诀：",[31,135839,135840],{},"\"TOP正下负上，LEFT正右负左\"",[31,135842,135843],{},"\"RIGHT正左负右，BOTTOM正上负下",[31,135845,135846],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[31,135848,135849],{},"✨ 简单记：",[31,135851,135852],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1002,135854,135855],{},"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":57,"searchDepth":36,"depth":36,"links":135857},[135858],{"id":134385,"depth":36,"text":134386,"children":135859},[135860,135861,135862,135863],{"id":134389,"depth":73,"text":134390},{"id":134404,"depth":73,"text":134405},{"id":134572,"depth":73,"text":134573},{"id":135830,"depth":73,"text":135831},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134377,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135870,"title":135871,"body":135872,"description":3023,"extension":3024,"meta":137295,"navigation":906,"path":137296,"seo":137297,"stem":137298,"__hash__":137299},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135873,"toc":137274},[135874,135877,135881,135889,135893,135898,135906,135918,135922,135927,135935,135946,135950,135955,135996,136004,136008,136011,136014,136017,136111,136114,136208,136211,136305,136308,136311,136346,136349,136352,136382,136385,136388,136391,136394,136397,136400,136403,136473,136476,136480,136484,136525,136529,136535,136538,136541,136545,136548,136551,136554,136635,136638,136641,136645,136649,136652,136655,136658,136661,136664,136670,136679,136683,136702,136706,136716,136719,136722,136725,136728,136731,136734,136737,136740,136749,136753,136762,136765,136770,136823,136828,136994,136997,137000,137005,137008,137011,137014,137017,137022,137170,137173,137176,137181,137184,137189,137223,137226,137229,137233,137236,137243,137246,137249,137252,137255,137258,137261,137264,137268,137271],[10,135875,135871],{"id":135876},"_12-显示隐藏与图形资源",[14,135878,135880],{"id":135879},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[176,135882,135883,135886],{},[27,135884,135885],{},"目的:让一个元素在页面中消失或者显示出来",[27,135887,135888],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[19,135890,135892],{"id":135891},"_1211-display-显示","12.1.1 display 显示",[24,135894,135895],{},[27,135896,135897],{},"display 设置或检索对象是否及如何显示",[176,135899,135900,135903],{},[27,135901,135902],{},"display: none;隐藏对象",[27,135904,135905],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[24,135907,135908,135915],{"start":36},[27,135909,135910,135911,135914],{},"特点： display 隐藏元素后， ",[49,135912,135913],{},"不再占"," 有原来的位置",[27,135916,135917],{},"在js中使用非常的广泛",[19,135919,135921],{"id":135920},"_1212-visibility可见性","12.1.2 visibility可见性",[24,135923,135924],{},[27,135925,135926],{},"visibility 属性用于指定一个元素应可见还是隐藏",[176,135928,135929,135932],{},[27,135930,135931],{},"visibility： visible；元素可见",[27,135933,135934],{},"visibility：hidden；元素隐藏",[24,135936,135937,135940,135943],{"start":36},[27,135938,135939],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[27,135941,135942],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[27,135944,135945],{},"隐藏后继续占有原有位置",[19,135947,135949],{"id":135948},"_1213-overflow溢出","12.1.3 overflow溢出",[176,135951,135952],{},[27,135953,135954],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[3227,135956,135957,135965],{},[3230,135958,135959],{},[3233,135960,135961,135963],{},[3236,135962,129275],{"align":26580},[3236,135964,30332],{"align":26580},[3273,135966,135967,135975,135982,135989],{},[3233,135968,135969,135972],{},[3278,135970,135971],{"align":26580},"visible",[3278,135973,135974],{"align":26580},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[3233,135976,135977,135979],{},[3278,135978,63973],{"align":26580},[3278,135980,135981],{"align":26580},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[3233,135983,135984,135986],{},[3278,135985,131231],{"align":26580},[3278,135987,135988],{"align":26580},"不管超出内容否，总是显示滚动条",[3233,135990,135991,135993],{},[3278,135992,74922],{"align":26580},[3278,135994,135995],{"align":26580},"超出自动显示滚动条，不超出不显示滚动条",[176,135997,135998,136001],{},[27,135999,136000],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[27,136002,136003],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[19,136005,136007],{"id":136006},"_1214-案例收获","12.1.4 案例收获",[55,136009],{"style":128667,"src":136010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[31,136012,136013],{},"问题：没做出来动态效果，使用hover没实现",[31,136015,136016],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[190,136018,136019],{"className":128811,"code":134243,"language":128813,"meta":57,"style":57},[196,136020,136021,136025,136039,136043,136057,136061,136075,136079,136093,136097],{"__ignoreMap":57},[199,136022,136023],{"class":201,"line":202},[199,136024,134250],{"class":1454},[199,136026,136027,136029,136031,136033,136035,136037],{"class":201,"line":36},[199,136028,134255],{"class":878},[199,136030,82066],{"class":205},[199,136032,131171],{"class":1018},[199,136034,1022],{"class":205},[199,136036,134264],{"class":1018},[199,136038,131741],{"class":205},[199,136040,136041],{"class":201,"line":73},[199,136042,134271],{"class":1454},[199,136044,136045,136047,136049,136051,136053,136055],{"class":201,"line":333},[199,136046,134276],{"class":878},[199,136048,82066],{"class":205},[199,136050,131171],{"class":1018},[199,136052,1022],{"class":205},[199,136054,57023],{"class":1018},[199,136056,131741],{"class":205},[199,136058,136059],{"class":201,"line":227},[199,136060,134291],{"class":1454},[199,136062,136063,136065,136067,136069,136071,136073],{"class":201,"line":238},[199,136064,134296],{"class":878},[199,136066,82066],{"class":205},[199,136068,131171],{"class":1018},[199,136070,1022],{"class":205},[199,136072,57090],{"class":1018},[199,136074,131741],{"class":205},[199,136076,136077],{"class":201,"line":252},[199,136078,134311],{"class":1454},[199,136080,136081,136083,136085,136087,136089,136091],{"class":201,"line":388},[199,136082,134316],{"class":878},[199,136084,82066],{"class":205},[199,136086,131171],{"class":1018},[199,136088,1022],{"class":205},[199,136090,88492],{"class":1018},[199,136092,131741],{"class":205},[199,136094,136095],{"class":201,"line":415},[199,136096,134331],{"class":1454},[199,136098,136099,136101,136103,136105,136107,136109],{"class":201,"line":426},[199,136100,134336],{"class":878},[199,136102,82066],{"class":205},[199,136104,131171],{"class":1018},[199,136106,1022],{"class":205},[199,136108,134345],{"class":1018},[199,136110,131741],{"class":205},[31,136112,136113],{},"完整代码：",[190,136115,136116],{"className":128811,"code":134243,"language":128813,"meta":57,"style":57},[196,136117,136118,136122,136136,136140,136154,136158,136172,136176,136190,136194],{"__ignoreMap":57},[199,136119,136120],{"class":201,"line":202},[199,136121,134250],{"class":1454},[199,136123,136124,136126,136128,136130,136132,136134],{"class":201,"line":36},[199,136125,134255],{"class":878},[199,136127,82066],{"class":205},[199,136129,131171],{"class":1018},[199,136131,1022],{"class":205},[199,136133,134264],{"class":1018},[199,136135,131741],{"class":205},[199,136137,136138],{"class":201,"line":73},[199,136139,134271],{"class":1454},[199,136141,136142,136144,136146,136148,136150,136152],{"class":201,"line":333},[199,136143,134276],{"class":878},[199,136145,82066],{"class":205},[199,136147,131171],{"class":1018},[199,136149,1022],{"class":205},[199,136151,57023],{"class":1018},[199,136153,131741],{"class":205},[199,136155,136156],{"class":201,"line":227},[199,136157,134291],{"class":1454},[199,136159,136160,136162,136164,136166,136168,136170],{"class":201,"line":238},[199,136161,134296],{"class":878},[199,136163,82066],{"class":205},[199,136165,131171],{"class":1018},[199,136167,1022],{"class":205},[199,136169,57090],{"class":1018},[199,136171,131741],{"class":205},[199,136173,136174],{"class":201,"line":252},[199,136175,134311],{"class":1454},[199,136177,136178,136180,136182,136184,136186,136188],{"class":201,"line":388},[199,136179,134316],{"class":878},[199,136181,82066],{"class":205},[199,136183,131171],{"class":1018},[199,136185,1022],{"class":205},[199,136187,88492],{"class":1018},[199,136189,131741],{"class":205},[199,136191,136192],{"class":201,"line":415},[199,136193,134331],{"class":1454},[199,136195,136196,136198,136200,136202,136204,136206],{"class":201,"line":426},[199,136197,134336],{"class":878},[199,136199,82066],{"class":205},[199,136201,131171],{"class":1018},[199,136203,1022],{"class":205},[199,136205,134345],{"class":1018},[199,136207,131741],{"class":205},[31,136209,136210],{},"分布思路重点详解：",[190,136212,136213],{"className":128811,"code":134243,"language":128813,"meta":57,"style":57},[196,136214,136215,136219,136233,136237,136251,136255,136269,136273,136287,136291],{"__ignoreMap":57},[199,136216,136217],{"class":201,"line":202},[199,136218,134250],{"class":1454},[199,136220,136221,136223,136225,136227,136229,136231],{"class":201,"line":36},[199,136222,134255],{"class":878},[199,136224,82066],{"class":205},[199,136226,131171],{"class":1018},[199,136228,1022],{"class":205},[199,136230,134264],{"class":1018},[199,136232,131741],{"class":205},[199,136234,136235],{"class":201,"line":73},[199,136236,134271],{"class":1454},[199,136238,136239,136241,136243,136245,136247,136249],{"class":201,"line":333},[199,136240,134276],{"class":878},[199,136242,82066],{"class":205},[199,136244,131171],{"class":1018},[199,136246,1022],{"class":205},[199,136248,57023],{"class":1018},[199,136250,131741],{"class":205},[199,136252,136253],{"class":201,"line":227},[199,136254,134291],{"class":1454},[199,136256,136257,136259,136261,136263,136265,136267],{"class":201,"line":238},[199,136258,134296],{"class":878},[199,136260,82066],{"class":205},[199,136262,131171],{"class":1018},[199,136264,1022],{"class":205},[199,136266,57090],{"class":1018},[199,136268,131741],{"class":205},[199,136270,136271],{"class":201,"line":252},[199,136272,134311],{"class":1454},[199,136274,136275,136277,136279,136281,136283,136285],{"class":201,"line":388},[199,136276,134316],{"class":878},[199,136278,82066],{"class":205},[199,136280,131171],{"class":1018},[199,136282,1022],{"class":205},[199,136284,88492],{"class":1018},[199,136286,131741],{"class":205},[199,136288,136289],{"class":201,"line":415},[199,136290,134331],{"class":1454},[199,136292,136293,136295,136297,136299,136301,136303],{"class":201,"line":426},[199,136294,134336],{"class":878},[199,136296,82066],{"class":205},[199,136298,131171],{"class":1018},[199,136300,1022],{"class":205},[199,136302,134345],{"class":1018},[199,136304,131741],{"class":205},[55,136306],{"style":128667,"src":136307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[31,136309,136310],{},"图片太大，盒子太小，此时需要修改图片的大小",[190,136312,136314],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[196,136315,136316],{"__ignoreMap":57},[199,136317,136318,136320,136322,136324,136326,136329,136331,136333,136336,136339,136341,136344],{"class":201,"line":202},[199,136319,887],{"class":205},[199,136321,55],{"class":874},[199,136323,57498],{"class":878},[199,136325,895],{"class":205},[199,136327,136328],{"class":898},"\"images\u002Fpic.jpg\"",[199,136330,57506],{"class":878},[199,136332,895],{"class":205},[199,136334,136335],{"class":898},"\"描述文字\"",[199,136337,136338],{"class":878}," title",[199,136340,895],{"class":205},[199,136342,136343],{"class":898},"\"悬停提示\"",[199,136345,882],{"class":205},[55,136347],{"style":128667,"src":136348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[31,136350,136351],{},"制造遮罩层",[190,136353,136354],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,136355,136356],{"__ignoreMap":57},[199,136357,136358,136360,136362,136364,136366,136368,136370,136372,136374,136376,136378,136380],{"class":201,"line":202},[199,136359,887],{"class":205},[199,136361,55],{"class":874},[199,136363,57498],{"class":878},[199,136365,895],{"class":205},[199,136367,136328],{"class":898},[199,136369,57506],{"class":878},[199,136371,895],{"class":205},[199,136373,136335],{"class":898},[199,136375,136338],{"class":878},[199,136377,895],{"class":205},[199,136379,136343],{"class":898},[199,136381,882],{"class":205},[31,136383,136384],{},"此时是这样的为标准流",[55,136386],{"style":128667,"src":136387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[31,136389,136390],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[31,136392,136393],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[31,136395,136396],{},"让他在中间，用center(background-position)",[31,136398,136399],{},"将需要变的尽可能放到一个盒子中",[31,136401,136402],{},"放大盒子上内部盒子发生变化",[190,136404,136406],{"className":128811,"code":136405,"language":128813,"meta":57,"style":57},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[196,136407,136408,136414,136424,136428,136435,136445,136457,136469],{"__ignoreMap":57},[199,136409,136410,136412],{"class":201,"line":202},[199,136411,129878],{"class":878},[199,136413,1012],{"class":205},[199,136415,136416,136418,136420,136422],{"class":201,"line":36},[199,136417,134617],{"class":1018},[199,136419,1022],{"class":205},[199,136421,57023],{"class":1018},[199,136423,1028],{"class":205},[199,136425,136426],{"class":201,"line":73},[199,136427,671],{"class":205},[199,136429,136430,136433],{"class":201,"line":333},[199,136431,136432],{"class":878},".child",[199,136434,1012],{"class":205},[199,136436,136437,136439,136441,136443],{"class":201,"line":227},[199,136438,134617],{"class":1018},[199,136440,1022],{"class":205},[199,136442,57090],{"class":1018},[199,136444,1028],{"class":205},[199,136446,136447,136449,136451,136453,136455],{"class":201,"line":238},[199,136448,134631],{"class":1018},[199,136450,1022],{"class":205},[199,136452,1153],{"class":1018},[199,136454,3412],{"class":1086},[199,136456,1028],{"class":205},[199,136458,136459,136461,136463,136465,136467],{"class":201,"line":252},[199,136460,134648],{"class":1018},[199,136462,1022],{"class":205},[199,136464,1153],{"class":1018},[199,136466,3412],{"class":1086},[199,136468,1028],{"class":205},[199,136470,136471],{"class":201,"line":388},[199,136472,671],{"class":205},[31,136474,136475],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136477,136479],{"id":136478},"_122-精灵图","12.2 精灵图",[19,136481,136483],{"id":136482},"_1221-理解","12.2.1 理解",[24,136485,136486,136504],{},[27,136487,136488,136489,134717,136492,136495,136496,136499,136500,136503],{},"目的： ",[49,136490,136491],{},"为了有效地减少服务器接收和发送请求的次数",[49,136493,136494],{},"提高"," 页面的 ",[49,136497,136498],{},"加载速度"," ，出现了 ",[49,136501,136502],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[27,136505,136506,136507,136509,136510,136512,136513,136515,136516,136518,136519,136521,136522,136524],{},"使用精灵图核心：",[55975,136508],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55975,136511],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55975,136514],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55975,136517],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55975,136520],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55975,136523],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[19,136526,136528],{"id":136527},"_1222-扒图","12.2.2 扒图",[190,136530,136533],{"className":136531,"code":136532,"language":8084},[8082],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[196,136534,136532],{"__ignoreMap":57},[55,136536],{"style":128667,"src":136537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[55,136539],{"style":128667,"src":136540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[19,136542,136544],{"id":136543},"_1223-精灵图的实现","12.2.3 精灵图的实现",[55,136546],{"style":128667,"src":136547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[31,136549,136550],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[55,136552],{"style":128667,"src":136553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[190,136555,136557],{"className":128811,"code":136556,"language":128813,"meta":57,"style":57},"\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",[196,136558,136559,136564,136571,136583,136595,136614,136631],{"__ignoreMap":57},[199,136560,136561],{"class":201,"line":202},[199,136562,136563],{"class":1454},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[199,136565,136566,136569],{"class":201,"line":36},[199,136567,136568],{"class":878},".icon",[199,136570,1012],{"class":205},[199,136572,136573,136575,136577,136579,136581],{"class":201,"line":73},[199,136574,72827],{"class":1018},[199,136576,1022],{"class":205},[199,136578,3779],{"class":1018},[199,136580,1087],{"class":1086},[199,136582,1028],{"class":205},[199,136584,136585,136587,136589,136591,136593],{"class":201,"line":333},[199,136586,73047],{"class":1018},[199,136588,1022],{"class":205},[199,136590,3779],{"class":1018},[199,136592,1087],{"class":1086},[199,136594,1028],{"class":205},[199,136596,136597,136599,136601,136603,136605,136608,136610,136612],{"class":201,"line":227},[199,136598,72870],{"class":1018},[199,136600,1022],{"class":205},[199,136602,63985],{"class":1018},[199,136604,1537],{"class":205},[199,136606,136607],{"class":8113},"sprites.png",[199,136609,16575],{"class":205},[199,136611,63995],{"class":1018},[199,136613,1028],{"class":205},[199,136615,136616,136618,136620,136622,136624,136627,136629],{"class":201,"line":238},[199,136617,131071],{"class":1018},[199,136619,1022],{"class":205},[199,136621,1389],{"class":1018},[199,136623,1087],{"class":1086},[199,136625,136626],{"class":1018}," -20",[199,136628,1087],{"class":1086},[199,136630,1028],{"class":205},[199,136632,136633],{"class":201,"line":252},[199,136634,671],{"class":205},[55,136636],{"style":128667,"src":136637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[31,136639,136640],{},"在前端中坐标轴的正方向是右和下",[14,136642,136644],{"id":136643},"_123-字体图标","12.3 字体图标",[19,136646,136648],{"id":136647},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[31,136650,136651],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[31,136653,136654],{},"精灵图是有诸多优点的，但是缺点很明显。",[31,136656,136657],{},"1.图片文件还是比较大的。",[31,136659,136660],{},"2.图片本身放大和缩小会失真。",[31,136662,136663],{},"3.一旦图片制作完毕想要更换非常复杂。",[31,136665,136666,136667,28583],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[49,136668,136669],{},"字体图标 iconfont",[31,136671,136672,136675,136676,31228],{},[49,136673,136674],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[49,136677,136678],{},"展示的是图标，本质属于字体",[19,136680,136682],{"id":136681},"_1232-字体图标的优点","12.3.2 字体图标的优点",[176,136684,136685,136690,136693,136696,136699],{},[27,136686,136687,136689],{},[49,136688,28719],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[27,136691,136692],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[27,136694,136695],{},"兼容性：几乎支持所有的浏览器，请放心使用",[27,136697,136698],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[27,136700,136701],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[19,136703,136705],{"id":136704},"_1233-字体库下载网站","12.3.3 字体库下载网站",[176,136707,136708],{},[27,136709,136710,136711],{},"icomoon字体库：",[2867,136712,136715],{"href":136713,"rel":136714},"http:\u002F\u002Ficomoon.io\u002F",[2871],"http:\u002F\u002Ficomoon.io",[31,136717,136718],{},"进去之后点icomoon app",[55,136720],{"style":128667,"src":136721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[31,136723,136724],{},"可以对其编辑：",[55,136726],{"style":128667,"src":136727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[31,136729,136730],{},"生成字体：",[55,136732],{"style":128667,"src":136733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[31,136735,136736],{},"下载：",[55,136738],{"style":128667,"src":136739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[176,136741,136742],{},[27,136743,136744,136745],{},"阿里iconfont字体库： ",[2867,136746,136747],{"href":136747,"rel":136748},"http:\u002F\u002Fwww.iconfont.cn\u002F",[2871],[19,136750,136752],{"id":136751},"_1234-字体图标的引入","12.3.4 字体图标的引入",[24,136754,136755],{},[27,136756,136757,136758,136761],{},"把下载包里面的 ",[49,136759,136760],{},"fonts"," 文件夹放入页面根目录下",[55,136763],{"style":128667,"src":136764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[24,136766,136767],{"start":36},[27,136768,136769],{},"字体文件格式",[3227,136771,136772,136781],{},[3230,136773,136774],{},[3233,136775,136776,136779],{},[3236,136777,136778],{"align":26580},"格式",[3236,136780,26584],{"align":26580},[3273,136782,136783,136793,136803,136813],{},[3233,136784,136785,136790],{},[3278,136786,136787],{"align":26580},[49,136788,136789],{},".ttf",[3278,136791,136792],{"align":26580},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[3233,136794,136795,136800],{},[3278,136796,136797],{"align":26580},[49,136798,136799],{},".woff",[3278,136801,136802],{"align":26580},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[3233,136804,136805,136810],{},[3278,136806,136807],{"align":26580},[49,136808,136809],{},".eot",[3278,136811,136812],{"align":26580},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[3233,136814,136815,136820],{},[3278,136816,136817],{"align":26580},[49,136818,136819],{},"svg",[3278,136821,136822],{"align":26580},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[24,136824,136825],{"start":73},[27,136826,136827],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[190,136829,136831],{"className":128811,"code":136830,"language":128813,"meta":57,"style":57},"\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",[196,136832,136833,136838,136845,136857,136873,136898,136919,136939,136959,136963,136969,136979,136990],{"__ignoreMap":57},[199,136834,136835],{"class":201,"line":202},[199,136836,136837],{"class":1454},"\u002F* 引入字体图标 *\u002F\n",[199,136839,136840,136843],{"class":201,"line":36},[199,136841,136842],{"class":1086},"@font-face",[199,136844,1012],{"class":205},[199,136846,136847,136850,136852,136855],{"class":201,"line":73},[199,136848,136849],{"class":1018},"  font-family",[199,136851,1022],{"class":205},[199,136853,136854],{"class":898},"'icomoon'",[199,136856,1028],{"class":205},[199,136858,136859,136862,136864,136866,136868,136871],{"class":201,"line":333},[199,136860,136861],{"class":1018},"  src",[199,136863,1022],{"class":205},[199,136865,63985],{"class":1018},[199,136867,1537],{"class":205},[199,136869,136870],{"class":898},"'fonts\u002Ficomoon.eot'",[199,136872,5623],{"class":205},[199,136874,136875,136877,136879,136881,136883,136886,136888,136891,136893,136896],{"class":201,"line":227},[199,136876,136861],{"class":1018},[199,136878,1022],{"class":205},[199,136880,63985],{"class":1018},[199,136882,1537],{"class":205},[199,136884,136885],{"class":898},"'fonts\u002Ficomoon.eot?#iefix'",[199,136887,16575],{"class":205},[199,136889,136890],{"class":1018},"format",[199,136892,1537],{"class":205},[199,136894,136895],{"class":898},"'embedded-opentype'",[199,136897,40888],{"class":205},[199,136899,136900,136903,136905,136908,136910,136912,136914,136917],{"class":201,"line":238},[199,136901,136902],{"class":1018},"       url",[199,136904,1537],{"class":205},[199,136906,136907],{"class":898},"'fonts\u002Ficomoon.woff'",[199,136909,16575],{"class":205},[199,136911,136890],{"class":1018},[199,136913,1537],{"class":205},[199,136915,136916],{"class":898},"'woff'",[199,136918,40888],{"class":205},[199,136920,136921,136923,136925,136928,136930,136932,136934,136937],{"class":201,"line":252},[199,136922,136902],{"class":1018},[199,136924,1537],{"class":205},[199,136926,136927],{"class":898},"'fonts\u002Ficomoon.ttf'",[199,136929,16575],{"class":205},[199,136931,136890],{"class":1018},[199,136933,1537],{"class":205},[199,136935,136936],{"class":898},"'truetype'",[199,136938,40888],{"class":205},[199,136940,136941,136943,136945,136948,136950,136952,136954,136957],{"class":201,"line":388},[199,136942,136902],{"class":1018},[199,136944,1537],{"class":205},[199,136946,136947],{"class":898},"'fonts\u002Ficomoon.svg#icomoon'",[199,136949,16575],{"class":205},[199,136951,136890],{"class":1018},[199,136953,1537],{"class":205},[199,136955,136956],{"class":898},"'svg'",[199,136958,5623],{"class":205},[199,136960,136961],{"class":201,"line":415},[199,136962,671],{"class":205},[199,136964,136965,136967],{"class":201,"line":426},[199,136966,136568],{"class":878},[199,136968,1012],{"class":205},[199,136970,136971,136973,136975,136977],{"class":201,"line":1015},[199,136972,136849],{"class":1018},[199,136974,1022],{"class":205},[199,136976,136854],{"class":898},[199,136978,1028],{"class":205},[199,136980,136981,136984,136986,136988],{"class":201,"line":1031},[199,136982,136983],{"class":1018},"  font-style",[199,136985,1022],{"class":205},[199,136987,66100],{"class":1018},[199,136989,1028],{"class":205},[199,136991,136992],{"class":201,"line":1043},[199,136993,671],{"class":205},[31,136995,136996],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[55,136998],{"style":128667,"src":136999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[24,137001,137002],{"start":333},[27,137003,137004],{},"添加字体",[55,137006],{"style":128667,"src":137007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[31,137009,137010],{},"复制：",[55,137012],{"style":128667,"src":137013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[31,137015,137016],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[24,137018,137019],{"start":227},[27,137020,137021],{},"代码展示：",[190,137023,137024],{"className":128811,"code":136830,"language":128813,"meta":57,"style":57},[196,137025,137026,137030,137036,137046,137060,137082,137100,137118,137136,137140,137146,137156,137166],{"__ignoreMap":57},[199,137027,137028],{"class":201,"line":202},[199,137029,136837],{"class":1454},[199,137031,137032,137034],{"class":201,"line":36},[199,137033,136842],{"class":1086},[199,137035,1012],{"class":205},[199,137037,137038,137040,137042,137044],{"class":201,"line":73},[199,137039,136849],{"class":1018},[199,137041,1022],{"class":205},[199,137043,136854],{"class":898},[199,137045,1028],{"class":205},[199,137047,137048,137050,137052,137054,137056,137058],{"class":201,"line":333},[199,137049,136861],{"class":1018},[199,137051,1022],{"class":205},[199,137053,63985],{"class":1018},[199,137055,1537],{"class":205},[199,137057,136870],{"class":898},[199,137059,5623],{"class":205},[199,137061,137062,137064,137066,137068,137070,137072,137074,137076,137078,137080],{"class":201,"line":227},[199,137063,136861],{"class":1018},[199,137065,1022],{"class":205},[199,137067,63985],{"class":1018},[199,137069,1537],{"class":205},[199,137071,136885],{"class":898},[199,137073,16575],{"class":205},[199,137075,136890],{"class":1018},[199,137077,1537],{"class":205},[199,137079,136895],{"class":898},[199,137081,40888],{"class":205},[199,137083,137084,137086,137088,137090,137092,137094,137096,137098],{"class":201,"line":238},[199,137085,136902],{"class":1018},[199,137087,1537],{"class":205},[199,137089,136907],{"class":898},[199,137091,16575],{"class":205},[199,137093,136890],{"class":1018},[199,137095,1537],{"class":205},[199,137097,136916],{"class":898},[199,137099,40888],{"class":205},[199,137101,137102,137104,137106,137108,137110,137112,137114,137116],{"class":201,"line":252},[199,137103,136902],{"class":1018},[199,137105,1537],{"class":205},[199,137107,136927],{"class":898},[199,137109,16575],{"class":205},[199,137111,136890],{"class":1018},[199,137113,1537],{"class":205},[199,137115,136936],{"class":898},[199,137117,40888],{"class":205},[199,137119,137120,137122,137124,137126,137128,137130,137132,137134],{"class":201,"line":388},[199,137121,136902],{"class":1018},[199,137123,1537],{"class":205},[199,137125,136947],{"class":898},[199,137127,16575],{"class":205},[199,137129,136890],{"class":1018},[199,137131,1537],{"class":205},[199,137133,136956],{"class":898},[199,137135,5623],{"class":205},[199,137137,137138],{"class":201,"line":415},[199,137139,671],{"class":205},[199,137141,137142,137144],{"class":201,"line":426},[199,137143,136568],{"class":878},[199,137145,1012],{"class":205},[199,137147,137148,137150,137152,137154],{"class":201,"line":1015},[199,137149,136849],{"class":1018},[199,137151,1022],{"class":205},[199,137153,136854],{"class":898},[199,137155,1028],{"class":205},[199,137157,137158,137160,137162,137164],{"class":201,"line":1031},[199,137159,136983],{"class":1018},[199,137161,1022],{"class":205},[199,137163,66100],{"class":1018},[199,137165,1028],{"class":205},[199,137167,137168],{"class":201,"line":1043},[199,137169,671],{"class":205},[55,137171],{"style":128667,"src":137172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[31,137174,137175],{},"更加细节展示：",[24,137177,137178],{},[27,137179,137180],{},"html 标签内添加小图标",[55,137182],{"style":128667,"src":137183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[24,137185,137186],{"start":36},[27,137187,137188],{},"给标签定义字体",[190,137190,137191],{"className":129558,"code":132915,"language":129560,"meta":57,"style":57},[196,137192,137193,137197,137211,137215],{"__ignoreMap":57},[199,137194,137195],{"class":201,"line":202},[199,137196,132922],{"class":1454},[199,137198,137199,137201,137203,137205,137207,137209],{"class":201,"line":36},[199,137200,887],{"class":205},[199,137202,1220],{"class":874},[199,137204,55745],{"class":878},[199,137206,895],{"class":205},[199,137208,132935],{"class":898},[199,137210,882],{"class":205},[199,137212,137213],{"class":201,"line":73},[199,137214,132942],{"class":205},[199,137216,137217,137219,137221],{"class":201,"line":333},[199,137218,1414],{"class":205},[199,137220,1220],{"class":874},[199,137222,882],{"class":205},[31,137224,137225],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[55,137227],{"style":128667,"src":137228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[19,137230,137232],{"id":137231},"_1235-字体图标的追加","12.3.5 字体图标的追加",[31,137234,137235],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[31,137237,137238,137239,137242],{},"把压缩包里面的 ",[49,137240,137241],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[31,137244,137245],{},"打开网站，点下方：",[55,137247],{"style":128667,"src":137248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[55,137250],{"style":128667,"src":137251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[55,137253],{"style":128667,"src":137254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[31,137256,137257],{},"点yes重新加载",[31,137259,137260],{},"然后重复之前的操作就可以实现了",[31,137262,137263],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[19,137265,137267],{"id":137266},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[55,137269],{"style":128667,"src":137270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1002,137272,137273],{},"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":57,"searchDepth":36,"depth":36,"links":137275},[137276,137282,137287],{"id":135879,"depth":36,"text":135880,"children":137277},[137278,137279,137280,137281],{"id":135891,"depth":73,"text":135892},{"id":135920,"depth":73,"text":135921},{"id":135948,"depth":73,"text":135949},{"id":136006,"depth":73,"text":136007},{"id":136478,"depth":36,"text":136479,"children":137283},[137284,137285,137286],{"id":136482,"depth":73,"text":136483},{"id":136527,"depth":73,"text":136528},{"id":136543,"depth":73,"text":136544},{"id":136643,"depth":36,"text":136644,"children":137288},[137289,137290,137291,137292,137293,137294],{"id":136647,"depth":73,"text":136648},{"id":136681,"depth":73,"text":136682},{"id":136704,"depth":73,"text":136705},{"id":136751,"depth":73,"text":136752},{"id":137231,"depth":73,"text":137232},{"id":137266,"depth":73,"text":137267},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135871,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137301,"title":137302,"body":137303,"description":3023,"extension":3024,"meta":138530,"navigation":906,"path":138531,"seo":138532,"stem":138533,"__hash__":138534},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137304,"toc":138511},[137305,137308,137312,137315,137329,137397,137427,137430,137434,137438,137540,137587,137591,137594,137597,137631,137634,137637,137640,137643,137646,137649,137652,137654,137657,137660,137663,137666,137669,137672,137675,137703,137706,137710,137713,137720,137723,137726,137752,137755,137759,137762,137765,137772,137776,137779,137781,137813,137816,137819,137831,137837,137840,137843,137846,137848,137852,137855,137858,137861,137906,137910,137912,137915,137922,137964,137967,137971,137976,137990,137994,137997,138000,138003,138006,138009,138043,138046,138049,138103,138106,138109,138112,138115,138167,138170,138173,138222,138226,138228,138231,138234,138237,138240,138243,138301,138304,138310,138313,138316,138348,138351,138355,138359,138362,138394,138398,138401,138445,138449,138452,138455,138458,138461,138464,138467,138470,138472,138475,138477,138480,138483,138486,138489,138494,138497,138499,138502,138505,138508],[10,137306,137302],{"id":137307},"_13-界面样式与布局技巧",[14,137309,137311],{"id":137310},"_131-css三角","13.1 css三角",[31,137313,137314],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[176,137316,137317,137320,137323,137326],{},[27,137318,137319],{},"用css 边框可以模拟三角效果",[27,137321,137322],{},"宽度高度为0",[27,137324,137325],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[27,137327,137328],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[190,137330,137332],{"className":128811,"code":137331,"language":128813,"meta":57,"style":57},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[196,137333,137334,137339,137346,137356,137366,137382,137393],{"__ignoreMap":57},[199,137335,137336],{"class":201,"line":202},[199,137337,137338],{"class":1454},"\u002F* CSS 实现三角形 *\u002F\n",[199,137340,137341,137344],{"class":201,"line":36},[199,137342,137343],{"class":878},".triangle",[199,137345,1012],{"class":205},[199,137347,137348,137350,137352,137354],{"class":201,"line":73},[199,137349,72827],{"class":1018},[199,137351,1022],{"class":205},[199,137353,1025],{"class":1018},[199,137355,1028],{"class":205},[199,137357,137358,137360,137362,137364],{"class":201,"line":333},[199,137359,73047],{"class":1018},[199,137361,1022],{"class":205},[199,137363,1025],{"class":1018},[199,137365,1028],{"class":205},[199,137367,137368,137370,137372,137374,137376,137378,137380],{"class":201,"line":227},[199,137369,73155],{"class":1018},[199,137371,1022],{"class":205},[199,137373,3528],{"class":1018},[199,137375,1087],{"class":1086},[199,137377,1120],{"class":1018},[199,137379,66250],{"class":1018},[199,137381,1028],{"class":205},[199,137383,137384,137387,137389,137391],{"class":201,"line":238},[199,137385,137386],{"class":1018},"  border-bottom-color",[199,137388,1022],{"class":205},[199,137390,64628],{"class":1018},[199,137392,1028],{"class":205},[199,137394,137395],{"class":201,"line":252},[199,137396,671],{"class":205},[190,137398,137399],{"className":128811,"code":132968,"language":128813,"meta":57,"style":57},[196,137400,137401,137407,137423],{"__ignoreMap":57},[199,137402,137403,137405],{"class":201,"line":202},[199,137404,1220],{"class":874},[199,137406,1012],{"class":205},[199,137408,137409,137411,137413,137415,137417,137419,137421],{"class":201,"line":36},[199,137410,73155],{"class":1018},[199,137412,1022],{"class":205},[199,137414,1115],{"class":1018},[199,137416,1087],{"class":1086},[199,137418,1120],{"class":1018},[199,137420,132203],{"class":1018},[199,137422,1028],{"class":205},[199,137424,137425],{"class":201,"line":73},[199,137426,671],{"class":205},[55,137428],{"style":128667,"src":137429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137431,137433],{"id":137432},"_132-css用户界面样式","13.2 css用户界面样式",[19,137435,137437],{"id":137436},"_1321-鼠标样式","13.2.1 鼠标样式",[190,137439,137441],{"className":128811,"code":137440,"language":128813,"meta":57,"style":57},"\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",[196,137442,137443,137448,137467,137485,137504,137521],{"__ignoreMap":57},[199,137444,137445],{"class":201,"line":202},[199,137446,137447],{"class":1454},"\u002F* 鼠标样式 *\u002F\n",[199,137449,137450,137452,137454,137457,137459,137461,137464],{"class":201,"line":36},[199,137451,1220],{"class":874},[199,137453,82066],{"class":205},[199,137455,137456],{"class":1018},"cursor",[199,137458,1022],{"class":205},[199,137460,64289],{"class":1018},[199,137462,137463],{"class":205},"; }   ",[199,137465,137466],{"class":1454},"\u002F* 手型 *\u002F\n",[199,137468,137469,137471,137473,137475,137477,137480,137482],{"class":201,"line":73},[199,137470,1220],{"class":874},[199,137472,82066],{"class":205},[199,137474,137456],{"class":1018},[199,137476,1022],{"class":205},[199,137478,137479],{"class":1018},"default",[199,137481,137463],{"class":205},[199,137483,137484],{"class":1454},"\u002F* 默认 *\u002F\n",[199,137486,137487,137489,137491,137493,137495,137498,137501],{"class":201,"line":333},[199,137488,1220],{"class":874},[199,137490,82066],{"class":205},[199,137492,137456],{"class":1018},[199,137494,1022],{"class":205},[199,137496,137497],{"class":1018},"move",[199,137499,137500],{"class":205},"; }      ",[199,137502,137503],{"class":1454},"\u002F* 移动 *\u002F\n",[199,137505,137506,137508,137510,137512,137514,137516,137518],{"class":201,"line":227},[199,137507,1220],{"class":874},[199,137509,82066],{"class":205},[199,137511,137456],{"class":1018},[199,137513,1022],{"class":205},[199,137515,8084],{"class":1018},[199,137517,137500],{"class":205},[199,137519,137520],{"class":1454},"\u002F* 文本 *\u002F\n",[199,137522,137523,137525,137527,137529,137531,137534,137537],{"class":201,"line":238},[199,137524,1220],{"class":874},[199,137526,82066],{"class":205},[199,137528,137456],{"class":1018},[199,137530,1022],{"class":205},[199,137532,137533],{"class":1018},"not-allowed",[199,137535,137536],{"class":205},"; } ",[199,137538,137539],{"class":1454},"\u002F* 禁止 *\u002F\n",[3227,137541,137542,137550],{},[3230,137543,137544],{},[3233,137545,137546,137548],{},[3236,137547,129275],{"align":26580},[3236,137549,30332],{"align":26580},[3273,137551,137552,137559,137566,137573,137580],{},[3233,137553,137554,137556],{},[3278,137555,137479],{"align":26580},[3278,137557,137558],{"align":26580},"小白 默认",[3233,137560,137561,137563],{},[3278,137562,64289],{"align":26580},[3278,137564,137565],{"align":26580},"小手",[3233,137567,137568,137570],{},[3278,137569,137497],{"align":26580},[3278,137571,137572],{"align":26580},"移动",[3233,137574,137575,137577],{},[3278,137576,8084],{"align":26580},[3278,137578,137579],{"align":26580},"文本",[3233,137581,137582,137584],{},[3278,137583,137533],{"align":26580},[3278,137585,137586],{"align":26580},"禁止",[19,137588,137590],{"id":137589},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[31,137592,137593],{},"去除表单轮廓线",[31,137595,137596],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[190,137598,137599],{"className":128811,"code":132175,"language":128813,"meta":57,"style":57},[196,137600,137601,137605,137611,137627],{"__ignoreMap":57},[199,137602,137603],{"class":201,"line":202},[199,137604,132182],{"class":1454},[199,137606,137607,137609],{"class":201,"line":36},[199,137608,1220],{"class":874},[199,137610,1012],{"class":205},[199,137612,137613,137615,137617,137619,137621,137623,137625],{"class":201,"line":73},[199,137614,73155],{"class":1018},[199,137616,1022],{"class":205},[199,137618,1115],{"class":1018},[199,137620,1087],{"class":1086},[199,137622,1120],{"class":1018},[199,137624,132203],{"class":1018},[199,137626,1028],{"class":205},[199,137628,137629],{"class":201,"line":333},[199,137630,671],{"class":205},[31,137632,137633],{},"文本域：",[55,137635],{"style":128667,"src":137636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[31,137638,137639],{},"此时会有一个空白区域",[55,137641],{"style":128667,"src":137642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[31,137644,137645],{},"写在同一行就不会出现这个问题",[55,137647],{"style":128667,"src":137648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[31,137650,137651],{},"文本域是行内块元素，一定记住！！！",[31,137653,100492],{},[55,137655],{"style":128667,"src":137656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[31,137658,137659],{},"文本域尽量放在一行",[31,137661,137662],{},"知识回顾：cols是列，rols是行",[55,137664],{"style":128667,"src":137665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[31,137667,137668],{},"它可以进行拖动，显然这是我们不愿意看到的",[55,137670],{"style":128667,"src":137671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[31,137673,137674],{},"使用resize进行解决",[190,137676,137678],{"className":128811,"code":137677,"language":128813,"meta":57,"style":57},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[196,137679,137680,137686,137699],{"__ignoreMap":57},[199,137681,137682,137684],{"class":201,"line":202},[199,137683,56080],{"class":874},[199,137685,1012],{"class":205},[199,137687,137688,137690,137692,137694,137696],{"class":201,"line":36},[199,137689,73057],{"class":1018},[199,137691,1022],{"class":205},[199,137693,56996],{"class":1018},[199,137695,132674],{"class":205},[199,137697,137698],{"class":1454},"\u002F* 取消表单轮廓线 *\u002F\n",[199,137700,137701],{"class":201,"line":73},[199,137702,671],{"class":205},[31,137704,137705],{},"此时就无法通过右下方实现拖动了",[19,137707,137709],{"id":137708},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[31,137711,137712],{},"实现一个盒子中的文字和图片对齐",[31,137714,137715,137716,137719],{},"用于设置一个元素的 ",[49,137717,137718],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[31,137721,137722],{},"图片和文字默认是基线对齐",[55,137724],{"style":128667,"src":137725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[190,137727,137728],{"className":128811,"code":137677,"language":128813,"meta":57,"style":57},[196,137729,137730,137736,137748],{"__ignoreMap":57},[199,137731,137732,137734],{"class":201,"line":202},[199,137733,56080],{"class":874},[199,137735,1012],{"class":205},[199,137737,137738,137740,137742,137744,137746],{"class":201,"line":36},[199,137739,73057],{"class":1018},[199,137741,1022],{"class":205},[199,137743,56996],{"class":1018},[199,137745,132674],{"class":205},[199,137747,137698],{"class":1454},[199,137749,137750],{"class":201,"line":73},[199,137751,671],{"class":205},[55,137753],{"style":128667,"src":137754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[627,137756,137758],{"id":137757},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[31,137760,137761],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[55,137763],{"style":128667,"src":137764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[31,137766,137767,137768,137771],{},"此时可以给图片、表单这些行内块元素的 ",[49,137769,137770],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[627,137773,137775],{"id":137774},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[31,137777,137778],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[31,137780,2323],{},[190,137782,137784],{"className":128811,"code":137783,"language":128813,"meta":57,"style":57},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[196,137785,137786,137791,137797,137809],{"__ignoreMap":57},[199,137787,137788],{"class":201,"line":202},[199,137789,137790],{"class":1454},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[199,137792,137793,137795],{"class":201,"line":36},[199,137794,55],{"class":874},[199,137796,1012],{"class":205},[199,137798,137799,137802,137804,137807],{"class":201,"line":73},[199,137800,137801],{"class":1018},"  vertical-align",[199,137803,1022],{"class":205},[199,137805,137806],{"class":1018},"middle",[199,137808,1028],{"class":205},[199,137810,137811],{"class":201,"line":333},[199,137812,671],{"class":205},[55,137814],{"style":128667,"src":137815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[31,137817,137818],{},"主要解决方法有两种：",[24,137820,137821],{},[27,137822,137823,137826,137827,137830],{},[49,137824,137825],{},"给图片"," 添加 ",[49,137828,137829],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[31,137832,137833,137834],{},"2.把图片转换为块级元素 ",[49,137835,137836],{},"display: block",[31,137838,137839],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[31,137841,137842],{},"img {",[31,137844,137845],{},"vertical-align:middle;",[31,137847,759],{},[19,137849,137851],{"id":137850},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[31,137853,137854],{},"效果：",[55,137856],{"style":128667,"src":137857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[31,137859,137860],{},"单行文本溢出显示省略号--必须满足三个条件：",[190,137862,137864],{"className":128811,"code":137863,"language":128813,"meta":57,"style":57},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[196,137865,137866,137871,137877,137887,137892,137902],{"__ignoreMap":57},[199,137867,137868],{"class":201,"line":202},[199,137869,137870],{"class":1454},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[199,137872,137873,137875],{"class":201,"line":36},[199,137874,55],{"class":874},[199,137876,1012],{"class":205},[199,137878,137879,137881,137883,137885],{"class":201,"line":73},[199,137880,137801],{"class":1018},[199,137882,1022],{"class":205},[199,137884,137806],{"class":1018},[199,137886,1028],{"class":205},[199,137888,137889],{"class":201,"line":333},[199,137890,137891],{"class":1454},"  \u002F* 或 *\u002F\n",[199,137893,137894,137896,137898,137900],{"class":201,"line":227},[199,137895,130427],{"class":1018},[199,137897,1022],{"class":205},[199,137899,63128],{"class":1018},[199,137901,1028],{"class":205},[199,137903,137904],{"class":201,"line":238},[199,137905,671],{"class":205},[19,137907,137909],{"id":137908},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[31,137911,137854],{},[55,137913],{"style":128667,"src":137914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[31,137916,137917,137918,137921],{},"多行文本溢出显示省略号， ",[49,137919,137920],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[190,137923,137924],{"className":128811,"code":137863,"language":128813,"meta":57,"style":57},[196,137925,137926,137930,137936,137946,137950,137960],{"__ignoreMap":57},[199,137927,137928],{"class":201,"line":202},[199,137929,137870],{"class":1454},[199,137931,137932,137934],{"class":201,"line":36},[199,137933,55],{"class":874},[199,137935,1012],{"class":205},[199,137937,137938,137940,137942,137944],{"class":201,"line":73},[199,137939,137801],{"class":1018},[199,137941,1022],{"class":205},[199,137943,137806],{"class":1018},[199,137945,1028],{"class":205},[199,137947,137948],{"class":201,"line":333},[199,137949,137891],{"class":1454},[199,137951,137952,137954,137956,137958],{"class":201,"line":227},[199,137953,130427],{"class":1018},[199,137955,1022],{"class":205},[199,137957,63128],{"class":1018},[199,137959,1028],{"class":205},[199,137961,137962],{"class":201,"line":238},[199,137963,671],{"class":205},[31,137965,137966],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137968,137970],{"id":137969},"_133-常见布局技巧","13.3 常见布局技巧",[31,137972,137973],{},[49,137974,137975],{},"巧妙利用一个技术更快更好的布局：",[24,137977,137978,137981,137984,137987],{},[27,137979,137980],{},"margin负值的运用",[27,137982,137983],{},"文字围绕浮动元素",[27,137985,137986],{},"行内块的巧妙运用",[27,137988,137989],{},"CSS三角强化",[19,137991,137993],{"id":137992},"_1331-margin负值的运用","13.3.1 margin负值的运用",[31,137995,137996],{},"应用场景：",[55,137998],{"style":128667,"src":137999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[55,138001],{"style":128667,"src":138002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[31,138004,138005],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[31,138007,138008],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[190,138010,138011],{"className":128811,"code":132175,"language":128813,"meta":57,"style":57},[196,138012,138013,138017,138023,138039],{"__ignoreMap":57},[199,138014,138015],{"class":201,"line":202},[199,138016,132182],{"class":1454},[199,138018,138019,138021],{"class":201,"line":36},[199,138020,1220],{"class":874},[199,138022,1012],{"class":205},[199,138024,138025,138027,138029,138031,138033,138035,138037],{"class":201,"line":73},[199,138026,73155],{"class":1018},[199,138028,1022],{"class":205},[199,138030,1115],{"class":1018},[199,138032,1087],{"class":1086},[199,138034,1120],{"class":1018},[199,138036,132203],{"class":1018},[199,138038,1028],{"class":205},[199,138040,138041],{"class":201,"line":333},[199,138042,671],{"class":205},[55,138044],{"style":128667,"src":138045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[31,138047,138048],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[190,138050,138052],{"className":128811,"code":138051,"language":128813,"meta":57,"style":57},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[196,138053,138054,138059,138065,138075,138087,138099],{"__ignoreMap":57},[199,138055,138056],{"class":201,"line":202},[199,138057,138058],{"class":1454},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[199,138060,138061,138063],{"class":201,"line":36},[199,138062,132659],{"class":878},[199,138064,1012],{"class":205},[199,138066,138067,138069,138071,138073],{"class":201,"line":73},[199,138068,134617],{"class":1018},[199,138070,1022],{"class":205},[199,138072,57023],{"class":1018},[199,138074,1028],{"class":205},[199,138076,138077,138079,138081,138083,138085],{"class":201,"line":333},[199,138078,134631],{"class":1018},[199,138080,1022],{"class":205},[199,138082,3528],{"class":1018},[199,138084,1087],{"class":1086},[199,138086,1028],{"class":205},[199,138088,138089,138091,138093,138095,138097],{"class":201,"line":227},[199,138090,134648],{"class":1018},[199,138092,1022],{"class":205},[199,138094,3779],{"class":1018},[199,138096,1087],{"class":1086},[199,138098,1028],{"class":205},[199,138100,138101],{"class":201,"line":238},[199,138102,671],{"class":205},[31,138104,138105],{},"加上上述代码会发现：",[55,138107],{"style":128667,"src":138108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[31,138110,138111],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[31,138113,138114],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[190,138116,138117],{"className":128811,"code":138051,"language":128813,"meta":57,"style":57},[196,138118,138119,138123,138129,138139,138151,138163],{"__ignoreMap":57},[199,138120,138121],{"class":201,"line":202},[199,138122,138058],{"class":1454},[199,138124,138125,138127],{"class":201,"line":36},[199,138126,132659],{"class":878},[199,138128,1012],{"class":205},[199,138130,138131,138133,138135,138137],{"class":201,"line":73},[199,138132,134617],{"class":1018},[199,138134,1022],{"class":205},[199,138136,57023],{"class":1018},[199,138138,1028],{"class":205},[199,138140,138141,138143,138145,138147,138149],{"class":201,"line":333},[199,138142,134631],{"class":1018},[199,138144,1022],{"class":205},[199,138146,3528],{"class":1018},[199,138148,1087],{"class":1086},[199,138150,1028],{"class":205},[199,138152,138153,138155,138157,138159,138161],{"class":201,"line":227},[199,138154,134648],{"class":1018},[199,138156,1022],{"class":205},[199,138158,3779],{"class":1018},[199,138160,1087],{"class":1086},[199,138162,1028],{"class":205},[199,138164,138165],{"class":201,"line":238},[199,138166,671],{"class":205},[31,138168,138169],{},"解决方式2：",[31,138171,138172],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[190,138174,138176],{"className":128811,"code":138175,"language":128813,"meta":57,"style":57},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[196,138177,138178,138184,138194,138206,138218],{"__ignoreMap":57},[199,138179,138180,138182],{"class":201,"line":202},[199,138181,1220],{"class":874},[199,138183,1012],{"class":205},[199,138185,138186,138188,138190,138192],{"class":201,"line":36},[199,138187,134617],{"class":1018},[199,138189,1022],{"class":205},[199,138191,57023],{"class":1018},[199,138193,1028],{"class":205},[199,138195,138196,138198,138200,138202,138204],{"class":201,"line":73},[199,138197,134631],{"class":1018},[199,138199,1022],{"class":205},[199,138201,3528],{"class":1018},[199,138203,1087],{"class":1086},[199,138205,1028],{"class":205},[199,138207,138208,138210,138212,138214,138216],{"class":201,"line":333},[199,138209,134648],{"class":1018},[199,138211,1022],{"class":205},[199,138213,3779],{"class":1018},[199,138215,1087],{"class":1086},[199,138217,1028],{"class":205},[199,138219,138220],{"class":201,"line":227},[199,138221,671],{"class":205},[19,138223,138225],{"id":138224},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[31,138227,137996],{},[55,138229],{"style":128667,"src":138230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[31,138232,138233],{},"实现结构图：",[55,138235],{"style":128667,"src":138236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[31,138238,138239],{},"巧妙运用浮动元素不会压住文字的特性",[31,138241,138242],{},"代码显示：",[190,138244,138246],{"className":128811,"code":138245,"language":128813,"meta":57,"style":57},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[196,138247,138248,138254,138264,138268,138273,138277,138283,138297],{"__ignoreMap":57},[199,138249,138250,138252],{"class":201,"line":202},[199,138251,132659],{"class":878},[199,138253,1012],{"class":205},[199,138255,138256,138258,138260,138262],{"class":201,"line":36},[199,138257,133291],{"class":1018},[199,138259,1022],{"class":205},[199,138261,26580],{"class":1018},[199,138263,1028],{"class":205},[199,138265,138266],{"class":201,"line":73},[199,138267,671],{"class":205},[199,138269,138270],{"class":201,"line":333},[199,138271,138272],{"class":205},"```Css\n",[199,138274,138275],{"class":201,"line":227},[199,138276,132654],{"class":1454},[199,138278,138279,138281],{"class":201,"line":238},[199,138280,132659],{"class":878},[199,138282,1012],{"class":205},[199,138284,138285,138287,138289,138291,138293,138295],{"class":201,"line":252},[199,138286,72729],{"class":1018},[199,138288,1022],{"class":205},[199,138290,1025],{"class":1018},[199,138292,1158],{"class":1018},[199,138294,132674],{"class":205},[199,138296,132677],{"class":1454},[199,138298,138299],{"class":201,"line":388},[199,138300,671],{"class":205},[31,138302,138303],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[190,138305,138308],{"className":138306,"code":138307,"language":8084},[8082],"\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",[196,138309,138307],{"__ignoreMap":57},[55,138311],{"style":128667,"src":138312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[31,138314,138315],{},"最终展示结果：",[190,138317,138318],{"className":128811,"code":132647,"language":128813,"meta":57,"style":57},[196,138319,138320,138324,138330,138344],{"__ignoreMap":57},[199,138321,138322],{"class":201,"line":202},[199,138323,132654],{"class":1454},[199,138325,138326,138328],{"class":201,"line":36},[199,138327,132659],{"class":878},[199,138329,1012],{"class":205},[199,138331,138332,138334,138336,138338,138340,138342],{"class":201,"line":73},[199,138333,72729],{"class":1018},[199,138335,1022],{"class":205},[199,138337,1025],{"class":1018},[199,138339,1158],{"class":1018},[199,138341,132674],{"class":205},[199,138343,132677],{"class":1454},[199,138345,138346],{"class":201,"line":333},[199,138347,671],{"class":205},[55,138349],{"style":128667,"src":138350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138352,138354],{"id":138353},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[19,138356,138358],{"id":138357},"_1341-原理","13.4.1 原理",[55,138360],{"style":128667,"src":138361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[190,138363,138364],{"className":128811,"code":132647,"language":128813,"meta":57,"style":57},[196,138365,138366,138370,138376,138390],{"__ignoreMap":57},[199,138367,138368],{"class":201,"line":202},[199,138369,132654],{"class":1454},[199,138371,138372,138374],{"class":201,"line":36},[199,138373,132659],{"class":878},[199,138375,1012],{"class":205},[199,138377,138378,138380,138382,138384,138386,138388],{"class":201,"line":73},[199,138379,72729],{"class":1018},[199,138381,1022],{"class":205},[199,138383,1025],{"class":1018},[199,138385,1158],{"class":1018},[199,138387,132674],{"class":205},[199,138389,132677],{"class":1454},[199,138391,138392],{"class":201,"line":333},[199,138393,671],{"class":205},[19,138395,138397],{"id":138396},"_1342-实例","13.4.2 实例",[55,138399],{"style":128667,"src":138400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[190,138402,138403],{"className":128811,"code":133277,"language":128813,"meta":57,"style":57},[196,138404,138405,138411,138421,138425,138431,138441],{"__ignoreMap":57},[199,138406,138407,138409],{"class":201,"line":202},[199,138408,133284],{"class":878},[199,138410,1012],{"class":205},[199,138412,138413,138415,138417,138419],{"class":201,"line":36},[199,138414,133291],{"class":1018},[199,138416,1022],{"class":205},[199,138418,26580],{"class":1018},[199,138420,1028],{"class":205},[199,138422,138423],{"class":201,"line":73},[199,138424,671],{"class":205},[199,138426,138427,138429],{"class":201,"line":333},[199,138428,133306],{"class":878},[199,138430,1012],{"class":205},[199,138432,138433,138435,138437,138439],{"class":201,"line":227},[199,138434,133291],{"class":1018},[199,138436,1022],{"class":205},[199,138438,74781],{"class":1018},[199,138440,1028],{"class":205},[199,138442,138443],{"class":201,"line":238},[199,138444,671],{"class":205},[14,138446,138448],{"id":138447},"_135-css的初始化","13.5 css的初始化",[31,138450,138451],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[31,138453,138454],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[31,138456,138457],{},"每个网页都必须首先进行 CSS初始化。",[31,138459,138460],{},"这里我们以 京东CSS初始化代码为例。",[31,138462,138463],{},"在网页右键查看网页源代码",[31,138465,138466],{},"找到css的link引入语句",[31,138468,138469],{},"然后ctrl+f 输入body",[31,138471,79485],{},[55,138473],{"style":128667,"src":138474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[31,138476,79508],{},[55,138478],{"style":128667,"src":138479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[31,138481,138482],{},"③打开了网页上传压缩的代码",[55,138484],{"style":128667,"src":138485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[31,138487,138488],{},"④从body前可以查看这个网页的初始化代码",[31,138490,138491],{},[49,138492,138493],{},"Unicode编码字体：",[31,138495,138496],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[31,138498,85466],{},[31,138500,138501],{},"黑体 \\9ED1\\4F53",[31,138503,138504],{},"宋体 \\5B8B\\4F53",[31,138506,138507],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1002,138509,138510],{},"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":57,"searchDepth":36,"depth":36,"links":138512},[138513,138514,138521,138525,138529],{"id":137310,"depth":36,"text":137311},{"id":137432,"depth":36,"text":137433,"children":138515},[138516,138517,138518,138519,138520],{"id":137436,"depth":73,"text":137437},{"id":137589,"depth":73,"text":137590},{"id":137708,"depth":73,"text":137709},{"id":137850,"depth":73,"text":137851},{"id":137908,"depth":73,"text":137909},{"id":137969,"depth":36,"text":137970,"children":138522},[138523,138524],{"id":137992,"depth":73,"text":137993},{"id":138224,"depth":73,"text":138225},{"id":138353,"depth":36,"text":138354,"children":138526},[138527,138528],{"id":138357,"depth":73,"text":138358},{"id":138396,"depth":73,"text":138397},{"id":138447,"depth":36,"text":138448},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137302,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138536,"title":138537,"body":138538,"description":3023,"extension":3024,"meta":140224,"navigation":906,"path":140225,"seo":140226,"stem":140227,"__hash__":140228},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138539,"toc":140213},[138540,138543,138547,138551,138554,138561,138564,138567,138605,138608,138610,138624,138628,138637,138641,138646,138649,138652,138655,138690,138695,138698,138728,138731,138736,138739,138742,138772,138775,138829,138832,138836,138841,138853,138856,138860,138890,138893,138898,138901,138931,138934,138938,138955,138959,138963,138966,138999,139002,139006,139009,139012,139015,139018,139021,139132,139135,139138,139141,139243,139246,139250,139254,139258,139261,139301,139304,139306,139322,139326,139329,139334,139415,139418,139421,139547,139552,139555,139563,139566,139571,139656,139659,139663,139666,139669,139673,139693,139698,139782,139785,139790,139793,139796,139874,139877,139880,139883,139886,139889,139894,139897,139900,139972,139975,139980,139983,140080,140083,140089,140092,140095,140098,140101,140104,140107,140110,140113,140117,140122,140125,140158,140163,140166,140207,140210],[10,138541,138537],{"id":138542},"_14-html5与css3新特性",[14,138544,138546],{"id":138545},"_141-html5的新特性","14.1 HTML5的新特性",[19,138548,138550],{"id":138549},"_1411-基本标签","14.1.1 基本标签",[31,138552,138553],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[31,138555,138556,138557,138560],{},"这些新特性都有兼容性问题，基本是 ",[49,138558,138559],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[31,138562,138563],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[31,138565,138566],{},"现在使用的是新特性：",[176,138568,138569,138575,138581,138587,138593,138599],{},[27,138570,138571,138574],{},[196,138572,138573],{},"\u003Cheader>"," 头部标签",[27,138576,138577,138580],{},[196,138578,138579],{},"\u003Cnav>"," 导航标签",[27,138582,138583,138586],{},[196,138584,138585],{},"\u003Carticle>"," 内容标签",[27,138588,138589,138592],{},[196,138590,138591],{},"\u003Csection>"," 定义文档某个区域",[27,138594,138595,138598],{},[196,138596,138597],{},"\u003Caside>"," 侧边栏标签",[27,138600,138601,138604],{},[196,138602,138603],{},"\u003Cfooter>"," 尾部标签",[55,138606],{"style":128667,"src":138607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[31,138609,3125],{},[176,138611,138612,138615,138618,138621],{},[27,138613,138614],{},"这种语义化标准主要是针对搜索引擎的",[27,138616,138617],{},"这些标签页面中可以经常使用",[27,138619,138620],{},"在IE9中，需要把这些元素转换为块级元素",[27,138622,138623],{},"移动端更喜欢使用这些标签",[19,138625,138627],{"id":138626},"_1412-多媒体标签","14.1.2 多媒体标签",[31,138629,138630,138631,138633,138634,138636],{},"音频 ",[49,138632,31017],{}," 和视频 ",[49,138635,31026],{}," 两个标签",[627,138638,138640],{"id":138639},"_14121-视频标签-video","14.1.2.1 视频标签- video",[24,138642,138643],{},[27,138644,138645],{},"支持格式：",[55,138647],{"style":128667,"src":138648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[31,138650,138651],{},"尽量使用MP4，兼容性好",[31,138653,138654],{},"用MP4就可以",[190,138656,138658],{"className":129558,"code":138657,"language":129560,"meta":57,"style":57},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[196,138659,138660],{"__ignoreMap":57},[199,138661,138662,138664,138666,138668,138670,138673,138675,138678,138681,138684,138686,138688],{"class":201,"line":202},[199,138663,887],{"class":205},[199,138665,31026],{"class":874},[199,138667,57498],{"class":878},[199,138669,895],{"class":205},[199,138671,138672],{"class":898},"\"movie.mp4\"",[199,138674,94682],{"class":878},[199,138676,138677],{"class":878}," autoplay",[199,138679,138680],{"class":878}," muted",[199,138682,138683],{"class":878}," loop",[199,138685,57573],{"class":205},[199,138687,31026],{"class":874},[199,138689,882],{"class":205},[24,138691,138692],{"start":36},[27,138693,138694],{},"兼容写法",[31,138696,138697],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[190,138699,138700],{"className":129558,"code":138657,"language":129560,"meta":57,"style":57},[196,138701,138702],{"__ignoreMap":57},[199,138703,138704,138706,138708,138710,138712,138714,138716,138718,138720,138722,138724,138726],{"class":201,"line":202},[199,138705,887],{"class":205},[199,138707,31026],{"class":874},[199,138709,57498],{"class":878},[199,138711,895],{"class":205},[199,138713,138672],{"class":898},[199,138715,94682],{"class":878},[199,138717,138677],{"class":878},[199,138719,138680],{"class":878},[199,138721,138683],{"class":878},[199,138723,57573],{"class":205},[199,138725,31026],{"class":874},[199,138727,882],{"class":205},[31,138729,138730],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[24,138732,138733],{"start":73},[27,138734,138735],{},"video常用属性",[55,138737],{"style":128667,"src":138738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[31,138740,138741],{},"poster属性后面是跟的等待加载图片的地址",[190,138743,138744],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,138745,138746],{"__ignoreMap":57},[199,138747,138748,138750,138752,138754,138756,138758,138760,138762,138764,138766,138768,138770],{"class":201,"line":202},[199,138749,887],{"class":205},[199,138751,55],{"class":874},[199,138753,57498],{"class":878},[199,138755,895],{"class":205},[199,138757,136328],{"class":898},[199,138759,57506],{"class":878},[199,138761,895],{"class":205},[199,138763,136335],{"class":898},[199,138765,136338],{"class":878},[199,138767,895],{"class":205},[199,138769,136343],{"class":898},[199,138771,882],{"class":205},[31,138773,138774],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[190,138776,138778],{"className":128811,"code":138777,"language":128813,"meta":57,"style":57},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[196,138779,138780,138785,138791,138815,138820,138825],{"__ignoreMap":57},[199,138781,138782],{"class":201,"line":202},[199,138783,138784],{"class":1454},"\u002F* 2D 位移 *\u002F\n",[199,138786,138787,138789],{"class":201,"line":36},[199,138788,1220],{"class":874},[199,138790,1012],{"class":205},[199,138792,138793,138796,138798,138801,138803,138805,138807,138809,138811,138813],{"class":201,"line":73},[199,138794,138795],{"class":1018},"  transform",[199,138797,1022],{"class":205},[199,138799,138800],{"class":1018},"translate",[199,138802,1537],{"class":205},[199,138804,3396],{"class":1018},[199,138806,1087],{"class":1086},[199,138808,1912],{"class":205},[199,138810,1153],{"class":1018},[199,138812,1087],{"class":1086},[199,138814,5623],{"class":205},[199,138816,138817],{"class":201,"line":333},[199,138818,138819],{"class":1454},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[199,138821,138822],{"class":201,"line":227},[199,138823,138824],{"class":1454},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[199,138826,138827],{"class":201,"line":238},[199,138828,671],{"class":205},[31,138830,138831],{},"muted:自动静音属性",[627,138833,138835],{"id":138834},"_14122-音频标签audio","14.1.2.2 音频标签audio",[24,138837,138838],{},[27,138839,138840],{},"基本使用",[31,138842,138843,138844,138849,138850],{},"当前 ",[49,138845,138846],{},[196,138847,138848],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[49,138851,138852],{},"mp3格式",[55,138854],{"style":128667,"src":138855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[24,138857,138858],{"start":36},[27,138859,138694],{},[190,138861,138862],{"className":129558,"code":138657,"language":129560,"meta":57,"style":57},[196,138863,138864],{"__ignoreMap":57},[199,138865,138866,138868,138870,138872,138874,138876,138878,138880,138882,138884,138886,138888],{"class":201,"line":202},[199,138867,887],{"class":205},[199,138869,31026],{"class":874},[199,138871,57498],{"class":878},[199,138873,895],{"class":205},[199,138875,138672],{"class":898},[199,138877,94682],{"class":878},[199,138879,138677],{"class":878},[199,138881,138680],{"class":878},[199,138883,138683],{"class":878},[199,138885,57573],{"class":205},[199,138887,31026],{"class":874},[199,138889,882],{"class":205},[31,138891,138892],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[24,138894,138895],{"start":73},[27,138896,138897],{},"常用属性",[55,138899],{"style":128667,"src":138900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[190,138902,138903],{"className":129558,"code":138657,"language":129560,"meta":57,"style":57},[196,138904,138905],{"__ignoreMap":57},[199,138906,138907,138909,138911,138913,138915,138917,138919,138921,138923,138925,138927,138929],{"class":201,"line":202},[199,138908,887],{"class":205},[199,138910,31026],{"class":874},[199,138912,57498],{"class":878},[199,138914,895],{"class":205},[199,138916,138672],{"class":898},[199,138918,94682],{"class":878},[199,138920,138677],{"class":878},[199,138922,138680],{"class":878},[199,138924,138683],{"class":878},[199,138926,57573],{"class":205},[199,138928,31026],{"class":874},[199,138930,882],{"class":205},[31,138932,138933],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[627,138935,138937],{"id":138936},"_14123-总结","14.1.2.3 总结",[176,138939,138940,138943,138946,138949,138952],{},[27,138941,138942],{},"音频标签和视频标签使用方式基本一致",[27,138944,138945],{},"浏览器支持情况不同",[27,138947,138948],{},"谷歌浏览器把音频和视频自动播放禁止了",[27,138950,138951],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[27,138953,138954],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[19,138956,138958],{"id":138957},"_1413-表单元素","14.1.3 表单元素",[627,138960,138962],{"id":138961},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[55,138964],{"style":128667,"src":138965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[190,138967,138969],{"className":129558,"code":138968,"language":129560,"meta":57,"style":57},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[196,138970,138971],{"__ignoreMap":57},[199,138972,138973,138975,138977,138979,138981,138983,138985,138987,138990,138992,138994,138997],{"class":201,"line":202},[199,138974,887],{"class":205},[199,138976,56080],{"class":874},[199,138978,56083],{"class":878},[199,138980,895],{"class":205},[199,138982,64958],{"class":898},[199,138984,967],{"class":878},[199,138986,895],{"class":205},[199,138988,138989],{"class":898},"\"username\"",[199,138991,63279],{"class":878},[199,138993,895],{"class":205},[199,138995,138996],{"class":898},"\"请输入用户名\"",[199,138998,882],{"class":205},[55,139000],{"style":128667,"src":139001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[627,139003,139005],{"id":139004},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[55,139007],{"style":128667,"src":139008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[31,139010,139011],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[31,139013,139014],{},"快捷操作：",[55,139016],{"style":128667,"src":139017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[31,139019,139020],{},"例子1：",[190,139022,139024],{"className":129558,"code":139023,"language":129560,"meta":57,"style":57},"\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",[196,139025,139026,139049,139076,139105,139124],{"__ignoreMap":57},[199,139027,139028,139030,139032,139034,139036,139039,139042,139044,139047],{"class":201,"line":202},[199,139029,887],{"class":205},[199,139031,68884],{"class":874},[199,139033,68887],{"class":878},[199,139035,895],{"class":205},[199,139037,139038],{"class":898},"\"\u002Fsubmit\"",[199,139040,139041],{"class":878}," method",[199,139043,895],{"class":205},[199,139045,139046],{"class":898},"\"post\"",[199,139048,882],{"class":205},[199,139050,139051,139053,139055,139057,139059,139061,139063,139065,139067,139069,139071,139074],{"class":201,"line":36},[199,139052,1824],{"class":205},[199,139054,56080],{"class":874},[199,139056,56083],{"class":878},[199,139058,895],{"class":205},[199,139060,64958],{"class":898},[199,139062,967],{"class":878},[199,139064,895],{"class":205},[199,139066,138989],{"class":898},[199,139068,63279],{"class":878},[199,139070,895],{"class":205},[199,139072,139073],{"class":898},"\"用户名\"",[199,139075,882],{"class":205},[199,139077,139078,139080,139082,139084,139086,139089,139091,139093,139096,139098,139100,139103],{"class":201,"line":73},[199,139079,1824],{"class":205},[199,139081,56080],{"class":874},[199,139083,56083],{"class":878},[199,139085,895],{"class":205},[199,139087,139088],{"class":898},"\"password\"",[199,139090,967],{"class":878},[199,139092,895],{"class":205},[199,139094,139095],{"class":898},"\"pwd\"",[199,139097,63279],{"class":878},[199,139099,895],{"class":205},[199,139101,139102],{"class":898},"\"密码\"",[199,139104,882],{"class":205},[199,139106,139107,139109,139111,139113,139115,139117,139120,139122],{"class":201,"line":333},[199,139108,1824],{"class":205},[199,139110,56146],{"class":874},[199,139112,56083],{"class":878},[199,139114,895],{"class":205},[199,139116,68907],{"class":898},[199,139118,139119],{"class":205},">提交\u003C\u002F",[199,139121,56146],{"class":874},[199,139123,882],{"class":205},[199,139125,139126,139128,139130],{"class":201,"line":227},[199,139127,1414],{"class":205},[199,139129,68884],{"class":874},[199,139131,882],{"class":205},[55,139133],{"style":128667,"src":139134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[31,139136,139137],{},"value是表单域的内容",[31,139139,139140],{},"例子2：",[190,139142,139143],{"className":129558,"code":139023,"language":129560,"meta":57,"style":57},[196,139144,139145,139165,139191,139217,139235],{"__ignoreMap":57},[199,139146,139147,139149,139151,139153,139155,139157,139159,139161,139163],{"class":201,"line":202},[199,139148,887],{"class":205},[199,139150,68884],{"class":874},[199,139152,68887],{"class":878},[199,139154,895],{"class":205},[199,139156,139038],{"class":898},[199,139158,139041],{"class":878},[199,139160,895],{"class":205},[199,139162,139046],{"class":898},[199,139164,882],{"class":205},[199,139166,139167,139169,139171,139173,139175,139177,139179,139181,139183,139185,139187,139189],{"class":201,"line":36},[199,139168,1824],{"class":205},[199,139170,56080],{"class":874},[199,139172,56083],{"class":878},[199,139174,895],{"class":205},[199,139176,64958],{"class":898},[199,139178,967],{"class":878},[199,139180,895],{"class":205},[199,139182,138989],{"class":898},[199,139184,63279],{"class":878},[199,139186,895],{"class":205},[199,139188,139073],{"class":898},[199,139190,882],{"class":205},[199,139192,139193,139195,139197,139199,139201,139203,139205,139207,139209,139211,139213,139215],{"class":201,"line":73},[199,139194,1824],{"class":205},[199,139196,56080],{"class":874},[199,139198,56083],{"class":878},[199,139200,895],{"class":205},[199,139202,139088],{"class":898},[199,139204,967],{"class":878},[199,139206,895],{"class":205},[199,139208,139095],{"class":898},[199,139210,63279],{"class":878},[199,139212,895],{"class":205},[199,139214,139102],{"class":898},[199,139216,882],{"class":205},[199,139218,139219,139221,139223,139225,139227,139229,139231,139233],{"class":201,"line":333},[199,139220,1824],{"class":205},[199,139222,56146],{"class":874},[199,139224,56083],{"class":878},[199,139226,895],{"class":205},[199,139228,68907],{"class":898},[199,139230,139119],{"class":205},[199,139232,56146],{"class":874},[199,139234,882],{"class":205},[199,139236,139237,139239,139241],{"class":201,"line":227},[199,139238,1414],{"class":205},[199,139240,68884],{"class":874},[199,139242,882],{"class":205},[55,139244],{"style":128667,"src":139245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139247,139249],{"id":139248},"_142-css新特性","14.2 CSS新特性",[19,139251,139253],{"id":139252},"_1421-新增选择器","14.2.1 新增选择器",[627,139255,139257],{"id":139256},"_14211-属性选择器","14.2.1.1 属性选择器",[55,139259],{"style":128667,"src":139260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[190,139262,139264],{"className":128811,"code":139263,"language":128813,"meta":57,"style":57},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[196,139265,139266,139281,139297],{"__ignoreMap":57},[199,139267,139268,139270,139272,139274,139276,139278],{"class":201,"line":202},[199,139269,56080],{"class":874},[199,139271,1662],{"class":205},[199,139273,105366],{"class":878},[199,139275,895],{"class":1086},[199,139277,64958],{"class":898},[199,139279,139280],{"class":205},"] {\n",[199,139282,139283,139285,139287,139289,139291,139293,139295],{"class":201,"line":36},[199,139284,73155],{"class":1018},[199,139286,1022],{"class":205},[199,139288,1115],{"class":1018},[199,139290,1087],{"class":1086},[199,139292,1120],{"class":1018},[199,139294,132391],{"class":1018},[199,139296,1028],{"class":205},[199,139298,139299],{"class":201,"line":73},[199,139300,671],{"class":205},[55,139302],{"style":128667,"src":139303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[31,139305,3125],{},[176,139307,139308,139311,139314,139317],{},[27,139309,139310],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[27,139312,139313],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[27,139315,139316],{},"属性选择器也可以选择出来自定义的属性",[27,139318,139319,139321],{},[49,139320,11912],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[627,139323,139325],{"id":139324},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[55,139327],{"style":128667,"src":139328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[24,139330,139331],{},[27,139332,139333],{},"fist-child",[190,139335,139337],{"className":128811,"code":139336,"language":128813,"meta":57,"style":57},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[196,139338,139339,139344,139359,139379,139397],{"__ignoreMap":57},[199,139340,139341],{"class":201,"line":202},[199,139342,139343],{"class":1454},"\u002F* 属性选择器 *\u002F\n",[199,139345,139346,139348,139350,139352,139354,139356],{"class":201,"line":36},[199,139347,56080],{"class":874},[199,139349,1662],{"class":205},[199,139351,105366],{"class":878},[199,139353,895],{"class":1086},[199,139355,64958],{"class":898},[199,139357,139358],{"class":205},"] { }\n",[199,139360,139361,139363,139365,139367,139370,139373,139376],{"class":201,"line":73},[199,139362,56080],{"class":874},[199,139364,1662],{"class":205},[199,139366,17554],{"class":878},[199,139368,139369],{"class":1086},"^=",[199,139371,139372],{"class":898},"\"icon\"",[199,139374,139375],{"class":205},"] { }  ",[199,139377,139378],{"class":1454},"\u002F* 以 icon 开头 *\u002F\n",[199,139380,139381,139383,139385,139387,139390,139392,139394],{"class":201,"line":333},[199,139382,56080],{"class":874},[199,139384,1662],{"class":205},[199,139386,17554],{"class":878},[199,139388,139389],{"class":1086},"$=",[199,139391,139372],{"class":898},[199,139393,139375],{"class":205},[199,139395,139396],{"class":1454},"\u002F* 以 icon 结尾 *\u002F\n",[199,139398,139399,139401,139403,139405,139408,139410,139412],{"class":201,"line":227},[199,139400,56080],{"class":874},[199,139402,1662],{"class":205},[199,139404,17554],{"class":878},[199,139406,139407],{"class":1086},"*=",[199,139409,139372],{"class":898},[199,139411,139375],{"class":205},[199,139413,139414],{"class":1454},"\u002F* 包含 icon *\u002F\n",[31,139416,139417],{},"ul的第一个儿子文本为红色",[31,139419,139420],{},"一定要在冒号前加空格，不然就是选中所有的了",[190,139422,139424],{"className":128811,"code":139423,"language":128813,"meta":57,"style":57},".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",[196,139425,139426,139432,139442,139446,139450,139455,139468,139481,139497,139514,139531],{"__ignoreMap":57},[199,139427,139428,139430],{"class":201,"line":202},[199,139429,129102],{"class":878},[199,139431,1012],{"class":205},[199,139433,139434,139436,139438,139440],{"class":201,"line":36},[199,139435,73164],{"class":1018},[199,139437,1022],{"class":205},[199,139439,59680],{"class":1018},[199,139441,1028],{"class":205},[199,139443,139444],{"class":201,"line":73},[199,139445,671],{"class":205},[199,139447,139448],{"class":201,"line":333},[199,139449,138272],{"class":205},[199,139451,139452],{"class":201,"line":227},[199,139453,139454],{"class":1454},"\u002F* 结构伪类选择器 *\u002F\n",[199,139456,139457,139459,139462,139465],{"class":201,"line":238},[199,139458,27],{"class":874},[199,139460,139461],{"class":878},":first-child",[199,139463,139464],{"class":205}," { }           ",[199,139466,139467],{"class":1454},"\u002F* 第一个 *\u002F\n",[199,139469,139470,139472,139475,139478],{"class":201,"line":252},[199,139471,27],{"class":874},[199,139473,139474],{"class":878},":last-child",[199,139476,139477],{"class":205}," { }            ",[199,139479,139480],{"class":1454},"\u002F* 最后一个 *\u002F\n",[199,139482,139483,139485,139487,139489,139491,139494],{"class":201,"line":388},[199,139484,27],{"class":874},[199,139486,131725],{"class":878},[199,139488,1537],{"class":205},[199,139490,1925],{"class":1018},[199,139492,139493],{"class":205},") { }          ",[199,139495,139496],{"class":1454},"\u002F* 第2个 *\u002F\n",[199,139498,139499,139501,139503,139505,139508,139511],{"class":201,"line":415},[199,139500,27],{"class":874},[199,139502,131725],{"class":878},[199,139504,1537],{"class":205},[199,139506,139507],{"class":1018},"2n",[199,139509,139510],{"class":205},") { }         ",[199,139512,139513],{"class":1454},"\u002F* 偶数 *\u002F\n",[199,139515,139516,139518,139520,139522,139525,139528],{"class":201,"line":426},[199,139517,27],{"class":874},[199,139519,131725],{"class":878},[199,139521,1537],{"class":205},[199,139523,139524],{"class":1018},"2n+1",[199,139526,139527],{"class":205},") { }       ",[199,139529,139530],{"class":1454},"\u002F* 奇数 *\u002F\n",[199,139532,139533,139535,139537,139539,139542,139544],{"class":201,"line":1015},[199,139534,27],{"class":874},[199,139536,131725],{"class":878},[199,139538,1537],{"class":205},[199,139540,139541],{"class":1018},"-n+3",[199,139543,139527],{"class":205},[199,139545,139546],{"class":1454},"\u002F* 前3个 *\u002F\n",[1220,139548,139551],{"className":139549},[139550],"example","\n  示例内容\n",[31,139553,139554],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[176,139556,139557],{},[27,139558,139559,139562],{},[196,139560,139561],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[31,139564,139565],{},"也就是说它选择的是熊大",[24,139567,139568],{"start":238},[27,139569,139570],{},"权重",[190,139572,139574],{"className":128811,"code":139573,"language":128813,"meta":57,"style":57},"\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",[196,139575,139576,139580,139590,139600,139614,139628,139642],{"__ignoreMap":57},[199,139577,139578],{"class":201,"line":202},[199,139579,139454],{"class":1454},[199,139581,139582,139584,139586,139588],{"class":201,"line":36},[199,139583,27],{"class":874},[199,139585,139461],{"class":878},[199,139587,139464],{"class":205},[199,139589,139467],{"class":1454},[199,139591,139592,139594,139596,139598],{"class":201,"line":73},[199,139593,27],{"class":874},[199,139595,139474],{"class":878},[199,139597,139477],{"class":205},[199,139599,139480],{"class":1454},[199,139601,139602,139604,139606,139608,139610,139612],{"class":201,"line":333},[199,139603,27],{"class":874},[199,139605,131725],{"class":878},[199,139607,1537],{"class":205},[199,139609,1925],{"class":1018},[199,139611,139493],{"class":205},[199,139613,139496],{"class":1454},[199,139615,139616,139618,139620,139622,139624,139626],{"class":201,"line":227},[199,139617,27],{"class":874},[199,139619,131725],{"class":878},[199,139621,1537],{"class":205},[199,139623,139507],{"class":1018},[199,139625,139510],{"class":205},[199,139627,139513],{"class":1454},[199,139629,139630,139632,139634,139636,139638,139640],{"class":201,"line":238},[199,139631,27],{"class":874},[199,139633,131725],{"class":878},[199,139635,1537],{"class":205},[199,139637,139524],{"class":1018},[199,139639,139527],{"class":205},[199,139641,139530],{"class":1454},[199,139643,139644,139646,139648,139650,139652,139654],{"class":201,"line":252},[199,139645,27],{"class":874},[199,139647,131725],{"class":878},[199,139649,1537],{"class":205},[199,139651,139541],{"class":1018},[199,139653,139527],{"class":205},[199,139655,139546],{"class":1454},[31,139657,139658],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[627,139660,139662],{"id":139661},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[31,139664,139665],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[55,139667],{"style":128667,"src":139668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[24,139670,139671],{},[27,139672,3125],{},[176,139674,139675,139678,139681,139684,139687,139690],{},[27,139676,139677],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[27,139679,139680],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[27,139682,139683],{},"语法： element::before {}",[27,139685,139686],{},"before 和 after 必须有 content 属性",[27,139688,139689],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[27,139691,139692],{},"伪元素选择器和标签选择器一样，权重为 1",[24,139694,139695],{"start":36},[27,139696,139697],{},"实例",[190,139699,139700],{"className":128811,"code":139573,"language":128813,"meta":57,"style":57},[196,139701,139702,139706,139716,139726,139740,139754,139768],{"__ignoreMap":57},[199,139703,139704],{"class":201,"line":202},[199,139705,139454],{"class":1454},[199,139707,139708,139710,139712,139714],{"class":201,"line":36},[199,139709,27],{"class":874},[199,139711,139461],{"class":878},[199,139713,139464],{"class":205},[199,139715,139467],{"class":1454},[199,139717,139718,139720,139722,139724],{"class":201,"line":73},[199,139719,27],{"class":874},[199,139721,139474],{"class":878},[199,139723,139477],{"class":205},[199,139725,139480],{"class":1454},[199,139727,139728,139730,139732,139734,139736,139738],{"class":201,"line":333},[199,139729,27],{"class":874},[199,139731,131725],{"class":878},[199,139733,1537],{"class":205},[199,139735,1925],{"class":1018},[199,139737,139493],{"class":205},[199,139739,139496],{"class":1454},[199,139741,139742,139744,139746,139748,139750,139752],{"class":201,"line":227},[199,139743,27],{"class":874},[199,139745,131725],{"class":878},[199,139747,1537],{"class":205},[199,139749,139507],{"class":1018},[199,139751,139510],{"class":205},[199,139753,139513],{"class":1454},[199,139755,139756,139758,139760,139762,139764,139766],{"class":201,"line":238},[199,139757,27],{"class":874},[199,139759,131725],{"class":878},[199,139761,1537],{"class":205},[199,139763,139524],{"class":1018},[199,139765,139527],{"class":205},[199,139767,139530],{"class":1454},[199,139769,139770,139772,139774,139776,139778,139780],{"class":201,"line":252},[199,139771,27],{"class":874},[199,139773,131725],{"class":878},[199,139775,1537],{"class":205},[199,139777,139541],{"class":1018},[199,139779,139527],{"class":205},[199,139781,139546],{"class":1454},[55,139783],{"style":128667,"src":139784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[24,139786,139787],{"start":73},[27,139788,139789],{},"使用场景1",[55,139791],{"style":128667,"src":139792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[31,139794,139795],{},"不需要再加盒子来整红色那部分了",[190,139797,139799],{"className":128811,"code":139798,"language":128813,"meta":57,"style":57},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[196,139800,139801,139806,139815,139826,139836,139840,139849,139860,139870],{"__ignoreMap":57},[199,139802,139803],{"class":201,"line":202},[199,139804,139805],{"class":1454},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[199,139807,139808,139810,139813],{"class":201,"line":36},[199,139809,1220],{"class":874},[199,139811,139812],{"class":878},"::before",[199,139814,1012],{"class":205},[199,139816,139817,139820,139822,139824],{"class":201,"line":73},[199,139818,139819],{"class":1018},"  content",[199,139821,1022],{"class":205},[199,139823,10549],{"class":898},[199,139825,1028],{"class":205},[199,139827,139828,139830,139832,139834],{"class":201,"line":333},[199,139829,130427],{"class":1018},[199,139831,1022],{"class":205},[199,139833,63128],{"class":1018},[199,139835,1028],{"class":205},[199,139837,139838],{"class":201,"line":227},[199,139839,671],{"class":205},[199,139841,139842,139844,139847],{"class":201,"line":238},[199,139843,1220],{"class":874},[199,139845,139846],{"class":878},"::after",[199,139848,1012],{"class":205},[199,139850,139851,139853,139855,139858],{"class":201,"line":252},[199,139852,139819],{"class":1018},[199,139854,1022],{"class":205},[199,139856,139857],{"class":898},"\"→\"",[199,139859,1028],{"class":205},[199,139861,139862,139864,139866,139868],{"class":201,"line":388},[199,139863,73164],{"class":1018},[199,139865,1022],{"class":205},[199,139867,64329],{"class":1018},[199,139869,1028],{"class":205},[199,139871,139872],{"class":201,"line":415},[199,139873,671],{"class":205},[55,139875],{"style":128667,"src":139876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[31,139878,139879],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[55,139881],{"style":128667,"src":139882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[31,139884,139885],{},"但是在引用时需要先转义一下",[31,139887,139888],{},"content='\\e930'",[24,139890,139891],{"start":333},[27,139892,139893],{},"使用场景2",[31,139895,139896],{},"仿土豆效果",[31,139898,139899],{},"通过使用伪元素选择器可以减少body中盒子的数量",[190,139901,139902],{"className":128811,"code":139798,"language":128813,"meta":57,"style":57},[196,139903,139904,139908,139916,139926,139936,139940,139948,139958,139968],{"__ignoreMap":57},[199,139905,139906],{"class":201,"line":202},[199,139907,139805],{"class":1454},[199,139909,139910,139912,139914],{"class":201,"line":36},[199,139911,1220],{"class":874},[199,139913,139812],{"class":878},[199,139915,1012],{"class":205},[199,139917,139918,139920,139922,139924],{"class":201,"line":73},[199,139919,139819],{"class":1018},[199,139921,1022],{"class":205},[199,139923,10549],{"class":898},[199,139925,1028],{"class":205},[199,139927,139928,139930,139932,139934],{"class":201,"line":333},[199,139929,130427],{"class":1018},[199,139931,1022],{"class":205},[199,139933,63128],{"class":1018},[199,139935,1028],{"class":205},[199,139937,139938],{"class":201,"line":227},[199,139939,671],{"class":205},[199,139941,139942,139944,139946],{"class":201,"line":238},[199,139943,1220],{"class":874},[199,139945,139846],{"class":878},[199,139947,1012],{"class":205},[199,139949,139950,139952,139954,139956],{"class":201,"line":252},[199,139951,139819],{"class":1018},[199,139953,1022],{"class":205},[199,139955,139857],{"class":898},[199,139957,1028],{"class":205},[199,139959,139960,139962,139964,139966],{"class":201,"line":388},[199,139961,73164],{"class":1018},[199,139963,1022],{"class":205},[199,139965,64329],{"class":1018},[199,139967,1028],{"class":205},[199,139969,139970],{"class":201,"line":415},[199,139971,671],{"class":205},[55,139973],{"style":128667,"src":139974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[24,139976,139977],{"start":227},[27,139978,139979],{},"使用场景3",[31,139981,139982],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[190,139984,139986],{"className":128811,"code":139985,"language":128813,"meta":57,"style":57},".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",[196,139987,139988,139994,140004,140008,140012,140016,140024,140034,140044,140048,140056,140066,140076],{"__ignoreMap":57},[199,139989,139990,139992],{"class":201,"line":202},[199,139991,132659],{"class":878},[199,139993,1012],{"class":205},[199,139995,139996,139998,140000,140002],{"class":201,"line":36},[199,139997,133291],{"class":1018},[199,139999,1022],{"class":205},[199,140001,26580],{"class":1018},[199,140003,1028],{"class":205},[199,140005,140006],{"class":201,"line":73},[199,140007,671],{"class":205},[199,140009,140010],{"class":201,"line":333},[199,140011,138272],{"class":205},[199,140013,140014],{"class":201,"line":227},[199,140015,139805],{"class":1454},[199,140017,140018,140020,140022],{"class":201,"line":238},[199,140019,1220],{"class":874},[199,140021,139812],{"class":878},[199,140023,1012],{"class":205},[199,140025,140026,140028,140030,140032],{"class":201,"line":252},[199,140027,139819],{"class":1018},[199,140029,1022],{"class":205},[199,140031,10549],{"class":898},[199,140033,1028],{"class":205},[199,140035,140036,140038,140040,140042],{"class":201,"line":388},[199,140037,130427],{"class":1018},[199,140039,1022],{"class":205},[199,140041,63128],{"class":1018},[199,140043,1028],{"class":205},[199,140045,140046],{"class":201,"line":415},[199,140047,671],{"class":205},[199,140049,140050,140052,140054],{"class":201,"line":426},[199,140051,1220],{"class":874},[199,140053,139846],{"class":878},[199,140055,1012],{"class":205},[199,140057,140058,140060,140062,140064],{"class":201,"line":1015},[199,140059,139819],{"class":1018},[199,140061,1022],{"class":205},[199,140063,139857],{"class":898},[199,140065,1028],{"class":205},[199,140067,140068,140070,140072,140074],{"class":201,"line":1031},[199,140069,73164],{"class":1018},[199,140071,1022],{"class":205},[199,140073,64329],{"class":1018},[199,140075,1028],{"class":205},[199,140077,140078],{"class":201,"line":1043},[199,140079,671],{"class":205},[31,140081,140082],{},"div {\nmargin: 0 auto;\n}",[190,140084,140087],{"className":140085,"code":140086,"language":8084},[8082],"\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",[196,140088,140086],{"__ignoreMap":57},[31,140090,140091],{},"如果想让多个元素都发生变化",[31,140093,140094],{},"不能如下操作：",[31,140096,140097],{},"transition: width 2s ease 0.5s;",[31,140099,140100],{},"transition: height 2s ease 0.5s;不对！！！",[31,140102,140103],{},"上方会样式冲突，导致不显示任何过渡效果",[31,140105,140106],{},"使用如下：加逗号隔开",[31,140108,140109],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[31,140111,140112],{},"transition all 2s ease;",[19,140114,140116],{"id":140115},"_1426-过渡练习","14.2.6 过渡练习",[24,140118,140119],{},[27,140120,140121],{},"进度条",[55,140123],{"style":128667,"src":140124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[190,140126,140128],{"className":128811,"code":140127,"language":128813,"meta":57,"style":57},"div {\n  transition: all 0.3s ease;\n}\n",[196,140129,140130,140136,140154],{"__ignoreMap":57},[199,140131,140132,140134],{"class":201,"line":202},[199,140133,1220],{"class":874},[199,140135,1012],{"class":205},[199,140137,140138,140141,140143,140145,140148,140150,140152],{"class":201,"line":36},[199,140139,140140],{"class":1018},"  transition",[199,140142,1022],{"class":205},[199,140144,30964],{"class":1018},[199,140146,140147],{"class":1018}," 0.3",[199,140149,3774],{"class":1086},[199,140151,80939],{"class":1018},[199,140153,1028],{"class":205},[199,140155,140156],{"class":201,"line":73},[199,140157,671],{"class":205},[24,140159,140160],{"start":36},[27,140161,140162],{},"小米logo",[31,140164,140165],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[190,140167,140169],{"className":128811,"code":140168,"language":128813,"meta":57,"style":57},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[196,140170,140171,140176,140182,140198,140203],{"__ignoreMap":57},[199,140172,140173],{"class":201,"line":202},[199,140174,140175],{"class":1454},"\u002F* CSS3 过渡 *\u002F\n",[199,140177,140178,140180],{"class":201,"line":36},[199,140179,1220],{"class":874},[199,140181,1012],{"class":205},[199,140183,140184,140186,140188,140190,140192,140194,140196],{"class":201,"line":73},[199,140185,140140],{"class":1018},[199,140187,1022],{"class":205},[199,140189,30964],{"class":1018},[199,140191,140147],{"class":1018},[199,140193,3774],{"class":1086},[199,140195,80939],{"class":1018},[199,140197,1028],{"class":205},[199,140199,140200],{"class":201,"line":333},[199,140201,140202],{"class":1454},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[199,140204,140205],{"class":201,"line":227},[199,140206,671],{"class":205},[31,140208,140209],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1002,140211,140212],{},"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":57,"searchDepth":36,"depth":36,"links":140214},[140215,140220],{"id":138545,"depth":36,"text":138546,"children":140216},[140217,140218,140219],{"id":138549,"depth":73,"text":138550},{"id":138626,"depth":73,"text":138627},{"id":138957,"depth":73,"text":138958},{"id":139248,"depth":36,"text":139249,"children":140221},[140222,140223],{"id":139252,"depth":73,"text":139253},{"id":140115,"depth":73,"text":140116},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138537,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140230,"title":140231,"body":140232,"description":3023,"extension":3024,"meta":141976,"navigation":906,"path":141977,"seo":141978,"stem":141979,"__hash__":141980},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140233,"toc":141957},[140234,140237,140241,140244,140250,140256,140260,140262,140265,140268,140271,140274,140277,140280,140283,140287,140291,140294,140297,140300,140304,140307,140310,140315,140318,140321,140324,140328,140331,140340,140343,140346,140350,140353,140356,140361,140368,140382,140390,140397,140402,140405,140408,140411,140418,140422,140428,140434,140437,140440,140445,140451,140453,140461,140466,140469,140475,140477,140482,140487,140490,140492,140497,140500,140505,140510,140544,140548,140552,140555,140559,140562,140648,140651,140688,140691,140727,140731,140736,140749,140803,140805,140833,140835,140863,140869,140883,140885,140929,140931,140975,140978,140985,140996,140998,141025,141027,141053,141060,141076,141078,141172,141174,141268,141275,141278,141283,141289,141363,141366,141368,141404,141406,141442,141445,141452,141471,141474,141477,141479,141504,141506,141530,141533,141536,141566,141570,141573,141636,141638,141704,141706,141770,141773,141805,141807,141833,141835,141861,141864,141895,141897,141923,141925,141951,141954],[10,140235,140231],{"id":140236},"_15-品优购项目上篇-搭建与公共模块",[14,140238,140240],{"id":140239},"_151-项目规划","15.1 项目规划",[55,140242],{"style":128667,"src":140243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[31,140245,140246,140249],{},[49,140247,140248],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[31,140251,140252,140255],{},[49,140253,140254],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140257,140259],{"id":140258},"_152-项目介绍","15.2 项目介绍",[31,140261,140248],{},[55,140263],{"style":128667,"src":140264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[31,140266,140267],{},"主页：",[55,140269],{"style":128667,"src":140270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[31,140272,140273],{},"列表页：",[55,140275],{"style":128667,"src":140276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[31,140278,140279],{},"注册页：",[55,140281],{"style":128667,"src":140282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140284,140286],{"id":140285},"_153-项目搭建工作","15.3 项目搭建工作",[19,140288,140290],{"id":140289},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[55,140292],{"style":128667,"src":140293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[31,140295,140296],{},"经常更换的图片要放到upload文件夹中",[31,140298,140299],{},"不经常换的放到images文件夹中",[19,140301,140303],{"id":140302},"_1532-创建文件如下","15.3.2 创建文件如下",[55,140305],{"style":128667,"src":140306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[55,140308],{"style":128667,"src":140309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[31,140311,140312],{},[49,140313,140314],{},"初始化样式：",[31,140316,140317],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[31,140319,140320],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[31,140322,140323],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[19,140325,140327],{"id":140326},"_1533-项目模块化开发","15.3.3 项目模块化开发",[31,140329,140330],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[31,140332,140333,140334,140339],{},"这里最典型的应用就是 ",[49,140335,140336],{},[196,140337,140338],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[55,140341],{"style":128667,"src":140342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[31,140344,140345],{},"通过link方法来引入",[19,140347,140349],{"id":140348},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[55,140351],{"style":128667,"src":140352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[31,140354,140355],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[24,140357,140358],{},[27,140359,140360],{},"制作favicon图标",[31,140362,140363,140364,140367],{},"①把品优购图标切成 ",[196,140365,140366],{},"png"," 图片",[31,140369,140370,140371,140373,140374,140377,140378],{},"②把 ",[196,140372,140366],{}," 图片转换为 ",[196,140375,140376],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2867,140379,140380],{"href":140380,"rel":140381},"http:\u002F\u002Fwww.bitbug.net\u002F",[2871],[24,140383,140384,140387],{"start":36},[27,140385,140386],{},"favicon图标放到网站根目录下",[27,140388,140389],{},"HTML页面引入favicon",[31,140391,140392,140393,140396],{},"在html 页面里面的 ",[196,140394,140395],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[31,140398,140399],{},[196,140400,140401],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[31,140403,140404],{},"复制这行代码或者在生成这个的网站进行复制",[55,140406],{"style":128667,"src":140407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[31,140409,140410],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[31,140412,140413,140414],{},"例如:",[2867,140415,140416],{"href":140416,"rel":140417},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[2871],[19,140419,140421],{"id":140420},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[31,140423,140424,140427],{},[49,140425,140426],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[31,140429,140430,140433],{},[49,140431,140432],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[31,140435,140436],{},"页面必须有三个标签用来符合 SEO 优化",[55,140438],{"style":128667,"src":140439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[24,140441,140442],{},[27,140443,140444],{},"title网站标题",[31,140446,140447,140450],{},[49,140448,140449],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[31,140452,71049],{},[176,140454,140455,140458],{},[27,140456,140457],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[27,140459,140460],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[24,140462,140463],{"start":36},[27,140464,140465],{},"description网站描述",[31,140467,140468],{},"简要说明我们网站主要是做什么的",[31,140470,140471,140474],{},[49,140472,140473],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[31,140476,71049],{},[31,140478,140479],{},[196,140480,140481],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[24,140483,140484],{"start":73},[27,140485,140486],{},"keywords关键词",[31,140488,140489],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[31,140491,71049],{},[31,140493,140494],{},[196,140495,140496],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[31,140498,140499],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[31,140501,140502],{},[49,140503,140504],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[24,140506,140507],{"start":333},[27,140508,140509],{},"代码总结",[190,140511,140512],{"className":129558,"code":132915,"language":129560,"meta":57,"style":57},[196,140513,140514,140518,140532,140536],{"__ignoreMap":57},[199,140515,140516],{"class":201,"line":202},[199,140517,132922],{"class":1454},[199,140519,140520,140522,140524,140526,140528,140530],{"class":201,"line":36},[199,140521,887],{"class":205},[199,140523,1220],{"class":874},[199,140525,55745],{"class":878},[199,140527,895],{"class":205},[199,140529,132935],{"class":898},[199,140531,882],{"class":205},[199,140533,140534],{"class":201,"line":73},[199,140535,132942],{"class":205},[199,140537,140538,140540,140542],{"class":201,"line":333},[199,140539,1414],{"class":205},[199,140541,1220],{"class":874},[199,140543,882],{"class":205},[14,140545,140547],{"id":140546},"_154-项目公共部分制作","15.4 项目公共部分制作",[19,140549,140551],{"id":140550},"_1541-常用模块类命名","15.4.1 常用模块类命名",[55,140553],{"style":128667,"src":140554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[19,140556,140558],{"id":140557},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[31,140560,140561],{},"布局思路：",[176,140563,140564,140567,140570,140592,140625],{},[27,140565,140566],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[27,140568,140569],{},"里面包含版心的盒子",[27,140571,140572,140573],{},"版心盒子里面包含 1 号左侧盒子左浮动",[176,140574,140575,140583,140589],{},[27,140576,140577,140578,24345,140580,140582],{},"1 号盒子 里面包含一个",[196,140579,176],{},[196,140581,176],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[27,140584,140585,140586,140588],{},"里面的内容是水平排列，所以需要给",[196,140587,27],{},"设置浮动",[27,140590,140591],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[27,140593,140594,140595],{},"版心盒子里面包含 2 号右侧盒子右浮动",[176,140596,140597,140611,140616],{},[27,140598,140599,140600,24345,140602,140604,140605,140607,140608,140610],{},"2 号盒子 里面包含一个",[196,140601,176],{},[196,140603,176],{},"包裹",[196,140606,27],{},"，中间的",[196,140609,3998],{},"可以用样式去设置，也可以用字符 |",[27,140612,140613,140614,140588],{},"里面内容水平排列，给",[196,140615,27],{},[27,140617,140618,140619,140621,140622,140624],{},"找到里面所有偶数的 ",[196,140620,27],{}," 设置样式（偶数的 ",[196,140623,27],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[27,140626,140627,140628],{},"需要用到字体图标",[176,140629,140630,140636,140639,140642,140645],{},[27,140631,140632,140633],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[196,140634,140635],{},"arrow-icon",[27,140637,140638],{},"先要引入字体图片的资源",[27,140640,140641],{},"在样式里面利用 font-face 来进行声明",[27,140643,140644],{},"在伪元素的 content属性设置 图标的编码",[27,140646,140647],{},"给伪元素设置font-family属性",[31,140649,140650],{},"结构实例代码：",[190,140652,140654],{"className":128811,"code":140653,"language":128813,"meta":57,"style":57},"div::before {\n  content: \"\";\n  display: block;\n}\n",[196,140655,140656,140664,140674,140684],{"__ignoreMap":57},[199,140657,140658,140660,140662],{"class":201,"line":202},[199,140659,1220],{"class":874},[199,140661,139812],{"class":878},[199,140663,1012],{"class":205},[199,140665,140666,140668,140670,140672],{"class":201,"line":36},[199,140667,139819],{"class":1018},[199,140669,1022],{"class":205},[199,140671,10549],{"class":898},[199,140673,1028],{"class":205},[199,140675,140676,140678,140680,140682],{"class":201,"line":73},[199,140677,130427],{"class":1018},[199,140679,1022],{"class":205},[199,140681,63128],{"class":1018},[199,140683,1028],{"class":205},[199,140685,140686],{"class":201,"line":333},[199,140687,671],{"class":205},[31,140689,140690],{},"样式实例代码：",[190,140692,140693],{"className":128811,"code":140653,"language":128813,"meta":57,"style":57},[196,140694,140695,140703,140713,140723],{"__ignoreMap":57},[199,140696,140697,140699,140701],{"class":201,"line":202},[199,140698,1220],{"class":874},[199,140700,139812],{"class":878},[199,140702,1012],{"class":205},[199,140704,140705,140707,140709,140711],{"class":201,"line":36},[199,140706,139819],{"class":1018},[199,140708,1022],{"class":205},[199,140710,10549],{"class":898},[199,140712,1028],{"class":205},[199,140714,140715,140717,140719,140721],{"class":201,"line":73},[199,140716,130427],{"class":1018},[199,140718,1022],{"class":205},[199,140720,63128],{"class":1018},[199,140722,1028],{"class":205},[199,140724,140725],{"class":201,"line":333},[199,140726,671],{"class":205},[19,140728,140730],{"id":140729},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[176,140732,140733],{},[27,140734,140735],{},"header 盒子必须要有高度",[31,140737,140738,140739,140741,140742],{},"1 号盒子是 ",[196,140740,133823],{}," 标志定位，在正常开发过程中， ",[49,140743,140744,140745,140748],{},"logo的布局其实是有讲究的，需要进行 ",[196,140746,140747],{},"logoSEO","的优化 （★★★）",[176,140750,140751,140759,140767,140794],{},[27,140752,140753,140755,140756,140758],{},[196,140754,133823],{}," 里面首先放一个 ",[196,140757,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[27,140760,140761,140763,140764,140766],{},[196,140762,10],{}," 里面再放一个链接，可以返回首页的，把 ",[196,140765,133823],{}," 的背景图片给链接即可",[27,140768,140769,140770],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[176,140771,140772,140787],{},[27,140773,140774,140775,140778,140779,140782,140783,140786],{},"方法1：",[196,140776,140777],{},"text-indent"," 移到盒子外面（",[196,140780,140781],{},"text-indent: -9999px",") ，然后 ",[196,140784,140785],{},"overflow:hidden"," ，淘宝的做法",[27,140788,140789,140790,140793],{},"方法2：直接给 ",[196,140791,140792],{},"font-size: 0;"," 就看不到文字了，京东的做法",[27,140795,140796,140797,140799,140800,140802],{},"最后给链接一个 ",[196,140798,988],{}," 属性，这样鼠标放到 ",[196,140801,133823],{}," 上就可以看到提示文字了",[31,140804,140650],{},[190,140806,140807],{"className":129558,"code":134044,"language":129560,"meta":57,"style":57},[196,140808,140809],{"__ignoreMap":57},[199,140810,140811,140813,140815,140817,140819,140821,140823,140825,140827,140829,140831],{"class":201,"line":202},[199,140812,887],{"class":205},[199,140814,2867],{"class":874},[199,140816,63316],{"class":878},[199,140818,895],{"class":205},[199,140820,134059],{"class":898},[199,140822,134062],{"class":878},[199,140824,895],{"class":205},[199,140826,134067],{"class":898},[199,140828,134070],{"class":205},[199,140830,2867],{"class":874},[199,140832,882],{"class":205},[31,140834,140690],{},[190,140836,140837],{"className":129558,"code":134044,"language":129560,"meta":57,"style":57},[196,140838,140839],{"__ignoreMap":57},[199,140840,140841,140843,140845,140847,140849,140851,140853,140855,140857,140859,140861],{"class":201,"line":202},[199,140842,887],{"class":205},[199,140844,2867],{"class":874},[199,140846,63316],{"class":878},[199,140848,895],{"class":205},[199,140850,134059],{"class":898},[199,140852,134062],{"class":878},[199,140854,895],{"class":205},[199,140856,134067],{"class":898},[199,140858,134070],{"class":205},[199,140860,2867],{"class":874},[199,140862,882],{"class":205},[31,140864,140865,140866,140868],{},"2 号盒子是 ",[196,140867,133836],{}," 搜索模块定位",[176,140870,140871,140874,140877,140880],{},[27,140872,140873],{},"search盒子利用定位的方式放在对应的位置",[27,140875,140876],{},"search盒子设置绝对定位，header盒子设置相对定位",[27,140878,140879],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[27,140881,140882],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[31,140884,140650],{},[190,140886,140887],{"className":128811,"code":134131,"language":128813,"meta":57,"style":57},[196,140888,140889,140911,140915,140925],{"__ignoreMap":57},[199,140890,140891,140893,140895,140897,140899,140901,140903,140905,140907,140909],{"class":201,"line":202},[199,140892,1220],{"class":874},[199,140894,1912],{"class":205},[199,140896,31],{"class":874},[199,140898,1912],{"class":205},[199,140900,10],{"class":874},[199,140902,1912],{"class":205},[199,140904,176],{"class":874},[199,140906,1912],{"class":205},[199,140908,27],{"class":874},[199,140910,1012],{"class":205},[199,140912,140913],{"class":201,"line":36},[199,140914,134160],{"class":1454},[199,140916,140917,140919,140921,140923],{"class":201,"line":73},[199,140918,130427],{"class":1018},[199,140920,1022],{"class":205},[199,140922,63128],{"class":1018},[199,140924,1028],{"class":205},[199,140926,140927],{"class":201,"line":333},[199,140928,671],{"class":205},[31,140930,140690],{},[190,140932,140933],{"className":128811,"code":134131,"language":128813,"meta":57,"style":57},[196,140934,140935,140957,140961,140971],{"__ignoreMap":57},[199,140936,140937,140939,140941,140943,140945,140947,140949,140951,140953,140955],{"class":201,"line":202},[199,140938,1220],{"class":874},[199,140940,1912],{"class":205},[199,140942,31],{"class":874},[199,140944,1912],{"class":205},[199,140946,10],{"class":874},[199,140948,1912],{"class":205},[199,140950,176],{"class":874},[199,140952,1912],{"class":205},[199,140954,27],{"class":874},[199,140956,1012],{"class":205},[199,140958,140959],{"class":201,"line":36},[199,140960,134160],{"class":1454},[199,140962,140963,140965,140967,140969],{"class":201,"line":73},[199,140964,130427],{"class":1018},[199,140966,1022],{"class":205},[199,140968,63128],{"class":1018},[199,140970,1028],{"class":205},[199,140972,140973],{"class":201,"line":333},[199,140974,671],{"class":205},[31,140976,140977],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[31,140979,140980,140981,140984],{},"3 号盒子是 ",[196,140982,140983],{},"hotwords"," 热词模块定位",[176,140986,140987,140990,140993],{},[27,140988,140989],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[27,140991,140992],{},"给里面所有的a标签设置 左右10px的外边距",[27,140994,140995],{},"给第一个a标签设置文字变红色（#c81623）",[31,140997,140650],{},[190,140999,141001],{"className":128811,"code":141000,"language":128813,"meta":57,"style":57},"div {\n  margin: 0 auto;\n}\n",[196,141002,141003,141009,141021],{"__ignoreMap":57},[199,141004,141005,141007],{"class":201,"line":202},[199,141006,1220],{"class":874},[199,141008,1012],{"class":205},[199,141010,141011,141013,141015,141017,141019],{"class":201,"line":36},[199,141012,72729],{"class":1018},[199,141014,1022],{"class":205},[199,141016,1025],{"class":1018},[199,141018,1158],{"class":1018},[199,141020,1028],{"class":205},[199,141022,141023],{"class":201,"line":73},[199,141024,671],{"class":205},[31,141026,140690],{},[190,141028,141029],{"className":128811,"code":141000,"language":128813,"meta":57,"style":57},[196,141030,141031,141037,141049],{"__ignoreMap":57},[199,141032,141033,141035],{"class":201,"line":202},[199,141034,1220],{"class":874},[199,141036,1012],{"class":205},[199,141038,141039,141041,141043,141045,141047],{"class":201,"line":36},[199,141040,72729],{"class":1018},[199,141042,1022],{"class":205},[199,141044,1025],{"class":1018},[199,141046,1158],{"class":1018},[199,141048,1028],{"class":205},[199,141050,141051],{"class":201,"line":73},[199,141052,671],{"class":205},[31,141054,141055,141056,141059],{},"4 号盒子是 ",[196,141057,141058],{},"shopcar"," 购物车模块",[176,141061,141062,141067,141070,141073],{},[27,141063,125594,141064,141066],{},[196,141065,141058],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[27,141068,141069],{},"count 统计部分用绝对定位做",[27,141071,141072],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[27,141074,141075],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[31,141077,140650],{},[190,141079,141080],{"className":128811,"code":134243,"language":128813,"meta":57,"style":57},[196,141081,141082,141086,141100,141104,141118,141122,141136,141140,141154,141158],{"__ignoreMap":57},[199,141083,141084],{"class":201,"line":202},[199,141085,134250],{"class":1454},[199,141087,141088,141090,141092,141094,141096,141098],{"class":201,"line":36},[199,141089,134255],{"class":878},[199,141091,82066],{"class":205},[199,141093,131171],{"class":1018},[199,141095,1022],{"class":205},[199,141097,134264],{"class":1018},[199,141099,131741],{"class":205},[199,141101,141102],{"class":201,"line":73},[199,141103,134271],{"class":1454},[199,141105,141106,141108,141110,141112,141114,141116],{"class":201,"line":333},[199,141107,134276],{"class":878},[199,141109,82066],{"class":205},[199,141111,131171],{"class":1018},[199,141113,1022],{"class":205},[199,141115,57023],{"class":1018},[199,141117,131741],{"class":205},[199,141119,141120],{"class":201,"line":227},[199,141121,134291],{"class":1454},[199,141123,141124,141126,141128,141130,141132,141134],{"class":201,"line":238},[199,141125,134296],{"class":878},[199,141127,82066],{"class":205},[199,141129,131171],{"class":1018},[199,141131,1022],{"class":205},[199,141133,57090],{"class":1018},[199,141135,131741],{"class":205},[199,141137,141138],{"class":201,"line":252},[199,141139,134311],{"class":1454},[199,141141,141142,141144,141146,141148,141150,141152],{"class":201,"line":388},[199,141143,134316],{"class":878},[199,141145,82066],{"class":205},[199,141147,131171],{"class":1018},[199,141149,1022],{"class":205},[199,141151,88492],{"class":1018},[199,141153,131741],{"class":205},[199,141155,141156],{"class":201,"line":415},[199,141157,134331],{"class":1454},[199,141159,141160,141162,141164,141166,141168,141170],{"class":201,"line":426},[199,141161,134336],{"class":878},[199,141163,82066],{"class":205},[199,141165,131171],{"class":1018},[199,141167,1022],{"class":205},[199,141169,134345],{"class":1018},[199,141171,131741],{"class":205},[31,141173,140690],{},[190,141175,141176],{"className":128811,"code":134243,"language":128813,"meta":57,"style":57},[196,141177,141178,141182,141196,141200,141214,141218,141232,141236,141250,141254],{"__ignoreMap":57},[199,141179,141180],{"class":201,"line":202},[199,141181,134250],{"class":1454},[199,141183,141184,141186,141188,141190,141192,141194],{"class":201,"line":36},[199,141185,134255],{"class":878},[199,141187,82066],{"class":205},[199,141189,131171],{"class":1018},[199,141191,1022],{"class":205},[199,141193,134264],{"class":1018},[199,141195,131741],{"class":205},[199,141197,141198],{"class":201,"line":73},[199,141199,134271],{"class":1454},[199,141201,141202,141204,141206,141208,141210,141212],{"class":201,"line":333},[199,141203,134276],{"class":878},[199,141205,82066],{"class":205},[199,141207,131171],{"class":1018},[199,141209,1022],{"class":205},[199,141211,57023],{"class":1018},[199,141213,131741],{"class":205},[199,141215,141216],{"class":201,"line":227},[199,141217,134291],{"class":1454},[199,141219,141220,141222,141224,141226,141228,141230],{"class":201,"line":238},[199,141221,134296],{"class":878},[199,141223,82066],{"class":205},[199,141225,131171],{"class":1018},[199,141227,1022],{"class":205},[199,141229,57090],{"class":1018},[199,141231,131741],{"class":205},[199,141233,141234],{"class":201,"line":252},[199,141235,134311],{"class":1454},[199,141237,141238,141240,141242,141244,141246,141248],{"class":201,"line":388},[199,141239,134316],{"class":878},[199,141241,82066],{"class":205},[199,141243,131171],{"class":1018},[199,141245,1022],{"class":205},[199,141247,88492],{"class":1018},[199,141249,131741],{"class":205},[199,141251,141252],{"class":201,"line":415},[199,141253,134331],{"class":1454},[199,141255,141256,141258,141260,141262,141264,141266],{"class":201,"line":426},[199,141257,134336],{"class":878},[199,141259,82066],{"class":205},[199,141261,131171],{"class":1018},[199,141263,1022],{"class":205},[199,141265,134345],{"class":1018},[199,141267,131741],{"class":205},[19,141269,141271,141272,141274],{"id":141270},"_1544-nav导航模块制作","15.4.4 ",[196,141273,55972],{},"导航模块制作",[55,141276],{"style":128667,"src":141277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[31,141279,141280,141282],{},[196,141281,55972],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[31,141284,141285,141286],{},"1 号盒子左侧浮动，",[196,141287,141288],{},"dropdown",[176,141290,141291,141301,141309,141315,141323,141333,141341,141352],{},[27,141292,141293,141294,103277,141297,141300],{},"1号盒子有讲究，根据相关性 里面包含 ",[196,141295,141296],{},".dt",[196,141298,141299],{},".dd"," 两个盒子",[27,141302,141303,141305,141306,141308],{},[196,141304,141296],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[196,141307,141299],{}," 挤到下面去了",[27,141310,141311,141312,141314],{},"给 ",[196,141313,141299],{}," 盒子设置宽度 和 高度，以及背景颜色",[27,141316,141311,141317,141319,141320,122496],{},[196,141318,141299],{}," 盒子里面定义 无序列表 （",[196,141321,141322],{},"ul > li > a",[27,141324,141325,141326,141328,141329,141332],{},"每个 ",[196,141327,27],{}," 都有一个高度（",[196,141330,141331],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[27,141334,141311,141335,141337,141338,122496],{},[196,141336,27],{}," 里面的a设置文字大小（",[196,141339,141340],{},"14px",[27,141342,141311,141343,141345,141346,141348,141349,141351],{},[196,141344,27],{}," 设置 ",[196,141347,129972],{},"，当鼠标移入的时候，让",[196,141350,27],{},"的背景变成白色，让里面的文字变成红色",[27,141353,141354,141356,141357,141359,141360,141362],{},[196,141355,27],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[196,141358,27],{},"的右侧，那么给",[196,141361,27],{},"设置相对定位",[31,141364,141365],{},"一定要注意相关性",[31,141367,140650],{},[190,141369,141370],{"className":128811,"code":140653,"language":128813,"meta":57,"style":57},[196,141371,141372,141380,141390,141400],{"__ignoreMap":57},[199,141373,141374,141376,141378],{"class":201,"line":202},[199,141375,1220],{"class":874},[199,141377,139812],{"class":878},[199,141379,1012],{"class":205},[199,141381,141382,141384,141386,141388],{"class":201,"line":36},[199,141383,139819],{"class":1018},[199,141385,1022],{"class":205},[199,141387,10549],{"class":898},[199,141389,1028],{"class":205},[199,141391,141392,141394,141396,141398],{"class":201,"line":73},[199,141393,130427],{"class":1018},[199,141395,1022],{"class":205},[199,141397,63128],{"class":1018},[199,141399,1028],{"class":205},[199,141401,141402],{"class":201,"line":333},[199,141403,671],{"class":205},[31,141405,140690],{},[190,141407,141408],{"className":128811,"code":140653,"language":128813,"meta":57,"style":57},[196,141409,141410,141418,141428,141438],{"__ignoreMap":57},[199,141411,141412,141414,141416],{"class":201,"line":202},[199,141413,1220],{"class":874},[199,141415,139812],{"class":878},[199,141417,1012],{"class":205},[199,141419,141420,141422,141424,141426],{"class":201,"line":36},[199,141421,139819],{"class":1018},[199,141423,1022],{"class":205},[199,141425,10549],{"class":898},[199,141427,1028],{"class":205},[199,141429,141430,141432,141434,141436],{"class":201,"line":73},[199,141431,130427],{"class":1018},[199,141433,1022],{"class":205},[199,141435,63128],{"class":1018},[199,141437,1028],{"class":205},[199,141439,141440],{"class":201,"line":333},[199,141441,671],{"class":205},[31,141443,141444],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[31,141446,141447,141448,141451],{},"2 号盒子左侧浮动，",[196,141449,141450],{},"navitems"," 导航栏组",[176,141453,141454,141459,141468],{},[27,141455,141456,141457],{},"里面结构是 ",[196,141458,141322],{},[27,141460,141461,141462,141464,141465,141467],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[196,141463,2867],{},"左右的",[196,141466,33725],{},"把两侧撑开",[27,141469,141470],{},"让文字垂直居中（行高等于高度）",[55,141472],{"style":128667,"src":141473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[31,141475,141476],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[31,141478,140650],{},[190,141480,141482],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},".box {\n  float: left;\n}\n",[196,141483,141484,141490,141500],{"__ignoreMap":57},[199,141485,141486,141488],{"class":201,"line":202},[199,141487,132659],{"class":878},[199,141489,1012],{"class":205},[199,141491,141492,141494,141496,141498],{"class":201,"line":36},[199,141493,133291],{"class":1018},[199,141495,1022],{"class":205},[199,141497,26580],{"class":1018},[199,141499,1028],{"class":205},[199,141501,141502],{"class":201,"line":73},[199,141503,671],{"class":205},[31,141505,140690],{},[190,141507,141508],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,141509,141510,141516,141526],{"__ignoreMap":57},[199,141511,141512,141514],{"class":201,"line":202},[199,141513,132659],{"class":878},[199,141515,1012],{"class":205},[199,141517,141518,141520,141522,141524],{"class":201,"line":36},[199,141519,133291],{"class":1018},[199,141521,1022],{"class":205},[199,141523,26580],{"class":1018},[199,141525,1028],{"class":205},[199,141527,141528],{"class":201,"line":73},[199,141529,671],{"class":205},[31,141531,141532],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[55,141534],{"style":128667,"src":141535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[190,141537,141538],{"className":128811,"code":132968,"language":128813,"meta":57,"style":57},[196,141539,141540,141546,141562],{"__ignoreMap":57},[199,141541,141542,141544],{"class":201,"line":202},[199,141543,1220],{"class":874},[199,141545,1012],{"class":205},[199,141547,141548,141550,141552,141554,141556,141558,141560],{"class":201,"line":36},[199,141549,73155],{"class":1018},[199,141551,1022],{"class":205},[199,141553,1115],{"class":1018},[199,141555,1087],{"class":1086},[199,141557,1120],{"class":1018},[199,141559,132203],{"class":1018},[199,141561,1028],{"class":205},[199,141563,141564],{"class":201,"line":73},[199,141565,671],{"class":205},[19,141567,141569],{"id":141568},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[55,141571],{"style":128667,"src":141572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[176,141574,141575,141580,141585],{},[27,141576,141577,141579],{},[196,141578,134014],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[27,141581,141582,141584],{},[196,141583,134014],{}," 里面有一个大的版心",[27,141586,141587,141588,141591,141592],{},"版心里面包含 1 号盒子，",[196,141589,141590],{},"mod_service"," 是服务模块，mod 是模块的意思",[176,141593,141594,141599,141612,141628,141633],{},[27,141595,141311,141596,141598],{},[196,141597,141590],{}," 设置高度（80px）和下边框",[27,141600,141601,141602,141605,141606,141608,141609,141611],{},"在里面定义 ",[196,141603,141604],{},"ul > li"," ,每个",[196,141607,27],{}," 宽度是300px 高度是 50px，给每个",[196,141610,27],{},"设置35px的左内边距",[27,141613,141614,141615,141617,141618,141620,141621,141623,141624,21255,141626,122496],{},"在每个",[196,141616,27],{},"里面，放一个 ",[196,141619,25754],{},"（里面放图标），一个",[196,141622,1220],{},"（里面放",[196,141625,1220],{},[196,141627,31],{},[27,141629,141311,141630,141632],{},[196,141631,25754],{},"设置浮动，让h5与这个div左右排列",[27,141634,141635],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[31,141637,140650],{},[190,141639,141641],{"className":128811,"code":141640,"language":128813,"meta":57,"style":57},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[196,141642,141643,141649,141661,141673,141700],{"__ignoreMap":57},[199,141644,141645,141647],{"class":201,"line":202},[199,141646,136568],{"class":878},[199,141648,1012],{"class":205},[199,141650,141651,141653,141655,141657,141659],{"class":201,"line":36},[199,141652,72827],{"class":1018},[199,141654,1022],{"class":205},[199,141656,3779],{"class":1018},[199,141658,1087],{"class":1086},[199,141660,1028],{"class":205},[199,141662,141663,141665,141667,141669,141671],{"class":201,"line":73},[199,141664,73047],{"class":1018},[199,141666,1022],{"class":205},[199,141668,3779],{"class":1018},[199,141670,1087],{"class":1086},[199,141672,1028],{"class":205},[199,141674,141675,141677,141679,141681,141683,141685,141687,141689,141692,141694,141696,141698],{"class":201,"line":333},[199,141676,72870],{"class":1018},[199,141678,1022],{"class":205},[199,141680,63985],{"class":1018},[199,141682,1537],{"class":205},[199,141684,136607],{"class":8113},[199,141686,16575],{"class":205},[199,141688,63995],{"class":1018},[199,141690,141691],{"class":1018}," -10",[199,141693,1087],{"class":1086},[199,141695,136626],{"class":1018},[199,141697,1087],{"class":1086},[199,141699,1028],{"class":205},[199,141701,141702],{"class":201,"line":227},[199,141703,671],{"class":205},[31,141705,140690],{},[190,141707,141708],{"className":128811,"code":141640,"language":128813,"meta":57,"style":57},[196,141709,141710,141716,141728,141740,141766],{"__ignoreMap":57},[199,141711,141712,141714],{"class":201,"line":202},[199,141713,136568],{"class":878},[199,141715,1012],{"class":205},[199,141717,141718,141720,141722,141724,141726],{"class":201,"line":36},[199,141719,72827],{"class":1018},[199,141721,1022],{"class":205},[199,141723,3779],{"class":1018},[199,141725,1087],{"class":1086},[199,141727,1028],{"class":205},[199,141729,141730,141732,141734,141736,141738],{"class":201,"line":73},[199,141731,73047],{"class":1018},[199,141733,1022],{"class":205},[199,141735,3779],{"class":1018},[199,141737,1087],{"class":1086},[199,141739,1028],{"class":205},[199,141741,141742,141744,141746,141748,141750,141752,141754,141756,141758,141760,141762,141764],{"class":201,"line":333},[199,141743,72870],{"class":1018},[199,141745,1022],{"class":205},[199,141747,63985],{"class":1018},[199,141749,1537],{"class":205},[199,141751,136607],{"class":8113},[199,141753,16575],{"class":205},[199,141755,63995],{"class":1018},[199,141757,141691],{"class":1018},[199,141759,1087],{"class":1086},[199,141761,136626],{"class":1018},[199,141763,1087],{"class":1086},[199,141765,1028],{"class":205},[199,141767,141768],{"class":201,"line":227},[199,141769,671],{"class":205},[31,141771,141772],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[176,141774,141775,141778,141784,141790,141802],{},[27,141776,141777],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[27,141779,141780,141781,122496],{},"里面的布局利用 自定义列表来实现（",[196,141782,141783],{},"dl > dt + dd",[27,141785,141311,141786,141789],{},[196,141787,141788],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[27,141791,141311,141792,141795,141796,21255,141798,141801],{},[196,141793,141794],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[196,141797,141794],{},[196,141799,141800],{},"dd","之间有些距离",[27,141803,141804],{},"最后一个 dl 结构和样式不一样，需要单独设置",[31,141806,140650],{},[190,141808,141809],{"className":128811,"code":141000,"language":128813,"meta":57,"style":57},[196,141810,141811,141817,141829],{"__ignoreMap":57},[199,141812,141813,141815],{"class":201,"line":202},[199,141814,1220],{"class":874},[199,141816,1012],{"class":205},[199,141818,141819,141821,141823,141825,141827],{"class":201,"line":36},[199,141820,72729],{"class":1018},[199,141822,1022],{"class":205},[199,141824,1025],{"class":1018},[199,141826,1158],{"class":1018},[199,141828,1028],{"class":205},[199,141830,141831],{"class":201,"line":73},[199,141832,671],{"class":205},[31,141834,140690],{},[190,141836,141837],{"className":128811,"code":141000,"language":128813,"meta":57,"style":57},[196,141838,141839,141845,141857],{"__ignoreMap":57},[199,141840,141841,141843],{"class":201,"line":202},[199,141842,1220],{"class":874},[199,141844,1012],{"class":205},[199,141846,141847,141849,141851,141853,141855],{"class":201,"line":36},[199,141848,72729],{"class":1018},[199,141850,1022],{"class":205},[199,141852,1025],{"class":1018},[199,141854,1158],{"class":1018},[199,141856,1028],{"class":205},[199,141858,141859],{"class":201,"line":73},[199,141860,671],{"class":205},[31,141862,141863],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[176,141865,141866,141875,141878,141889],{},[27,141867,141868,141869,141871,141872,141874],{},"分为上下两块，上面是 ",[196,141870,134031],{}," 友情链接，下面是 ",[196,141873,134024],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[27,141876,141877],{},"把内容分别复制到相应模块中",[27,141879,141311,141880,141882,141883,141885,141886,141888],{},[196,141881,134031],{}," 设置 15px 的下外边距，给",[196,141884,134031],{}," 里面 的 ",[196,141887,2867],{}," 标签设置 左右 3px 的外边距",[27,141890,141891,141892,141894],{},"给",[196,141893,134024],{}," 设置 20px 的行高",[31,141896,140650],{},[190,141898,141899],{"className":128811,"code":141000,"language":128813,"meta":57,"style":57},[196,141900,141901,141907,141919],{"__ignoreMap":57},[199,141902,141903,141905],{"class":201,"line":202},[199,141904,1220],{"class":874},[199,141906,1012],{"class":205},[199,141908,141909,141911,141913,141915,141917],{"class":201,"line":36},[199,141910,72729],{"class":1018},[199,141912,1022],{"class":205},[199,141914,1025],{"class":1018},[199,141916,1158],{"class":1018},[199,141918,1028],{"class":205},[199,141920,141921],{"class":201,"line":73},[199,141922,671],{"class":205},[31,141924,140690],{},[190,141926,141927],{"className":128811,"code":141000,"language":128813,"meta":57,"style":57},[196,141928,141929,141935,141947],{"__ignoreMap":57},[199,141930,141931,141933],{"class":201,"line":202},[199,141932,1220],{"class":874},[199,141934,1012],{"class":205},[199,141936,141937,141939,141941,141943,141945],{"class":201,"line":36},[199,141938,72729],{"class":1018},[199,141940,1022],{"class":205},[199,141942,1025],{"class":1018},[199,141944,1158],{"class":1018},[199,141946,1028],{"class":205},[199,141948,141949],{"class":201,"line":73},[199,141950,671],{"class":205},[31,141952,141953],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1002,141955,141956],{},"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":57,"searchDepth":36,"depth":36,"links":141958},[141959,141960,141961,141968],{"id":140239,"depth":36,"text":140240},{"id":140258,"depth":36,"text":140259},{"id":140285,"depth":36,"text":140286,"children":141962},[141963,141964,141965,141966,141967],{"id":140289,"depth":73,"text":140290},{"id":140302,"depth":73,"text":140303},{"id":140326,"depth":73,"text":140327},{"id":140348,"depth":73,"text":140349},{"id":140420,"depth":73,"text":140421},{"id":140546,"depth":36,"text":140547,"children":141969},[141970,141971,141972,141973,141975],{"id":140550,"depth":73,"text":140551},{"id":140557,"depth":73,"text":140558},{"id":140729,"depth":73,"text":140730},{"id":141270,"depth":73,"text":141974},"15.4.4 nav导航模块制作",{"id":141568,"depth":73,"text":141569},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140231,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141982,"title":141983,"body":141984,"description":3023,"extension":3024,"meta":144386,"navigation":906,"path":144387,"seo":144388,"stem":144389,"__hash__":144390},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141985,"toc":144363},[141986,141989,141993,141997,142009,142012,142015,142018,142029,142031,142055,142057,142081,142086,142089,142091,142127,142129,142165,142168,142173,142176,142179,142182,142212,142219,142222,142232,142234,142268,142271,142305,142311,142328,142330,142366,142368,142404,142409,142434,142436,142462,142464,142488,142495,142498,142562,142564,142606,142608,142648,142655,142660,142662,142692,142694,142724,142728,142731,142738,142750,142752,142778,142780,142804,142807,142809,142833,142839,142849,142851,142881,142883,142913,142920,142961,142963,142999,143001,143037,143041,143044,143047,143050,143056,143061,143064,143087,143090,143114,143117,143141,143146,143149,143152,143155,143158,143161,143235,143237,143267,143269,143299,143302,143305,143337,143341,143345,143359,143368,143371,143376,143378,143472,143474,143568,143591,143593,143617,143619,143643,143650,143653,143663,143665,143689,143694,143702,143704,143734,143739,143779,143781,143807,143809,143835,143839,143842,143847,143850,143854,143862,143869,143877,143879,143909,143911,143941,143949,143952,143955,143957,143987,143989,144019,144022,144027,144029,144053,144055,144079,144082,144167,144169,144193,144195,144219,144223,144225,144249,144251,144285,144289,144303,144306,144311,144314,144319,144322,144352,144360],[10,141987,141983],{"id":141988},"_16-品优购项目下篇-主体与页面开发",[14,141990,141992],{"id":141991},"_161-项目主体模块制作","16.1 项目主体模块制作",[19,141994,141996],{"id":141995},"_1611-首页制作","16.1.1 首页制作",[31,141998,141999,142001,142002,142004,142005,142008],{},[49,142000,104317],{}," 主体模块是 ",[49,142003,76317],{}," 里面专有的，注意需要新的样式文件 ",[49,142006,142007],{},"index.css，"," 就不要写在common.css中了",[55,142010],{"style":128667,"src":142011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[55,142013],{"style":128667,"src":142014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[31,142016,142017],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[176,142019,142020,142023,142026],{},[27,142021,142022],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[27,142024,142025],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[27,142027,142028],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[31,142030,140650],{},[190,142032,142033],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,142034,142035,142041,142051],{"__ignoreMap":57},[199,142036,142037,142039],{"class":201,"line":202},[199,142038,132659],{"class":878},[199,142040,1012],{"class":205},[199,142042,142043,142045,142047,142049],{"class":201,"line":36},[199,142044,133291],{"class":1018},[199,142046,1022],{"class":205},[199,142048,26580],{"class":1018},[199,142050,1028],{"class":205},[199,142052,142053],{"class":201,"line":73},[199,142054,671],{"class":205},[31,142056,140690],{},[190,142058,142059],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,142060,142061,142067,142077],{"__ignoreMap":57},[199,142062,142063,142065],{"class":201,"line":202},[199,142064,132659],{"class":878},[199,142066,1012],{"class":205},[199,142068,142069,142071,142073,142075],{"class":201,"line":36},[199,142070,133291],{"class":1018},[199,142072,1022],{"class":205},[199,142074,26580],{"class":1018},[199,142076,1028],{"class":205},[199,142078,142079],{"class":201,"line":73},[199,142080,671],{"class":205},[24,142082,142083],{},[27,142084,142085],{},"左侧focus模块制作",[55,142087],{"style":128667,"src":142088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[31,142090,140650],{},[190,142092,142093],{"className":128811,"code":130134,"language":128813,"meta":57,"style":57},[196,142094,142095,142103,142113,142123],{"__ignoreMap":57},[199,142096,142097,142099,142101],{"class":201,"line":202},[199,142098,56080],{"class":874},[199,142100,64159],{"class":878},[199,142102,1012],{"class":205},[199,142104,142105,142107,142109,142111],{"class":201,"line":36},[199,142106,130149],{"class":1018},[199,142108,1022],{"class":205},[199,142110,57148],{"class":1018},[199,142112,1028],{"class":205},[199,142114,142115,142117,142119,142121],{"class":201,"line":73},[199,142116,73057],{"class":1018},[199,142118,1022],{"class":205},[199,142120,56996],{"class":1018},[199,142122,1028],{"class":205},[199,142124,142125],{"class":201,"line":333},[199,142126,671],{"class":205},[31,142128,140690],{},[190,142130,142131],{"className":128811,"code":130134,"language":128813,"meta":57,"style":57},[196,142132,142133,142141,142151,142161],{"__ignoreMap":57},[199,142134,142135,142137,142139],{"class":201,"line":202},[199,142136,56080],{"class":874},[199,142138,64159],{"class":878},[199,142140,1012],{"class":205},[199,142142,142143,142145,142147,142149],{"class":201,"line":36},[199,142144,130149],{"class":1018},[199,142146,1022],{"class":205},[199,142148,57148],{"class":1018},[199,142150,1028],{"class":205},[199,142152,142153,142155,142157,142159],{"class":201,"line":73},[199,142154,73057],{"class":1018},[199,142156,1022],{"class":205},[199,142158,56996],{"class":1018},[199,142160,1028],{"class":205},[199,142162,142163],{"class":201,"line":333},[199,142164,671],{"class":205},[31,142166,142167],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[24,142169,142170],{"start":36},[27,142171,142172],{},"右侧newsflash模块制作",[55,142174],{"style":128667,"src":142175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[31,142177,142178],{},"右侧的模块 分为上中下三个盒子",[31,142180,142181],{},"结构代码：",[190,142183,142184],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,142185,142186],{"__ignoreMap":57},[199,142187,142188,142190,142192,142194,142196,142198,142200,142202,142204,142206,142208,142210],{"class":201,"line":202},[199,142189,887],{"class":205},[199,142191,55],{"class":874},[199,142193,57498],{"class":878},[199,142195,895],{"class":205},[199,142197,136328],{"class":898},[199,142199,57506],{"class":878},[199,142201,895],{"class":205},[199,142203,136335],{"class":898},[199,142205,136338],{"class":878},[199,142207,895],{"class":205},[199,142209,136343],{"class":898},[199,142211,882],{"class":205},[31,142213,142214,142215,142218],{},"1 号盒子为 ",[196,142216,142217],{},"news"," 新闻模块 高度为 165px",[55,142220],{"style":128667,"src":142221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[31,142223,142224,142225,142228,142229],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[196,142226,142227],{},"news-hd","，下面是 ",[196,142230,142231],{},"news-bd",[31,142233,142181],{},[190,142235,142236],{"className":129558,"code":132915,"language":129560,"meta":57,"style":57},[196,142237,142238,142242,142256,142260],{"__ignoreMap":57},[199,142239,142240],{"class":201,"line":202},[199,142241,132922],{"class":1454},[199,142243,142244,142246,142248,142250,142252,142254],{"class":201,"line":36},[199,142245,887],{"class":205},[199,142247,1220],{"class":874},[199,142249,55745],{"class":878},[199,142251,895],{"class":205},[199,142253,132935],{"class":898},[199,142255,882],{"class":205},[199,142257,142258],{"class":201,"line":73},[199,142259,132942],{"class":205},[199,142261,142262,142264,142266],{"class":201,"line":333},[199,142263,1414],{"class":205},[199,142265,1220],{"class":874},[199,142267,882],{"class":205},[31,142269,142270],{},"样式代码：",[190,142272,142273],{"className":129558,"code":132915,"language":129560,"meta":57,"style":57},[196,142274,142275,142279,142293,142297],{"__ignoreMap":57},[199,142276,142277],{"class":201,"line":202},[199,142278,132922],{"class":1454},[199,142280,142281,142283,142285,142287,142289,142291],{"class":201,"line":36},[199,142282,887],{"class":205},[199,142284,1220],{"class":874},[199,142286,55745],{"class":878},[199,142288,895],{"class":205},[199,142290,132935],{"class":898},[199,142292,882],{"class":205},[199,142294,142295],{"class":201,"line":73},[199,142296,132942],{"class":205},[199,142298,142299,142301,142303],{"class":201,"line":333},[199,142300,1414],{"class":205},[199,142302,1220],{"class":874},[199,142304,882],{"class":205},[31,142306,142307,142308,142310],{},"上面是",[196,142309,142227],{},"，设置高度是 33px，设置下边框",[176,142312,142313,142319],{},[27,142314,142315,142316,142318],{},"里面放一个",[196,142317,25754],{}," 标题",[27,142320,142321,142322,142324,142325,142327],{},"放一个a",[196,142323,104952],{},"，内容是 更多，然后让 ",[196,142326,2867],{}," 进行右浮动，三角用伪元素设置字体图标就好",[31,142329,142181],{},[190,142331,142332],{"className":128811,"code":140653,"language":128813,"meta":57,"style":57},[196,142333,142334,142342,142352,142362],{"__ignoreMap":57},[199,142335,142336,142338,142340],{"class":201,"line":202},[199,142337,1220],{"class":874},[199,142339,139812],{"class":878},[199,142341,1012],{"class":205},[199,142343,142344,142346,142348,142350],{"class":201,"line":36},[199,142345,139819],{"class":1018},[199,142347,1022],{"class":205},[199,142349,10549],{"class":898},[199,142351,1028],{"class":205},[199,142353,142354,142356,142358,142360],{"class":201,"line":73},[199,142355,130427],{"class":1018},[199,142357,1022],{"class":205},[199,142359,63128],{"class":1018},[199,142361,1028],{"class":205},[199,142363,142364],{"class":201,"line":333},[199,142365,671],{"class":205},[31,142367,142270],{},[190,142369,142370],{"className":128811,"code":140653,"language":128813,"meta":57,"style":57},[196,142371,142372,142380,142390,142400],{"__ignoreMap":57},[199,142373,142374,142376,142378],{"class":201,"line":202},[199,142375,1220],{"class":874},[199,142377,139812],{"class":878},[199,142379,1012],{"class":205},[199,142381,142382,142384,142386,142388],{"class":201,"line":36},[199,142383,139819],{"class":1018},[199,142385,1022],{"class":205},[199,142387,10549],{"class":898},[199,142389,1028],{"class":205},[199,142391,142392,142394,142396,142398],{"class":201,"line":73},[199,142393,130427],{"class":1018},[199,142395,1022],{"class":205},[199,142397,63128],{"class":1018},[199,142399,1028],{"class":205},[199,142401,142402],{"class":201,"line":333},[199,142403,671],{"class":205},[31,142405,142406,142407],{},"下面是",[196,142408,142231],{},[176,142410,142411,142419],{},[27,142412,142413,142414,103277,142416,142418],{},"里面包含 ",[196,142415,176],{},[196,142417,27],{}," 还有链接",[27,142420,141891,142421,142423,142424,142426,142427,142430,142431],{},[196,142422,27],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[196,142425,133477],{}," 2.设置 ",[196,142428,142429],{},"white-space: nowrap;"," 3. 设置 ",[196,142432,142433],{},"text-overflow: ellipsis;",[31,142435,142181],{},[190,142437,142439],{"className":128811,"code":142438,"language":128813,"meta":57,"style":57},"div {\n  overflow: hidden;\n}\n",[196,142440,142441,142447,142458],{"__ignoreMap":57},[199,142442,142443,142445],{"class":201,"line":202},[199,142444,1220],{"class":874},[199,142446,1012],{"class":205},[199,142448,142449,142452,142454,142456],{"class":201,"line":36},[199,142450,142451],{"class":1018},"  overflow",[199,142453,1022],{"class":205},[199,142455,63973],{"class":1018},[199,142457,1028],{"class":205},[199,142459,142460],{"class":201,"line":73},[199,142461,671],{"class":205},[31,142463,142270],{},[190,142465,142466],{"className":128811,"code":142438,"language":128813,"meta":57,"style":57},[196,142467,142468,142474,142484],{"__ignoreMap":57},[199,142469,142470,142472],{"class":201,"line":202},[199,142471,1220],{"class":874},[199,142473,1012],{"class":205},[199,142475,142476,142478,142480,142482],{"class":201,"line":36},[199,142477,142451],{"class":1018},[199,142479,1022],{"class":205},[199,142481,63973],{"class":1018},[199,142483,1028],{"class":205},[199,142485,142486],{"class":201,"line":73},[199,142487,671],{"class":205},[31,142489,142490,142491,142494],{},"2 号盒子为 ",[196,142492,142493],{},"lifeservice"," 生活服务模块 高度为 209px",[55,142496],{"style":128667,"src":142497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[176,142499,142500,142503,142513,142537,142548],{},[27,142501,142502],{},"设置边框（左右下边框）",[27,142504,142505,142506,142509,142510,142512],{},"里面的内容 是 ",[196,142507,142508],{},"ul > 12*li","，给",[196,142511,27],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[27,142514,142515,142516],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[176,142517,142518,142523,142532],{},[27,142519,142520,142522],{},[196,142521,142493],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[27,142524,142525,142526,142528,142529,142531],{},"可以让 ",[196,142527,142493],{}," 里面的 ",[196,142530,176],{}," 宽度为 252，就可以装的下 4 个 小 li",[27,142533,142534,142536],{},[196,142535,142493],{}," 盒子 overflow 隐藏多余的部分就可以了",[27,142538,118726,142539,142541,142542,142544,142545,142547],{},[196,142540,27],{}," 里面放一个 ",[196,142543,1548],{},"（里面放图标），下面的文本用 ",[196,142546,31],{}," 标签包裹",[27,142549,141311,142550,142552,142553,142555,142556,141345,142558,142561],{},[196,142551,1548],{}," 设置 24px宽和28px的高（注意 ",[196,142554,1548],{}," 是行内元素， 转成行内块），给 ",[196,142557,27],{},[196,142559,142560],{},"text-align:center"," 让里面内容居中显示",[31,142563,142181],{},[190,142565,142567],{"className":128811,"code":142566,"language":128813,"meta":57,"style":57},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[196,142568,142569,142587,142592,142602],{"__ignoreMap":57},[199,142570,142571,142573,142575,142577,142579,142581,142583,142585],{"class":201,"line":202},[199,142572,199],{"class":874},[199,142574,1912],{"class":205},[199,142576,2867],{"class":874},[199,142578,1912],{"class":205},[199,142580,26397],{"class":874},[199,142582,1912],{"class":205},[199,142584,49],{"class":874},[199,142586,1012],{"class":205},[199,142588,142589],{"class":201,"line":36},[199,142590,142591],{"class":1454},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[199,142593,142594,142596,142598,142600],{"class":201,"line":73},[199,142595,130427],{"class":1018},[199,142597,1022],{"class":205},[199,142599,130489],{"class":1018},[199,142601,1028],{"class":205},[199,142603,142604],{"class":201,"line":333},[199,142605,671],{"class":205},[31,142607,142270],{},[190,142609,142610],{"className":128811,"code":142566,"language":128813,"meta":57,"style":57},[196,142611,142612,142630,142634,142644],{"__ignoreMap":57},[199,142613,142614,142616,142618,142620,142622,142624,142626,142628],{"class":201,"line":202},[199,142615,199],{"class":874},[199,142617,1912],{"class":205},[199,142619,2867],{"class":874},[199,142621,1912],{"class":205},[199,142623,26397],{"class":874},[199,142625,1912],{"class":205},[199,142627,49],{"class":874},[199,142629,1012],{"class":205},[199,142631,142632],{"class":201,"line":36},[199,142633,142591],{"class":1454},[199,142635,142636,142638,142640,142642],{"class":201,"line":73},[199,142637,130427],{"class":1018},[199,142639,1022],{"class":205},[199,142641,130489],{"class":1018},[199,142643,1028],{"class":205},[199,142645,142646],{"class":201,"line":333},[199,142647,671],{"class":205},[31,142649,142650,142651,142654],{},"3 号盒子为 ",[196,142652,142653],{},"bargain"," 特价商品",[176,142656,142657],{},[27,142658,142659],{},"这个比较简单，直接插入一张图片即可",[31,142661,142181],{},[190,142663,142664],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,142665,142666],{"__ignoreMap":57},[199,142667,142668,142670,142672,142674,142676,142678,142680,142682,142684,142686,142688,142690],{"class":201,"line":202},[199,142669,887],{"class":205},[199,142671,55],{"class":874},[199,142673,57498],{"class":878},[199,142675,895],{"class":205},[199,142677,136328],{"class":898},[199,142679,57506],{"class":878},[199,142681,895],{"class":205},[199,142683,136335],{"class":898},[199,142685,136338],{"class":878},[199,142687,895],{"class":205},[199,142689,136343],{"class":898},[199,142691,882],{"class":205},[31,142693,142270],{},[190,142695,142696],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,142697,142698],{"__ignoreMap":57},[199,142699,142700,142702,142704,142706,142708,142710,142712,142714,142716,142718,142720,142722],{"class":201,"line":202},[199,142701,887],{"class":205},[199,142703,55],{"class":874},[199,142705,57498],{"class":878},[199,142707,895],{"class":205},[199,142709,136328],{"class":898},[199,142711,57506],{"class":878},[199,142713,895],{"class":205},[199,142715,136335],{"class":898},[199,142717,136338],{"class":878},[199,142719,895],{"class":205},[199,142721,136343],{"class":898},[199,142723,882],{"class":205},[19,142725,142727],{"id":142726},"_1612-推荐模块制作","16.1.2 推荐模块制作",[55,142729],{"style":128667,"src":142730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[31,142732,142733,142734,142737],{},"大盒子 ",[196,142735,142736],{},"recom"," 推荐模块 recommend",[176,142739,142740],{},[27,142741,142742,142743,142745,142746,142749],{},"给这个 ",[196,142744,142736],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[196,142747,142748],{},"#ebebeb","），设置距离上边 12px",[31,142751,142181],{},[190,142753,142755],{"className":128811,"code":142754,"language":128813,"meta":57,"style":57},"div {\n  background-color: #f0f0f0;\n}\n",[196,142756,142757,142763,142774],{"__ignoreMap":57},[199,142758,142759,142761],{"class":201,"line":202},[199,142760,1220],{"class":874},[199,142762,1012],{"class":205},[199,142764,142765,142767,142769,142772],{"class":201,"line":36},[199,142766,73137],{"class":1018},[199,142768,1022],{"class":205},[199,142770,142771],{"class":1018},"#f0f0f0",[199,142773,1028],{"class":205},[199,142775,142776],{"class":201,"line":73},[199,142777,671],{"class":205},[31,142779,142270],{},[190,142781,142782],{"className":128811,"code":142754,"language":128813,"meta":57,"style":57},[196,142783,142784,142790,142800],{"__ignoreMap":57},[199,142785,142786,142788],{"class":201,"line":202},[199,142787,1220],{"class":874},[199,142789,1012],{"class":205},[199,142791,142792,142794,142796,142798],{"class":201,"line":36},[199,142793,73137],{"class":1018},[199,142795,1022],{"class":205},[199,142797,142771],{"class":1018},[199,142799,1028],{"class":205},[199,142801,142802],{"class":201,"line":73},[199,142803,671],{"class":205},[31,142805,142806],{},"里面包含 2 个盒子， 浮动即可",[31,142808,142181],{},[190,142810,142811],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,142812,142813,142819,142829],{"__ignoreMap":57},[199,142814,142815,142817],{"class":201,"line":202},[199,142816,132659],{"class":878},[199,142818,1012],{"class":205},[199,142820,142821,142823,142825,142827],{"class":201,"line":36},[199,142822,133291],{"class":1018},[199,142824,1022],{"class":205},[199,142826,26580],{"class":1018},[199,142828,1028],{"class":205},[199,142830,142831],{"class":201,"line":73},[199,142832,671],{"class":205},[31,142834,142835,142836],{},"1 号盒子 ",[196,142837,142838],{},"recom_hd",[176,142840,142841,142844],{},[27,142842,142843],{},"设置宽度205px，高度163px",[27,142845,142315,142846,142848],{},[196,142847,55],{},"标签，插入图片即可",[31,142850,142181],{},[190,142852,142853],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,142854,142855],{"__ignoreMap":57},[199,142856,142857,142859,142861,142863,142865,142867,142869,142871,142873,142875,142877,142879],{"class":201,"line":202},[199,142858,887],{"class":205},[199,142860,55],{"class":874},[199,142862,57498],{"class":878},[199,142864,895],{"class":205},[199,142866,136328],{"class":898},[199,142868,57506],{"class":878},[199,142870,895],{"class":205},[199,142872,136335],{"class":898},[199,142874,136338],{"class":878},[199,142876,895],{"class":205},[199,142878,136343],{"class":898},[199,142880,882],{"class":205},[31,142882,142270],{},[190,142884,142885],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,142886,142887],{"__ignoreMap":57},[199,142888,142889,142891,142893,142895,142897,142899,142901,142903,142905,142907,142909,142911],{"class":201,"line":202},[199,142890,887],{"class":205},[199,142892,55],{"class":874},[199,142894,57498],{"class":878},[199,142896,895],{"class":205},[199,142898,136328],{"class":898},[199,142900,57506],{"class":878},[199,142902,895],{"class":205},[199,142904,136335],{"class":898},[199,142906,136338],{"class":878},[199,142908,895],{"class":205},[199,142910,136343],{"class":898},[199,142912,882],{"class":205},[31,142914,142915,142916,142919],{},"2 号盒子 ",[196,142917,142918],{},"recom_bd"," ，注意里面的小竖线",[176,142921,142922,142933,142936,142941,142946],{},[27,142923,142924,142925,142927,142928,142930,142931],{},"右侧结构里面放 ",[196,142926,176],{}," 包含 4个 ",[196,142929,27],{},"，每个li里面包含一个",[196,142932,55],{},[27,142934,142935],{},"直接利用切片工具把里面的内容当成一张图片",[27,142937,141311,142938,142940],{},[196,142939,27],{}," 设置浮动",[27,142942,141311,142943,142945],{},[196,142944,55],{}," 设置宽高，宽度 248px，高度 163px",[27,142947,142948,142949,142509,142952,142954,142955,142957,142958],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[196,142950,142951],{},"top 10px",[196,142953,27],{},"设置相对定位（注意，最后一个",[196,142956,27],{},"不用设置伪元素），可以利用 ",[196,142959,142960],{},"nth-child(-n+3){...}",[31,142962,142181],{},[190,142964,142965],{"className":128811,"code":140653,"language":128813,"meta":57,"style":57},[196,142966,142967,142975,142985,142995],{"__ignoreMap":57},[199,142968,142969,142971,142973],{"class":201,"line":202},[199,142970,1220],{"class":874},[199,142972,139812],{"class":878},[199,142974,1012],{"class":205},[199,142976,142977,142979,142981,142983],{"class":201,"line":36},[199,142978,139819],{"class":1018},[199,142980,1022],{"class":205},[199,142982,10549],{"class":898},[199,142984,1028],{"class":205},[199,142986,142987,142989,142991,142993],{"class":201,"line":73},[199,142988,130427],{"class":1018},[199,142990,1022],{"class":205},[199,142992,63128],{"class":1018},[199,142994,1028],{"class":205},[199,142996,142997],{"class":201,"line":333},[199,142998,671],{"class":205},[31,143000,142270],{},[190,143002,143003],{"className":128811,"code":140653,"language":128813,"meta":57,"style":57},[196,143004,143005,143013,143023,143033],{"__ignoreMap":57},[199,143006,143007,143009,143011],{"class":201,"line":202},[199,143008,1220],{"class":874},[199,143010,139812],{"class":878},[199,143012,1012],{"class":205},[199,143014,143015,143017,143019,143021],{"class":201,"line":36},[199,143016,139819],{"class":1018},[199,143018,1022],{"class":205},[199,143020,10549],{"class":898},[199,143022,1028],{"class":205},[199,143024,143025,143027,143029,143031],{"class":201,"line":73},[199,143026,130427],{"class":1018},[199,143028,1022],{"class":205},[199,143030,63128],{"class":1018},[199,143032,1028],{"class":205},[199,143034,143035],{"class":201,"line":333},[199,143036,671],{"class":205},[19,143038,143040],{"id":143039},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[55,143042],{"style":128667,"src":143043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[31,143045,143046],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[31,143048,143049],{},"第一楼是家用电器模块： 里面包含两个盒子",[31,143051,143052,143055],{},[196,143053,143054],{},"box_hd"," 制作",[31,143057,142835,143058,143060],{},[196,143059,143054],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[55,143062],{"style":128667,"src":143063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[176,143065,143066,143071,143076,143079],{},[27,143067,143068,143070],{},[196,143069,143054],{}," 给 30px 的高度，2个像素的下边框",[27,143072,143073,143074],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[196,143075,141322],{},[27,143077,143078],{},"左侧盒左浮动，右侧盒子右浮动",[27,143080,143081,143083,143084,143086],{},[196,143082,2867],{},"标签之间的距离用左右的",[196,143085,33725],{},"撑开即可",[31,143088,143089],{},"结构代码",[190,143091,143092],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,143093,143094,143100,143110],{"__ignoreMap":57},[199,143095,143096,143098],{"class":201,"line":202},[199,143097,132659],{"class":878},[199,143099,1012],{"class":205},[199,143101,143102,143104,143106,143108],{"class":201,"line":36},[199,143103,133291],{"class":1018},[199,143105,1022],{"class":205},[199,143107,26580],{"class":1018},[199,143109,1028],{"class":205},[199,143111,143112],{"class":201,"line":73},[199,143113,671],{"class":205},[31,143115,143116],{},"样式代码",[190,143118,143119],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,143120,143121,143127,143137],{"__ignoreMap":57},[199,143122,143123,143125],{"class":201,"line":202},[199,143124,132659],{"class":878},[199,143126,1012],{"class":205},[199,143128,143129,143131,143133,143135],{"class":201,"line":36},[199,143130,133291],{"class":1018},[199,143132,1022],{"class":205},[199,143134,26580],{"class":1018},[199,143136,1028],{"class":205},[199,143138,143139],{"class":201,"line":73},[199,143140,671],{"class":205},[31,143142,143143,143055],{},[196,143144,143145],{},"box_bd",[31,143147,143148],{},"2 号盒子 box_bd，不要给高度",[55,143150],{"style":128667,"src":143151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[31,143153,143154],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[31,143156,143157],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[31,143159,143160],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[176,143162,143163,143175,143191],{},[27,143164,143165,143167,143168,143171,143172,143174],{},[196,143166,143145],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[196,143169,143170],{},"tab_content","，在",[196,143173,143170],{}," 里面包裹tab选项卡对应的内容",[27,143176,143177,143178,143181,143182,143184,143185,143187,143188,143190],{},"内容被一个大盒子包裹（",[196,143179,143180],{},"tab_list_item","），里面是 ",[196,143183,176],{}," 包裹 5个 ",[196,143186,27],{},"，每个",[196,143189,27],{},"设置对应的宽度，然后设置浮动",[27,143192,143193,143194,143196,143197,143199,143200],{},"而这5个",[196,143195,27],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[196,143198,27],{},"设置",[176,143201,143202,143220,143223],{},[27,143203,143204,143205,143207,143208,143210,143211,143213,143214,143216,143217,143219],{},"第一个小 ",[196,143206,27],{}," 分为上下结构，上面是 ",[196,143209,176],{}," 包裹 ",[196,143212,27],{}," ，",[196,143215,27],{},"里面包裹 ",[196,143218,2867],{},"，下面插入一张图片",[27,143221,143222],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[27,143224,143225,143226,143228,143229,143231,143232,143234],{},"后面的小 ",[196,143227,27],{}," 里面先放一个",[196,143230,2867],{},"标签，然后在",[196,143233,2867],{},"标签里面插入图片即可",[31,143236,143089],{},[190,143238,143239],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,143240,143241],{"__ignoreMap":57},[199,143242,143243,143245,143247,143249,143251,143253,143255,143257,143259,143261,143263,143265],{"class":201,"line":202},[199,143244,887],{"class":205},[199,143246,55],{"class":874},[199,143248,57498],{"class":878},[199,143250,895],{"class":205},[199,143252,136328],{"class":898},[199,143254,57506],{"class":878},[199,143256,895],{"class":205},[199,143258,136335],{"class":898},[199,143260,136338],{"class":878},[199,143262,895],{"class":205},[199,143264,136343],{"class":898},[199,143266,882],{"class":205},[31,143268,143116],{},[190,143270,143271],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,143272,143273],{"__ignoreMap":57},[199,143274,143275,143277,143279,143281,143283,143285,143287,143289,143291,143293,143295,143297],{"class":201,"line":202},[199,143276,887],{"class":205},[199,143278,55],{"class":874},[199,143280,57498],{"class":878},[199,143282,895],{"class":205},[199,143284,136328],{"class":898},[199,143286,57506],{"class":878},[199,143288,895],{"class":205},[199,143290,136335],{"class":898},[199,143292,136338],{"class":878},[199,143294,895],{"class":205},[199,143296,136343],{"class":898},[199,143298,882],{"class":205},[31,143300,143301],{},"tab栏切换需求！！！！！！介绍：",[55,143303],{"style":128667,"src":143304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[176,143306,143307,143315,143321,143324],{},[27,143308,143309,143312,143313],{},[196,143310,143311],{},"tab","栏的布局是 ",[196,143314,141322],{},[27,143316,143317,143318,143320],{},"有多少个",[196,143319,143311],{},"选项卡，那么对应就有多少个内容",[27,143322,143323],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[27,143325,143326,143327,143330,143331,143333,143334,143336],{},"等后面我们学习了",[196,143328,143329],{},"js","之后，我们就会配合",[196,143332,143329],{},"来实现，",[196,143335,143311],{},"栏的切换",[14,143338,143340],{"id":143339},"_162-列表制作","16.2 列表制作",[19,143342,143344],{"id":143343},"_1621-准备工作","16.2.1 准备工作",[176,143346,143347,143350,143353,143356],{},[27,143348,143349],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[27,143351,143352],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[27,143354,143355],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[27,143357,143358],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[19,143360,143362,143363,103277,143365,143367],{"id":143361},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[196,143364,133816],{},[196,143366,55972],{}," 修改",[55,143369],{"style":128667,"src":143370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[176,143372,143373],{},[27,143374,143375],{},"秒杀盒子 sk（ second kill ） 定位即可",[31,143377,142181],{},[190,143379,143380],{"className":128811,"code":134243,"language":128813,"meta":57,"style":57},[196,143381,143382,143386,143400,143404,143418,143422,143436,143440,143454,143458],{"__ignoreMap":57},[199,143383,143384],{"class":201,"line":202},[199,143385,134250],{"class":1454},[199,143387,143388,143390,143392,143394,143396,143398],{"class":201,"line":36},[199,143389,134255],{"class":878},[199,143391,82066],{"class":205},[199,143393,131171],{"class":1018},[199,143395,1022],{"class":205},[199,143397,134264],{"class":1018},[199,143399,131741],{"class":205},[199,143401,143402],{"class":201,"line":73},[199,143403,134271],{"class":1454},[199,143405,143406,143408,143410,143412,143414,143416],{"class":201,"line":333},[199,143407,134276],{"class":878},[199,143409,82066],{"class":205},[199,143411,131171],{"class":1018},[199,143413,1022],{"class":205},[199,143415,57023],{"class":1018},[199,143417,131741],{"class":205},[199,143419,143420],{"class":201,"line":227},[199,143421,134291],{"class":1454},[199,143423,143424,143426,143428,143430,143432,143434],{"class":201,"line":238},[199,143425,134296],{"class":878},[199,143427,82066],{"class":205},[199,143429,131171],{"class":1018},[199,143431,1022],{"class":205},[199,143433,57090],{"class":1018},[199,143435,131741],{"class":205},[199,143437,143438],{"class":201,"line":252},[199,143439,134311],{"class":1454},[199,143441,143442,143444,143446,143448,143450,143452],{"class":201,"line":388},[199,143443,134316],{"class":878},[199,143445,82066],{"class":205},[199,143447,131171],{"class":1018},[199,143449,1022],{"class":205},[199,143451,88492],{"class":1018},[199,143453,131741],{"class":205},[199,143455,143456],{"class":201,"line":415},[199,143457,134331],{"class":1454},[199,143459,143460,143462,143464,143466,143468,143470],{"class":201,"line":426},[199,143461,134336],{"class":878},[199,143463,82066],{"class":205},[199,143465,131171],{"class":1018},[199,143467,1022],{"class":205},[199,143469,134345],{"class":1018},[199,143471,131741],{"class":205},[31,143473,142270],{},[190,143475,143476],{"className":128811,"code":134243,"language":128813,"meta":57,"style":57},[196,143477,143478,143482,143496,143500,143514,143518,143532,143536,143550,143554],{"__ignoreMap":57},[199,143479,143480],{"class":201,"line":202},[199,143481,134250],{"class":1454},[199,143483,143484,143486,143488,143490,143492,143494],{"class":201,"line":36},[199,143485,134255],{"class":878},[199,143487,82066],{"class":205},[199,143489,131171],{"class":1018},[199,143491,1022],{"class":205},[199,143493,134264],{"class":1018},[199,143495,131741],{"class":205},[199,143497,143498],{"class":201,"line":73},[199,143499,134271],{"class":1454},[199,143501,143502,143504,143506,143508,143510,143512],{"class":201,"line":333},[199,143503,134276],{"class":878},[199,143505,82066],{"class":205},[199,143507,131171],{"class":1018},[199,143509,1022],{"class":205},[199,143511,57023],{"class":1018},[199,143513,131741],{"class":205},[199,143515,143516],{"class":201,"line":227},[199,143517,134291],{"class":1454},[199,143519,143520,143522,143524,143526,143528,143530],{"class":201,"line":238},[199,143521,134296],{"class":878},[199,143523,82066],{"class":205},[199,143525,131171],{"class":1018},[199,143527,1022],{"class":205},[199,143529,57090],{"class":1018},[199,143531,131741],{"class":205},[199,143533,143534],{"class":201,"line":252},[199,143535,134311],{"class":1454},[199,143537,143538,143540,143542,143544,143546,143548],{"class":201,"line":388},[199,143539,134316],{"class":878},[199,143541,82066],{"class":205},[199,143543,131171],{"class":1018},[199,143545,1022],{"class":205},[199,143547,88492],{"class":1018},[199,143549,131741],{"class":205},[199,143551,143552],{"class":201,"line":415},[199,143553,134331],{"class":1454},[199,143555,143556,143558,143560,143562,143564,143566],{"class":201,"line":426},[199,143557,134336],{"class":878},[199,143559,82066],{"class":205},[199,143561,131171],{"class":1018},[199,143563,1022],{"class":205},[199,143565,134345],{"class":1018},[199,143567,131741],{"class":205},[176,143569,143570,143581],{},[27,143571,143572,143573,143576,143577,103277,143579],{},"1 号盒子左侧浮动 ",[196,143574,143575],{},"sk_list"," 里面包含 ",[196,143578,176],{},[196,143580,27],{},[27,143582,143583,143584,143576,143587,103277,143589],{},"2 号盒子左侧浮动 ",[196,143585,143586],{},"sk_con",[196,143588,176],{},[196,143590,27],{},[31,143592,142181],{},[190,143594,143595],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,143596,143597,143603,143613],{"__ignoreMap":57},[199,143598,143599,143601],{"class":201,"line":202},[199,143600,132659],{"class":878},[199,143602,1012],{"class":205},[199,143604,143605,143607,143609,143611],{"class":201,"line":36},[199,143606,133291],{"class":1018},[199,143608,1022],{"class":205},[199,143610,26580],{"class":1018},[199,143612,1028],{"class":205},[199,143614,143615],{"class":201,"line":73},[199,143616,671],{"class":205},[31,143618,142270],{},[190,143620,143621],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,143622,143623,143629,143639],{"__ignoreMap":57},[199,143624,143625,143627],{"class":201,"line":202},[199,143626,132659],{"class":878},[199,143628,1012],{"class":205},[199,143630,143631,143633,143635,143637],{"class":201,"line":36},[199,143632,133291],{"class":1018},[199,143634,1022],{"class":205},[199,143636,26580],{"class":1018},[199,143638,1028],{"class":205},[199,143640,143641],{"class":201,"line":73},[199,143642,671],{"class":205},[19,143644,143646,143647],{"id":143645},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[196,143648,143649],{},"sk_container",[55,143651],{"style":128667,"src":143652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[176,143654,143655,143660],{},[27,143656,142835,143657,143659],{},[196,143658,143649],{}," 给宽度 1200，不要给高度",[27,143661,143662],{},"一定不要忘记清除浮动",[31,143664,142181],{},[190,143666,143667],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,143668,143669,143675,143685],{"__ignoreMap":57},[199,143670,143671,143673],{"class":201,"line":202},[199,143672,132659],{"class":878},[199,143674,1012],{"class":205},[199,143676,143677,143679,143681,143683],{"class":201,"line":36},[199,143678,133291],{"class":1018},[199,143680,1022],{"class":205},[199,143682,26580],{"class":1018},[199,143684,1028],{"class":205},[199,143686,143687],{"class":201,"line":73},[199,143688,671],{"class":205},[24,143690,143691],{},[27,143692,143693],{},"sk_hd制作",[176,143695,143696],{},[27,143697,142915,143698,143701],{},[196,143699,143700],{},"sk_hd"," ，插入图片即可",[31,143703,142181],{},[190,143705,143706],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,143707,143708],{"__ignoreMap":57},[199,143709,143710,143712,143714,143716,143718,143720,143722,143724,143726,143728,143730,143732],{"class":201,"line":202},[199,143711,887],{"class":205},[199,143713,55],{"class":874},[199,143715,57498],{"class":878},[199,143717,895],{"class":205},[199,143719,136328],{"class":898},[199,143721,57506],{"class":878},[199,143723,895],{"class":205},[199,143725,136335],{"class":898},[199,143727,136338],{"class":878},[199,143729,895],{"class":205},[199,143731,136343],{"class":898},[199,143733,882],{"class":205},[24,143735,143736],{"start":36},[27,143737,143738],{},"sk_bd制作",[176,143740,143741],{},[27,143742,143743,143744,143747,143748,103277,143750,143752],{},"3 号盒子 ",[196,143745,143746],{},"sk_bd"," ，里面包含很多的 ",[196,143749,176],{},[196,143751,27],{},[176,143753,143754,143763],{},[27,143755,143756,143757,143759,143760,143762],{},"当鼠标移入到 ",[196,143758,27],{}," 上面的时候显示红色的边框，在这里先给 ",[196,143761,27],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[27,143764,143765,143766,143768,143769,143771,143772,143775,143776,143778],{},"由于给每个 ",[196,143767,27],{}," 都设置了外边距，导致一行的最后一个 ",[196,143770,27],{}," 掉了下来，在这里我们利用 ",[196,143773,143774],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[196,143777,27],{},"，去掉外边距就好了",[31,143780,142181],{},[190,143782,143783],{"className":128811,"code":141000,"language":128813,"meta":57,"style":57},[196,143784,143785,143791,143803],{"__ignoreMap":57},[199,143786,143787,143789],{"class":201,"line":202},[199,143788,1220],{"class":874},[199,143790,1012],{"class":205},[199,143792,143793,143795,143797,143799,143801],{"class":201,"line":36},[199,143794,72729],{"class":1018},[199,143796,1022],{"class":205},[199,143798,1025],{"class":1018},[199,143800,1158],{"class":1018},[199,143802,1028],{"class":205},[199,143804,143805],{"class":201,"line":73},[199,143806,671],{"class":205},[31,143808,142270],{},[190,143810,143811],{"className":128811,"code":141000,"language":128813,"meta":57,"style":57},[196,143812,143813,143819,143831],{"__ignoreMap":57},[199,143814,143815,143817],{"class":201,"line":202},[199,143816,1220],{"class":874},[199,143818,1012],{"class":205},[199,143820,143821,143823,143825,143827,143829],{"class":201,"line":36},[199,143822,72729],{"class":1018},[199,143824,1022],{"class":205},[199,143826,1025],{"class":1018},[199,143828,1158],{"class":1018},[199,143830,1028],{"class":205},[199,143832,143833],{"class":201,"line":73},[199,143834,671],{"class":205},[14,143836,143838],{"id":143837},"_163-注册页面制作","16.3 注册页面制作",[55,143840],{"style":128667,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[31,143843,143844,143846],{},[49,143845,11912],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[55,143848],{"style":128667,"src":143849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[19,143851,143853],{"id":143852},"_1631-准备工作","16.3.1 准备工作",[176,143855,143856,143859],{},[27,143857,143858],{},"创建register.html，引入 base.css，引入favicon图标",[27,143860,143861],{},"创建register.css ，在html页面进行引入",[19,143863,143865,143866,143868],{"id":143864},"_1632-header-头部实现","16.3.2 ",[196,143867,133816],{}," 头部实现",[176,143870,143871,143874],{},[27,143872,143873],{},"整个内容用 版心 进行包裹",[27,143875,143876],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[31,143878,142181],{},[190,143880,143881],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,143882,143883],{"__ignoreMap":57},[199,143884,143885,143887,143889,143891,143893,143895,143897,143899,143901,143903,143905,143907],{"class":201,"line":202},[199,143886,887],{"class":205},[199,143888,55],{"class":874},[199,143890,57498],{"class":878},[199,143892,895],{"class":205},[199,143894,136328],{"class":898},[199,143896,57506],{"class":878},[199,143898,895],{"class":205},[199,143900,136335],{"class":898},[199,143902,136338],{"class":878},[199,143904,895],{"class":205},[199,143906,136343],{"class":898},[199,143908,882],{"class":205},[31,143910,142270],{},[190,143912,143913],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,143914,143915],{"__ignoreMap":57},[199,143916,143917,143919,143921,143923,143925,143927,143929,143931,143933,143935,143937,143939],{"class":201,"line":202},[199,143918,887],{"class":205},[199,143920,55],{"class":874},[199,143922,57498],{"class":878},[199,143924,895],{"class":205},[199,143926,136328],{"class":898},[199,143928,57506],{"class":878},[199,143930,895],{"class":205},[199,143932,136335],{"class":898},[199,143934,136338],{"class":878},[199,143936,895],{"class":205},[199,143938,136343],{"class":898},[199,143940,882],{"class":205},[19,143942,143944,143945,143948],{"id":143943},"_1633-registerarea-主体模块实现","16.3.3 ",[196,143946,143947],{},"registerarea"," 主体模块实现",[55,143950],{"style":128667,"src":143951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[31,143953,143954],{},"整个大盒子 高度为 522px，设置4个边框",[31,143956,142181],{},[190,143958,143959],{"className":128811,"code":132968,"language":128813,"meta":57,"style":57},[196,143960,143961,143967,143983],{"__ignoreMap":57},[199,143962,143963,143965],{"class":201,"line":202},[199,143964,1220],{"class":874},[199,143966,1012],{"class":205},[199,143968,143969,143971,143973,143975,143977,143979,143981],{"class":201,"line":36},[199,143970,73155],{"class":1018},[199,143972,1022],{"class":205},[199,143974,1115],{"class":1018},[199,143976,1087],{"class":1086},[199,143978,1120],{"class":1018},[199,143980,132203],{"class":1018},[199,143982,1028],{"class":205},[199,143984,143985],{"class":201,"line":73},[199,143986,671],{"class":205},[31,143988,142270],{},[190,143990,143991],{"className":128811,"code":132968,"language":128813,"meta":57,"style":57},[196,143992,143993,143999,144015],{"__ignoreMap":57},[199,143994,143995,143997],{"class":201,"line":202},[199,143996,1220],{"class":874},[199,143998,1012],{"class":205},[199,144000,144001,144003,144005,144007,144009,144011,144013],{"class":201,"line":36},[199,144002,73155],{"class":1018},[199,144004,1022],{"class":205},[199,144006,1115],{"class":1018},[199,144008,1087],{"class":1086},[199,144010,1120],{"class":1018},[199,144012,132203],{"class":1018},[199,144014,1028],{"class":205},[199,144016,144017],{"class":201,"line":73},[199,144018,671],{"class":205},[31,144020,144021],{},"1号盒子 是一个 h3 标签，放标题",[176,144023,144024],{},[27,144025,144026],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[31,144028,142181],{},[190,144030,144031],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,144032,144033,144039,144049],{"__ignoreMap":57},[199,144034,144035,144037],{"class":201,"line":202},[199,144036,132659],{"class":878},[199,144038,1012],{"class":205},[199,144040,144041,144043,144045,144047],{"class":201,"line":36},[199,144042,133291],{"class":1018},[199,144044,1022],{"class":205},[199,144046,26580],{"class":1018},[199,144048,1028],{"class":205},[199,144050,144051],{"class":201,"line":73},[199,144052,671],{"class":205},[31,144054,142270],{},[190,144056,144057],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,144058,144059,144065,144075],{"__ignoreMap":57},[199,144060,144061,144063],{"class":201,"line":202},[199,144062,132659],{"class":878},[199,144064,1012],{"class":205},[199,144066,144067,144069,144071,144073],{"class":201,"line":36},[199,144068,133291],{"class":1018},[199,144070,1022],{"class":205},[199,144072,26580],{"class":1018},[199,144074,1028],{"class":205},[199,144076,144077],{"class":201,"line":73},[199,144078,671],{"class":205},[31,144080,144081],{},"2号盒子 里面放注册的内容",[176,144083,144084,144087,144096,144110,144123,144126,144129,144147,144161],{},[27,144085,144086],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[27,144088,144089,144090,144092,144093,144095],{},"里面的内容利用 ",[196,144091,176],{}," 包含 ",[196,144094,27],{}," 来实现的（不需要用表格）",[27,144097,141325,144098,144100,144101,144103,144104,144106,144107,144109],{},[196,144099,27],{}," 里面，左侧放 ",[196,144102,36449],{}," 标签， 中间放",[196,144105,56080],{}," 标签， 右侧放 ",[196,144108,199],{}," 提示信息",[27,144111,144112,144113,144115,144116,144118,144119,144122],{},"左侧 ",[196,144114,36449],{},"里面的文字都是右对齐，我们可以给",[196,144117,36449],{},"设置一个宽度（88px），然后利用",[196,144120,144121],{},"text-align"," 来设置右对齐",[27,144124,144125],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[27,144127,144128],{},"右侧 span修饰一下文字颜色",[27,144130,144131,144132],{},"提示信息的样式优化",[176,144133,144134,144137,144140],{},[27,144135,144136],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[27,144138,144139],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[27,144141,144142,144143,144146],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[196,144144,144145],{},"vertical-algin"," 来设置 图片与文字对齐方式",[27,144148,144149,144150],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[176,144151,144152,144158],{},[27,144153,144154,144155,144157],{},"设置 ",[196,144156,26397],{}," 的 左右 12px 的内边距，设置一下文字颜色",[27,144159,144160],{},"分别设置 背景颜色",[27,144162,144163,144164,144166],{},"同意协议 和 完成注册 都是用 ",[196,144165,27],{}," 进行包裹",[31,144168,142181],{},[190,144170,144171],{"className":128811,"code":142754,"language":128813,"meta":57,"style":57},[196,144172,144173,144179,144189],{"__ignoreMap":57},[199,144174,144175,144177],{"class":201,"line":202},[199,144176,1220],{"class":874},[199,144178,1012],{"class":205},[199,144180,144181,144183,144185,144187],{"class":201,"line":36},[199,144182,73137],{"class":1018},[199,144184,1022],{"class":205},[199,144186,142771],{"class":1018},[199,144188,1028],{"class":205},[199,144190,144191],{"class":201,"line":73},[199,144192,671],{"class":205},[31,144194,142270],{},[190,144196,144197],{"className":128811,"code":142754,"language":128813,"meta":57,"style":57},[196,144198,144199,144205,144215],{"__ignoreMap":57},[199,144200,144201,144203],{"class":201,"line":202},[199,144202,1220],{"class":874},[199,144204,1012],{"class":205},[199,144206,144207,144209,144211,144213],{"class":201,"line":36},[199,144208,73137],{"class":1018},[199,144210,1022],{"class":205},[199,144212,142771],{"class":1018},[199,144214,1028],{"class":205},[199,144216,144217],{"class":201,"line":73},[199,144218,671],{"class":205},[19,144220,144222],{"id":144221},"_1634-底部实现","16.3.4 底部实现",[31,144224,142181],{},[190,144226,144227],{"className":128811,"code":142754,"language":128813,"meta":57,"style":57},[196,144228,144229,144235,144245],{"__ignoreMap":57},[199,144230,144231,144233],{"class":201,"line":202},[199,144232,1220],{"class":874},[199,144234,1012],{"class":205},[199,144236,144237,144239,144241,144243],{"class":201,"line":36},[199,144238,73137],{"class":1018},[199,144240,1022],{"class":205},[199,144242,142771],{"class":1018},[199,144244,1028],{"class":205},[199,144246,144247],{"class":201,"line":73},[199,144248,671],{"class":205},[31,144250,142270],{},[190,144252,144253],{"className":129558,"code":132915,"language":129560,"meta":57,"style":57},[196,144254,144255,144259,144273,144277],{"__ignoreMap":57},[199,144256,144257],{"class":201,"line":202},[199,144258,132922],{"class":1454},[199,144260,144261,144263,144265,144267,144269,144271],{"class":201,"line":36},[199,144262,887],{"class":205},[199,144264,1220],{"class":874},[199,144266,55745],{"class":878},[199,144268,895],{"class":205},[199,144270,132935],{"class":898},[199,144272,882],{"class":205},[199,144274,144275],{"class":201,"line":73},[199,144276,132942],{"class":205},[199,144278,144279,144281,144283],{"class":201,"line":333},[199,144280,1414],{"class":205},[199,144282,1220],{"class":874},[199,144284,882],{"class":205},[14,144286,144288],{"id":144287},"_164-项目总结","16.4 项目总结",[24,144290,144291,144294,144297,144300],{},[27,144292,144293],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[27,144295,144296],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[27,144298,144299],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[27,144301,144302],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[55,144304],{"style":128667,"src":144305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[24,144307,144308],{"start":227},[27,144309,144310],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[55,144312],{"style":128667,"src":144313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[24,144315,144316],{"start":238},[27,144317,144318],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[55,144320],{"style":128667,"src":144321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[190,144323,144324],{"className":129558,"code":138968,"language":129560,"meta":57,"style":57},[196,144325,144326],{"__ignoreMap":57},[199,144327,144328,144330,144332,144334,144336,144338,144340,144342,144344,144346,144348,144350],{"class":201,"line":202},[199,144329,887],{"class":205},[199,144331,56080],{"class":874},[199,144333,56083],{"class":878},[199,144335,895],{"class":205},[199,144337,64958],{"class":898},[199,144339,967],{"class":878},[199,144341,895],{"class":205},[199,144343,138989],{"class":898},[199,144345,63279],{"class":878},[199,144347,895],{"class":205},[199,144349,138996],{"class":898},[199,144351,882],{"class":205},[24,144353,144354,144357],{"start":252},[27,144355,144356],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[27,144358,144359],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1002,144361,144362],{},"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":57,"searchDepth":36,"depth":36,"links":144364},[144365,144370,144377,144385],{"id":141991,"depth":36,"text":141992,"children":144366},[144367,144368,144369],{"id":141995,"depth":73,"text":141996},{"id":142726,"depth":73,"text":142727},{"id":143039,"depth":73,"text":143040},{"id":143339,"depth":36,"text":143340,"children":144371},[144372,144373,144375],{"id":143343,"depth":73,"text":143344},{"id":143361,"depth":73,"text":144374},"16.2.2 列表页 header 和 nav 修改",{"id":143645,"depth":73,"text":144376},"16.2.3 列表页主体 sk_container",{"id":143837,"depth":36,"text":143838,"children":144378},[144379,144380,144382,144384],{"id":143852,"depth":73,"text":143853},{"id":143864,"depth":73,"text":144381},"16.3.2 header 头部实现",{"id":143943,"depth":73,"text":144383},"16.3.3 registerarea 主体模块实现",{"id":144221,"depth":73,"text":144222},{"id":144287,"depth":36,"text":144288},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141983,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144392,"title":144393,"body":144394,"description":3023,"extension":3024,"meta":144502,"navigation":906,"path":144503,"seo":144504,"stem":144505,"__hash__":144506},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144395,"toc":144497},[144396,144399,144403,144406,144409,144418,144427,144431,144436,144443,144461,144464,144467,144470,144473,144476,144479,144482,144485,144488,144491,144494],[10,144397,144393],{"id":144398},"_17-web服务器与网站发布",[14,144400,144402],{"id":144401},"_171-web服务器","17.1 Web服务器",[31,144404,144405],{},"把自己网站上传到服务器上，可以让其他人访问",[55,144407],{"style":128667,"src":144408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[31,144410,144411,144414,144415],{},[49,144412,144413],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[49,144416,144417],{},"Web 服务器等",[31,144419,144420,144421,103277,144424,28583],{},"根据服务器在网络中所在的位置不同，又可分为 ",[49,144422,144423],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[49,144425,144426],{},"远程服务器",[19,144428,144430],{"id":144429},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[31,144432,144433],{},[49,144434,144435],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[31,144437,144438,144439],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2867,144440,144441],{"href":144441,"rel":144442},"http:\u002F\u002Ffree.3v.do\u002F",[2871],[176,144444,144445,144448,144451,144458],{},[27,144446,144447],{},"去免费空间网站注册账号。",[27,144449,144450],{},"记录下主机名、用户名、密码、域名。",[27,144452,144453,144454,144457],{},"利用 ",[196,144455,144456],{},"utftp"," 软件 上传网站到远程服务器",[27,144459,144460],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[31,144462,144463],{},"使用软件上传，对上传软件文件进行解压",[55,144465],{"style":128667,"src":144466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[55,144468],{"style":128667,"src":144469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[31,144471,144472],{},"输入刚刚申请的服务器账号信息：",[55,144474],{"style":128667,"src":144475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[55,144477],{"style":128667,"src":144478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[55,144480],{"style":128667,"src":144481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[55,144483],{"style":128667,"src":144484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[31,144486,144487],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[55,144489],{"style":128667,"src":144490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[31,144492,144493],{},"浏览器输入域名即可访问",[31,144495,144496],{},"首页一定必须是index",{"title":57,"searchDepth":36,"depth":36,"links":144498},[144499],{"id":144401,"depth":36,"text":144402,"children":144500},[144501],{"id":144429,"depth":73,"text":144430},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144393,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144508,"title":144509,"body":144510,"description":3023,"extension":3024,"meta":145437,"navigation":906,"path":145438,"seo":145439,"stem":145440,"__hash__":145441},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144511,"toc":145420},[144512,144515,144519,144522,144525,144536,144539,144543,144547,144552,144555,144558,144561,144564,144568,144594,144598,144602,144605,144608,144612,144645,144649,144652,144655,144719,144723,144727,144730,144733,144736,144740,144785,144789,144792,144822,144826,144830,144833,144836,144840,144843,144912,144915,145023,145025,145031,145035,145038,145041,145137,145140,145144,145168,145172,145175,145179,145182,145186,145189,145192,145195,145198,145202,145205,145208,145212,145216,145219,145222,145225,145228,145232,145235,145239,145242,145245,145290,145294,145298,145301,145304,145307,145339,145343,145346,145380,145384,145387,145417],[10,144513,144509],{"id":144514},"_18-2d动画与3d转换",[14,144516,144518],{"id":144517},"_181-css3-2d转换","18.1 CSS3 2D转换",[31,144520,144521],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[31,144523,144524],{},"转换（transform）你可以简单理解为变形",[176,144526,144527,144530,144533],{},[27,144528,144529],{},"移动：translate",[27,144531,144532],{},"旋转：rotate",[27,144534,144535],{},"缩放：scale",[55,144537],{"style":128667,"src":144538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[19,144540,144542],{"id":144541},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[627,144544,144546],{"id":144545},"_18111-translate介绍","18.1.1.1 translate介绍",[31,144548,144549,144550],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[49,144551,135470],{},[55,144553],{"style":128667,"src":144554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[31,144556,144557],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[31,144559,144560],{},"对于行内元素无效",[31,144562,144563],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[627,144565,144567],{"id":144566},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[190,144569,144570],{"className":128811,"code":141000,"language":128813,"meta":57,"style":57},[196,144571,144572,144578,144590],{"__ignoreMap":57},[199,144573,144574,144576],{"class":201,"line":202},[199,144575,1220],{"class":874},[199,144577,1012],{"class":205},[199,144579,144580,144582,144584,144586,144588],{"class":201,"line":36},[199,144581,72729],{"class":1018},[199,144583,1022],{"class":205},[199,144585,1025],{"class":1018},[199,144587,1158],{"class":1018},[199,144589,1028],{"class":205},[199,144591,144592],{"class":201,"line":73},[199,144593,671],{"class":205},[19,144595,144597],{"id":144596},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[627,144599,144601],{"id":144600},"_18121-rotate介绍","18.1.2.1 rotate介绍",[31,144603,144604],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[55,144606],{"style":128667,"src":144607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[627,144609,144611],{"id":144610},"_18122-旋转效果","18.1.2.2 旋转效果",[190,144613,144615],{"className":128811,"code":144614,"language":128813,"meta":57,"style":57},"div {\n  transform: rotate(45deg);\n}\n",[196,144616,144617,144623,144641],{"__ignoreMap":57},[199,144618,144619,144621],{"class":201,"line":202},[199,144620,1220],{"class":874},[199,144622,1012],{"class":205},[199,144624,144625,144627,144629,144632,144634,144636,144639],{"class":201,"line":36},[199,144626,138795],{"class":1018},[199,144628,1022],{"class":205},[199,144630,144631],{"class":1018},"rotate",[199,144633,1537],{"class":205},[199,144635,3610],{"class":1018},[199,144637,144638],{"class":1086},"deg",[199,144640,5623],{"class":205},[199,144642,144643],{"class":201,"line":73},[199,144644,671],{"class":205},[627,144646,144648],{"id":144647},"_18123-三角做法","18.1.2.3 三角做法",[31,144650,144651],{},"该下标当经过最外层大盒子时会实现向上反转",[55,144653],{"style":128667,"src":144654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[190,144656,144657],{"className":128811,"code":137331,"language":128813,"meta":57,"style":57},[196,144658,144659,144663,144669,144679,144689,144705,144715],{"__ignoreMap":57},[199,144660,144661],{"class":201,"line":202},[199,144662,137338],{"class":1454},[199,144664,144665,144667],{"class":201,"line":36},[199,144666,137343],{"class":878},[199,144668,1012],{"class":205},[199,144670,144671,144673,144675,144677],{"class":201,"line":73},[199,144672,72827],{"class":1018},[199,144674,1022],{"class":205},[199,144676,1025],{"class":1018},[199,144678,1028],{"class":205},[199,144680,144681,144683,144685,144687],{"class":201,"line":333},[199,144682,73047],{"class":1018},[199,144684,1022],{"class":205},[199,144686,1025],{"class":1018},[199,144688,1028],{"class":205},[199,144690,144691,144693,144695,144697,144699,144701,144703],{"class":201,"line":227},[199,144692,73155],{"class":1018},[199,144694,1022],{"class":205},[199,144696,3528],{"class":1018},[199,144698,1087],{"class":1086},[199,144700,1120],{"class":1018},[199,144702,66250],{"class":1018},[199,144704,1028],{"class":205},[199,144706,144707,144709,144711,144713],{"class":201,"line":238},[199,144708,137386],{"class":1018},[199,144710,1022],{"class":205},[199,144712,64628],{"class":1018},[199,144714,1028],{"class":205},[199,144716,144717],{"class":201,"line":252},[199,144718,671],{"class":205},[19,144720,144722],{"id":144721},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[627,144724,144726],{"id":144725},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[31,144728,144729],{},"设置中心点",[55,144731],{"style":128667,"src":144732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[31,144734,144735],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[627,144737,144739],{"id":144738},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[190,144741,144743],{"className":128811,"code":144742,"language":128813,"meta":57,"style":57},"\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",[196,144744,144745,144750,144756,144771,144776,144781],{"__ignoreMap":57},[199,144746,144747],{"class":201,"line":202},[199,144748,144749],{"class":1454},"\u002F* 转换中心点 *\u002F\n",[199,144751,144752,144754],{"class":201,"line":36},[199,144753,1220],{"class":874},[199,144755,1012],{"class":205},[199,144757,144758,144761,144763,144765,144767,144769],{"class":201,"line":73},[199,144759,144760],{"class":1018},"  transform-origin",[199,144762,1022],{"class":205},[199,144764,1197],{"class":1018},[199,144766,19989],{"class":1018},[199,144768,132674],{"class":205},[199,144770,137484],{"class":1454},[199,144772,144773],{"class":201,"line":333},[199,144774,144775],{"class":1454},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[199,144777,144778],{"class":201,"line":227},[199,144779,144780],{"class":1454},"  \u002F* transform-origin: left top; *\u002F\n",[199,144782,144783],{"class":201,"line":238},[199,144784,671],{"class":205},[627,144786,144788],{"id":144787},"_18133-旋转案例","18.1.3.3 旋转案例",[55,144790],{"style":128667,"src":144791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[190,144793,144794],{"className":128811,"code":144614,"language":128813,"meta":57,"style":57},[196,144795,144796,144802,144818],{"__ignoreMap":57},[199,144797,144798,144800],{"class":201,"line":202},[199,144799,1220],{"class":874},[199,144801,1012],{"class":205},[199,144803,144804,144806,144808,144810,144812,144814,144816],{"class":201,"line":36},[199,144805,138795],{"class":1018},[199,144807,1022],{"class":205},[199,144809,144631],{"class":1018},[199,144811,1537],{"class":205},[199,144813,3610],{"class":1018},[199,144815,144638],{"class":1086},[199,144817,5623],{"class":205},[199,144819,144820],{"class":201,"line":73},[199,144821,671],{"class":205},[19,144823,144825],{"id":144824},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[627,144827,144829],{"id":144828},"_18141-scale介绍","18.1.4.1 scale介绍",[31,144831,144832],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[55,144834],{"style":128667,"src":144835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[627,144837,144839],{"id":144838},"_18142-分页按钮","18.1.4.2 分页按钮",[55,144841],{"style":128667,"src":144842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[190,144844,144846],{"className":128811,"code":144845,"language":128813,"meta":57,"style":57},"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",[196,144847,144848,144854,144870,144874,144878,144883,144889,144903,144908],{"__ignoreMap":57},[199,144849,144850,144852],{"class":201,"line":202},[199,144851,1220],{"class":874},[199,144853,1012],{"class":205},[199,144855,144856,144858,144860,144863,144865,144868],{"class":201,"line":36},[199,144857,138795],{"class":1018},[199,144859,1022],{"class":205},[199,144861,144862],{"class":1018},"scale",[199,144864,1537],{"class":205},[199,144866,144867],{"class":1018},"1.2",[199,144869,5623],{"class":205},[199,144871,144872],{"class":201,"line":73},[199,144873,671],{"class":205},[199,144875,144876],{"class":201,"line":333},[199,144877,138272],{"class":205},[199,144879,144880],{"class":201,"line":227},[199,144881,144882],{"class":1454},"\u002F* 2D 缩放 *\u002F\n",[199,144884,144885,144887],{"class":201,"line":238},[199,144886,1220],{"class":874},[199,144888,1012],{"class":205},[199,144890,144891,144893,144895,144897,144899,144901],{"class":201,"line":252},[199,144892,138795],{"class":1018},[199,144894,1022],{"class":205},[199,144896,144862],{"class":1018},[199,144898,1537],{"class":205},[199,144900,144867],{"class":1018},[199,144902,5623],{"class":205},[199,144904,144905],{"class":201,"line":388},[199,144906,144907],{"class":1454},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[199,144909,144910],{"class":201,"line":415},[199,144911,671],{"class":205},[31,144913,144914],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[190,144916,144918],{"className":128811,"code":144917,"language":128813,"meta":57,"style":57},"\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",[196,144919,144920,144925,144935,144956,144977,144981,144986,144992,145019],{"__ignoreMap":57},[199,144921,144922],{"class":201,"line":202},[199,144923,144924],{"class":1454},"\u002F* 定义动画 *\u002F\n",[199,144926,144927,144930,144933],{"class":201,"line":36},[199,144928,144929],{"class":1086},"@keyframes",[199,144931,144932],{"class":8113}," move",[199,144934,1012],{"class":205},[199,144936,144937,144940,144942,144944,144946,144949,144951,144953],{"class":201,"line":73},[199,144938,144939],{"class":878},"  0%",[199,144941,82066],{"class":205},[199,144943,50974],{"class":1018},[199,144945,1022],{"class":205},[199,144947,144948],{"class":1018},"translateX",[199,144950,1537],{"class":205},[199,144952,1025],{"class":1018},[199,144954,144955],{"class":205},"); }\n",[199,144957,144958,144961,144963,144965,144967,144969,144971,144973,144975],{"class":201,"line":333},[199,144959,144960],{"class":878},"  100%",[199,144962,82066],{"class":205},[199,144964,50974],{"class":1018},[199,144966,1022],{"class":205},[199,144968,144948],{"class":1018},[199,144970,1537],{"class":205},[199,144972,3396],{"class":1018},[199,144974,1087],{"class":1086},[199,144976,144955],{"class":205},[199,144978,144979],{"class":201,"line":227},[199,144980,671],{"class":205},[199,144982,144983],{"class":201,"line":238},[199,144984,144985],{"class":1454},"\u002F* 调用动画 *\u002F\n",[199,144987,144988,144990],{"class":201,"line":252},[199,144989,1220],{"class":874},[199,144991,1012],{"class":205},[199,144993,144994,144997,144999,145001,145003,145005,145007,145009,145011,145014,145017],{"class":201,"line":388},[199,144995,144996],{"class":1018},"  animation",[199,144998,1022],{"class":205},[199,145000,137497],{"class":1018},[199,145002,1495],{"class":1018},[199,145004,3774],{"class":1086},[199,145006,80939],{"class":1018},[199,145008,1621],{"class":1018},[199,145010,3774],{"class":1086},[199,145012,145013],{"class":1018}," infinite",[199,145015,145016],{"class":1018}," alternate",[199,145018,1028],{"class":205},[199,145020,145021],{"class":201,"line":415},[199,145022,671],{"class":205},[31,145024,144914],{},[190,145026,145029],{"className":145027,"code":145028,"language":8084},[8082],"\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",[196,145030,145028],{"__ignoreMap":57},[627,145032,145034],{"id":145033},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[31,145036,145037],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[55,145039],{"style":128667,"src":145040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[190,145042,145043],{"className":128811,"code":144917,"language":128813,"meta":57,"style":57},[196,145044,145045,145049,145057,145075,145095,145099,145103,145109,145133],{"__ignoreMap":57},[199,145046,145047],{"class":201,"line":202},[199,145048,144924],{"class":1454},[199,145050,145051,145053,145055],{"class":201,"line":36},[199,145052,144929],{"class":1086},[199,145054,144932],{"class":8113},[199,145056,1012],{"class":205},[199,145058,145059,145061,145063,145065,145067,145069,145071,145073],{"class":201,"line":73},[199,145060,144939],{"class":878},[199,145062,82066],{"class":205},[199,145064,50974],{"class":1018},[199,145066,1022],{"class":205},[199,145068,144948],{"class":1018},[199,145070,1537],{"class":205},[199,145072,1025],{"class":1018},[199,145074,144955],{"class":205},[199,145076,145077,145079,145081,145083,145085,145087,145089,145091,145093],{"class":201,"line":333},[199,145078,144960],{"class":878},[199,145080,82066],{"class":205},[199,145082,50974],{"class":1018},[199,145084,1022],{"class":205},[199,145086,144948],{"class":1018},[199,145088,1537],{"class":205},[199,145090,3396],{"class":1018},[199,145092,1087],{"class":1086},[199,145094,144955],{"class":205},[199,145096,145097],{"class":201,"line":227},[199,145098,671],{"class":205},[199,145100,145101],{"class":201,"line":238},[199,145102,144985],{"class":1454},[199,145104,145105,145107],{"class":201,"line":252},[199,145106,1220],{"class":874},[199,145108,1012],{"class":205},[199,145110,145111,145113,145115,145117,145119,145121,145123,145125,145127,145129,145131],{"class":201,"line":388},[199,145112,144996],{"class":1018},[199,145114,1022],{"class":205},[199,145116,137497],{"class":1018},[199,145118,1495],{"class":1018},[199,145120,3774],{"class":1086},[199,145122,80939],{"class":1018},[199,145124,1621],{"class":1018},[199,145126,3774],{"class":1086},[199,145128,145013],{"class":1018},[199,145130,145016],{"class":1018},[199,145132,1028],{"class":205},[199,145134,145135],{"class":201,"line":415},[199,145136,671],{"class":205},[31,145138,145139],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[19,145141,145143],{"id":145142},"_1823-知识点回顾","18.2.3 知识点回顾",[190,145145,145146],{"className":128811,"code":130980,"language":128813,"meta":57,"style":57},[196,145147,145148,145154,145164],{"__ignoreMap":57},[199,145149,145150,145152],{"class":201,"line":202},[199,145151,1220],{"class":874},[199,145153,1012],{"class":205},[199,145155,145156,145158,145160,145162],{"class":201,"line":36},[199,145157,130993],{"class":1018},[199,145159,1022],{"class":205},[199,145161,63995],{"class":1018},[199,145163,1028],{"class":205},[199,145165,145166],{"class":201,"line":73},[199,145167,671],{"class":205},[14,145169,145171],{"id":145170},"_183-3d-转换","18.3 3D 转换",[31,145173,145174],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[19,145176,145178],{"id":145177},"_1831-坐标轴认识","18.3.1 坐标轴认识",[55,145180],{"style":128667,"src":145181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[19,145183,145185],{"id":145184},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[55,145187],{"style":128667,"src":145188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[31,145190,145191],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[31,145193,145194],{},"translate3d的效果需要搭配透视perspective来使用",[55,145196],{"style":128667,"src":145197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[19,145199,145201],{"id":145200},"_1833-透视-perspective","18.3.3 透视 perspective",[55,145203],{"style":128667,"src":145204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[31,145206,145207],{},"透视写在父盒子上，单位为像素",[19,145209,145211],{"id":145210},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[627,145213,145215],{"id":145214},"_18341-分开解释","18.3.4.1 分开解释",[55,145217],{"style":128667,"src":145218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[55,145220],{"style":128667,"src":145221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[55,145223],{"style":128667,"src":145224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[31,145226,145227],{},"总结来说就是左手原则",[627,145229,145231],{"id":145230},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[55,145233],{"style":128667,"src":145234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[19,145236,145238],{"id":145237},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[55,145240],{"style":128667,"src":145241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[55,145243],{"style":128667,"src":145244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[190,145246,145248],{"className":128811,"code":145247,"language":128813,"meta":57,"style":57},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[196,145249,145250,145256,145269,145286],{"__ignoreMap":57},[199,145251,145252,145254],{"class":201,"line":202},[199,145253,1220],{"class":874},[199,145255,1012],{"class":205},[199,145257,145258,145261,145263,145265,145267],{"class":201,"line":36},[199,145259,145260],{"class":1018},"  perspective",[199,145262,1022],{"class":205},[199,145264,67333],{"class":1018},[199,145266,1087],{"class":1086},[199,145268,1028],{"class":205},[199,145270,145271,145273,145275,145278,145280,145282,145284],{"class":201,"line":73},[199,145272,138795],{"class":1018},[199,145274,1022],{"class":205},[199,145276,145277],{"class":1018},"rotateX",[199,145279,1537],{"class":205},[199,145281,3610],{"class":1018},[199,145283,144638],{"class":1086},[199,145285,5623],{"class":205},[199,145287,145288],{"class":201,"line":333},[199,145289,671],{"class":205},[19,145291,145293],{"id":145292},"_1836-案例","18.3.6 案例",[627,145295,145297],{"id":145296},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[55,145299],{"style":128667,"src":145300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[55,145302],{"style":128667,"src":145303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[55,145305],{"style":128667,"src":145306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[190,145308,145310],{"className":128811,"code":145309,"language":128813,"meta":57,"style":57},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[196,145311,145312,145317,145323,145335],{"__ignoreMap":57},[199,145313,145314],{"class":201,"line":202},[199,145315,145316],{"class":1454},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[199,145318,145319,145321],{"class":201,"line":36},[199,145320,135808],{"class":878},[199,145322,1012],{"class":205},[199,145324,145325,145327,145329,145331,145333],{"class":201,"line":73},[199,145326,145260],{"class":1018},[199,145328,1022],{"class":205},[199,145330,67333],{"class":1018},[199,145332,1087],{"class":1086},[199,145334,1028],{"class":205},[199,145336,145337],{"class":201,"line":333},[199,145338,671],{"class":205},[627,145340,145342],{"id":145341},"_18362-3d导航栏","18.3.6.2 3D导航栏",[55,145344],{"style":128667,"src":145345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[190,145347,145348],{"className":129558,"code":132915,"language":129560,"meta":57,"style":57},[196,145349,145350,145354,145368,145372],{"__ignoreMap":57},[199,145351,145352],{"class":201,"line":202},[199,145353,132922],{"class":1454},[199,145355,145356,145358,145360,145362,145364,145366],{"class":201,"line":36},[199,145357,887],{"class":205},[199,145359,1220],{"class":874},[199,145361,55745],{"class":878},[199,145363,895],{"class":205},[199,145365,132935],{"class":898},[199,145367,882],{"class":205},[199,145369,145370],{"class":201,"line":73},[199,145371,132942],{"class":205},[199,145373,145374,145376,145378],{"class":201,"line":333},[199,145375,1414],{"class":205},[199,145377,1220],{"class":874},[199,145379,882],{"class":205},[627,145381,145383],{"id":145382},"_18363-旋转木马","18.3.6.3 旋转木马",[55,145385],{"style":128667,"src":145386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[190,145388,145389],{"className":128811,"code":144614,"language":128813,"meta":57,"style":57},[196,145390,145391,145397,145413],{"__ignoreMap":57},[199,145392,145393,145395],{"class":201,"line":202},[199,145394,1220],{"class":874},[199,145396,1012],{"class":205},[199,145398,145399,145401,145403,145405,145407,145409,145411],{"class":201,"line":36},[199,145400,138795],{"class":1018},[199,145402,1022],{"class":205},[199,145404,144631],{"class":1018},[199,145406,1537],{"class":205},[199,145408,3610],{"class":1018},[199,145410,144638],{"class":1086},[199,145412,5623],{"class":205},[199,145414,145415],{"class":201,"line":73},[199,145416,671],{"class":205},[1002,145418,145419],{},"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":57,"searchDepth":36,"depth":36,"links":145421},[145422,145429],{"id":144517,"depth":36,"text":144518,"children":145423},[145424,145425,145426,145427,145428],{"id":144541,"depth":73,"text":144542},{"id":144596,"depth":73,"text":144597},{"id":144721,"depth":73,"text":144722},{"id":144824,"depth":73,"text":144825},{"id":145142,"depth":73,"text":145143},{"id":145170,"depth":36,"text":145171,"children":145430},[145431,145432,145433,145434,145435,145436],{"id":145177,"depth":73,"text":145178},{"id":145184,"depth":73,"text":145185},{"id":145200,"depth":73,"text":145201},{"id":145210,"depth":73,"text":145211},{"id":145237,"depth":73,"text":145238},{"id":145292,"depth":73,"text":145293},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144509,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145443,"title":145444,"body":145445,"description":3023,"extension":3024,"meta":145648,"navigation":906,"path":145649,"seo":145650,"stem":145651,"__hash__":145652},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145446,"toc":145637},[145447,145450,145454,145457,145460,145464,145467,145470,145473,145477,145480,145484,145487,145491,145494,145498,145512,145516,145541,145544,145547,145564,145568,145572,145575,145578,145582,145585,145588,145606,145610,145613,145627,145631,145634],[10,145448,145444],{"id":145449},"_19-移动端基础-前缀现状与视口",[14,145451,145453],{"id":145452},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[55,145455],{"style":128667,"src":145456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[31,145458,145459],{},"意思就是加个前缀，增加兼容性",[14,145461,145463],{"id":145462},"_192-移动端现状认识","19.2 移动端现状认识",[55,145465],{"style":128667,"src":145466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[31,145468,145469],{},"调试方法：",[55,145471],{"style":128667,"src":145472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145474,145476],{"id":145475},"_193-视口","19.3 视口",[31,145478,145479],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[19,145481,145483],{"id":145482},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[55,145485],{"style":128667,"src":145486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[19,145488,145490],{"id":145489},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[55,145492],{"style":128667,"src":145493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[19,145495,145497],{"id":145496},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[176,145499,145500,145503,145506,145509],{},[27,145501,145502],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[27,145504,145505],{},"理想视口，对设备来讲，是最理想的视口尺寸",[27,145507,145508],{},"需要手动添写meta视口标签通知浏览器操作",[27,145510,145511],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[19,145513,145515],{"id":145514},"_1934-meta视口标签","19.3.4 meta视口标签",[190,145517,145519],{"className":129558,"code":145518,"language":129560,"meta":57,"style":57},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[196,145520,145521],{"__ignoreMap":57},[199,145522,145523,145525,145527,145529,145531,145533,145535,145537,145539],{"class":201,"line":202},[199,145524,887],{"class":205},[199,145526,924],{"class":874},[199,145528,967],{"class":878},[199,145530,895],{"class":205},[199,145532,972],{"class":898},[199,145534,951],{"class":878},[199,145536,895],{"class":205},[199,145538,979],{"class":898},[199,145540,882],{"class":205},[55,145542],{"style":128667,"src":145543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[31,145545,145546],{},"标准视口设置：",[24,145548,145549,145552,145555,145558,145561],{},[27,145550,145551],{},"视口宽度和设备保持一致",[27,145553,145554],{},"视口的默认缩放比例1.0",[27,145556,145557],{},"不允许用户自行缩放",[27,145559,145560],{},"最大允许的缩放比例1.0",[27,145562,145563],{},"最小允许的缩放比例1.0",[19,145565,145567],{"id":145566},"_1935-二倍图","19.3.5 二倍图",[627,145569,145571],{"id":145570},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[55,145573],{"style":128667,"src":145574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[55,145576],{"style":128667,"src":145577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[627,145579,145581],{"id":145580},"_19352-多倍图","19.3.5.2 多倍图",[55,145583],{"style":128667,"src":145584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[31,145586,145587],{},"二倍图法，代码如下：",[190,145589,145591],{"className":128811,"code":145590,"language":128813,"meta":57,"style":57},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[196,145592,145593,145598],{"__ignoreMap":57},[199,145594,145595],{"class":201,"line":202},[199,145596,145597],{"class":1454},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[199,145599,145600,145603],{"class":201,"line":36},[199,145601,145602],{"class":874},"background-size",[199,145604,145605],{"class":205},": 50% 50%;\n",[627,145607,145609],{"id":145608},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[55,145611],{"style":128667,"src":145612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[24,145614,145615,145618,145621,145624],{},[27,145616,145617],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[27,145619,145620],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[27,145622,145623],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[27,145625,145626],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[627,145628,145630],{"id":145629},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[55,145632],{"style":128667,"src":145633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1002,145635,145636],{},"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":57,"searchDepth":36,"depth":36,"links":145638},[145639,145640,145641],{"id":145452,"depth":36,"text":145453},{"id":145462,"depth":36,"text":145463},{"id":145475,"depth":36,"text":145476,"children":145642},[145643,145644,145645,145646,145647],{"id":145482,"depth":73,"text":145483},{"id":145489,"depth":73,"text":145490},{"id":145496,"depth":73,"text":145497},{"id":145514,"depth":73,"text":145515},{"id":145566,"depth":73,"text":145567},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145444,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145654,"title":145655,"body":145656,"description":3023,"extension":3024,"meta":146533,"navigation":906,"path":146534,"seo":146535,"stem":146536,"__hash__":146537},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145657,"toc":146517},[145658,145661,145665,145672,145675,145682,145685,145690,145693,145697,145701,145708,145711,145714,145718,145721,145724,145727,145730,145733,145737,145740,145744,145746,145749,145752,145755,145758,145760,145763,145765,145795,145797,145827,145831,145834,145838,145841,145858,145861,145864,145940,145942,145945,145948,145951,145954,145956,145959,145962,145966,145988,145991,145994,145998,146001,146007,146010,146014,146017,146020,146024,146027,146030,146033,146037,146040,146043,146046,146049,146053,146056,146060,146067,146070,146073,146076,146079,146089,146092,146095,146102,146105,146109,146112,146115,146119,146122,146125,146128,146173,146176,146179,146182,146184,146313,146315,146353,146356,146359,146361,146479,146481,146515],[10,145659,145655],{"id":145660},"_20-移动端布局实战上篇",[14,145662,145664],{"id":145663},"_201-移动端主流方案","20.1 移动端主流方案",[24,145666,145667],{},[27,145668,145669],{},[49,145670,145671],{},"单独移动端页面（主流）",[55,145673],{"style":128667,"src":145674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[24,145676,145677],{"start":36},[27,145678,145679],{},[49,145680,145681],{},"响应式兼容PC移动端",[55,145683],{"style":128667,"src":145684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[24,145686,145687],{"start":73},[27,145688,145689],{},"两种页面选型布局方式",[55,145691],{"style":128667,"src":145692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145694,145696],{"id":145695},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[19,145698,145700],{"id":145699},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[31,145702,145703,145704],{},"官网地址： ",[2867,145705,145706],{"href":145706,"rel":145707},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[2871],[55,145709],{"style":128667,"src":145710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[55,145712],{"style":128667,"src":145713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[19,145715,145717],{"id":145716},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[55,145719],{"style":128667,"src":145720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[55,145722],{"style":128667,"src":145723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[31,145725,145726],{},"去除高亮：",[31,145728,145729],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[31,145731,145732],{},"-webkit- tap-highlight-color: transparent;",[14,145734,145736],{"id":145735},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[55,145738],{"style":128667,"src":145739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145741,145743],{"id":145742},"_204-流式布局案例","20.4 流式布局案例",[31,145745,3125],{},[31,145747,145748],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[31,145750,145751],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[31,145753,145754],{},"图片格式：",[55,145756],{"style":128667,"src":145757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[31,145759,137854],{},[55,145761],{"style":128667,"src":145762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[31,145764,142181],{},[190,145766,145767],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,145768,145769],{"__ignoreMap":57},[199,145770,145771,145773,145775,145777,145779,145781,145783,145785,145787,145789,145791,145793],{"class":201,"line":202},[199,145772,887],{"class":205},[199,145774,55],{"class":874},[199,145776,57498],{"class":878},[199,145778,895],{"class":205},[199,145780,136328],{"class":898},[199,145782,57506],{"class":878},[199,145784,895],{"class":205},[199,145786,136335],{"class":898},[199,145788,136338],{"class":878},[199,145790,895],{"class":205},[199,145792,136343],{"class":898},[199,145794,882],{"class":205},[31,145796,142270],{},[190,145798,145799],{"className":129558,"code":136313,"language":129560,"meta":57,"style":57},[196,145800,145801],{"__ignoreMap":57},[199,145802,145803,145805,145807,145809,145811,145813,145815,145817,145819,145821,145823,145825],{"class":201,"line":202},[199,145804,887],{"class":205},[199,145806,55],{"class":874},[199,145808,57498],{"class":878},[199,145810,895],{"class":205},[199,145812,136328],{"class":898},[199,145814,57506],{"class":878},[199,145816,895],{"class":205},[199,145818,136335],{"class":898},[199,145820,136338],{"class":878},[199,145822,895],{"class":205},[199,145824,136343],{"class":898},[199,145826,882],{"class":205},[14,145828,145830],{"id":145829},"_205-flex布局","20.5 flex布局",[55,145832],{"style":128667,"src":145833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[19,145835,145837],{"id":145836},"_2051-布局原理","20.5.1 布局原理",[31,145839,145840],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[176,145842,145843,145846,145849,145852,145855],{},[27,145844,145845],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[27,145847,145848],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[27,145850,145851],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[27,145853,145854],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[27,145856,145857],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[31,145859,145860],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[31,145862,145863],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[190,145865,145867],{"className":128811,"code":145866,"language":128813,"meta":57,"style":57},"\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",[196,145868,145869,145874,145881,145891,145903,145914,145925,145936],{"__ignoreMap":57},[199,145870,145871],{"class":201,"line":202},[199,145872,145873],{"class":1454},"\u002F* Flex 弹性布局 *\u002F\n",[199,145875,145876,145879],{"class":201,"line":36},[199,145877,145878],{"class":878},".container",[199,145880,1012],{"class":205},[199,145882,145883,145885,145887,145889],{"class":201,"line":73},[199,145884,130427],{"class":1018},[199,145886,1022],{"class":205},[199,145888,1070],{"class":1018},[199,145890,1028],{"class":205},[199,145892,145893,145896,145898,145901],{"class":201,"line":333},[199,145894,145895],{"class":1018},"  flex-direction",[199,145897,1022],{"class":205},[199,145899,145900],{"class":1018},"row",[199,145902,1028],{"class":205},[199,145904,145905,145908,145910,145912],{"class":201,"line":227},[199,145906,145907],{"class":1018},"  justify-content",[199,145909,1022],{"class":205},[199,145911,1282],{"class":1018},[199,145913,1028],{"class":205},[199,145915,145916,145919,145921,145923],{"class":201,"line":238},[199,145917,145918],{"class":1018},"  align-items",[199,145920,1022],{"class":205},[199,145922,1197],{"class":1018},[199,145924,1028],{"class":205},[199,145926,145927,145930,145932,145934],{"class":201,"line":252},[199,145928,145929],{"class":1018},"  flex-wrap",[199,145931,1022],{"class":205},[199,145933,80869],{"class":1018},[199,145935,1028],{"class":205},[199,145937,145938],{"class":201,"line":388},[199,145939,671],{"class":205},[31,145941,72712],{},[31,145943,145944],{},".form-item .male-label {",[31,145946,145947],{},"   margin-right: 20px;",[31,145949,145950],{},"   display: inline-flex;",[31,145952,145953],{},"   align-items: center;",[31,145955,759],{},[55,145957],{"style":128667,"src":145958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[55,145960],{"style":128667,"src":145961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[19,145963,145965],{"id":145964},"_2052-常见父项属性","20.5.2 常见父项属性",[24,145967,145968,145971,145974,145977,145980,145983,145986],{},[27,145969,145970],{},"flex-direction：设置主轴的方向",[27,145972,145973],{},"justify-content：设置主轴上的子元素排列方式",[27,145975,145976],{},"flex-wrap：设置子元素是否换行",[27,145978,145979],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[27,145981,145982],{},"align-items：设置侧轴上的子元素排列方式（单行）",[27,145984,145985],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[27,145987,145970],{},[55,145989],{"style":128667,"src":145990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[55,145992],{"style":128667,"src":145993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[24,145995,145996],{"start":36},[27,145997,145973],{},[55,145999],{"style":128667,"src":146000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[31,146002,146003,146006],{},[196,146004,146005],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[31,146008,146009],{},"跟着主轴走",[24,146011,146012],{"start":73},[27,146013,145976],{},[55,146015],{"style":128667,"src":146016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[31,146018,146019],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[24,146021,146022],{"start":333},[27,146023,145979],{},[55,146025],{"style":128667,"src":146026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[31,146028,146029],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[31,146031,146032],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[24,146034,146035],{"start":227},[27,146036,145982],{},[55,146038],{"style":128667,"src":146039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[31,146041,146042],{},"align-items与align-content之间的区别：",[31,146044,146045],{},"单找items，多找content",[55,146047],{"style":128667,"src":146048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[24,146050,146051],{"start":238},[27,146052,145985],{},[55,146054],{"style":128667,"src":146055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[19,146057,146059],{"id":146058},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[24,146061,146062],{},[27,146063,146064],{},[49,146065,146066],{},"flex 属性",[31,146068,146069],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[55,146071],{"style":128667,"src":146072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[31,146074,146075],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[31,146077,146078],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[24,146080,146081],{"start":36},[27,146082,146083,16656,146086],{},[49,146084,146085],{},"align-self",[49,146087,146088],{},"控制子项自己在侧轴上的排列方式",[55,146090],{"style":128667,"src":146091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[31,146093,146094],{},"单个子盒子在父盒子侧轴上的排列方式",[24,146096,146097],{"start":73},[27,146098,146099,146101],{},[49,146100,97556],{}," 属性定义项目的排列顺序",[55,146103],{"style":128667,"src":146104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[19,146106,146108],{"id":146107},"_2054-背景线性渐变","20.5.4 背景线性渐变",[55,146110],{"style":128667,"src":146111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[31,146113,146114],{},"必须要添加浏览器的私有前缀",[19,146116,146118],{"id":146117},"_2055-携程网首页案例","20.5.5 携程网首页案例",[31,146120,146121],{},"学到最重要的知识：",[31,146123,146124],{},"flex处理这样的布局思路",[55,146126],{"style":128667,"src":146127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[190,146129,146131],{"className":128811,"code":146130,"language":128813,"meta":57,"style":57},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[196,146132,146133,146139,146149,146159,146169],{"__ignoreMap":57},[199,146134,146135,146137],{"class":201,"line":202},[199,146136,145878],{"class":878},[199,146138,1012],{"class":205},[199,146140,146141,146143,146145,146147],{"class":201,"line":36},[199,146142,130427],{"class":1018},[199,146144,1022],{"class":205},[199,146146,1070],{"class":1018},[199,146148,1028],{"class":205},[199,146150,146151,146153,146155,146157],{"class":201,"line":73},[199,146152,145907],{"class":1018},[199,146154,1022],{"class":205},[199,146156,1197],{"class":1018},[199,146158,1028],{"class":205},[199,146160,146161,146163,146165,146167],{"class":201,"line":333},[199,146162,145918],{"class":1018},[199,146164,1022],{"class":205},[199,146166,1197],{"class":1018},[199,146168,1028],{"class":205},[199,146170,146171],{"class":201,"line":227},[199,146172,671],{"class":205},[31,146174,146175],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[31,146177,146178],{},"使用属性选择器",[55,146180],{"style":128667,"src":146181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[31,146183,71148],{},[190,146185,146187],{"className":129558,"code":146186,"language":129560,"meta":57,"style":57},"\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",[196,146188,146189,146194,146208,146213,146233,146238,146257,146262,146281,146286,146305],{"__ignoreMap":57},[199,146190,146191],{"class":201,"line":202},[199,146192,146193],{"class":1454},"\u003C!-- 携程网移动端案例结构 -->\n",[199,146195,146196,146198,146200,146202,146204,146206],{"class":201,"line":36},[199,146197,887],{"class":205},[199,146199,1220],{"class":874},[199,146201,55745],{"class":878},[199,146203,895],{"class":205},[199,146205,94582],{"class":898},[199,146207,882],{"class":205},[199,146209,146210],{"class":201,"line":73},[199,146211,146212],{"class":1454},"  \u003C!-- 搜索栏 -->\n",[199,146214,146215,146217,146219,146221,146223,146226,146229,146231],{"class":201,"line":333},[199,146216,1824],{"class":205},[199,146218,1220],{"class":874},[199,146220,55745],{"class":878},[199,146222,895],{"class":205},[199,146224,146225],{"class":898},"\"search-index\"",[199,146227,146228],{"class":205},">...\u003C\u002F",[199,146230,1220],{"class":874},[199,146232,882],{"class":205},[199,146234,146235],{"class":201,"line":227},[199,146236,146237],{"class":1454},"  \u003C!-- 焦点图 -->\n",[199,146239,146240,146242,146244,146246,146248,146251,146253,146255],{"class":201,"line":238},[199,146241,1824],{"class":205},[199,146243,1220],{"class":874},[199,146245,55745],{"class":878},[199,146247,895],{"class":205},[199,146249,146250],{"class":898},"\"focus\"",[199,146252,146228],{"class":205},[199,146254,1220],{"class":874},[199,146256,882],{"class":205},[199,146258,146259],{"class":201,"line":252},[199,146260,146261],{"class":1454},"  \u003C!-- 主导航 -->\n",[199,146263,146264,146266,146268,146270,146272,146275,146277,146279],{"class":201,"line":388},[199,146265,1824],{"class":205},[199,146267,1220],{"class":874},[199,146269,55745],{"class":878},[199,146271,895],{"class":205},[199,146273,146274],{"class":898},"\"local-nav\"",[199,146276,146228],{"class":205},[199,146278,1220],{"class":874},[199,146280,882],{"class":205},[199,146282,146283],{"class":201,"line":415},[199,146284,146285],{"class":1454},"  \u003C!-- 子导航 -->\n",[199,146287,146288,146290,146292,146294,146296,146299,146301,146303],{"class":201,"line":426},[199,146289,1824],{"class":205},[199,146291,1220],{"class":874},[199,146293,55745],{"class":878},[199,146295,895],{"class":205},[199,146297,146298],{"class":898},"\"nav-common\"",[199,146300,146228],{"class":205},[199,146302,1220],{"class":874},[199,146304,882],{"class":205},[199,146306,146307,146309,146311],{"class":201,"line":1015},[199,146308,1414],{"class":205},[199,146310,1220],{"class":874},[199,146312,882],{"class":205},[31,146314,72712],{},[190,146316,146317],{"className":128811,"code":139263,"language":128813,"meta":57,"style":57},[196,146318,146319,146333,146349],{"__ignoreMap":57},[199,146320,146321,146323,146325,146327,146329,146331],{"class":201,"line":202},[199,146322,56080],{"class":874},[199,146324,1662],{"class":205},[199,146326,105366],{"class":878},[199,146328,895],{"class":1086},[199,146330,64958],{"class":898},[199,146332,139280],{"class":205},[199,146334,146335,146337,146339,146341,146343,146345,146347],{"class":201,"line":36},[199,146336,73155],{"class":1018},[199,146338,1022],{"class":205},[199,146340,1115],{"class":1018},[199,146342,1087],{"class":1086},[199,146344,1120],{"class":1018},[199,146346,132391],{"class":1018},[199,146348,1028],{"class":205},[199,146350,146351],{"class":201,"line":73},[199,146352,671],{"class":205},[31,146354,146355],{},"总代码和效果展示：",[55,146357],{"style":128667,"src":146358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[31,146360,71148],{},[190,146362,146363],{"className":129558,"code":146186,"language":129560,"meta":57,"style":57},[196,146364,146365,146369,146383,146387,146405,146409,146427,146431,146449,146453,146471],{"__ignoreMap":57},[199,146366,146367],{"class":201,"line":202},[199,146368,146193],{"class":1454},[199,146370,146371,146373,146375,146377,146379,146381],{"class":201,"line":36},[199,146372,887],{"class":205},[199,146374,1220],{"class":874},[199,146376,55745],{"class":878},[199,146378,895],{"class":205},[199,146380,94582],{"class":898},[199,146382,882],{"class":205},[199,146384,146385],{"class":201,"line":73},[199,146386,146212],{"class":1454},[199,146388,146389,146391,146393,146395,146397,146399,146401,146403],{"class":201,"line":333},[199,146390,1824],{"class":205},[199,146392,1220],{"class":874},[199,146394,55745],{"class":878},[199,146396,895],{"class":205},[199,146398,146225],{"class":898},[199,146400,146228],{"class":205},[199,146402,1220],{"class":874},[199,146404,882],{"class":205},[199,146406,146407],{"class":201,"line":227},[199,146408,146237],{"class":1454},[199,146410,146411,146413,146415,146417,146419,146421,146423,146425],{"class":201,"line":238},[199,146412,1824],{"class":205},[199,146414,1220],{"class":874},[199,146416,55745],{"class":878},[199,146418,895],{"class":205},[199,146420,146250],{"class":898},[199,146422,146228],{"class":205},[199,146424,1220],{"class":874},[199,146426,882],{"class":205},[199,146428,146429],{"class":201,"line":252},[199,146430,146261],{"class":1454},[199,146432,146433,146435,146437,146439,146441,146443,146445,146447],{"class":201,"line":388},[199,146434,1824],{"class":205},[199,146436,1220],{"class":874},[199,146438,55745],{"class":878},[199,146440,895],{"class":205},[199,146442,146274],{"class":898},[199,146444,146228],{"class":205},[199,146446,1220],{"class":874},[199,146448,882],{"class":205},[199,146450,146451],{"class":201,"line":415},[199,146452,146285],{"class":1454},[199,146454,146455,146457,146459,146461,146463,146465,146467,146469],{"class":201,"line":426},[199,146456,1824],{"class":205},[199,146458,1220],{"class":874},[199,146460,55745],{"class":878},[199,146462,895],{"class":205},[199,146464,146298],{"class":898},[199,146466,146228],{"class":205},[199,146468,1220],{"class":874},[199,146470,882],{"class":205},[199,146472,146473,146475,146477],{"class":201,"line":1015},[199,146474,1414],{"class":205},[199,146476,1220],{"class":874},[199,146478,882],{"class":205},[31,146480,72712],{},[190,146482,146483],{"className":129558,"code":132915,"language":129560,"meta":57,"style":57},[196,146484,146485,146489,146503,146507],{"__ignoreMap":57},[199,146486,146487],{"class":201,"line":202},[199,146488,132922],{"class":1454},[199,146490,146491,146493,146495,146497,146499,146501],{"class":201,"line":36},[199,146492,887],{"class":205},[199,146494,1220],{"class":874},[199,146496,55745],{"class":878},[199,146498,895],{"class":205},[199,146500,132935],{"class":898},[199,146502,882],{"class":205},[199,146504,146505],{"class":201,"line":73},[199,146506,132942],{"class":205},[199,146508,146509,146511,146513],{"class":201,"line":333},[199,146510,1414],{"class":205},[199,146512,1220],{"class":874},[199,146514,882],{"class":205},[1002,146516,140212],{},{"title":57,"searchDepth":36,"depth":36,"links":146518},[146519,146520,146524,146525,146526],{"id":145663,"depth":36,"text":145664},{"id":145695,"depth":36,"text":145696,"children":146521},[146522,146523],{"id":145699,"depth":73,"text":145700},{"id":145716,"depth":73,"text":145717},{"id":145735,"depth":36,"text":145736},{"id":145742,"depth":36,"text":145743},{"id":145829,"depth":36,"text":145830,"children":146527},[146528,146529,146530,146531,146532],{"id":145836,"depth":73,"text":145837},{"id":145964,"depth":73,"text":145965},{"id":146058,"depth":73,"text":146059},{"id":146107,"depth":73,"text":146108},{"id":146117,"depth":73,"text":146118},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145655,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146539,"title":146540,"body":146541,"description":3023,"extension":3024,"meta":147768,"navigation":906,"path":147769,"seo":147770,"stem":147771,"__hash__":147772},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146542,"toc":147746},[146543,146546,146550,146554,146557,146560,146564,146569,146572,146575,146578,146581,146584,146641,146644,146649,146652,146655,146659,146670,146674,146677,146680,146687,146692,146696,146699,146705,146708,146712,146715,146722,146725,146728,146735,146738,146745,146748,146751,146758,146761,146764,146766,146783,146787,146790,146793,146796,146800,146803,146806,146809,146812,146815,146818,146820,146823,146826,146888,146891,147001,147008,147014,147017,147020,147024,147027,147031,147036,147039,147046,147049,147055,147060,147063,147066,147069,147072,147075,147078,147081,147084,147140,147142,147168,147172,147175,147178,147181,147189,147192,147195,147199,147255,147258,147262,147268,147279,147282,147287,147290,147293,147299,147302,147305,147308,147311,147314,147317,147320,147323,147348,147354,147357,147360,147363,147366,147369,147372,147377,147380,147383,147386,147394,147397,147404,147407,147410,147412,147436,147438,147441,147444,147447,147450,147453,147456,147459,147493,147496,147499,147533,147540,147543,147546,147549,147552,147555,147558,147565,147568,147571,147574,147577,147584,147587,147590,147597,147600,147603,147607,147610,147613,147616,147619,147622,147625,147628,147631,147633,147657,147659,147683,147687,147698,147701,147704,147707,147710,147713,147716,147719,147722,147725,147728,147731,147734,147737,147740,147743],[10,146544,146540],{"id":146545},"_21-移动端布局实战下篇",[14,146547,146549],{"id":146548},"_211-rem适配布局","21.1 rem适配布局",[19,146551,146553],{"id":146552},"_2111-rem单位","21.1.1 rem单位",[55,146555],{"style":128667,"src":146556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[31,146558,146559],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[19,146561,146563],{"id":146562},"_2112-媒体查询","21.1.2 媒体查询",[24,146565,146566],{},[27,146567,146568],{},"参数介绍",[55,146570],{"style":128667,"src":146571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[55,146573],{"style":128667,"src":146574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[55,146576],{"style":128667,"src":146577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[55,146579],{"style":128667,"src":146580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[55,146582],{"style":128667,"src":146583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[190,146585,146587],{"className":128811,"code":146586,"language":128813,"meta":57,"style":57},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[196,146588,146589,146594,146613,146620,146633,146637],{"__ignoreMap":57},[199,146590,146591],{"class":201,"line":202},[199,146592,146593],{"class":1454},"\u002F* 媒体查询 *\u002F\n",[199,146595,146596,146599,146601,146604,146606,146609,146611],{"class":201,"line":36},[199,146597,146598],{"class":1086},"@media",[199,146600,1484],{"class":205},[199,146602,146603],{"class":1018},"max-width",[199,146605,1022],{"class":205},[199,146607,146608],{"class":1018},"768",[199,146610,1087],{"class":1086},[199,146612,1513],{"class":205},[199,146614,146615,146618],{"class":201,"line":73},[199,146616,146617],{"class":878},"  .container",[199,146619,1012],{"class":205},[199,146621,146622,146625,146627,146629,146631],{"class":201,"line":333},[199,146623,146624],{"class":1018},"    width",[199,146626,1022],{"class":205},[199,146628,3396],{"class":1018},[199,146630,3412],{"class":1086},[199,146632,1028],{"class":205},[199,146634,146635],{"class":201,"line":227},[199,146636,129607],{"class":205},[199,146638,146639],{"class":201,"line":238},[199,146640,671],{"class":205},[31,146642,146643],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[24,146645,146646],{"start":36},[27,146647,146648],{},"引入资源",[55,146650],{"style":128667,"src":146651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[31,146653,146654],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[19,146656,146658],{"id":146657},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[176,146660,146661,146664,146667],{},[27,146662,146663],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[27,146665,146666],{},"媒体查询可以根据不同设备宽度来修改样式",[27,146668,146669],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146671,146673],{"id":146672},"_212-less基础","21.2 Less基础",[31,146675,146676],{},"css冗余度较高，不利于复用，没有很好的计算能力",[31,146678,146679],{},"Less可以解决该问题，它是css的扩展语言",[31,146681,146682,146683],{},"Less中文网址： ",[2867,146684,146685],{"href":146685,"rel":146686},"http:\u002F\u002Flesscss.cn\u002F",[2871],[31,146688,146689],{},[49,146690,146691],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[19,146693,146695],{"id":146694},"_2121-less安装","21.2.1 less安装",[31,146697,146698],{},"如果使用vscode，则无需进行下方安装步骤",[31,146700,146701],{},[2867,146702,146703],{"href":146703,"rel":146704},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[2871],[55,146706],{"style":128667,"src":146707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[19,146709,146711],{"id":146710},"_2122-less使用","21.2.2 less使用",[31,146713,146714],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[24,146716,146717],{},[27,146718,146719],{},[49,146720,146721],{},"Less 变量",[55,146723],{"style":128667,"src":146724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[55,146726],{"style":128667,"src":146727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[24,146729,146730],{"start":36},[27,146731,146732],{},[49,146733,146734],{},"Less 编译",[55,146736],{"style":128667,"src":146737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[24,146739,146740],{"start":73},[27,146741,146742],{},[49,146743,146744],{},"Less 嵌套",[55,146746],{"style":128667,"src":146747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[55,146749],{"style":128667,"src":146750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[24,146752,146753],{"start":333},[27,146754,146755],{},[49,146756,146757],{},"Less 运算",[55,146759],{"style":128667,"src":146760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[31,146762,146763],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[31,146765,3125],{},[176,146767,146768,146771,146774,146777,146780],{},[27,146769,146770],{},"乘号（*）和除号（\u002F）的写法",[27,146772,146773],{},"运算符中间左右有个空格隔开 1px + 5",[27,146775,146776],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[27,146778,146779],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[27,146781,146782],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146784,146786],{"id":146785},"_213-rem-适配方案","21.3 rem 适配方案",[31,146788,146789],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[31,146791,146792],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[55,146794],{"style":128667,"src":146795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[19,146797,146799],{"id":146798},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[31,146801,146802],{},"rem + 媒体查询 + less 技术",[55,146804],{"style":128667,"src":146805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[31,146807,146808],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[31,146810,146811],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[55,146813],{"style":128667,"src":146814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[31,146816,146817],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[31,146819,2323],{},[55,146821],{"style":128667,"src":146822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[31,146824,146825],{},"index.html:",[190,146827,146829],{"className":128811,"code":146828,"language":128813,"meta":57,"style":57},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[196,146830,146831,146836,146842,146858,146862,146868,146884],{"__ignoreMap":57},[199,146832,146833],{"class":201,"line":202},[199,146834,146835],{"class":1454},"\u002F* rem 适配方案 *\u002F\n",[199,146837,146838,146840],{"class":201,"line":36},[199,146839,194],{"class":874},[199,146841,1012],{"class":205},[199,146843,146844,146846,146848,146851,146853,146855],{"class":201,"line":73},[199,146845,72885],{"class":1018},[199,146847,1022],{"class":205},[199,146849,146850],{"class":1018},"62.5",[199,146852,3412],{"class":1086},[199,146854,132674],{"class":205},[199,146856,146857],{"class":1454},"\u002F* 1rem = 10px *\u002F\n",[199,146859,146860],{"class":201,"line":333},[199,146861,671],{"class":205},[199,146863,146864,146866],{"class":201,"line":227},[199,146865,132659],{"class":878},[199,146867,1012],{"class":205},[199,146869,146870,146872,146874,146876,146879,146881],{"class":201,"line":238},[199,146871,72827],{"class":1018},[199,146873,1022],{"class":205},[199,146875,3528],{"class":1018},[199,146877,146878],{"class":1086},"rem",[199,146880,132674],{"class":205},[199,146882,146883],{"class":1454},"\u002F* 100px *\u002F\n",[199,146885,146886],{"class":201,"line":252},[199,146887,671],{"class":205},[31,146889,146890],{},"common.less",[190,146892,146894],{"className":128811,"code":146893,"language":128813,"meta":57,"style":57},"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",[196,146895,146896,146902,146917,146921,146927,146941,146945,146949,146953,146959,146973,146977,146983,146997],{"__ignoreMap":57},[199,146897,146898,146900],{"class":201,"line":202},[199,146899,194],{"class":874},[199,146901,1012],{"class":205},[199,146903,146904,146906,146908,146910,146912,146914],{"class":201,"line":36},[199,146905,72885],{"class":1018},[199,146907,1022],{"class":205},[199,146909,146850],{"class":1018},[199,146911,3412],{"class":1086},[199,146913,28910],{"class":205},[199,146915,146916],{"class":1454},"\u002F* 10px *\u002F\n",[199,146918,146919],{"class":201,"line":73},[199,146920,671],{"class":205},[199,146922,146923,146925],{"class":201,"line":333},[199,146924,1220],{"class":874},[199,146926,1012],{"class":205},[199,146928,146929,146931,146933,146935,146937,146939],{"class":201,"line":227},[199,146930,72827],{"class":1018},[199,146932,1022],{"class":205},[199,146934,3528],{"class":1018},[199,146936,146878],{"class":1086},[199,146938,28910],{"class":205},[199,146940,146883],{"class":1454},[199,146942,146943],{"class":201,"line":238},[199,146944,671],{"class":205},[199,146946,146947],{"class":201,"line":252},[199,146948,138272],{"class":205},[199,146950,146951],{"class":201,"line":388},[199,146952,146835],{"class":1454},[199,146954,146955,146957],{"class":201,"line":415},[199,146956,194],{"class":874},[199,146958,1012],{"class":205},[199,146960,146961,146963,146965,146967,146969,146971],{"class":201,"line":426},[199,146962,72885],{"class":1018},[199,146964,1022],{"class":205},[199,146966,146850],{"class":1018},[199,146968,3412],{"class":1086},[199,146970,132674],{"class":205},[199,146972,146857],{"class":1454},[199,146974,146975],{"class":201,"line":1015},[199,146976,671],{"class":205},[199,146978,146979,146981],{"class":201,"line":1031},[199,146980,132659],{"class":878},[199,146982,1012],{"class":205},[199,146984,146985,146987,146989,146991,146993,146995],{"class":201,"line":1043},[199,146986,72827],{"class":1018},[199,146988,1022],{"class":205},[199,146990,3528],{"class":1018},[199,146992,146878],{"class":1086},[199,146994,132674],{"class":205},[199,146996,146883],{"class":1454},[199,146998,146999],{"class":201,"line":1049},[199,147000,671],{"class":205},[31,147002,147003,147004,147007],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[26397,147005,147006],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[190,147009,147012],{"className":147010,"code":147011,"language":8084},[8082],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[196,147013,147011],{"__ignoreMap":57},[31,147015,147016],{},"less保存时会自动变成.css文件",[31,147018,147019],{},"好好搞懂上述代码写法",[19,147021,147023],{"id":147022},"_2132-样式导入样式","21.3.2 样式导入样式",[55,147025],{"style":128667,"src":147026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[19,147028,147030],{"id":147029},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[24,147032,147033],{},[27,147034,147035],{},"准备工作",[55,147037],{"style":128667,"src":147038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[31,147040,147041,147042],{},"github地址：",[2867,147043,147044],{"href":147044,"rel":147045},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[2871],[31,147047,147048],{},"下载之后，将index.js文件拖到项目中就可以了",[31,147050,147051,147052],{},"js文件引入到index.html中使用的是",[196,147053,147054],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[24,147056,147057],{"start":36},[27,147058,147059],{},"vscode插件",[55,147061],{"style":128667,"src":147062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[31,147064,147065],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[31,147067,147068],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[55,147070],{"style":128667,"src":147071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[31,147073,147074],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[55,147076],{"style":128667,"src":147077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[31,147079,147080],{},"修改成75就可以，alt+z为快捷键",[31,147082,147083],{},"index.css：",[190,147085,147086],{"className":128811,"code":146828,"language":128813,"meta":57,"style":57},[196,147087,147088,147092,147098,147112,147116,147122,147136],{"__ignoreMap":57},[199,147089,147090],{"class":201,"line":202},[199,147091,146835],{"class":1454},[199,147093,147094,147096],{"class":201,"line":36},[199,147095,194],{"class":874},[199,147097,1012],{"class":205},[199,147099,147100,147102,147104,147106,147108,147110],{"class":201,"line":73},[199,147101,72885],{"class":1018},[199,147103,1022],{"class":205},[199,147105,146850],{"class":1018},[199,147107,3412],{"class":1086},[199,147109,132674],{"class":205},[199,147111,146857],{"class":1454},[199,147113,147114],{"class":201,"line":333},[199,147115,671],{"class":205},[199,147117,147118,147120],{"class":201,"line":227},[199,147119,132659],{"class":878},[199,147121,1012],{"class":205},[199,147123,147124,147126,147128,147130,147132,147134],{"class":201,"line":238},[199,147125,72827],{"class":1018},[199,147127,1022],{"class":205},[199,147129,3528],{"class":1018},[199,147131,146878],{"class":1086},[199,147133,132674],{"class":205},[199,147135,146883],{"class":1454},[199,147137,147138],{"class":201,"line":252},[199,147139,671],{"class":205},[31,147141,146825],{},[190,147143,147144],{"className":128811,"code":129215,"language":128813,"meta":57,"style":57},[196,147145,147146,147152,147164],{"__ignoreMap":57},[199,147147,147148,147150],{"class":201,"line":202},[199,147149,1431],{"class":874},[199,147151,1012],{"class":205},[199,147153,147154,147156,147158,147160,147162],{"class":201,"line":36},[199,147155,72885],{"class":1018},[199,147157,1022],{"class":205},[199,147159,3681],{"class":1018},[199,147161,1087],{"class":1086},[199,147163,1028],{"class":205},[199,147165,147166],{"class":201,"line":73},[199,147167,671],{"class":205},[14,147169,147171],{"id":147170},"_214-响应式开发","21.4 响应式开发",[31,147173,147174],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[55,147176],{"style":128667,"src":147177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[31,147179,147180],{},"做法：",[176,147182,147183,147186],{},[27,147184,147185],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[27,147187,147188],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[55,147190],{"style":128667,"src":147191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[31,147193,147194],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[19,147196,147198],{"id":147197},"_2141-简单代码示范","21.4.1 简单代码示范",[190,147200,147201],{"className":128811,"code":146828,"language":128813,"meta":57,"style":57},[196,147202,147203,147207,147213,147227,147231,147237,147251],{"__ignoreMap":57},[199,147204,147205],{"class":201,"line":202},[199,147206,146835],{"class":1454},[199,147208,147209,147211],{"class":201,"line":36},[199,147210,194],{"class":874},[199,147212,1012],{"class":205},[199,147214,147215,147217,147219,147221,147223,147225],{"class":201,"line":73},[199,147216,72885],{"class":1018},[199,147218,1022],{"class":205},[199,147220,146850],{"class":1018},[199,147222,3412],{"class":1086},[199,147224,132674],{"class":205},[199,147226,146857],{"class":1454},[199,147228,147229],{"class":201,"line":333},[199,147230,671],{"class":205},[199,147232,147233,147235],{"class":201,"line":227},[199,147234,132659],{"class":878},[199,147236,1012],{"class":205},[199,147238,147239,147241,147243,147245,147247,147249],{"class":201,"line":238},[199,147240,72827],{"class":1018},[199,147242,1022],{"class":205},[199,147244,3528],{"class":1018},[199,147246,146878],{"class":1086},[199,147248,132674],{"class":205},[199,147250,146883],{"class":1454},[199,147252,147253],{"class":201,"line":252},[199,147254,671],{"class":205},[31,147256,147257],{},"父盒子一般命名为container",[19,147259,147261],{"id":147260},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[31,147263,147264,147265],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[49,147266,147267],{},"使得 Web 开发更加快捷",[176,147269,147270],{},[27,147271,147272,147273],{},"官网：",[49,147274,147275],{},[2867,147276,147277],{"href":147277,"rel":147278},"http:\u002F\u002Fgetbootstrap.com\u002F",[2871],[31,147280,147281],{},"可以直接去官网拿现成的东西",[24,147283,147284],{},[27,147285,147286],{},"Bootstrap的使用",[31,147288,147289],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[31,147291,147292],{},"Bootstrap 使用四步曲：",[31,147294,147295,147298],{},[49,147296,147297],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[55,147300],{"style":128667,"src":147301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[31,147303,147304],{},"打开Bootstrap官网，然后下载",[55,147306],{"style":128667,"src":147307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[55,147309],{"style":128667,"src":147310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[31,147312,147313],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[31,147315,147316],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[31,147318,147319],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[55,147321],{"style":128667,"src":147322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[190,147324,147326],{"className":128811,"code":147325,"language":128813,"meta":57,"style":57},".center {\n  color: red;\n}\n",[196,147327,147328,147334,147344],{"__ignoreMap":57},[199,147329,147330,147332],{"class":201,"line":202},[199,147331,129102],{"class":878},[199,147333,1012],{"class":205},[199,147335,147336,147338,147340,147342],{"class":201,"line":36},[199,147337,73164],{"class":1018},[199,147339,1022],{"class":205},[199,147341,59680],{"class":1018},[199,147343,1028],{"class":205},[199,147345,147346],{"class":201,"line":73},[199,147347,671],{"class":205},[31,147349,147350,147353],{},[196,147351,147352],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[55,147355],{"style":128667,"src":147356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[55,147358],{"style":128667,"src":147359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[55,147361],{"style":128667,"src":147362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[31,147364,147365],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[55,147367],{"style":128667,"src":147368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[31,147370,147371],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[24,147373,147374],{"start":36},[27,147375,147376],{},"布局容器",[55,147378],{"style":128667,"src":147379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[31,147381,147382],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[31,147384,147385],{},"container-fluid用于移动式布局比较方便",[24,147387,147388],{"start":73},[27,147389,147390,147391],{},"bootstrap ",[49,147392,147393],{},"栅格系统原理",[55,147395],{"style":128667,"src":147396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[24,147398,147399],{"start":333},[27,147400,147401],{},[49,147402,147403],{},"栅格选项参数",[55,147405],{"style":128667,"src":147406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[31,147408,147409],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[31,147411,2323],{},[190,147413,147414],{"className":128811,"code":147325,"language":128813,"meta":57,"style":57},[196,147415,147416,147422,147432],{"__ignoreMap":57},[199,147417,147418,147420],{"class":201,"line":202},[199,147419,129102],{"class":878},[199,147421,1012],{"class":205},[199,147423,147424,147426,147428,147430],{"class":201,"line":36},[199,147425,73164],{"class":1018},[199,147427,1022],{"class":205},[199,147429,59680],{"class":1018},[199,147431,1028],{"class":205},[199,147433,147434],{"class":201,"line":73},[199,147435,671],{"class":205},[31,147437,137854],{},[55,147439],{"style":128667,"src":147440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[31,147442,147443],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[31,147445,147446],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[31,147448,147449],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[31,147451,147452],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[31,147454,147455],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[31,147457,147458],{},"汇总展示说明：",[190,147460,147461],{"className":129558,"code":132915,"language":129560,"meta":57,"style":57},[196,147462,147463,147467,147481,147485],{"__ignoreMap":57},[199,147464,147465],{"class":201,"line":202},[199,147466,132922],{"class":1454},[199,147468,147469,147471,147473,147475,147477,147479],{"class":201,"line":36},[199,147470,887],{"class":205},[199,147472,1220],{"class":874},[199,147474,55745],{"class":878},[199,147476,895],{"class":205},[199,147478,132935],{"class":898},[199,147480,882],{"class":205},[199,147482,147483],{"class":201,"line":73},[199,147484,132942],{"class":205},[199,147486,147487,147489,147491],{"class":201,"line":333},[199,147488,1414],{"class":205},[199,147490,1220],{"class":874},[199,147492,882],{"class":205},[55,147494],{"style":128667,"src":147495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[31,147497,147498],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[190,147500,147501],{"className":129558,"code":132915,"language":129560,"meta":57,"style":57},[196,147502,147503,147507,147521,147525],{"__ignoreMap":57},[199,147504,147505],{"class":201,"line":202},[199,147506,132922],{"class":1454},[199,147508,147509,147511,147513,147515,147517,147519],{"class":201,"line":36},[199,147510,887],{"class":205},[199,147512,1220],{"class":874},[199,147514,55745],{"class":878},[199,147516,895],{"class":205},[199,147518,132935],{"class":898},[199,147520,882],{"class":205},[199,147522,147523],{"class":201,"line":73},[199,147524,132942],{"class":205},[199,147526,147527,147529,147531],{"class":201,"line":333},[199,147528,1414],{"class":205},[199,147530,1220],{"class":874},[199,147532,882],{"class":205},[24,147534,147535],{"start":227},[27,147536,147537],{},[49,147538,147539],{},"列嵌套",[55,147541],{"style":128667,"src":147542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[31,147544,147545],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[31,147547,147548],{},"没加row内部这样：",[55,147550],{"style":128667,"src":147551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[31,147553,147554],{},"加上row之后内部为：",[55,147556],{"style":128667,"src":147557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[24,147559,147560],{"start":238},[27,147561,147562],{},[49,147563,147564],{},"列偏移",[55,147566],{"style":128667,"src":147567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[31,147569,147570],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[31,147572,147573],{},"要加偏移量，即偏移份数",[31,147575,147576],{},"偏移的份数=12-两个盒子的份数",[24,147578,147579],{"start":252},[27,147580,147581],{},[49,147582,147583],{},"列排序",[55,147585],{"style":128667,"src":147586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[31,147588,147589],{},"pull拉左；push推右",[24,147591,147592],{"start":388},[27,147593,147594],{},[49,147595,147596],{},"响应式工具",[55,147598],{"style":128667,"src":147599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[31,147601,147602],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[19,147604,147606],{"id":147605},"_2143-响应式小项目","21.4.3 响应式小项目",[31,147608,147609],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[31,147611,147612],{},"ul {",[31,147614,147615],{},"list-style: none;",[31,147617,147618],{},"margin:0;",[31,147620,147621],{},"padding:0; }",[55,147623],{"style":128667,"src":147624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[55,147626],{"style":128667,"src":147627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[31,147629,147630],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[31,147632,71148],{},[190,147634,147635],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,147636,147637,147643,147653],{"__ignoreMap":57},[199,147638,147639,147641],{"class":201,"line":202},[199,147640,132659],{"class":878},[199,147642,1012],{"class":205},[199,147644,147645,147647,147649,147651],{"class":201,"line":36},[199,147646,133291],{"class":1018},[199,147648,1022],{"class":205},[199,147650,26580],{"class":1018},[199,147652,1028],{"class":205},[199,147654,147655],{"class":201,"line":73},[199,147656,671],{"class":205},[31,147658,72712],{},[190,147660,147661],{"className":128811,"code":141481,"language":128813,"meta":57,"style":57},[196,147662,147663,147669,147679],{"__ignoreMap":57},[199,147664,147665,147667],{"class":201,"line":202},[199,147666,132659],{"class":878},[199,147668,1012],{"class":205},[199,147670,147671,147673,147675,147677],{"class":201,"line":36},[199,147672,133291],{"class":1018},[199,147674,1022],{"class":205},[199,147676,26580],{"class":1018},[199,147678,1028],{"class":205},[199,147680,147681],{"class":201,"line":73},[199,147682,671],{"class":205},[14,147684,147686],{"id":147685},"_215-swiper-插件使用","21.5 swiper 插件使用",[176,147688,147689,147692,147695],{},[27,147690,147691],{},"下载需要的css和js文件html页面中 引入相关文件",[27,147693,147694],{},"官网找到类似案例，复制html结构，css样式 js 语法",[27,147696,147697],{},"根据需求定制修改模块",[55,147699],{"style":128667,"src":147700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[31,147702,147703],{},"解压后将这两部分放到项目中",[55,147705],{"style":128667,"src":147706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[31,147708,147709],{},"这个插件可以帮助我们实现轮播图效果",[31,147711,147712],{},"用法：",[55,147714],{"style":128667,"src":147715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[31,147717,147718],{},"找到自己喜欢的",[55,147720],{"style":128667,"src":147721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[31,147723,147724],{},"右键，查看网页源代码",[55,147726],{"style":128667,"src":147727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[31,147729,147730],{},"复制人家的结构内容",[31,147732,147733],{},"然后去看API文档：",[55,147735],{"style":128667,"src":147736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[31,147738,147739],{},"可以看看如何修改样式",[31,147741,147742],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1002,147744,147745],{},"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":57,"searchDepth":36,"depth":36,"links":147747},[147748,147753,147757,147762,147767],{"id":146548,"depth":36,"text":146549,"children":147749},[147750,147751,147752],{"id":146552,"depth":73,"text":146553},{"id":146562,"depth":73,"text":146563},{"id":146657,"depth":73,"text":146658},{"id":146672,"depth":36,"text":146673,"children":147754},[147755,147756],{"id":146694,"depth":73,"text":146695},{"id":146710,"depth":73,"text":146711},{"id":146785,"depth":36,"text":146786,"children":147758},[147759,147760,147761],{"id":146798,"depth":73,"text":146799},{"id":147022,"depth":73,"text":147023},{"id":147029,"depth":73,"text":147030},{"id":147170,"depth":36,"text":147171,"children":147763},[147764,147765,147766],{"id":147197,"depth":73,"text":147198},{"id":147260,"depth":73,"text":147261},{"id":147605,"depth":73,"text":147606},{"id":147685,"depth":36,"text":147686},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146540,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147774,"title":147775,"body":147776,"description":3023,"extension":3024,"meta":147996,"navigation":906,"path":147997,"seo":147998,"stem":147999,"__hash__":148000},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147777,"toc":147992},[147778,147781,147785,147788,147803,147808,147811,147816,147851,147856,147868,147873,147886,147891,147908,147913,147933,147938,147956,147959,147962,147965,147968,147972,147975,147978,147981,147984,147987,147990],[10,147779,147775],{"id":147780},"_22-代码提交与新型相对单位",[14,147782,147784],{"id":147783},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[31,147786,147787],{},"法1：",[24,147789,147790,147797,147800],{},[27,147791,147792,147793],{},"登录网站注册：",[2867,147794,147795],{"href":147795,"rel":147796},"https:\u002F\u002Fgitee.com\u002F",[2871],[27,147798,147799],{},"码云创建新的仓库",[27,147801,147802],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[176,147804,147805],{},[27,147806,147807],{},"在网站根目录右键-- Git Bash Here",[55,147809],{"style":128667,"src":147810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[176,147812,147813],{},[27,147814,147815],{},"如果是第一次利用git提交，请配置好全局选项",[190,147817,147819],{"className":119555,"code":147818,"language":119557,"meta":57,"style":57},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[196,147820,147821,147837],{"__ignoreMap":57},[199,147822,147823,147826,147828,147831,147834],{"class":201,"line":202},[199,147824,147825],{"class":878},"git",[199,147827,121978],{"class":898},[199,147829,147830],{"class":1018}," --global",[199,147832,147833],{"class":898}," user.name",[199,147835,147836],{"class":898}," \"你的名字\"\n",[199,147838,147839,147841,147843,147845,147848],{"class":201,"line":36},[199,147840,147825],{"class":878},[199,147842,121978],{"class":898},[199,147844,147830],{"class":1018},[199,147846,147847],{"class":898}," user.email",[199,147849,147850],{"class":898}," \"你的邮箱\"\n",[176,147852,147853],{},[27,147854,147855],{},"初始化仓库",[190,147857,147859],{"className":119555,"code":147858,"language":119557,"meta":57,"style":57},"git init\n",[196,147860,147861],{"__ignoreMap":57},[199,147862,147863,147865],{"class":201,"line":202},[199,147864,147825],{"class":878},[199,147866,147867],{"class":898}," init\n",[176,147869,147870],{},[27,147871,147872],{},"把本地文件放到暂存区",[190,147874,147876],{"className":119555,"code":147875,"language":119557,"meta":57,"style":57},"git add .\n",[196,147877,147878],{"__ignoreMap":57},[199,147879,147880,147882,147884],{"class":201,"line":202},[199,147881,147825],{"class":878},[199,147883,8106],{"class":898},[199,147885,31584],{"class":898},[176,147887,147888],{},[27,147889,147890],{},"把本地文件放到本地仓库里面",[190,147892,147894],{"className":119555,"code":147893,"language":119557,"meta":57,"style":57},"git commit -m \"first commit\"\n",[196,147895,147896],{"__ignoreMap":57},[199,147897,147898,147900,147903,147905],{"class":201,"line":202},[199,147899,147825],{"class":878},[199,147901,147902],{"class":898}," commit",[199,147904,103141],{"class":1018},[199,147906,147907],{"class":898}," \"first commit\"\n",[176,147909,147910],{},[27,147911,147912],{},"链接远程仓库",[190,147914,147916],{"className":119555,"code":147915,"language":119557,"meta":57,"style":57},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[196,147917,147918],{"__ignoreMap":57},[199,147919,147920,147922,147925,147927,147930],{"class":201,"line":202},[199,147921,147825],{"class":878},[199,147923,147924],{"class":898}," remote",[199,147926,8106],{"class":898},[199,147928,147929],{"class":898}," origin",[199,147931,147932],{"class":898}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[176,147934,147935],{},[27,147936,147937],{},"把本地仓库的文件推送到远程仓库 push",[190,147939,147941],{"className":119555,"code":147940,"language":119557,"meta":57,"style":57},"git push -u origin master\n",[196,147942,147943],{"__ignoreMap":57},[199,147944,147945,147947,147949,147951,147953],{"class":201,"line":202},[199,147946,147825],{"class":878},[199,147948,31859],{"class":898},[199,147950,31133],{"class":1018},[199,147952,147929],{"class":898},[199,147954,147955],{"class":898}," master\n",[55,147957],{"style":128667,"src":147958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[31,147960,147961],{},"上方方法暂未实现，后边学完git后在整",[31,147963,147964],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[55,147966],{"style":128667,"src":147967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147969,147971],{"id":147970},"_222-新型相对单位","22.2 新型相对单位",[55,147973],{"style":128667,"src":147974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[55,147976],{"style":128667,"src":147977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[31,147979,147980],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[31,147982,147983],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[55,147985],{"style":128667,"src":147986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[31,147988,147989],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1002,147991,26801],{},{"title":57,"searchDepth":36,"depth":36,"links":147993},[147994,147995],{"id":147783,"depth":36,"text":147784},{"id":147970,"depth":36,"text":147971},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147775,"description":3023},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":148002,"title":148003,"body":148004,"description":148008,"extension":3024,"meta":148009,"navigation":906,"path":148010,"seo":148011,"stem":148012,"__hash__":148013},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":148005,"toc":148006},[],{"title":57,"searchDepth":36,"depth":36,"links":148007},[],"自己正经开始学编程的第一门语言！",{"category":95098},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":148003,"description":148008},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":148015,"title":148016,"body":148017,"description":3023,"extension":3024,"meta":149164,"navigation":906,"path":149165,"seo":149166,"stem":149167,"__hash__":149168},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":148018,"toc":149140},[148019,148022,148026,148029,148032,148057,148060,148066,148070,148073,148100,148103,148143,148146,148158,148161,148167,148171,148175,148202,148219,148226,148230,148233,148259,148262,148266,148269,148309,148312,148329,148335,148339,148344,148388,148391,148409,148412,148480,148484,148491,148494,148509,148512,148521,148524,148535,148538,148547,148550,148567,148570,148585,148589,148593,148596,148598,148618,148622,148625,148628,148639,148642,148648,148652,148658,148685,148688,148700,148703,148714,148717,148723,148727,148733,148783,148786,148828,148831,148864,148867,148901,148905,148908,148928,148931,148967,148970,148983,148987,148991,148997,149000,149013,149017,149020,149026,149029,149033,149036,149039,149088,149092,149108,149114,149121,149127,149137],[10,148020,148016],{"id":148021},"_1-python环境与第一个程序",[14,148023,148025],{"id":148024},"_11-什么是python","1.1 什么是Python",[31,148027,148028],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[31,148030,148031],{},"理解 Python 时抓住三个关键词：",[24,148033,148034,148037,148040],{},[27,148035,148036],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[27,148038,148039],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[27,148041,148042,148043,3300,148046,3300,148049,3300,148052,3300,148054,31228],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[196,148044,148045],{},"os",[196,148047,148048],{},"sys",[196,148050,148051],{},"json",[196,148053,60119],{},[196,148055,148056],{},"datetime",[31,148058,148059],{},"Python 程序的运行链路：",[190,148061,148064],{"className":148062,"code":148063,"language":8084,"meta":57},[8082],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[196,148065,148063],{"__ignoreMap":57},[14,148067,148069],{"id":148068},"_12-python解释器","1.2 Python解释器",[31,148071,148072],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[190,148074,148076],{"className":26666,"code":148075,"language":26668,"meta":57,"style":57},"python --version\npython3 --version\npython\npython3\n",[196,148077,148078,148084,148090,148095],{"__ignoreMap":57},[199,148079,148080,148082],{"class":201,"line":202},[199,148081,33223],{"class":878},[199,148083,29136],{"class":1018},[199,148085,148086,148088],{"class":201,"line":36},[199,148087,103138],{"class":878},[199,148089,29136],{"class":1018},[199,148091,148092],{"class":201,"line":73},[199,148093,148094],{"class":878},"python\n",[199,148096,148097],{"class":201,"line":333},[199,148098,148099],{"class":878},"python3\n",[31,148101,148102],{},"进入交互模式后，可以直接输入表达式：",[190,148104,148106],{"className":33221,"code":148105,"language":33223,"meta":57,"style":57},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[196,148107,148108,148119,148124,148138],{"__ignoreMap":57},[199,148109,148110,148113,148115,148117],{"class":201,"line":202},[199,148111,148112],{"class":1086},">>>",[199,148114,1495],{"class":1018},[199,148116,1698],{"class":1086},[199,148118,50563],{"class":1018},[199,148120,148121],{"class":201,"line":36},[199,148122,148123],{"class":1018},"3\n",[199,148125,148126,148128,148131,148133,148136],{"class":201,"line":73},[199,148127,148112],{"class":1086},[199,148129,148130],{"class":1018}," print",[199,148132,1537],{"class":205},[199,148134,148135],{"class":898},"\"hello python\"",[199,148137,1594],{"class":205},[199,148139,148140],{"class":201,"line":333},[199,148141,148142],{"class":205},"hello python\n",[31,148144,148145],{},"退出交互模式：",[190,148147,148149],{"className":33221,"code":148148,"language":33223,"meta":57,"style":57},"exit()\n",[196,148150,148151],{"__ignoreMap":57},[199,148152,148153,148156],{"class":201,"line":202},[199,148154,148155],{"class":1018},"exit",[199,148157,4892],{"class":205},[31,148159,148160],{},"或使用快捷键：",[190,148162,148165],{"className":148163,"code":148164,"language":8084,"meta":57},[8082],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[196,148166,148164],{"__ignoreMap":57},[14,148168,148170],{"id":148169},"_13-安装python","1.3 安装Python",[19,148172,148174],{"id":148173},"_131-windows安装","1.3.1 Windows安装",[24,148176,148177,148184,148187,148193,148199],{},[27,148178,148179,148180],{},"打开 Python 官网：",[2867,148181,148182],{"href":148182,"rel":148183},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[2871],[27,148185,148186],{},"下载 Windows Installer。",[27,148188,148189,148190,31228],{},"安装时勾选 ",[196,148191,148192],{},"Add Python to PATH",[27,148194,148195,148196,31228],{},"点击 ",[196,148197,148198],{},"Install Now",[27,148200,148201],{},"安装完成后打开命令提示符验证：",[190,148203,148205],{"className":26666,"code":148204,"language":26668,"meta":57,"style":57},"python --version\npip --version\n",[196,148206,148207,148213],{"__ignoreMap":57},[199,148208,148209,148211],{"class":201,"line":202},[199,148210,33223],{"class":878},[199,148212,29136],{"class":1018},[199,148214,148215,148217],{"class":201,"line":36},[199,148216,26675],{"class":878},[199,148218,29136],{"class":1018},[31,148220,148221,148222,148225],{},"如果提示 ",[196,148223,148224],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[19,148227,148229],{"id":148228},"_132-macos安装","1.3.2 macOS安装",[31,148231,148232],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[190,148234,148236],{"className":26666,"code":148235,"language":26668,"meta":57,"style":57},"brew install python\npython3 --version\npip3 --version\n",[196,148237,148238,148247,148253],{"__ignoreMap":57},[199,148239,148240,148243,148245],{"class":201,"line":202},[199,148241,148242],{"class":878},"brew",[199,148244,26678],{"class":898},[199,148246,126577],{"class":898},[199,148248,148249,148251],{"class":201,"line":36},[199,148250,103138],{"class":878},[199,148252,29136],{"class":1018},[199,148254,148255,148257],{"class":201,"line":73},[199,148256,121959],{"class":878},[199,148258,29136],{"class":1018},[31,148260,148261],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[19,148263,148265],{"id":148264},"_133-linux安装","1.3.3 Linux安装",[31,148267,148268],{},"Ubuntu\u002FDebian：",[190,148270,148272],{"className":26666,"code":148271,"language":26668,"meta":57,"style":57},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[196,148273,148274,148282,148297,148303],{"__ignoreMap":57},[199,148275,148276,148278,148280],{"class":201,"line":202},[199,148277,27420],{"class":878},[199,148279,119576],{"class":898},[199,148281,29085],{"class":898},[199,148283,148284,148286,148288,148290,148292,148294],{"class":201,"line":36},[199,148285,27420],{"class":878},[199,148287,119576],{"class":898},[199,148289,26678],{"class":898},[199,148291,106662],{"class":898},[199,148293,103057],{"class":898},[199,148295,148296],{"class":898}," python3-venv\n",[199,148298,148299,148301],{"class":201,"line":73},[199,148300,103138],{"class":878},[199,148302,29136],{"class":1018},[199,148304,148305,148307],{"class":201,"line":333},[199,148306,121959],{"class":878},[199,148308,29136],{"class":1018},[31,148310,148311],{},"Fedora：",[190,148313,148315],{"className":26666,"code":148314,"language":26668,"meta":57,"style":57},"sudo dnf install python3 python3-pip\n",[196,148316,148317],{"__ignoreMap":57},[199,148318,148319,148321,148323,148325,148327],{"class":201,"line":202},[199,148320,27420],{"class":878},[199,148322,29158],{"class":898},[199,148324,26678],{"class":898},[199,148326,106662],{"class":898},[199,148328,122024],{"class":898},[31,148330,148331,148332,148334],{},"Linux 上通常使用 ",[196,148333,103138],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148336,148338],{"id":148337},"_14-pip包管理器","1.4 pip包管理器",[31,148340,148341,148343],{},[196,148342,26675],{}," 用来安装第三方库。",[190,148345,148347],{"className":26666,"code":148346,"language":26668,"meta":57,"style":57},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[196,148348,148349,148358,148367,148375,148381],{"__ignoreMap":57},[199,148350,148351,148353,148355],{"class":201,"line":202},[199,148352,26675],{"class":878},[199,148354,26678],{"class":898},[199,148356,148357],{"class":898}," requests\n",[199,148359,148360,148362,148365],{"class":201,"line":36},[199,148361,26675],{"class":878},[199,148363,148364],{"class":898}," uninstall",[199,148366,148357],{"class":898},[199,148368,148369,148371,148373],{"class":201,"line":73},[199,148370,26675],{"class":878},[199,148372,119833],{"class":898},[199,148374,148357],{"class":898},[199,148376,148377,148379],{"class":201,"line":333},[199,148378,26675],{"class":878},[199,148380,121214],{"class":898},[199,148382,148383,148385],{"class":201,"line":227},[199,148384,26675],{"class":878},[199,148386,148387],{"class":898}," freeze\n",[31,148389,148390],{},"国内网络较慢时可以临时使用镜像：",[190,148392,148394],{"className":26666,"code":148393,"language":26668,"meta":57,"style":57},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[196,148395,148396],{"__ignoreMap":57},[199,148397,148398,148400,148402,148405,148407],{"class":201,"line":202},[199,148399,26675],{"class":878},[199,148401,26678],{"class":898},[199,148403,148404],{"class":898}," requests",[199,148406,29273],{"class":1018},[199,148408,121987],{"class":898},[31,148410,148411],{},"常见第三方库：",[3227,148413,148414,148423],{},[3230,148415,148416],{},[3233,148417,148418,148421],{},[3236,148419,148420],{},"库",[3236,148422,104955],{},[3273,148424,148425,148433,148440,148448,148456,148464,148472],{},[3233,148426,148427,148430],{},[3278,148428,148429],{},"requests",[3278,148431,148432],{},"网络请求",[3233,148434,148435,148437],{},[3278,148436,102885],{},[3278,148438,148439],{},"数值计算",[3233,148441,148442,148445],{},[3278,148443,148444],{},"pandas",[3278,148446,148447],{},"表格数据处理",[3233,148449,148450,148453],{},[3278,148451,148452],{},"matplotlib",[3278,148454,148455],{},"绘图",[3233,148457,148458,148461],{},[3278,148459,148460],{},"pyecharts",[3278,148462,148463],{},"ECharts 图表",[3233,148465,148466,148469],{},[3278,148467,148468],{},"flask",[3278,148470,148471],{},"Web 后端",[3233,148473,148474,148477],{},[3278,148475,148476],{},"pytest",[3278,148478,148479],{},"自动化测试",[14,148481,148483],{"id":148482},"_15-虚拟环境","1.5 虚拟环境",[31,148485,148486,148487,148490],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[196,148488,148489],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[31,148492,148493],{},"创建虚拟环境：",[190,148495,148497],{"className":26666,"code":148496,"language":26668,"meta":57,"style":57},"python -m venv .venv\n",[196,148498,148499],{"__ignoreMap":57},[199,148500,148501,148503,148505,148507],{"class":201,"line":202},[199,148502,33223],{"class":878},[199,148504,103141],{"class":1018},[199,148506,103144],{"class":898},[199,148508,103147],{"class":898},[31,148510,148511],{},"Windows 激活：",[190,148513,148515],{"className":26666,"code":148514,"language":26668,"meta":57,"style":57},".venv\\Scripts\\activate\n",[196,148516,148517],{"__ignoreMap":57},[199,148518,148519],{"class":201,"line":202},[199,148520,148514],{"class":878},[31,148522,148523],{},"macOS\u002FLinux 激活：",[190,148525,148527],{"className":26666,"code":148526,"language":26668,"meta":57,"style":57},"source .venv\u002Fbin\u002Factivate\n",[196,148528,148529],{"__ignoreMap":57},[199,148530,148531,148533],{"class":201,"line":202},[199,148532,103152],{"class":1018},[199,148534,103155],{"class":898},[31,148536,148537],{},"退出虚拟环境：",[190,148539,148541],{"className":26666,"code":148540,"language":26668,"meta":57,"style":57},"deactivate\n",[196,148542,148543],{"__ignoreMap":57},[199,148544,148545],{"class":201,"line":202},[199,148546,148540],{"class":878},[31,148548,148549],{},"保存依赖：",[190,148551,148553],{"className":26666,"code":148552,"language":26668,"meta":57,"style":57},"pip freeze > requirements.txt\n",[196,148554,148555],{"__ignoreMap":57},[199,148556,148557,148559,148562,148564],{"class":201,"line":202},[199,148558,26675],{"class":878},[199,148560,148561],{"class":898}," freeze",[199,148563,29065],{"class":1086},[199,148565,148566],{"class":898}," requirements.txt\n",[31,148568,148569],{},"安装依赖：",[190,148571,148573],{"className":26666,"code":148572,"language":26668,"meta":57,"style":57},"pip install -r requirements.txt\n",[196,148574,148575],{"__ignoreMap":57},[199,148576,148577,148579,148581,148583],{"class":201,"line":202},[199,148578,26675],{"class":878},[199,148580,26678],{"class":898},[199,148582,121898],{"class":1018},[199,148584,148566],{"class":898},[14,148586,148588],{"id":148587},"_16-开发工具","1.6 开发工具",[19,148590,148592],{"id":148591},"_161-pycharm","1.6.1 PyCharm",[31,148594,148595],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[31,148597,124321],{},[24,148599,148600,148603,148606,148612,148615],{},[27,148601,148602],{},"New Project：创建项目。",[27,148604,148605],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[27,148607,148608,148609,128242],{},"New Python File：创建 ",[196,148610,148611],{},".py",[27,148613,148614],{},"Run：运行当前文件。",[27,148616,148617],{},"Debug：断点调试。",[19,148619,148621],{"id":148620},"_162-vs-code","1.6.2 VS Code",[31,148623,148624],{},"VS Code 轻量，适合后续多语言开发。",[31,148626,148627],{},"建议安装插件：",[24,148629,148630,148633,148636],{},[27,148631,148632],{},"Python。",[27,148634,148635],{},"Pylance。",[27,148637,148638],{},"Jupyter。",[31,148640,148641],{},"选择解释器：",[190,148643,148646],{"className":148644,"code":148645,"language":8084,"meta":57},[8082],"Ctrl + Shift + P -> Python: Select Interpreter\n",[196,148647,148645],{"__ignoreMap":57},[14,148649,148651],{"id":148650},"_17-第一个python程序","1.7 第一个Python程序",[31,148653,148654,148655,27462],{},"创建文件 ",[196,148656,148657],{},"hello.py",[190,148659,148661],{"className":33221,"code":148660,"language":33223,"meta":57,"style":57},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[196,148662,148663,148674],{"__ignoreMap":57},[199,148664,148665,148667,148669,148672],{"class":201,"line":202},[199,148666,33258],{"class":1018},[199,148668,1537],{"class":205},[199,148670,148671],{"class":898},"\"Hello World\"",[199,148673,1594],{"class":205},[199,148675,148676,148678,148680,148683],{"class":201,"line":36},[199,148677,33258],{"class":1018},[199,148679,1537],{"class":205},[199,148681,148682],{"class":898},"\"你好，Python\"",[199,148684,1594],{"class":205},[31,148686,148687],{},"在终端运行：",[190,148689,148691],{"className":26666,"code":148690,"language":26668,"meta":57,"style":57},"python hello.py\n",[196,148692,148693],{"__ignoreMap":57},[199,148694,148695,148697],{"class":201,"line":202},[199,148696,33223],{"class":878},[199,148698,148699],{"class":898}," hello.py\n",[31,148701,148702],{},"或：",[190,148704,148706],{"className":26666,"code":148705,"language":26668,"meta":57,"style":57},"python3 hello.py\n",[196,148707,148708],{"__ignoreMap":57},[199,148709,148710,148712],{"class":201,"line":202},[199,148711,103138],{"class":878},[199,148713,148699],{"class":898},[31,148715,148716],{},"输出：",[190,148718,148721],{"className":148719,"code":148720,"language":8084,"meta":57},[8082],"Hello World\n你好，Python\n",[196,148722,148720],{"__ignoreMap":57},[14,148724,148726],{"id":148725},"_18-print函数","1.8 print函数",[31,148728,148729,148732],{},[196,148730,148731],{},"print()"," 用来输出内容。",[190,148734,148736],{"className":33221,"code":148735,"language":33223,"meta":57,"style":57},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[196,148737,148738,148748,148758,148768],{"__ignoreMap":57},[199,148739,148740,148742,148744,148746],{"class":201,"line":202},[199,148741,33258],{"class":1018},[199,148743,1537],{"class":205},[199,148745,8741],{"class":898},[199,148747,1594],{"class":205},[199,148749,148750,148752,148754,148756],{"class":201,"line":36},[199,148751,33258],{"class":1018},[199,148753,1537],{"class":205},[199,148755,3396],{"class":1018},[199,148757,1594],{"class":205},[199,148759,148760,148762,148764,148766],{"class":201,"line":73},[199,148761,33258],{"class":1018},[199,148763,1537],{"class":205},[199,148765,3143],{"class":1018},[199,148767,1594],{"class":205},[199,148769,148770,148772,148774,148777,148779,148781],{"class":201,"line":333},[199,148771,33258],{"class":1018},[199,148773,1537],{"class":205},[199,148775,148776],{"class":898},"\"年龄:\"",[199,148778,1912],{"class":205},[199,148780,3730],{"class":1018},[199,148782,1594],{"class":205},[31,148784,148785],{},"多个内容用逗号隔开，默认中间加空格：",[190,148787,148789],{"className":33221,"code":148788,"language":33223,"meta":57,"style":57},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[196,148790,148791,148801,148811],{"__ignoreMap":57},[199,148792,148793,148796,148798],{"class":201,"line":202},[199,148794,148795],{"class":205},"name ",[199,148797,895],{"class":1086},[199,148799,148800],{"class":898}," \"张三\"\n",[199,148802,148803,148806,148808],{"class":201,"line":36},[199,148804,148805],{"class":205},"age ",[199,148807,895],{"class":1086},[199,148809,148810],{"class":1018}," 18\n",[199,148812,148813,148815,148817,148820,148823,148825],{"class":201,"line":73},[199,148814,33258],{"class":1018},[199,148816,1537],{"class":205},[199,148818,148819],{"class":898},"\"姓名:\"",[199,148821,148822],{"class":205},", name, ",[199,148824,148776],{"class":898},[199,148826,148827],{"class":205},", age)\n",[31,148829,148830],{},"修改分隔符：",[190,148832,148834],{"className":33221,"code":148833,"language":33223,"meta":57,"style":57},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[196,148835,148836],{"__ignoreMap":57},[199,148837,148838,148840,148842,148845,148847,148849,148851,148853,148855,148858,148860,148862],{"class":201,"line":202},[199,148839,33258],{"class":1018},[199,148841,1537],{"class":205},[199,148843,148844],{"class":898},"\"2024\"",[199,148846,1912],{"class":205},[199,148848,56575],{"class":898},[199,148850,1912],{"class":205},[199,148852,56575],{"class":898},[199,148854,1912],{"class":205},[199,148856,148857],{"class":8113},"sep",[199,148859,895],{"class":1086},[199,148861,35325],{"class":898},[199,148863,1594],{"class":205},[31,148865,148866],{},"修改结尾符：",[190,148868,148870],{"className":33221,"code":148869,"language":33223,"meta":57,"style":57},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[196,148871,148872,148890],{"__ignoreMap":57},[199,148873,148874,148876,148878,148880,148882,148884,148886,148888],{"class":201,"line":202},[199,148875,33258],{"class":1018},[199,148877,1537],{"class":205},[199,148879,8741],{"class":898},[199,148881,1912],{"class":205},[199,148883,48641],{"class":8113},[199,148885,895],{"class":1086},[199,148887,7257],{"class":898},[199,148889,1594],{"class":205},[199,148891,148892,148894,148896,148899],{"class":201,"line":36},[199,148893,33258],{"class":1018},[199,148895,1537],{"class":205},[199,148897,148898],{"class":898},"\"python\"",[199,148900,1594],{"class":205},[14,148902,148904],{"id":148903},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[31,148906,148907],{},"交互运行适合临时验证：",[190,148909,148911],{"className":33221,"code":148910,"language":33223,"meta":57,"style":57},">>> 10 * 3\n30\n",[196,148912,148913,148923],{"__ignoreMap":57},[199,148914,148915,148917,148919,148921],{"class":201,"line":202},[199,148916,148112],{"class":1086},[199,148918,4954],{"class":1018},[199,148920,9415],{"class":1086},[199,148922,122295],{"class":1018},[199,148924,148925],{"class":201,"line":36},[199,148926,148927],{"class":1018},"30\n",[31,148929,148930],{},"脚本运行适合保存程序：",[190,148932,148934],{"className":33221,"code":148933,"language":33223,"meta":57,"style":57},"price = 8\ncount = 5\nprint(price * count)\n",[196,148935,148936,148946,148955],{"__ignoreMap":57},[199,148937,148938,148941,148943],{"class":201,"line":202},[199,148939,148940],{"class":205},"price ",[199,148942,895],{"class":1086},[199,148944,148945],{"class":1018}," 8\n",[199,148947,148948,148951,148953],{"class":201,"line":36},[199,148949,148950],{"class":205},"count ",[199,148952,895],{"class":1086},[199,148954,56686],{"class":1018},[199,148956,148957,148959,148962,148964],{"class":201,"line":73},[199,148958,33258],{"class":1018},[199,148960,148961],{"class":205},"(price ",[199,148963,3537],{"class":1086},[199,148965,148966],{"class":205}," count)\n",[31,148968,148969],{},"实际学习中推荐：",[24,148971,148972,148975,148980],{},[27,148973,148974],{},"临时试一个语法，用交互模式。",[27,148976,148977,148978,128242],{},"写完整练习，用 ",[196,148979,148611],{},[27,148981,148982],{},"写项目，用独立目录和虚拟环境。",[14,148984,148986],{"id":148985},"_110-常见错误","1.10 常见错误",[19,148988,148990],{"id":148989},"_1101-命令找不到","1.10.1 命令找不到",[190,148992,148995],{"className":148993,"code":148994,"language":8084,"meta":57},[8082],"python: command not found\n",[196,148996,148994],{"__ignoreMap":57},[31,148998,148999],{},"原因：",[24,149001,149002,149005,149008],{},[27,149003,149004],{},"没安装 Python。",[27,149006,149007],{},"PATH 没配置。",[27,149009,149010,149011,31228],{},"Linux\u002FmacOS 应该使用 ",[196,149012,103138],{},[19,149014,149016],{"id":149015},"_1102-文件名冲突","1.10.2 文件名冲突",[31,149018,149019],{},"不要把文件命名为：",[190,149021,149024],{"className":149022,"code":149023,"language":8084,"meta":57},[8082],"random.py\njson.py\ntime.py\nrequests.py\n",[196,149025,149023],{"__ignoreMap":57},[31,149027,149028],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[19,149030,149032],{"id":149031},"_1103-中文乱码","1.10.3 中文乱码",[31,149034,149035],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[31,149037,149038],{},"如果读写文件出现乱码，要明确指定编码：",[190,149040,149042],{"className":33221,"code":149041,"language":33223,"meta":57,"style":57},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[196,149043,149044,149078],{"__ignoreMap":57},[199,149045,149046,149048,149051,149053,149056,149058,149061,149063,149066,149068,149071,149073,149075],{"class":201,"line":202},[199,149047,110092],{"class":1086},[199,149049,149050],{"class":1018}," open",[199,149052,1537],{"class":205},[199,149054,149055],{"class":898},"\"data.txt\"",[199,149057,1912],{"class":205},[199,149059,149060],{"class":898},"\"r\"",[199,149062,1912],{"class":205},[199,149064,149065],{"class":8113},"encoding",[199,149067,895],{"class":1086},[199,149069,149070],{"class":898},"\"utf-8\"",[199,149072,16575],{"class":205},[199,149074,34225],{"class":1086},[199,149076,149077],{"class":205}," f:\n",[199,149079,149080,149083,149085],{"class":201,"line":36},[199,149081,149082],{"class":205},"    content ",[199,149084,895],{"class":1086},[199,149086,149087],{"class":205}," f.read()\n",[14,149089,149091],{"id":149090},"_111-本章练习","1.11 本章练习",[24,149093,149094,149097,149103],{},[27,149095,149096],{},"安装 Python，并在终端输出版本号。",[27,149098,149099,149100,149102],{},"新建 ",[196,149101,148657],{},"，输出自己的姓名、年龄、学习目标。",[27,149104,106625,149105,149107],{},[196,149106,148731],{}," 输出下面格式：",[190,149109,149112],{"className":149110,"code":149111,"language":8084,"meta":57},[8082],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[196,149113,149111],{"__ignoreMap":57},[24,149115,149116],{"start":333},[27,149117,106625,149118,149120],{},[196,149119,148857],{}," 输出日期：",[190,149122,149125],{"className":149123,"code":149124,"language":8084,"meta":57},[8082],"2024-10-10\n",[196,149126,149124],{"__ignoreMap":57},[24,149128,149129],{"start":227},[27,149130,106625,149131,149133,149134,149136],{},[196,149132,48641],{}," 让两次 ",[196,149135,148731],{}," 输出在同一行。",[1002,149138,149139],{},"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":57,"searchDepth":36,"depth":36,"links":149141},[149142,149143,149144,149149,149150,149151,149155,149156,149157,149158,149163],{"id":148024,"depth":36,"text":148025},{"id":148068,"depth":36,"text":148069},{"id":148169,"depth":36,"text":148170,"children":149145},[149146,149147,149148],{"id":148173,"depth":73,"text":148174},{"id":148228,"depth":73,"text":148229},{"id":148264,"depth":73,"text":148265},{"id":148337,"depth":36,"text":148338},{"id":148482,"depth":36,"text":148483},{"id":148587,"depth":36,"text":148588,"children":149152},[149153,149154],{"id":148591,"depth":73,"text":148592},{"id":148620,"depth":73,"text":148621},{"id":148650,"depth":36,"text":148651},{"id":148725,"depth":36,"text":148726},{"id":148903,"depth":36,"text":148904},{"id":148985,"depth":36,"text":148986,"children":149159},[149160,149161,149162],{"id":148989,"depth":73,"text":148990},{"id":149015,"depth":73,"text":149016},{"id":149031,"depth":73,"text":149032},{"id":149090,"depth":36,"text":149091},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":148016,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149170,"title":149171,"body":149172,"description":3023,"extension":3024,"meta":151576,"navigation":906,"path":151577,"seo":151578,"stem":151579,"__hash__":151580},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149173,"toc":151561},[149174,149177,149181,149184,149187,149204,149207,149249,149252,149256,149259,149262,149299,149302,149336,149339,149431,149435,149449,149452,149479,149482,149486,149589,149596,149599,149616,149620,149627,149816,149819,149892,149896,149899,149983,149986,150018,150022,150226,150229,150233,150239,150341,150344,150600,150604,150607,150610,150624,150626,150812,150816,151178,151184,151188,151191,151315,151318,151497,151500,151504,151537,151541,151558],[10,149175,149171],{"id":149176},"_10-json与pyecharts折线图",[14,149178,149180],{"id":149179},"_101-数据可视化","10.1 数据可视化",[31,149182,149183],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[31,149185,149186],{},"常见图表：",[24,149188,149189,149192,149195,149198,149201],{},[27,149190,149191],{},"折线图：看趋势。",[27,149193,149194],{},"柱状图：看分类对比。",[27,149196,149197],{},"饼图：看占比。",[27,149199,149200],{},"地图：看地域分布。",[27,149202,149203],{},"散点图：看两个变量之间的关系。",[31,149205,149206],{},"Python 可视化常用库：",[3227,149208,149209,149217],{},[3230,149210,149211],{},[3233,149212,149213,149215],{},[3236,149214,148420],{},[3236,149216,26584],{},[3273,149218,149219,149226,149234,149241],{},[3233,149220,149221,149223],{},[3278,149222,148452],{},[3278,149224,149225],{},"基础、经典、可定制",[3233,149227,149228,149231],{},[3278,149229,149230],{},"seaborn",[3278,149232,149233],{},"统计图表更美观",[3233,149235,149236,149238],{},[3278,149237,148460],{},[3278,149239,149240],{},"生成交互式网页图表",[3233,149242,149243,149246],{},[3278,149244,149245],{},"plotly",[3278,149247,149248],{},"交互图表能力强",[31,149250,149251],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,149253,149255],{"id":149254},"_102-json回顾","10.2 JSON回顾",[31,149257,149258],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[31,149260,149261],{},"Python 字典：",[190,149263,149265],{"className":33221,"code":149264,"language":33223,"meta":57,"style":57},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[196,149266,149267,149275,149286,149295],{"__ignoreMap":57},[199,149268,149269,149271,149273],{"class":201,"line":202},[199,149270,103917],{"class":205},[199,149272,895],{"class":1086},[199,149274,1012],{"class":205},[199,149276,149277,149280,149282,149284],{"class":201,"line":36},[199,149278,149279],{"class":898},"    \"name\"",[199,149281,1022],{"class":205},[199,149283,71528],{"class":898},[199,149285,34308],{"class":205},[199,149287,149288,149291,149293],{"class":201,"line":73},[199,149289,149290],{"class":898},"    \"value\"",[199,149292,1022],{"class":205},[199,149294,99717],{"class":1018},[199,149296,149297],{"class":201,"line":333},[199,149298,671],{"class":205},[31,149300,149301],{},"JSON 字符串：",[190,149303,149306],{"className":149304,"code":149305,"language":148051,"meta":57,"style":57},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[196,149307,149308,149312,149323,149332],{"__ignoreMap":57},[199,149309,149310],{"class":201,"line":202},[199,149311,4485],{"class":205},[199,149313,149314,149317,149319,149321],{"class":201,"line":36},[199,149315,149316],{"class":1018},"  \"name\"",[199,149318,1022],{"class":205},[199,149320,71528],{"class":898},[199,149322,34308],{"class":205},[199,149324,149325,149328,149330],{"class":201,"line":73},[199,149326,149327],{"class":1018},"  \"value\"",[199,149329,1022],{"class":205},[199,149331,99717],{"class":1018},[199,149333,149334],{"class":201,"line":333},[199,149335,671],{"class":205},[31,149337,149338],{},"Python 与 JSON 的转换：",[190,149340,149342],{"className":33221,"code":149341,"language":33223,"meta":57,"style":57},"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",[196,149343,149344,149351,149355,149380,149384,149403,149410,149414,149424],{"__ignoreMap":57},[199,149345,149346,149348],{"class":201,"line":202},[199,149347,33235],{"class":1086},[199,149349,149350],{"class":205}," json\n",[199,149352,149353],{"class":201,"line":36},[199,149354,907],{"emptyLinePlaceholder":906},[199,149356,149357,149359,149361,149363,149365,149367,149369,149371,149374,149376,149378],{"class":201,"line":73},[199,149358,103917],{"class":205},[199,149360,895],{"class":1086},[199,149362,7345],{"class":205},[199,149364,64938],{"class":898},[199,149366,1022],{"class":205},[199,149368,71528],{"class":898},[199,149370,1912],{"class":205},[199,149372,149373],{"class":898},"\"value\"",[199,149375,1022],{"class":205},[199,149377,3396],{"class":1018},[199,149379,671],{"class":205},[199,149381,149382],{"class":201,"line":333},[199,149383,907],{"emptyLinePlaceholder":906},[199,149385,149386,149389,149391,149394,149397,149399,149401],{"class":201,"line":227},[199,149387,149388],{"class":205},"json_text ",[199,149390,895],{"class":1086},[199,149392,149393],{"class":205}," json.dumps(data, ",[199,149395,149396],{"class":8113},"ensure_ascii",[199,149398,895],{"class":1086},[199,149400,36828],{"class":1018},[199,149402,1594],{"class":205},[199,149404,149405,149407],{"class":201,"line":238},[199,149406,33258],{"class":1018},[199,149408,149409],{"class":205},"(json_text)\n",[199,149411,149412],{"class":201,"line":252},[199,149413,907],{"emptyLinePlaceholder":906},[199,149415,149416,149419,149421],{"class":201,"line":388},[199,149417,149418],{"class":205},"new_data ",[199,149420,895],{"class":1086},[199,149422,149423],{"class":205}," json.loads(json_text)\n",[199,149425,149426,149428],{"class":201,"line":415},[199,149427,33258],{"class":1018},[199,149429,149430],{"class":205},"(new_data)\n",[14,149432,149434],{"id":149433},"_103-安装pyecharts","10.3 安装pyecharts",[190,149436,149438],{"className":26666,"code":149437,"language":26668,"meta":57,"style":57},"pip install pyecharts\n",[196,149439,149440],{"__ignoreMap":57},[199,149441,149442,149444,149446],{"class":201,"line":202},[199,149443,26675],{"class":878},[199,149445,26678],{"class":898},[199,149447,149448],{"class":898}," pyecharts\n",[31,149450,149451],{},"验证：",[190,149453,149455],{"className":33221,"code":149454,"language":33223,"meta":57,"style":57},"import pyecharts\n\nprint(pyecharts.__version__)\n",[196,149456,149457,149463,149467],{"__ignoreMap":57},[199,149458,149459,149461],{"class":201,"line":202},[199,149460,33235],{"class":1086},[199,149462,149448],{"class":205},[199,149464,149465],{"class":201,"line":36},[199,149466,907],{"emptyLinePlaceholder":906},[199,149468,149469,149471,149474,149477],{"class":201,"line":73},[199,149470,33258],{"class":1018},[199,149472,149473],{"class":205},"(pyecharts.",[199,149475,149476],{"class":1018},"__version__",[199,149478,1594],{"class":205},[31,149480,149481],{},"如果使用虚拟环境，要先激活环境再安装。",[14,149483,149485],{"id":149484},"_104-第一个折线图","10.4 第一个折线图",[190,149487,149489],{"className":33221,"code":149488,"language":33223,"meta":57,"style":57},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[196,149490,149491,149503,149507,149517,149547,149579],{"__ignoreMap":57},[199,149492,149493,149495,149498,149500],{"class":201,"line":202},[199,149494,33579],{"class":1086},[199,149496,149497],{"class":205}," pyecharts.charts ",[199,149499,33235],{"class":1086},[199,149501,149502],{"class":205}," Line\n",[199,149504,149505],{"class":201,"line":36},[199,149506,907],{"emptyLinePlaceholder":906},[199,149508,149509,149512,149514],{"class":201,"line":73},[199,149510,149511],{"class":205},"line ",[199,149513,895],{"class":1086},[199,149515,149516],{"class":205}," Line()\n",[199,149518,149519,149522,149525,149527,149530,149532,149535,149537,149540,149542,149545],{"class":201,"line":333},[199,149520,149521],{"class":205},"line.add_xaxis([",[199,149523,149524],{"class":898},"\"周一\"",[199,149526,1912],{"class":205},[199,149528,149529],{"class":898},"\"周二\"",[199,149531,1912],{"class":205},[199,149533,149534],{"class":898},"\"周三\"",[199,149536,1912],{"class":205},[199,149538,149539],{"class":898},"\"周四\"",[199,149541,1912],{"class":205},[199,149543,149544],{"class":898},"\"周五\"",[199,149546,7554],{"class":205},[199,149548,149549,149552,149555,149557,149559,149561,149563,149565,149567,149569,149572,149574,149577],{"class":201,"line":227},[199,149550,149551],{"class":205},"line.add_yaxis(",[199,149553,149554],{"class":898},"\"销售额\"",[199,149556,79777],{"class":205},[199,149558,3396],{"class":1018},[199,149560,1912],{"class":205},[199,149562,3896],{"class":1018},[199,149564,1912],{"class":205},[199,149566,3941],{"class":1018},[199,149568,1912],{"class":205},[199,149570,149571],{"class":1018},"150",[199,149573,1912],{"class":205},[199,149575,149576],{"class":1018},"180",[199,149578,7554],{"class":205},[199,149580,149581,149584,149587],{"class":201,"line":238},[199,149582,149583],{"class":205},"line.render(",[199,149585,149586],{"class":898},"\"line.html\"",[199,149588,1594],{"class":205},[31,149590,149591,149592,149595],{},"运行后会生成 ",[196,149593,149594],{},"line.html","，用浏览器打开即可看到图表。",[31,149597,149598],{},"核心步骤：",[24,149600,149601,149604,149607,149610,149613],{},[27,149602,149603],{},"导入图表类。",[27,149605,149606],{},"创建图表对象。",[27,149608,149609],{},"添加 x 轴数据。",[27,149611,149612],{},"添加 y 轴数据。",[27,149614,149615],{},"渲染为 HTML。",[14,149617,149619],{"id":149618},"_105-全局配置","10.5 全局配置",[31,149621,149622,149623,149626],{},"常用配置在 ",[196,149624,149625],{},"pyecharts.options"," 中。",[190,149628,149630],{"className":33221,"code":149629,"language":33223,"meta":57,"style":57},"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",[196,149631,149632,149649,149659,149663,149671,149695,149723,149728,149747,149766,149784,149804,149808],{"__ignoreMap":57},[199,149633,149634,149636,149639,149641,149644,149646],{"class":201,"line":202},[199,149635,33579],{"class":1086},[199,149637,149638],{"class":205}," pyecharts ",[199,149640,33235],{"class":1086},[199,149642,149643],{"class":205}," options ",[199,149645,34225],{"class":1086},[199,149647,149648],{"class":205}," opts\n",[199,149650,149651,149653,149655,149657],{"class":201,"line":36},[199,149652,33579],{"class":1086},[199,149654,149497],{"class":205},[199,149656,33235],{"class":1086},[199,149658,149502],{"class":205},[199,149660,149661],{"class":201,"line":73},[199,149662,907],{"emptyLinePlaceholder":906},[199,149664,149665,149667,149669],{"class":201,"line":333},[199,149666,149511],{"class":205},[199,149668,895],{"class":1086},[199,149670,149516],{"class":205},[199,149672,149673,149675,149677,149679,149681,149683,149685,149687,149689,149691,149693],{"class":201,"line":227},[199,149674,149521],{"class":205},[199,149676,149524],{"class":898},[199,149678,1912],{"class":205},[199,149680,149529],{"class":898},[199,149682,1912],{"class":205},[199,149684,149534],{"class":898},[199,149686,1912],{"class":205},[199,149688,149539],{"class":898},[199,149690,1912],{"class":205},[199,149692,149544],{"class":898},[199,149694,7554],{"class":205},[199,149696,149697,149699,149701,149703,149705,149707,149709,149711,149713,149715,149717,149719,149721],{"class":201,"line":238},[199,149698,149551],{"class":205},[199,149700,149554],{"class":898},[199,149702,79777],{"class":205},[199,149704,3396],{"class":1018},[199,149706,1912],{"class":205},[199,149708,3896],{"class":1018},[199,149710,1912],{"class":205},[199,149712,3941],{"class":1018},[199,149714,1912],{"class":205},[199,149716,149571],{"class":1018},[199,149718,1912],{"class":205},[199,149720,149576],{"class":1018},[199,149722,7554],{"class":205},[199,149724,149725],{"class":201,"line":252},[199,149726,149727],{"class":205},"line.set_global_opts(\n",[199,149729,149730,149733,149735,149738,149740,149742,149745],{"class":201,"line":388},[199,149731,149732],{"class":8113},"    title_opts",[199,149734,895],{"class":1086},[199,149736,149737],{"class":205},"opts.TitleOpts(",[199,149739,988],{"class":8113},[199,149741,895],{"class":1086},[199,149743,149744],{"class":898},"\"一周销售额\"",[199,149746,40888],{"class":205},[199,149748,149749,149752,149754,149757,149759,149761,149764],{"class":201,"line":415},[199,149750,149751],{"class":8113},"    xaxis_opts",[199,149753,895],{"class":1086},[199,149755,149756],{"class":205},"opts.AxisOpts(",[199,149758,82069],{"class":8113},[199,149760,895],{"class":1086},[199,149762,149763],{"class":898},"\"日期\"",[199,149765,40888],{"class":205},[199,149767,149768,149771,149773,149775,149777,149779,149782],{"class":201,"line":426},[199,149769,149770],{"class":8113},"    yaxis_opts",[199,149772,895],{"class":1086},[199,149774,149756],{"class":205},[199,149776,82069],{"class":8113},[199,149778,895],{"class":1086},[199,149780,149781],{"class":898},"\"金额\"",[199,149783,40888],{"class":205},[199,149785,149786,149789,149791,149794,149797,149799,149802],{"class":201,"line":1015},[199,149787,149788],{"class":8113},"    tooltip_opts",[199,149790,895],{"class":1086},[199,149792,149793],{"class":205},"opts.TooltipOpts(",[199,149795,149796],{"class":8113},"trigger",[199,149798,895],{"class":1086},[199,149800,149801],{"class":898},"\"axis\"",[199,149803,40888],{"class":205},[199,149805,149806],{"class":201,"line":1031},[199,149807,1594],{"class":205},[199,149809,149810,149812,149814],{"class":201,"line":1043},[199,149811,149583],{"class":205},[199,149813,149586],{"class":898},[199,149815,1594],{"class":205},[31,149817,149818],{},"常见全局配置：",[3227,149820,149821,149830],{},[3230,149822,149823],{},[3233,149824,149825,149828],{},[3236,149826,149827],{},"配置",[3236,149829,104955],{},[3273,149831,149832,149842,149852,149862,149872,149882],{},[3233,149833,149834,149839],{},[3278,149835,149836],{},[196,149837,149838],{},"TitleOpts",[3278,149840,149841],{},"标题",[3233,149843,149844,149849],{},[3278,149845,149846],{},[196,149847,149848],{},"LegendOpts",[3278,149850,149851],{},"图例",[3233,149853,149854,149859],{},[3278,149855,149856],{},[196,149857,149858],{},"TooltipOpts",[3278,149860,149861],{},"提示框",[3233,149863,149864,149869],{},[3278,149865,149866],{},[196,149867,149868],{},"AxisOpts",[3278,149870,149871],{},"坐标轴",[3233,149873,149874,149879],{},[3278,149875,149876],{},[196,149877,149878],{},"VisualMapOpts",[3278,149880,149881],{},"视觉映射",[3233,149883,149884,149889],{},[3278,149885,149886],{},[196,149887,149888],{},"DataZoomOpts",[3278,149890,149891],{},"区域缩放",[14,149893,149895],{"id":149894},"_106-系列配置","10.6 系列配置",[31,149897,149898],{},"系列配置作用于某一组数据。",[190,149900,149902],{"className":33221,"code":149901,"language":33223,"meta":57,"style":57},"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",[196,149903,149904,149909,149920,149949,149960,149979],{"__ignoreMap":57},[199,149905,149906],{"class":201,"line":202},[199,149907,149908],{"class":205},"line.add_yaxis(\n",[199,149910,149911,149914,149916,149918],{"class":201,"line":36},[199,149912,149913],{"class":8113},"    series_name",[199,149915,895],{"class":1086},[199,149917,149554],{"class":898},[199,149919,34308],{"class":205},[199,149921,149922,149925,149927,149929,149931,149933,149935,149937,149939,149941,149943,149945,149947],{"class":201,"line":73},[199,149923,149924],{"class":8113},"    y_axis",[199,149926,895],{"class":1086},[199,149928,1662],{"class":205},[199,149930,3396],{"class":1018},[199,149932,1912],{"class":205},[199,149934,3896],{"class":1018},[199,149936,1912],{"class":205},[199,149938,3941],{"class":1018},[199,149940,1912],{"class":205},[199,149942,149571],{"class":1018},[199,149944,1912],{"class":205},[199,149946,149576],{"class":1018},[199,149948,90095],{"class":205},[199,149950,149951,149954,149956,149958],{"class":201,"line":333},[199,149952,149953],{"class":8113},"    is_smooth",[199,149955,895],{"class":1086},[199,149957,34318],{"class":1018},[199,149959,34308],{"class":205},[199,149961,149962,149965,149967,149970,149973,149975,149977],{"class":201,"line":227},[199,149963,149964],{"class":8113},"    label_opts",[199,149966,895],{"class":1086},[199,149968,149969],{"class":205},"opts.LabelOpts(",[199,149971,149972],{"class":8113},"is_show",[199,149974,895],{"class":1086},[199,149976,34318],{"class":1018},[199,149978,40888],{"class":205},[199,149980,149981],{"class":201,"line":238},[199,149982,1594],{"class":205},[31,149984,149985],{},"常用参数：",[24,149987,149988,149994,150000,150006,150012],{},[27,149989,149990,149993],{},[196,149991,149992],{},"series_name","：系列名称。",[27,149995,149996,149999],{},[196,149997,149998],{},"y_axis","：y 轴数据。",[27,150001,150002,150005],{},[196,150003,150004],{},"is_smooth","：是否平滑曲线。",[27,150007,150008,150011],{},[196,150009,150010],{},"label_opts","：标签配置。",[27,150013,150014,150017],{},[196,150015,150016],{},"symbol_size","：标记点大小。",[14,150019,150021],{"id":150020},"_107-多条折线","10.7 多条折线",[190,150023,150025],{"className":33221,"code":150024,"language":33223,"meta":57,"style":57},"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",[196,150026,150027,150041,150051,150055,150084,150088,150096,150101,150139,150176,150180,150197,150213,150217],{"__ignoreMap":57},[199,150028,150029,150031,150033,150035,150037,150039],{"class":201,"line":202},[199,150030,33579],{"class":1086},[199,150032,149638],{"class":205},[199,150034,33235],{"class":1086},[199,150036,149643],{"class":205},[199,150038,34225],{"class":1086},[199,150040,149648],{"class":205},[199,150042,150043,150045,150047,150049],{"class":201,"line":36},[199,150044,33579],{"class":1086},[199,150046,149497],{"class":205},[199,150048,33235],{"class":1086},[199,150050,149502],{"class":205},[199,150052,150053],{"class":201,"line":73},[199,150054,907],{"emptyLinePlaceholder":906},[199,150056,150057,150060,150062,150064,150066,150068,150070,150072,150074,150076,150078,150080,150082],{"class":201,"line":333},[199,150058,150059],{"class":205},"dates ",[199,150061,895],{"class":1086},[199,150063,1906],{"class":205},[199,150065,149524],{"class":898},[199,150067,1912],{"class":205},[199,150069,149529],{"class":898},[199,150071,1912],{"class":205},[199,150073,149534],{"class":898},[199,150075,1912],{"class":205},[199,150077,149539],{"class":898},[199,150079,1912],{"class":205},[199,150081,149544],{"class":898},[199,150083,1932],{"class":205},[199,150085,150086],{"class":201,"line":227},[199,150087,907],{"emptyLinePlaceholder":906},[199,150089,150090,150092,150094],{"class":201,"line":238},[199,150091,149511],{"class":205},[199,150093,895],{"class":1086},[199,150095,149516],{"class":205},[199,150097,150098],{"class":201,"line":252},[199,150099,150100],{"class":205},"line.add_xaxis(dates)\n",[199,150102,150103,150105,150108,150110,150112,150114,150117,150119,150121,150123,150125,150127,150129,150131,150133,150135,150137],{"class":201,"line":388},[199,150104,149551],{"class":205},[199,150106,150107],{"class":898},"\"线上销售\"",[199,150109,79777],{"class":205},[199,150111,3396],{"class":1018},[199,150113,1912],{"class":205},[199,150115,150116],{"class":1018},"130",[199,150118,1912],{"class":205},[199,150120,3896],{"class":1018},[199,150122,1912],{"class":205},[199,150124,23893],{"class":1018},[199,150126,1912],{"class":205},[199,150128,4647],{"class":1018},[199,150130,114461],{"class":205},[199,150132,150004],{"class":8113},[199,150134,895],{"class":1086},[199,150136,34318],{"class":1018},[199,150138,1594],{"class":205},[199,150140,150141,150143,150146,150148,150150,150152,150154,150156,150158,150160,150162,150164,150166,150168,150170,150172,150174],{"class":201,"line":415},[199,150142,149551],{"class":205},[199,150144,150145],{"class":898},"\"线下销售\"",[199,150147,79777],{"class":205},[199,150149,3692],{"class":1018},[199,150151,1912],{"class":205},[199,150153,3941],{"class":1018},[199,150155,1912],{"class":205},[199,150157,3396],{"class":1018},[199,150159,1912],{"class":205},[199,150161,3896],{"class":1018},[199,150163,1912],{"class":205},[199,150165,149571],{"class":1018},[199,150167,114461],{"class":205},[199,150169,150004],{"class":8113},[199,150171,895],{"class":1086},[199,150173,34318],{"class":1018},[199,150175,1594],{"class":205},[199,150177,150178],{"class":201,"line":426},[199,150179,149727],{"class":205},[199,150181,150182,150184,150186,150188,150190,150192,150195],{"class":201,"line":1015},[199,150183,149732],{"class":8113},[199,150185,895],{"class":1086},[199,150187,149737],{"class":205},[199,150189,988],{"class":8113},[199,150191,895],{"class":1086},[199,150193,150194],{"class":898},"\"线上线下销售趋势\"",[199,150196,40888],{"class":205},[199,150198,150199,150201,150203,150205,150207,150209,150211],{"class":201,"line":1031},[199,150200,149788],{"class":8113},[199,150202,895],{"class":1086},[199,150204,149793],{"class":205},[199,150206,149796],{"class":8113},[199,150208,895],{"class":1086},[199,150210,149801],{"class":898},[199,150212,40888],{"class":205},[199,150214,150215],{"class":201,"line":1043},[199,150216,1594],{"class":205},[199,150218,150219,150221,150224],{"class":201,"line":1049},[199,150220,149583],{"class":205},[199,150222,150223],{"class":898},"\"sales.html\"",[199,150225,1594],{"class":205},[31,150227,150228],{},"多条折线适合比较不同指标或不同地区。",[14,150230,150232],{"id":150231},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[31,150234,150235,150236,27462],{},"假设 ",[196,150237,150238],{},"sales.json",[190,150240,150242],{"className":149304,"code":150241,"language":148051,"meta":57,"style":57},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[196,150243,150244,150249,150281,150309,150337],{"__ignoreMap":57},[199,150245,150246],{"class":201,"line":202},[199,150247,150248],{"class":205},"[\n",[199,150250,150251,150254,150257,150259,150261,150263,150266,150268,150270,150272,150275,150277,150279],{"class":201,"line":36},[199,150252,150253],{"class":205},"  {",[199,150255,150256],{"class":1018},"\"date\"",[199,150258,1022],{"class":205},[199,150260,149524],{"class":898},[199,150262,1912],{"class":205},[199,150264,150265],{"class":1018},"\"online\"",[199,150267,1022],{"class":205},[199,150269,3396],{"class":1018},[199,150271,1912],{"class":205},[199,150273,150274],{"class":1018},"\"offline\"",[199,150276,1022],{"class":205},[199,150278,3692],{"class":1018},[199,150280,7827],{"class":205},[199,150282,150283,150285,150287,150289,150291,150293,150295,150297,150299,150301,150303,150305,150307],{"class":201,"line":73},[199,150284,150253],{"class":205},[199,150286,150256],{"class":1018},[199,150288,1022],{"class":205},[199,150290,149529],{"class":898},[199,150292,1912],{"class":205},[199,150294,150265],{"class":1018},[199,150296,1022],{"class":205},[199,150298,150116],{"class":1018},[199,150300,1912],{"class":205},[199,150302,150274],{"class":1018},[199,150304,1022],{"class":205},[199,150306,3941],{"class":1018},[199,150308,7827],{"class":205},[199,150310,150311,150313,150315,150317,150319,150321,150323,150325,150327,150329,150331,150333,150335],{"class":201,"line":333},[199,150312,150253],{"class":205},[199,150314,150256],{"class":1018},[199,150316,1022],{"class":205},[199,150318,149534],{"class":898},[199,150320,1912],{"class":205},[199,150322,150265],{"class":1018},[199,150324,1022],{"class":205},[199,150326,3896],{"class":1018},[199,150328,1912],{"class":205},[199,150330,150274],{"class":1018},[199,150332,1022],{"class":205},[199,150334,3396],{"class":1018},[199,150336,671],{"class":205},[199,150338,150339],{"class":201,"line":227},[199,150340,1932],{"class":205},[31,150342,150343],{},"读取并绘图：",[190,150345,150347],{"className":33221,"code":150346,"language":33223,"meta":57,"style":57},"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",[196,150348,150349,150355,150369,150379,150383,150415,150428,150432,150440,150449,150458,150462,150474,150483,150492,150501,150505,150513,150517,150534,150551,150555,150572,150588,150592],{"__ignoreMap":57},[199,150350,150351,150353],{"class":201,"line":202},[199,150352,33235],{"class":1086},[199,150354,149350],{"class":205},[199,150356,150357,150359,150361,150363,150365,150367],{"class":201,"line":36},[199,150358,33579],{"class":1086},[199,150360,149638],{"class":205},[199,150362,33235],{"class":1086},[199,150364,149643],{"class":205},[199,150366,34225],{"class":1086},[199,150368,149648],{"class":205},[199,150370,150371,150373,150375,150377],{"class":201,"line":73},[199,150372,33579],{"class":1086},[199,150374,149497],{"class":205},[199,150376,33235],{"class":1086},[199,150378,149502],{"class":205},[199,150380,150381],{"class":201,"line":333},[199,150382,907],{"emptyLinePlaceholder":906},[199,150384,150385,150387,150389,150391,150394,150396,150398,150400,150402,150404,150406,150408,150410,150413],{"class":201,"line":227},[199,150386,110092],{"class":1086},[199,150388,149050],{"class":1018},[199,150390,1537],{"class":205},[199,150392,150393],{"class":898},"\"sales.json\"",[199,150395,1912],{"class":205},[199,150397,149060],{"class":898},[199,150399,1912],{"class":205},[199,150401,149065],{"class":8113},[199,150403,895],{"class":1086},[199,150405,149070],{"class":898},[199,150407,16575],{"class":205},[199,150409,34225],{"class":1086},[199,150411,150412],{"class":8113}," file",[199,150414,6640],{"class":205},[199,150416,150417,150419,150421,150424,150426],{"class":201,"line":238},[199,150418,103680],{"class":205},[199,150420,895],{"class":1086},[199,150422,150423],{"class":205}," json.load(",[199,150425,48195],{"class":8113},[199,150427,1594],{"class":205},[199,150429,150430],{"class":201,"line":252},[199,150431,907],{"emptyLinePlaceholder":906},[199,150433,150434,150436,150438],{"class":201,"line":388},[199,150435,150059],{"class":205},[199,150437,895],{"class":1086},[199,150439,1475],{"class":205},[199,150441,150442,150445,150447],{"class":201,"line":415},[199,150443,150444],{"class":205},"online_sales ",[199,150446,895],{"class":1086},[199,150448,1475],{"class":205},[199,150450,150451,150454,150456],{"class":201,"line":426},[199,150452,150453],{"class":205},"offline_sales ",[199,150455,895],{"class":1086},[199,150457,1475],{"class":205},[199,150459,150460],{"class":201,"line":1015},[199,150461,907],{"emptyLinePlaceholder":906},[199,150463,150464,150466,150469,150471],{"class":201,"line":1031},[199,150465,5929],{"class":1086},[199,150467,150468],{"class":205}," item ",[199,150470,28886],{"class":1086},[199,150472,150473],{"class":205}," data:\n",[199,150475,150476,150479,150481],{"class":201,"line":1043},[199,150477,150478],{"class":205},"    dates.append(item[",[199,150480,150256],{"class":898},[199,150482,7554],{"class":205},[199,150484,150485,150488,150490],{"class":201,"line":1049},[199,150486,150487],{"class":205},"    online_sales.append(item[",[199,150489,150265],{"class":898},[199,150491,7554],{"class":205},[199,150493,150494,150497,150499],{"class":201,"line":1054},[199,150495,150496],{"class":205},"    offline_sales.append(item[",[199,150498,150274],{"class":898},[199,150500,7554],{"class":205},[199,150502,150503],{"class":201,"line":1062},[199,150504,907],{"emptyLinePlaceholder":906},[199,150506,150507,150509,150511],{"class":201,"line":1075},[199,150508,149511],{"class":205},[199,150510,895],{"class":1086},[199,150512,149516],{"class":205},[199,150514,150515],{"class":201,"line":1092},[199,150516,150100],{"class":205},[199,150518,150519,150521,150523,150526,150528,150530,150532],{"class":201,"line":1107},[199,150520,149551],{"class":205},[199,150522,150107],{"class":898},[199,150524,150525],{"class":205},", online_sales, ",[199,150527,150004],{"class":8113},[199,150529,895],{"class":1086},[199,150531,34318],{"class":1018},[199,150533,1594],{"class":205},[199,150535,150536,150538,150540,150543,150545,150547,150549],{"class":201,"line":1128},[199,150537,149551],{"class":205},[199,150539,150145],{"class":898},[199,150541,150542],{"class":205},", offline_sales, ",[199,150544,150004],{"class":8113},[199,150546,895],{"class":1086},[199,150548,34318],{"class":1018},[199,150550,1594],{"class":205},[199,150552,150553],{"class":201,"line":1146},[199,150554,149727],{"class":205},[199,150556,150557,150559,150561,150563,150565,150567,150570],{"class":201,"line":1163},[199,150558,149732],{"class":8113},[199,150560,895],{"class":1086},[199,150562,149737],{"class":205},[199,150564,988],{"class":8113},[199,150566,895],{"class":1086},[199,150568,150569],{"class":898},"\"销售趋势\"",[199,150571,40888],{"class":205},[199,150573,150574,150576,150578,150580,150582,150584,150586],{"class":201,"line":1176},[199,150575,149788],{"class":8113},[199,150577,895],{"class":1086},[199,150579,149793],{"class":205},[199,150581,149796],{"class":8113},[199,150583,895],{"class":1086},[199,150585,149801],{"class":898},[199,150587,40888],{"class":205},[199,150589,150590],{"class":201,"line":1189},[199,150591,1594],{"class":205},[199,150593,150594,150596,150598],{"class":201,"line":1202},[199,150595,149583],{"class":205},[199,150597,150223],{"class":898},[199,150599,1594],{"class":205},[14,150601,150603],{"id":150602},"_109-数据清洗","10.9 数据清洗",[31,150605,150606],{},"真实数据经常不整齐，需要清洗。",[31,150608,150609],{},"常见问题：",[24,150611,150612,150615,150618,150621],{},[27,150613,150614],{},"数字是字符串。",[27,150616,150617],{},"字段缺失。",[27,150619,150620],{},"空值。",[27,150622,150623],{},"日期格式不统一。",[31,150625,17994],{},[190,150627,150629],{"className":33221,"code":150628,"language":33223,"meta":57,"style":57},"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",[196,150630,150631,150640,150663,150683,150704,150708,150712,150720,150729,150733,150744,150758,150767,150772,150776,150784,150794,150798,150805],{"__ignoreMap":57},[199,150632,150633,150636,150638],{"class":201,"line":202},[199,150634,150635],{"class":205},"raw_data ",[199,150637,895],{"class":1086},[199,150639,57706],{"class":205},[199,150641,150642,150645,150647,150649,150651,150653,150656,150658,150661],{"class":201,"line":36},[199,150643,150644],{"class":205},"    {",[199,150646,150256],{"class":898},[199,150648,1022],{"class":205},[199,150650,149524],{"class":898},[199,150652,1912],{"class":205},[199,150654,150655],{"class":898},"\"sales\"",[199,150657,1022],{"class":205},[199,150659,150660],{"class":898},"\"100\"",[199,150662,7827],{"class":205},[199,150664,150665,150667,150669,150671,150673,150675,150677,150679,150681],{"class":201,"line":73},[199,150666,150644],{"class":205},[199,150668,150256],{"class":898},[199,150670,1022],{"class":205},[199,150672,149529],{"class":898},[199,150674,1912],{"class":205},[199,150676,150655],{"class":898},[199,150678,1022],{"class":205},[199,150680,10549],{"class":898},[199,150682,7827],{"class":205},[199,150684,150685,150687,150689,150691,150693,150695,150697,150699,150702],{"class":201,"line":333},[199,150686,150644],{"class":205},[199,150688,150256],{"class":898},[199,150690,1022],{"class":205},[199,150692,149534],{"class":898},[199,150694,1912],{"class":205},[199,150696,150655],{"class":898},[199,150698,1022],{"class":205},[199,150700,150701],{"class":898},"\"120\"",[199,150703,7827],{"class":205},[199,150705,150706],{"class":201,"line":227},[199,150707,1932],{"class":205},[199,150709,150710],{"class":201,"line":238},[199,150711,907],{"emptyLinePlaceholder":906},[199,150713,150714,150716,150718],{"class":201,"line":252},[199,150715,150059],{"class":205},[199,150717,895],{"class":1086},[199,150719,1475],{"class":205},[199,150721,150722,150725,150727],{"class":201,"line":388},[199,150723,150724],{"class":205},"sales ",[199,150726,895],{"class":1086},[199,150728,1475],{"class":205},[199,150730,150731],{"class":201,"line":415},[199,150732,907],{"emptyLinePlaceholder":906},[199,150734,150735,150737,150739,150741],{"class":201,"line":426},[199,150736,5929],{"class":1086},[199,150738,150468],{"class":205},[199,150740,28886],{"class":1086},[199,150742,150743],{"class":205}," raw_data:\n",[199,150745,150746,150749,150751,150754,150756],{"class":201,"line":1015},[199,150747,150748],{"class":205},"    value ",[199,150750,895],{"class":1086},[199,150752,150753],{"class":205}," item.get(",[199,150755,150655],{"class":898},[199,150757,1594],{"class":205},[199,150759,150760,150762,150764],{"class":201,"line":1031},[199,150761,6005],{"class":1086},[199,150763,41771],{"class":1086},[199,150765,150766],{"class":205}," value:\n",[199,150768,150769],{"class":201,"line":1043},[199,150770,150771],{"class":1086},"        continue\n",[199,150773,150774],{"class":201,"line":1049},[199,150775,907],{"emptyLinePlaceholder":906},[199,150777,150778,150780,150782],{"class":201,"line":1054},[199,150779,150478],{"class":205},[199,150781,150256],{"class":898},[199,150783,7554],{"class":205},[199,150785,150786,150789,150791],{"class":201,"line":1062},[199,150787,150788],{"class":205},"    sales.append(",[199,150790,3100],{"class":1018},[199,150792,150793],{"class":205},"(value))\n",[199,150795,150796],{"class":201,"line":1075},[199,150797,907],{"emptyLinePlaceholder":906},[199,150799,150800,150802],{"class":201,"line":1092},[199,150801,33258],{"class":1018},[199,150803,150804],{"class":205},"(dates)\n",[199,150806,150807,150809],{"class":201,"line":1107},[199,150808,33258],{"class":1018},[199,150810,150811],{"class":205},"(sales)\n",[14,150813,150815],{"id":150814},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[190,150817,150819],{"className":33221,"code":150818,"language":33223,"meta":57,"style":57},"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",[196,150820,150821,150835,150845,150849,150857,150878,150900,150922,150944,150966,150970,150974,150996,151017,151021,151029,151033,151037,151047,151056,151066,151082,151086,151090,151107,151123,151139,151155,151165,151169],{"__ignoreMap":57},[199,150822,150823,150825,150827,150829,150831,150833],{"class":201,"line":202},[199,150824,33579],{"class":1086},[199,150826,149638],{"class":205},[199,150828,33235],{"class":1086},[199,150830,149643],{"class":205},[199,150832,34225],{"class":1086},[199,150834,149648],{"class":205},[199,150836,150837,150839,150841,150843],{"class":201,"line":36},[199,150838,33579],{"class":1086},[199,150840,149497],{"class":205},[199,150842,33235],{"class":1086},[199,150844,149502],{"class":205},[199,150846,150847],{"class":201,"line":73},[199,150848,907],{"emptyLinePlaceholder":906},[199,150850,150851,150853,150855],{"class":201,"line":333},[199,150852,150724],{"class":205},[199,150854,895],{"class":1086},[199,150856,57706],{"class":205},[199,150858,150859,150861,150863,150865,150868,150870,150872,150874,150876],{"class":201,"line":227},[199,150860,150644],{"class":205},[199,150862,150256],{"class":898},[199,150864,1022],{"class":205},[199,150866,150867],{"class":898},"\"2024-10-01\"",[199,150869,1912],{"class":205},[199,150871,86343],{"class":898},[199,150873,1022],{"class":205},[199,150875,94282],{"class":1018},[199,150877,7827],{"class":205},[199,150879,150880,150882,150884,150886,150889,150891,150893,150895,150898],{"class":201,"line":238},[199,150881,150644],{"class":205},[199,150883,150256],{"class":898},[199,150885,1022],{"class":205},[199,150887,150888],{"class":898},"\"2024-10-02\"",[199,150890,1912],{"class":205},[199,150892,86343],{"class":898},[199,150894,1022],{"class":205},[199,150896,150897],{"class":1018},"1800",[199,150899,7827],{"class":205},[199,150901,150902,150904,150906,150908,150911,150913,150915,150917,150920],{"class":201,"line":252},[199,150903,150644],{"class":205},[199,150905,150256],{"class":898},[199,150907,1022],{"class":205},[199,150909,150910],{"class":898},"\"2024-10-03\"",[199,150912,1912],{"class":205},[199,150914,86343],{"class":898},[199,150916,1022],{"class":205},[199,150918,150919],{"class":1018},"1500",[199,150921,7827],{"class":205},[199,150923,150924,150926,150928,150930,150933,150935,150937,150939,150942],{"class":201,"line":388},[199,150925,150644],{"class":205},[199,150927,150256],{"class":898},[199,150929,1022],{"class":205},[199,150931,150932],{"class":898},"\"2024-10-04\"",[199,150934,1912],{"class":205},[199,150936,86343],{"class":898},[199,150938,1022],{"class":205},[199,150940,150941],{"class":1018},"2100",[199,150943,7827],{"class":205},[199,150945,150946,150948,150950,150952,150955,150957,150959,150961,150964],{"class":201,"line":415},[199,150947,150644],{"class":205},[199,150949,150256],{"class":898},[199,150951,1022],{"class":205},[199,150953,150954],{"class":898},"\"2024-10-05\"",[199,150956,1912],{"class":205},[199,150958,86343],{"class":898},[199,150960,1022],{"class":205},[199,150962,150963],{"class":1018},"2600",[199,150965,7827],{"class":205},[199,150967,150968],{"class":201,"line":426},[199,150969,1932],{"class":205},[199,150971,150972],{"class":201,"line":1015},[199,150973,907],{"emptyLinePlaceholder":906},[199,150975,150976,150978,150980,150983,150985,150987,150989,150991,150993],{"class":201,"line":1031},[199,150977,150059],{"class":205},[199,150979,895],{"class":1086},[199,150981,150982],{"class":205}," [item[",[199,150984,150256],{"class":898},[199,150986,2078],{"class":205},[199,150988,5929],{"class":1086},[199,150990,150468],{"class":205},[199,150992,28886],{"class":1086},[199,150994,150995],{"class":205}," sales]\n",[199,150997,150998,151001,151003,151005,151007,151009,151011,151013,151015],{"class":201,"line":1043},[199,150999,151000],{"class":205},"amounts ",[199,151002,895],{"class":1086},[199,151004,150982],{"class":205},[199,151006,86343],{"class":898},[199,151008,2078],{"class":205},[199,151010,5929],{"class":1086},[199,151012,150468],{"class":205},[199,151014,28886],{"class":1086},[199,151016,150995],{"class":205},[199,151018,151019],{"class":201,"line":1049},[199,151020,907],{"emptyLinePlaceholder":906},[199,151022,151023,151025,151027],{"class":201,"line":1054},[199,151024,149511],{"class":205},[199,151026,895],{"class":1086},[199,151028,149516],{"class":205},[199,151030,151031],{"class":201,"line":1062},[199,151032,150100],{"class":205},[199,151034,151035],{"class":201,"line":1075},[199,151036,149908],{"class":205},[199,151038,151039,151041,151043,151045],{"class":201,"line":1092},[199,151040,149913],{"class":8113},[199,151042,895],{"class":1086},[199,151044,149554],{"class":898},[199,151046,34308],{"class":205},[199,151048,151049,151051,151053],{"class":201,"line":1107},[199,151050,149924],{"class":8113},[199,151052,895],{"class":1086},[199,151054,151055],{"class":205},"amounts,\n",[199,151057,151058,151060,151062,151064],{"class":201,"line":1128},[199,151059,149953],{"class":8113},[199,151061,895],{"class":1086},[199,151063,34318],{"class":1018},[199,151065,34308],{"class":205},[199,151067,151068,151070,151072,151074,151076,151078,151080],{"class":201,"line":1146},[199,151069,149964],{"class":8113},[199,151071,895],{"class":1086},[199,151073,149969],{"class":205},[199,151075,149972],{"class":8113},[199,151077,895],{"class":1086},[199,151079,34318],{"class":1018},[199,151081,40888],{"class":205},[199,151083,151084],{"class":201,"line":1163},[199,151085,1594],{"class":205},[199,151087,151088],{"class":201,"line":1176},[199,151089,149727],{"class":205},[199,151091,151092,151094,151096,151098,151100,151102,151105],{"class":201,"line":1189},[199,151093,149732],{"class":8113},[199,151095,895],{"class":1086},[199,151097,149737],{"class":205},[199,151099,988],{"class":8113},[199,151101,895],{"class":1086},[199,151103,151104],{"class":898},"\"每日销售额\"",[199,151106,40888],{"class":205},[199,151108,151109,151111,151113,151115,151117,151119,151121],{"class":201,"line":1202},[199,151110,149751],{"class":8113},[199,151112,895],{"class":1086},[199,151114,149756],{"class":205},[199,151116,82069],{"class":8113},[199,151118,895],{"class":1086},[199,151120,149763],{"class":898},[199,151122,40888],{"class":205},[199,151124,151125,151127,151129,151131,151133,151135,151137],{"class":201,"line":1207},[199,151126,149770],{"class":8113},[199,151128,895],{"class":1086},[199,151130,149756],{"class":205},[199,151132,82069],{"class":8113},[199,151134,895],{"class":1086},[199,151136,149781],{"class":898},[199,151138,40888],{"class":205},[199,151140,151141,151143,151145,151147,151149,151151,151153],{"class":201,"line":1212},[199,151142,149788],{"class":8113},[199,151144,895],{"class":1086},[199,151146,149793],{"class":205},[199,151148,149796],{"class":8113},[199,151150,895],{"class":1086},[199,151152,149801],{"class":898},[199,151154,40888],{"class":205},[199,151156,151157,151160,151162],{"class":201,"line":1225},[199,151158,151159],{"class":8113},"    datazoom_opts",[199,151161,895],{"class":1086},[199,151163,151164],{"class":205},"[opts.DataZoomOpts()],\n",[199,151166,151167],{"class":201,"line":1236},[199,151168,1594],{"class":205},[199,151170,151171,151173,151176],{"class":201,"line":1249},[199,151172,149583],{"class":205},[199,151174,151175],{"class":898},"\"daily_sales.html\"",[199,151177,1594],{"class":205},[31,151179,151180,151183],{},[196,151181,151182],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151185,151187],{"id":151186},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[31,151189,151190],{},"如果数据结构如下：",[190,151192,151194],{"className":33221,"code":151193,"language":33223,"meta":57,"style":57},"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",[196,151195,151196,151204,151212,151234,151255,151260,151267,151287,151307,151311],{"__ignoreMap":57},[199,151197,151198,151200,151202],{"class":201,"line":202},[199,151199,103917],{"class":205},[199,151201,895],{"class":1086},[199,151203,1012],{"class":205},[199,151205,151206,151209],{"class":201,"line":36},[199,151207,151208],{"class":898},"    \"北京\"",[199,151210,151211],{"class":205},": [\n",[199,151213,151214,151216,151218,151220,151223,151225,151228,151230,151232],{"class":201,"line":73},[199,151215,7814],{"class":205},[199,151217,150256],{"class":898},[199,151219,1022],{"class":205},[199,151221,151222],{"class":898},"\"2024-01-01\"",[199,151224,1912],{"class":205},[199,151226,151227],{"class":898},"\"confirm\"",[199,151229,1022],{"class":205},[199,151231,3528],{"class":1018},[199,151233,7827],{"class":205},[199,151235,151236,151238,151240,151242,151245,151247,151249,151251,151253],{"class":201,"line":333},[199,151237,7814],{"class":205},[199,151239,150256],{"class":898},[199,151241,1022],{"class":205},[199,151243,151244],{"class":898},"\"2024-01-02\"",[199,151246,1912],{"class":205},[199,151248,151227],{"class":898},[199,151250,1022],{"class":205},[199,151252,3579],{"class":1018},[199,151254,7827],{"class":205},[199,151256,151257],{"class":201,"line":227},[199,151258,151259],{"class":205},"    ],\n",[199,151261,151262,151265],{"class":201,"line":238},[199,151263,151264],{"class":898},"    \"上海\"",[199,151266,151211],{"class":205},[199,151268,151269,151271,151273,151275,151277,151279,151281,151283,151285],{"class":201,"line":252},[199,151270,7814],{"class":205},[199,151272,150256],{"class":898},[199,151274,1022],{"class":205},[199,151276,151222],{"class":898},[199,151278,1912],{"class":205},[199,151280,151227],{"class":898},[199,151282,1022],{"class":205},[199,151284,3478],{"class":1018},[199,151286,7827],{"class":205},[199,151288,151289,151291,151293,151295,151297,151299,151301,151303,151305],{"class":201,"line":388},[199,151290,7814],{"class":205},[199,151292,150256],{"class":898},[199,151294,1022],{"class":205},[199,151296,151244],{"class":898},[199,151298,1912],{"class":205},[199,151300,151227],{"class":898},[199,151302,1022],{"class":205},[199,151304,3604],{"class":1018},[199,151306,7827],{"class":205},[199,151308,151309],{"class":201,"line":415},[199,151310,151259],{"class":205},[199,151312,151313],{"class":201,"line":426},[199,151314,671],{"class":205},[31,151316,151317],{},"绘制多地区趋势：",[190,151319,151321],{"className":33221,"code":151320,"language":33223,"meta":57,"style":57},"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",[196,151322,151323,151337,151347,151351,151376,151380,151388,151392,151396,151408,151430,151443,151447,151451,151468,151484,151488],{"__ignoreMap":57},[199,151324,151325,151327,151329,151331,151333,151335],{"class":201,"line":202},[199,151326,33579],{"class":1086},[199,151328,149638],{"class":205},[199,151330,33235],{"class":1086},[199,151332,149643],{"class":205},[199,151334,34225],{"class":1086},[199,151336,149648],{"class":205},[199,151338,151339,151341,151343,151345],{"class":201,"line":36},[199,151340,33579],{"class":1086},[199,151342,149497],{"class":205},[199,151344,33235],{"class":1086},[199,151346,149502],{"class":205},[199,151348,151349],{"class":201,"line":73},[199,151350,907],{"emptyLinePlaceholder":906},[199,151352,151353,151355,151357,151359,151361,151363,151365,151367,151369,151372,151374],{"class":201,"line":333},[199,151354,150059],{"class":205},[199,151356,895],{"class":1086},[199,151358,150982],{"class":205},[199,151360,150256],{"class":898},[199,151362,2078],{"class":205},[199,151364,5929],{"class":1086},[199,151366,150468],{"class":205},[199,151368,28886],{"class":1086},[199,151370,151371],{"class":205}," data[",[199,151373,71528],{"class":898},[199,151375,79786],{"class":205},[199,151377,151378],{"class":201,"line":227},[199,151379,907],{"emptyLinePlaceholder":906},[199,151381,151382,151384,151386],{"class":201,"line":238},[199,151383,149511],{"class":205},[199,151385,895],{"class":1086},[199,151387,149516],{"class":205},[199,151389,151390],{"class":201,"line":252},[199,151391,150100],{"class":205},[199,151393,151394],{"class":201,"line":388},[199,151395,907],{"emptyLinePlaceholder":906},[199,151397,151398,151400,151403,151405],{"class":201,"line":415},[199,151399,5929],{"class":1086},[199,151401,151402],{"class":205}," city, records ",[199,151404,28886],{"class":1086},[199,151406,151407],{"class":205}," data.items():\n",[199,151409,151410,151413,151415,151417,151419,151421,151423,151425,151427],{"class":201,"line":426},[199,151411,151412],{"class":205},"    values ",[199,151414,895],{"class":1086},[199,151416,150982],{"class":205},[199,151418,151227],{"class":898},[199,151420,2078],{"class":205},[199,151422,5929],{"class":1086},[199,151424,150468],{"class":205},[199,151426,28886],{"class":1086},[199,151428,151429],{"class":205}," records]\n",[199,151431,151432,151435,151437,151439,151441],{"class":201,"line":1015},[199,151433,151434],{"class":205},"    line.add_yaxis(city, values, ",[199,151436,150004],{"class":8113},[199,151438,895],{"class":1086},[199,151440,34318],{"class":1018},[199,151442,1594],{"class":205},[199,151444,151445],{"class":201,"line":1031},[199,151446,907],{"emptyLinePlaceholder":906},[199,151448,151449],{"class":201,"line":1043},[199,151450,149727],{"class":205},[199,151452,151453,151455,151457,151459,151461,151463,151466],{"class":201,"line":1049},[199,151454,149732],{"class":8113},[199,151456,895],{"class":1086},[199,151458,149737],{"class":205},[199,151460,988],{"class":8113},[199,151462,895],{"class":1086},[199,151464,151465],{"class":898},"\"多地区趋势图\"",[199,151467,40888],{"class":205},[199,151469,151470,151472,151474,151476,151478,151480,151482],{"class":201,"line":1054},[199,151471,149788],{"class":8113},[199,151473,895],{"class":1086},[199,151475,149793],{"class":205},[199,151477,149796],{"class":8113},[199,151479,895],{"class":1086},[199,151481,149801],{"class":898},[199,151483,40888],{"class":205},[199,151485,151486],{"class":201,"line":1062},[199,151487,1594],{"class":205},[199,151489,151490,151492,151495],{"class":201,"line":1075},[199,151491,149583],{"class":205},[199,151493,151494],{"class":898},"\"trend.html\"",[199,151496,1594],{"class":205},[31,151498,151499],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151501,151503],{"id":151502},"_1012-易错点","10.12 易错点",[24,151505,151506,151512,151518,151528,151534],{},[27,151507,151508,151511],{},[196,151509,151510],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[27,151513,151514,151517],{},[196,151515,151516],{},"render()"," 生成的是 HTML，不是图片。",[27,151519,151520,151521,151524,151525,31228],{},"JSON 字符串用 ",[196,151522,151523],{},"json.loads()","，JSON 文件用 ",[196,151526,151527],{},"json.load()",[27,151529,151530,151531,31228],{},"中文 JSON 保存时加 ",[196,151532,151533],{},"ensure_ascii=False",[27,151535,151536],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151538,151540],{"id":151539},"_1013-本章练习","10.13 本章练习",[24,151542,151543,151546,151549,151552,151555],{},[27,151544,151545],{},"安装 pyecharts 并生成第一个折线图。",[27,151547,151548],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[27,151550,151551],{},"绘制两条折线，对比线上和线下销售额。",[27,151553,151554],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[27,151556,151557],{},"对含有空值的销售数据进行清洗后再绘图。",[1002,151559,151560],{},"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":57,"searchDepth":36,"depth":36,"links":151562},[151563,151564,151565,151566,151567,151568,151569,151570,151571,151572,151573,151574,151575],{"id":149179,"depth":36,"text":149180},{"id":149254,"depth":36,"text":149255},{"id":149433,"depth":36,"text":149434},{"id":149484,"depth":36,"text":149485},{"id":149618,"depth":36,"text":149619},{"id":149894,"depth":36,"text":149895},{"id":150020,"depth":36,"text":150021},{"id":150231,"depth":36,"text":150232},{"id":150602,"depth":36,"text":150603},{"id":150814,"depth":36,"text":150815},{"id":151186,"depth":36,"text":151187},{"id":151502,"depth":36,"text":151503},{"id":151539,"depth":36,"text":151540},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149171,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151582,"title":151583,"body":151584,"description":3023,"extension":3024,"meta":153944,"navigation":906,"path":153945,"seo":153946,"stem":153947,"__hash__":153948},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151585,"toc":153921},[151586,151589,151593,151596,151599,151675,151678,151769,151772,151776,151779,151823,151836,151840,151843,151910,151913,151917,151920,152004,152012,152016,152021,152162,152165,152176,152182,152188,152302,152306,152309,152312,152565,152568,152572,152575,152679,152682,152686,152837,152841,152848,152961,152965,152968,153074,153077,153081,153084,153115,153118,153223,153226,153230,153234,153244,153312,153316,153323,153387,153390,153394,153400,153496,153505,153509,153833,153842,153846,153874,153878,153918],[10,151587,151583],{"id":151588},"_11-面向对象基础",[14,151590,151592],{"id":151591},"_111-什么是面向对象","11.1 什么是面向对象",[31,151594,151595],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[31,151597,151598],{},"面向过程：",[190,151600,151602],{"className":33221,"code":151601,"language":33223,"meta":57,"style":57},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[196,151603,151604,151613,151621,151625,151635,151666,151670],{"__ignoreMap":57},[199,151605,151606,151608,151610],{"class":201,"line":202},[199,151607,148795],{"class":205},[199,151609,895],{"class":1086},[199,151611,151612],{"class":898}," \"小明\"\n",[199,151614,151615,151617,151619],{"class":201,"line":36},[199,151616,148805],{"class":205},[199,151618,895],{"class":1086},[199,151620,148810],{"class":1018},[199,151622,151623],{"class":201,"line":73},[199,151624,907],{"emptyLinePlaceholder":906},[199,151626,151627,151629,151632],{"class":201,"line":333},[199,151628,34789],{"class":1086},[199,151630,151631],{"class":878}," introduce",[199,151633,151634],{"class":205},"(name, age):\n",[199,151636,151637,151639,151641,151643,151646,151648,151650,151652,151655,151657,151659,151661,151664],{"class":201,"line":227},[199,151638,34141],{"class":1018},[199,151640,1537],{"class":205},[199,151642,3146],{"class":1086},[199,151644,151645],{"class":898},"\"我叫",[199,151647,3974],{"class":1018},[199,151649,82069],{"class":205},[199,151651,759],{"class":1018},[199,151653,151654],{"class":898},"，今年",[199,151656,3974],{"class":1018},[199,151658,72480],{"class":205},[199,151660,759],{"class":1018},[199,151662,151663],{"class":898},"岁\"",[199,151665,1594],{"class":205},[199,151667,151668],{"class":201,"line":238},[199,151669,907],{"emptyLinePlaceholder":906},[199,151671,151672],{"class":201,"line":252},[199,151673,151674],{"class":205},"introduce(name, age)\n",[31,151676,151677],{},"面向对象：",[190,151679,151681],{"className":33221,"code":151680,"language":33223,"meta":57,"style":57},"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",[196,151682,151683,151691,151699,151728,151732,151736,151746,151755,151764],{"__ignoreMap":57},[199,151684,151685,151687,151689],{"class":201,"line":202},[199,151686,17554],{"class":1086},[199,151688,10795],{"class":878},[199,151690,6640],{"class":205},[199,151692,151693,151695,151697],{"class":201,"line":36},[199,151694,33643],{"class":1086},[199,151696,151631],{"class":878},[199,151698,33649],{"class":205},[199,151700,151701,151703,151705,151707,151709,151712,151714,151716,151718,151720,151722,151724,151726],{"class":201,"line":73},[199,151702,35293],{"class":1018},[199,151704,1537],{"class":205},[199,151706,3146],{"class":1086},[199,151708,151645],{"class":898},[199,151710,151711],{"class":1018},"{self",[199,151713,82560],{"class":205},[199,151715,759],{"class":1018},[199,151717,151654],{"class":898},[199,151719,151711],{"class":1018},[199,151721,82572],{"class":205},[199,151723,759],{"class":1018},[199,151725,151663],{"class":898},[199,151727,1594],{"class":205},[199,151729,151730],{"class":201,"line":333},[199,151731,907],{"emptyLinePlaceholder":906},[199,151733,151734],{"class":201,"line":227},[199,151735,907],{"emptyLinePlaceholder":906},[199,151737,151738,151741,151743],{"class":201,"line":238},[199,151739,151740],{"class":205},"student ",[199,151742,895],{"class":1086},[199,151744,151745],{"class":205}," Student()\n",[199,151747,151748,151751,151753],{"class":201,"line":252},[199,151749,151750],{"class":205},"student.name ",[199,151752,895],{"class":1086},[199,151754,151612],{"class":898},[199,151756,151757,151760,151762],{"class":201,"line":388},[199,151758,151759],{"class":205},"student.age ",[199,151761,895],{"class":1086},[199,151763,148810],{"class":1018},[199,151765,151766],{"class":201,"line":415},[199,151767,151768],{"class":205},"student.introduce()\n",[31,151770,151771],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151773,151775],{"id":151774},"_112-类和对象","11.2 类和对象",[31,151777,151778],{},"类是模板，对象是根据模板创建出来的具体实例。",[190,151780,151782],{"className":33221,"code":151781,"language":33223,"meta":57,"style":57},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[196,151783,151784,151792,151797,151801,151805,151814],{"__ignoreMap":57},[199,151785,151786,151788,151790],{"class":201,"line":202},[199,151787,17554],{"class":1086},[199,151789,10795],{"class":878},[199,151791,6640],{"class":205},[199,151793,151794],{"class":201,"line":36},[199,151795,151796],{"class":1086},"    pass\n",[199,151798,151799],{"class":201,"line":73},[199,151800,907],{"emptyLinePlaceholder":906},[199,151802,151803],{"class":201,"line":333},[199,151804,907],{"emptyLinePlaceholder":906},[199,151806,151807,151810,151812],{"class":201,"line":227},[199,151808,151809],{"class":205},"student1 ",[199,151811,895],{"class":1086},[199,151813,151745],{"class":205},[199,151815,151816,151819,151821],{"class":201,"line":238},[199,151817,151818],{"class":205},"student2 ",[199,151820,895],{"class":1086},[199,151822,151745],{"class":205},[31,151824,151825,151828,151829,103277,151832,151835],{},[196,151826,151827],{},"Student"," 是类，",[196,151830,151831],{},"student1",[196,151833,151834],{},"student2"," 是对象。",[14,151837,151839],{"id":151838},"_113-属性","11.3 属性",[31,151841,151842],{},"属性是对象保存的数据。",[190,151844,151846],{"className":33221,"code":151845,"language":33223,"meta":57,"style":57},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[196,151847,151848,151856,151860,151864,151868,151876,151884,151892,151896,151903],{"__ignoreMap":57},[199,151849,151850,151852,151854],{"class":201,"line":202},[199,151851,17554],{"class":1086},[199,151853,10795],{"class":878},[199,151855,6640],{"class":205},[199,151857,151858],{"class":201,"line":36},[199,151859,151796],{"class":1086},[199,151861,151862],{"class":201,"line":73},[199,151863,907],{"emptyLinePlaceholder":906},[199,151865,151866],{"class":201,"line":333},[199,151867,907],{"emptyLinePlaceholder":906},[199,151869,151870,151872,151874],{"class":201,"line":227},[199,151871,151740],{"class":205},[199,151873,895],{"class":1086},[199,151875,151745],{"class":205},[199,151877,151878,151880,151882],{"class":201,"line":238},[199,151879,151750],{"class":205},[199,151881,895],{"class":1086},[199,151883,151612],{"class":898},[199,151885,151886,151888,151890],{"class":201,"line":252},[199,151887,151759],{"class":205},[199,151889,895],{"class":1086},[199,151891,148810],{"class":1018},[199,151893,151894],{"class":201,"line":388},[199,151895,907],{"emptyLinePlaceholder":906},[199,151897,151898,151900],{"class":201,"line":415},[199,151899,33258],{"class":1018},[199,151901,151902],{"class":205},"(student.name)\n",[199,151904,151905,151907],{"class":201,"line":426},[199,151906,33258],{"class":1018},[199,151908,151909],{"class":205},"(student.age)\n",[31,151911,151912],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151914,151916],{"id":151915},"_114-方法","11.4 方法",[31,151918,151919],{},"类中的函数叫方法。",[190,151921,151922],{"className":33221,"code":151680,"language":33223,"meta":57,"style":57},[196,151923,151924,151932,151940,151968,151972,151976,151984,151992,152000],{"__ignoreMap":57},[199,151925,151926,151928,151930],{"class":201,"line":202},[199,151927,17554],{"class":1086},[199,151929,10795],{"class":878},[199,151931,6640],{"class":205},[199,151933,151934,151936,151938],{"class":201,"line":36},[199,151935,33643],{"class":1086},[199,151937,151631],{"class":878},[199,151939,33649],{"class":205},[199,151941,151942,151944,151946,151948,151950,151952,151954,151956,151958,151960,151962,151964,151966],{"class":201,"line":73},[199,151943,35293],{"class":1018},[199,151945,1537],{"class":205},[199,151947,3146],{"class":1086},[199,151949,151645],{"class":898},[199,151951,151711],{"class":1018},[199,151953,82560],{"class":205},[199,151955,759],{"class":1018},[199,151957,151654],{"class":898},[199,151959,151711],{"class":1018},[199,151961,82572],{"class":205},[199,151963,759],{"class":1018},[199,151965,151663],{"class":898},[199,151967,1594],{"class":205},[199,151969,151970],{"class":201,"line":333},[199,151971,907],{"emptyLinePlaceholder":906},[199,151973,151974],{"class":201,"line":227},[199,151975,907],{"emptyLinePlaceholder":906},[199,151977,151978,151980,151982],{"class":201,"line":238},[199,151979,151740],{"class":205},[199,151981,895],{"class":1086},[199,151983,151745],{"class":205},[199,151985,151986,151988,151990],{"class":201,"line":252},[199,151987,151750],{"class":205},[199,151989,895],{"class":1086},[199,151991,151612],{"class":898},[199,151993,151994,151996,151998],{"class":201,"line":388},[199,151995,151759],{"class":205},[199,151997,895],{"class":1086},[199,151999,148810],{"class":1018},[199,152001,152002],{"class":201,"line":415},[199,152003,151768],{"class":205},[31,152005,152006,152008,152009,152011],{},[196,152007,33665],{}," 表示当前对象。调用方法时不需要手动传入 ",[196,152010,33665],{},"，Python 会自动传。",[14,152013,152015],{"id":152014},"_115-构造方法__init__","11.5 构造方法__init__",[31,152017,152018,152020],{},[196,152019,33671],{}," 在对象创建时自动执行，用于初始化属性。",[190,152022,152024],{"className":33221,"code":152023,"language":33223,"meta":57,"style":57},"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",[196,152025,152026,152034,152043,152055,152067,152078,152082,152090,152128,152132,152136,152158],{"__ignoreMap":57},[199,152027,152028,152030,152032],{"class":201,"line":202},[199,152029,17554],{"class":1086},[199,152031,10795],{"class":878},[199,152033,6640],{"class":205},[199,152035,152036,152038,152040],{"class":201,"line":36},[199,152037,33643],{"class":1086},[199,152039,33646],{"class":1018},[199,152041,152042],{"class":205},"(self, name, age, score):\n",[199,152044,152045,152047,152050,152052],{"class":201,"line":73},[199,152046,33687],{"class":1018},[199,152048,152049],{"class":205},".name ",[199,152051,895],{"class":1086},[199,152053,152054],{"class":205}," name\n",[199,152056,152057,152059,152062,152064],{"class":201,"line":333},[199,152058,33687],{"class":1018},[199,152060,152061],{"class":205},".age ",[199,152063,895],{"class":1086},[199,152065,152066],{"class":205}," age\n",[199,152068,152069,152071,152074,152076],{"class":201,"line":227},[199,152070,33687],{"class":1018},[199,152072,152073],{"class":205},".score ",[199,152075,895],{"class":1086},[199,152077,4517],{"class":205},[199,152079,152080],{"class":201,"line":238},[199,152081,907],{"emptyLinePlaceholder":906},[199,152083,152084,152086,152088],{"class":201,"line":252},[199,152085,33643],{"class":1086},[199,152087,151631],{"class":878},[199,152089,33649],{"class":205},[199,152091,152092,152094,152096,152098,152100,152102,152104,152106,152108,152110,152112,152114,152117,152119,152122,152124,152126],{"class":201,"line":388},[199,152093,35293],{"class":1018},[199,152095,1537],{"class":205},[199,152097,3146],{"class":1086},[199,152099,151645],{"class":898},[199,152101,151711],{"class":1018},[199,152103,82560],{"class":205},[199,152105,759],{"class":1018},[199,152107,151654],{"class":898},[199,152109,151711],{"class":1018},[199,152111,82572],{"class":205},[199,152113,759],{"class":1018},[199,152115,152116],{"class":898},"岁，成绩",[199,152118,151711],{"class":1018},[199,152120,152121],{"class":205},".score",[199,152123,759],{"class":1018},[199,152125,3337],{"class":898},[199,152127,1594],{"class":205},[199,152129,152130],{"class":201,"line":415},[199,152131,907],{"emptyLinePlaceholder":906},[199,152133,152134],{"class":201,"line":426},[199,152135,907],{"emptyLinePlaceholder":906},[199,152137,152138,152140,152142,152145,152148,152150,152152,152154,152156],{"class":201,"line":1015},[199,152139,151740],{"class":205},[199,152141,895],{"class":1086},[199,152143,152144],{"class":205}," Student(",[199,152146,152147],{"class":898},"\"小明\"",[199,152149,1912],{"class":205},[199,152151,3730],{"class":1018},[199,152153,1912],{"class":205},[199,152155,4063],{"class":1018},[199,152157,1594],{"class":205},[199,152159,152160],{"class":201,"line":1031},[199,152161,151768],{"class":205},[31,152163,152164],{},"构造方法的好处：",[24,152166,152167,152170,152173],{},[27,152168,152169],{},"创建对象时必须提供必要数据。",[27,152171,152172],{},"属性初始化集中，不容易漏。",[27,152174,152175],{},"对象状态更完整。",[14,152177,152179,152180],{"id":152178},"_116-str","11.6 ",[49,152181,4242],{},[31,152183,152184,152185,31228],{},"直接打印对象时，默认输出不直观。可以定义 ",[196,152186,152187],{},"__str__",[190,152189,152191],{"className":33221,"code":152190,"language":33223,"meta":57,"style":57},"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",[196,152192,152193,152201,152210,152220,152230,152234,152243,152271,152275,152279,152295],{"__ignoreMap":57},[199,152194,152195,152197,152199],{"class":201,"line":202},[199,152196,17554],{"class":1086},[199,152198,10795],{"class":878},[199,152200,6640],{"class":205},[199,152202,152203,152205,152207],{"class":201,"line":36},[199,152204,33643],{"class":1086},[199,152206,33646],{"class":1018},[199,152208,152209],{"class":205},"(self, name, age):\n",[199,152211,152212,152214,152216,152218],{"class":201,"line":73},[199,152213,33687],{"class":1018},[199,152215,152049],{"class":205},[199,152217,895],{"class":1086},[199,152219,152054],{"class":205},[199,152221,152222,152224,152226,152228],{"class":201,"line":333},[199,152223,33687],{"class":1018},[199,152225,152061],{"class":205},[199,152227,895],{"class":1086},[199,152229,152066],{"class":205},[199,152231,152232],{"class":201,"line":227},[199,152233,907],{"emptyLinePlaceholder":906},[199,152235,152236,152238,152241],{"class":201,"line":238},[199,152237,33643],{"class":1086},[199,152239,152240],{"class":1018}," __str__",[199,152242,33649],{"class":205},[199,152244,152245,152247,152250,152253,152255,152257,152259,152262,152264,152266,152268],{"class":201,"line":252},[199,152246,17612],{"class":1086},[199,152248,152249],{"class":1086}," f",[199,152251,152252],{"class":898},"\"Student(name=",[199,152254,151711],{"class":1018},[199,152256,82560],{"class":205},[199,152258,759],{"class":1018},[199,152260,152261],{"class":898},", age=",[199,152263,151711],{"class":1018},[199,152265,82572],{"class":205},[199,152267,759],{"class":1018},[199,152269,152270],{"class":898},")\"\n",[199,152272,152273],{"class":201,"line":388},[199,152274,907],{"emptyLinePlaceholder":906},[199,152276,152277],{"class":201,"line":415},[199,152278,907],{"emptyLinePlaceholder":906},[199,152280,152281,152283,152285,152287,152289,152291,152293],{"class":201,"line":426},[199,152282,151740],{"class":205},[199,152284,895],{"class":1086},[199,152286,152144],{"class":205},[199,152288,152147],{"class":898},[199,152290,1912],{"class":205},[199,152292,3730],{"class":1018},[199,152294,1594],{"class":205},[199,152296,152297,152299],{"class":201,"line":1015},[199,152298,33258],{"class":1018},[199,152300,152301],{"class":205},"(student)\n",[14,152303,152305],{"id":152304},"_117-封装","11.7 封装",[31,152307,152308],{},"封装就是把数据和方法放到类中，并控制访问方式。",[31,152310,152311],{},"Python 中以双下划线开头的属性通常视为私有属性。",[190,152313,152315],{"className":33221,"code":152314,"language":33223,"meta":57,"style":57},"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",[196,152316,152317,152326,152335,152347,152359,152363,152372,152381,152385,152395,152408,152419,152424,152435,152439,152448,152460,152471,152475,152488,152499,152503,152514,152518,152522,152540,152549,152558],{"__ignoreMap":57},[199,152318,152319,152321,152324],{"class":201,"line":202},[199,152320,17554],{"class":1086},[199,152322,152323],{"class":878}," Account",[199,152325,6640],{"class":205},[199,152327,152328,152330,152332],{"class":201,"line":36},[199,152329,33643],{"class":1086},[199,152331,33646],{"class":1018},[199,152333,152334],{"class":205},"(self, owner, balance):\n",[199,152336,152337,152339,152342,152344],{"class":201,"line":73},[199,152338,33687],{"class":1018},[199,152340,152341],{"class":205},".owner ",[199,152343,895],{"class":1086},[199,152345,152346],{"class":205}," owner\n",[199,152348,152349,152351,152354,152356],{"class":201,"line":333},[199,152350,33687],{"class":1018},[199,152352,152353],{"class":205},".__balance ",[199,152355,895],{"class":1086},[199,152357,152358],{"class":205}," balance\n",[199,152360,152361],{"class":201,"line":227},[199,152362,907],{"emptyLinePlaceholder":906},[199,152364,152365,152367,152370],{"class":201,"line":238},[199,152366,33643],{"class":1086},[199,152368,152369],{"class":878}," get_balance",[199,152371,33649],{"class":205},[199,152373,152374,152376,152378],{"class":201,"line":252},[199,152375,17612],{"class":1086},[199,152377,41714],{"class":1018},[199,152379,152380],{"class":205},".__balance\n",[199,152382,152383],{"class":201,"line":388},[199,152384,907],{"emptyLinePlaceholder":906},[199,152386,152387,152389,152392],{"class":201,"line":415},[199,152388,33643],{"class":1086},[199,152390,152391],{"class":878}," deposit",[199,152393,152394],{"class":205},"(self, money):\n",[199,152396,152397,152399,152402,152404,152406],{"class":201,"line":426},[199,152398,2017],{"class":1086},[199,152400,152401],{"class":205}," money ",[199,152403,1501],{"class":1086},[199,152405,1621],{"class":1018},[199,152407,6640],{"class":205},[199,152409,152410,152412,152414,152417],{"class":201,"line":1015},[199,152411,37491],{"class":1018},[199,152413,1537],{"class":205},[199,152415,152416],{"class":898},"\"存款金额必须大于0\"",[199,152418,1594],{"class":205},[199,152420,152421],{"class":201,"line":1031},[199,152422,152423],{"class":1086},"            return\n",[199,152425,152426,152428,152430,152432],{"class":201,"line":1043},[199,152427,33687],{"class":1018},[199,152429,152353],{"class":205},[199,152431,12362],{"class":1086},[199,152433,152434],{"class":205}," money\n",[199,152436,152437],{"class":201,"line":1049},[199,152438,907],{"emptyLinePlaceholder":906},[199,152440,152441,152443,152446],{"class":201,"line":1054},[199,152442,33643],{"class":1086},[199,152444,152445],{"class":878}," withdraw",[199,152447,152394],{"class":205},[199,152449,152450,152452,152454,152456,152458],{"class":201,"line":1062},[199,152451,2017],{"class":1086},[199,152453,152401],{"class":205},[199,152455,1501],{"class":1086},[199,152457,1621],{"class":1018},[199,152459,6640],{"class":205},[199,152461,152462,152464,152466,152469],{"class":201,"line":1075},[199,152463,37491],{"class":1018},[199,152465,1537],{"class":205},[199,152467,152468],{"class":898},"\"取款金额必须大于0\"",[199,152470,1594],{"class":205},[199,152472,152473],{"class":201,"line":1092},[199,152474,152423],{"class":1086},[199,152476,152477,152479,152481,152483,152485],{"class":201,"line":1107},[199,152478,2017],{"class":1086},[199,152480,152401],{"class":205},[199,152482,1217],{"class":1086},[199,152484,41714],{"class":1018},[199,152486,152487],{"class":205},".__balance:\n",[199,152489,152490,152492,152494,152497],{"class":201,"line":1128},[199,152491,37491],{"class":1018},[199,152493,1537],{"class":205},[199,152495,152496],{"class":898},"\"余额不足\"",[199,152498,1594],{"class":205},[199,152500,152501],{"class":201,"line":1146},[199,152502,152423],{"class":1086},[199,152504,152505,152507,152509,152512],{"class":201,"line":1163},[199,152506,33687],{"class":1018},[199,152508,152353],{"class":205},[199,152510,152511],{"class":1086},"-=",[199,152513,152434],{"class":205},[199,152515,152516],{"class":201,"line":1176},[199,152517,907],{"emptyLinePlaceholder":906},[199,152519,152520],{"class":201,"line":1189},[199,152521,907],{"emptyLinePlaceholder":906},[199,152523,152524,152527,152529,152532,152534,152536,152538],{"class":201,"line":1202},[199,152525,152526],{"class":205},"account ",[199,152528,895],{"class":1086},[199,152530,152531],{"class":205}," Account(",[199,152533,152147],{"class":898},[199,152535,1912],{"class":205},[199,152537,9307],{"class":1018},[199,152539,1594],{"class":205},[199,152541,152542,152545,152547],{"class":201,"line":1207},[199,152543,152544],{"class":205},"account.deposit(",[199,152546,4647],{"class":1018},[199,152548,1594],{"class":205},[199,152550,152551,152554,152556],{"class":201,"line":1212},[199,152552,152553],{"class":205},"account.withdraw(",[199,152555,3396],{"class":1018},[199,152557,1594],{"class":205},[199,152559,152560,152562],{"class":201,"line":1225},[199,152561,33258],{"class":1018},[199,152563,152564],{"class":205},"(account.get_balance())\n",[31,152566,152567],{},"封装的意义是避免外部随意修改内部状态。",[14,152569,152571],{"id":152570},"_118-继承","11.8 继承",[31,152573,152574],{},"继承可以让子类复用父类的属性和方法。",[190,152576,152578],{"className":33221,"code":152577,"language":33223,"meta":57,"style":57},"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",[196,152579,152580,152589,152598,152609,152613,152617,152631,152640,152651,152655,152659,152669,152674],{"__ignoreMap":57},[199,152581,152582,152584,152587],{"class":201,"line":202},[199,152583,17554],{"class":1086},[199,152585,152586],{"class":878}," Animal",[199,152588,6640],{"class":205},[199,152590,152591,152593,152596],{"class":201,"line":36},[199,152592,33643],{"class":1086},[199,152594,152595],{"class":878}," eat",[199,152597,33649],{"class":205},[199,152599,152600,152602,152604,152607],{"class":201,"line":73},[199,152601,35293],{"class":1018},[199,152603,1537],{"class":205},[199,152605,152606],{"class":898},"\"吃东西\"",[199,152608,1594],{"class":205},[199,152610,152611],{"class":201,"line":333},[199,152612,907],{"emptyLinePlaceholder":906},[199,152614,152615],{"class":201,"line":227},[199,152616,907],{"emptyLinePlaceholder":906},[199,152618,152619,152621,152624,152626,152629],{"class":201,"line":238},[199,152620,17554],{"class":1086},[199,152622,152623],{"class":878}," Dog",[199,152625,1537],{"class":205},[199,152627,152628],{"class":878},"Animal",[199,152630,33628],{"class":205},[199,152632,152633,152635,152638],{"class":201,"line":252},[199,152634,33643],{"class":1086},[199,152636,152637],{"class":878}," bark",[199,152639,33649],{"class":205},[199,152641,152642,152644,152646,152649],{"class":201,"line":388},[199,152643,35293],{"class":1018},[199,152645,1537],{"class":205},[199,152647,152648],{"class":898},"\"汪汪\"",[199,152650,1594],{"class":205},[199,152652,152653],{"class":201,"line":415},[199,152654,907],{"emptyLinePlaceholder":906},[199,152656,152657],{"class":201,"line":426},[199,152658,907],{"emptyLinePlaceholder":906},[199,152660,152661,152664,152666],{"class":201,"line":1015},[199,152662,152663],{"class":205},"dog ",[199,152665,895],{"class":1086},[199,152667,152668],{"class":205}," Dog()\n",[199,152670,152671],{"class":201,"line":1031},[199,152672,152673],{"class":205},"dog.eat()\n",[199,152675,152676],{"class":201,"line":1043},[199,152677,152678],{"class":205},"dog.bark()\n",[31,152680,152681],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152683,152685],{"id":152684},"_119-方法重写","11.9 方法重写",[190,152687,152689],{"className":33221,"code":152688,"language":33223,"meta":57,"style":57},"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",[196,152690,152691,152699,152708,152719,152723,152727,152739,152747,152757,152761,152765,152778,152786,152797,152801,152805,152813,152823,152827,152832],{"__ignoreMap":57},[199,152692,152693,152695,152697],{"class":201,"line":202},[199,152694,17554],{"class":1086},[199,152696,152586],{"class":878},[199,152698,6640],{"class":205},[199,152700,152701,152703,152706],{"class":201,"line":36},[199,152702,33643],{"class":1086},[199,152704,152705],{"class":878}," speak",[199,152707,33649],{"class":205},[199,152709,152710,152712,152714,152717],{"class":201,"line":73},[199,152711,35293],{"class":1018},[199,152713,1537],{"class":205},[199,152715,152716],{"class":898},"\"动物叫\"",[199,152718,1594],{"class":205},[199,152720,152721],{"class":201,"line":333},[199,152722,907],{"emptyLinePlaceholder":906},[199,152724,152725],{"class":201,"line":227},[199,152726,907],{"emptyLinePlaceholder":906},[199,152728,152729,152731,152733,152735,152737],{"class":201,"line":238},[199,152730,17554],{"class":1086},[199,152732,152623],{"class":878},[199,152734,1537],{"class":205},[199,152736,152628],{"class":878},[199,152738,33628],{"class":205},[199,152740,152741,152743,152745],{"class":201,"line":252},[199,152742,33643],{"class":1086},[199,152744,152705],{"class":878},[199,152746,33649],{"class":205},[199,152748,152749,152751,152753,152755],{"class":201,"line":388},[199,152750,35293],{"class":1018},[199,152752,1537],{"class":205},[199,152754,152648],{"class":898},[199,152756,1594],{"class":205},[199,152758,152759],{"class":201,"line":415},[199,152760,907],{"emptyLinePlaceholder":906},[199,152762,152763],{"class":201,"line":426},[199,152764,907],{"emptyLinePlaceholder":906},[199,152766,152767,152769,152772,152774,152776],{"class":201,"line":1015},[199,152768,17554],{"class":1086},[199,152770,152771],{"class":878}," Cat",[199,152773,1537],{"class":205},[199,152775,152628],{"class":878},[199,152777,33628],{"class":205},[199,152779,152780,152782,152784],{"class":201,"line":1031},[199,152781,33643],{"class":1086},[199,152783,152705],{"class":878},[199,152785,33649],{"class":205},[199,152787,152788,152790,152792,152795],{"class":201,"line":1043},[199,152789,35293],{"class":1018},[199,152791,1537],{"class":205},[199,152793,152794],{"class":898},"\"喵喵\"",[199,152796,1594],{"class":205},[199,152798,152799],{"class":201,"line":1049},[199,152800,907],{"emptyLinePlaceholder":906},[199,152802,152803],{"class":201,"line":1054},[199,152804,907],{"emptyLinePlaceholder":906},[199,152806,152807,152809,152811],{"class":201,"line":1062},[199,152808,152663],{"class":205},[199,152810,895],{"class":1086},[199,152812,152668],{"class":205},[199,152814,152815,152818,152820],{"class":201,"line":1075},[199,152816,152817],{"class":205},"cat ",[199,152819,895],{"class":1086},[199,152821,152822],{"class":205}," Cat()\n",[199,152824,152825],{"class":201,"line":1092},[199,152826,907],{"emptyLinePlaceholder":906},[199,152828,152829],{"class":201,"line":1107},[199,152830,152831],{"class":205},"dog.speak()\n",[199,152833,152834],{"class":201,"line":1128},[199,152835,152836],{"class":205},"cat.speak()\n",[14,152838,152840],{"id":152839},"_1110-super","11.10 super",[31,152842,152843,152844,152847],{},"子类可以通过 ",[196,152845,152846],{},"super()"," 调用父类方法。",[190,152849,152851],{"className":33221,"code":152850,"language":33223,"meta":57,"style":57},"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",[196,152852,152853,152861,152870,152880,152884,152888,152900,152909,152920,152930,152934,152938,152954],{"__ignoreMap":57},[199,152854,152855,152857,152859],{"class":201,"line":202},[199,152856,17554],{"class":1086},[199,152858,18428],{"class":878},[199,152860,6640],{"class":205},[199,152862,152863,152865,152867],{"class":201,"line":36},[199,152864,33643],{"class":1086},[199,152866,33646],{"class":1018},[199,152868,152869],{"class":205},"(self, name):\n",[199,152871,152872,152874,152876,152878],{"class":201,"line":73},[199,152873,33687],{"class":1018},[199,152875,152049],{"class":205},[199,152877,895],{"class":1086},[199,152879,152054],{"class":205},[199,152881,152882],{"class":201,"line":333},[199,152883,907],{"emptyLinePlaceholder":906},[199,152885,152886],{"class":201,"line":227},[199,152887,907],{"emptyLinePlaceholder":906},[199,152889,152890,152892,152894,152896,152898],{"class":201,"line":238},[199,152891,17554],{"class":1086},[199,152893,10795],{"class":878},[199,152895,1537],{"class":205},[199,152897,21891],{"class":878},[199,152899,33628],{"class":205},[199,152901,152902,152904,152906],{"class":201,"line":252},[199,152903,33643],{"class":1086},[199,152905,33646],{"class":1018},[199,152907,152908],{"class":205},"(self, name, score):\n",[199,152910,152911,152913,152915,152917],{"class":201,"line":388},[199,152912,33659],{"class":1018},[199,152914,20106],{"class":205},[199,152916,33671],{"class":1018},[199,152918,152919],{"class":205},"(name)\n",[199,152921,152922,152924,152926,152928],{"class":201,"line":415},[199,152923,33687],{"class":1018},[199,152925,152073],{"class":205},[199,152927,895],{"class":1086},[199,152929,4517],{"class":205},[199,152931,152932],{"class":201,"line":426},[199,152933,907],{"emptyLinePlaceholder":906},[199,152935,152936],{"class":201,"line":1015},[199,152937,907],{"emptyLinePlaceholder":906},[199,152939,152940,152942,152944,152946,152948,152950,152952],{"class":201,"line":1031},[199,152941,151740],{"class":205},[199,152943,895],{"class":1086},[199,152945,152144],{"class":205},[199,152947,152147],{"class":898},[199,152949,1912],{"class":205},[199,152951,4063],{"class":1018},[199,152953,1594],{"class":205},[199,152955,152956,152958],{"class":201,"line":1043},[199,152957,33258],{"class":1018},[199,152959,152960],{"class":205},"(student.name, student.score)\n",[14,152962,152964],{"id":152963},"_1111-多态","11.11 多态",[31,152966,152967],{},"多态指不同对象响应同一个方法，表现出不同结果。",[190,152969,152971],{"className":33221,"code":152970,"language":33223,"meta":57,"style":57},"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",[196,152972,152973,152981,152989,152999,153003,153007,153015,153023,153033,153037,153041,153051,153056,153060,153064,153069],{"__ignoreMap":57},[199,152974,152975,152977,152979],{"class":201,"line":202},[199,152976,17554],{"class":1086},[199,152978,152623],{"class":878},[199,152980,6640],{"class":205},[199,152982,152983,152985,152987],{"class":201,"line":36},[199,152984,33643],{"class":1086},[199,152986,152705],{"class":878},[199,152988,33649],{"class":205},[199,152990,152991,152993,152995,152997],{"class":201,"line":73},[199,152992,35293],{"class":1018},[199,152994,1537],{"class":205},[199,152996,152648],{"class":898},[199,152998,1594],{"class":205},[199,153000,153001],{"class":201,"line":333},[199,153002,907],{"emptyLinePlaceholder":906},[199,153004,153005],{"class":201,"line":227},[199,153006,907],{"emptyLinePlaceholder":906},[199,153008,153009,153011,153013],{"class":201,"line":238},[199,153010,17554],{"class":1086},[199,153012,152771],{"class":878},[199,153014,6640],{"class":205},[199,153016,153017,153019,153021],{"class":201,"line":252},[199,153018,33643],{"class":1086},[199,153020,152705],{"class":878},[199,153022,33649],{"class":205},[199,153024,153025,153027,153029,153031],{"class":201,"line":388},[199,153026,35293],{"class":1018},[199,153028,1537],{"class":205},[199,153030,152794],{"class":898},[199,153032,1594],{"class":205},[199,153034,153035],{"class":201,"line":415},[199,153036,907],{"emptyLinePlaceholder":906},[199,153038,153039],{"class":201,"line":426},[199,153040,907],{"emptyLinePlaceholder":906},[199,153042,153043,153045,153048],{"class":201,"line":1015},[199,153044,34789],{"class":1086},[199,153046,153047],{"class":878}," make_sound",[199,153049,153050],{"class":205},"(animal):\n",[199,153052,153053],{"class":201,"line":1031},[199,153054,153055],{"class":205},"    animal.speak()\n",[199,153057,153058],{"class":201,"line":1043},[199,153059,907],{"emptyLinePlaceholder":906},[199,153061,153062],{"class":201,"line":1049},[199,153063,907],{"emptyLinePlaceholder":906},[199,153065,153066],{"class":201,"line":1054},[199,153067,153068],{"class":205},"make_sound(Dog())\n",[199,153070,153071],{"class":201,"line":1062},[199,153072,153073],{"class":205},"make_sound(Cat())\n",[31,153075,153076],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,153078,153080],{"id":153079},"_1112-类属性和实例属性","11.12 类属性和实例属性",[31,153082,153083],{},"实例属性属于对象：",[190,153085,153087],{"className":33221,"code":153086,"language":33223,"meta":57,"style":57},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[196,153088,153089,153097,153105],{"__ignoreMap":57},[199,153090,153091,153093,153095],{"class":201,"line":202},[199,153092,17554],{"class":1086},[199,153094,10795],{"class":878},[199,153096,6640],{"class":205},[199,153098,153099,153101,153103],{"class":201,"line":36},[199,153100,33643],{"class":1086},[199,153102,33646],{"class":1018},[199,153104,152869],{"class":205},[199,153106,153107,153109,153111,153113],{"class":201,"line":73},[199,153108,33687],{"class":1018},[199,153110,152049],{"class":205},[199,153112,895],{"class":1086},[199,153114,152054],{"class":205},[31,153116,153117],{},"类属性属于类，所有对象共享：",[190,153119,153121],{"className":33221,"code":153120,"language":33223,"meta":57,"style":57},"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",[196,153122,153123,153131,153141,153145,153153,153163,153167,153171,153184,153198,153202,153209,153216],{"__ignoreMap":57},[199,153124,153125,153127,153129],{"class":201,"line":202},[199,153126,17554],{"class":1086},[199,153128,10795],{"class":878},[199,153130,6640],{"class":205},[199,153132,153133,153136,153138],{"class":201,"line":36},[199,153134,153135],{"class":205},"    school ",[199,153137,895],{"class":1086},[199,153139,153140],{"class":898}," \"黑马学校\"\n",[199,153142,153143],{"class":201,"line":73},[199,153144,907],{"emptyLinePlaceholder":906},[199,153146,153147,153149,153151],{"class":201,"line":333},[199,153148,33643],{"class":1086},[199,153150,33646],{"class":1018},[199,153152,152869],{"class":205},[199,153154,153155,153157,153159,153161],{"class":201,"line":227},[199,153156,33687],{"class":1018},[199,153158,152049],{"class":205},[199,153160,895],{"class":1086},[199,153162,152054],{"class":205},[199,153164,153165],{"class":201,"line":238},[199,153166,907],{"emptyLinePlaceholder":906},[199,153168,153169],{"class":201,"line":252},[199,153170,907],{"emptyLinePlaceholder":906},[199,153172,153173,153176,153178,153180,153182],{"class":201,"line":388},[199,153174,153175],{"class":205},"s1 ",[199,153177,895],{"class":1086},[199,153179,152144],{"class":205},[199,153181,152147],{"class":898},[199,153183,1594],{"class":205},[199,153185,153186,153189,153191,153193,153196],{"class":201,"line":415},[199,153187,153188],{"class":205},"s2 ",[199,153190,895],{"class":1086},[199,153192,152144],{"class":205},[199,153194,153195],{"class":898},"\"小红\"",[199,153197,1594],{"class":205},[199,153199,153200],{"class":201,"line":426},[199,153201,907],{"emptyLinePlaceholder":906},[199,153203,153204,153206],{"class":201,"line":1015},[199,153205,33258],{"class":1018},[199,153207,153208],{"class":205},"(s1.school)\n",[199,153210,153211,153213],{"class":201,"line":1031},[199,153212,33258],{"class":1018},[199,153214,153215],{"class":205},"(s2.school)\n",[199,153217,153218,153220],{"class":201,"line":1043},[199,153219,33258],{"class":1018},[199,153221,153222],{"class":205},"(Student.school)\n",[31,153224,153225],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,153227,153229],{"id":153228},"_1113-类方法和静态方法","11.13 类方法和静态方法",[19,153231,153233],{"id":153232},"_11131-类方法","11.13.1 类方法",[31,153235,153236,153237,153240,153241,31228],{},"类方法使用 ",[196,153238,153239],{},"@classmethod","，第一个参数通常是 ",[196,153242,153243],{},"cls",[190,153245,153247],{"className":33221,"code":153246,"language":33223,"meta":57,"style":57},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[196,153248,153249,153257,153265,153269,153277,153287,153297,153301,153305],{"__ignoreMap":57},[199,153250,153251,153253,153255],{"class":201,"line":202},[199,153252,17554],{"class":1086},[199,153254,10795],{"class":878},[199,153256,6640],{"class":205},[199,153258,153259,153261,153263],{"class":201,"line":36},[199,153260,153135],{"class":205},[199,153262,895],{"class":1086},[199,153264,153140],{"class":898},[199,153266,153267],{"class":201,"line":73},[199,153268,907],{"emptyLinePlaceholder":906},[199,153270,153271,153274],{"class":201,"line":333},[199,153272,153273],{"class":878},"    @",[199,153275,153276],{"class":1018},"classmethod\n",[199,153278,153279,153281,153284],{"class":201,"line":227},[199,153280,33643],{"class":1086},[199,153282,153283],{"class":878}," get_school",[199,153285,153286],{"class":205},"(cls):\n",[199,153288,153289,153291,153294],{"class":201,"line":238},[199,153290,17612],{"class":1086},[199,153292,153293],{"class":1018}," cls",[199,153295,153296],{"class":205},".school\n",[199,153298,153299],{"class":201,"line":252},[199,153300,907],{"emptyLinePlaceholder":906},[199,153302,153303],{"class":201,"line":388},[199,153304,907],{"emptyLinePlaceholder":906},[199,153306,153307,153309],{"class":201,"line":415},[199,153308,33258],{"class":1018},[199,153310,153311],{"class":205},"(Student.get_school())\n",[19,153313,153315],{"id":153314},"_11132-静态方法","11.13.2 静态方法",[31,153317,153318,153319,153322],{},"静态方法使用 ",[196,153320,153321],{},"@staticmethod","，不需要访问实例和类。",[190,153324,153326],{"className":33221,"code":153325,"language":33223,"meta":57,"style":57},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[196,153327,153328,153337,153344,153353,153364,153368,153372],{"__ignoreMap":57},[199,153329,153330,153332,153335],{"class":201,"line":202},[199,153331,17554],{"class":1086},[199,153333,153334],{"class":878}," MathUtils",[199,153336,6640],{"class":205},[199,153338,153339,153341],{"class":201,"line":36},[199,153340,153273],{"class":878},[199,153342,153343],{"class":1018},"staticmethod\n",[199,153345,153346,153348,153350],{"class":201,"line":73},[199,153347,33643],{"class":1086},[199,153349,8106],{"class":878},[199,153351,153352],{"class":205},"(a, b):\n",[199,153354,153355,153357,153359,153361],{"class":201,"line":333},[199,153356,17612],{"class":1086},[199,153358,13732],{"class":205},[199,153360,2028],{"class":1086},[199,153362,153363],{"class":205}," b\n",[199,153365,153366],{"class":201,"line":227},[199,153367,907],{"emptyLinePlaceholder":906},[199,153369,153370],{"class":201,"line":238},[199,153371,907],{"emptyLinePlaceholder":906},[199,153373,153374,153376,153379,153381,153383,153385],{"class":201,"line":252},[199,153375,33258],{"class":1018},[199,153377,153378],{"class":205},"(MathUtils.add(",[199,153380,1115],{"class":1018},[199,153382,1912],{"class":205},[199,153384,1925],{"class":1018},[199,153386,1554],{"class":205},[31,153388,153389],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,153391,153393],{"id":153392},"_1114-dataclass","11.14 dataclass",[31,153395,153396,153399],{},[196,153397,153398],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[190,153401,153403],{"className":33221,"code":153402,"language":33223,"meta":57,"style":57},"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",[196,153404,153405,153417,153421,153425,153430,153438,153446,153454,153462,153466,153470,153490],{"__ignoreMap":57},[199,153406,153407,153409,153412,153414],{"class":201,"line":202},[199,153408,33579],{"class":1086},[199,153410,153411],{"class":205}," dataclasses ",[199,153413,33235],{"class":1086},[199,153415,153416],{"class":205}," dataclass\n",[199,153418,153419],{"class":201,"line":36},[199,153420,907],{"emptyLinePlaceholder":906},[199,153422,153423],{"class":201,"line":73},[199,153424,907],{"emptyLinePlaceholder":906},[199,153426,153427],{"class":201,"line":333},[199,153428,153429],{"class":878},"@dataclass\n",[199,153431,153432,153434,153436],{"class":201,"line":227},[199,153433,17554],{"class":1086},[199,153435,10795],{"class":878},[199,153437,6640],{"class":205},[199,153439,153440,153443],{"class":201,"line":238},[199,153441,153442],{"class":205},"    name: ",[199,153444,153445],{"class":1018},"str\n",[199,153447,153448,153451],{"class":201,"line":252},[199,153449,153450],{"class":205},"    age: ",[199,153452,153453],{"class":1018},"int\n",[199,153455,153456,153459],{"class":201,"line":388},[199,153457,153458],{"class":205},"    score: ",[199,153460,153461],{"class":1018},"float\n",[199,153463,153464],{"class":201,"line":415},[199,153465,907],{"emptyLinePlaceholder":906},[199,153467,153468],{"class":201,"line":426},[199,153469,907],{"emptyLinePlaceholder":906},[199,153471,153472,153474,153476,153478,153480,153482,153484,153486,153488],{"class":201,"line":1015},[199,153473,151740],{"class":205},[199,153475,895],{"class":1086},[199,153477,152144],{"class":205},[199,153479,152147],{"class":898},[199,153481,1912],{"class":205},[199,153483,3730],{"class":1018},[199,153485,1912],{"class":205},[199,153487,4063],{"class":1018},[199,153489,1594],{"class":205},[199,153491,153492,153494],{"class":201,"line":1031},[199,153493,33258],{"class":1018},[199,153495,152301],{"class":205},[31,153497,153498,153499,3300,153501,153504],{},"它会自动生成 ",[196,153500,33671],{},[196,153502,153503],{},"__repr__"," 等方法。适合数据模型类。",[14,153506,153508],{"id":153507},"_1115-小案例学生类","11.15 小案例：学生类",[190,153510,153512],{"className":33221,"code":153511,"language":33223,"meta":57,"style":57},"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",[196,153513,153514,153522,153531,153543,153553,153563,153573,153577,153586,153599,153603,153612,153618,153630,153642,153654,153666,153670,153674,153680,153690,153699,153709,153717,153725,153734,153738,153742,153750,153786,153790,153794,153819,153826],{"__ignoreMap":57},[199,153515,153516,153518,153520],{"class":201,"line":202},[199,153517,17554],{"class":1086},[199,153519,10795],{"class":878},[199,153521,6640],{"class":205},[199,153523,153524,153526,153528],{"class":201,"line":36},[199,153525,33643],{"class":1086},[199,153527,33646],{"class":1018},[199,153529,153530],{"class":205},"(self, student_id, name, age, score):\n",[199,153532,153533,153535,153538,153540],{"class":201,"line":73},[199,153534,33687],{"class":1018},[199,153536,153537],{"class":205},".student_id ",[199,153539,895],{"class":1086},[199,153541,153542],{"class":205}," student_id\n",[199,153544,153545,153547,153549,153551],{"class":201,"line":333},[199,153546,33687],{"class":1018},[199,153548,152049],{"class":205},[199,153550,895],{"class":1086},[199,153552,152054],{"class":205},[199,153554,153555,153557,153559,153561],{"class":201,"line":227},[199,153556,33687],{"class":1018},[199,153558,152061],{"class":205},[199,153560,895],{"class":1086},[199,153562,152066],{"class":205},[199,153564,153565,153567,153569,153571],{"class":201,"line":238},[199,153566,33687],{"class":1018},[199,153568,152073],{"class":205},[199,153570,895],{"class":1086},[199,153572,4517],{"class":205},[199,153574,153575],{"class":201,"line":252},[199,153576,907],{"emptyLinePlaceholder":906},[199,153578,153579,153581,153584],{"class":201,"line":388},[199,153580,33643],{"class":1086},[199,153582,153583],{"class":878}," is_passed",[199,153585,33649],{"class":205},[199,153587,153588,153590,153592,153594,153596],{"class":201,"line":415},[199,153589,17612],{"class":1086},[199,153591,41714],{"class":1018},[199,153593,152073],{"class":205},[199,153595,4635],{"class":1086},[199,153597,153598],{"class":1018}," 60\n",[199,153600,153601],{"class":201,"line":426},[199,153602,907],{"emptyLinePlaceholder":906},[199,153604,153605,153607,153610],{"class":201,"line":1015},[199,153606,33643],{"class":1086},[199,153608,153609],{"class":878}," to_dict",[199,153611,33649],{"class":205},[199,153613,153614,153616],{"class":201,"line":1031},[199,153615,17612],{"class":1086},[199,153617,1012],{"class":205},[199,153619,153620,153623,153625,153627],{"class":201,"line":1043},[199,153621,153622],{"class":898},"            \"student_id\"",[199,153624,1022],{"class":205},[199,153626,33665],{"class":1018},[199,153628,153629],{"class":205},".student_id,\n",[199,153631,153632,153635,153637,153639],{"class":201,"line":1049},[199,153633,153634],{"class":898},"            \"name\"",[199,153636,1022],{"class":205},[199,153638,33665],{"class":1018},[199,153640,153641],{"class":205},".name,\n",[199,153643,153644,153647,153649,153651],{"class":201,"line":1054},[199,153645,153646],{"class":898},"            \"age\"",[199,153648,1022],{"class":205},[199,153650,33665],{"class":1018},[199,153652,153653],{"class":205},".age,\n",[199,153655,153656,153659,153661,153663],{"class":201,"line":1062},[199,153657,153658],{"class":898},"            \"score\"",[199,153660,1022],{"class":205},[199,153662,33665],{"class":1018},[199,153664,153665],{"class":205},".score,\n",[199,153667,153668],{"class":201,"line":1075},[199,153669,1046],{"class":205},[199,153671,153672],{"class":201,"line":1092},[199,153673,907],{"emptyLinePlaceholder":906},[199,153675,153676,153678],{"class":201,"line":1107},[199,153677,153273],{"class":878},[199,153679,153276],{"class":1018},[199,153681,153682,153684,153687],{"class":201,"line":1128},[199,153683,33643],{"class":1086},[199,153685,153686],{"class":878}," from_dict",[199,153688,153689],{"class":205},"(cls, data):\n",[199,153691,153692,153694,153696],{"class":201,"line":1146},[199,153693,17612],{"class":1086},[199,153695,153293],{"class":1018},[199,153697,153698],{"class":205},"(\n",[199,153700,153701,153704,153707],{"class":201,"line":1163},[199,153702,153703],{"class":205},"            data[",[199,153705,153706],{"class":898},"\"student_id\"",[199,153708,90095],{"class":205},[199,153710,153711,153713,153715],{"class":201,"line":1176},[199,153712,153703],{"class":205},[199,153714,64938],{"class":898},[199,153716,90095],{"class":205},[199,153718,153719,153721,153723],{"class":201,"line":1189},[199,153720,153703],{"class":205},[199,153722,71383],{"class":898},[199,153724,90095],{"class":205},[199,153726,153727,153729,153732],{"class":201,"line":1202},[199,153728,153703],{"class":205},[199,153730,153731],{"class":898},"\"score\"",[199,153733,90095],{"class":205},[199,153735,153736],{"class":201,"line":1207},[199,153737,40967],{"class":205},[199,153739,153740],{"class":201,"line":1212},[199,153741,907],{"emptyLinePlaceholder":906},[199,153743,153744,153746,153748],{"class":201,"line":1225},[199,153745,33643],{"class":1086},[199,153747,152240],{"class":1018},[199,153749,33649],{"class":205},[199,153751,153752,153754,153756,153758,153760,153763,153765,153768,153770,153772,153774,153776,153778,153780,153782,153784],{"class":201,"line":1236},[199,153753,17612],{"class":1086},[199,153755,152249],{"class":1086},[199,153757,3337],{"class":898},[199,153759,151711],{"class":1018},[199,153761,153762],{"class":205},".student_id",[199,153764,759],{"class":1018},[199,153766,153767],{"class":1018}," {self",[199,153769,82560],{"class":205},[199,153771,759],{"class":1018},[199,153773,153767],{"class":1018},[199,153775,82572],{"class":205},[199,153777,759],{"class":1018},[199,153779,153767],{"class":1018},[199,153781,152121],{"class":205},[199,153783,759],{"class":1018},[199,153785,27976],{"class":898},[199,153787,153788],{"class":201,"line":1249},[199,153789,907],{"emptyLinePlaceholder":906},[199,153791,153792],{"class":201,"line":1262},[199,153793,907],{"emptyLinePlaceholder":906},[199,153795,153796,153798,153800,153802,153805,153807,153809,153811,153813,153815,153817],{"class":201,"line":1275},[199,153797,151740],{"class":205},[199,153799,895],{"class":1086},[199,153801,152144],{"class":205},[199,153803,153804],{"class":898},"\"001\"",[199,153806,1912],{"class":205},[199,153808,152147],{"class":898},[199,153810,1912],{"class":205},[199,153812,3730],{"class":1018},[199,153814,1912],{"class":205},[199,153816,4063],{"class":1018},[199,153818,1594],{"class":205},[199,153820,153821,153823],{"class":201,"line":1287},[199,153822,33258],{"class":1018},[199,153824,153825],{"class":205},"(student.is_passed())\n",[199,153827,153828,153830],{"class":201,"line":1292},[199,153829,33258],{"class":1018},[199,153831,153832],{"class":205},"(student.to_dict())\n",[31,153834,153835,103277,153838,153841],{},[196,153836,153837],{},"to_dict()",[196,153839,153840],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153843,153845],{"id":153844},"_1116-易错点","11.16 易错点",[24,153847,153848,153854,153860,153865,153868,153871],{},[27,153849,153850,153851,31228],{},"类名推荐使用大驼峰，如 ",[196,153852,153853],{},"StudentManager",[27,153855,153856,153857,153859],{},"方法第一个参数必须写 ",[196,153858,33665],{},"，调用时不用传。",[27,153861,153862,153864],{},[196,153863,33671],{}," 不是普通方法，它在创建对象时自动执行。",[27,153866,153867],{},"私有属性不是绝对安全，只是约定和名称改写。",[27,153869,153870],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[27,153872,153873],{},"类中方法太多时，说明职责可能过重。",[14,153875,153877],{"id":153876},"_1117-本章练习","11.17 本章练习",[24,153879,153880,153886,153892,153897,153910],{},[27,153881,153882,153883,153885],{},"定义 ",[196,153884,151827],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[27,153887,153882,153888,153891],{},[196,153889,153890],{},"Account"," 类，实现存款、取款、查询余额。",[27,153893,153882,153894,153896],{},[196,153895,20071],{}," 类，计算圆的周长和面积。",[27,153898,153882,153899,3300,153902,153905,153906,153909],{},[196,153900,153901],{},"Dog",[196,153903,153904],{},"Cat"," 类，并用同一个函数调用它们的 ",[196,153907,153908],{},"speak()"," 方法。",[27,153911,106625,153912,153914,153915,31228],{},[196,153913,153398],{}," 定义一个商品类 ",[196,153916,153917],{},"Product",[1002,153919,153920],{},"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":57,"searchDepth":36,"depth":36,"links":153922},[153923,153924,153925,153926,153927,153928,153930,153931,153932,153933,153934,153935,153936,153940,153941,153942,153943],{"id":151591,"depth":36,"text":151592},{"id":151774,"depth":36,"text":151775},{"id":151838,"depth":36,"text":151839},{"id":151915,"depth":36,"text":151916},{"id":152014,"depth":36,"text":152015},{"id":152178,"depth":36,"text":153929},"11.6 str",{"id":152304,"depth":36,"text":152305},{"id":152570,"depth":36,"text":152571},{"id":152684,"depth":36,"text":152685},{"id":152839,"depth":36,"text":152840},{"id":152963,"depth":36,"text":152964},{"id":153079,"depth":36,"text":153080},{"id":153228,"depth":36,"text":153229,"children":153937},[153938,153939],{"id":153232,"depth":73,"text":153233},{"id":153314,"depth":73,"text":153315},{"id":153392,"depth":36,"text":153393},{"id":153507,"depth":36,"text":153508},{"id":153844,"depth":36,"text":153845},{"id":153876,"depth":36,"text":153877},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151583,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153950,"title":153951,"body":153952,"description":3023,"extension":3024,"meta":157265,"navigation":906,"path":157266,"seo":157267,"stem":157268,"__hash__":157269},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153953,"toc":157241},[153954,153957,153961,153964,153967,153996,153999,154007,154011,154015,154018,154041,154044,154050,154054,155500,155503,155524,155528,155531,155543,155546,155730,155733,155859,155862,155866,155870,156006,156010,156096,156100,156182,156186,156223,156227,156416,156420,156423,156653,156657,156660,156841,156844,156848,156851,156857,156860,156886,156890,156893,156907,156910,156935,156938,156952,156955,156972,156975,156992,156995,157012,157016,157042,157046,157069,157073,157076,157078,157084,157086,157107,157110,157116,157122,157126,157129,157205,157208,157212,157238],[10,153955,153951],{"id":153956},"_12-综合案例与复习路线",[14,153958,153960],{"id":153959},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[31,153962,153963],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[31,153965,153966],{},"一个合格的入门综合项目最好覆盖：",[24,153968,153969,153972,153975,153978,153981,153984,153987,153990,153993],{},[27,153970,153971],{},"输入输出。",[27,153973,153974],{},"判断和循环。",[27,153976,153977],{},"函数拆分。",[27,153979,153980],{},"列表、字典等容器。",[27,153982,153983],{},"文件持久化。",[27,153985,153986],{},"异常处理。",[27,153988,153989],{},"模块拆分。",[27,153991,153992],{},"可选：面向对象。",[27,153994,153995],{},"可选：数据可视化。",[31,153997,153998],{},"本章整理两个方向：",[24,154000,154001,154004],{},[27,154002,154003],{},"学生管理系统。",[27,154005,154006],{},"销售数据统计和可视化。",[14,154008,154010],{"id":154009},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[19,154012,154014],{"id":154013},"_1221-需求","12.2.1 需求",[31,154016,154017],{},"实现一个命令行学生管理系统：",[24,154019,154020,154023,154026,154029,154032,154035,154038],{},[27,154021,154022],{},"添加学生。",[27,154024,154025],{},"删除学生。",[27,154027,154028],{},"修改学生。",[27,154030,154031],{},"查询学生。",[27,154033,154034],{},"显示所有学生。",[27,154036,154037],{},"保存到 JSON 文件。",[27,154039,154040],{},"程序启动时自动读取 JSON 文件。",[31,154042,154043],{},"学生字段：",[190,154045,154048],{"className":154046,"code":154047,"language":8084,"meta":57},[8082],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[196,154049,154047],{"__ignoreMap":57},[14,154051,154053],{"id":154052},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[190,154055,154057],{"className":33221,"code":154056,"language":33223,"meta":57,"style":57},"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",[196,154058,154059,154065,154075,154079,154093,154097,154101,154110,154122,154128,154132,154138,154169,154179,154186,154197,154203,154207,154211,154221,154252,154278,154282,154286,154295,154306,154317,154328,154339,154350,154361,154372,154376,154380,154390,154402,154418,154425,154432,154436,154440,154450,154458,154465,154478,154488,154499,154503,154507,154516,154524,154530,154542,154550,154561,154565,154569,154578,154594,154598,154605,154616,154621,154625,154641,154656,154671,154675,154680,154688,154696,154704,154712,154716,154721,154732,154736,154740,154749,154764,154774,154778,154790,154801,154805,154809,154814,154818,154829,154833,154837,154846,154861,154869,154873,154885,154895,154899,154903,154918,154931,154944,154948,154961,154973,154985,154989,154993,155004,155008,155012,155021,155036,155044,155048,155060,155070,155074,155078,155083,155087,155091,155101,155107,155129,155148,155167,155186,155191,155195,155199,155208,155216,155227,155231,155235,155261,155271,155276,155280,155284,155292,155302,155306,155314,155319,155335,155339,155353,155358,155372,155377,155390,155395,155408,155413,155426,155431,155444,155455,155459,155465,155476,155480,155484,155496],{"__ignoreMap":57},[199,154060,154061,154063],{"class":201,"line":202},[199,154062,33235],{"class":1086},[199,154064,149350],{"class":205},[199,154066,154067,154069,154071,154073],{"class":201,"line":36},[199,154068,33579],{"class":1086},[199,154070,110570],{"class":205},[199,154072,33235],{"class":1086},[199,154074,110575],{"class":205},[199,154076,154077],{"class":201,"line":73},[199,154078,907],{"emptyLinePlaceholder":906},[199,154080,154081,154084,154086,154088,154091],{"class":201,"line":333},[199,154082,154083],{"class":1018},"DATA_FILE",[199,154085,16425],{"class":1086},[199,154087,110804],{"class":205},[199,154089,154090],{"class":898},"\"students.json\"",[199,154092,1594],{"class":205},[199,154094,154095],{"class":201,"line":227},[199,154096,907],{"emptyLinePlaceholder":906},[199,154098,154099],{"class":201,"line":238},[199,154100,907],{"emptyLinePlaceholder":906},[199,154102,154103,154105,154108],{"class":201,"line":252},[199,154104,34789],{"class":1086},[199,154106,154107],{"class":878}," load_students",[199,154109,34795],{"class":205},[199,154111,154112,154114,154116,154119],{"class":201,"line":388},[199,154113,6005],{"class":1086},[199,154115,41771],{"class":1086},[199,154117,154118],{"class":1018}," DATA_FILE",[199,154120,154121],{"class":205},".exists():\n",[199,154123,154124,154126],{"class":201,"line":415},[199,154125,17612],{"class":1086},[199,154127,1475],{"class":205},[199,154129,154130],{"class":201,"line":426},[199,154131,907],{"emptyLinePlaceholder":906},[199,154133,154134,154136],{"class":201,"line":1015},[199,154135,128043],{"class":1086},[199,154137,6640],{"class":205},[199,154139,154140,154143,154145,154147,154149,154151,154153,154155,154157,154159,154161,154163,154165,154167],{"class":201,"line":1031},[199,154141,154142],{"class":1086},"        with",[199,154144,149050],{"class":1018},[199,154146,1537],{"class":205},[199,154148,154083],{"class":1018},[199,154150,1912],{"class":205},[199,154152,149060],{"class":898},[199,154154,1912],{"class":205},[199,154156,149065],{"class":8113},[199,154158,895],{"class":1086},[199,154160,149070],{"class":898},[199,154162,16575],{"class":205},[199,154164,34225],{"class":1086},[199,154166,150412],{"class":8113},[199,154168,6640],{"class":205},[199,154170,154171,154173,154175,154177],{"class":201,"line":1043},[199,154172,18590],{"class":1086},[199,154174,150423],{"class":205},[199,154176,48195],{"class":8113},[199,154178,1594],{"class":205},[199,154180,154181,154183],{"class":201,"line":1049},[199,154182,128071],{"class":1086},[199,154184,154185],{"class":205}," json.JSONDecodeError:\n",[199,154187,154188,154190,154192,154195],{"class":201,"line":1054},[199,154189,35293],{"class":1018},[199,154191,1537],{"class":205},[199,154193,154194],{"class":898},"\"数据文件格式错误，已使用空数据启动\"",[199,154196,1594],{"class":205},[199,154198,154199,154201],{"class":201,"line":1062},[199,154200,17612],{"class":1086},[199,154202,1475],{"class":205},[199,154204,154205],{"class":201,"line":1075},[199,154206,907],{"emptyLinePlaceholder":906},[199,154208,154209],{"class":201,"line":1092},[199,154210,907],{"emptyLinePlaceholder":906},[199,154212,154213,154215,154218],{"class":201,"line":1107},[199,154214,34789],{"class":1086},[199,154216,154217],{"class":878}," save_students",[199,154219,154220],{"class":205},"(students):\n",[199,154222,154223,154225,154227,154229,154231,154233,154236,154238,154240,154242,154244,154246,154248,154250],{"class":201,"line":1128},[199,154224,37019],{"class":1086},[199,154226,149050],{"class":1018},[199,154228,1537],{"class":205},[199,154230,154083],{"class":1018},[199,154232,1912],{"class":205},[199,154234,154235],{"class":898},"\"w\"",[199,154237,1912],{"class":205},[199,154239,149065],{"class":8113},[199,154241,895],{"class":1086},[199,154243,149070],{"class":898},[199,154245,16575],{"class":205},[199,154247,34225],{"class":1086},[199,154249,150412],{"class":8113},[199,154251,6640],{"class":205},[199,154253,154254,154257,154259,154261,154263,154265,154267,154269,154272,154274,154276],{"class":201,"line":1146},[199,154255,154256],{"class":205},"        json.dump(students, ",[199,154258,48195],{"class":8113},[199,154260,1912],{"class":205},[199,154262,149396],{"class":8113},[199,154264,895],{"class":1086},[199,154266,36828],{"class":1018},[199,154268,1912],{"class":205},[199,154270,154271],{"class":8113},"indent",[199,154273,895],{"class":1086},[199,154275,1925],{"class":1018},[199,154277,1594],{"class":205},[199,154279,154280],{"class":201,"line":1163},[199,154281,907],{"emptyLinePlaceholder":906},[199,154283,154284],{"class":201,"line":1176},[199,154285,907],{"emptyLinePlaceholder":906},[199,154287,154288,154290,154293],{"class":201,"line":1189},[199,154289,34789],{"class":1086},[199,154291,154292],{"class":878}," show_menu",[199,154294,34795],{"class":205},[199,154296,154297,154299,154301,154304],{"class":201,"line":1202},[199,154298,34141],{"class":1018},[199,154300,1537],{"class":205},[199,154302,154303],{"class":898},"\"====== 学生管理系统 ======\"",[199,154305,1594],{"class":205},[199,154307,154308,154310,154312,154315],{"class":201,"line":1207},[199,154309,34141],{"class":1018},[199,154311,1537],{"class":205},[199,154313,154314],{"class":898},"\"1. 添加学生\"",[199,154316,1594],{"class":205},[199,154318,154319,154321,154323,154326],{"class":201,"line":1212},[199,154320,34141],{"class":1018},[199,154322,1537],{"class":205},[199,154324,154325],{"class":898},"\"2. 删除学生\"",[199,154327,1594],{"class":205},[199,154329,154330,154332,154334,154337],{"class":201,"line":1225},[199,154331,34141],{"class":1018},[199,154333,1537],{"class":205},[199,154335,154336],{"class":898},"\"3. 修改学生\"",[199,154338,1594],{"class":205},[199,154340,154341,154343,154345,154348],{"class":201,"line":1236},[199,154342,34141],{"class":1018},[199,154344,1537],{"class":205},[199,154346,154347],{"class":898},"\"4. 查询学生\"",[199,154349,1594],{"class":205},[199,154351,154352,154354,154356,154359],{"class":201,"line":1249},[199,154353,34141],{"class":1018},[199,154355,1537],{"class":205},[199,154357,154358],{"class":898},"\"5. 显示所有学生\"",[199,154360,1594],{"class":205},[199,154362,154363,154365,154367,154370],{"class":201,"line":1262},[199,154364,34141],{"class":1018},[199,154366,1537],{"class":205},[199,154368,154369],{"class":898},"\"0. 退出系统\"",[199,154371,1594],{"class":205},[199,154373,154374],{"class":201,"line":1275},[199,154375,907],{"emptyLinePlaceholder":906},[199,154377,154378],{"class":201,"line":1287},[199,154379,907],{"emptyLinePlaceholder":906},[199,154381,154382,154384,154387],{"class":201,"line":1292},[199,154383,34789],{"class":1086},[199,154385,154386],{"class":878}," find_student",[199,154388,154389],{"class":205},"(students, student_id):\n",[199,154391,154392,154394,154397,154399],{"class":201,"line":1297},[199,154393,1937],{"class":1086},[199,154395,154396],{"class":205}," student ",[199,154398,28886],{"class":1086},[199,154400,154401],{"class":205}," students:\n",[199,154403,154404,154406,154409,154411,154413,154415],{"class":201,"line":1310},[199,154405,2017],{"class":1086},[199,154407,154408],{"class":205}," student[",[199,154410,153706],{"class":898},[199,154412,2078],{"class":205},[199,154414,5853],{"class":1086},[199,154416,154417],{"class":205}," student_id:\n",[199,154419,154420,154422],{"class":201,"line":1315},[199,154421,18590],{"class":1086},[199,154423,154424],{"class":205}," student\n",[199,154426,154427,154429],{"class":201,"line":1330},[199,154428,6989],{"class":1086},[199,154430,154431],{"class":1018}," None\n",[199,154433,154434],{"class":201,"line":1335},[199,154435,907],{"emptyLinePlaceholder":906},[199,154437,154438],{"class":201,"line":1340},[199,154439,907],{"emptyLinePlaceholder":906},[199,154441,154442,154444,154447],{"class":201,"line":1352},[199,154443,34789],{"class":1086},[199,154445,154446],{"class":878}," input_int",[199,154448,154449],{"class":205},"(prompt):\n",[199,154451,154452,154454,154456],{"class":201,"line":1367},[199,154453,5166],{"class":1086},[199,154455,97551],{"class":1018},[199,154457,6640],{"class":205},[199,154459,154460,154463],{"class":201,"line":1381},[199,154461,154462],{"class":1086},"        try",[199,154464,6640],{"class":205},[199,154466,154467,154469,154471,154473,154475],{"class":201,"line":1396},[199,154468,18590],{"class":1086},[199,154470,5296],{"class":1018},[199,154472,1537],{"class":205},[199,154474,56080],{"class":1018},[199,154476,154477],{"class":205},"(prompt))\n",[199,154479,154480,154483,154486],{"class":201,"line":1401},[199,154481,154482],{"class":1086},"        except",[199,154484,154485],{"class":1018}," ValueError",[199,154487,6640],{"class":205},[199,154489,154490,154492,154494,154497],{"class":201,"line":1411},[199,154491,37491],{"class":1018},[199,154493,1537],{"class":205},[199,154495,154496],{"class":898},"\"请输入整数\"",[199,154498,1594],{"class":205},[199,154500,154501],{"class":201,"line":1421},[199,154502,907],{"emptyLinePlaceholder":906},[199,154504,154505],{"class":201,"line":1426},[199,154506,907],{"emptyLinePlaceholder":906},[199,154508,154509,154511,154514],{"class":201,"line":1436},[199,154510,34789],{"class":1086},[199,154512,154513],{"class":878}," input_float",[199,154515,154449],{"class":205},[199,154517,154518,154520,154522],{"class":201,"line":1441},[199,154519,5166],{"class":1086},[199,154521,97551],{"class":1018},[199,154523,6640],{"class":205},[199,154525,154526,154528],{"class":201,"line":1451},[199,154527,154462],{"class":1086},[199,154529,6640],{"class":205},[199,154531,154532,154534,154536,154538,154540],{"class":201,"line":1458},[199,154533,18590],{"class":1086},[199,154535,112056],{"class":1018},[199,154537,1537],{"class":205},[199,154539,56080],{"class":1018},[199,154541,154477],{"class":205},[199,154543,154544,154546,154548],{"class":201,"line":1464},[199,154545,154482],{"class":1086},[199,154547,154485],{"class":1018},[199,154549,6640],{"class":205},[199,154551,154552,154554,154556,154559],{"class":201,"line":1478},[199,154553,37491],{"class":1018},[199,154555,1537],{"class":205},[199,154557,154558],{"class":898},"\"请输入数字\"",[199,154560,1594],{"class":205},[199,154562,154563],{"class":201,"line":1516},[199,154564,907],{"emptyLinePlaceholder":906},[199,154566,154567],{"class":201,"line":1522},[199,154568,907],{"emptyLinePlaceholder":906},[199,154570,154571,154573,154576],{"class":201,"line":1528},[199,154572,34789],{"class":1086},[199,154574,154575],{"class":878}," add_student",[199,154577,154220],{"class":205},[199,154579,154580,154583,154585,154587,154589,154592],{"class":201,"line":1557},[199,154581,154582],{"class":205},"    student_id ",[199,154584,895],{"class":1086},[199,154586,62864],{"class":1018},[199,154588,1537],{"class":205},[199,154590,154591],{"class":898},"\"请输入学号:\"",[199,154593,1594],{"class":205},[199,154595,154596],{"class":201,"line":1563},[199,154597,907],{"emptyLinePlaceholder":906},[199,154599,154600,154602],{"class":201,"line":1568},[199,154601,6005],{"class":1086},[199,154603,154604],{"class":205}," find_student(students, student_id):\n",[199,154606,154607,154609,154611,154614],{"class":201,"line":1574},[199,154608,35293],{"class":1018},[199,154610,1537],{"class":205},[199,154612,154613],{"class":898},"\"学号已存在\"",[199,154615,1594],{"class":205},[199,154617,154618],{"class":201,"line":1580},[199,154619,154620],{"class":1086},"        return\n",[199,154622,154623],{"class":201,"line":1597},[199,154624,907],{"emptyLinePlaceholder":906},[199,154626,154627,154630,154632,154634,154636,154639],{"class":201,"line":1602},[199,154628,154629],{"class":205},"    name ",[199,154631,895],{"class":1086},[199,154633,62864],{"class":1018},[199,154635,1537],{"class":205},[199,154637,154638],{"class":898},"\"请输入姓名:\"",[199,154640,1594],{"class":205},[199,154642,154643,154646,154648,154651,154654],{"class":201,"line":1608},[199,154644,154645],{"class":205},"    age ",[199,154647,895],{"class":1086},[199,154649,154650],{"class":205}," input_int(",[199,154652,154653],{"class":898},"\"请输入年龄:\"",[199,154655,1594],{"class":205},[199,154657,154658,154661,154663,154666,154669],{"class":201,"line":1640},[199,154659,154660],{"class":205},"    score ",[199,154662,895],{"class":1086},[199,154664,154665],{"class":205}," input_float(",[199,154667,154668],{"class":898},"\"请输入成绩:\"",[199,154670,1594],{"class":205},[199,154672,154673],{"class":201,"line":1653},[199,154674,907],{"emptyLinePlaceholder":906},[199,154676,154677],{"class":201,"line":1673},[199,154678,154679],{"class":205},"    students.append({\n",[199,154681,154682,154685],{"class":201,"line":1690},[199,154683,154684],{"class":898},"        \"student_id\"",[199,154686,154687],{"class":205},": student_id,\n",[199,154689,154690,154693],{"class":201,"line":1706},[199,154691,154692],{"class":898},"        \"name\"",[199,154694,154695],{"class":205},": name,\n",[199,154697,154698,154701],{"class":201,"line":1712},[199,154699,154700],{"class":898},"        \"age\"",[199,154702,154703],{"class":205},": age,\n",[199,154705,154706,154709],{"class":201,"line":1720},[199,154707,154708],{"class":898},"        \"score\"",[199,154710,154711],{"class":205},": score,\n",[199,154713,154714],{"class":201,"line":1725},[199,154715,36302],{"class":205},[199,154717,154718],{"class":201,"line":1731},[199,154719,154720],{"class":205},"    save_students(students)\n",[199,154722,154723,154725,154727,154730],{"class":201,"line":1745},[199,154724,34141],{"class":1018},[199,154726,1537],{"class":205},[199,154728,154729],{"class":898},"\"添加成功\"",[199,154731,1594],{"class":205},[199,154733,154734],{"class":201,"line":1754},[199,154735,907],{"emptyLinePlaceholder":906},[199,154737,154738],{"class":201,"line":1763},[199,154739,907],{"emptyLinePlaceholder":906},[199,154741,154742,154744,154747],{"class":201,"line":1768},[199,154743,34789],{"class":1086},[199,154745,154746],{"class":878}," delete_student",[199,154748,154220],{"class":205},[199,154750,154751,154753,154755,154757,154759,154762],{"class":201,"line":19628},[199,154752,154582],{"class":205},[199,154754,895],{"class":1086},[199,154756,62864],{"class":1018},[199,154758,1537],{"class":205},[199,154760,154761],{"class":898},"\"请输入要删除的学号:\"",[199,154763,1594],{"class":205},[199,154765,154766,154769,154771],{"class":201,"line":19641},[199,154767,154768],{"class":205},"    student ",[199,154770,895],{"class":1086},[199,154772,154773],{"class":205}," find_student(students, student_id)\n",[199,154775,154776],{"class":201,"line":19646},[199,154777,907],{"emptyLinePlaceholder":906},[199,154779,154780,154782,154784,154786,154788],{"class":201,"line":19660},[199,154781,6005],{"class":1086},[199,154783,154396],{"class":205},[199,154785,41768],{"class":1086},[199,154787,41774],{"class":1018},[199,154789,6640],{"class":205},[199,154791,154792,154794,154796,154799],{"class":201,"line":19665},[199,154793,35293],{"class":1018},[199,154795,1537],{"class":205},[199,154797,154798],{"class":898},"\"学生不存在\"",[199,154800,1594],{"class":205},[199,154802,154803],{"class":201,"line":19671},[199,154804,154620],{"class":1086},[199,154806,154807],{"class":201,"line":19676},[199,154808,907],{"emptyLinePlaceholder":906},[199,154810,154811],{"class":201,"line":19690},[199,154812,154813],{"class":205},"    students.remove(student)\n",[199,154815,154816],{"class":201,"line":19695},[199,154817,154720],{"class":205},[199,154819,154820,154822,154824,154827],{"class":201,"line":19700},[199,154821,34141],{"class":1018},[199,154823,1537],{"class":205},[199,154825,154826],{"class":898},"\"删除成功\"",[199,154828,1594],{"class":205},[199,154830,154831],{"class":201,"line":19714},[199,154832,907],{"emptyLinePlaceholder":906},[199,154834,154835],{"class":201,"line":19726},[199,154836,907],{"emptyLinePlaceholder":906},[199,154838,154839,154841,154844],{"class":201,"line":19731},[199,154840,34789],{"class":1086},[199,154842,154843],{"class":878}," update_student",[199,154845,154220],{"class":205},[199,154847,154848,154850,154852,154854,154856,154859],{"class":201,"line":19744},[199,154849,154582],{"class":205},[199,154851,895],{"class":1086},[199,154853,62864],{"class":1018},[199,154855,1537],{"class":205},[199,154857,154858],{"class":898},"\"请输入要修改的学号:\"",[199,154860,1594],{"class":205},[199,154862,154863,154865,154867],{"class":201,"line":19749},[199,154864,154768],{"class":205},[199,154866,895],{"class":1086},[199,154868,154773],{"class":205},[199,154870,154871],{"class":201,"line":19754},[199,154872,907],{"emptyLinePlaceholder":906},[199,154874,154875,154877,154879,154881,154883],{"class":201,"line":19759},[199,154876,6005],{"class":1086},[199,154878,154396],{"class":205},[199,154880,41768],{"class":1086},[199,154882,41774],{"class":1018},[199,154884,6640],{"class":205},[199,154886,154887,154889,154891,154893],{"class":201,"line":19772},[199,154888,35293],{"class":1018},[199,154890,1537],{"class":205},[199,154892,154798],{"class":898},[199,154894,1594],{"class":205},[199,154896,154897],{"class":201,"line":19777},[199,154898,154620],{"class":1086},[199,154900,154901],{"class":201,"line":35475},[199,154902,907],{"emptyLinePlaceholder":906},[199,154904,154905,154907,154909,154911,154913,154916],{"class":201,"line":35481},[199,154906,154629],{"class":205},[199,154908,895],{"class":1086},[199,154910,62864],{"class":1018},[199,154912,1537],{"class":205},[199,154914,154915],{"class":898},"\"请输入新姓名:\"",[199,154917,1594],{"class":205},[199,154919,154920,154922,154924,154926,154929],{"class":201,"line":35487},[199,154921,154645],{"class":205},[199,154923,895],{"class":1086},[199,154925,154650],{"class":205},[199,154927,154928],{"class":898},"\"请输入新年龄:\"",[199,154930,1594],{"class":205},[199,154932,154933,154935,154937,154939,154942],{"class":201,"line":35493},[199,154934,154660],{"class":205},[199,154936,895],{"class":1086},[199,154938,154665],{"class":205},[199,154940,154941],{"class":898},"\"请输入新成绩:\"",[199,154943,1594],{"class":205},[199,154945,154946],{"class":201,"line":35499},[199,154947,907],{"emptyLinePlaceholder":906},[199,154949,154950,154953,154955,154957,154959],{"class":201,"line":35510},[199,154951,154952],{"class":205},"    student[",[199,154954,64938],{"class":898},[199,154956,2078],{"class":205},[199,154958,895],{"class":1086},[199,154960,152054],{"class":205},[199,154962,154963,154965,154967,154969,154971],{"class":201,"line":35516},[199,154964,154952],{"class":205},[199,154966,71383],{"class":898},[199,154968,2078],{"class":205},[199,154970,895],{"class":1086},[199,154972,152066],{"class":205},[199,154974,154975,154977,154979,154981,154983],{"class":201,"line":35536},[199,154976,154952],{"class":205},[199,154978,153731],{"class":898},[199,154980,2078],{"class":205},[199,154982,895],{"class":1086},[199,154984,4517],{"class":205},[199,154986,154987],{"class":201,"line":35542},[199,154988,907],{"emptyLinePlaceholder":906},[199,154990,154991],{"class":201,"line":35553},[199,154992,154720],{"class":205},[199,154994,154995,154997,154999,155002],{"class":201,"line":35559},[199,154996,34141],{"class":1018},[199,154998,1537],{"class":205},[199,155000,155001],{"class":898},"\"修改成功\"",[199,155003,1594],{"class":205},[199,155005,155006],{"class":201,"line":35565},[199,155007,907],{"emptyLinePlaceholder":906},[199,155009,155010],{"class":201,"line":35571},[199,155011,907],{"emptyLinePlaceholder":906},[199,155013,155014,155016,155019],{"class":201,"line":35577},[199,155015,34789],{"class":1086},[199,155017,155018],{"class":878}," query_student",[199,155020,154220],{"class":205},[199,155022,155023,155025,155027,155029,155031,155034],{"class":201,"line":35583},[199,155024,154582],{"class":205},[199,155026,895],{"class":1086},[199,155028,62864],{"class":1018},[199,155030,1537],{"class":205},[199,155032,155033],{"class":898},"\"请输入要查询的学号:\"",[199,155035,1594],{"class":205},[199,155037,155038,155040,155042],{"class":201,"line":35589},[199,155039,154768],{"class":205},[199,155041,895],{"class":1086},[199,155043,154773],{"class":205},[199,155045,155046],{"class":201,"line":35595},[199,155047,907],{"emptyLinePlaceholder":906},[199,155049,155050,155052,155054,155056,155058],{"class":201,"line":35615},[199,155051,6005],{"class":1086},[199,155053,154396],{"class":205},[199,155055,41768],{"class":1086},[199,155057,41774],{"class":1018},[199,155059,6640],{"class":205},[199,155061,155062,155064,155066,155068],{"class":201,"line":35621},[199,155063,35293],{"class":1018},[199,155065,1537],{"class":205},[199,155067,154798],{"class":898},[199,155069,1594],{"class":205},[199,155071,155072],{"class":201,"line":35637},[199,155073,154620],{"class":1086},[199,155075,155076],{"class":201,"line":35643},[199,155077,907],{"emptyLinePlaceholder":906},[199,155079,155080],{"class":201,"line":35657},[199,155081,155082],{"class":205},"    print_student(student)\n",[199,155084,155085],{"class":201,"line":35663},[199,155086,907],{"emptyLinePlaceholder":906},[199,155088,155089],{"class":201,"line":35678},[199,155090,907],{"emptyLinePlaceholder":906},[199,155092,155093,155095,155098],{"class":201,"line":35684},[199,155094,34789],{"class":1086},[199,155096,155097],{"class":878}," print_student",[199,155099,155100],{"class":205},"(student):\n",[199,155102,155103,155105],{"class":201,"line":35693},[199,155104,34141],{"class":1018},[199,155106,153698],{"class":205},[199,155108,155109,155112,155114,155116,155119,155122,155124,155127],{"class":201,"line":35699},[199,155110,155111],{"class":1086},"        f",[199,155113,3337],{"class":898},[199,155115,3974],{"class":1018},[199,155117,155118],{"class":205},"student[",[199,155120,155121],{"class":898},"'student_id'",[199,155123,1667],{"class":205},[199,155125,155126],{"class":1018},"}\\t",[199,155128,27976],{"class":898},[199,155130,155131,155133,155135,155137,155139,155142,155144,155146],{"class":201,"line":35708},[199,155132,155111],{"class":1086},[199,155134,3337],{"class":898},[199,155136,3974],{"class":1018},[199,155138,155118],{"class":205},[199,155140,155141],{"class":898},"'name'",[199,155143,1667],{"class":205},[199,155145,155126],{"class":1018},[199,155147,27976],{"class":898},[199,155149,155150,155152,155154,155156,155158,155161,155163,155165],{"class":201,"line":35714},[199,155151,155111],{"class":1086},[199,155153,3337],{"class":898},[199,155155,3974],{"class":1018},[199,155157,155118],{"class":205},[199,155159,155160],{"class":898},"'age'",[199,155162,1667],{"class":205},[199,155164,155126],{"class":1018},[199,155166,27976],{"class":898},[199,155168,155169,155171,155173,155175,155177,155180,155182,155184],{"class":201,"line":35720},[199,155170,155111],{"class":1086},[199,155172,3337],{"class":898},[199,155174,3974],{"class":1018},[199,155176,155118],{"class":205},[199,155178,155179],{"class":898},"'score'",[199,155181,1667],{"class":205},[199,155183,759],{"class":1018},[199,155185,27976],{"class":898},[199,155187,155188],{"class":201,"line":35729},[199,155189,155190],{"class":205},"    )\n",[199,155192,155193],{"class":201,"line":35735},[199,155194,907],{"emptyLinePlaceholder":906},[199,155196,155197],{"class":201,"line":35746},[199,155198,907],{"emptyLinePlaceholder":906},[199,155200,155201,155203,155206],{"class":201,"line":35752},[199,155202,34789],{"class":1086},[199,155204,155205],{"class":878}," show_all_students",[199,155207,154220],{"class":205},[199,155209,155210,155212,155214],{"class":201,"line":35771},[199,155211,6005],{"class":1086},[199,155213,41771],{"class":1086},[199,155215,154401],{"class":205},[199,155217,155218,155220,155222,155225],{"class":201,"line":35777},[199,155219,35293],{"class":1018},[199,155221,1537],{"class":205},[199,155223,155224],{"class":898},"\"暂无学生\"",[199,155226,1594],{"class":205},[199,155228,155229],{"class":201,"line":35788},[199,155230,154620],{"class":1086},[199,155232,155233],{"class":201,"line":35794},[199,155234,907],{"emptyLinePlaceholder":906},[199,155236,155237,155239,155241,155244,155246,155249,155251,155254,155256,155259],{"class":201,"line":35814},[199,155238,34141],{"class":1018},[199,155240,1537],{"class":205},[199,155242,155243],{"class":898},"\"学号",[199,155245,4174],{"class":1018},[199,155247,155248],{"class":898},"姓名",[199,155250,4174],{"class":1018},[199,155252,155253],{"class":898},"年龄",[199,155255,4174],{"class":1018},[199,155257,155258],{"class":898},"成绩\"",[199,155260,1594],{"class":205},[199,155262,155263,155265,155267,155269],{"class":201,"line":35830},[199,155264,1937],{"class":1086},[199,155266,154396],{"class":205},[199,155268,28886],{"class":1086},[199,155270,154401],{"class":205},[199,155272,155273],{"class":201,"line":35836},[199,155274,155275],{"class":205},"        print_student(student)\n",[199,155277,155278],{"class":201,"line":35850},[199,155279,907],{"emptyLinePlaceholder":906},[199,155281,155282],{"class":201,"line":35856},[199,155283,907],{"emptyLinePlaceholder":906},[199,155285,155286,155288,155290],{"class":201,"line":35862},[199,155287,34789],{"class":1086},[199,155289,4889],{"class":878},[199,155291,34795],{"class":205},[199,155293,155294,155297,155299],{"class":201,"line":35873},[199,155295,155296],{"class":205},"    students ",[199,155298,895],{"class":1086},[199,155300,155301],{"class":205}," load_students()\n",[199,155303,155304],{"class":201,"line":35879},[199,155305,907],{"emptyLinePlaceholder":906},[199,155307,155308,155310,155312],{"class":201,"line":35885},[199,155309,5166],{"class":1086},[199,155311,97551],{"class":1018},[199,155313,6640],{"class":205},[199,155315,155316],{"class":201,"line":35895},[199,155317,155318],{"class":205},"        show_menu()\n",[199,155320,155321,155324,155326,155328,155330,155333],{"class":201,"line":35901},[199,155322,155323],{"class":205},"        choice ",[199,155325,895],{"class":1086},[199,155327,62864],{"class":1018},[199,155329,1537],{"class":205},[199,155331,155332],{"class":898},"\"请输入操作:\"",[199,155334,1594],{"class":205},[199,155336,155337],{"class":201,"line":35912},[199,155338,907],{"emptyLinePlaceholder":906},[199,155340,155341,155343,155346,155348,155351],{"class":201,"line":35918},[199,155342,2017],{"class":1086},[199,155344,155345],{"class":205}," choice ",[199,155347,5853],{"class":1086},[199,155349,155350],{"class":898}," \"1\"",[199,155352,6640],{"class":205},[199,155354,155355],{"class":201,"line":35928},[199,155356,155357],{"class":205},"            add_student(students)\n",[199,155359,155360,155363,155365,155367,155370],{"class":201,"line":35933},[199,155361,155362],{"class":1086},"        elif",[199,155364,155345],{"class":205},[199,155366,5853],{"class":1086},[199,155368,155369],{"class":898}," \"2\"",[199,155371,6640],{"class":205},[199,155373,155374],{"class":201,"line":35939},[199,155375,155376],{"class":205},"            delete_student(students)\n",[199,155378,155379,155381,155383,155385,155388],{"class":201,"line":35988},[199,155380,155362],{"class":1086},[199,155382,155345],{"class":205},[199,155384,5853],{"class":1086},[199,155386,155387],{"class":898}," \"3\"",[199,155389,6640],{"class":205},[199,155391,155392],{"class":201,"line":36035},[199,155393,155394],{"class":205},"            update_student(students)\n",[199,155396,155397,155399,155401,155403,155406],{"class":201,"line":36040},[199,155398,155362],{"class":1086},[199,155400,155345],{"class":205},[199,155402,5853],{"class":1086},[199,155404,155405],{"class":898}," \"4\"",[199,155407,6640],{"class":205},[199,155409,155410],{"class":201,"line":36046},[199,155411,155412],{"class":205},"            query_student(students)\n",[199,155414,155415,155417,155419,155421,155424],{"class":201,"line":36065},[199,155416,155362],{"class":1086},[199,155418,155345],{"class":205},[199,155420,5853],{"class":1086},[199,155422,155423],{"class":898}," \"5\"",[199,155425,6640],{"class":205},[199,155427,155428],{"class":201,"line":36071},[199,155429,155430],{"class":205},"            show_all_students(students)\n",[199,155432,155433,155435,155437,155439,155442],{"class":201,"line":36090},[199,155434,155362],{"class":1086},[199,155436,155345],{"class":205},[199,155438,5853],{"class":1086},[199,155440,155441],{"class":898}," \"0\"",[199,155443,6640],{"class":205},[199,155445,155446,155448,155450,155453],{"class":201,"line":36096},[199,155447,37491],{"class":1018},[199,155449,1537],{"class":205},[199,155451,155452],{"class":898},"\"退出系统\"",[199,155454,1594],{"class":205},[199,155456,155457],{"class":201,"line":36102},[199,155458,117357],{"class":1086},[199,155460,155461,155463],{"class":201,"line":36112},[199,155462,5445],{"class":1086},[199,155464,6640],{"class":205},[199,155466,155467,155469,155471,155474],{"class":201,"line":36117},[199,155468,37491],{"class":1018},[199,155470,1537],{"class":205},[199,155472,155473],{"class":898},"\"输入错误\"",[199,155475,1594],{"class":205},[199,155477,155478],{"class":201,"line":36123},[199,155479,907],{"emptyLinePlaceholder":906},[199,155481,155482],{"class":201,"line":36139},[199,155483,907],{"emptyLinePlaceholder":906},[199,155485,155486,155488,155490,155492,155494],{"class":201,"line":36184},[199,155487,4470],{"class":1086},[199,155489,34062],{"class":1018},[199,155491,103818],{"class":1086},[199,155493,103821],{"class":898},[199,155495,6640],{"class":205},[199,155497,155498],{"class":201,"line":36190},[199,155499,103828],{"class":205},[31,155501,155502],{},"这个项目串联了：",[24,155504,155505,155508,155511,155514,155517,155519],{},[27,155506,155507],{},"菜单循环。",[27,155509,155510],{},"函数封装。",[27,155512,155513],{},"列表字典。",[27,155515,155516],{},"JSON 读写。",[27,155518,153986],{},[27,155520,155521,31228],{},[196,155522,155523],{},"if __name__ == \"__main__\"",[14,155525,155527],{"id":155526},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[31,155529,155530],{},"可以进一步拆成两个类：",[24,155532,155533,155538],{},[27,155534,155535,155537],{},[196,155536,151827],{},"：表示单个学生。",[27,155539,155540,155542],{},[196,155541,153853],{},"：负责学生增删改查和文件保存。",[31,155544,155545],{},"示意代码：",[190,155547,155549],{"className":33221,"code":155548,"language":33223,"meta":57,"style":57},"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",[196,155550,155551,155561,155565,155569,155573,155581,155588,155594,155600,155606,155610,155618,155624,155634,155644,155654,155664,155668,155672,155678,155686,155694,155702,155710,155718,155726],{"__ignoreMap":57},[199,155552,155553,155555,155557,155559],{"class":201,"line":202},[199,155554,33579],{"class":1086},[199,155556,153411],{"class":205},[199,155558,33235],{"class":1086},[199,155560,153416],{"class":205},[199,155562,155563],{"class":201,"line":36},[199,155564,907],{"emptyLinePlaceholder":906},[199,155566,155567],{"class":201,"line":73},[199,155568,907],{"emptyLinePlaceholder":906},[199,155570,155571],{"class":201,"line":333},[199,155572,153429],{"class":878},[199,155574,155575,155577,155579],{"class":201,"line":227},[199,155576,17554],{"class":1086},[199,155578,10795],{"class":878},[199,155580,6640],{"class":205},[199,155582,155583,155586],{"class":201,"line":238},[199,155584,155585],{"class":205},"    student_id: ",[199,155587,153445],{"class":1018},[199,155589,155590,155592],{"class":201,"line":252},[199,155591,153442],{"class":205},[199,155593,153445],{"class":1018},[199,155595,155596,155598],{"class":201,"line":388},[199,155597,153450],{"class":205},[199,155599,153453],{"class":1018},[199,155601,155602,155604],{"class":201,"line":415},[199,155603,153458],{"class":205},[199,155605,153461],{"class":1018},[199,155607,155608],{"class":201,"line":426},[199,155609,907],{"emptyLinePlaceholder":906},[199,155611,155612,155614,155616],{"class":201,"line":1015},[199,155613,33643],{"class":1086},[199,155615,153609],{"class":878},[199,155617,33649],{"class":205},[199,155619,155620,155622],{"class":201,"line":1031},[199,155621,17612],{"class":1086},[199,155623,1012],{"class":205},[199,155625,155626,155628,155630,155632],{"class":201,"line":1043},[199,155627,153622],{"class":898},[199,155629,1022],{"class":205},[199,155631,33665],{"class":1018},[199,155633,153629],{"class":205},[199,155635,155636,155638,155640,155642],{"class":201,"line":1049},[199,155637,153634],{"class":898},[199,155639,1022],{"class":205},[199,155641,33665],{"class":1018},[199,155643,153641],{"class":205},[199,155645,155646,155648,155650,155652],{"class":201,"line":1054},[199,155647,153646],{"class":898},[199,155649,1022],{"class":205},[199,155651,33665],{"class":1018},[199,155653,153653],{"class":205},[199,155655,155656,155658,155660,155662],{"class":201,"line":1062},[199,155657,153658],{"class":898},[199,155659,1022],{"class":205},[199,155661,33665],{"class":1018},[199,155663,153665],{"class":205},[199,155665,155666],{"class":201,"line":1075},[199,155667,1046],{"class":205},[199,155669,155670],{"class":201,"line":1092},[199,155671,907],{"emptyLinePlaceholder":906},[199,155673,155674,155676],{"class":201,"line":1107},[199,155675,153273],{"class":878},[199,155677,153276],{"class":1018},[199,155679,155680,155682,155684],{"class":201,"line":1128},[199,155681,33643],{"class":1086},[199,155683,153686],{"class":878},[199,155685,153689],{"class":205},[199,155687,155688,155690,155692],{"class":201,"line":1146},[199,155689,17612],{"class":1086},[199,155691,153293],{"class":1018},[199,155693,153698],{"class":205},[199,155695,155696,155698,155700],{"class":201,"line":1163},[199,155697,153703],{"class":205},[199,155699,153706],{"class":898},[199,155701,90095],{"class":205},[199,155703,155704,155706,155708],{"class":201,"line":1176},[199,155705,153703],{"class":205},[199,155707,64938],{"class":898},[199,155709,90095],{"class":205},[199,155711,155712,155714,155716],{"class":201,"line":1189},[199,155713,153703],{"class":205},[199,155715,71383],{"class":898},[199,155717,90095],{"class":205},[199,155719,155720,155722,155724],{"class":201,"line":1202},[199,155721,153703],{"class":205},[199,155723,153731],{"class":898},[199,155725,90095],{"class":205},[199,155727,155728],{"class":201,"line":1207},[199,155729,40967],{"class":205},[31,155731,155732],{},"管理器示意：",[190,155734,155736],{"className":33221,"code":155735,"language":33223,"meta":57,"style":57},"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",[196,155737,155738,155747,155755,155766,155770,155780,155793,155804,155811,155817,155821,155830,155839,155845,155852],{"__ignoreMap":57},[199,155739,155740,155742,155745],{"class":201,"line":202},[199,155741,17554],{"class":1086},[199,155743,155744],{"class":878}," StudentManager",[199,155746,6640],{"class":205},[199,155748,155749,155751,155753],{"class":201,"line":36},[199,155750,33643],{"class":1086},[199,155752,33646],{"class":1018},[199,155754,33649],{"class":205},[199,155756,155757,155759,155762,155764],{"class":201,"line":73},[199,155758,33687],{"class":1018},[199,155760,155761],{"class":205},".students ",[199,155763,895],{"class":1086},[199,155765,1475],{"class":205},[199,155767,155768],{"class":201,"line":333},[199,155769,907],{"emptyLinePlaceholder":906},[199,155771,155772,155774,155777],{"class":201,"line":227},[199,155773,33643],{"class":1086},[199,155775,155776],{"class":878}," find_by_id",[199,155778,155779],{"class":205},"(self, student_id):\n",[199,155781,155782,155784,155786,155788,155790],{"class":201,"line":238},[199,155783,1481],{"class":1086},[199,155785,154396],{"class":205},[199,155787,28886],{"class":1086},[199,155789,41714],{"class":1018},[199,155791,155792],{"class":205},".students:\n",[199,155794,155795,155797,155800,155802],{"class":201,"line":252},[199,155796,7539],{"class":1086},[199,155798,155799],{"class":205}," student.student_id ",[199,155801,5853],{"class":1086},[199,155803,154417],{"class":205},[199,155805,155806,155809],{"class":201,"line":388},[199,155807,155808],{"class":1086},"                return",[199,155810,154424],{"class":205},[199,155812,155813,155815],{"class":201,"line":415},[199,155814,17612],{"class":1086},[199,155816,154431],{"class":1018},[199,155818,155819],{"class":201,"line":426},[199,155820,907],{"emptyLinePlaceholder":906},[199,155822,155823,155825,155827],{"class":201,"line":1015},[199,155824,33643],{"class":1086},[199,155826,8106],{"class":878},[199,155828,155829],{"class":205},"(self, student):\n",[199,155831,155832,155834,155836],{"class":201,"line":1031},[199,155833,2017],{"class":1086},[199,155835,41714],{"class":1018},[199,155837,155838],{"class":205},".find_by_id(student.student_id):\n",[199,155840,155841,155843],{"class":201,"line":1043},[199,155842,18590],{"class":1086},[199,155844,128066],{"class":1018},[199,155846,155847,155849],{"class":201,"line":1049},[199,155848,33687],{"class":1018},[199,155850,155851],{"class":205},".students.append(student)\n",[199,155853,155854,155856],{"class":201,"line":1054},[199,155855,17612],{"class":1086},[199,155857,155858],{"class":1018}," True\n",[31,155860,155861],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155863,155865],{"id":155864},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[19,155867,155869],{"id":155868},"_1251-数据结构","12.5.1 数据结构",[190,155871,155873],{"className":33221,"code":155872,"language":33223,"meta":57,"style":57},"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",[196,155874,155875,155883,155914,155944,155973,156002],{"__ignoreMap":57},[199,155876,155877,155879,155881],{"class":201,"line":202},[199,155878,150724],{"class":205},[199,155880,895],{"class":1086},[199,155882,57706],{"class":205},[199,155884,155885,155887,155889,155891,155893,155895,155898,155900,155903,155905,155907,155909,155912],{"class":201,"line":36},[199,155886,150644],{"class":205},[199,155888,150256],{"class":898},[199,155890,1022],{"class":205},[199,155892,150867],{"class":898},[199,155894,1912],{"class":205},[199,155896,155897],{"class":898},"\"category\"",[199,155899,1022],{"class":205},[199,155901,155902],{"class":898},"\"手机\"",[199,155904,1912],{"class":205},[199,155906,86343],{"class":898},[199,155908,1022],{"class":205},[199,155910,155911],{"class":1018},"12000",[199,155913,7827],{"class":205},[199,155915,155916,155918,155920,155922,155924,155926,155928,155930,155933,155935,155937,155939,155942],{"class":201,"line":73},[199,155917,150644],{"class":205},[199,155919,150256],{"class":898},[199,155921,1022],{"class":205},[199,155923,150867],{"class":898},[199,155925,1912],{"class":205},[199,155927,155897],{"class":898},[199,155929,1022],{"class":205},[199,155931,155932],{"class":898},"\"电脑\"",[199,155934,1912],{"class":205},[199,155936,86343],{"class":898},[199,155938,1022],{"class":205},[199,155940,155941],{"class":1018},"18000",[199,155943,7827],{"class":205},[199,155945,155946,155948,155950,155952,155954,155956,155958,155960,155962,155964,155966,155968,155971],{"class":201,"line":333},[199,155947,150644],{"class":205},[199,155949,150256],{"class":898},[199,155951,1022],{"class":205},[199,155953,150888],{"class":898},[199,155955,1912],{"class":205},[199,155957,155897],{"class":898},[199,155959,1022],{"class":205},[199,155961,155902],{"class":898},[199,155963,1912],{"class":205},[199,155965,86343],{"class":898},[199,155967,1022],{"class":205},[199,155969,155970],{"class":1018},"15000",[199,155972,7827],{"class":205},[199,155974,155975,155977,155979,155981,155983,155985,155987,155989,155991,155993,155995,155997,156000],{"class":201,"line":227},[199,155976,150644],{"class":205},[199,155978,150256],{"class":898},[199,155980,1022],{"class":205},[199,155982,150888],{"class":898},[199,155984,1912],{"class":205},[199,155986,155897],{"class":898},[199,155988,1022],{"class":205},[199,155990,155932],{"class":898},[199,155992,1912],{"class":205},[199,155994,86343],{"class":898},[199,155996,1022],{"class":205},[199,155998,155999],{"class":1018},"16000",[199,156001,7827],{"class":205},[199,156003,156004],{"class":201,"line":238},[199,156005,1932],{"class":205},[19,156007,156009],{"id":156008},"_1252-按日期统计","12.5.2 按日期统计",[190,156011,156013],{"className":33221,"code":156012,"language":33223,"meta":57,"style":57},"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",[196,156014,156015,156024,156028,156039,156053,156066,156085,156089],{"__ignoreMap":57},[199,156016,156017,156020,156022],{"class":201,"line":202},[199,156018,156019],{"class":205},"daily_total ",[199,156021,895],{"class":1086},[199,156023,90127],{"class":205},[199,156025,156026],{"class":201,"line":36},[199,156027,907],{"emptyLinePlaceholder":906},[199,156029,156030,156032,156034,156036],{"class":201,"line":73},[199,156031,5929],{"class":1086},[199,156033,150468],{"class":205},[199,156035,28886],{"class":1086},[199,156037,156038],{"class":205}," sales:\n",[199,156040,156041,156044,156046,156049,156051],{"class":201,"line":333},[199,156042,156043],{"class":205},"    date ",[199,156045,895],{"class":1086},[199,156047,156048],{"class":205}," item[",[199,156050,150256],{"class":898},[199,156052,1932],{"class":205},[199,156054,156055,156058,156060,156062,156064],{"class":201,"line":227},[199,156056,156057],{"class":205},"    amount ",[199,156059,895],{"class":1086},[199,156061,156048],{"class":205},[199,156063,86343],{"class":898},[199,156065,1932],{"class":205},[199,156067,156068,156071,156073,156076,156078,156080,156082],{"class":201,"line":238},[199,156069,156070],{"class":205},"    daily_total[date] ",[199,156072,895],{"class":1086},[199,156074,156075],{"class":205}," daily_total.get(date, ",[199,156077,1025],{"class":1018},[199,156079,16575],{"class":205},[199,156081,2028],{"class":1086},[199,156083,156084],{"class":205}," amount\n",[199,156086,156087],{"class":201,"line":252},[199,156088,907],{"emptyLinePlaceholder":906},[199,156090,156091,156093],{"class":201,"line":388},[199,156092,33258],{"class":1018},[199,156094,156095],{"class":205},"(daily_total)\n",[19,156097,156099],{"id":156098},"_1253-按类别统计","12.5.3 按类别统计",[190,156101,156103],{"className":33221,"code":156102,"language":33223,"meta":57,"style":57},"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",[196,156104,156105,156114,156118,156128,156141,156153,156171,156175],{"__ignoreMap":57},[199,156106,156107,156110,156112],{"class":201,"line":202},[199,156108,156109],{"class":205},"category_total ",[199,156111,895],{"class":1086},[199,156113,90127],{"class":205},[199,156115,156116],{"class":201,"line":36},[199,156117,907],{"emptyLinePlaceholder":906},[199,156119,156120,156122,156124,156126],{"class":201,"line":73},[199,156121,5929],{"class":1086},[199,156123,150468],{"class":205},[199,156125,28886],{"class":1086},[199,156127,156038],{"class":205},[199,156129,156130,156133,156135,156137,156139],{"class":201,"line":333},[199,156131,156132],{"class":205},"    category ",[199,156134,895],{"class":1086},[199,156136,156048],{"class":205},[199,156138,155897],{"class":898},[199,156140,1932],{"class":205},[199,156142,156143,156145,156147,156149,156151],{"class":201,"line":227},[199,156144,156057],{"class":205},[199,156146,895],{"class":1086},[199,156148,156048],{"class":205},[199,156150,86343],{"class":898},[199,156152,1932],{"class":205},[199,156154,156155,156158,156160,156163,156165,156167,156169],{"class":201,"line":238},[199,156156,156157],{"class":205},"    category_total[category] ",[199,156159,895],{"class":1086},[199,156161,156162],{"class":205}," category_total.get(category, ",[199,156164,1025],{"class":1018},[199,156166,16575],{"class":205},[199,156168,2028],{"class":1086},[199,156170,156084],{"class":205},[199,156172,156173],{"class":201,"line":252},[199,156174,907],{"emptyLinePlaceholder":906},[199,156176,156177,156179],{"class":201,"line":388},[199,156178,33258],{"class":1018},[199,156180,156181],{"class":205},"(category_total)\n",[19,156183,156185],{"id":156184},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[190,156187,156189],{"className":33221,"code":156188,"language":33223,"meta":57,"style":57},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[196,156190,156191,156216],{"__ignoreMap":57},[199,156192,156193,156196,156198,156200,156203,156206,156209,156212,156214],{"class":201,"line":202},[199,156194,156195],{"class":205},"top_date, top_amount ",[199,156197,895],{"class":1086},[199,156199,8848],{"class":1018},[199,156201,156202],{"class":205},"(daily_total.items(), ",[199,156204,156205],{"class":8113},"key",[199,156207,156208],{"class":1086},"=lambda",[199,156210,156211],{"class":205}," item: item[",[199,156213,1115],{"class":1018},[199,156215,7554],{"class":205},[199,156217,156218,156220],{"class":201,"line":36},[199,156219,33258],{"class":1018},[199,156221,156222],{"class":205},"(top_date, top_amount)\n",[14,156224,156226],{"id":156225},"_126-绘制柱状图","12.6 绘制柱状图",[190,156228,156230],{"className":33221,"code":156229,"language":33223,"meta":57,"style":57},"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",[196,156231,156232,156246,156257,156261,156269,156281,156293,156304,156308,156312,156322,156333,156347,156352,156369,156386,156402,156406],{"__ignoreMap":57},[199,156233,156234,156236,156238,156240,156242,156244],{"class":201,"line":202},[199,156235,33579],{"class":1086},[199,156237,149638],{"class":205},[199,156239,33235],{"class":1086},[199,156241,149643],{"class":205},[199,156243,34225],{"class":1086},[199,156245,149648],{"class":205},[199,156247,156248,156250,156252,156254],{"class":201,"line":36},[199,156249,33579],{"class":1086},[199,156251,149497],{"class":205},[199,156253,33235],{"class":1086},[199,156255,156256],{"class":205}," Bar\n",[199,156258,156259],{"class":201,"line":73},[199,156260,907],{"emptyLinePlaceholder":906},[199,156262,156263,156265,156267],{"class":201,"line":333},[199,156264,156109],{"class":205},[199,156266,895],{"class":1086},[199,156268,1012],{"class":205},[199,156270,156271,156274,156276,156279],{"class":201,"line":227},[199,156272,156273],{"class":898},"    \"手机\"",[199,156275,1022],{"class":205},[199,156277,156278],{"class":1018},"27000",[199,156280,34308],{"class":205},[199,156282,156283,156286,156288,156291],{"class":201,"line":238},[199,156284,156285],{"class":898},"    \"电脑\"",[199,156287,1022],{"class":205},[199,156289,156290],{"class":1018},"34000",[199,156292,34308],{"class":205},[199,156294,156295,156298,156300,156302],{"class":201,"line":252},[199,156296,156297],{"class":898},"    \"耳机\"",[199,156299,1022],{"class":205},[199,156301,126658],{"class":1018},[199,156303,34308],{"class":205},[199,156305,156306],{"class":201,"line":388},[199,156307,671],{"class":205},[199,156309,156310],{"class":201,"line":415},[199,156311,907],{"emptyLinePlaceholder":906},[199,156313,156314,156317,156319],{"class":201,"line":426},[199,156315,156316],{"class":205},"bar ",[199,156318,895],{"class":1086},[199,156320,156321],{"class":205}," Bar()\n",[199,156323,156324,156327,156330],{"class":201,"line":1015},[199,156325,156326],{"class":205},"bar.add_xaxis(",[199,156328,156329],{"class":1018},"list",[199,156331,156332],{"class":205},"(category_total.keys()))\n",[199,156334,156335,156338,156340,156342,156344],{"class":201,"line":1031},[199,156336,156337],{"class":205},"bar.add_yaxis(",[199,156339,149554],{"class":898},[199,156341,1912],{"class":205},[199,156343,156329],{"class":1018},[199,156345,156346],{"class":205},"(category_total.values()))\n",[199,156348,156349],{"class":201,"line":1043},[199,156350,156351],{"class":205},"bar.set_global_opts(\n",[199,156353,156354,156356,156358,156360,156362,156364,156367],{"class":201,"line":1049},[199,156355,149732],{"class":8113},[199,156357,895],{"class":1086},[199,156359,149737],{"class":205},[199,156361,988],{"class":8113},[199,156363,895],{"class":1086},[199,156365,156366],{"class":898},"\"品类销售额\"",[199,156368,40888],{"class":205},[199,156370,156371,156373,156375,156377,156379,156381,156384],{"class":201,"line":1054},[199,156372,149751],{"class":8113},[199,156374,895],{"class":1086},[199,156376,149756],{"class":205},[199,156378,82069],{"class":8113},[199,156380,895],{"class":1086},[199,156382,156383],{"class":898},"\"品类\"",[199,156385,40888],{"class":205},[199,156387,156388,156390,156392,156394,156396,156398,156400],{"class":201,"line":1062},[199,156389,149770],{"class":8113},[199,156391,895],{"class":1086},[199,156393,149756],{"class":205},[199,156395,82069],{"class":8113},[199,156397,895],{"class":1086},[199,156399,149554],{"class":898},[199,156401,40888],{"class":205},[199,156403,156404],{"class":201,"line":1075},[199,156405,1594],{"class":205},[199,156407,156408,156411,156414],{"class":201,"line":1092},[199,156409,156410],{"class":205},"bar.render(",[199,156412,156413],{"class":898},"\"category_sales.html\"",[199,156415,1594],{"class":205},[14,156417,156419],{"id":156418},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[31,156421,156422],{},"时间线适合展示不同日期、月份、年份的数据变化。",[190,156424,156426],{"className":33221,"code":156425,"language":33223,"meta":57,"style":57},"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",[196,156427,156428,156442,156453,156457,156465,156489,156512,156537,156541,156545,156555,156559,156570,156579,156589,156603,156634,156639,156643],{"__ignoreMap":57},[199,156429,156430,156432,156434,156436,156438,156440],{"class":201,"line":202},[199,156431,33579],{"class":1086},[199,156433,149638],{"class":205},[199,156435,33235],{"class":1086},[199,156437,149643],{"class":205},[199,156439,34225],{"class":1086},[199,156441,149648],{"class":205},[199,156443,156444,156446,156448,156450],{"class":201,"line":36},[199,156445,33579],{"class":1086},[199,156447,149497],{"class":205},[199,156449,33235],{"class":1086},[199,156451,156452],{"class":205}," Bar, Timeline\n",[199,156454,156455],{"class":201,"line":73},[199,156456,907],{"emptyLinePlaceholder":906},[199,156458,156459,156461,156463],{"class":201,"line":333},[199,156460,103917],{"class":205},[199,156462,895],{"class":1086},[199,156464,1012],{"class":205},[199,156466,156467,156470,156473,156475,156477,156479,156481,156483,156485,156487],{"class":201,"line":227},[199,156468,156469],{"class":898},"    \"2024-10-01\"",[199,156471,156472],{"class":205},": {",[199,156474,155902],{"class":898},[199,156476,1022],{"class":205},[199,156478,155911],{"class":1018},[199,156480,1912],{"class":205},[199,156482,155932],{"class":898},[199,156484,1022],{"class":205},[199,156486,155941],{"class":1018},[199,156488,7827],{"class":205},[199,156490,156491,156494,156496,156498,156500,156502,156504,156506,156508,156510],{"class":201,"line":238},[199,156492,156493],{"class":898},"    \"2024-10-02\"",[199,156495,156472],{"class":205},[199,156497,155902],{"class":898},[199,156499,1022],{"class":205},[199,156501,155970],{"class":1018},[199,156503,1912],{"class":205},[199,156505,155932],{"class":898},[199,156507,1022],{"class":205},[199,156509,155999],{"class":1018},[199,156511,7827],{"class":205},[199,156513,156514,156517,156519,156521,156523,156526,156528,156530,156532,156535],{"class":201,"line":252},[199,156515,156516],{"class":898},"    \"2024-10-03\"",[199,156518,156472],{"class":205},[199,156520,155902],{"class":898},[199,156522,1022],{"class":205},[199,156524,156525],{"class":1018},"17000",[199,156527,1912],{"class":205},[199,156529,155932],{"class":898},[199,156531,1022],{"class":205},[199,156533,156534],{"class":1018},"19000",[199,156536,7827],{"class":205},[199,156538,156539],{"class":201,"line":388},[199,156540,671],{"class":205},[199,156542,156543],{"class":201,"line":415},[199,156544,907],{"emptyLinePlaceholder":906},[199,156546,156547,156550,156552],{"class":201,"line":426},[199,156548,156549],{"class":205},"timeline ",[199,156551,895],{"class":1086},[199,156553,156554],{"class":205}," Timeline()\n",[199,156556,156557],{"class":201,"line":1015},[199,156558,907],{"emptyLinePlaceholder":906},[199,156560,156561,156563,156566,156568],{"class":201,"line":1031},[199,156562,5929],{"class":1086},[199,156564,156565],{"class":205}," date, category_data ",[199,156567,28886],{"class":1086},[199,156569,151407],{"class":205},[199,156571,156572,156575,156577],{"class":201,"line":1043},[199,156573,156574],{"class":205},"    bar ",[199,156576,895],{"class":1086},[199,156578,156321],{"class":205},[199,156580,156581,156584,156586],{"class":201,"line":1049},[199,156582,156583],{"class":205},"    bar.add_xaxis(",[199,156585,156329],{"class":1018},[199,156587,156588],{"class":205},"(category_data.keys()))\n",[199,156590,156591,156594,156596,156598,156600],{"class":201,"line":1054},[199,156592,156593],{"class":205},"    bar.add_yaxis(",[199,156595,149554],{"class":898},[199,156597,1912],{"class":205},[199,156599,156329],{"class":1018},[199,156601,156602],{"class":205},"(category_data.values()))\n",[199,156604,156605,156608,156611,156613,156615,156617,156619,156621,156623,156625,156627,156629,156632],{"class":201,"line":1062},[199,156606,156607],{"class":205},"    bar.set_global_opts(",[199,156609,156610],{"class":8113},"title_opts",[199,156612,895],{"class":1086},[199,156614,149737],{"class":205},[199,156616,988],{"class":8113},[199,156618,895],{"class":1086},[199,156620,3146],{"class":1086},[199,156622,3337],{"class":898},[199,156624,3974],{"class":1018},[199,156626,76185],{"class":205},[199,156628,759],{"class":1018},[199,156630,156631],{"class":898},"销售额\"",[199,156633,1554],{"class":205},[199,156635,156636],{"class":201,"line":1075},[199,156637,156638],{"class":205},"    timeline.add(bar, date)\n",[199,156640,156641],{"class":201,"line":1092},[199,156642,907],{"emptyLinePlaceholder":906},[199,156644,156645,156648,156651],{"class":201,"line":1107},[199,156646,156647],{"class":205},"timeline.render(",[199,156649,156650],{"class":898},"\"timeline_sales.html\"",[199,156652,1594],{"class":205},[14,156654,156656],{"id":156655},"_128-绘制地图","12.8 绘制地图",[31,156658,156659],{},"地图适合展示地区数据。",[190,156661,156663],{"className":33221,"code":156662,"language":33223,"meta":57,"style":57},"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",[196,156664,156665,156679,156690,156694,156702,156715,156727,156740,156753,156757,156761,156771,156786,156791,156808,156827,156831],{"__ignoreMap":57},[199,156666,156667,156669,156671,156673,156675,156677],{"class":201,"line":202},[199,156668,33579],{"class":1086},[199,156670,149638],{"class":205},[199,156672,33235],{"class":1086},[199,156674,149643],{"class":205},[199,156676,34225],{"class":1086},[199,156678,149648],{"class":205},[199,156680,156681,156683,156685,156687],{"class":201,"line":36},[199,156682,33579],{"class":1086},[199,156684,149497],{"class":205},[199,156686,33235],{"class":1086},[199,156688,156689],{"class":205}," Map\n",[199,156691,156692],{"class":201,"line":73},[199,156693,907],{"emptyLinePlaceholder":906},[199,156695,156696,156698,156700],{"class":201,"line":333},[199,156697,103917],{"class":205},[199,156699,895],{"class":1086},[199,156701,57706],{"class":205},[199,156703,156704,156707,156709,156711,156713],{"class":201,"line":227},[199,156705,156706],{"class":205},"    (",[199,156708,71528],{"class":898},[199,156710,1912],{"class":205},[199,156712,3896],{"class":1018},[199,156714,40888],{"class":205},[199,156716,156717,156719,156721,156723,156725],{"class":201,"line":238},[199,156718,156706],{"class":205},[199,156720,71548],{"class":898},[199,156722,1912],{"class":205},[199,156724,149571],{"class":1018},[199,156726,40888],{"class":205},[199,156728,156729,156731,156734,156736,156738],{"class":201,"line":252},[199,156730,156706],{"class":205},[199,156732,156733],{"class":898},"\"广东\"",[199,156735,1912],{"class":205},[199,156737,4647],{"class":1018},[199,156739,40888],{"class":205},[199,156741,156742,156744,156747,156749,156751],{"class":201,"line":388},[199,156743,156706],{"class":205},[199,156745,156746],{"class":898},"\"浙江\"",[199,156748,1912],{"class":205},[199,156750,149576],{"class":1018},[199,156752,40888],{"class":205},[199,156754,156755],{"class":201,"line":415},[199,156756,1932],{"class":205},[199,156758,156759],{"class":201,"line":426},[199,156760,907],{"emptyLinePlaceholder":906},[199,156762,156763,156766,156768],{"class":201,"line":1015},[199,156764,156765],{"class":205},"map_chart ",[199,156767,895],{"class":1086},[199,156769,156770],{"class":205}," Map()\n",[199,156772,156773,156776,156778,156781,156784],{"class":201,"line":1031},[199,156774,156775],{"class":205},"map_chart.add(",[199,156777,149554],{"class":898},[199,156779,156780],{"class":205},", data, ",[199,156782,156783],{"class":898},"\"china\"",[199,156785,1594],{"class":205},[199,156787,156788],{"class":201,"line":1043},[199,156789,156790],{"class":205},"map_chart.set_global_opts(\n",[199,156792,156793,156795,156797,156799,156801,156803,156806],{"class":201,"line":1049},[199,156794,149732],{"class":8113},[199,156796,895],{"class":1086},[199,156798,149737],{"class":205},[199,156800,988],{"class":8113},[199,156802,895],{"class":1086},[199,156804,156805],{"class":898},"\"地区销售额\"",[199,156807,40888],{"class":205},[199,156809,156810,156813,156815,156818,156821,156823,156825],{"class":201,"line":1054},[199,156811,156812],{"class":8113},"    visualmap_opts",[199,156814,895],{"class":1086},[199,156816,156817],{"class":205},"opts.VisualMapOpts(",[199,156819,156820],{"class":8113},"max_",[199,156822,895],{"class":1086},[199,156824,4647],{"class":1018},[199,156826,40888],{"class":205},[199,156828,156829],{"class":201,"line":1062},[199,156830,1594],{"class":205},[199,156832,156833,156836,156839],{"class":201,"line":1075},[199,156834,156835],{"class":205},"map_chart.render(",[199,156837,156838],{"class":898},"\"map_sales.html\"",[199,156840,1594],{"class":205},[31,156842,156843],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156845,156847],{"id":156846},"_129-项目拆分建议","12.9 项目拆分建议",[31,156849,156850],{},"当代码超过一个文件时，可以这样组织：",[190,156852,156855],{"className":156853,"code":156854,"language":8084,"meta":57},[8082],"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",[196,156856,156854],{"__ignoreMap":57},[31,156858,156859],{},"职责：",[24,156861,156862,156868,156874,156880],{},[27,156863,156864,156867],{},[196,156865,156866],{},"main.py","：程序入口。",[27,156869,156870,156873],{},[196,156871,156872],{},"file_utils.py","：读写 JSON。",[27,156875,156876,156879],{},[196,156877,156878],{},"sales_service.py","：统计销售数据。",[27,156881,156882,156885],{},[196,156883,156884],{},"chart_builder.py","：生成图表。",[14,156887,156889],{"id":156888},"_1210-python基础复习清单","12.10 Python基础复习清单",[31,156891,156892],{},"语法基础：",[24,156894,156895,156898,156901,156904],{},[27,156896,156897],{},"会写变量、注释、输入输出。",[27,156899,156900],{},"会使用 int、float、str、bool。",[27,156902,156903],{},"会做类型转换。",[27,156905,156906],{},"会使用 f-string 格式化输出。",[31,156908,156909],{},"流程控制：",[24,156911,156912,156918,156924,156932],{},[27,156913,156914,156915,31228],{},"会写 ",[196,156916,156917],{},"if elif else",[27,156919,156914,156920,103277,156922,31228],{},[196,156921,110922],{},[196,156923,5929],{},[27,156925,156926,156927,103277,156929,31228],{},"理解 ",[196,156928,4969],{},[196,156930,156931],{},"continue",[27,156933,156934],{},"能写嵌套循环。",[31,156936,156937],{},"函数：",[24,156939,156940,156943,156946,156949],{},[27,156941,156942],{},"会定义和调用函数。",[27,156944,156945],{},"理解参数和返回值。",[27,156947,156948],{},"知道局部变量和全局变量。",[27,156950,156951],{},"会使用默认参数、关键字参数、不定长参数。",[31,156953,156954],{},"容器：",[24,156956,156957,156960,156963,156966,156969],{},[27,156958,156959],{},"会使用列表增删改查。",[27,156961,156962],{},"会遍历列表、字典。",[27,156964,156965],{},"会使用切片。",[27,156967,156968],{},"会用集合去重。",[27,156970,156971],{},"会处理列表嵌套字典。",[31,156973,156974],{},"文件和模块：",[24,156976,156977,156980,156983,156986,156989],{},[27,156978,156979],{},"会读写文本文件。",[27,156981,156982],{},"会读写 JSON。",[27,156984,156985],{},"会捕获常见异常。",[27,156987,156988],{},"会导入模块和第三方包。",[27,156990,156991],{},"会创建简单包结构。",[31,156993,156994],{},"项目能力：",[24,156996,156997,157000,157003,157006,157009],{},[27,156998,156999],{},"能把代码拆成函数。",[27,157001,157002],{},"能把数据保存到文件。",[27,157004,157005],{},"能处理用户输入错误。",[27,157007,157008],{},"能写一个完整菜单程序。",[27,157010,157011],{},"能用 pyecharts 生成图表。",[14,157013,157015],{"id":157014},"_1211-推荐练习顺序","12.11 推荐练习顺序",[24,157017,157018,157021,157024,157027,157030,157033,157036,157039],{},[27,157019,157020],{},"猜数字游戏。",[27,157022,157023],{},"ATM 菜单程序。",[27,157025,157026],{},"学生成绩统计。",[27,157028,157029],{},"学生管理系统函数版。",[27,157031,157032],{},"学生管理系统文件持久化版。",[27,157034,157035],{},"学生管理系统面向对象版。",[27,157037,157038],{},"销售数据统计。",[27,157040,157041],{},"销售数据可视化。",[14,157043,157045],{"id":157044},"_1212-常见学习误区","12.12 常见学习误区",[24,157047,157048,157051,157054,157057,157060,157063,157066],{},[27,157049,157050],{},"只看视频不敲代码。",[27,157052,157053],{},"一报错就复制错误去搜，不先读报错位置。",[27,157055,157056],{},"变量名随便写，后续自己看不懂。",[27,157058,157059],{},"所有代码都写在一个文件一个函数里。",[27,157061,157062],{},"不保存练习代码，复习时没有材料。",[27,157064,157065],{},"还没掌握列表字典就急着学框架。",[27,157067,157068],{},"不会读官方文档，只依赖教程。",[14,157070,157072],{"id":157071},"_1213-如何读报错","12.13 如何读报错",[31,157074,157075],{},"报错通常从下往上看最后几行。",[31,157077,17994],{},[190,157079,157082],{"className":157080,"code":157081,"language":8084,"meta":57},[8082],"ValueError: invalid literal for int() with base 10: 'abc'\n",[196,157083,157081],{"__ignoreMap":57},[31,157085,27443],{},[24,157087,157088,157094,157104],{},[27,157089,157090,157091,31228],{},"异常类型是 ",[196,157092,157093],{},"ValueError",[27,157095,109604,157096,157099,157100,157103],{},[196,157097,157098],{},"int()"," 无法把 ",[196,157101,157102],{},"'abc'"," 转成整数。",[27,157105,157106],{},"应该检查输入内容或增加异常处理。",[31,157108,157109],{},"再看文件名和行号：",[190,157111,157114],{"className":157112,"code":157113,"language":8084,"meta":57},[8082],"File \"main.py\", line 10, in \u003Cmodule>\n",[196,157115,157113],{"__ignoreMap":57},[31,157117,157118,157119,157121],{},"表示错误发生在 ",[196,157120,156866],{}," 第 10 行。",[14,157123,157125],{"id":157124},"_1214-后续学习方向","12.14 后续学习方向",[31,157127,157128],{},"Python 基础完成后，可以按兴趣选择方向：",[24,157130,157131,157143,157152,157164,157175,157184,157194],{},[27,157132,157133,157134,3300,157137,3300,157140,31228],{},"自动化办公：",[196,157135,157136],{},"openpyxl",[196,157138,157139],{},"python-docx",[196,157141,157142],{},"pdfplumber",[27,157144,157145,157146,3300,157148,3300,157150,31228],{},"数据分析：",[196,157147,102885],{},[196,157149,148444],{},[196,157151,148452],{},[27,157153,157154,157155,3300,157158,3300,157161,31228],{},"Web 后端：",[196,157156,157157],{},"Flask",[196,157159,157160],{},"FastAPI",[196,157162,157163],{},"Django",[27,157165,157166,157167,3300,157169,3300,157172,31228],{},"爬虫：",[196,157168,148429],{},[196,157170,157171],{},"BeautifulSoup",[196,157173,157174],{},"Scrapy",[27,157176,157177,157178,3300,157180,157183],{},"测试开发：",[196,157179,148476],{},[196,157181,157182],{},"selenium","、接口测试。",[27,157185,157186,157187,3300,157189,3300,157191,31228],{},"人工智能：",[196,157188,102885],{},[196,157190,148444],{},[196,157192,157193],{},"pytorch",[27,157195,157196,157197,3300,157199,3300,157202,31228],{},"运维脚本：",[196,157198,148045],{},[196,157200,157201],{},"subprocess",[196,157203,157204],{},"paramiko",[31,157206,157207],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157209,157211],{"id":157210},"_1215-结课练习","12.15 结课练习",[24,157213,157214,157217,157220,157223,157226,157229,157232,157235],{},[27,157215,157216],{},"完成函数版学生管理系统。",[27,157218,157219],{},"给学生管理系统增加 JSON 持久化。",[27,157221,157222],{},"给学生管理系统增加异常处理。",[27,157224,157225],{},"把学生管理系统改成面向对象版。",[27,157227,157228],{},"使用 pyecharts 绘制学生成绩柱状图。",[27,157230,157231],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[27,157233,157234],{},"按品类统计销售额并绘制柱状图。",[27,157236,157237],{},"写一份自己的 Python 学习路线图。",[1002,157239,157240],{},"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":57,"searchDepth":36,"depth":36,"links":157242},[157243,157244,157247,157248,157249,157255,157256,157257,157258,157259,157260,157261,157262,157263,157264],{"id":153959,"depth":36,"text":153960},{"id":154009,"depth":36,"text":154010,"children":157245},[157246],{"id":154013,"depth":73,"text":154014},{"id":154052,"depth":36,"text":154053},{"id":155526,"depth":36,"text":155527},{"id":155864,"depth":36,"text":155865,"children":157250},[157251,157252,157253,157254],{"id":155868,"depth":73,"text":155869},{"id":156008,"depth":73,"text":156009},{"id":156098,"depth":73,"text":156099},{"id":156184,"depth":73,"text":156185},{"id":156225,"depth":36,"text":156226},{"id":156418,"depth":36,"text":156419},{"id":156655,"depth":36,"text":156656},{"id":156846,"depth":36,"text":156847},{"id":156888,"depth":36,"text":156889},{"id":157014,"depth":36,"text":157015},{"id":157044,"depth":36,"text":157045},{"id":157071,"depth":36,"text":157072},{"id":157124,"depth":36,"text":157125},{"id":157210,"depth":36,"text":157211},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153951,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157271,"title":157272,"body":157273,"description":3023,"extension":3024,"meta":159742,"navigation":906,"path":159743,"seo":159744,"stem":159745,"__hash__":159746},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157274,"toc":159717},[157275,157278,157282,157285,157288,157308,157311,157334,157337,157340,157362,157365,157387,157391,157394,157434,157437,157558,157562,157565,157605,157608,157632,157635,157639,157642,157656,157689,157692,157727,157730,157753,157756,157789,157792,157794,157800,157875,157878,157884,157901,157941,157945,157948,157994,157996,158034,158037,158072,158075,158110,158113,158145,158148,158167,158171,158175,158288,158290,158365,158369,158415,158418,158444,158453,158457,158460,158523,158531,158559,158563,158603,158668,158672,158675,158714,158717,158762,158765,158826,158830,158857,158860,158888,158891,158895,158899,158964,158967,159005,159008,159040,159044,159143,159147,159150,159223,159226,159274,159278,159284,159324,159327,159374,159377,159426,159430,159432,159446,159448,159629,159633,159660,159680,159687,159691,159708,159714],[10,157276,157272],{"id":157277},"_2-基础语法变量与字符串",[14,157279,157281],{"id":157280},"_21-注释","2.1 注释",[31,157283,157284],{},"注释是给人看的说明文字，不会被 Python 执行。",[31,157286,157287],{},"单行注释：",[190,157289,157291],{"className":33221,"code":157290,"language":33223,"meta":57,"style":57},"# 这是单行注释\nprint(\"hello\")\n",[196,157292,157293,157298],{"__ignoreMap":57},[199,157294,157295],{"class":201,"line":202},[199,157296,157297],{"class":1454},"# 这是单行注释\n",[199,157299,157300,157302,157304,157306],{"class":201,"line":36},[199,157301,33258],{"class":1018},[199,157303,1537],{"class":205},[199,157305,8741],{"class":898},[199,157307,1594],{"class":205},[31,157309,157310],{},"多行说明常用三引号：",[190,157312,157314],{"className":33221,"code":157313,"language":33223,"meta":57,"style":57},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[196,157315,157316,157320,157325,157330],{"__ignoreMap":57},[199,157317,157318],{"class":201,"line":202},[199,157319,97957],{"class":898},[199,157321,157322],{"class":201,"line":36},[199,157323,157324],{"class":898},"这是多行说明。\n",[199,157326,157327],{"class":201,"line":73},[199,157328,157329],{"class":898},"常用于文件顶部说明、函数说明等。\n",[199,157331,157332],{"class":201,"line":333},[199,157333,97957],{"class":898},[31,157335,157336],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[31,157338,157339],{},"不好：",[190,157341,157343],{"className":33221,"code":157342,"language":33223,"meta":57,"style":57},"# age 加 1\nage = age + 1\n",[196,157344,157345,157350],{"__ignoreMap":57},[199,157346,157347],{"class":201,"line":202},[199,157348,157349],{"class":1454},"# age 加 1\n",[199,157351,157352,157354,157356,157358,157360],{"class":201,"line":36},[199,157353,148805],{"class":205},[199,157355,895],{"class":1086},[199,157357,18565],{"class":205},[199,157359,2028],{"class":1086},[199,157361,57958],{"class":1018},[31,157363,157364],{},"较好：",[190,157366,157368],{"className":33221,"code":157367,"language":33223,"meta":57,"style":57},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[196,157369,157370,157375],{"__ignoreMap":57},[199,157371,157372],{"class":201,"line":202},[199,157373,157374],{"class":1454},"# 用户过完生日后，年龄增加一岁\n",[199,157376,157377,157379,157381,157383,157385],{"class":201,"line":36},[199,157378,148805],{"class":205},[199,157380,895],{"class":1086},[199,157382,18565],{"class":205},[199,157384,2028],{"class":1086},[199,157386,57958],{"class":1018},[14,157388,157390],{"id":157389},"_22-字面量","2.2 字面量",[31,157392,157393],{},"字面量就是代码中直接写出来的数据。",[190,157395,157397],{"className":33221,"code":157396,"language":33223,"meta":57,"style":57},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[196,157398,157399,157406,157413,157420,157427],{"__ignoreMap":57},[199,157400,157401,157403],{"class":201,"line":202},[199,157402,3396],{"class":1018},[199,157404,157405],{"class":1454},"          # 整数\n",[199,157407,157408,157410],{"class":201,"line":36},[199,157409,3143],{"class":1018},[199,157411,157412],{"class":1454},"         # 小数\n",[199,157414,157415,157417],{"class":201,"line":73},[199,157416,8741],{"class":898},[199,157418,157419],{"class":1454},"      # 字符串\n",[199,157421,157422,157424],{"class":201,"line":333},[199,157423,34318],{"class":1018},[199,157425,157426],{"class":1454},"         # 布尔值\n",[199,157428,157429,157431],{"class":201,"line":227},[199,157430,97945],{"class":1018},[199,157432,157433],{"class":1454},"         # 空值\n",[31,157435,157436],{},"常见字面量类型：",[3227,157438,157439,157449],{},[3230,157440,157441],{},[3233,157442,157443,157445,157447],{},[3236,157444,26581],{},[3236,157446,30335],{},[3236,157448,28712],{},[3273,157450,157451,157462,157473,157484,157496,157508,157520,157533,157545],{},[3233,157452,157453,157455,157459],{},[3278,157454,3100],{},[3278,157456,157457],{},[196,157458,3396],{},[3278,157460,157461],{},"整数",[3233,157463,157464,157466,157470],{},[3278,157465,3135],{},[3278,157467,157468],{},[196,157469,3143],{},[3278,157471,157472],{},"浮点数",[3233,157474,157475,157477,157481],{},[3278,157476,4242],{},[3278,157478,157479],{},[196,157480,8741],{},[3278,157482,157483],{},"字符串",[3233,157485,157486,157488,157494],{},[3278,157487,4294],{},[3278,157489,157490,3300,157492],{},[196,157491,34318],{},[196,157493,36828],{},[3278,157495,68274],{},[3233,157497,157498,157501,157505],{},[3278,157499,157500],{},"NoneType",[3278,157502,157503],{},[196,157504,97945],{},[3278,157506,157507],{},"空值",[3233,157509,157510,157512,157517],{},[3278,157511,156329],{},[3278,157513,157514],{},[196,157515,157516],{},"[1, 2, 3]",[3278,157518,157519],{},"列表",[3233,157521,157522,157525,157530],{},[3278,157523,157524],{},"tuple",[3278,157526,157527],{},[196,157528,157529],{},"(1, 2, 3)",[3278,157531,157532],{},"元组",[3233,157534,157535,157537,157542],{},[3278,157536,116805],{},[3278,157538,157539],{},[196,157540,157541],{},"{\"name\": \"张三\"}",[3278,157543,157544],{},"字典",[3233,157546,157547,157550,157555],{},[3278,157548,157549],{},"set",[3278,157551,157552],{},[196,157553,157554],{},"{1, 2, 3}",[3278,157556,157557],{},"集合",[14,157559,157561],{"id":157560},"_23-变量","2.3 变量",[31,157563,157564],{},"变量是保存数据的名字。",[190,157566,157568],{"className":33221,"code":157567,"language":33223,"meta":57,"style":57},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[196,157569,157570,157578,157586,157596],{"__ignoreMap":57},[199,157571,157572,157574,157576],{"class":201,"line":202},[199,157573,148795],{"class":205},[199,157575,895],{"class":1086},[199,157577,151612],{"class":898},[199,157579,157580,157582,157584],{"class":201,"line":36},[199,157581,148805],{"class":205},[199,157583,895],{"class":1086},[199,157585,148810],{"class":1018},[199,157587,157588,157591,157593],{"class":201,"line":73},[199,157589,157590],{"class":205},"height ",[199,157592,895],{"class":1086},[199,157594,157595],{"class":1018}," 1.75\n",[199,157597,157598,157601,157603],{"class":201,"line":333},[199,157599,157600],{"class":205},"is_student ",[199,157602,895],{"class":1086},[199,157604,155858],{"class":1018},[31,157606,157607],{},"Python 的变量不需要提前声明类型：",[190,157609,157611],{"className":33221,"code":157610,"language":33223,"meta":57,"style":57},"score = 100\nscore = \"满分\"\n",[196,157612,157613,157623],{"__ignoreMap":57},[199,157614,157615,157618,157620],{"class":201,"line":202},[199,157616,157617],{"class":205},"score ",[199,157619,895],{"class":1086},[199,157621,157622],{"class":1018}," 100\n",[199,157624,157625,157627,157629],{"class":201,"line":36},[199,157626,157617],{"class":205},[199,157628,895],{"class":1086},[199,157630,157631],{"class":898}," \"满分\"\n",[31,157633,157634],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157636,157638],{"id":157637},"_24-变量命名规则","2.4 变量命名规则",[31,157640,157641],{},"硬性规则：",[24,157643,157644,157647,157650,157653],{},[27,157645,157646],{},"只能由字母、数字、下划线组成。",[27,157648,157649],{},"不能以数字开头。",[27,157651,157652],{},"不能使用 Python 关键字。",[27,157654,157655],{},"区分大小写。",[190,157657,157659],{"className":33221,"code":157658,"language":33223,"meta":57,"style":57},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[196,157660,157661,157670,157679],{"__ignoreMap":57},[199,157662,157663,157666,157668],{"class":201,"line":202},[199,157664,157665],{"class":205},"user_name ",[199,157667,895],{"class":1086},[199,157669,148800],{"class":898},[199,157671,157672,157675,157677],{"class":201,"line":36},[199,157673,157674],{"class":205},"age2 ",[199,157676,895],{"class":1086},[199,157678,148810],{"class":1018},[199,157680,157681,157684,157686],{"class":201,"line":73},[199,157682,157683],{"class":205},"_token ",[199,157685,895],{"class":1086},[199,157687,157688],{"class":898}," \"abc\"\n",[31,157690,157691],{},"错误写法：",[190,157693,157695],{"className":33221,"code":157694,"language":33223,"meta":57,"style":57},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[196,157696,157697,157706,157718],{"__ignoreMap":57},[199,157698,157699,157702,157704],{"class":201,"line":202},[199,157700,157701],{"class":79662},"2age",[199,157703,16425],{"class":1086},[199,157705,148810],{"class":1018},[199,157707,157708,157710,157712,157714,157716],{"class":201,"line":36},[199,157709,133843],{"class":205},[199,157711,1998],{"class":1086},[199,157713,148795],{"class":205},[199,157715,895],{"class":1086},[199,157717,148800],{"class":898},[199,157719,157720,157722,157724],{"class":201,"line":73},[199,157721,17554],{"class":1086},[199,157723,16425],{"class":1086},[199,157725,157726],{"class":898}," \"一班\"\n",[31,157728,157729],{},"查看关键字：",[190,157731,157733],{"className":33221,"code":157732,"language":33223,"meta":57,"style":57},"import keyword\n\nprint(keyword.kwlist)\n",[196,157734,157735,157742,157746],{"__ignoreMap":57},[199,157736,157737,157739],{"class":201,"line":202},[199,157738,33235],{"class":1086},[199,157740,157741],{"class":205}," keyword\n",[199,157743,157744],{"class":201,"line":36},[199,157745,907],{"emptyLinePlaceholder":906},[199,157747,157748,157750],{"class":201,"line":73},[199,157749,33258],{"class":1018},[199,157751,157752],{"class":205},"(keyword.kwlist)\n",[31,157754,157755],{},"推荐命名风格：",[190,157757,157759],{"className":33221,"code":157758,"language":33223,"meta":57,"style":57},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[196,157760,157761,157770,157780],{"__ignoreMap":57},[199,157762,157763,157766,157768],{"class":201,"line":202},[199,157764,157765],{"class":205},"student_name ",[199,157767,895],{"class":1086},[199,157769,151612],{"class":898},[199,157771,157772,157775,157777],{"class":201,"line":36},[199,157773,157774],{"class":205},"total_price ",[199,157776,895],{"class":1086},[199,157778,157779],{"class":1018}," 99.8\n",[199,157781,157782,157785,157787],{"class":201,"line":73},[199,157783,157784],{"class":205},"is_finished ",[199,157786,895],{"class":1086},[199,157788,128066],{"class":1018},[31,157790,157791],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157793,299],{"id":298},[31,157795,106625,157796,157799],{},[196,157797,157798],{},"type()"," 查看数据类型：",[190,157801,157803],{"className":33221,"code":157802,"language":33223,"meta":57,"style":57},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[196,157804,157805,157819,157833,157847,157861],{"__ignoreMap":57},[199,157806,157807,157809,157811,157813,157815,157817],{"class":201,"line":202},[199,157808,33258],{"class":1018},[199,157810,1537],{"class":205},[199,157812,105366],{"class":1018},[199,157814,1537],{"class":205},[199,157816,3396],{"class":1018},[199,157818,1554],{"class":205},[199,157820,157821,157823,157825,157827,157829,157831],{"class":201,"line":36},[199,157822,33258],{"class":1018},[199,157824,1537],{"class":205},[199,157826,105366],{"class":1018},[199,157828,1537],{"class":205},[199,157830,3143],{"class":1018},[199,157832,1554],{"class":205},[199,157834,157835,157837,157839,157841,157843,157845],{"class":201,"line":73},[199,157836,33258],{"class":1018},[199,157838,1537],{"class":205},[199,157840,105366],{"class":1018},[199,157842,1537],{"class":205},[199,157844,8741],{"class":898},[199,157846,1554],{"class":205},[199,157848,157849,157851,157853,157855,157857,157859],{"class":201,"line":333},[199,157850,33258],{"class":1018},[199,157852,1537],{"class":205},[199,157854,105366],{"class":1018},[199,157856,1537],{"class":205},[199,157858,34318],{"class":1018},[199,157860,1554],{"class":205},[199,157862,157863,157865,157867,157869,157871,157873],{"class":201,"line":227},[199,157864,33258],{"class":1018},[199,157866,1537],{"class":205},[199,157868,105366],{"class":1018},[199,157870,1537],{"class":205},[199,157872,97945],{"class":1018},[199,157874,1554],{"class":205},[31,157876,157877],{},"输出类似：",[190,157879,157882],{"className":157880,"code":157881,"language":8084,"meta":57},[8082],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[196,157883,157881],{"__ignoreMap":57},[31,157885,11912,157886,109542,157888,157890,157891,157893,157894,24345,157896,157893,157898,157900],{},[196,157887,4294],{},[196,157889,3100],{}," 的子类，",[196,157892,34318],{}," 可以当作 ",[196,157895,1115],{},[196,157897,36828],{},[196,157899,1025],{},"，但业务代码中不要滥用。",[190,157902,157904],{"className":33221,"code":157903,"language":33223,"meta":57,"style":57},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[196,157905,157906,157924],{"__ignoreMap":57},[199,157907,157908,157910,157912,157914,157916,157918,157921],{"class":201,"line":202},[199,157909,33258],{"class":1018},[199,157911,1537],{"class":205},[199,157913,34318],{"class":1018},[199,157915,1698],{"class":1086},[199,157917,1495],{"class":1018},[199,157919,157920],{"class":205},")   ",[199,157922,157923],{"class":1454},"# 2\n",[199,157925,157926,157928,157930,157932,157934,157936,157938],{"class":201,"line":36},[199,157927,33258],{"class":1018},[199,157929,1537],{"class":205},[199,157931,36828],{"class":1018},[199,157933,1698],{"class":1086},[199,157935,1495],{"class":1018},[199,157937,48648],{"class":205},[199,157939,157940],{"class":1454},"# 1\n",[14,157942,157944],{"id":157943},"_26-类型转换","2.6 类型转换",[31,157946,157947],{},"常用转换函数：",[190,157949,157951],{"className":33221,"code":157950,"language":33223,"meta":57,"style":57},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[196,157952,157953,157963,157974,157984],{"__ignoreMap":57},[199,157954,157955,157957,157959,157961],{"class":201,"line":202},[199,157956,3100],{"class":1018},[199,157958,1537],{"class":205},[199,157960,56575],{"class":898},[199,157962,1594],{"class":205},[199,157964,157965,157967,157969,157972],{"class":201,"line":36},[199,157966,3135],{"class":1018},[199,157968,1537],{"class":205},[199,157970,157971],{"class":898},"\"3.14\"",[199,157973,1594],{"class":205},[199,157975,157976,157978,157980,157982],{"class":201,"line":73},[199,157977,4242],{"class":1018},[199,157979,1537],{"class":205},[199,157981,3396],{"class":1018},[199,157983,1594],{"class":205},[199,157985,157986,157988,157990,157992],{"class":201,"line":333},[199,157987,4294],{"class":1018},[199,157989,1537],{"class":205},[199,157991,1115],{"class":1018},[199,157993,1594],{"class":205},[31,157995,17994],{},[190,157997,157999],{"className":33221,"code":157998,"language":33223,"meta":57,"style":57},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[196,158000,158001,158010,158021],{"__ignoreMap":57},[199,158002,158003,158005,158007],{"class":201,"line":202},[199,158004,148805],{"class":205},[199,158006,895],{"class":1086},[199,158008,158009],{"class":898}," \"18\"\n",[199,158011,158012,158014,158016,158018],{"class":201,"line":36},[199,158013,148805],{"class":205},[199,158015,895],{"class":1086},[199,158017,5296],{"class":1018},[199,158019,158020],{"class":205},"(age)\n",[199,158022,158023,158025,158028,158030,158032],{"class":201,"line":73},[199,158024,33258],{"class":1018},[199,158026,158027],{"class":205},"(age ",[199,158029,2028],{"class":1086},[199,158031,1495],{"class":1018},[199,158033,1594],{"class":205},[31,158035,158036],{},"输入得到的内容永远是字符串：",[190,158038,158040],{"className":33221,"code":158039,"language":33223,"meta":57,"style":57},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[196,158041,158042,158058],{"__ignoreMap":57},[199,158043,158044,158047,158049,158051,158053,158056],{"class":201,"line":202},[199,158045,158046],{"class":205},"num ",[199,158048,895],{"class":1086},[199,158050,62864],{"class":1018},[199,158052,1537],{"class":205},[199,158054,158055],{"class":898},"\"请输入数字:\"",[199,158057,1594],{"class":205},[199,158059,158060,158062,158064,158066,158069],{"class":201,"line":36},[199,158061,33258],{"class":1018},[199,158063,1537],{"class":205},[199,158065,105366],{"class":1018},[199,158067,158068],{"class":205},"(num))  ",[199,158070,158071],{"class":1454},"# str\n",[31,158073,158074],{},"如果要做数学运算，必须转换：",[190,158076,158078],{"className":33221,"code":158077,"language":33223,"meta":57,"style":57},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[196,158079,158080,158098],{"__ignoreMap":57},[199,158081,158082,158084,158086,158088,158090,158092,158094,158096],{"class":201,"line":202},[199,158083,158046],{"class":205},[199,158085,895],{"class":1086},[199,158087,5296],{"class":1018},[199,158089,1537],{"class":205},[199,158091,56080],{"class":1018},[199,158093,1537],{"class":205},[199,158095,158055],{"class":898},[199,158097,1554],{"class":205},[199,158099,158100,158102,158104,158106,158108],{"class":201,"line":36},[199,158101,33258],{"class":1018},[199,158103,48459],{"class":205},[199,158105,2028],{"class":1086},[199,158107,4954],{"class":1018},[199,158109,1594],{"class":205},[31,158111,158112],{},"常见错误：",[190,158114,158116],{"className":33221,"code":158115,"language":33223,"meta":57,"style":57},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[196,158117,158118,158131],{"__ignoreMap":57},[199,158119,158120,158122,158124,158126,158128],{"class":201,"line":202},[199,158121,3100],{"class":1018},[199,158123,1537],{"class":205},[199,158125,157971],{"class":898},[199,158127,157920],{"class":205},[199,158129,158130],{"class":1454},"# 错误\n",[199,158132,158133,158135,158137,158140,158143],{"class":201,"line":36},[199,158134,3100],{"class":1018},[199,158136,1537],{"class":205},[199,158138,158139],{"class":898},"\"abc\"",[199,158141,158142],{"class":205},")    ",[199,158144,158130],{"class":1454},[31,158146,158147],{},"正确写法：",[190,158149,158151],{"className":33221,"code":158150,"language":33223,"meta":57,"style":57},"num = float(\"3.14\")\n",[196,158152,158153],{"__ignoreMap":57},[199,158154,158155,158157,158159,158161,158163,158165],{"class":201,"line":202},[199,158156,158046],{"class":205},[199,158158,895],{"class":1086},[199,158160,112056],{"class":1018},[199,158162,1537],{"class":205},[199,158164,157971],{"class":898},[199,158166,1594],{"class":205},[14,158168,158170],{"id":158169},"_27-运算符","2.7 运算符",[19,158172,158174],{"id":158173},"_271-算术运算符","2.7.1 算术运算符",[3227,158176,158177,158188],{},[3230,158178,158179],{},[3233,158180,158181,158184,158186],{},[3236,158182,158183],{},"运算符",[3236,158185,28712],{},[3236,158187,30335],{},[3273,158189,158190,158204,158218,158232,158246,158260,158274],{},[3233,158191,158192,158196,158199],{},[3278,158193,158194],{},[196,158195,2028],{},[3278,158197,158198],{},"加法",[3278,158200,158201],{},[196,158202,158203],{},"1 + 2",[3233,158205,158206,158210,158213],{},[3278,158207,158208],{},[196,158209,1998],{},[3278,158211,158212],{},"减法",[3278,158214,158215],{},[196,158216,158217],{},"5 - 3",[3233,158219,158220,158224,158227],{},[3278,158221,158222],{},[196,158223,3537],{},[3278,158225,158226],{},"乘法",[3278,158228,158229],{},[196,158230,158231],{},"2 * 3",[3233,158233,158234,158238,158241],{},[3278,158235,158236],{},[196,158237,3664],{},[3278,158239,158240],{},"除法，结果是浮点数",[3278,158242,158243],{},[196,158244,158245],{},"5 \u002F 2",[3233,158247,158248,158252,158255],{},[3278,158249,158250],{},[196,158251,36170],{},[3278,158253,158254],{},"整除",[3278,158256,158257],{},[196,158258,158259],{},"5 \u002F\u002F 2",[3233,158261,158262,158266,158269],{},[3278,158263,158264],{},[196,158265,3412],{},[3278,158267,158268],{},"取余",[3278,158270,158271],{},[196,158272,158273],{},"5 % 2",[3233,158275,158276,158280,158283],{},[3278,158277,158278],{},[196,158279,13524],{},[3278,158281,158282],{},"幂运算",[3278,158284,158285],{},[196,158286,158287],{},"2 ** 3",[31,158289,17994],{},[190,158291,158293],{"className":33221,"code":158292,"language":33223,"meta":57,"style":57},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[196,158294,158295,158313,158330,158347],{"__ignoreMap":57},[199,158296,158297,158299,158301,158303,158306,158308,158310],{"class":201,"line":202},[199,158298,33258],{"class":1018},[199,158300,1537],{"class":205},[199,158302,1909],{"class":1018},[199,158304,158305],{"class":1086}," \u002F",[199,158307,17615],{"class":1018},[199,158309,157920],{"class":205},[199,158311,158312],{"class":1454},"# 2.5\n",[199,158314,158315,158317,158319,158321,158324,158326,158328],{"class":201,"line":36},[199,158316,33258],{"class":1018},[199,158318,1537],{"class":205},[199,158320,1909],{"class":1018},[199,158322,158323],{"class":1086}," \u002F\u002F",[199,158325,17615],{"class":1018},[199,158327,48648],{"class":205},[199,158329,157923],{"class":1454},[199,158331,158332,158334,158336,158338,158341,158343,158345],{"class":201,"line":73},[199,158333,33258],{"class":1018},[199,158335,1537],{"class":205},[199,158337,1909],{"class":1018},[199,158339,158340],{"class":1086}," %",[199,158342,17615],{"class":1018},[199,158344,157920],{"class":205},[199,158346,157940],{"class":1454},[199,158348,158349,158351,158353,158355,158358,158360,158362],{"class":201,"line":333},[199,158350,33258],{"class":1018},[199,158352,1537],{"class":205},[199,158354,1925],{"class":1018},[199,158356,158357],{"class":1086}," **",[199,158359,80329],{"class":1018},[199,158361,48648],{"class":205},[199,158363,158364],{"class":1454},"# 8\n",[19,158366,158368],{"id":158367},"_272-赋值运算符","2.7.2 赋值运算符",[190,158370,158372],{"className":33221,"code":158371,"language":33223,"meta":57,"style":57},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[196,158373,158374,158382,158390,158398,158406],{"__ignoreMap":57},[199,158375,158376,158378,158380],{"class":201,"line":202},[199,158377,158046],{"class":205},[199,158379,895],{"class":1086},[199,158381,60687],{"class":1018},[199,158383,158384,158386,158388],{"class":201,"line":36},[199,158385,158046],{"class":205},[199,158387,12362],{"class":1086},[199,158389,56686],{"class":1018},[199,158391,158392,158394,158396],{"class":201,"line":73},[199,158393,158046],{"class":205},[199,158395,152511],{"class":1086},[199,158397,50563],{"class":1018},[199,158399,158400,158402,158404],{"class":201,"line":333},[199,158401,158046],{"class":205},[199,158403,139407],{"class":1086},[199,158405,122295],{"class":1018},[199,158407,158408,158410,158413],{"class":201,"line":227},[199,158409,158046],{"class":205},[199,158411,158412],{"class":1086},"\u002F=",[199,158414,50563],{"class":1018},[31,158416,158417],{},"等价关系：",[190,158419,158421],{"className":33221,"code":158420,"language":33223,"meta":57,"style":57},"num += 1\nnum = num + 1\n",[196,158422,158423,158431],{"__ignoreMap":57},[199,158424,158425,158427,158429],{"class":201,"line":202},[199,158426,158046],{"class":205},[199,158428,12362],{"class":1086},[199,158430,57958],{"class":1018},[199,158432,158433,158435,158437,158440,158442],{"class":201,"line":36},[199,158434,158046],{"class":205},[199,158436,895],{"class":1086},[199,158438,158439],{"class":205}," num ",[199,158441,2028],{"class":1086},[199,158443,57958],{"class":1018},[31,158445,158446,158447,103277,158450,31228],{},"Python 没有 ",[196,158448,158449],{},"num++",[196,158451,158452],{},"num--",[19,158454,158456],{"id":158455},"_273-比较运算符","2.7.3 比较运算符",[31,158458,158459],{},"比较运算结果是布尔值。",[190,158461,158463],{"className":33221,"code":158462,"language":33223,"meta":57,"style":57},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[196,158464,158465,158479,158494,158508],{"__ignoreMap":57},[199,158466,158467,158469,158471,158473,158475,158477],{"class":201,"line":202},[199,158468,33258],{"class":1018},[199,158470,1537],{"class":205},[199,158472,3528],{"class":1018},[199,158474,29065],{"class":1086},[199,158476,5064],{"class":1018},[199,158478,1594],{"class":205},[199,158480,158481,158483,158485,158487,158490,158492],{"class":201,"line":36},[199,158482,33258],{"class":1018},[199,158484,1537],{"class":205},[199,158486,3528],{"class":1018},[199,158488,158489],{"class":1086}," >=",[199,158491,4954],{"class":1018},[199,158493,1594],{"class":205},[199,158495,158496,158498,158500,158502,158504,158506],{"class":201,"line":73},[199,158497,33258],{"class":1018},[199,158499,1537],{"class":205},[199,158501,3528],{"class":1018},[199,158503,103818],{"class":1086},[199,158505,4999],{"class":1018},[199,158507,1594],{"class":205},[199,158509,158510,158512,158514,158516,158519,158521],{"class":201,"line":333},[199,158511,33258],{"class":1018},[199,158513,1537],{"class":205},[199,158515,3528],{"class":1018},[199,158517,158518],{"class":1086}," !=",[199,158520,4999],{"class":1018},[199,158522,1594],{"class":205},[31,158524,158525,158526,158528,158529,31228],{},"注意：判断相等用 ",[196,158527,5853],{},"，赋值用 ",[196,158530,895],{},[190,158532,158534],{"className":33221,"code":158533,"language":33223,"meta":57,"style":57},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[196,158535,158536,158548],{"__ignoreMap":57},[199,158537,158538,158540,158542,158545],{"class":201,"line":202},[199,158539,148805],{"class":205},[199,158541,895],{"class":1086},[199,158543,158544],{"class":1018}," 18",[199,158546,158547],{"class":1454},"       # 赋值\n",[199,158549,158550,158552,158554,158556],{"class":201,"line":36},[199,158551,148805],{"class":205},[199,158553,5853],{"class":1086},[199,158555,158544],{"class":1018},[199,158557,158558],{"class":1454},"      # 判断是否相等\n",[19,158560,158562],{"id":158561},"_274-逻辑运算符","2.7.4 逻辑运算符",[3227,158564,158565,158573],{},[3230,158566,158567],{},[3233,158568,158569,158571],{},[3236,158570,158183],{},[3236,158572,28712],{},[3273,158574,158575,158584,158593],{},[3233,158576,158577,158581],{},[3278,158578,158579],{},[196,158580,33305],{},[3278,158582,158583],{},"并且",[3233,158585,158586,158590],{},[3278,158587,158588],{},[196,158589,117349],{},[3278,158591,158592],{},"或者",[3233,158594,158595,158600],{},[3278,158596,158597],{},[196,158598,158599],{},"not",[3278,158601,158602],{},"取反",[190,158604,158606],{"className":33221,"code":158605,"language":33223,"meta":57,"style":57},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[196,158607,158608,158616,158625,158629,158644,158658],{"__ignoreMap":57},[199,158609,158610,158612,158614],{"class":201,"line":202},[199,158611,148805],{"class":205},[199,158613,895],{"class":1086},[199,158615,90324],{"class":1018},[199,158617,158618,158621,158623],{"class":201,"line":36},[199,158619,158620],{"class":205},"has_ticket ",[199,158622,895],{"class":1086},[199,158624,155858],{"class":1018},[199,158626,158627],{"class":201,"line":73},[199,158628,907],{"emptyLinePlaceholder":906},[199,158630,158631,158633,158635,158637,158639,158641],{"class":201,"line":333},[199,158632,33258],{"class":1018},[199,158634,158027],{"class":205},[199,158636,4635],{"class":1086},[199,158638,158544],{"class":1018},[199,158640,122688],{"class":1086},[199,158642,158643],{"class":205}," has_ticket)\n",[199,158645,158646,158648,158650,158652,158654,158656],{"class":201,"line":227},[199,158647,33258],{"class":1018},[199,158649,158027],{"class":205},[199,158651,887],{"class":1086},[199,158653,158544],{"class":1018},[199,158655,116460],{"class":1086},[199,158657,158643],{"class":205},[199,158659,158660,158662,158664,158666],{"class":201,"line":238},[199,158661,33258],{"class":1018},[199,158663,1537],{"class":205},[199,158665,158599],{"class":1086},[199,158667,158643],{"class":205},[14,158669,158671],{"id":158670},"_28-字符串定义","2.8 字符串定义",[31,158673,158674],{},"三种常见写法：",[190,158676,158678],{"className":33221,"code":158677,"language":33223,"meta":57,"style":57},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[196,158679,158680,158690,158699,158709],{"__ignoreMap":57},[199,158681,158682,158685,158687],{"class":201,"line":202},[199,158683,158684],{"class":205},"name1 ",[199,158686,895],{"class":1086},[199,158688,158689],{"class":898}," '小明'\n",[199,158691,158692,158695,158697],{"class":201,"line":36},[199,158693,158694],{"class":205},"name2 ",[199,158696,895],{"class":1086},[199,158698,151612],{"class":898},[199,158700,158701,158704,158706],{"class":201,"line":73},[199,158702,158703],{"class":205},"text ",[199,158705,895],{"class":1086},[199,158707,158708],{"class":898}," \"\"\"这是多行字符串\n",[199,158710,158711],{"class":201,"line":333},[199,158712,158713],{"class":898},"可以换行\"\"\"\n",[31,158715,158716],{},"字符串中包含引号：",[190,158718,158720],{"className":33221,"code":158719,"language":33223,"meta":57,"style":57},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[196,158721,158722,158732,158742],{"__ignoreMap":57},[199,158723,158724,158727,158729],{"class":201,"line":202},[199,158725,158726],{"class":205},"msg ",[199,158728,895],{"class":1086},[199,158730,158731],{"class":898}," \"他说:'你好'\"\n",[199,158733,158734,158737,158739],{"class":201,"line":36},[199,158735,158736],{"class":205},"msg2 ",[199,158738,895],{"class":1086},[199,158740,158741],{"class":898}," '他说:\"你好\"'\n",[199,158743,158744,158747,158749,158752,158755,158758,158760],{"class":201,"line":73},[199,158745,158746],{"class":205},"msg3 ",[199,158748,895],{"class":1086},[199,158750,158751],{"class":898}," \"他说:",[199,158753,158754],{"class":1018},"\\\"",[199,158756,158757],{"class":898},"你好",[199,158759,158754],{"class":1018},[199,158761,27976],{"class":898},[31,158763,158764],{},"常见转义字符：",[3227,158766,158767,158776],{},[3230,158768,158769],{},[3233,158770,158771,158774],{},[3236,158772,158773],{},"写法",[3236,158775,102959],{},[3273,158777,158778,158788,158797,158807,158816],{},[3233,158779,158780,158785],{},[3278,158781,158782],{},[196,158783,158784],{},"\\n",[3278,158786,158787],{},"换行",[3233,158789,158790,158794],{},[3278,158791,158792],{},[196,158793,4174],{},[3278,158795,158796],{},"制表符",[3233,158798,158799,158804],{},[3278,158800,158801],{},[196,158802,158803],{},"\\\\",[3278,158805,158806],{},"反斜杠",[3233,158808,158809,158813],{},[3278,158810,158811],{},[196,158812,158754],{},[3278,158814,158815],{},"双引号",[3233,158817,158818,158823],{},[3278,158819,158820],{},[196,158821,158822],{},"\\'",[3278,158824,158825],{},"单引号",[14,158827,158829],{"id":158828},"_29-字符串拼接","2.9 字符串拼接",[190,158831,158833],{"className":33221,"code":158832,"language":33223,"meta":57,"style":57},"name = \"小明\"\nprint(\"你好，\" + name)\n",[196,158834,158835,158843],{"__ignoreMap":57},[199,158836,158837,158839,158841],{"class":201,"line":202},[199,158838,148795],{"class":205},[199,158840,895],{"class":1086},[199,158842,151612],{"class":898},[199,158844,158845,158847,158849,158852,158854],{"class":201,"line":36},[199,158846,33258],{"class":1018},[199,158848,1537],{"class":205},[199,158850,158851],{"class":898},"\"你好，\"",[199,158853,1698],{"class":1086},[199,158855,158856],{"class":205}," name)\n",[31,158858,158859],{},"字符串只能和字符串拼接：",[190,158861,158863],{"className":33221,"code":158862,"language":33223,"meta":57,"style":57},"age = 18\nprint(\"年龄:\" + str(age))\n",[196,158864,158865,158873],{"__ignoreMap":57},[199,158866,158867,158869,158871],{"class":201,"line":202},[199,158868,148805],{"class":205},[199,158870,895],{"class":1086},[199,158872,148810],{"class":1018},[199,158874,158875,158877,158879,158881,158883,158885],{"class":201,"line":36},[199,158876,33258],{"class":1018},[199,158878,1537],{"class":205},[199,158880,148776],{"class":898},[199,158882,1698],{"class":1086},[199,158884,76178],{"class":1018},[199,158886,158887],{"class":205},"(age))\n",[31,158889,158890],{},"更推荐使用格式化字符串。",[14,158892,158894],{"id":158893},"_210-字符串格式化","2.10 字符串格式化",[19,158896,158898],{"id":158897},"_2101-百分号格式化","2.10.1 百分号格式化",[190,158900,158902],{"className":33221,"code":158901,"language":33223,"meta":57,"style":57},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[196,158903,158904,158912,158920,158929,158933],{"__ignoreMap":57},[199,158905,158906,158908,158910],{"class":201,"line":202},[199,158907,148795],{"class":205},[199,158909,895],{"class":1086},[199,158911,151612],{"class":898},[199,158913,158914,158916,158918],{"class":201,"line":36},[199,158915,148805],{"class":205},[199,158917,895],{"class":1086},[199,158919,148810],{"class":1018},[199,158921,158922,158924,158926],{"class":201,"line":73},[199,158923,157617],{"class":205},[199,158925,895],{"class":1086},[199,158927,158928],{"class":1018}," 95.5\n",[199,158930,158931],{"class":201,"line":333},[199,158932,907],{"emptyLinePlaceholder":906},[199,158934,158935,158937,158939,158942,158945,158948,158951,158954,158957,158959,158961],{"class":201,"line":227},[199,158936,33258],{"class":1018},[199,158938,1537],{"class":205},[199,158940,158941],{"class":898},"\"姓名:",[199,158943,158944],{"class":1018},"%s",[199,158946,158947],{"class":898}," 年龄:",[199,158949,158950],{"class":1018},"%d",[199,158952,158953],{"class":898}," 分数:",[199,158955,158956],{"class":1018},"%.1f",[199,158958,3337],{"class":898},[199,158960,158340],{"class":1086},[199,158962,158963],{"class":205}," (name, age, score))\n",[31,158965,158966],{},"常用占位符：",[3227,158968,158969,158978],{},[3230,158970,158971],{},[3233,158972,158973,158976],{},[3236,158974,158975],{},"占位符",[3236,158977,28712],{},[3273,158979,158980,158988,158996],{},[3233,158981,158982,158986],{},[3278,158983,158984],{},[196,158985,158944],{},[3278,158987,157483],{},[3233,158989,158990,158994],{},[3278,158991,158992],{},[196,158993,158950],{},[3278,158995,157461],{},[3233,158997,158998,159003],{},[3278,158999,159000],{},[196,159001,159002],{},"%f",[3278,159004,157472],{},[31,159006,159007],{},"精度控制：",[190,159009,159011],{"className":33221,"code":159010,"language":33223,"meta":57,"style":57},"price = 12.3456\nprint(\"%.2f\" % price)\n",[196,159012,159013,159022],{"__ignoreMap":57},[199,159014,159015,159017,159019],{"class":201,"line":202},[199,159016,148940],{"class":205},[199,159018,895],{"class":1086},[199,159020,159021],{"class":1018}," 12.3456\n",[199,159023,159024,159026,159028,159030,159033,159035,159037],{"class":201,"line":36},[199,159025,33258],{"class":1018},[199,159027,1537],{"class":205},[199,159029,3337],{"class":898},[199,159031,159032],{"class":1018},"%.2f",[199,159034,3337],{"class":898},[199,159036,158340],{"class":1086},[199,159038,159039],{"class":205}," price)\n",[19,159041,159043],{"id":159042},"_2102-format方法","2.10.2 format方法",[190,159045,159047],{"className":33221,"code":159046,"language":33223,"meta":57,"style":57},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[196,159048,159049,159057,159065,159069,159088,159108],{"__ignoreMap":57},[199,159050,159051,159053,159055],{"class":201,"line":202},[199,159052,148795],{"class":205},[199,159054,895],{"class":1086},[199,159056,151612],{"class":898},[199,159058,159059,159061,159063],{"class":201,"line":36},[199,159060,148805],{"class":205},[199,159062,895],{"class":1086},[199,159064,148810],{"class":1018},[199,159066,159067],{"class":201,"line":73},[199,159068,907],{"emptyLinePlaceholder":906},[199,159070,159071,159073,159075,159077,159079,159081,159083,159085],{"class":201,"line":333},[199,159072,33258],{"class":1018},[199,159074,1537],{"class":205},[199,159076,158941],{"class":898},[199,159078,35301],{"class":1018},[199,159080,158947],{"class":898},[199,159082,35301],{"class":1018},[199,159084,3337],{"class":898},[199,159086,159087],{"class":205},".format(name, age))\n",[199,159089,159090,159092,159094,159096,159099,159101,159104,159106],{"class":201,"line":227},[199,159091,33258],{"class":1018},[199,159093,1537],{"class":205},[199,159095,158941],{"class":898},[199,159097,159098],{"class":1018},"{0}",[199,159100,158947],{"class":898},[199,159102,159103],{"class":1018},"{1}",[199,159105,3337],{"class":898},[199,159107,159087],{"class":205},[199,159109,159110,159112,159114,159116,159119,159121,159124,159126,159129,159131,159133,159136,159138,159140],{"class":201,"line":238},[199,159111,33258],{"class":1018},[199,159113,1537],{"class":205},[199,159115,158941],{"class":898},[199,159117,159118],{"class":1018},"{name}",[199,159120,158947],{"class":898},[199,159122,159123],{"class":1018},"{age}",[199,159125,3337],{"class":898},[199,159127,159128],{"class":205},".format(",[199,159130,82069],{"class":8113},[199,159132,895],{"class":1086},[199,159134,159135],{"class":205},"name, ",[199,159137,72480],{"class":8113},[199,159139,895],{"class":1086},[199,159141,159142],{"class":205},"age))\n",[19,159144,159146],{"id":159145},"_2103-f-string","2.10.3 f-string",[31,159148,159149],{},"推荐写法：",[190,159151,159153],{"className":33221,"code":159152,"language":33223,"meta":57,"style":57},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[196,159154,159155,159163,159171,159179,159183],{"__ignoreMap":57},[199,159156,159157,159159,159161],{"class":201,"line":202},[199,159158,148795],{"class":205},[199,159160,895],{"class":1086},[199,159162,151612],{"class":898},[199,159164,159165,159167,159169],{"class":201,"line":36},[199,159166,148805],{"class":205},[199,159168,895],{"class":1086},[199,159170,148810],{"class":1018},[199,159172,159173,159175,159177],{"class":201,"line":73},[199,159174,157617],{"class":205},[199,159176,895],{"class":1086},[199,159178,158928],{"class":1018},[199,159180,159181],{"class":201,"line":333},[199,159182,907],{"emptyLinePlaceholder":906},[199,159184,159185,159187,159189,159191,159193,159195,159197,159199,159201,159203,159205,159207,159209,159211,159214,159217,159219,159221],{"class":201,"line":227},[199,159186,33258],{"class":1018},[199,159188,1537],{"class":205},[199,159190,3146],{"class":1086},[199,159192,158941],{"class":898},[199,159194,3974],{"class":1018},[199,159196,82069],{"class":205},[199,159198,759],{"class":1018},[199,159200,158947],{"class":898},[199,159202,3974],{"class":1018},[199,159204,72480],{"class":205},[199,159206,759],{"class":1018},[199,159208,158953],{"class":898},[199,159210,3974],{"class":1018},[199,159212,159213],{"class":205},"score",[199,159215,159216],{"class":1086},":.1f",[199,159218,759],{"class":1018},[199,159220,3337],{"class":898},[199,159222,1594],{"class":205},[31,159224,159225],{},"表达式也可以放进去：",[190,159227,159229],{"className":33221,"code":159228,"language":33223,"meta":57,"style":57},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[196,159230,159231,159239,159247],{"__ignoreMap":57},[199,159232,159233,159235,159237],{"class":201,"line":202},[199,159234,148940],{"class":205},[199,159236,895],{"class":1086},[199,159238,148945],{"class":1018},[199,159240,159241,159243,159245],{"class":201,"line":36},[199,159242,148950],{"class":205},[199,159244,895],{"class":1086},[199,159246,56686],{"class":1018},[199,159248,159249,159251,159253,159255,159258,159260,159262,159264,159267,159269,159272],{"class":201,"line":73},[199,159250,33258],{"class":1018},[199,159252,1537],{"class":205},[199,159254,3146],{"class":1086},[199,159256,159257],{"class":898},"\"总价:",[199,159259,3974],{"class":1018},[199,159261,148940],{"class":205},[199,159263,3537],{"class":1086},[199,159265,159266],{"class":205}," count",[199,159268,759],{"class":1018},[199,159270,159271],{"class":898},"元\"",[199,159273,1594],{"class":205},[14,159275,159277],{"id":159276},"_211-input输入","2.11 input输入",[31,159279,159280,159283],{},[196,159281,159282],{},"input()"," 会暂停程序，等待用户输入。",[190,159285,159287],{"className":33221,"code":159286,"language":33223,"meta":57,"style":57},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[196,159288,159289,159303],{"__ignoreMap":57},[199,159290,159291,159293,159295,159297,159299,159301],{"class":201,"line":202},[199,159292,148795],{"class":205},[199,159294,895],{"class":1086},[199,159296,62864],{"class":1018},[199,159298,1537],{"class":205},[199,159300,154638],{"class":898},[199,159302,1594],{"class":205},[199,159304,159305,159307,159309,159311,159314,159316,159318,159320,159322],{"class":201,"line":36},[199,159306,33258],{"class":1018},[199,159308,1537],{"class":205},[199,159310,3146],{"class":1086},[199,159312,159313],{"class":898},"\"你好，",[199,159315,3974],{"class":1018},[199,159317,82069],{"class":205},[199,159319,759],{"class":1018},[199,159321,3337],{"class":898},[199,159323,1594],{"class":205},[31,159325,159326],{},"输入整数：",[190,159328,159330],{"className":33221,"code":159329,"language":33223,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[196,159331,159332,159350],{"__ignoreMap":57},[199,159333,159334,159336,159338,159340,159342,159344,159346,159348],{"class":201,"line":202},[199,159335,148805],{"class":205},[199,159337,895],{"class":1086},[199,159339,5296],{"class":1018},[199,159341,1537],{"class":205},[199,159343,56080],{"class":1018},[199,159345,1537],{"class":205},[199,159347,154653],{"class":898},[199,159349,1554],{"class":205},[199,159351,159352,159354,159356,159358,159361,159363,159365,159367,159370,159372],{"class":201,"line":36},[199,159353,33258],{"class":1018},[199,159355,1537],{"class":205},[199,159357,3146],{"class":1086},[199,159359,159360],{"class":898},"\"明年你",[199,159362,3974],{"class":1018},[199,159364,148805],{"class":205},[199,159366,2028],{"class":1086},[199,159368,159369],{"class":1018}," 1}",[199,159371,151663],{"class":898},[199,159373,1594],{"class":205},[31,159375,159376],{},"输入小数：",[190,159378,159380],{"className":33221,"code":159379,"language":33223,"meta":57,"style":57},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[196,159381,159382,159401],{"__ignoreMap":57},[199,159383,159384,159386,159388,159390,159392,159394,159396,159399],{"class":201,"line":202},[199,159385,157590],{"class":205},[199,159387,895],{"class":1086},[199,159389,112056],{"class":1018},[199,159391,1537],{"class":205},[199,159393,56080],{"class":1018},[199,159395,1537],{"class":205},[199,159397,159398],{"class":898},"\"请输入身高:\"",[199,159400,1554],{"class":205},[199,159402,159403,159405,159407,159409,159412,159414,159416,159419,159421,159424],{"class":201,"line":36},[199,159404,33258],{"class":1018},[199,159406,1537],{"class":205},[199,159408,3146],{"class":1086},[199,159410,159411],{"class":898},"\"身高:",[199,159413,3974],{"class":1018},[199,159415,27825],{"class":205},[199,159417,159418],{"class":1086},":.2f",[199,159420,759],{"class":1018},[199,159422,159423],{"class":898},"米\"",[199,159425,1594],{"class":205},[14,159427,159429],{"id":159428},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[31,159431,125551],{},[24,159433,159434,159437,159440,159443],{},[27,159435,159436],{},"输入商品单价。",[27,159438,159439],{},"输入购买数量。",[27,159441,159442],{},"输入折扣，例如 0.8 表示八折。",[27,159444,159445],{},"输出最终金额，保留两位小数。",[31,159447,12898],{},[190,159449,159451],{"className":33221,"code":159450,"language":33223,"meta":57,"style":57},"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",[196,159452,159453,159472,159491,159511,159515,159535,159539,159562,159583,159605],{"__ignoreMap":57},[199,159454,159455,159457,159459,159461,159463,159465,159467,159470],{"class":201,"line":202},[199,159456,148940],{"class":205},[199,159458,895],{"class":1086},[199,159460,112056],{"class":1018},[199,159462,1537],{"class":205},[199,159464,56080],{"class":1018},[199,159466,1537],{"class":205},[199,159468,159469],{"class":898},"\"请输入商品单价:\"",[199,159471,1554],{"class":205},[199,159473,159474,159476,159478,159480,159482,159484,159486,159489],{"class":201,"line":36},[199,159475,148950],{"class":205},[199,159477,895],{"class":1086},[199,159479,5296],{"class":1018},[199,159481,1537],{"class":205},[199,159483,56080],{"class":1018},[199,159485,1537],{"class":205},[199,159487,159488],{"class":898},"\"请输入购买数量:\"",[199,159490,1554],{"class":205},[199,159492,159493,159496,159498,159500,159502,159504,159506,159509],{"class":201,"line":73},[199,159494,159495],{"class":205},"discount ",[199,159497,895],{"class":1086},[199,159499,112056],{"class":1018},[199,159501,1537],{"class":205},[199,159503,56080],{"class":1018},[199,159505,1537],{"class":205},[199,159507,159508],{"class":898},"\"请输入折扣:\"",[199,159510,1554],{"class":205},[199,159512,159513],{"class":201,"line":333},[199,159514,907],{"emptyLinePlaceholder":906},[199,159516,159517,159520,159522,159525,159527,159530,159532],{"class":201,"line":227},[199,159518,159519],{"class":205},"total ",[199,159521,895],{"class":1086},[199,159523,159524],{"class":205}," price ",[199,159526,3537],{"class":1086},[199,159528,159529],{"class":205}," count ",[199,159531,3537],{"class":1086},[199,159533,159534],{"class":205}," discount\n",[199,159536,159537],{"class":201,"line":238},[199,159538,907],{"emptyLinePlaceholder":906},[199,159540,159541,159543,159545,159547,159550,159552,159554,159556,159558,159560],{"class":201,"line":252},[199,159542,33258],{"class":1018},[199,159544,1537],{"class":205},[199,159546,3146],{"class":1086},[199,159548,159549],{"class":898},"\"商品单价:",[199,159551,3974],{"class":1018},[199,159553,82074],{"class":205},[199,159555,159418],{"class":1086},[199,159557,759],{"class":1018},[199,159559,3337],{"class":898},[199,159561,1594],{"class":205},[199,159563,159564,159566,159568,159570,159573,159575,159577,159579,159581],{"class":201,"line":388},[199,159565,33258],{"class":1018},[199,159567,1537],{"class":205},[199,159569,3146],{"class":1086},[199,159571,159572],{"class":898},"\"购买数量:",[199,159574,3974],{"class":1018},[199,159576,86693],{"class":205},[199,159578,759],{"class":1018},[199,159580,3337],{"class":898},[199,159582,1594],{"class":205},[199,159584,159585,159587,159589,159591,159594,159596,159599,159601,159603],{"class":201,"line":415},[199,159586,33258],{"class":1018},[199,159588,1537],{"class":205},[199,159590,3146],{"class":1086},[199,159592,159593],{"class":898},"\"折扣:",[199,159595,3974],{"class":1018},[199,159597,159598],{"class":205},"discount",[199,159600,759],{"class":1018},[199,159602,3337],{"class":898},[199,159604,1594],{"class":205},[199,159606,159607,159609,159611,159613,159616,159618,159621,159623,159625,159627],{"class":201,"line":426},[199,159608,33258],{"class":1018},[199,159610,1537],{"class":205},[199,159612,3146],{"class":1086},[199,159614,159615],{"class":898},"\"应付金额:",[199,159617,3974],{"class":1018},[199,159619,159620],{"class":205},"total",[199,159622,159418],{"class":1086},[199,159624,759],{"class":1018},[199,159626,159271],{"class":898},[199,159628,1594],{"class":205},[14,159630,159632],{"id":159631},"_213-易错点","2.13 易错点",[24,159634,159635,159640,159646,159654,159657],{},[27,159636,159637,159639],{},[196,159638,159282],{}," 的结果是字符串，做运算前要转换。",[27,159641,159642,159643,31228],{},"字符串拼接时，数字要先 ",[196,159644,159645],{},"str()",[27,159647,159648,159650,159651,159653],{},[196,159649,895],{}," 是赋值，",[196,159652,5853],{}," 是比较。",[27,159655,159656],{},"Python 没有自增自减运算符。",[27,159658,159659],{},"浮点数计算可能有精度误差：",[190,159661,159663],{"className":33221,"code":159662,"language":33223,"meta":57,"style":57},"print(0.1 + 0.2)\n",[196,159664,159665],{"__ignoreMap":57},[199,159666,159667,159669,159671,159673,159675,159678],{"class":201,"line":202},[199,159668,33258],{"class":1018},[199,159670,1537],{"class":205},[199,159672,88469],{"class":1018},[199,159674,1698],{"class":1086},[199,159676,159677],{"class":1018}," 0.2",[199,159679,1594],{"class":205},[31,159681,159682,159683,159686],{},"金额计算如果要求严格，可以后续学习 ",[196,159684,159685],{},"decimal"," 模块。",[14,159688,159690],{"id":159689},"_214-本章练习","2.14 本章练习",[24,159692,159693,159696,159699,159702,159705],{},[27,159694,159695],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[27,159697,159698],{},"输入圆的半径，计算面积，保留两位小数。",[27,159700,159701],{},"输入工资和奖金，计算总收入。",[27,159703,159704],{},"输入摄氏温度，转换为华氏温度。",[27,159706,159707],{},"写一个 BMI 计算程序：",[190,159709,159712],{"className":159710,"code":159711,"language":8084,"meta":57},[8082],"BMI = 体重kg \u002F 身高m ** 2\n",[196,159713,159711],{"__ignoreMap":57},[1002,159715,159716],{},"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":57,"searchDepth":36,"depth":36,"links":159718},[159719,159720,159721,159722,159723,159724,159725,159731,159732,159733,159738,159739,159740,159741],{"id":157280,"depth":36,"text":157281},{"id":157389,"depth":36,"text":157390},{"id":157560,"depth":36,"text":157561},{"id":157637,"depth":36,"text":157638},{"id":298,"depth":36,"text":299},{"id":157943,"depth":36,"text":157944},{"id":158169,"depth":36,"text":158170,"children":159726},[159727,159728,159729,159730],{"id":158173,"depth":73,"text":158174},{"id":158367,"depth":73,"text":158368},{"id":158455,"depth":73,"text":158456},{"id":158561,"depth":73,"text":158562},{"id":158670,"depth":36,"text":158671},{"id":158828,"depth":36,"text":158829},{"id":158893,"depth":36,"text":158894,"children":159734},[159735,159736,159737],{"id":158897,"depth":73,"text":158898},{"id":159042,"depth":73,"text":159043},{"id":159145,"depth":73,"text":159146},{"id":159276,"depth":36,"text":159277},{"id":159428,"depth":36,"text":159429},{"id":159631,"depth":36,"text":159632},{"id":159689,"depth":36,"text":159690},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157272,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159748,"title":159749,"body":159750,"description":3023,"extension":3024,"meta":161386,"navigation":906,"path":161387,"seo":161388,"stem":161389,"__hash__":161390},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159751,"toc":161367},[159752,159755,159759,159762,159777,159780,159808,159812,159862,159864,159880,159883,159909,159912,159916,159983,159986,160002,160006,160009,160127,160130,160137,160186,160192,160196,160199,160312,160315,160319,160323,160326,160376,160380,160383,160433,160437,160440,160478,160482,160485,160531,160534,160569,160573,160578,160581,160627,160629,160696,160700,160706,160817,160826,160830,160832,160843,160845,161011,161015,161017,161031,161033,161247,161251,161270,161287,161290,161336,161340,161364],[10,159753,159749],{"id":159754},"_3-判断语句",[14,159756,159758],{"id":159757},"_31-布尔值","3.1 布尔值",[31,159760,159761],{},"判断语句依赖布尔值：",[190,159763,159765],{"className":33221,"code":159764,"language":33223,"meta":57,"style":57},"True\nFalse\n",[196,159766,159767,159772],{"__ignoreMap":57},[199,159768,159769],{"class":201,"line":202},[199,159770,159771],{"class":1018},"True\n",[199,159773,159774],{"class":201,"line":36},[199,159775,159776],{"class":1018},"False\n",[31,159778,159779],{},"比较表达式会产生布尔值：",[190,159781,159783],{"className":33221,"code":159782,"language":33223,"meta":57,"style":57},"age = 18\nprint(age >= 18)  # True\n",[196,159784,159785,159793],{"__ignoreMap":57},[199,159786,159787,159789,159791],{"class":201,"line":202},[199,159788,148805],{"class":205},[199,159790,895],{"class":1086},[199,159792,148810],{"class":1018},[199,159794,159795,159797,159799,159801,159803,159805],{"class":201,"line":36},[199,159796,33258],{"class":1018},[199,159798,158027],{"class":205},[199,159800,4635],{"class":1086},[199,159802,158544],{"class":1018},[199,159804,48648],{"class":205},[199,159806,159807],{"class":1454},"# True\n",[14,159809,159811],{"id":159810},"_32-if基础语法","3.2 if基础语法",[190,159813,159815],{"className":33221,"code":159814,"language":33223,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[196,159816,159817,159835,159839,159851],{"__ignoreMap":57},[199,159818,159819,159821,159823,159825,159827,159829,159831,159833],{"class":201,"line":202},[199,159820,148805],{"class":205},[199,159822,895],{"class":1086},[199,159824,5296],{"class":1018},[199,159826,1537],{"class":205},[199,159828,56080],{"class":1018},[199,159830,1537],{"class":205},[199,159832,154653],{"class":898},[199,159834,1554],{"class":205},[199,159836,159837],{"class":201,"line":36},[199,159838,907],{"emptyLinePlaceholder":906},[199,159840,159841,159843,159845,159847,159849],{"class":201,"line":73},[199,159842,4470],{"class":1086},[199,159844,18565],{"class":205},[199,159846,4635],{"class":1086},[199,159848,158544],{"class":1018},[199,159850,6640],{"class":205},[199,159852,159853,159855,159857,159860],{"class":201,"line":333},[199,159854,34141],{"class":1018},[199,159856,1537],{"class":205},[199,159858,159859],{"class":898},"\"可以进入网吧\"",[199,159861,1594],{"class":205},[31,159863,11912],{},[24,159865,159866,159871,159874,159877],{},[27,159867,159868,159870],{},[196,159869,4470],{}," 后面是条件表达式。",[27,159872,159873],{},"条件后面必须写冒号。",[27,159875,159876],{},"条件成立时执行缩进代码块。",[27,159878,159879],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[31,159881,159882],{},"错误示例：",[190,159884,159886],{"className":33221,"code":159885,"language":33223,"meta":57,"style":57},"if age >= 18\n    print(\"可以进入\")\n",[196,159887,159888,159898],{"__ignoreMap":57},[199,159889,159890,159892,159894,159896],{"class":201,"line":202},[199,159891,4470],{"class":1086},[199,159893,18565],{"class":205},[199,159895,4635],{"class":1086},[199,159897,148810],{"class":1018},[199,159899,159900,159902,159904,159907],{"class":201,"line":36},[199,159901,34141],{"class":1018},[199,159903,1537],{"class":205},[199,159905,159906],{"class":898},"\"可以进入\"",[199,159908,1594],{"class":205},[31,159910,159911],{},"缺少冒号。",[14,159913,159915],{"id":159914},"_33-if-else","3.3 if else",[190,159917,159919],{"className":33221,"code":159918,"language":33223,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[196,159920,159921,159939,159943,159955,159966,159972],{"__ignoreMap":57},[199,159922,159923,159925,159927,159929,159931,159933,159935,159937],{"class":201,"line":202},[199,159924,148805],{"class":205},[199,159926,895],{"class":1086},[199,159928,5296],{"class":1018},[199,159930,1537],{"class":205},[199,159932,56080],{"class":1018},[199,159934,1537],{"class":205},[199,159936,154653],{"class":898},[199,159938,1554],{"class":205},[199,159940,159941],{"class":201,"line":36},[199,159942,907],{"emptyLinePlaceholder":906},[199,159944,159945,159947,159949,159951,159953],{"class":201,"line":73},[199,159946,4470],{"class":1086},[199,159948,18565],{"class":205},[199,159950,4635],{"class":1086},[199,159952,158544],{"class":1018},[199,159954,6640],{"class":205},[199,159956,159957,159959,159961,159964],{"class":201,"line":333},[199,159958,34141],{"class":1018},[199,159960,1537],{"class":205},[199,159962,159963],{"class":898},"\"成年人\"",[199,159965,1594],{"class":205},[199,159967,159968,159970],{"class":201,"line":227},[199,159969,4626],{"class":1086},[199,159971,6640],{"class":205},[199,159973,159974,159976,159978,159981],{"class":201,"line":238},[199,159975,34141],{"class":1018},[199,159977,1537],{"class":205},[199,159979,159980],{"class":898},"\"未成年人\"",[199,159982,1594],{"class":205},[31,159984,159985],{},"执行逻辑：",[24,159987,159988,159994,159999],{},[27,159989,159990,159991,159993],{},"条件成立，执行 ",[196,159992,4470],{}," 代码块。",[27,159995,159996,159997,159993],{},"条件不成立，执行 ",[196,159998,4626],{},[27,160000,160001],{},"两个代码块只会执行其中一个。",[14,160003,160005],{"id":160004},"_34-if-elif-else","3.4 if elif else",[31,160007,160008],{},"多条件判断：",[190,160010,160012],{"className":33221,"code":160011,"language":33223,"meta":57,"style":57},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[196,160013,160014,160032,160036,160050,160061,160075,160086,160099,160110,160116],{"__ignoreMap":57},[199,160015,160016,160018,160020,160022,160024,160026,160028,160030],{"class":201,"line":202},[199,160017,157617],{"class":205},[199,160019,895],{"class":1086},[199,160021,5296],{"class":1018},[199,160023,1537],{"class":205},[199,160025,56080],{"class":1018},[199,160027,1537],{"class":205},[199,160029,154668],{"class":898},[199,160031,1554],{"class":205},[199,160033,160034],{"class":201,"line":36},[199,160035,907],{"emptyLinePlaceholder":906},[199,160037,160038,160040,160043,160045,160048],{"class":201,"line":73},[199,160039,4470],{"class":1086},[199,160041,160042],{"class":205}," score ",[199,160044,4635],{"class":1086},[199,160046,160047],{"class":1018}," 90",[199,160049,6640],{"class":205},[199,160051,160052,160054,160056,160059],{"class":201,"line":333},[199,160053,34141],{"class":1018},[199,160055,1537],{"class":205},[199,160057,160058],{"class":898},"\"优秀\"",[199,160060,1594],{"class":205},[199,160062,160063,160066,160068,160070,160073],{"class":201,"line":227},[199,160064,160065],{"class":1086},"elif",[199,160067,160042],{"class":205},[199,160069,4635],{"class":1086},[199,160071,160072],{"class":1018}," 80",[199,160074,6640],{"class":205},[199,160076,160077,160079,160081,160084],{"class":201,"line":238},[199,160078,34141],{"class":1018},[199,160080,1537],{"class":205},[199,160082,160083],{"class":898},"\"良好\"",[199,160085,1594],{"class":205},[199,160087,160088,160090,160092,160094,160097],{"class":201,"line":252},[199,160089,160065],{"class":1086},[199,160091,160042],{"class":205},[199,160093,4635],{"class":1086},[199,160095,160096],{"class":1018}," 60",[199,160098,6640],{"class":205},[199,160100,160101,160103,160105,160108],{"class":201,"line":388},[199,160102,34141],{"class":1018},[199,160104,1537],{"class":205},[199,160106,160107],{"class":898},"\"及格\"",[199,160109,1594],{"class":205},[199,160111,160112,160114],{"class":201,"line":415},[199,160113,4626],{"class":1086},[199,160115,6640],{"class":205},[199,160117,160118,160120,160122,160125],{"class":201,"line":426},[199,160119,34141],{"class":1018},[199,160121,1537],{"class":205},[199,160123,160124],{"class":898},"\"不及格\"",[199,160126,1594],{"class":205},[31,160128,160129],{},"注意判断顺序很重要。",[31,160131,160132,160133,160136],{},"如果把 ",[196,160134,160135],{},"score >= 60"," 放在最前面：",[190,160138,160140],{"className":33221,"code":160139,"language":33223,"meta":57,"style":57},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[196,160141,160142,160154,160164,160176],{"__ignoreMap":57},[199,160143,160144,160146,160148,160150,160152],{"class":201,"line":202},[199,160145,4470],{"class":1086},[199,160147,160042],{"class":205},[199,160149,4635],{"class":1086},[199,160151,160096],{"class":1018},[199,160153,6640],{"class":205},[199,160155,160156,160158,160160,160162],{"class":201,"line":36},[199,160157,34141],{"class":1018},[199,160159,1537],{"class":205},[199,160161,160107],{"class":898},[199,160163,1594],{"class":205},[199,160165,160166,160168,160170,160172,160174],{"class":201,"line":73},[199,160167,160065],{"class":1086},[199,160169,160042],{"class":205},[199,160171,4635],{"class":1086},[199,160173,160047],{"class":1018},[199,160175,6640],{"class":205},[199,160177,160178,160180,160182,160184],{"class":201,"line":333},[199,160179,34141],{"class":1018},[199,160181,1537],{"class":205},[199,160183,160058],{"class":898},[199,160185,1594],{"class":205},[31,160187,160188,160189,160191],{},"成绩 95 会先满足 ",[196,160190,160135],{},"，后面的优秀分支就不会执行。",[14,160193,160195],{"id":160194},"_35-判断语句嵌套","3.5 判断语句嵌套",[31,160197,160198],{},"嵌套判断就是在一个判断内部再写判断。",[190,160200,160202],{"className":33221,"code":160201,"language":33223,"meta":57,"style":57},"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",[196,160203,160204,160222,160237,160241,160253,160267,160277,160284,160295,160301],{"__ignoreMap":57},[199,160205,160206,160208,160210,160212,160214,160216,160218,160220],{"class":201,"line":202},[199,160207,148805],{"class":205},[199,160209,895],{"class":1086},[199,160211,5296],{"class":1018},[199,160213,1537],{"class":205},[199,160215,56080],{"class":1018},[199,160217,1537],{"class":205},[199,160219,154653],{"class":898},[199,160221,1554],{"class":205},[199,160223,160224,160226,160228,160230,160232,160235],{"class":201,"line":36},[199,160225,158620],{"class":205},[199,160227,895],{"class":1086},[199,160229,62864],{"class":1018},[199,160231,1537],{"class":205},[199,160233,160234],{"class":898},"\"是否有票(y\u002Fn):\"",[199,160236,1594],{"class":205},[199,160238,160239],{"class":201,"line":73},[199,160240,907],{"emptyLinePlaceholder":906},[199,160242,160243,160245,160247,160249,160251],{"class":201,"line":333},[199,160244,4470],{"class":1086},[199,160246,18565],{"class":205},[199,160248,4635],{"class":1086},[199,160250,158544],{"class":1018},[199,160252,6640],{"class":205},[199,160254,160255,160257,160260,160262,160265],{"class":201,"line":227},[199,160256,6005],{"class":1086},[199,160258,160259],{"class":205}," has_ticket ",[199,160261,5853],{"class":1086},[199,160263,160264],{"class":898}," \"y\"",[199,160266,6640],{"class":205},[199,160268,160269,160271,160273,160275],{"class":201,"line":238},[199,160270,35293],{"class":1018},[199,160272,1537],{"class":205},[199,160274,159906],{"class":898},[199,160276,1594],{"class":205},[199,160278,160279,160282],{"class":201,"line":252},[199,160280,160281],{"class":1086},"    else",[199,160283,6640],{"class":205},[199,160285,160286,160288,160290,160293],{"class":201,"line":388},[199,160287,35293],{"class":1018},[199,160289,1537],{"class":205},[199,160291,160292],{"class":898},"\"请先买票\"",[199,160294,1594],{"class":205},[199,160296,160297,160299],{"class":201,"line":415},[199,160298,4626],{"class":1086},[199,160300,6640],{"class":205},[199,160302,160303,160305,160307,160310],{"class":201,"line":426},[199,160304,34141],{"class":1018},[199,160306,1537],{"class":205},[199,160308,160309],{"class":898},"\"未成年人禁止进入\"",[199,160311,1594],{"class":205},[31,160313,160314],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160316,160318],{"id":160317},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[19,160320,160322],{"id":160321},"_361-and","3.6.1 and",[31,160324,160325],{},"两个条件都成立才成立。",[190,160327,160329],{"className":33221,"code":160328,"language":33223,"meta":57,"style":57},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[196,160330,160331,160339,160347,160351,160366],{"__ignoreMap":57},[199,160332,160333,160335,160337],{"class":201,"line":202},[199,160334,148805],{"class":205},[199,160336,895],{"class":1086},[199,160338,90324],{"class":1018},[199,160340,160341,160343,160345],{"class":201,"line":36},[199,160342,158620],{"class":205},[199,160344,895],{"class":1086},[199,160346,155858],{"class":1018},[199,160348,160349],{"class":201,"line":73},[199,160350,907],{"emptyLinePlaceholder":906},[199,160352,160353,160355,160357,160359,160361,160363],{"class":201,"line":333},[199,160354,4470],{"class":1086},[199,160356,18565],{"class":205},[199,160358,4635],{"class":1086},[199,160360,158544],{"class":1018},[199,160362,122688],{"class":1086},[199,160364,160365],{"class":205}," has_ticket:\n",[199,160367,160368,160370,160372,160374],{"class":201,"line":227},[199,160369,34141],{"class":1018},[199,160371,1537],{"class":205},[199,160373,159906],{"class":898},[199,160375,1594],{"class":205},[19,160377,160379],{"id":160378},"_362-or","3.6.2 or",[31,160381,160382],{},"只要一个条件成立就成立。",[190,160384,160386],{"className":33221,"code":160385,"language":33223,"meta":57,"style":57},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[196,160387,160388,160397,160406,160410,160422],{"__ignoreMap":57},[199,160389,160390,160393,160395],{"class":201,"line":202},[199,160391,160392],{"class":205},"is_vip ",[199,160394,895],{"class":1086},[199,160396,128066],{"class":1018},[199,160398,160399,160402,160404],{"class":201,"line":36},[199,160400,160401],{"class":205},"coupon ",[199,160403,895],{"class":1086},[199,160405,155858],{"class":1018},[199,160407,160408],{"class":201,"line":73},[199,160409,907],{"emptyLinePlaceholder":906},[199,160411,160412,160414,160417,160419],{"class":201,"line":333},[199,160413,4470],{"class":1086},[199,160415,160416],{"class":205}," is_vip ",[199,160418,117349],{"class":1086},[199,160420,160421],{"class":205}," coupon:\n",[199,160423,160424,160426,160428,160431],{"class":201,"line":227},[199,160425,34141],{"class":1018},[199,160427,1537],{"class":205},[199,160429,160430],{"class":898},"\"可以享受优惠\"",[199,160432,1594],{"class":205},[19,160434,160436],{"id":160435},"_363-not","3.6.3 not",[31,160438,160439],{},"取反。",[190,160441,160443],{"className":33221,"code":160442,"language":33223,"meta":57,"style":57},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[196,160444,160445,160454,160458,160467],{"__ignoreMap":57},[199,160446,160447,160450,160452],{"class":201,"line":202},[199,160448,160449],{"class":205},"is_closed ",[199,160451,895],{"class":1086},[199,160453,128066],{"class":1018},[199,160455,160456],{"class":201,"line":36},[199,160457,907],{"emptyLinePlaceholder":906},[199,160459,160460,160462,160464],{"class":201,"line":73},[199,160461,4470],{"class":1086},[199,160463,41771],{"class":1086},[199,160465,160466],{"class":205}," is_closed:\n",[199,160468,160469,160471,160473,160476],{"class":201,"line":333},[199,160470,34141],{"class":1018},[199,160472,1537],{"class":205},[199,160474,160475],{"class":898},"\"店铺营业中\"",[199,160477,1594],{"class":205},[14,160479,160481],{"id":160480},"_37-链式比较","3.7 链式比较",[31,160483,160484],{},"Python 支持链式比较：",[190,160486,160488],{"className":33221,"code":160487,"language":33223,"meta":57,"style":57},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[196,160489,160490,160499,160503,160520],{"__ignoreMap":57},[199,160491,160492,160494,160496],{"class":201,"line":202},[199,160493,157617],{"class":205},[199,160495,895],{"class":1086},[199,160497,160498],{"class":1018}," 85\n",[199,160500,160501],{"class":201,"line":36},[199,160502,907],{"emptyLinePlaceholder":906},[199,160504,160505,160507,160509,160512,160514,160516,160518],{"class":201,"line":73},[199,160506,4470],{"class":1086},[199,160508,1621],{"class":1018},[199,160510,160511],{"class":1086}," \u003C=",[199,160513,160042],{"class":205},[199,160515,1501],{"class":1086},[199,160517,8651],{"class":1018},[199,160519,6640],{"class":205},[199,160521,160522,160524,160526,160529],{"class":201,"line":333},[199,160523,34141],{"class":1018},[199,160525,1537],{"class":205},[199,160527,160528],{"class":898},"\"成绩合法\"",[199,160530,1594],{"class":205},[31,160532,160533],{},"等价于：",[190,160535,160537],{"className":33221,"code":160536,"language":33223,"meta":57,"style":57},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[196,160538,160539,160559],{"__ignoreMap":57},[199,160540,160541,160543,160545,160547,160549,160551,160553,160555,160557],{"class":201,"line":202},[199,160542,4470],{"class":1086},[199,160544,160042],{"class":205},[199,160546,4635],{"class":1086},[199,160548,1621],{"class":1018},[199,160550,122688],{"class":1086},[199,160552,160042],{"class":205},[199,160554,1501],{"class":1086},[199,160556,8651],{"class":1018},[199,160558,6640],{"class":205},[199,160560,160561,160563,160565,160567],{"class":201,"line":36},[199,160562,34141],{"class":1018},[199,160564,1537],{"class":205},[199,160566,160528],{"class":898},[199,160568,1594],{"class":205},[14,160570,160572],{"id":160571},"_38-真值和假值","3.8 真值和假值",[31,160574,118726,160575,160577],{},[196,160576,4470],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[31,160579,160580],{},"假值：",[190,160582,160584],{"className":33221,"code":160583,"language":33223,"meta":57,"style":57},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[196,160585,160586,160590,160595,160599,160603,160608,160612,160616,160621],{"__ignoreMap":57},[199,160587,160588],{"class":201,"line":202},[199,160589,159776],{"class":1018},[199,160591,160592],{"class":201,"line":36},[199,160593,160594],{"class":1018},"None\n",[199,160596,160597],{"class":201,"line":73},[199,160598,5989],{"class":1018},[199,160600,160601],{"class":201,"line":333},[199,160602,35184],{"class":1018},[199,160604,160605],{"class":201,"line":227},[199,160606,160607],{"class":898},"\"\"\n",[199,160609,160610],{"class":201,"line":238},[199,160611,35199],{"class":205},[199,160613,160614],{"class":201,"line":252},[199,160615,4892],{"class":205},[199,160617,160618],{"class":201,"line":388},[199,160619,160620],{"class":205},"{}\n",[199,160622,160623,160625],{"class":201,"line":415},[199,160624,157549],{"class":1018},[199,160626,4892],{"class":205},[31,160628,17994],{},[190,160630,160632],{"className":33221,"code":160631,"language":33223,"meta":57,"style":57},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[196,160633,160634,160648,160652,160659,160679,160685],{"__ignoreMap":57},[199,160635,160636,160638,160640,160642,160644,160646],{"class":201,"line":202},[199,160637,148795],{"class":205},[199,160639,895],{"class":1086},[199,160641,62864],{"class":1018},[199,160643,1537],{"class":205},[199,160645,154638],{"class":898},[199,160647,1594],{"class":205},[199,160649,160650],{"class":201,"line":36},[199,160651,907],{"emptyLinePlaceholder":906},[199,160653,160654,160656],{"class":201,"line":73},[199,160655,4470],{"class":1086},[199,160657,160658],{"class":205}," name:\n",[199,160660,160661,160663,160665,160667,160669,160671,160673,160675,160677],{"class":201,"line":333},[199,160662,34141],{"class":1018},[199,160664,1537],{"class":205},[199,160666,3146],{"class":1086},[199,160668,159313],{"class":898},[199,160670,3974],{"class":1018},[199,160672,82069],{"class":205},[199,160674,759],{"class":1018},[199,160676,3337],{"class":898},[199,160678,1594],{"class":205},[199,160680,160681,160683],{"class":201,"line":227},[199,160682,4626],{"class":1086},[199,160684,6640],{"class":205},[199,160686,160687,160689,160691,160694],{"class":201,"line":238},[199,160688,34141],{"class":1018},[199,160690,1537],{"class":205},[199,160692,160693],{"class":898},"\"姓名不能为空\"",[199,160695,1594],{"class":205},[14,160697,160699],{"id":160698},"_39-match语句","3.9 match语句",[31,160701,160702,160703,160705],{},"Python 3.10 开始支持 ",[196,160704,73524],{},"。它适合处理固定选项。",[190,160707,160709],{"className":33221,"code":160708,"language":33223,"meta":57,"style":57},"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",[196,160710,160711,160727,160731,160738,160748,160759,160768,160779,160788,160799,160806],{"__ignoreMap":57},[199,160712,160713,160716,160718,160720,160722,160725],{"class":201,"line":202},[199,160714,160715],{"class":205},"command ",[199,160717,895],{"class":1086},[199,160719,62864],{"class":1018},[199,160721,1537],{"class":205},[199,160723,160724],{"class":898},"\"请输入命令:\"",[199,160726,1594],{"class":205},[199,160728,160729],{"class":201,"line":36},[199,160730,907],{"emptyLinePlaceholder":906},[199,160732,160733,160735],{"class":201,"line":73},[199,160734,73524],{"class":1086},[199,160736,160737],{"class":205}," command:\n",[199,160739,160740,160743,160746],{"class":201,"line":333},[199,160741,160742],{"class":1086},"    case",[199,160744,160745],{"class":898}," \"start\"",[199,160747,6640],{"class":205},[199,160749,160750,160752,160754,160757],{"class":201,"line":227},[199,160751,35293],{"class":1018},[199,160753,1537],{"class":205},[199,160755,160756],{"class":898},"\"启动\"",[199,160758,1594],{"class":205},[199,160760,160761,160763,160766],{"class":201,"line":238},[199,160762,160742],{"class":1086},[199,160764,160765],{"class":898}," \"stop\"",[199,160767,6640],{"class":205},[199,160769,160770,160772,160774,160777],{"class":201,"line":252},[199,160771,35293],{"class":1018},[199,160773,1537],{"class":205},[199,160775,160776],{"class":898},"\"停止\"",[199,160778,1594],{"class":205},[199,160780,160781,160783,160786],{"class":201,"line":388},[199,160782,160742],{"class":1086},[199,160784,160785],{"class":898}," \"restart\"",[199,160787,6640],{"class":205},[199,160789,160790,160792,160794,160797],{"class":201,"line":415},[199,160791,35293],{"class":1018},[199,160793,1537],{"class":205},[199,160795,160796],{"class":898},"\"重启\"",[199,160798,1594],{"class":205},[199,160800,160801,160803],{"class":201,"line":426},[199,160802,160742],{"class":1086},[199,160804,160805],{"class":205}," _:\n",[199,160807,160808,160810,160812,160815],{"class":201,"line":1015},[199,160809,35293],{"class":1018},[199,160811,1537],{"class":205},[199,160813,160814],{"class":898},"\"未知命令\"",[199,160816,1594],{"class":205},[31,160818,160819,160820,160822,160823,160825],{},"入门阶段掌握 ",[196,160821,156917],{}," 更重要，",[196,160824,73524],{}," 可以作为补充。",[14,160827,160829],{"id":160828},"_310-小案例成绩等级","3.10 小案例：成绩等级",[31,160831,125551],{},[24,160833,160834,160837,160840],{},[27,160835,160836],{},"输入成绩。",[27,160838,160839],{},"判断成绩是否合法。",[27,160841,160842],{},"输出等级。",[31,160844,12898],{},[190,160846,160848],{"className":33221,"code":160847,"language":33223,"meta":57,"style":57},"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",[196,160849,160850,160868,160872,160890,160901,160913,160924,160936,160947,160960,160971,160983,160994,161000],{"__ignoreMap":57},[199,160851,160852,160854,160856,160858,160860,160862,160864,160866],{"class":201,"line":202},[199,160853,157617],{"class":205},[199,160855,895],{"class":1086},[199,160857,112056],{"class":1018},[199,160859,1537],{"class":205},[199,160861,56080],{"class":1018},[199,160863,1537],{"class":205},[199,160865,154668],{"class":898},[199,160867,1554],{"class":205},[199,160869,160870],{"class":201,"line":36},[199,160871,907],{"emptyLinePlaceholder":906},[199,160873,160874,160876,160878,160880,160882,160884,160886,160888],{"class":201,"line":73},[199,160875,4470],{"class":1086},[199,160877,41771],{"class":1086},[199,160879,1621],{"class":1018},[199,160881,160511],{"class":1086},[199,160883,160042],{"class":205},[199,160885,1501],{"class":1086},[199,160887,8651],{"class":1018},[199,160889,6640],{"class":205},[199,160891,160892,160894,160896,160899],{"class":201,"line":333},[199,160893,34141],{"class":1018},[199,160895,1537],{"class":205},[199,160897,160898],{"class":898},"\"成绩不合法\"",[199,160900,1594],{"class":205},[199,160902,160903,160905,160907,160909,160911],{"class":201,"line":227},[199,160904,160065],{"class":1086},[199,160906,160042],{"class":205},[199,160908,4635],{"class":1086},[199,160910,160047],{"class":1018},[199,160912,6640],{"class":205},[199,160914,160915,160917,160919,160922],{"class":201,"line":238},[199,160916,34141],{"class":1018},[199,160918,1537],{"class":205},[199,160920,160921],{"class":898},"\"等级:A\"",[199,160923,1594],{"class":205},[199,160925,160926,160928,160930,160932,160934],{"class":201,"line":252},[199,160927,160065],{"class":1086},[199,160929,160042],{"class":205},[199,160931,4635],{"class":1086},[199,160933,160072],{"class":1018},[199,160935,6640],{"class":205},[199,160937,160938,160940,160942,160945],{"class":201,"line":388},[199,160939,34141],{"class":1018},[199,160941,1537],{"class":205},[199,160943,160944],{"class":898},"\"等级:B\"",[199,160946,1594],{"class":205},[199,160948,160949,160951,160953,160955,160958],{"class":201,"line":415},[199,160950,160065],{"class":1086},[199,160952,160042],{"class":205},[199,160954,4635],{"class":1086},[199,160956,160957],{"class":1018}," 70",[199,160959,6640],{"class":205},[199,160961,160962,160964,160966,160969],{"class":201,"line":426},[199,160963,34141],{"class":1018},[199,160965,1537],{"class":205},[199,160967,160968],{"class":898},"\"等级:C\"",[199,160970,1594],{"class":205},[199,160972,160973,160975,160977,160979,160981],{"class":201,"line":1015},[199,160974,160065],{"class":1086},[199,160976,160042],{"class":205},[199,160978,4635],{"class":1086},[199,160980,160096],{"class":1018},[199,160982,6640],{"class":205},[199,160984,160985,160987,160989,160992],{"class":201,"line":1031},[199,160986,34141],{"class":1018},[199,160988,1537],{"class":205},[199,160990,160991],{"class":898},"\"等级:D\"",[199,160993,1594],{"class":205},[199,160995,160996,160998],{"class":201,"line":1043},[199,160997,4626],{"class":1086},[199,160999,6640],{"class":205},[199,161001,161002,161004,161006,161009],{"class":201,"line":1049},[199,161003,34141],{"class":1018},[199,161005,1537],{"class":205},[199,161007,161008],{"class":898},"\"等级:E\"",[199,161010,1594],{"class":205},[14,161012,161014],{"id":161013},"_311-小案例会员折扣","3.11 小案例：会员折扣",[31,161016,125551],{},[24,161018,161019,161022,161025,161028],{},[27,161020,161021],{},"输入消费金额。",[27,161023,161024],{},"输入会员等级，普通、银卡、金卡。",[27,161026,161027],{},"普通不打折，银卡 9 折，金卡 8 折。",[27,161029,161030],{},"满 500 再减 50。",[31,161032,12898],{},[190,161034,161036],{"className":33221,"code":161035,"language":33223,"meta":57,"style":57},"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",[196,161037,161038,161058,161074,161078,161086,161090,161104,161114,161127,161136,161149,161157,161163,161174,161178,161192,161196,161210,161220,161224],{"__ignoreMap":57},[199,161039,161040,161043,161045,161047,161049,161051,161053,161056],{"class":201,"line":202},[199,161041,161042],{"class":205},"amount ",[199,161044,895],{"class":1086},[199,161046,112056],{"class":1018},[199,161048,1537],{"class":205},[199,161050,56080],{"class":1018},[199,161052,1537],{"class":205},[199,161054,161055],{"class":898},"\"请输入消费金额:\"",[199,161057,1554],{"class":205},[199,161059,161060,161063,161065,161067,161069,161072],{"class":201,"line":36},[199,161061,161062],{"class":205},"level ",[199,161064,895],{"class":1086},[199,161066,62864],{"class":1018},[199,161068,1537],{"class":205},[199,161070,161071],{"class":898},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[199,161073,1594],{"class":205},[199,161075,161076],{"class":201,"line":73},[199,161077,907],{"emptyLinePlaceholder":906},[199,161079,161080,161082,161084],{"class":201,"line":333},[199,161081,159495],{"class":205},[199,161083,895],{"class":1086},[199,161085,57958],{"class":1018},[199,161087,161088],{"class":201,"line":227},[199,161089,907],{"emptyLinePlaceholder":906},[199,161091,161092,161094,161097,161099,161102],{"class":201,"line":238},[199,161093,4470],{"class":1086},[199,161095,161096],{"class":205}," level ",[199,161098,5853],{"class":1086},[199,161100,161101],{"class":898}," \"银卡\"",[199,161103,6640],{"class":205},[199,161105,161106,161109,161111],{"class":201,"line":252},[199,161107,161108],{"class":205},"    discount ",[199,161110,895],{"class":1086},[199,161112,161113],{"class":1018}," 0.9\n",[199,161115,161116,161118,161120,161122,161125],{"class":201,"line":388},[199,161117,160065],{"class":1086},[199,161119,161096],{"class":205},[199,161121,5853],{"class":1086},[199,161123,161124],{"class":898}," \"金卡\"",[199,161126,6640],{"class":205},[199,161128,161129,161131,161133],{"class":201,"line":415},[199,161130,161108],{"class":205},[199,161132,895],{"class":1086},[199,161134,161135],{"class":1018}," 0.8\n",[199,161137,161138,161140,161142,161144,161147],{"class":201,"line":426},[199,161139,160065],{"class":1086},[199,161141,161096],{"class":205},[199,161143,5853],{"class":1086},[199,161145,161146],{"class":898}," \"普通\"",[199,161148,6640],{"class":205},[199,161150,161151,161153,161155],{"class":201,"line":1015},[199,161152,161108],{"class":205},[199,161154,895],{"class":1086},[199,161156,57958],{"class":1018},[199,161158,161159,161161],{"class":201,"line":1031},[199,161160,4626],{"class":1086},[199,161162,6640],{"class":205},[199,161164,161165,161167,161169,161172],{"class":201,"line":1043},[199,161166,34141],{"class":1018},[199,161168,1537],{"class":205},[199,161170,161171],{"class":898},"\"会员等级输入错误，按普通会员计算\"",[199,161173,1594],{"class":205},[199,161175,161176],{"class":201,"line":1049},[199,161177,907],{"emptyLinePlaceholder":906},[199,161179,161180,161183,161185,161188,161190],{"class":201,"line":1054},[199,161181,161182],{"class":205},"pay ",[199,161184,895],{"class":1086},[199,161186,161187],{"class":205}," amount ",[199,161189,3537],{"class":1086},[199,161191,159534],{"class":205},[199,161193,161194],{"class":201,"line":1062},[199,161195,907],{"emptyLinePlaceholder":906},[199,161197,161198,161200,161203,161205,161208],{"class":201,"line":1075},[199,161199,4470],{"class":1086},[199,161201,161202],{"class":205}," pay ",[199,161204,4635],{"class":1086},[199,161206,161207],{"class":1018}," 500",[199,161209,6640],{"class":205},[199,161211,161212,161215,161217],{"class":201,"line":1092},[199,161213,161214],{"class":205},"    pay ",[199,161216,152511],{"class":1086},[199,161218,161219],{"class":1018}," 50\n",[199,161221,161222],{"class":201,"line":1107},[199,161223,907],{"emptyLinePlaceholder":906},[199,161225,161226,161228,161230,161232,161234,161236,161239,161241,161243,161245],{"class":201,"line":1128},[199,161227,33258],{"class":1018},[199,161229,1537],{"class":205},[199,161231,3146],{"class":1086},[199,161233,159615],{"class":898},[199,161235,3974],{"class":1018},[199,161237,161238],{"class":205},"pay",[199,161240,159418],{"class":1086},[199,161242,759],{"class":1018},[199,161244,159271],{"class":898},[199,161246,1594],{"class":205},[14,161248,161250],{"id":161249},"_312-易错点","3.12 易错点",[24,161252,161253,161256,161259,161262,161267],{},[27,161254,161255],{},"冒号不能漏。",[27,161257,161258],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[27,161260,161261],{},"多分支判断要注意顺序。",[27,161263,161264,161265,31228],{},"判断相等用 ",[196,161266,5853],{},[27,161268,161269],{},"字符串比较区分大小写：",[190,161271,161273],{"className":33221,"code":161272,"language":33223,"meta":57,"style":57},"\"Y\" == \"y\"  # False\n",[196,161274,161275],{"__ignoreMap":57},[199,161276,161277,161280,161282,161284],{"class":201,"line":202},[199,161278,161279],{"class":898},"\"Y\"",[199,161281,103818],{"class":1086},[199,161283,160264],{"class":898},[199,161285,161286],{"class":1454},"  # False\n",[31,161288,161289],{},"可转换后再判断：",[190,161291,161293],{"className":33221,"code":161292,"language":33223,"meta":57,"style":57},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[196,161294,161295,161312,161325],{"__ignoreMap":57},[199,161296,161297,161300,161302,161304,161306,161309],{"class":201,"line":202},[199,161298,161299],{"class":205},"answer ",[199,161301,895],{"class":1086},[199,161303,62864],{"class":1018},[199,161305,1537],{"class":205},[199,161307,161308],{"class":898},"\"是否继续(y\u002Fn):\"",[199,161310,161311],{"class":205},").lower()\n",[199,161313,161314,161316,161319,161321,161323],{"class":201,"line":36},[199,161315,4470],{"class":1086},[199,161317,161318],{"class":205}," answer ",[199,161320,5853],{"class":1086},[199,161322,160264],{"class":898},[199,161324,6640],{"class":205},[199,161326,161327,161329,161331,161334],{"class":201,"line":73},[199,161328,34141],{"class":1018},[199,161330,1537],{"class":205},[199,161332,161333],{"class":898},"\"继续\"",[199,161335,1594],{"class":205},[14,161337,161339],{"id":161338},"_313-本章练习","3.13 本章练习",[24,161341,161342,161345,161348,161351,161361],{},[27,161343,161344],{},"输入年龄，判断是否成年。",[27,161346,161347],{},"输入年份，判断是否为闰年。",[27,161349,161350],{},"输入三个数字，输出最大值。",[27,161352,161353,161354,161357,161358,161360],{},"写登录判断：用户名是 ",[196,161355,161356],{},"admin"," 且密码是 ",[196,161359,17943],{}," 才登录成功。",[27,161362,161363],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1002,161365,161366],{},"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":57,"searchDepth":36,"depth":36,"links":161368},[161369,161370,161371,161372,161373,161374,161379,161380,161381,161382,161383,161384,161385],{"id":159757,"depth":36,"text":159758},{"id":159810,"depth":36,"text":159811},{"id":159914,"depth":36,"text":159915},{"id":160004,"depth":36,"text":160005},{"id":160194,"depth":36,"text":160195},{"id":160317,"depth":36,"text":160318,"children":161375},[161376,161377,161378],{"id":160321,"depth":73,"text":160322},{"id":160378,"depth":73,"text":160379},{"id":160435,"depth":73,"text":160436},{"id":160480,"depth":36,"text":160481},{"id":160571,"depth":36,"text":160572},{"id":160698,"depth":36,"text":160699},{"id":160828,"depth":36,"text":160829},{"id":161013,"depth":36,"text":161014},{"id":161249,"depth":36,"text":161250},{"id":161338,"depth":36,"text":161339},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159749,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161392,"title":161393,"body":161394,"description":3023,"extension":3024,"meta":163163,"navigation":906,"path":163164,"seo":163165,"stem":163166,"__hash__":163167},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161395,"toc":163143},[161396,161399,161403,161409,161412,161429,161433,161435,161452,161454,161499,161501,161518,161522,161525,161591,161594,161612,161616,161777,161786,161790,161794,161799,161846,161848,161854,161858,161863,161910,161912,161918,161922,161927,161963,161966,162013,162017,162023,162081,162086,162117,162122,162126,162181,162184,162256,162259,162318,162322,162325,162400,162403,162407,162513,162516,162542,162546,162558,162627,162630,162722,162726,162728,162739,162741,162871,162875,163077,163085,163089,163119,163123,163140],[10,161397,161393],{"id":161398},"_4-循环语句",[14,161400,161402],{"id":161401},"_41-为什么需要循环","4.1 为什么需要循环",[31,161404,161405,161406,161408],{},"如果要输出 1 到 100，不应该写 100 行 ",[196,161407,148731],{},"，而应该用循环。",[31,161410,161411],{},"循环适合处理重复任务：",[24,161413,161414,161417,161420,161423,161426],{},[27,161415,161416],{},"重复输出。",[27,161418,161419],{},"重复输入。",[27,161421,161422],{},"遍历数据。",[27,161424,161425],{},"持续执行菜单。",[27,161427,161428],{},"批量处理文件或数据。",[14,161430,161432],{"id":161431},"_42-while循环","4.2 while循环",[31,161434,8078],{},[190,161436,161438],{"className":33221,"code":161437,"language":33223,"meta":57,"style":57},"while 条件:\n    循环体\n",[196,161439,161440,161447],{"__ignoreMap":57},[199,161441,161442,161444],{"class":201,"line":202},[199,161443,110922],{"class":1086},[199,161445,161446],{"class":205}," 条件:\n",[199,161448,161449],{"class":201,"line":36},[199,161450,161451],{"class":205},"    循环体\n",[31,161453,17994],{},[190,161455,161457],{"className":33221,"code":161456,"language":33223,"meta":57,"style":57},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[196,161458,161459,161467,161471,161483,161490],{"__ignoreMap":57},[199,161460,161461,161463,161465],{"class":201,"line":202},[199,161462,102407],{"class":205},[199,161464,895],{"class":1086},[199,161466,57958],{"class":1018},[199,161468,161469],{"class":201,"line":36},[199,161470,907],{"emptyLinePlaceholder":906},[199,161472,161473,161475,161477,161479,161481],{"class":201,"line":73},[199,161474,110922],{"class":1086},[199,161476,1490],{"class":205},[199,161478,1501],{"class":1086},[199,161480,5064],{"class":1018},[199,161482,6640],{"class":205},[199,161484,161485,161487],{"class":201,"line":333},[199,161486,34141],{"class":1018},[199,161488,161489],{"class":205},"(i)\n",[199,161491,161492,161495,161497],{"class":201,"line":227},[199,161493,161494],{"class":205},"    i ",[199,161496,12362],{"class":1086},[199,161498,57958],{"class":1018},[31,161500,83188],{},[24,161502,161503,161509,161512,161515],{},[27,161504,161505,161506,31228],{},"判断条件 ",[196,161507,161508],{},"i \u003C= 5",[27,161510,161511],{},"条件成立，执行循环体。",[27,161513,161514],{},"执行完后回到条件判断。",[27,161516,161517],{},"条件不成立，退出循环。",[14,161519,161521],{"id":161520},"_43-while累加","4.3 while累加",[31,161523,161524],{},"计算 1 到 100 的和：",[190,161526,161528],{"className":33221,"code":161527,"language":33223,"meta":57,"style":57},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[196,161529,161530,161538,161546,161550,161562,161572,161580,161584],{"__ignoreMap":57},[199,161531,161532,161534,161536],{"class":201,"line":202},[199,161533,102407],{"class":205},[199,161535,895],{"class":1086},[199,161537,57958],{"class":1018},[199,161539,161540,161542,161544],{"class":201,"line":36},[199,161541,159519],{"class":205},[199,161543,895],{"class":1086},[199,161545,50173],{"class":1018},[199,161547,161548],{"class":201,"line":73},[199,161549,907],{"emptyLinePlaceholder":906},[199,161551,161552,161554,161556,161558,161560],{"class":201,"line":333},[199,161553,110922],{"class":1086},[199,161555,1490],{"class":205},[199,161557,1501],{"class":1086},[199,161559,8651],{"class":1018},[199,161561,6640],{"class":205},[199,161563,161564,161567,161569],{"class":201,"line":227},[199,161565,161566],{"class":205},"    total ",[199,161568,12362],{"class":1086},[199,161570,161571],{"class":205}," i\n",[199,161573,161574,161576,161578],{"class":201,"line":238},[199,161575,161494],{"class":205},[199,161577,12362],{"class":1086},[199,161579,57958],{"class":1018},[199,161581,161582],{"class":201,"line":252},[199,161583,907],{"emptyLinePlaceholder":906},[199,161585,161586,161588],{"class":201,"line":388},[199,161587,33258],{"class":1018},[199,161589,161590],{"class":205},"(total)\n",[31,161592,161593],{},"核心思想：",[24,161595,161596,161601,161606],{},[27,161597,161598,161600],{},[196,161599,1548],{}," 控制循环次数。",[27,161602,161603,161605],{},[196,161604,159620],{}," 保存累加结果。",[27,161607,161608,161609,161611],{},"每轮循环都要更新 ",[196,161610,1548],{},"，否则可能死循环。",[14,161613,161615],{"id":161614},"_44-while猜数字","4.4 while猜数字",[190,161617,161619],{"className":33221,"code":161618,"language":33223,"meta":57,"style":57},"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",[196,161620,161621,161627,161631,161648,161656,161660,161668,161688,161697,161701,161713,161724,161734,161745,161751,161773],{"__ignoreMap":57},[199,161622,161623,161625],{"class":201,"line":202},[199,161624,33235],{"class":1086},[199,161626,48169],{"class":205},[199,161628,161629],{"class":201,"line":36},[199,161630,907],{"emptyLinePlaceholder":906},[199,161632,161633,161635,161637,161640,161642,161644,161646],{"class":201,"line":73},[199,161634,161299],{"class":205},[199,161636,895],{"class":1086},[199,161638,161639],{"class":205}," random.randint(",[199,161641,1115],{"class":1018},[199,161643,1912],{"class":205},[199,161645,3396],{"class":1018},[199,161647,1594],{"class":205},[199,161649,161650,161652,161654],{"class":201,"line":333},[199,161651,148950],{"class":205},[199,161653,895],{"class":1086},[199,161655,50173],{"class":1018},[199,161657,161658],{"class":201,"line":227},[199,161659,907],{"emptyLinePlaceholder":906},[199,161661,161662,161664,161666],{"class":201,"line":238},[199,161663,110922],{"class":1086},[199,161665,97551],{"class":1018},[199,161667,6640],{"class":205},[199,161669,161670,161673,161675,161677,161679,161681,161683,161686],{"class":201,"line":252},[199,161671,161672],{"class":205},"    guess ",[199,161674,895],{"class":1086},[199,161676,5296],{"class":1018},[199,161678,1537],{"class":205},[199,161680,56080],{"class":1018},[199,161682,1537],{"class":205},[199,161684,161685],{"class":898},"\"请输入1到100之间的数字:\"",[199,161687,1554],{"class":205},[199,161689,161690,161693,161695],{"class":201,"line":388},[199,161691,161692],{"class":205},"    count ",[199,161694,12362],{"class":1086},[199,161696,57958],{"class":1018},[199,161698,161699],{"class":201,"line":415},[199,161700,907],{"emptyLinePlaceholder":906},[199,161702,161703,161705,161708,161710],{"class":201,"line":426},[199,161704,6005],{"class":1086},[199,161706,161707],{"class":205}," guess ",[199,161709,1217],{"class":1086},[199,161711,161712],{"class":205}," answer:\n",[199,161714,161715,161717,161719,161722],{"class":201,"line":1015},[199,161716,35293],{"class":1018},[199,161718,1537],{"class":205},[199,161720,161721],{"class":898},"\"猜大了\"",[199,161723,1594],{"class":205},[199,161725,161726,161728,161730,161732],{"class":201,"line":1031},[199,161727,42134],{"class":1086},[199,161729,161707],{"class":205},[199,161731,887],{"class":1086},[199,161733,161712],{"class":205},[199,161735,161736,161738,161740,161743],{"class":201,"line":1043},[199,161737,35293],{"class":1018},[199,161739,1537],{"class":205},[199,161741,161742],{"class":898},"\"猜小了\"",[199,161744,1594],{"class":205},[199,161746,161747,161749],{"class":201,"line":1049},[199,161748,160281],{"class":1086},[199,161750,6640],{"class":205},[199,161752,161753,161755,161757,161759,161762,161764,161766,161768,161771],{"class":201,"line":1054},[199,161754,35293],{"class":1018},[199,161756,1537],{"class":205},[199,161758,3146],{"class":1086},[199,161760,161761],{"class":898},"\"猜对了，一共猜了",[199,161763,3974],{"class":1018},[199,161765,86693],{"class":205},[199,161767,759],{"class":1018},[199,161769,161770],{"class":898},"次\"",[199,161772,1594],{"class":205},[199,161774,161775],{"class":201,"line":1062},[199,161776,34469],{"class":1086},[31,161778,161779,161782,161783,161785],{},[196,161780,161781],{},"while True"," 表示无限循环，通常配合 ",[196,161784,4969],{}," 使用。",[14,161787,161789],{"id":161788},"_45-break和continue","4.5 break和continue",[19,161791,161793],{"id":161792},"_451-break","4.5.1 break",[31,161795,161796,161798],{},[196,161797,4969],{}," 直接结束整个循环。",[190,161800,161802],{"className":33221,"code":161801,"language":33223,"meta":57,"style":57},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[196,161803,161804,161824,161836,161840],{"__ignoreMap":57},[199,161805,161806,161808,161810,161812,161814,161816,161818,161820,161822],{"class":201,"line":202},[199,161807,5929],{"class":1086},[199,161809,1490],{"class":205},[199,161811,28886],{"class":1086},[199,161813,35285],{"class":1018},[199,161815,1537],{"class":205},[199,161817,1115],{"class":1018},[199,161819,1912],{"class":205},[199,161821,3428],{"class":1018},[199,161823,33628],{"class":205},[199,161825,161826,161828,161830,161832,161834],{"class":201,"line":36},[199,161827,6005],{"class":1086},[199,161829,1490],{"class":205},[199,161831,5853],{"class":1086},[199,161833,80329],{"class":1018},[199,161835,6640],{"class":205},[199,161837,161838],{"class":201,"line":73},[199,161839,34469],{"class":1086},[199,161841,161842,161844],{"class":201,"line":333},[199,161843,34141],{"class":1018},[199,161845,161489],{"class":205},[31,161847,148716],{},[190,161849,161852],{"className":161850,"code":161851,"language":8084,"meta":57},[8082],"1\n2\n",[196,161853,161851],{"__ignoreMap":57},[19,161855,161857],{"id":161856},"_452-continue","4.5.2 continue",[31,161859,161860,161862],{},[196,161861,156931],{}," 跳过本轮剩余代码，进入下一轮循环。",[190,161864,161866],{"className":33221,"code":161865,"language":33223,"meta":57,"style":57},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[196,161867,161868,161888,161900,161904],{"__ignoreMap":57},[199,161869,161870,161872,161874,161876,161878,161880,161882,161884,161886],{"class":201,"line":202},[199,161871,5929],{"class":1086},[199,161873,1490],{"class":205},[199,161875,28886],{"class":1086},[199,161877,35285],{"class":1018},[199,161879,1537],{"class":205},[199,161881,1115],{"class":1018},[199,161883,1912],{"class":205},[199,161885,3428],{"class":1018},[199,161887,33628],{"class":205},[199,161889,161890,161892,161894,161896,161898],{"class":201,"line":36},[199,161891,6005],{"class":1086},[199,161893,1490],{"class":205},[199,161895,5853],{"class":1086},[199,161897,80329],{"class":1018},[199,161899,6640],{"class":205},[199,161901,161902],{"class":201,"line":73},[199,161903,150771],{"class":1086},[199,161905,161906,161908],{"class":201,"line":333},[199,161907,34141],{"class":1018},[199,161909,161489],{"class":205},[31,161911,148716],{},[190,161913,161916],{"className":161914,"code":161915,"language":8084,"meta":57},[8082],"1\n2\n4\n5\n",[196,161917,161915],{"__ignoreMap":57},[14,161919,161921],{"id":161920},"_46-for循环","4.6 for循环",[31,161923,161924,161926],{},[196,161925,5929],{}," 常用于遍历序列。",[190,161928,161930],{"className":33221,"code":161929,"language":33223,"meta":57,"style":57},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[196,161931,161932,161941,161945,161956],{"__ignoreMap":57},[199,161933,161934,161936,161938],{"class":201,"line":202},[199,161935,148795],{"class":205},[199,161937,895],{"class":1086},[199,161939,161940],{"class":898}," \"python\"\n",[199,161942,161943],{"class":201,"line":36},[199,161944,907],{"emptyLinePlaceholder":906},[199,161946,161947,161949,161952,161954],{"class":201,"line":73},[199,161948,5929],{"class":1086},[199,161950,161951],{"class":205}," ch ",[199,161953,28886],{"class":1086},[199,161955,160658],{"class":205},[199,161957,161958,161960],{"class":201,"line":333},[199,161959,34141],{"class":1018},[199,161961,161962],{"class":205},"(ch)\n",[31,161964,161965],{},"遍历列表：",[190,161967,161969],{"className":33221,"code":161968,"language":33223,"meta":57,"style":57},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[196,161970,161971,161993,161997,162007],{"__ignoreMap":57},[199,161972,161973,161976,161978,161980,161982,161984,161986,161988,161991],{"class":201,"line":202},[199,161974,161975],{"class":205},"students ",[199,161977,895],{"class":1086},[199,161979,1906],{"class":205},[199,161981,152147],{"class":898},[199,161983,1912],{"class":205},[199,161985,153195],{"class":898},[199,161987,1912],{"class":205},[199,161989,161990],{"class":898},"\"小刚\"",[199,161992,1932],{"class":205},[199,161994,161995],{"class":201,"line":36},[199,161996,907],{"emptyLinePlaceholder":906},[199,161998,161999,162001,162003,162005],{"class":201,"line":73},[199,162000,5929],{"class":1086},[199,162002,154396],{"class":205},[199,162004,28886],{"class":1086},[199,162006,154401],{"class":205},[199,162008,162009,162011],{"class":201,"line":333},[199,162010,34141],{"class":1018},[199,162012,152301],{"class":205},[14,162014,162016],{"id":162015},"_47-range函数","4.7 range函数",[31,162018,162019,162022],{},[196,162020,162021],{},"range()"," 用于生成整数序列。",[190,162024,162026],{"className":33221,"code":162025,"language":33223,"meta":57,"style":57},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[196,162027,162028,162042,162060],{"__ignoreMap":57},[199,162029,162030,162032,162034,162036,162039],{"class":201,"line":202},[199,162031,36257],{"class":1018},[199,162033,1537],{"class":205},[199,162035,1909],{"class":1018},[199,162037,162038],{"class":205},")          ",[199,162040,162041],{"class":1454},"# 0,1,2,3,4\n",[199,162043,162044,162046,162048,162050,162052,162054,162057],{"class":201,"line":36},[199,162045,36257],{"class":1018},[199,162047,1537],{"class":205},[199,162049,1115],{"class":1018},[199,162051,1912],{"class":205},[199,162053,1909],{"class":1018},[199,162055,162056],{"class":205},")       ",[199,162058,162059],{"class":1454},"# 1,2,3,4\n",[199,162061,162062,162064,162066,162068,162070,162072,162074,162076,162078],{"class":201,"line":73},[199,162063,36257],{"class":1018},[199,162065,1537],{"class":205},[199,162067,1115],{"class":1018},[199,162069,1912],{"class":205},[199,162071,3528],{"class":1018},[199,162073,1912],{"class":205},[199,162075,1925],{"class":1018},[199,162077,157920],{"class":205},[199,162079,162080],{"class":1454},"# 1,3,5,7,9\n",[31,162082,162083,162084,27462],{},"配合 ",[196,162085,5929],{},[190,162087,162089],{"className":33221,"code":162088,"language":33223,"meta":57,"style":57},"for i in range(1, 6):\n    print(i)\n",[196,162090,162091,162111],{"__ignoreMap":57},[199,162092,162093,162095,162097,162099,162101,162103,162105,162107,162109],{"class":201,"line":202},[199,162094,5929],{"class":1086},[199,162096,1490],{"class":205},[199,162098,28886],{"class":1086},[199,162100,35285],{"class":1018},[199,162102,1537],{"class":205},[199,162104,1115],{"class":1018},[199,162106,1912],{"class":205},[199,162108,3428],{"class":1018},[199,162110,33628],{"class":205},[199,162112,162113,162115],{"class":201,"line":36},[199,162114,34141],{"class":1018},[199,162116,161489],{"class":205},[31,162118,11912,162119,162121],{},[196,162120,36257],{}," 的结束值不包含在内。",[14,162123,162125],{"id":162124},"_48-for循环求和","4.8 for循环求和",[190,162127,162129],{"className":33221,"code":162128,"language":33223,"meta":57,"style":57},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[196,162130,162131,162139,162143,162163,162171,162175],{"__ignoreMap":57},[199,162132,162133,162135,162137],{"class":201,"line":202},[199,162134,159519],{"class":205},[199,162136,895],{"class":1086},[199,162138,50173],{"class":1018},[199,162140,162141],{"class":201,"line":36},[199,162142,907],{"emptyLinePlaceholder":906},[199,162144,162145,162147,162149,162151,162153,162155,162157,162159,162161],{"class":201,"line":73},[199,162146,5929],{"class":1086},[199,162148,1490],{"class":205},[199,162150,28886],{"class":1086},[199,162152,35285],{"class":1018},[199,162154,1537],{"class":205},[199,162156,1115],{"class":1018},[199,162158,1912],{"class":205},[199,162160,3421],{"class":1018},[199,162162,33628],{"class":205},[199,162164,162165,162167,162169],{"class":201,"line":333},[199,162166,161566],{"class":205},[199,162168,12362],{"class":1086},[199,162170,161571],{"class":205},[199,162172,162173],{"class":201,"line":227},[199,162174,907],{"emptyLinePlaceholder":906},[199,162176,162177,162179],{"class":201,"line":238},[199,162178,33258],{"class":1018},[199,162180,161590],{"class":205},[31,162182,162183],{},"求偶数和：",[190,162185,162187],{"className":33221,"code":162186,"language":33223,"meta":57,"style":57},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[196,162188,162189,162197,162201,162221,162237,162246,162250],{"__ignoreMap":57},[199,162190,162191,162193,162195],{"class":201,"line":202},[199,162192,159519],{"class":205},[199,162194,895],{"class":1086},[199,162196,50173],{"class":1018},[199,162198,162199],{"class":201,"line":36},[199,162200,907],{"emptyLinePlaceholder":906},[199,162202,162203,162205,162207,162209,162211,162213,162215,162217,162219],{"class":201,"line":73},[199,162204,5929],{"class":1086},[199,162206,1490],{"class":205},[199,162208,28886],{"class":1086},[199,162210,35285],{"class":1018},[199,162212,1537],{"class":205},[199,162214,1115],{"class":1018},[199,162216,1912],{"class":205},[199,162218,3421],{"class":1018},[199,162220,33628],{"class":205},[199,162222,162223,162225,162227,162229,162231,162233,162235],{"class":201,"line":333},[199,162224,6005],{"class":1086},[199,162226,1490],{"class":205},[199,162228,3412],{"class":1086},[199,162230,17615],{"class":1018},[199,162232,103818],{"class":1086},[199,162234,1621],{"class":1018},[199,162236,6640],{"class":205},[199,162238,162239,162242,162244],{"class":201,"line":227},[199,162240,162241],{"class":205},"        total ",[199,162243,12362],{"class":1086},[199,162245,161571],{"class":205},[199,162247,162248],{"class":201,"line":238},[199,162249,907],{"emptyLinePlaceholder":906},[199,162251,162252,162254],{"class":201,"line":252},[199,162253,33258],{"class":1018},[199,162255,161590],{"class":205},[31,162257,162258],{},"也可以：",[190,162260,162262],{"className":33221,"code":162261,"language":33223,"meta":57,"style":57},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[196,162263,162264,162272,162276,162300,162308,162312],{"__ignoreMap":57},[199,162265,162266,162268,162270],{"class":201,"line":202},[199,162267,159519],{"class":205},[199,162269,895],{"class":1086},[199,162271,50173],{"class":1018},[199,162273,162274],{"class":201,"line":36},[199,162275,907],{"emptyLinePlaceholder":906},[199,162277,162278,162280,162282,162284,162286,162288,162290,162292,162294,162296,162298],{"class":201,"line":73},[199,162279,5929],{"class":1086},[199,162281,1490],{"class":205},[199,162283,28886],{"class":1086},[199,162285,35285],{"class":1018},[199,162287,1537],{"class":205},[199,162289,1925],{"class":1018},[199,162291,1912],{"class":205},[199,162293,3421],{"class":1018},[199,162295,1912],{"class":205},[199,162297,1925],{"class":1018},[199,162299,33628],{"class":205},[199,162301,162302,162304,162306],{"class":201,"line":333},[199,162303,161566],{"class":205},[199,162305,12362],{"class":1086},[199,162307,161571],{"class":205},[199,162309,162310],{"class":201,"line":227},[199,162311,907],{"emptyLinePlaceholder":906},[199,162313,162314,162316],{"class":201,"line":238},[199,162315,33258],{"class":1018},[199,162317,161590],{"class":205},[14,162319,162321],{"id":162320},"_49-循环嵌套","4.9 循环嵌套",[31,162323,162324],{},"嵌套循环就是循环里面再写循环。",[190,162326,162328],{"className":33221,"code":162327,"language":33223,"meta":57,"style":57},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[196,162329,162330,162350,162370],{"__ignoreMap":57},[199,162331,162332,162334,162336,162338,162340,162342,162344,162346,162348],{"class":201,"line":202},[199,162333,5929],{"class":1086},[199,162335,1490],{"class":205},[199,162337,28886],{"class":1086},[199,162339,35285],{"class":1018},[199,162341,1537],{"class":205},[199,162343,1115],{"class":1018},[199,162345,1912],{"class":205},[199,162347,1915],{"class":1018},[199,162349,33628],{"class":205},[199,162351,162352,162354,162356,162358,162360,162362,162364,162366,162368],{"class":201,"line":36},[199,162353,1937],{"class":1086},[199,162355,1978],{"class":205},[199,162357,28886],{"class":1086},[199,162359,35285],{"class":1018},[199,162361,1537],{"class":205},[199,162363,1115],{"class":1018},[199,162365,1912],{"class":205},[199,162367,1915],{"class":1018},[199,162369,33628],{"class":205},[199,162371,162372,162374,162376,162378,162381,162383,162385,162387,162390,162392,162394,162396,162398],{"class":201,"line":73},[199,162373,35293],{"class":1018},[199,162375,1537],{"class":205},[199,162377,3146],{"class":1086},[199,162379,162380],{"class":898},"\"i=",[199,162382,3974],{"class":1018},[199,162384,1548],{"class":205},[199,162386,759],{"class":1018},[199,162388,162389],{"class":898},", j=",[199,162391,3974],{"class":1018},[199,162393,3549],{"class":205},[199,162395,759],{"class":1018},[199,162397,3337],{"class":898},[199,162399,1594],{"class":205},[31,162401,162402],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162404,162406],{"id":162405},"_410-九九乘法表","4.10 九九乘法表",[190,162408,162410],{"className":33221,"code":162409,"language":33223,"meta":57,"style":57},"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",[196,162411,162412,162432,162455,162507],{"__ignoreMap":57},[199,162413,162414,162416,162418,162420,162422,162424,162426,162428,162430],{"class":201,"line":202},[199,162415,5929],{"class":1086},[199,162417,1490],{"class":205},[199,162419,28886],{"class":1086},[199,162421,35285],{"class":1018},[199,162423,1537],{"class":205},[199,162425,1115],{"class":1018},[199,162427,1912],{"class":205},[199,162429,3528],{"class":1018},[199,162431,33628],{"class":205},[199,162433,162434,162436,162438,162440,162442,162444,162446,162449,162451,162453],{"class":201,"line":36},[199,162435,1937],{"class":1086},[199,162437,1978],{"class":205},[199,162439,28886],{"class":1086},[199,162441,35285],{"class":1018},[199,162443,1537],{"class":205},[199,162445,1115],{"class":1018},[199,162447,162448],{"class":205},", i ",[199,162450,2028],{"class":1086},[199,162452,1495],{"class":1018},[199,162454,33628],{"class":205},[199,162456,162457,162459,162461,162463,162465,162467,162469,162471,162473,162475,162477,162479,162481,162483,162485,162487,162489,162491,162493,162495,162497,162499,162501,162503,162505],{"class":201,"line":73},[199,162458,35293],{"class":1018},[199,162460,1537],{"class":205},[199,162462,3146],{"class":1086},[199,162464,3337],{"class":898},[199,162466,3974],{"class":1018},[199,162468,3549],{"class":205},[199,162470,759],{"class":1018},[199,162472,3537],{"class":898},[199,162474,3974],{"class":1018},[199,162476,1548],{"class":205},[199,162478,759],{"class":1018},[199,162480,895],{"class":898},[199,162482,3974],{"class":1018},[199,162484,102407],{"class":205},[199,162486,3537],{"class":1086},[199,162488,6311],{"class":205},[199,162490,759],{"class":1018},[199,162492,3337],{"class":898},[199,162494,1912],{"class":205},[199,162496,48641],{"class":8113},[199,162498,895],{"class":1086},[199,162500,3337],{"class":898},[199,162502,4174],{"class":1018},[199,162504,3337],{"class":898},[199,162506,1594],{"class":205},[199,162508,162509,162511],{"class":201,"line":333},[199,162510,34141],{"class":1018},[199,162512,4892],{"class":205},[31,162514,162515],{},"关键点：",[24,162517,162518,162524,162530,162536],{},[27,162519,162520,162521,162523],{},"外层 ",[196,162522,1548],{}," 控制行。",[27,162525,162526,162527,162529],{},"内层 ",[196,162528,3549],{}," 控制列。",[27,162531,162532,162533,162535],{},"每行结束后用 ",[196,162534,148731],{}," 换行。",[27,162537,162538,162541],{},[196,162539,162540],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162543,162545],{"id":162544},"_411-循环else","4.11 循环else",[31,162547,162548,162549,162551,162552,162554,162555,162557],{},"Python 的循环可以带 ",[196,162550,4626],{},"。当循环正常结束时执行 ",[196,162553,4626],{},"，如果被 ",[196,162556,4969],{}," 打断，则不执行。",[190,162559,162561],{"className":33221,"code":162560,"language":33223,"meta":57,"style":57},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[196,162562,162563,162583,162595,162606,162610,162616],{"__ignoreMap":57},[199,162564,162565,162567,162569,162571,162573,162575,162577,162579,162581],{"class":201,"line":202},[199,162566,5929],{"class":1086},[199,162568,1490],{"class":205},[199,162570,28886],{"class":1086},[199,162572,35285],{"class":1018},[199,162574,1537],{"class":205},[199,162576,1115],{"class":1018},[199,162578,1912],{"class":205},[199,162580,3428],{"class":1018},[199,162582,33628],{"class":205},[199,162584,162585,162587,162589,162591,162593],{"class":201,"line":36},[199,162586,6005],{"class":1086},[199,162588,1490],{"class":205},[199,162590,5853],{"class":1086},[199,162592,4954],{"class":1018},[199,162594,6640],{"class":205},[199,162596,162597,162599,162601,162604],{"class":201,"line":73},[199,162598,35293],{"class":1018},[199,162600,1537],{"class":205},[199,162602,162603],{"class":898},"\"找到了\"",[199,162605,1594],{"class":205},[199,162607,162608],{"class":201,"line":333},[199,162609,34469],{"class":1086},[199,162611,162612,162614],{"class":201,"line":227},[199,162613,4626],{"class":1086},[199,162615,6640],{"class":205},[199,162617,162618,162620,162622,162625],{"class":201,"line":238},[199,162619,34141],{"class":1018},[199,162621,1537],{"class":205},[199,162623,162624],{"class":898},"\"没找到\"",[199,162626,1594],{"class":205},[31,162628,162629],{},"常用于搜索。",[190,162631,162633],{"className":33221,"code":162632,"language":33223,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[196,162634,162635,162656,162665,162669,162681,162692,162702,162706,162712],{"__ignoreMap":57},[199,162636,162637,162640,162642,162644,162646,162648,162650,162652,162654],{"class":201,"line":202},[199,162638,162639],{"class":205},"names ",[199,162641,895],{"class":1086},[199,162643,1906],{"class":205},[199,162645,152147],{"class":898},[199,162647,1912],{"class":205},[199,162649,153195],{"class":898},[199,162651,1912],{"class":205},[199,162653,161990],{"class":898},[199,162655,1932],{"class":205},[199,162657,162658,162660,162662],{"class":201,"line":36},[199,162659,113837],{"class":205},[199,162661,895],{"class":1086},[199,162663,162664],{"class":898}," \"小李\"\n",[199,162666,162667],{"class":201,"line":73},[199,162668,907],{"emptyLinePlaceholder":906},[199,162670,162671,162673,162676,162678],{"class":201,"line":333},[199,162672,5929],{"class":1086},[199,162674,162675],{"class":205}," name ",[199,162677,28886],{"class":1086},[199,162679,162680],{"class":205}," names:\n",[199,162682,162683,162685,162687,162689],{"class":201,"line":227},[199,162684,6005],{"class":1086},[199,162686,162675],{"class":205},[199,162688,5853],{"class":1086},[199,162690,162691],{"class":205}," target:\n",[199,162693,162694,162696,162698,162700],{"class":201,"line":238},[199,162695,35293],{"class":1018},[199,162697,1537],{"class":205},[199,162699,162603],{"class":898},[199,162701,1594],{"class":205},[199,162703,162704],{"class":201,"line":252},[199,162705,34469],{"class":1086},[199,162707,162708,162710],{"class":201,"line":388},[199,162709,4626],{"class":1086},[199,162711,6640],{"class":205},[199,162713,162714,162716,162718,162720],{"class":201,"line":415},[199,162715,34141],{"class":1018},[199,162717,1537],{"class":205},[199,162719,162624],{"class":898},[199,162721,1594],{"class":205},[14,162723,162725],{"id":162724},"_412-小案例登录重试","4.12 小案例：登录重试",[31,162727,125551],{},[24,162729,162730,162733,162736],{},[27,162731,162732],{},"用户最多输入 3 次密码。",[27,162734,162735],{},"密码正确则登录成功。",[27,162737,162738],{},"3 次都错误则锁定账号。",[31,162740,12898],{},[190,162742,162744],{"className":33221,"code":162743,"language":33223,"meta":57,"style":57},"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",[196,162745,162746,162756,162760,162776,162792,162796,162808,162819,162823,162829,162854,162860],{"__ignoreMap":57},[199,162747,162748,162751,162753],{"class":201,"line":202},[199,162749,162750],{"class":205},"password ",[199,162752,895],{"class":1086},[199,162754,162755],{"class":898}," \"123456\"\n",[199,162757,162758],{"class":201,"line":36},[199,162759,907],{"emptyLinePlaceholder":906},[199,162761,162762,162764,162766,162768,162770,162772,162774],{"class":201,"line":73},[199,162763,5929],{"class":1086},[199,162765,1490],{"class":205},[199,162767,28886],{"class":1086},[199,162769,35285],{"class":1018},[199,162771,1537],{"class":205},[199,162773,1920],{"class":1018},[199,162775,33628],{"class":205},[199,162777,162778,162781,162783,162785,162787,162790],{"class":201,"line":333},[199,162779,162780],{"class":205},"    user_password ",[199,162782,895],{"class":1086},[199,162784,62864],{"class":1018},[199,162786,1537],{"class":205},[199,162788,162789],{"class":898},"\"请输入密码:\"",[199,162791,1594],{"class":205},[199,162793,162794],{"class":201,"line":227},[199,162795,907],{"emptyLinePlaceholder":906},[199,162797,162798,162800,162803,162805],{"class":201,"line":238},[199,162799,6005],{"class":1086},[199,162801,162802],{"class":205}," user_password ",[199,162804,5853],{"class":1086},[199,162806,162807],{"class":205}," password:\n",[199,162809,162810,162812,162814,162817],{"class":201,"line":252},[199,162811,35293],{"class":1018},[199,162813,1537],{"class":205},[199,162815,162816],{"class":898},"\"登录成功\"",[199,162818,1594],{"class":205},[199,162820,162821],{"class":201,"line":388},[199,162822,34469],{"class":1086},[199,162824,162825,162827],{"class":201,"line":415},[199,162826,160281],{"class":1086},[199,162828,6640],{"class":205},[199,162830,162831,162833,162835,162837,162840,162843,162845,162847,162849,162852],{"class":201,"line":426},[199,162832,35293],{"class":1018},[199,162834,1537],{"class":205},[199,162836,3146],{"class":1086},[199,162838,162839],{"class":898},"\"密码错误，还剩",[199,162841,162842],{"class":1018},"{2",[199,162844,1958],{"class":1086},[199,162846,5936],{"class":205},[199,162848,759],{"class":1018},[199,162850,162851],{"class":898},"次机会\"",[199,162853,1594],{"class":205},[199,162855,162856,162858],{"class":201,"line":1015},[199,162857,4626],{"class":1086},[199,162859,6640],{"class":205},[199,162861,162862,162864,162866,162869],{"class":201,"line":1031},[199,162863,34141],{"class":1018},[199,162865,1537],{"class":205},[199,162867,162868],{"class":898},"\"账号已锁定\"",[199,162870,1594],{"class":205},[14,162872,162874],{"id":162873},"_413-小案例菜单程序","4.13 小案例：菜单程序",[190,162876,162878],{"className":33221,"code":162877,"language":33223,"meta":57,"style":57},"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",[196,162879,162880,162888,162899,162910,162921,162932,162943,162947,162962,162966,162978,162989,163001,163012,163024,163035,163047,163057,163061,163067],{"__ignoreMap":57},[199,162881,162882,162884,162886],{"class":201,"line":202},[199,162883,110922],{"class":1086},[199,162885,97551],{"class":1018},[199,162887,6640],{"class":205},[199,162889,162890,162892,162894,162897],{"class":201,"line":36},[199,162891,34141],{"class":1018},[199,162893,1537],{"class":205},[199,162895,162896],{"class":898},"\"====== 菜单 ======\"",[199,162898,1594],{"class":205},[199,162900,162901,162903,162905,162908],{"class":201,"line":73},[199,162902,34141],{"class":1018},[199,162904,1537],{"class":205},[199,162906,162907],{"class":898},"\"1. 查询余额\"",[199,162909,1594],{"class":205},[199,162911,162912,162914,162916,162919],{"class":201,"line":333},[199,162913,34141],{"class":1018},[199,162915,1537],{"class":205},[199,162917,162918],{"class":898},"\"2. 存款\"",[199,162920,1594],{"class":205},[199,162922,162923,162925,162927,162930],{"class":201,"line":227},[199,162924,34141],{"class":1018},[199,162926,1537],{"class":205},[199,162928,162929],{"class":898},"\"3. 取款\"",[199,162931,1594],{"class":205},[199,162933,162934,162936,162938,162941],{"class":201,"line":238},[199,162935,34141],{"class":1018},[199,162937,1537],{"class":205},[199,162939,162940],{"class":898},"\"0. 退出\"",[199,162942,1594],{"class":205},[199,162944,162945],{"class":201,"line":252},[199,162946,907],{"emptyLinePlaceholder":906},[199,162948,162949,162952,162954,162956,162958,162960],{"class":201,"line":388},[199,162950,162951],{"class":205},"    choice ",[199,162953,895],{"class":1086},[199,162955,62864],{"class":1018},[199,162957,1537],{"class":205},[199,162959,155332],{"class":898},[199,162961,1594],{"class":205},[199,162963,162964],{"class":201,"line":415},[199,162965,907],{"emptyLinePlaceholder":906},[199,162967,162968,162970,162972,162974,162976],{"class":201,"line":426},[199,162969,6005],{"class":1086},[199,162971,155345],{"class":205},[199,162973,5853],{"class":1086},[199,162975,155350],{"class":898},[199,162977,6640],{"class":205},[199,162979,162980,162982,162984,162987],{"class":201,"line":1015},[199,162981,35293],{"class":1018},[199,162983,1537],{"class":205},[199,162985,162986],{"class":898},"\"余额为1000元\"",[199,162988,1594],{"class":205},[199,162990,162991,162993,162995,162997,162999],{"class":201,"line":1031},[199,162992,42134],{"class":1086},[199,162994,155345],{"class":205},[199,162996,5853],{"class":1086},[199,162998,155369],{"class":898},[199,163000,6640],{"class":205},[199,163002,163003,163005,163007,163010],{"class":201,"line":1043},[199,163004,35293],{"class":1018},[199,163006,1537],{"class":205},[199,163008,163009],{"class":898},"\"存款功能\"",[199,163011,1594],{"class":205},[199,163013,163014,163016,163018,163020,163022],{"class":201,"line":1049},[199,163015,42134],{"class":1086},[199,163017,155345],{"class":205},[199,163019,5853],{"class":1086},[199,163021,155387],{"class":898},[199,163023,6640],{"class":205},[199,163025,163026,163028,163030,163033],{"class":201,"line":1054},[199,163027,35293],{"class":1018},[199,163029,1537],{"class":205},[199,163031,163032],{"class":898},"\"取款功能\"",[199,163034,1594],{"class":205},[199,163036,163037,163039,163041,163043,163045],{"class":201,"line":1062},[199,163038,42134],{"class":1086},[199,163040,155345],{"class":205},[199,163042,5853],{"class":1086},[199,163044,155441],{"class":898},[199,163046,6640],{"class":205},[199,163048,163049,163051,163053,163055],{"class":201,"line":1075},[199,163050,35293],{"class":1018},[199,163052,1537],{"class":205},[199,163054,155452],{"class":898},[199,163056,1594],{"class":205},[199,163058,163059],{"class":201,"line":1092},[199,163060,34469],{"class":1086},[199,163062,163063,163065],{"class":201,"line":1107},[199,163064,160281],{"class":1086},[199,163066,6640],{"class":205},[199,163068,163069,163071,163073,163075],{"class":201,"line":1128},[199,163070,35293],{"class":1018},[199,163072,1537],{"class":205},[199,163074,155473],{"class":898},[199,163076,1594],{"class":205},[31,163078,163079,163080,163082,163083,31228],{},"菜单类程序通常使用 ",[196,163081,161781],{},"，用户选择退出时 ",[196,163084,4969],{},[14,163086,163088],{"id":163087},"_414-易错点","4.14 易错点",[24,163090,163091,163096,163102,163110,163116],{},[27,163092,163093,163095],{},[196,163094,110922],{}," 循环必须更新控制变量。",[27,163097,163098,163101],{},[196,163099,163100],{},"range(1, 10)"," 不包含 10。",[27,163103,163104,163106,163107,163109],{},[196,163105,4969],{}," 结束整个循环，",[196,163108,156931],{}," 只跳过本轮。",[27,163111,163112,163113,163115],{},"嵌套循环中，",[196,163114,4969],{}," 只跳出当前所在的一层循环。",[27,163117,163118],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,163120,163122],{"id":163121},"_415-本章练习","4.15 本章练习",[24,163124,163125,163128,163131,163134,163137],{},[27,163126,163127],{},"输出 1 到 100。",[27,163129,163130],{},"计算 1 到 100 的偶数和。",[27,163132,163133],{},"输出 100 以内能被 3 和 5 同时整除的数。",[27,163135,163136],{},"编写猜数字游戏，限制最多猜 7 次。",[27,163138,163139],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1002,163141,163142],{},"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":57,"searchDepth":36,"depth":36,"links":163144},[163145,163146,163147,163148,163149,163153,163154,163155,163156,163157,163158,163159,163160,163161,163162],{"id":161401,"depth":36,"text":161402},{"id":161431,"depth":36,"text":161432},{"id":161520,"depth":36,"text":161521},{"id":161614,"depth":36,"text":161615},{"id":161788,"depth":36,"text":161789,"children":163150},[163151,163152],{"id":161792,"depth":73,"text":161793},{"id":161856,"depth":73,"text":161857},{"id":161920,"depth":36,"text":161921},{"id":162015,"depth":36,"text":162016},{"id":162124,"depth":36,"text":162125},{"id":162320,"depth":36,"text":162321},{"id":162405,"depth":36,"text":162406},{"id":162544,"depth":36,"text":162545},{"id":162724,"depth":36,"text":162725},{"id":162873,"depth":36,"text":162874},{"id":163087,"depth":36,"text":163088},{"id":163121,"depth":36,"text":163122},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161393,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163169,"title":163170,"body":163171,"description":3023,"extension":3024,"meta":165176,"navigation":906,"path":165177,"seo":165178,"stem":165179,"__hash__":165180},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163172,"toc":165156},[163173,163176,163180,163183,163186,163200,163203,163217,163221,163223,163242,163244,163291,163293,163307,163311,163385,163388,163392,163395,163454,163462,163465,163518,163521,163525,163530,163585,163593,163643,163647,163652,163660,163759,163765,163769,163774,163777,163788,163829,163842,163846,163849,163885,163888,163901,163904,163964,163968,163972,163975,164026,164030,164033,164080,164086,164152,164155,164159,164162,164278,164281,164285,164288,164394,164398,164401,164439,164442,164484,164487,164547,164550,164554,165018,165021,165025,165052,165058,165119,165123,165153],[10,163174,163170],{"id":163175},"_5-函数基础",[14,163177,163179],{"id":163178},"_51-为什么需要函数","5.1 为什么需要函数",[31,163181,163182],{},"函数用于封装一段可以重复使用的代码。",[31,163184,163185],{},"不使用函数的问题：",[24,163187,163188,163191,163194,163197],{},[27,163189,163190],{},"重复代码多。",[27,163192,163193],{},"修改逻辑时容易漏改。",[27,163195,163196],{},"主流程不清晰。",[27,163198,163199],{},"程序越写越长，难以维护。",[31,163201,163202],{},"使用函数后的好处：",[24,163204,163205,163208,163211,163214],{},[27,163206,163207],{},"提高复用性。",[27,163209,163210],{},"提高可读性。",[27,163212,163213],{},"便于调试。",[27,163215,163216],{},"便于分工。",[14,163218,163220],{"id":163219},"_52-函数定义","5.2 函数定义",[31,163222,8078],{},[190,163224,163226],{"className":33221,"code":163225,"language":33223,"meta":57,"style":57},"def 函数名():\n    函数体\n",[196,163227,163228,163237],{"__ignoreMap":57},[199,163229,163230,163232,163235],{"class":201,"line":202},[199,163231,34789],{"class":1086},[199,163233,163234],{"class":878}," 函数名",[199,163236,34795],{"class":205},[199,163238,163239],{"class":201,"line":36},[199,163240,163241],{"class":205},"    函数体\n",[31,163243,17994],{},[190,163245,163247],{"className":33221,"code":163246,"language":33223,"meta":57,"style":57},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[196,163248,163249,163258,163268,163278,163282,163286],{"__ignoreMap":57},[199,163250,163251,163253,163256],{"class":201,"line":202},[199,163252,34789],{"class":1086},[199,163254,163255],{"class":878}," say_hello",[199,163257,34795],{"class":205},[199,163259,163260,163262,163264,163266],{"class":201,"line":36},[199,163261,34141],{"class":1018},[199,163263,1537],{"class":205},[199,163265,8741],{"class":898},[199,163267,1594],{"class":205},[199,163269,163270,163272,163274,163276],{"class":201,"line":73},[199,163271,34141],{"class":1018},[199,163273,1537],{"class":205},[199,163275,148898],{"class":898},[199,163277,1594],{"class":205},[199,163279,163280],{"class":201,"line":333},[199,163281,907],{"emptyLinePlaceholder":906},[199,163283,163284],{"class":201,"line":227},[199,163285,907],{"emptyLinePlaceholder":906},[199,163287,163288],{"class":201,"line":238},[199,163289,163290],{"class":205},"say_hello()\n",[31,163292,11912],{},[24,163294,163295,163298,163301,163304],{},[27,163296,163297],{},"函数必须先定义，再调用。",[27,163299,163300],{},"函数名遵循变量命名规则。",[27,163302,163303],{},"函数体需要缩进。",[27,163305,163306],{},"函数不调用就不会执行。",[14,163308,163310],{"id":163309},"_53-函数调用","5.3 函数调用",[190,163312,163314],{"className":33221,"code":163313,"language":33223,"meta":57,"style":57},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[196,163315,163316,163325,163336,163347,163358,163368,163372,163376,163381],{"__ignoreMap":57},[199,163317,163318,163320,163323],{"class":201,"line":202},[199,163319,34789],{"class":1086},[199,163321,163322],{"class":878}," print_menu",[199,163324,34795],{"class":205},[199,163326,163327,163329,163331,163334],{"class":201,"line":36},[199,163328,34141],{"class":1018},[199,163330,1537],{"class":205},[199,163332,163333],{"class":898},"\"1. 查询\"",[199,163335,1594],{"class":205},[199,163337,163338,163340,163342,163345],{"class":201,"line":73},[199,163339,34141],{"class":1018},[199,163341,1537],{"class":205},[199,163343,163344],{"class":898},"\"2. 添加\"",[199,163346,1594],{"class":205},[199,163348,163349,163351,163353,163356],{"class":201,"line":333},[199,163350,34141],{"class":1018},[199,163352,1537],{"class":205},[199,163354,163355],{"class":898},"\"3. 删除\"",[199,163357,1594],{"class":205},[199,163359,163360,163362,163364,163366],{"class":201,"line":227},[199,163361,34141],{"class":1018},[199,163363,1537],{"class":205},[199,163365,162940],{"class":898},[199,163367,1594],{"class":205},[199,163369,163370],{"class":201,"line":238},[199,163371,907],{"emptyLinePlaceholder":906},[199,163373,163374],{"class":201,"line":252},[199,163375,907],{"emptyLinePlaceholder":906},[199,163377,163378],{"class":201,"line":388},[199,163379,163380],{"class":205},"print_menu()\n",[199,163382,163383],{"class":201,"line":415},[199,163384,163380],{"class":205},[31,163386,163387],{},"函数可以多次调用，每次调用都会执行函数体。",[14,163389,163391],{"id":163390},"_54-参数","5.4 参数",[31,163393,163394],{},"参数用于向函数传递数据。",[190,163396,163398],{"className":33221,"code":163397,"language":33223,"meta":57,"style":57},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[196,163399,163400,163409,163429,163433,163437,163446],{"__ignoreMap":57},[199,163401,163402,163404,163406],{"class":201,"line":202},[199,163403,34789],{"class":1086},[199,163405,163255],{"class":878},[199,163407,163408],{"class":205},"(name):\n",[199,163410,163411,163413,163415,163417,163419,163421,163423,163425,163427],{"class":201,"line":36},[199,163412,34141],{"class":1018},[199,163414,1537],{"class":205},[199,163416,3146],{"class":1086},[199,163418,159313],{"class":898},[199,163420,3974],{"class":1018},[199,163422,82069],{"class":205},[199,163424,759],{"class":1018},[199,163426,3337],{"class":898},[199,163428,1594],{"class":205},[199,163430,163431],{"class":201,"line":73},[199,163432,907],{"emptyLinePlaceholder":906},[199,163434,163435],{"class":201,"line":333},[199,163436,907],{"emptyLinePlaceholder":906},[199,163438,163439,163442,163444],{"class":201,"line":227},[199,163440,163441],{"class":205},"say_hello(",[199,163443,152147],{"class":898},[199,163445,1594],{"class":205},[199,163447,163448,163450,163452],{"class":201,"line":238},[199,163449,163441],{"class":205},[199,163451,153195],{"class":898},[199,163453,1594],{"class":205},[31,163455,163456,163458,163459,163461],{},[196,163457,82069],{}," 是形参，",[196,163460,152147],{}," 是实参。",[31,163463,163464],{},"多个参数：",[190,163466,163468],{"className":33221,"code":163467,"language":33223,"meta":57,"style":57},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[196,163469,163470,163478,163491,163497,163501,163505],{"__ignoreMap":57},[199,163471,163472,163474,163476],{"class":201,"line":202},[199,163473,34789],{"class":1086},[199,163475,8106],{"class":878},[199,163477,153352],{"class":205},[199,163479,163480,163483,163485,163487,163489],{"class":201,"line":36},[199,163481,163482],{"class":205},"    result ",[199,163484,895],{"class":1086},[199,163486,13732],{"class":205},[199,163488,2028],{"class":1086},[199,163490,153363],{"class":205},[199,163492,163493,163495],{"class":201,"line":73},[199,163494,34141],{"class":1018},[199,163496,78844],{"class":205},[199,163498,163499],{"class":201,"line":333},[199,163500,907],{"emptyLinePlaceholder":906},[199,163502,163503],{"class":201,"line":227},[199,163504,907],{"emptyLinePlaceholder":906},[199,163506,163507,163510,163512,163514,163516],{"class":201,"line":238},[199,163508,163509],{"class":205},"add(",[199,163511,3528],{"class":1018},[199,163513,1912],{"class":205},[199,163515,3779],{"class":1018},[199,163517,1594],{"class":205},[31,163519,163520],{},"调用时参数数量必须匹配。",[14,163522,163524],{"id":163523},"_55-返回值","5.5 返回值",[31,163526,163527,163529],{},[196,163528,19891],{}," 用于把函数内部的结果返回给调用者。",[190,163531,163533],{"className":33221,"code":163532,"language":33223,"meta":57,"style":57},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[196,163534,163535,163543,163553,163557,163561,163579],{"__ignoreMap":57},[199,163536,163537,163539,163541],{"class":201,"line":202},[199,163538,34789],{"class":1086},[199,163540,8106],{"class":878},[199,163542,153352],{"class":205},[199,163544,163545,163547,163549,163551],{"class":201,"line":36},[199,163546,6989],{"class":1086},[199,163548,13732],{"class":205},[199,163550,2028],{"class":1086},[199,163552,153363],{"class":205},[199,163554,163555],{"class":201,"line":73},[199,163556,907],{"emptyLinePlaceholder":906},[199,163558,163559],{"class":201,"line":333},[199,163560,907],{"emptyLinePlaceholder":906},[199,163562,163563,163566,163568,163571,163573,163575,163577],{"class":201,"line":227},[199,163564,163565],{"class":205},"result ",[199,163567,895],{"class":1086},[199,163569,163570],{"class":205}," add(",[199,163572,3528],{"class":1018},[199,163574,1912],{"class":205},[199,163576,3779],{"class":1018},[199,163578,1594],{"class":205},[199,163580,163581,163583],{"class":201,"line":238},[199,163582,33258],{"class":1018},[199,163584,78844],{"class":205},[31,163586,163587,163588,163590,163591,31228],{},"如果函数没有写 ",[196,163589,19891],{},"，默认返回 ",[196,163592,97945],{},[190,163594,163596],{"className":33221,"code":163595,"language":33223,"meta":57,"style":57},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[196,163597,163598,163606,163616,163620,163624,163633],{"__ignoreMap":57},[199,163599,163600,163602,163604],{"class":201,"line":202},[199,163601,34789],{"class":1086},[199,163603,163255],{"class":878},[199,163605,34795],{"class":205},[199,163607,163608,163610,163612,163614],{"class":201,"line":36},[199,163609,34141],{"class":1018},[199,163611,1537],{"class":205},[199,163613,8741],{"class":898},[199,163615,1594],{"class":205},[199,163617,163618],{"class":201,"line":73},[199,163619,907],{"emptyLinePlaceholder":906},[199,163621,163622],{"class":201,"line":333},[199,163623,907],{"emptyLinePlaceholder":906},[199,163625,163626,163628,163630],{"class":201,"line":227},[199,163627,163565],{"class":205},[199,163629,895],{"class":1086},[199,163631,163632],{"class":205}," say_hello()\n",[199,163634,163635,163637,163640],{"class":201,"line":238},[199,163636,33258],{"class":1018},[199,163638,163639],{"class":205},"(result)  ",[199,163641,163642],{"class":1454},"# None\n",[14,163644,163646],{"id":163645},"_56-return的作用","5.6 return的作用",[31,163648,163649,163651],{},[196,163650,19891],{}," 有两个作用：",[24,163653,163654,163657],{},[27,163655,163656],{},"返回结果。",[27,163658,163659],{},"结束函数。",[190,163661,163663],{"className":33221,"code":163662,"language":33223,"meta":57,"style":57},"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",[196,163664,163665,163675,163687,163694,163698,163710,163717,163721,163728,163732,163736,163747],{"__ignoreMap":57},[199,163666,163667,163669,163672],{"class":201,"line":202},[199,163668,34789],{"class":1086},[199,163670,163671],{"class":878}," check_age",[199,163673,163674],{"class":205},"(age):\n",[199,163676,163677,163679,163681,163683,163685],{"class":201,"line":36},[199,163678,6005],{"class":1086},[199,163680,18565],{"class":205},[199,163682,887],{"class":1086},[199,163684,1621],{"class":1018},[199,163686,6640],{"class":205},[199,163688,163689,163691],{"class":201,"line":73},[199,163690,17612],{"class":1086},[199,163692,163693],{"class":898}," \"年龄不合法\"\n",[199,163695,163696],{"class":201,"line":333},[199,163697,907],{"emptyLinePlaceholder":906},[199,163699,163700,163702,163704,163706,163708],{"class":201,"line":227},[199,163701,6005],{"class":1086},[199,163703,18565],{"class":205},[199,163705,4635],{"class":1086},[199,163707,158544],{"class":1018},[199,163709,6640],{"class":205},[199,163711,163712,163714],{"class":201,"line":238},[199,163713,17612],{"class":1086},[199,163715,163716],{"class":898}," \"成年人\"\n",[199,163718,163719],{"class":201,"line":252},[199,163720,907],{"emptyLinePlaceholder":906},[199,163722,163723,163725],{"class":201,"line":388},[199,163724,6989],{"class":1086},[199,163726,163727],{"class":898}," \"未成年人\"\n",[199,163729,163730],{"class":201,"line":415},[199,163731,907],{"emptyLinePlaceholder":906},[199,163733,163734],{"class":201,"line":426},[199,163735,907],{"emptyLinePlaceholder":906},[199,163737,163738,163740,163743,163745],{"class":201,"line":1015},[199,163739,33258],{"class":1018},[199,163741,163742],{"class":205},"(check_age(",[199,163744,3779],{"class":1018},[199,163746,1554],{"class":205},[199,163748,163749,163751,163753,163755,163757],{"class":201,"line":1031},[199,163750,33258],{"class":1018},[199,163752,163742],{"class":205},[199,163754,1998],{"class":1086},[199,163756,1115],{"class":1018},[199,163758,1554],{"class":205},[31,163760,163761,163762,163764],{},"函数执行到 ",[196,163763,19891],{}," 后，后面的代码不会继续执行。",[14,163766,163768],{"id":163767},"_57-none","5.7 None",[31,163770,163771,163773],{},[196,163772,97945],{}," 表示空值或没有结果。",[31,163775,163776],{},"常见使用场景：",[24,163778,163779,163782,163785],{},[27,163780,163781],{},"函数没有返回值。",[27,163783,163784],{},"变量暂时没有具体值。",[27,163786,163787],{},"表示查询不到结果。",[190,163789,163791],{"className":33221,"code":163790,"language":33223,"meta":57,"style":57},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[196,163792,163793,163801,163805,163818],{"__ignoreMap":57},[199,163794,163795,163797,163799],{"class":201,"line":202},[199,163796,163565],{"class":205},[199,163798,895],{"class":1086},[199,163800,154431],{"class":1018},[199,163802,163803],{"class":201,"line":36},[199,163804,907],{"emptyLinePlaceholder":906},[199,163806,163807,163809,163812,163814,163816],{"class":201,"line":73},[199,163808,4470],{"class":1086},[199,163810,163811],{"class":205}," result ",[199,163813,41768],{"class":1086},[199,163815,41774],{"class":1018},[199,163817,6640],{"class":205},[199,163819,163820,163822,163824,163827],{"class":201,"line":333},[199,163821,34141],{"class":1018},[199,163823,1537],{"class":205},[199,163825,163826],{"class":898},"\"没有数据\"",[199,163828,1594],{"class":205},[31,163830,163831,163832,163834,163835,163838,163839,31228],{},"判断 ",[196,163833,97945],{}," 推荐使用 ",[196,163836,163837],{},"is None","，不要写成 ",[196,163840,163841],{},"== None",[14,163843,163845],{"id":163844},"_58-函数文档字符串","5.8 函数文档字符串",[31,163847,163848],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[190,163850,163852],{"className":33221,"code":163851,"language":33223,"meta":57,"style":57},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[196,163853,163854,163864,163869],{"__ignoreMap":57},[199,163855,163856,163858,163861],{"class":201,"line":202},[199,163857,34789],{"class":1086},[199,163859,163860],{"class":878}," calculate_bmi",[199,163862,163863],{"class":205},"(weight, height):\n",[199,163865,163866],{"class":201,"line":36},[199,163867,163868],{"class":898},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[199,163870,163871,163873,163876,163878,163881,163883],{"class":201,"line":73},[199,163872,6989],{"class":1086},[199,163874,163875],{"class":205}," weight ",[199,163877,3664],{"class":1086},[199,163879,163880],{"class":205}," height ",[199,163882,13524],{"class":1086},[199,163884,50563],{"class":1018},[31,163886,163887],{},"查看说明：",[190,163889,163891],{"className":33221,"code":163890,"language":33223,"meta":57,"style":57},"help(calculate_bmi)\n",[196,163892,163893],{"__ignoreMap":57},[199,163894,163895,163898],{"class":201,"line":202},[199,163896,163897],{"class":1018},"help",[199,163899,163900],{"class":205},"(calculate_bmi)\n",[31,163902,163903],{},"较完整的写法：",[190,163905,163907],{"className":33221,"code":163906,"language":33223,"meta":57,"style":57},"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",[196,163908,163909,163917,163922,163927,163931,163936,163941,163946,163950],{"__ignoreMap":57},[199,163910,163911,163913,163915],{"class":201,"line":202},[199,163912,34789],{"class":1086},[199,163914,163860],{"class":878},[199,163916,163863],{"class":205},[199,163918,163919],{"class":201,"line":36},[199,163920,163921],{"class":898},"    \"\"\"\n",[199,163923,163924],{"class":201,"line":73},[199,163925,163926],{"class":898},"    计算BMI。\n",[199,163928,163929],{"class":201,"line":333},[199,163930,907],{"emptyLinePlaceholder":906},[199,163932,163933],{"class":201,"line":227},[199,163934,163935],{"class":898},"    :param weight: 体重，单位kg\n",[199,163937,163938],{"class":201,"line":238},[199,163939,163940],{"class":898},"    :param height: 身高，单位m\n",[199,163942,163943],{"class":201,"line":252},[199,163944,163945],{"class":898},"    :return: BMI数值\n",[199,163947,163948],{"class":201,"line":388},[199,163949,163921],{"class":898},[199,163951,163952,163954,163956,163958,163960,163962],{"class":201,"line":415},[199,163953,6989],{"class":1086},[199,163955,163875],{"class":205},[199,163957,3664],{"class":1086},[199,163959,163880],{"class":205},[199,163961,13524],{"class":1086},[199,163963,50563],{"class":1018},[14,163965,163967],{"id":163966},"_59-变量作用域","5.9 变量作用域",[19,163969,163971],{"id":163970},"_591-局部变量","5.9.1 局部变量",[31,163973,163974],{},"在函数内部定义的变量，只能在函数内部使用。",[190,163976,163978],{"className":33221,"code":163977,"language":33223,"meta":57,"style":57},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[196,163979,163980,163989,163997,164003,164007,164011,164016],{"__ignoreMap":57},[199,163981,163982,163984,163987],{"class":201,"line":202},[199,163983,34789],{"class":1086},[199,163985,163986],{"class":878}," test",[199,163988,34795],{"class":205},[199,163990,163991,163993,163995],{"class":201,"line":36},[199,163992,48433],{"class":205},[199,163994,895],{"class":1086},[199,163996,60687],{"class":1018},[199,163998,163999,164001],{"class":201,"line":73},[199,164000,34141],{"class":1018},[199,164002,3109],{"class":205},[199,164004,164005],{"class":201,"line":333},[199,164006,907],{"emptyLinePlaceholder":906},[199,164008,164009],{"class":201,"line":227},[199,164010,907],{"emptyLinePlaceholder":906},[199,164012,164013],{"class":201,"line":238},[199,164014,164015],{"class":205},"test()\n",[199,164017,164018,164020,164023],{"class":201,"line":252},[199,164019,33258],{"class":1018},[199,164021,164022],{"class":205},"(num)  ",[199,164024,164025],{"class":1454},"# 报错\n",[19,164027,164029],{"id":164028},"_592-全局变量","5.9.2 全局变量",[31,164031,164032],{},"在函数外部定义的变量，可以在函数内部读取。",[190,164034,164036],{"className":33221,"code":164035,"language":33223,"meta":57,"style":57},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[196,164037,164038,164046,164050,164054,164062,164068,164072,164076],{"__ignoreMap":57},[199,164039,164040,164042,164044],{"class":201,"line":202},[199,164041,148795],{"class":205},[199,164043,895],{"class":1086},[199,164045,151612],{"class":898},[199,164047,164048],{"class":201,"line":36},[199,164049,907],{"emptyLinePlaceholder":906},[199,164051,164052],{"class":201,"line":73},[199,164053,907],{"emptyLinePlaceholder":906},[199,164055,164056,164058,164060],{"class":201,"line":333},[199,164057,34789],{"class":1086},[199,164059,163255],{"class":878},[199,164061,34795],{"class":205},[199,164063,164064,164066],{"class":201,"line":227},[199,164065,34141],{"class":1018},[199,164067,152919],{"class":205},[199,164069,164070],{"class":201,"line":238},[199,164071,907],{"emptyLinePlaceholder":906},[199,164073,164074],{"class":201,"line":252},[199,164075,907],{"emptyLinePlaceholder":906},[199,164077,164078],{"class":201,"line":388},[199,164079,163290],{"class":205},[31,164081,164082,164083,31228],{},"如果要在函数内部修改全局变量，需要 ",[196,164084,164085],{},"global",[190,164087,164089],{"className":33221,"code":164088,"language":33223,"meta":57,"style":57},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[196,164090,164091,164099,164103,164107,164116,164124,164132,164136,164140,164145],{"__ignoreMap":57},[199,164092,164093,164095,164097],{"class":201,"line":202},[199,164094,148950],{"class":205},[199,164096,895],{"class":1086},[199,164098,50173],{"class":1018},[199,164100,164101],{"class":201,"line":36},[199,164102,907],{"emptyLinePlaceholder":906},[199,164104,164105],{"class":201,"line":73},[199,164106,907],{"emptyLinePlaceholder":906},[199,164108,164109,164111,164114],{"class":201,"line":333},[199,164110,34789],{"class":1086},[199,164112,164113],{"class":878}," add_count",[199,164115,34795],{"class":205},[199,164117,164118,164121],{"class":201,"line":227},[199,164119,164120],{"class":1086},"    global",[199,164122,164123],{"class":205}," count\n",[199,164125,164126,164128,164130],{"class":201,"line":238},[199,164127,161692],{"class":205},[199,164129,12362],{"class":1086},[199,164131,57958],{"class":1018},[199,164133,164134],{"class":201,"line":252},[199,164135,907],{"emptyLinePlaceholder":906},[199,164137,164138],{"class":201,"line":388},[199,164139,907],{"emptyLinePlaceholder":906},[199,164141,164142],{"class":201,"line":415},[199,164143,164144],{"class":205},"add_count()\n",[199,164146,164147,164149],{"class":201,"line":426},[199,164148,33258],{"class":1018},[199,164150,164151],{"class":205},"(count)\n",[31,164153,164154],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164156,164158],{"id":164157},"_510-函数嵌套调用","5.10 函数嵌套调用",[31,164160,164161],{},"一个函数中可以调用另一个函数。",[190,164163,164165],{"className":33221,"code":164164,"language":33223,"meta":57,"style":57},"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",[196,164166,164167,164176,164190,164194,164198,164207,164212,164232,164253,164257,164261,164265],{"__ignoreMap":57},[199,164168,164169,164171,164174],{"class":201,"line":202},[199,164170,34789],{"class":1086},[199,164172,164173],{"class":878}," print_line",[199,164175,34795],{"class":205},[199,164177,164178,164180,164182,164184,164186,164188],{"class":201,"line":36},[199,164179,34141],{"class":1018},[199,164181,1537],{"class":205},[199,164183,35325],{"class":898},[199,164185,9415],{"class":1086},[199,164187,80924],{"class":1018},[199,164189,1594],{"class":205},[199,164191,164192],{"class":201,"line":73},[199,164193,907],{"emptyLinePlaceholder":906},[199,164195,164196],{"class":201,"line":333},[199,164197,907],{"emptyLinePlaceholder":906},[199,164199,164200,164202,164205],{"class":201,"line":227},[199,164201,34789],{"class":1086},[199,164203,164204],{"class":878}," print_info",[199,164206,151634],{"class":205},[199,164208,164209],{"class":201,"line":238},[199,164210,164211],{"class":205},"    print_line()\n",[199,164213,164214,164216,164218,164220,164222,164224,164226,164228,164230],{"class":201,"line":252},[199,164215,34141],{"class":1018},[199,164217,1537],{"class":205},[199,164219,3146],{"class":1086},[199,164221,158941],{"class":898},[199,164223,3974],{"class":1018},[199,164225,82069],{"class":205},[199,164227,759],{"class":1018},[199,164229,3337],{"class":898},[199,164231,1594],{"class":205},[199,164233,164234,164236,164238,164240,164243,164245,164247,164249,164251],{"class":201,"line":388},[199,164235,34141],{"class":1018},[199,164237,1537],{"class":205},[199,164239,3146],{"class":1086},[199,164241,164242],{"class":898},"\"年龄:",[199,164244,3974],{"class":1018},[199,164246,72480],{"class":205},[199,164248,759],{"class":1018},[199,164250,3337],{"class":898},[199,164252,1594],{"class":205},[199,164254,164255],{"class":201,"line":415},[199,164256,164211],{"class":205},[199,164258,164259],{"class":201,"line":426},[199,164260,907],{"emptyLinePlaceholder":906},[199,164262,164263],{"class":201,"line":1015},[199,164264,907],{"emptyLinePlaceholder":906},[199,164266,164267,164270,164272,164274,164276],{"class":201,"line":1031},[199,164268,164269],{"class":205},"print_info(",[199,164271,152147],{"class":898},[199,164273,1912],{"class":205},[199,164275,3730],{"class":1018},[199,164277,1594],{"class":205},[31,164279,164280],{},"这种方式可以把小功能组合成大功能。",[14,164282,164284],{"id":164283},"_511-参数检查","5.11 参数检查",[31,164286,164287],{},"函数内部可以检查参数是否合法。",[190,164289,164291],{"className":33221,"code":164290,"language":33223,"meta":57,"style":57},"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",[196,164292,164293,164302,164314,164320,164330,164334,164338,164355,164359,164371,164382,164388],{"__ignoreMap":57},[199,164294,164295,164297,164300],{"class":201,"line":202},[199,164296,34789],{"class":1086},[199,164298,164299],{"class":878}," divide",[199,164301,153352],{"class":205},[199,164303,164304,164306,164308,164310,164312],{"class":201,"line":36},[199,164305,6005],{"class":1086},[199,164307,13745],{"class":205},[199,164309,5853],{"class":1086},[199,164311,1621],{"class":1018},[199,164313,6640],{"class":205},[199,164315,164316,164318],{"class":201,"line":73},[199,164317,17612],{"class":1086},[199,164319,154431],{"class":1018},[199,164321,164322,164324,164326,164328],{"class":201,"line":333},[199,164323,6989],{"class":1086},[199,164325,13732],{"class":205},[199,164327,3664],{"class":1086},[199,164329,153363],{"class":205},[199,164331,164332],{"class":201,"line":227},[199,164333,907],{"emptyLinePlaceholder":906},[199,164335,164336],{"class":201,"line":238},[199,164337,907],{"emptyLinePlaceholder":906},[199,164339,164340,164342,164344,164347,164349,164351,164353],{"class":201,"line":252},[199,164341,163565],{"class":205},[199,164343,895],{"class":1086},[199,164345,164346],{"class":205}," divide(",[199,164348,3528],{"class":1018},[199,164350,1912],{"class":205},[199,164352,1025],{"class":1018},[199,164354,1594],{"class":205},[199,164356,164357],{"class":201,"line":388},[199,164358,907],{"emptyLinePlaceholder":906},[199,164360,164361,164363,164365,164367,164369],{"class":201,"line":415},[199,164362,4470],{"class":1086},[199,164364,163811],{"class":205},[199,164366,41768],{"class":1086},[199,164368,41774],{"class":1018},[199,164370,6640],{"class":205},[199,164372,164373,164375,164377,164380],{"class":201,"line":426},[199,164374,34141],{"class":1018},[199,164376,1537],{"class":205},[199,164378,164379],{"class":898},"\"除数不能为0\"",[199,164381,1594],{"class":205},[199,164383,164384,164386],{"class":201,"line":1015},[199,164385,4626],{"class":1086},[199,164387,6640],{"class":205},[199,164389,164390,164392],{"class":201,"line":1031},[199,164391,34141],{"class":1018},[199,164393,78844],{"class":205},[14,164395,164397],{"id":164396},"_512-类型提示","5.12 类型提示",[31,164399,164400],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[190,164402,164404],{"className":33221,"code":164403,"language":33223,"meta":57,"style":57},"def add(a: int, b: int) -> int:\n    return a + b\n",[196,164405,164406,164429],{"__ignoreMap":57},[199,164407,164408,164410,164412,164415,164417,164420,164422,164425,164427],{"class":201,"line":202},[199,164409,34789],{"class":1086},[199,164411,8106],{"class":878},[199,164413,164414],{"class":205},"(a: ",[199,164416,3100],{"class":1018},[199,164418,164419],{"class":205},", b: ",[199,164421,3100],{"class":1018},[199,164423,164424],{"class":205},") -> ",[199,164426,3100],{"class":1018},[199,164428,6640],{"class":205},[199,164430,164431,164433,164435,164437],{"class":201,"line":36},[199,164432,6989],{"class":1086},[199,164434,13732],{"class":205},[199,164436,2028],{"class":1086},[199,164438,153363],{"class":205},[31,164440,164441],{},"字符串参数：",[190,164443,164445],{"className":33221,"code":164444,"language":33223,"meta":57,"style":57},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[196,164446,164447,164464],{"__ignoreMap":57},[199,164448,164449,164451,164453,164456,164458,164460,164462],{"class":201,"line":202},[199,164450,34789],{"class":1086},[199,164452,163255],{"class":878},[199,164454,164455],{"class":205},"(name: ",[199,164457,4242],{"class":1018},[199,164459,164424],{"class":205},[199,164461,97945],{"class":1018},[199,164463,6640],{"class":205},[199,164465,164466,164468,164470,164472,164474,164476,164478,164480,164482],{"class":201,"line":36},[199,164467,34141],{"class":1018},[199,164469,1537],{"class":205},[199,164471,3146],{"class":1086},[199,164473,159313],{"class":898},[199,164475,3974],{"class":1018},[199,164477,82069],{"class":205},[199,164479,759],{"class":1018},[199,164481,3337],{"class":898},[199,164483,1594],{"class":205},[31,164485,164486],{},"列表参数：",[190,164488,164490],{"className":33221,"code":164489,"language":33223,"meta":57,"style":57},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[196,164491,164492,164511,164519,164531,164540],{"__ignoreMap":57},[199,164493,164494,164496,164499,164502,164504,164507,164509],{"class":201,"line":202},[199,164495,34789],{"class":1086},[199,164497,164498],{"class":878}," get_total",[199,164500,164501],{"class":205},"(numbers: list[",[199,164503,3100],{"class":1018},[199,164505,164506],{"class":205},"]) -> ",[199,164508,3100],{"class":1018},[199,164510,6640],{"class":205},[199,164512,164513,164515,164517],{"class":201,"line":36},[199,164514,161566],{"class":205},[199,164516,895],{"class":1086},[199,164518,50173],{"class":1018},[199,164520,164521,164523,164526,164528],{"class":201,"line":73},[199,164522,1937],{"class":1086},[199,164524,164525],{"class":205}," number ",[199,164527,28886],{"class":1086},[199,164529,164530],{"class":205}," numbers:\n",[199,164532,164533,164535,164537],{"class":201,"line":333},[199,164534,162241],{"class":205},[199,164536,12362],{"class":1086},[199,164538,164539],{"class":205}," number\n",[199,164541,164542,164544],{"class":201,"line":227},[199,164543,6989],{"class":1086},[199,164545,164546],{"class":205}," total\n",[31,164548,164549],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164551,164553],{"id":164552},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[190,164555,164557],{"className":33221,"code":164556,"language":33223,"meta":57,"style":57},"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",[196,164558,164559,164569,164573,164577,164585,164596,164606,164616,164626,164636,164640,164644,164653,164675,164679,164683,164692,164698,164718,164730,164741,164745,164754,164765,164770,164774,164778,164787,164793,164812,164824,164834,164838,164849,164859,164863,164871,164882,164886,164890,164894,164902,164907,164921,164925,164937,164942,164954,164959,164971,164976,164988,164998,165002,165008],{"__ignoreMap":57},[199,164560,164561,164564,164566],{"class":201,"line":202},[199,164562,164563],{"class":205},"balance ",[199,164565,895],{"class":1086},[199,164567,164568],{"class":1018}," 1000\n",[199,164570,164571],{"class":201,"line":36},[199,164572,907],{"emptyLinePlaceholder":906},[199,164574,164575],{"class":201,"line":73},[199,164576,907],{"emptyLinePlaceholder":906},[199,164578,164579,164581,164583],{"class":201,"line":333},[199,164580,34789],{"class":1086},[199,164582,154292],{"class":878},[199,164584,34795],{"class":205},[199,164586,164587,164589,164591,164594],{"class":201,"line":227},[199,164588,34141],{"class":1018},[199,164590,1537],{"class":205},[199,164592,164593],{"class":898},"\"====== ATM ======\"",[199,164595,1594],{"class":205},[199,164597,164598,164600,164602,164604],{"class":201,"line":238},[199,164599,34141],{"class":1018},[199,164601,1537],{"class":205},[199,164603,162907],{"class":898},[199,164605,1594],{"class":205},[199,164607,164608,164610,164612,164614],{"class":201,"line":252},[199,164609,34141],{"class":1018},[199,164611,1537],{"class":205},[199,164613,162918],{"class":898},[199,164615,1594],{"class":205},[199,164617,164618,164620,164622,164624],{"class":201,"line":388},[199,164619,34141],{"class":1018},[199,164621,1537],{"class":205},[199,164623,162929],{"class":898},[199,164625,1594],{"class":205},[199,164627,164628,164630,164632,164634],{"class":201,"line":415},[199,164629,34141],{"class":1018},[199,164631,1537],{"class":205},[199,164633,162940],{"class":898},[199,164635,1594],{"class":205},[199,164637,164638],{"class":201,"line":426},[199,164639,907],{"emptyLinePlaceholder":906},[199,164641,164642],{"class":201,"line":1015},[199,164643,907],{"emptyLinePlaceholder":906},[199,164645,164646,164648,164651],{"class":201,"line":1031},[199,164647,34789],{"class":1086},[199,164649,164650],{"class":878}," show_balance",[199,164652,34795],{"class":205},[199,164654,164655,164657,164659,164661,164664,164666,164669,164671,164673],{"class":201,"line":1043},[199,164656,34141],{"class":1018},[199,164658,1537],{"class":205},[199,164660,3146],{"class":1086},[199,164662,164663],{"class":898},"\"当前余额:",[199,164665,3974],{"class":1018},[199,164667,164668],{"class":205},"balance",[199,164670,759],{"class":1018},[199,164672,159271],{"class":898},[199,164674,1594],{"class":205},[199,164676,164677],{"class":201,"line":1049},[199,164678,907],{"emptyLinePlaceholder":906},[199,164680,164681],{"class":201,"line":1054},[199,164682,907],{"emptyLinePlaceholder":906},[199,164684,164685,164687,164690],{"class":201,"line":1062},[199,164686,34789],{"class":1086},[199,164688,164689],{"class":878}," save_money",[199,164691,34795],{"class":205},[199,164693,164694,164696],{"class":201,"line":1075},[199,164695,164120],{"class":1086},[199,164697,152358],{"class":205},[199,164699,164700,164703,164705,164707,164709,164711,164713,164716],{"class":201,"line":1092},[199,164701,164702],{"class":205},"    money ",[199,164704,895],{"class":1086},[199,164706,112056],{"class":1018},[199,164708,1537],{"class":205},[199,164710,56080],{"class":1018},[199,164712,1537],{"class":205},[199,164714,164715],{"class":898},"\"请输入存款金额:\"",[199,164717,1554],{"class":205},[199,164719,164720,164722,164724,164726,164728],{"class":201,"line":1107},[199,164721,6005],{"class":1086},[199,164723,152401],{"class":205},[199,164725,1501],{"class":1086},[199,164727,1621],{"class":1018},[199,164729,6640],{"class":205},[199,164731,164732,164734,164736,164739],{"class":201,"line":1128},[199,164733,35293],{"class":1018},[199,164735,1537],{"class":205},[199,164737,164738],{"class":898},"\"金额必须大于0\"",[199,164740,1594],{"class":205},[199,164742,164743],{"class":201,"line":1146},[199,164744,154620],{"class":1086},[199,164746,164747,164750,164752],{"class":201,"line":1163},[199,164748,164749],{"class":205},"    balance ",[199,164751,12362],{"class":1086},[199,164753,152434],{"class":205},[199,164755,164756,164758,164760,164763],{"class":201,"line":1176},[199,164757,34141],{"class":1018},[199,164759,1537],{"class":205},[199,164761,164762],{"class":898},"\"存款成功\"",[199,164764,1594],{"class":205},[199,164766,164767],{"class":201,"line":1189},[199,164768,164769],{"class":205},"    show_balance()\n",[199,164771,164772],{"class":201,"line":1202},[199,164773,907],{"emptyLinePlaceholder":906},[199,164775,164776],{"class":201,"line":1207},[199,164777,907],{"emptyLinePlaceholder":906},[199,164779,164780,164782,164785],{"class":201,"line":1212},[199,164781,34789],{"class":1086},[199,164783,164784],{"class":878}," withdraw_money",[199,164786,34795],{"class":205},[199,164788,164789,164791],{"class":201,"line":1225},[199,164790,164120],{"class":1086},[199,164792,152358],{"class":205},[199,164794,164795,164797,164799,164801,164803,164805,164807,164810],{"class":201,"line":1236},[199,164796,164702],{"class":205},[199,164798,895],{"class":1086},[199,164800,112056],{"class":1018},[199,164802,1537],{"class":205},[199,164804,56080],{"class":1018},[199,164806,1537],{"class":205},[199,164808,164809],{"class":898},"\"请输入取款金额:\"",[199,164811,1554],{"class":205},[199,164813,164814,164816,164818,164820,164822],{"class":201,"line":1249},[199,164815,6005],{"class":1086},[199,164817,152401],{"class":205},[199,164819,1501],{"class":1086},[199,164821,1621],{"class":1018},[199,164823,6640],{"class":205},[199,164825,164826,164828,164830,164832],{"class":201,"line":1262},[199,164827,35293],{"class":1018},[199,164829,1537],{"class":205},[199,164831,164738],{"class":898},[199,164833,1594],{"class":205},[199,164835,164836],{"class":201,"line":1275},[199,164837,154620],{"class":1086},[199,164839,164840,164842,164844,164846],{"class":201,"line":1287},[199,164841,6005],{"class":1086},[199,164843,152401],{"class":205},[199,164845,1217],{"class":1086},[199,164847,164848],{"class":205}," balance:\n",[199,164850,164851,164853,164855,164857],{"class":201,"line":1292},[199,164852,35293],{"class":1018},[199,164854,1537],{"class":205},[199,164856,152496],{"class":898},[199,164858,1594],{"class":205},[199,164860,164861],{"class":201,"line":1297},[199,164862,154620],{"class":1086},[199,164864,164865,164867,164869],{"class":201,"line":1310},[199,164866,164749],{"class":205},[199,164868,152511],{"class":1086},[199,164870,152434],{"class":205},[199,164872,164873,164875,164877,164880],{"class":201,"line":1315},[199,164874,34141],{"class":1018},[199,164876,1537],{"class":205},[199,164878,164879],{"class":898},"\"取款成功\"",[199,164881,1594],{"class":205},[199,164883,164884],{"class":201,"line":1330},[199,164885,164769],{"class":205},[199,164887,164888],{"class":201,"line":1335},[199,164889,907],{"emptyLinePlaceholder":906},[199,164891,164892],{"class":201,"line":1340},[199,164893,907],{"emptyLinePlaceholder":906},[199,164895,164896,164898,164900],{"class":201,"line":1352},[199,164897,110922],{"class":1086},[199,164899,97551],{"class":1018},[199,164901,6640],{"class":205},[199,164903,164904],{"class":201,"line":1367},[199,164905,164906],{"class":205},"    show_menu()\n",[199,164908,164909,164911,164913,164915,164917,164919],{"class":201,"line":1381},[199,164910,162951],{"class":205},[199,164912,895],{"class":1086},[199,164914,62864],{"class":1018},[199,164916,1537],{"class":205},[199,164918,155332],{"class":898},[199,164920,1594],{"class":205},[199,164922,164923],{"class":201,"line":1396},[199,164924,907],{"emptyLinePlaceholder":906},[199,164926,164927,164929,164931,164933,164935],{"class":201,"line":1401},[199,164928,6005],{"class":1086},[199,164930,155345],{"class":205},[199,164932,5853],{"class":1086},[199,164934,155350],{"class":898},[199,164936,6640],{"class":205},[199,164938,164939],{"class":201,"line":1411},[199,164940,164941],{"class":205},"        show_balance()\n",[199,164943,164944,164946,164948,164950,164952],{"class":201,"line":1421},[199,164945,42134],{"class":1086},[199,164947,155345],{"class":205},[199,164949,5853],{"class":1086},[199,164951,155369],{"class":898},[199,164953,6640],{"class":205},[199,164955,164956],{"class":201,"line":1426},[199,164957,164958],{"class":205},"        save_money()\n",[199,164960,164961,164963,164965,164967,164969],{"class":201,"line":1436},[199,164962,42134],{"class":1086},[199,164964,155345],{"class":205},[199,164966,5853],{"class":1086},[199,164968,155387],{"class":898},[199,164970,6640],{"class":205},[199,164972,164973],{"class":201,"line":1441},[199,164974,164975],{"class":205},"        withdraw_money()\n",[199,164977,164978,164980,164982,164984,164986],{"class":201,"line":1451},[199,164979,42134],{"class":1086},[199,164981,155345],{"class":205},[199,164983,5853],{"class":1086},[199,164985,155441],{"class":898},[199,164987,6640],{"class":205},[199,164989,164990,164992,164994,164996],{"class":201,"line":1458},[199,164991,35293],{"class":1018},[199,164993,1537],{"class":205},[199,164995,155452],{"class":898},[199,164997,1594],{"class":205},[199,164999,165000],{"class":201,"line":1464},[199,165001,34469],{"class":1086},[199,165003,165004,165006],{"class":201,"line":1478},[199,165005,160281],{"class":1086},[199,165007,6640],{"class":205},[199,165009,165010,165012,165014,165016],{"class":201,"line":1516},[199,165011,35293],{"class":1018},[199,165013,1537],{"class":205},[199,165015,155473],{"class":898},[199,165017,1594],{"class":205},[31,165019,165020],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,165022,165024],{"id":165023},"_514-易错点","5.14 易错点",[24,165026,165027,165030,165033,165038,165043,165046],{},[27,165028,165029],{},"函数定义后必须调用才会执行。",[27,165031,165032],{},"函数名后面有括号才是调用。",[27,165034,165035,165037],{},[196,165036,19891],{}," 后面的代码不会执行。",[27,165039,165040,165041,31228],{},"没有返回值的函数默认返回 ",[196,165042,97945],{},[27,165044,165045],{},"局部变量不能在函数外部访问。",[27,165047,165048,165049,165051],{},"不要滥用 ",[196,165050,164085],{},"，更好的方式是让函数返回新值。",[31,165053,165054,165055,165057],{},"例如不用 ",[196,165056,164085],{}," 改写存款：",[190,165059,165061],{"className":33221,"code":165060,"language":33223,"meta":57,"style":57},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[196,165062,165063,165072,165083,165087,165091,165099,165112],{"__ignoreMap":57},[199,165064,165065,165067,165069],{"class":201,"line":202},[199,165066,34789],{"class":1086},[199,165068,164689],{"class":878},[199,165070,165071],{"class":205},"(balance, money):\n",[199,165073,165074,165076,165079,165081],{"class":201,"line":36},[199,165075,6989],{"class":1086},[199,165077,165078],{"class":205}," balance ",[199,165080,2028],{"class":1086},[199,165082,152434],{"class":205},[199,165084,165085],{"class":201,"line":73},[199,165086,907],{"emptyLinePlaceholder":906},[199,165088,165089],{"class":201,"line":333},[199,165090,907],{"emptyLinePlaceholder":906},[199,165092,165093,165095,165097],{"class":201,"line":227},[199,165094,164563],{"class":205},[199,165096,895],{"class":1086},[199,165098,164568],{"class":1018},[199,165100,165101,165103,165105,165108,165110],{"class":201,"line":238},[199,165102,164563],{"class":205},[199,165104,895],{"class":1086},[199,165106,165107],{"class":205}," save_money(balance, ",[199,165109,4647],{"class":1018},[199,165111,1594],{"class":205},[199,165113,165114,165116],{"class":201,"line":252},[199,165115,33258],{"class":1018},[199,165117,165118],{"class":205},"(balance)\n",[14,165120,165122],{"id":165121},"_515-本章练习","5.15 本章练习",[24,165124,165125,165132,165138,165144,165150],{},[27,165126,165127,165128,165131],{},"定义函数 ",[196,165129,165130],{},"print_student(name, age)","，输出学生信息。",[27,165133,165127,165134,165137],{},[196,165135,165136],{},"get_max(a, b, c)","，返回三个数中的最大值。",[27,165139,165127,165140,165143],{},[196,165141,165142],{},"is_even(num)","，判断一个数是否为偶数。",[27,165145,165127,165146,165149],{},[196,165147,165148],{},"calculate_bmi(weight, height)","，返回 BMI。",[27,165151,165152],{},"把第 4 章的菜单程序拆分成多个函数。",[1002,165154,165155],{},"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":57,"searchDepth":36,"depth":36,"links":165157},[165158,165159,165160,165161,165162,165163,165164,165165,165166,165170,165171,165172,165173,165174,165175],{"id":163178,"depth":36,"text":163179},{"id":163219,"depth":36,"text":163220},{"id":163309,"depth":36,"text":163310},{"id":163390,"depth":36,"text":163391},{"id":163523,"depth":36,"text":163524},{"id":163645,"depth":36,"text":163646},{"id":163767,"depth":36,"text":163768},{"id":163844,"depth":36,"text":163845},{"id":163966,"depth":36,"text":163967,"children":165167},[165168,165169],{"id":163970,"depth":73,"text":163971},{"id":164028,"depth":73,"text":164029},{"id":164157,"depth":36,"text":164158},{"id":164283,"depth":36,"text":164284},{"id":164396,"depth":36,"text":164397},{"id":164552,"depth":36,"text":164553},{"id":165023,"depth":36,"text":165024},{"id":165121,"depth":36,"text":165122},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163170,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165182,"title":165183,"body":165184,"description":3023,"extension":3024,"meta":168228,"navigation":906,"path":168229,"seo":168230,"stem":168231,"__hash__":168232},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165185,"toc":168209},[165186,165189,165193,165196,165199,165303,165306,165310,165313,165393,165396,165400,165403,165463,165466,165502,165505,165520,165524,165597,165600,165655,165658,165728,165731,165815,165825,165883,165887,165932,165935,165961,165964,166070,166074,166077,166119,166122,166186,166189,166193,166196,166257,166260,166290,166293,166331,166335,166338,166347,166350,166474,166477,166518,166522,166525,166536,166576,166579,166594,166599,166602,166669,166672,166762,166766,166769,166817,166820,166847,166849,166879,166882,166902,166905,166936,166939,166972,166976,166979,167003,167006,167030,167033,167057,167061,167064,167194,167197,167277,167280,167355,167359,167362,167412,167415,167457,167460,167484,167486,167510,167513,167568,167571,167637,167641,167644,167647,167685,167688,167741,167744,167790,167793,167826,167829,167833,168152,168156,168185,168189,168206],[10,165187,165183],{"id":165188},"_6-数据容器",[14,165190,165192],{"id":165191},"_61-什么是数据容器","6.1 什么是数据容器",[31,165194,165195],{},"数据容器用于一次保存多个数据。",[31,165197,165198],{},"常见容器：",[3227,165200,165201,165218],{},[3230,165202,165203],{},[3233,165204,165205,165207,165210,165213,165216],{},[3236,165206,28614],{},[3236,165208,165209],{},"是否有序",[3236,165211,165212],{},"是否可变",[3236,165214,165215],{},"是否允许重复",[3236,165217,30335],{},[3273,165219,165220,165238,165254,165269,165286],{},[3233,165221,165222,165225,165228,165231,165234],{},[3278,165223,165224],{},"list列表",[3278,165226,165227],{},"有序",[3278,165229,165230],{},"可变",[3278,165232,165233],{},"允许",[3278,165235,165236],{},[196,165237,157516],{},[3233,165239,165240,165243,165245,165248,165250],{},[3278,165241,165242],{},"tuple元组",[3278,165244,165227],{},[3278,165246,165247],{},"不可变",[3278,165249,165233],{},[3278,165251,165252],{},[196,165253,157529],{},[3233,165255,165256,165259,165261,165263,165265],{},[3278,165257,165258],{},"str字符串",[3278,165260,165227],{},[3278,165262,165247],{},[3278,165264,165233],{},[3278,165266,165267],{},[196,165268,158139],{},[3233,165270,165271,165274,165277,165279,165282],{},[3278,165272,165273],{},"set集合",[3278,165275,165276],{},"无序",[3278,165278,165230],{},[3278,165280,165281],{},"不允许",[3278,165283,165284],{},[196,165285,157554],{},[3233,165287,165288,165291,165293,165295,165298],{},[3278,165289,165290],{},"dict字典",[3278,165292,165227],{},[3278,165294,165230],{},[3278,165296,165297],{},"key不允许重复",[3278,165299,165300],{},[196,165301,165302],{},"{\"name\": \"小明\"}",[31,165304,165305],{},"Python 3.7 之后，字典保持插入顺序。",[14,165307,165309],{"id":165308},"_62-列表list","6.2 列表list",[31,165311,165312],{},"列表用于保存一组有顺序的数据。",[190,165314,165316],{"className":33221,"code":165315,"language":33223,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[196,165317,165318,165338,165363,165384],{"__ignoreMap":57},[199,165319,165320,165322,165324,165326,165328,165330,165332,165334,165336],{"class":201,"line":202},[199,165321,162639],{"class":205},[199,165323,895],{"class":1086},[199,165325,1906],{"class":205},[199,165327,152147],{"class":898},[199,165329,1912],{"class":205},[199,165331,153195],{"class":898},[199,165333,1912],{"class":205},[199,165335,161990],{"class":898},[199,165337,1932],{"class":205},[199,165339,165340,165343,165345,165347,165349,165351,165353,165355,165357,165359,165361],{"class":201,"line":36},[199,165341,165342],{"class":205},"numbers ",[199,165344,895],{"class":1086},[199,165346,1906],{"class":205},[199,165348,1115],{"class":1018},[199,165350,1912],{"class":205},[199,165352,1925],{"class":1018},[199,165354,1912],{"class":205},[199,165356,1920],{"class":1018},[199,165358,1912],{"class":205},[199,165360,1915],{"class":1018},[199,165362,1932],{"class":205},[199,165364,165365,165368,165370,165372,165374,165376,165378,165380,165382],{"class":201,"line":73},[199,165366,165367],{"class":205},"mixed ",[199,165369,895],{"class":1086},[199,165371,1906],{"class":205},[199,165373,152147],{"class":898},[199,165375,1912],{"class":205},[199,165377,3730],{"class":1018},[199,165379,1912],{"class":205},[199,165381,34318],{"class":1018},[199,165383,1932],{"class":205},[199,165385,165386,165389,165391],{"class":201,"line":333},[199,165387,165388],{"class":205},"empty ",[199,165390,895],{"class":1086},[199,165392,1475],{"class":205},[31,165394,165395],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,165397,165399],{"id":165398},"_63-列表索引","6.3 列表索引",[31,165401,165402],{},"正向索引从 0 开始：",[190,165404,165406],{"className":33221,"code":165405,"language":33223,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[196,165407,165408,165428,165432,165443,165453],{"__ignoreMap":57},[199,165409,165410,165412,165414,165416,165418,165420,165422,165424,165426],{"class":201,"line":202},[199,165411,162639],{"class":205},[199,165413,895],{"class":1086},[199,165415,1906],{"class":205},[199,165417,152147],{"class":898},[199,165419,1912],{"class":205},[199,165421,153195],{"class":898},[199,165423,1912],{"class":205},[199,165425,161990],{"class":898},[199,165427,1932],{"class":205},[199,165429,165430],{"class":201,"line":36},[199,165431,907],{"emptyLinePlaceholder":906},[199,165433,165434,165436,165439,165441],{"class":201,"line":73},[199,165435,33258],{"class":1018},[199,165437,165438],{"class":205},"(names[",[199,165440,1025],{"class":1018},[199,165442,7554],{"class":205},[199,165444,165445,165447,165449,165451],{"class":201,"line":333},[199,165446,33258],{"class":1018},[199,165448,165438],{"class":205},[199,165450,1115],{"class":1018},[199,165452,7554],{"class":205},[199,165454,165455,165457,165459,165461],{"class":201,"line":227},[199,165456,33258],{"class":1018},[199,165458,165438],{"class":205},[199,165460,1925],{"class":1018},[199,165462,7554],{"class":205},[31,165464,165465],{},"反向索引从 -1 开始：",[190,165467,165469],{"className":33221,"code":165468,"language":33223,"meta":57,"style":57},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[196,165470,165471,165487],{"__ignoreMap":57},[199,165472,165473,165475,165477,165479,165481,165484],{"class":201,"line":202},[199,165474,33258],{"class":1018},[199,165476,165438],{"class":205},[199,165478,1998],{"class":1086},[199,165480,1115],{"class":1018},[199,165482,165483],{"class":205},"])  ",[199,165485,165486],{"class":1454},"# 小刚\n",[199,165488,165489,165491,165493,165495,165497,165499],{"class":201,"line":36},[199,165490,33258],{"class":1018},[199,165492,165438],{"class":205},[199,165494,1998],{"class":1086},[199,165496,1925],{"class":1018},[199,165498,165483],{"class":205},[199,165500,165501],{"class":1454},"# 小红\n",[31,165503,165504],{},"索引越界会报错：",[190,165506,165508],{"className":33221,"code":165507,"language":33223,"meta":57,"style":57},"print(names[3])\n",[196,165509,165510],{"__ignoreMap":57},[199,165511,165512,165514,165516,165518],{"class":201,"line":202},[199,165513,33258],{"class":1018},[199,165515,165438],{"class":205},[199,165517,1920],{"class":1018},[199,165519,7554],{"class":205},[14,165521,165523],{"id":165522},"_64-列表常用方法","6.4 列表常用方法",[190,165525,165527],{"className":33221,"code":165526,"language":33223,"meta":57,"style":57},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[196,165528,165529,165545,165549,165558,165572,165586,165590],{"__ignoreMap":57},[199,165530,165531,165533,165535,165537,165539,165541,165543],{"class":201,"line":202},[199,165532,162639],{"class":205},[199,165534,895],{"class":1086},[199,165536,1906],{"class":205},[199,165538,152147],{"class":898},[199,165540,1912],{"class":205},[199,165542,153195],{"class":898},[199,165544,1932],{"class":205},[199,165546,165547],{"class":201,"line":36},[199,165548,907],{"emptyLinePlaceholder":906},[199,165550,165551,165554,165556],{"class":201,"line":73},[199,165552,165553],{"class":205},"names.append(",[199,165555,161990],{"class":898},[199,165557,1594],{"class":205},[199,165559,165560,165563,165565,165567,165570],{"class":201,"line":333},[199,165561,165562],{"class":205},"names.insert(",[199,165564,1115],{"class":1018},[199,165566,1912],{"class":205},[199,165568,165569],{"class":898},"\"小李\"",[199,165571,1594],{"class":205},[199,165573,165574,165577,165579,165581,165584],{"class":201,"line":227},[199,165575,165576],{"class":205},"names.extend([",[199,165578,11570],{"class":898},[199,165580,1912],{"class":205},[199,165582,165583],{"class":898},"\"小赵\"",[199,165585,7554],{"class":205},[199,165587,165588],{"class":201,"line":238},[199,165589,907],{"emptyLinePlaceholder":906},[199,165591,165592,165594],{"class":201,"line":252},[199,165593,33258],{"class":1018},[199,165595,165596],{"class":205},"(names)\n",[31,165598,165599],{},"删除元素：",[190,165601,165603],{"className":33221,"code":165602,"language":33223,"meta":57,"style":57},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[196,165604,165605,165614,165624,165638,165650],{"__ignoreMap":57},[199,165606,165607,165610,165612],{"class":201,"line":202},[199,165608,165609],{"class":205},"names.remove(",[199,165611,153195],{"class":898},[199,165613,1594],{"class":205},[199,165615,165616,165619,165621],{"class":201,"line":36},[199,165617,165618],{"class":205},"last ",[199,165620,895],{"class":1086},[199,165622,165623],{"class":205}," names.pop()\n",[199,165625,165626,165629,165631,165634,165636],{"class":201,"line":73},[199,165627,165628],{"class":205},"first ",[199,165630,895],{"class":1086},[199,165632,165633],{"class":205}," names.pop(",[199,165635,1025],{"class":1018},[199,165637,1594],{"class":205},[199,165639,165640,165643,165646,165648],{"class":201,"line":333},[199,165641,165642],{"class":1086},"del",[199,165644,165645],{"class":205}," names[",[199,165647,1025],{"class":1018},[199,165649,1932],{"class":205},[199,165651,165652],{"class":201,"line":227},[199,165653,165654],{"class":205},"names.clear()\n",[31,165656,165657],{},"查询和统计：",[190,165659,165661],{"className":33221,"code":165660,"language":33223,"meta":57,"style":57},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[196,165662,165663,165691,165695,165706,165717],{"__ignoreMap":57},[199,165664,165665,165667,165669,165671,165673,165675,165677,165679,165681,165683,165685,165687,165689],{"class":201,"line":202},[199,165666,165342],{"class":205},[199,165668,895],{"class":1086},[199,165670,1906],{"class":205},[199,165672,1115],{"class":1018},[199,165674,1912],{"class":205},[199,165676,1925],{"class":1018},[199,165678,1912],{"class":205},[199,165680,1920],{"class":1018},[199,165682,1912],{"class":205},[199,165684,1925],{"class":1018},[199,165686,1912],{"class":205},[199,165688,1915],{"class":1018},[199,165690,1932],{"class":205},[199,165692,165693],{"class":201,"line":36},[199,165694,907],{"emptyLinePlaceholder":906},[199,165696,165697,165699,165702,165704],{"class":201,"line":73},[199,165698,33258],{"class":1018},[199,165700,165701],{"class":205},"(numbers.index(",[199,165703,1920],{"class":1018},[199,165705,1554],{"class":205},[199,165707,165708,165710,165713,165715],{"class":201,"line":333},[199,165709,33258],{"class":1018},[199,165711,165712],{"class":205},"(numbers.count(",[199,165714,1925],{"class":1018},[199,165716,1554],{"class":205},[199,165718,165719,165721,165723,165725],{"class":201,"line":227},[199,165720,33258],{"class":1018},[199,165722,1537],{"class":205},[199,165724,10255],{"class":1018},[199,165726,165727],{"class":205},"(numbers))\n",[31,165729,165730],{},"排序：",[190,165732,165734],{"className":33221,"code":165733,"language":33223,"meta":57,"style":57},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[196,165735,165736,165760,165764,165769,165776,165780,165794,165800,165804,165809],{"__ignoreMap":57},[199,165737,165738,165740,165742,165744,165746,165748,165750,165752,165754,165756,165758],{"class":201,"line":202},[199,165739,165342],{"class":205},[199,165741,895],{"class":1086},[199,165743,1906],{"class":205},[199,165745,1920],{"class":1018},[199,165747,1912],{"class":205},[199,165749,1115],{"class":1018},[199,165751,1912],{"class":205},[199,165753,1909],{"class":1018},[199,165755,1912],{"class":205},[199,165757,1925],{"class":1018},[199,165759,1932],{"class":205},[199,165761,165762],{"class":201,"line":36},[199,165763,907],{"emptyLinePlaceholder":906},[199,165765,165766],{"class":201,"line":73},[199,165767,165768],{"class":205},"numbers.sort()\n",[199,165770,165771,165773],{"class":201,"line":333},[199,165772,33258],{"class":1018},[199,165774,165775],{"class":205},"(numbers)\n",[199,165777,165778],{"class":201,"line":227},[199,165779,907],{"emptyLinePlaceholder":906},[199,165781,165782,165785,165788,165790,165792],{"class":201,"line":238},[199,165783,165784],{"class":205},"numbers.sort(",[199,165786,165787],{"class":8113},"reverse",[199,165789,895],{"class":1086},[199,165791,34318],{"class":1018},[199,165793,1594],{"class":205},[199,165795,165796,165798],{"class":201,"line":252},[199,165797,33258],{"class":1018},[199,165799,165775],{"class":205},[199,165801,165802],{"class":201,"line":388},[199,165803,907],{"emptyLinePlaceholder":906},[199,165805,165806],{"class":201,"line":415},[199,165807,165808],{"class":205},"numbers.reverse()\n",[199,165810,165811,165813],{"class":201,"line":426},[199,165812,33258],{"class":1018},[199,165814,165775],{"class":205},[31,165816,165817,165820,165821,165824],{},[196,165818,165819],{},"sort()"," 会修改原列表，",[196,165822,165823],{},"sorted()"," 返回新列表。",[190,165826,165828],{"className":33221,"code":165827,"language":33223,"meta":57,"style":57},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[196,165829,165830,165854,165866,165870,165876],{"__ignoreMap":57},[199,165831,165832,165834,165836,165838,165840,165842,165844,165846,165848,165850,165852],{"class":201,"line":202},[199,165833,165342],{"class":205},[199,165835,895],{"class":1086},[199,165837,1906],{"class":205},[199,165839,1920],{"class":1018},[199,165841,1912],{"class":205},[199,165843,1115],{"class":1018},[199,165845,1912],{"class":205},[199,165847,1909],{"class":1018},[199,165849,1912],{"class":205},[199,165851,1925],{"class":1018},[199,165853,1932],{"class":205},[199,165855,165856,165859,165861,165864],{"class":201,"line":36},[199,165857,165858],{"class":205},"new_numbers ",[199,165860,895],{"class":1086},[199,165862,165863],{"class":1018}," sorted",[199,165865,165775],{"class":205},[199,165867,165868],{"class":201,"line":73},[199,165869,907],{"emptyLinePlaceholder":906},[199,165871,165872,165874],{"class":201,"line":333},[199,165873,33258],{"class":1018},[199,165875,165775],{"class":205},[199,165877,165878,165880],{"class":201,"line":227},[199,165879,33258],{"class":1018},[199,165881,165882],{"class":205},"(new_numbers)\n",[14,165884,165886],{"id":165885},"_65-列表遍历","6.5 列表遍历",[190,165888,165890],{"className":33221,"code":165889,"language":33223,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[196,165891,165892,165912,165916,165926],{"__ignoreMap":57},[199,165893,165894,165896,165898,165900,165902,165904,165906,165908,165910],{"class":201,"line":202},[199,165895,162639],{"class":205},[199,165897,895],{"class":1086},[199,165899,1906],{"class":205},[199,165901,152147],{"class":898},[199,165903,1912],{"class":205},[199,165905,153195],{"class":898},[199,165907,1912],{"class":205},[199,165909,161990],{"class":898},[199,165911,1932],{"class":205},[199,165913,165914],{"class":201,"line":36},[199,165915,907],{"emptyLinePlaceholder":906},[199,165917,165918,165920,165922,165924],{"class":201,"line":73},[199,165919,5929],{"class":1086},[199,165921,162675],{"class":205},[199,165923,28886],{"class":1086},[199,165925,162680],{"class":205},[199,165927,165928,165930],{"class":201,"line":333},[199,165929,34141],{"class":1018},[199,165931,152919],{"class":205},[31,165933,165934],{},"需要索引时：",[190,165936,165938],{"className":33221,"code":165937,"language":33223,"meta":57,"style":57},"for index, name in enumerate(names):\n    print(index, name)\n",[196,165939,165940,165954],{"__ignoreMap":57},[199,165941,165942,165944,165947,165949,165951],{"class":201,"line":202},[199,165943,5929],{"class":1086},[199,165945,165946],{"class":205}," index, name ",[199,165948,28886],{"class":1086},[199,165950,34448],{"class":1018},[199,165952,165953],{"class":205},"(names):\n",[199,165955,165956,165958],{"class":201,"line":36},[199,165957,34141],{"class":1018},[199,165959,165960],{"class":205},"(index, name)\n",[31,165962,165963],{},"统计总分：",[190,165965,165967],{"className":33221,"code":165966,"language":33223,"meta":57,"style":57},"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",[196,165968,165969,165994,166002,166006,166017,166025,166029,166046],{"__ignoreMap":57},[199,165970,165971,165974,165976,165978,165980,165982,165984,165986,165988,165990,165992],{"class":201,"line":202},[199,165972,165973],{"class":205},"scores ",[199,165975,895],{"class":1086},[199,165977,1906],{"class":205},[199,165979,3941],{"class":1018},[199,165981,1912],{"class":205},[199,165983,3815],{"class":1018},[199,165985,1912],{"class":205},[199,165987,3340],{"class":1018},[199,165989,1912],{"class":205},[199,165991,3641],{"class":1018},[199,165993,1932],{"class":205},[199,165995,165996,165998,166000],{"class":201,"line":36},[199,165997,159519],{"class":205},[199,165999,895],{"class":1086},[199,166001,50173],{"class":1018},[199,166003,166004],{"class":201,"line":73},[199,166005,907],{"emptyLinePlaceholder":906},[199,166007,166008,166010,166012,166014],{"class":201,"line":333},[199,166009,5929],{"class":1086},[199,166011,160042],{"class":205},[199,166013,28886],{"class":1086},[199,166015,166016],{"class":205}," scores:\n",[199,166018,166019,166021,166023],{"class":201,"line":227},[199,166020,161566],{"class":205},[199,166022,12362],{"class":1086},[199,166024,4517],{"class":205},[199,166026,166027],{"class":201,"line":238},[199,166028,907],{"emptyLinePlaceholder":906},[199,166030,166031,166034,166036,166039,166041,166043],{"class":201,"line":252},[199,166032,166033],{"class":205},"avg ",[199,166035,895],{"class":1086},[199,166037,166038],{"class":205}," total ",[199,166040,3664],{"class":1086},[199,166042,10228],{"class":1018},[199,166044,166045],{"class":205},"(scores)\n",[199,166047,166048,166050,166052,166054,166057,166059,166062,166064,166066,166068],{"class":201,"line":388},[199,166049,33258],{"class":1018},[199,166051,1537],{"class":205},[199,166053,3146],{"class":1086},[199,166055,166056],{"class":898},"\"平均分:",[199,166058,3974],{"class":1018},[199,166060,166061],{"class":205},"avg",[199,166063,159418],{"class":1086},[199,166065,759],{"class":1018},[199,166067,3337],{"class":898},[199,166069,1594],{"class":205},[14,166071,166073],{"id":166072},"_66-元组tuple","6.6 元组tuple",[31,166075,166076],{},"元组和列表类似，但不可修改。",[190,166078,166080],{"className":33221,"code":166079,"language":33223,"meta":57,"style":57},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[196,166081,166082,166099],{"__ignoreMap":57},[199,166083,166084,166087,166089,166091,166093,166095,166097],{"class":201,"line":202},[199,166085,166086],{"class":205},"point ",[199,166088,895],{"class":1086},[199,166090,1484],{"class":205},[199,166092,3528],{"class":1018},[199,166094,1912],{"class":205},[199,166096,3779],{"class":1018},[199,166098,1594],{"class":205},[199,166100,166101,166103,166105,166107,166109,166111,166113,166115,166117],{"class":201,"line":36},[199,166102,118573],{"class":205},[199,166104,895],{"class":1086},[199,166106,1484],{"class":205},[199,166108,152147],{"class":898},[199,166110,1912],{"class":205},[199,166112,3730],{"class":1018},[199,166114,1912],{"class":205},[199,166116,71528],{"class":898},[199,166118,1594],{"class":205},[31,166120,166121],{},"单元素元组必须加逗号：",[190,166123,166125],{"className":33221,"code":166124,"language":33223,"meta":57,"style":57},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[196,166126,166127,166141,166154,166158,166172],{"__ignoreMap":57},[199,166128,166129,166132,166134,166136,166138],{"class":201,"line":202},[199,166130,166131],{"class":205},"t1 ",[199,166133,895],{"class":1086},[199,166135,1484],{"class":205},[199,166137,3528],{"class":1018},[199,166139,166140],{"class":205},",)\n",[199,166142,166143,166146,166148,166150,166152],{"class":201,"line":36},[199,166144,166145],{"class":205},"t2 ",[199,166147,895],{"class":1086},[199,166149,1484],{"class":205},[199,166151,3528],{"class":1018},[199,166153,1594],{"class":205},[199,166155,166156],{"class":201,"line":73},[199,166157,907],{"emptyLinePlaceholder":906},[199,166159,166160,166162,166164,166166,166169],{"class":201,"line":333},[199,166161,33258],{"class":1018},[199,166163,1537],{"class":205},[199,166165,105366],{"class":1018},[199,166167,166168],{"class":205},"(t1))  ",[199,166170,166171],{"class":1454},"# tuple\n",[199,166173,166174,166176,166178,166180,166183],{"class":201,"line":227},[199,166175,33258],{"class":1018},[199,166177,1537],{"class":205},[199,166179,105366],{"class":1018},[199,166181,166182],{"class":205},"(t2))  ",[199,166184,166185],{"class":1454},"# int\n",[31,166187,166188],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166190,166192],{"id":166191},"_67-字符串str","6.7 字符串str",[31,166194,166195],{},"字符串也是序列，可以索引、切片和遍历。",[190,166197,166199],{"className":33221,"code":166198,"language":33223,"meta":57,"style":57},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[196,166200,166201,166209,166213,166224,166236,166240,166251],{"__ignoreMap":57},[199,166202,166203,166205,166207],{"class":201,"line":202},[199,166204,158703],{"class":205},[199,166206,895],{"class":1086},[199,166208,161940],{"class":898},[199,166210,166211],{"class":201,"line":36},[199,166212,907],{"emptyLinePlaceholder":906},[199,166214,166215,166217,166220,166222],{"class":201,"line":73},[199,166216,33258],{"class":1018},[199,166218,166219],{"class":205},"(text[",[199,166221,1025],{"class":1018},[199,166223,7554],{"class":205},[199,166225,166226,166228,166230,166232,166234],{"class":201,"line":333},[199,166227,33258],{"class":1018},[199,166229,166219],{"class":205},[199,166231,1998],{"class":1086},[199,166233,1115],{"class":1018},[199,166235,7554],{"class":205},[199,166237,166238],{"class":201,"line":227},[199,166239,907],{"emptyLinePlaceholder":906},[199,166241,166242,166244,166246,166248],{"class":201,"line":238},[199,166243,5929],{"class":1086},[199,166245,161951],{"class":205},[199,166247,28886],{"class":1086},[199,166249,166250],{"class":205}," text:\n",[199,166252,166253,166255],{"class":201,"line":252},[199,166254,34141],{"class":1018},[199,166256,161962],{"class":205},[31,166258,166259],{},"字符串不可变：",[190,166261,166263],{"className":33221,"code":166262,"language":33223,"meta":57,"style":57},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[196,166264,166265,166273],{"__ignoreMap":57},[199,166266,166267,166269,166271],{"class":201,"line":202},[199,166268,158703],{"class":205},[199,166270,895],{"class":1086},[199,166272,161940],{"class":898},[199,166274,166275,166278,166280,166282,166284,166287],{"class":201,"line":36},[199,166276,166277],{"class":205},"text[",[199,166279,1025],{"class":1018},[199,166281,2078],{"class":205},[199,166283,895],{"class":1086},[199,166285,166286],{"class":898}," \"P\"",[199,166288,166289],{"class":1454},"  # 报错\n",[31,166291,166292],{},"如果要得到新字符串：",[190,166294,166296],{"className":33221,"code":166295,"language":33223,"meta":57,"style":57},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[196,166297,166298,166306,166324],{"__ignoreMap":57},[199,166299,166300,166302,166304],{"class":201,"line":202},[199,166301,158703],{"class":205},[199,166303,895],{"class":1086},[199,166305,161940],{"class":898},[199,166307,166308,166310,166312,166314,166316,166319,166321],{"class":201,"line":36},[199,166309,158703],{"class":205},[199,166311,895],{"class":1086},[199,166313,166286],{"class":898},[199,166315,1698],{"class":1086},[199,166317,166318],{"class":205}," text[",[199,166320,1115],{"class":1018},[199,166322,166323],{"class":205},":]\n",[199,166325,166326,166328],{"class":201,"line":73},[199,166327,33258],{"class":1018},[199,166329,166330],{"class":205},"(text)\n",[14,166332,166334],{"id":166333},"_68-切片","6.8 切片",[31,166336,166337],{},"切片用于从序列中取一部分。",[190,166339,166341],{"className":33221,"code":166340,"language":33223,"meta":57,"style":57},"序列[开始:结束:步长]\n",[196,166342,166343],{"__ignoreMap":57},[199,166344,166345],{"class":201,"line":202},[199,166346,166340],{"class":205},[31,166348,166349],{},"结束位置不包含。",[190,166351,166353],{"className":33221,"code":166352,"language":33223,"meta":57,"style":57},"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",[196,166354,166355,166392,166396,166415,166430,166444,166458],{"__ignoreMap":57},[199,166356,166357,166360,166362,166364,166366,166368,166370,166372,166374,166376,166378,166380,166382,166384,166386,166388,166390],{"class":201,"line":202},[199,166358,166359],{"class":205},"nums ",[199,166361,895],{"class":1086},[199,166363,1906],{"class":205},[199,166365,1025],{"class":1018},[199,166367,1912],{"class":205},[199,166369,1115],{"class":1018},[199,166371,1912],{"class":205},[199,166373,1925],{"class":1018},[199,166375,1912],{"class":205},[199,166377,1920],{"class":1018},[199,166379,1912],{"class":205},[199,166381,1915],{"class":1018},[199,166383,1912],{"class":205},[199,166385,1909],{"class":1018},[199,166387,1912],{"class":205},[199,166389,3428],{"class":1018},[199,166391,1932],{"class":205},[199,166393,166394],{"class":201,"line":36},[199,166395,907],{"emptyLinePlaceholder":906},[199,166397,166398,166400,166403,166405,166407,166409,166412],{"class":201,"line":73},[199,166399,33258],{"class":1018},[199,166401,166402],{"class":205},"(nums[",[199,166404,1115],{"class":1018},[199,166406,3938],{"class":205},[199,166408,1915],{"class":1018},[199,166410,166411],{"class":205},"])    ",[199,166413,166414],{"class":1454},"# [1, 2, 3]\n",[199,166416,166417,166419,166422,166424,166427],{"class":201,"line":333},[199,166418,33258],{"class":1018},[199,166420,166421],{"class":205},"(nums[:",[199,166423,1920],{"class":1018},[199,166425,166426],{"class":205},"])     ",[199,166428,166429],{"class":1454},"# [0, 1, 2]\n",[199,166431,166432,166434,166436,166438,166441],{"class":201,"line":227},[199,166433,33258],{"class":1018},[199,166435,166402],{"class":205},[199,166437,1920],{"class":1018},[199,166439,166440],{"class":205},":])     ",[199,166442,166443],{"class":1454},"# [3, 4, 5, 6]\n",[199,166445,166446,166448,166451,166453,166455],{"class":201,"line":238},[199,166447,33258],{"class":1018},[199,166449,166450],{"class":205},"(nums[::",[199,166452,1925],{"class":1018},[199,166454,166411],{"class":205},[199,166456,166457],{"class":1454},"# [0, 2, 4, 6]\n",[199,166459,166460,166462,166464,166466,166468,166471],{"class":201,"line":252},[199,166461,33258],{"class":1018},[199,166463,166450],{"class":205},[199,166465,1998],{"class":1086},[199,166467,1115],{"class":1018},[199,166469,166470],{"class":205},"])   ",[199,166472,166473],{"class":1454},"# 反转\n",[31,166475,166476],{},"字符串切片：",[190,166478,166480],{"className":33221,"code":166479,"language":33223,"meta":57,"style":57},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[196,166481,166482,166491,166505],{"__ignoreMap":57},[199,166483,166484,166486,166488],{"class":201,"line":202},[199,166485,158703],{"class":205},[199,166487,895],{"class":1086},[199,166489,166490],{"class":898}," \"abcdef\"\n",[199,166492,166493,166495,166497,166499,166501,166503],{"class":201,"line":36},[199,166494,33258],{"class":1018},[199,166496,166219],{"class":205},[199,166498,1115],{"class":1018},[199,166500,3938],{"class":205},[199,166502,1915],{"class":1018},[199,166504,7554],{"class":205},[199,166506,166507,166509,166512,166514,166516],{"class":201,"line":73},[199,166508,33258],{"class":1018},[199,166510,166511],{"class":205},"(text[::",[199,166513,1998],{"class":1086},[199,166515,1115],{"class":1018},[199,166517,7554],{"class":205},[14,166519,166521],{"id":166520},"_69-集合set","6.9 集合set",[31,166523,166524],{},"集合特点：",[24,166526,166527,166530,166533],{},[27,166528,166529],{},"无序。",[27,166531,166532],{},"元素不重复。",[27,166534,166535],{},"可以做交集、并集、差集。",[190,166537,166539],{"className":33221,"code":166538,"language":33223,"meta":57,"style":57},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[196,166540,166541,166569],{"__ignoreMap":57},[199,166542,166543,166545,166547,166549,166551,166553,166555,166557,166559,166561,166563,166565,166567],{"class":201,"line":202},[199,166544,166359],{"class":205},[199,166546,895],{"class":1086},[199,166548,7345],{"class":205},[199,166550,1115],{"class":1018},[199,166552,1912],{"class":205},[199,166554,1925],{"class":1018},[199,166556,1912],{"class":205},[199,166558,1920],{"class":1018},[199,166560,1912],{"class":205},[199,166562,1920],{"class":1018},[199,166564,1912],{"class":205},[199,166566,1915],{"class":1018},[199,166568,671],{"class":205},[199,166570,166571,166573],{"class":201,"line":36},[199,166572,33258],{"class":1018},[199,166574,166575],{"class":205},"(nums)\n",[31,166577,166578],{},"创建空集合：",[190,166580,166582],{"className":33221,"code":166581,"language":33223,"meta":57,"style":57},"s = set()\n",[196,166583,166584],{"__ignoreMap":57},[199,166585,166586,166588,166590,166592],{"class":201,"line":202},[199,166587,13442],{"class":205},[199,166589,895],{"class":1086},[199,166591,121981],{"class":1018},[199,166593,4892],{"class":205},[31,166595,11912,166596,166598],{},[196,166597,35301],{}," 是空字典，不是空集合。",[31,166600,166601],{},"集合常用操作：",[190,166603,166605],{"className":33221,"code":166604,"language":33223,"meta":57,"style":57},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[196,166606,166607,166627,166631,166640,166649,166658],{"__ignoreMap":57},[199,166608,166609,166611,166613,166615,166617,166619,166621,166623,166625],{"class":201,"line":202},[199,166610,13442],{"class":205},[199,166612,895],{"class":1086},[199,166614,7345],{"class":205},[199,166616,1115],{"class":1018},[199,166618,1912],{"class":205},[199,166620,1925],{"class":1018},[199,166622,1912],{"class":205},[199,166624,1920],{"class":1018},[199,166626,671],{"class":205},[199,166628,166629],{"class":201,"line":36},[199,166630,907],{"emptyLinePlaceholder":906},[199,166632,166633,166636,166638],{"class":201,"line":73},[199,166634,166635],{"class":205},"s.add(",[199,166637,1915],{"class":1018},[199,166639,1594],{"class":205},[199,166641,166642,166645,166647],{"class":201,"line":333},[199,166643,166644],{"class":205},"s.remove(",[199,166646,1925],{"class":1018},[199,166648,1594],{"class":205},[199,166650,166651,166654,166656],{"class":201,"line":227},[199,166652,166653],{"class":205},"s.discard(",[199,166655,3528],{"class":1018},[199,166657,1594],{"class":205},[199,166659,166660,166662,166664,166666],{"class":201,"line":238},[199,166661,33258],{"class":1018},[199,166663,1537],{"class":205},[199,166665,10255],{"class":1018},[199,166667,166668],{"class":205},"(s))\n",[31,166670,166671],{},"交并差：",[190,166673,166675],{"className":33221,"code":166674,"language":33223,"meta":57,"style":57},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[196,166676,166677,166697,166717,166721,166736,166749],{"__ignoreMap":57},[199,166678,166679,166681,166683,166685,166687,166689,166691,166693,166695],{"class":201,"line":202},[199,166680,13782],{"class":205},[199,166682,895],{"class":1086},[199,166684,7345],{"class":205},[199,166686,1115],{"class":1018},[199,166688,1912],{"class":205},[199,166690,1925],{"class":1018},[199,166692,1912],{"class":205},[199,166694,1920],{"class":1018},[199,166696,671],{"class":205},[199,166698,166699,166701,166703,166705,166707,166709,166711,166713,166715],{"class":201,"line":36},[199,166700,13808],{"class":205},[199,166702,895],{"class":1086},[199,166704,7345],{"class":205},[199,166706,1920],{"class":1018},[199,166708,1912],{"class":205},[199,166710,1915],{"class":1018},[199,166712,1912],{"class":205},[199,166714,1909],{"class":1018},[199,166716,671],{"class":205},[199,166718,166719],{"class":201,"line":73},[199,166720,907],{"emptyLinePlaceholder":906},[199,166722,166723,166725,166728,166730,166733],{"class":201,"line":333},[199,166724,33258],{"class":1018},[199,166726,166727],{"class":205},"(a ",[199,166729,3437],{"class":1086},[199,166731,166732],{"class":205}," b)  ",[199,166734,166735],{"class":1454},"# 交集\n",[199,166737,166738,166740,166742,166744,166746],{"class":201,"line":227},[199,166739,33258],{"class":1018},[199,166741,166727],{"class":205},[199,166743,3998],{"class":1086},[199,166745,166732],{"class":205},[199,166747,166748],{"class":1454},"# 并集\n",[199,166750,166751,166753,166755,166757,166759],{"class":201,"line":238},[199,166752,33258],{"class":1018},[199,166754,166727],{"class":205},[199,166756,1998],{"class":1086},[199,166758,166732],{"class":205},[199,166760,166761],{"class":1454},"# 差集\n",[14,166763,166765],{"id":166764},"_610-字典dict","6.10 字典dict",[31,166767,166768],{},"字典通过 key-value 保存数据。",[190,166770,166772],{"className":33221,"code":166771,"language":33223,"meta":57,"style":57},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[196,166773,166774,166782,166792,166803,166813],{"__ignoreMap":57},[199,166775,166776,166778,166780],{"class":201,"line":202},[199,166777,151740],{"class":205},[199,166779,895],{"class":1086},[199,166781,1012],{"class":205},[199,166783,166784,166786,166788,166790],{"class":201,"line":36},[199,166785,149279],{"class":898},[199,166787,1022],{"class":205},[199,166789,152147],{"class":898},[199,166791,34308],{"class":205},[199,166793,166794,166797,166799,166801],{"class":201,"line":73},[199,166795,166796],{"class":898},"    \"age\"",[199,166798,1022],{"class":205},[199,166800,3730],{"class":1018},[199,166802,34308],{"class":205},[199,166804,166805,166808,166810],{"class":201,"line":333},[199,166806,166807],{"class":898},"    \"score\"",[199,166809,1022],{"class":205},[199,166811,166812],{"class":1018},"95\n",[199,166814,166815],{"class":201,"line":227},[199,166816,671],{"class":205},[31,166818,166819],{},"获取值：",[190,166821,166823],{"className":33221,"code":166822,"language":33223,"meta":57,"style":57},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[196,166824,166825,166836],{"__ignoreMap":57},[199,166826,166827,166829,166832,166834],{"class":201,"line":202},[199,166828,33258],{"class":1018},[199,166830,166831],{"class":205},"(student[",[199,166833,64938],{"class":898},[199,166835,7554],{"class":205},[199,166837,166838,166840,166843,166845],{"class":201,"line":36},[199,166839,33258],{"class":1018},[199,166841,166842],{"class":205},"(student.get(",[199,166844,64938],{"class":898},[199,166846,1554],{"class":205},[31,166848,18247],{},[190,166850,166852],{"className":33221,"code":166851,"language":33223,"meta":57,"style":57},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[196,166853,166854,166867],{"__ignoreMap":57},[199,166855,166856,166858,166861,166864],{"class":201,"line":202},[199,166857,155118],{"class":205},[199,166859,166860],{"class":898},"\"address\"",[199,166862,166863],{"class":205},"]     ",[199,166865,166866],{"class":1454},"# key不存在会报错\n",[199,166868,166869,166872,166874,166876],{"class":201,"line":36},[199,166870,166871],{"class":205},"student.get(",[199,166873,166860],{"class":898},[199,166875,16575],{"class":205},[199,166877,166878],{"class":1454},"# key不存在返回None\n",[31,166880,166881],{},"设置默认值：",[190,166883,166885],{"className":33221,"code":166884,"language":33223,"meta":57,"style":57},"print(student.get(\"address\", \"未知\"))\n",[196,166886,166887],{"__ignoreMap":57},[199,166888,166889,166891,166893,166895,166897,166900],{"class":201,"line":202},[199,166890,33258],{"class":1018},[199,166892,166842],{"class":205},[199,166894,166860],{"class":898},[199,166896,1912],{"class":205},[199,166898,166899],{"class":898},"\"未知\"",[199,166901,1554],{"class":205},[31,166903,166904],{},"新增和修改：",[190,166906,166908],{"className":33221,"code":166907,"language":33223,"meta":57,"style":57},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[196,166909,166910,166923],{"__ignoreMap":57},[199,166911,166912,166914,166916,166918,166920],{"class":201,"line":202},[199,166913,155118],{"class":205},[199,166915,71383],{"class":898},[199,166917,2078],{"class":205},[199,166919,895],{"class":1086},[199,166921,166922],{"class":1018}," 19\n",[199,166924,166925,166927,166929,166931,166933],{"class":201,"line":36},[199,166926,155118],{"class":205},[199,166928,166860],{"class":898},[199,166930,2078],{"class":205},[199,166932,895],{"class":1086},[199,166934,166935],{"class":898}," \"北京\"\n",[31,166937,166938],{},"删除：",[190,166940,166942],{"className":33221,"code":166941,"language":33223,"meta":57,"style":57},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[196,166943,166944,166957,166967],{"__ignoreMap":57},[199,166945,166946,166948,166950,166953,166955],{"class":201,"line":202},[199,166947,157617],{"class":205},[199,166949,895],{"class":1086},[199,166951,166952],{"class":205}," student.pop(",[199,166954,153731],{"class":898},[199,166956,1594],{"class":205},[199,166958,166959,166961,166963,166965],{"class":201,"line":36},[199,166960,165642],{"class":1086},[199,166962,154408],{"class":205},[199,166964,71383],{"class":898},[199,166966,1932],{"class":205},[199,166968,166969],{"class":201,"line":73},[199,166970,166971],{"class":205},"student.clear()\n",[14,166973,166975],{"id":166974},"_611-字典遍历","6.11 字典遍历",[31,166977,166978],{},"遍历 key：",[190,166980,166982],{"className":33221,"code":166981,"language":33223,"meta":57,"style":57},"for key in student:\n    print(key, student[key])\n",[196,166983,166984,166996],{"__ignoreMap":57},[199,166985,166986,166988,166991,166993],{"class":201,"line":202},[199,166987,5929],{"class":1086},[199,166989,166990],{"class":205}," key ",[199,166992,28886],{"class":1086},[199,166994,166995],{"class":205}," student:\n",[199,166997,166998,167000],{"class":201,"line":36},[199,166999,34141],{"class":1018},[199,167001,167002],{"class":205},"(key, student[key])\n",[31,167004,167005],{},"遍历 value：",[190,167007,167009],{"className":33221,"code":167008,"language":33223,"meta":57,"style":57},"for value in student.values():\n    print(value)\n",[196,167010,167011,167023],{"__ignoreMap":57},[199,167012,167013,167015,167018,167020],{"class":201,"line":202},[199,167014,5929],{"class":1086},[199,167016,167017],{"class":205}," value ",[199,167019,28886],{"class":1086},[199,167021,167022],{"class":205}," student.values():\n",[199,167024,167025,167027],{"class":201,"line":36},[199,167026,34141],{"class":1018},[199,167028,167029],{"class":205},"(value)\n",[31,167031,167032],{},"遍历 key 和 value：",[190,167034,167036],{"className":33221,"code":167035,"language":33223,"meta":57,"style":57},"for key, value in student.items():\n    print(key, value)\n",[196,167037,167038,167050],{"__ignoreMap":57},[199,167039,167040,167042,167045,167047],{"class":201,"line":202},[199,167041,5929],{"class":1086},[199,167043,167044],{"class":205}," key, value ",[199,167046,28886],{"class":1086},[199,167048,167049],{"class":205}," student.items():\n",[199,167051,167052,167054],{"class":201,"line":36},[199,167053,34141],{"class":1018},[199,167055,167056],{"class":205},"(key, value)\n",[14,167058,167060],{"id":167059},"_612-嵌套容器","6.12 嵌套容器",[31,167062,167063],{},"列表中保存字典，是项目中最常见的结构之一。",[190,167065,167067],{"className":33221,"code":167066,"language":33223,"meta":57,"style":57},"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",[196,167068,167069,167077,167105,167133,167161,167165,167169,167179],{"__ignoreMap":57},[199,167070,167071,167073,167075],{"class":201,"line":202},[199,167072,161975],{"class":205},[199,167074,895],{"class":1086},[199,167076,57706],{"class":205},[199,167078,167079,167081,167083,167085,167087,167089,167091,167093,167095,167097,167099,167101,167103],{"class":201,"line":36},[199,167080,150644],{"class":205},[199,167082,64938],{"class":898},[199,167084,1022],{"class":205},[199,167086,152147],{"class":898},[199,167088,1912],{"class":205},[199,167090,71383],{"class":898},[199,167092,1022],{"class":205},[199,167094,3730],{"class":1018},[199,167096,1912],{"class":205},[199,167098,153731],{"class":898},[199,167100,1022],{"class":205},[199,167102,4063],{"class":1018},[199,167104,7827],{"class":205},[199,167106,167107,167109,167111,167113,167115,167117,167119,167121,167123,167125,167127,167129,167131],{"class":201,"line":73},[199,167108,150644],{"class":205},[199,167110,64938],{"class":898},[199,167112,1022],{"class":205},[199,167114,153195],{"class":898},[199,167116,1912],{"class":205},[199,167118,71383],{"class":898},[199,167120,1022],{"class":205},[199,167122,3705],{"class":1018},[199,167124,1912],{"class":205},[199,167126,153731],{"class":898},[199,167128,1022],{"class":205},[199,167130,3890],{"class":1018},[199,167132,7827],{"class":205},[199,167134,167135,167137,167139,167141,167143,167145,167147,167149,167151,167153,167155,167157,167159],{"class":201,"line":333},[199,167136,150644],{"class":205},[199,167138,64938],{"class":898},[199,167140,1022],{"class":205},[199,167142,161990],{"class":898},[199,167144,1912],{"class":205},[199,167146,71383],{"class":898},[199,167148,1022],{"class":205},[199,167150,3754],{"class":1018},[199,167152,1912],{"class":205},[199,167154,153731],{"class":898},[199,167156,1022],{"class":205},[199,167158,3489],{"class":1018},[199,167160,7827],{"class":205},[199,167162,167163],{"class":201,"line":227},[199,167164,1932],{"class":205},[199,167166,167167],{"class":201,"line":238},[199,167168,907],{"emptyLinePlaceholder":906},[199,167170,167171,167173,167175,167177],{"class":201,"line":252},[199,167172,5929],{"class":1086},[199,167174,154396],{"class":205},[199,167176,28886],{"class":1086},[199,167178,154401],{"class":205},[199,167180,167181,167183,167185,167187,167190,167192],{"class":201,"line":388},[199,167182,34141],{"class":1018},[199,167184,166831],{"class":205},[199,167186,64938],{"class":898},[199,167188,167189],{"class":205},"], student[",[199,167191,153731],{"class":898},[199,167193,7554],{"class":205},[31,167195,167196],{},"统计平均分：",[190,167198,167200],{"className":33221,"code":167199,"language":33223,"meta":57,"style":57},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[196,167201,167202,167210,167214,167224,167236,167240,167255],{"__ignoreMap":57},[199,167203,167204,167206,167208],{"class":201,"line":202},[199,167205,159519],{"class":205},[199,167207,895],{"class":1086},[199,167209,50173],{"class":1018},[199,167211,167212],{"class":201,"line":36},[199,167213,907],{"emptyLinePlaceholder":906},[199,167215,167216,167218,167220,167222],{"class":201,"line":73},[199,167217,5929],{"class":1086},[199,167219,154396],{"class":205},[199,167221,28886],{"class":1086},[199,167223,154401],{"class":205},[199,167225,167226,167228,167230,167232,167234],{"class":201,"line":333},[199,167227,161566],{"class":205},[199,167229,12362],{"class":1086},[199,167231,154408],{"class":205},[199,167233,153731],{"class":898},[199,167235,1932],{"class":205},[199,167237,167238],{"class":201,"line":227},[199,167239,907],{"emptyLinePlaceholder":906},[199,167241,167242,167244,167246,167248,167250,167252],{"class":201,"line":238},[199,167243,166033],{"class":205},[199,167245,895],{"class":1086},[199,167247,166038],{"class":205},[199,167249,3664],{"class":1086},[199,167251,10228],{"class":1018},[199,167253,167254],{"class":205},"(students)\n",[199,167256,167257,167259,167261,167263,167265,167267,167269,167271,167273,167275],{"class":201,"line":252},[199,167258,33258],{"class":1018},[199,167260,1537],{"class":205},[199,167262,3146],{"class":1086},[199,167264,166056],{"class":898},[199,167266,3974],{"class":1018},[199,167268,166061],{"class":205},[199,167270,159418],{"class":1086},[199,167272,759],{"class":1018},[199,167274,3337],{"class":898},[199,167276,1594],{"class":205},[31,167278,167279],{},"查找学生：",[190,167281,167283],{"className":33221,"code":167282,"language":33223,"meta":57,"style":57},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[196,167284,167285,167300,167304,167314,167328,167334,167338,167344],{"__ignoreMap":57},[199,167286,167287,167289,167291,167293,167295,167298],{"class":201,"line":202},[199,167288,113837],{"class":205},[199,167290,895],{"class":1086},[199,167292,62864],{"class":1018},[199,167294,1537],{"class":205},[199,167296,167297],{"class":898},"\"请输入学生姓名:\"",[199,167299,1594],{"class":205},[199,167301,167302],{"class":201,"line":36},[199,167303,907],{"emptyLinePlaceholder":906},[199,167305,167306,167308,167310,167312],{"class":201,"line":73},[199,167307,5929],{"class":1086},[199,167309,154396],{"class":205},[199,167311,28886],{"class":1086},[199,167313,154401],{"class":205},[199,167315,167316,167318,167320,167322,167324,167326],{"class":201,"line":333},[199,167317,6005],{"class":1086},[199,167319,154408],{"class":205},[199,167321,64938],{"class":898},[199,167323,2078],{"class":205},[199,167325,5853],{"class":1086},[199,167327,162691],{"class":205},[199,167329,167330,167332],{"class":201,"line":227},[199,167331,35293],{"class":1018},[199,167333,152301],{"class":205},[199,167335,167336],{"class":201,"line":238},[199,167337,34469],{"class":1086},[199,167339,167340,167342],{"class":201,"line":252},[199,167341,4626],{"class":1086},[199,167343,6640],{"class":205},[199,167345,167346,167348,167350,167353],{"class":201,"line":388},[199,167347,34141],{"class":1018},[199,167349,1537],{"class":205},[199,167351,167352],{"class":898},"\"没有找到\"",[199,167354,1594],{"class":205},[14,167356,167358],{"id":167357},"_613-容器通用操作","6.13 容器通用操作",[31,167360,167361],{},"长度：",[190,167363,167365],{"className":33221,"code":167364,"language":33223,"meta":57,"style":57},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[196,167366,167367,167386,167396],{"__ignoreMap":57},[199,167368,167369,167371,167374,167376,167378,167380,167382,167384],{"class":201,"line":202},[199,167370,10255],{"class":1018},[199,167372,167373],{"class":205},"([",[199,167375,1115],{"class":1018},[199,167377,1912],{"class":205},[199,167379,1925],{"class":1018},[199,167381,1912],{"class":205},[199,167383,1920],{"class":1018},[199,167385,7554],{"class":205},[199,167387,167388,167390,167392,167394],{"class":201,"line":36},[199,167389,10255],{"class":1018},[199,167391,1537],{"class":205},[199,167393,158139],{"class":898},[199,167395,1594],{"class":205},[199,167397,167398,167400,167403,167405,167407,167409],{"class":201,"line":73},[199,167399,10255],{"class":1018},[199,167401,167402],{"class":205},"({",[199,167404,64938],{"class":898},[199,167406,1022],{"class":205},[199,167408,152147],{"class":898},[199,167410,167411],{"class":205},"})\n",[31,167413,167414],{},"最大最小：",[190,167416,167418],{"className":33221,"code":167417,"language":33223,"meta":57,"style":57},"max([1, 2, 3])\nmin([1, 2, 3])\n",[196,167419,167420,167438],{"__ignoreMap":57},[199,167421,167422,167424,167426,167428,167430,167432,167434,167436],{"class":201,"line":202},[199,167423,8912],{"class":1018},[199,167425,167373],{"class":205},[199,167427,1115],{"class":1018},[199,167429,1912],{"class":205},[199,167431,1925],{"class":1018},[199,167433,1912],{"class":205},[199,167435,1920],{"class":1018},[199,167437,7554],{"class":205},[199,167439,167440,167443,167445,167447,167449,167451,167453,167455],{"class":201,"line":36},[199,167441,167442],{"class":1018},"min",[199,167444,167373],{"class":205},[199,167446,1115],{"class":1018},[199,167448,1912],{"class":205},[199,167450,1925],{"class":1018},[199,167452,1912],{"class":205},[199,167454,1920],{"class":1018},[199,167456,7554],{"class":205},[31,167458,167459],{},"求和：",[190,167461,167463],{"className":33221,"code":167462,"language":33223,"meta":57,"style":57},"sum([1, 2, 3])\n",[196,167464,167465],{"__ignoreMap":57},[199,167466,167467,167470,167472,167474,167476,167478,167480,167482],{"class":201,"line":202},[199,167468,167469],{"class":1018},"sum",[199,167471,167373],{"class":205},[199,167473,1115],{"class":1018},[199,167475,1912],{"class":205},[199,167477,1925],{"class":1018},[199,167479,1912],{"class":205},[199,167481,1920],{"class":1018},[199,167483,7554],{"class":205},[31,167485,165730],{},[190,167487,167489],{"className":33221,"code":167488,"language":33223,"meta":57,"style":57},"sorted([3, 1, 2])\n",[196,167490,167491],{"__ignoreMap":57},[199,167492,167493,167496,167498,167500,167502,167504,167506,167508],{"class":201,"line":202},[199,167494,167495],{"class":1018},"sorted",[199,167497,167373],{"class":205},[199,167499,1920],{"class":1018},[199,167501,1912],{"class":205},[199,167503,1115],{"class":1018},[199,167505,1912],{"class":205},[199,167507,1925],{"class":1018},[199,167509,7554],{"class":205},[31,167511,167512],{},"类型转换：",[190,167514,167516],{"className":33221,"code":167515,"language":33223,"meta":57,"style":57},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[196,167517,167518,167528,167546],{"__ignoreMap":57},[199,167519,167520,167522,167524,167526],{"class":201,"line":202},[199,167521,156329],{"class":1018},[199,167523,1537],{"class":205},[199,167525,158139],{"class":898},[199,167527,1594],{"class":205},[199,167529,167530,167532,167534,167536,167538,167540,167542,167544],{"class":201,"line":36},[199,167531,157524],{"class":1018},[199,167533,167373],{"class":205},[199,167535,1115],{"class":1018},[199,167537,1912],{"class":205},[199,167539,1925],{"class":1018},[199,167541,1912],{"class":205},[199,167543,1920],{"class":1018},[199,167545,7554],{"class":205},[199,167547,167548,167550,167552,167554,167556,167558,167560,167562,167564,167566],{"class":201,"line":73},[199,167549,157549],{"class":1018},[199,167551,167373],{"class":205},[199,167553,1115],{"class":1018},[199,167555,1912],{"class":205},[199,167557,1115],{"class":1018},[199,167559,1912],{"class":205},[199,167561,1925],{"class":1018},[199,167563,1912],{"class":205},[199,167565,1920],{"class":1018},[199,167567,7554],{"class":205},[31,167569,167570],{},"成员判断：",[190,167572,167574],{"className":33221,"code":167573,"language":33223,"meta":57,"style":57},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[196,167575,167576,167593,167617],{"__ignoreMap":57},[199,167577,167578,167580,167582,167585,167588,167591],{"class":201,"line":202},[199,167579,33258],{"class":1018},[199,167581,1537],{"class":205},[199,167583,167584],{"class":898},"\"a\"",[199,167586,167587],{"class":1086}," in",[199,167589,167590],{"class":898}," \"abc\"",[199,167592,1594],{"class":205},[199,167594,167595,167597,167599,167601,167603,167605,167607,167609,167611,167613,167615],{"class":201,"line":36},[199,167596,33258],{"class":1018},[199,167598,1537],{"class":205},[199,167600,1115],{"class":1018},[199,167602,167587],{"class":1086},[199,167604,1906],{"class":205},[199,167606,1115],{"class":1018},[199,167608,1912],{"class":205},[199,167610,1925],{"class":1018},[199,167612,1912],{"class":205},[199,167614,1920],{"class":1018},[199,167616,7554],{"class":205},[199,167618,167619,167621,167623,167625,167627,167629,167631,167633,167635],{"class":201,"line":73},[199,167620,33258],{"class":1018},[199,167622,1537],{"class":205},[199,167624,64938],{"class":898},[199,167626,167587],{"class":1086},[199,167628,7345],{"class":205},[199,167630,64938],{"class":898},[199,167632,1022],{"class":205},[199,167634,152147],{"class":898},[199,167636,167411],{"class":205},[14,167638,167640],{"id":167639},"_614-推导式","6.14 推导式",[31,167642,167643],{},"推导式用于快速生成容器。",[31,167645,167646],{},"列表推导式：",[190,167648,167650],{"className":33221,"code":167649,"language":33223,"meta":57,"style":57},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[196,167651,167652,167679],{"__ignoreMap":57},[199,167653,167654,167656,167658,167661,167663,167665,167667,167669,167671,167673,167675,167677],{"class":201,"line":202},[199,167655,166359],{"class":205},[199,167657,895],{"class":1086},[199,167659,167660],{"class":205}," [i ",[199,167662,5929],{"class":1086},[199,167664,1490],{"class":205},[199,167666,28886],{"class":1086},[199,167668,35285],{"class":1018},[199,167670,1537],{"class":205},[199,167672,1115],{"class":1018},[199,167674,1912],{"class":205},[199,167676,3428],{"class":1018},[199,167678,99559],{"class":205},[199,167680,167681,167683],{"class":201,"line":36},[199,167682,33258],{"class":1018},[199,167684,166575],{"class":205},[31,167686,167687],{},"带条件：",[190,167689,167691],{"className":33221,"code":167690,"language":33223,"meta":57,"style":57},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[196,167692,167693,167734],{"__ignoreMap":57},[199,167694,167695,167698,167700,167702,167704,167706,167708,167710,167712,167714,167716,167718,167720,167722,167724,167726,167728,167730,167732],{"class":201,"line":202},[199,167696,167697],{"class":205},"even_nums ",[199,167699,895],{"class":1086},[199,167701,167660],{"class":205},[199,167703,5929],{"class":1086},[199,167705,1490],{"class":205},[199,167707,28886],{"class":1086},[199,167709,35285],{"class":1018},[199,167711,1537],{"class":205},[199,167713,1115],{"class":1018},[199,167715,1912],{"class":205},[199,167717,3421],{"class":1018},[199,167719,16575],{"class":205},[199,167721,4470],{"class":1086},[199,167723,1490],{"class":205},[199,167725,3412],{"class":1086},[199,167727,17615],{"class":1018},[199,167729,103818],{"class":1086},[199,167731,1621],{"class":1018},[199,167733,1932],{"class":205},[199,167735,167736,167738],{"class":201,"line":36},[199,167737,33258],{"class":1018},[199,167739,167740],{"class":205},"(even_nums)\n",[31,167742,167743],{},"字典推导式：",[190,167745,167747],{"className":33221,"code":167746,"language":33223,"meta":57,"style":57},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[196,167748,167749,167783],{"__ignoreMap":57},[199,167750,167751,167754,167756,167759,167761,167763,167766,167768,167770,167772,167774,167776,167778,167780],{"class":201,"line":202},[199,167752,167753],{"class":205},"squares ",[199,167755,895],{"class":1086},[199,167757,167758],{"class":205}," {i: i ",[199,167760,13524],{"class":1086},[199,167762,17615],{"class":1018},[199,167764,167765],{"class":1086}," for",[199,167767,1490],{"class":205},[199,167769,28886],{"class":1086},[199,167771,35285],{"class":1018},[199,167773,1537],{"class":205},[199,167775,1115],{"class":1018},[199,167777,1912],{"class":205},[199,167779,3428],{"class":1018},[199,167781,167782],{"class":205},")}\n",[199,167784,167785,167787],{"class":201,"line":36},[199,167786,33258],{"class":1018},[199,167788,167789],{"class":205},"(squares)\n",[31,167791,167792],{},"集合推导式：",[190,167794,167796],{"className":33221,"code":167795,"language":33223,"meta":57,"style":57},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[196,167797,167798,167819],{"__ignoreMap":57},[199,167799,167800,167803,167805,167808,167810,167812,167814,167817],{"class":201,"line":202},[199,167801,167802],{"class":205},"chars ",[199,167804,895],{"class":1086},[199,167806,167807],{"class":205}," {ch ",[199,167809,5929],{"class":1086},[199,167811,161951],{"class":205},[199,167813,28886],{"class":1086},[199,167815,167816],{"class":898}," \"hello\"",[199,167818,671],{"class":205},[199,167820,167821,167823],{"class":201,"line":36},[199,167822,33258],{"class":1018},[199,167824,167825],{"class":205},"(chars)\n",[31,167827,167828],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167830,167832],{"id":167831},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[190,167834,167836],{"className":33221,"code":167835,"language":33223,"meta":57,"style":57},"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",[196,167837,167838,167846,167866,167886,167906,167926,167930,167934,167942,167956,167965,167969,167979,167991,167995,168015,168024,168028,168044,168049,168053,168067,168071,168093,168129],{"__ignoreMap":57},[199,167839,167840,167842,167844],{"class":201,"line":202},[199,167841,161975],{"class":205},[199,167843,895],{"class":1086},[199,167845,57706],{"class":205},[199,167847,167848,167850,167852,167854,167856,167858,167860,167862,167864],{"class":201,"line":36},[199,167849,150644],{"class":205},[199,167851,64938],{"class":898},[199,167853,1022],{"class":205},[199,167855,152147],{"class":898},[199,167857,1912],{"class":205},[199,167859,153731],{"class":898},[199,167861,1022],{"class":205},[199,167863,4063],{"class":1018},[199,167865,7827],{"class":205},[199,167867,167868,167870,167872,167874,167876,167878,167880,167882,167884],{"class":201,"line":73},[199,167869,150644],{"class":205},[199,167871,64938],{"class":898},[199,167873,1022],{"class":205},[199,167875,153195],{"class":898},[199,167877,1912],{"class":205},[199,167879,153731],{"class":898},[199,167881,1022],{"class":205},[199,167883,3890],{"class":1018},[199,167885,7827],{"class":205},[199,167887,167888,167890,167892,167894,167896,167898,167900,167902,167904],{"class":201,"line":333},[199,167889,150644],{"class":205},[199,167891,64938],{"class":898},[199,167893,1022],{"class":205},[199,167895,161990],{"class":898},[199,167897,1912],{"class":205},[199,167899,153731],{"class":898},[199,167901,1022],{"class":205},[199,167903,3489],{"class":1018},[199,167905,7827],{"class":205},[199,167907,167908,167910,167912,167914,167916,167918,167920,167922,167924],{"class":201,"line":227},[199,167909,150644],{"class":205},[199,167911,64938],{"class":898},[199,167913,1022],{"class":205},[199,167915,165569],{"class":898},[199,167917,1912],{"class":205},[199,167919,153731],{"class":898},[199,167921,1022],{"class":205},[199,167923,3961],{"class":1018},[199,167925,7827],{"class":205},[199,167927,167928],{"class":201,"line":238},[199,167929,1932],{"class":205},[199,167931,167932],{"class":201,"line":252},[199,167933,907],{"emptyLinePlaceholder":906},[199,167935,167936,167938,167940],{"class":201,"line":388},[199,167937,159519],{"class":205},[199,167939,895],{"class":1086},[199,167941,50173],{"class":1018},[199,167943,167944,167947,167949,167952,167954],{"class":201,"line":415},[199,167945,167946],{"class":205},"max_student ",[199,167948,895],{"class":1086},[199,167950,167951],{"class":205}," students[",[199,167953,1025],{"class":1018},[199,167955,1932],{"class":205},[199,167957,167958,167961,167963],{"class":201,"line":426},[199,167959,167960],{"class":205},"passed ",[199,167962,895],{"class":1086},[199,167964,1475],{"class":205},[199,167966,167967],{"class":201,"line":1015},[199,167968,907],{"emptyLinePlaceholder":906},[199,167970,167971,167973,167975,167977],{"class":201,"line":1031},[199,167972,5929],{"class":1086},[199,167974,154396],{"class":205},[199,167976,28886],{"class":1086},[199,167978,154401],{"class":205},[199,167980,167981,167983,167985,167987,167989],{"class":201,"line":1043},[199,167982,161566],{"class":205},[199,167984,12362],{"class":1086},[199,167986,154408],{"class":205},[199,167988,153731],{"class":898},[199,167990,1932],{"class":205},[199,167992,167993],{"class":201,"line":1049},[199,167994,907],{"emptyLinePlaceholder":906},[199,167996,167997,167999,168001,168003,168005,168007,168010,168012],{"class":201,"line":1054},[199,167998,6005],{"class":1086},[199,168000,154408],{"class":205},[199,168002,153731],{"class":898},[199,168004,2078],{"class":205},[199,168006,1217],{"class":1086},[199,168008,168009],{"class":205}," max_student[",[199,168011,153731],{"class":898},[199,168013,168014],{"class":205},"]:\n",[199,168016,168017,168020,168022],{"class":201,"line":1062},[199,168018,168019],{"class":205},"        max_student ",[199,168021,895],{"class":1086},[199,168023,154424],{"class":205},[199,168025,168026],{"class":201,"line":1075},[199,168027,907],{"emptyLinePlaceholder":906},[199,168029,168030,168032,168034,168036,168038,168040,168042],{"class":201,"line":1092},[199,168031,6005],{"class":1086},[199,168033,154408],{"class":205},[199,168035,153731],{"class":898},[199,168037,2078],{"class":205},[199,168039,4635],{"class":1086},[199,168041,160096],{"class":1018},[199,168043,6640],{"class":205},[199,168045,168046],{"class":201,"line":1107},[199,168047,168048],{"class":205},"        passed.append(student)\n",[199,168050,168051],{"class":201,"line":1128},[199,168052,907],{"emptyLinePlaceholder":906},[199,168054,168055,168057,168059,168061,168063,168065],{"class":201,"line":1146},[199,168056,166033],{"class":205},[199,168058,895],{"class":1086},[199,168060,166038],{"class":205},[199,168062,3664],{"class":1086},[199,168064,10228],{"class":1018},[199,168066,167254],{"class":205},[199,168068,168069],{"class":201,"line":1163},[199,168070,907],{"emptyLinePlaceholder":906},[199,168072,168073,168075,168077,168079,168081,168083,168085,168087,168089,168091],{"class":201,"line":1176},[199,168074,33258],{"class":1018},[199,168076,1537],{"class":205},[199,168078,3146],{"class":1086},[199,168080,166056],{"class":898},[199,168082,3974],{"class":1018},[199,168084,166061],{"class":205},[199,168086,159418],{"class":1086},[199,168088,759],{"class":1018},[199,168090,3337],{"class":898},[199,168092,1594],{"class":205},[199,168094,168095,168097,168099,168101,168104,168106,168109,168111,168113,168115,168117,168119,168121,168123,168125,168127],{"class":201,"line":1189},[199,168096,33258],{"class":1018},[199,168098,1537],{"class":205},[199,168100,3146],{"class":1086},[199,168102,168103],{"class":898},"\"最高分学生:",[199,168105,3974],{"class":1018},[199,168107,168108],{"class":205},"max_student[",[199,168110,155141],{"class":898},[199,168112,1667],{"class":205},[199,168114,759],{"class":1018},[199,168116,7345],{"class":1018},[199,168118,168108],{"class":205},[199,168120,155179],{"class":898},[199,168122,1667],{"class":205},[199,168124,759],{"class":1018},[199,168126,3337],{"class":898},[199,168128,1594],{"class":205},[199,168130,168131,168133,168135,168137,168140,168143,168146,168148,168150],{"class":201,"line":1202},[199,168132,33258],{"class":1018},[199,168134,1537],{"class":205},[199,168136,3146],{"class":1086},[199,168138,168139],{"class":898},"\"及格人数:",[199,168141,168142],{"class":1018},"{len",[199,168144,168145],{"class":205},"(passed)",[199,168147,759],{"class":1018},[199,168149,3337],{"class":898},[199,168151,1594],{"class":205},[14,168153,168155],{"id":168154},"_616-易错点","6.16 易错点",[24,168157,168158,168161,168164,168167,168173,168182],{},[27,168159,168160],{},"列表可变，元组和字符串不可变。",[27,168162,168163],{},"切片结束位置不包含。",[27,168165,168166],{},"字典通过 key 取值，不是通过索引。",[27,168168,168169,168170,31228],{},"空集合要用 ",[196,168171,168172],{},"set()",[27,168174,106625,168175,168178,168179,31228],{},[196,168176,168177],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[196,168180,168181],{},"get()",[27,168183,168184],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168186,168188],{"id":168187},"_617-本章练习","6.17 本章练习",[24,168190,168191,168194,168197,168200,168203],{},[27,168192,168193],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[27,168195,168196],{},"输入一句话，统计每个字符出现次数。",[27,168198,168199],{},"使用集合去除列表中的重复元素。",[27,168201,168202],{},"使用字典保存一个学生的信息，并实现修改成绩。",[27,168204,168205],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1002,168207,168208],{},"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":57,"searchDepth":36,"depth":36,"links":168210},[168211,168212,168213,168214,168215,168216,168217,168218,168219,168220,168221,168222,168223,168224,168225,168226,168227],{"id":165191,"depth":36,"text":165192},{"id":165308,"depth":36,"text":165309},{"id":165398,"depth":36,"text":165399},{"id":165522,"depth":36,"text":165523},{"id":165885,"depth":36,"text":165886},{"id":166072,"depth":36,"text":166073},{"id":166191,"depth":36,"text":166192},{"id":166333,"depth":36,"text":166334},{"id":166520,"depth":36,"text":166521},{"id":166764,"depth":36,"text":166765},{"id":166974,"depth":36,"text":166975},{"id":167059,"depth":36,"text":167060},{"id":167357,"depth":36,"text":167358},{"id":167639,"depth":36,"text":167640},{"id":167831,"depth":36,"text":167832},{"id":168154,"depth":36,"text":168155},{"id":168187,"depth":36,"text":168188},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165183,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168234,"title":168235,"body":168236,"description":3023,"extension":3024,"meta":170408,"navigation":906,"path":170409,"seo":170410,"stem":170411,"__hash__":170412},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168237,"toc":170383},[168238,168241,168245,168248,168328,168331,168352,168355,168359,168362,168424,168427,168444,168448,168451,168496,168498,168506,168510,168513,168595,168598,168601,168626,168629,168652,168656,168659,168661,168723,168726,168728,168779,168783,168787,168793,168898,168902,168908,168979,168983,168986,169054,169057,169137,169141,169147,169183,169186,169189,169299,169305,169309,169312,169384,169387,169391,169395,169400,169462,169466,169471,169539,169543,169548,169664,169668,169671,169751,169754,169758,169761,169865,169867,169882,169885,169889,170027,170035,170039,170041,170052,170054,170312,170316,170348,170352,170380],[10,168239,168235],{"id":168240},"_7-函数进阶",[14,168242,168244],{"id":168243},"_71-多返回值","7.1 多返回值",[31,168246,168247],{},"Python 函数可以返回多个值，本质上返回的是元组。",[190,168249,168251],{"className":33221,"code":168250,"language":33223,"meta":57,"style":57},"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",[196,168252,168253,168262,168270,168278,168287,168294,168298,168302,168311,168317],{"__ignoreMap":57},[199,168254,168255,168257,168260],{"class":201,"line":202},[199,168256,34789],{"class":1086},[199,168258,168259],{"class":878}," get_info",[199,168261,34795],{"class":205},[199,168263,168264,168266,168268],{"class":201,"line":36},[199,168265,154629],{"class":205},[199,168267,895],{"class":1086},[199,168269,151612],{"class":898},[199,168271,168272,168274,168276],{"class":201,"line":73},[199,168273,154645],{"class":205},[199,168275,895],{"class":1086},[199,168277,148810],{"class":1018},[199,168279,168280,168282,168284],{"class":201,"line":333},[199,168281,154660],{"class":205},[199,168283,895],{"class":1086},[199,168285,168286],{"class":1018}," 95\n",[199,168288,168289,168291],{"class":201,"line":227},[199,168290,6989],{"class":1086},[199,168292,168293],{"class":205}," name, age, score\n",[199,168295,168296],{"class":201,"line":238},[199,168297,907],{"emptyLinePlaceholder":906},[199,168299,168300],{"class":201,"line":252},[199,168301,907],{"emptyLinePlaceholder":906},[199,168303,168304,168306,168308],{"class":201,"line":388},[199,168305,163565],{"class":205},[199,168307,895],{"class":1086},[199,168309,168310],{"class":205}," get_info()\n",[199,168312,168313,168315],{"class":201,"line":415},[199,168314,33258],{"class":1018},[199,168316,78844],{"class":205},[199,168318,168319,168321,168323,168325],{"class":201,"line":426},[199,168320,33258],{"class":1018},[199,168322,1537],{"class":205},[199,168324,105366],{"class":1018},[199,168326,168327],{"class":205},"(result))\n",[31,168329,168330],{},"可以直接解包：",[190,168332,168334],{"className":33221,"code":168333,"language":33223,"meta":57,"style":57},"name, age, score = get_info()\nprint(name, age, score)\n",[196,168335,168336,168345],{"__ignoreMap":57},[199,168337,168338,168341,168343],{"class":201,"line":202},[199,168339,168340],{"class":205},"name, age, score ",[199,168342,895],{"class":1086},[199,168344,168310],{"class":205},[199,168346,168347,168349],{"class":201,"line":36},[199,168348,33258],{"class":1018},[199,168350,168351],{"class":205},"(name, age, score)\n",[31,168353,168354],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168356,168358],{"id":168357},"_72-位置参数","7.2 位置参数",[31,168360,168361],{},"位置参数按顺序传递。",[190,168363,168365],{"className":33221,"code":168364,"language":33223,"meta":57,"style":57},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[196,168366,168367,168375,168403,168407,168411],{"__ignoreMap":57},[199,168368,168369,168371,168373],{"class":201,"line":202},[199,168370,34789],{"class":1086},[199,168372,151631],{"class":878},[199,168374,151634],{"class":205},[199,168376,168377,168379,168381,168383,168385,168387,168389,168391,168393,168395,168397,168399,168401],{"class":201,"line":36},[199,168378,34141],{"class":1018},[199,168380,1537],{"class":205},[199,168382,3146],{"class":1086},[199,168384,151645],{"class":898},[199,168386,3974],{"class":1018},[199,168388,82069],{"class":205},[199,168390,759],{"class":1018},[199,168392,151654],{"class":898},[199,168394,3974],{"class":1018},[199,168396,72480],{"class":205},[199,168398,759],{"class":1018},[199,168400,151663],{"class":898},[199,168402,1594],{"class":205},[199,168404,168405],{"class":201,"line":73},[199,168406,907],{"emptyLinePlaceholder":906},[199,168408,168409],{"class":201,"line":333},[199,168410,907],{"emptyLinePlaceholder":906},[199,168412,168413,168416,168418,168420,168422],{"class":201,"line":227},[199,168414,168415],{"class":205},"introduce(",[199,168417,152147],{"class":898},[199,168419,1912],{"class":205},[199,168421,3730],{"class":1018},[199,168423,1594],{"class":205},[31,168425,168426],{},"顺序错了就会得到错误含义：",[190,168428,168430],{"className":33221,"code":168429,"language":33223,"meta":57,"style":57},"introduce(18, \"小明\")\n",[196,168431,168432],{"__ignoreMap":57},[199,168433,168434,168436,168438,168440,168442],{"class":201,"line":202},[199,168435,168415],{"class":205},[199,168437,3730],{"class":1018},[199,168439,1912],{"class":205},[199,168441,152147],{"class":898},[199,168443,1594],{"class":205},[14,168445,168447],{"id":168446},"_73-关键字参数","7.3 关键字参数",[31,168449,168450],{},"关键字参数按参数名传递。",[190,168452,168454],{"className":33221,"code":168453,"language":33223,"meta":57,"style":57},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[196,168455,168456,168476],{"__ignoreMap":57},[199,168457,168458,168460,168462,168464,168466,168468,168470,168472,168474],{"class":201,"line":202},[199,168459,168415],{"class":205},[199,168461,82069],{"class":8113},[199,168463,895],{"class":1086},[199,168465,152147],{"class":898},[199,168467,1912],{"class":205},[199,168469,72480],{"class":8113},[199,168471,895],{"class":1086},[199,168473,3730],{"class":1018},[199,168475,1594],{"class":205},[199,168477,168478,168480,168482,168484,168486,168488,168490,168492,168494],{"class":201,"line":36},[199,168479,168415],{"class":205},[199,168481,72480],{"class":8113},[199,168483,895],{"class":1086},[199,168485,3730],{"class":1018},[199,168487,1912],{"class":205},[199,168489,82069],{"class":8113},[199,168491,895],{"class":1086},[199,168493,152147],{"class":898},[199,168495,1594],{"class":205},[31,168497,120193],{},[24,168499,168500,168503],{},[27,168501,168502],{},"顺序不容易错。",[27,168504,168505],{},"调用时可读性更强。",[14,168507,168509],{"id":168508},"_74-默认参数","7.4 默认参数",[31,168511,168512],{},"默认参数给参数设置默认值。",[190,168514,168516],{"className":33221,"code":168515,"language":33223,"meta":57,"style":57},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[196,168517,168518,168534,168564,168568,168572,168582],{"__ignoreMap":57},[199,168519,168520,168522,168524,168527,168529,168532],{"class":201,"line":202},[199,168521,34789],{"class":1086},[199,168523,124352],{"class":878},[199,168525,168526],{"class":205},"(host, port",[199,168528,895],{"class":1086},[199,168530,168531],{"class":1018},"3306",[199,168533,33628],{"class":205},[199,168535,168536,168538,168540,168542,168545,168547,168549,168551,168553,168555,168558,168560,168562],{"class":201,"line":36},[199,168537,34141],{"class":1018},[199,168539,1537],{"class":205},[199,168541,3146],{"class":1086},[199,168543,168544],{"class":898},"\"连接",[199,168546,3974],{"class":1018},[199,168548,30238],{"class":205},[199,168550,759],{"class":1018},[199,168552,3938],{"class":898},[199,168554,3974],{"class":1018},[199,168556,168557],{"class":205},"port",[199,168559,759],{"class":1018},[199,168561,3337],{"class":898},[199,168563,1594],{"class":205},[199,168565,168566],{"class":201,"line":73},[199,168567,907],{"emptyLinePlaceholder":906},[199,168569,168570],{"class":201,"line":333},[199,168571,907],{"emptyLinePlaceholder":906},[199,168573,168574,168577,168580],{"class":201,"line":227},[199,168575,168576],{"class":205},"connect(",[199,168578,168579],{"class":898},"\"localhost\"",[199,168581,1594],{"class":205},[199,168583,168584,168586,168588,168590,168593],{"class":201,"line":238},[199,168585,168576],{"class":205},[199,168587,168579],{"class":898},[199,168589,1912],{"class":205},[199,168591,168592],{"class":1018},"6379",[199,168594,1594],{"class":205},[31,168596,168597],{},"注意：默认参数必须放在非默认参数后面。",[31,168599,168600],{},"错误：",[190,168602,168604],{"className":33221,"code":168603,"language":33223,"meta":57,"style":57},"def connect(port=3306, host):\n    pass\n",[196,168605,168606,168622],{"__ignoreMap":57},[199,168607,168608,168610,168612,168615,168617,168619],{"class":201,"line":202},[199,168609,34789],{"class":1086},[199,168611,124352],{"class":878},[199,168613,168614],{"class":205},"(port",[199,168616,895],{"class":1086},[199,168618,168531],{"class":1018},[199,168620,168621],{"class":205},", host):\n",[199,168623,168624],{"class":201,"line":36},[199,168625,151796],{"class":1086},[31,168627,168628],{},"正确：",[190,168630,168632],{"className":33221,"code":168631,"language":33223,"meta":57,"style":57},"def connect(host, port=3306):\n    pass\n",[196,168633,168634,168648],{"__ignoreMap":57},[199,168635,168636,168638,168640,168642,168644,168646],{"class":201,"line":202},[199,168637,34789],{"class":1086},[199,168639,124352],{"class":878},[199,168641,168526],{"class":205},[199,168643,895],{"class":1086},[199,168645,168531],{"class":1018},[199,168647,33628],{"class":205},[199,168649,168650],{"class":201,"line":36},[199,168651,151796],{"class":1086},[14,168653,168655],{"id":168654},"_75-默认参数的坑","7.5 默认参数的坑",[31,168657,168658],{},"不要使用可变对象作为默认参数。",[31,168660,159882],{},[190,168662,168664],{"className":33221,"code":168663,"language":33223,"meta":57,"style":57},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[196,168665,168666,168681,168686,168693,168697,168701,168712],{"__ignoreMap":57},[199,168667,168668,168670,168673,168676,168678],{"class":201,"line":202},[199,168669,34789],{"class":1086},[199,168671,168672],{"class":878}," add_item",[199,168674,168675],{"class":205},"(item, items",[199,168677,895],{"class":1086},[199,168679,168680],{"class":205},"[]):\n",[199,168682,168683],{"class":201,"line":36},[199,168684,168685],{"class":205},"    items.append(item)\n",[199,168687,168688,168690],{"class":201,"line":73},[199,168689,6989],{"class":1086},[199,168691,168692],{"class":205}," items\n",[199,168694,168695],{"class":201,"line":333},[199,168696,907],{"emptyLinePlaceholder":906},[199,168698,168699],{"class":201,"line":227},[199,168700,907],{"emptyLinePlaceholder":906},[199,168702,168703,168705,168708,168710],{"class":201,"line":238},[199,168704,33258],{"class":1018},[199,168706,168707],{"class":205},"(add_item(",[199,168709,167584],{"class":898},[199,168711,1554],{"class":205},[199,168713,168714,168716,168718,168721],{"class":201,"line":252},[199,168715,33258],{"class":1018},[199,168717,168707],{"class":205},[199,168719,168720],{"class":898},"\"b\"",[199,168722,1554],{"class":205},[31,168724,168725],{},"第二次调用会复用第一次的列表。",[31,168727,158147],{},[190,168729,168731],{"className":33221,"code":168730,"language":33223,"meta":57,"style":57},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[196,168732,168733,168747,168760,168769,168773],{"__ignoreMap":57},[199,168734,168735,168737,168739,168741,168743,168745],{"class":201,"line":202},[199,168736,34789],{"class":1086},[199,168738,168672],{"class":878},[199,168740,168675],{"class":205},[199,168742,895],{"class":1086},[199,168744,97945],{"class":1018},[199,168746,33628],{"class":205},[199,168748,168749,168751,168754,168756,168758],{"class":201,"line":36},[199,168750,6005],{"class":1086},[199,168752,168753],{"class":205}," items ",[199,168755,41768],{"class":1086},[199,168757,41774],{"class":1018},[199,168759,6640],{"class":205},[199,168761,168762,168765,168767],{"class":201,"line":73},[199,168763,168764],{"class":205},"        items ",[199,168766,895],{"class":1086},[199,168768,1475],{"class":205},[199,168770,168771],{"class":201,"line":333},[199,168772,168685],{"class":205},[199,168774,168775,168777],{"class":201,"line":227},[199,168776,6989],{"class":1086},[199,168778,168692],{"class":205},[14,168780,168782],{"id":168781},"_76-不定长参数","7.6 不定长参数",[19,168784,168786],{"id":168785},"_761-args","7.6.1 *args",[31,168788,168789,168792],{},[196,168790,168791],{},"*args"," 接收任意数量的位置参数，得到元组。",[190,168794,168796],{"className":33221,"code":168795,"language":33223,"meta":57,"style":57},"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",[196,168797,168798,168811,168819,168830,168839,168845,168849,168853,168872],{"__ignoreMap":57},[199,168799,168800,168802,168804,168806,168808],{"class":201,"line":202},[199,168801,34789],{"class":1086},[199,168803,8106],{"class":878},[199,168805,1537],{"class":205},[199,168807,3537],{"class":1086},[199,168809,168810],{"class":205},"args):\n",[199,168812,168813,168815,168817],{"class":201,"line":36},[199,168814,161566],{"class":205},[199,168816,895],{"class":1086},[199,168818,50173],{"class":1018},[199,168820,168821,168823,168825,168827],{"class":201,"line":73},[199,168822,1937],{"class":1086},[199,168824,158439],{"class":205},[199,168826,28886],{"class":1086},[199,168828,168829],{"class":205}," args:\n",[199,168831,168832,168834,168836],{"class":201,"line":333},[199,168833,162241],{"class":205},[199,168835,12362],{"class":1086},[199,168837,168838],{"class":205}," num\n",[199,168840,168841,168843],{"class":201,"line":227},[199,168842,6989],{"class":1086},[199,168844,164546],{"class":205},[199,168846,168847],{"class":201,"line":238},[199,168848,907],{"emptyLinePlaceholder":906},[199,168850,168851],{"class":201,"line":252},[199,168852,907],{"emptyLinePlaceholder":906},[199,168854,168855,168857,168860,168862,168864,168866,168868,168870],{"class":201,"line":388},[199,168856,33258],{"class":1018},[199,168858,168859],{"class":205},"(add(",[199,168861,1115],{"class":1018},[199,168863,1912],{"class":205},[199,168865,1925],{"class":1018},[199,168867,1912],{"class":205},[199,168869,1920],{"class":1018},[199,168871,1554],{"class":205},[199,168873,168874,168876,168878,168880,168882,168884,168886,168888,168890,168892,168894,168896],{"class":201,"line":415},[199,168875,33258],{"class":1018},[199,168877,168859],{"class":205},[199,168879,1115],{"class":1018},[199,168881,1912],{"class":205},[199,168883,1925],{"class":1018},[199,168885,1912],{"class":205},[199,168887,1920],{"class":1018},[199,168889,1912],{"class":205},[199,168891,1915],{"class":1018},[199,168893,1912],{"class":205},[199,168895,1909],{"class":1018},[199,168897,1554],{"class":205},[19,168899,168901],{"id":168900},"_762-kwargs","7.6.2 **kwargs",[31,168903,168904,168907],{},[196,168905,168906],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[190,168909,168911],{"className":33221,"code":168910,"language":33223,"meta":57,"style":57},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[196,168912,168913,168926,168937,168943,168947,168951],{"__ignoreMap":57},[199,168914,168915,168917,168919,168921,168923],{"class":201,"line":202},[199,168916,34789],{"class":1086},[199,168918,164204],{"class":878},[199,168920,1537],{"class":205},[199,168922,13524],{"class":1086},[199,168924,168925],{"class":205},"kwargs):\n",[199,168927,168928,168930,168932,168934],{"class":201,"line":36},[199,168929,1937],{"class":1086},[199,168931,167044],{"class":205},[199,168933,28886],{"class":1086},[199,168935,168936],{"class":205}," kwargs.items():\n",[199,168938,168939,168941],{"class":201,"line":73},[199,168940,35293],{"class":1018},[199,168942,167056],{"class":205},[199,168944,168945],{"class":201,"line":333},[199,168946,907],{"emptyLinePlaceholder":906},[199,168948,168949],{"class":201,"line":227},[199,168950,907],{"emptyLinePlaceholder":906},[199,168952,168953,168955,168957,168959,168961,168963,168965,168967,168969,168971,168973,168975,168977],{"class":201,"line":238},[199,168954,164269],{"class":205},[199,168956,82069],{"class":8113},[199,168958,895],{"class":1086},[199,168960,152147],{"class":898},[199,168962,1912],{"class":205},[199,168964,72480],{"class":8113},[199,168966,895],{"class":1086},[199,168968,3730],{"class":1018},[199,168970,1912],{"class":205},[199,168972,72531],{"class":8113},[199,168974,895],{"class":1086},[199,168976,71528],{"class":898},[199,168978,1594],{"class":205},[14,168980,168982],{"id":168981},"_77-参数解包","7.7 参数解包",[31,168984,168985],{},"列表或元组解包为位置参数：",[190,168987,168989],{"className":33221,"code":168988,"language":33223,"meta":57,"style":57},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[196,168990,168991,169000,169015,169019,169023,169043],{"__ignoreMap":57},[199,168992,168993,168995,168997],{"class":201,"line":202},[199,168994,34789],{"class":1086},[199,168996,8106],{"class":878},[199,168998,168999],{"class":205},"(a, b, c):\n",[199,169001,169002,169004,169006,169008,169010,169012],{"class":201,"line":36},[199,169003,6989],{"class":1086},[199,169005,13732],{"class":205},[199,169007,2028],{"class":1086},[199,169009,13745],{"class":205},[199,169011,2028],{"class":1086},[199,169013,169014],{"class":205}," c\n",[199,169016,169017],{"class":201,"line":73},[199,169018,907],{"emptyLinePlaceholder":906},[199,169020,169021],{"class":201,"line":333},[199,169022,907],{"emptyLinePlaceholder":906},[199,169024,169025,169027,169029,169031,169033,169035,169037,169039,169041],{"class":201,"line":227},[199,169026,166359],{"class":205},[199,169028,895],{"class":1086},[199,169030,1906],{"class":205},[199,169032,1115],{"class":1018},[199,169034,1912],{"class":205},[199,169036,1925],{"class":1018},[199,169038,1912],{"class":205},[199,169040,1920],{"class":1018},[199,169042,1932],{"class":205},[199,169044,169045,169047,169049,169051],{"class":201,"line":238},[199,169046,33258],{"class":1018},[199,169048,168859],{"class":205},[199,169050,3537],{"class":1086},[199,169052,169053],{"class":205},"nums))\n",[31,169055,169056],{},"字典解包为关键字参数：",[190,169058,169060],{"className":33221,"code":169059,"language":33223,"meta":57,"style":57},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[196,169061,169062,169070,169096,169100,169104,169128],{"__ignoreMap":57},[199,169063,169064,169066,169068],{"class":201,"line":202},[199,169065,34789],{"class":1086},[199,169067,151631],{"class":878},[199,169069,151634],{"class":205},[199,169071,169072,169074,169076,169078,169080,169082,169084,169086,169088,169090,169092,169094],{"class":201,"line":36},[199,169073,34141],{"class":1018},[199,169075,1537],{"class":205},[199,169077,3146],{"class":1086},[199,169079,3337],{"class":898},[199,169081,3974],{"class":1018},[199,169083,82069],{"class":205},[199,169085,759],{"class":1018},[199,169087,7345],{"class":1018},[199,169089,72480],{"class":205},[199,169091,759],{"class":1018},[199,169093,3337],{"class":898},[199,169095,1594],{"class":205},[199,169097,169098],{"class":201,"line":73},[199,169099,907],{"emptyLinePlaceholder":906},[199,169101,169102],{"class":201,"line":333},[199,169103,907],{"emptyLinePlaceholder":906},[199,169105,169106,169108,169110,169112,169114,169116,169118,169120,169122,169124,169126],{"class":201,"line":227},[199,169107,118573],{"class":205},[199,169109,895],{"class":1086},[199,169111,7345],{"class":205},[199,169113,64938],{"class":898},[199,169115,1022],{"class":205},[199,169117,152147],{"class":898},[199,169119,1912],{"class":205},[199,169121,71383],{"class":898},[199,169123,1022],{"class":205},[199,169125,3730],{"class":1018},[199,169127,671],{"class":205},[199,169129,169130,169132,169134],{"class":201,"line":238},[199,169131,168415],{"class":205},[199,169133,13524],{"class":1086},[199,169135,169136],{"class":205},"info)\n",[14,169138,169140],{"id":169139},"_78-匿名函数lambda","7.8 匿名函数lambda",[31,169142,169143,169146],{},[196,169144,169145],{},"lambda"," 用于定义简单匿名函数。",[190,169148,169150],{"className":33221,"code":169149,"language":33223,"meta":57,"style":57},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[196,169151,169152,169169],{"__ignoreMap":57},[199,169153,169154,169157,169159,169162,169165,169167],{"class":201,"line":202},[199,169155,169156],{"class":205},"add ",[199,169158,895],{"class":1086},[199,169160,169161],{"class":1086}," lambda",[199,169163,169164],{"class":205}," a, b: a ",[199,169166,2028],{"class":1086},[199,169168,153363],{"class":205},[199,169170,169171,169173,169175,169177,169179,169181],{"class":201,"line":36},[199,169172,33258],{"class":1018},[199,169174,168859],{"class":205},[199,169176,1115],{"class":1018},[199,169178,1912],{"class":205},[199,169180,1925],{"class":1018},[199,169182,1554],{"class":205},[31,169184,169185],{},"常和排序、过滤等函数一起使用。",[31,169187,169188],{},"按分数排序：",[190,169190,169192],{"className":33221,"code":169191,"language":33223,"meta":57,"style":57},"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",[196,169193,169194,169202,169222,169242,169262,169266,169270,169293],{"__ignoreMap":57},[199,169195,169196,169198,169200],{"class":201,"line":202},[199,169197,161975],{"class":205},[199,169199,895],{"class":1086},[199,169201,57706],{"class":205},[199,169203,169204,169206,169208,169210,169212,169214,169216,169218,169220],{"class":201,"line":36},[199,169205,150644],{"class":205},[199,169207,64938],{"class":898},[199,169209,1022],{"class":205},[199,169211,152147],{"class":898},[199,169213,1912],{"class":205},[199,169215,153731],{"class":898},[199,169217,1022],{"class":205},[199,169219,4063],{"class":1018},[199,169221,7827],{"class":205},[199,169223,169224,169226,169228,169230,169232,169234,169236,169238,169240],{"class":201,"line":73},[199,169225,150644],{"class":205},[199,169227,64938],{"class":898},[199,169229,1022],{"class":205},[199,169231,153195],{"class":898},[199,169233,1912],{"class":205},[199,169235,153731],{"class":898},[199,169237,1022],{"class":205},[199,169239,3890],{"class":1018},[199,169241,7827],{"class":205},[199,169243,169244,169246,169248,169250,169252,169254,169256,169258,169260],{"class":201,"line":333},[199,169245,150644],{"class":205},[199,169247,64938],{"class":898},[199,169249,1022],{"class":205},[199,169251,161990],{"class":898},[199,169253,1912],{"class":205},[199,169255,153731],{"class":898},[199,169257,1022],{"class":205},[199,169259,3489],{"class":1018},[199,169261,7827],{"class":205},[199,169263,169264],{"class":201,"line":227},[199,169265,1932],{"class":205},[199,169267,169268],{"class":201,"line":238},[199,169269,907],{"emptyLinePlaceholder":906},[199,169271,169272,169275,169277,169279,169281,169283,169285,169287,169289,169291],{"class":201,"line":252},[199,169273,169274],{"class":205},"students.sort(",[199,169276,156205],{"class":8113},[199,169278,156208],{"class":1086},[199,169280,156211],{"class":205},[199,169282,153731],{"class":898},[199,169284,114461],{"class":205},[199,169286,165787],{"class":8113},[199,169288,895],{"class":1086},[199,169290,34318],{"class":1018},[199,169292,1594],{"class":205},[199,169294,169295,169297],{"class":201,"line":388},[199,169296,33258],{"class":1018},[199,169298,167254],{"class":205},[31,169300,169301,169302,169304],{},"如果逻辑复杂，不要硬写 ",[196,169303,169145],{},"，定义普通函数更清晰。",[14,169306,169308],{"id":169307},"_79-函数作为参数","7.9 函数作为参数",[31,169310,169311],{},"函数可以作为参数传给另一个函数。",[190,169313,169315],{"className":33221,"code":169314,"language":33223,"meta":57,"style":57},"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",[196,169316,169317,169325,169335,169339,169343,169353,169360,169364,169368],{"__ignoreMap":57},[199,169318,169319,169321,169323],{"class":201,"line":202},[199,169320,34789],{"class":1086},[199,169322,8106],{"class":878},[199,169324,153352],{"class":205},[199,169326,169327,169329,169331,169333],{"class":201,"line":36},[199,169328,6989],{"class":1086},[199,169330,13732],{"class":205},[199,169332,2028],{"class":1086},[199,169334,153363],{"class":205},[199,169336,169337],{"class":201,"line":73},[199,169338,907],{"emptyLinePlaceholder":906},[199,169340,169341],{"class":201,"line":333},[199,169342,907],{"emptyLinePlaceholder":906},[199,169344,169345,169347,169350],{"class":201,"line":227},[199,169346,34789],{"class":1086},[199,169348,169349],{"class":878}," calculate",[199,169351,169352],{"class":205},"(a, b, func):\n",[199,169354,169355,169357],{"class":201,"line":238},[199,169356,6989],{"class":1086},[199,169358,169359],{"class":205}," func(a, b)\n",[199,169361,169362],{"class":201,"line":252},[199,169363,907],{"emptyLinePlaceholder":906},[199,169365,169366],{"class":201,"line":388},[199,169367,907],{"emptyLinePlaceholder":906},[199,169369,169370,169372,169375,169377,169379,169381],{"class":201,"line":415},[199,169371,33258],{"class":1018},[199,169373,169374],{"class":205},"(calculate(",[199,169376,3528],{"class":1018},[199,169378,1912],{"class":205},[199,169380,3779],{"class":1018},[199,169382,169383],{"class":205},", add))\n",[31,169385,169386],{},"这种思想在排序、回调、框架中经常出现。",[14,169388,169390],{"id":169389},"_710-mapfiltersorted","7.10 map、filter、sorted",[19,169392,169394],{"id":169393},"_7101-map","7.10.1 map",[31,169396,169397,169399],{},[196,169398,76303],{}," 对每个元素执行函数。",[190,169401,169403],{"className":33221,"code":169402,"language":33223,"meta":57,"style":57},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[196,169404,169405,169429,169452],{"__ignoreMap":57},[199,169406,169407,169409,169411,169413,169415,169417,169419,169421,169423,169425,169427],{"class":201,"line":202},[199,169408,166359],{"class":205},[199,169410,895],{"class":1086},[199,169412,1906],{"class":205},[199,169414,1115],{"class":1018},[199,169416,1912],{"class":205},[199,169418,1925],{"class":1018},[199,169420,1912],{"class":205},[199,169422,1920],{"class":1018},[199,169424,1912],{"class":205},[199,169426,1915],{"class":1018},[199,169428,1932],{"class":205},[199,169430,169431,169433,169435,169438,169440,169442,169445,169447,169449],{"class":201,"line":36},[199,169432,163565],{"class":205},[199,169434,895],{"class":1086},[199,169436,169437],{"class":1018}," map",[199,169439,1537],{"class":205},[199,169441,169145],{"class":1086},[199,169443,169444],{"class":205}," x: x ",[199,169446,3537],{"class":1086},[199,169448,17615],{"class":1018},[199,169450,169451],{"class":205},", nums)\n",[199,169453,169454,169456,169458,169460],{"class":201,"line":73},[199,169455,33258],{"class":1018},[199,169457,1537],{"class":205},[199,169459,156329],{"class":1018},[199,169461,168327],{"class":205},[19,169463,169465],{"id":169464},"_7102-filter","7.10.2 filter",[31,169467,169468,169470],{},[196,169469,82310],{}," 保留满足条件的元素。",[190,169472,169474],{"className":33221,"code":169473,"language":33223,"meta":57,"style":57},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[196,169475,169476,169504,169529],{"__ignoreMap":57},[199,169477,169478,169480,169482,169484,169486,169488,169490,169492,169494,169496,169498,169500,169502],{"class":201,"line":202},[199,169479,166359],{"class":205},[199,169481,895],{"class":1086},[199,169483,1906],{"class":205},[199,169485,1115],{"class":1018},[199,169487,1912],{"class":205},[199,169489,1925],{"class":1018},[199,169491,1912],{"class":205},[199,169493,1920],{"class":1018},[199,169495,1912],{"class":205},[199,169497,1915],{"class":1018},[199,169499,1912],{"class":205},[199,169501,1909],{"class":1018},[199,169503,1932],{"class":205},[199,169505,169506,169508,169510,169513,169515,169517,169519,169521,169523,169525,169527],{"class":201,"line":36},[199,169507,163565],{"class":205},[199,169509,895],{"class":1086},[199,169511,169512],{"class":1018}," filter",[199,169514,1537],{"class":205},[199,169516,169145],{"class":1086},[199,169518,169444],{"class":205},[199,169520,3412],{"class":1086},[199,169522,17615],{"class":1018},[199,169524,103818],{"class":1086},[199,169526,1621],{"class":1018},[199,169528,169451],{"class":205},[199,169530,169531,169533,169535,169537],{"class":201,"line":73},[199,169532,33258],{"class":1018},[199,169534,1537],{"class":205},[199,169536,156329],{"class":1018},[199,169538,168327],{"class":205},[19,169540,169542],{"id":169541},"_7103-sorted","7.10.3 sorted",[31,169544,169545,169547],{},[196,169546,167495],{}," 返回排序后的新列表。",[190,169549,169551],{"className":33221,"code":169550,"language":33223,"meta":57,"style":57},"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",[196,169552,169553,169561,169581,169601,169621,169625,169629,169658],{"__ignoreMap":57},[199,169554,169555,169557,169559],{"class":201,"line":202},[199,169556,161975],{"class":205},[199,169558,895],{"class":1086},[199,169560,57706],{"class":205},[199,169562,169563,169565,169567,169569,169571,169573,169575,169577,169579],{"class":201,"line":36},[199,169564,150644],{"class":205},[199,169566,64938],{"class":898},[199,169568,1022],{"class":205},[199,169570,152147],{"class":898},[199,169572,1912],{"class":205},[199,169574,153731],{"class":898},[199,169576,1022],{"class":205},[199,169578,4063],{"class":1018},[199,169580,7827],{"class":205},[199,169582,169583,169585,169587,169589,169591,169593,169595,169597,169599],{"class":201,"line":73},[199,169584,150644],{"class":205},[199,169586,64938],{"class":898},[199,169588,1022],{"class":205},[199,169590,153195],{"class":898},[199,169592,1912],{"class":205},[199,169594,153731],{"class":898},[199,169596,1022],{"class":205},[199,169598,3890],{"class":1018},[199,169600,7827],{"class":205},[199,169602,169603,169605,169607,169609,169611,169613,169615,169617,169619],{"class":201,"line":333},[199,169604,150644],{"class":205},[199,169606,64938],{"class":898},[199,169608,1022],{"class":205},[199,169610,161990],{"class":898},[199,169612,1912],{"class":205},[199,169614,153731],{"class":898},[199,169616,1022],{"class":205},[199,169618,3489],{"class":1018},[199,169620,7827],{"class":205},[199,169622,169623],{"class":201,"line":227},[199,169624,1932],{"class":205},[199,169626,169627],{"class":201,"line":238},[199,169628,907],{"emptyLinePlaceholder":906},[199,169630,169631,169633,169635,169637,169640,169642,169644,169646,169648,169650,169652,169654,169656],{"class":201,"line":252},[199,169632,163565],{"class":205},[199,169634,895],{"class":1086},[199,169636,165863],{"class":1018},[199,169638,169639],{"class":205},"(students, ",[199,169641,156205],{"class":8113},[199,169643,156208],{"class":1086},[199,169645,156211],{"class":205},[199,169647,153731],{"class":898},[199,169649,114461],{"class":205},[199,169651,165787],{"class":8113},[199,169653,895],{"class":1086},[199,169655,34318],{"class":1018},[199,169657,1594],{"class":205},[199,169659,169660,169662],{"class":201,"line":388},[199,169661,33258],{"class":1018},[199,169663,78844],{"class":205},[14,169665,169667],{"id":169666},"_711-闭包入门","7.11 闭包入门",[31,169669,169670],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[190,169672,169674],{"className":33221,"code":169673,"language":33223,"meta":57,"style":57},"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",[196,169675,169676,169686,169696,169707,169711,169718,169722,169726,169740],{"__ignoreMap":57},[199,169677,169678,169680,169683],{"class":201,"line":202},[199,169679,34789],{"class":1086},[199,169681,169682],{"class":878}," outer",[199,169684,169685],{"class":205},"(base):\n",[199,169687,169688,169690,169693],{"class":201,"line":36},[199,169689,33643],{"class":1086},[199,169691,169692],{"class":878}," inner",[199,169694,169695],{"class":205},"(num):\n",[199,169697,169698,169700,169703,169705],{"class":201,"line":73},[199,169699,17612],{"class":1086},[199,169701,169702],{"class":205}," base ",[199,169704,2028],{"class":1086},[199,169706,168838],{"class":205},[199,169708,169709],{"class":201,"line":333},[199,169710,907],{"emptyLinePlaceholder":906},[199,169712,169713,169715],{"class":201,"line":227},[199,169714,6989],{"class":1086},[199,169716,169717],{"class":205}," inner\n",[199,169719,169720],{"class":201,"line":238},[199,169721,907],{"emptyLinePlaceholder":906},[199,169723,169724],{"class":201,"line":252},[199,169725,907],{"emptyLinePlaceholder":906},[199,169727,169728,169731,169733,169736,169738],{"class":201,"line":388},[199,169729,169730],{"class":205},"add_10 ",[199,169732,895],{"class":1086},[199,169734,169735],{"class":205}," outer(",[199,169737,3528],{"class":1018},[199,169739,1594],{"class":205},[199,169741,169742,169744,169747,169749],{"class":201,"line":415},[199,169743,33258],{"class":1018},[199,169745,169746],{"class":205},"(add_10(",[199,169748,1909],{"class":1018},[199,169750,1554],{"class":205},[31,169752,169753],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169755,169757],{"id":169756},"_712-装饰器入门","7.12 装饰器入门",[31,169759,169760],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[190,169762,169764],{"className":33221,"code":169763,"language":33223,"meta":57,"style":57},"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",[196,169765,169766,169775,169784,169795,169800,169811,169815,169822,169826,169830,169835,169843,169853,169857,169861],{"__ignoreMap":57},[199,169767,169768,169770,169772],{"class":201,"line":202},[199,169769,34789],{"class":1086},[199,169771,89450],{"class":878},[199,169773,169774],{"class":205},"(func):\n",[199,169776,169777,169779,169782],{"class":201,"line":36},[199,169778,33643],{"class":1086},[199,169780,169781],{"class":878}," wrapper",[199,169783,34795],{"class":205},[199,169785,169786,169788,169790,169793],{"class":201,"line":73},[199,169787,35293],{"class":1018},[199,169789,1537],{"class":205},[199,169791,169792],{"class":898},"\"函数开始执行\"",[199,169794,1594],{"class":205},[199,169796,169797],{"class":201,"line":333},[199,169798,169799],{"class":205},"        func()\n",[199,169801,169802,169804,169806,169809],{"class":201,"line":227},[199,169803,35293],{"class":1018},[199,169805,1537],{"class":205},[199,169807,169808],{"class":898},"\"函数执行结束\"",[199,169810,1594],{"class":205},[199,169812,169813],{"class":201,"line":238},[199,169814,907],{"emptyLinePlaceholder":906},[199,169816,169817,169819],{"class":201,"line":252},[199,169818,6989],{"class":1086},[199,169820,169821],{"class":205}," wrapper\n",[199,169823,169824],{"class":201,"line":388},[199,169825,907],{"emptyLinePlaceholder":906},[199,169827,169828],{"class":201,"line":415},[199,169829,907],{"emptyLinePlaceholder":906},[199,169831,169832],{"class":201,"line":426},[199,169833,169834],{"class":878},"@log\n",[199,169836,169837,169839,169841],{"class":201,"line":1015},[199,169838,34789],{"class":1086},[199,169840,163255],{"class":878},[199,169842,34795],{"class":205},[199,169844,169845,169847,169849,169851],{"class":201,"line":1031},[199,169846,34141],{"class":1018},[199,169848,1537],{"class":205},[199,169850,8741],{"class":898},[199,169852,1594],{"class":205},[199,169854,169855],{"class":201,"line":1043},[199,169856,907],{"emptyLinePlaceholder":906},[199,169858,169859],{"class":201,"line":1049},[199,169860,907],{"emptyLinePlaceholder":906},[199,169862,169863],{"class":201,"line":1054},[199,169864,163290],{"class":205},[31,169866,160533],{},[190,169868,169870],{"className":33221,"code":169869,"language":33223,"meta":57,"style":57},"say_hello = log(say_hello)\n",[196,169871,169872],{"__ignoreMap":57},[199,169873,169874,169877,169879],{"class":201,"line":202},[199,169875,169876],{"class":205},"say_hello ",[199,169878,895],{"class":1086},[199,169880,169881],{"class":205}," log(say_hello)\n",[31,169883,169884],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169886,169888],{"id":169887},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[190,169890,169892],{"className":33221,"code":169891,"language":33223,"meta":57,"style":57},"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",[196,169893,169894,169902,169919,169929,169948,169958,169965,169969,169975,169979,169983,169987,169995,170005,170009,170013],{"__ignoreMap":57},[199,169895,169896,169898,169900],{"class":201,"line":202},[199,169897,34789],{"class":1086},[199,169899,89450],{"class":878},[199,169901,169774],{"class":205},[199,169903,169904,169906,169908,169910,169912,169915,169917],{"class":201,"line":36},[199,169905,33643],{"class":1086},[199,169907,169781],{"class":878},[199,169909,1537],{"class":205},[199,169911,3537],{"class":1086},[199,169913,169914],{"class":205},"args, ",[199,169916,13524],{"class":1086},[199,169918,168925],{"class":205},[199,169920,169921,169923,169925,169927],{"class":201,"line":73},[199,169922,35293],{"class":1018},[199,169924,1537],{"class":205},[199,169926,169792],{"class":898},[199,169928,1594],{"class":205},[199,169930,169931,169934,169936,169939,169941,169943,169945],{"class":201,"line":333},[199,169932,169933],{"class":205},"        result ",[199,169935,895],{"class":1086},[199,169937,169938],{"class":205}," func(",[199,169940,3537],{"class":1086},[199,169942,169914],{"class":205},[199,169944,13524],{"class":1086},[199,169946,169947],{"class":205},"kwargs)\n",[199,169949,169950,169952,169954,169956],{"class":201,"line":227},[199,169951,35293],{"class":1018},[199,169953,1537],{"class":205},[199,169955,169808],{"class":898},[199,169957,1594],{"class":205},[199,169959,169960,169962],{"class":201,"line":238},[199,169961,17612],{"class":1086},[199,169963,169964],{"class":205}," result\n",[199,169966,169967],{"class":201,"line":252},[199,169968,907],{"emptyLinePlaceholder":906},[199,169970,169971,169973],{"class":201,"line":388},[199,169972,6989],{"class":1086},[199,169974,169821],{"class":205},[199,169976,169977],{"class":201,"line":415},[199,169978,907],{"emptyLinePlaceholder":906},[199,169980,169981],{"class":201,"line":426},[199,169982,907],{"emptyLinePlaceholder":906},[199,169984,169985],{"class":201,"line":1015},[199,169986,169834],{"class":878},[199,169988,169989,169991,169993],{"class":201,"line":1031},[199,169990,34789],{"class":1086},[199,169992,8106],{"class":878},[199,169994,153352],{"class":205},[199,169996,169997,169999,170001,170003],{"class":201,"line":1043},[199,169998,6989],{"class":1086},[199,170000,13732],{"class":205},[199,170002,2028],{"class":1086},[199,170004,153363],{"class":205},[199,170006,170007],{"class":201,"line":1049},[199,170008,907],{"emptyLinePlaceholder":906},[199,170010,170011],{"class":201,"line":1054},[199,170012,907],{"emptyLinePlaceholder":906},[199,170014,170015,170017,170019,170021,170023,170025],{"class":201,"line":1062},[199,170016,33258],{"class":1018},[199,170018,168859],{"class":205},[199,170020,3528],{"class":1018},[199,170022,1912],{"class":205},[199,170024,3779],{"class":1018},[199,170026,1554],{"class":205},[31,170028,170029,170030,103277,170032,170034],{},"这个写法使用 ",[196,170031,168791],{},[196,170033,168906],{}," 接收原函数的所有参数。",[14,170036,170038],{"id":170037},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[31,170040,125551],{},[24,170042,170043,170046,170049],{},[27,170044,170045],{},"给定一组学生数据。",[27,170047,170048],{},"封装函数，根据传入规则筛选学生。",[27,170050,170051],{},"筛选及格、优秀、未成年学生。",[31,170053,12898],{},[190,170055,170057],{"className":33221,"code":170056,"language":33223,"meta":57,"style":57},"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",[196,170058,170059,170067,170095,170123,170151,170155,170159,170163,170173,170181,170191,170198,170203,170209,170213,170217,170241,170264,170287,170291,170298,170305],{"__ignoreMap":57},[199,170060,170061,170063,170065],{"class":201,"line":202},[199,170062,161975],{"class":205},[199,170064,895],{"class":1086},[199,170066,57706],{"class":205},[199,170068,170069,170071,170073,170075,170077,170079,170081,170083,170085,170087,170089,170091,170093],{"class":201,"line":36},[199,170070,150644],{"class":205},[199,170072,64938],{"class":898},[199,170074,1022],{"class":205},[199,170076,152147],{"class":898},[199,170078,1912],{"class":205},[199,170080,71383],{"class":898},[199,170082,1022],{"class":205},[199,170084,3730],{"class":1018},[199,170086,1912],{"class":205},[199,170088,153731],{"class":898},[199,170090,1022],{"class":205},[199,170092,4063],{"class":1018},[199,170094,7827],{"class":205},[199,170096,170097,170099,170101,170103,170105,170107,170109,170111,170113,170115,170117,170119,170121],{"class":201,"line":73},[199,170098,150644],{"class":205},[199,170100,64938],{"class":898},[199,170102,1022],{"class":205},[199,170104,153195],{"class":898},[199,170106,1912],{"class":205},[199,170108,71383],{"class":898},[199,170110,1022],{"class":205},[199,170112,3705],{"class":1018},[199,170114,1912],{"class":205},[199,170116,153731],{"class":898},[199,170118,1022],{"class":205},[199,170120,3890],{"class":1018},[199,170122,7827],{"class":205},[199,170124,170125,170127,170129,170131,170133,170135,170137,170139,170141,170143,170145,170147,170149],{"class":201,"line":333},[199,170126,150644],{"class":205},[199,170128,64938],{"class":898},[199,170130,1022],{"class":205},[199,170132,161990],{"class":898},[199,170134,1912],{"class":205},[199,170136,71383],{"class":898},[199,170138,1022],{"class":205},[199,170140,3754],{"class":1018},[199,170142,1912],{"class":205},[199,170144,153731],{"class":898},[199,170146,1022],{"class":205},[199,170148,3961],{"class":1018},[199,170150,7827],{"class":205},[199,170152,170153],{"class":201,"line":227},[199,170154,1932],{"class":205},[199,170156,170157],{"class":201,"line":238},[199,170158,907],{"emptyLinePlaceholder":906},[199,170160,170161],{"class":201,"line":252},[199,170162,907],{"emptyLinePlaceholder":906},[199,170164,170165,170167,170170],{"class":201,"line":388},[199,170166,34789],{"class":1086},[199,170168,170169],{"class":878}," filter_students",[199,170171,170172],{"class":205},"(students, condition):\n",[199,170174,170175,170177,170179],{"class":201,"line":415},[199,170176,163482],{"class":205},[199,170178,895],{"class":1086},[199,170180,1475],{"class":205},[199,170182,170183,170185,170187,170189],{"class":201,"line":426},[199,170184,1937],{"class":1086},[199,170186,154396],{"class":205},[199,170188,28886],{"class":1086},[199,170190,154401],{"class":205},[199,170192,170193,170195],{"class":201,"line":1015},[199,170194,2017],{"class":1086},[199,170196,170197],{"class":205}," condition(student):\n",[199,170199,170200],{"class":201,"line":1031},[199,170201,170202],{"class":205},"            result.append(student)\n",[199,170204,170205,170207],{"class":201,"line":1043},[199,170206,6989],{"class":1086},[199,170208,169964],{"class":205},[199,170210,170211],{"class":201,"line":1049},[199,170212,907],{"emptyLinePlaceholder":906},[199,170214,170215],{"class":201,"line":1054},[199,170216,907],{"emptyLinePlaceholder":906},[199,170218,170219,170221,170223,170226,170228,170231,170233,170235,170237,170239],{"class":201,"line":1062},[199,170220,167960],{"class":205},[199,170222,895],{"class":1086},[199,170224,170225],{"class":205}," filter_students(students, ",[199,170227,169145],{"class":1086},[199,170229,170230],{"class":205}," s: s[",[199,170232,153731],{"class":898},[199,170234,2078],{"class":205},[199,170236,4635],{"class":1086},[199,170238,160096],{"class":1018},[199,170240,1594],{"class":205},[199,170242,170243,170246,170248,170250,170252,170254,170256,170258,170260,170262],{"class":201,"line":1075},[199,170244,170245],{"class":205},"excellent ",[199,170247,895],{"class":1086},[199,170249,170225],{"class":205},[199,170251,169145],{"class":1086},[199,170253,170230],{"class":205},[199,170255,153731],{"class":898},[199,170257,2078],{"class":205},[199,170259,4635],{"class":1086},[199,170261,160047],{"class":1018},[199,170263,1594],{"class":205},[199,170265,170266,170269,170271,170273,170275,170277,170279,170281,170283,170285],{"class":201,"line":1092},[199,170267,170268],{"class":205},"under_age ",[199,170270,895],{"class":1086},[199,170272,170225],{"class":205},[199,170274,169145],{"class":1086},[199,170276,170230],{"class":205},[199,170278,71383],{"class":898},[199,170280,2078],{"class":205},[199,170282,887],{"class":1086},[199,170284,158544],{"class":1018},[199,170286,1594],{"class":205},[199,170288,170289],{"class":201,"line":1107},[199,170290,907],{"emptyLinePlaceholder":906},[199,170292,170293,170295],{"class":201,"line":1128},[199,170294,33258],{"class":1018},[199,170296,170297],{"class":205},"(passed)\n",[199,170299,170300,170302],{"class":201,"line":1146},[199,170301,33258],{"class":1018},[199,170303,170304],{"class":205},"(excellent)\n",[199,170306,170307,170309],{"class":201,"line":1163},[199,170308,33258],{"class":1018},[199,170310,170311],{"class":205},"(under_age)\n",[14,170313,170315],{"id":170314},"_715-易错点","7.15 易错点",[24,170317,170318,170321,170329,170334,170345],{},[27,170319,170320],{},"默认参数不要写可变对象。",[27,170322,170323,170325,170326,170328],{},[196,170324,168791],{}," 是元组，",[196,170327,168906],{}," 是字典。",[27,170330,170331,170333],{},[196,170332,169145],{}," 只适合简单表达式。",[27,170335,170336,103277,170338,170340,170341,170344],{},[196,170337,76303],{},[196,170339,82310],{}," 的结果是迭代器，常用 ",[196,170342,170343],{},"list()"," 转换查看。",[27,170346,170347],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170349,170351],{"id":170350},"_716-本章练习","7.16 本章练习",[24,170353,170354,170361,170367,170372,170377],{},[27,170355,170356,170357,170360],{},"写函数 ",[196,170358,170359],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[27,170362,170356,170363,170366],{},[196,170364,170365],{},"print_user(**kwargs)","，输出用户所有字段。",[27,170368,106625,170369,170371],{},[196,170370,169145],{}," 对学生列表按年龄排序。",[27,170373,106625,170374,170376],{},[196,170375,82310],{}," 找出成绩不及格的学生。",[27,170378,170379],{},"写一个装饰器，统计函数执行前后的提示信息。",[1002,170381,170382],{},"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":57,"searchDepth":36,"depth":36,"links":170384},[170385,170386,170387,170388,170389,170390,170394,170395,170396,170397,170402,170403,170404,170405,170406,170407],{"id":168243,"depth":36,"text":168244},{"id":168357,"depth":36,"text":168358},{"id":168446,"depth":36,"text":168447},{"id":168508,"depth":36,"text":168509},{"id":168654,"depth":36,"text":168655},{"id":168781,"depth":36,"text":168782,"children":170391},[170392,170393],{"id":168785,"depth":73,"text":168786},{"id":168900,"depth":73,"text":168901},{"id":168981,"depth":36,"text":168982},{"id":169139,"depth":36,"text":169140},{"id":169307,"depth":36,"text":169308},{"id":169389,"depth":36,"text":169390,"children":170398},[170399,170400,170401],{"id":169393,"depth":73,"text":169394},{"id":169464,"depth":73,"text":169465},{"id":169541,"depth":73,"text":169542},{"id":169666,"depth":36,"text":169667},{"id":169756,"depth":36,"text":169757},{"id":169887,"depth":36,"text":169888},{"id":170037,"depth":36,"text":170038},{"id":170314,"depth":36,"text":170315},{"id":170350,"depth":36,"text":170351},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168235,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":170414,"title":170415,"body":170416,"description":3023,"extension":3024,"meta":172935,"navigation":906,"path":172936,"seo":172937,"stem":172938,"__hash__":172939},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170417,"toc":172910},[170418,170421,170425,170428,170431,170462,170466,170470,170473,170500,170504,170507,170558,170561,170576,170579,170614,170618,170620,170644,170647,170707,170711,170715,170718,170775,170778,170798,170802,170805,170868,170872,170875,170931,170938,170962,170966,170969,171032,171036,171041,171092,171095,171099,171104,171171,171174,171256,171260,171265,171316,171319,171323,171326,171329,171337,171340,171386,171389,171435,171439,171445,171489,171492,171538,171541,171581,171584,171645,171649,171652,171742,171745,171887,171890,171957,171961,171964,171967,172108,172111,172189,172192,172368,172372,172374,172385,172387,172586,172590,172834,172838,172872,172876,172907],[10,170419,170415],{"id":170420},"_8-文件操作",[14,170422,170424],{"id":170423},"_81-文件操作的意义","8.1 文件操作的意义",[31,170426,170427],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[31,170429,170430],{},"常见文件类型：",[24,170432,170433,170439,170445,170451,170457],{},[27,170434,170435,170438],{},[196,170436,170437],{},".txt","：普通文本。",[27,170440,170441,170444],{},[196,170442,170443],{},".csv","：表格文本。",[27,170446,170447,170450],{},[196,170448,170449],{},".json","：结构化数据。",[27,170452,170453,170456],{},[196,170454,170455],{},".log","：日志文件。",[27,170458,170459,170461],{},[196,170460,148611],{},"：Python 源代码。",[14,170463,170465],{"id":170464},"_82-路径","8.2 路径",[19,170467,170469],{"id":170468},"_821-相对路径","8.2.1 相对路径",[31,170471,170472],{},"相对当前运行目录：",[190,170474,170476],{"className":33221,"code":170475,"language":33223,"meta":57,"style":57},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[196,170477,170478],{"__ignoreMap":57},[199,170479,170480,170482,170484,170486,170488,170490,170492,170494,170496,170498],{"class":201,"line":202},[199,170481,89174],{"class":1018},[199,170483,1537],{"class":205},[199,170485,149055],{"class":898},[199,170487,1912],{"class":205},[199,170489,149060],{"class":898},[199,170491,1912],{"class":205},[199,170493,149065],{"class":8113},[199,170495,895],{"class":1086},[199,170497,149070],{"class":898},[199,170499,1594],{"class":205},[19,170501,170503],{"id":170502},"_822-绝对路径","8.2.2 绝对路径",[31,170505,170506],{},"从根目录或盘符开始：",[190,170508,170510],{"className":33221,"code":170509,"language":33223,"meta":57,"style":57},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[196,170511,170512,170535],{"__ignoreMap":57},[199,170513,170514,170516,170518,170521,170523,170525,170527,170529,170531,170533],{"class":201,"line":202},[199,170515,89174],{"class":1018},[199,170517,1537],{"class":205},[199,170519,170520],{"class":898},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[199,170522,1912],{"class":205},[199,170524,149060],{"class":898},[199,170526,1912],{"class":205},[199,170528,149065],{"class":8113},[199,170530,895],{"class":1086},[199,170532,149070],{"class":898},[199,170534,1594],{"class":205},[199,170536,170537,170539,170541,170544,170546,170548,170550,170552,170554,170556],{"class":201,"line":36},[199,170538,89174],{"class":1018},[199,170540,1537],{"class":205},[199,170542,170543],{"class":898},"\"D:\u002Fdata\u002Fdata.txt\"",[199,170545,1912],{"class":205},[199,170547,149060],{"class":898},[199,170549,1912],{"class":205},[199,170551,149065],{"class":8113},[199,170553,895],{"class":1086},[199,170555,149070],{"class":898},[199,170557,1594],{"class":205},[31,170559,170560],{},"Windows 路径建议写成：",[190,170562,170564],{"className":33221,"code":170563,"language":33223,"meta":57,"style":57},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[196,170565,170566],{"__ignoreMap":57},[199,170567,170568,170571,170573],{"class":201,"line":202},[199,170569,170570],{"class":205},"path ",[199,170572,895],{"class":1086},[199,170574,170575],{"class":898}," \"D:\u002Fdata\u002Fdata.txt\"\n",[31,170577,170578],{},"或原始字符串：",[190,170580,170582],{"className":33221,"code":170581,"language":33223,"meta":57,"style":57},"path = r\"D:\\data\\data.txt\"\n",[196,170583,170584],{"__ignoreMap":57},[199,170585,170586,170588,170590,170592,170594,170597,170600,170603,170605,170607,170609,170612],{"class":201,"line":202},[199,170587,170570],{"class":205},[199,170589,895],{"class":1086},[199,170591,19966],{"class":1086},[199,170593,3337],{"class":898},[199,170595,170596],{"class":50817},"D:",[199,170598,170599],{"class":1018},"\\d",[199,170601,170602],{"class":50817},"ata",[199,170604,170599],{"class":1018},[199,170606,170602],{"class":50817},[199,170608,3638],{"class":1018},[199,170610,170611],{"class":50817},"txt",[199,170613,27976],{"class":898},[14,170615,170617],{"id":170616},"_83-open函数","8.3 open函数",[31,170619,8078],{},[190,170621,170623],{"className":33221,"code":170622,"language":33223,"meta":57,"style":57},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[196,170624,170625],{"__ignoreMap":57},[199,170626,170627,170629,170631,170633,170636,170638,170640,170642],{"class":201,"line":202},[199,170628,48195],{"class":8113},[199,170630,16425],{"class":1086},[199,170632,149050],{"class":1018},[199,170634,170635],{"class":205},"(文件路径, 打开模式, ",[199,170637,149065],{"class":8113},[199,170639,895],{"class":1086},[199,170641,149070],{"class":898},[199,170643,1594],{"class":205},[31,170645,170646],{},"常见模式：",[3227,170648,170649,170658],{},[3230,170650,170651],{},[3233,170652,170653,170656],{},[3236,170654,170655],{},"模式",[3236,170657,28712],{},[3273,170659,170660,170669,170678,170687,170697],{},[3233,170661,170662,170666],{},[3278,170663,170664],{},[196,170665,3749],{},[3278,170667,170668],{},"只读，文件不存在会报错",[3233,170670,170671,170675],{},[3278,170672,170673],{},[196,170674,3874],{},[3278,170676,170677],{},"只写，文件不存在会创建，存在会清空",[3233,170679,170680,170684],{},[3278,170681,170682],{},[196,170683,2867],{},[3278,170685,170686],{},"追加，文件不存在会创建",[3233,170688,170689,170694],{},[3278,170690,170691],{},[196,170692,170693],{},"rb",[3278,170695,170696],{},"二进制只读",[3233,170698,170699,170704],{},[3278,170700,170701],{},[196,170702,170703],{},"wb",[3278,170705,170706],{},"二进制只写",[14,170708,170710],{"id":170709},"_84-读取文件","8.4 读取文件",[19,170712,170714],{"id":170713},"_841-read","8.4.1 read",[31,170716,170717],{},"一次读取全部内容：",[190,170719,170721],{"className":33221,"code":170720,"language":33223,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[196,170722,170723,170749,170761,170768],{"__ignoreMap":57},[199,170724,170725,170727,170729,170731,170733,170735,170737,170739,170741,170743,170745,170747],{"class":201,"line":202},[199,170726,48195],{"class":8113},[199,170728,16425],{"class":1086},[199,170730,149050],{"class":1018},[199,170732,1537],{"class":205},[199,170734,149055],{"class":898},[199,170736,1912],{"class":205},[199,170738,149060],{"class":898},[199,170740,1912],{"class":205},[199,170742,149065],{"class":8113},[199,170744,895],{"class":1086},[199,170746,149070],{"class":898},[199,170748,1594],{"class":205},[199,170750,170751,170754,170756,170758],{"class":201,"line":36},[199,170752,170753],{"class":205},"content ",[199,170755,895],{"class":1086},[199,170757,150412],{"class":8113},[199,170759,170760],{"class":205},".read()\n",[199,170762,170763,170765],{"class":201,"line":73},[199,170764,33258],{"class":1018},[199,170766,170767],{"class":205},"(content)\n",[199,170769,170770,170772],{"class":201,"line":333},[199,170771,48195],{"class":8113},[199,170773,170774],{"class":205},".close()\n",[31,170776,170777],{},"可以指定读取字符数：",[190,170779,170781],{"className":33221,"code":170780,"language":33223,"meta":57,"style":57},"content = file.read(10)\n",[196,170782,170783],{"__ignoreMap":57},[199,170784,170785,170787,170789,170791,170794,170796],{"class":201,"line":202},[199,170786,170753],{"class":205},[199,170788,895],{"class":1086},[199,170790,150412],{"class":8113},[199,170792,170793],{"class":205},".read(",[199,170795,3528],{"class":1018},[199,170797,1594],{"class":205},[19,170799,170801],{"id":170800},"_842-readline","8.4.2 readline",[31,170803,170804],{},"一次读取一行：",[190,170806,170808],{"className":33221,"code":170807,"language":33223,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[196,170809,170810,170836,170840,170851,170858,170862],{"__ignoreMap":57},[199,170811,170812,170814,170816,170818,170820,170822,170824,170826,170828,170830,170832,170834],{"class":201,"line":202},[199,170813,48195],{"class":8113},[199,170815,16425],{"class":1086},[199,170817,149050],{"class":1018},[199,170819,1537],{"class":205},[199,170821,149055],{"class":898},[199,170823,1912],{"class":205},[199,170825,149060],{"class":898},[199,170827,1912],{"class":205},[199,170829,149065],{"class":8113},[199,170831,895],{"class":1086},[199,170833,149070],{"class":898},[199,170835,1594],{"class":205},[199,170837,170838],{"class":201,"line":36},[199,170839,907],{"emptyLinePlaceholder":906},[199,170841,170842,170844,170846,170848],{"class":201,"line":73},[199,170843,149511],{"class":205},[199,170845,895],{"class":1086},[199,170847,150412],{"class":8113},[199,170849,170850],{"class":205},".readline()\n",[199,170852,170853,170855],{"class":201,"line":333},[199,170854,33258],{"class":1018},[199,170856,170857],{"class":205},"(line)\n",[199,170859,170860],{"class":201,"line":227},[199,170861,907],{"emptyLinePlaceholder":906},[199,170863,170864,170866],{"class":201,"line":238},[199,170865,48195],{"class":8113},[199,170867,170774],{"class":205},[19,170869,170871],{"id":170870},"_843-readlines","8.4.3 readlines",[31,170873,170874],{},"读取所有行，返回列表：",[190,170876,170878],{"className":33221,"code":170877,"language":33223,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[196,170879,170880,170906,170918,170925],{"__ignoreMap":57},[199,170881,170882,170884,170886,170888,170890,170892,170894,170896,170898,170900,170902,170904],{"class":201,"line":202},[199,170883,48195],{"class":8113},[199,170885,16425],{"class":1086},[199,170887,149050],{"class":1018},[199,170889,1537],{"class":205},[199,170891,149055],{"class":898},[199,170893,1912],{"class":205},[199,170895,149060],{"class":898},[199,170897,1912],{"class":205},[199,170899,149065],{"class":8113},[199,170901,895],{"class":1086},[199,170903,149070],{"class":898},[199,170905,1594],{"class":205},[199,170907,170908,170911,170913,170915],{"class":201,"line":36},[199,170909,170910],{"class":205},"lines ",[199,170912,895],{"class":1086},[199,170914,150412],{"class":8113},[199,170916,170917],{"class":205},".readlines()\n",[199,170919,170920,170922],{"class":201,"line":73},[199,170921,33258],{"class":1018},[199,170923,170924],{"class":205},"(lines)\n",[199,170926,170927,170929],{"class":201,"line":333},[199,170928,48195],{"class":8113},[199,170930,170774],{"class":205},[31,170932,170933,170934,170937],{},"每一行通常带有换行符，可以用 ",[196,170935,170936],{},"strip()"," 去掉：",[190,170939,170941],{"className":33221,"code":170940,"language":33223,"meta":57,"style":57},"for line in lines:\n    print(line.strip())\n",[196,170942,170943,170955],{"__ignoreMap":57},[199,170944,170945,170947,170950,170952],{"class":201,"line":202},[199,170946,5929],{"class":1086},[199,170948,170949],{"class":205}," line ",[199,170951,28886],{"class":1086},[199,170953,170954],{"class":205}," lines:\n",[199,170956,170957,170959],{"class":201,"line":36},[199,170958,34141],{"class":1018},[199,170960,170961],{"class":205},"(line.strip())\n",[19,170963,170965],{"id":170964},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[31,170967,170968],{},"推荐读取大文件时使用：",[190,170970,170972],{"className":33221,"code":170971,"language":33223,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[196,170973,170974,171000,171004,171016,171022,171026],{"__ignoreMap":57},[199,170975,170976,170978,170980,170982,170984,170986,170988,170990,170992,170994,170996,170998],{"class":201,"line":202},[199,170977,48195],{"class":8113},[199,170979,16425],{"class":1086},[199,170981,149050],{"class":1018},[199,170983,1537],{"class":205},[199,170985,149055],{"class":898},[199,170987,1912],{"class":205},[199,170989,149060],{"class":898},[199,170991,1912],{"class":205},[199,170993,149065],{"class":8113},[199,170995,895],{"class":1086},[199,170997,149070],{"class":898},[199,170999,1594],{"class":205},[199,171001,171002],{"class":201,"line":36},[199,171003,907],{"emptyLinePlaceholder":906},[199,171005,171006,171008,171010,171012,171014],{"class":201,"line":73},[199,171007,5929],{"class":1086},[199,171009,170949],{"class":205},[199,171011,28886],{"class":1086},[199,171013,150412],{"class":8113},[199,171015,6640],{"class":205},[199,171017,171018,171020],{"class":201,"line":333},[199,171019,34141],{"class":1018},[199,171021,170961],{"class":205},[199,171023,171024],{"class":201,"line":227},[199,171025,907],{"emptyLinePlaceholder":906},[199,171027,171028,171030],{"class":201,"line":238},[199,171029,48195],{"class":8113},[199,171031,170774],{"class":205},[14,171033,171035],{"id":171034},"_85-with语句","8.5 with语句",[31,171037,171038,171040],{},[196,171039,110092],{}," 会自动关闭文件，推荐使用。",[190,171042,171044],{"className":33221,"code":171043,"language":33223,"meta":57,"style":57},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[196,171045,171046,171076,171086],{"__ignoreMap":57},[199,171047,171048,171050,171052,171054,171056,171058,171060,171062,171064,171066,171068,171070,171072,171074],{"class":201,"line":202},[199,171049,110092],{"class":1086},[199,171051,149050],{"class":1018},[199,171053,1537],{"class":205},[199,171055,149055],{"class":898},[199,171057,1912],{"class":205},[199,171059,149060],{"class":898},[199,171061,1912],{"class":205},[199,171063,149065],{"class":8113},[199,171065,895],{"class":1086},[199,171067,149070],{"class":898},[199,171069,16575],{"class":205},[199,171071,34225],{"class":1086},[199,171073,150412],{"class":8113},[199,171075,6640],{"class":205},[199,171077,171078,171080,171082,171084],{"class":201,"line":36},[199,171079,149082],{"class":205},[199,171081,895],{"class":1086},[199,171083,150412],{"class":8113},[199,171085,170760],{"class":205},[199,171087,171088,171090],{"class":201,"line":73},[199,171089,34141],{"class":1018},[199,171091,170767],{"class":205},[31,171093,171094],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,171096,171098],{"id":171097},"_86-写入文件","8.6 写入文件",[31,171100,171101,171103],{},[196,171102,3874],{}," 模式会清空原文件。",[190,171105,171107],{"className":33221,"code":171106,"language":33223,"meta":57,"style":57},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[196,171108,171109,171139,171156],{"__ignoreMap":57},[199,171110,171111,171113,171115,171117,171119,171121,171123,171125,171127,171129,171131,171133,171135,171137],{"class":201,"line":202},[199,171112,110092],{"class":1086},[199,171114,149050],{"class":1018},[199,171116,1537],{"class":205},[199,171118,149055],{"class":898},[199,171120,1912],{"class":205},[199,171122,154235],{"class":898},[199,171124,1912],{"class":205},[199,171126,149065],{"class":8113},[199,171128,895],{"class":1086},[199,171130,149070],{"class":898},[199,171132,16575],{"class":205},[199,171134,34225],{"class":1086},[199,171136,150412],{"class":8113},[199,171138,6640],{"class":205},[199,171140,171141,171144,171147,171150,171152,171154],{"class":201,"line":36},[199,171142,171143],{"class":8113},"    file",[199,171145,171146],{"class":205},".write(",[199,171148,171149],{"class":898},"\"hello",[199,171151,158784],{"class":1018},[199,171153,3337],{"class":898},[199,171155,1594],{"class":205},[199,171157,171158,171160,171162,171165,171167,171169],{"class":201,"line":73},[199,171159,171143],{"class":8113},[199,171161,171146],{"class":205},[199,171163,171164],{"class":898},"\"python",[199,171166,158784],{"class":1018},[199,171168,3337],{"class":898},[199,171170,1594],{"class":205},[31,171172,171173],{},"写入多行：",[190,171175,171177],{"className":33221,"code":171176,"language":33223,"meta":57,"style":57},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[196,171178,171179,171214,171218,171249],{"__ignoreMap":57},[199,171180,171181,171183,171185,171187,171190,171192,171194,171196,171199,171201,171203,171205,171208,171210,171212],{"class":201,"line":202},[199,171182,170910],{"class":205},[199,171184,895],{"class":1086},[199,171186,1906],{"class":205},[199,171188,171189],{"class":898},"\"小明,18",[199,171191,158784],{"class":1018},[199,171193,3337],{"class":898},[199,171195,1912],{"class":205},[199,171197,171198],{"class":898},"\"小红,17",[199,171200,158784],{"class":1018},[199,171202,3337],{"class":898},[199,171204,1912],{"class":205},[199,171206,171207],{"class":898},"\"小刚,19",[199,171209,158784],{"class":1018},[199,171211,3337],{"class":898},[199,171213,1932],{"class":205},[199,171215,171216],{"class":201,"line":36},[199,171217,907],{"emptyLinePlaceholder":906},[199,171219,171220,171222,171224,171226,171229,171231,171233,171235,171237,171239,171241,171243,171245,171247],{"class":201,"line":73},[199,171221,110092],{"class":1086},[199,171223,149050],{"class":1018},[199,171225,1537],{"class":205},[199,171227,171228],{"class":898},"\"students.txt\"",[199,171230,1912],{"class":205},[199,171232,154235],{"class":898},[199,171234,1912],{"class":205},[199,171236,149065],{"class":8113},[199,171238,895],{"class":1086},[199,171240,149070],{"class":898},[199,171242,16575],{"class":205},[199,171244,34225],{"class":1086},[199,171246,150412],{"class":8113},[199,171248,6640],{"class":205},[199,171250,171251,171253],{"class":201,"line":333},[199,171252,171143],{"class":8113},[199,171254,171255],{"class":205},".writelines(lines)\n",[14,171257,171259],{"id":171258},"_87-追加文件","8.7 追加文件",[31,171261,171262,171264],{},[196,171263,2867],{}," 模式不会清空原内容，而是在末尾追加。",[190,171266,171268],{"className":33221,"code":171267,"language":33223,"meta":57,"style":57},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[196,171269,171270,171301],{"__ignoreMap":57},[199,171271,171272,171274,171276,171278,171281,171283,171285,171287,171289,171291,171293,171295,171297,171299],{"class":201,"line":202},[199,171273,110092],{"class":1086},[199,171275,149050],{"class":1018},[199,171277,1537],{"class":205},[199,171279,171280],{"class":898},"\"log.txt\"",[199,171282,1912],{"class":205},[199,171284,167584],{"class":898},[199,171286,1912],{"class":205},[199,171288,149065],{"class":8113},[199,171290,895],{"class":1086},[199,171292,149070],{"class":898},[199,171294,16575],{"class":205},[199,171296,34225],{"class":1086},[199,171298,150412],{"class":8113},[199,171300,6640],{"class":205},[199,171302,171303,171305,171307,171310,171312,171314],{"class":201,"line":36},[199,171304,171143],{"class":8113},[199,171306,171146],{"class":205},[199,171308,171309],{"class":898},"\"程序启动",[199,171311,158784],{"class":1018},[199,171313,3337],{"class":898},[199,171315,1594],{"class":205},[31,171317,171318],{},"日志类文件常用追加模式。",[14,171320,171322],{"id":171321},"_88-文件编码","8.8 文件编码",[31,171324,171325],{},"编码决定文字如何保存为字节。",[31,171327,171328],{},"常见编码：",[24,171330,171331,171334],{},[27,171332,171333],{},"UTF-8：推荐。",[27,171335,171336],{},"GBK：部分 Windows 中文文件常见。",[31,171338,171339],{},"读取文件乱码时，可以尝试：",[190,171341,171343],{"className":33221,"code":171342,"language":33223,"meta":57,"style":57},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[196,171344,171345,171376],{"__ignoreMap":57},[199,171346,171347,171349,171351,171353,171355,171357,171359,171361,171363,171365,171368,171370,171372,171374],{"class":201,"line":202},[199,171348,110092],{"class":1086},[199,171350,149050],{"class":1018},[199,171352,1537],{"class":205},[199,171354,149055],{"class":898},[199,171356,1912],{"class":205},[199,171358,149060],{"class":898},[199,171360,1912],{"class":205},[199,171362,149065],{"class":8113},[199,171364,895],{"class":1086},[199,171366,171367],{"class":898},"\"gbk\"",[199,171369,16575],{"class":205},[199,171371,34225],{"class":1086},[199,171373,150412],{"class":8113},[199,171375,6640],{"class":205},[199,171377,171378,171380,171382,171384],{"class":201,"line":36},[199,171379,149082],{"class":205},[199,171381,895],{"class":1086},[199,171383,150412],{"class":8113},[199,171385,170760],{"class":205},[31,171387,171388],{},"写文件时建议统一 UTF-8：",[190,171390,171392],{"className":33221,"code":171391,"language":33223,"meta":57,"style":57},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[196,171393,171394,171424],{"__ignoreMap":57},[199,171395,171396,171398,171400,171402,171404,171406,171408,171410,171412,171414,171416,171418,171420,171422],{"class":201,"line":202},[199,171397,110092],{"class":1086},[199,171399,149050],{"class":1018},[199,171401,1537],{"class":205},[199,171403,149055],{"class":898},[199,171405,1912],{"class":205},[199,171407,154235],{"class":898},[199,171409,1912],{"class":205},[199,171411,149065],{"class":8113},[199,171413,895],{"class":1086},[199,171415,149070],{"class":898},[199,171417,16575],{"class":205},[199,171419,34225],{"class":1086},[199,171421,150412],{"class":8113},[199,171423,6640],{"class":205},[199,171425,171426,171428,171430,171433],{"class":201,"line":36},[199,171427,171143],{"class":8113},[199,171429,171146],{"class":205},[199,171431,171432],{"class":898},"\"中文内容\"",[199,171434,1594],{"class":205},[14,171436,171438],{"id":171437},"_89-pathlib","8.9 pathlib",[31,171440,171441,171444],{},[196,171442,171443],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[190,171446,171448],{"className":33221,"code":171447,"language":33223,"meta":57,"style":57},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[196,171449,171450,171460,171464,171482],{"__ignoreMap":57},[199,171451,171452,171454,171456,171458],{"class":201,"line":202},[199,171453,33579],{"class":1086},[199,171455,110570],{"class":205},[199,171457,33235],{"class":1086},[199,171459,110575],{"class":205},[199,171461,171462],{"class":201,"line":36},[199,171463,907],{"emptyLinePlaceholder":906},[199,171465,171466,171468,171470,171472,171475,171477,171479],{"class":201,"line":73},[199,171467,170570],{"class":205},[199,171469,895],{"class":1086},[199,171471,110804],{"class":205},[199,171473,171474],{"class":898},"\"data\"",[199,171476,16575],{"class":205},[199,171478,3664],{"class":1086},[199,171480,171481],{"class":898}," \"students.txt\"\n",[199,171483,171484,171486],{"class":201,"line":333},[199,171485,33258],{"class":1018},[199,171487,171488],{"class":205},"(path)\n",[31,171490,171491],{},"创建目录：",[190,171493,171495],{"className":33221,"code":171494,"language":33223,"meta":57,"style":57},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[196,171496,171497,171507,171511,171524],{"__ignoreMap":57},[199,171498,171499,171501,171503,171505],{"class":201,"line":202},[199,171500,33579],{"class":1086},[199,171502,110570],{"class":205},[199,171504,33235],{"class":1086},[199,171506,110575],{"class":205},[199,171508,171509],{"class":201,"line":36},[199,171510,907],{"emptyLinePlaceholder":906},[199,171512,171513,171516,171518,171520,171522],{"class":201,"line":73},[199,171514,171515],{"class":205},"data_dir ",[199,171517,895],{"class":1086},[199,171519,110804],{"class":205},[199,171521,171474],{"class":898},[199,171523,1594],{"class":205},[199,171525,171526,171529,171532,171534,171536],{"class":201,"line":333},[199,171527,171528],{"class":205},"data_dir.mkdir(",[199,171530,171531],{"class":8113},"exist_ok",[199,171533,895],{"class":1086},[199,171535,34318],{"class":1018},[199,171537,1594],{"class":205},[31,171539,171540],{},"判断文件是否存在：",[190,171542,171544],{"className":33221,"code":171543,"language":33223,"meta":57,"style":57},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[196,171545,171546,171559,171563,171570],{"__ignoreMap":57},[199,171547,171548,171550,171552,171554,171557],{"class":201,"line":202},[199,171549,170570],{"class":205},[199,171551,895],{"class":1086},[199,171553,110804],{"class":205},[199,171555,171556],{"class":898},"\"data\u002Fstudents.txt\"",[199,171558,1594],{"class":205},[199,171560,171561],{"class":201,"line":36},[199,171562,907],{"emptyLinePlaceholder":906},[199,171564,171565,171567],{"class":201,"line":73},[199,171566,4470],{"class":1086},[199,171568,171569],{"class":205}," path.exists():\n",[199,171571,171572,171574,171576,171579],{"class":201,"line":333},[199,171573,34141],{"class":1018},[199,171575,1537],{"class":205},[199,171577,171578],{"class":898},"\"文件存在\"",[199,171580,1594],{"class":205},[31,171582,171583],{},"读写文本：",[190,171585,171587],{"className":33221,"code":171586,"language":33223,"meta":57,"style":57},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[196,171588,171589,171601,171605,171622,171639],{"__ignoreMap":57},[199,171590,171591,171593,171595,171597,171599],{"class":201,"line":202},[199,171592,170570],{"class":205},[199,171594,895],{"class":1086},[199,171596,110804],{"class":205},[199,171598,149055],{"class":898},[199,171600,1594],{"class":205},[199,171602,171603],{"class":201,"line":36},[199,171604,907],{"emptyLinePlaceholder":906},[199,171606,171607,171610,171612,171614,171616,171618,171620],{"class":201,"line":73},[199,171608,171609],{"class":205},"path.write_text(",[199,171611,148135],{"class":898},[199,171613,1912],{"class":205},[199,171615,149065],{"class":8113},[199,171617,895],{"class":1086},[199,171619,149070],{"class":898},[199,171621,1594],{"class":205},[199,171623,171624,171626,171628,171631,171633,171635,171637],{"class":201,"line":333},[199,171625,170753],{"class":205},[199,171627,895],{"class":1086},[199,171629,171630],{"class":205}," path.read_text(",[199,171632,149065],{"class":8113},[199,171634,895],{"class":1086},[199,171636,149070],{"class":898},[199,171638,1594],{"class":205},[199,171640,171641,171643],{"class":201,"line":227},[199,171642,33258],{"class":1018},[199,171644,170767],{"class":205},[14,171646,171648],{"id":171647},"_810-json文件","8.10 JSON文件",[31,171650,171651],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[190,171653,171655],{"className":33221,"code":171654,"language":33223,"meta":57,"style":57},"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",[196,171656,171657,171663,171667,171675,171685,171695,171703,171707,171711,171736],{"__ignoreMap":57},[199,171658,171659,171661],{"class":201,"line":202},[199,171660,33235],{"class":1086},[199,171662,149350],{"class":205},[199,171664,171665],{"class":201,"line":36},[199,171666,907],{"emptyLinePlaceholder":906},[199,171668,171669,171671,171673],{"class":201,"line":73},[199,171670,151740],{"class":205},[199,171672,895],{"class":1086},[199,171674,1012],{"class":205},[199,171676,171677,171679,171681,171683],{"class":201,"line":333},[199,171678,149279],{"class":898},[199,171680,1022],{"class":205},[199,171682,152147],{"class":898},[199,171684,34308],{"class":205},[199,171686,171687,171689,171691,171693],{"class":201,"line":227},[199,171688,166796],{"class":898},[199,171690,1022],{"class":205},[199,171692,3730],{"class":1018},[199,171694,34308],{"class":205},[199,171696,171697,171699,171701],{"class":201,"line":238},[199,171698,166807],{"class":898},[199,171700,1022],{"class":205},[199,171702,166812],{"class":1018},[199,171704,171705],{"class":201,"line":252},[199,171706,671],{"class":205},[199,171708,171709],{"class":201,"line":388},[199,171710,907],{"emptyLinePlaceholder":906},[199,171712,171713,171715,171717,171720,171722,171724,171726,171728,171730,171732,171734],{"class":201,"line":415},[199,171714,158703],{"class":205},[199,171716,895],{"class":1086},[199,171718,171719],{"class":205}," json.dumps(student, ",[199,171721,149396],{"class":8113},[199,171723,895],{"class":1086},[199,171725,36828],{"class":1018},[199,171727,1912],{"class":205},[199,171729,154271],{"class":8113},[199,171731,895],{"class":1086},[199,171733,1925],{"class":1018},[199,171735,1594],{"class":205},[199,171737,171738,171740],{"class":201,"line":426},[199,171739,33258],{"class":1018},[199,171741,166330],{"class":205},[31,171743,171744],{},"写入 JSON 文件：",[190,171746,171748],{"className":33221,"code":171747,"language":33223,"meta":57,"style":57},"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",[196,171749,171750,171756,171760,171768,171796,171824,171828,171832,171862],{"__ignoreMap":57},[199,171751,171752,171754],{"class":201,"line":202},[199,171753,33235],{"class":1086},[199,171755,149350],{"class":205},[199,171757,171758],{"class":201,"line":36},[199,171759,907],{"emptyLinePlaceholder":906},[199,171761,171762,171764,171766],{"class":201,"line":73},[199,171763,161975],{"class":205},[199,171765,895],{"class":1086},[199,171767,57706],{"class":205},[199,171769,171770,171772,171774,171776,171778,171780,171782,171784,171786,171788,171790,171792,171794],{"class":201,"line":333},[199,171771,150644],{"class":205},[199,171773,64938],{"class":898},[199,171775,1022],{"class":205},[199,171777,152147],{"class":898},[199,171779,1912],{"class":205},[199,171781,71383],{"class":898},[199,171783,1022],{"class":205},[199,171785,3730],{"class":1018},[199,171787,1912],{"class":205},[199,171789,153731],{"class":898},[199,171791,1022],{"class":205},[199,171793,4063],{"class":1018},[199,171795,7827],{"class":205},[199,171797,171798,171800,171802,171804,171806,171808,171810,171812,171814,171816,171818,171820,171822],{"class":201,"line":227},[199,171799,150644],{"class":205},[199,171801,64938],{"class":898},[199,171803,1022],{"class":205},[199,171805,153195],{"class":898},[199,171807,1912],{"class":205},[199,171809,71383],{"class":898},[199,171811,1022],{"class":205},[199,171813,3705],{"class":1018},[199,171815,1912],{"class":205},[199,171817,153731],{"class":898},[199,171819,1022],{"class":205},[199,171821,3890],{"class":1018},[199,171823,7827],{"class":205},[199,171825,171826],{"class":201,"line":238},[199,171827,1932],{"class":205},[199,171829,171830],{"class":201,"line":252},[199,171831,907],{"emptyLinePlaceholder":906},[199,171833,171834,171836,171838,171840,171842,171844,171846,171848,171850,171852,171854,171856,171858,171860],{"class":201,"line":388},[199,171835,110092],{"class":1086},[199,171837,149050],{"class":1018},[199,171839,1537],{"class":205},[199,171841,154090],{"class":898},[199,171843,1912],{"class":205},[199,171845,154235],{"class":898},[199,171847,1912],{"class":205},[199,171849,149065],{"class":8113},[199,171851,895],{"class":1086},[199,171853,149070],{"class":898},[199,171855,16575],{"class":205},[199,171857,34225],{"class":1086},[199,171859,150412],{"class":8113},[199,171861,6640],{"class":205},[199,171863,171864,171867,171869,171871,171873,171875,171877,171879,171881,171883,171885],{"class":201,"line":415},[199,171865,171866],{"class":205},"    json.dump(students, ",[199,171868,48195],{"class":8113},[199,171870,1912],{"class":205},[199,171872,149396],{"class":8113},[199,171874,895],{"class":1086},[199,171876,36828],{"class":1018},[199,171878,1912],{"class":205},[199,171880,154271],{"class":8113},[199,171882,895],{"class":1086},[199,171884,1925],{"class":1018},[199,171886,1594],{"class":205},[31,171888,171889],{},"读取 JSON 文件：",[190,171891,171893],{"className":33221,"code":171892,"language":33223,"meta":57,"style":57},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[196,171894,171895,171901,171905,171935,171947,171951],{"__ignoreMap":57},[199,171896,171897,171899],{"class":201,"line":202},[199,171898,33235],{"class":1086},[199,171900,149350],{"class":205},[199,171902,171903],{"class":201,"line":36},[199,171904,907],{"emptyLinePlaceholder":906},[199,171906,171907,171909,171911,171913,171915,171917,171919,171921,171923,171925,171927,171929,171931,171933],{"class":201,"line":73},[199,171908,110092],{"class":1086},[199,171910,149050],{"class":1018},[199,171912,1537],{"class":205},[199,171914,154090],{"class":898},[199,171916,1912],{"class":205},[199,171918,149060],{"class":898},[199,171920,1912],{"class":205},[199,171922,149065],{"class":8113},[199,171924,895],{"class":1086},[199,171926,149070],{"class":898},[199,171928,16575],{"class":205},[199,171930,34225],{"class":1086},[199,171932,150412],{"class":8113},[199,171934,6640],{"class":205},[199,171936,171937,171939,171941,171943,171945],{"class":201,"line":333},[199,171938,155296],{"class":205},[199,171940,895],{"class":1086},[199,171942,150423],{"class":205},[199,171944,48195],{"class":8113},[199,171946,1594],{"class":205},[199,171948,171949],{"class":201,"line":227},[199,171950,907],{"emptyLinePlaceholder":906},[199,171952,171953,171955],{"class":201,"line":238},[199,171954,33258],{"class":1018},[199,171956,167254],{"class":205},[14,171958,171960],{"id":171959},"_811-csv文件","8.11 CSV文件",[31,171962,171963],{},"CSV 是逗号分隔值，常用于表格数据。",[31,171965,171966],{},"写入 CSV：",[190,171968,171970],{"className":33221,"code":171969,"language":33223,"meta":57,"style":57},"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",[196,171971,171972,171979,171983,171991,172009,172025,172041,172045,172049,172089,172103],{"__ignoreMap":57},[199,171973,171974,171976],{"class":201,"line":202},[199,171975,33235],{"class":1086},[199,171977,171978],{"class":205}," csv\n",[199,171980,171981],{"class":201,"line":36},[199,171982,907],{"emptyLinePlaceholder":906},[199,171984,171985,171987,171989],{"class":201,"line":73},[199,171986,161975],{"class":205},[199,171988,895],{"class":1086},[199,171990,57706],{"class":205},[199,171992,171993,171996,171998,172000,172002,172004,172007],{"class":201,"line":333},[199,171994,171995],{"class":205},"    [",[199,171997,75358],{"class":898},[199,171999,1912],{"class":205},[199,172001,75391],{"class":898},[199,172003,1912],{"class":205},[199,172005,172006],{"class":898},"\"成绩\"",[199,172008,90095],{"class":205},[199,172010,172011,172013,172015,172017,172019,172021,172023],{"class":201,"line":227},[199,172012,171995],{"class":205},[199,172014,152147],{"class":898},[199,172016,1912],{"class":205},[199,172018,3730],{"class":1018},[199,172020,1912],{"class":205},[199,172022,4063],{"class":1018},[199,172024,90095],{"class":205},[199,172026,172027,172029,172031,172033,172035,172037,172039],{"class":201,"line":238},[199,172028,171995],{"class":205},[199,172030,153195],{"class":898},[199,172032,1912],{"class":205},[199,172034,3705],{"class":1018},[199,172036,1912],{"class":205},[199,172038,3890],{"class":1018},[199,172040,90095],{"class":205},[199,172042,172043],{"class":201,"line":252},[199,172044,1932],{"class":205},[199,172046,172047],{"class":201,"line":388},[199,172048,907],{"emptyLinePlaceholder":906},[199,172050,172051,172053,172055,172057,172060,172062,172064,172066,172068,172070,172072,172074,172077,172079,172081,172083,172085,172087],{"class":201,"line":415},[199,172052,110092],{"class":1086},[199,172054,149050],{"class":1018},[199,172056,1537],{"class":205},[199,172058,172059],{"class":898},"\"students.csv\"",[199,172061,1912],{"class":205},[199,172063,154235],{"class":898},[199,172065,1912],{"class":205},[199,172067,149065],{"class":8113},[199,172069,895],{"class":1086},[199,172071,149070],{"class":898},[199,172073,1912],{"class":205},[199,172075,172076],{"class":8113},"newline",[199,172078,895],{"class":1086},[199,172080,10549],{"class":898},[199,172082,16575],{"class":205},[199,172084,34225],{"class":1086},[199,172086,150412],{"class":8113},[199,172088,6640],{"class":205},[199,172090,172091,172094,172096,172099,172101],{"class":201,"line":426},[199,172092,172093],{"class":205},"    writer ",[199,172095,895],{"class":1086},[199,172097,172098],{"class":205}," csv.writer(",[199,172100,48195],{"class":8113},[199,172102,1594],{"class":205},[199,172104,172105],{"class":201,"line":1015},[199,172106,172107],{"class":205},"    writer.writerows(students)\n",[31,172109,172110],{},"读取 CSV：",[190,172112,172114],{"className":33221,"code":172113,"language":33223,"meta":57,"style":57},"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",[196,172115,172116,172122,172126,172156,172170,172182],{"__ignoreMap":57},[199,172117,172118,172120],{"class":201,"line":202},[199,172119,33235],{"class":1086},[199,172121,171978],{"class":205},[199,172123,172124],{"class":201,"line":36},[199,172125,907],{"emptyLinePlaceholder":906},[199,172127,172128,172130,172132,172134,172136,172138,172140,172142,172144,172146,172148,172150,172152,172154],{"class":201,"line":73},[199,172129,110092],{"class":1086},[199,172131,149050],{"class":1018},[199,172133,1537],{"class":205},[199,172135,172059],{"class":898},[199,172137,1912],{"class":205},[199,172139,149060],{"class":898},[199,172141,1912],{"class":205},[199,172143,149065],{"class":8113},[199,172145,895],{"class":1086},[199,172147,149070],{"class":898},[199,172149,16575],{"class":205},[199,172151,34225],{"class":1086},[199,172153,150412],{"class":8113},[199,172155,6640],{"class":205},[199,172157,172158,172161,172163,172166,172168],{"class":201,"line":333},[199,172159,172160],{"class":205},"    reader ",[199,172162,895],{"class":1086},[199,172164,172165],{"class":205}," csv.reader(",[199,172167,48195],{"class":8113},[199,172169,1594],{"class":205},[199,172171,172172,172174,172177,172179],{"class":201,"line":227},[199,172173,1937],{"class":1086},[199,172175,172176],{"class":205}," row ",[199,172178,28886],{"class":1086},[199,172180,172181],{"class":205}," reader:\n",[199,172183,172184,172186],{"class":201,"line":238},[199,172185,35293],{"class":1018},[199,172187,172188],{"class":205},"(row)\n",[31,172190,172191],{},"使用字典写入：",[190,172193,172195],{"className":33221,"code":172194,"language":33223,"meta":57,"style":57},"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",[196,172196,172197,172203,172207,172215,172243,172271,172275,172279,172317,172338,172359,172364],{"__ignoreMap":57},[199,172198,172199,172201],{"class":201,"line":202},[199,172200,33235],{"class":1086},[199,172202,171978],{"class":205},[199,172204,172205],{"class":201,"line":36},[199,172206,907],{"emptyLinePlaceholder":906},[199,172208,172209,172211,172213],{"class":201,"line":73},[199,172210,161975],{"class":205},[199,172212,895],{"class":1086},[199,172214,57706],{"class":205},[199,172216,172217,172219,172221,172223,172225,172227,172229,172231,172233,172235,172237,172239,172241],{"class":201,"line":333},[199,172218,150644],{"class":205},[199,172220,64938],{"class":898},[199,172222,1022],{"class":205},[199,172224,152147],{"class":898},[199,172226,1912],{"class":205},[199,172228,71383],{"class":898},[199,172230,1022],{"class":205},[199,172232,3730],{"class":1018},[199,172234,1912],{"class":205},[199,172236,153731],{"class":898},[199,172238,1022],{"class":205},[199,172240,4063],{"class":1018},[199,172242,7827],{"class":205},[199,172244,172245,172247,172249,172251,172253,172255,172257,172259,172261,172263,172265,172267,172269],{"class":201,"line":227},[199,172246,150644],{"class":205},[199,172248,64938],{"class":898},[199,172250,1022],{"class":205},[199,172252,153195],{"class":898},[199,172254,1912],{"class":205},[199,172256,71383],{"class":898},[199,172258,1022],{"class":205},[199,172260,3705],{"class":1018},[199,172262,1912],{"class":205},[199,172264,153731],{"class":898},[199,172266,1022],{"class":205},[199,172268,3890],{"class":1018},[199,172270,7827],{"class":205},[199,172272,172273],{"class":201,"line":238},[199,172274,1932],{"class":205},[199,172276,172277],{"class":201,"line":252},[199,172278,907],{"emptyLinePlaceholder":906},[199,172280,172281,172283,172285,172287,172289,172291,172293,172295,172297,172299,172301,172303,172305,172307,172309,172311,172313,172315],{"class":201,"line":388},[199,172282,110092],{"class":1086},[199,172284,149050],{"class":1018},[199,172286,1537],{"class":205},[199,172288,172059],{"class":898},[199,172290,1912],{"class":205},[199,172292,154235],{"class":898},[199,172294,1912],{"class":205},[199,172296,149065],{"class":8113},[199,172298,895],{"class":1086},[199,172300,149070],{"class":898},[199,172302,1912],{"class":205},[199,172304,172076],{"class":8113},[199,172306,895],{"class":1086},[199,172308,10549],{"class":898},[199,172310,16575],{"class":205},[199,172312,34225],{"class":1086},[199,172314,150412],{"class":8113},[199,172316,6640],{"class":205},[199,172318,172319,172322,172324,172326,172328,172330,172332,172334,172336],{"class":201,"line":415},[199,172320,172321],{"class":205},"    fieldnames ",[199,172323,895],{"class":1086},[199,172325,1906],{"class":205},[199,172327,64938],{"class":898},[199,172329,1912],{"class":205},[199,172331,71383],{"class":898},[199,172333,1912],{"class":205},[199,172335,153731],{"class":898},[199,172337,1932],{"class":205},[199,172339,172340,172342,172344,172347,172349,172351,172354,172356],{"class":201,"line":426},[199,172341,172093],{"class":205},[199,172343,895],{"class":1086},[199,172345,172346],{"class":205}," csv.DictWriter(",[199,172348,48195],{"class":8113},[199,172350,1912],{"class":205},[199,172352,172353],{"class":8113},"fieldnames",[199,172355,895],{"class":1086},[199,172357,172358],{"class":205},"fieldnames)\n",[199,172360,172361],{"class":201,"line":1015},[199,172362,172363],{"class":205},"    writer.writeheader()\n",[199,172365,172366],{"class":201,"line":1031},[199,172367,172107],{"class":205},[14,172369,172371],{"id":172370},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[31,172373,125551],{},[24,172375,172376,172379,172382],{},[27,172377,172378],{},"读取文本文件。",[27,172380,172381],{},"统计每个单词出现次数。",[27,172383,172384],{},"输出出现次数最多的前 10 个单词。",[31,172386,12898],{},[190,172388,172390],{"className":33221,"code":172389,"language":33223,"meta":57,"style":57},"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",[196,172391,172392,172402,172406,172419,172435,172439,172449,172458,172462,172474,172494,172503,172507,172525,172529,172559,172563,172579],{"__ignoreMap":57},[199,172393,172394,172396,172398,172400],{"class":201,"line":202},[199,172395,33579],{"class":1086},[199,172397,110570],{"class":205},[199,172399,33235],{"class":1086},[199,172401,110575],{"class":205},[199,172403,172404],{"class":201,"line":36},[199,172405,907],{"emptyLinePlaceholder":906},[199,172407,172408,172410,172412,172414,172417],{"class":201,"line":73},[199,172409,170570],{"class":205},[199,172411,895],{"class":1086},[199,172413,110804],{"class":205},[199,172415,172416],{"class":898},"\"article.txt\"",[199,172418,1594],{"class":205},[199,172420,172421,172423,172425,172427,172429,172431,172433],{"class":201,"line":333},[199,172422,170753],{"class":205},[199,172424,895],{"class":1086},[199,172426,171630],{"class":205},[199,172428,149065],{"class":8113},[199,172430,895],{"class":1086},[199,172432,149070],{"class":898},[199,172434,1594],{"class":205},[199,172436,172437],{"class":201,"line":227},[199,172438,907],{"emptyLinePlaceholder":906},[199,172440,172441,172444,172446],{"class":201,"line":238},[199,172442,172443],{"class":205},"words ",[199,172445,895],{"class":1086},[199,172447,172448],{"class":205}," content.lower().split()\n",[199,172450,172451,172454,172456],{"class":201,"line":252},[199,172452,172453],{"class":205},"counter ",[199,172455,895],{"class":1086},[199,172457,90127],{"class":205},[199,172459,172460],{"class":201,"line":388},[199,172461,907],{"emptyLinePlaceholder":906},[199,172463,172464,172466,172469,172471],{"class":201,"line":415},[199,172465,5929],{"class":1086},[199,172467,172468],{"class":205}," word ",[199,172470,28886],{"class":1086},[199,172472,172473],{"class":205}," words:\n",[199,172475,172476,172479,172481,172484,172487,172489,172492],{"class":201,"line":426},[199,172477,172478],{"class":205},"    word ",[199,172480,895],{"class":1086},[199,172482,172483],{"class":205}," word.strip(",[199,172485,172486],{"class":898},"\".,!?;:",[199,172488,158754],{"class":1018},[199,172490,172491],{"class":898},"'()[]\"",[199,172493,1594],{"class":205},[199,172495,172496,172498,172500],{"class":201,"line":1015},[199,172497,6005],{"class":1086},[199,172499,41771],{"class":1086},[199,172501,172502],{"class":205}," word:\n",[199,172504,172505],{"class":201,"line":1031},[199,172506,150771],{"class":1086},[199,172508,172509,172512,172514,172517,172519,172521,172523],{"class":201,"line":1043},[199,172510,172511],{"class":205},"    counter[word] ",[199,172513,895],{"class":1086},[199,172515,172516],{"class":205}," counter.get(word, ",[199,172518,1025],{"class":1018},[199,172520,16575],{"class":205},[199,172522,2028],{"class":1086},[199,172524,57958],{"class":1018},[199,172526,172527],{"class":201,"line":1049},[199,172528,907],{"emptyLinePlaceholder":906},[199,172530,172531,172534,172536,172538,172541,172543,172545,172547,172549,172551,172553,172555,172557],{"class":201,"line":1054},[199,172532,172533],{"class":205},"items ",[199,172535,895],{"class":1086},[199,172537,165863],{"class":1018},[199,172539,172540],{"class":205},"(counter.items(), ",[199,172542,156205],{"class":8113},[199,172544,156208],{"class":1086},[199,172546,156211],{"class":205},[199,172548,1115],{"class":1018},[199,172550,114461],{"class":205},[199,172552,165787],{"class":8113},[199,172554,895],{"class":1086},[199,172556,34318],{"class":1018},[199,172558,1594],{"class":205},[199,172560,172561],{"class":201,"line":1062},[199,172562,907],{"emptyLinePlaceholder":906},[199,172564,172565,172567,172570,172572,172575,172577],{"class":201,"line":1075},[199,172566,5929],{"class":1086},[199,172568,172569],{"class":205}," word, count ",[199,172571,28886],{"class":1086},[199,172573,172574],{"class":205}," items[:",[199,172576,3528],{"class":1018},[199,172578,168014],{"class":205},[199,172580,172581,172583],{"class":201,"line":1092},[199,172582,34141],{"class":1018},[199,172584,172585],{"class":205},"(word, count)\n",[14,172587,172589],{"id":172588},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[190,172591,172593],{"className":33221,"code":172592,"language":33223,"meta":57,"style":57},"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",[196,172594,172595,172601,172611,172615,172627,172631,172635,172643,172653,172659,172663,172693,172703,172707,172711,172719,172749,172773,172777,172781,172789,172818,172823],{"__ignoreMap":57},[199,172596,172597,172599],{"class":201,"line":202},[199,172598,33235],{"class":1086},[199,172600,149350],{"class":205},[199,172602,172603,172605,172607,172609],{"class":201,"line":36},[199,172604,33579],{"class":1086},[199,172606,110570],{"class":205},[199,172608,33235],{"class":1086},[199,172610,110575],{"class":205},[199,172612,172613],{"class":201,"line":73},[199,172614,907],{"emptyLinePlaceholder":906},[199,172616,172617,172619,172621,172623,172625],{"class":201,"line":333},[199,172618,154083],{"class":1018},[199,172620,16425],{"class":1086},[199,172622,110804],{"class":205},[199,172624,154090],{"class":898},[199,172626,1594],{"class":205},[199,172628,172629],{"class":201,"line":227},[199,172630,907],{"emptyLinePlaceholder":906},[199,172632,172633],{"class":201,"line":238},[199,172634,907],{"emptyLinePlaceholder":906},[199,172636,172637,172639,172641],{"class":201,"line":252},[199,172638,34789],{"class":1086},[199,172640,154107],{"class":878},[199,172642,34795],{"class":205},[199,172644,172645,172647,172649,172651],{"class":201,"line":388},[199,172646,6005],{"class":1086},[199,172648,41771],{"class":1086},[199,172650,154118],{"class":1018},[199,172652,154121],{"class":205},[199,172654,172655,172657],{"class":201,"line":415},[199,172656,17612],{"class":1086},[199,172658,1475],{"class":205},[199,172660,172661],{"class":201,"line":426},[199,172662,907],{"emptyLinePlaceholder":906},[199,172664,172665,172667,172669,172671,172673,172675,172677,172679,172681,172683,172685,172687,172689,172691],{"class":201,"line":1015},[199,172666,37019],{"class":1086},[199,172668,149050],{"class":1018},[199,172670,1537],{"class":205},[199,172672,154083],{"class":1018},[199,172674,1912],{"class":205},[199,172676,149060],{"class":898},[199,172678,1912],{"class":205},[199,172680,149065],{"class":8113},[199,172682,895],{"class":1086},[199,172684,149070],{"class":898},[199,172686,16575],{"class":205},[199,172688,34225],{"class":1086},[199,172690,150412],{"class":8113},[199,172692,6640],{"class":205},[199,172694,172695,172697,172699,172701],{"class":201,"line":1031},[199,172696,17612],{"class":1086},[199,172698,150423],{"class":205},[199,172700,48195],{"class":8113},[199,172702,1594],{"class":205},[199,172704,172705],{"class":201,"line":1043},[199,172706,907],{"emptyLinePlaceholder":906},[199,172708,172709],{"class":201,"line":1049},[199,172710,907],{"emptyLinePlaceholder":906},[199,172712,172713,172715,172717],{"class":201,"line":1054},[199,172714,34789],{"class":1086},[199,172716,154217],{"class":878},[199,172718,154220],{"class":205},[199,172720,172721,172723,172725,172727,172729,172731,172733,172735,172737,172739,172741,172743,172745,172747],{"class":201,"line":1062},[199,172722,37019],{"class":1086},[199,172724,149050],{"class":1018},[199,172726,1537],{"class":205},[199,172728,154083],{"class":1018},[199,172730,1912],{"class":205},[199,172732,154235],{"class":898},[199,172734,1912],{"class":205},[199,172736,149065],{"class":8113},[199,172738,895],{"class":1086},[199,172740,149070],{"class":898},[199,172742,16575],{"class":205},[199,172744,34225],{"class":1086},[199,172746,150412],{"class":8113},[199,172748,6640],{"class":205},[199,172750,172751,172753,172755,172757,172759,172761,172763,172765,172767,172769,172771],{"class":201,"line":1075},[199,172752,154256],{"class":205},[199,172754,48195],{"class":8113},[199,172756,1912],{"class":205},[199,172758,149396],{"class":8113},[199,172760,895],{"class":1086},[199,172762,36828],{"class":1018},[199,172764,1912],{"class":205},[199,172766,154271],{"class":8113},[199,172768,895],{"class":1086},[199,172770,1925],{"class":1018},[199,172772,1594],{"class":205},[199,172774,172775],{"class":201,"line":1092},[199,172776,907],{"emptyLinePlaceholder":906},[199,172778,172779],{"class":201,"line":1107},[199,172780,907],{"emptyLinePlaceholder":906},[199,172782,172783,172785,172787],{"class":201,"line":1128},[199,172784,161975],{"class":205},[199,172786,895],{"class":1086},[199,172788,155301],{"class":205},[199,172790,172791,172794,172796,172798,172800,172802,172804,172806,172808,172810,172812,172814,172816],{"class":201,"line":1146},[199,172792,172793],{"class":205},"students.append({",[199,172795,64938],{"class":898},[199,172797,1022],{"class":205},[199,172799,152147],{"class":898},[199,172801,1912],{"class":205},[199,172803,71383],{"class":898},[199,172805,1022],{"class":205},[199,172807,3730],{"class":1018},[199,172809,1912],{"class":205},[199,172811,153731],{"class":898},[199,172813,1022],{"class":205},[199,172815,4063],{"class":1018},[199,172817,167411],{"class":205},[199,172819,172820],{"class":201,"line":1163},[199,172821,172822],{"class":205},"save_students(students)\n",[199,172824,172825,172827,172829,172832],{"class":201,"line":1176},[199,172826,33258],{"class":1018},[199,172828,1537],{"class":205},[199,172830,172831],{"class":898},"\"保存成功\"",[199,172833,1594],{"class":205},[14,172835,172837],{"id":172836},"_814-易错点","8.14 易错点",[24,172839,172840,172844,172850,172855,172862,172869],{},[27,172841,172842,171103],{},[196,172843,3874],{},[27,172845,172846,172847,31228],{},"读写中文要指定 ",[196,172848,172849],{},"encoding=\"utf-8\"",[27,172851,172852,172853,31228],{},"打开文件后要关闭，推荐使用 ",[196,172854,110092],{},[27,172856,172857,172858,172861],{},"读取大文件不要直接 ",[196,172859,172860],{},"read()"," 全部内容。",[27,172863,172864,172865,172868],{},"Windows 写 CSV 时建议加 ",[196,172866,172867],{},"newline=\"\"","，避免空行。",[27,172870,172871],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172873,172875],{"id":172874},"_815-本章练习","8.15 本章练习",[24,172877,172878,172885,172890,172893,172896],{},[27,172879,172880,172881,172884],{},"写入一个 ",[196,172882,172883],{},"students.txt","，每行保存一个学生姓名。",[27,172886,106614,172887,172889],{},[196,172888,172883],{}," 并输出所有学生。",[27,172891,172892],{},"把学生列表保存为 JSON 文件。",[27,172894,172895],{},"从 JSON 文件读取学生数据，计算平均分。",[27,172897,172898,172899,172902,172903,172906],{},"写一个日志函数 ",[196,172900,172901],{},"write_log(message)","，每次调用向 ",[196,172904,172905],{},"app.log"," 追加一行。",[1002,172908,172909],{},"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":57,"searchDepth":36,"depth":36,"links":172911},[172912,172913,172917,172918,172924,172925,172926,172927,172928,172929,172930,172931,172932,172933,172934],{"id":170423,"depth":36,"text":170424},{"id":170464,"depth":36,"text":170465,"children":172914},[172915,172916],{"id":170468,"depth":73,"text":170469},{"id":170502,"depth":73,"text":170503},{"id":170616,"depth":36,"text":170617},{"id":170709,"depth":36,"text":170710,"children":172919},[172920,172921,172922,172923],{"id":170713,"depth":73,"text":170714},{"id":170800,"depth":73,"text":170801},{"id":170870,"depth":73,"text":170871},{"id":170964,"depth":73,"text":170965},{"id":171034,"depth":36,"text":171035},{"id":171097,"depth":36,"text":171098},{"id":171258,"depth":36,"text":171259},{"id":171321,"depth":36,"text":171322},{"id":171437,"depth":36,"text":171438},{"id":171647,"depth":36,"text":171648},{"id":171959,"depth":36,"text":171960},{"id":172370,"depth":36,"text":172371},{"id":172588,"depth":36,"text":172589},{"id":172836,"depth":36,"text":172837},{"id":172874,"depth":36,"text":172875},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170415,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172941,"title":172942,"body":172943,"description":3023,"extension":3024,"meta":175129,"navigation":906,"path":175130,"seo":175131,"stem":175132,"__hash__":175133},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172944,"toc":175096},[172945,172948,172952,172955,172958,173050,173052,173071,173076,173080,173083,173086,173115,173122,173125,173129,173132,173161,173163,173215,173221,173274,173278,173376,173379,173446,173450,173507,173509,173515,173519,173524,173530,173621,173626,173630,173633,173711,173714,173752,173756,173874,173877,173881,173884,173929,173932,173936,173941,173947,173997,174000,174031,174035,174039,174069,174073,174108,174112,174147,174187,174191,174207,174210,174214,174218,174297,174301,174342,174346,174401,174405,174439,174443,174473,174482,174489,174495,174552,174555,174563,174566,174570,174577,174580,174586,174589,174606,174611,174615,174621,174634,174637,174674,174677,174688,174691,174705,174708,174722,174726,174733,174766,174769,174771,174777,174780,174784,174786,174792,174797,174970,174974,175037,175041,175065,175069,175093],[10,172946,172942],{"id":172947},"_9-异常模块与包",[14,172949,172951],{"id":172950},"_91-什么是异常","9.1 什么是异常",[31,172953,172954],{},"异常是程序运行过程中出现的错误。",[31,172956,172957],{},"常见异常：",[3227,172959,172960,172969],{},[3230,172961,172962],{},[3233,172963,172964,172967],{},[3236,172965,172966],{},"异常",[3236,172968,28712],{},[3273,172970,172971,172981,172991,173000,173010,173020,173030,173040],{},[3233,172972,172973,172978],{},[3278,172974,172975],{},[196,172976,172977],{},"NameError",[3278,172979,172980],{},"使用了未定义变量",[3233,172982,172983,172988],{},[3278,172984,172985],{},[196,172986,172987],{},"TypeError",[3278,172989,172990],{},"类型不匹配",[3233,172992,172993,172997],{},[3278,172994,172995],{},[196,172996,157093],{},[3278,172998,172999],{},"值不合法",[3233,173001,173002,173007],{},[3278,173003,173004],{},[196,173005,173006],{},"IndexError",[3278,173008,173009],{},"列表索引越界",[3233,173011,173012,173017],{},[3278,173013,173014],{},[196,173015,173016],{},"KeyError",[3278,173018,173019],{},"字典 key 不存在",[3233,173021,173022,173027],{},[3278,173023,173024],{},[196,173025,173026],{},"FileNotFoundError",[3278,173028,173029],{},"文件不存在",[3233,173031,173032,173037],{},[3278,173033,173034],{},[196,173035,173036],{},"ZeroDivisionError",[3278,173038,173039],{},"除数为 0",[3233,173041,173042,173047],{},[3278,173043,173044],{},[196,173045,173046],{},"ImportError",[3278,173048,173049],{},"导入失败",[31,173051,17994],{},[190,173053,173055],{"className":33221,"code":173054,"language":33223,"meta":57,"style":57},"num = int(\"abc\")\n",[196,173056,173057],{"__ignoreMap":57},[199,173058,173059,173061,173063,173065,173067,173069],{"class":201,"line":202},[199,173060,158046],{"class":205},[199,173062,895],{"class":1086},[199,173064,5296],{"class":1018},[199,173066,1537],{"class":205},[199,173068,158139],{"class":898},[199,173070,1594],{"class":205},[31,173072,173073,173074,31228],{},"会触发 ",[196,173075,157093],{},[14,173077,173079],{"id":173078},"_92-为什么要处理异常","9.2 为什么要处理异常",[31,173081,173082],{},"如果不处理异常，程序会直接终止。",[31,173084,173085],{},"例如用户输入年龄：",[190,173087,173089],{"className":33221,"code":173088,"language":33223,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[196,173090,173091,173109],{"__ignoreMap":57},[199,173092,173093,173095,173097,173099,173101,173103,173105,173107],{"class":201,"line":202},[199,173094,148805],{"class":205},[199,173096,895],{"class":1086},[199,173098,5296],{"class":1018},[199,173100,1537],{"class":205},[199,173102,56080],{"class":1018},[199,173104,1537],{"class":205},[199,173106,154653],{"class":898},[199,173108,1554],{"class":205},[199,173110,173111,173113],{"class":201,"line":36},[199,173112,33258],{"class":1018},[199,173114,158020],{"class":205},[31,173116,173117,173118,173121],{},"用户输入 ",[196,173119,173120],{},"abc","，程序就会报错退出。",[31,173123,173124],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,173126,173128],{"id":173127},"_93-try-except","9.3 try except",[31,173130,173131],{},"基础语法：",[190,173133,173135],{"className":33221,"code":173134,"language":33223,"meta":57,"style":57},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[196,173136,173137,173144,173149,173156],{"__ignoreMap":57},[199,173138,173139,173142],{"class":201,"line":202},[199,173140,173141],{"class":1086},"try",[199,173143,6640],{"class":205},[199,173145,173146],{"class":201,"line":36},[199,173147,173148],{"class":205},"    可能出错的代码\n",[199,173150,173151,173154],{"class":201,"line":73},[199,173152,173153],{"class":1086},"except",[199,173155,6640],{"class":205},[199,173157,173158],{"class":201,"line":333},[199,173159,173160],{"class":205},"    出错后的处理代码\n",[31,173162,17994],{},[190,173164,173166],{"className":33221,"code":173165,"language":33223,"meta":57,"style":57},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[196,173167,173168,173174,173192,173198,173204],{"__ignoreMap":57},[199,173169,173170,173172],{"class":201,"line":202},[199,173171,173141],{"class":1086},[199,173173,6640],{"class":205},[199,173175,173176,173178,173180,173182,173184,173186,173188,173190],{"class":201,"line":36},[199,173177,154645],{"class":205},[199,173179,895],{"class":1086},[199,173181,5296],{"class":1018},[199,173183,1537],{"class":205},[199,173185,56080],{"class":1018},[199,173187,1537],{"class":205},[199,173189,154653],{"class":898},[199,173191,1554],{"class":205},[199,173193,173194,173196],{"class":201,"line":73},[199,173195,34141],{"class":1018},[199,173197,158020],{"class":205},[199,173199,173200,173202],{"class":201,"line":333},[199,173201,173153],{"class":1086},[199,173203,6640],{"class":205},[199,173205,173206,173208,173210,173213],{"class":201,"line":227},[199,173207,34141],{"class":1018},[199,173209,1537],{"class":205},[199,173211,173212],{"class":898},"\"年龄必须是数字\"",[199,173214,1594],{"class":205},[31,173216,173217,173218,173220],{},"不建议裸写 ",[196,173219,173153],{},"，最好指定异常类型。",[190,173222,173224],{"className":33221,"code":173223,"language":33223,"meta":57,"style":57},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[196,173225,173226,173232,173250,173256,173264],{"__ignoreMap":57},[199,173227,173228,173230],{"class":201,"line":202},[199,173229,173141],{"class":1086},[199,173231,6640],{"class":205},[199,173233,173234,173236,173238,173240,173242,173244,173246,173248],{"class":201,"line":36},[199,173235,154645],{"class":205},[199,173237,895],{"class":1086},[199,173239,5296],{"class":1018},[199,173241,1537],{"class":205},[199,173243,56080],{"class":1018},[199,173245,1537],{"class":205},[199,173247,154653],{"class":898},[199,173249,1554],{"class":205},[199,173251,173252,173254],{"class":201,"line":73},[199,173253,34141],{"class":1018},[199,173255,158020],{"class":205},[199,173257,173258,173260,173262],{"class":201,"line":333},[199,173259,173153],{"class":1086},[199,173261,154485],{"class":1018},[199,173263,6640],{"class":205},[199,173265,173266,173268,173270,173272],{"class":201,"line":227},[199,173267,34141],{"class":1018},[199,173269,1537],{"class":205},[199,173271,173212],{"class":898},[199,173273,1594],{"class":205},[14,173275,173277],{"id":173276},"_94-捕获多个异常","9.4 捕获多个异常",[190,173279,173281],{"className":33221,"code":173280,"language":33223,"meta":57,"style":57},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[196,173282,173283,173289,173310,173330,173337,173345,173356,173365],{"__ignoreMap":57},[199,173284,173285,173287],{"class":201,"line":202},[199,173286,173141],{"class":1086},[199,173288,6640],{"class":205},[199,173290,173291,173294,173296,173298,173300,173302,173304,173306,173308],{"class":201,"line":36},[199,173292,173293],{"class":205},"    nums ",[199,173295,895],{"class":1086},[199,173297,1906],{"class":205},[199,173299,1115],{"class":1018},[199,173301,1912],{"class":205},[199,173303,1925],{"class":1018},[199,173305,1912],{"class":205},[199,173307,1920],{"class":1018},[199,173309,1932],{"class":205},[199,173311,173312,173315,173317,173319,173321,173323,173325,173328],{"class":201,"line":73},[199,173313,173314],{"class":205},"    index ",[199,173316,895],{"class":1086},[199,173318,5296],{"class":1018},[199,173320,1537],{"class":205},[199,173322,56080],{"class":1018},[199,173324,1537],{"class":205},[199,173326,173327],{"class":898},"\"请输入索引:\"",[199,173329,1554],{"class":205},[199,173331,173332,173334],{"class":201,"line":333},[199,173333,34141],{"class":1018},[199,173335,173336],{"class":205},"(nums[index])\n",[199,173338,173339,173341,173343],{"class":201,"line":227},[199,173340,173153],{"class":1086},[199,173342,154485],{"class":1018},[199,173344,6640],{"class":205},[199,173346,173347,173349,173351,173354],{"class":201,"line":238},[199,173348,34141],{"class":1018},[199,173350,1537],{"class":205},[199,173352,173353],{"class":898},"\"索引必须是整数\"",[199,173355,1594],{"class":205},[199,173357,173358,173360,173363],{"class":201,"line":252},[199,173359,173153],{"class":1086},[199,173361,173362],{"class":1018}," IndexError",[199,173364,6640],{"class":205},[199,173366,173367,173369,173371,173374],{"class":201,"line":388},[199,173368,34141],{"class":1018},[199,173370,1537],{"class":205},[199,173372,173373],{"class":898},"\"索引越界\"",[199,173375,1594],{"class":205},[31,173377,173378],{},"多个异常使用相同处理逻辑：",[190,173380,173382],{"className":33221,"code":173381,"language":33223,"meta":57,"style":57},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[196,173383,173384,173390,173408,173421,173435],{"__ignoreMap":57},[199,173385,173386,173388],{"class":201,"line":202},[199,173387,173141],{"class":1086},[199,173389,6640],{"class":205},[199,173391,173392,173394,173396,173398,173400,173402,173404,173406],{"class":201,"line":36},[199,173393,48433],{"class":205},[199,173395,895],{"class":1086},[199,173397,5296],{"class":1018},[199,173399,1537],{"class":205},[199,173401,56080],{"class":1018},[199,173403,1537],{"class":205},[199,173405,158055],{"class":898},[199,173407,1554],{"class":205},[199,173409,173410,173412,173414,173416,173418],{"class":201,"line":73},[199,173411,34141],{"class":1018},[199,173413,1537],{"class":205},[199,173415,3528],{"class":1018},[199,173417,158305],{"class":1086},[199,173419,173420],{"class":205}," num)\n",[199,173422,173423,173425,173427,173429,173431,173433],{"class":201,"line":333},[199,173424,173153],{"class":1086},[199,173426,1484],{"class":205},[199,173428,157093],{"class":1018},[199,173430,1912],{"class":205},[199,173432,173036],{"class":1018},[199,173434,33628],{"class":205},[199,173436,173437,173439,173441,173444],{"class":201,"line":227},[199,173438,34141],{"class":1018},[199,173440,1537],{"class":205},[199,173442,173443],{"class":898},"\"输入不合法\"",[199,173445,1594],{"class":205},[14,173447,173449],{"id":173448},"_95-获取异常信息","9.5 获取异常信息",[190,173451,173453],{"className":33221,"code":173452,"language":33223,"meta":57,"style":57},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[196,173454,173455,173461,173475,173486],{"__ignoreMap":57},[199,173456,173457,173459],{"class":201,"line":202},[199,173458,173141],{"class":1086},[199,173460,6640],{"class":205},[199,173462,173463,173465,173467,173469,173471,173473],{"class":201,"line":36},[199,173464,48433],{"class":205},[199,173466,895],{"class":1086},[199,173468,5296],{"class":1018},[199,173470,1537],{"class":205},[199,173472,158139],{"class":898},[199,173474,1594],{"class":205},[199,173476,173477,173479,173481,173483],{"class":201,"line":73},[199,173478,173153],{"class":1086},[199,173480,154485],{"class":1018},[199,173482,66863],{"class":1086},[199,173484,173485],{"class":205}," e:\n",[199,173487,173488,173490,173492,173494,173497,173499,173501,173503,173505],{"class":201,"line":333},[199,173489,34141],{"class":1018},[199,173491,1537],{"class":205},[199,173493,3146],{"class":1086},[199,173495,173496],{"class":898},"\"出错了:",[199,173498,3974],{"class":1018},[199,173500,3166],{"class":205},[199,173502,759],{"class":1018},[199,173504,3337],{"class":898},[199,173506,1594],{"class":205},[31,173508,148716],{},[190,173510,173513],{"className":173511,"code":173512,"language":8084,"meta":57},[8082],"出错了:invalid literal for int() with base 10: 'abc'\n",[196,173514,173512],{"__ignoreMap":57},[14,173516,173518],{"id":173517},"_96-else和finally","9.6 else和finally",[31,173520,173521,173523],{},[196,173522,4626],{},"：没有异常时执行。",[31,173525,173526,173529],{},[196,173527,173528],{},"finally","：无论是否异常都会执行。",[190,173531,173533],{"className":33221,"code":173532,"language":33223,"meta":57,"style":57},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[196,173534,173535,173541,173559,173567,173577,173583,173604,173610],{"__ignoreMap":57},[199,173536,173537,173539],{"class":201,"line":202},[199,173538,173141],{"class":1086},[199,173540,6640],{"class":205},[199,173542,173543,173545,173547,173549,173551,173553,173555,173557],{"class":201,"line":36},[199,173544,48433],{"class":205},[199,173546,895],{"class":1086},[199,173548,5296],{"class":1018},[199,173550,1537],{"class":205},[199,173552,56080],{"class":1018},[199,173554,1537],{"class":205},[199,173556,158055],{"class":898},[199,173558,1554],{"class":205},[199,173560,173561,173563,173565],{"class":201,"line":73},[199,173562,173153],{"class":1086},[199,173564,154485],{"class":1018},[199,173566,6640],{"class":205},[199,173568,173569,173571,173573,173575],{"class":201,"line":333},[199,173570,34141],{"class":1018},[199,173572,1537],{"class":205},[199,173574,155473],{"class":898},[199,173576,1594],{"class":205},[199,173578,173579,173581],{"class":201,"line":227},[199,173580,4626],{"class":1086},[199,173582,6640],{"class":205},[199,173584,173585,173587,173589,173591,173594,173596,173598,173600,173602],{"class":201,"line":238},[199,173586,34141],{"class":1018},[199,173588,1537],{"class":205},[199,173590,3146],{"class":1086},[199,173592,173593],{"class":898},"\"输入正确:",[199,173595,3974],{"class":1018},[199,173597,4594],{"class":205},[199,173599,759],{"class":1018},[199,173601,3337],{"class":898},[199,173603,1594],{"class":205},[199,173605,173606,173608],{"class":201,"line":252},[199,173607,173528],{"class":1086},[199,173609,6640],{"class":205},[199,173611,173612,173614,173616,173619],{"class":201,"line":388},[199,173613,34141],{"class":1018},[199,173615,1537],{"class":205},[199,173617,173618],{"class":898},"\"程序结束\"",[199,173620,1594],{"class":205},[31,173622,173623,173625],{},[196,173624,173528],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173627,173629],{"id":173628},"_97-抛出异常","9.7 抛出异常",[31,173631,173632],{},"程序可以主动抛出异常。",[190,173634,173636],{"className":33221,"code":173635,"language":33223,"meta":57,"style":57},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[196,173637,173638,173647,173659,173672,173692,173696,173700],{"__ignoreMap":57},[199,173639,173640,173642,173645],{"class":201,"line":202},[199,173641,34789],{"class":1086},[199,173643,173644],{"class":878}," set_age",[199,173646,163674],{"class":205},[199,173648,173649,173651,173653,173655,173657],{"class":201,"line":36},[199,173650,6005],{"class":1086},[199,173652,18565],{"class":205},[199,173654,887],{"class":1086},[199,173656,1621],{"class":1018},[199,173658,6640],{"class":205},[199,173660,173661,173663,173665,173667,173670],{"class":201,"line":73},[199,173662,105691],{"class":1086},[199,173664,154485],{"class":1018},[199,173666,1537],{"class":205},[199,173668,173669],{"class":898},"\"年龄不能为负数\"",[199,173671,1594],{"class":205},[199,173673,173674,173676,173678,173680,173682,173684,173686,173688,173690],{"class":201,"line":333},[199,173675,34141],{"class":1018},[199,173677,1537],{"class":205},[199,173679,3146],{"class":1086},[199,173681,164242],{"class":898},[199,173683,3974],{"class":1018},[199,173685,72480],{"class":205},[199,173687,759],{"class":1018},[199,173689,3337],{"class":898},[199,173691,1594],{"class":205},[199,173693,173694],{"class":201,"line":227},[199,173695,907],{"emptyLinePlaceholder":906},[199,173697,173698],{"class":201,"line":238},[199,173699,907],{"emptyLinePlaceholder":906},[199,173701,173702,173705,173707,173709],{"class":201,"line":252},[199,173703,173704],{"class":205},"set_age(",[199,173706,1998],{"class":1086},[199,173708,1115],{"class":1018},[199,173710,1594],{"class":205},[31,173712,173713],{},"调用者可以捕获：",[190,173715,173717],{"className":33221,"code":173716,"language":33223,"meta":57,"style":57},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[196,173718,173719,173725,173736,173746],{"__ignoreMap":57},[199,173720,173721,173723],{"class":201,"line":202},[199,173722,173141],{"class":1086},[199,173724,6640],{"class":205},[199,173726,173727,173730,173732,173734],{"class":201,"line":36},[199,173728,173729],{"class":205},"    set_age(",[199,173731,1998],{"class":1086},[199,173733,1115],{"class":1018},[199,173735,1594],{"class":205},[199,173737,173738,173740,173742,173744],{"class":201,"line":73},[199,173739,173153],{"class":1086},[199,173741,154485],{"class":1018},[199,173743,66863],{"class":1086},[199,173745,173485],{"class":205},[199,173747,173748,173750],{"class":201,"line":333},[199,173749,34141],{"class":1018},[199,173751,69258],{"class":205},[14,173753,173755],{"id":173754},"_98-自定义异常","9.8 自定义异常",[190,173757,173759],{"className":33221,"code":173758,"language":33223,"meta":57,"style":57},"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",[196,173760,173761,173775,173779,173783,173787,173795,173805,173816,173826,173830,173834,173840,173857,173868],{"__ignoreMap":57},[199,173762,173763,173765,173768,173770,173773],{"class":201,"line":202},[199,173764,17554],{"class":1086},[199,173766,173767],{"class":878}," BalanceNotEnoughError",[199,173769,1537],{"class":205},[199,173771,173772],{"class":1018},"Exception",[199,173774,33628],{"class":205},[199,173776,173777],{"class":201,"line":36},[199,173778,151796],{"class":1086},[199,173780,173781],{"class":201,"line":73},[199,173782,907],{"emptyLinePlaceholder":906},[199,173784,173785],{"class":201,"line":333},[199,173786,907],{"emptyLinePlaceholder":906},[199,173788,173789,173791,173793],{"class":201,"line":227},[199,173790,34789],{"class":1086},[199,173792,152445],{"class":878},[199,173794,165071],{"class":205},[199,173796,173797,173799,173801,173803],{"class":201,"line":238},[199,173798,6005],{"class":1086},[199,173800,152401],{"class":205},[199,173802,1217],{"class":1086},[199,173804,164848],{"class":205},[199,173806,173807,173809,173812,173814],{"class":201,"line":252},[199,173808,105691],{"class":1086},[199,173810,173811],{"class":205}," BalanceNotEnoughError(",[199,173813,152496],{"class":898},[199,173815,1594],{"class":205},[199,173817,173818,173820,173822,173824],{"class":201,"line":388},[199,173819,6989],{"class":1086},[199,173821,165078],{"class":205},[199,173823,1998],{"class":1086},[199,173825,152434],{"class":205},[199,173827,173828],{"class":201,"line":415},[199,173829,907],{"emptyLinePlaceholder":906},[199,173831,173832],{"class":201,"line":426},[199,173833,907],{"emptyLinePlaceholder":906},[199,173835,173836,173838],{"class":201,"line":1015},[199,173837,173141],{"class":1086},[199,173839,6640],{"class":205},[199,173841,173842,173844,173846,173849,173851,173853,173855],{"class":201,"line":1031},[199,173843,164749],{"class":205},[199,173845,895],{"class":1086},[199,173847,173848],{"class":205}," withdraw(",[199,173850,3396],{"class":1018},[199,173852,1912],{"class":205},[199,173854,4647],{"class":1018},[199,173856,1594],{"class":205},[199,173858,173859,173861,173864,173866],{"class":201,"line":1043},[199,173860,173153],{"class":1086},[199,173862,173863],{"class":205}," BalanceNotEnoughError ",[199,173865,34225],{"class":1086},[199,173867,173485],{"class":205},[199,173869,173870,173872],{"class":201,"line":1049},[199,173871,34141],{"class":1018},[199,173873,69258],{"class":205},[31,173875,173876],{},"入门阶段大多数情况使用内置异常即可。",[14,173878,173880],{"id":173879},"_99-traceback","9.9 traceback",[31,173882,173883],{},"调试时可以输出完整异常堆栈。",[190,173885,173887],{"className":33221,"code":173886,"language":33223,"meta":57,"style":57},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[196,173888,173889,173896,173900,173906,173916,173924],{"__ignoreMap":57},[199,173890,173891,173893],{"class":201,"line":202},[199,173892,33235],{"class":1086},[199,173894,173895],{"class":205}," traceback\n",[199,173897,173898],{"class":201,"line":36},[199,173899,907],{"emptyLinePlaceholder":906},[199,173901,173902,173904],{"class":201,"line":73},[199,173903,173141],{"class":1086},[199,173905,6640],{"class":205},[199,173907,173908,173910,173912,173914],{"class":201,"line":333},[199,173909,4901],{"class":1018},[199,173911,1537],{"class":205},[199,173913,158139],{"class":898},[199,173915,1594],{"class":205},[199,173917,173918,173920,173922],{"class":201,"line":227},[199,173919,173153],{"class":1086},[199,173921,154485],{"class":1018},[199,173923,6640],{"class":205},[199,173925,173926],{"class":201,"line":238},[199,173927,173928],{"class":205},"    traceback.print_exc()\n",[31,173930,173931],{},"日志系统中常把异常堆栈记录到文件。",[14,173933,173935],{"id":173934},"_910-什么是模块","9.10 什么是模块",[31,173937,173938,173939,128242],{},"模块就是一个 ",[196,173940,148611],{},[31,173942,173943,173944,27462],{},"例如创建 ",[196,173945,173946],{},"my_math.py",[190,173948,173950],{"className":33221,"code":173949,"language":33223,"meta":57,"style":57},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[196,173951,173952,173960,173970,173974,173978,173987],{"__ignoreMap":57},[199,173953,173954,173956,173958],{"class":201,"line":202},[199,173955,34789],{"class":1086},[199,173957,8106],{"class":878},[199,173959,153352],{"class":205},[199,173961,173962,173964,173966,173968],{"class":201,"line":36},[199,173963,6989],{"class":1086},[199,173965,13732],{"class":205},[199,173967,2028],{"class":1086},[199,173969,153363],{"class":205},[199,173971,173972],{"class":201,"line":73},[199,173973,907],{"emptyLinePlaceholder":906},[199,173975,173976],{"class":201,"line":333},[199,173977,907],{"emptyLinePlaceholder":906},[199,173979,173980,173982,173985],{"class":201,"line":227},[199,173981,34789],{"class":1086},[199,173983,173984],{"class":878}," sub",[199,173986,153352],{"class":205},[199,173988,173989,173991,173993,173995],{"class":201,"line":238},[199,173990,6989],{"class":1086},[199,173992,13732],{"class":205},[199,173994,1998],{"class":1086},[199,173996,153363],{"class":205},[31,173998,173999],{},"在另一个文件中导入：",[190,174001,174003],{"className":33221,"code":174002,"language":33223,"meta":57,"style":57},"import my_math\n\nprint(my_math.add(1, 2))\n",[196,174004,174005,174012,174016],{"__ignoreMap":57},[199,174006,174007,174009],{"class":201,"line":202},[199,174008,33235],{"class":1086},[199,174010,174011],{"class":205}," my_math\n",[199,174013,174014],{"class":201,"line":36},[199,174015,907],{"emptyLinePlaceholder":906},[199,174017,174018,174020,174023,174025,174027,174029],{"class":201,"line":73},[199,174019,33258],{"class":1018},[199,174021,174022],{"class":205},"(my_math.add(",[199,174024,1115],{"class":1018},[199,174026,1912],{"class":205},[199,174028,1925],{"class":1018},[199,174030,1554],{"class":205},[14,174032,174034],{"id":174033},"_911-import导入","9.11 import导入",[19,174036,174038],{"id":174037},"_9111-导入模块","9.11.1 导入模块",[190,174040,174042],{"className":33221,"code":174041,"language":33223,"meta":57,"style":57},"import random\n\nprint(random.randint(1, 10))\n",[196,174043,174044,174050,174054],{"__ignoreMap":57},[199,174045,174046,174048],{"class":201,"line":202},[199,174047,33235],{"class":1086},[199,174049,48169],{"class":205},[199,174051,174052],{"class":201,"line":36},[199,174053,907],{"emptyLinePlaceholder":906},[199,174055,174056,174058,174061,174063,174065,174067],{"class":201,"line":73},[199,174057,33258],{"class":1018},[199,174059,174060],{"class":205},"(random.randint(",[199,174062,1115],{"class":1018},[199,174064,1912],{"class":205},[199,174066,3528],{"class":1018},[199,174068,1554],{"class":205},[19,174070,174072],{"id":174071},"_9112-导入指定内容","9.11.2 导入指定内容",[190,174074,174076],{"className":33221,"code":174075,"language":33223,"meta":57,"style":57},"from random import randint\n\nprint(randint(1, 10))\n",[196,174077,174078,174089,174093],{"__ignoreMap":57},[199,174079,174080,174082,174084,174086],{"class":201,"line":202},[199,174081,33579],{"class":1086},[199,174083,60055],{"class":205},[199,174085,33235],{"class":1086},[199,174087,174088],{"class":205}," randint\n",[199,174090,174091],{"class":201,"line":36},[199,174092,907],{"emptyLinePlaceholder":906},[199,174094,174095,174097,174100,174102,174104,174106],{"class":201,"line":73},[199,174096,33258],{"class":1018},[199,174098,174099],{"class":205},"(randint(",[199,174101,1115],{"class":1018},[199,174103,1912],{"class":205},[199,174105,3528],{"class":1018},[199,174107,1554],{"class":205},[19,174109,174111],{"id":174110},"_9113-起别名","9.11.3 起别名",[190,174113,174115],{"className":33221,"code":174114,"language":33223,"meta":57,"style":57},"import random as rd\n\nprint(rd.randint(1, 10))\n",[196,174116,174117,174128,174132],{"__ignoreMap":57},[199,174118,174119,174121,174123,174125],{"class":201,"line":202},[199,174120,33235],{"class":1086},[199,174122,60055],{"class":205},[199,174124,34225],{"class":1086},[199,174126,174127],{"class":205}," rd\n",[199,174129,174130],{"class":201,"line":36},[199,174131,907],{"emptyLinePlaceholder":906},[199,174133,174134,174136,174139,174141,174143,174145],{"class":201,"line":73},[199,174135,33258],{"class":1018},[199,174137,174138],{"class":205},"(rd.randint(",[199,174140,1115],{"class":1018},[199,174142,1912],{"class":205},[199,174144,3528],{"class":1018},[199,174146,1554],{"class":205},[190,174148,174150],{"className":33221,"code":174149,"language":33223,"meta":57,"style":57},"from random import randint as rint\n\nprint(rint(1, 10))\n",[196,174151,174152,174168,174172],{"__ignoreMap":57},[199,174153,174154,174156,174158,174160,174163,174165],{"class":201,"line":202},[199,174155,33579],{"class":1086},[199,174157,60055],{"class":205},[199,174159,33235],{"class":1086},[199,174161,174162],{"class":205}," randint ",[199,174164,34225],{"class":1086},[199,174166,174167],{"class":205}," rint\n",[199,174169,174170],{"class":201,"line":36},[199,174171,907],{"emptyLinePlaceholder":906},[199,174173,174174,174176,174179,174181,174183,174185],{"class":201,"line":73},[199,174175,33258],{"class":1018},[199,174177,174178],{"class":205},"(rint(",[199,174180,1115],{"class":1018},[199,174182,1912],{"class":205},[199,174184,3528],{"class":1018},[199,174186,1554],{"class":205},[19,174188,174190],{"id":174189},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[190,174192,174194],{"className":33221,"code":174193,"language":33223,"meta":57,"style":57},"from random import *\n",[196,174195,174196],{"__ignoreMap":57},[199,174197,174198,174200,174202,174204],{"class":201,"line":202},[199,174199,33579],{"class":1086},[199,174201,60055],{"class":205},[199,174203,33235],{"class":1086},[199,174205,174206],{"class":1086}," *\n",[31,174208,174209],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174211,174213],{"id":174212},"_912-常用内置模块","9.12 常用内置模块",[19,174215,174217],{"id":174216},"_9121-random","9.12.1 random",[190,174219,174221],{"className":33221,"code":174220,"language":33223,"meta":57,"style":57},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[196,174222,174223,174229,174233,174247,174266],{"__ignoreMap":57},[199,174224,174225,174227],{"class":201,"line":202},[199,174226,33235],{"class":1086},[199,174228,48169],{"class":205},[199,174230,174231],{"class":201,"line":36},[199,174232,907],{"emptyLinePlaceholder":906},[199,174234,174235,174237,174239,174241,174243,174245],{"class":201,"line":73},[199,174236,33258],{"class":1018},[199,174238,174060],{"class":205},[199,174240,1115],{"class":1018},[199,174242,1912],{"class":205},[199,174244,3528],{"class":1018},[199,174246,1554],{"class":205},[199,174248,174249,174251,174254,174256,174258,174260,174262,174264],{"class":201,"line":333},[199,174250,33258],{"class":1018},[199,174252,174253],{"class":205},"(random.choice([",[199,174255,152147],{"class":898},[199,174257,1912],{"class":205},[199,174259,153195],{"class":898},[199,174261,1912],{"class":205},[199,174263,161990],{"class":898},[199,174265,35985],{"class":205},[199,174267,174268,174270,174273,174275,174277,174279,174281,174283,174285,174287,174289,174291,174293,174295],{"class":201,"line":227},[199,174269,33258],{"class":1018},[199,174271,174272],{"class":205},"(random.sample([",[199,174274,1115],{"class":1018},[199,174276,1912],{"class":205},[199,174278,1925],{"class":1018},[199,174280,1912],{"class":205},[199,174282,1920],{"class":1018},[199,174284,1912],{"class":205},[199,174286,1915],{"class":1018},[199,174288,1912],{"class":205},[199,174290,1909],{"class":1018},[199,174292,114461],{"class":205},[199,174294,1925],{"class":1018},[199,174296,1554],{"class":205},[19,174298,174300],{"id":174299},"_9122-time","9.12.2 time",[190,174302,174304],{"className":33221,"code":174303,"language":33223,"meta":57,"style":57},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[196,174305,174306,174312,174316,174323,174331],{"__ignoreMap":57},[199,174307,174308,174310],{"class":201,"line":202},[199,174309,33235],{"class":1086},[199,174311,34671],{"class":205},[199,174313,174314],{"class":201,"line":36},[199,174315,907],{"emptyLinePlaceholder":906},[199,174317,174318,174320],{"class":201,"line":73},[199,174319,33258],{"class":1018},[199,174321,174322],{"class":205},"(time.time())\n",[199,174324,174325,174327,174329],{"class":201,"line":333},[199,174326,97330],{"class":205},[199,174328,1115],{"class":1018},[199,174330,1594],{"class":205},[199,174332,174333,174335,174337,174340],{"class":201,"line":227},[199,174334,33258],{"class":1018},[199,174336,1537],{"class":205},[199,174338,174339],{"class":898},"\"1秒后执行\"",[199,174341,1594],{"class":205},[19,174343,174345],{"id":174344},"_9123-datetime","9.12.3 datetime",[190,174347,174349],{"className":33221,"code":174348,"language":33223,"meta":57,"style":57},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[196,174350,174351,174363,174367,174377,174384],{"__ignoreMap":57},[199,174352,174353,174355,174358,174360],{"class":201,"line":202},[199,174354,33579],{"class":1086},[199,174356,174357],{"class":205}," datetime ",[199,174359,33235],{"class":1086},[199,174361,174362],{"class":205}," datetime\n",[199,174364,174365],{"class":201,"line":36},[199,174366,907],{"emptyLinePlaceholder":906},[199,174368,174369,174372,174374],{"class":201,"line":73},[199,174370,174371],{"class":205},"now ",[199,174373,895],{"class":1086},[199,174375,174376],{"class":205}," datetime.now()\n",[199,174378,174379,174381],{"class":201,"line":333},[199,174380,33258],{"class":1018},[199,174382,174383],{"class":205},"(now)\n",[199,174385,174386,174388,174391,174394,174396,174399],{"class":201,"line":227},[199,174387,33258],{"class":1018},[199,174389,174390],{"class":205},"(now.strftime(",[199,174392,174393],{"class":898},"\"%Y-%m-",[199,174395,158950],{"class":1018},[199,174397,174398],{"class":898}," %H:%M:%S\"",[199,174400,1554],{"class":205},[19,174402,174404],{"id":174403},"_9124-os","9.12.4 os",[190,174406,174408],{"className":33221,"code":174407,"language":33223,"meta":57,"style":57},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[196,174409,174410,174416,174420,174427],{"__ignoreMap":57},[199,174411,174412,174414],{"class":201,"line":202},[199,174413,33235],{"class":1086},[199,174415,48146],{"class":205},[199,174417,174418],{"class":201,"line":36},[199,174419,907],{"emptyLinePlaceholder":906},[199,174421,174422,174424],{"class":201,"line":73},[199,174423,33258],{"class":1018},[199,174425,174426],{"class":205},"(os.getcwd())\n",[199,174428,174429,174431,174434,174437],{"class":201,"line":333},[199,174430,33258],{"class":1018},[199,174432,174433],{"class":205},"(os.listdir(",[199,174435,174436],{"class":898},"\".\"",[199,174438,1554],{"class":205},[19,174440,174442],{"id":174441},"_9125-sys","9.12.5 sys",[190,174444,174446],{"className":33221,"code":174445,"language":33223,"meta":57,"style":57},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[196,174447,174448,174455,174459,174466],{"__ignoreMap":57},[199,174449,174450,174452],{"class":201,"line":202},[199,174451,33235],{"class":1086},[199,174453,174454],{"class":205}," sys\n",[199,174456,174457],{"class":201,"line":36},[199,174458,907],{"emptyLinePlaceholder":906},[199,174460,174461,174463],{"class":201,"line":73},[199,174462,33258],{"class":1018},[199,174464,174465],{"class":205},"(sys.version)\n",[199,174467,174468,174470],{"class":201,"line":333},[199,174469,33258],{"class":1018},[199,174471,174472],{"class":205},"(sys.path)\n",[14,174474,174476,174477,174479,174480,3337],{"id":174475},"_913-if-name-main","9.13 if ",[49,174478,82069],{}," == \"",[49,174481,104317],{},[31,174483,174484,174485,174488],{},"模块被直接运行和被导入时，",[196,174486,174487],{},"__name__"," 的值不同。",[31,174490,174491,174492,27462],{},"创建 ",[196,174493,174494],{},"my_module.py",[190,174496,174498],{"className":33221,"code":174497,"language":33223,"meta":57,"style":57},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[196,174499,174500,174508,174518,174522,174526,174538],{"__ignoreMap":57},[199,174501,174502,174504,174506],{"class":201,"line":202},[199,174503,34789],{"class":1086},[199,174505,8106],{"class":878},[199,174507,153352],{"class":205},[199,174509,174510,174512,174514,174516],{"class":201,"line":36},[199,174511,6989],{"class":1086},[199,174513,13732],{"class":205},[199,174515,2028],{"class":1086},[199,174517,153363],{"class":205},[199,174519,174520],{"class":201,"line":73},[199,174521,907],{"emptyLinePlaceholder":906},[199,174523,174524],{"class":201,"line":333},[199,174525,907],{"emptyLinePlaceholder":906},[199,174527,174528,174530,174532,174534,174536],{"class":201,"line":227},[199,174529,4470],{"class":1086},[199,174531,34062],{"class":1018},[199,174533,103818],{"class":1086},[199,174535,103821],{"class":898},[199,174537,6640],{"class":205},[199,174539,174540,174542,174544,174546,174548,174550],{"class":201,"line":238},[199,174541,34141],{"class":1018},[199,174543,168859],{"class":205},[199,174545,1115],{"class":1018},[199,174547,1912],{"class":205},[199,174549,1925],{"class":1018},[199,174551,1554],{"class":205},[31,174553,174554],{},"作用：",[24,174556,174557,174560],{},[27,174558,174559],{},"直接运行该文件时，执行测试代码。",[27,174561,174562],{},"被其他文件导入时，不执行测试代码。",[31,174564,174565],{},"这是写模块时很常用的习惯。",[14,174567,174569],{"id":174568},"_914-包","9.14 包",[31,174571,174572,174573,174576],{},"包是包含 ",[196,174574,174575],{},"__init__.py"," 的目录，用于组织多个模块。",[31,174578,174579],{},"目录结构：",[190,174581,174584],{"className":174582,"code":174583,"language":8084,"meta":57},[8082],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[196,174585,174583],{"__ignoreMap":57},[31,174587,174588],{},"导入：",[190,174590,174592],{"className":33221,"code":174591,"language":33223,"meta":57,"style":57},"from utils.file_utils import read_file\n",[196,174593,174594],{"__ignoreMap":57},[199,174595,174596,174598,174601,174603],{"class":201,"line":202},[199,174597,33579],{"class":1086},[199,174599,174600],{"class":205}," utils.file_utils ",[199,174602,33235],{"class":1086},[199,174604,174605],{"class":205}," read_file\n",[31,174607,174608,174610],{},[196,174609,174575],{}," 可以为空，也可以写包初始化逻辑。",[14,174612,174614],{"id":174613},"_915-第三方包","9.15 第三方包",[31,174616,174617,174618,174620],{},"第三方包通过 ",[196,174619,26675],{}," 安装。",[190,174622,174624],{"className":26666,"code":174623,"language":26668,"meta":57,"style":57},"pip install requests\n",[196,174625,174626],{"__ignoreMap":57},[199,174627,174628,174630,174632],{"class":201,"line":202},[199,174629,26675],{"class":878},[199,174631,26678],{"class":898},[199,174633,148357],{"class":898},[31,174635,174636],{},"使用：",[190,174638,174640],{"className":33221,"code":174639,"language":33223,"meta":57,"style":57},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[196,174641,174642,174648,174652,174667],{"__ignoreMap":57},[199,174643,174644,174646],{"class":201,"line":202},[199,174645,33235],{"class":1086},[199,174647,148357],{"class":205},[199,174649,174650],{"class":201,"line":36},[199,174651,907],{"emptyLinePlaceholder":906},[199,174653,174654,174657,174659,174662,174665],{"class":201,"line":73},[199,174655,174656],{"class":205},"response ",[199,174658,895],{"class":1086},[199,174660,174661],{"class":205}," requests.get(",[199,174663,174664],{"class":898},"\"https:\u002F\u002Fwww.example.com\"",[199,174666,1594],{"class":205},[199,174668,174669,174671],{"class":201,"line":333},[199,174670,33258],{"class":1018},[199,174672,174673],{"class":205},"(response.status_code)\n",[31,174675,174676],{},"查看已安装包：",[190,174678,174680],{"className":26666,"code":174679,"language":26668,"meta":57,"style":57},"pip list\n",[196,174681,174682],{"__ignoreMap":57},[199,174683,174684,174686],{"class":201,"line":202},[199,174685,26675],{"class":878},[199,174687,121214],{"class":898},[31,174689,174690],{},"导出项目依赖：",[190,174692,174693],{"className":26666,"code":148552,"language":26668,"meta":57,"style":57},[196,174694,174695],{"__ignoreMap":57},[199,174696,174697,174699,174701,174703],{"class":201,"line":202},[199,174698,26675],{"class":878},[199,174700,148561],{"class":898},[199,174702,29065],{"class":1086},[199,174704,148566],{"class":898},[31,174706,174707],{},"安装项目依赖：",[190,174709,174710],{"className":26666,"code":148572,"language":26668,"meta":57,"style":57},[196,174711,174712],{"__ignoreMap":57},[199,174713,174714,174716,174718,174720],{"class":201,"line":202},[199,174715,26675],{"class":878},[199,174717,26678],{"class":898},[199,174719,121898],{"class":1018},[199,174721,148566],{"class":898},[14,174723,174725],{"id":174724},"_916-模块搜索路径","9.16 模块搜索路径",[31,174727,174728,174729,174732],{},"Python 导入模块时会在 ",[196,174730,174731],{},"sys.path"," 中查找。",[190,174734,174736],{"className":33221,"code":174735,"language":33223,"meta":57,"style":57},"import sys\n\nfor path in sys.path:\n    print(path)\n",[196,174737,174738,174744,174748,174760],{"__ignoreMap":57},[199,174739,174740,174742],{"class":201,"line":202},[199,174741,33235],{"class":1086},[199,174743,174454],{"class":205},[199,174745,174746],{"class":201,"line":36},[199,174747,907],{"emptyLinePlaceholder":906},[199,174749,174750,174752,174755,174757],{"class":201,"line":73},[199,174751,5929],{"class":1086},[199,174753,174754],{"class":205}," path ",[199,174756,28886],{"class":1086},[199,174758,174759],{"class":205}," sys.path:\n",[199,174761,174762,174764],{"class":201,"line":333},[199,174763,34141],{"class":1018},[199,174765,171488],{"class":205},[31,174767,174768],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[31,174770,159882],{},[190,174772,174775],{"className":174773,"code":174774,"language":8084,"meta":57},[8082],"random.py\njson.py\ntime.py\n",[196,174776,174774],{"__ignoreMap":57},[31,174778,174779],{},"这些文件名可能导致导入异常。",[14,174781,174783],{"id":174782},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[31,174785,174579],{},[190,174787,174790],{"className":174788,"code":174789,"language":8084,"meta":57},[8082],"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",[196,174791,174789],{"__ignoreMap":57},[31,174793,174794,27462],{},[196,174795,174796],{},"utils\u002Ffile_utils.py",[190,174798,174800],{"className":33221,"code":174799,"language":33223,"meta":57,"style":57},"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",[196,174801,174802,174808,174818,174822,174826,174836,174846,174854,174860,174864,174891,174901,174905,174909,174919,174945],{"__ignoreMap":57},[199,174803,174804,174806],{"class":201,"line":202},[199,174805,33235],{"class":1086},[199,174807,149350],{"class":205},[199,174809,174810,174812,174814,174816],{"class":201,"line":36},[199,174811,33579],{"class":1086},[199,174813,110570],{"class":205},[199,174815,33235],{"class":1086},[199,174817,110575],{"class":205},[199,174819,174820],{"class":201,"line":73},[199,174821,907],{"emptyLinePlaceholder":906},[199,174823,174824],{"class":201,"line":333},[199,174825,907],{"emptyLinePlaceholder":906},[199,174827,174828,174830,174833],{"class":201,"line":227},[199,174829,34789],{"class":1086},[199,174831,174832],{"class":878}," read_json",[199,174834,174835],{"class":205},"(path):\n",[199,174837,174838,174841,174843],{"class":201,"line":238},[199,174839,174840],{"class":205},"    path ",[199,174842,895],{"class":1086},[199,174844,174845],{"class":205}," Path(path)\n",[199,174847,174848,174850,174852],{"class":201,"line":252},[199,174849,6005],{"class":1086},[199,174851,41771],{"class":1086},[199,174853,171569],{"class":205},[199,174855,174856,174858],{"class":201,"line":388},[199,174857,17612],{"class":1086},[199,174859,1475],{"class":205},[199,174861,174862],{"class":201,"line":415},[199,174863,907],{"emptyLinePlaceholder":906},[199,174865,174866,174868,174870,174873,174875,174877,174879,174881,174883,174885,174887,174889],{"class":201,"line":426},[199,174867,37019],{"class":1086},[199,174869,149050],{"class":1018},[199,174871,174872],{"class":205},"(path, ",[199,174874,149060],{"class":898},[199,174876,1912],{"class":205},[199,174878,149065],{"class":8113},[199,174880,895],{"class":1086},[199,174882,149070],{"class":898},[199,174884,16575],{"class":205},[199,174886,34225],{"class":1086},[199,174888,150412],{"class":8113},[199,174890,6640],{"class":205},[199,174892,174893,174895,174897,174899],{"class":201,"line":1015},[199,174894,17612],{"class":1086},[199,174896,150423],{"class":205},[199,174898,48195],{"class":8113},[199,174900,1594],{"class":205},[199,174902,174903],{"class":201,"line":1031},[199,174904,907],{"emptyLinePlaceholder":906},[199,174906,174907],{"class":201,"line":1043},[199,174908,907],{"emptyLinePlaceholder":906},[199,174910,174911,174913,174916],{"class":201,"line":1049},[199,174912,34789],{"class":1086},[199,174914,174915],{"class":878}," write_json",[199,174917,174918],{"class":205},"(path, data):\n",[199,174920,174921,174923,174925,174927,174929,174931,174933,174935,174937,174939,174941,174943],{"class":201,"line":1054},[199,174922,37019],{"class":1086},[199,174924,149050],{"class":1018},[199,174926,174872],{"class":205},[199,174928,154235],{"class":898},[199,174930,1912],{"class":205},[199,174932,149065],{"class":8113},[199,174934,895],{"class":1086},[199,174936,149070],{"class":898},[199,174938,16575],{"class":205},[199,174940,34225],{"class":1086},[199,174942,150412],{"class":8113},[199,174944,6640],{"class":205},[199,174946,174947,174950,174952,174954,174956,174958,174960,174962,174964,174966,174968],{"class":201,"line":1062},[199,174948,174949],{"class":205},"        json.dump(data, ",[199,174951,48195],{"class":8113},[199,174953,1912],{"class":205},[199,174955,149396],{"class":8113},[199,174957,895],{"class":1086},[199,174959,36828],{"class":1018},[199,174961,1912],{"class":205},[199,174963,154271],{"class":8113},[199,174965,895],{"class":1086},[199,174967,1925],{"class":1018},[199,174969,1594],{"class":205},[31,174971,174972,27462],{},[196,174973,156866],{},[190,174975,174977],{"className":33221,"code":174976,"language":33223,"meta":57,"style":57},"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",[196,174978,174979,174990,174994,175007,175027],{"__ignoreMap":57},[199,174980,174981,174983,174985,174987],{"class":201,"line":202},[199,174982,33579],{"class":1086},[199,174984,174600],{"class":205},[199,174986,33235],{"class":1086},[199,174988,174989],{"class":205}," read_json, write_json\n",[199,174991,174992],{"class":201,"line":36},[199,174993,907],{"emptyLinePlaceholder":906},[199,174995,174996,174998,175000,175003,175005],{"class":201,"line":73},[199,174997,161975],{"class":205},[199,174999,895],{"class":1086},[199,175001,175002],{"class":205}," read_json(",[199,175004,154090],{"class":898},[199,175006,1594],{"class":205},[199,175008,175009,175011,175013,175015,175017,175019,175021,175023,175025],{"class":201,"line":333},[199,175010,172793],{"class":205},[199,175012,64938],{"class":898},[199,175014,1022],{"class":205},[199,175016,152147],{"class":898},[199,175018,1912],{"class":205},[199,175020,153731],{"class":898},[199,175022,1022],{"class":205},[199,175024,4063],{"class":1018},[199,175026,167411],{"class":205},[199,175028,175029,175032,175034],{"class":201,"line":227},[199,175030,175031],{"class":205},"write_json(",[199,175033,154090],{"class":898},[199,175035,175036],{"class":205},", students)\n",[14,175038,175040],{"id":175039},"_918-易错点","9.18 易错点",[24,175042,175043,175046,175051,175056,175059,175062],{},[27,175044,175045],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[27,175047,175048,175049,31228],{},"能指定异常类型就不要裸写 ",[196,175050,173153],{},[27,175052,175053,175055],{},[196,175054,173528],{}," 无论是否出错都会执行。",[27,175057,175058],{},"模块文件名不要和标准库重名。",[27,175060,175061],{},"导入自己写的模块时，要注意运行目录。",[27,175063,175064],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,175066,175068],{"id":175067},"_919-本章练习","9.19 本章练习",[24,175070,175071,175074,175077,175083,175090],{},[27,175072,175073],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[27,175075,175076],{},"写函数读取文件，如果文件不存在则返回空字符串。",[27,175078,174491,175079,175082],{},[196,175080,175081],{},"math_utils.py","，实现加减乘除函数并导入使用。",[27,175084,175085,175086,175089],{},"创建一个 ",[196,175087,175088],{},"utils"," 包，把 JSON 读写函数放进去。",[27,175091,175092],{},"写一个程序，捕获除零异常和输入格式异常。",[1002,175094,175095],{},"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":57,"searchDepth":36,"depth":36,"links":175097},[175098,175099,175100,175101,175102,175103,175104,175105,175106,175107,175108,175114,175121,175123,175124,175125,175126,175127,175128],{"id":172950,"depth":36,"text":172951},{"id":173078,"depth":36,"text":173079},{"id":173127,"depth":36,"text":173128},{"id":173276,"depth":36,"text":173277},{"id":173448,"depth":36,"text":173449},{"id":173517,"depth":36,"text":173518},{"id":173628,"depth":36,"text":173629},{"id":173754,"depth":36,"text":173755},{"id":173879,"depth":36,"text":173880},{"id":173934,"depth":36,"text":173935},{"id":174033,"depth":36,"text":174034,"children":175109},[175110,175111,175112,175113],{"id":174037,"depth":73,"text":174038},{"id":174071,"depth":73,"text":174072},{"id":174110,"depth":73,"text":174111},{"id":174189,"depth":73,"text":174190},{"id":174212,"depth":36,"text":174213,"children":175115},[175116,175117,175118,175119,175120],{"id":174216,"depth":73,"text":174217},{"id":174299,"depth":73,"text":174300},{"id":174344,"depth":73,"text":174345},{"id":174403,"depth":73,"text":174404},{"id":174441,"depth":73,"text":174442},{"id":174475,"depth":36,"text":175122},"9.13 if name == \"main\"",{"id":174568,"depth":36,"text":174569},{"id":174613,"depth":36,"text":174614},{"id":174724,"depth":36,"text":174725},{"id":174782,"depth":36,"text":174783},{"id":175039,"depth":36,"text":175040},{"id":175067,"depth":36,"text":175068},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172942,"description":3023},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":175135,"title":175136,"body":175137,"description":175300,"extension":3024,"meta":175301,"navigation":906,"path":175302,"seo":175303,"stem":175304,"__hash__":175305},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":175138,"toc":175295},[175139,175142,175145,175148,175159,175161,175235,175238,175241,175244,175247,175250,175253,175256,175259,175262,175265],[10,175140,175136],{"id":175141},"python教程",[31,175143,175144],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[31,175146,175147],{},"建议学习环境：",[24,175149,175150,175153,175156],{},[27,175151,175152],{},"Python 版本：Python 3.10 及以上。",[27,175154,175155],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[27,175157,175158],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,175160,119337],{"id":119337},[24,175162,175163,175169,175175,175181,175187,175193,175199,175205,175211,175217,175223,175229],{},[27,175164,175165],{},[2867,175166,175168],{"href":175167},".\u002Fch1-Python","Python环境与第一个程序",[27,175170,175171],{},[2867,175172,175174],{"href":175173},".\u002Fch2","基础语法、变量与字符串",[27,175176,175177],{},[2867,175178,175180],{"href":175179},".\u002Fch3","判断语句",[27,175182,175183],{},[2867,175184,175186],{"href":175185},".\u002Fch4","循环语句",[27,175188,175189],{},[2867,175190,175192],{"href":175191},".\u002Fch5","函数基础",[27,175194,175195],{},[2867,175196,175198],{"href":175197},".\u002Fch6","数据容器",[27,175200,175201],{},[2867,175202,175204],{"href":175203},".\u002Fch7","函数进阶",[27,175206,175207],{},[2867,175208,175210],{"href":175209},".\u002Fch8","文件操作",[27,175212,175213],{},[2867,175214,175216],{"href":175215},".\u002Fch9","异常、模块与包",[27,175218,175219],{},[2867,175220,175222],{"href":175221},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[27,175224,175225],{},[2867,175226,175228],{"href":175227},".\u002Fch11","面向对象基础",[27,175230,175231],{},[2867,175232,175234],{"href":175233},".\u002Fch12","综合案例与复习路线",[14,175236,175237],{"id":175237},"学习路线",[31,175239,175240],{},"第一阶段：能运行程序。",[31,175242,175243],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[31,175245,175246],{},"第二阶段：能组织数据。",[31,175248,175249],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[31,175251,175252],{},"第三阶段：能封装逻辑。",[31,175254,175255],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[31,175257,175258],{},"第四阶段：能做小项目。",[31,175260,175261],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,175263,175264],{"id":175264},"参考资料",[24,175266,175267,175274,175281,175288],{},[27,175268,175269,175270],{},"黑马程序员 Python 入门教程推荐：",[2867,175271,175272],{"href":175272,"rel":175273},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[2871],[27,175275,175276,175277],{},"Python 官方中文教程：",[2867,175278,175279],{"href":175279,"rel":175280},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[2871],[27,175282,175283,175284],{},"Python 标准库文档：",[2867,175285,175286],{"href":175286,"rel":175287},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[2871],[27,175289,175290,175291],{},"pyecharts 文档：",[2867,175292,175293],{"href":175293,"rel":175294},"https:\u002F\u002Fpyecharts.org\u002F",[2871],{"title":57,"searchDepth":36,"depth":36,"links":175296},[175297,175298,175299],{"id":119337,"depth":36,"text":119337},{"id":175237,"depth":36,"text":175237},{"id":175264,"depth":36,"text":175264},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":26222},"\u002Fwiki\u002F2024-10-10-python",{"title":175136,"description":175300},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331396496]