[{"data":1,"prerenderedAt":194347},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-09-02-js-xue-xi\u002Fch3-web-apis":3,"wiki-doc-nav":23816},{"id":4,"title":5,"body":6,"description":23809,"extension":23810,"meta":23811,"navigation":589,"path":23812,"seo":23813,"stem":23814,"__hash__":23815},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":8,"toc":23749},"minimark",[9,13,17,20,27,30,33,36,41,46,53,58,67,74,77,81,86,91,96,99,102,115,118,122,125,128,133,139,144,147,150,269,272,277,280,285,288,291,296,299,304,308,311,325,330,335,338,341,345,350,353,357,361,366,370,375,378,381,384,387,390,393,398,403,431,434,437,440,445,448,451,454,457,461,490,494,499,504,507,510,513,518,644,649,654,820,825,828,832,837,842,845,848,851,854,857,860,863,866,869,872,875,878,881,884,887,890,893,896,901,905,1357,1360,1366,1370,1375,2765,2770,2773,2776,2779,2784,3989,3993,3999,4004,4007,4012,4017,4021,4025,4030,4033,4038,4041,4044,4048,4971,4974,4978,5202,5205,5208,5211,5437,5440,5664,5667,5671,5676,5679,5682,5912,5915,5948,5951,5955,5960,5964,5967,5970,5973,5976,5979,5982,5985,5990,7363,7367,7370,8479,8483,8486,8489,8492,8495,8499,8502,8505,8508,8516,10009,10013,10016,10019,10022,10232,10235,10239,10243,10248,10253,10256,10259,10264,10268,10273,10276,10385,10389,10394,10399,10402,10405,10409,10414,10419,10424,10427,10430,10441,10444,10449,10454,10457,10460,10533,10537,10542,10545,10548,10559,10563,10568,11905,11908,11911,11914,11916,11919,11922,11925,11928,11931,11934,11937,11940,11943,11946,11949,11952,11954,11957,11960,11964,13064,13067,13070,13088,13102,13105,13110,13116,13121,13125,13129,13134,13138,13143,13588,13593,13596,13600,13605,13608,13611,13615,13620,13624,13629,13634,13638,13643,13648,13651,13656,13661,13665,13670,13675,13779,13782,13786,13791,14158,14161,14164,14167,14170,14173,14176,14179,14182,15479,15483,15488,15493,15496,15499,15502,15505,15507,15512,15517,15520,15524,15529,15534,15539,15542,15545,15548,15551,15554,15559,15562,15566,15571,15576,15580,15585,15588,15593,15596,15599,15602,15605,15608,15613,15616,15619,15622,15625,15629,15634,15637,15641,15646,15649,15652,15656,15686,15689,15693,15697,15702,15706,15711,15714,15717,15720,15723,15726,15729,15732,15735,15738,15741,15744,15747,15750,15753,15757,15762,15767,15770,15774,15778,15783,15786,15790,15793,15796,15801,15806,15811,15816,15821,15824,15827,15832,15837,15841,15846,15849,15854,15857,15860,15863,15866,15871,15874,15883,15887,15892,15895,15898,15902,15905,15910,15914,15917,15924,15930,15934,15960,15963,17537,17540,18037,18040,18045,18050,18055,18059,18064,18069,18074,18078,18083,18086,18089,18092,18095,18099,18102,18107,18110,18115,18119,18124,18127,18132,18137,18142,18145,18148,18153,18158,18161,18164,18168,18171,18176,18179,18184,18187,18192,18197,18202,18205,18210,18275,18278,18289,18293,18298,18477,18481,18486,18489,18492,18495,18499,18510,18514,18517,18522,18527,18530,18533,18536,18539,18542,18544,18547,18550,18553,18558,18561,18566,18569,18573,18576,18579,18593,18597,18600,18655,18660,18663,18666,18671,18674,18678,18683,18815,18819,18824,18829,18910,18915,18919,18922,18927,18932,18938,18941,18944,18947,18951,18956,18959,18970,18974,18991,22076,22080,22083,22086,22089,22110,22114,22117,22125,22128,22133,22136,22139,22144,22149,22153,22174,22178,22183,22186,22189,22192,22195,22199,22204,22207,22211,22216,22219,22224,22227,22232,22235,22240,23445,23449,23454,23457,23462,23746],[10,11,5],"h1",{"id":12},"_3web-apis",[14,15,16],"p",{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,18,19],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,21,22],{},[23,24],"img",{"alt":25,"src":26},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,28,29],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,31,32],{},"建议数组和对象使用 const 来声明",[14,34,35],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[37,38,40],"h2",{"id":39},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[42,43,45],"h3",{"id":44},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,47,48,52],{},[49,50,51],"code",{},"document"," = HTML 文件解析后的对象化表示；",[14,54,55,57],{},[49,56,51],{}," ≠ HTML 文件本身",[14,59,60,66],{},[61,62,63],"strong",{},[49,64,65],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,68,69,73],{},[61,70,71],{},[49,72,51],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,75,76],{},"document实际上为window.document的简写",[42,78,80],{"id":79},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,82,83],{},[23,84],{"alt":25,"src":85},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,87,88],{},[23,89],{"alt":25,"src":90},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,92,93],{},[23,94],{"alt":25,"src":95},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,97,98],{},"console.dir()",[14,100,101],{},"dir用来打印对象",[103,104,105,109,112],"ul",{},[106,107,108],"li",{},"任何一个标签，都是一个对象",[106,110,111],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[106,113,114],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,116,117],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[42,119,121],{"id":120},"_312-获取dom对象","3.1.2 获取DoM对象",[14,123,124],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,126,127],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,129,130],{},[61,131,132],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[134,135,136],"ol",{},[106,137,138],{},"利用CSS选择器来获取标签元素",[14,140,141],{},[23,142],{"alt":25,"src":143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,145,146],{},"里边的选择器必须必须加引号！！！",[14,148,149],{},"只选择第一个元素",[151,152,156],"pre",{"className":153,"code":154,"language":155,"meta":25,"style":25},"language-xml shiki shiki-themes github-light github-dark","\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","xml",[49,157,158,174,201,221,231,237,243,249,259],{"__ignoreMap":25},[159,160,163,167,171],"span",{"class":161,"line":162},"line",1,[159,164,166],{"class":165},"sVt8B","\u003C",[159,168,170],{"class":169},"s9eBZ","body",[159,172,173],{"class":165},">\n",[159,175,177,180,183,187,190,194,197,199],{"class":161,"line":176},2,[159,178,179],{"class":165},"  \u003C",[159,181,182],{"class":169},"div",[159,184,186],{"class":185},"sScJk"," class",[159,188,189],{"class":165},"=",[159,191,193],{"class":192},"sZZnC","\"box\"",[159,195,196],{"class":165},">123\u003C\u002F",[159,198,182],{"class":169},[159,200,173],{"class":165},[159,202,204,206,208,210,212,214,217,219],{"class":161,"line":203},3,[159,205,179],{"class":165},[159,207,182],{"class":169},[159,209,186],{"class":185},[159,211,189],{"class":165},[159,213,193],{"class":192},[159,215,216],{"class":165},">456\u003C\u002F",[159,218,182],{"class":169},[159,220,173],{"class":165},[159,222,224,226,229],{"class":161,"line":223},4,[159,225,179],{"class":165},[159,227,228],{"class":169},"script",[159,230,173],{"class":165},[159,232,234],{"class":161,"line":233},5,[159,235,236],{"class":165},"    \u002F\u002F 1.获取匹配的第一个元素\n",[159,238,240],{"class":161,"line":239},6,[159,241,242],{"class":165},"    const box = document.querySelector('div')\n",[159,244,246],{"class":161,"line":245},7,[159,247,248],{"class":165},"    console.dir(box)\n",[159,250,252,255,257],{"class":161,"line":251},8,[159,253,254],{"class":165},"  \u003C\u002F",[159,256,228],{"class":169},[159,258,173],{"class":165},[159,260,262,265,267],{"class":161,"line":261},9,[159,263,264],{"class":165},"\u003C\u002F",[159,266,170],{"class":169},[159,268,173],{"class":165},[14,270,271],{},"只选123，不选456",[14,273,274],{},[23,275],{"alt":25,"src":276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,278,279],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,281,282],{},[23,283],{"alt":25,"src":284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,286,287],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,289,290],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[134,292,293],{"start":176},[106,294,295],{},"其他方法来获取标签元素",[14,297,298],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,300,301],{},[23,302],{"alt":25,"src":303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[42,305,307],{"id":306},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,309,310],{},"设置修改DOM元素内容有两种方式：",[103,312,313,316,319,322],{},[106,314,315],{},"元素.innerText=''",[106,317,318],{},"元素.innerHTML=''",[106,320,321],{},"不写字符串输出数字也是可以的",[106,323,324],{},"元素.innerHtml=1",[326,327,329],"h4",{"id":328},"_3131-innertext","3.1.3.1 innerText",[14,331,332],{},[23,333],{"alt":25,"src":334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,336,337],{},"思路：实现了修改盒子中的内容！",[14,339,340],{},"它只显示纯文本，不解析标签",[326,342,344],{"id":343},"_3132-innerhtml","3.1.3.2 innerHTML",[14,346,347],{},[23,348],{"alt":25,"src":349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,351,352],{},"相比于innerText，他的强大之处在于可以解析标签",[42,354,356],{"id":355},"_314-操作元素属性","3.1.4 操作元素属性",[326,358,360],{"id":359},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,362,363],{},[23,364],{"alt":25,"src":365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[326,367,369],{"id":368},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,371,372],{},[23,373],{"alt":25,"src":374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,376,377],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,379,380],{},"div.style.backgroundColor = 'hotpink'",[14,382,383],{},"如果按照css的写法，-表示减，就会出错",[14,385,386],{},"body元素不需要再获取，直接用就行！！！！！！",[14,388,389],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,391,392],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,394,395],{},[23,396],{"alt":25,"src":397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,399,400],{},[23,401],{"alt":25,"src":402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[134,404,405,408,411,414,417,420],{},[106,406,407],{},"className这个方式就是修改很多样式的时候来使用的！",[106,409,410],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[106,412,413],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[106,415,416],{},"className为属性名，如果还用class的话就导致与关键字冲突",[106,418,419],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[106,421,422,423,428],{},"解析标签的时候就变为了",[182,424],{"className":425},[426,427],"nav","box",[429,430],"br",{},[14,432,433],{},"例子：",[182,435],{"className":436},[426],[228,438,439],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,441,442],{},[23,443],{"alt":25,"src":444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,446,447],{},"追加和删除类名用classList",[14,449,450],{},"常用于类似于开关的操作",[14,452,453],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,455,456],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[326,458,460],{"id":459},"_3143-牢记点","3.1.4.3 牢记点",[134,462,463,466,469,472,475,478,481,484,487],{},[106,464,465],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[106,467,468],{},"使用style属性操作css时不要忘记引号",[106,470,471],{},"使用className或者classList时也不要忘记引号",[106,473,474],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[106,476,477],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[106,479,480],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[106,482,483],{},"若： let arr=['1','2',3] arr[0]=1",[106,485,486],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[106,488,489],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[42,491,493],{"id":492},"_315-操作表单元素","3.1.5 操作表单元素",[134,495,496],{},[106,497,498],{},"天生的属性",[14,500,501],{},[23,502],{"alt":25,"src":503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,505,506],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,508,509],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,511,512],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,514,515],{},[23,516],{"alt":25,"src":517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[151,519,523],{"className":520,"code":521,"language":522,"meta":25,"style":25},"language-html shiki shiki-themes github-light github-dark","在复选框中如果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","html",[49,524,525,530,565,570,575,580,585,591,596,601,619,632,638],{"__ignoreMap":25},[159,526,527],{"class":161,"line":162},[159,528,529],{"class":165},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[159,531,532,534,537,540,542,545,548,550,553,556,558,560,563],{"class":161,"line":176},[159,533,166],{"class":165},[159,535,536],{"class":169},"input",[159,538,539],{"class":185}," type",[159,541,189],{"class":165},[159,543,544],{"class":192},"\"checkbox\"",[159,546,547],{"class":185}," name",[159,549,189],{"class":165},[159,551,552],{"class":192},"\"\"",[159,554,555],{"class":185}," id",[159,557,189],{"class":165},[159,559,552],{"class":192},[159,561,562],{"class":185}," checked",[159,564,173],{"class":165},[159,566,567],{"class":161,"line":203},[159,568,569],{"class":165},"不选的话：\n",[159,571,572],{"class":161,"line":223},[159,573,574],{"class":165},"const input = document.querySelector('input')\n",[159,576,577],{"class":161,"line":233},[159,578,579],{"class":165},"input.checked=false\n",[159,581,582],{"class":161,"line":239},[159,583,584],{"class":165},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[159,586,587],{"class":161,"line":245},[159,588,590],{"emptyLinePlaceholder":589},true,"\n",[159,592,593],{"class":161,"line":251},[159,594,595],{"class":165},"禁用按钮：\n",[159,597,598],{"class":161,"line":261},[159,599,600],{"class":165},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[159,602,604,606,609,612,615,617],{"class":161,"line":603},10,[159,605,166],{"class":165},[159,607,608],{"class":169},"button",[159,610,611],{"class":185}," disabled",[159,613,614],{"class":165},">点击\u003C\u002F",[159,616,608],{"class":169},[159,618,173],{"class":165},[159,620,622,624,626,628,630],{"class":161,"line":621},11,[159,623,166],{"class":165},[159,625,608],{"class":169},[159,627,614],{"class":165},[159,629,608],{"class":169},[159,631,173],{"class":165},[159,633,635],{"class":161,"line":634},12,[159,636,637],{"class":165},"const bt = document.querySelector('button')\n",[159,639,641],{"class":161,"line":640},13,[159,642,643],{"class":165},"bt.disabled = false\n",[134,645,646],{"start":176},[106,647,648],{},"自定义属性",[14,650,651],{},[23,652],{"alt":25,"src":653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[151,655,657],{"className":153,"code":656,"language":155,"meta":25,"style":25},"\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",[49,658,659,667,696,716,736,756,776,784,789,794,799,804,812],{"__ignoreMap":25},[159,660,661,663,665],{"class":161,"line":162},[159,662,166],{"class":165},[159,664,170],{"class":169},[159,666,173],{"class":165},[159,668,669,671,673,676,678,681,684,686,689,692,694],{"class":161,"line":176},[159,670,179],{"class":165},[159,672,182],{"class":169},[159,674,675],{"class":185}," data-id",[159,677,189],{"class":165},[159,679,680],{"class":192},"\"1\"",[159,682,683],{"class":185}," data-spm",[159,685,189],{"class":165},[159,687,688],{"class":192},"\"我不知道\"",[159,690,691],{"class":165},">1\u003C\u002F",[159,693,182],{"class":169},[159,695,173],{"class":165},[159,697,698,700,702,704,706,709,712,714],{"class":161,"line":203},[159,699,179],{"class":165},[159,701,182],{"class":169},[159,703,675],{"class":185},[159,705,189],{"class":165},[159,707,708],{"class":192},"\"2\"",[159,710,711],{"class":165},">2\u003C\u002F",[159,713,182],{"class":169},[159,715,173],{"class":165},[159,717,718,720,722,724,726,729,732,734],{"class":161,"line":223},[159,719,179],{"class":165},[159,721,182],{"class":169},[159,723,675],{"class":185},[159,725,189],{"class":165},[159,727,728],{"class":192},"\"3\"",[159,730,731],{"class":165},">3\u003C\u002F",[159,733,182],{"class":169},[159,735,173],{"class":165},[159,737,738,740,742,744,746,749,752,754],{"class":161,"line":233},[159,739,179],{"class":165},[159,741,182],{"class":169},[159,743,675],{"class":185},[159,745,189],{"class":165},[159,747,748],{"class":192},"\"4\"",[159,750,751],{"class":165},">4\u003C\u002F",[159,753,182],{"class":169},[159,755,173],{"class":165},[159,757,758,760,762,764,766,769,772,774],{"class":161,"line":239},[159,759,179],{"class":165},[159,761,182],{"class":169},[159,763,675],{"class":185},[159,765,189],{"class":165},[159,767,768],{"class":192},"\"5\"",[159,770,771],{"class":165},">5\u003C\u002F",[159,773,182],{"class":169},[159,775,173],{"class":165},[159,777,778,780,782],{"class":161,"line":245},[159,779,179],{"class":165},[159,781,228],{"class":169},[159,783,173],{"class":165},[159,785,786],{"class":161,"line":251},[159,787,788],{"class":165},"    const one = document.querySelector('div')\n",[159,790,791],{"class":161,"line":261},[159,792,793],{"class":165},"    console.log(one.dataset)\n",[159,795,796],{"class":161,"line":603},[159,797,798],{"class":165},"    console.log(one.dataset.id)\n",[159,800,801],{"class":161,"line":621},[159,802,803],{"class":165},"    console.log(one.dataset.spm)\n",[159,805,806,808,810],{"class":161,"line":634},[159,807,254],{"class":165},[159,809,228],{"class":169},[159,811,173],{"class":165},[159,813,814,816,818],{"class":161,"line":640},[159,815,264],{"class":165},[159,817,170],{"class":169},[159,819,173],{"class":165},[14,821,822],{},[23,823],{"alt":25,"src":824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,826,827],{},"document.querySelector选择的是第一个对象（元素）",[42,829,831],{"id":830},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,833,834],{},[23,835],{"alt":25,"src":836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,838,839],{},[23,840],{"alt":25,"src":841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,843,844],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[228,846,847],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,849,850],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[228,852,853],{},"\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",[14,855,856],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,858,859],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,861,862],{},"单位为毫秒！！！",[14,864,865],{},"可以搭配匿名函数来用！！！",[14,867,868],{},"setInterval(function () {",[14,870,871],{},"alert('两秒执行一次')",[14,873,874],{},"}, 2000)",[14,876,877],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,879,880],{},"function fn() {",[14,882,883],{},"document.write(1)",[14,885,886],{},"}",[14,888,889],{},"setInterval(fn, 1000)",[14,891,892],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,894,895],{},"setInterval('fn()', 1000)",[14,897,898],{},[23,899],{"alt":25,"src":900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[326,902,904],{"id":903},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[151,906,908],{"className":520,"code":907,"language":522,"meta":25,"style":25},"\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",[49,909,910,923,939,943,952,969,992,1006,1014,1018,1026,1063,1068,1073,1079,1089,1098,1121,1130,1137,1166,1172,1178,1192,1198,1219,1228,1245,1263,1275,1281,1292,1303,1309,1320,1325,1334,1343,1348],{"__ignoreMap":25},[159,911,912,915,918,921],{"class":161,"line":162},[159,913,914],{"class":165},"\u003C!",[159,916,917],{"class":169},"DOCTYPE",[159,919,920],{"class":185}," html",[159,922,173],{"class":165},[159,924,925,927,929,932,934,937],{"class":161,"line":176},[159,926,166],{"class":165},[159,928,522],{"class":169},[159,930,931],{"class":185}," lang",[159,933,189],{"class":165},[159,935,936],{"class":192},"\"en\"",[159,938,173],{"class":165},[159,940,941],{"class":161,"line":203},[159,942,590],{"emptyLinePlaceholder":589},[159,944,945,947,950],{"class":161,"line":223},[159,946,166],{"class":165},[159,948,949],{"class":169},"head",[159,951,173],{"class":165},[159,953,954,956,959,962,964,967],{"class":161,"line":233},[159,955,179],{"class":165},[159,957,958],{"class":169},"meta",[159,960,961],{"class":185}," charset",[159,963,189],{"class":165},[159,965,966],{"class":192},"\"UTF-8\"",[159,968,173],{"class":165},[159,970,971,973,975,977,979,982,985,987,990],{"class":161,"line":239},[159,972,179],{"class":165},[159,974,958],{"class":169},[159,976,547],{"class":185},[159,978,189],{"class":165},[159,980,981],{"class":192},"\"viewport\"",[159,983,984],{"class":185}," content",[159,986,189],{"class":165},[159,988,989],{"class":192},"\"width=device-width, initial-scale=1.0\"",[159,991,173],{"class":165},[159,993,994,996,999,1002,1004],{"class":161,"line":245},[159,995,179],{"class":165},[159,997,998],{"class":169},"title",[159,1000,1001],{"class":165},">Document\u003C\u002F",[159,1003,998],{"class":169},[159,1005,173],{"class":165},[159,1007,1008,1010,1012],{"class":161,"line":251},[159,1009,264],{"class":165},[159,1011,949],{"class":169},[159,1013,173],{"class":165},[159,1015,1016],{"class":161,"line":261},[159,1017,590],{"emptyLinePlaceholder":589},[159,1019,1020,1022,1024],{"class":161,"line":603},[159,1021,166],{"class":165},[159,1023,170],{"class":169},[159,1025,173],{"class":165},[159,1027,1028,1030,1033,1035,1037,1039,1041,1043,1045,1048,1050,1053,1056,1058,1061],{"class":161,"line":621},[159,1029,179],{"class":165},[159,1031,1032],{"class":169},"textarea",[159,1034,547],{"class":185},[159,1036,189],{"class":165},[159,1038,552],{"class":192},[159,1040,555],{"class":185},[159,1042,189],{"class":165},[159,1044,552],{"class":192},[159,1046,1047],{"class":185}," cols",[159,1049,189],{"class":165},[159,1051,1052],{"class":192},"\"30\"",[159,1054,1055],{"class":185}," rows",[159,1057,189],{"class":165},[159,1059,1060],{"class":192},"\"10\"",[159,1062,173],{"class":165},[159,1064,1065],{"class":161,"line":634},[159,1066,1067],{"class":165},"        用户注册协议\n",[159,1069,1070],{"class":161,"line":640},[159,1071,1072],{"class":165},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[159,1074,1076],{"class":161,"line":1075},14,[159,1077,1078],{"class":165},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[159,1080,1082,1085,1087],{"class":161,"line":1081},15,[159,1083,1084],{"class":165},"    \u003C\u002F",[159,1086,1032],{"class":169},[159,1088,173],{"class":165},[159,1090,1092,1094,1096],{"class":161,"line":1091},16,[159,1093,179],{"class":165},[159,1095,429],{"class":169},[159,1097,173],{"class":165},[159,1099,1101,1103,1105,1107,1109,1112,1114,1117,1119],{"class":161,"line":1100},17,[159,1102,179],{"class":165},[159,1104,608],{"class":169},[159,1106,186],{"class":185},[159,1108,189],{"class":165},[159,1110,1111],{"class":192},"\"btn\"",[159,1113,611],{"class":185},[159,1115,1116],{"class":165},">我已经阅读用户协议(5)\u003C\u002F",[159,1118,608],{"class":169},[159,1120,173],{"class":165},[159,1122,1124,1126,1128],{"class":161,"line":1123},18,[159,1125,179],{"class":165},[159,1127,228],{"class":169},[159,1129,173],{"class":165},[159,1131,1133],{"class":161,"line":1132},19,[159,1134,1136],{"class":1135},"sJ8bj","    \u002F\u002F 1. 获取元素\n",[159,1138,1140,1144,1148,1151,1154,1157,1160,1163],{"class":161,"line":1139},20,[159,1141,1143],{"class":1142},"szBVR","    const",[159,1145,1147],{"class":1146},"sj4cs"," btn",[159,1149,1150],{"class":1142}," =",[159,1152,1153],{"class":165}," document.",[159,1155,1156],{"class":185},"querySelector",[159,1158,1159],{"class":165},"(",[159,1161,1162],{"class":192},"'.btn'",[159,1164,1165],{"class":165},")\n",[159,1167,1169],{"class":161,"line":1168},21,[159,1170,1171],{"class":1135},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[159,1173,1175],{"class":161,"line":1174},22,[159,1176,1177],{"class":1135},"    \u002F\u002F 2. 倒计时\n",[159,1179,1181,1184,1187,1189],{"class":161,"line":1180},23,[159,1182,1183],{"class":1142},"    let",[159,1185,1186],{"class":165}," i ",[159,1188,189],{"class":1142},[159,1190,1191],{"class":1146}," 5\n",[159,1193,1195],{"class":161,"line":1194},24,[159,1196,1197],{"class":1135},"    \u002F\u002F 2.1 开启定时器\n",[159,1199,1201,1203,1206,1208,1211,1213,1216],{"class":161,"line":1200},25,[159,1202,1183],{"class":1142},[159,1204,1205],{"class":165}," n ",[159,1207,189],{"class":1142},[159,1209,1210],{"class":185}," setInterval",[159,1212,1159],{"class":165},[159,1214,1215],{"class":1142},"function",[159,1217,1218],{"class":165}," () {\n",[159,1220,1222,1225],{"class":161,"line":1221},26,[159,1223,1224],{"class":165},"      i",[159,1226,1227],{"class":1142},"--\n",[159,1229,1231,1234,1236,1239,1242],{"class":161,"line":1230},27,[159,1232,1233],{"class":165},"      btn.innerHTML ",[159,1235,189],{"class":1142},[159,1237,1238],{"class":192}," `我已经阅读用户协议(${",[159,1240,1241],{"class":165},"i",[159,1243,1244],{"class":192},"})`\n",[159,1246,1248,1251,1254,1257,1260],{"class":161,"line":1247},28,[159,1249,1250],{"class":1142},"      if",[159,1252,1253],{"class":165}," (i ",[159,1255,1256],{"class":1142},"===",[159,1258,1259],{"class":1146}," 0",[159,1261,1262],{"class":165},") {\n",[159,1264,1266,1269,1272],{"class":161,"line":1265},29,[159,1267,1268],{"class":185},"        clearInterval",[159,1270,1271],{"class":165},"(n)  ",[159,1273,1274],{"class":1135},"\u002F\u002F 关闭定时器\n",[159,1276,1278],{"class":161,"line":1277},30,[159,1279,1280],{"class":1135},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[159,1282,1284,1287,1289],{"class":161,"line":1283},31,[159,1285,1286],{"class":165},"        btn.disabled ",[159,1288,189],{"class":1142},[159,1290,1291],{"class":1146}," false\n",[159,1293,1295,1298,1300],{"class":161,"line":1294},32,[159,1296,1297],{"class":165},"        btn.innerHTML ",[159,1299,189],{"class":1142},[159,1301,1302],{"class":192}," '同意'\n",[159,1304,1306],{"class":161,"line":1305},33,[159,1307,1308],{"class":165},"      }\n",[159,1310,1312,1315,1318],{"class":161,"line":1311},34,[159,1313,1314],{"class":165},"    }, ",[159,1316,1317],{"class":1146},"1000",[159,1319,1165],{"class":165},[159,1321,1323],{"class":161,"line":1322},35,[159,1324,590],{"emptyLinePlaceholder":589},[159,1326,1328,1330,1332],{"class":161,"line":1327},36,[159,1329,254],{"class":165},[159,1331,228],{"class":169},[159,1333,173],{"class":165},[159,1335,1337,1339,1341],{"class":161,"line":1336},37,[159,1338,264],{"class":165},[159,1340,170],{"class":169},[159,1342,173],{"class":165},[159,1344,1346],{"class":161,"line":1345},38,[159,1347,590],{"emptyLinePlaceholder":589},[159,1349,1351,1353,1355],{"class":161,"line":1350},39,[159,1352,264],{"class":165},[159,1354,522],{"class":169},[159,1356,173],{"class":165},[14,1358,1359],{},"不要一直想着用死循环,避免死循环",[14,1361,1362,1365],{},[49,1363,1364],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[326,1367,1369],{"id":1368},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[134,1371,1372],{},[106,1373,1374],{},"法1",[151,1376,1378],{"className":520,"code":1377,"language":522,"meta":25,"style":25},"\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",[49,1379,1380,1390,1404,1408,1416,1430,1450,1462,1471,1479,1493,1504,1509,1513,1520,1532,1536,1540,1547,1559,1574,1588,1604,1608,1612,1619,1630,1641,1652,1665,1678,1690,1694,1698,1707,1717,1731,1744,1758,1762,1767,1775,1786,1800,1813,1826,1839,1850,1864,1877,1882,1887,1897,1910,1923,1954,1969,1974,1979,1987,1999,2004,2013,2022,2027,2036,2051,2068,2093,2102,2118,2132,2141,2163,2176,2189,2202,2215,2228,2241,2254,2264,2273,2282,2291,2304,2328,2348,2368,2388,2408,2428,2448,2469,2475,2496,2516,2537,2559,2571,2589,2600,2611,2622,2628,2634,2640,2646,2672,2687,2692,2719,2724,2733,2742,2751,2756],{"__ignoreMap":25},[159,1381,1382,1384,1386,1388],{"class":161,"line":162},[159,1383,914],{"class":165},[159,1385,917],{"class":169},[159,1387,920],{"class":185},[159,1389,173],{"class":165},[159,1391,1392,1394,1396,1398,1400,1402],{"class":161,"line":176},[159,1393,166],{"class":165},[159,1395,522],{"class":169},[159,1397,931],{"class":185},[159,1399,189],{"class":165},[159,1401,936],{"class":192},[159,1403,173],{"class":165},[159,1405,1406],{"class":161,"line":203},[159,1407,590],{"emptyLinePlaceholder":589},[159,1409,1410,1412,1414],{"class":161,"line":223},[159,1411,166],{"class":165},[159,1413,949],{"class":169},[159,1415,173],{"class":165},[159,1417,1418,1420,1422,1424,1426,1428],{"class":161,"line":233},[159,1419,179],{"class":165},[159,1421,958],{"class":169},[159,1423,961],{"class":185},[159,1425,189],{"class":165},[159,1427,966],{"class":192},[159,1429,173],{"class":165},[159,1431,1432,1434,1436,1438,1440,1442,1444,1446,1448],{"class":161,"line":239},[159,1433,179],{"class":165},[159,1435,958],{"class":169},[159,1437,547],{"class":185},[159,1439,189],{"class":165},[159,1441,981],{"class":192},[159,1443,984],{"class":185},[159,1445,189],{"class":165},[159,1447,989],{"class":192},[159,1449,173],{"class":165},[159,1451,1452,1454,1456,1458,1460],{"class":161,"line":245},[159,1453,179],{"class":165},[159,1455,998],{"class":169},[159,1457,1001],{"class":165},[159,1459,998],{"class":169},[159,1461,173],{"class":165},[159,1463,1464,1466,1469],{"class":161,"line":251},[159,1465,179],{"class":165},[159,1467,1468],{"class":169},"style",[159,1470,173],{"class":165},[159,1472,1473,1476],{"class":161,"line":261},[159,1474,1475],{"class":169},"    *",[159,1477,1478],{"class":165}," {\n",[159,1480,1481,1484,1487,1490],{"class":161,"line":603},[159,1482,1483],{"class":1146},"      padding",[159,1485,1486],{"class":165},": ",[159,1488,1489],{"class":1146},"0",[159,1491,1492],{"class":165},";\n",[159,1494,1495,1498,1500,1502],{"class":161,"line":621},[159,1496,1497],{"class":1146},"      margin",[159,1499,1486],{"class":165},[159,1501,1489],{"class":1146},[159,1503,1492],{"class":165},[159,1505,1506],{"class":161,"line":634},[159,1507,1508],{"class":165},"    }\n",[159,1510,1511],{"class":161,"line":640},[159,1512,590],{"emptyLinePlaceholder":589},[159,1514,1515,1518],{"class":161,"line":1075},[159,1516,1517],{"class":169},"    li",[159,1519,1478],{"class":165},[159,1521,1522,1525,1527,1530],{"class":161,"line":1081},[159,1523,1524],{"class":1146},"      list-style",[159,1526,1486],{"class":165},[159,1528,1529],{"class":1146},"none",[159,1531,1492],{"class":165},[159,1533,1534],{"class":161,"line":1091},[159,1535,1508],{"class":165},[159,1537,1538],{"class":161,"line":1100},[159,1539,590],{"emptyLinePlaceholder":589},[159,1541,1542,1545],{"class":161,"line":1123},[159,1543,1544],{"class":185},"    .box",[159,1546,1478],{"class":165},[159,1548,1549,1552,1554,1557],{"class":161,"line":1132},[159,1550,1551],{"class":1146},"      position",[159,1553,1486],{"class":165},[159,1555,1556],{"class":1146},"relative",[159,1558,1492],{"class":165},[159,1560,1561,1564,1566,1569,1572],{"class":161,"line":1139},[159,1562,1563],{"class":1146},"      width",[159,1565,1486],{"class":165},[159,1567,1568],{"class":1146},"976",[159,1570,1571],{"class":1142},"px",[159,1573,1492],{"class":165},[159,1575,1576,1579,1581,1584,1586],{"class":161,"line":1168},[159,1577,1578],{"class":1146},"      height",[159,1580,1486],{"class":165},[159,1582,1583],{"class":1146},"600",[159,1585,1571],{"class":1142},[159,1587,1492],{"class":165},[159,1589,1590,1592,1594,1597,1599,1602],{"class":161,"line":1174},[159,1591,1497],{"class":1146},[159,1593,1486],{"class":165},[159,1595,1596],{"class":1146},"100",[159,1598,1571],{"class":1142},[159,1600,1601],{"class":1146}," auto",[159,1603,1492],{"class":165},[159,1605,1606],{"class":161,"line":1180},[159,1607,1508],{"class":165},[159,1609,1610],{"class":161,"line":1194},[159,1611,590],{"emptyLinePlaceholder":589},[159,1613,1614,1617],{"class":161,"line":1200},[159,1615,1616],{"class":185},"    .slider-footer",[159,1618,1478],{"class":165},[159,1620,1621,1623,1625,1628],{"class":161,"line":1221},[159,1622,1551],{"class":1146},[159,1624,1486],{"class":165},[159,1626,1627],{"class":1146},"absolute",[159,1629,1492],{"class":165},[159,1631,1632,1635,1637,1639],{"class":161,"line":1230},[159,1633,1634],{"class":1146},"      left",[159,1636,1486],{"class":165},[159,1638,1489],{"class":1146},[159,1640,1492],{"class":165},[159,1642,1643,1646,1648,1650],{"class":161,"line":1247},[159,1644,1645],{"class":1146},"      bottom",[159,1647,1486],{"class":165},[159,1649,1489],{"class":1146},[159,1651,1492],{"class":165},[159,1653,1654,1656,1658,1660,1663],{"class":161,"line":1265},[159,1655,1563],{"class":1146},[159,1657,1486],{"class":165},[159,1659,1596],{"class":1146},[159,1661,1662],{"class":1142},"%",[159,1664,1492],{"class":165},[159,1666,1667,1669,1671,1674,1676],{"class":161,"line":1277},[159,1668,1578],{"class":1146},[159,1670,1486],{"class":165},[159,1672,1673],{"class":1146},"15",[159,1675,1662],{"class":1142},[159,1677,1492],{"class":165},[159,1679,1680,1683,1685,1688],{"class":161,"line":1283},[159,1681,1682],{"class":1146},"      background-color",[159,1684,1486],{"class":165},[159,1686,1687],{"class":1146},"skyblue",[159,1689,1492],{"class":165},[159,1691,1692],{"class":161,"line":1294},[159,1693,1508],{"class":165},[159,1695,1696],{"class":161,"line":1305},[159,1697,590],{"emptyLinePlaceholder":589},[159,1699,1700,1702,1705],{"class":161,"line":1311},[159,1701,1616],{"class":185},[159,1703,1704],{"class":169}," p",[159,1706,1478],{"class":165},[159,1708,1709,1711,1713,1715],{"class":161,"line":1322},[159,1710,1551],{"class":1146},[159,1712,1486],{"class":165},[159,1714,1627],{"class":1146},[159,1716,1492],{"class":165},[159,1718,1719,1722,1724,1727,1729],{"class":161,"line":1327},[159,1720,1721],{"class":1146},"      font-size",[159,1723,1486],{"class":165},[159,1725,1726],{"class":1146},"28",[159,1728,1571],{"class":1142},[159,1730,1492],{"class":165},[159,1732,1733,1735,1737,1740,1742],{"class":161,"line":1336},[159,1734,1634],{"class":1146},[159,1736,1486],{"class":165},[159,1738,1739],{"class":1146},"20",[159,1741,1571],{"class":1142},[159,1743,1492],{"class":165},[159,1745,1746,1749,1751,1754,1756],{"class":161,"line":1345},[159,1747,1748],{"class":1146},"      top",[159,1750,1486],{"class":165},[159,1752,1753],{"class":1146},"5",[159,1755,1571],{"class":1142},[159,1757,1492],{"class":165},[159,1759,1760],{"class":161,"line":1350},[159,1761,1508],{"class":165},[159,1763,1765],{"class":161,"line":1764},40,[159,1766,590],{"emptyLinePlaceholder":589},[159,1768,1770,1773],{"class":161,"line":1769},41,[159,1771,1772],{"class":169},"    ul",[159,1774,1478],{"class":165},[159,1776,1778,1780,1782,1784],{"class":161,"line":1777},42,[159,1779,1551],{"class":1146},[159,1781,1486],{"class":165},[159,1783,1627],{"class":1146},[159,1785,1492],{"class":165},[159,1787,1789,1791,1793,1796,1798],{"class":161,"line":1788},43,[159,1790,1748],{"class":1146},[159,1792,1486],{"class":165},[159,1794,1795],{"class":1146},"55",[159,1797,1571],{"class":1142},[159,1799,1492],{"class":165},[159,1801,1803,1805,1807,1809,1811],{"class":161,"line":1802},44,[159,1804,1634],{"class":1146},[159,1806,1486],{"class":165},[159,1808,1739],{"class":1146},[159,1810,1571],{"class":1142},[159,1812,1492],{"class":165},[159,1814,1816,1819,1821,1824],{"class":161,"line":1815},45,[159,1817,1818],{"class":1146},"      display",[159,1820,1486],{"class":165},[159,1822,1823],{"class":1146},"flex",[159,1825,1492],{"class":165},[159,1827,1829,1832,1834,1837],{"class":161,"line":1828},46,[159,1830,1831],{"class":1146},"      justify-content",[159,1833,1486],{"class":165},[159,1835,1836],{"class":1146},"space-between",[159,1838,1492],{"class":165},[159,1840,1842,1844,1846,1848],{"class":161,"line":1841},47,[159,1843,1551],{"class":1146},[159,1845,1486],{"class":165},[159,1847,1627],{"class":1146},[159,1849,1492],{"class":165},[159,1851,1853,1855,1857,1860,1862],{"class":161,"line":1852},48,[159,1854,1563],{"class":1146},[159,1856,1486],{"class":165},[159,1858,1859],{"class":1146},"250",[159,1861,1571],{"class":1142},[159,1863,1492],{"class":165},[159,1865,1867,1869,1871,1873,1875],{"class":161,"line":1866},49,[159,1868,1578],{"class":1146},[159,1870,1486],{"class":165},[159,1872,1739],{"class":1146},[159,1874,1571],{"class":1142},[159,1876,1492],{"class":165},[159,1878,1880],{"class":161,"line":1879},50,[159,1881,1508],{"class":165},[159,1883,1885],{"class":161,"line":1884},51,[159,1886,590],{"emptyLinePlaceholder":589},[159,1888,1890,1892,1895],{"class":161,"line":1889},52,[159,1891,1772],{"class":169},[159,1893,1894],{"class":169}," li",[159,1896,1478],{"class":165},[159,1898,1900,1902,1904,1906,1908],{"class":161,"line":1899},53,[159,1901,1563],{"class":1146},[159,1903,1486],{"class":165},[159,1905,1739],{"class":1146},[159,1907,1571],{"class":1142},[159,1909,1492],{"class":165},[159,1911,1913,1915,1917,1919,1921],{"class":161,"line":1912},54,[159,1914,1578],{"class":1146},[159,1916,1486],{"class":165},[159,1918,1739],{"class":1146},[159,1920,1571],{"class":1142},[159,1922,1492],{"class":165},[159,1924,1926,1928,1930,1933,1935,1937,1940,1942,1944,1946,1948,1951],{"class":161,"line":1925},55,[159,1927,1682],{"class":1146},[159,1929,1486],{"class":165},[159,1931,1932],{"class":1146},"rgba",[159,1934,1159],{"class":165},[159,1936,1489],{"class":1146},[159,1938,1939],{"class":165},", ",[159,1941,1489],{"class":1146},[159,1943,1939],{"class":165},[159,1945,1489],{"class":1146},[159,1947,1939],{"class":165},[159,1949,1950],{"class":1146},".4",[159,1952,1953],{"class":165},");\n",[159,1955,1957,1960,1962,1965,1967],{"class":161,"line":1956},56,[159,1958,1959],{"class":1146},"      border-radius",[159,1961,1486],{"class":165},[159,1963,1964],{"class":1146},"10",[159,1966,1571],{"class":1142},[159,1968,1492],{"class":165},[159,1970,1972],{"class":161,"line":1971},57,[159,1973,1508],{"class":165},[159,1975,1977],{"class":161,"line":1976},58,[159,1978,590],{"emptyLinePlaceholder":589},[159,1980,1982,1985],{"class":161,"line":1981},59,[159,1983,1984],{"class":185},"    .activate",[159,1986,1478],{"class":165},[159,1988,1990,1992,1994,1997],{"class":161,"line":1989},60,[159,1991,1682],{"class":1146},[159,1993,1486],{"class":165},[159,1995,1996],{"class":1146},"#f7f7f7",[159,1998,1492],{"class":165},[159,2000,2002],{"class":161,"line":2001},61,[159,2003,1508],{"class":165},[159,2005,2007,2009,2011],{"class":161,"line":2006},62,[159,2008,254],{"class":165},[159,2010,1468],{"class":169},[159,2012,173],{"class":165},[159,2014,2016,2018,2020],{"class":161,"line":2015},63,[159,2017,264],{"class":165},[159,2019,949],{"class":169},[159,2021,173],{"class":165},[159,2023,2025],{"class":161,"line":2024},64,[159,2026,590],{"emptyLinePlaceholder":589},[159,2028,2030,2032,2034],{"class":161,"line":2029},65,[159,2031,166],{"class":165},[159,2033,170],{"class":169},[159,2035,173],{"class":165},[159,2037,2039,2041,2043,2045,2047,2049],{"class":161,"line":2038},66,[159,2040,179],{"class":165},[159,2042,182],{"class":169},[159,2044,186],{"class":185},[159,2046,189],{"class":165},[159,2048,193],{"class":192},[159,2050,173],{"class":165},[159,2052,2054,2057,2059,2061,2063,2066],{"class":161,"line":2053},67,[159,2055,2056],{"class":165},"    \u003C",[159,2058,182],{"class":169},[159,2060,186],{"class":185},[159,2062,189],{"class":165},[159,2064,2065],{"class":192},"\"slider-wrapper\"",[159,2067,173],{"class":165},[159,2069,2071,2074,2076,2079,2081,2084,2087,2089,2091],{"class":161,"line":2070},68,[159,2072,2073],{"class":165},"      \u003C",[159,2075,23],{"class":169},[159,2077,2078],{"class":185}," src",[159,2080,189],{"class":165},[159,2082,2083],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[159,2085,2086],{"class":185}," alt",[159,2088,189],{"class":165},[159,2090,552],{"class":192},[159,2092,173],{"class":165},[159,2094,2096,2098,2100],{"class":161,"line":2095},69,[159,2097,1084],{"class":165},[159,2099,182],{"class":169},[159,2101,173],{"class":165},[159,2103,2105,2107,2109,2111,2113,2116],{"class":161,"line":2104},70,[159,2106,2056],{"class":165},[159,2108,182],{"class":169},[159,2110,186],{"class":185},[159,2112,189],{"class":165},[159,2114,2115],{"class":192},"\"slider-footer\"",[159,2117,173],{"class":165},[159,2119,2121,2123,2125,2128,2130],{"class":161,"line":2120},71,[159,2122,2073],{"class":165},[159,2124,14],{"class":169},[159,2126,2127],{"class":165},">对人类来说会不会太超前了?\u003C\u002F",[159,2129,14],{"class":169},[159,2131,173],{"class":165},[159,2133,2135,2137,2139],{"class":161,"line":2134},72,[159,2136,2073],{"class":165},[159,2138,103],{"class":169},[159,2140,173],{"class":165},[159,2142,2144,2147,2149,2151,2153,2156,2159,2161],{"class":161,"line":2143},73,[159,2145,2146],{"class":165},"        \u003C",[159,2148,106],{"class":169},[159,2150,186],{"class":185},[159,2152,189],{"class":165},[159,2154,2155],{"class":192},"\"activate\"",[159,2157,2158],{"class":165},">\u003C\u002F",[159,2160,106],{"class":169},[159,2162,173],{"class":165},[159,2164,2166,2168,2170,2172,2174],{"class":161,"line":2165},74,[159,2167,2146],{"class":165},[159,2169,106],{"class":169},[159,2171,2158],{"class":165},[159,2173,106],{"class":169},[159,2175,173],{"class":165},[159,2177,2179,2181,2183,2185,2187],{"class":161,"line":2178},75,[159,2180,2146],{"class":165},[159,2182,106],{"class":169},[159,2184,2158],{"class":165},[159,2186,106],{"class":169},[159,2188,173],{"class":165},[159,2190,2192,2194,2196,2198,2200],{"class":161,"line":2191},76,[159,2193,2146],{"class":165},[159,2195,106],{"class":169},[159,2197,2158],{"class":165},[159,2199,106],{"class":169},[159,2201,173],{"class":165},[159,2203,2205,2207,2209,2211,2213],{"class":161,"line":2204},77,[159,2206,2146],{"class":165},[159,2208,106],{"class":169},[159,2210,2158],{"class":165},[159,2212,106],{"class":169},[159,2214,173],{"class":165},[159,2216,2218,2220,2222,2224,2226],{"class":161,"line":2217},78,[159,2219,2146],{"class":165},[159,2221,106],{"class":169},[159,2223,2158],{"class":165},[159,2225,106],{"class":169},[159,2227,173],{"class":165},[159,2229,2231,2233,2235,2237,2239],{"class":161,"line":2230},79,[159,2232,2146],{"class":165},[159,2234,106],{"class":169},[159,2236,2158],{"class":165},[159,2238,106],{"class":169},[159,2240,173],{"class":165},[159,2242,2244,2246,2248,2250,2252],{"class":161,"line":2243},80,[159,2245,2146],{"class":165},[159,2247,106],{"class":169},[159,2249,2158],{"class":165},[159,2251,106],{"class":169},[159,2253,173],{"class":165},[159,2255,2257,2260,2262],{"class":161,"line":2256},81,[159,2258,2259],{"class":165},"      \u003C\u002F",[159,2261,103],{"class":169},[159,2263,173],{"class":165},[159,2265,2267,2269,2271],{"class":161,"line":2266},82,[159,2268,1084],{"class":165},[159,2270,182],{"class":169},[159,2272,173],{"class":165},[159,2274,2276,2278,2280],{"class":161,"line":2275},83,[159,2277,254],{"class":165},[159,2279,182],{"class":169},[159,2281,173],{"class":165},[159,2283,2285,2287,2289],{"class":161,"line":2284},84,[159,2286,179],{"class":165},[159,2288,228],{"class":169},[159,2290,173],{"class":165},[159,2292,2294,2296,2299,2301],{"class":161,"line":2293},85,[159,2295,1143],{"class":1142},[159,2297,2298],{"class":1146}," arrImage",[159,2300,1150],{"class":1142},[159,2302,2303],{"class":165}," [\n",[159,2305,2307,2310,2313,2316,2319,2322,2325],{"class":161,"line":2306},86,[159,2308,2309],{"class":165},"      { url: ",[159,2311,2312],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[159,2314,2315],{"class":165},", title: ",[159,2317,2318],{"class":192},"'对人类来说会不会太超前了?'",[159,2320,2321],{"class":165},", color: ",[159,2323,2324],{"class":192},"'rgba(100,67,68)'",[159,2326,2327],{"class":165}," },\n",[159,2329,2331,2333,2336,2338,2341,2343,2346],{"class":161,"line":2330},87,[159,2332,2309],{"class":165},[159,2334,2335],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[159,2337,2315],{"class":165},[159,2339,2340],{"class":192},"'开启剑与雪的黑暗传说!'",[159,2342,2321],{"class":165},[159,2344,2345],{"class":192},"'rgba(43,35,26)'",[159,2347,2327],{"class":165},[159,2349,2351,2353,2356,2358,2361,2363,2366],{"class":161,"line":2350},88,[159,2352,2309],{"class":165},[159,2354,2355],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[159,2357,2315],{"class":165},[159,2359,2360],{"class":192},"'真正的jo厨出现了!'",[159,2362,2321],{"class":165},[159,2364,2365],{"class":192},"'rgba(36,31,33)'",[159,2367,2327],{"class":165},[159,2369,2371,2373,2376,2378,2381,2383,2386],{"class":161,"line":2370},89,[159,2372,2309],{"class":165},[159,2374,2375],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[159,2377,2315],{"class":165},[159,2379,2380],{"class":192},"'李玉刚:让世界通过b站看到东方大国文化'",[159,2382,2321],{"class":165},[159,2384,2385],{"class":192},"'rgba(139,98,66)'",[159,2387,2327],{"class":165},[159,2389,2391,2393,2396,2398,2401,2403,2406],{"class":161,"line":2390},90,[159,2392,2309],{"class":165},[159,2394,2395],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[159,2397,2315],{"class":165},[159,2399,2400],{"class":192},"'快来分享你的寒假日常吧'",[159,2402,2321],{"class":165},[159,2404,2405],{"class":192},"'rgba(67,90,92)'",[159,2407,2327],{"class":165},[159,2409,2411,2413,2416,2418,2421,2423,2426],{"class":161,"line":2410},91,[159,2412,2309],{"class":165},[159,2414,2415],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[159,2417,2315],{"class":165},[159,2419,2420],{"class":192},"'哔哩哔哩小年YEAR'",[159,2422,2321],{"class":165},[159,2424,2425],{"class":192},"'rgba(166,131,143)'",[159,2427,2327],{"class":165},[159,2429,2431,2433,2436,2438,2441,2443,2446],{"class":161,"line":2430},92,[159,2432,2309],{"class":165},[159,2434,2435],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[159,2437,2315],{"class":165},[159,2439,2440],{"class":192},"'一站式解决你的电脑配置问题'",[159,2442,2321],{"class":165},[159,2444,2445],{"class":192},"'rgba(53,29,25)'",[159,2447,2327],{"class":165},[159,2449,2451,2453,2456,2458,2461,2463,2466],{"class":161,"line":2450},93,[159,2452,2309],{"class":165},[159,2454,2455],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[159,2457,2315],{"class":165},[159,2459,2460],{"class":192},"'谁不想和小猫咪贴贴呢?'",[159,2462,2321],{"class":165},[159,2464,2465],{"class":192},"'rgba(99,72,114)'",[159,2467,2468],{"class":165}," }\n",[159,2470,2472],{"class":161,"line":2471},94,[159,2473,2474],{"class":165},"    ]\n",[159,2476,2478,2480,2483,2485,2487,2489,2491,2494],{"class":161,"line":2477},95,[159,2479,1143],{"class":1142},[159,2481,2482],{"class":1146}," img",[159,2484,1150],{"class":1142},[159,2486,1153],{"class":165},[159,2488,1156],{"class":185},[159,2490,1159],{"class":165},[159,2492,2493],{"class":192},"'.slider-wrapper img'",[159,2495,1165],{"class":165},[159,2497,2499,2501,2503,2505,2507,2509,2511,2514],{"class":161,"line":2498},96,[159,2500,1143],{"class":1142},[159,2502,1704],{"class":1146},[159,2504,1150],{"class":1142},[159,2506,1153],{"class":165},[159,2508,1156],{"class":185},[159,2510,1159],{"class":165},[159,2512,2513],{"class":192},"'.slider-footer p'",[159,2515,1165],{"class":165},[159,2517,2519,2521,2524,2526,2528,2530,2532,2535],{"class":161,"line":2518},97,[159,2520,1143],{"class":1142},[159,2522,2523],{"class":1146}," color",[159,2525,1150],{"class":1142},[159,2527,1153],{"class":165},[159,2529,1156],{"class":185},[159,2531,1159],{"class":165},[159,2533,2534],{"class":192},"'.slider-footer'",[159,2536,1165],{"class":165},[159,2538,2540,2542,2545,2547,2549,2552,2554,2557],{"class":161,"line":2539},98,[159,2541,1143],{"class":1142},[159,2543,2544],{"class":1146}," lis",[159,2546,1150],{"class":1142},[159,2548,1153],{"class":165},[159,2550,2551],{"class":185},"querySelectorAll",[159,2553,1159],{"class":165},[159,2555,2556],{"class":192},"'.slider-footer ul li'",[159,2558,1165],{"class":165},[159,2560,2562,2564,2566,2568],{"class":161,"line":2561},99,[159,2563,1183],{"class":1142},[159,2565,1186],{"class":165},[159,2567,189],{"class":1142},[159,2569,2570],{"class":1146}," 1\n",[159,2572,2574,2576,2579,2581,2583,2585,2587],{"class":161,"line":2573},100,[159,2575,1183],{"class":1142},[159,2577,2578],{"class":165}," timer ",[159,2580,189],{"class":1142},[159,2582,1210],{"class":185},[159,2584,1159],{"class":165},[159,2586,1215],{"class":1142},[159,2588,1218],{"class":165},[159,2590,2592,2595,2597],{"class":161,"line":2591},101,[159,2593,2594],{"class":165},"      img.src ",[159,2596,189],{"class":1142},[159,2598,2599],{"class":165}," arrImage[i].url\n",[159,2601,2603,2606,2608],{"class":161,"line":2602},102,[159,2604,2605],{"class":165},"      p.innerHTML ",[159,2607,189],{"class":1142},[159,2609,2610],{"class":165}," arrImage[i].title\n",[159,2612,2614,2617,2619],{"class":161,"line":2613},103,[159,2615,2616],{"class":165},"      color.style.backgroundColor ",[159,2618,189],{"class":1142},[159,2620,2621],{"class":165}," arrImage[i].color\n",[159,2623,2625],{"class":161,"line":2624},104,[159,2626,2627],{"class":1135},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[159,2629,2631],{"class":161,"line":2630},105,[159,2632,2633],{"class":1135},"      \u002F\u002F li.classList.add('activate')\n",[159,2635,2637],{"class":161,"line":2636},106,[159,2638,2639],{"class":1135},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[159,2641,2643],{"class":161,"line":2642},107,[159,2644,2645],{"class":1135},"      \u002F\u002F lis[i].classList.remove('activate')\n",[159,2647,2649,2652,2654,2656,2659,2662,2665,2667,2670],{"class":161,"line":2648},108,[159,2650,2651],{"class":165},"      document.",[159,2653,1156],{"class":185},[159,2655,1159],{"class":165},[159,2657,2658],{"class":192},"'.activate'",[159,2660,2661],{"class":165},")?.classList.",[159,2663,2664],{"class":185},"toggle",[159,2666,1159],{"class":165},[159,2668,2669],{"class":192},"'activate'",[159,2671,1165],{"class":165},[159,2673,2675,2678,2681,2683,2685],{"class":161,"line":2674},109,[159,2676,2677],{"class":165},"      lis[i].classList.",[159,2679,2680],{"class":185},"add",[159,2682,1159],{"class":165},[159,2684,2669],{"class":192},[159,2686,1165],{"class":165},[159,2688,2690],{"class":161,"line":2689},110,[159,2691,590],{"emptyLinePlaceholder":589},[159,2693,2695,2698,2700,2702,2705,2708,2711,2713,2716],{"class":161,"line":2694},111,[159,2696,2697],{"class":165},"      i ",[159,2699,189],{"class":1142},[159,2701,1253],{"class":165},[159,2703,2704],{"class":1142},"+",[159,2706,2707],{"class":1146}," 1",[159,2709,2710],{"class":165},") ",[159,2712,1662],{"class":1142},[159,2714,2715],{"class":165}," arrImage.",[159,2717,2718],{"class":1146},"length\n",[159,2720,2722],{"class":161,"line":2721},112,[159,2723,590],{"emptyLinePlaceholder":589},[159,2725,2727,2729,2731],{"class":161,"line":2726},113,[159,2728,1314],{"class":165},[159,2730,1317],{"class":1146},[159,2732,1165],{"class":165},[159,2734,2736,2738,2740],{"class":161,"line":2735},114,[159,2737,254],{"class":165},[159,2739,228],{"class":169},[159,2741,173],{"class":165},[159,2743,2745,2747,2749],{"class":161,"line":2744},115,[159,2746,264],{"class":165},[159,2748,170],{"class":169},[159,2750,173],{"class":165},[159,2752,2754],{"class":161,"line":2753},116,[159,2755,590],{"emptyLinePlaceholder":589},[159,2757,2759,2761,2763],{"class":161,"line":2758},117,[159,2760,264],{"class":165},[159,2762,522],{"class":169},[159,2764,173],{"class":165},[14,2766,2767],{},[23,2768],{"alt":25,"src":2769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,2771,2772],{},"?.就是短路保护,确保输出正常进行",[14,2774,2775],{},"不要忘记取余%,有时候可以用",[14,2777,2778],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[134,2780,2781],{"start":176},[106,2782,2783],{},"法2",[151,2785,2787],{"className":520,"code":2786,"language":522,"meta":25,"style":25},"\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",[49,2788,2789,2799,2813,2817,2825,2839,2859,2871,2879,2885,2895,2905,2909,2913,2919,2929,2933,2937,2943,2953,2965,2977,2991,2995,2999,3005,3015,3025,3035,3047,3059,3069,3073,3077,3085,3095,3107,3119,3131,3135,3139,3145,3155,3167,3179,3189,3199,3209,3221,3233,3237,3241,3249,3261,3273,3299,3311,3315,3319,3325,3335,3339,3347,3355,3359,3367,3381,3395,3415,3423,3437,3449,3457,3475,3487,3499,3511,3523,3535,3547,3559,3567,3575,3583,3591,3602,3618,3634,3650,3666,3682,3698,3714,3730,3734,3739,3757,3775,3786,3791,3796,3807,3814,3831,3840,3844,3849,3858,3863,3872,3877,3882,3887,3910,3941,3945,3953,3957,3966,3975,3980],{"__ignoreMap":25},[159,2790,2791,2793,2795,2797],{"class":161,"line":162},[159,2792,914],{"class":165},[159,2794,917],{"class":169},[159,2796,920],{"class":185},[159,2798,173],{"class":165},[159,2800,2801,2803,2805,2807,2809,2811],{"class":161,"line":176},[159,2802,166],{"class":165},[159,2804,522],{"class":169},[159,2806,931],{"class":185},[159,2808,189],{"class":165},[159,2810,936],{"class":192},[159,2812,173],{"class":165},[159,2814,2815],{"class":161,"line":203},[159,2816,590],{"emptyLinePlaceholder":589},[159,2818,2819,2821,2823],{"class":161,"line":223},[159,2820,166],{"class":165},[159,2822,949],{"class":169},[159,2824,173],{"class":165},[159,2826,2827,2829,2831,2833,2835,2837],{"class":161,"line":233},[159,2828,179],{"class":165},[159,2830,958],{"class":169},[159,2832,961],{"class":185},[159,2834,189],{"class":165},[159,2836,966],{"class":192},[159,2838,173],{"class":165},[159,2840,2841,2843,2845,2847,2849,2851,2853,2855,2857],{"class":161,"line":239},[159,2842,179],{"class":165},[159,2844,958],{"class":169},[159,2846,547],{"class":185},[159,2848,189],{"class":165},[159,2850,981],{"class":192},[159,2852,984],{"class":185},[159,2854,189],{"class":165},[159,2856,989],{"class":192},[159,2858,173],{"class":165},[159,2860,2861,2863,2865,2867,2869],{"class":161,"line":245},[159,2862,179],{"class":165},[159,2864,998],{"class":169},[159,2866,1001],{"class":165},[159,2868,998],{"class":169},[159,2870,173],{"class":165},[159,2872,2873,2875,2877],{"class":161,"line":251},[159,2874,179],{"class":165},[159,2876,1468],{"class":169},[159,2878,173],{"class":165},[159,2880,2881,2883],{"class":161,"line":261},[159,2882,1475],{"class":169},[159,2884,1478],{"class":165},[159,2886,2887,2889,2891,2893],{"class":161,"line":603},[159,2888,1483],{"class":1146},[159,2890,1486],{"class":165},[159,2892,1489],{"class":1146},[159,2894,1492],{"class":165},[159,2896,2897,2899,2901,2903],{"class":161,"line":621},[159,2898,1497],{"class":1146},[159,2900,1486],{"class":165},[159,2902,1489],{"class":1146},[159,2904,1492],{"class":165},[159,2906,2907],{"class":161,"line":634},[159,2908,1508],{"class":165},[159,2910,2911],{"class":161,"line":640},[159,2912,590],{"emptyLinePlaceholder":589},[159,2914,2915,2917],{"class":161,"line":1075},[159,2916,1517],{"class":169},[159,2918,1478],{"class":165},[159,2920,2921,2923,2925,2927],{"class":161,"line":1081},[159,2922,1524],{"class":1146},[159,2924,1486],{"class":165},[159,2926,1529],{"class":1146},[159,2928,1492],{"class":165},[159,2930,2931],{"class":161,"line":1091},[159,2932,1508],{"class":165},[159,2934,2935],{"class":161,"line":1100},[159,2936,590],{"emptyLinePlaceholder":589},[159,2938,2939,2941],{"class":161,"line":1123},[159,2940,1544],{"class":185},[159,2942,1478],{"class":165},[159,2944,2945,2947,2949,2951],{"class":161,"line":1132},[159,2946,1551],{"class":1146},[159,2948,1486],{"class":165},[159,2950,1556],{"class":1146},[159,2952,1492],{"class":165},[159,2954,2955,2957,2959,2961,2963],{"class":161,"line":1139},[159,2956,1563],{"class":1146},[159,2958,1486],{"class":165},[159,2960,1568],{"class":1146},[159,2962,1571],{"class":1142},[159,2964,1492],{"class":165},[159,2966,2967,2969,2971,2973,2975],{"class":161,"line":1168},[159,2968,1578],{"class":1146},[159,2970,1486],{"class":165},[159,2972,1583],{"class":1146},[159,2974,1571],{"class":1142},[159,2976,1492],{"class":165},[159,2978,2979,2981,2983,2985,2987,2989],{"class":161,"line":1174},[159,2980,1497],{"class":1146},[159,2982,1486],{"class":165},[159,2984,1596],{"class":1146},[159,2986,1571],{"class":1142},[159,2988,1601],{"class":1146},[159,2990,1492],{"class":165},[159,2992,2993],{"class":161,"line":1180},[159,2994,1508],{"class":165},[159,2996,2997],{"class":161,"line":1194},[159,2998,590],{"emptyLinePlaceholder":589},[159,3000,3001,3003],{"class":161,"line":1200},[159,3002,1616],{"class":185},[159,3004,1478],{"class":165},[159,3006,3007,3009,3011,3013],{"class":161,"line":1221},[159,3008,1551],{"class":1146},[159,3010,1486],{"class":165},[159,3012,1627],{"class":1146},[159,3014,1492],{"class":165},[159,3016,3017,3019,3021,3023],{"class":161,"line":1230},[159,3018,1634],{"class":1146},[159,3020,1486],{"class":165},[159,3022,1489],{"class":1146},[159,3024,1492],{"class":165},[159,3026,3027,3029,3031,3033],{"class":161,"line":1247},[159,3028,1645],{"class":1146},[159,3030,1486],{"class":165},[159,3032,1489],{"class":1146},[159,3034,1492],{"class":165},[159,3036,3037,3039,3041,3043,3045],{"class":161,"line":1265},[159,3038,1563],{"class":1146},[159,3040,1486],{"class":165},[159,3042,1596],{"class":1146},[159,3044,1662],{"class":1142},[159,3046,1492],{"class":165},[159,3048,3049,3051,3053,3055,3057],{"class":161,"line":1277},[159,3050,1578],{"class":1146},[159,3052,1486],{"class":165},[159,3054,1673],{"class":1146},[159,3056,1662],{"class":1142},[159,3058,1492],{"class":165},[159,3060,3061,3063,3065,3067],{"class":161,"line":1283},[159,3062,1682],{"class":1146},[159,3064,1486],{"class":165},[159,3066,1687],{"class":1146},[159,3068,1492],{"class":165},[159,3070,3071],{"class":161,"line":1294},[159,3072,1508],{"class":165},[159,3074,3075],{"class":161,"line":1305},[159,3076,590],{"emptyLinePlaceholder":589},[159,3078,3079,3081,3083],{"class":161,"line":1311},[159,3080,1616],{"class":185},[159,3082,1704],{"class":169},[159,3084,1478],{"class":165},[159,3086,3087,3089,3091,3093],{"class":161,"line":1322},[159,3088,1551],{"class":1146},[159,3090,1486],{"class":165},[159,3092,1627],{"class":1146},[159,3094,1492],{"class":165},[159,3096,3097,3099,3101,3103,3105],{"class":161,"line":1327},[159,3098,1721],{"class":1146},[159,3100,1486],{"class":165},[159,3102,1726],{"class":1146},[159,3104,1571],{"class":1142},[159,3106,1492],{"class":165},[159,3108,3109,3111,3113,3115,3117],{"class":161,"line":1336},[159,3110,1634],{"class":1146},[159,3112,1486],{"class":165},[159,3114,1739],{"class":1146},[159,3116,1571],{"class":1142},[159,3118,1492],{"class":165},[159,3120,3121,3123,3125,3127,3129],{"class":161,"line":1345},[159,3122,1748],{"class":1146},[159,3124,1486],{"class":165},[159,3126,1753],{"class":1146},[159,3128,1571],{"class":1142},[159,3130,1492],{"class":165},[159,3132,3133],{"class":161,"line":1350},[159,3134,1508],{"class":165},[159,3136,3137],{"class":161,"line":1764},[159,3138,590],{"emptyLinePlaceholder":589},[159,3140,3141,3143],{"class":161,"line":1769},[159,3142,1772],{"class":169},[159,3144,1478],{"class":165},[159,3146,3147,3149,3151,3153],{"class":161,"line":1777},[159,3148,1551],{"class":1146},[159,3150,1486],{"class":165},[159,3152,1627],{"class":1146},[159,3154,1492],{"class":165},[159,3156,3157,3159,3161,3163,3165],{"class":161,"line":1788},[159,3158,1748],{"class":1146},[159,3160,1486],{"class":165},[159,3162,1795],{"class":1146},[159,3164,1571],{"class":1142},[159,3166,1492],{"class":165},[159,3168,3169,3171,3173,3175,3177],{"class":161,"line":1802},[159,3170,1634],{"class":1146},[159,3172,1486],{"class":165},[159,3174,1739],{"class":1146},[159,3176,1571],{"class":1142},[159,3178,1492],{"class":165},[159,3180,3181,3183,3185,3187],{"class":161,"line":1815},[159,3182,1818],{"class":1146},[159,3184,1486],{"class":165},[159,3186,1823],{"class":1146},[159,3188,1492],{"class":165},[159,3190,3191,3193,3195,3197],{"class":161,"line":1828},[159,3192,1831],{"class":1146},[159,3194,1486],{"class":165},[159,3196,1836],{"class":1146},[159,3198,1492],{"class":165},[159,3200,3201,3203,3205,3207],{"class":161,"line":1841},[159,3202,1551],{"class":1146},[159,3204,1486],{"class":165},[159,3206,1627],{"class":1146},[159,3208,1492],{"class":165},[159,3210,3211,3213,3215,3217,3219],{"class":161,"line":1852},[159,3212,1563],{"class":1146},[159,3214,1486],{"class":165},[159,3216,1859],{"class":1146},[159,3218,1571],{"class":1142},[159,3220,1492],{"class":165},[159,3222,3223,3225,3227,3229,3231],{"class":161,"line":1866},[159,3224,1578],{"class":1146},[159,3226,1486],{"class":165},[159,3228,1739],{"class":1146},[159,3230,1571],{"class":1142},[159,3232,1492],{"class":165},[159,3234,3235],{"class":161,"line":1879},[159,3236,1508],{"class":165},[159,3238,3239],{"class":161,"line":1884},[159,3240,590],{"emptyLinePlaceholder":589},[159,3242,3243,3245,3247],{"class":161,"line":1889},[159,3244,1772],{"class":169},[159,3246,1894],{"class":169},[159,3248,1478],{"class":165},[159,3250,3251,3253,3255,3257,3259],{"class":161,"line":1899},[159,3252,1563],{"class":1146},[159,3254,1486],{"class":165},[159,3256,1739],{"class":1146},[159,3258,1571],{"class":1142},[159,3260,1492],{"class":165},[159,3262,3263,3265,3267,3269,3271],{"class":161,"line":1912},[159,3264,1578],{"class":1146},[159,3266,1486],{"class":165},[159,3268,1739],{"class":1146},[159,3270,1571],{"class":1142},[159,3272,1492],{"class":165},[159,3274,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297],{"class":161,"line":1925},[159,3276,1682],{"class":1146},[159,3278,1486],{"class":165},[159,3280,1932],{"class":1146},[159,3282,1159],{"class":165},[159,3284,1489],{"class":1146},[159,3286,1939],{"class":165},[159,3288,1489],{"class":1146},[159,3290,1939],{"class":165},[159,3292,1489],{"class":1146},[159,3294,1939],{"class":165},[159,3296,1950],{"class":1146},[159,3298,1953],{"class":165},[159,3300,3301,3303,3305,3307,3309],{"class":161,"line":1956},[159,3302,1959],{"class":1146},[159,3304,1486],{"class":165},[159,3306,1964],{"class":1146},[159,3308,1571],{"class":1142},[159,3310,1492],{"class":165},[159,3312,3313],{"class":161,"line":1971},[159,3314,1508],{"class":165},[159,3316,3317],{"class":161,"line":1976},[159,3318,590],{"emptyLinePlaceholder":589},[159,3320,3321,3323],{"class":161,"line":1981},[159,3322,1984],{"class":185},[159,3324,1478],{"class":165},[159,3326,3327,3329,3331,3333],{"class":161,"line":1989},[159,3328,1682],{"class":1146},[159,3330,1486],{"class":165},[159,3332,1996],{"class":1146},[159,3334,1492],{"class":165},[159,3336,3337],{"class":161,"line":2001},[159,3338,1508],{"class":165},[159,3340,3341,3343,3345],{"class":161,"line":2006},[159,3342,254],{"class":165},[159,3344,1468],{"class":169},[159,3346,173],{"class":165},[159,3348,3349,3351,3353],{"class":161,"line":2015},[159,3350,264],{"class":165},[159,3352,949],{"class":169},[159,3354,173],{"class":165},[159,3356,3357],{"class":161,"line":2024},[159,3358,590],{"emptyLinePlaceholder":589},[159,3360,3361,3363,3365],{"class":161,"line":2029},[159,3362,166],{"class":165},[159,3364,170],{"class":169},[159,3366,173],{"class":165},[159,3368,3369,3371,3373,3375,3377,3379],{"class":161,"line":2038},[159,3370,179],{"class":165},[159,3372,182],{"class":169},[159,3374,186],{"class":185},[159,3376,189],{"class":165},[159,3378,193],{"class":192},[159,3380,173],{"class":165},[159,3382,3383,3385,3387,3389,3391,3393],{"class":161,"line":2053},[159,3384,2056],{"class":165},[159,3386,182],{"class":169},[159,3388,186],{"class":185},[159,3390,189],{"class":165},[159,3392,2065],{"class":192},[159,3394,173],{"class":165},[159,3396,3397,3399,3401,3403,3405,3407,3409,3411,3413],{"class":161,"line":2070},[159,3398,2073],{"class":165},[159,3400,23],{"class":169},[159,3402,2078],{"class":185},[159,3404,189],{"class":165},[159,3406,2083],{"class":192},[159,3408,2086],{"class":185},[159,3410,189],{"class":165},[159,3412,552],{"class":192},[159,3414,173],{"class":165},[159,3416,3417,3419,3421],{"class":161,"line":2095},[159,3418,1084],{"class":165},[159,3420,182],{"class":169},[159,3422,173],{"class":165},[159,3424,3425,3427,3429,3431,3433,3435],{"class":161,"line":2104},[159,3426,2056],{"class":165},[159,3428,182],{"class":169},[159,3430,186],{"class":185},[159,3432,189],{"class":165},[159,3434,2115],{"class":192},[159,3436,173],{"class":165},[159,3438,3439,3441,3443,3445,3447],{"class":161,"line":2120},[159,3440,2073],{"class":165},[159,3442,14],{"class":169},[159,3444,2127],{"class":165},[159,3446,14],{"class":169},[159,3448,173],{"class":165},[159,3450,3451,3453,3455],{"class":161,"line":2134},[159,3452,2073],{"class":165},[159,3454,103],{"class":169},[159,3456,173],{"class":165},[159,3458,3459,3461,3463,3465,3467,3469,3471,3473],{"class":161,"line":2143},[159,3460,2146],{"class":165},[159,3462,106],{"class":169},[159,3464,186],{"class":185},[159,3466,189],{"class":165},[159,3468,2155],{"class":192},[159,3470,2158],{"class":165},[159,3472,106],{"class":169},[159,3474,173],{"class":165},[159,3476,3477,3479,3481,3483,3485],{"class":161,"line":2165},[159,3478,2146],{"class":165},[159,3480,106],{"class":169},[159,3482,2158],{"class":165},[159,3484,106],{"class":169},[159,3486,173],{"class":165},[159,3488,3489,3491,3493,3495,3497],{"class":161,"line":2178},[159,3490,2146],{"class":165},[159,3492,106],{"class":169},[159,3494,2158],{"class":165},[159,3496,106],{"class":169},[159,3498,173],{"class":165},[159,3500,3501,3503,3505,3507,3509],{"class":161,"line":2191},[159,3502,2146],{"class":165},[159,3504,106],{"class":169},[159,3506,2158],{"class":165},[159,3508,106],{"class":169},[159,3510,173],{"class":165},[159,3512,3513,3515,3517,3519,3521],{"class":161,"line":2204},[159,3514,2146],{"class":165},[159,3516,106],{"class":169},[159,3518,2158],{"class":165},[159,3520,106],{"class":169},[159,3522,173],{"class":165},[159,3524,3525,3527,3529,3531,3533],{"class":161,"line":2217},[159,3526,2146],{"class":165},[159,3528,106],{"class":169},[159,3530,2158],{"class":165},[159,3532,106],{"class":169},[159,3534,173],{"class":165},[159,3536,3537,3539,3541,3543,3545],{"class":161,"line":2230},[159,3538,2146],{"class":165},[159,3540,106],{"class":169},[159,3542,2158],{"class":165},[159,3544,106],{"class":169},[159,3546,173],{"class":165},[159,3548,3549,3551,3553,3555,3557],{"class":161,"line":2243},[159,3550,2146],{"class":165},[159,3552,106],{"class":169},[159,3554,2158],{"class":165},[159,3556,106],{"class":169},[159,3558,173],{"class":165},[159,3560,3561,3563,3565],{"class":161,"line":2256},[159,3562,2259],{"class":165},[159,3564,103],{"class":169},[159,3566,173],{"class":165},[159,3568,3569,3571,3573],{"class":161,"line":2266},[159,3570,1084],{"class":165},[159,3572,182],{"class":169},[159,3574,173],{"class":165},[159,3576,3577,3579,3581],{"class":161,"line":2275},[159,3578,254],{"class":165},[159,3580,182],{"class":169},[159,3582,173],{"class":165},[159,3584,3585,3587,3589],{"class":161,"line":2284},[159,3586,179],{"class":165},[159,3588,228],{"class":169},[159,3590,173],{"class":165},[159,3592,3593,3595,3598,3600],{"class":161,"line":2293},[159,3594,1143],{"class":1142},[159,3596,3597],{"class":1146}," sliderData",[159,3599,1150],{"class":1142},[159,3601,2303],{"class":165},[159,3603,3604,3606,3608,3610,3612,3614,3616],{"class":161,"line":2306},[159,3605,2309],{"class":165},[159,3607,2312],{"class":192},[159,3609,2315],{"class":165},[159,3611,2318],{"class":192},[159,3613,2321],{"class":165},[159,3615,2324],{"class":192},[159,3617,2327],{"class":165},[159,3619,3620,3622,3624,3626,3628,3630,3632],{"class":161,"line":2330},[159,3621,2309],{"class":165},[159,3623,2335],{"class":192},[159,3625,2315],{"class":165},[159,3627,2340],{"class":192},[159,3629,2321],{"class":165},[159,3631,2345],{"class":192},[159,3633,2327],{"class":165},[159,3635,3636,3638,3640,3642,3644,3646,3648],{"class":161,"line":2350},[159,3637,2309],{"class":165},[159,3639,2355],{"class":192},[159,3641,2315],{"class":165},[159,3643,2360],{"class":192},[159,3645,2321],{"class":165},[159,3647,2365],{"class":192},[159,3649,2327],{"class":165},[159,3651,3652,3654,3656,3658,3660,3662,3664],{"class":161,"line":2370},[159,3653,2309],{"class":165},[159,3655,2375],{"class":192},[159,3657,2315],{"class":165},[159,3659,2380],{"class":192},[159,3661,2321],{"class":165},[159,3663,2385],{"class":192},[159,3665,2327],{"class":165},[159,3667,3668,3670,3672,3674,3676,3678,3680],{"class":161,"line":2390},[159,3669,2309],{"class":165},[159,3671,2395],{"class":192},[159,3673,2315],{"class":165},[159,3675,2400],{"class":192},[159,3677,2321],{"class":165},[159,3679,2405],{"class":192},[159,3681,2327],{"class":165},[159,3683,3684,3686,3688,3690,3692,3694,3696],{"class":161,"line":2410},[159,3685,2309],{"class":165},[159,3687,2415],{"class":192},[159,3689,2315],{"class":165},[159,3691,2420],{"class":192},[159,3693,2321],{"class":165},[159,3695,2425],{"class":192},[159,3697,2327],{"class":165},[159,3699,3700,3702,3704,3706,3708,3710,3712],{"class":161,"line":2430},[159,3701,2309],{"class":165},[159,3703,2435],{"class":192},[159,3705,2315],{"class":165},[159,3707,2440],{"class":192},[159,3709,2321],{"class":165},[159,3711,2445],{"class":192},[159,3713,2327],{"class":165},[159,3715,3716,3718,3720,3722,3724,3726,3728],{"class":161,"line":2450},[159,3717,2309],{"class":165},[159,3719,2455],{"class":192},[159,3721,2315],{"class":165},[159,3723,2460],{"class":192},[159,3725,2321],{"class":165},[159,3727,2465],{"class":192},[159,3729,2468],{"class":165},[159,3731,3732],{"class":161,"line":2471},[159,3733,2474],{"class":165},[159,3735,3736],{"class":161,"line":2477},[159,3737,3738],{"class":1135},"    \u002F\u002F 1.获取元素\n",[159,3740,3741,3743,3745,3747,3749,3751,3753,3755],{"class":161,"line":2498},[159,3742,1143],{"class":1142},[159,3744,2482],{"class":1146},[159,3746,1150],{"class":1142},[159,3748,1153],{"class":165},[159,3750,1156],{"class":185},[159,3752,1159],{"class":165},[159,3754,2493],{"class":192},[159,3756,1165],{"class":165},[159,3758,3759,3761,3763,3765,3767,3769,3771,3773],{"class":161,"line":2518},[159,3760,1143],{"class":1142},[159,3762,1704],{"class":1146},[159,3764,1150],{"class":1142},[159,3766,1153],{"class":165},[159,3768,1156],{"class":185},[159,3770,1159],{"class":165},[159,3772,2513],{"class":192},[159,3774,1165],{"class":165},[159,3776,3777,3779,3781,3783],{"class":161,"line":2539},[159,3778,1183],{"class":1142},[159,3780,1186],{"class":165},[159,3782,189],{"class":1142},[159,3784,3785],{"class":1146}," 0\n",[159,3787,3788],{"class":161,"line":2561},[159,3789,3790],{"class":1135},"    \u002F\u002F 2.开启定时器\n",[159,3792,3793],{"class":161,"line":2573},[159,3794,3795],{"class":1135},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[159,3797,3798,3801,3803,3805],{"class":161,"line":2591},[159,3799,3800],{"class":185},"    setInterval",[159,3802,1159],{"class":165},[159,3804,1215],{"class":1142},[159,3806,1218],{"class":165},[159,3808,3809,3811],{"class":161,"line":2602},[159,3810,1224],{"class":165},[159,3812,3813],{"class":1142},"++\n",[159,3815,3816,3818,3820,3823,3826,3829],{"class":161,"line":2613},[159,3817,1250],{"class":1142},[159,3819,1253],{"class":165},[159,3821,3822],{"class":1142},">=",[159,3824,3825],{"class":165}," sliderData.",[159,3827,3828],{"class":1146},"length",[159,3830,1262],{"class":165},[159,3832,3833,3836,3838],{"class":161,"line":2624},[159,3834,3835],{"class":165},"        i ",[159,3837,189],{"class":1142},[159,3839,3785],{"class":1146},[159,3841,3842],{"class":161,"line":2630},[159,3843,1308],{"class":165},[159,3845,3846],{"class":161,"line":2636},[159,3847,3848],{"class":1135},"      \u002F\u002F 更换图片路径\n",[159,3850,3851,3853,3855],{"class":161,"line":2642},[159,3852,2594],{"class":165},[159,3854,189],{"class":1142},[159,3856,3857],{"class":165}," sliderData[i].url\n",[159,3859,3860],{"class":161,"line":2648},[159,3861,3862],{"class":1135},"      \u002F\u002F 把文字写到p里面\n",[159,3864,3865,3867,3869],{"class":161,"line":2674},[159,3866,2605],{"class":165},[159,3868,189],{"class":1142},[159,3870,3871],{"class":165}," sliderData[i].title\n",[159,3873,3874],{"class":161,"line":2689},[159,3875,3876],{"class":1135},"      \u002F\u002F 小圆点\n",[159,3878,3879],{"class":161,"line":2694},[159,3880,3881],{"class":1135},"      \u002F\u002F 先删除以前的active\n",[159,3883,3884],{"class":161,"line":2721},[159,3885,3886],{"class":1135},"      \u002F\u002F 只让当前li添加active\n",[159,3888,3889,3891,3893,3895,3898,3901,3904,3906,3908],{"class":161,"line":2726},[159,3890,2651],{"class":165},[159,3892,1156],{"class":185},[159,3894,1159],{"class":165},[159,3896,3897],{"class":192},"'.slider-footer .activate'",[159,3899,3900],{"class":165},").classList.",[159,3902,3903],{"class":185},"remove",[159,3905,1159],{"class":165},[159,3907,2669],{"class":192},[159,3909,1165],{"class":165},[159,3911,3912,3914,3916,3918,3921,3923,3926,3928,3931,3933,3935,3937,3939],{"class":161,"line":2735},[159,3913,2651],{"class":165},[159,3915,1156],{"class":185},[159,3917,1159],{"class":165},[159,3919,3920],{"class":192},"`.slider-footer ul li:nth-child(${",[159,3922,1241],{"class":165},[159,3924,3925],{"class":1142}," +",[159,3927,2707],{"class":1146},[159,3929,3930],{"class":192},"})`",[159,3932,3900],{"class":165},[159,3934,2680],{"class":185},[159,3936,1159],{"class":165},[159,3938,2669],{"class":192},[159,3940,1165],{"class":165},[159,3942,3943],{"class":161,"line":2744},[159,3944,590],{"emptyLinePlaceholder":589},[159,3946,3947,3949,3951],{"class":161,"line":2753},[159,3948,1314],{"class":165},[159,3950,1317],{"class":1146},[159,3952,1165],{"class":165},[159,3954,3955],{"class":161,"line":2758},[159,3956,590],{"emptyLinePlaceholder":589},[159,3958,3960,3962,3964],{"class":161,"line":3959},118,[159,3961,254],{"class":165},[159,3963,228],{"class":169},[159,3965,173],{"class":165},[159,3967,3969,3971,3973],{"class":161,"line":3968},119,[159,3970,264],{"class":165},[159,3972,170],{"class":169},[159,3974,173],{"class":165},[159,3976,3978],{"class":161,"line":3977},120,[159,3979,590],{"emptyLinePlaceholder":589},[159,3981,3983,3985,3987],{"class":161,"line":3982},121,[159,3984,264],{"class":165},[159,3986,522],{"class":169},[159,3988,173],{"class":165},[42,3990,3992],{"id":3991},"_317-重要知识点","3.1.7 重要知识点",[14,3994,3995,3996],{},"浏览器在渲染文本时， ",[61,3997,3998],{},"没有空格或换行符就没有“断行点”",[14,4000,4001],{},[23,4002],{"alt":25,"src":4003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,4005,4006],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,4008,4009],{},[23,4010],{"alt":25,"src":4011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,4013,4014],{},[23,4015],{"alt":25,"src":4016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[37,4018,4020],{"id":4019},"_32-dom事件基础","3.2 DOM事件基础",[42,4022,4024],{"id":4023},"_321-事件监听","3.2.1 事件监听",[14,4026,4027],{},[23,4028],{"alt":25,"src":4029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,4031,4032],{},"事件监听有响应的发生",[14,4034,4035],{},[23,4036],{"alt":25,"src":4037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,4039,4040],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,4042,4043],{},"对于有名函数,要执行的函数名后边不要加()",[42,4045,4047],{"id":4046},"_322-随机点名案例","3.2.2 随机点名案例",[151,4049,4051],{"className":520,"code":4050,"language":522,"meta":25,"style":25},"\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",[49,4052,4053,4063,4077,4081,4089,4103,4123,4135,4143,4149,4159,4169,4173,4177,4184,4196,4200,4204,4210,4222,4237,4247,4260,4274,4278,4282,4289,4293,4306,4318,4330,4334,4338,4342,4349,4359,4363,4367,4376,4389,4402,4417,4421,4429,4437,4441,4449,4462,4476,4489,4509,4517,4532,4552,4572,4580,4584,4592,4597,4635,4655,4660,4680,4685,4696,4701,4712,4717,4736,4751,4756,4785,4795,4804,4809,4825,4830,4835,4840,4855,4859,4864,4869,4889,4906,4914,4919,4935,4939,4943,4951,4959,4963],{"__ignoreMap":25},[159,4054,4055,4057,4059,4061],{"class":161,"line":162},[159,4056,914],{"class":165},[159,4058,917],{"class":169},[159,4060,920],{"class":185},[159,4062,173],{"class":165},[159,4064,4065,4067,4069,4071,4073,4075],{"class":161,"line":176},[159,4066,166],{"class":165},[159,4068,522],{"class":169},[159,4070,931],{"class":185},[159,4072,189],{"class":165},[159,4074,936],{"class":192},[159,4076,173],{"class":165},[159,4078,4079],{"class":161,"line":203},[159,4080,590],{"emptyLinePlaceholder":589},[159,4082,4083,4085,4087],{"class":161,"line":223},[159,4084,166],{"class":165},[159,4086,949],{"class":169},[159,4088,173],{"class":165},[159,4090,4091,4093,4095,4097,4099,4101],{"class":161,"line":233},[159,4092,179],{"class":165},[159,4094,958],{"class":169},[159,4096,961],{"class":185},[159,4098,189],{"class":165},[159,4100,966],{"class":192},[159,4102,173],{"class":165},[159,4104,4105,4107,4109,4111,4113,4115,4117,4119,4121],{"class":161,"line":239},[159,4106,179],{"class":165},[159,4108,958],{"class":169},[159,4110,547],{"class":185},[159,4112,189],{"class":165},[159,4114,981],{"class":192},[159,4116,984],{"class":185},[159,4118,189],{"class":165},[159,4120,989],{"class":192},[159,4122,173],{"class":165},[159,4124,4125,4127,4129,4131,4133],{"class":161,"line":245},[159,4126,179],{"class":165},[159,4128,998],{"class":169},[159,4130,1001],{"class":165},[159,4132,998],{"class":169},[159,4134,173],{"class":165},[159,4136,4137,4139,4141],{"class":161,"line":251},[159,4138,179],{"class":165},[159,4140,1468],{"class":169},[159,4142,173],{"class":165},[159,4144,4145,4147],{"class":161,"line":261},[159,4146,1475],{"class":169},[159,4148,1478],{"class":165},[159,4150,4151,4153,4155,4157],{"class":161,"line":603},[159,4152,1497],{"class":1146},[159,4154,1486],{"class":165},[159,4156,1489],{"class":1146},[159,4158,1492],{"class":165},[159,4160,4161,4163,4165,4167],{"class":161,"line":621},[159,4162,1483],{"class":1146},[159,4164,1486],{"class":165},[159,4166,1489],{"class":1146},[159,4168,1492],{"class":165},[159,4170,4171],{"class":161,"line":634},[159,4172,1508],{"class":165},[159,4174,4175],{"class":161,"line":640},[159,4176,590],{"emptyLinePlaceholder":589},[159,4178,4179,4182],{"class":161,"line":1075},[159,4180,4181],{"class":169},"    h2",[159,4183,1478],{"class":165},[159,4185,4186,4189,4191,4194],{"class":161,"line":1081},[159,4187,4188],{"class":1146},"      text-align",[159,4190,1486],{"class":165},[159,4192,4193],{"class":1146},"center",[159,4195,1492],{"class":165},[159,4197,4198],{"class":161,"line":1091},[159,4199,1508],{"class":165},[159,4201,4202],{"class":161,"line":1100},[159,4203,590],{"emptyLinePlaceholder":589},[159,4205,4206,4208],{"class":161,"line":1123},[159,4207,1544],{"class":185},[159,4209,1478],{"class":165},[159,4211,4212,4214,4216,4218,4220],{"class":161,"line":1132},[159,4213,1563],{"class":1146},[159,4215,1486],{"class":165},[159,4217,1583],{"class":1146},[159,4219,1571],{"class":1142},[159,4221,1492],{"class":165},[159,4223,4224,4226,4228,4231,4233,4235],{"class":161,"line":1139},[159,4225,1497],{"class":1146},[159,4227,1486],{"class":165},[159,4229,4230],{"class":1146},"50",[159,4232,1571],{"class":1142},[159,4234,1601],{"class":1146},[159,4236,1492],{"class":165},[159,4238,4239,4241,4243,4245],{"class":161,"line":1168},[159,4240,1818],{"class":1146},[159,4242,1486],{"class":165},[159,4244,1823],{"class":1146},[159,4246,1492],{"class":165},[159,4248,4249,4251,4253,4256,4258],{"class":161,"line":1174},[159,4250,1721],{"class":1146},[159,4252,1486],{"class":165},[159,4254,4255],{"class":1146},"25",[159,4257,1571],{"class":1142},[159,4259,1492],{"class":165},[159,4261,4262,4265,4267,4270,4272],{"class":161,"line":1180},[159,4263,4264],{"class":1146},"      line-height",[159,4266,1486],{"class":165},[159,4268,4269],{"class":1146},"40",[159,4271,1571],{"class":1142},[159,4273,1492],{"class":165},[159,4275,4276],{"class":161,"line":1194},[159,4277,1508],{"class":165},[159,4279,4280],{"class":161,"line":1200},[159,4281,590],{"emptyLinePlaceholder":589},[159,4283,4284,4287],{"class":161,"line":1221},[159,4285,4286],{"class":185},"    .qs",[159,4288,1478],{"class":165},[159,4290,4291],{"class":161,"line":1230},[159,4292,590],{"emptyLinePlaceholder":589},[159,4294,4295,4297,4299,4302,4304],{"class":161,"line":1247},[159,4296,1563],{"class":1146},[159,4298,1486],{"class":165},[159,4300,4301],{"class":1146},"450",[159,4303,1571],{"class":1142},[159,4305,1492],{"class":165},[159,4307,4308,4310,4312,4314,4316],{"class":161,"line":1265},[159,4309,1578],{"class":1146},[159,4311,1486],{"class":165},[159,4313,4269],{"class":1146},[159,4315,1571],{"class":1142},[159,4317,1492],{"class":165},[159,4319,4320,4323,4325,4328],{"class":161,"line":1277},[159,4321,4322],{"class":1146},"      color",[159,4324,1486],{"class":165},[159,4326,4327],{"class":1146},"red",[159,4329,1492],{"class":165},[159,4331,4332],{"class":161,"line":1283},[159,4333,590],{"emptyLinePlaceholder":589},[159,4335,4336],{"class":161,"line":1294},[159,4337,1508],{"class":165},[159,4339,4340],{"class":161,"line":1305},[159,4341,590],{"emptyLinePlaceholder":589},[159,4343,4344,4347],{"class":161,"line":1311},[159,4345,4346],{"class":185},"    .btns",[159,4348,1478],{"class":165},[159,4350,4351,4353,4355,4357],{"class":161,"line":1322},[159,4352,4188],{"class":1146},[159,4354,1486],{"class":165},[159,4356,4193],{"class":1146},[159,4358,1492],{"class":165},[159,4360,4361],{"class":161,"line":1327},[159,4362,1508],{"class":165},[159,4364,4365],{"class":161,"line":1336},[159,4366,590],{"emptyLinePlaceholder":589},[159,4368,4369,4371,4374],{"class":161,"line":1345},[159,4370,4346],{"class":185},[159,4372,4373],{"class":169}," button",[159,4375,1478],{"class":165},[159,4377,4378,4380,4382,4385,4387],{"class":161,"line":1350},[159,4379,1563],{"class":1146},[159,4381,1486],{"class":165},[159,4383,4384],{"class":1146},"120",[159,4386,1571],{"class":1142},[159,4388,1492],{"class":165},[159,4390,4391,4393,4395,4398,4400],{"class":161,"line":1764},[159,4392,1578],{"class":1146},[159,4394,1486],{"class":165},[159,4396,4397],{"class":1146},"35",[159,4399,1571],{"class":1142},[159,4401,1492],{"class":165},[159,4403,4404,4406,4408,4410,4413,4415],{"class":161,"line":1769},[159,4405,1497],{"class":1146},[159,4407,1486],{"class":165},[159,4409,1489],{"class":1146},[159,4411,4412],{"class":1146}," 50",[159,4414,1571],{"class":1142},[159,4416,1492],{"class":165},[159,4418,4419],{"class":161,"line":1777},[159,4420,1508],{"class":165},[159,4422,4423,4425,4427],{"class":161,"line":1788},[159,4424,254],{"class":165},[159,4426,1468],{"class":169},[159,4428,173],{"class":165},[159,4430,4431,4433,4435],{"class":161,"line":1802},[159,4432,264],{"class":165},[159,4434,949],{"class":169},[159,4436,173],{"class":165},[159,4438,4439],{"class":161,"line":1815},[159,4440,590],{"emptyLinePlaceholder":589},[159,4442,4443,4445,4447],{"class":161,"line":1828},[159,4444,166],{"class":165},[159,4446,170],{"class":169},[159,4448,173],{"class":165},[159,4450,4451,4453,4455,4458,4460],{"class":161,"line":1841},[159,4452,179],{"class":165},[159,4454,37],{"class":169},[159,4456,4457],{"class":165},">随机点名\u003C\u002F",[159,4459,37],{"class":169},[159,4461,173],{"class":165},[159,4463,4464,4466,4468,4470,4472,4474],{"class":161,"line":1852},[159,4465,179],{"class":165},[159,4467,182],{"class":169},[159,4469,186],{"class":185},[159,4471,189],{"class":165},[159,4473,193],{"class":192},[159,4475,173],{"class":165},[159,4477,4478,4480,4482,4485,4487],{"class":161,"line":1866},[159,4479,2056],{"class":165},[159,4481,159],{"class":169},[159,4483,4484],{"class":165},">名字是：\u003C\u002F",[159,4486,159],{"class":169},[159,4488,173],{"class":165},[159,4490,4491,4493,4495,4497,4499,4502,4505,4507],{"class":161,"line":1879},[159,4492,2056],{"class":165},[159,4494,182],{"class":169},[159,4496,186],{"class":185},[159,4498,189],{"class":165},[159,4500,4501],{"class":192},"\"qs\"",[159,4503,4504],{"class":165},">这里显示姓名\u003C\u002F",[159,4506,182],{"class":169},[159,4508,173],{"class":165},[159,4510,4511,4513,4515],{"class":161,"line":1884},[159,4512,254],{"class":165},[159,4514,182],{"class":169},[159,4516,173],{"class":165},[159,4518,4519,4521,4523,4525,4527,4530],{"class":161,"line":1889},[159,4520,179],{"class":165},[159,4522,182],{"class":169},[159,4524,186],{"class":185},[159,4526,189],{"class":165},[159,4528,4529],{"class":192},"\"btns\"",[159,4531,173],{"class":165},[159,4533,4534,4536,4538,4540,4542,4545,4548,4550],{"class":161,"line":1899},[159,4535,2056],{"class":165},[159,4537,608],{"class":169},[159,4539,186],{"class":185},[159,4541,189],{"class":165},[159,4543,4544],{"class":192},"\"start\"",[159,4546,4547],{"class":165},">开始\u003C\u002F",[159,4549,608],{"class":169},[159,4551,173],{"class":165},[159,4553,4554,4556,4558,4560,4562,4565,4568,4570],{"class":161,"line":1912},[159,4555,2056],{"class":165},[159,4557,608],{"class":169},[159,4559,186],{"class":185},[159,4561,189],{"class":165},[159,4563,4564],{"class":192},"\"end\"",[159,4566,4567],{"class":165},">结束\u003C\u002F",[159,4569,608],{"class":169},[159,4571,173],{"class":165},[159,4573,4574,4576,4578],{"class":161,"line":1925},[159,4575,254],{"class":165},[159,4577,182],{"class":169},[159,4579,173],{"class":165},[159,4581,4582],{"class":161,"line":1956},[159,4583,590],{"emptyLinePlaceholder":589},[159,4585,4586,4588,4590],{"class":161,"line":1971},[159,4587,179],{"class":165},[159,4589,228],{"class":169},[159,4591,173],{"class":165},[159,4593,4594],{"class":161,"line":1976},[159,4595,4596],{"class":1135},"    \u002F\u002F 数据数组\n",[159,4598,4599,4601,4604,4606,4609,4612,4614,4617,4619,4622,4624,4627,4629,4632],{"class":161,"line":1981},[159,4600,1143],{"class":1142},[159,4602,4603],{"class":1146}," arr",[159,4605,1150],{"class":1142},[159,4607,4608],{"class":165}," [",[159,4610,4611],{"class":192},"'马超'",[159,4613,1939],{"class":165},[159,4615,4616],{"class":192},"'黄忠'",[159,4618,1939],{"class":165},[159,4620,4621],{"class":192},"'赵云'",[159,4623,1939],{"class":165},[159,4625,4626],{"class":192},"'关羽'",[159,4628,1939],{"class":165},[159,4630,4631],{"class":192},"'张飞'",[159,4633,4634],{"class":165},"]\n",[159,4636,4637,4639,4642,4644,4646,4648,4650,4653],{"class":161,"line":1989},[159,4638,1143],{"class":1142},[159,4640,4641],{"class":1146}," qs",[159,4643,1150],{"class":1142},[159,4645,1153],{"class":165},[159,4647,1156],{"class":185},[159,4649,1159],{"class":165},[159,4651,4652],{"class":192},"'.qs'",[159,4654,1165],{"class":165},[159,4656,4657],{"class":161,"line":2001},[159,4658,4659],{"class":1135},"    \u002F\u002F 1.业务1.开始按钮模块\n",[159,4661,4662,4664,4667,4669,4671,4673,4675,4678],{"class":161,"line":2006},[159,4663,1143],{"class":1142},[159,4665,4666],{"class":1146}," start",[159,4668,1150],{"class":1142},[159,4670,1153],{"class":165},[159,4672,1156],{"class":185},[159,4674,1159],{"class":165},[159,4676,4677],{"class":192},"'.start'",[159,4679,1165],{"class":165},[159,4681,4682],{"class":161,"line":2015},[159,4683,4684],{"class":1135},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[159,4686,4687,4689,4692,4694],{"class":161,"line":2024},[159,4688,1183],{"class":1142},[159,4690,4691],{"class":165}," timerId ",[159,4693,189],{"class":1142},[159,4695,3785],{"class":1146},[159,4697,4698],{"class":161,"line":2029},[159,4699,4700],{"class":1135},"    \u002F\u002F 随机号要全局变量\n",[159,4702,4703,4705,4708,4710],{"class":161,"line":2038},[159,4704,1183],{"class":1142},[159,4706,4707],{"class":165}," random ",[159,4709,189],{"class":1142},[159,4711,3785],{"class":1146},[159,4713,4714],{"class":161,"line":2053},[159,4715,4716],{"class":1135},"    \u002F\u002F 1.1 添加点击事件\n",[159,4718,4719,4722,4725,4727,4730,4732,4734],{"class":161,"line":2070},[159,4720,4721],{"class":165},"    start.",[159,4723,4724],{"class":185},"addEventListener",[159,4726,1159],{"class":165},[159,4728,4729],{"class":192},"'click'",[159,4731,1939],{"class":165},[159,4733,1215],{"class":1142},[159,4735,1218],{"class":165},[159,4737,4738,4741,4743,4745,4747,4749],{"class":161,"line":2095},[159,4739,4740],{"class":165},"      timerId ",[159,4742,189],{"class":1142},[159,4744,1210],{"class":185},[159,4746,1159],{"class":165},[159,4748,1215],{"class":1142},[159,4750,1218],{"class":165},[159,4752,4753],{"class":161,"line":2104},[159,4754,4755],{"class":1135},"        \u002F\u002F 随机数\n",[159,4757,4758,4761,4763,4766,4769,4772,4775,4778,4781,4783],{"class":161,"line":2120},[159,4759,4760],{"class":165},"        random ",[159,4762,189],{"class":1142},[159,4764,4765],{"class":185}," parseInt",[159,4767,4768],{"class":165},"(Math.",[159,4770,4771],{"class":185},"random",[159,4773,4774],{"class":165},"() ",[159,4776,4777],{"class":1142},"*",[159,4779,4780],{"class":165}," arr.",[159,4782,3828],{"class":1146},[159,4784,1165],{"class":165},[159,4786,4787,4790,4792],{"class":161,"line":2134},[159,4788,4789],{"class":165},"        qs.innerHTML ",[159,4791,189],{"class":1142},[159,4793,4794],{"class":165}," arr[random]\n",[159,4796,4797,4800,4802],{"class":161,"line":2143},[159,4798,4799],{"class":165},"      }, ",[159,4801,4397],{"class":1146},[159,4803,1165],{"class":165},[159,4805,4806],{"class":161,"line":2165},[159,4807,4808],{"class":1135},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[159,4810,4811,4813,4816,4818,4821,4823],{"class":161,"line":2178},[159,4812,1250],{"class":1142},[159,4814,4815],{"class":165}," (arr.",[159,4817,3828],{"class":1146},[159,4819,4820],{"class":1142}," ===",[159,4822,2707],{"class":1146},[159,4824,1262],{"class":165},[159,4826,4827],{"class":161,"line":2191},[159,4828,4829],{"class":1135},"        \u002F\u002F start.disabled = true\n",[159,4831,4832],{"class":161,"line":2204},[159,4833,4834],{"class":1135},"        \u002F\u002F end.disabled = true\n",[159,4836,4837],{"class":161,"line":2217},[159,4838,4839],{"class":1135},"        \u002F\u002F 可以合起来写\n",[159,4841,4842,4845,4847,4850,4852],{"class":161,"line":2230},[159,4843,4844],{"class":165},"        start.disabled ",[159,4846,189],{"class":1142},[159,4848,4849],{"class":165}," end.disabled ",[159,4851,189],{"class":1142},[159,4853,4854],{"class":1146}," true\n",[159,4856,4857],{"class":161,"line":2243},[159,4858,1308],{"class":165},[159,4860,4861],{"class":161,"line":2256},[159,4862,4863],{"class":165},"    })\n",[159,4865,4866],{"class":161,"line":2266},[159,4867,4868],{"class":1135},"    \u002F\u002F 1.2 关闭按钮模块\n",[159,4870,4871,4873,4876,4878,4880,4882,4884,4887],{"class":161,"line":2275},[159,4872,1143],{"class":1142},[159,4874,4875],{"class":1146}," end",[159,4877,1150],{"class":1142},[159,4879,1153],{"class":165},[159,4881,1156],{"class":185},[159,4883,1159],{"class":165},[159,4885,4886],{"class":192},"'.end'",[159,4888,1165],{"class":165},[159,4890,4891,4894,4896,4898,4900,4902,4904],{"class":161,"line":2284},[159,4892,4893],{"class":165},"    end.",[159,4895,4724],{"class":185},[159,4897,1159],{"class":165},[159,4899,4729],{"class":192},[159,4901,1939],{"class":165},[159,4903,1215],{"class":1142},[159,4905,1218],{"class":165},[159,4907,4908,4911],{"class":161,"line":2293},[159,4909,4910],{"class":185},"      clearInterval",[159,4912,4913],{"class":165},"(timerId)\n",[159,4915,4916],{"class":161,"line":2306},[159,4917,4918],{"class":1135},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[159,4920,4921,4924,4927,4930,4933],{"class":161,"line":2330},[159,4922,4923],{"class":165},"      arr.",[159,4925,4926],{"class":185},"splice",[159,4928,4929],{"class":165},"(random, ",[159,4931,4932],{"class":1146},"1",[159,4934,1165],{"class":165},[159,4936,4937],{"class":161,"line":2350},[159,4938,4863],{"class":165},[159,4940,4941],{"class":161,"line":2370},[159,4942,590],{"emptyLinePlaceholder":589},[159,4944,4945,4947,4949],{"class":161,"line":2390},[159,4946,254],{"class":165},[159,4948,228],{"class":169},[159,4950,173],{"class":165},[159,4952,4953,4955,4957],{"class":161,"line":2410},[159,4954,264],{"class":165},[159,4956,170],{"class":169},[159,4958,173],{"class":165},[159,4960,4961],{"class":161,"line":2430},[159,4962,590],{"emptyLinePlaceholder":589},[159,4964,4965,4967,4969],{"class":161,"line":2450},[159,4966,264],{"class":165},[159,4968,522],{"class":169},[159,4970,173],{"class":165},[14,4972,4973],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[42,4975,4977],{"id":4976},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[151,4979,4981],{"className":520,"code":4980,"language":522,"meta":25,"style":25},"\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",[49,4982,4983,4993,5007,5011,5019,5033,5053,5065,5073,5077,5085,5097,5105,5124,5141,5159,5170,5174,5182,5190,5194],{"__ignoreMap":25},[159,4984,4985,4987,4989,4991],{"class":161,"line":162},[159,4986,914],{"class":165},[159,4988,917],{"class":169},[159,4990,920],{"class":185},[159,4992,173],{"class":165},[159,4994,4995,4997,4999,5001,5003,5005],{"class":161,"line":176},[159,4996,166],{"class":165},[159,4998,522],{"class":169},[159,5000,931],{"class":185},[159,5002,189],{"class":165},[159,5004,936],{"class":192},[159,5006,173],{"class":165},[159,5008,5009],{"class":161,"line":203},[159,5010,590],{"emptyLinePlaceholder":589},[159,5012,5013,5015,5017],{"class":161,"line":223},[159,5014,166],{"class":165},[159,5016,949],{"class":169},[159,5018,173],{"class":165},[159,5020,5021,5023,5025,5027,5029,5031],{"class":161,"line":233},[159,5022,179],{"class":165},[159,5024,958],{"class":169},[159,5026,961],{"class":185},[159,5028,189],{"class":165},[159,5030,966],{"class":192},[159,5032,173],{"class":165},[159,5034,5035,5037,5039,5041,5043,5045,5047,5049,5051],{"class":161,"line":239},[159,5036,179],{"class":165},[159,5038,958],{"class":169},[159,5040,547],{"class":185},[159,5042,189],{"class":165},[159,5044,981],{"class":192},[159,5046,984],{"class":185},[159,5048,189],{"class":165},[159,5050,989],{"class":192},[159,5052,173],{"class":165},[159,5054,5055,5057,5059,5061,5063],{"class":161,"line":245},[159,5056,179],{"class":165},[159,5058,998],{"class":169},[159,5060,1001],{"class":165},[159,5062,998],{"class":169},[159,5064,173],{"class":165},[159,5066,5067,5069,5071],{"class":161,"line":251},[159,5068,264],{"class":165},[159,5070,949],{"class":169},[159,5072,173],{"class":165},[159,5074,5075],{"class":161,"line":261},[159,5076,590],{"emptyLinePlaceholder":589},[159,5078,5079,5081,5083],{"class":161,"line":603},[159,5080,166],{"class":165},[159,5082,170],{"class":169},[159,5084,173],{"class":165},[159,5086,5087,5089,5091,5093,5095],{"class":161,"line":621},[159,5088,179],{"class":165},[159,5090,608],{"class":169},[159,5092,614],{"class":165},[159,5094,608],{"class":169},[159,5096,173],{"class":165},[159,5098,5099,5101,5103],{"class":161,"line":634},[159,5100,179],{"class":165},[159,5102,228],{"class":169},[159,5104,173],{"class":165},[159,5106,5107,5109,5111,5113,5115,5117,5119,5122],{"class":161,"line":640},[159,5108,1143],{"class":1142},[159,5110,1147],{"class":1146},[159,5112,1150],{"class":1142},[159,5114,1153],{"class":165},[159,5116,1156],{"class":185},[159,5118,1159],{"class":165},[159,5120,5121],{"class":192},"'button'",[159,5123,1165],{"class":165},[159,5125,5126,5129,5131,5133,5135,5137,5139],{"class":161,"line":1075},[159,5127,5128],{"class":165},"    btn.",[159,5130,4724],{"class":185},[159,5132,1159],{"class":165},[159,5134,4729],{"class":192},[159,5136,1939],{"class":165},[159,5138,1215],{"class":1142},[159,5140,1218],{"class":165},[159,5142,5143,5146,5149,5151,5154,5156],{"class":161,"line":1081},[159,5144,5145],{"class":1142},"      const",[159,5147,5148],{"class":1146}," num",[159,5150,1150],{"class":1142},[159,5152,5153],{"class":165}," Math.",[159,5155,4771],{"class":185},[159,5157,5158],{"class":165},"()\n",[159,5160,5161,5164,5167],{"class":161,"line":1091},[159,5162,5163],{"class":165},"      console.",[159,5165,5166],{"class":185},"log",[159,5168,5169],{"class":165},"(num)\n",[159,5171,5172],{"class":161,"line":1100},[159,5173,4863],{"class":165},[159,5175,5176,5178,5180],{"class":161,"line":1123},[159,5177,254],{"class":165},[159,5179,228],{"class":169},[159,5181,173],{"class":165},[159,5183,5184,5186,5188],{"class":161,"line":1132},[159,5185,264],{"class":165},[159,5187,170],{"class":169},[159,5189,173],{"class":165},[159,5191,5192],{"class":161,"line":1139},[159,5193,590],{"emptyLinePlaceholder":589},[159,5195,5196,5198,5200],{"class":161,"line":1168},[159,5197,264],{"class":165},[159,5199,522],{"class":169},[159,5201,173],{"class":165},[14,5203,5204],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,5206,5207],{},"常量不可以重新赋值",[14,5209,5210],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[151,5212,5214],{"className":520,"code":5213,"language":522,"meta":25,"style":25},"\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",[49,5215,5216,5226,5240,5244,5252,5266,5286,5298,5306,5310,5318,5330,5338,5349,5367,5383,5397,5405,5409,5417,5425,5429],{"__ignoreMap":25},[159,5217,5218,5220,5222,5224],{"class":161,"line":162},[159,5219,914],{"class":165},[159,5221,917],{"class":169},[159,5223,920],{"class":185},[159,5225,173],{"class":165},[159,5227,5228,5230,5232,5234,5236,5238],{"class":161,"line":176},[159,5229,166],{"class":165},[159,5231,522],{"class":169},[159,5233,931],{"class":185},[159,5235,189],{"class":165},[159,5237,936],{"class":192},[159,5239,173],{"class":165},[159,5241,5242],{"class":161,"line":203},[159,5243,590],{"emptyLinePlaceholder":589},[159,5245,5246,5248,5250],{"class":161,"line":223},[159,5247,166],{"class":165},[159,5249,949],{"class":169},[159,5251,173],{"class":165},[159,5253,5254,5256,5258,5260,5262,5264],{"class":161,"line":233},[159,5255,179],{"class":165},[159,5257,958],{"class":169},[159,5259,961],{"class":185},[159,5261,189],{"class":165},[159,5263,966],{"class":192},[159,5265,173],{"class":165},[159,5267,5268,5270,5272,5274,5276,5278,5280,5282,5284],{"class":161,"line":239},[159,5269,179],{"class":165},[159,5271,958],{"class":169},[159,5273,547],{"class":185},[159,5275,189],{"class":165},[159,5277,981],{"class":192},[159,5279,984],{"class":185},[159,5281,189],{"class":165},[159,5283,989],{"class":192},[159,5285,173],{"class":165},[159,5287,5288,5290,5292,5294,5296],{"class":161,"line":245},[159,5289,179],{"class":165},[159,5291,998],{"class":169},[159,5293,1001],{"class":165},[159,5295,998],{"class":169},[159,5297,173],{"class":165},[159,5299,5300,5302,5304],{"class":161,"line":251},[159,5301,264],{"class":165},[159,5303,949],{"class":169},[159,5305,173],{"class":165},[159,5307,5308],{"class":161,"line":261},[159,5309,590],{"emptyLinePlaceholder":589},[159,5311,5312,5314,5316],{"class":161,"line":603},[159,5313,166],{"class":165},[159,5315,170],{"class":169},[159,5317,173],{"class":165},[159,5319,5320,5322,5324,5326,5328],{"class":161,"line":621},[159,5321,179],{"class":165},[159,5323,608],{"class":169},[159,5325,614],{"class":165},[159,5327,608],{"class":169},[159,5329,173],{"class":165},[159,5331,5332,5334,5336],{"class":161,"line":634},[159,5333,179],{"class":165},[159,5335,228],{"class":169},[159,5337,173],{"class":165},[159,5339,5340,5342,5344,5346],{"class":161,"line":640},[159,5341,1143],{"class":1142},[159,5343,5148],{"class":1146},[159,5345,1150],{"class":1142},[159,5347,5348],{"class":1146}," 10\n",[159,5350,5351,5353,5355,5357,5359,5361,5363,5365],{"class":161,"line":1075},[159,5352,1143],{"class":1142},[159,5354,1147],{"class":1146},[159,5356,1150],{"class":1142},[159,5358,1153],{"class":165},[159,5360,1156],{"class":185},[159,5362,1159],{"class":165},[159,5364,5121],{"class":192},[159,5366,1165],{"class":165},[159,5368,5369,5371,5373,5375,5377,5379,5381],{"class":161,"line":1081},[159,5370,5128],{"class":165},[159,5372,4724],{"class":185},[159,5374,1159],{"class":165},[159,5376,4729],{"class":192},[159,5378,1939],{"class":165},[159,5380,1215],{"class":1142},[159,5382,1218],{"class":165},[159,5384,5385,5387,5389,5391,5393,5395],{"class":161,"line":1091},[159,5386,5145],{"class":1142},[159,5388,5148],{"class":1146},[159,5390,1150],{"class":1142},[159,5392,5153],{"class":165},[159,5394,4771],{"class":185},[159,5396,5158],{"class":165},[159,5398,5399,5401,5403],{"class":161,"line":1100},[159,5400,5163],{"class":165},[159,5402,5166],{"class":185},[159,5404,5169],{"class":165},[159,5406,5407],{"class":161,"line":1123},[159,5408,4863],{"class":165},[159,5410,5411,5413,5415],{"class":161,"line":1132},[159,5412,254],{"class":165},[159,5414,228],{"class":169},[159,5416,173],{"class":165},[159,5418,5419,5421,5423],{"class":161,"line":1139},[159,5420,264],{"class":165},[159,5422,170],{"class":169},[159,5424,173],{"class":165},[159,5426,5427],{"class":161,"line":1168},[159,5428,590],{"emptyLinePlaceholder":589},[159,5430,5431,5433,5435],{"class":161,"line":1174},[159,5432,264],{"class":165},[159,5434,522],{"class":169},[159,5436,173],{"class":165},[14,5438,5439],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[151,5441,5443],{"className":520,"code":5442,"language":522,"meta":25,"style":25},"\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",[49,5444,5445,5455,5469,5473,5481,5495,5515,5527,5535,5539,5547,5559,5567,5577,5595,5611,5624,5632,5636,5644,5652,5656],{"__ignoreMap":25},[159,5446,5447,5449,5451,5453],{"class":161,"line":162},[159,5448,914],{"class":165},[159,5450,917],{"class":169},[159,5452,920],{"class":185},[159,5454,173],{"class":165},[159,5456,5457,5459,5461,5463,5465,5467],{"class":161,"line":176},[159,5458,166],{"class":165},[159,5460,522],{"class":169},[159,5462,931],{"class":185},[159,5464,189],{"class":165},[159,5466,936],{"class":192},[159,5468,173],{"class":165},[159,5470,5471],{"class":161,"line":203},[159,5472,590],{"emptyLinePlaceholder":589},[159,5474,5475,5477,5479],{"class":161,"line":223},[159,5476,166],{"class":165},[159,5478,949],{"class":169},[159,5480,173],{"class":165},[159,5482,5483,5485,5487,5489,5491,5493],{"class":161,"line":233},[159,5484,179],{"class":165},[159,5486,958],{"class":169},[159,5488,961],{"class":185},[159,5490,189],{"class":165},[159,5492,966],{"class":192},[159,5494,173],{"class":165},[159,5496,5497,5499,5501,5503,5505,5507,5509,5511,5513],{"class":161,"line":239},[159,5498,179],{"class":165},[159,5500,958],{"class":169},[159,5502,547],{"class":185},[159,5504,189],{"class":165},[159,5506,981],{"class":192},[159,5508,984],{"class":185},[159,5510,189],{"class":165},[159,5512,989],{"class":192},[159,5514,173],{"class":165},[159,5516,5517,5519,5521,5523,5525],{"class":161,"line":245},[159,5518,179],{"class":165},[159,5520,998],{"class":169},[159,5522,1001],{"class":165},[159,5524,998],{"class":169},[159,5526,173],{"class":165},[159,5528,5529,5531,5533],{"class":161,"line":251},[159,5530,264],{"class":165},[159,5532,949],{"class":169},[159,5534,173],{"class":165},[159,5536,5537],{"class":161,"line":261},[159,5538,590],{"emptyLinePlaceholder":589},[159,5540,5541,5543,5545],{"class":161,"line":603},[159,5542,166],{"class":165},[159,5544,170],{"class":169},[159,5546,173],{"class":165},[159,5548,5549,5551,5553,5555,5557],{"class":161,"line":621},[159,5550,179],{"class":165},[159,5552,608],{"class":169},[159,5554,614],{"class":165},[159,5556,608],{"class":169},[159,5558,173],{"class":165},[159,5560,5561,5563,5565],{"class":161,"line":634},[159,5562,179],{"class":165},[159,5564,228],{"class":169},[159,5566,173],{"class":165},[159,5568,5569,5571,5573,5575],{"class":161,"line":640},[159,5570,1143],{"class":1142},[159,5572,5148],{"class":1146},[159,5574,1150],{"class":1142},[159,5576,5348],{"class":1146},[159,5578,5579,5581,5583,5585,5587,5589,5591,5593],{"class":161,"line":1075},[159,5580,1143],{"class":1142},[159,5582,1147],{"class":1146},[159,5584,1150],{"class":1142},[159,5586,1153],{"class":165},[159,5588,1156],{"class":185},[159,5590,1159],{"class":165},[159,5592,5121],{"class":192},[159,5594,1165],{"class":165},[159,5596,5597,5599,5601,5603,5605,5607,5609],{"class":161,"line":1081},[159,5598,5128],{"class":165},[159,5600,4724],{"class":185},[159,5602,1159],{"class":165},[159,5604,4729],{"class":192},[159,5606,1939],{"class":165},[159,5608,1215],{"class":1142},[159,5610,1218],{"class":165},[159,5612,5613,5616,5618,5620,5622],{"class":161,"line":1091},[159,5614,5615],{"class":165},"      num ",[159,5617,189],{"class":1142},[159,5619,5153],{"class":165},[159,5621,4771],{"class":185},[159,5623,5158],{"class":165},[159,5625,5626,5628,5630],{"class":161,"line":1100},[159,5627,5163],{"class":165},[159,5629,5166],{"class":185},[159,5631,5169],{"class":165},[159,5633,5634],{"class":161,"line":1123},[159,5635,4863],{"class":165},[159,5637,5638,5640,5642],{"class":161,"line":1132},[159,5639,254],{"class":165},[159,5641,228],{"class":169},[159,5643,173],{"class":165},[159,5645,5646,5648,5650],{"class":161,"line":1139},[159,5647,264],{"class":165},[159,5649,170],{"class":169},[159,5651,173],{"class":165},[159,5653,5654],{"class":161,"line":1168},[159,5655,590],{"emptyLinePlaceholder":589},[159,5657,5658,5660,5662],{"class":161,"line":1174},[159,5659,264],{"class":165},[159,5661,522],{"class":169},[159,5663,173],{"class":165},[14,5665,5666],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[42,5668,5670],{"id":5669},"_324-事件监听版本","3.2.4 事件监听版本",[14,5672,5673],{},[23,5674],{"alt":25,"src":5675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,5677,5678],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,5680,5681],{},"这种方式会覆盖前边的事件监听:",[151,5683,5685],{"className":520,"code":5684,"language":522,"meta":25,"style":25},"\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",[49,5686,5687,5697,5711,5715,5723,5737,5757,5769,5777,5781,5789,5801,5809,5827,5841,5853,5857,5869,5880,5884,5892,5900,5904],{"__ignoreMap":25},[159,5688,5689,5691,5693,5695],{"class":161,"line":162},[159,5690,914],{"class":165},[159,5692,917],{"class":169},[159,5694,920],{"class":185},[159,5696,173],{"class":165},[159,5698,5699,5701,5703,5705,5707,5709],{"class":161,"line":176},[159,5700,166],{"class":165},[159,5702,522],{"class":169},[159,5704,931],{"class":185},[159,5706,189],{"class":165},[159,5708,936],{"class":192},[159,5710,173],{"class":165},[159,5712,5713],{"class":161,"line":203},[159,5714,590],{"emptyLinePlaceholder":589},[159,5716,5717,5719,5721],{"class":161,"line":223},[159,5718,166],{"class":165},[159,5720,949],{"class":169},[159,5722,173],{"class":165},[159,5724,5725,5727,5729,5731,5733,5735],{"class":161,"line":233},[159,5726,179],{"class":165},[159,5728,958],{"class":169},[159,5730,961],{"class":185},[159,5732,189],{"class":165},[159,5734,966],{"class":192},[159,5736,173],{"class":165},[159,5738,5739,5741,5743,5745,5747,5749,5751,5753,5755],{"class":161,"line":239},[159,5740,179],{"class":165},[159,5742,958],{"class":169},[159,5744,547],{"class":185},[159,5746,189],{"class":165},[159,5748,981],{"class":192},[159,5750,984],{"class":185},[159,5752,189],{"class":165},[159,5754,989],{"class":192},[159,5756,173],{"class":165},[159,5758,5759,5761,5763,5765,5767],{"class":161,"line":245},[159,5760,179],{"class":165},[159,5762,998],{"class":169},[159,5764,1001],{"class":165},[159,5766,998],{"class":169},[159,5768,173],{"class":165},[159,5770,5771,5773,5775],{"class":161,"line":251},[159,5772,264],{"class":165},[159,5774,949],{"class":169},[159,5776,173],{"class":165},[159,5778,5779],{"class":161,"line":261},[159,5780,590],{"emptyLinePlaceholder":589},[159,5782,5783,5785,5787],{"class":161,"line":603},[159,5784,166],{"class":165},[159,5786,170],{"class":169},[159,5788,173],{"class":165},[159,5790,5791,5793,5795,5797,5799],{"class":161,"line":621},[159,5792,179],{"class":165},[159,5794,608],{"class":169},[159,5796,614],{"class":165},[159,5798,608],{"class":169},[159,5800,173],{"class":165},[159,5802,5803,5805,5807],{"class":161,"line":634},[159,5804,179],{"class":165},[159,5806,228],{"class":169},[159,5808,173],{"class":165},[159,5810,5811,5813,5815,5817,5819,5821,5823,5825],{"class":161,"line":640},[159,5812,1143],{"class":1142},[159,5814,1147],{"class":1146},[159,5816,1150],{"class":1142},[159,5818,1153],{"class":165},[159,5820,1156],{"class":185},[159,5822,1159],{"class":165},[159,5824,5121],{"class":192},[159,5826,1165],{"class":165},[159,5828,5829,5831,5834,5836,5839],{"class":161,"line":1075},[159,5830,5128],{"class":165},[159,5832,5833],{"class":185},"onclick",[159,5835,1150],{"class":1142},[159,5837,5838],{"class":1142}," function",[159,5840,1218],{"class":165},[159,5842,5843,5846,5848,5851],{"class":161,"line":1081},[159,5844,5845],{"class":185},"      alert",[159,5847,1159],{"class":165},[159,5849,5850],{"class":1146},"11",[159,5852,1165],{"class":165},[159,5854,5855],{"class":161,"line":1091},[159,5856,1508],{"class":165},[159,5858,5859,5861,5863,5865,5867],{"class":161,"line":1100},[159,5860,5128],{"class":165},[159,5862,5833],{"class":185},[159,5864,1150],{"class":1142},[159,5866,5838],{"class":1142},[159,5868,1218],{"class":165},[159,5870,5871,5873,5875,5878],{"class":161,"line":1123},[159,5872,5845],{"class":185},[159,5874,1159],{"class":165},[159,5876,5877],{"class":1146},"22",[159,5879,1165],{"class":165},[159,5881,5882],{"class":161,"line":1132},[159,5883,1508],{"class":165},[159,5885,5886,5888,5890],{"class":161,"line":1139},[159,5887,254],{"class":165},[159,5889,228],{"class":169},[159,5891,173],{"class":165},[159,5893,5894,5896,5898],{"class":161,"line":1168},[159,5895,264],{"class":165},[159,5897,170],{"class":169},[159,5899,173],{"class":165},[159,5901,5902],{"class":161,"line":1174},[159,5903,590],{"emptyLinePlaceholder":589},[159,5905,5906,5908,5910],{"class":161,"line":1180},[159,5907,264],{"class":165},[159,5909,522],{"class":169},[159,5911,173],{"class":165},[14,5913,5914],{},"只要点击就输出结果为22,前边11被覆盖了",[151,5916,5918],{"className":520,"code":5917,"language":522,"meta":25,"style":25},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[49,5919,5920,5925,5930,5934,5939,5944],{"__ignoreMap":25},[159,5921,5922],{"class":161,"line":162},[159,5923,5924],{"class":165},"  btn.addEventListener('click', function () {\n",[159,5926,5927],{"class":161,"line":176},[159,5928,5929],{"class":165},"      alert(11)\n",[159,5931,5932],{"class":161,"line":203},[159,5933,4863],{"class":165},[159,5935,5936],{"class":161,"line":223},[159,5937,5938],{"class":165},"    btn.addEventListener('click', function () {\n",[159,5940,5941],{"class":161,"line":233},[159,5942,5943],{"class":165},"      alert(22)\n",[159,5945,5946],{"class":161,"line":239},[159,5947,4863],{"class":165},[14,5949,5950],{},"点击第一次输出11,第二次点击为22",[42,5952,5954],{"id":5953},"_325-事件类型","3.2.5 事件类型",[14,5956,5957],{},[23,5958],{"alt":25,"src":5959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[326,5961,5963],{"id":5962},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,5965,5966],{},"补充知识:",[14,5968,5969],{},"轮播图自动播放模块,可以使用",[14,5971,5972],{},"let timerId = setInterval(function () {",[14,5974,5975],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,5977,5978],{},"用js方法模拟进行点击事件,click必须加()",[14,5980,5981],{},"next.click()",[14,5983,5984],{},"}, 1000)",[14,5986,5987],{},[23,5988],{"alt":25,"src":5989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[151,5991,5993],{"className":153,"code":5992,"language":155,"meta":25,"style":25},"\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",[49,5994,5995,5999,6009,6023,6027,6035,6050,6073,6093,6106,6114,6119,6124,6128,6132,6137,6142,6147,6152,6156,6160,6165,6170,6175,6179,6183,6188,6192,6197,6202,6206,6210,6215,6220,6225,6230,6235,6239,6243,6248,6253,6258,6263,6268,6272,6276,6281,6286,6291,6296,6301,6306,6311,6316,6321,6326,6330,6334,6339,6344,6348,6352,6357,6362,6366,6371,6376,6380,6384,6389,6393,6398,6403,6407,6412,6416,6420,6425,6430,6435,6440,6445,6450,6455,6459,6463,6467,6472,6477,6482,6487,6491,6499,6507,6511,6519,6534,6548,6569,6577,6591,6604,6619,6638,6650,6662,6674,6686,6698,6710,6722,6730,6745,6770,6794,6802,6810,6818,6826,6831,6836,6841,6847,6853,6859,6865,6871,6877,6883,6888,6894,6900,6906,6912,6918,6924,6930,6936,6942,6947,6953,6959,6965,6971,6977,6983,6989,6995,7001,7007,7013,7019,7024,7029,7035,7041,7047,7052,7058,7064,7070,7076,7082,7087,7093,7098,7103,7108,7113,7118,7123,7129,7135,7141,7147,7153,7159,7165,7171,7177,7182,7187,7193,7199,7205,7211,7217,7222,7228,7234,7240,7246,7252,7258,7263,7268,7274,7279,7285,7290,7296,7302,7308,7314,7320,7326,7331,7340,7349,7354],{"__ignoreMap":25},[159,5996,5997],{"class":161,"line":162},[159,5998,590],{"emptyLinePlaceholder":589},[159,6000,6001,6003,6005,6007],{"class":161,"line":176},[159,6002,914],{"class":165},[159,6004,917],{"class":1142},[159,6006,920],{"class":1146},[159,6008,173],{"class":165},[159,6010,6011,6013,6015,6017,6019,6021],{"class":161,"line":203},[159,6012,166],{"class":165},[159,6014,522],{"class":169},[159,6016,931],{"class":185},[159,6018,189],{"class":165},[159,6020,936],{"class":192},[159,6022,173],{"class":165},[159,6024,6025],{"class":161,"line":223},[159,6026,590],{"emptyLinePlaceholder":589},[159,6028,6029,6031,6033],{"class":161,"line":233},[159,6030,166],{"class":165},[159,6032,949],{"class":169},[159,6034,173],{"class":165},[159,6036,6037,6039,6041,6043,6045,6047],{"class":161,"line":239},[159,6038,179],{"class":165},[159,6040,958],{"class":169},[159,6042,961],{"class":185},[159,6044,189],{"class":165},[159,6046,966],{"class":192},[159,6048,6049],{"class":165}," \u002F>\n",[159,6051,6052,6054,6056,6059,6061,6064,6066,6068,6071],{"class":161,"line":245},[159,6053,179],{"class":165},[159,6055,958],{"class":169},[159,6057,6058],{"class":185}," http-equiv",[159,6060,189],{"class":165},[159,6062,6063],{"class":192},"\"X-UA-Compatible\"",[159,6065,984],{"class":185},[159,6067,189],{"class":165},[159,6069,6070],{"class":192},"\"IE=edge\"",[159,6072,6049],{"class":165},[159,6074,6075,6077,6079,6081,6083,6085,6087,6089,6091],{"class":161,"line":251},[159,6076,179],{"class":165},[159,6078,958],{"class":169},[159,6080,547],{"class":185},[159,6082,189],{"class":165},[159,6084,981],{"class":192},[159,6086,984],{"class":185},[159,6088,189],{"class":165},[159,6090,989],{"class":192},[159,6092,6049],{"class":165},[159,6094,6095,6097,6099,6102,6104],{"class":161,"line":261},[159,6096,179],{"class":165},[159,6098,998],{"class":169},[159,6100,6101],{"class":165},">轮播图点击切换\u003C\u002F",[159,6103,998],{"class":169},[159,6105,173],{"class":165},[159,6107,6108,6110,6112],{"class":161,"line":603},[159,6109,179],{"class":165},[159,6111,1468],{"class":169},[159,6113,173],{"class":165},[159,6115,6116],{"class":161,"line":621},[159,6117,6118],{"class":165},"    * {\n",[159,6120,6121],{"class":161,"line":634},[159,6122,6123],{"class":165},"      box-sizing: border-box;\n",[159,6125,6126],{"class":161,"line":640},[159,6127,1508],{"class":165},[159,6129,6130],{"class":161,"line":1075},[159,6131,590],{"emptyLinePlaceholder":589},[159,6133,6134],{"class":161,"line":1081},[159,6135,6136],{"class":165},"    .slider {\n",[159,6138,6139],{"class":161,"line":1091},[159,6140,6141],{"class":165},"      width: 560px;\n",[159,6143,6144],{"class":161,"line":1100},[159,6145,6146],{"class":165},"      height: 400px;\n",[159,6148,6149],{"class":161,"line":1123},[159,6150,6151],{"class":165},"      overflow: hidden;\n",[159,6153,6154],{"class":161,"line":1132},[159,6155,1508],{"class":165},[159,6157,6158],{"class":161,"line":1139},[159,6159,590],{"emptyLinePlaceholder":589},[159,6161,6162],{"class":161,"line":1168},[159,6163,6164],{"class":165},"    .slider-wrapper {\n",[159,6166,6167],{"class":161,"line":1174},[159,6168,6169],{"class":165},"      width: 100%;\n",[159,6171,6172],{"class":161,"line":1180},[159,6173,6174],{"class":165},"      height: 320px;\n",[159,6176,6177],{"class":161,"line":1194},[159,6178,1508],{"class":165},[159,6180,6181],{"class":161,"line":1200},[159,6182,590],{"emptyLinePlaceholder":589},[159,6184,6185],{"class":161,"line":1221},[159,6186,6187],{"class":165},"    .slider-wrapper img {\n",[159,6189,6190],{"class":161,"line":1230},[159,6191,6169],{"class":165},[159,6193,6194],{"class":161,"line":1247},[159,6195,6196],{"class":165},"      height: 100%;\n",[159,6198,6199],{"class":161,"line":1265},[159,6200,6201],{"class":165},"      display: block;\n",[159,6203,6204],{"class":161,"line":1277},[159,6205,1508],{"class":165},[159,6207,6208],{"class":161,"line":1283},[159,6209,590],{"emptyLinePlaceholder":589},[159,6211,6212],{"class":161,"line":1294},[159,6213,6214],{"class":165},"    .slider-footer {\n",[159,6216,6217],{"class":161,"line":1305},[159,6218,6219],{"class":165},"      height: 80px;\n",[159,6221,6222],{"class":161,"line":1311},[159,6223,6224],{"class":165},"      background-color: rgb(100, 67, 68);\n",[159,6226,6227],{"class":161,"line":1322},[159,6228,6229],{"class":165},"      padding: 12px 12px 0 12px;\n",[159,6231,6232],{"class":161,"line":1327},[159,6233,6234],{"class":165},"      position: relative;\n",[159,6236,6237],{"class":161,"line":1336},[159,6238,1508],{"class":165},[159,6240,6241],{"class":161,"line":1345},[159,6242,590],{"emptyLinePlaceholder":589},[159,6244,6245],{"class":161,"line":1350},[159,6246,6247],{"class":165},"    .slider-footer .toggle {\n",[159,6249,6250],{"class":161,"line":1764},[159,6251,6252],{"class":165},"      position: absolute;\n",[159,6254,6255],{"class":161,"line":1769},[159,6256,6257],{"class":165},"      right: 0;\n",[159,6259,6260],{"class":161,"line":1777},[159,6261,6262],{"class":165},"      top: 12px;\n",[159,6264,6265],{"class":161,"line":1788},[159,6266,6267],{"class":165},"      display: flex;\n",[159,6269,6270],{"class":161,"line":1802},[159,6271,1508],{"class":165},[159,6273,6274],{"class":161,"line":1815},[159,6275,590],{"emptyLinePlaceholder":589},[159,6277,6278],{"class":161,"line":1828},[159,6279,6280],{"class":165},"    .slider-footer .toggle button {\n",[159,6282,6283],{"class":161,"line":1841},[159,6284,6285],{"class":165},"      margin-right: 12px;\n",[159,6287,6288],{"class":161,"line":1852},[159,6289,6290],{"class":165},"      width: 28px;\n",[159,6292,6293],{"class":161,"line":1866},[159,6294,6295],{"class":165},"      height: 28px;\n",[159,6297,6298],{"class":161,"line":1879},[159,6299,6300],{"class":165},"      appearance: none;\n",[159,6302,6303],{"class":161,"line":1884},[159,6304,6305],{"class":165},"      border: none;\n",[159,6307,6308],{"class":161,"line":1889},[159,6309,6310],{"class":165},"      background: rgba(255, 255, 255, 0.1);\n",[159,6312,6313],{"class":161,"line":1899},[159,6314,6315],{"class":165},"      color: #fff;\n",[159,6317,6318],{"class":161,"line":1912},[159,6319,6320],{"class":165},"      border-radius: 4px;\n",[159,6322,6323],{"class":161,"line":1925},[159,6324,6325],{"class":165},"      cursor: pointer;\n",[159,6327,6328],{"class":161,"line":1956},[159,6329,1508],{"class":165},[159,6331,6332],{"class":161,"line":1971},[159,6333,590],{"emptyLinePlaceholder":589},[159,6335,6336],{"class":161,"line":1976},[159,6337,6338],{"class":165},"    .slider-footer .toggle button:hover {\n",[159,6340,6341],{"class":161,"line":1981},[159,6342,6343],{"class":165},"      background: rgba(255, 255, 255, 0.2);\n",[159,6345,6346],{"class":161,"line":1989},[159,6347,1508],{"class":165},[159,6349,6350],{"class":161,"line":2001},[159,6351,590],{"emptyLinePlaceholder":589},[159,6353,6354],{"class":161,"line":2006},[159,6355,6356],{"class":165},"    .slider-footer p {\n",[159,6358,6359],{"class":161,"line":2015},[159,6360,6361],{"class":165},"      margin: 0;\n",[159,6363,6364],{"class":161,"line":2024},[159,6365,6315],{"class":165},[159,6367,6368],{"class":161,"line":2029},[159,6369,6370],{"class":165},"      font-size: 18px;\n",[159,6372,6373],{"class":161,"line":2038},[159,6374,6375],{"class":165},"      margin-bottom: 10px;\n",[159,6377,6378],{"class":161,"line":2053},[159,6379,1508],{"class":165},[159,6381,6382],{"class":161,"line":2070},[159,6383,590],{"emptyLinePlaceholder":589},[159,6385,6386],{"class":161,"line":2095},[159,6387,6388],{"class":165},"    .slider-indicator {\n",[159,6390,6391],{"class":161,"line":2104},[159,6392,6361],{"class":165},[159,6394,6395],{"class":161,"line":2120},[159,6396,6397],{"class":165},"      padding: 0;\n",[159,6399,6400],{"class":161,"line":2134},[159,6401,6402],{"class":165},"      list-style: none;\n",[159,6404,6405],{"class":161,"line":2143},[159,6406,6267],{"class":165},[159,6408,6409],{"class":161,"line":2165},[159,6410,6411],{"class":165},"      align-items: center;\n",[159,6413,6414],{"class":161,"line":2178},[159,6415,1508],{"class":165},[159,6417,6418],{"class":161,"line":2191},[159,6419,590],{"emptyLinePlaceholder":589},[159,6421,6422],{"class":161,"line":2204},[159,6423,6424],{"class":165},"    .slider-indicator li {\n",[159,6426,6427],{"class":161,"line":2217},[159,6428,6429],{"class":165},"      width: 8px;\n",[159,6431,6432],{"class":161,"line":2230},[159,6433,6434],{"class":165},"      height: 8px;\n",[159,6436,6437],{"class":161,"line":2243},[159,6438,6439],{"class":165},"      margin: 4px;\n",[159,6441,6442],{"class":161,"line":2256},[159,6443,6444],{"class":165},"      border-radius: 50%;\n",[159,6446,6447],{"class":161,"line":2266},[159,6448,6449],{"class":165},"      background: #fff;\n",[159,6451,6452],{"class":161,"line":2275},[159,6453,6454],{"class":165},"      opacity: 0.4;\n",[159,6456,6457],{"class":161,"line":2284},[159,6458,6325],{"class":165},[159,6460,6461],{"class":161,"line":2293},[159,6462,1508],{"class":165},[159,6464,6465],{"class":161,"line":2306},[159,6466,590],{"emptyLinePlaceholder":589},[159,6468,6469],{"class":161,"line":2330},[159,6470,6471],{"class":165},"    .slider-indicator li.active {\n",[159,6473,6474],{"class":161,"line":2350},[159,6475,6476],{"class":165},"      width: 12px;\n",[159,6478,6479],{"class":161,"line":2370},[159,6480,6481],{"class":165},"      height: 12px;\n",[159,6483,6484],{"class":161,"line":2390},[159,6485,6486],{"class":165},"      opacity: 1;\n",[159,6488,6489],{"class":161,"line":2410},[159,6490,1508],{"class":165},[159,6492,6493,6495,6497],{"class":161,"line":2430},[159,6494,254],{"class":165},[159,6496,1468],{"class":169},[159,6498,173],{"class":165},[159,6500,6501,6503,6505],{"class":161,"line":2450},[159,6502,264],{"class":165},[159,6504,949],{"class":169},[159,6506,173],{"class":165},[159,6508,6509],{"class":161,"line":2471},[159,6510,590],{"emptyLinePlaceholder":589},[159,6512,6513,6515,6517],{"class":161,"line":2477},[159,6514,166],{"class":165},[159,6516,170],{"class":169},[159,6518,173],{"class":165},[159,6520,6521,6523,6525,6527,6529,6532],{"class":161,"line":2498},[159,6522,179],{"class":165},[159,6524,182],{"class":169},[159,6526,186],{"class":185},[159,6528,189],{"class":165},[159,6530,6531],{"class":192},"\"slider\"",[159,6533,173],{"class":165},[159,6535,6536,6538,6540,6542,6544,6546],{"class":161,"line":2518},[159,6537,2056],{"class":165},[159,6539,182],{"class":169},[159,6541,186],{"class":185},[159,6543,189],{"class":165},[159,6545,2065],{"class":192},[159,6547,173],{"class":165},[159,6549,6550,6552,6554,6556,6558,6561,6563,6565,6567],{"class":161,"line":2539},[159,6551,2073],{"class":165},[159,6553,23],{"class":169},[159,6555,2078],{"class":185},[159,6557,189],{"class":165},[159,6559,6560],{"class":192},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[159,6562,2086],{"class":185},[159,6564,189],{"class":165},[159,6566,552],{"class":192},[159,6568,6049],{"class":165},[159,6570,6571,6573,6575],{"class":161,"line":2561},[159,6572,1084],{"class":165},[159,6574,182],{"class":169},[159,6576,173],{"class":165},[159,6578,6579,6581,6583,6585,6587,6589],{"class":161,"line":2573},[159,6580,2056],{"class":165},[159,6582,182],{"class":169},[159,6584,186],{"class":185},[159,6586,189],{"class":165},[159,6588,2115],{"class":192},[159,6590,173],{"class":165},[159,6592,6593,6595,6597,6600,6602],{"class":161,"line":2591},[159,6594,2073],{"class":165},[159,6596,14],{"class":169},[159,6598,6599],{"class":165},">对人类来说会不会太超前了？\u003C\u002F",[159,6601,14],{"class":169},[159,6603,173],{"class":165},[159,6605,6606,6608,6610,6612,6614,6617],{"class":161,"line":2602},[159,6607,2073],{"class":165},[159,6609,103],{"class":169},[159,6611,186],{"class":185},[159,6613,189],{"class":165},[159,6615,6616],{"class":192},"\"slider-indicator\"",[159,6618,173],{"class":165},[159,6620,6621,6623,6625,6627,6629,6632,6634,6636],{"class":161,"line":2613},[159,6622,2146],{"class":165},[159,6624,106],{"class":169},[159,6626,186],{"class":185},[159,6628,189],{"class":165},[159,6630,6631],{"class":192},"\"active\"",[159,6633,2158],{"class":165},[159,6635,106],{"class":169},[159,6637,173],{"class":165},[159,6639,6640,6642,6644,6646,6648],{"class":161,"line":2624},[159,6641,2146],{"class":165},[159,6643,106],{"class":169},[159,6645,2158],{"class":165},[159,6647,106],{"class":169},[159,6649,173],{"class":165},[159,6651,6652,6654,6656,6658,6660],{"class":161,"line":2630},[159,6653,2146],{"class":165},[159,6655,106],{"class":169},[159,6657,2158],{"class":165},[159,6659,106],{"class":169},[159,6661,173],{"class":165},[159,6663,6664,6666,6668,6670,6672],{"class":161,"line":2636},[159,6665,2146],{"class":165},[159,6667,106],{"class":169},[159,6669,2158],{"class":165},[159,6671,106],{"class":169},[159,6673,173],{"class":165},[159,6675,6676,6678,6680,6682,6684],{"class":161,"line":2642},[159,6677,2146],{"class":165},[159,6679,106],{"class":169},[159,6681,2158],{"class":165},[159,6683,106],{"class":169},[159,6685,173],{"class":165},[159,6687,6688,6690,6692,6694,6696],{"class":161,"line":2648},[159,6689,2146],{"class":165},[159,6691,106],{"class":169},[159,6693,2158],{"class":165},[159,6695,106],{"class":169},[159,6697,173],{"class":165},[159,6699,6700,6702,6704,6706,6708],{"class":161,"line":2674},[159,6701,2146],{"class":165},[159,6703,106],{"class":169},[159,6705,2158],{"class":165},[159,6707,106],{"class":169},[159,6709,173],{"class":165},[159,6711,6712,6714,6716,6718,6720],{"class":161,"line":2689},[159,6713,2146],{"class":165},[159,6715,106],{"class":169},[159,6717,2158],{"class":165},[159,6719,106],{"class":169},[159,6721,173],{"class":165},[159,6723,6724,6726,6728],{"class":161,"line":2694},[159,6725,2259],{"class":165},[159,6727,103],{"class":169},[159,6729,173],{"class":165},[159,6731,6732,6734,6736,6738,6740,6743],{"class":161,"line":2721},[159,6733,2073],{"class":165},[159,6735,182],{"class":169},[159,6737,186],{"class":185},[159,6739,189],{"class":165},[159,6741,6742],{"class":192},"\"toggle\"",[159,6744,173],{"class":165},[159,6746,6747,6749,6751,6753,6755,6758,6761,6764,6766,6768],{"class":161,"line":2726},[159,6748,2146],{"class":165},[159,6750,608],{"class":169},[159,6752,186],{"class":185},[159,6754,189],{"class":165},[159,6756,6757],{"class":192},"\"prev\"",[159,6759,6760],{"class":165},">",[159,6762,6763],{"class":1146},"&lt;",[159,6765,264],{"class":165},[159,6767,608],{"class":169},[159,6769,173],{"class":165},[159,6771,6772,6774,6776,6778,6780,6783,6785,6788,6790,6792],{"class":161,"line":2735},[159,6773,2146],{"class":165},[159,6775,608],{"class":169},[159,6777,186],{"class":185},[159,6779,189],{"class":165},[159,6781,6782],{"class":192},"\"next\"",[159,6784,6760],{"class":165},[159,6786,6787],{"class":1146},"&gt;",[159,6789,264],{"class":165},[159,6791,608],{"class":169},[159,6793,173],{"class":165},[159,6795,6796,6798,6800],{"class":161,"line":2744},[159,6797,2259],{"class":165},[159,6799,182],{"class":169},[159,6801,173],{"class":165},[159,6803,6804,6806,6808],{"class":161,"line":2753},[159,6805,1084],{"class":165},[159,6807,182],{"class":169},[159,6809,173],{"class":165},[159,6811,6812,6814,6816],{"class":161,"line":2758},[159,6813,254],{"class":165},[159,6815,182],{"class":169},[159,6817,173],{"class":165},[159,6819,6820,6822,6824],{"class":161,"line":3959},[159,6821,179],{"class":165},[159,6823,228],{"class":169},[159,6825,173],{"class":165},[159,6827,6828],{"class":161,"line":3968},[159,6829,6830],{"class":165},"    \u002F\u002F 1. 初始数据\n",[159,6832,6833],{"class":161,"line":3977},[159,6834,6835],{"class":165},"    const data = [\n",[159,6837,6838],{"class":161,"line":3982},[159,6839,6840],{"class":165},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[159,6842,6844],{"class":161,"line":6843},122,[159,6845,6846],{"class":165},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[159,6848,6850],{"class":161,"line":6849},123,[159,6851,6852],{"class":165},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[159,6854,6856],{"class":161,"line":6855},124,[159,6857,6858],{"class":165},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[159,6860,6862],{"class":161,"line":6861},125,[159,6863,6864],{"class":165},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[159,6866,6868],{"class":161,"line":6867},126,[159,6869,6870],{"class":165},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[159,6872,6874],{"class":161,"line":6873},127,[159,6875,6876],{"class":165},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[159,6878,6880],{"class":161,"line":6879},128,[159,6881,6882],{"class":165},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[159,6884,6886],{"class":161,"line":6885},129,[159,6887,2474],{"class":165},[159,6889,6891],{"class":161,"line":6890},130,[159,6892,6893],{"class":165},"    \u002F\u002F 获取元素\n",[159,6895,6897],{"class":161,"line":6896},131,[159,6898,6899],{"class":165},"    const img = document.querySelector('.slider-wrapper img')\n",[159,6901,6903],{"class":161,"line":6902},132,[159,6904,6905],{"class":165},"    const p = document.querySelector('.slider-footer p')\n",[159,6907,6909],{"class":161,"line":6908},133,[159,6910,6911],{"class":165},"    const footer = document.querySelector('.slider-footer')\n",[159,6913,6915],{"class":161,"line":6914},134,[159,6916,6917],{"class":165},"    \u002F\u002F 1. 右按钮业务\n",[159,6919,6921],{"class":161,"line":6920},135,[159,6922,6923],{"class":165},"    \u002F\u002F 1.1 获取右侧按钮 \n",[159,6925,6927],{"class":161,"line":6926},136,[159,6928,6929],{"class":165},"    const next = document.querySelector('.next')\n",[159,6931,6933],{"class":161,"line":6932},137,[159,6934,6935],{"class":165},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[159,6937,6939],{"class":161,"line":6938},138,[159,6940,6941],{"class":165},"    \u002F\u002F 1.2 注册点击事件\n",[159,6943,6945],{"class":161,"line":6944},139,[159,6946,590],{"emptyLinePlaceholder":589},[159,6948,6950],{"class":161,"line":6949},140,[159,6951,6952],{"class":165},"    next.addEventListener('click', function () {\n",[159,6954,6956],{"class":161,"line":6955},141,[159,6957,6958],{"class":165},"      \u002F\u002F console.log(11)\n",[159,6960,6962],{"class":161,"line":6961},142,[159,6963,6964],{"class":165},"      i++\n",[159,6966,6968],{"class":161,"line":6967},143,[159,6969,6970],{"class":165},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[159,6972,6974],{"class":161,"line":6973},144,[159,6975,6976],{"class":165},"      \u002F\u002F if (i >= 8) {\n",[159,6978,6980],{"class":161,"line":6979},145,[159,6981,6982],{"class":165},"      \u002F\u002F   i = 0\n",[159,6984,6986],{"class":161,"line":6985},146,[159,6987,6988],{"class":165},"      \u002F\u002F }\n",[159,6990,6992],{"class":161,"line":6991},147,[159,6993,6994],{"class":165},"      i = i >= data.length ? 0 : i\n",[159,6996,6998],{"class":161,"line":6997},148,[159,6999,7000],{"class":165},"      \u002F\u002F 1.3 得到对应的对象\n",[159,7002,7004],{"class":161,"line":7003},149,[159,7005,7006],{"class":165},"      \u002F\u002F console.log(data[i])\n",[159,7008,7010],{"class":161,"line":7009},150,[159,7011,7012],{"class":165},"      \u002F\u002F 调用函数\n",[159,7014,7016],{"class":161,"line":7015},151,[159,7017,7018],{"class":165},"      toggle()\n",[159,7020,7022],{"class":161,"line":7021},152,[159,7023,4863],{"class":165},[159,7025,7027],{"class":161,"line":7026},153,[159,7028,590],{"emptyLinePlaceholder":589},[159,7030,7032],{"class":161,"line":7031},154,[159,7033,7034],{"class":165},"    \u002F\u002F 2. 左侧按钮业务\n",[159,7036,7038],{"class":161,"line":7037},155,[159,7039,7040],{"class":165},"    \u002F\u002F 2.1 获取左侧按钮 \n",[159,7042,7044],{"class":161,"line":7043},156,[159,7045,7046],{"class":165},"    const prev = document.querySelector('.prev')\n",[159,7048,7050],{"class":161,"line":7049},157,[159,7051,6941],{"class":165},[159,7053,7055],{"class":161,"line":7054},158,[159,7056,7057],{"class":165},"    prev.addEventListener('click', function () {\n",[159,7059,7061],{"class":161,"line":7060},159,[159,7062,7063],{"class":165},"      i--\n",[159,7065,7067],{"class":161,"line":7066},160,[159,7068,7069],{"class":165},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[159,7071,7073],{"class":161,"line":7072},161,[159,7074,7075],{"class":165},"      \u002F\u002F if (i \u003C 0) {\n",[159,7077,7079],{"class":161,"line":7078},162,[159,7080,7081],{"class":165},"      \u002F\u002F   i = 7\n",[159,7083,7085],{"class":161,"line":7084},163,[159,7086,6988],{"class":165},[159,7088,7090],{"class":161,"line":7089},164,[159,7091,7092],{"class":165},"      i = i \u003C 0 ? data.length - 1 : i\n",[159,7094,7096],{"class":161,"line":7095},165,[159,7097,7000],{"class":165},[159,7099,7101],{"class":161,"line":7100},166,[159,7102,7006],{"class":165},[159,7104,7106],{"class":161,"line":7105},167,[159,7107,7012],{"class":165},[159,7109,7111],{"class":161,"line":7110},168,[159,7112,7018],{"class":165},[159,7114,7116],{"class":161,"line":7115},169,[159,7117,4863],{"class":165},[159,7119,7121],{"class":161,"line":7120},170,[159,7122,590],{"emptyLinePlaceholder":589},[159,7124,7126],{"class":161,"line":7125},171,[159,7127,7128],{"class":165},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[159,7130,7132],{"class":161,"line":7131},172,[159,7133,7134],{"class":165},"    function toggle() {\n",[159,7136,7138],{"class":161,"line":7137},173,[159,7139,7140],{"class":165},"      \u002F\u002F 1.4 渲染对应的数据\n",[159,7142,7144],{"class":161,"line":7143},174,[159,7145,7146],{"class":165},"      img.src = data[i].url\n",[159,7148,7150],{"class":161,"line":7149},175,[159,7151,7152],{"class":165},"      p.innerHTML = data[i].title\n",[159,7154,7156],{"class":161,"line":7155},176,[159,7157,7158],{"class":165},"      footer.style.backgroundColor = data[i].color\n",[159,7160,7162],{"class":161,"line":7161},177,[159,7163,7164],{"class":165},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[159,7166,7168],{"class":161,"line":7167},178,[159,7169,7170],{"class":165},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[159,7172,7174],{"class":161,"line":7173},179,[159,7175,7176],{"class":165},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[159,7178,7180],{"class":161,"line":7179},180,[159,7181,1508],{"class":165},[159,7183,7185],{"class":161,"line":7184},181,[159,7186,590],{"emptyLinePlaceholder":589},[159,7188,7190],{"class":161,"line":7189},182,[159,7191,7192],{"class":165},"    \u002F\u002F 3. 自动播放模块\n",[159,7194,7196],{"class":161,"line":7195},183,[159,7197,7198],{"class":165},"    let timerId = setInterval(function () {\n",[159,7200,7202],{"class":161,"line":7201},184,[159,7203,7204],{"class":165},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[159,7206,7208],{"class":161,"line":7207},185,[159,7209,7210],{"class":165},"      next.click()\n",[159,7212,7214],{"class":161,"line":7213},186,[159,7215,7216],{"class":165},"    }, 1000)\n",[159,7218,7220],{"class":161,"line":7219},187,[159,7221,590],{"emptyLinePlaceholder":589},[159,7223,7225],{"class":161,"line":7224},188,[159,7226,7227],{"class":165},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[159,7229,7231],{"class":161,"line":7230},189,[159,7232,7233],{"class":165},"    const slider = document.querySelector('.slider')\n",[159,7235,7237],{"class":161,"line":7236},190,[159,7238,7239],{"class":165},"    \u002F\u002F 注册事件\n",[159,7241,7243],{"class":161,"line":7242},191,[159,7244,7245],{"class":165},"    slider.addEventListener('mouseenter', function () {\n",[159,7247,7249],{"class":161,"line":7248},192,[159,7250,7251],{"class":165},"      \u002F\u002F 停止定时器\n",[159,7253,7255],{"class":161,"line":7254},193,[159,7256,7257],{"class":165},"      clearInterval(timerId)\n",[159,7259,7261],{"class":161,"line":7260},194,[159,7262,4863],{"class":165},[159,7264,7266],{"class":161,"line":7265},195,[159,7267,590],{"emptyLinePlaceholder":589},[159,7269,7271],{"class":161,"line":7270},196,[159,7272,7273],{"class":165},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[159,7275,7277],{"class":161,"line":7276},197,[159,7278,7239],{"class":165},[159,7280,7282],{"class":161,"line":7281},198,[159,7283,7284],{"class":165},"    slider.addEventListener('mouseleave', function () {\n",[159,7286,7288],{"class":161,"line":7287},199,[159,7289,7251],{"class":165},[159,7291,7293],{"class":161,"line":7292},200,[159,7294,7295],{"class":165},"      if (timerId) clearInterval(timerId)\n",[159,7297,7299],{"class":161,"line":7298},201,[159,7300,7301],{"class":165},"      \u002F\u002F 开启定时器\n",[159,7303,7305],{"class":161,"line":7304},202,[159,7306,7307],{"class":165},"      timerId = setInterval(function () {\n",[159,7309,7311],{"class":161,"line":7310},203,[159,7312,7313],{"class":165},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[159,7315,7317],{"class":161,"line":7316},204,[159,7318,7319],{"class":165},"        next.click()\n",[159,7321,7323],{"class":161,"line":7322},205,[159,7324,7325],{"class":165},"      }, 1000)\n",[159,7327,7329],{"class":161,"line":7328},206,[159,7330,4863],{"class":165},[159,7332,7334,7336,7338],{"class":161,"line":7333},207,[159,7335,254],{"class":165},[159,7337,228],{"class":169},[159,7339,173],{"class":165},[159,7341,7343,7345,7347],{"class":161,"line":7342},208,[159,7344,264],{"class":165},[159,7346,170],{"class":169},[159,7348,173],{"class":165},[159,7350,7352],{"class":161,"line":7351},209,[159,7353,590],{"emptyLinePlaceholder":589},[159,7355,7357,7359,7361],{"class":161,"line":7356},210,[159,7358,264],{"class":165},[159,7360,522],{"class":169},[159,7362,173],{"class":165},[326,7364,7366],{"id":7365},"_3252-焦点事件","3.2.5.2 焦点事件",[14,7368,7369],{},"小米搜索框案例：",[151,7371,7373],{"className":520,"code":7372,"language":522,"meta":25,"style":25},"\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",[49,7374,7375,7385,7399,7403,7411,7425,7445,7465,7477,7485,7492,7503,7514,7526,7531,7535,7542,7546,7557,7561,7565,7572,7583,7597,7611,7615,7619,7628,7640,7654,7669,7683,7696,7715,7726,7730,7734,7743,7760,7764,7768,7775,7786,7796,7807,7820,7832,7848,7859,7871,7875,7879,7888,7899,7917,7930,7942,7953,7957,7961,7972,7984,7988,7996,8000,8008,8012,8020,8035,8058,8073,8105,8132,8159,8186,8213,8240,8267,8276,8284,8292,8297,8317,8337,8342,8347,8365,8370,8380,8385,8399,8404,8409,8426,8435,8447,8451,8459,8467,8471],{"__ignoreMap":25},[159,7376,7377,7379,7381,7383],{"class":161,"line":162},[159,7378,914],{"class":165},[159,7380,917],{"class":169},[159,7382,920],{"class":185},[159,7384,173],{"class":165},[159,7386,7387,7389,7391,7393,7395,7397],{"class":161,"line":176},[159,7388,166],{"class":165},[159,7390,522],{"class":169},[159,7392,931],{"class":185},[159,7394,189],{"class":165},[159,7396,936],{"class":192},[159,7398,173],{"class":165},[159,7400,7401],{"class":161,"line":203},[159,7402,590],{"emptyLinePlaceholder":589},[159,7404,7405,7407,7409],{"class":161,"line":223},[159,7406,166],{"class":165},[159,7408,949],{"class":169},[159,7410,173],{"class":165},[159,7412,7413,7415,7417,7419,7421,7423],{"class":161,"line":233},[159,7414,2056],{"class":165},[159,7416,958],{"class":169},[159,7418,961],{"class":185},[159,7420,189],{"class":165},[159,7422,966],{"class":192},[159,7424,173],{"class":165},[159,7426,7427,7429,7431,7433,7435,7437,7439,7441,7443],{"class":161,"line":239},[159,7428,2056],{"class":165},[159,7430,958],{"class":169},[159,7432,6058],{"class":185},[159,7434,189],{"class":165},[159,7436,6063],{"class":192},[159,7438,984],{"class":185},[159,7440,189],{"class":165},[159,7442,6070],{"class":192},[159,7444,173],{"class":165},[159,7446,7447,7449,7451,7453,7455,7457,7459,7461,7463],{"class":161,"line":245},[159,7448,2056],{"class":165},[159,7450,958],{"class":169},[159,7452,547],{"class":185},[159,7454,189],{"class":165},[159,7456,981],{"class":192},[159,7458,984],{"class":185},[159,7460,189],{"class":165},[159,7462,989],{"class":192},[159,7464,173],{"class":165},[159,7466,7467,7469,7471,7473,7475],{"class":161,"line":251},[159,7468,2056],{"class":165},[159,7470,998],{"class":169},[159,7472,1001],{"class":165},[159,7474,998],{"class":169},[159,7476,173],{"class":165},[159,7478,7479,7481,7483],{"class":161,"line":261},[159,7480,2056],{"class":165},[159,7482,1468],{"class":169},[159,7484,173],{"class":165},[159,7486,7487,7490],{"class":161,"line":603},[159,7488,7489],{"class":169},"        *",[159,7491,1478],{"class":165},[159,7493,7494,7497,7499,7501],{"class":161,"line":621},[159,7495,7496],{"class":1146},"            margin",[159,7498,1486],{"class":165},[159,7500,1489],{"class":1146},[159,7502,1492],{"class":165},[159,7504,7505,7508,7510,7512],{"class":161,"line":634},[159,7506,7507],{"class":1146},"            padding",[159,7509,1486],{"class":165},[159,7511,1489],{"class":1146},[159,7513,1492],{"class":165},[159,7515,7516,7519,7521,7524],{"class":161,"line":640},[159,7517,7518],{"class":1146},"            box-sizing",[159,7520,1486],{"class":165},[159,7522,7523],{"class":1146},"border-box",[159,7525,1492],{"class":165},[159,7527,7528],{"class":161,"line":1075},[159,7529,7530],{"class":165},"        }\n",[159,7532,7533],{"class":161,"line":1081},[159,7534,590],{"emptyLinePlaceholder":589},[159,7536,7537,7540],{"class":161,"line":1091},[159,7538,7539],{"class":169},"        ul",[159,7541,1478],{"class":165},[159,7543,7544],{"class":161,"line":1100},[159,7545,590],{"emptyLinePlaceholder":589},[159,7547,7548,7551,7553,7555],{"class":161,"line":1123},[159,7549,7550],{"class":1146},"            list-style",[159,7552,1486],{"class":165},[159,7554,1529],{"class":1146},[159,7556,1492],{"class":165},[159,7558,7559],{"class":161,"line":1132},[159,7560,7530],{"class":165},[159,7562,7563],{"class":161,"line":1139},[159,7564,590],{"emptyLinePlaceholder":589},[159,7566,7567,7570],{"class":161,"line":1168},[159,7568,7569],{"class":185},"        .mi",[159,7571,1478],{"class":165},[159,7573,7574,7577,7579,7581],{"class":161,"line":1174},[159,7575,7576],{"class":1146},"            position",[159,7578,1486],{"class":165},[159,7580,1556],{"class":1146},[159,7582,1492],{"class":165},[159,7584,7585,7588,7590,7593,7595],{"class":161,"line":1180},[159,7586,7587],{"class":1146},"            width",[159,7589,1486],{"class":165},[159,7591,7592],{"class":1146},"223",[159,7594,1571],{"class":1142},[159,7596,1492],{"class":165},[159,7598,7599,7601,7603,7605,7607,7609],{"class":161,"line":1194},[159,7600,7496],{"class":1146},[159,7602,1486],{"class":165},[159,7604,1596],{"class":1146},[159,7606,1571],{"class":1142},[159,7608,1601],{"class":1146},[159,7610,1492],{"class":165},[159,7612,7613],{"class":161,"line":1200},[159,7614,7530],{"class":165},[159,7616,7617],{"class":161,"line":1221},[159,7618,590],{"emptyLinePlaceholder":589},[159,7620,7621,7623,7626],{"class":161,"line":1230},[159,7622,7569],{"class":185},[159,7624,7625],{"class":169}," input",[159,7627,1478],{"class":165},[159,7629,7630,7632,7634,7636,7638],{"class":161,"line":1247},[159,7631,7587],{"class":1146},[159,7633,1486],{"class":165},[159,7635,7592],{"class":1146},[159,7637,1571],{"class":1142},[159,7639,1492],{"class":165},[159,7641,7642,7645,7647,7650,7652],{"class":161,"line":1265},[159,7643,7644],{"class":1146},"            height",[159,7646,1486],{"class":165},[159,7648,7649],{"class":1146},"48",[159,7651,1571],{"class":1142},[159,7653,1492],{"class":165},[159,7655,7656,7658,7660,7662,7665,7667],{"class":161,"line":1277},[159,7657,7507],{"class":1146},[159,7659,1486],{"class":165},[159,7661,1489],{"class":1146},[159,7663,7664],{"class":1146}," 10",[159,7666,1571],{"class":1142},[159,7668,1492],{"class":165},[159,7670,7671,7674,7676,7679,7681],{"class":161,"line":1283},[159,7672,7673],{"class":1146},"            font-size",[159,7675,1486],{"class":165},[159,7677,7678],{"class":1146},"14",[159,7680,1571],{"class":1142},[159,7682,1492],{"class":165},[159,7684,7685,7688,7690,7692,7694],{"class":161,"line":1294},[159,7686,7687],{"class":1146},"            line-height",[159,7689,1486],{"class":165},[159,7691,7649],{"class":1146},[159,7693,1571],{"class":1142},[159,7695,1492],{"class":165},[159,7697,7698,7701,7703,7705,7707,7710,7713],{"class":161,"line":1305},[159,7699,7700],{"class":1146},"            border",[159,7702,1486],{"class":165},[159,7704,4932],{"class":1146},[159,7706,1571],{"class":1142},[159,7708,7709],{"class":1146}," solid",[159,7711,7712],{"class":1146}," #e0e0e0",[159,7714,1492],{"class":165},[159,7716,7717,7720,7722,7724],{"class":161,"line":1311},[159,7718,7719],{"class":1146},"            outline",[159,7721,1486],{"class":165},[159,7723,1529],{"class":1146},[159,7725,1492],{"class":165},[159,7727,7728],{"class":161,"line":1322},[159,7729,7530],{"class":165},[159,7731,7732],{"class":161,"line":1327},[159,7733,590],{"emptyLinePlaceholder":589},[159,7735,7736,7738,7741],{"class":161,"line":1336},[159,7737,7569],{"class":185},[159,7739,7740],{"class":185}," .search",[159,7742,1478],{"class":165},[159,7744,7745,7747,7749,7751,7753,7755,7758],{"class":161,"line":1345},[159,7746,7700],{"class":1146},[159,7748,1486],{"class":165},[159,7750,4932],{"class":1146},[159,7752,1571],{"class":1142},[159,7754,7709],{"class":1146},[159,7756,7757],{"class":1146}," #ff6700",[159,7759,1492],{"class":165},[159,7761,7762],{"class":161,"line":1350},[159,7763,7530],{"class":165},[159,7765,7766],{"class":161,"line":1764},[159,7767,590],{"emptyLinePlaceholder":589},[159,7769,7770,7773],{"class":161,"line":1769},[159,7771,7772],{"class":185},"        .result-list",[159,7774,1478],{"class":165},[159,7776,7777,7780,7782,7784],{"class":161,"line":1777},[159,7778,7779],{"class":1146},"            display",[159,7781,1486],{"class":165},[159,7783,1529],{"class":1146},[159,7785,1492],{"class":165},[159,7787,7788,7790,7792,7794],{"class":161,"line":1788},[159,7789,7576],{"class":1146},[159,7791,1486],{"class":165},[159,7793,1627],{"class":1146},[159,7795,1492],{"class":165},[159,7797,7798,7801,7803,7805],{"class":161,"line":1802},[159,7799,7800],{"class":1146},"            left",[159,7802,1486],{"class":165},[159,7804,1489],{"class":1146},[159,7806,1492],{"class":165},[159,7808,7809,7812,7814,7816,7818],{"class":161,"line":1815},[159,7810,7811],{"class":1146},"            top",[159,7813,1486],{"class":165},[159,7815,7649],{"class":1146},[159,7817,1571],{"class":1142},[159,7819,1492],{"class":165},[159,7821,7822,7824,7826,7828,7830],{"class":161,"line":1828},[159,7823,7587],{"class":1146},[159,7825,1486],{"class":165},[159,7827,7592],{"class":1146},[159,7829,1571],{"class":1142},[159,7831,1492],{"class":165},[159,7833,7834,7836,7838,7840,7842,7844,7846],{"class":161,"line":1841},[159,7835,7700],{"class":1146},[159,7837,1486],{"class":165},[159,7839,4932],{"class":1146},[159,7841,1571],{"class":1142},[159,7843,7709],{"class":1146},[159,7845,7757],{"class":1146},[159,7847,1492],{"class":165},[159,7849,7850,7853,7855,7857],{"class":161,"line":1852},[159,7851,7852],{"class":1146},"            border-top",[159,7854,1486],{"class":165},[159,7856,1489],{"class":1146},[159,7858,1492],{"class":165},[159,7860,7861,7864,7866,7869],{"class":161,"line":1866},[159,7862,7863],{"class":1146},"            background",[159,7865,1486],{"class":165},[159,7867,7868],{"class":1146},"#fff",[159,7870,1492],{"class":165},[159,7872,7873],{"class":161,"line":1879},[159,7874,7530],{"class":165},[159,7876,7877],{"class":161,"line":1884},[159,7878,590],{"emptyLinePlaceholder":589},[159,7880,7881,7883,7886],{"class":161,"line":1889},[159,7882,7772],{"class":185},[159,7884,7885],{"class":169}," a",[159,7887,1478],{"class":165},[159,7889,7890,7892,7894,7897],{"class":161,"line":1899},[159,7891,7779],{"class":1146},[159,7893,1486],{"class":165},[159,7895,7896],{"class":1146},"block",[159,7898,1492],{"class":165},[159,7900,7901,7903,7905,7908,7910,7913,7915],{"class":161,"line":1912},[159,7902,7507],{"class":1146},[159,7904,1486],{"class":165},[159,7906,7907],{"class":1146},"6",[159,7909,1571],{"class":1142},[159,7911,7912],{"class":1146}," 15",[159,7914,1571],{"class":1142},[159,7916,1492],{"class":165},[159,7918,7919,7921,7923,7926,7928],{"class":161,"line":1925},[159,7920,7673],{"class":1146},[159,7922,1486],{"class":165},[159,7924,7925],{"class":1146},"12",[159,7927,1571],{"class":1142},[159,7929,1492],{"class":165},[159,7931,7932,7935,7937,7940],{"class":161,"line":1956},[159,7933,7934],{"class":1146},"            color",[159,7936,1486],{"class":165},[159,7938,7939],{"class":1146},"#424242",[159,7941,1492],{"class":165},[159,7943,7944,7947,7949,7951],{"class":161,"line":1971},[159,7945,7946],{"class":1146},"            text-decoration",[159,7948,1486],{"class":165},[159,7950,1529],{"class":1146},[159,7952,1492],{"class":165},[159,7954,7955],{"class":161,"line":1976},[159,7956,7530],{"class":165},[159,7958,7959],{"class":161,"line":1981},[159,7960,590],{"emptyLinePlaceholder":589},[159,7962,7963,7965,7967,7970],{"class":161,"line":1989},[159,7964,7772],{"class":185},[159,7966,7885],{"class":169},[159,7968,7969],{"class":185},":hover",[159,7971,1478],{"class":165},[159,7973,7974,7977,7979,7982],{"class":161,"line":2001},[159,7975,7976],{"class":1146},"            background-color",[159,7978,1486],{"class":165},[159,7980,7981],{"class":1146},"#eee",[159,7983,1492],{"class":165},[159,7985,7986],{"class":161,"line":2006},[159,7987,7530],{"class":165},[159,7989,7990,7992,7994],{"class":161,"line":2015},[159,7991,1084],{"class":165},[159,7993,1468],{"class":169},[159,7995,173],{"class":165},[159,7997,7998],{"class":161,"line":2024},[159,7999,590],{"emptyLinePlaceholder":589},[159,8001,8002,8004,8006],{"class":161,"line":2029},[159,8003,264],{"class":165},[159,8005,949],{"class":169},[159,8007,173],{"class":165},[159,8009,8010],{"class":161,"line":2038},[159,8011,590],{"emptyLinePlaceholder":589},[159,8013,8014,8016,8018],{"class":161,"line":2053},[159,8015,166],{"class":165},[159,8017,170],{"class":169},[159,8019,173],{"class":165},[159,8021,8022,8024,8026,8028,8030,8033],{"class":161,"line":2070},[159,8023,2056],{"class":165},[159,8025,182],{"class":169},[159,8027,186],{"class":185},[159,8029,189],{"class":165},[159,8031,8032],{"class":192},"\"mi\"",[159,8034,173],{"class":165},[159,8036,8037,8039,8041,8043,8045,8048,8051,8053,8056],{"class":161,"line":2095},[159,8038,2146],{"class":165},[159,8040,536],{"class":169},[159,8042,539],{"class":185},[159,8044,189],{"class":165},[159,8046,8047],{"class":192},"\"search\"",[159,8049,8050],{"class":185}," placeholder",[159,8052,189],{"class":165},[159,8054,8055],{"class":192},"\"小米笔记本\"",[159,8057,173],{"class":165},[159,8059,8060,8062,8064,8066,8068,8071],{"class":161,"line":2104},[159,8061,2146],{"class":165},[159,8063,103],{"class":169},[159,8065,186],{"class":185},[159,8067,189],{"class":165},[159,8069,8070],{"class":192},"\"result-list\"",[159,8072,173],{"class":165},[159,8074,8075,8078,8080,8083,8086,8089,8091,8094,8097,8099,8101,8103],{"class":161,"line":2120},[159,8076,8077],{"class":165},"            \u003C",[159,8079,106],{"class":169},[159,8081,8082],{"class":165},">\u003C",[159,8084,8085],{"class":169},"a",[159,8087,8088],{"class":185}," href",[159,8090,189],{"class":165},[159,8092,8093],{"class":192},"\"#\"",[159,8095,8096],{"class":165},">全部商品\u003C\u002F",[159,8098,8085],{"class":169},[159,8100,2158],{"class":165},[159,8102,106],{"class":169},[159,8104,173],{"class":165},[159,8106,8107,8109,8111,8113,8115,8117,8119,8121,8124,8126,8128,8130],{"class":161,"line":2134},[159,8108,8077],{"class":165},[159,8110,106],{"class":169},[159,8112,8082],{"class":165},[159,8114,8085],{"class":169},[159,8116,8088],{"class":185},[159,8118,189],{"class":165},[159,8120,8093],{"class":192},[159,8122,8123],{"class":165},">小米11\u003C\u002F",[159,8125,8085],{"class":169},[159,8127,2158],{"class":165},[159,8129,106],{"class":169},[159,8131,173],{"class":165},[159,8133,8134,8136,8138,8140,8142,8144,8146,8148,8151,8153,8155,8157],{"class":161,"line":2143},[159,8135,8077],{"class":165},[159,8137,106],{"class":169},[159,8139,8082],{"class":165},[159,8141,8085],{"class":169},[159,8143,8088],{"class":185},[159,8145,189],{"class":165},[159,8147,8093],{"class":192},[159,8149,8150],{"class":165},">小米10S\u003C\u002F",[159,8152,8085],{"class":169},[159,8154,2158],{"class":165},[159,8156,106],{"class":169},[159,8158,173],{"class":165},[159,8160,8161,8163,8165,8167,8169,8171,8173,8175,8178,8180,8182,8184],{"class":161,"line":2165},[159,8162,8077],{"class":165},[159,8164,106],{"class":169},[159,8166,8082],{"class":165},[159,8168,8085],{"class":169},[159,8170,8088],{"class":185},[159,8172,189],{"class":165},[159,8174,8093],{"class":192},[159,8176,8177],{"class":165},">小米笔记本\u003C\u002F",[159,8179,8085],{"class":169},[159,8181,2158],{"class":165},[159,8183,106],{"class":169},[159,8185,173],{"class":165},[159,8187,8188,8190,8192,8194,8196,8198,8200,8202,8205,8207,8209,8211],{"class":161,"line":2178},[159,8189,8077],{"class":165},[159,8191,106],{"class":169},[159,8193,8082],{"class":165},[159,8195,8085],{"class":169},[159,8197,8088],{"class":185},[159,8199,189],{"class":165},[159,8201,8093],{"class":192},[159,8203,8204],{"class":165},">小米手机\u003C\u002F",[159,8206,8085],{"class":169},[159,8208,2158],{"class":165},[159,8210,106],{"class":169},[159,8212,173],{"class":165},[159,8214,8215,8217,8219,8221,8223,8225,8227,8229,8232,8234,8236,8238],{"class":161,"line":2191},[159,8216,8077],{"class":165},[159,8218,106],{"class":169},[159,8220,8082],{"class":165},[159,8222,8085],{"class":169},[159,8224,8088],{"class":185},[159,8226,189],{"class":165},[159,8228,8093],{"class":192},[159,8230,8231],{"class":165},">黑鲨4\u003C\u002F",[159,8233,8085],{"class":169},[159,8235,2158],{"class":165},[159,8237,106],{"class":169},[159,8239,173],{"class":165},[159,8241,8242,8244,8246,8248,8250,8252,8254,8256,8259,8261,8263,8265],{"class":161,"line":2204},[159,8243,8077],{"class":165},[159,8245,106],{"class":169},[159,8247,8082],{"class":165},[159,8249,8085],{"class":169},[159,8251,8088],{"class":185},[159,8253,189],{"class":165},[159,8255,8093],{"class":192},[159,8257,8258],{"class":165},">空调\u003C\u002F",[159,8260,8085],{"class":169},[159,8262,2158],{"class":165},[159,8264,106],{"class":169},[159,8266,173],{"class":165},[159,8268,8269,8272,8274],{"class":161,"line":2217},[159,8270,8271],{"class":165},"        \u003C\u002F",[159,8273,103],{"class":169},[159,8275,173],{"class":165},[159,8277,8278,8280,8282],{"class":161,"line":2230},[159,8279,1084],{"class":165},[159,8281,182],{"class":169},[159,8283,173],{"class":165},[159,8285,8286,8288,8290],{"class":161,"line":2243},[159,8287,2056],{"class":165},[159,8289,228],{"class":169},[159,8291,173],{"class":165},[159,8293,8294],{"class":161,"line":2256},[159,8295,8296],{"class":1135},"        \u002F\u002F 1. 获取元素\n",[159,8298,8299,8302,8304,8306,8308,8310,8312,8315],{"class":161,"line":2266},[159,8300,8301],{"class":1142},"        const",[159,8303,7625],{"class":1146},[159,8305,1150],{"class":1142},[159,8307,1153],{"class":165},[159,8309,1156],{"class":185},[159,8311,1159],{"class":165},[159,8313,8314],{"class":192},"'[type=search]'",[159,8316,1165],{"class":165},[159,8318,8319,8321,8324,8326,8328,8330,8332,8335],{"class":161,"line":2275},[159,8320,8301],{"class":1142},[159,8322,8323],{"class":1146}," ul",[159,8325,1150],{"class":1142},[159,8327,1153],{"class":165},[159,8329,1156],{"class":185},[159,8331,1159],{"class":165},[159,8333,8334],{"class":192},"'.result-list'",[159,8336,1165],{"class":165},[159,8338,8339],{"class":161,"line":2284},[159,8340,8341],{"class":1135},"        \u002F\u002F console.log(input)\n",[159,8343,8344],{"class":161,"line":2293},[159,8345,8346],{"class":1135},"        \u002F\u002F 2. 监听事件 获得焦点\n",[159,8348,8349,8352,8354,8356,8359,8361,8363],{"class":161,"line":2306},[159,8350,8351],{"class":165},"        input.",[159,8353,4724],{"class":185},[159,8355,1159],{"class":165},[159,8357,8358],{"class":192},"'focus'",[159,8360,1939],{"class":165},[159,8362,1215],{"class":1142},[159,8364,1218],{"class":165},[159,8366,8367],{"class":161,"line":2330},[159,8368,8369],{"class":1135},"            \u002F\u002F ul显示\n",[159,8371,8372,8375,8377],{"class":161,"line":2350},[159,8373,8374],{"class":165},"            ul.style.display ",[159,8376,189],{"class":1142},[159,8378,8379],{"class":192}," 'block'\n",[159,8381,8382],{"class":161,"line":2370},[159,8383,8384],{"class":1135},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[159,8386,8387,8390,8392,8394,8397],{"class":161,"line":2390},[159,8388,8389],{"class":165},"            input.classList.",[159,8391,2680],{"class":185},[159,8393,1159],{"class":165},[159,8395,8396],{"class":192},"'search'",[159,8398,1165],{"class":165},[159,8400,8401],{"class":161,"line":2410},[159,8402,8403],{"class":165},"        })\n",[159,8405,8406],{"class":161,"line":2430},[159,8407,8408],{"class":1135},"        \u002F\u002F 3. 监听事件 失去焦点\n",[159,8410,8411,8413,8415,8417,8420,8422,8424],{"class":161,"line":2450},[159,8412,8351],{"class":165},[159,8414,4724],{"class":185},[159,8416,1159],{"class":165},[159,8418,8419],{"class":192},"'blur'",[159,8421,1939],{"class":165},[159,8423,1215],{"class":1142},[159,8425,1218],{"class":165},[159,8427,8428,8430,8432],{"class":161,"line":2471},[159,8429,8374],{"class":165},[159,8431,189],{"class":1142},[159,8433,8434],{"class":192}," 'none'\n",[159,8436,8437,8439,8441,8443,8445],{"class":161,"line":2477},[159,8438,8389],{"class":165},[159,8440,3903],{"class":185},[159,8442,1159],{"class":165},[159,8444,8396],{"class":192},[159,8446,1165],{"class":165},[159,8448,8449],{"class":161,"line":2498},[159,8450,8403],{"class":165},[159,8452,8453,8455,8457],{"class":161,"line":2518},[159,8454,1084],{"class":165},[159,8456,228],{"class":169},[159,8458,173],{"class":165},[159,8460,8461,8463,8465],{"class":161,"line":2539},[159,8462,264],{"class":165},[159,8464,170],{"class":169},[159,8466,173],{"class":165},[159,8468,8469],{"class":161,"line":2561},[159,8470,590],{"emptyLinePlaceholder":589},[159,8472,8473,8475,8477],{"class":161,"line":2573},[159,8474,264],{"class":165},[159,8476,522],{"class":169},[159,8478,173],{"class":165},[326,8480,8482],{"id":8481},"_3253-键盘事件","3.2.5.3 键盘事件",[14,8484,8485],{},"评论字数统计案例",[14,8487,8488],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,8490,8491],{},"牢记focus伪类选择器",[958,8493],{"charSet":8494},"UTF-8",[958,8496],{"name":8497,"content":8498},"viewport","width=device-width, initial-scale=1.0",[998,8500,8501],{},"Document",[1468,8503,8504],{},"\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",[536,8506],{"type":8507},"text",[103,8509,8510,8513],{},[106,8511,8512],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[106,8514,8515],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[151,8517,8519],{"className":520,"code":8518,"language":522,"meta":25,"style":25},"\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",[49,8520,8521,8531,8545,8549,8557,8571,8591,8611,8624,8632,8639,8653,8667,8677,8688,8692,8696,8703,8715,8727,8739,8751,8783,8796,8800,8804,8813,8824,8836,8847,8858,8871,8882,8894,8912,8925,8929,8933,8944,8955,8965,8977,8981,8985,8993,9004,9014,9025,9037,9050,9063,9075,9079,9083,9092,9105,9116,9129,9140,9154,9158,9162,9169,9181,9193,9203,9207,9211,9220,9232,9242,9246,9250,9261,9271,9290,9303,9307,9311,9321,9331,9335,9339,9350,9361,9373,9385,9389,9393,9404,9415,9429,9433,9437,9448,9458,9470,9474,9482,9490,9494,9502,9517,9536,9576,9589,9597,9611,9631,9639,9654,9677,9695,9710,9730,9750,9770,9778,9786,9794,9802,9822,9842,9847,9864,9873,9877,9882,9898,9906,9910,9915,9932,9937,9963,9967,9971,9976,9981,9989,9997,10001],{"__ignoreMap":25},[159,8522,8523,8525,8527,8529],{"class":161,"line":162},[159,8524,914],{"class":165},[159,8526,917],{"class":169},[159,8528,920],{"class":185},[159,8530,173],{"class":165},[159,8532,8533,8535,8537,8539,8541,8543],{"class":161,"line":176},[159,8534,166],{"class":165},[159,8536,522],{"class":169},[159,8538,931],{"class":185},[159,8540,189],{"class":165},[159,8542,936],{"class":192},[159,8544,173],{"class":165},[159,8546,8547],{"class":161,"line":203},[159,8548,590],{"emptyLinePlaceholder":589},[159,8550,8551,8553,8555],{"class":161,"line":223},[159,8552,166],{"class":165},[159,8554,949],{"class":169},[159,8556,173],{"class":165},[159,8558,8559,8561,8563,8565,8567,8569],{"class":161,"line":233},[159,8560,179],{"class":165},[159,8562,958],{"class":169},[159,8564,961],{"class":185},[159,8566,189],{"class":165},[159,8568,966],{"class":192},[159,8570,173],{"class":165},[159,8572,8573,8575,8577,8579,8581,8583,8585,8587,8589],{"class":161,"line":239},[159,8574,179],{"class":165},[159,8576,958],{"class":169},[159,8578,6058],{"class":185},[159,8580,189],{"class":165},[159,8582,6063],{"class":192},[159,8584,984],{"class":185},[159,8586,189],{"class":165},[159,8588,6070],{"class":192},[159,8590,173],{"class":165},[159,8592,8593,8595,8597,8599,8601,8603,8605,8607,8609],{"class":161,"line":245},[159,8594,179],{"class":165},[159,8596,958],{"class":169},[159,8598,547],{"class":185},[159,8600,189],{"class":165},[159,8602,981],{"class":192},[159,8604,984],{"class":185},[159,8606,189],{"class":165},[159,8608,989],{"class":192},[159,8610,173],{"class":165},[159,8612,8613,8615,8617,8620,8622],{"class":161,"line":251},[159,8614,179],{"class":165},[159,8616,998],{"class":169},[159,8618,8619],{"class":165},">评论回车发布\u003C\u002F",[159,8621,998],{"class":169},[159,8623,173],{"class":165},[159,8625,8626,8628,8630],{"class":161,"line":261},[159,8627,179],{"class":165},[159,8629,1468],{"class":169},[159,8631,173],{"class":165},[159,8633,8634,8637],{"class":161,"line":603},[159,8635,8636],{"class":185},"    .wrapper",[159,8638,1478],{"class":165},[159,8640,8641,8644,8646,8649,8651],{"class":161,"line":621},[159,8642,8643],{"class":1146},"      min-width",[159,8645,1486],{"class":165},[159,8647,8648],{"class":1146},"400",[159,8650,1571],{"class":1142},[159,8652,1492],{"class":165},[159,8654,8655,8658,8660,8663,8665],{"class":161,"line":634},[159,8656,8657],{"class":1146},"      max-width",[159,8659,1486],{"class":165},[159,8661,8662],{"class":1146},"800",[159,8664,1571],{"class":1142},[159,8666,1492],{"class":165},[159,8668,8669,8671,8673,8675],{"class":161,"line":640},[159,8670,1818],{"class":1146},[159,8672,1486],{"class":165},[159,8674,1823],{"class":1146},[159,8676,1492],{"class":165},[159,8678,8679,8681,8683,8686],{"class":161,"line":1075},[159,8680,1831],{"class":1146},[159,8682,1486],{"class":165},[159,8684,8685],{"class":1146},"flex-end",[159,8687,1492],{"class":165},[159,8689,8690],{"class":161,"line":1081},[159,8691,1508],{"class":165},[159,8693,8694],{"class":161,"line":1091},[159,8695,590],{"emptyLinePlaceholder":589},[159,8697,8698,8701],{"class":161,"line":1100},[159,8699,8700],{"class":185},"    .avatar",[159,8702,1478],{"class":165},[159,8704,8705,8707,8709,8711,8713],{"class":161,"line":1123},[159,8706,1563],{"class":1146},[159,8708,1486],{"class":165},[159,8710,7649],{"class":1146},[159,8712,1571],{"class":1142},[159,8714,1492],{"class":165},[159,8716,8717,8719,8721,8723,8725],{"class":161,"line":1132},[159,8718,1578],{"class":1146},[159,8720,1486],{"class":165},[159,8722,7649],{"class":1146},[159,8724,1571],{"class":1142},[159,8726,1492],{"class":165},[159,8728,8729,8731,8733,8735,8737],{"class":161,"line":1139},[159,8730,1959],{"class":1146},[159,8732,1486],{"class":165},[159,8734,4230],{"class":1146},[159,8736,1662],{"class":1142},[159,8738,1492],{"class":165},[159,8740,8741,8744,8746,8749],{"class":161,"line":1168},[159,8742,8743],{"class":1146},"      overflow",[159,8745,1486],{"class":165},[159,8747,8748],{"class":1146},"hidden",[159,8750,1492],{"class":165},[159,8752,8753,8756,8758,8761,8763,8767,8769,8772,8775,8778,8781],{"class":161,"line":1174},[159,8754,8755],{"class":1146},"      background",[159,8757,1486],{"class":165},[159,8759,8760],{"class":1146},"url",[159,8762,1159],{"class":165},[159,8764,8766],{"class":8765},"s4XuR","...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[159,8768,2710],{"class":165},[159,8770,8771],{"class":1146},"no-repeat",[159,8773,8774],{"class":1146}," center",[159,8776,8777],{"class":165}," \u002F ",[159,8779,8780],{"class":1146},"cover",[159,8782,1492],{"class":165},[159,8784,8785,8788,8790,8792,8794],{"class":161,"line":1180},[159,8786,8787],{"class":1146},"      margin-right",[159,8789,1486],{"class":165},[159,8791,1739],{"class":1146},[159,8793,1571],{"class":1142},[159,8795,1492],{"class":165},[159,8797,8798],{"class":161,"line":1194},[159,8799,1508],{"class":165},[159,8801,8802],{"class":161,"line":1200},[159,8803,590],{"emptyLinePlaceholder":589},[159,8805,8806,8808,8811],{"class":161,"line":1221},[159,8807,8636],{"class":185},[159,8809,8810],{"class":169}," textarea",[159,8812,1478],{"class":165},[159,8814,8815,8818,8820,8822],{"class":161,"line":1230},[159,8816,8817],{"class":1146},"      outline",[159,8819,1486],{"class":165},[159,8821,1529],{"class":1146},[159,8823,1492],{"class":165},[159,8825,8826,8829,8831,8834],{"class":161,"line":1247},[159,8827,8828],{"class":1146},"      border-color",[159,8830,1486],{"class":165},[159,8832,8833],{"class":1146},"transparent",[159,8835,1492],{"class":165},[159,8837,8838,8841,8843,8845],{"class":161,"line":1265},[159,8839,8840],{"class":1146},"      resize",[159,8842,1486],{"class":165},[159,8844,1529],{"class":1146},[159,8846,1492],{"class":165},[159,8848,8849,8851,8853,8856],{"class":161,"line":1277},[159,8850,8755],{"class":1146},[159,8852,1486],{"class":165},[159,8854,8855],{"class":1146},"#f5f5f5",[159,8857,1492],{"class":165},[159,8859,8860,8862,8864,8867,8869],{"class":161,"line":1283},[159,8861,1959],{"class":1146},[159,8863,1486],{"class":165},[159,8865,8866],{"class":1146},"4",[159,8868,1571],{"class":1142},[159,8870,1492],{"class":165},[159,8872,8873,8876,8878,8880],{"class":161,"line":1294},[159,8874,8875],{"class":1146},"      flex",[159,8877,1486],{"class":165},[159,8879,4932],{"class":1146},[159,8881,1492],{"class":165},[159,8883,8884,8886,8888,8890,8892],{"class":161,"line":1305},[159,8885,1483],{"class":1146},[159,8887,1486],{"class":165},[159,8889,1964],{"class":1146},[159,8891,1571],{"class":1142},[159,8893,1492],{"class":165},[159,8895,8896,8899,8901,8904,8907,8910],{"class":161,"line":1311},[159,8897,8898],{"class":1146},"      transition",[159,8900,1486],{"class":165},[159,8902,8903],{"class":1146},"all",[159,8905,8906],{"class":1146}," 0.5",[159,8908,8909],{"class":1142},"s",[159,8911,1492],{"class":165},[159,8913,8914,8916,8918,8921,8923],{"class":161,"line":1322},[159,8915,1578],{"class":1146},[159,8917,1486],{"class":165},[159,8919,8920],{"class":1146},"30",[159,8922,1571],{"class":1142},[159,8924,1492],{"class":165},[159,8926,8927],{"class":161,"line":1327},[159,8928,1508],{"class":165},[159,8930,8931],{"class":161,"line":1336},[159,8932,590],{"emptyLinePlaceholder":589},[159,8934,8935,8937,8939,8942],{"class":161,"line":1345},[159,8936,8636],{"class":185},[159,8938,8810],{"class":169},[159,8940,8941],{"class":185},":focus",[159,8943,1478],{"class":165},[159,8945,8946,8948,8950,8953],{"class":161,"line":1350},[159,8947,8828],{"class":1146},[159,8949,1486],{"class":165},[159,8951,8952],{"class":1146},"#e4e4e4",[159,8954,1492],{"class":165},[159,8956,8957,8959,8961,8963],{"class":161,"line":1764},[159,8958,8755],{"class":1146},[159,8960,1486],{"class":165},[159,8962,7868],{"class":1146},[159,8964,1492],{"class":165},[159,8966,8967,8969,8971,8973,8975],{"class":161,"line":1769},[159,8968,1578],{"class":1146},[159,8970,1486],{"class":165},[159,8972,4230],{"class":1146},[159,8974,1571],{"class":1142},[159,8976,1492],{"class":165},[159,8978,8979],{"class":161,"line":1777},[159,8980,1508],{"class":165},[159,8982,8983],{"class":161,"line":1788},[159,8984,590],{"emptyLinePlaceholder":589},[159,8986,8987,8989,8991],{"class":161,"line":1802},[159,8988,8636],{"class":185},[159,8990,4373],{"class":169},[159,8992,1478],{"class":165},[159,8994,8995,8997,8999,9002],{"class":161,"line":1815},[159,8996,8755],{"class":1146},[159,8998,1486],{"class":165},[159,9000,9001],{"class":1146},"#00aeec",[159,9003,1492],{"class":165},[159,9005,9006,9008,9010,9012],{"class":161,"line":1828},[159,9007,4322],{"class":1146},[159,9009,1486],{"class":165},[159,9011,7868],{"class":1146},[159,9013,1492],{"class":165},[159,9015,9016,9019,9021,9023],{"class":161,"line":1841},[159,9017,9018],{"class":1146},"      border",[159,9020,1486],{"class":165},[159,9022,1529],{"class":1146},[159,9024,1492],{"class":165},[159,9026,9027,9029,9031,9033,9035],{"class":161,"line":1852},[159,9028,1959],{"class":1146},[159,9030,1486],{"class":165},[159,9032,8866],{"class":1146},[159,9034,1571],{"class":1142},[159,9036,1492],{"class":165},[159,9038,9039,9042,9044,9046,9048],{"class":161,"line":1866},[159,9040,9041],{"class":1146},"      margin-left",[159,9043,1486],{"class":165},[159,9045,1964],{"class":1146},[159,9047,1571],{"class":1142},[159,9049,1492],{"class":165},[159,9051,9052,9054,9056,9059,9061],{"class":161,"line":1879},[159,9053,1563],{"class":1146},[159,9055,1486],{"class":165},[159,9057,9058],{"class":1146},"70",[159,9060,1571],{"class":1142},[159,9062,1492],{"class":165},[159,9064,9065,9068,9070,9073],{"class":161,"line":1884},[159,9066,9067],{"class":1146},"      cursor",[159,9069,1486],{"class":165},[159,9071,9072],{"class":1146},"pointer",[159,9074,1492],{"class":165},[159,9076,9077],{"class":161,"line":1889},[159,9078,1508],{"class":165},[159,9080,9081],{"class":161,"line":1899},[159,9082,590],{"emptyLinePlaceholder":589},[159,9084,9085,9087,9090],{"class":161,"line":1912},[159,9086,8636],{"class":185},[159,9088,9089],{"class":185}," .total",[159,9091,1478],{"class":165},[159,9093,9094,9096,9098,9101,9103],{"class":161,"line":1925},[159,9095,8787],{"class":1146},[159,9097,1486],{"class":165},[159,9099,9100],{"class":1146},"80",[159,9102,1571],{"class":1142},[159,9104,1492],{"class":165},[159,9106,9107,9109,9111,9114],{"class":161,"line":1956},[159,9108,4322],{"class":1146},[159,9110,1486],{"class":165},[159,9112,9113],{"class":1146},"#999",[159,9115,1492],{"class":165},[159,9117,9118,9121,9123,9125,9127],{"class":161,"line":1971},[159,9119,9120],{"class":1146},"      margin-top",[159,9122,1486],{"class":165},[159,9124,1753],{"class":1146},[159,9126,1571],{"class":1142},[159,9128,1492],{"class":165},[159,9130,9131,9134,9136,9138],{"class":161,"line":1976},[159,9132,9133],{"class":1146},"      opacity",[159,9135,1486],{"class":165},[159,9137,1489],{"class":1146},[159,9139,1492],{"class":165},[159,9141,9142,9144,9146,9148,9150,9152],{"class":161,"line":1981},[159,9143,8898],{"class":1146},[159,9145,1486],{"class":165},[159,9147,8903],{"class":1146},[159,9149,8906],{"class":1146},[159,9151,8909],{"class":1142},[159,9153,1492],{"class":165},[159,9155,9156],{"class":161,"line":1989},[159,9157,1508],{"class":165},[159,9159,9160],{"class":161,"line":2001},[159,9161,590],{"emptyLinePlaceholder":589},[159,9163,9164,9167],{"class":161,"line":2006},[159,9165,9166],{"class":185},"    .list",[159,9168,1478],{"class":165},[159,9170,9171,9173,9175,9177,9179],{"class":161,"line":2015},[159,9172,8643],{"class":1146},[159,9174,1486],{"class":165},[159,9176,8648],{"class":1146},[159,9178,1571],{"class":1142},[159,9180,1492],{"class":165},[159,9182,9183,9185,9187,9189,9191],{"class":161,"line":2024},[159,9184,8657],{"class":1146},[159,9186,1486],{"class":165},[159,9188,8662],{"class":1146},[159,9190,1571],{"class":1142},[159,9192,1492],{"class":165},[159,9194,9195,9197,9199,9201],{"class":161,"line":2029},[159,9196,1818],{"class":1146},[159,9198,1486],{"class":165},[159,9200,1823],{"class":1146},[159,9202,1492],{"class":165},[159,9204,9205],{"class":161,"line":2038},[159,9206,1508],{"class":165},[159,9208,9209],{"class":161,"line":2053},[159,9210,590],{"emptyLinePlaceholder":589},[159,9212,9213,9215,9218],{"class":161,"line":2070},[159,9214,9166],{"class":185},[159,9216,9217],{"class":185}," .item",[159,9219,1478],{"class":165},[159,9221,9222,9224,9226,9228,9230],{"class":161,"line":2095},[159,9223,1563],{"class":1146},[159,9225,1486],{"class":165},[159,9227,1596],{"class":1146},[159,9229,1662],{"class":1142},[159,9231,1492],{"class":165},[159,9233,9234,9236,9238,9240],{"class":161,"line":2104},[159,9235,1818],{"class":1146},[159,9237,1486],{"class":165},[159,9239,1823],{"class":1146},[159,9241,1492],{"class":165},[159,9243,9244],{"class":161,"line":2120},[159,9245,1508],{"class":165},[159,9247,9248],{"class":161,"line":2134},[159,9249,590],{"emptyLinePlaceholder":589},[159,9251,9252,9254,9256,9259],{"class":161,"line":2143},[159,9253,9166],{"class":185},[159,9255,9217],{"class":185},[159,9257,9258],{"class":185}," .info",[159,9260,1478],{"class":165},[159,9262,9263,9265,9267,9269],{"class":161,"line":2165},[159,9264,8875],{"class":1146},[159,9266,1486],{"class":165},[159,9268,4932],{"class":1146},[159,9270,1492],{"class":165},[159,9272,9273,9276,9278,9280,9282,9285,9288],{"class":161,"line":2178},[159,9274,9275],{"class":1146},"      border-bottom",[159,9277,1486],{"class":165},[159,9279,4932],{"class":1146},[159,9281,1571],{"class":1142},[159,9283,9284],{"class":1146}," dashed",[159,9286,9287],{"class":1146}," #e4e4e4",[159,9289,1492],{"class":165},[159,9291,9292,9295,9297,9299,9301],{"class":161,"line":2191},[159,9293,9294],{"class":1146},"      padding-bottom",[159,9296,1486],{"class":165},[159,9298,1964],{"class":1146},[159,9300,1571],{"class":1142},[159,9302,1492],{"class":165},[159,9304,9305],{"class":161,"line":2204},[159,9306,1508],{"class":165},[159,9308,9309],{"class":161,"line":2217},[159,9310,590],{"emptyLinePlaceholder":589},[159,9312,9313,9315,9317,9319],{"class":161,"line":2230},[159,9314,9166],{"class":185},[159,9316,9217],{"class":185},[159,9318,1704],{"class":169},[159,9320,1478],{"class":165},[159,9322,9323,9325,9327,9329],{"class":161,"line":2243},[159,9324,1497],{"class":1146},[159,9326,1486],{"class":165},[159,9328,1489],{"class":1146},[159,9330,1492],{"class":165},[159,9332,9333],{"class":161,"line":2256},[159,9334,1508],{"class":165},[159,9336,9337],{"class":161,"line":2266},[159,9338,590],{"emptyLinePlaceholder":589},[159,9340,9341,9343,9345,9348],{"class":161,"line":2275},[159,9342,9166],{"class":185},[159,9344,9217],{"class":185},[159,9346,9347],{"class":185}," .name",[159,9349,1478],{"class":165},[159,9351,9352,9354,9356,9359],{"class":161,"line":2284},[159,9353,4322],{"class":1146},[159,9355,1486],{"class":165},[159,9357,9358],{"class":1146},"#FB7299",[159,9360,1492],{"class":165},[159,9362,9363,9365,9367,9369,9371],{"class":161,"line":2293},[159,9364,1721],{"class":1146},[159,9366,1486],{"class":165},[159,9368,7678],{"class":1146},[159,9370,1571],{"class":1142},[159,9372,1492],{"class":165},[159,9374,9375,9378,9380,9383],{"class":161,"line":2306},[159,9376,9377],{"class":1146},"      font-weight",[159,9379,1486],{"class":165},[159,9381,9382],{"class":1146},"bold",[159,9384,1492],{"class":165},[159,9386,9387],{"class":161,"line":2330},[159,9388,1508],{"class":165},[159,9390,9391],{"class":161,"line":2350},[159,9392,590],{"emptyLinePlaceholder":589},[159,9394,9395,9397,9399,9402],{"class":161,"line":2370},[159,9396,9166],{"class":185},[159,9398,9217],{"class":185},[159,9400,9401],{"class":185}," .text",[159,9403,1478],{"class":165},[159,9405,9406,9408,9410,9413],{"class":161,"line":2390},[159,9407,4322],{"class":1146},[159,9409,1486],{"class":165},[159,9411,9412],{"class":1146},"#333",[159,9414,1492],{"class":165},[159,9416,9417,9419,9421,9423,9425,9427],{"class":161,"line":2410},[159,9418,1483],{"class":1146},[159,9420,1486],{"class":165},[159,9422,1964],{"class":1146},[159,9424,1571],{"class":1142},[159,9426,1259],{"class":1146},[159,9428,1492],{"class":165},[159,9430,9431],{"class":161,"line":2430},[159,9432,1508],{"class":165},[159,9434,9435],{"class":161,"line":2450},[159,9436,590],{"emptyLinePlaceholder":589},[159,9438,9439,9441,9443,9446],{"class":161,"line":2471},[159,9440,9166],{"class":185},[159,9442,9217],{"class":185},[159,9444,9445],{"class":185}," .time",[159,9447,1478],{"class":165},[159,9449,9450,9452,9454,9456],{"class":161,"line":2477},[159,9451,4322],{"class":1146},[159,9453,1486],{"class":165},[159,9455,9113],{"class":1146},[159,9457,1492],{"class":165},[159,9459,9460,9462,9464,9466,9468],{"class":161,"line":2498},[159,9461,1721],{"class":1146},[159,9463,1486],{"class":165},[159,9465,7925],{"class":1146},[159,9467,1571],{"class":1142},[159,9469,1492],{"class":165},[159,9471,9472],{"class":161,"line":2518},[159,9473,1508],{"class":165},[159,9475,9476,9478,9480],{"class":161,"line":2539},[159,9477,254],{"class":165},[159,9479,1468],{"class":169},[159,9481,173],{"class":165},[159,9483,9484,9486,9488],{"class":161,"line":2561},[159,9485,264],{"class":165},[159,9487,949],{"class":169},[159,9489,173],{"class":165},[159,9491,9492],{"class":161,"line":2573},[159,9493,590],{"emptyLinePlaceholder":589},[159,9495,9496,9498,9500],{"class":161,"line":2591},[159,9497,166],{"class":165},[159,9499,170],{"class":169},[159,9501,173],{"class":165},[159,9503,9504,9506,9508,9510,9512,9515],{"class":161,"line":2602},[159,9505,179],{"class":165},[159,9507,182],{"class":169},[159,9509,186],{"class":185},[159,9511,189],{"class":165},[159,9513,9514],{"class":192},"\"wrapper\"",[159,9516,173],{"class":165},[159,9518,9519,9521,9523,9525,9527,9530,9532,9534],{"class":161,"line":2613},[159,9520,2056],{"class":165},[159,9522,1241],{"class":169},[159,9524,186],{"class":185},[159,9526,189],{"class":165},[159,9528,9529],{"class":192},"\"avatar\"",[159,9531,2158],{"class":165},[159,9533,1241],{"class":169},[159,9535,173],{"class":165},[159,9537,9538,9540,9542,9544,9546,9549,9551,9553,9556,9558,9560,9562,9565,9567,9570,9572,9574],{"class":161,"line":2624},[159,9539,2056],{"class":165},[159,9541,1032],{"class":169},[159,9543,555],{"class":185},[159,9545,189],{"class":165},[159,9547,9548],{"class":192},"\"tx\"",[159,9550,8050],{"class":185},[159,9552,189],{"class":165},[159,9554,9555],{"class":192},"\"发一条友善的评论\"",[159,9557,1055],{"class":185},[159,9559,189],{"class":165},[159,9561,708],{"class":192},[159,9563,9564],{"class":185}," maxlength",[159,9566,189],{"class":165},[159,9568,9569],{"class":192},"\"200\"",[159,9571,2158],{"class":165},[159,9573,1032],{"class":169},[159,9575,173],{"class":165},[159,9577,9578,9580,9582,9585,9587],{"class":161,"line":2630},[159,9579,2056],{"class":165},[159,9581,608],{"class":169},[159,9583,9584],{"class":165},">发布\u003C\u002F",[159,9586,608],{"class":169},[159,9588,173],{"class":165},[159,9590,9591,9593,9595],{"class":161,"line":2636},[159,9592,254],{"class":165},[159,9594,182],{"class":169},[159,9596,173],{"class":165},[159,9598,9599,9601,9603,9605,9607,9609],{"class":161,"line":2642},[159,9600,179],{"class":165},[159,9602,182],{"class":169},[159,9604,186],{"class":185},[159,9606,189],{"class":165},[159,9608,9514],{"class":192},[159,9610,173],{"class":165},[159,9612,9613,9615,9617,9619,9621,9624,9627,9629],{"class":161,"line":2648},[159,9614,2056],{"class":165},[159,9616,159],{"class":169},[159,9618,186],{"class":185},[159,9620,189],{"class":165},[159,9622,9623],{"class":192},"\"total\"",[159,9625,9626],{"class":165},">0\u002F200字\u003C\u002F",[159,9628,159],{"class":169},[159,9630,173],{"class":165},[159,9632,9633,9635,9637],{"class":161,"line":2674},[159,9634,254],{"class":165},[159,9636,182],{"class":169},[159,9638,173],{"class":165},[159,9640,9641,9643,9645,9647,9649,9652],{"class":161,"line":2689},[159,9642,179],{"class":165},[159,9644,182],{"class":169},[159,9646,186],{"class":185},[159,9648,189],{"class":165},[159,9650,9651],{"class":192},"\"list\"",[159,9653,173],{"class":165},[159,9655,9656,9658,9660,9662,9664,9667,9670,9672,9675],{"class":161,"line":2694},[159,9657,2056],{"class":165},[159,9659,182],{"class":169},[159,9661,186],{"class":185},[159,9663,189],{"class":165},[159,9665,9666],{"class":192},"\"item\"",[159,9668,9669],{"class":185}," style",[159,9671,189],{"class":165},[159,9673,9674],{"class":192},"\"display: none;\"",[159,9676,173],{"class":165},[159,9678,9679,9681,9683,9685,9687,9689,9691,9693],{"class":161,"line":2721},[159,9680,2073],{"class":165},[159,9682,1241],{"class":169},[159,9684,186],{"class":185},[159,9686,189],{"class":165},[159,9688,9529],{"class":192},[159,9690,2158],{"class":165},[159,9692,1241],{"class":169},[159,9694,173],{"class":165},[159,9696,9697,9699,9701,9703,9705,9708],{"class":161,"line":2726},[159,9698,2073],{"class":165},[159,9700,182],{"class":169},[159,9702,186],{"class":185},[159,9704,189],{"class":165},[159,9706,9707],{"class":192},"\"info\"",[159,9709,173],{"class":165},[159,9711,9712,9714,9716,9718,9720,9723,9726,9728],{"class":161,"line":2735},[159,9713,2146],{"class":165},[159,9715,14],{"class":169},[159,9717,186],{"class":185},[159,9719,189],{"class":165},[159,9721,9722],{"class":192},"\"name\"",[159,9724,9725],{"class":165},">清风徐来\u003C\u002F",[159,9727,14],{"class":169},[159,9729,173],{"class":165},[159,9731,9732,9734,9736,9738,9740,9743,9746,9748],{"class":161,"line":2744},[159,9733,2146],{"class":165},[159,9735,14],{"class":169},[159,9737,186],{"class":185},[159,9739,189],{"class":165},[159,9741,9742],{"class":192},"\"text\"",[159,9744,9745],{"class":165},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[159,9747,14],{"class":169},[159,9749,173],{"class":165},[159,9751,9752,9754,9756,9758,9760,9763,9766,9768],{"class":161,"line":2753},[159,9753,2146],{"class":165},[159,9755,14],{"class":169},[159,9757,186],{"class":185},[159,9759,189],{"class":165},[159,9761,9762],{"class":192},"\"time\"",[159,9764,9765],{"class":165},">2022-10-10 20:29:21\u003C\u002F",[159,9767,14],{"class":169},[159,9769,173],{"class":165},[159,9771,9772,9774,9776],{"class":161,"line":2758},[159,9773,2259],{"class":165},[159,9775,182],{"class":169},[159,9777,173],{"class":165},[159,9779,9780,9782,9784],{"class":161,"line":3959},[159,9781,1084],{"class":165},[159,9783,182],{"class":169},[159,9785,173],{"class":165},[159,9787,9788,9790,9792],{"class":161,"line":3968},[159,9789,254],{"class":165},[159,9791,182],{"class":169},[159,9793,173],{"class":165},[159,9795,9796,9798,9800],{"class":161,"line":3977},[159,9797,179],{"class":165},[159,9799,228],{"class":169},[159,9801,173],{"class":165},[159,9803,9804,9806,9809,9811,9813,9815,9817,9820],{"class":161,"line":3982},[159,9805,1143],{"class":1142},[159,9807,9808],{"class":1146}," tx",[159,9810,1150],{"class":1142},[159,9812,1153],{"class":165},[159,9814,1156],{"class":185},[159,9816,1159],{"class":165},[159,9818,9819],{"class":192},"'#tx'",[159,9821,1165],{"class":165},[159,9823,9824,9826,9829,9831,9833,9835,9837,9840],{"class":161,"line":6843},[159,9825,1143],{"class":1142},[159,9827,9828],{"class":1146}," total",[159,9830,1150],{"class":1142},[159,9832,1153],{"class":165},[159,9834,1156],{"class":185},[159,9836,1159],{"class":165},[159,9838,9839],{"class":192},"'.total'",[159,9841,1165],{"class":165},[159,9843,9844],{"class":161,"line":6849},[159,9845,9846],{"class":1135},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[159,9848,9849,9852,9854,9856,9858,9860,9862],{"class":161,"line":6855},[159,9850,9851],{"class":165},"    tx.",[159,9853,4724],{"class":185},[159,9855,1159],{"class":165},[159,9857,8358],{"class":192},[159,9859,1939],{"class":165},[159,9861,1215],{"class":1142},[159,9863,1218],{"class":165},[159,9865,9866,9869,9871],{"class":161,"line":6861},[159,9867,9868],{"class":165},"      total.style.opacity ",[159,9870,189],{"class":1142},[159,9872,2570],{"class":1146},[159,9874,9875],{"class":161,"line":6867},[159,9876,4863],{"class":165},[159,9878,9879],{"class":161,"line":6873},[159,9880,9881],{"class":1135},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[159,9883,9884,9886,9888,9890,9892,9894,9896],{"class":161,"line":6879},[159,9885,9851],{"class":165},[159,9887,4724],{"class":185},[159,9889,1159],{"class":165},[159,9891,8419],{"class":192},[159,9893,1939],{"class":165},[159,9895,1215],{"class":1142},[159,9897,1218],{"class":165},[159,9899,9900,9902,9904],{"class":161,"line":6885},[159,9901,9868],{"class":165},[159,9903,189],{"class":1142},[159,9905,3785],{"class":1146},[159,9907,9908],{"class":161,"line":6890},[159,9909,4863],{"class":165},[159,9911,9912],{"class":161,"line":6896},[159,9913,9914],{"class":1135},"    \u002F\u002F 3. 检测用户输入\n",[159,9916,9917,9919,9921,9923,9926,9928,9930],{"class":161,"line":6902},[159,9918,9851],{"class":165},[159,9920,4724],{"class":185},[159,9922,1159],{"class":165},[159,9924,9925],{"class":192},"'input'",[159,9927,1939],{"class":165},[159,9929,1215],{"class":1142},[159,9931,1218],{"class":165},[159,9933,9934],{"class":161,"line":6908},[159,9935,9936],{"class":1135},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[159,9938,9939,9942,9944,9947,9950,9953,9956,9958,9960],{"class":161,"line":6914},[159,9940,9941],{"class":165},"      total.innerHTML ",[159,9943,189],{"class":1142},[159,9945,9946],{"class":192}," `${",[159,9948,9949],{"class":165},"tx",[159,9951,9952],{"class":192},".",[159,9954,9955],{"class":165},"value",[159,9957,9952],{"class":192},[159,9959,3828],{"class":1146},[159,9961,9962],{"class":192},"}\u002F200字`\n",[159,9964,9965],{"class":161,"line":6920},[159,9966,4863],{"class":165},[159,9968,9969],{"class":161,"line":6926},[159,9970,590],{"emptyLinePlaceholder":589},[159,9972,9973],{"class":161,"line":6932},[159,9974,9975],{"class":1135},"    \u002F\u002F const str = 'andy'\n",[159,9977,9978],{"class":161,"line":6938},[159,9979,9980],{"class":1135},"    \u002F\u002F console.log(str.length)\n",[159,9982,9983,9985,9987],{"class":161,"line":6944},[159,9984,254],{"class":165},[159,9986,228],{"class":169},[159,9988,173],{"class":165},[159,9990,9991,9993,9995],{"class":161,"line":6949},[159,9992,264],{"class":165},[159,9994,170],{"class":169},[159,9996,173],{"class":165},[159,9998,9999],{"class":161,"line":6955},[159,10000,590],{"emptyLinePlaceholder":589},[159,10002,10003,10005,10007],{"class":161,"line":6961},[159,10004,264],{"class":165},[159,10006,522],{"class":169},[159,10008,173],{"class":165},[326,10010,10012],{"id":10011},"_3254-change事件","3.2.5.4 change事件",[14,10014,10015],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,10017,10018],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,10020,10021],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[151,10023,10025],{"className":520,"code":10024,"language":522,"meta":25,"style":25},"\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",[49,10026,10027,10037,10051,10055,10063,10077,10097,10109,10117,10121,10129,10143,10151,10169,10187,10200,10204,10212,10220,10224],{"__ignoreMap":25},[159,10028,10029,10031,10033,10035],{"class":161,"line":162},[159,10030,914],{"class":165},[159,10032,917],{"class":169},[159,10034,920],{"class":185},[159,10036,173],{"class":165},[159,10038,10039,10041,10043,10045,10047,10049],{"class":161,"line":176},[159,10040,166],{"class":165},[159,10042,522],{"class":169},[159,10044,931],{"class":185},[159,10046,189],{"class":165},[159,10048,936],{"class":192},[159,10050,173],{"class":165},[159,10052,10053],{"class":161,"line":203},[159,10054,590],{"emptyLinePlaceholder":589},[159,10056,10057,10059,10061],{"class":161,"line":223},[159,10058,166],{"class":165},[159,10060,949],{"class":169},[159,10062,173],{"class":165},[159,10064,10065,10067,10069,10071,10073,10075],{"class":161,"line":233},[159,10066,179],{"class":165},[159,10068,958],{"class":169},[159,10070,961],{"class":185},[159,10072,189],{"class":165},[159,10074,966],{"class":192},[159,10076,173],{"class":165},[159,10078,10079,10081,10083,10085,10087,10089,10091,10093,10095],{"class":161,"line":239},[159,10080,179],{"class":165},[159,10082,958],{"class":169},[159,10084,547],{"class":185},[159,10086,189],{"class":165},[159,10088,981],{"class":192},[159,10090,984],{"class":185},[159,10092,189],{"class":165},[159,10094,989],{"class":192},[159,10096,173],{"class":165},[159,10098,10099,10101,10103,10105,10107],{"class":161,"line":245},[159,10100,179],{"class":165},[159,10102,998],{"class":169},[159,10104,1001],{"class":165},[159,10106,998],{"class":169},[159,10108,173],{"class":165},[159,10110,10111,10113,10115],{"class":161,"line":251},[159,10112,264],{"class":165},[159,10114,949],{"class":169},[159,10116,173],{"class":165},[159,10118,10119],{"class":161,"line":261},[159,10120,590],{"emptyLinePlaceholder":589},[159,10122,10123,10125,10127],{"class":161,"line":603},[159,10124,166],{"class":165},[159,10126,170],{"class":169},[159,10128,173],{"class":165},[159,10130,10131,10133,10135,10137,10139,10141],{"class":161,"line":621},[159,10132,179],{"class":165},[159,10134,536],{"class":169},[159,10136,539],{"class":185},[159,10138,189],{"class":165},[159,10140,9742],{"class":192},[159,10142,173],{"class":165},[159,10144,10145,10147,10149],{"class":161,"line":634},[159,10146,179],{"class":165},[159,10148,228],{"class":169},[159,10150,173],{"class":165},[159,10152,10153,10155,10157,10159,10161,10163,10165,10167],{"class":161,"line":640},[159,10154,1143],{"class":1142},[159,10156,7625],{"class":1146},[159,10158,1150],{"class":1142},[159,10160,1153],{"class":165},[159,10162,1156],{"class":185},[159,10164,1159],{"class":165},[159,10166,9925],{"class":192},[159,10168,1165],{"class":165},[159,10170,10171,10174,10176,10178,10181,10183,10185],{"class":161,"line":1075},[159,10172,10173],{"class":165},"    input.",[159,10175,4724],{"class":185},[159,10177,1159],{"class":165},[159,10179,10180],{"class":192},"'change'",[159,10182,1939],{"class":165},[159,10184,1215],{"class":1142},[159,10186,1218],{"class":165},[159,10188,10189,10191,10193,10195,10198],{"class":161,"line":1081},[159,10190,5163],{"class":165},[159,10192,5166],{"class":185},[159,10194,1159],{"class":165},[159,10196,10197],{"class":1146},"111",[159,10199,1165],{"class":165},[159,10201,10202],{"class":161,"line":1091},[159,10203,4863],{"class":165},[159,10205,10206,10208,10210],{"class":161,"line":1100},[159,10207,254],{"class":165},[159,10209,228],{"class":169},[159,10211,173],{"class":165},[159,10213,10214,10216,10218],{"class":161,"line":1123},[159,10215,264],{"class":165},[159,10217,170],{"class":169},[159,10219,173],{"class":165},[159,10221,10222],{"class":161,"line":1132},[159,10223,590],{"emptyLinePlaceholder":589},[159,10225,10226,10228,10230],{"class":161,"line":1139},[159,10227,264],{"class":165},[159,10229,522],{"class":169},[159,10231,173],{"class":165},[14,10233,10234],{},"总结：内容发生改变才回去触发",[42,10236,10238],{"id":10237},"_326-事件对象","3.2.6 事件对象",[326,10240,10242],{"id":10241},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,10244,10245],{},[23,10246],{"alt":25,"src":10247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,10249,10250],{},[23,10251],{"alt":25,"src":10252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,10254,10255],{},"点击一次，就输出了事件对象，它是个对象",[14,10257,10258],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,10260,10261],{},[23,10262],{"alt":25,"src":10263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[326,10265,10267],{"id":10266},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,10269,10270],{},[23,10271],{"alt":25,"src":10272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,10274,10275],{},"实现按特殊字符才是实现打印输出效果：",[151,10277,10279],{"className":153,"code":10278,"language":155,"meta":25,"style":25},"\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",[49,10280,10281,10289,10294,10308,10316,10321,10326,10331,10336,10341,10346,10351,10356,10361,10365,10369,10377],{"__ignoreMap":25},[159,10282,10283,10285,10287],{"class":161,"line":162},[159,10284,166],{"class":165},[159,10286,170],{"class":169},[159,10288,173],{"class":165},[159,10290,10291],{"class":161,"line":176},[159,10292,10293],{"class":1135},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[159,10295,10296,10298,10300,10302,10304,10306],{"class":161,"line":203},[159,10297,179],{"class":165},[159,10299,536],{"class":169},[159,10301,539],{"class":185},[159,10303,189],{"class":165},[159,10305,9742],{"class":192},[159,10307,173],{"class":165},[159,10309,10310,10312,10314],{"class":161,"line":223},[159,10311,179],{"class":165},[159,10313,228],{"class":169},[159,10315,173],{"class":165},[159,10317,10318],{"class":161,"line":233},[159,10319,10320],{"class":165},"    \u002F\u002F const btn = document.querySelector('button')\n",[159,10322,10323],{"class":161,"line":239},[159,10324,10325],{"class":165},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[159,10327,10328],{"class":161,"line":245},[159,10329,10330],{"class":165},"    \u002F\u002F   console.log(e);\n",[159,10332,10333],{"class":161,"line":251},[159,10334,10335],{"class":165},"    \u002F\u002F })\n",[159,10337,10338],{"class":161,"line":261},[159,10339,10340],{"class":165},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[159,10342,10343],{"class":161,"line":603},[159,10344,10345],{"class":165},"    const input = document.querySelector('input')\n",[159,10347,10348],{"class":161,"line":621},[159,10349,10350],{"class":165},"    input.addEventListener('keyup', function (e) {\n",[159,10352,10353],{"class":161,"line":634},[159,10354,10355],{"class":165},"      if (e.key === 'Enter') {\n",[159,10357,10358],{"class":161,"line":640},[159,10359,10360],{"class":165},"        console.log('我按下了回车键')\n",[159,10362,10363],{"class":161,"line":1075},[159,10364,1308],{"class":165},[159,10366,10367],{"class":161,"line":1081},[159,10368,4863],{"class":165},[159,10370,10371,10373,10375],{"class":161,"line":1091},[159,10372,254],{"class":165},[159,10374,228],{"class":169},[159,10376,173],{"class":165},[159,10378,10379,10381,10383],{"class":161,"line":1100},[159,10380,264],{"class":165},[159,10382,170],{"class":169},[159,10384,173],{"class":165},[326,10386,10388],{"id":10387},"_3263-trim方法","3.2.6.3 trim方法",[14,10390,10391],{},[23,10392],{"alt":25,"src":10393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,10395,10396],{},[23,10397],{"alt":25,"src":10398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,10400,10401],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,10403,10404],{},"str.trim()",[42,10406,10408],{"id":10407},"_327-环境对象","3.2.7 环境对象",[14,10410,10411],{},[23,10412],{"alt":25,"src":10413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,10415,10416],{},[23,10417],{"alt":25,"src":10418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,10420,10421],{},[23,10422],{"alt":25,"src":10423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,10425,10426],{},"实际函数调用是window.fn()",[14,10428,10429],{},"普通函数里面this指向的是window",[103,10431,10432,10435,10438],{},[106,10433,10434],{},"在普通函数下，this指向的是window",[106,10436,10437],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[106,10439,10440],{},"箭头函数没有this",[14,10442,10443],{},"粗略记法就是：谁调用，this就指向谁",[14,10445,10446],{},[23,10447],{"alt":25,"src":10448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,10450,10451],{},[23,10452],{"alt":25,"src":10453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,10455,10456],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,10458,10459],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[151,10461,10463],{"className":153,"code":10462,"language":155,"meta":25,"style":25},"\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",[49,10464,10465,10473,10485,10493,10498,10503,10508,10513,10517,10525],{"__ignoreMap":25},[159,10466,10467,10469,10471],{"class":161,"line":162},[159,10468,166],{"class":165},[159,10470,170],{"class":169},[159,10472,173],{"class":165},[159,10474,10475,10477,10479,10481,10483],{"class":161,"line":176},[159,10476,179],{"class":165},[159,10478,608],{"class":169},[159,10480,614],{"class":165},[159,10482,608],{"class":169},[159,10484,173],{"class":165},[159,10486,10487,10489,10491],{"class":161,"line":203},[159,10488,179],{"class":165},[159,10490,228],{"class":169},[159,10492,173],{"class":165},[159,10494,10495],{"class":161,"line":223},[159,10496,10497],{"class":165},"    const button = document.querySelector('button')\n",[159,10499,10500],{"class":161,"line":233},[159,10501,10502],{"class":165},"    button.addEventListener('click', function () {\n",[159,10504,10505],{"class":161,"line":239},[159,10506,10507],{"class":165},"      \u002F\u002F console.log(this);\n",[159,10509,10510],{"class":161,"line":245},[159,10511,10512],{"class":165},"      this.style.color = 'pink'\n",[159,10514,10515],{"class":161,"line":251},[159,10516,4863],{"class":165},[159,10518,10519,10521,10523],{"class":161,"line":261},[159,10520,254],{"class":165},[159,10522,228],{"class":169},[159,10524,173],{"class":165},[159,10526,10527,10529,10531],{"class":161,"line":603},[159,10528,264],{"class":165},[159,10530,170],{"class":169},[159,10532,173],{"class":165},[42,10534,10536],{"id":10535},"_328-回调函数","3.2.8 回调函数",[14,10538,10539],{},[23,10540],{"alt":25,"src":10541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,10543,10544],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,10546,10547],{},"总结：",[103,10549,10550,10553,10556],{},[106,10551,10552],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[106,10554,10555],{},"回调函数本质还是函数，只不过把它当成参数使用",[106,10557,10558],{},"使用匿名函数做为回调函数比较常见",[42,10560,10562],{"id":10561},"_329-tab栏切换","3.2.9 tab栏切换",[14,10564,10565],{},[23,10566],{"alt":25,"src":10567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[151,10569,10571],{"className":520,"code":10570,"language":522,"meta":25,"style":25},"\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",[49,10572,10573,10583,10597,10601,10609,10623,10643,10663,10676,10684,10690,10700,10710,10714,10718,10725,10738,10751,10763,10779,10783,10787,10794,10806,10819,10831,10841,10851,10855,10859,10868,10881,10892,10904,10908,10912,10920,10930,10940,10950,10954,10958,10968,10983,10995,10999,11003,11015,11026,11044,11054,11058,11062,11077,11088,11098,11102,11106,11113,11128,11132,11136,11144,11154,11158,11162,11171,11181,11185,11193,11201,11205,11213,11228,11243,11256,11264,11298,11325,11352,11379,11406,11414,11422,11437,11474,11509,11544,11579,11614,11622,11630,11638,11643,11648,11668,11673,11708,11713,11718,11736,11741,11746,11751,11774,11779,11795,11799,11804,11809,11830,11835,11864,11868,11873,11877,11885,11893,11897],{"__ignoreMap":25},[159,10574,10575,10577,10579,10581],{"class":161,"line":162},[159,10576,914],{"class":165},[159,10578,917],{"class":169},[159,10580,920],{"class":185},[159,10582,173],{"class":165},[159,10584,10585,10587,10589,10591,10593,10595],{"class":161,"line":176},[159,10586,166],{"class":165},[159,10588,522],{"class":169},[159,10590,931],{"class":185},[159,10592,189],{"class":165},[159,10594,936],{"class":192},[159,10596,173],{"class":165},[159,10598,10599],{"class":161,"line":203},[159,10600,590],{"emptyLinePlaceholder":589},[159,10602,10603,10605,10607],{"class":161,"line":223},[159,10604,166],{"class":165},[159,10606,949],{"class":169},[159,10608,173],{"class":165},[159,10610,10611,10613,10615,10617,10619,10621],{"class":161,"line":233},[159,10612,179],{"class":165},[159,10614,958],{"class":169},[159,10616,961],{"class":185},[159,10618,189],{"class":165},[159,10620,966],{"class":192},[159,10622,6049],{"class":165},[159,10624,10625,10627,10629,10631,10633,10635,10637,10639,10641],{"class":161,"line":239},[159,10626,179],{"class":165},[159,10628,958],{"class":169},[159,10630,6058],{"class":185},[159,10632,189],{"class":165},[159,10634,6063],{"class":192},[159,10636,984],{"class":185},[159,10638,189],{"class":165},[159,10640,6070],{"class":192},[159,10642,6049],{"class":165},[159,10644,10645,10647,10649,10651,10653,10655,10657,10659,10661],{"class":161,"line":245},[159,10646,179],{"class":165},[159,10648,958],{"class":169},[159,10650,547],{"class":185},[159,10652,189],{"class":165},[159,10654,981],{"class":192},[159,10656,984],{"class":185},[159,10658,189],{"class":165},[159,10660,989],{"class":192},[159,10662,6049],{"class":165},[159,10664,10665,10667,10669,10672,10674],{"class":161,"line":251},[159,10666,179],{"class":165},[159,10668,998],{"class":169},[159,10670,10671],{"class":165},">tab栏切换\u003C\u002F",[159,10673,998],{"class":169},[159,10675,173],{"class":165},[159,10677,10678,10680,10682],{"class":161,"line":261},[159,10679,179],{"class":165},[159,10681,1468],{"class":169},[159,10683,173],{"class":165},[159,10685,10686,10688],{"class":161,"line":603},[159,10687,1475],{"class":169},[159,10689,1478],{"class":165},[159,10691,10692,10694,10696,10698],{"class":161,"line":621},[159,10693,1497],{"class":1146},[159,10695,1486],{"class":165},[159,10697,1489],{"class":1146},[159,10699,1492],{"class":165},[159,10701,10702,10704,10706,10708],{"class":161,"line":634},[159,10703,1483],{"class":1146},[159,10705,1486],{"class":165},[159,10707,1489],{"class":1146},[159,10709,1492],{"class":165},[159,10711,10712],{"class":161,"line":640},[159,10713,1508],{"class":165},[159,10715,10716],{"class":161,"line":1075},[159,10717,590],{"emptyLinePlaceholder":589},[159,10719,10720,10723],{"class":161,"line":1081},[159,10721,10722],{"class":185},"    .tab",[159,10724,1478],{"class":165},[159,10726,10727,10729,10731,10734,10736],{"class":161,"line":1091},[159,10728,1563],{"class":1146},[159,10730,1486],{"class":165},[159,10732,10733],{"class":1146},"590",[159,10735,1571],{"class":1142},[159,10737,1492],{"class":165},[159,10739,10740,10742,10744,10747,10749],{"class":161,"line":1100},[159,10741,1578],{"class":1146},[159,10743,1486],{"class":165},[159,10745,10746],{"class":1146},"340",[159,10748,1571],{"class":1142},[159,10750,1492],{"class":165},[159,10752,10753,10755,10757,10759,10761],{"class":161,"line":1123},[159,10754,1497],{"class":1146},[159,10756,1486],{"class":165},[159,10758,1739],{"class":1146},[159,10760,1571],{"class":1142},[159,10762,1492],{"class":165},[159,10764,10765,10767,10769,10771,10773,10775,10777],{"class":161,"line":1132},[159,10766,9018],{"class":1146},[159,10768,1486],{"class":165},[159,10770,4932],{"class":1146},[159,10772,1571],{"class":1142},[159,10774,7709],{"class":1146},[159,10776,9287],{"class":1146},[159,10778,1492],{"class":165},[159,10780,10781],{"class":161,"line":1139},[159,10782,1508],{"class":165},[159,10784,10785],{"class":161,"line":1168},[159,10786,590],{"emptyLinePlaceholder":589},[159,10788,10789,10792],{"class":161,"line":1174},[159,10790,10791],{"class":185},"    .tab-nav",[159,10793,1478],{"class":165},[159,10795,10796,10798,10800,10802,10804],{"class":161,"line":1180},[159,10797,1563],{"class":1146},[159,10799,1486],{"class":165},[159,10801,1596],{"class":1146},[159,10803,1662],{"class":1142},[159,10805,1492],{"class":165},[159,10807,10808,10810,10812,10815,10817],{"class":161,"line":1194},[159,10809,1578],{"class":1146},[159,10811,1486],{"class":165},[159,10813,10814],{"class":1146},"60",[159,10816,1571],{"class":1142},[159,10818,1492],{"class":165},[159,10820,10821,10823,10825,10827,10829],{"class":161,"line":1200},[159,10822,4264],{"class":1146},[159,10824,1486],{"class":165},[159,10826,10814],{"class":1146},[159,10828,1571],{"class":1142},[159,10830,1492],{"class":165},[159,10832,10833,10835,10837,10839],{"class":161,"line":1221},[159,10834,1818],{"class":1146},[159,10836,1486],{"class":165},[159,10838,1823],{"class":1146},[159,10840,1492],{"class":165},[159,10842,10843,10845,10847,10849],{"class":161,"line":1230},[159,10844,1831],{"class":1146},[159,10846,1486],{"class":165},[159,10848,1836],{"class":1146},[159,10850,1492],{"class":165},[159,10852,10853],{"class":161,"line":1247},[159,10854,1508],{"class":165},[159,10856,10857],{"class":161,"line":1265},[159,10858,590],{"emptyLinePlaceholder":589},[159,10860,10861,10863,10866],{"class":161,"line":1277},[159,10862,10791],{"class":185},[159,10864,10865],{"class":169}," h3",[159,10867,1478],{"class":165},[159,10869,10870,10872,10874,10877,10879],{"class":161,"line":1283},[159,10871,1721],{"class":1146},[159,10873,1486],{"class":165},[159,10875,10876],{"class":1146},"24",[159,10878,1571],{"class":1142},[159,10880,1492],{"class":165},[159,10882,10883,10885,10887,10890],{"class":161,"line":1294},[159,10884,9377],{"class":1146},[159,10886,1486],{"class":165},[159,10888,10889],{"class":1146},"normal",[159,10891,1492],{"class":165},[159,10893,10894,10896,10898,10900,10902],{"class":161,"line":1305},[159,10895,9041],{"class":1146},[159,10897,1486],{"class":165},[159,10899,1739],{"class":1146},[159,10901,1571],{"class":1142},[159,10903,1492],{"class":165},[159,10905,10906],{"class":161,"line":1311},[159,10907,1508],{"class":165},[159,10909,10910],{"class":161,"line":1322},[159,10911,590],{"emptyLinePlaceholder":589},[159,10913,10914,10916,10918],{"class":161,"line":1327},[159,10915,10791],{"class":185},[159,10917,8323],{"class":169},[159,10919,1478],{"class":165},[159,10921,10922,10924,10926,10928],{"class":161,"line":1336},[159,10923,1524],{"class":1146},[159,10925,1486],{"class":165},[159,10927,1529],{"class":1146},[159,10929,1492],{"class":165},[159,10931,10932,10934,10936,10938],{"class":161,"line":1345},[159,10933,1818],{"class":1146},[159,10935,1486],{"class":165},[159,10937,1823],{"class":1146},[159,10939,1492],{"class":165},[159,10941,10942,10944,10946,10948],{"class":161,"line":1350},[159,10943,1831],{"class":1146},[159,10945,1486],{"class":165},[159,10947,8685],{"class":1146},[159,10949,1492],{"class":165},[159,10951,10952],{"class":161,"line":1764},[159,10953,1508],{"class":165},[159,10955,10956],{"class":161,"line":1769},[159,10957,590],{"emptyLinePlaceholder":589},[159,10959,10960,10962,10964,10966],{"class":161,"line":1777},[159,10961,10791],{"class":185},[159,10963,8323],{"class":169},[159,10965,1894],{"class":169},[159,10967,1478],{"class":165},[159,10969,10970,10972,10974,10976,10979,10981],{"class":161,"line":1788},[159,10971,1497],{"class":1146},[159,10973,1486],{"class":165},[159,10975,1489],{"class":1146},[159,10977,10978],{"class":1146}," 20",[159,10980,1571],{"class":1142},[159,10982,1492],{"class":165},[159,10984,10985,10987,10989,10991,10993],{"class":161,"line":1802},[159,10986,1721],{"class":1146},[159,10988,1486],{"class":165},[159,10990,7678],{"class":1146},[159,10992,1571],{"class":1142},[159,10994,1492],{"class":165},[159,10996,10997],{"class":161,"line":1815},[159,10998,1508],{"class":165},[159,11000,11001],{"class":161,"line":1828},[159,11002,590],{"emptyLinePlaceholder":589},[159,11004,11005,11007,11009,11011,11013],{"class":161,"line":1841},[159,11006,10791],{"class":185},[159,11008,8323],{"class":169},[159,11010,1894],{"class":169},[159,11012,7885],{"class":169},[159,11014,1478],{"class":165},[159,11016,11017,11020,11022,11024],{"class":161,"line":1852},[159,11018,11019],{"class":1146},"      text-decoration",[159,11021,1486],{"class":165},[159,11023,1529],{"class":1146},[159,11025,1492],{"class":165},[159,11027,11028,11030,11032,11035,11037,11039,11042],{"class":161,"line":1866},[159,11029,9275],{"class":1146},[159,11031,1486],{"class":165},[159,11033,11034],{"class":1146},"2",[159,11036,1571],{"class":1142},[159,11038,7709],{"class":1146},[159,11040,11041],{"class":1146}," transparent",[159,11043,1492],{"class":165},[159,11045,11046,11048,11050,11052],{"class":161,"line":1879},[159,11047,4322],{"class":1146},[159,11049,1486],{"class":165},[159,11051,9412],{"class":1146},[159,11053,1492],{"class":165},[159,11055,11056],{"class":161,"line":1884},[159,11057,1508],{"class":165},[159,11059,11060],{"class":161,"line":1889},[159,11061,590],{"emptyLinePlaceholder":589},[159,11063,11064,11066,11068,11070,11072,11075],{"class":161,"line":1899},[159,11065,10791],{"class":185},[159,11067,8323],{"class":169},[159,11069,1894],{"class":169},[159,11071,7885],{"class":169},[159,11073,11074],{"class":185},".active",[159,11076,1478],{"class":165},[159,11078,11079,11081,11083,11086],{"class":161,"line":1912},[159,11080,8828],{"class":1146},[159,11082,1486],{"class":165},[159,11084,11085],{"class":1146},"#e1251b",[159,11087,1492],{"class":165},[159,11089,11090,11092,11094,11096],{"class":161,"line":1925},[159,11091,4322],{"class":1146},[159,11093,1486],{"class":165},[159,11095,11085],{"class":1146},[159,11097,1492],{"class":165},[159,11099,11100],{"class":161,"line":1956},[159,11101,1508],{"class":165},[159,11103,11104],{"class":161,"line":1971},[159,11105,590],{"emptyLinePlaceholder":589},[159,11107,11108,11111],{"class":161,"line":1976},[159,11109,11110],{"class":185},"    .tab-content",[159,11112,1478],{"class":165},[159,11114,11115,11117,11119,11121,11124,11126],{"class":161,"line":1981},[159,11116,1483],{"class":1146},[159,11118,1486],{"class":165},[159,11120,1489],{"class":1146},[159,11122,11123],{"class":1146}," 16",[159,11125,1571],{"class":1142},[159,11127,1492],{"class":165},[159,11129,11130],{"class":161,"line":1989},[159,11131,1508],{"class":165},[159,11133,11134],{"class":161,"line":2001},[159,11135,590],{"emptyLinePlaceholder":589},[159,11137,11138,11140,11142],{"class":161,"line":2006},[159,11139,11110],{"class":185},[159,11141,9217],{"class":185},[159,11143,1478],{"class":165},[159,11145,11146,11148,11150,11152],{"class":161,"line":2015},[159,11147,1818],{"class":1146},[159,11149,1486],{"class":165},[159,11151,1529],{"class":1146},[159,11153,1492],{"class":165},[159,11155,11156],{"class":161,"line":2024},[159,11157,1508],{"class":165},[159,11159,11160],{"class":161,"line":2029},[159,11161,590],{"emptyLinePlaceholder":589},[159,11163,11164,11166,11169],{"class":161,"line":2038},[159,11165,11110],{"class":185},[159,11167,11168],{"class":185}," .item.active",[159,11170,1478],{"class":165},[159,11172,11173,11175,11177,11179],{"class":161,"line":2053},[159,11174,1818],{"class":1146},[159,11176,1486],{"class":165},[159,11178,7896],{"class":1146},[159,11180,1492],{"class":165},[159,11182,11183],{"class":161,"line":2070},[159,11184,1508],{"class":165},[159,11186,11187,11189,11191],{"class":161,"line":2095},[159,11188,254],{"class":165},[159,11190,1468],{"class":169},[159,11192,173],{"class":165},[159,11194,11195,11197,11199],{"class":161,"line":2104},[159,11196,264],{"class":165},[159,11198,949],{"class":169},[159,11200,173],{"class":165},[159,11202,11203],{"class":161,"line":2120},[159,11204,590],{"emptyLinePlaceholder":589},[159,11206,11207,11209,11211],{"class":161,"line":2134},[159,11208,166],{"class":165},[159,11210,170],{"class":169},[159,11212,173],{"class":165},[159,11214,11215,11217,11219,11221,11223,11226],{"class":161,"line":2143},[159,11216,179],{"class":165},[159,11218,182],{"class":169},[159,11220,186],{"class":185},[159,11222,189],{"class":165},[159,11224,11225],{"class":192},"\"tab\"",[159,11227,173],{"class":165},[159,11229,11230,11232,11234,11236,11238,11241],{"class":161,"line":2165},[159,11231,2056],{"class":165},[159,11233,182],{"class":169},[159,11235,186],{"class":185},[159,11237,189],{"class":165},[159,11239,11240],{"class":192},"\"tab-nav\"",[159,11242,173],{"class":165},[159,11244,11245,11247,11249,11252,11254],{"class":161,"line":2178},[159,11246,2073],{"class":165},[159,11248,42],{"class":169},[159,11250,11251],{"class":165},">每日特价\u003C\u002F",[159,11253,42],{"class":169},[159,11255,173],{"class":165},[159,11257,11258,11260,11262],{"class":161,"line":2191},[159,11259,2073],{"class":165},[159,11261,103],{"class":169},[159,11263,173],{"class":165},[159,11265,11266,11268,11270,11272,11274,11276,11278,11280,11282,11284,11287,11290,11292,11294,11296],{"class":161,"line":2204},[159,11267,2146],{"class":165},[159,11269,106],{"class":169},[159,11271,8082],{"class":165},[159,11273,8085],{"class":169},[159,11275,186],{"class":185},[159,11277,189],{"class":165},[159,11279,6631],{"class":192},[159,11281,8088],{"class":185},[159,11283,189],{"class":165},[159,11285,11286],{"class":192},"\"javascript:;\"",[159,11288,11289],{"class":165},">精选\u003C\u002F",[159,11291,8085],{"class":169},[159,11293,2158],{"class":165},[159,11295,106],{"class":169},[159,11297,173],{"class":165},[159,11299,11300,11302,11304,11306,11308,11310,11312,11314,11317,11319,11321,11323],{"class":161,"line":2217},[159,11301,2146],{"class":165},[159,11303,106],{"class":169},[159,11305,8082],{"class":165},[159,11307,8085],{"class":169},[159,11309,8088],{"class":185},[159,11311,189],{"class":165},[159,11313,11286],{"class":192},[159,11315,11316],{"class":165},">美食\u003C\u002F",[159,11318,8085],{"class":169},[159,11320,2158],{"class":165},[159,11322,106],{"class":169},[159,11324,173],{"class":165},[159,11326,11327,11329,11331,11333,11335,11337,11339,11341,11344,11346,11348,11350],{"class":161,"line":2230},[159,11328,2146],{"class":165},[159,11330,106],{"class":169},[159,11332,8082],{"class":165},[159,11334,8085],{"class":169},[159,11336,8088],{"class":185},[159,11338,189],{"class":165},[159,11340,11286],{"class":192},[159,11342,11343],{"class":165},">百货\u003C\u002F",[159,11345,8085],{"class":169},[159,11347,2158],{"class":165},[159,11349,106],{"class":169},[159,11351,173],{"class":165},[159,11353,11354,11356,11358,11360,11362,11364,11366,11368,11371,11373,11375,11377],{"class":161,"line":2243},[159,11355,2146],{"class":165},[159,11357,106],{"class":169},[159,11359,8082],{"class":165},[159,11361,8085],{"class":169},[159,11363,8088],{"class":185},[159,11365,189],{"class":165},[159,11367,11286],{"class":192},[159,11369,11370],{"class":165},">个护\u003C\u002F",[159,11372,8085],{"class":169},[159,11374,2158],{"class":165},[159,11376,106],{"class":169},[159,11378,173],{"class":165},[159,11380,11381,11383,11385,11387,11389,11391,11393,11395,11398,11400,11402,11404],{"class":161,"line":2256},[159,11382,2146],{"class":165},[159,11384,106],{"class":169},[159,11386,8082],{"class":165},[159,11388,8085],{"class":169},[159,11390,8088],{"class":185},[159,11392,189],{"class":165},[159,11394,11286],{"class":192},[159,11396,11397],{"class":165},">预告\u003C\u002F",[159,11399,8085],{"class":169},[159,11401,2158],{"class":165},[159,11403,106],{"class":169},[159,11405,173],{"class":165},[159,11407,11408,11410,11412],{"class":161,"line":2266},[159,11409,2259],{"class":165},[159,11411,103],{"class":169},[159,11413,173],{"class":165},[159,11415,11416,11418,11420],{"class":161,"line":2275},[159,11417,1084],{"class":165},[159,11419,182],{"class":169},[159,11421,173],{"class":165},[159,11423,11424,11426,11428,11430,11432,11435],{"class":161,"line":2284},[159,11425,2056],{"class":165},[159,11427,182],{"class":169},[159,11429,186],{"class":185},[159,11431,189],{"class":165},[159,11433,11434],{"class":192},"\"tab-content\"",[159,11436,173],{"class":165},[159,11438,11439,11441,11443,11445,11447,11450,11452,11454,11456,11458,11461,11463,11465,11467,11470,11472],{"class":161,"line":2293},[159,11440,2073],{"class":165},[159,11442,182],{"class":169},[159,11444,186],{"class":185},[159,11446,189],{"class":165},[159,11448,11449],{"class":192},"\"item active\"",[159,11451,8082],{"class":165},[159,11453,23],{"class":169},[159,11455,2078],{"class":185},[159,11457,189],{"class":165},[159,11459,11460],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[159,11462,2086],{"class":185},[159,11464,189],{"class":165},[159,11466,552],{"class":192},[159,11468,11469],{"class":165}," \u002F>\u003C\u002F",[159,11471,182],{"class":169},[159,11473,173],{"class":165},[159,11475,11476,11478,11480,11482,11484,11486,11488,11490,11492,11494,11497,11499,11501,11503,11505,11507],{"class":161,"line":2306},[159,11477,2073],{"class":165},[159,11479,182],{"class":169},[159,11481,186],{"class":185},[159,11483,189],{"class":165},[159,11485,9666],{"class":192},[159,11487,8082],{"class":165},[159,11489,23],{"class":169},[159,11491,2078],{"class":185},[159,11493,189],{"class":165},[159,11495,11496],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[159,11498,2086],{"class":185},[159,11500,189],{"class":165},[159,11502,552],{"class":192},[159,11504,11469],{"class":165},[159,11506,182],{"class":169},[159,11508,173],{"class":165},[159,11510,11511,11513,11515,11517,11519,11521,11523,11525,11527,11529,11532,11534,11536,11538,11540,11542],{"class":161,"line":2330},[159,11512,2073],{"class":165},[159,11514,182],{"class":169},[159,11516,186],{"class":185},[159,11518,189],{"class":165},[159,11520,9666],{"class":192},[159,11522,8082],{"class":165},[159,11524,23],{"class":169},[159,11526,2078],{"class":185},[159,11528,189],{"class":165},[159,11530,11531],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[159,11533,2086],{"class":185},[159,11535,189],{"class":165},[159,11537,552],{"class":192},[159,11539,11469],{"class":165},[159,11541,182],{"class":169},[159,11543,173],{"class":165},[159,11545,11546,11548,11550,11552,11554,11556,11558,11560,11562,11564,11567,11569,11571,11573,11575,11577],{"class":161,"line":2350},[159,11547,2073],{"class":165},[159,11549,182],{"class":169},[159,11551,186],{"class":185},[159,11553,189],{"class":165},[159,11555,9666],{"class":192},[159,11557,8082],{"class":165},[159,11559,23],{"class":169},[159,11561,2078],{"class":185},[159,11563,189],{"class":165},[159,11565,11566],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[159,11568,2086],{"class":185},[159,11570,189],{"class":165},[159,11572,552],{"class":192},[159,11574,11469],{"class":165},[159,11576,182],{"class":169},[159,11578,173],{"class":165},[159,11580,11581,11583,11585,11587,11589,11591,11593,11595,11597,11599,11602,11604,11606,11608,11610,11612],{"class":161,"line":2370},[159,11582,2073],{"class":165},[159,11584,182],{"class":169},[159,11586,186],{"class":185},[159,11588,189],{"class":165},[159,11590,9666],{"class":192},[159,11592,8082],{"class":165},[159,11594,23],{"class":169},[159,11596,2078],{"class":185},[159,11598,189],{"class":165},[159,11600,11601],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[159,11603,2086],{"class":185},[159,11605,189],{"class":165},[159,11607,552],{"class":192},[159,11609,11469],{"class":165},[159,11611,182],{"class":169},[159,11613,173],{"class":165},[159,11615,11616,11618,11620],{"class":161,"line":2390},[159,11617,1084],{"class":165},[159,11619,182],{"class":169},[159,11621,173],{"class":165},[159,11623,11624,11626,11628],{"class":161,"line":2410},[159,11625,254],{"class":165},[159,11627,182],{"class":169},[159,11629,173],{"class":165},[159,11631,11632,11634,11636],{"class":161,"line":2430},[159,11633,179],{"class":165},[159,11635,228],{"class":169},[159,11637,173],{"class":165},[159,11639,11640],{"class":161,"line":2450},[159,11641,11642],{"class":1135},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[159,11644,11645],{"class":161,"line":2471},[159,11646,11647],{"class":1135},"    \u002F\u002F 1.1 获取 a 元素 \n",[159,11649,11650,11652,11655,11657,11659,11661,11663,11666],{"class":161,"line":2477},[159,11651,1143],{"class":1142},[159,11653,11654],{"class":1146}," as",[159,11656,1150],{"class":1142},[159,11658,1153],{"class":165},[159,11660,2551],{"class":185},[159,11662,1159],{"class":165},[159,11664,11665],{"class":192},"'.tab-nav a'",[159,11667,1165],{"class":165},[159,11669,11670],{"class":161,"line":2498},[159,11671,11672],{"class":1135},"    \u002F\u002F console.log(as) \n",[159,11674,11675,11678,11681,11684,11686,11688,11690,11693,11695,11698,11700,11703,11706],{"class":161,"line":2518},[159,11676,11677],{"class":1142},"    for",[159,11679,11680],{"class":165}," (",[159,11682,11683],{"class":1142},"let",[159,11685,1186],{"class":165},[159,11687,189],{"class":1142},[159,11689,1259],{"class":1146},[159,11691,11692],{"class":165},"; i ",[159,11694,166],{"class":1142},[159,11696,11697],{"class":165}," as.",[159,11699,3828],{"class":1146},[159,11701,11702],{"class":165},"; i",[159,11704,11705],{"class":1142},"++",[159,11707,1262],{"class":165},[159,11709,11710],{"class":161,"line":2539},[159,11711,11712],{"class":1135},"      \u002F\u002F console.log(as[i])\n",[159,11714,11715],{"class":161,"line":2561},[159,11716,11717],{"class":1135},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[159,11719,11720,11723,11725,11727,11730,11732,11734],{"class":161,"line":2573},[159,11721,11722],{"class":165},"      as[i].",[159,11724,4724],{"class":185},[159,11726,1159],{"class":165},[159,11728,11729],{"class":192},"'mouseenter'",[159,11731,1939],{"class":165},[159,11733,1215],{"class":1142},[159,11735,1218],{"class":165},[159,11737,11738],{"class":161,"line":2591},[159,11739,11740],{"class":1135},"        \u002F\u002F console.log('鼠标经过')\n",[159,11742,11743],{"class":161,"line":2602},[159,11744,11745],{"class":1135},"        \u002F\u002F 排他思想  \n",[159,11747,11748],{"class":161,"line":2613},[159,11749,11750],{"class":1135},"        \u002F\u002F 干掉别人 移除类active\n",[159,11752,11753,11756,11758,11760,11763,11765,11767,11769,11772],{"class":161,"line":2624},[159,11754,11755],{"class":165},"        document.",[159,11757,1156],{"class":185},[159,11759,1159],{"class":165},[159,11761,11762],{"class":192},"'.tab-nav .active'",[159,11764,3900],{"class":165},[159,11766,3903],{"class":185},[159,11768,1159],{"class":165},[159,11770,11771],{"class":192},"'active'",[159,11773,1165],{"class":165},[159,11775,11776],{"class":161,"line":2630},[159,11777,11778],{"class":1135},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[159,11780,11781,11784,11787,11789,11791,11793],{"class":161,"line":2636},[159,11782,11783],{"class":1146},"        this",[159,11785,11786],{"class":165},".classList.",[159,11788,2680],{"class":185},[159,11790,1159],{"class":165},[159,11792,11771],{"class":192},[159,11794,1165],{"class":165},[159,11796,11797],{"class":161,"line":2642},[159,11798,590],{"emptyLinePlaceholder":589},[159,11800,11801],{"class":161,"line":2648},[159,11802,11803],{"class":1135},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[159,11805,11806],{"class":161,"line":2674},[159,11807,11808],{"class":1135},"        \u002F\u002F 干掉别人\n",[159,11810,11811,11813,11815,11817,11820,11822,11824,11826,11828],{"class":161,"line":2689},[159,11812,11755],{"class":165},[159,11814,1156],{"class":185},[159,11816,1159],{"class":165},[159,11818,11819],{"class":192},"'.tab-content .active'",[159,11821,3900],{"class":165},[159,11823,3903],{"class":185},[159,11825,1159],{"class":165},[159,11827,11771],{"class":192},[159,11829,1165],{"class":165},[159,11831,11832],{"class":161,"line":2694},[159,11833,11834],{"class":1135},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[159,11836,11837,11839,11841,11843,11846,11848,11850,11852,11854,11856,11858,11860,11862],{"class":161,"line":2721},[159,11838,11755],{"class":165},[159,11840,1156],{"class":185},[159,11842,1159],{"class":165},[159,11844,11845],{"class":192},"`.tab-content .item:nth-child(${",[159,11847,1241],{"class":165},[159,11849,3925],{"class":1142},[159,11851,2707],{"class":1146},[159,11853,3930],{"class":192},[159,11855,3900],{"class":165},[159,11857,2680],{"class":185},[159,11859,1159],{"class":165},[159,11861,11771],{"class":192},[159,11863,1165],{"class":165},[159,11865,11866],{"class":161,"line":2726},[159,11867,590],{"emptyLinePlaceholder":589},[159,11869,11870],{"class":161,"line":2735},[159,11871,11872],{"class":165},"      })\n",[159,11874,11875],{"class":161,"line":2744},[159,11876,1508],{"class":165},[159,11878,11879,11881,11883],{"class":161,"line":2753},[159,11880,254],{"class":165},[159,11882,228],{"class":169},[159,11884,173],{"class":165},[159,11886,11887,11889,11891],{"class":161,"line":2758},[159,11888,264],{"class":165},[159,11890,170],{"class":169},[159,11892,173],{"class":165},[159,11894,11895],{"class":161,"line":3959},[159,11896,590],{"emptyLinePlaceholder":589},[159,11898,11899,11901,11903],{"class":161,"line":3968},[159,11900,264],{"class":165},[159,11902,522],{"class":169},[159,11904,173],{"class":165},[14,11906,11907],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,11909,11910],{},"在监听事件中，this指向的就是他的调用者",[14,11912,11913],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,11915,433],{},[14,11917,11918],{},"(function () {",[14,11920,11921],{},"const list = document.querySelector('.xtx-elevator-list')",[14,11923,11924],{},"list.addEventListener('click', function (e) {",[14,11926,11927],{},"if (e.target.tagName === 'A') {",[14,11929,11930],{},"\u002F\u002F 排他思想",[14,11932,11933],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,11935,11936],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,11938,11939],{},"\u002F\u002F console.log(old);",[14,11941,11942],{},"\u002F\u002F 判断",[14,11944,11945],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,11947,11948],{},"if (old) old.classList.remove('active')",[14,11950,11951],{},"e.target.classList.add('active')",[14,11953,886],{},[14,11955,11956],{},"})",[14,11958,11959],{},"})();",[42,11961,11963],{"id":11962},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[151,11965,11967],{"className":520,"code":11966,"language":522,"meta":25,"style":25},"\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",[49,11968,11969,11979,11983,11991,11995,12009,12023,12035,12043,12049,12059,12069,12073,12077,12084,12096,12107,12124,12137,12151,12161,12165,12169,12176,12187,12205,12215,12227,12231,12235,12242,12259,12270,12282,12286,12290,12297,12309,12313,12321,12329,12333,12341,12350,12359,12375,12419,12427,12440,12453,12466,12474,12482,12491,12519,12527,12539,12552,12565,12573,12581,12589,12615,12623,12636,12648,12661,12669,12677,12685,12711,12719,12732,12744,12757,12765,12773,12781,12786,12806,12811,12831,12836,12853,12858,12866,12871,12901,12914,12918,12922,12927,12931,12959,12964,12981,12986,12991,12996,13001,13028,13032,13036,13044,13052,13056],{"__ignoreMap":25},[159,11970,11971,11973,11975,11977],{"class":161,"line":162},[159,11972,914],{"class":165},[159,11974,917],{"class":169},[159,11976,920],{"class":185},[159,11978,173],{"class":165},[159,11980,11981],{"class":161,"line":176},[159,11982,590],{"emptyLinePlaceholder":589},[159,11984,11985,11987,11989],{"class":161,"line":203},[159,11986,166],{"class":165},[159,11988,522],{"class":169},[159,11990,173],{"class":165},[159,11992,11993],{"class":161,"line":223},[159,11994,590],{"emptyLinePlaceholder":589},[159,11996,11997,11999,12001,12003,12005,12007],{"class":161,"line":233},[159,11998,166],{"class":165},[159,12000,949],{"class":169},[159,12002,931],{"class":185},[159,12004,189],{"class":165},[159,12006,936],{"class":192},[159,12008,173],{"class":165},[159,12010,12011,12013,12015,12017,12019,12021],{"class":161,"line":239},[159,12012,179],{"class":165},[159,12014,958],{"class":169},[159,12016,961],{"class":185},[159,12018,189],{"class":165},[159,12020,966],{"class":192},[159,12022,173],{"class":165},[159,12024,12025,12027,12029,12031,12033],{"class":161,"line":245},[159,12026,179],{"class":165},[159,12028,998],{"class":169},[159,12030,2158],{"class":165},[159,12032,998],{"class":169},[159,12034,173],{"class":165},[159,12036,12037,12039,12041],{"class":161,"line":251},[159,12038,179],{"class":165},[159,12040,1468],{"class":169},[159,12042,173],{"class":165},[159,12044,12045,12047],{"class":161,"line":261},[159,12046,1475],{"class":169},[159,12048,1478],{"class":165},[159,12050,12051,12053,12055,12057],{"class":161,"line":603},[159,12052,1497],{"class":1146},[159,12054,1486],{"class":165},[159,12056,1489],{"class":1146},[159,12058,1492],{"class":165},[159,12060,12061,12063,12065,12067],{"class":161,"line":621},[159,12062,1483],{"class":1146},[159,12064,1486],{"class":165},[159,12066,1489],{"class":1146},[159,12068,1492],{"class":165},[159,12070,12071],{"class":161,"line":634},[159,12072,1508],{"class":165},[159,12074,12075],{"class":161,"line":640},[159,12076,590],{"emptyLinePlaceholder":589},[159,12078,12079,12082],{"class":161,"line":1075},[159,12080,12081],{"class":169},"    table",[159,12083,1478],{"class":165},[159,12085,12086,12089,12091,12094],{"class":161,"line":1081},[159,12087,12088],{"class":1146},"      border-collapse",[159,12090,1486],{"class":165},[159,12092,12093],{"class":1146},"collapse",[159,12095,1492],{"class":165},[159,12097,12098,12101,12103,12105],{"class":161,"line":1091},[159,12099,12100],{"class":1146},"      border-spacing",[159,12102,1486],{"class":165},[159,12104,1489],{"class":1146},[159,12106,1492],{"class":165},[159,12108,12109,12111,12113,12115,12117,12119,12122],{"class":161,"line":1100},[159,12110,9018],{"class":1146},[159,12112,1486],{"class":165},[159,12114,4932],{"class":1146},[159,12116,1571],{"class":1142},[159,12118,7709],{"class":1146},[159,12120,12121],{"class":1146}," #c0c0c0",[159,12123,1492],{"class":165},[159,12125,12126,12128,12130,12133,12135],{"class":161,"line":1123},[159,12127,1563],{"class":1146},[159,12129,1486],{"class":165},[159,12131,12132],{"class":1146},"500",[159,12134,1571],{"class":1142},[159,12136,1492],{"class":165},[159,12138,12139,12141,12143,12145,12147,12149],{"class":161,"line":1132},[159,12140,1497],{"class":1146},[159,12142,1486],{"class":165},[159,12144,1596],{"class":1146},[159,12146,1571],{"class":1142},[159,12148,1601],{"class":1146},[159,12150,1492],{"class":165},[159,12152,12153,12155,12157,12159],{"class":161,"line":1139},[159,12154,4188],{"class":1146},[159,12156,1486],{"class":165},[159,12158,4193],{"class":1146},[159,12160,1492],{"class":165},[159,12162,12163],{"class":161,"line":1168},[159,12164,1508],{"class":165},[159,12166,12167],{"class":161,"line":1174},[159,12168,590],{"emptyLinePlaceholder":589},[159,12170,12171,12174],{"class":161,"line":1180},[159,12172,12173],{"class":169},"    th",[159,12175,1478],{"class":165},[159,12177,12178,12180,12182,12185],{"class":161,"line":1194},[159,12179,1682],{"class":1146},[159,12181,1486],{"class":165},[159,12183,12184],{"class":1146},"#09c",[159,12186,1492],{"class":165},[159,12188,12189,12192,12194,12196,12198,12200,12203],{"class":161,"line":1200},[159,12190,12191],{"class":1146},"      font",[159,12193,1486],{"class":165},[159,12195,9382],{"class":1146},[159,12197,11123],{"class":1146},[159,12199,1571],{"class":1142},[159,12201,12202],{"class":192}," \"微软雅黑\"",[159,12204,1492],{"class":165},[159,12206,12207,12209,12211,12213],{"class":161,"line":1221},[159,12208,4322],{"class":1146},[159,12210,1486],{"class":165},[159,12212,7868],{"class":1146},[159,12214,1492],{"class":165},[159,12216,12217,12219,12221,12223,12225],{"class":161,"line":1230},[159,12218,1578],{"class":1146},[159,12220,1486],{"class":165},[159,12222,10876],{"class":1146},[159,12224,1571],{"class":1142},[159,12226,1492],{"class":165},[159,12228,12229],{"class":161,"line":1247},[159,12230,1508],{"class":165},[159,12232,12233],{"class":161,"line":1265},[159,12234,590],{"emptyLinePlaceholder":589},[159,12236,12237,12240],{"class":161,"line":1277},[159,12238,12239],{"class":169},"    td",[159,12241,1478],{"class":165},[159,12243,12244,12246,12248,12250,12252,12254,12257],{"class":161,"line":1283},[159,12245,9018],{"class":1146},[159,12247,1486],{"class":165},[159,12249,4932],{"class":1146},[159,12251,1571],{"class":1142},[159,12253,7709],{"class":1146},[159,12255,12256],{"class":1146}," #d0d0d0",[159,12258,1492],{"class":165},[159,12260,12261,12263,12265,12268],{"class":161,"line":1294},[159,12262,4322],{"class":1146},[159,12264,1486],{"class":165},[159,12266,12267],{"class":1146},"#404060",[159,12269,1492],{"class":165},[159,12271,12272,12274,12276,12278,12280],{"class":161,"line":1305},[159,12273,1483],{"class":1146},[159,12275,1486],{"class":165},[159,12277,1964],{"class":1146},[159,12279,1571],{"class":1142},[159,12281,1492],{"class":165},[159,12283,12284],{"class":161,"line":1311},[159,12285,1508],{"class":165},[159,12287,12288],{"class":161,"line":1322},[159,12289,590],{"emptyLinePlaceholder":589},[159,12291,12292,12295],{"class":161,"line":1327},[159,12293,12294],{"class":185},"    .allCheck",[159,12296,1478],{"class":165},[159,12298,12299,12301,12303,12305,12307],{"class":161,"line":1336},[159,12300,1563],{"class":1146},[159,12302,1486],{"class":165},[159,12304,9100],{"class":1146},[159,12306,1571],{"class":1142},[159,12308,1492],{"class":165},[159,12310,12311],{"class":161,"line":1345},[159,12312,1508],{"class":165},[159,12314,12315,12317,12319],{"class":161,"line":1350},[159,12316,254],{"class":165},[159,12318,1468],{"class":169},[159,12320,173],{"class":165},[159,12322,12323,12325,12327],{"class":161,"line":1764},[159,12324,264],{"class":165},[159,12326,949],{"class":169},[159,12328,173],{"class":165},[159,12330,12331],{"class":161,"line":1769},[159,12332,590],{"emptyLinePlaceholder":589},[159,12334,12335,12337,12339],{"class":161,"line":1777},[159,12336,166],{"class":165},[159,12338,170],{"class":169},[159,12340,173],{"class":165},[159,12342,12343,12345,12348],{"class":161,"line":1788},[159,12344,179],{"class":165},[159,12346,12347],{"class":169},"table",[159,12349,173],{"class":165},[159,12351,12352,12354,12357],{"class":161,"line":1802},[159,12353,2056],{"class":165},[159,12355,12356],{"class":169},"tr",[159,12358,173],{"class":165},[159,12360,12361,12363,12366,12368,12370,12373],{"class":161,"line":1815},[159,12362,2073],{"class":165},[159,12364,12365],{"class":169},"th",[159,12367,186],{"class":185},[159,12369,189],{"class":165},[159,12371,12372],{"class":192},"\"allCheck\"",[159,12374,173],{"class":165},[159,12376,12377,12379,12381,12383,12385,12387,12389,12391,12393,12395,12397,12400,12403,12405,12407,12409,12412,12415,12417],{"class":161,"line":1828},[159,12378,2146],{"class":165},[159,12380,536],{"class":169},[159,12382,539],{"class":185},[159,12384,189],{"class":165},[159,12386,544],{"class":192},[159,12388,547],{"class":185},[159,12390,189],{"class":165},[159,12392,552],{"class":192},[159,12394,555],{"class":185},[159,12396,189],{"class":165},[159,12398,12399],{"class":192},"\"checkAll\"",[159,12401,12402],{"class":165},"> \u003C",[159,12404,159],{"class":169},[159,12406,186],{"class":185},[159,12408,189],{"class":165},[159,12410,12411],{"class":192},"\"all\"",[159,12413,12414],{"class":165},">全选\u003C\u002F",[159,12416,159],{"class":169},[159,12418,173],{"class":165},[159,12420,12421,12423,12425],{"class":161,"line":1841},[159,12422,2259],{"class":165},[159,12424,12365],{"class":169},[159,12426,173],{"class":165},[159,12428,12429,12431,12433,12436,12438],{"class":161,"line":1852},[159,12430,2073],{"class":165},[159,12432,12365],{"class":169},[159,12434,12435],{"class":165},">商品\u003C\u002F",[159,12437,12365],{"class":169},[159,12439,173],{"class":165},[159,12441,12442,12444,12446,12449,12451],{"class":161,"line":1866},[159,12443,2073],{"class":165},[159,12445,12365],{"class":169},[159,12447,12448],{"class":165},">商家\u003C\u002F",[159,12450,12365],{"class":169},[159,12452,173],{"class":165},[159,12454,12455,12457,12459,12462,12464],{"class":161,"line":1879},[159,12456,2073],{"class":165},[159,12458,12365],{"class":169},[159,12460,12461],{"class":165},">价格\u003C\u002F",[159,12463,12365],{"class":169},[159,12465,173],{"class":165},[159,12467,12468,12470,12472],{"class":161,"line":1884},[159,12469,1084],{"class":165},[159,12471,12356],{"class":169},[159,12473,173],{"class":165},[159,12475,12476,12478,12480],{"class":161,"line":1889},[159,12477,2056],{"class":165},[159,12479,12356],{"class":169},[159,12481,173],{"class":165},[159,12483,12484,12486,12489],{"class":161,"line":1899},[159,12485,2073],{"class":165},[159,12487,12488],{"class":169},"td",[159,12490,173],{"class":165},[159,12492,12493,12495,12497,12499,12501,12503,12505,12507,12510,12512,12514,12517],{"class":161,"line":1912},[159,12494,2146],{"class":165},[159,12496,536],{"class":169},[159,12498,539],{"class":185},[159,12500,189],{"class":165},[159,12502,544],{"class":192},[159,12504,547],{"class":185},[159,12506,189],{"class":165},[159,12508,12509],{"class":192},"\"check\"",[159,12511,186],{"class":185},[159,12513,189],{"class":165},[159,12515,12516],{"class":192},"\"ck\"",[159,12518,173],{"class":165},[159,12520,12521,12523,12525],{"class":161,"line":1925},[159,12522,2259],{"class":165},[159,12524,12488],{"class":169},[159,12526,173],{"class":165},[159,12528,12529,12531,12533,12535,12537],{"class":161,"line":1956},[159,12530,2073],{"class":165},[159,12532,12488],{"class":169},[159,12534,8204],{"class":165},[159,12536,12488],{"class":169},[159,12538,173],{"class":165},[159,12540,12541,12543,12545,12548,12550],{"class":161,"line":1971},[159,12542,2073],{"class":165},[159,12544,12488],{"class":169},[159,12546,12547],{"class":165},">小米\u003C\u002F",[159,12549,12488],{"class":169},[159,12551,173],{"class":165},[159,12553,12554,12556,12558,12561,12563],{"class":161,"line":1976},[159,12555,2073],{"class":165},[159,12557,12488],{"class":169},[159,12559,12560],{"class":165},">￥1999\u003C\u002F",[159,12562,12488],{"class":169},[159,12564,173],{"class":165},[159,12566,12567,12569,12571],{"class":161,"line":1981},[159,12568,1084],{"class":165},[159,12570,12356],{"class":169},[159,12572,173],{"class":165},[159,12574,12575,12577,12579],{"class":161,"line":1989},[159,12576,2056],{"class":165},[159,12578,12356],{"class":169},[159,12580,173],{"class":165},[159,12582,12583,12585,12587],{"class":161,"line":2001},[159,12584,2073],{"class":165},[159,12586,12488],{"class":169},[159,12588,173],{"class":165},[159,12590,12591,12593,12595,12597,12599,12601,12603,12605,12607,12609,12611,12613],{"class":161,"line":2006},[159,12592,2146],{"class":165},[159,12594,536],{"class":169},[159,12596,539],{"class":185},[159,12598,189],{"class":165},[159,12600,544],{"class":192},[159,12602,547],{"class":185},[159,12604,189],{"class":165},[159,12606,12509],{"class":192},[159,12608,186],{"class":185},[159,12610,189],{"class":165},[159,12612,12516],{"class":192},[159,12614,173],{"class":165},[159,12616,12617,12619,12621],{"class":161,"line":2015},[159,12618,2259],{"class":165},[159,12620,12488],{"class":169},[159,12622,173],{"class":165},[159,12624,12625,12627,12629,12632,12634],{"class":161,"line":2024},[159,12626,2073],{"class":165},[159,12628,12488],{"class":169},[159,12630,12631],{"class":165},">小米净水器\u003C\u002F",[159,12633,12488],{"class":169},[159,12635,173],{"class":165},[159,12637,12638,12640,12642,12644,12646],{"class":161,"line":2029},[159,12639,2073],{"class":165},[159,12641,12488],{"class":169},[159,12643,12547],{"class":165},[159,12645,12488],{"class":169},[159,12647,173],{"class":165},[159,12649,12650,12652,12654,12657,12659],{"class":161,"line":2038},[159,12651,2073],{"class":165},[159,12653,12488],{"class":169},[159,12655,12656],{"class":165},">￥4999\u003C\u002F",[159,12658,12488],{"class":169},[159,12660,173],{"class":165},[159,12662,12663,12665,12667],{"class":161,"line":2053},[159,12664,1084],{"class":165},[159,12666,12356],{"class":169},[159,12668,173],{"class":165},[159,12670,12671,12673,12675],{"class":161,"line":2070},[159,12672,2056],{"class":165},[159,12674,12356],{"class":169},[159,12676,173],{"class":165},[159,12678,12679,12681,12683],{"class":161,"line":2095},[159,12680,2073],{"class":165},[159,12682,12488],{"class":169},[159,12684,173],{"class":165},[159,12686,12687,12689,12691,12693,12695,12697,12699,12701,12703,12705,12707,12709],{"class":161,"line":2104},[159,12688,2146],{"class":165},[159,12690,536],{"class":169},[159,12692,539],{"class":185},[159,12694,189],{"class":165},[159,12696,544],{"class":192},[159,12698,547],{"class":185},[159,12700,189],{"class":165},[159,12702,12509],{"class":192},[159,12704,186],{"class":185},[159,12706,189],{"class":165},[159,12708,12516],{"class":192},[159,12710,173],{"class":165},[159,12712,12713,12715,12717],{"class":161,"line":2120},[159,12714,2259],{"class":165},[159,12716,12488],{"class":169},[159,12718,173],{"class":165},[159,12720,12721,12723,12725,12728,12730],{"class":161,"line":2134},[159,12722,2073],{"class":165},[159,12724,12488],{"class":169},[159,12726,12727],{"class":165},">小米电视\u003C\u002F",[159,12729,12488],{"class":169},[159,12731,173],{"class":165},[159,12733,12734,12736,12738,12740,12742],{"class":161,"line":2143},[159,12735,2073],{"class":165},[159,12737,12488],{"class":169},[159,12739,12547],{"class":165},[159,12741,12488],{"class":169},[159,12743,173],{"class":165},[159,12745,12746,12748,12750,12753,12755],{"class":161,"line":2165},[159,12747,2073],{"class":165},[159,12749,12488],{"class":169},[159,12751,12752],{"class":165},">￥5999\u003C\u002F",[159,12754,12488],{"class":169},[159,12756,173],{"class":165},[159,12758,12759,12761,12763],{"class":161,"line":2178},[159,12760,1084],{"class":165},[159,12762,12356],{"class":169},[159,12764,173],{"class":165},[159,12766,12767,12769,12771],{"class":161,"line":2191},[159,12768,254],{"class":165},[159,12770,12347],{"class":169},[159,12772,173],{"class":165},[159,12774,12775,12777,12779],{"class":161,"line":2204},[159,12776,179],{"class":165},[159,12778,228],{"class":169},[159,12780,173],{"class":165},[159,12782,12783],{"class":161,"line":2217},[159,12784,12785],{"class":1135},"    \u002F\u002F 1. 获取大复选框\n",[159,12787,12788,12790,12793,12795,12797,12799,12801,12804],{"class":161,"line":2230},[159,12789,1143],{"class":1142},[159,12791,12792],{"class":1146}," checkAll",[159,12794,1150],{"class":1142},[159,12796,1153],{"class":165},[159,12798,1156],{"class":185},[159,12800,1159],{"class":165},[159,12802,12803],{"class":192},"'#checkAll'",[159,12805,1165],{"class":165},[159,12807,12808],{"class":161,"line":2243},[159,12809,12810],{"class":1135},"    \u002F\u002F 2. 获取所有的小复选框\n",[159,12812,12813,12815,12818,12820,12822,12824,12826,12829],{"class":161,"line":2256},[159,12814,1143],{"class":1142},[159,12816,12817],{"class":1146}," cks",[159,12819,1150],{"class":1142},[159,12821,1153],{"class":165},[159,12823,2551],{"class":185},[159,12825,1159],{"class":165},[159,12827,12828],{"class":192},"'.ck'",[159,12830,1165],{"class":165},[159,12832,12833],{"class":161,"line":2266},[159,12834,12835],{"class":1135},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[159,12837,12838,12841,12843,12845,12847,12849,12851],{"class":161,"line":2275},[159,12839,12840],{"class":165},"    checkAll.",[159,12842,4724],{"class":185},[159,12844,1159],{"class":165},[159,12846,4729],{"class":192},[159,12848,1939],{"class":165},[159,12850,1215],{"class":1142},[159,12852,1218],{"class":165},[159,12854,12855],{"class":161,"line":2284},[159,12856,12857],{"class":1135},"      \u002F\u002F 得到当前大复选框的选中状态\n",[159,12859,12860,12863],{"class":161,"line":2293},[159,12861,12862],{"class":1135},"      \u002F\u002F console.log(checkAll.checked)",[159,12864,12865],{"class":1135},"  \u002F\u002F 得到 是 true 或者是 false\n",[159,12867,12868],{"class":161,"line":2306},[159,12869,12870],{"class":1135},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[159,12872,12873,12876,12878,12880,12882,12884,12886,12888,12890,12893,12895,12897,12899],{"class":161,"line":2330},[159,12874,12875],{"class":1142},"      for",[159,12877,11680],{"class":165},[159,12879,11683],{"class":1142},[159,12881,1186],{"class":165},[159,12883,189],{"class":1142},[159,12885,1259],{"class":1146},[159,12887,11692],{"class":165},[159,12889,166],{"class":1142},[159,12891,12892],{"class":165}," cks.",[159,12894,3828],{"class":1146},[159,12896,11702],{"class":165},[159,12898,11705],{"class":1142},[159,12900,1262],{"class":165},[159,12902,12903,12906,12908,12911],{"class":161,"line":2350},[159,12904,12905],{"class":165},"        cks[i].checked ",[159,12907,189],{"class":1142},[159,12909,12910],{"class":1146}," this",[159,12912,12913],{"class":165},".checked\n",[159,12915,12916],{"class":161,"line":2370},[159,12917,1308],{"class":165},[159,12919,12920],{"class":161,"line":2390},[159,12921,4863],{"class":165},[159,12923,12924],{"class":161,"line":2410},[159,12925,12926],{"class":1135},"    \u002F\u002F 5. 小复选框控制大复选框\n",[159,12928,12929],{"class":161,"line":2430},[159,12930,590],{"emptyLinePlaceholder":589},[159,12932,12933,12935,12937,12939,12941,12943,12945,12947,12949,12951,12953,12955,12957],{"class":161,"line":2450},[159,12934,11677],{"class":1142},[159,12936,11680],{"class":165},[159,12938,11683],{"class":1142},[159,12940,1186],{"class":165},[159,12942,189],{"class":1142},[159,12944,1259],{"class":1146},[159,12946,11692],{"class":165},[159,12948,166],{"class":1142},[159,12950,12892],{"class":165},[159,12952,3828],{"class":1146},[159,12954,11702],{"class":165},[159,12956,11705],{"class":1142},[159,12958,1262],{"class":165},[159,12960,12961],{"class":161,"line":2471},[159,12962,12963],{"class":1135},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[159,12965,12966,12969,12971,12973,12975,12977,12979],{"class":161,"line":2477},[159,12967,12968],{"class":165},"      cks[i].",[159,12970,4724],{"class":185},[159,12972,1159],{"class":165},[159,12974,4729],{"class":192},[159,12976,1939],{"class":165},[159,12978,1215],{"class":1142},[159,12980,1218],{"class":165},[159,12982,12983],{"class":161,"line":2498},[159,12984,12985],{"class":1135},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[159,12987,12988],{"class":161,"line":2518},[159,12989,12990],{"class":1135},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[159,12992,12993],{"class":161,"line":2539},[159,12994,12995],{"class":1135},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[159,12997,12998],{"class":161,"line":2561},[159,12999,13000],{"class":1135},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[159,13002,13003,13006,13008,13010,13012,13014,13017,13020,13022,13024,13026],{"class":161,"line":2573},[159,13004,13005],{"class":165},"        checkAll.checked ",[159,13007,189],{"class":1142},[159,13009,1153],{"class":165},[159,13011,2551],{"class":185},[159,13013,1159],{"class":165},[159,13015,13016],{"class":192},"'.ck:checked'",[159,13018,13019],{"class":165},").",[159,13021,3828],{"class":1146},[159,13023,4820],{"class":1142},[159,13025,12892],{"class":165},[159,13027,2718],{"class":1146},[159,13029,13030],{"class":161,"line":2591},[159,13031,11872],{"class":165},[159,13033,13034],{"class":161,"line":2602},[159,13035,1508],{"class":165},[159,13037,13038,13040,13042],{"class":161,"line":2613},[159,13039,254],{"class":165},[159,13041,228],{"class":169},[159,13043,173],{"class":165},[159,13045,13046,13048,13050],{"class":161,"line":2624},[159,13047,264],{"class":165},[159,13049,170],{"class":169},[159,13051,173],{"class":165},[159,13053,13054],{"class":161,"line":2630},[159,13055,590],{"emptyLinePlaceholder":589},[159,13057,13058,13060,13062],{"class":161,"line":2636},[159,13059,264],{"class":165},[159,13061,522],{"class":169},[159,13063,173],{"class":165},[14,13065,13066],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,13068,13069],{},"用好之间比较得到的布尔值！！！",[14,13071,13072,13073,13076,13077,11680,13080,13083,13084,13087],{},"在 JS 里访问的时候，",[49,13074,13075],{},"checkbox.checked"," 是一个 ",[61,13078,13079],{},"布尔值",[49,13081,13082],{},"true","\u002F",[49,13085,13086],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,13089,13090,13091,13094,13095],{},"HTML 的 ",[49,13092,13093],{},"checked=\"checked\""," 只是 ",[61,13096,13097,13098,13101],{},"初始值；JS 的 ",[49,13099,13100],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,13103,13104],{},"：checked是一个伪类选择器",[14,13106,13107],{},[23,13108],{"alt":25,"src":13109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,13111,13112,13115],{},[13113,13114],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,13117,13118],{},[23,13119],{"alt":25,"src":13120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[37,13122,13124],{"id":13123},"_33-dom事件进阶","3.3 DOM事件进阶",[42,13126,13128],{"id":13127},"_331-事件流","3.3.1 事件流",[14,13130,13131],{},[23,13132],{"alt":25,"src":13133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[326,13135,13137],{"id":13136},"_3311-事件捕获","3.3.1.1 事件捕获",[14,13139,13140],{},[23,13141],{"alt":25,"src":13142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[151,13144,13146],{"className":520,"code":13145,"language":522,"meta":25,"style":25},"\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",[49,13147,13148,13158,13172,13176,13184,13198,13218,13230,13238,13245,13257,13269,13280,13284,13288,13295,13308,13320,13330,13334,13342,13350,13354,13362,13377,13396,13404,13412,13432,13452,13469,13480,13488,13505,13516,13524,13541,13552,13560,13568,13576,13580],{"__ignoreMap":25},[159,13149,13150,13152,13154,13156],{"class":161,"line":162},[159,13151,914],{"class":165},[159,13153,917],{"class":169},[159,13155,920],{"class":185},[159,13157,173],{"class":165},[159,13159,13160,13162,13164,13166,13168,13170],{"class":161,"line":176},[159,13161,166],{"class":165},[159,13163,522],{"class":169},[159,13165,931],{"class":185},[159,13167,189],{"class":165},[159,13169,936],{"class":192},[159,13171,173],{"class":165},[159,13173,13174],{"class":161,"line":203},[159,13175,590],{"emptyLinePlaceholder":589},[159,13177,13178,13180,13182],{"class":161,"line":223},[159,13179,166],{"class":165},[159,13181,949],{"class":169},[159,13183,173],{"class":165},[159,13185,13186,13188,13190,13192,13194,13196],{"class":161,"line":233},[159,13187,179],{"class":165},[159,13189,958],{"class":169},[159,13191,961],{"class":185},[159,13193,189],{"class":165},[159,13195,966],{"class":192},[159,13197,173],{"class":165},[159,13199,13200,13202,13204,13206,13208,13210,13212,13214,13216],{"class":161,"line":239},[159,13201,179],{"class":165},[159,13203,958],{"class":169},[159,13205,547],{"class":185},[159,13207,189],{"class":165},[159,13209,981],{"class":192},[159,13211,984],{"class":185},[159,13213,189],{"class":165},[159,13215,989],{"class":192},[159,13217,173],{"class":165},[159,13219,13220,13222,13224,13226,13228],{"class":161,"line":245},[159,13221,179],{"class":165},[159,13223,998],{"class":169},[159,13225,1001],{"class":165},[159,13227,998],{"class":169},[159,13229,173],{"class":165},[159,13231,13232,13234,13236],{"class":161,"line":251},[159,13233,179],{"class":165},[159,13235,1468],{"class":169},[159,13237,173],{"class":165},[159,13239,13240,13243],{"class":161,"line":261},[159,13241,13242],{"class":185},"    .father",[159,13244,1478],{"class":165},[159,13246,13247,13249,13251,13253,13255],{"class":161,"line":603},[159,13248,1563],{"class":1146},[159,13250,1486],{"class":165},[159,13252,12132],{"class":1146},[159,13254,1571],{"class":1142},[159,13256,1492],{"class":165},[159,13258,13259,13261,13263,13265,13267],{"class":161,"line":621},[159,13260,1578],{"class":1146},[159,13262,1486],{"class":165},[159,13264,12132],{"class":1146},[159,13266,1571],{"class":1142},[159,13268,1492],{"class":165},[159,13270,13271,13273,13275,13278],{"class":161,"line":634},[159,13272,1682],{"class":1146},[159,13274,1486],{"class":165},[159,13276,13277],{"class":1146},"pink",[159,13279,1492],{"class":165},[159,13281,13282],{"class":161,"line":640},[159,13283,1508],{"class":165},[159,13285,13286],{"class":161,"line":1075},[159,13287,590],{"emptyLinePlaceholder":589},[159,13289,13290,13293],{"class":161,"line":1081},[159,13291,13292],{"class":185},"    .son",[159,13294,1478],{"class":165},[159,13296,13297,13299,13301,13304,13306],{"class":161,"line":1091},[159,13298,1563],{"class":1146},[159,13300,1486],{"class":165},[159,13302,13303],{"class":1146},"200",[159,13305,1571],{"class":1142},[159,13307,1492],{"class":165},[159,13309,13310,13312,13314,13316,13318],{"class":161,"line":1100},[159,13311,1578],{"class":1146},[159,13313,1486],{"class":165},[159,13315,13303],{"class":1146},[159,13317,1571],{"class":1142},[159,13319,1492],{"class":165},[159,13321,13322,13324,13326,13328],{"class":161,"line":1123},[159,13323,1682],{"class":1146},[159,13325,1486],{"class":165},[159,13327,1687],{"class":1146},[159,13329,1492],{"class":165},[159,13331,13332],{"class":161,"line":1132},[159,13333,1508],{"class":165},[159,13335,13336,13338,13340],{"class":161,"line":1139},[159,13337,254],{"class":165},[159,13339,1468],{"class":169},[159,13341,173],{"class":165},[159,13343,13344,13346,13348],{"class":161,"line":1168},[159,13345,264],{"class":165},[159,13347,949],{"class":169},[159,13349,173],{"class":165},[159,13351,13352],{"class":161,"line":1174},[159,13353,590],{"emptyLinePlaceholder":589},[159,13355,13356,13358,13360],{"class":161,"line":1180},[159,13357,166],{"class":165},[159,13359,170],{"class":169},[159,13361,173],{"class":165},[159,13363,13364,13366,13368,13370,13372,13375],{"class":161,"line":1194},[159,13365,179],{"class":165},[159,13367,182],{"class":169},[159,13369,186],{"class":185},[159,13371,189],{"class":165},[159,13373,13374],{"class":192},"\"father\"",[159,13376,173],{"class":165},[159,13378,13379,13381,13383,13385,13387,13390,13392,13394],{"class":161,"line":1200},[159,13380,2056],{"class":165},[159,13382,182],{"class":169},[159,13384,186],{"class":185},[159,13386,189],{"class":165},[159,13388,13389],{"class":192},"\"son\"",[159,13391,2158],{"class":165},[159,13393,182],{"class":169},[159,13395,173],{"class":165},[159,13397,13398,13400,13402],{"class":161,"line":1221},[159,13399,254],{"class":165},[159,13401,182],{"class":169},[159,13403,173],{"class":165},[159,13405,13406,13408,13410],{"class":161,"line":1230},[159,13407,179],{"class":165},[159,13409,228],{"class":169},[159,13411,173],{"class":165},[159,13413,13414,13416,13419,13421,13423,13425,13427,13430],{"class":161,"line":1247},[159,13415,1143],{"class":1142},[159,13417,13418],{"class":1146}," fa",[159,13420,1150],{"class":1142},[159,13422,1153],{"class":165},[159,13424,1156],{"class":185},[159,13426,1159],{"class":165},[159,13428,13429],{"class":192},"'.father'",[159,13431,1165],{"class":165},[159,13433,13434,13436,13439,13441,13443,13445,13447,13450],{"class":161,"line":1265},[159,13435,1143],{"class":1142},[159,13437,13438],{"class":1146}," son",[159,13440,1150],{"class":1142},[159,13442,1153],{"class":165},[159,13444,1156],{"class":185},[159,13446,1159],{"class":165},[159,13448,13449],{"class":192},"'.son'",[159,13451,1165],{"class":165},[159,13453,13454,13457,13459,13461,13463,13465,13467],{"class":161,"line":1277},[159,13455,13456],{"class":165},"    document.",[159,13458,4724],{"class":185},[159,13460,1159],{"class":165},[159,13462,4729],{"class":192},[159,13464,1939],{"class":165},[159,13466,1215],{"class":1142},[159,13468,1218],{"class":165},[159,13470,13471,13473,13475,13478],{"class":161,"line":1283},[159,13472,5845],{"class":185},[159,13474,1159],{"class":165},[159,13476,13477],{"class":192},"'woshiu1'",[159,13479,1165],{"class":165},[159,13481,13482,13484,13486],{"class":161,"line":1294},[159,13483,1314],{"class":165},[159,13485,13082],{"class":1146},[159,13487,1165],{"class":165},[159,13489,13490,13493,13495,13497,13499,13501,13503],{"class":161,"line":1305},[159,13491,13492],{"class":165},"    fa.",[159,13494,4724],{"class":185},[159,13496,1159],{"class":165},[159,13498,4729],{"class":192},[159,13500,1939],{"class":165},[159,13502,1215],{"class":1142},[159,13504,1218],{"class":165},[159,13506,13507,13509,13511,13514],{"class":161,"line":1311},[159,13508,5845],{"class":185},[159,13510,1159],{"class":165},[159,13512,13513],{"class":192},"'1'",[159,13515,1165],{"class":165},[159,13517,13518,13520,13522],{"class":161,"line":1322},[159,13519,1314],{"class":165},[159,13521,13082],{"class":1146},[159,13523,1165],{"class":165},[159,13525,13526,13529,13531,13533,13535,13537,13539],{"class":161,"line":1327},[159,13527,13528],{"class":165},"    son.",[159,13530,4724],{"class":185},[159,13532,1159],{"class":165},[159,13534,4729],{"class":192},[159,13536,1939],{"class":165},[159,13538,1215],{"class":1142},[159,13540,1218],{"class":165},[159,13542,13543,13545,13547,13550],{"class":161,"line":1336},[159,13544,5845],{"class":185},[159,13546,1159],{"class":165},[159,13548,13549],{"class":192},"'2'",[159,13551,1165],{"class":165},[159,13553,13554,13556,13558],{"class":161,"line":1345},[159,13555,1314],{"class":165},[159,13557,13082],{"class":1146},[159,13559,1165],{"class":165},[159,13561,13562,13564,13566],{"class":161,"line":1350},[159,13563,254],{"class":165},[159,13565,228],{"class":169},[159,13567,173],{"class":165},[159,13569,13570,13572,13574],{"class":161,"line":1764},[159,13571,264],{"class":165},[159,13573,170],{"class":169},[159,13575,173],{"class":165},[159,13577,13578],{"class":161,"line":1769},[159,13579,590],{"emptyLinePlaceholder":589},[159,13581,13582,13584,13586],{"class":161,"line":1777},[159,13583,264],{"class":165},[159,13585,522],{"class":169},[159,13587,173],{"class":165},[14,13589,13590],{},[23,13591],{"alt":25,"src":13592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,13594,13595],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[326,13597,13599],{"id":13598},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,13601,13602],{},[23,13603],{"alt":25,"src":13604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,13606,13607],{},"反着来",[14,13609,13610],{},"注意是同名事件，比如都是‘click’",[326,13612,13614],{"id":13613},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,13616,13617],{},[23,13618],{"alt":25,"src":13619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[326,13621,13623],{"id":13622},"_3314-解绑事件","3.3.1.4 解绑事件",[14,13625,13626],{},[23,13627],{"alt":25,"src":13628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,13630,13631],{},[23,13632],{"alt":25,"src":13633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[326,13635,13637],{"id":13636},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[134,13639,13640],{},[106,13641,13642],{},"事件类型的区别",[14,13644,13645],{},[23,13646],{"alt":25,"src":13647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,13649,13650],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[134,13652,13653],{"start":176},[106,13654,13655],{},"注册事件的区别",[14,13657,13658],{},[23,13659],{"alt":25,"src":13660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[326,13662,13664],{"id":13663},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,13666,13667],{},[23,13668],{"alt":25,"src":13669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,13671,13672],{},[23,13673],{"alt":25,"src":13674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[151,13676,13678],{"className":153,"code":13677,"language":155,"meta":25,"style":25},"\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",[49,13679,13680,13688,13705,13728,13736,13741,13746,13751,13755,13763,13771],{"__ignoreMap":25},[159,13681,13682,13684,13686],{"class":161,"line":162},[159,13683,166],{"class":165},[159,13685,170],{"class":169},[159,13687,173],{"class":165},[159,13689,13690,13692,13695,13698,13700,13703],{"class":161,"line":176},[159,13691,179],{"class":165},[159,13693,13694],{"class":169},"form",[159,13696,13697],{"class":185}," action",[159,13699,189],{"class":165},[159,13701,13702],{"class":192},"\"http:\u002F\u002Fwww.itcast.cn\"",[159,13704,173],{"class":165},[159,13706,13707,13709,13711,13713,13715,13718,13721,13723,13726],{"class":161,"line":203},[159,13708,2056],{"class":165},[159,13710,536],{"class":169},[159,13712,539],{"class":185},[159,13714,189],{"class":165},[159,13716,13717],{"class":192},"\"submit\"",[159,13719,13720],{"class":185}," value",[159,13722,189],{"class":165},[159,13724,13725],{"class":192},"\"免费注册\"",[159,13727,173],{"class":165},[159,13729,13730,13732,13734],{"class":161,"line":223},[159,13731,2056],{"class":165},[159,13733,228],{"class":169},[159,13735,173],{"class":165},[159,13737,13738],{"class":161,"line":233},[159,13739,13740],{"class":165},"      const form = document.querySelector('form')\n",[159,13742,13743],{"class":161,"line":239},[159,13744,13745],{"class":165},"      form.addEventListener('submit', function (e) {\n",[159,13747,13748],{"class":161,"line":245},[159,13749,13750],{"class":165},"        e.preventDefault()\n",[159,13752,13753],{"class":161,"line":251},[159,13754,11872],{"class":165},[159,13756,13757,13759,13761],{"class":161,"line":261},[159,13758,1084],{"class":165},[159,13760,228],{"class":169},[159,13762,173],{"class":165},[159,13764,13765,13767,13769],{"class":161,"line":603},[159,13766,254],{"class":165},[159,13768,13694],{"class":169},[159,13770,173],{"class":165},[159,13772,13773,13775,13777],{"class":161,"line":621},[159,13774,264],{"class":165},[159,13776,170],{"class":169},[159,13778,173],{"class":165},[14,13780,13781],{},"点击不在跳转！！！",[42,13783,13785],{"id":13784},"_332-事件委托","3.3.2 事件委托",[14,13787,13788],{},[23,13789],{"alt":25,"src":13790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[151,13792,13794],{"className":520,"code":13793,"language":522,"meta":25,"style":25},"\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",[49,13795,13796,13806,13820,13824,13832,13846,13866,13878,13886,13890,13898,13906,13918,13930,13942,13954,13966,13979,13987,13995,14000,14019,14041,14046,14051,14056,14061,14070,14074,14084,14088,14093,14098,14112,14122,14126,14130,14138,14146,14150],{"__ignoreMap":25},[159,13797,13798,13800,13802,13804],{"class":161,"line":162},[159,13799,914],{"class":165},[159,13801,917],{"class":169},[159,13803,920],{"class":185},[159,13805,173],{"class":165},[159,13807,13808,13810,13812,13814,13816,13818],{"class":161,"line":176},[159,13809,166],{"class":165},[159,13811,522],{"class":169},[159,13813,931],{"class":185},[159,13815,189],{"class":165},[159,13817,936],{"class":192},[159,13819,173],{"class":165},[159,13821,13822],{"class":161,"line":203},[159,13823,590],{"emptyLinePlaceholder":589},[159,13825,13826,13828,13830],{"class":161,"line":223},[159,13827,166],{"class":165},[159,13829,949],{"class":169},[159,13831,173],{"class":165},[159,13833,13834,13836,13838,13840,13842,13844],{"class":161,"line":233},[159,13835,179],{"class":165},[159,13837,958],{"class":169},[159,13839,961],{"class":185},[159,13841,189],{"class":165},[159,13843,966],{"class":192},[159,13845,173],{"class":165},[159,13847,13848,13850,13852,13854,13856,13858,13860,13862,13864],{"class":161,"line":239},[159,13849,179],{"class":165},[159,13851,958],{"class":169},[159,13853,547],{"class":185},[159,13855,189],{"class":165},[159,13857,981],{"class":192},[159,13859,984],{"class":185},[159,13861,189],{"class":165},[159,13863,989],{"class":192},[159,13865,173],{"class":165},[159,13867,13868,13870,13872,13874,13876],{"class":161,"line":245},[159,13869,179],{"class":165},[159,13871,998],{"class":169},[159,13873,1001],{"class":165},[159,13875,998],{"class":169},[159,13877,173],{"class":165},[159,13879,13880,13882,13884],{"class":161,"line":251},[159,13881,264],{"class":165},[159,13883,949],{"class":169},[159,13885,173],{"class":165},[159,13887,13888],{"class":161,"line":261},[159,13889,590],{"emptyLinePlaceholder":589},[159,13891,13892,13894,13896],{"class":161,"line":603},[159,13893,166],{"class":165},[159,13895,170],{"class":169},[159,13897,173],{"class":165},[159,13899,13900,13902,13904],{"class":161,"line":621},[159,13901,179],{"class":165},[159,13903,103],{"class":169},[159,13905,173],{"class":165},[159,13907,13908,13910,13912,13914,13916],{"class":161,"line":634},[159,13909,2056],{"class":165},[159,13911,106],{"class":169},[159,13913,691],{"class":165},[159,13915,106],{"class":169},[159,13917,173],{"class":165},[159,13919,13920,13922,13924,13926,13928],{"class":161,"line":640},[159,13921,2056],{"class":165},[159,13923,106],{"class":169},[159,13925,711],{"class":165},[159,13927,106],{"class":169},[159,13929,173],{"class":165},[159,13931,13932,13934,13936,13938,13940],{"class":161,"line":1075},[159,13933,2056],{"class":165},[159,13935,106],{"class":169},[159,13937,731],{"class":165},[159,13939,106],{"class":169},[159,13941,173],{"class":165},[159,13943,13944,13946,13948,13950,13952],{"class":161,"line":1081},[159,13945,2056],{"class":165},[159,13947,106],{"class":169},[159,13949,751],{"class":165},[159,13951,106],{"class":169},[159,13953,173],{"class":165},[159,13955,13956,13958,13960,13962,13964],{"class":161,"line":1091},[159,13957,2056],{"class":165},[159,13959,106],{"class":169},[159,13961,771],{"class":165},[159,13963,106],{"class":169},[159,13965,173],{"class":165},[159,13967,13968,13970,13972,13975,13977],{"class":161,"line":1100},[159,13969,2056],{"class":165},[159,13971,14],{"class":169},[159,13973,13974],{"class":165},">我不需要变色\u003C\u002F",[159,13976,14],{"class":169},[159,13978,173],{"class":165},[159,13980,13981,13983,13985],{"class":161,"line":1123},[159,13982,254],{"class":165},[159,13984,103],{"class":169},[159,13986,173],{"class":165},[159,13988,13989,13991,13993],{"class":161,"line":1132},[159,13990,179],{"class":165},[159,13992,228],{"class":169},[159,13994,173],{"class":165},[159,13996,13997],{"class":161,"line":1139},[159,13998,13999],{"class":1135},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[159,14001,14002,14004,14006,14008,14010,14012,14014,14017],{"class":161,"line":1168},[159,14003,1143],{"class":1142},[159,14005,8323],{"class":1146},[159,14007,1150],{"class":1142},[159,14009,1153],{"class":165},[159,14011,1156],{"class":185},[159,14013,1159],{"class":165},[159,14015,14016],{"class":192},"'ul'",[159,14018,1165],{"class":165},[159,14020,14021,14024,14026,14028,14030,14032,14034,14036,14039],{"class":161,"line":1174},[159,14022,14023],{"class":165},"    ul.",[159,14025,4724],{"class":185},[159,14027,1159],{"class":165},[159,14029,4729],{"class":192},[159,14031,1939],{"class":165},[159,14033,1215],{"class":1142},[159,14035,11680],{"class":165},[159,14037,14038],{"class":8765},"e",[159,14040,1262],{"class":165},[159,14042,14043],{"class":161,"line":1180},[159,14044,14045],{"class":1135},"      \u002F\u002F alert(1)\n",[159,14047,14048],{"class":161,"line":1194},[159,14049,14050],{"class":1135},"      \u002F\u002F e.target就是我们点击的对象\n",[159,14052,14053],{"class":161,"line":1200},[159,14054,14055],{"class":1135},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[159,14057,14058],{"class":161,"line":1221},[159,14059,14060],{"class":1135},"      \u002F\u002F e.target.style.color = 'red'\n",[159,14062,14063,14065,14067],{"class":161,"line":1230},[159,14064,5163],{"class":165},[159,14066,5166],{"class":185},[159,14068,14069],{"class":165},"(e)\n",[159,14071,14072],{"class":161,"line":1247},[159,14073,590],{"emptyLinePlaceholder":589},[159,14075,14076,14078,14081],{"class":161,"line":1265},[159,14077,5163],{"class":165},[159,14079,14080],{"class":185},"dir",[159,14082,14083],{"class":165},"(e.target)\n",[159,14085,14086],{"class":161,"line":1277},[159,14087,590],{"emptyLinePlaceholder":589},[159,14089,14090],{"class":161,"line":1283},[159,14091,14092],{"class":1135},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[159,14094,14095],{"class":161,"line":1294},[159,14096,14097],{"class":1135},"      \u002F\u002F 通过tagName来进行判断\n",[159,14099,14100,14102,14105,14107,14110],{"class":161,"line":1305},[159,14101,1250],{"class":1142},[159,14103,14104],{"class":165}," (e.target.tagName ",[159,14106,1256],{"class":1142},[159,14108,14109],{"class":192}," 'LI'",[159,14111,1262],{"class":165},[159,14113,14114,14117,14119],{"class":161,"line":1311},[159,14115,14116],{"class":165},"        e.target.style.color ",[159,14118,189],{"class":1142},[159,14120,14121],{"class":192}," 'red'\n",[159,14123,14124],{"class":161,"line":1322},[159,14125,1308],{"class":165},[159,14127,14128],{"class":161,"line":1327},[159,14129,4863],{"class":165},[159,14131,14132,14134,14136],{"class":161,"line":1336},[159,14133,254],{"class":165},[159,14135,228],{"class":169},[159,14137,173],{"class":165},[159,14139,14140,14142,14144],{"class":161,"line":1345},[159,14141,264],{"class":165},[159,14143,170],{"class":169},[159,14145,173],{"class":165},[159,14147,14148],{"class":161,"line":1350},[159,14149,590],{"emptyLinePlaceholder":589},[159,14151,14152,14154,14156],{"class":161,"line":1764},[159,14153,264],{"class":165},[159,14155,522],{"class":169},[159,14157,173],{"class":165},[14,14159,14160],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,14162,14163],{},"if(e.target.ragName==='P') {}",[14,14165,14166],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,14168,14169],{},"通过事件委托的方式实现tab栏切换改造：",[14,14171,14172],{},"一定要记住自定义属性！！！！！！",[14,14174,14175],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,14177,14178],{},"id是自定义的属性名",[14,14180,14181],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[151,14183,14185],{"className":520,"code":14184,"language":522,"meta":25,"style":25},"\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",[49,14186,14187,14197,14211,14215,14223,14237,14257,14277,14289,14297,14303,14313,14323,14327,14331,14337,14349,14361,14373,14389,14393,14397,14403,14415,14427,14439,14449,14459,14463,14467,14475,14487,14497,14509,14513,14517,14525,14535,14545,14555,14559,14563,14573,14587,14599,14603,14607,14619,14629,14645,14655,14659,14663,14677,14687,14697,14701,14705,14711,14725,14729,14733,14741,14751,14755,14759,14768,14778,14782,14790,14798,14802,14810,14824,14838,14850,14858,14897,14929,14961,14993,15025,15033,15041,15055,15089,15123,15157,15191,15225,15233,15241,15249,15254,15259,15278,15283,15303,15311,15316,15329,15350,15363,15367,15372,15377,15391,15411,15439,15443,15447,15451,15459,15467,15471],{"__ignoreMap":25},[159,14188,14189,14191,14193,14195],{"class":161,"line":162},[159,14190,914],{"class":165},[159,14192,917],{"class":169},[159,14194,920],{"class":185},[159,14196,173],{"class":165},[159,14198,14199,14201,14203,14205,14207,14209],{"class":161,"line":176},[159,14200,166],{"class":165},[159,14202,522],{"class":169},[159,14204,931],{"class":185},[159,14206,189],{"class":165},[159,14208,936],{"class":192},[159,14210,173],{"class":165},[159,14212,14213],{"class":161,"line":203},[159,14214,590],{"emptyLinePlaceholder":589},[159,14216,14217,14219,14221],{"class":161,"line":223},[159,14218,166],{"class":165},[159,14220,949],{"class":169},[159,14222,173],{"class":165},[159,14224,14225,14227,14229,14231,14233,14235],{"class":161,"line":233},[159,14226,179],{"class":165},[159,14228,958],{"class":169},[159,14230,961],{"class":185},[159,14232,189],{"class":165},[159,14234,966],{"class":192},[159,14236,6049],{"class":165},[159,14238,14239,14241,14243,14245,14247,14249,14251,14253,14255],{"class":161,"line":239},[159,14240,179],{"class":165},[159,14242,958],{"class":169},[159,14244,6058],{"class":185},[159,14246,189],{"class":165},[159,14248,6063],{"class":192},[159,14250,984],{"class":185},[159,14252,189],{"class":165},[159,14254,6070],{"class":192},[159,14256,6049],{"class":165},[159,14258,14259,14261,14263,14265,14267,14269,14271,14273,14275],{"class":161,"line":245},[159,14260,179],{"class":165},[159,14262,958],{"class":169},[159,14264,547],{"class":185},[159,14266,189],{"class":165},[159,14268,981],{"class":192},[159,14270,984],{"class":185},[159,14272,189],{"class":165},[159,14274,989],{"class":192},[159,14276,6049],{"class":165},[159,14278,14279,14281,14283,14285,14287],{"class":161,"line":251},[159,14280,179],{"class":165},[159,14282,998],{"class":169},[159,14284,10671],{"class":165},[159,14286,998],{"class":169},[159,14288,173],{"class":165},[159,14290,14291,14293,14295],{"class":161,"line":261},[159,14292,179],{"class":165},[159,14294,1468],{"class":169},[159,14296,173],{"class":165},[159,14298,14299,14301],{"class":161,"line":603},[159,14300,1475],{"class":169},[159,14302,1478],{"class":165},[159,14304,14305,14307,14309,14311],{"class":161,"line":621},[159,14306,1497],{"class":1146},[159,14308,1486],{"class":165},[159,14310,1489],{"class":1146},[159,14312,1492],{"class":165},[159,14314,14315,14317,14319,14321],{"class":161,"line":634},[159,14316,1483],{"class":1146},[159,14318,1486],{"class":165},[159,14320,1489],{"class":1146},[159,14322,1492],{"class":165},[159,14324,14325],{"class":161,"line":640},[159,14326,1508],{"class":165},[159,14328,14329],{"class":161,"line":1075},[159,14330,590],{"emptyLinePlaceholder":589},[159,14332,14333,14335],{"class":161,"line":1081},[159,14334,10722],{"class":185},[159,14336,1478],{"class":165},[159,14338,14339,14341,14343,14345,14347],{"class":161,"line":1091},[159,14340,1563],{"class":1146},[159,14342,1486],{"class":165},[159,14344,10733],{"class":1146},[159,14346,1571],{"class":1142},[159,14348,1492],{"class":165},[159,14350,14351,14353,14355,14357,14359],{"class":161,"line":1100},[159,14352,1578],{"class":1146},[159,14354,1486],{"class":165},[159,14356,10746],{"class":1146},[159,14358,1571],{"class":1142},[159,14360,1492],{"class":165},[159,14362,14363,14365,14367,14369,14371],{"class":161,"line":1123},[159,14364,1497],{"class":1146},[159,14366,1486],{"class":165},[159,14368,1739],{"class":1146},[159,14370,1571],{"class":1142},[159,14372,1492],{"class":165},[159,14374,14375,14377,14379,14381,14383,14385,14387],{"class":161,"line":1132},[159,14376,9018],{"class":1146},[159,14378,1486],{"class":165},[159,14380,4932],{"class":1146},[159,14382,1571],{"class":1142},[159,14384,7709],{"class":1146},[159,14386,9287],{"class":1146},[159,14388,1492],{"class":165},[159,14390,14391],{"class":161,"line":1139},[159,14392,1508],{"class":165},[159,14394,14395],{"class":161,"line":1168},[159,14396,590],{"emptyLinePlaceholder":589},[159,14398,14399,14401],{"class":161,"line":1174},[159,14400,10791],{"class":185},[159,14402,1478],{"class":165},[159,14404,14405,14407,14409,14411,14413],{"class":161,"line":1180},[159,14406,1563],{"class":1146},[159,14408,1486],{"class":165},[159,14410,1596],{"class":1146},[159,14412,1662],{"class":1142},[159,14414,1492],{"class":165},[159,14416,14417,14419,14421,14423,14425],{"class":161,"line":1194},[159,14418,1578],{"class":1146},[159,14420,1486],{"class":165},[159,14422,10814],{"class":1146},[159,14424,1571],{"class":1142},[159,14426,1492],{"class":165},[159,14428,14429,14431,14433,14435,14437],{"class":161,"line":1200},[159,14430,4264],{"class":1146},[159,14432,1486],{"class":165},[159,14434,10814],{"class":1146},[159,14436,1571],{"class":1142},[159,14438,1492],{"class":165},[159,14440,14441,14443,14445,14447],{"class":161,"line":1221},[159,14442,1818],{"class":1146},[159,14444,1486],{"class":165},[159,14446,1823],{"class":1146},[159,14448,1492],{"class":165},[159,14450,14451,14453,14455,14457],{"class":161,"line":1230},[159,14452,1831],{"class":1146},[159,14454,1486],{"class":165},[159,14456,1836],{"class":1146},[159,14458,1492],{"class":165},[159,14460,14461],{"class":161,"line":1247},[159,14462,1508],{"class":165},[159,14464,14465],{"class":161,"line":1265},[159,14466,590],{"emptyLinePlaceholder":589},[159,14468,14469,14471,14473],{"class":161,"line":1277},[159,14470,10791],{"class":185},[159,14472,10865],{"class":169},[159,14474,1478],{"class":165},[159,14476,14477,14479,14481,14483,14485],{"class":161,"line":1283},[159,14478,1721],{"class":1146},[159,14480,1486],{"class":165},[159,14482,10876],{"class":1146},[159,14484,1571],{"class":1142},[159,14486,1492],{"class":165},[159,14488,14489,14491,14493,14495],{"class":161,"line":1294},[159,14490,9377],{"class":1146},[159,14492,1486],{"class":165},[159,14494,10889],{"class":1146},[159,14496,1492],{"class":165},[159,14498,14499,14501,14503,14505,14507],{"class":161,"line":1305},[159,14500,9041],{"class":1146},[159,14502,1486],{"class":165},[159,14504,1739],{"class":1146},[159,14506,1571],{"class":1142},[159,14508,1492],{"class":165},[159,14510,14511],{"class":161,"line":1311},[159,14512,1508],{"class":165},[159,14514,14515],{"class":161,"line":1322},[159,14516,590],{"emptyLinePlaceholder":589},[159,14518,14519,14521,14523],{"class":161,"line":1327},[159,14520,10791],{"class":185},[159,14522,8323],{"class":169},[159,14524,1478],{"class":165},[159,14526,14527,14529,14531,14533],{"class":161,"line":1336},[159,14528,1524],{"class":1146},[159,14530,1486],{"class":165},[159,14532,1529],{"class":1146},[159,14534,1492],{"class":165},[159,14536,14537,14539,14541,14543],{"class":161,"line":1345},[159,14538,1818],{"class":1146},[159,14540,1486],{"class":165},[159,14542,1823],{"class":1146},[159,14544,1492],{"class":165},[159,14546,14547,14549,14551,14553],{"class":161,"line":1350},[159,14548,1831],{"class":1146},[159,14550,1486],{"class":165},[159,14552,8685],{"class":1146},[159,14554,1492],{"class":165},[159,14556,14557],{"class":161,"line":1764},[159,14558,1508],{"class":165},[159,14560,14561],{"class":161,"line":1769},[159,14562,590],{"emptyLinePlaceholder":589},[159,14564,14565,14567,14569,14571],{"class":161,"line":1777},[159,14566,10791],{"class":185},[159,14568,8323],{"class":169},[159,14570,1894],{"class":169},[159,14572,1478],{"class":165},[159,14574,14575,14577,14579,14581,14583,14585],{"class":161,"line":1788},[159,14576,1497],{"class":1146},[159,14578,1486],{"class":165},[159,14580,1489],{"class":1146},[159,14582,10978],{"class":1146},[159,14584,1571],{"class":1142},[159,14586,1492],{"class":165},[159,14588,14589,14591,14593,14595,14597],{"class":161,"line":1802},[159,14590,1721],{"class":1146},[159,14592,1486],{"class":165},[159,14594,7678],{"class":1146},[159,14596,1571],{"class":1142},[159,14598,1492],{"class":165},[159,14600,14601],{"class":161,"line":1815},[159,14602,1508],{"class":165},[159,14604,14605],{"class":161,"line":1828},[159,14606,590],{"emptyLinePlaceholder":589},[159,14608,14609,14611,14613,14615,14617],{"class":161,"line":1841},[159,14610,10791],{"class":185},[159,14612,8323],{"class":169},[159,14614,1894],{"class":169},[159,14616,7885],{"class":169},[159,14618,1478],{"class":165},[159,14620,14621,14623,14625,14627],{"class":161,"line":1852},[159,14622,11019],{"class":1146},[159,14624,1486],{"class":165},[159,14626,1529],{"class":1146},[159,14628,1492],{"class":165},[159,14630,14631,14633,14635,14637,14639,14641,14643],{"class":161,"line":1866},[159,14632,9275],{"class":1146},[159,14634,1486],{"class":165},[159,14636,11034],{"class":1146},[159,14638,1571],{"class":1142},[159,14640,7709],{"class":1146},[159,14642,11041],{"class":1146},[159,14644,1492],{"class":165},[159,14646,14647,14649,14651,14653],{"class":161,"line":1879},[159,14648,4322],{"class":1146},[159,14650,1486],{"class":165},[159,14652,9412],{"class":1146},[159,14654,1492],{"class":165},[159,14656,14657],{"class":161,"line":1884},[159,14658,1508],{"class":165},[159,14660,14661],{"class":161,"line":1889},[159,14662,590],{"emptyLinePlaceholder":589},[159,14664,14665,14667,14669,14671,14673,14675],{"class":161,"line":1899},[159,14666,10791],{"class":185},[159,14668,8323],{"class":169},[159,14670,1894],{"class":169},[159,14672,7885],{"class":169},[159,14674,11074],{"class":185},[159,14676,1478],{"class":165},[159,14678,14679,14681,14683,14685],{"class":161,"line":1912},[159,14680,8828],{"class":1146},[159,14682,1486],{"class":165},[159,14684,11085],{"class":1146},[159,14686,1492],{"class":165},[159,14688,14689,14691,14693,14695],{"class":161,"line":1925},[159,14690,4322],{"class":1146},[159,14692,1486],{"class":165},[159,14694,11085],{"class":1146},[159,14696,1492],{"class":165},[159,14698,14699],{"class":161,"line":1956},[159,14700,1508],{"class":165},[159,14702,14703],{"class":161,"line":1971},[159,14704,590],{"emptyLinePlaceholder":589},[159,14706,14707,14709],{"class":161,"line":1976},[159,14708,11110],{"class":185},[159,14710,1478],{"class":165},[159,14712,14713,14715,14717,14719,14721,14723],{"class":161,"line":1981},[159,14714,1483],{"class":1146},[159,14716,1486],{"class":165},[159,14718,1489],{"class":1146},[159,14720,11123],{"class":1146},[159,14722,1571],{"class":1142},[159,14724,1492],{"class":165},[159,14726,14727],{"class":161,"line":1989},[159,14728,1508],{"class":165},[159,14730,14731],{"class":161,"line":2001},[159,14732,590],{"emptyLinePlaceholder":589},[159,14734,14735,14737,14739],{"class":161,"line":2006},[159,14736,11110],{"class":185},[159,14738,9217],{"class":185},[159,14740,1478],{"class":165},[159,14742,14743,14745,14747,14749],{"class":161,"line":2015},[159,14744,1818],{"class":1146},[159,14746,1486],{"class":165},[159,14748,1529],{"class":1146},[159,14750,1492],{"class":165},[159,14752,14753],{"class":161,"line":2024},[159,14754,1508],{"class":165},[159,14756,14757],{"class":161,"line":2029},[159,14758,590],{"emptyLinePlaceholder":589},[159,14760,14761,14763,14766],{"class":161,"line":2038},[159,14762,11110],{"class":185},[159,14764,14765],{"class":185}," .active",[159,14767,1478],{"class":165},[159,14769,14770,14772,14774,14776],{"class":161,"line":2053},[159,14771,1818],{"class":1146},[159,14773,1486],{"class":165},[159,14775,7896],{"class":1146},[159,14777,1492],{"class":165},[159,14779,14780],{"class":161,"line":2070},[159,14781,1508],{"class":165},[159,14783,14784,14786,14788],{"class":161,"line":2095},[159,14785,254],{"class":165},[159,14787,1468],{"class":169},[159,14789,173],{"class":165},[159,14791,14792,14794,14796],{"class":161,"line":2104},[159,14793,264],{"class":165},[159,14795,949],{"class":169},[159,14797,173],{"class":165},[159,14799,14800],{"class":161,"line":2120},[159,14801,590],{"emptyLinePlaceholder":589},[159,14803,14804,14806,14808],{"class":161,"line":2134},[159,14805,166],{"class":165},[159,14807,170],{"class":169},[159,14809,173],{"class":165},[159,14811,14812,14814,14816,14818,14820,14822],{"class":161,"line":2143},[159,14813,179],{"class":165},[159,14815,182],{"class":169},[159,14817,186],{"class":185},[159,14819,189],{"class":165},[159,14821,11225],{"class":192},[159,14823,173],{"class":165},[159,14825,14826,14828,14830,14832,14834,14836],{"class":161,"line":2165},[159,14827,2056],{"class":165},[159,14829,182],{"class":169},[159,14831,186],{"class":185},[159,14833,189],{"class":165},[159,14835,11240],{"class":192},[159,14837,173],{"class":165},[159,14839,14840,14842,14844,14846,14848],{"class":161,"line":2178},[159,14841,2073],{"class":165},[159,14843,42],{"class":169},[159,14845,11251],{"class":165},[159,14847,42],{"class":169},[159,14849,173],{"class":165},[159,14851,14852,14854,14856],{"class":161,"line":2191},[159,14853,2073],{"class":165},[159,14855,103],{"class":169},[159,14857,173],{"class":165},[159,14859,14860,14862,14864,14866,14868,14870,14872,14874,14876,14878,14880,14882,14884,14887,14889,14891,14893,14895],{"class":161,"line":2204},[159,14861,2146],{"class":165},[159,14863,106],{"class":169},[159,14865,8082],{"class":165},[159,14867,8085],{"class":169},[159,14869,186],{"class":185},[159,14871,189],{"class":165},[159,14873,6631],{"class":192},[159,14875,8088],{"class":185},[159,14877,189],{"class":165},[159,14879,11286],{"class":192},[159,14881,675],{"class":185},[159,14883,189],{"class":165},[159,14885,14886],{"class":192},"\"0\"",[159,14888,11289],{"class":165},[159,14890,8085],{"class":169},[159,14892,2158],{"class":165},[159,14894,106],{"class":169},[159,14896,173],{"class":165},[159,14898,14899,14901,14903,14905,14907,14909,14911,14913,14915,14917,14919,14921,14923,14925,14927],{"class":161,"line":2217},[159,14900,2146],{"class":165},[159,14902,106],{"class":169},[159,14904,8082],{"class":165},[159,14906,8085],{"class":169},[159,14908,8088],{"class":185},[159,14910,189],{"class":165},[159,14912,11286],{"class":192},[159,14914,675],{"class":185},[159,14916,189],{"class":165},[159,14918,680],{"class":192},[159,14920,11316],{"class":165},[159,14922,8085],{"class":169},[159,14924,2158],{"class":165},[159,14926,106],{"class":169},[159,14928,173],{"class":165},[159,14930,14931,14933,14935,14937,14939,14941,14943,14945,14947,14949,14951,14953,14955,14957,14959],{"class":161,"line":2230},[159,14932,2146],{"class":165},[159,14934,106],{"class":169},[159,14936,8082],{"class":165},[159,14938,8085],{"class":169},[159,14940,8088],{"class":185},[159,14942,189],{"class":165},[159,14944,11286],{"class":192},[159,14946,675],{"class":185},[159,14948,189],{"class":165},[159,14950,708],{"class":192},[159,14952,11343],{"class":165},[159,14954,8085],{"class":169},[159,14956,2158],{"class":165},[159,14958,106],{"class":169},[159,14960,173],{"class":165},[159,14962,14963,14965,14967,14969,14971,14973,14975,14977,14979,14981,14983,14985,14987,14989,14991],{"class":161,"line":2243},[159,14964,2146],{"class":165},[159,14966,106],{"class":169},[159,14968,8082],{"class":165},[159,14970,8085],{"class":169},[159,14972,8088],{"class":185},[159,14974,189],{"class":165},[159,14976,11286],{"class":192},[159,14978,675],{"class":185},[159,14980,189],{"class":165},[159,14982,728],{"class":192},[159,14984,11370],{"class":165},[159,14986,8085],{"class":169},[159,14988,2158],{"class":165},[159,14990,106],{"class":169},[159,14992,173],{"class":165},[159,14994,14995,14997,14999,15001,15003,15005,15007,15009,15011,15013,15015,15017,15019,15021,15023],{"class":161,"line":2256},[159,14996,2146],{"class":165},[159,14998,106],{"class":169},[159,15000,8082],{"class":165},[159,15002,8085],{"class":169},[159,15004,8088],{"class":185},[159,15006,189],{"class":165},[159,15008,11286],{"class":192},[159,15010,675],{"class":185},[159,15012,189],{"class":165},[159,15014,748],{"class":192},[159,15016,11397],{"class":165},[159,15018,8085],{"class":169},[159,15020,2158],{"class":165},[159,15022,106],{"class":169},[159,15024,173],{"class":165},[159,15026,15027,15029,15031],{"class":161,"line":2266},[159,15028,2259],{"class":165},[159,15030,103],{"class":169},[159,15032,173],{"class":165},[159,15034,15035,15037,15039],{"class":161,"line":2275},[159,15036,1084],{"class":165},[159,15038,182],{"class":169},[159,15040,173],{"class":165},[159,15042,15043,15045,15047,15049,15051,15053],{"class":161,"line":2284},[159,15044,2056],{"class":165},[159,15046,182],{"class":169},[159,15048,186],{"class":185},[159,15050,189],{"class":165},[159,15052,11434],{"class":192},[159,15054,173],{"class":165},[159,15056,15057,15059,15061,15063,15065,15067,15069,15071,15073,15075,15077,15079,15081,15083,15085,15087],{"class":161,"line":2293},[159,15058,2073],{"class":165},[159,15060,182],{"class":169},[159,15062,186],{"class":185},[159,15064,189],{"class":165},[159,15066,11449],{"class":192},[159,15068,8082],{"class":165},[159,15070,23],{"class":169},[159,15072,2078],{"class":185},[159,15074,189],{"class":165},[159,15076,11460],{"class":192},[159,15078,2086],{"class":185},[159,15080,189],{"class":165},[159,15082,552],{"class":192},[159,15084,11469],{"class":165},[159,15086,182],{"class":169},[159,15088,173],{"class":165},[159,15090,15091,15093,15095,15097,15099,15101,15103,15105,15107,15109,15111,15113,15115,15117,15119,15121],{"class":161,"line":2306},[159,15092,2073],{"class":165},[159,15094,182],{"class":169},[159,15096,186],{"class":185},[159,15098,189],{"class":165},[159,15100,9666],{"class":192},[159,15102,8082],{"class":165},[159,15104,23],{"class":169},[159,15106,2078],{"class":185},[159,15108,189],{"class":165},[159,15110,11496],{"class":192},[159,15112,2086],{"class":185},[159,15114,189],{"class":165},[159,15116,552],{"class":192},[159,15118,11469],{"class":165},[159,15120,182],{"class":169},[159,15122,173],{"class":165},[159,15124,15125,15127,15129,15131,15133,15135,15137,15139,15141,15143,15145,15147,15149,15151,15153,15155],{"class":161,"line":2330},[159,15126,2073],{"class":165},[159,15128,182],{"class":169},[159,15130,186],{"class":185},[159,15132,189],{"class":165},[159,15134,9666],{"class":192},[159,15136,8082],{"class":165},[159,15138,23],{"class":169},[159,15140,2078],{"class":185},[159,15142,189],{"class":165},[159,15144,11531],{"class":192},[159,15146,2086],{"class":185},[159,15148,189],{"class":165},[159,15150,552],{"class":192},[159,15152,11469],{"class":165},[159,15154,182],{"class":169},[159,15156,173],{"class":165},[159,15158,15159,15161,15163,15165,15167,15169,15171,15173,15175,15177,15179,15181,15183,15185,15187,15189],{"class":161,"line":2350},[159,15160,2073],{"class":165},[159,15162,182],{"class":169},[159,15164,186],{"class":185},[159,15166,189],{"class":165},[159,15168,9666],{"class":192},[159,15170,8082],{"class":165},[159,15172,23],{"class":169},[159,15174,2078],{"class":185},[159,15176,189],{"class":165},[159,15178,11566],{"class":192},[159,15180,2086],{"class":185},[159,15182,189],{"class":165},[159,15184,552],{"class":192},[159,15186,11469],{"class":165},[159,15188,182],{"class":169},[159,15190,173],{"class":165},[159,15192,15193,15195,15197,15199,15201,15203,15205,15207,15209,15211,15213,15215,15217,15219,15221,15223],{"class":161,"line":2370},[159,15194,2073],{"class":165},[159,15196,182],{"class":169},[159,15198,186],{"class":185},[159,15200,189],{"class":165},[159,15202,9666],{"class":192},[159,15204,8082],{"class":165},[159,15206,23],{"class":169},[159,15208,2078],{"class":185},[159,15210,189],{"class":165},[159,15212,11601],{"class":192},[159,15214,2086],{"class":185},[159,15216,189],{"class":165},[159,15218,552],{"class":192},[159,15220,11469],{"class":165},[159,15222,182],{"class":169},[159,15224,173],{"class":165},[159,15226,15227,15229,15231],{"class":161,"line":2390},[159,15228,1084],{"class":165},[159,15230,182],{"class":169},[159,15232,173],{"class":165},[159,15234,15235,15237,15239],{"class":161,"line":2410},[159,15236,254],{"class":165},[159,15238,182],{"class":169},[159,15240,173],{"class":165},[159,15242,15243,15245,15247],{"class":161,"line":2430},[159,15244,179],{"class":165},[159,15246,228],{"class":169},[159,15248,173],{"class":165},[159,15250,15251],{"class":161,"line":2450},[159,15252,15253],{"class":1135},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[159,15255,15256],{"class":161,"line":2471},[159,15257,15258],{"class":1135},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[159,15260,15261,15263,15265,15267,15269,15271,15273,15276],{"class":161,"line":2477},[159,15262,1143],{"class":1142},[159,15264,8323],{"class":1146},[159,15266,1150],{"class":1142},[159,15268,1153],{"class":165},[159,15270,1156],{"class":185},[159,15272,1159],{"class":165},[159,15274,15275],{"class":192},"'.tab-nav ul'",[159,15277,1165],{"class":165},[159,15279,15280],{"class":161,"line":2498},[159,15281,15282],{"class":1135},"    \u002F\u002F 2.添加事件\n",[159,15284,15285,15287,15289,15291,15293,15295,15297,15299,15301],{"class":161,"line":2518},[159,15286,14023],{"class":165},[159,15288,4724],{"class":185},[159,15290,1159],{"class":165},[159,15292,4729],{"class":192},[159,15294,1939],{"class":165},[159,15296,1215],{"class":1142},[159,15298,11680],{"class":165},[159,15300,14038],{"class":8765},[159,15302,1262],{"class":165},[159,15304,15305,15307,15309],{"class":161,"line":2539},[159,15306,5163],{"class":165},[159,15308,14080],{"class":185},[159,15310,14083],{"class":165},[159,15312,15313],{"class":161,"line":2561},[159,15314,15315],{"class":1135},"      \u002F\u002Fe.targer是我们点击的对象\n",[159,15317,15318,15320,15322,15324,15327],{"class":161,"line":2573},[159,15319,1250],{"class":1142},[159,15321,14104],{"class":165},[159,15323,1256],{"class":1142},[159,15325,15326],{"class":192}," 'A'",[159,15328,1262],{"class":165},[159,15330,15331,15333,15335,15337,15340,15342,15344,15346,15348],{"class":161,"line":2591},[159,15332,11755],{"class":165},[159,15334,1156],{"class":185},[159,15336,1159],{"class":165},[159,15338,15339],{"class":192},"'.active'",[159,15341,3900],{"class":165},[159,15343,3903],{"class":185},[159,15345,1159],{"class":165},[159,15347,11771],{"class":192},[159,15349,1165],{"class":165},[159,15351,15352,15355,15357,15359,15361],{"class":161,"line":2602},[159,15353,15354],{"class":165},"        e.target.classList.",[159,15356,2680],{"class":185},[159,15358,1159],{"class":165},[159,15360,11771],{"class":192},[159,15362,1165],{"class":165},[159,15364,15365],{"class":161,"line":2613},[159,15366,590],{"emptyLinePlaceholder":589},[159,15368,15369],{"class":161,"line":2624},[159,15370,15371],{"class":1135},"        \u002F\u002F 下面大盒子模块\n",[159,15373,15374],{"class":161,"line":2630},[159,15375,15376],{"class":1135},"        \u002F\u002F console.log(e.target.dataset.id)\n",[159,15378,15379,15381,15384,15386,15388],{"class":161,"line":2636},[159,15380,8301],{"class":1142},[159,15382,15383],{"class":1146}," i",[159,15385,1150],{"class":1142},[159,15387,3925],{"class":1142},[159,15389,15390],{"class":165},"e.target.dataset.id\n",[159,15392,15393,15395,15397,15399,15401,15403,15405,15407,15409],{"class":161,"line":2642},[159,15394,11755],{"class":165},[159,15396,1156],{"class":185},[159,15398,1159],{"class":165},[159,15400,11819],{"class":192},[159,15402,3900],{"class":165},[159,15404,3903],{"class":185},[159,15406,1159],{"class":165},[159,15408,11771],{"class":192},[159,15410,1165],{"class":165},[159,15412,15413,15415,15417,15419,15421,15423,15425,15427,15429,15431,15433,15435,15437],{"class":161,"line":2648},[159,15414,11755],{"class":165},[159,15416,1156],{"class":185},[159,15418,1159],{"class":165},[159,15420,11845],{"class":192},[159,15422,1241],{"class":165},[159,15424,3925],{"class":1142},[159,15426,2707],{"class":1146},[159,15428,3930],{"class":192},[159,15430,3900],{"class":165},[159,15432,2680],{"class":185},[159,15434,1159],{"class":165},[159,15436,11771],{"class":192},[159,15438,1165],{"class":165},[159,15440,15441],{"class":161,"line":2674},[159,15442,590],{"emptyLinePlaceholder":589},[159,15444,15445],{"class":161,"line":2689},[159,15446,1308],{"class":165},[159,15448,15449],{"class":161,"line":2694},[159,15450,4863],{"class":165},[159,15452,15453,15455,15457],{"class":161,"line":2721},[159,15454,254],{"class":165},[159,15456,228],{"class":169},[159,15458,173],{"class":165},[159,15460,15461,15463,15465],{"class":161,"line":2726},[159,15462,264],{"class":165},[159,15464,170],{"class":169},[159,15466,173],{"class":165},[159,15468,15469],{"class":161,"line":2735},[159,15470,590],{"emptyLinePlaceholder":589},[159,15472,15473,15475,15477],{"class":161,"line":2744},[159,15474,264],{"class":165},[159,15476,522],{"class":169},[159,15478,173],{"class":165},[42,15480,15482],{"id":15481},"_333-页面加载事件","3.3.3 页面加载事件",[134,15484,15485],{},[106,15486,15487],{},"load",[14,15489,15490],{},[23,15491],{"alt":25,"src":15492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,15494,15495],{},"window代表整个窗口，比document还要大",[14,15497,15498],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,15500,15501],{},"img.addEventListener('load', function () {",[14,15503,15504],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,15506,11956],{},[134,15508,15509],{"start":176},[106,15510,15511],{},"DOMContentLoaded",[14,15513,15514],{},[23,15515],{"alt":25,"src":15516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,15518,15519],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[42,15521,15523],{"id":15522},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,15525,15526],{},[23,15527],{"alt":25,"src":15528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,15530,15531],{},[23,15532],{"alt":25,"src":15533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,15535,15536],{},[23,15537],{"alt":25,"src":15538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,15540,15541],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,15543,15544],{},"获得的是数字型数据，不带单位",[14,15546,15547],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,15549,15550],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,15552,15553],{},"它是通过document.documentElement来获取",[14,15555,15556],{},[23,15557],{"alt":25,"src":15558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,15560,15561],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[42,15563,15565],{"id":15564},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,15567,15568],{},[23,15569],{"alt":25,"src":15570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,15572,15573],{},[23,15574],{"alt":25,"src":15575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[42,15577,15579],{"id":15578},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,15581,15582],{},[23,15583],{"alt":25,"src":15584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,15586,15587],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,15589,15590],{},[23,15591],{"alt":25,"src":15592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,15594,15595],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,15597,15598],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,15600,15601],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,15603,15604],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,15606,15607],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,15609,15610],{},[23,15611],{"alt":25,"src":15612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,15614,15615],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,15617,15618],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,15620,15621],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,15623,15624],{},"e.pageX-box.getBoundingClientRect()",[42,15626,15628],{"id":15627},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,15630,15631],{},[23,15632],{"alt":25,"src":15633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,15635,15636],{},"这个是相对于视口来说的，它是个方法，不是属性值",[42,15638,15640],{"id":15639},"_338-总结","3.3.8 总结",[14,15642,15643],{},[23,15644],{"alt":25,"src":15645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,15647,15648],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,15650,15651],{},"修改盒子的宽高只能通过width和height来实现",[42,15653,15655],{"id":15654},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[151,15657,15659],{"className":520,"code":15658,"language":522,"meta":25,"style":25},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[49,15660,15661,15666,15671,15676,15681],{"__ignoreMap":25},[159,15662,15663],{"class":161,"line":162},[159,15664,15665],{"class":165},"\u002F* 页面滑动 *\u002F\n",[159,15667,15668],{"class":161,"line":176},[159,15669,15670],{"class":165},"html {\n",[159,15672,15673],{"class":161,"line":203},[159,15674,15675],{"class":165},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[159,15677,15678],{"class":161,"line":223},[159,15679,15680],{"class":165},"  scroll-behavior: smooth;\n",[159,15682,15683],{"class":161,"line":233},[159,15684,15685],{"class":165},"}\n",[14,15687,15688],{},"默认是auto",[42,15690,15692],{"id":15691},"_3310-日期对象","3.3.10 日期对象",[326,15694,15696],{"id":15695},"_33101-实例化","3.3.10.1 实例化",[14,15698,15699],{},[23,15700],{"alt":25,"src":15701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[326,15703,15705],{"id":15704},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,15707,15708],{},[23,15709],{"alt":25,"src":15710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,15712,15713],{},"月份+1",[14,15715,15716],{},"老外认为第一天为0，星期天",[14,15718,15719],{},"方法使用的时候必须要跟括号",[14,15721,15722],{},"快速获得日期",[14,15724,15725],{},"\u002F\u002F 得到年月日",[14,15727,15728],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,15730,15731],{},"\u002F\u002F 得到当地日期",[14,15733,15734],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,15736,15737],{},"\u002F\u002F 得到当地时间",[14,15739,15740],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,15742,15743],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,15745,15746],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[228,15748,15749],{},"\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",[14,15751,15752],{},"学会去封装函数！",[326,15754,15756],{"id":15755},"_33103-时间戳","3.3.10.3 时间戳",[14,15758,15759],{},[23,15760],{"alt":25,"src":15761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,15763,15764],{},[23,15765],{"alt":25,"src":15766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,15768,15769],{},"三种方法记住一个就可以",[42,15771,15773],{"id":15772},"_3311-节点操作","3.3.11 节点操作",[326,15775,15777],{"id":15776},"_33111-dom节点","3.3.11.1 DOM节点",[14,15779,15780],{},[23,15781],{"alt":25,"src":15782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,15784,15785],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[326,15787,15789],{"id":15788},"_33112-查找节点","3.3.11.2 查找节点",[14,15791,15792],{},"前边的document.querySelector()是获取的元素",[14,15794,15795],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,15797,15798],{},[23,15799],{"alt":25,"src":15800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[134,15802,15803],{},[106,15804,15805],{},"父节点",[14,15807,15808],{},[23,15809],{"alt":25,"src":15810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[134,15812,15813],{"start":176},[106,15814,15815],{},"子节点",[14,15817,15818],{},[23,15819],{"alt":25,"src":15820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,15822,15823],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,15825,15826],{},"children获得的是伪数组，是亲儿子",[134,15828,15829],{"start":203},[106,15830,15831],{},"兄弟节点",[14,15833,15834],{},[23,15835],{"alt":25,"src":15836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[326,15838,15840],{"id":15839},"_33113-增加节点","3.3.11.3 增加节点",[14,15842,15843],{},[23,15844],{"alt":25,"src":15845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,15847,15848],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,15850,15851],{},[23,15852],{"alt":25,"src":15853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,15855,15856],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,15858,15859],{},"下面是写法的部分展示，就按照下边的格式来写",[14,15861,15862],{},"例：",[228,15864,15865],{},"\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",[14,15867,15868],{},[23,15869],{"alt":25,"src":15870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,15872,15873],{},"false只克隆标签，里边的内容不会克隆过来",[151,15875,15877],{"className":520,"code":15876,"language":522,"meta":25,"style":25},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[49,15878,15879],{"__ignoreMap":25},[159,15880,15881],{"class":161,"line":162},[159,15882,15876],{"class":165},[326,15884,15886],{"id":15885},"_33114-删除节点","3.3.11.4 删除节点",[14,15888,15889],{},[23,15890],{"alt":25,"src":15891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,15893,15894],{},"父亲删儿子",[14,15896,15897],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[42,15899,15901],{"id":15900},"_3312-m端事件","3.3.12 M端事件",[14,15903,15904],{},"M端就是移动端",[14,15906,15907],{},[23,15908],{"alt":25,"src":15909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[42,15911,15913],{"id":15912},"_3313-插件","3.3.13 插件",[14,15915,15916],{},"要熟悉官网！！！",[14,15918,15919],{},[8085,15920,15921],{"href":15921,"rel":15922},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[15923],"nofollow",[14,15925,15926],{},[8085,15927,15928],{"href":15928,"rel":15929},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[15923],[42,15931,15933],{"id":15932},"_3314-学生信息表","3.3.14 学生信息表",[134,15935,15936,15939,15942,15945,15948,15951,15954,15957],{},[106,15937,15938],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[106,15940,15941],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[106,15943,15944],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[106,15946,15947],{},"用好表单元素自带的属性，value,name等",[106,15949,15950],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[106,15952,15953],{},"不要忘记事件对象",[106,15955,15956],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[106,15958,15959],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,15961,15962],{},"结构：",[151,15964,15966],{"className":520,"code":15965,"language":522,"meta":25,"style":25},"\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",[49,15967,15968,15978,15992,15996,16004,16018,16038,16059,16072,16096,16104,16108,16116,16129,16151,16179,16207,16212,16234,16255,16275,16283,16311,16333,16353,16373,16393,16413,16433,16441,16461,16469,16473,16486,16494,16503,16511,16524,16537,16550,16563,16576,16589,16602,16610,16618,16627,16632,16637,16642,16647,16652,16657,16662,16667,16672,16677,16682,16687,16692,16700,16708,16716,16720,16740,16760,16780,16800,16820,16840,16844,16849,16869,16874,16885,16890,16895,16915,16937,16942,16952,16956,16960,16965,16970,16999,17014,17029,17033,17037,17041,17046,17057,17071,17076,17081,17086,17091,17096,17100,17105,17110,17120,17125,17130,17142,17147,17154,17158,17163,17174,17179,17189,17194,17222,17243,17253,17275,17293,17310,17327,17344,17361,17365,17375,17380,17385,17390,17401,17405,17409,17413,17418,17423,17444,17456,17461,17466,17471,17485,17490,17497,17501,17505,17513,17517,17525,17529],{"__ignoreMap":25},[159,15969,15970,15972,15974,15976],{"class":161,"line":162},[159,15971,914],{"class":165},[159,15973,917],{"class":169},[159,15975,920],{"class":185},[159,15977,173],{"class":165},[159,15979,15980,15982,15984,15986,15988,15990],{"class":161,"line":176},[159,15981,166],{"class":165},[159,15983,522],{"class":169},[159,15985,931],{"class":185},[159,15987,189],{"class":165},[159,15989,936],{"class":192},[159,15991,173],{"class":165},[159,15993,15994],{"class":161,"line":203},[159,15995,590],{"emptyLinePlaceholder":589},[159,15997,15998,16000,16002],{"class":161,"line":223},[159,15999,166],{"class":165},[159,16001,949],{"class":169},[159,16003,173],{"class":165},[159,16005,16006,16008,16010,16012,16014,16016],{"class":161,"line":233},[159,16007,179],{"class":165},[159,16009,958],{"class":169},[159,16011,961],{"class":185},[159,16013,189],{"class":165},[159,16015,966],{"class":192},[159,16017,6049],{"class":165},[159,16019,16020,16022,16024,16026,16028,16030,16032,16034,16036],{"class":161,"line":239},[159,16021,179],{"class":165},[159,16023,958],{"class":169},[159,16025,547],{"class":185},[159,16027,189],{"class":165},[159,16029,981],{"class":192},[159,16031,984],{"class":185},[159,16033,189],{"class":165},[159,16035,989],{"class":192},[159,16037,6049],{"class":165},[159,16039,16040,16042,16044,16046,16048,16050,16052,16054,16057],{"class":161,"line":245},[159,16041,179],{"class":165},[159,16043,958],{"class":169},[159,16045,6058],{"class":185},[159,16047,189],{"class":165},[159,16049,6063],{"class":192},[159,16051,984],{"class":185},[159,16053,189],{"class":165},[159,16055,16056],{"class":192},"\"ie=edge\"",[159,16058,6049],{"class":165},[159,16060,16061,16063,16065,16068,16070],{"class":161,"line":251},[159,16062,179],{"class":165},[159,16064,998],{"class":169},[159,16066,16067],{"class":165},">学生信息管理\u003C\u002F",[159,16069,998],{"class":169},[159,16071,173],{"class":165},[159,16073,16074,16076,16079,16082,16084,16087,16089,16091,16094],{"class":161,"line":261},[159,16075,179],{"class":165},[159,16077,16078],{"class":169},"link",[159,16080,16081],{"class":185}," rel",[159,16083,189],{"class":165},[159,16085,16086],{"class":192},"\"stylesheet\"",[159,16088,8088],{"class":185},[159,16090,189],{"class":165},[159,16092,16093],{"class":192},"\"css\u002Findex.css\"",[159,16095,6049],{"class":165},[159,16097,16098,16100,16102],{"class":161,"line":603},[159,16099,264],{"class":165},[159,16101,949],{"class":169},[159,16103,173],{"class":165},[159,16105,16106],{"class":161,"line":621},[159,16107,590],{"emptyLinePlaceholder":589},[159,16109,16110,16112,16114],{"class":161,"line":634},[159,16111,166],{"class":165},[159,16113,170],{"class":169},[159,16115,173],{"class":165},[159,16117,16118,16120,16122,16125,16127],{"class":161,"line":640},[159,16119,179],{"class":165},[159,16121,10],{"class":169},[159,16123,16124],{"class":165},">新增学员\u003C\u002F",[159,16126,10],{"class":169},[159,16128,173],{"class":165},[159,16130,16131,16133,16135,16137,16139,16141,16144,16146,16149],{"class":161,"line":1075},[159,16132,179],{"class":165},[159,16134,13694],{"class":169},[159,16136,186],{"class":185},[159,16138,189],{"class":165},[159,16140,9707],{"class":192},[159,16142,16143],{"class":185}," autocomplete",[159,16145,189],{"class":165},[159,16147,16148],{"class":192},"\"off\"",[159,16150,173],{"class":165},[159,16152,16153,16156,16158,16160,16162,16164,16166,16168,16171,16173,16175,16177],{"class":161,"line":1081},[159,16154,16155],{"class":165},"    姓名：\u003C",[159,16157,536],{"class":169},[159,16159,539],{"class":185},[159,16161,189],{"class":165},[159,16163,9742],{"class":192},[159,16165,186],{"class":185},[159,16167,189],{"class":165},[159,16169,16170],{"class":192},"\"uname\"",[159,16172,547],{"class":185},[159,16174,189],{"class":165},[159,16176,16170],{"class":192},[159,16178,6049],{"class":165},[159,16180,16181,16184,16186,16188,16190,16192,16194,16196,16199,16201,16203,16205],{"class":161,"line":1091},[159,16182,16183],{"class":165},"    年龄：\u003C",[159,16185,536],{"class":169},[159,16187,539],{"class":185},[159,16189,189],{"class":165},[159,16191,9742],{"class":192},[159,16193,186],{"class":185},[159,16195,189],{"class":165},[159,16197,16198],{"class":192},"\"age\"",[159,16200,547],{"class":185},[159,16202,189],{"class":165},[159,16204,16198],{"class":192},[159,16206,6049],{"class":165},[159,16208,16209],{"class":161,"line":1100},[159,16210,16211],{"class":165},"    性别:\n",[159,16213,16214,16216,16219,16221,16223,16226,16228,16230,16232],{"class":161,"line":1123},[159,16215,2056],{"class":165},[159,16217,16218],{"class":169},"select",[159,16220,547],{"class":185},[159,16222,189],{"class":165},[159,16224,16225],{"class":192},"\"gender\"",[159,16227,186],{"class":185},[159,16229,189],{"class":165},[159,16231,16225],{"class":192},[159,16233,173],{"class":165},[159,16235,16236,16238,16241,16243,16245,16248,16251,16253],{"class":161,"line":1132},[159,16237,2073],{"class":165},[159,16239,16240],{"class":169},"option",[159,16242,13720],{"class":185},[159,16244,189],{"class":165},[159,16246,16247],{"class":192},"\"男\"",[159,16249,16250],{"class":165},">男\u003C\u002F",[159,16252,16240],{"class":169},[159,16254,173],{"class":165},[159,16256,16257,16259,16261,16263,16265,16268,16271,16273],{"class":161,"line":1139},[159,16258,2073],{"class":165},[159,16260,16240],{"class":169},[159,16262,13720],{"class":185},[159,16264,189],{"class":165},[159,16266,16267],{"class":192},"\"女\"",[159,16269,16270],{"class":165},">女\u003C\u002F",[159,16272,16240],{"class":169},[159,16274,173],{"class":165},[159,16276,16277,16279,16281],{"class":161,"line":1168},[159,16278,1084],{"class":165},[159,16280,16218],{"class":169},[159,16282,173],{"class":165},[159,16284,16285,16288,16290,16292,16294,16296,16298,16300,16303,16305,16307,16309],{"class":161,"line":1174},[159,16286,16287],{"class":165},"    薪资：\u003C",[159,16289,536],{"class":169},[159,16291,539],{"class":185},[159,16293,189],{"class":165},[159,16295,9742],{"class":192},[159,16297,186],{"class":185},[159,16299,189],{"class":165},[159,16301,16302],{"class":192},"\"salary\"",[159,16304,547],{"class":185},[159,16306,189],{"class":165},[159,16308,16302],{"class":192},[159,16310,6049],{"class":165},[159,16312,16313,16316,16318,16320,16322,16325,16327,16329,16331],{"class":161,"line":1180},[159,16314,16315],{"class":165},"    就业城市：\u003C",[159,16317,16218],{"class":169},[159,16319,547],{"class":185},[159,16321,189],{"class":165},[159,16323,16324],{"class":192},"\"city\"",[159,16326,186],{"class":185},[159,16328,189],{"class":165},[159,16330,16324],{"class":192},[159,16332,173],{"class":165},[159,16334,16335,16337,16339,16341,16343,16346,16349,16351],{"class":161,"line":1194},[159,16336,2073],{"class":165},[159,16338,16240],{"class":169},[159,16340,13720],{"class":185},[159,16342,189],{"class":165},[159,16344,16345],{"class":192},"\"北京\"",[159,16347,16348],{"class":165},">北京\u003C\u002F",[159,16350,16240],{"class":169},[159,16352,173],{"class":165},[159,16354,16355,16357,16359,16361,16363,16366,16369,16371],{"class":161,"line":1200},[159,16356,2073],{"class":165},[159,16358,16240],{"class":169},[159,16360,13720],{"class":185},[159,16362,189],{"class":165},[159,16364,16365],{"class":192},"\"上海\"",[159,16367,16368],{"class":165},">上海\u003C\u002F",[159,16370,16240],{"class":169},[159,16372,173],{"class":165},[159,16374,16375,16377,16379,16381,16383,16386,16389,16391],{"class":161,"line":1221},[159,16376,2073],{"class":165},[159,16378,16240],{"class":169},[159,16380,13720],{"class":185},[159,16382,189],{"class":165},[159,16384,16385],{"class":192},"\"广州\"",[159,16387,16388],{"class":165},">广州\u003C\u002F",[159,16390,16240],{"class":169},[159,16392,173],{"class":165},[159,16394,16395,16397,16399,16401,16403,16406,16409,16411],{"class":161,"line":1230},[159,16396,2073],{"class":165},[159,16398,16240],{"class":169},[159,16400,13720],{"class":185},[159,16402,189],{"class":165},[159,16404,16405],{"class":192},"\"深圳\"",[159,16407,16408],{"class":165},">深圳\u003C\u002F",[159,16410,16240],{"class":169},[159,16412,173],{"class":165},[159,16414,16415,16417,16419,16421,16423,16426,16429,16431],{"class":161,"line":1247},[159,16416,2073],{"class":165},[159,16418,16240],{"class":169},[159,16420,13720],{"class":185},[159,16422,189],{"class":165},[159,16424,16425],{"class":192},"\"曹县\"",[159,16427,16428],{"class":165},">曹县\u003C\u002F",[159,16430,16240],{"class":169},[159,16432,173],{"class":165},[159,16434,16435,16437,16439],{"class":161,"line":1265},[159,16436,1084],{"class":165},[159,16438,16218],{"class":169},[159,16440,173],{"class":165},[159,16442,16443,16445,16447,16449,16451,16454,16457,16459],{"class":161,"line":1277},[159,16444,2056],{"class":165},[159,16446,608],{"class":169},[159,16448,186],{"class":185},[159,16450,189],{"class":165},[159,16452,16453],{"class":192},"\"add\"",[159,16455,16456],{"class":165},">录入\u003C\u002F",[159,16458,608],{"class":169},[159,16460,173],{"class":165},[159,16462,16463,16465,16467],{"class":161,"line":1283},[159,16464,254],{"class":165},[159,16466,13694],{"class":169},[159,16468,173],{"class":165},[159,16470,16471],{"class":161,"line":1294},[159,16472,590],{"emptyLinePlaceholder":589},[159,16474,16475,16477,16479,16482,16484],{"class":161,"line":1305},[159,16476,179],{"class":165},[159,16478,10],{"class":169},[159,16480,16481],{"class":165},">就业榜\u003C\u002F",[159,16483,10],{"class":169},[159,16485,173],{"class":165},[159,16487,16488,16490,16492],{"class":161,"line":1311},[159,16489,179],{"class":165},[159,16491,12347],{"class":169},[159,16493,173],{"class":165},[159,16495,16496,16498,16501],{"class":161,"line":1322},[159,16497,2056],{"class":165},[159,16499,16500],{"class":169},"thead",[159,16502,173],{"class":165},[159,16504,16505,16507,16509],{"class":161,"line":1327},[159,16506,2073],{"class":165},[159,16508,12356],{"class":169},[159,16510,173],{"class":165},[159,16512,16513,16515,16517,16520,16522],{"class":161,"line":1336},[159,16514,2146],{"class":165},[159,16516,12365],{"class":169},[159,16518,16519],{"class":165},">序号\u003C\u002F",[159,16521,12365],{"class":169},[159,16523,173],{"class":165},[159,16525,16526,16528,16530,16533,16535],{"class":161,"line":1345},[159,16527,2146],{"class":165},[159,16529,12365],{"class":169},[159,16531,16532],{"class":165},">姓名\u003C\u002F",[159,16534,12365],{"class":169},[159,16536,173],{"class":165},[159,16538,16539,16541,16543,16546,16548],{"class":161,"line":1350},[159,16540,2146],{"class":165},[159,16542,12365],{"class":169},[159,16544,16545],{"class":165},">年龄\u003C\u002F",[159,16547,12365],{"class":169},[159,16549,173],{"class":165},[159,16551,16552,16554,16556,16559,16561],{"class":161,"line":1764},[159,16553,2146],{"class":165},[159,16555,12365],{"class":169},[159,16557,16558],{"class":165},">性别\u003C\u002F",[159,16560,12365],{"class":169},[159,16562,173],{"class":165},[159,16564,16565,16567,16569,16572,16574],{"class":161,"line":1769},[159,16566,2146],{"class":165},[159,16568,12365],{"class":169},[159,16570,16571],{"class":165},">薪资\u003C\u002F",[159,16573,12365],{"class":169},[159,16575,173],{"class":165},[159,16577,16578,16580,16582,16585,16587],{"class":161,"line":1777},[159,16579,2146],{"class":165},[159,16581,12365],{"class":169},[159,16583,16584],{"class":165},">就业城市\u003C\u002F",[159,16586,12365],{"class":169},[159,16588,173],{"class":165},[159,16590,16591,16593,16595,16598,16600],{"class":161,"line":1788},[159,16592,2146],{"class":165},[159,16594,12365],{"class":169},[159,16596,16597],{"class":165},">操作\u003C\u002F",[159,16599,12365],{"class":169},[159,16601,173],{"class":165},[159,16603,16604,16606,16608],{"class":161,"line":1802},[159,16605,2259],{"class":165},[159,16607,12356],{"class":169},[159,16609,173],{"class":165},[159,16611,16612,16614,16616],{"class":161,"line":1815},[159,16613,1084],{"class":165},[159,16615,16500],{"class":169},[159,16617,173],{"class":165},[159,16619,16620,16622,16625],{"class":161,"line":1828},[159,16621,2056],{"class":165},[159,16623,16624],{"class":169},"tbody",[159,16626,173],{"class":165},[159,16628,16629],{"class":161,"line":1841},[159,16630,16631],{"class":1135},"      \u003C!-- \n",[159,16633,16634],{"class":161,"line":1852},[159,16635,16636],{"class":1135},"        \u003Ctr>\n",[159,16638,16639],{"class":161,"line":1866},[159,16640,16641],{"class":1135},"          \u003Ctd>1001\u003C\u002Ftd>\n",[159,16643,16644],{"class":161,"line":1879},[159,16645,16646],{"class":1135},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[159,16648,16649],{"class":161,"line":1884},[159,16650,16651],{"class":1135},"          \u003Ctd>19\u003C\u002Ftd>\n",[159,16653,16654],{"class":161,"line":1889},[159,16655,16656],{"class":1135},"          \u003Ctd>男\u003C\u002Ftd>\n",[159,16658,16659],{"class":161,"line":1899},[159,16660,16661],{"class":1135},"          \u003Ctd>15000\u003C\u002Ftd>\n",[159,16663,16664],{"class":161,"line":1912},[159,16665,16666],{"class":1135},"          \u003Ctd>上海\u003C\u002Ftd>\n",[159,16668,16669],{"class":161,"line":1925},[159,16670,16671],{"class":1135},"          \u003Ctd>\n",[159,16673,16674],{"class":161,"line":1956},[159,16675,16676],{"class":1135},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[159,16678,16679],{"class":161,"line":1971},[159,16680,16681],{"class":1135},"          \u003C\u002Ftd>\n",[159,16683,16684],{"class":161,"line":1976},[159,16685,16686],{"class":1135},"        \u003C\u002Ftr> \n",[159,16688,16689],{"class":161,"line":1981},[159,16690,16691],{"class":1135},"        -->\n",[159,16693,16694,16696,16698],{"class":161,"line":1989},[159,16695,1084],{"class":165},[159,16697,16624],{"class":169},[159,16699,173],{"class":165},[159,16701,16702,16704,16706],{"class":161,"line":2001},[159,16703,254],{"class":165},[159,16705,12347],{"class":169},[159,16707,173],{"class":165},[159,16709,16710,16712,16714],{"class":161,"line":2006},[159,16711,179],{"class":165},[159,16713,228],{"class":169},[159,16715,173],{"class":165},[159,16717,16718],{"class":161,"line":2015},[159,16719,6893],{"class":1135},[159,16721,16722,16724,16727,16729,16731,16733,16735,16738],{"class":161,"line":2024},[159,16723,1143],{"class":1142},[159,16725,16726],{"class":1146}," uname",[159,16728,1150],{"class":1142},[159,16730,1153],{"class":165},[159,16732,1156],{"class":185},[159,16734,1159],{"class":165},[159,16736,16737],{"class":192},"'.uname'",[159,16739,1165],{"class":165},[159,16741,16742,16744,16747,16749,16751,16753,16755,16758],{"class":161,"line":2029},[159,16743,1143],{"class":1142},[159,16745,16746],{"class":1146}," age",[159,16748,1150],{"class":1142},[159,16750,1153],{"class":165},[159,16752,1156],{"class":185},[159,16754,1159],{"class":165},[159,16756,16757],{"class":192},"'.age'",[159,16759,1165],{"class":165},[159,16761,16762,16764,16767,16769,16771,16773,16775,16778],{"class":161,"line":2038},[159,16763,1143],{"class":1142},[159,16765,16766],{"class":1146}," gender",[159,16768,1150],{"class":1142},[159,16770,1153],{"class":165},[159,16772,1156],{"class":185},[159,16774,1159],{"class":165},[159,16776,16777],{"class":192},"'.gender'",[159,16779,1165],{"class":165},[159,16781,16782,16784,16787,16789,16791,16793,16795,16798],{"class":161,"line":2053},[159,16783,1143],{"class":1142},[159,16785,16786],{"class":1146}," salary",[159,16788,1150],{"class":1142},[159,16790,1153],{"class":165},[159,16792,1156],{"class":185},[159,16794,1159],{"class":165},[159,16796,16797],{"class":192},"'.salary'",[159,16799,1165],{"class":165},[159,16801,16802,16804,16807,16809,16811,16813,16815,16818],{"class":161,"line":2070},[159,16803,1143],{"class":1142},[159,16805,16806],{"class":1146}," city",[159,16808,1150],{"class":1142},[159,16810,1153],{"class":165},[159,16812,1156],{"class":185},[159,16814,1159],{"class":165},[159,16816,16817],{"class":192},"'.city'",[159,16819,1165],{"class":165},[159,16821,16822,16824,16827,16829,16831,16833,16835,16838],{"class":161,"line":2095},[159,16823,1143],{"class":1142},[159,16825,16826],{"class":1146}," tbody",[159,16828,1150],{"class":1142},[159,16830,1153],{"class":165},[159,16832,1156],{"class":185},[159,16834,1159],{"class":165},[159,16836,16837],{"class":192},"'tbody'",[159,16839,1165],{"class":165},[159,16841,16842],{"class":161,"line":2104},[159,16843,590],{"emptyLinePlaceholder":589},[159,16845,16846],{"class":161,"line":2120},[159,16847,16848],{"class":1135},"    \u002F\u002F 获取所有带有name属性的元素\n",[159,16850,16851,16853,16856,16858,16860,16862,16864,16867],{"class":161,"line":2134},[159,16852,1143],{"class":1142},[159,16854,16855],{"class":1146}," items",[159,16857,1150],{"class":1142},[159,16859,1153],{"class":165},[159,16861,2551],{"class":185},[159,16863,1159],{"class":165},[159,16865,16866],{"class":192},"'[name]'",[159,16868,1165],{"class":165},[159,16870,16871],{"class":161,"line":2143},[159,16872,16873],{"class":1135},"    \u002F\u002F 声明一个空的数组\n",[159,16875,16876,16878,16880,16882],{"class":161,"line":2165},[159,16877,1143],{"class":1142},[159,16879,4603],{"class":1146},[159,16881,1150],{"class":1142},[159,16883,16884],{"class":165}," []\n",[159,16886,16887],{"class":161,"line":2178},[159,16888,16889],{"class":1135},"    \u002F\u002F 1.录入模块\n",[159,16891,16892],{"class":161,"line":2191},[159,16893,16894],{"class":1135},"    \u002F\u002F 1.1这是一个表单提交事件\n",[159,16896,16897,16899,16902,16904,16906,16908,16910,16913],{"class":161,"line":2204},[159,16898,1143],{"class":1142},[159,16900,16901],{"class":1146}," info",[159,16903,1150],{"class":1142},[159,16905,1153],{"class":165},[159,16907,1156],{"class":185},[159,16909,1159],{"class":165},[159,16911,16912],{"class":192},"'.info'",[159,16914,1165],{"class":165},[159,16916,16917,16920,16922,16924,16927,16929,16931,16933,16935],{"class":161,"line":2217},[159,16918,16919],{"class":165},"    info.",[159,16921,4724],{"class":185},[159,16923,1159],{"class":165},[159,16925,16926],{"class":192},"'submit'",[159,16928,1939],{"class":165},[159,16930,1215],{"class":1142},[159,16932,11680],{"class":165},[159,16934,14038],{"class":8765},[159,16936,1262],{"class":165},[159,16938,16939],{"class":161,"line":2230},[159,16940,16941],{"class":1135},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[159,16943,16944,16947,16950],{"class":161,"line":2243},[159,16945,16946],{"class":165},"      e.",[159,16948,16949],{"class":185},"preventDefault",[159,16951,5158],{"class":165},[159,16953,16954],{"class":161,"line":2256},[159,16955,6958],{"class":1135},[159,16957,16958],{"class":161,"line":2266},[159,16959,590],{"emptyLinePlaceholder":589},[159,16961,16962],{"class":161,"line":2275},[159,16963,16964],{"class":1135},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[159,16966,16967],{"class":161,"line":2284},[159,16968,16969],{"class":1135},"      \u002F\u002F 先遍历循环\n",[159,16971,16972,16974,16976,16978,16980,16982,16984,16986,16988,16991,16993,16995,16997],{"class":161,"line":2293},[159,16973,12875],{"class":1142},[159,16975,11680],{"class":165},[159,16977,11683],{"class":1142},[159,16979,1186],{"class":165},[159,16981,189],{"class":1142},[159,16983,1259],{"class":1146},[159,16985,11692],{"class":165},[159,16987,166],{"class":1142},[159,16989,16990],{"class":165}," items.",[159,16992,3828],{"class":1146},[159,16994,11702],{"class":165},[159,16996,11705],{"class":1142},[159,16998,1262],{"class":165},[159,17000,17001,17004,17007,17009,17012],{"class":161,"line":2306},[159,17002,17003],{"class":1142},"        if",[159,17005,17006],{"class":165}," (items[i].value ",[159,17008,1256],{"class":1142},[159,17010,17011],{"class":192}," ''",[159,17013,1262],{"class":165},[159,17015,17016,17019,17022,17024,17027],{"class":161,"line":2330},[159,17017,17018],{"class":1142},"          return",[159,17020,17021],{"class":185}," alert",[159,17023,1159],{"class":165},[159,17025,17026],{"class":192},"'输入内容不能为空'",[159,17028,1165],{"class":165},[159,17030,17031],{"class":161,"line":2350},[159,17032,7530],{"class":165},[159,17034,17035],{"class":161,"line":2370},[159,17036,1308],{"class":165},[159,17038,17039],{"class":161,"line":2390},[159,17040,590],{"emptyLinePlaceholder":589},[159,17042,17043],{"class":161,"line":2410},[159,17044,17045],{"class":1135},"      \u002F\u002F 创建新的对象\n",[159,17047,17048,17050,17053,17055],{"class":161,"line":2430},[159,17049,5145],{"class":1142},[159,17051,17052],{"class":1146}," obj",[159,17054,1150],{"class":1142},[159,17056,1478],{"class":165},[159,17058,17059,17062,17064,17066,17068],{"class":161,"line":2450},[159,17060,17061],{"class":165},"        stuID: arr.",[159,17063,3828],{"class":1146},[159,17065,3925],{"class":1142},[159,17067,2707],{"class":1146},[159,17069,17070],{"class":165},",\n",[159,17072,17073],{"class":161,"line":2471},[159,17074,17075],{"class":165},"        uname: uname.value,\n",[159,17077,17078],{"class":161,"line":2477},[159,17079,17080],{"class":165},"        age: age.value,\n",[159,17082,17083],{"class":161,"line":2498},[159,17084,17085],{"class":165},"        gender: gender.value,\n",[159,17087,17088],{"class":161,"line":2518},[159,17089,17090],{"class":165},"        salary: salary.value,\n",[159,17092,17093],{"class":161,"line":2539},[159,17094,17095],{"class":165},"        city: city.value\n",[159,17097,17098],{"class":161,"line":2561},[159,17099,1308],{"class":165},[159,17101,17102],{"class":161,"line":2573},[159,17103,17104],{"class":1135},"      \u002F\u002F console.log(obj);\n",[159,17106,17107],{"class":161,"line":2591},[159,17108,17109],{"class":1135},"      \u002F\u002F 追加到数组里面\n",[159,17111,17112,17114,17117],{"class":161,"line":2602},[159,17113,4923],{"class":165},[159,17115,17116],{"class":185},"push",[159,17118,17119],{"class":165},"(obj)\n",[159,17121,17122],{"class":161,"line":2613},[159,17123,17124],{"class":1135},"      \u002F\u002F console.log(arr);\n",[159,17126,17127],{"class":161,"line":2624},[159,17128,17129],{"class":1135},"      \u002F\u002F 清空表单  reset重置表单\n",[159,17131,17132,17135,17137,17140],{"class":161,"line":2630},[159,17133,17134],{"class":1146},"      this",[159,17136,9952],{"class":165},[159,17138,17139],{"class":185},"reset",[159,17141,5158],{"class":165},[159,17143,17144],{"class":161,"line":2636},[159,17145,17146],{"class":1135},"      \u002F\u002F 调用渲染函数\n",[159,17148,17149,17152],{"class":161,"line":2642},[159,17150,17151],{"class":185},"      render",[159,17153,5158],{"class":165},[159,17155,17156],{"class":161,"line":2648},[159,17157,4863],{"class":165},[159,17159,17160],{"class":161,"line":2674},[159,17161,17162],{"class":1135},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[159,17164,17165,17168,17171],{"class":161,"line":2689},[159,17166,17167],{"class":1142},"    function",[159,17169,17170],{"class":185}," render",[159,17172,17173],{"class":165},"() {\n",[159,17175,17176],{"class":161,"line":2694},[159,17177,17178],{"class":1135},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[159,17180,17181,17184,17186],{"class":161,"line":2721},[159,17182,17183],{"class":165},"      tbody.innerHTML ",[159,17185,189],{"class":1142},[159,17187,17188],{"class":192}," ''\n",[159,17190,17191],{"class":161,"line":2726},[159,17192,17193],{"class":1135},"      \u002F\u002F 遍历数组\n",[159,17195,17196,17198,17200,17202,17204,17206,17208,17210,17212,17214,17216,17218,17220],{"class":161,"line":2735},[159,17197,12875],{"class":1142},[159,17199,11680],{"class":165},[159,17201,11683],{"class":1142},[159,17203,1186],{"class":165},[159,17205,189],{"class":1142},[159,17207,1259],{"class":1146},[159,17209,11692],{"class":165},[159,17211,166],{"class":1142},[159,17213,4780],{"class":165},[159,17215,3828],{"class":1146},[159,17217,11702],{"class":165},[159,17219,11705],{"class":1142},[159,17221,1262],{"class":165},[159,17223,17224,17226,17229,17231,17233,17236,17238,17241],{"class":161,"line":2744},[159,17225,8301],{"class":1142},[159,17227,17228],{"class":1146}," tr",[159,17230,1150],{"class":1142},[159,17232,1153],{"class":165},[159,17234,17235],{"class":185},"createElement",[159,17237,1159],{"class":165},[159,17239,17240],{"class":192},"'tr'",[159,17242,1165],{"class":165},[159,17244,17245,17248,17250],{"class":161,"line":2753},[159,17246,17247],{"class":165},"        tr.innerHTML ",[159,17249,189],{"class":1142},[159,17251,17252],{"class":192}," `\n",[159,17254,17255,17258,17261,17264,17266,17269,17272],{"class":161,"line":2758},[159,17256,17257],{"class":192},"        \u003Ctd>${",[159,17259,17260],{"class":165},"arr",[159,17262,17263],{"class":192},"[",[159,17265,1241],{"class":165},[159,17267,17268],{"class":192},"].",[159,17270,17271],{"class":165},"stuID",[159,17273,17274],{"class":192},"}\u003C\u002Ftd>\n",[159,17276,17277,17280,17282,17284,17286,17288,17291],{"class":161,"line":3959},[159,17278,17279],{"class":192},"          \u003Ctd>${",[159,17281,17260],{"class":165},[159,17283,17263],{"class":192},[159,17285,1241],{"class":165},[159,17287,17268],{"class":192},[159,17289,17290],{"class":165},"uname",[159,17292,17274],{"class":192},[159,17294,17295,17297,17299,17301,17303,17305,17308],{"class":161,"line":3968},[159,17296,17279],{"class":192},[159,17298,17260],{"class":165},[159,17300,17263],{"class":192},[159,17302,1241],{"class":165},[159,17304,17268],{"class":192},[159,17306,17307],{"class":165},"age",[159,17309,17274],{"class":192},[159,17311,17312,17314,17316,17318,17320,17322,17325],{"class":161,"line":3977},[159,17313,17279],{"class":192},[159,17315,17260],{"class":165},[159,17317,17263],{"class":192},[159,17319,1241],{"class":165},[159,17321,17268],{"class":192},[159,17323,17324],{"class":165},"gender",[159,17326,17274],{"class":192},[159,17328,17329,17331,17333,17335,17337,17339,17342],{"class":161,"line":3982},[159,17330,17279],{"class":192},[159,17332,17260],{"class":165},[159,17334,17263],{"class":192},[159,17336,1241],{"class":165},[159,17338,17268],{"class":192},[159,17340,17341],{"class":165},"salary",[159,17343,17274],{"class":192},[159,17345,17346,17348,17350,17352,17354,17356,17359],{"class":161,"line":6843},[159,17347,17279],{"class":192},[159,17349,17260],{"class":165},[159,17351,17263],{"class":192},[159,17353,1241],{"class":165},[159,17355,17268],{"class":192},[159,17357,17358],{"class":165},"city",[159,17360,17274],{"class":192},[159,17362,17363],{"class":161,"line":6849},[159,17364,16671],{"class":192},[159,17366,17367,17370,17372],{"class":161,"line":6855},[159,17368,17369],{"class":192},"            \u003Ca href=\"javascript:\" data-id=${",[159,17371,1241],{"class":165},[159,17373,17374],{"class":192},"}>删除\u003C\u002Fa>\n",[159,17376,17377],{"class":161,"line":6861},[159,17378,17379],{"class":192},"          \u003C\u002Ftd> \n",[159,17381,17382],{"class":161,"line":6867},[159,17383,17384],{"class":192},"          `\n",[159,17386,17387],{"class":161,"line":6873},[159,17388,17389],{"class":1135},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[159,17391,17392,17395,17398],{"class":161,"line":6879},[159,17393,17394],{"class":165},"        tbody.",[159,17396,17397],{"class":185},"appendChild",[159,17399,17400],{"class":165},"(tr)\n",[159,17402,17403],{"class":161,"line":6885},[159,17404,1308],{"class":165},[159,17406,17407],{"class":161,"line":6890},[159,17408,1508],{"class":165},[159,17410,17411],{"class":161,"line":6896},[159,17412,590],{"emptyLinePlaceholder":589},[159,17414,17415],{"class":161,"line":6902},[159,17416,17417],{"class":1135},"    \u002F\u002F 3.删除委托\n",[159,17419,17420],{"class":161,"line":6908},[159,17421,17422],{"class":1135},"    \u002F\u002F 3.1 事件委托 tbody\n",[159,17424,17425,17428,17430,17432,17434,17436,17438,17440,17442],{"class":161,"line":6914},[159,17426,17427],{"class":165},"    tbody.",[159,17429,4724],{"class":185},[159,17431,1159],{"class":165},[159,17433,4729],{"class":192},[159,17435,1939],{"class":165},[159,17437,1215],{"class":1142},[159,17439,11680],{"class":165},[159,17441,14038],{"class":8765},[159,17443,1262],{"class":165},[159,17445,17446,17448,17450,17452,17454],{"class":161,"line":6920},[159,17447,1250],{"class":1142},[159,17449,14104],{"class":165},[159,17451,1256],{"class":1142},[159,17453,15326],{"class":192},[159,17455,1262],{"class":165},[159,17457,17458],{"class":161,"line":6926},[159,17459,17460],{"class":1135},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[159,17462,17463],{"class":161,"line":6932},[159,17464,17465],{"class":1135},"        \u002F\u002F console.log(e.target.dataset.id);\n",[159,17467,17468],{"class":161,"line":6938},[159,17469,17470],{"class":1135},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[159,17472,17473,17476,17478,17481,17483],{"class":161,"line":6944},[159,17474,17475],{"class":165},"        arr.",[159,17477,4926],{"class":185},[159,17479,17480],{"class":165},"(e.target.dataset.id, ",[159,17482,4932],{"class":1146},[159,17484,1165],{"class":165},[159,17486,17487],{"class":161,"line":6949},[159,17488,17489],{"class":1135},"        \u002F\u002F 重新渲染一次\n",[159,17491,17492,17495],{"class":161,"line":6955},[159,17493,17494],{"class":185},"        render",[159,17496,5158],{"class":165},[159,17498,17499],{"class":161,"line":6961},[159,17500,1308],{"class":165},[159,17502,17503],{"class":161,"line":6967},[159,17504,4863],{"class":165},[159,17506,17507,17509,17511],{"class":161,"line":6973},[159,17508,254],{"class":165},[159,17510,228],{"class":169},[159,17512,173],{"class":165},[159,17514,17515],{"class":161,"line":6979},[159,17516,590],{"emptyLinePlaceholder":589},[159,17518,17519,17521,17523],{"class":161,"line":6985},[159,17520,264],{"class":165},[159,17522,170],{"class":169},[159,17524,173],{"class":165},[159,17526,17527],{"class":161,"line":6991},[159,17528,590],{"emptyLinePlaceholder":589},[159,17530,17531,17533,17535],{"class":161,"line":6997},[159,17532,264],{"class":165},[159,17534,522],{"class":169},[159,17536,173],{"class":165},[14,17538,17539],{},"样式：",[151,17541,17545],{"className":17542,"code":17543,"language":17544,"meta":25,"style":25},"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",[49,17546,17547,17552,17562,17571,17575,17579,17584,17594,17599,17603,17608,17618,17623,17632,17637,17641,17646,17651,17661,17671,17676,17680,17685,17694,17704,17709,17719,17729,17733,17738,17746,17750,17755,17760,17765,17773,17782,17786,17791,17800,17804,17809,17818,17822,17827,17836,17845,17853,17857,17862,17871,17881,17890,17900,17906,17915,17925,17935,17939,17944,17953,17961,17971,17979,17988,17997,18007,18015,18019,18024,18033],{"__ignoreMap":25},[159,17548,17549],{"class":161,"line":162},[159,17550,17551],{"class":165},"* {\n",[159,17553,17554,17557,17559],{"class":161,"line":176},[159,17555,17556],{"class":169},"  margin",[159,17558,1486],{"class":165},[159,17560,17561],{"class":192},"0;\n",[159,17563,17564,17567,17569],{"class":161,"line":203},[159,17565,17566],{"class":192},"  padding",[159,17568,1486],{"class":165},[159,17570,17561],{"class":192},[159,17572,17573],{"class":161,"line":223},[159,17574,15685],{"class":165},[159,17576,17577],{"class":161,"line":233},[159,17578,590],{"emptyLinePlaceholder":589},[159,17580,17581],{"class":161,"line":239},[159,17582,17583],{"class":192},"a {\n",[159,17585,17586,17589,17591],{"class":161,"line":245},[159,17587,17588],{"class":169},"  text-decoration",[159,17590,1486],{"class":165},[159,17592,17593],{"class":192},"none;\n",[159,17595,17596],{"class":161,"line":251},[159,17597,17598],{"class":192},"  color:#721c24;\n",[159,17600,17601],{"class":161,"line":261},[159,17602,15685],{"class":165},[159,17604,17605],{"class":161,"line":603},[159,17606,17607],{"class":192},"h1 {\n",[159,17609,17610,17613,17615],{"class":161,"line":621},[159,17611,17612],{"class":169},"  text-align",[159,17614,1486],{"class":165},[159,17616,17617],{"class":192},"center;\n",[159,17619,17620],{"class":161,"line":634},[159,17621,17622],{"class":192},"  color:#333;\n",[159,17624,17625,17627,17629],{"class":161,"line":640},[159,17626,17556],{"class":169},[159,17628,1486],{"class":165},[159,17630,17631],{"class":192},"20px 0;\n",[159,17633,17634],{"class":161,"line":1075},[159,17635,17636],{"class":165}," \n",[159,17638,17639],{"class":161,"line":1081},[159,17640,15685],{"class":165},[159,17642,17643],{"class":161,"line":1091},[159,17644,17645],{"class":192},"table {\n",[159,17647,17648],{"class":161,"line":1100},[159,17649,17650],{"class":192},"  margin:0 auto;\n",[159,17652,17653,17656,17658],{"class":161,"line":1123},[159,17654,17655],{"class":169},"  width",[159,17657,1486],{"class":165},[159,17659,17660],{"class":192},"800px;\n",[159,17662,17663,17666,17668],{"class":161,"line":1132},[159,17664,17665],{"class":169},"  border-collapse",[159,17667,1486],{"class":165},[159,17669,17670],{"class":192},"collapse;\n",[159,17672,17673],{"class":161,"line":1139},[159,17674,17675],{"class":192},"  color:#004085;\n",[159,17677,17678],{"class":161,"line":1168},[159,17679,15685],{"class":165},[159,17681,17682],{"class":161,"line":1174},[159,17683,17684],{"class":192},"th {\n",[159,17686,17687,17689,17691],{"class":161,"line":1180},[159,17688,17566],{"class":169},[159,17690,1486],{"class":165},[159,17692,17693],{"class":192},"10px;\n",[159,17695,17696,17699,17701],{"class":161,"line":1194},[159,17697,17698],{"class":169},"  background",[159,17700,1486],{"class":165},[159,17702,17703],{"class":1135},"#cfe5ff;\n",[159,17705,17706],{"class":161,"line":1200},[159,17707,17708],{"class":165},"  \n",[159,17710,17711,17714,17716],{"class":161,"line":1221},[159,17712,17713],{"class":169},"  font-size",[159,17715,1486],{"class":165},[159,17717,17718],{"class":192},"20px;\n",[159,17720,17721,17724,17726],{"class":161,"line":1230},[159,17722,17723],{"class":169},"  font-weight",[159,17725,1486],{"class":165},[159,17727,17728],{"class":192},"400;\n",[159,17730,17731],{"class":161,"line":1247},[159,17732,15685],{"class":165},[159,17734,17735],{"class":161,"line":1265},[159,17736,17737],{"class":192},"td,th {\n",[159,17739,17740,17743],{"class":161,"line":1277},[159,17741,17742],{"class":192},"  border:1px solid",[159,17744,17745],{"class":1135}," #b8daff;\n",[159,17747,17748],{"class":161,"line":1283},[159,17749,15685],{"class":165},[159,17751,17752],{"class":161,"line":1294},[159,17753,17754],{"class":192},"td {\n",[159,17756,17757],{"class":161,"line":1305},[159,17758,17759],{"class":192},"  padding:10px;\n",[159,17761,17762],{"class":161,"line":1311},[159,17763,17764],{"class":192},"  color:#666;\n",[159,17766,17767,17769,17771],{"class":161,"line":1322},[159,17768,17612],{"class":169},[159,17770,1486],{"class":165},[159,17772,17617],{"class":192},[159,17774,17775,17777,17779],{"class":161,"line":1327},[159,17776,17713],{"class":169},[159,17778,1486],{"class":165},[159,17780,17781],{"class":192},"16px;\n",[159,17783,17784],{"class":161,"line":1336},[159,17785,15685],{"class":165},[159,17787,17788],{"class":161,"line":1345},[159,17789,17790],{"class":192},"tbody tr {\n",[159,17792,17793,17795,17797],{"class":161,"line":1350},[159,17794,17698],{"class":169},[159,17796,1486],{"class":165},[159,17798,17799],{"class":1135},"#fff;\n",[159,17801,17802],{"class":161,"line":1764},[159,17803,15685],{"class":165},[159,17805,17806],{"class":161,"line":1769},[159,17807,17808],{"class":192},"tbody tr:hover {\n",[159,17810,17811,17813,17815],{"class":161,"line":1777},[159,17812,17698],{"class":169},[159,17814,1486],{"class":165},[159,17816,17817],{"class":1135},"#e1ecf8;\n",[159,17819,17820],{"class":161,"line":1788},[159,17821,15685],{"class":165},[159,17823,17824],{"class":161,"line":1802},[159,17825,17826],{"class":192},".info {\n",[159,17828,17829,17831,17833],{"class":161,"line":1815},[159,17830,17655],{"class":169},[159,17832,1486],{"class":165},[159,17834,17835],{"class":192},"900px;\n",[159,17837,17838,17840,17842],{"class":161,"line":1828},[159,17839,17556],{"class":169},[159,17841,1486],{"class":165},[159,17843,17844],{"class":192},"50px auto;\n",[159,17846,17847,17849,17851],{"class":161,"line":1841},[159,17848,17612],{"class":169},[159,17850,1486],{"class":165},[159,17852,17617],{"class":192},[159,17854,17855],{"class":161,"line":1852},[159,17856,15685],{"class":165},[159,17858,17859],{"class":161,"line":1866},[159,17860,17861],{"class":192},".info  input, .info select {\n",[159,17863,17864,17866,17868],{"class":161,"line":1879},[159,17865,17655],{"class":169},[159,17867,1486],{"class":165},[159,17869,17870],{"class":192},"80px;\n",[159,17872,17873,17876,17878],{"class":161,"line":1884},[159,17874,17875],{"class":169},"  height",[159,17877,1486],{"class":165},[159,17879,17880],{"class":192},"27px;\n",[159,17882,17883,17886,17888],{"class":161,"line":1889},[159,17884,17885],{"class":169},"  outline",[159,17887,1486],{"class":165},[159,17889,17593],{"class":192},[159,17891,17892,17895,17897],{"class":161,"line":1899},[159,17893,17894],{"class":169},"  border-radius",[159,17896,1486],{"class":165},[159,17898,17899],{"class":192},"5px;\n",[159,17901,17902,17904],{"class":161,"line":1912},[159,17903,17742],{"class":192},[159,17905,17745],{"class":1135},[159,17907,17908,17911,17913],{"class":161,"line":1925},[159,17909,17910],{"class":169},"  padding-left",[159,17912,1486],{"class":165},[159,17914,17899],{"class":192},[159,17916,17917,17920,17922],{"class":161,"line":1956},[159,17918,17919],{"class":169},"  box-sizing",[159,17921,1486],{"class":165},[159,17923,17924],{"class":192},"border-box;\n",[159,17926,17927,17930,17932],{"class":161,"line":1971},[159,17928,17929],{"class":169},"  margin-right",[159,17931,1486],{"class":165},[159,17933,17934],{"class":192},"15px;\n",[159,17936,17937],{"class":161,"line":1976},[159,17938,15685],{"class":165},[159,17940,17941],{"class":161,"line":1981},[159,17942,17943],{"class":192},".info button {\n",[159,17945,17946,17948,17950],{"class":161,"line":1989},[159,17947,17655],{"class":169},[159,17949,1486],{"class":165},[159,17951,17952],{"class":192},"60px;\n",[159,17954,17955,17957,17959],{"class":161,"line":2001},[159,17956,17875],{"class":169},[159,17958,1486],{"class":165},[159,17960,17880],{"class":192},[159,17962,17963,17966,17968],{"class":161,"line":2006},[159,17964,17965],{"class":169},"  background-color",[159,17967,1486],{"class":165},[159,17969,17970],{"class":1135},"#004085;\n",[159,17972,17973,17975,17977],{"class":161,"line":2015},[159,17974,17885],{"class":169},[159,17976,1486],{"class":165},[159,17978,17593],{"class":192},[159,17980,17981,17984,17986],{"class":161,"line":2024},[159,17982,17983],{"class":169},"  border",[159,17985,1486],{"class":165},[159,17987,17561],{"class":192},[159,17989,17990,17993,17995],{"class":161,"line":2029},[159,17991,17992],{"class":169},"  color",[159,17994,1486],{"class":165},[159,17996,17799],{"class":1135},[159,17998,17999,18002,18004],{"class":161,"line":2038},[159,18000,18001],{"class":169},"  cursor",[159,18003,1486],{"class":165},[159,18005,18006],{"class":192},"pointer;\n",[159,18008,18009,18011,18013],{"class":161,"line":2053},[159,18010,17894],{"class":169},[159,18012,1486],{"class":165},[159,18014,17899],{"class":192},[159,18016,18017],{"class":161,"line":2070},[159,18018,15685],{"class":165},[159,18020,18021],{"class":161,"line":2095},[159,18022,18023],{"class":192},".info .age {\n",[159,18025,18026,18028,18030],{"class":161,"line":2104},[159,18027,17655],{"class":169},[159,18029,1486],{"class":165},[159,18031,18032],{"class":192},"50px;\n",[159,18034,18035],{"class":161,"line":2120},[159,18036,15685],{"class":165},[14,18038,18039],{},"思路：",[14,18041,18042],{},[23,18043],{"alt":25,"src":18044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,18046,18047],{},[23,18048],{"alt":25,"src":18049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,18051,18052],{},[23,18053],{"alt":25,"src":18054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[42,18056,18058],{"id":18057},"_3315-重绘回流","3.3.15 重绘回流",[14,18060,18061],{},[23,18062],{"alt":25,"src":18063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,18065,18066],{},[23,18067],{"alt":25,"src":18068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,18070,18071],{},[23,18072],{"alt":25,"src":18073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[37,18075,18077],{"id":18076},"_34-bom","3.4 BOM",[14,18079,18080],{},[23,18081],{"alt":25,"src":18082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,18084,18085],{},"平时写的document省略了window而已，实际上是window.document",[14,18087,18088],{},"函数也是这样，调用的时候实际为window.fn()",[14,18090,18091],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,18093,18094],{},"window大部分情况下可以省略",[42,18096,18098],{"id":18097},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,18100,18101],{},"只执行一次",[14,18103,18104],{},[23,18105],{"alt":25,"src":18106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,18108,18109],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,18111,18112],{},[23,18113],{"alt":25,"src":18114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[42,18116,18118],{"id":18117},"_342-js执行机制","3.4.2 JS执行机制",[14,18120,18121],{},[23,18122],{"alt":25,"src":18123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,18125,18126],{},"两个的结果都是1111 3333 2222",[14,18128,18129],{},[23,18130],{"alt":25,"src":18131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,18133,18134],{},[23,18135],{"alt":25,"src":18136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,18138,18139],{},[23,18140],{"alt":25,"src":18141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,18143,18144],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,18146,18147],{},"工作流程：",[14,18149,18150],{},[23,18151],{"alt":25,"src":18152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,18154,18155],{},[23,18156],{"alt":25,"src":18157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,18159,18160],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,18162,18163],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[42,18165,18167],{"id":18166},"_343-location对象","3.4.3 location对象",[14,18169,18170],{},"location对象属于window这个全局对象下的，可以 省略window",[14,18172,18173],{},[23,18174],{"alt":25,"src":18175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,18177,18178],{},"href可以跳转页面",[134,18180,18181],{},[106,18182,18183],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,18185,18186],{},"search得到提交信息之后网站后边的地址",[14,18188,18189],{},[23,18190],{"alt":25,"src":18191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,18193,18194],{},[23,18195],{"alt":25,"src":18196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[134,18198,18199],{"start":176},[106,18200,18201],{},"hash:这个获取单页面应用#后边的地址",[14,18203,18204],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,18206,18207],{},[23,18208],{"alt":25,"src":18209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[151,18211,18213],{"className":153,"code":18212,"language":155,"meta":25,"style":25},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[49,18214,18215,18235,18255],{"__ignoreMap":25},[159,18216,18217,18219,18221,18223,18225,18228,18231,18233],{"class":161,"line":162},[159,18218,179],{"class":165},[159,18220,8085],{"class":169},[159,18222,8088],{"class":185},[159,18224,189],{"class":165},[159,18226,18227],{"class":192},"\"#\u002Fmy\"",[159,18229,18230],{"class":165},">我的\u003C\u002F",[159,18232,8085],{"class":169},[159,18234,173],{"class":165},[159,18236,18237,18239,18241,18243,18245,18248,18251,18253],{"class":161,"line":176},[159,18238,179],{"class":165},[159,18240,8085],{"class":169},[159,18242,8088],{"class":185},[159,18244,189],{"class":165},[159,18246,18247],{"class":192},"\"#\u002Ffriend\"",[159,18249,18250],{"class":165},">关注\u003C\u002F",[159,18252,8085],{"class":169},[159,18254,173],{"class":165},[159,18256,18257,18259,18261,18263,18265,18268,18271,18273],{"class":161,"line":203},[159,18258,179],{"class":165},[159,18260,8085],{"class":169},[159,18262,8088],{"class":185},[159,18264,189],{"class":165},[159,18266,18267],{"class":192},"\"#\u002Fdownload\"",[159,18269,18270],{"class":165},">下载\u003C\u002F",[159,18272,8085],{"class":169},[159,18274,173],{"class":165},[14,18276,18277],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[134,18279,18280],{"start":203},[106,18281,18282,18283,18285,18286,18288],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[429,18284],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[429,18287],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[42,18290,18292],{"id":18291},"_345-navigator对象","3.4.5 navigator对象",[14,18294,18295],{},[23,18296],{"alt":25,"src":18297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[151,18299,18303],{"className":18300,"code":18301,"language":18302,"meta":25,"style":25},"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",[49,18304,18305,18310,18322,18335,18340,18395,18436,18441,18455,18467,18472],{"__ignoreMap":25},[159,18306,18307],{"class":161,"line":162},[159,18308,18309],{"class":1135},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[159,18311,18312,18315,18317,18319],{"class":161,"line":176},[159,18313,18314],{"class":1142},"!",[159,18316,1159],{"class":165},[159,18318,1215],{"class":1142},[159,18320,18321],{"class":165}," () { \n",[159,18323,18324,18327,18330,18332],{"class":161,"line":203},[159,18325,18326],{"class":1142},"const",[159,18328,18329],{"class":1146}," userAgent",[159,18331,1150],{"class":1142},[159,18333,18334],{"class":165}," navigator.userAgent \n",[159,18336,18337],{"class":161,"line":223},[159,18338,18339],{"class":1135},"\u002F\u002F 验证是否为Android或iPhone \n",[159,18341,18342,18344,18347,18349,18352,18355,18357,18359,18363,18366,18369,18373,18376,18378,18380,18383,18385,18388,18390,18392],{"class":161,"line":233},[159,18343,18326],{"class":1142},[159,18345,18346],{"class":1146}," android",[159,18348,1150],{"class":1142},[159,18350,18351],{"class":165}," userAgent.",[159,18353,18354],{"class":185},"match",[159,18356,1159],{"class":165},[159,18358,13083],{"class":192},[159,18360,18362],{"class":18361},"sA_wV","(Android);",[159,18364,18365],{"class":1142},"?",[159,18367,18368],{"class":1146},"[\\s",[159,18370,18372],{"class":18371},"snhLl","\\\u002F",[159,18374,18375],{"class":1146},"]",[159,18377,2704],{"class":1142},[159,18379,1159],{"class":18361},[159,18381,18382],{"class":1146},"[\\d.]",[159,18384,2704],{"class":1142},[159,18386,18387],{"class":18361},")",[159,18389,18365],{"class":1142},[159,18391,13083],{"class":192},[159,18393,18394],{"class":165},") \n",[159,18396,18397,18399,18402,18404,18406,18408,18410,18412,18415,18418,18421,18423,18425,18428,18430,18432,18434],{"class":161,"line":239},[159,18398,18326],{"class":1142},[159,18400,18401],{"class":1146}," iphone",[159,18403,1150],{"class":1142},[159,18405,18351],{"class":165},[159,18407,18354],{"class":185},[159,18409,1159],{"class":165},[159,18411,13083],{"class":192},[159,18413,18414],{"class":18361},"(iPhone",[159,18416,18417],{"class":1146},"\\s",[159,18419,18420],{"class":18361},"OS)",[159,18422,18417],{"class":1146},[159,18424,1159],{"class":18361},[159,18426,18427],{"class":1146},"[\\d_]",[159,18429,2704],{"class":1142},[159,18431,18387],{"class":18361},[159,18433,13083],{"class":192},[159,18435,18394],{"class":165},[159,18437,18438],{"class":161,"line":245},[159,18439,18440],{"class":1135},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[159,18442,18443,18446,18449,18452],{"class":161,"line":251},[159,18444,18445],{"class":1142},"if",[159,18447,18448],{"class":165}," (android ",[159,18450,18451],{"class":1142},"||",[159,18453,18454],{"class":165}," iphone) { \n",[159,18456,18457,18460,18462,18465],{"class":161,"line":261},[159,18458,18459],{"class":165},"location.href ",[159,18461,189],{"class":1142},[159,18463,18464],{"class":192}," 'http:\u002F\u002Fm.itcast.cn'",[159,18466,17636],{"class":165},[159,18468,18469],{"class":161,"line":603},[159,18470,18471],{"class":165},"} \n",[159,18473,18474],{"class":161,"line":621},[159,18475,18476],{"class":165},"})()\n",[42,18478,18480],{"id":18479},"_346-histroy对象","3.4.6 histroy对象",[14,18482,18483],{},[23,18484],{"alt":25,"src":18485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,18487,18488],{},"浏览器地址的前进与后退!!!",[14,18490,18491],{},"history.back() 等效于 history.go(-1)",[14,18493,18494],{},"history.forward() 等效于 history.go(1)",[37,18496,18498],{"id":18497},"_35-本地存储","3.5 本地存储",[134,18500,18501,18504,18507],{},[106,18502,18503],{},"数据存储在用户浏览器中",[106,18505,18506],{},"设置、读取方便、甚至页面刷新不丢失数据",[106,18508,18509],{},"容量较大，sessionStorage和localStorage约 5M 左右",[42,18511,18513],{"id":18512},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,18515,18516],{},"只能存储字符串",[14,18518,18519],{},[23,18520],{"alt":25,"src":18521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,18523,18524],{},[23,18525],{"alt":25,"src":18526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,18528,18529],{},"键值对要加引号,不然就会当变量来看了",[14,18531,18532],{},"localStorage.setItem('uname', 'pink')",[14,18534,18535],{},"刷新之后信息不再丢失",[14,18537,18538],{},"操作key,value会跟着变",[14,18540,18541],{},"删除只删除键就可以,即名字",[14,18543,18532],{},[14,18545,18546],{},"改:",[14,18548,18549],{},"localStorage.setItem('uname','red')",[14,18551,18552],{},"有这个键就是改,没有这个键就是改",[14,18554,18555],{},[23,18556],{"alt":25,"src":18557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,18559,18560],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,18562,18563],{},[23,18564],{"alt":25,"src":18565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,18567,18568],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[42,18570,18572],{"id":18571},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,18574,18575],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,18577,18578],{},"特性:",[134,18580,18581,18584,18587,18590],{},[106,18582,18583],{},"生命周期为关闭浏览器窗口",[106,18585,18586],{},"在同一个窗口(页面)下数据可以共享",[106,18588,18589],{},"以键值对的形式存储使用",[106,18591,18592],{},"用法跟localStorage 基本相同",[42,18594,18596],{"id":18595},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,18598,18599],{},"本地只能存储字符串,无法直接存储复杂数据类型",[151,18601,18603],{"className":153,"code":18602,"language":155,"meta":25,"style":25},"\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",[49,18604,18605,18613,18618,18623,18628,18633,18637,18642,18647],{"__ignoreMap":25},[159,18606,18607,18609,18611],{"class":161,"line":162},[159,18608,166],{"class":165},[159,18610,228],{"class":169},[159,18612,173],{"class":165},[159,18614,18615],{"class":161,"line":176},[159,18616,18617],{"class":165},"    const obj = {\n",[159,18619,18620],{"class":161,"line":203},[159,18621,18622],{"class":165},"      uname: 'pink老师',\n",[159,18624,18625],{"class":161,"line":223},[159,18626,18627],{"class":165},"      age: 18,\n",[159,18629,18630],{"class":161,"line":233},[159,18631,18632],{"class":165},"      gender: '女'\n",[159,18634,18635],{"class":161,"line":239},[159,18636,1508],{"class":165},[159,18638,18639],{"class":161,"line":245},[159,18640,18641],{"class":165},"    \u002F\u002F 存储复杂数据类型\n",[159,18643,18644],{"class":161,"line":251},[159,18645,18646],{"class":165},"    localStorage.setItem('obj', obj)\n",[159,18648,18649,18651,18653],{"class":161,"line":261},[159,18650,254],{"class":165},[159,18652,228],{"class":169},[159,18654,173],{"class":165},[14,18656,18657],{},[23,18658],{"alt":25,"src":18659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,18661,18662],{},"如果获取一下数据:",[14,18664,18665],{},"log(localStorage.getItem('obj'))",[14,18667,18668],{},[23,18669],{"alt":25,"src":18670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,18672,18673],{},"发现直接存对象是使用不了的!!!",[326,18675,18677],{"id":18676},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,18679,18680],{},[23,18681],{"alt":25,"src":18682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[151,18684,18686],{"className":520,"code":18685,"language":522,"meta":25,"style":25},"\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",[49,18687,18688,18696,18706,18716,18726,18734,18738,18742,18768,18788,18796,18800,18805,18810],{"__ignoreMap":25},[159,18689,18690,18692,18694],{"class":161,"line":162},[159,18691,166],{"class":165},[159,18693,228],{"class":169},[159,18695,173],{"class":165},[159,18697,18698,18700,18702,18704],{"class":161,"line":176},[159,18699,1143],{"class":1142},[159,18701,17052],{"class":1146},[159,18703,1150],{"class":1142},[159,18705,1478],{"class":165},[159,18707,18708,18711,18714],{"class":161,"line":203},[159,18709,18710],{"class":165},"      uname: ",[159,18712,18713],{"class":192},"'pink老师'",[159,18715,17070],{"class":165},[159,18717,18718,18721,18724],{"class":161,"line":223},[159,18719,18720],{"class":165},"      age: ",[159,18722,18723],{"class":1146},"18",[159,18725,17070],{"class":165},[159,18727,18728,18731],{"class":161,"line":233},[159,18729,18730],{"class":165},"      gender: ",[159,18732,18733],{"class":192},"'女'\n",[159,18735,18736],{"class":161,"line":239},[159,18737,1508],{"class":165},[159,18739,18740],{"class":161,"line":245},[159,18741,18641],{"class":1135},[159,18743,18744,18747,18750,18752,18755,18757,18760,18762,18765],{"class":161,"line":251},[159,18745,18746],{"class":165},"  localStorage.",[159,18748,18749],{"class":185},"setItem",[159,18751,1159],{"class":165},[159,18753,18754],{"class":192},"'obj'",[159,18756,1939],{"class":165},[159,18758,18759],{"class":1146},"JSON",[159,18761,9952],{"class":165},[159,18763,18764],{"class":185},"stringify",[159,18766,18767],{"class":165},"(obj))\n",[159,18769,18770,18773,18775,18778,18781,18783,18785],{"class":161,"line":261},[159,18771,18772],{"class":165},"  console.",[159,18774,5166],{"class":185},[159,18776,18777],{"class":165},"(localStorage.",[159,18779,18780],{"class":185},"getItem",[159,18782,1159],{"class":165},[159,18784,18754],{"class":192},[159,18786,18787],{"class":165},"))\n",[159,18789,18790,18792,18794],{"class":161,"line":603},[159,18791,254],{"class":165},[159,18793,228],{"class":169},[159,18795,173],{"class":165},[159,18797,18798],{"class":161,"line":621},[159,18799,17708],{"class":165},[159,18801,18802],{"class":161,"line":634},[159,18803,18804],{"class":165},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[159,18806,18807],{"class":161,"line":640},[159,18808,18809],{"class":165},"  类型是字符串的\n",[159,18811,18812],{"class":161,"line":1075},[159,18813,18814],{"class":165},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[326,18816,18818],{"id":18817},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,18820,18821],{},[23,18822],{"alt":25,"src":18823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,18825,18826],{},[23,18827],{"alt":25,"src":18828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[151,18830,18832],{"className":153,"code":18831,"language":155,"meta":25,"style":25},"  \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",[49,18833,18834,18842,18846,18850,18854,18858,18862,18867,18872,18877,18882,18887,18892,18897,18902],{"__ignoreMap":25},[159,18835,18836,18838,18840],{"class":161,"line":162},[159,18837,179],{"class":165},[159,18839,228],{"class":169},[159,18841,173],{"class":165},[159,18843,18844],{"class":161,"line":176},[159,18845,18617],{"class":165},[159,18847,18848],{"class":161,"line":203},[159,18849,18622],{"class":165},[159,18851,18852],{"class":161,"line":223},[159,18853,18627],{"class":165},[159,18855,18856],{"class":161,"line":233},[159,18857,18632],{"class":165},[159,18859,18860],{"class":161,"line":239},[159,18861,1508],{"class":165},[159,18863,18864],{"class":161,"line":245},[159,18865,18866],{"class":165},"    \u002F\u002F 1.存储复杂数据类型\n",[159,18868,18869],{"class":161,"line":251},[159,18870,18871],{"class":165},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[159,18873,18874],{"class":161,"line":261},[159,18875,18876],{"class":165},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[159,18878,18879],{"class":161,"line":603},[159,18880,18881],{"class":165},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[159,18883,18884],{"class":161,"line":621},[159,18885,18886],{"class":165},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[159,18888,18889],{"class":161,"line":634},[159,18890,18891],{"class":165},"    \u002F\u002F 取\n",[159,18893,18894],{"class":161,"line":640},[159,18895,18896],{"class":165},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[159,18898,18899],{"class":161,"line":1075},[159,18900,18901],{"class":165},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[159,18903,18904,18906,18908],{"class":161,"line":1081},[159,18905,254],{"class":165},[159,18907,228],{"class":169},[159,18909,173],{"class":165},[14,18911,18912],{},[23,18913],{"alt":25,"src":18914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[42,18916,18918],{"id":18917},"_356-数组map方法","3.5.6 数组map方法",[14,18920,18921],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,18923,18924],{},[23,18925],{"alt":25,"src":18926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,18928,18929],{},[23,18930],{"alt":25,"src":18931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,18933,18934,18937],{},[61,18935,18936],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,18939,18940],{},"map有返回值，但是forEach没有返回值",[14,18942,18943],{},"map是个方法。用的时候要加 ()",[14,18945,18946],{},"map返回的是一个数组",[42,18948,18950],{"id":18949},"_357-数组中join方法","3.5.7 数组中join方法",[14,18952,18953],{},[23,18954],{"alt":25,"src":18955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,18957,18958],{},"类似于python中拼接字符串一样！",[134,18960,18961,18964,18967],{},[106,18962,18963],{},"小括号为空则逗号分开",[106,18965,18966],{},"小括号为空字符串 ''，则元素之间没有分隔符",[106,18968,18969],{},"小括号用啥符号就用进行分割",[42,18971,18973],{"id":18972},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[134,18975,18976,18979,18982,18985,18988],{},[106,18977,18978],{},"记住本地时间获取快速方式：new Date().toDateString()",[106,18980,18981],{},"尽量减少DOM操作，用好map+join的渲染方式",[106,18983,18984],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[106,18986,18987],{},"return可以实现函数的结束",[106,18989,18990],{},"禁止跳转是 preventDefault() 不要忘记",[151,18992,18994],{"className":520,"code":18993,"language":522,"meta":25,"style":25},"\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",[49,18995,18996,19006,19020,19024,19032,19046,19066,19078,19086,19092,19102,19112,19116,19120,19126,19136,19148,19152,19156,19163,19176,19190,19200,19204,19208,19215,19222,19229,19241,19253,19263,19275,19279,19283,19290,19297,19309,19321,19331,19343,19373,19377,19381,19388,19400,19413,19439,19449,19459,19463,19467,19476,19487,19499,19511,19523,19540,19552,19564,19568,19572,19579,19591,19603,19615,19626,19644,19657,19670,19694,19705,19709,19713,19721,19731,19735,19739,19745,19757,19768,19778,19782,19786,19792,19814,19818,19822,19828,19834,19846,19857,19869,19899,19912,19929,19933,19937,19948,19970,19980,19984,19988,20001,20011,20023,20035,20047,20059,20069,20079,20089,20100,20113,20117,20125,20133,20137,20145,20158,20178,20211,20244,20277,20303,20321,20339,20347,20373,20391,20409,20427,20445,20463,20471,20479,20497,20505,20534,20542,20550,20558,20571,20583,20595,20607,20619,20631,20644,20656,20664,20672,20680,20685,20690,20694,20698,20702,20706,20710,20714,20719,20724,20729,20734,20742,20750,20758,20763,20768,20773,20778,20783,20788,20793,20798,20803,20808,20813,20818,20823,20828,20832,20837,20842,20852,20862,20866,20871,20880,20897,20941,20981,21021,21089,21097,21101,21106,21124,21132,21137,21142,21172,21179,21184,21197,21209,21221,21233,21245,21257,21270,21275,21286,21291,21297,21303,21308,21318,21323,21329,21335,21355,21361,21382,21387,21393,21398,21404,21423,21442,21461,21480,21499,21518,21523,21529,21550,21556,21565,21571,21577,21583,21610,21623,21628,21638,21644,21650,21656,21662,21667,21673,21679,21685,21691,21725,21730,21735,21740,21745,21751,21757,21763,21774,21779,21785,21792,21806,21812,21836,21841,21846,21852,21858,21879,21885,21898,21904,21910,21916,21922,21927,21933,21939,21945,21963,21977,21983,21991,21997,22019,22024,22029,22034,22039,22044,22053,22062,22067],{"__ignoreMap":25},[159,18997,18998,19000,19002,19004],{"class":161,"line":162},[159,18999,914],{"class":165},[159,19001,917],{"class":169},[159,19003,920],{"class":185},[159,19005,173],{"class":165},[159,19007,19008,19010,19012,19014,19016,19018],{"class":161,"line":176},[159,19009,166],{"class":165},[159,19011,522],{"class":169},[159,19013,931],{"class":185},[159,19015,189],{"class":165},[159,19017,936],{"class":192},[159,19019,173],{"class":165},[159,19021,19022],{"class":161,"line":203},[159,19023,590],{"emptyLinePlaceholder":589},[159,19025,19026,19028,19030],{"class":161,"line":223},[159,19027,166],{"class":165},[159,19029,949],{"class":169},[159,19031,173],{"class":165},[159,19033,19034,19036,19038,19040,19042,19044],{"class":161,"line":233},[159,19035,179],{"class":165},[159,19037,958],{"class":169},[159,19039,961],{"class":185},[159,19041,189],{"class":165},[159,19043,966],{"class":192},[159,19045,173],{"class":165},[159,19047,19048,19050,19052,19054,19056,19058,19060,19062,19064],{"class":161,"line":239},[159,19049,179],{"class":165},[159,19051,958],{"class":169},[159,19053,547],{"class":185},[159,19055,189],{"class":165},[159,19057,981],{"class":192},[159,19059,984],{"class":185},[159,19061,189],{"class":165},[159,19063,989],{"class":192},[159,19065,173],{"class":165},[159,19067,19068,19070,19072,19074,19076],{"class":161,"line":245},[159,19069,179],{"class":165},[159,19071,998],{"class":169},[159,19073,1001],{"class":165},[159,19075,998],{"class":169},[159,19077,173],{"class":165},[159,19079,19080,19082,19084],{"class":161,"line":251},[159,19081,179],{"class":165},[159,19083,1468],{"class":169},[159,19085,173],{"class":165},[159,19087,19088,19090],{"class":161,"line":261},[159,19089,1475],{"class":169},[159,19091,1478],{"class":165},[159,19093,19094,19096,19098,19100],{"class":161,"line":603},[159,19095,1483],{"class":1146},[159,19097,1486],{"class":165},[159,19099,1489],{"class":1146},[159,19101,1492],{"class":165},[159,19103,19104,19106,19108,19110],{"class":161,"line":621},[159,19105,1497],{"class":1146},[159,19107,1486],{"class":165},[159,19109,1489],{"class":1146},[159,19111,1492],{"class":165},[159,19113,19114],{"class":161,"line":634},[159,19115,1508],{"class":165},[159,19117,19118],{"class":161,"line":640},[159,19119,590],{"emptyLinePlaceholder":589},[159,19121,19122,19124],{"class":161,"line":1075},[159,19123,4181],{"class":169},[159,19125,1478],{"class":165},[159,19127,19128,19130,19132,19134],{"class":161,"line":1081},[159,19129,4188],{"class":1146},[159,19131,1486],{"class":165},[159,19133,4193],{"class":1146},[159,19135,1492],{"class":165},[159,19137,19138,19140,19142,19144,19146],{"class":161,"line":1091},[159,19139,9120],{"class":1146},[159,19141,1486],{"class":165},[159,19143,1739],{"class":1146},[159,19145,1571],{"class":1142},[159,19147,1492],{"class":165},[159,19149,19150],{"class":161,"line":1100},[159,19151,1508],{"class":165},[159,19153,19154],{"class":161,"line":1123},[159,19155,590],{"emptyLinePlaceholder":589},[159,19157,19158,19161],{"class":161,"line":1132},[159,19159,19160],{"class":185},"    .info",[159,19162,1478],{"class":165},[159,19164,19165,19167,19169,19172,19174],{"class":161,"line":1139},[159,19166,1563],{"class":1146},[159,19168,1486],{"class":165},[159,19170,19171],{"class":1146},"700",[159,19173,1571],{"class":1142},[159,19175,1492],{"class":165},[159,19177,19178,19180,19182,19184,19186,19188],{"class":161,"line":1168},[159,19179,1497],{"class":1146},[159,19181,1486],{"class":165},[159,19183,1964],{"class":1146},[159,19185,1571],{"class":1142},[159,19187,1601],{"class":1146},[159,19189,1492],{"class":165},[159,19191,19192,19194,19196,19198],{"class":161,"line":1174},[159,19193,4188],{"class":1146},[159,19195,1486],{"class":165},[159,19197,4193],{"class":1146},[159,19199,1492],{"class":165},[159,19201,19202],{"class":161,"line":1180},[159,19203,1508],{"class":165},[159,19205,19206],{"class":161,"line":1194},[159,19207,590],{"emptyLinePlaceholder":589},[159,19209,19210,19213],{"class":161,"line":1200},[159,19211,19212],{"class":185},"    .uname",[159,19214,17070],{"class":165},[159,19216,19217,19220],{"class":161,"line":1221},[159,19218,19219],{"class":185},"    .age",[159,19221,17070],{"class":165},[159,19223,19224,19227],{"class":161,"line":1230},[159,19225,19226],{"class":185},"    .salary",[159,19228,1478],{"class":165},[159,19230,19231,19233,19235,19237,19239],{"class":161,"line":1247},[159,19232,1563],{"class":1146},[159,19234,1486],{"class":165},[159,19236,1596],{"class":1146},[159,19238,1571],{"class":1142},[159,19240,1492],{"class":165},[159,19242,19243,19245,19247,19249,19251],{"class":161,"line":1265},[159,19244,1578],{"class":1146},[159,19246,1486],{"class":165},[159,19248,1739],{"class":1146},[159,19250,1571],{"class":1142},[159,19252,1492],{"class":165},[159,19254,19255,19257,19259,19261],{"class":161,"line":1277},[159,19256,8817],{"class":1146},[159,19258,1486],{"class":165},[159,19260,1529],{"class":1146},[159,19262,1492],{"class":165},[159,19264,19265,19267,19269,19271,19273],{"class":161,"line":1283},[159,19266,8787],{"class":1146},[159,19268,1486],{"class":165},[159,19270,1673],{"class":1146},[159,19272,1571],{"class":1142},[159,19274,1492],{"class":165},[159,19276,19277],{"class":161,"line":1294},[159,19278,1508],{"class":165},[159,19280,19281],{"class":161,"line":1305},[159,19282,590],{"emptyLinePlaceholder":589},[159,19284,19285,19288],{"class":161,"line":1311},[159,19286,19287],{"class":185},"    .gender",[159,19289,17070],{"class":165},[159,19291,19292,19295],{"class":161,"line":1322},[159,19293,19294],{"class":185},"    .city",[159,19296,1478],{"class":165},[159,19298,19299,19301,19303,19305,19307],{"class":161,"line":1327},[159,19300,1563],{"class":1146},[159,19302,1486],{"class":165},[159,19304,1596],{"class":1146},[159,19306,1571],{"class":1142},[159,19308,1492],{"class":165},[159,19310,19311,19313,19315,19317,19319],{"class":161,"line":1336},[159,19312,1578],{"class":1146},[159,19314,1486],{"class":165},[159,19316,4255],{"class":1146},[159,19318,1571],{"class":1142},[159,19320,1492],{"class":165},[159,19322,19323,19325,19327,19329],{"class":161,"line":1345},[159,19324,8817],{"class":1146},[159,19326,1486],{"class":165},[159,19328,1529],{"class":1146},[159,19330,1492],{"class":165},[159,19332,19333,19335,19337,19339,19341],{"class":161,"line":1350},[159,19334,8787],{"class":1146},[159,19336,1486],{"class":165},[159,19338,1673],{"class":1146},[159,19340,1571],{"class":1142},[159,19342,1492],{"class":165},[159,19344,19345,19347,19349,19351,19353,19355,19358,19360,19362,19364,19367,19369,19371],{"class":161,"line":1764},[159,19346,9018],{"class":1146},[159,19348,1486],{"class":165},[159,19350,4932],{"class":1146},[159,19352,1571],{"class":1142},[159,19354,7709],{"class":1146},[159,19356,19357],{"class":1146}," rgb",[159,19359,1159],{"class":165},[159,19361,13303],{"class":1146},[159,19363,1939],{"class":165},[159,19365,19366],{"class":1146},"197",[159,19368,1939],{"class":165},[159,19370,19366],{"class":1146},[159,19372,1953],{"class":165},[159,19374,19375],{"class":161,"line":1769},[159,19376,1508],{"class":165},[159,19378,19379],{"class":161,"line":1777},[159,19380,590],{"emptyLinePlaceholder":589},[159,19382,19383,19386],{"class":161,"line":1788},[159,19384,19385],{"class":169},"    button",[159,19387,1478],{"class":165},[159,19389,19390,19392,19394,19396,19398],{"class":161,"line":1802},[159,19391,1578],{"class":1146},[159,19393,1486],{"class":165},[159,19395,4255],{"class":1146},[159,19397,1571],{"class":1142},[159,19399,1492],{"class":165},[159,19401,19402,19404,19406,19409,19411],{"class":161,"line":1815},[159,19403,1563],{"class":1146},[159,19405,1486],{"class":165},[159,19407,19408],{"class":1146},"75",[159,19410,1571],{"class":1142},[159,19412,1492],{"class":165},[159,19414,19415,19417,19419,19422,19424,19427,19429,19432,19434,19437],{"class":161,"line":1828},[159,19416,1682],{"class":1146},[159,19418,1486],{"class":165},[159,19420,19421],{"class":1146},"rgb",[159,19423,1159],{"class":165},[159,19425,19426],{"class":1146},"126",[159,19428,1939],{"class":165},[159,19430,19431],{"class":1146},"187",[159,19433,1939],{"class":165},[159,19435,19436],{"class":1146},"36",[159,19438,1953],{"class":165},[159,19440,19441,19443,19445,19447],{"class":161,"line":1841},[159,19442,4322],{"class":1146},[159,19444,1486],{"class":165},[159,19446,7868],{"class":1146},[159,19448,1492],{"class":165},[159,19450,19451,19453,19455,19457],{"class":161,"line":1852},[159,19452,9018],{"class":1146},[159,19454,1486],{"class":165},[159,19456,1489],{"class":1146},[159,19458,1492],{"class":165},[159,19460,19461],{"class":161,"line":1866},[159,19462,1508],{"class":165},[159,19464,19465],{"class":161,"line":1879},[159,19466,590],{"emptyLinePlaceholder":589},[159,19468,19469,19471,19474],{"class":161,"line":1884},[159,19470,19385],{"class":169},[159,19472,19473],{"class":169}," span",[159,19475,1478],{"class":165},[159,19477,19478,19480,19482,19485],{"class":161,"line":1889},[159,19479,1818],{"class":1146},[159,19481,1486],{"class":165},[159,19483,19484],{"class":1146},"inline-block",[159,19486,1492],{"class":165},[159,19488,19489,19491,19493,19495,19497],{"class":161,"line":1899},[159,19490,1563],{"class":1146},[159,19492,1486],{"class":165},[159,19494,1964],{"class":1146},[159,19496,1571],{"class":1142},[159,19498,1492],{"class":165},[159,19500,19501,19503,19505,19507,19509],{"class":161,"line":1912},[159,19502,1578],{"class":1146},[159,19504,1486],{"class":165},[159,19506,1964],{"class":1146},[159,19508,1571],{"class":1142},[159,19510,1492],{"class":165},[159,19512,19513,19515,19517,19519,19521],{"class":161,"line":1925},[159,19514,4264],{"class":1146},[159,19516,1486],{"class":165},[159,19518,5850],{"class":1146},[159,19520,1571],{"class":1142},[159,19522,1492],{"class":165},[159,19524,19525,19527,19529,19531,19533,19535,19538],{"class":161,"line":1956},[159,19526,9018],{"class":1146},[159,19528,1486],{"class":165},[159,19530,4932],{"class":1146},[159,19532,1571],{"class":1142},[159,19534,7709],{"class":1146},[159,19536,19537],{"class":1146}," #fff",[159,19539,1492],{"class":165},[159,19541,19542,19544,19546,19548,19550],{"class":161,"line":1971},[159,19543,1959],{"class":1146},[159,19545,1486],{"class":165},[159,19547,1753],{"class":1146},[159,19549,1571],{"class":1142},[159,19551,1492],{"class":165},[159,19553,19554,19556,19558,19560,19562],{"class":161,"line":1976},[159,19555,8787],{"class":1146},[159,19557,1486],{"class":165},[159,19559,4932],{"class":1146},[159,19561,1571],{"class":1142},[159,19563,1492],{"class":165},[159,19565,19566],{"class":161,"line":1981},[159,19567,1508],{"class":165},[159,19569,19570],{"class":161,"line":1989},[159,19571,590],{"emptyLinePlaceholder":589},[159,19573,19574,19577],{"class":161,"line":2001},[159,19575,19576],{"class":185},"    .total",[159,19578,1478],{"class":165},[159,19580,19581,19583,19585,19587,19589],{"class":161,"line":2006},[159,19582,1563],{"class":1146},[159,19584,1486],{"class":165},[159,19586,8662],{"class":1146},[159,19588,1571],{"class":1142},[159,19590,1492],{"class":165},[159,19592,19593,19595,19597,19599,19601],{"class":161,"line":2015},[159,19594,1578],{"class":1146},[159,19596,1486],{"class":165},[159,19598,4269],{"class":1146},[159,19600,1571],{"class":1142},[159,19602,1492],{"class":165},[159,19604,19605,19607,19609,19611,19613],{"class":161,"line":2024},[159,19606,4264],{"class":1146},[159,19608,1486],{"class":165},[159,19610,4269],{"class":1146},[159,19612,1571],{"class":1142},[159,19614,1492],{"class":165},[159,19616,19617,19619,19621,19624],{"class":161,"line":2029},[159,19618,4188],{"class":1146},[159,19620,1486],{"class":165},[159,19622,19623],{"class":1146},"right",[159,19625,1492],{"class":165},[159,19627,19628,19630,19632,19634,19636,19638,19640,19642],{"class":161,"line":2038},[159,19629,1497],{"class":1146},[159,19631,1486],{"class":165},[159,19633,4269],{"class":1146},[159,19635,1571],{"class":1142},[159,19637,1601],{"class":1146},[159,19639,7664],{"class":1146},[159,19641,1571],{"class":1142},[159,19643,1492],{"class":165},[159,19645,19646,19649,19651,19653,19655],{"class":161,"line":2053},[159,19647,19648],{"class":1146},"      padding-right",[159,19650,1486],{"class":165},[159,19652,1964],{"class":1146},[159,19654,1571],{"class":1142},[159,19656,1492],{"class":165},[159,19658,19659,19661,19663,19666,19668],{"class":161,"line":2070},[159,19660,1721],{"class":1146},[159,19662,1486],{"class":165},[159,19664,19665],{"class":1146},"13",[159,19667,1571],{"class":1142},[159,19669,1492],{"class":165},[159,19671,19672,19674,19676,19678,19680,19683,19685,19688,19690,19692],{"class":161,"line":2095},[159,19673,1682],{"class":1146},[159,19675,1486],{"class":165},[159,19677,19421],{"class":1146},[159,19679,1159],{"class":165},[159,19681,19682],{"class":1146},"237",[159,19684,1939],{"class":165},[159,19686,19687],{"class":1146},"235",[159,19689,1939],{"class":165},[159,19691,19687],{"class":1146},[159,19693,1953],{"class":165},[159,19695,19696,19699,19701,19703],{"class":161,"line":2104},[159,19697,19698],{"class":1146},"      box-sizing",[159,19700,1486],{"class":165},[159,19702,7523],{"class":1146},[159,19704,1492],{"class":165},[159,19706,19707],{"class":161,"line":2120},[159,19708,1508],{"class":165},[159,19710,19711],{"class":161,"line":2134},[159,19712,590],{"emptyLinePlaceholder":589},[159,19714,19715,19717,19719],{"class":161,"line":2143},[159,19716,19576],{"class":185},[159,19718,19473],{"class":169},[159,19720,1478],{"class":165},[159,19722,19723,19725,19727,19729],{"class":161,"line":2165},[159,19724,4322],{"class":1146},[159,19726,1486],{"class":165},[159,19728,4327],{"class":1146},[159,19730,1492],{"class":165},[159,19732,19733],{"class":161,"line":2178},[159,19734,1508],{"class":165},[159,19736,19737],{"class":161,"line":2191},[159,19738,590],{"emptyLinePlaceholder":589},[159,19740,19741,19743],{"class":161,"line":2204},[159,19742,12081],{"class":169},[159,19744,1478],{"class":165},[159,19746,19747,19749,19751,19753,19755],{"class":161,"line":2217},[159,19748,1563],{"class":1146},[159,19750,1486],{"class":165},[159,19752,8662],{"class":1146},[159,19754,1571],{"class":1142},[159,19756,1492],{"class":165},[159,19758,19759,19761,19763,19766],{"class":161,"line":2230},[159,19760,1497],{"class":1146},[159,19762,1486],{"class":165},[159,19764,19765],{"class":1146},"auto",[159,19767,1492],{"class":165},[159,19769,19770,19772,19774,19776],{"class":161,"line":2243},[159,19771,12088],{"class":1146},[159,19773,1486],{"class":165},[159,19775,12093],{"class":1146},[159,19777,1492],{"class":165},[159,19779,19780],{"class":161,"line":2256},[159,19781,1508],{"class":165},[159,19783,19784],{"class":161,"line":2266},[159,19785,590],{"emptyLinePlaceholder":589},[159,19787,19788,19790],{"class":161,"line":2275},[159,19789,12173],{"class":169},[159,19791,1478],{"class":165},[159,19793,19794,19796,19798,19800,19802,19804,19806,19808,19810,19812],{"class":161,"line":2284},[159,19795,1682],{"class":1146},[159,19797,1486],{"class":165},[159,19799,19421],{"class":1146},[159,19801,1159],{"class":165},[159,19803,19682],{"class":1146},[159,19805,1939],{"class":165},[159,19807,19687],{"class":1146},[159,19809,1939],{"class":165},[159,19811,19687],{"class":1146},[159,19813,1953],{"class":165},[159,19815,19816],{"class":161,"line":2293},[159,19817,1508],{"class":165},[159,19819,19820],{"class":161,"line":2306},[159,19821,590],{"emptyLinePlaceholder":589},[159,19823,19824,19826],{"class":161,"line":2330},[159,19825,12173],{"class":169},[159,19827,17070],{"class":165},[159,19829,19830,19832],{"class":161,"line":2350},[159,19831,12239],{"class":169},[159,19833,1478],{"class":165},[159,19835,19836,19838,19840,19842,19844],{"class":161,"line":2370},[159,19837,1578],{"class":1146},[159,19839,1486],{"class":165},[159,19841,4397],{"class":1146},[159,19843,1571],{"class":1142},[159,19845,1492],{"class":165},[159,19847,19848,19850,19852,19855],{"class":161,"line":2390},[159,19849,4188],{"class":1146},[159,19851,1486],{"class":165},[159,19853,19854],{"class":1146},"left",[159,19856,1492],{"class":165},[159,19858,19859,19861,19863,19865,19867],{"class":161,"line":2410},[159,19860,1721],{"class":1146},[159,19862,1486],{"class":165},[159,19864,7678],{"class":1146},[159,19866,1571],{"class":1142},[159,19868,1492],{"class":165},[159,19870,19871,19873,19875,19877,19879,19881,19883,19885,19888,19890,19893,19895,19897],{"class":161,"line":2430},[159,19872,9018],{"class":1146},[159,19874,1486],{"class":165},[159,19876,4932],{"class":1146},[159,19878,1571],{"class":1142},[159,19880,7709],{"class":1146},[159,19882,19357],{"class":1146},[159,19884,1159],{"class":165},[159,19886,19887],{"class":1146},"228",[159,19889,1939],{"class":165},[159,19891,19892],{"class":1146},"225",[159,19894,1939],{"class":165},[159,19896,19892],{"class":1146},[159,19898,1953],{"class":165},[159,19900,19901,19904,19906,19908,19910],{"class":161,"line":2450},[159,19902,19903],{"class":1146},"      padding-left",[159,19905,1486],{"class":165},[159,19907,1753],{"class":1146},[159,19909,1571],{"class":1142},[159,19911,1492],{"class":165},[159,19913,19914,19916,19918,19920,19923,19925,19927],{"class":161,"line":2471},[159,19915,8898],{"class":1146},[159,19917,1486],{"class":165},[159,19919,8903],{"class":1146},[159,19921,19922],{"class":1146}," linear",[159,19924,8906],{"class":1146},[159,19926,8909],{"class":1142},[159,19928,1492],{"class":165},[159,19930,19931],{"class":161,"line":2477},[159,19932,1508],{"class":165},[159,19934,19935],{"class":161,"line":2498},[159,19936,590],{"emptyLinePlaceholder":589},[159,19938,19939,19942,19944,19946],{"class":161,"line":2518},[159,19940,19941],{"class":169},"    tbody",[159,19943,17228],{"class":169},[159,19945,7969],{"class":185},[159,19947,1478],{"class":165},[159,19949,19950,19952,19954,19956,19958,19960,19962,19964,19966,19968],{"class":161,"line":2539},[159,19951,1682],{"class":1146},[159,19953,1486],{"class":165},[159,19955,19421],{"class":1146},[159,19957,1159],{"class":165},[159,19959,19682],{"class":1146},[159,19961,1939],{"class":165},[159,19963,19687],{"class":1146},[159,19965,1939],{"class":165},[159,19967,19687],{"class":1146},[159,19969,1953],{"class":165},[159,19971,19972,19974,19976,19978],{"class":161,"line":2561},[159,19973,9067],{"class":1146},[159,19975,1486],{"class":165},[159,19977,9072],{"class":1146},[159,19979,1492],{"class":165},[159,19981,19982],{"class":161,"line":2573},[159,19983,1508],{"class":165},[159,19985,19986],{"class":161,"line":2591},[159,19987,590],{"emptyLinePlaceholder":589},[159,19989,19990,19992,19994,19997,19999],{"class":161,"line":2602},[159,19991,19941],{"class":169},[159,19993,17228],{"class":169},[159,19995,19996],{"class":169}," td",[159,19998,7885],{"class":169},[159,20000,1478],{"class":165},[159,20002,20003,20005,20007,20009],{"class":161,"line":2613},[159,20004,1818],{"class":1146},[159,20006,1486],{"class":165},[159,20008,7896],{"class":1146},[159,20010,1492],{"class":165},[159,20012,20013,20015,20017,20019,20021],{"class":161,"line":2624},[159,20014,1563],{"class":1146},[159,20016,1486],{"class":165},[159,20018,10814],{"class":1146},[159,20020,1571],{"class":1142},[159,20022,1492],{"class":165},[159,20024,20025,20027,20029,20031,20033],{"class":161,"line":2630},[159,20026,1578],{"class":1146},[159,20028,1486],{"class":165},[159,20030,4255],{"class":1146},[159,20032,1571],{"class":1142},[159,20034,1492],{"class":165},[159,20036,20037,20039,20041,20043,20045],{"class":161,"line":2636},[159,20038,4264],{"class":1146},[159,20040,1486],{"class":165},[159,20042,4255],{"class":1146},[159,20044,1571],{"class":1142},[159,20046,1492],{"class":165},[159,20048,20049,20051,20053,20055,20057],{"class":161,"line":2642},[159,20050,9120],{"class":1146},[159,20052,1486],{"class":165},[159,20054,11034],{"class":1146},[159,20056,1571],{"class":1142},[159,20058,1492],{"class":165},[159,20060,20061,20063,20065,20067],{"class":161,"line":2648},[159,20062,4322],{"class":1146},[159,20064,1486],{"class":165},[159,20066,7868],{"class":1146},[159,20068,1492],{"class":165},[159,20070,20071,20073,20075,20077],{"class":161,"line":2674},[159,20072,4188],{"class":1146},[159,20074,1486],{"class":165},[159,20076,4193],{"class":1146},[159,20078,1492],{"class":165},[159,20080,20081,20083,20085,20087],{"class":161,"line":2689},[159,20082,11019],{"class":1146},[159,20084,1486],{"class":165},[159,20086,1529],{"class":1146},[159,20088,1492],{"class":165},[159,20090,20091,20093,20095,20098],{"class":161,"line":2694},[159,20092,1682],{"class":1146},[159,20094,1486],{"class":165},[159,20096,20097],{"class":1146},"orange",[159,20099,1492],{"class":165},[159,20101,20102,20104,20106,20109,20111],{"class":161,"line":2721},[159,20103,1959],{"class":1146},[159,20105,1486],{"class":165},[159,20107,20108],{"class":1146},"12.5",[159,20110,1571],{"class":1142},[159,20112,1492],{"class":165},[159,20114,20115],{"class":161,"line":2726},[159,20116,1508],{"class":165},[159,20118,20119,20121,20123],{"class":161,"line":2735},[159,20120,254],{"class":165},[159,20122,1468],{"class":169},[159,20124,173],{"class":165},[159,20126,20127,20129,20131],{"class":161,"line":2744},[159,20128,264],{"class":165},[159,20130,949],{"class":169},[159,20132,173],{"class":165},[159,20134,20135],{"class":161,"line":2753},[159,20136,590],{"emptyLinePlaceholder":589},[159,20138,20139,20141,20143],{"class":161,"line":2758},[159,20140,166],{"class":165},[159,20142,170],{"class":169},[159,20144,173],{"class":165},[159,20146,20147,20149,20151,20154,20156],{"class":161,"line":3959},[159,20148,179],{"class":165},[159,20150,37],{"class":169},[159,20152,20153],{"class":165},">学生就业统计表\u003C\u002F",[159,20155,37],{"class":169},[159,20157,173],{"class":165},[159,20159,20160,20162,20164,20166,20168,20170,20172,20174,20176],{"class":161,"line":3968},[159,20161,179],{"class":165},[159,20163,13694],{"class":169},[159,20165,186],{"class":185},[159,20167,189],{"class":165},[159,20169,9707],{"class":192},[159,20171,16143],{"class":185},[159,20173,189],{"class":165},[159,20175,16148],{"class":192},[159,20177,173],{"class":165},[159,20179,20180,20182,20184,20186,20188,20190,20192,20194,20196,20198,20200,20203,20205,20207,20209],{"class":161,"line":3977},[159,20181,2056],{"class":165},[159,20183,536],{"class":169},[159,20185,539],{"class":185},[159,20187,189],{"class":165},[159,20189,9742],{"class":192},[159,20191,547],{"class":185},[159,20193,189],{"class":165},[159,20195,16170],{"class":192},[159,20197,8050],{"class":185},[159,20199,189],{"class":165},[159,20201,20202],{"class":192},"\"姓名\"",[159,20204,186],{"class":185},[159,20206,189],{"class":165},[159,20208,16170],{"class":192},[159,20210,173],{"class":165},[159,20212,20213,20215,20217,20219,20221,20223,20225,20227,20229,20231,20233,20236,20238,20240,20242],{"class":161,"line":3982},[159,20214,2056],{"class":165},[159,20216,536],{"class":169},[159,20218,539],{"class":185},[159,20220,189],{"class":165},[159,20222,9742],{"class":192},[159,20224,547],{"class":185},[159,20226,189],{"class":165},[159,20228,16198],{"class":192},[159,20230,8050],{"class":185},[159,20232,189],{"class":165},[159,20234,20235],{"class":192},"\"年龄\"",[159,20237,186],{"class":185},[159,20239,189],{"class":165},[159,20241,16198],{"class":192},[159,20243,173],{"class":165},[159,20245,20246,20248,20250,20252,20254,20256,20258,20260,20262,20264,20266,20269,20271,20273,20275],{"class":161,"line":6843},[159,20247,2056],{"class":165},[159,20249,536],{"class":169},[159,20251,539],{"class":185},[159,20253,189],{"class":165},[159,20255,9742],{"class":192},[159,20257,547],{"class":185},[159,20259,189],{"class":165},[159,20261,16302],{"class":192},[159,20263,8050],{"class":185},[159,20265,189],{"class":165},[159,20267,20268],{"class":192},"\"薪资\"",[159,20270,186],{"class":185},[159,20272,189],{"class":165},[159,20274,16302],{"class":192},[159,20276,173],{"class":165},[159,20278,20279,20281,20283,20285,20287,20289,20291,20293,20295,20297,20299,20301],{"class":161,"line":6849},[159,20280,2056],{"class":165},[159,20282,16218],{"class":169},[159,20284,547],{"class":185},[159,20286,189],{"class":165},[159,20288,16225],{"class":192},[159,20290,555],{"class":185},[159,20292,189],{"class":165},[159,20294,552],{"class":192},[159,20296,186],{"class":185},[159,20298,189],{"class":165},[159,20300,16225],{"class":192},[159,20302,173],{"class":165},[159,20304,20305,20307,20309,20311,20313,20315,20317,20319],{"class":161,"line":6855},[159,20306,2073],{"class":165},[159,20308,16240],{"class":169},[159,20310,13720],{"class":185},[159,20312,189],{"class":165},[159,20314,16247],{"class":192},[159,20316,16250],{"class":165},[159,20318,16240],{"class":169},[159,20320,173],{"class":165},[159,20322,20323,20325,20327,20329,20331,20333,20335,20337],{"class":161,"line":6861},[159,20324,2073],{"class":165},[159,20326,16240],{"class":169},[159,20328,13720],{"class":185},[159,20330,189],{"class":165},[159,20332,16267],{"class":192},[159,20334,16270],{"class":165},[159,20336,16240],{"class":169},[159,20338,173],{"class":165},[159,20340,20341,20343,20345],{"class":161,"line":6867},[159,20342,1084],{"class":165},[159,20344,16218],{"class":169},[159,20346,173],{"class":165},[159,20348,20349,20351,20353,20355,20357,20359,20361,20363,20365,20367,20369,20371],{"class":161,"line":6873},[159,20350,2056],{"class":165},[159,20352,16218],{"class":169},[159,20354,547],{"class":185},[159,20356,189],{"class":165},[159,20358,16324],{"class":192},[159,20360,555],{"class":185},[159,20362,189],{"class":165},[159,20364,552],{"class":192},[159,20366,186],{"class":185},[159,20368,189],{"class":165},[159,20370,16324],{"class":192},[159,20372,173],{"class":165},[159,20374,20375,20377,20379,20381,20383,20385,20387,20389],{"class":161,"line":6879},[159,20376,2073],{"class":165},[159,20378,16240],{"class":169},[159,20380,13720],{"class":185},[159,20382,189],{"class":165},[159,20384,16345],{"class":192},[159,20386,16348],{"class":165},[159,20388,16240],{"class":169},[159,20390,173],{"class":165},[159,20392,20393,20395,20397,20399,20401,20403,20405,20407],{"class":161,"line":6885},[159,20394,2073],{"class":165},[159,20396,16240],{"class":169},[159,20398,13720],{"class":185},[159,20400,189],{"class":165},[159,20402,16365],{"class":192},[159,20404,16368],{"class":165},[159,20406,16240],{"class":169},[159,20408,173],{"class":165},[159,20410,20411,20413,20415,20417,20419,20421,20423,20425],{"class":161,"line":6890},[159,20412,2073],{"class":165},[159,20414,16240],{"class":169},[159,20416,13720],{"class":185},[159,20418,189],{"class":165},[159,20420,16385],{"class":192},[159,20422,16388],{"class":165},[159,20424,16240],{"class":169},[159,20426,173],{"class":165},[159,20428,20429,20431,20433,20435,20437,20439,20441,20443],{"class":161,"line":6896},[159,20430,2073],{"class":165},[159,20432,16240],{"class":169},[159,20434,13720],{"class":185},[159,20436,189],{"class":165},[159,20438,16405],{"class":192},[159,20440,16408],{"class":165},[159,20442,16240],{"class":169},[159,20444,173],{"class":165},[159,20446,20447,20449,20451,20453,20455,20457,20459,20461],{"class":161,"line":6902},[159,20448,2073],{"class":165},[159,20450,16240],{"class":169},[159,20452,13720],{"class":185},[159,20454,189],{"class":165},[159,20456,16425],{"class":192},[159,20458,16428],{"class":165},[159,20460,16240],{"class":169},[159,20462,173],{"class":165},[159,20464,20465,20467,20469],{"class":161,"line":6908},[159,20466,1084],{"class":165},[159,20468,16218],{"class":169},[159,20470,173],{"class":165},[159,20472,20473,20475,20477],{"class":161,"line":6914},[159,20474,2056],{"class":165},[159,20476,608],{"class":169},[159,20478,173],{"class":165},[159,20480,20481,20483,20485,20488,20490,20493,20495],{"class":161,"line":6920},[159,20482,2073],{"class":165},[159,20484,159],{"class":169},[159,20486,20487],{"class":165},">+\u003C\u002F",[159,20489,159],{"class":169},[159,20491,20492],{"class":165},">添加\u003C\u002F",[159,20494,608],{"class":169},[159,20496,173],{"class":165},[159,20498,20499,20501,20503],{"class":161,"line":6926},[159,20500,254],{"class":165},[159,20502,13694],{"class":169},[159,20504,173],{"class":165},[159,20506,20507,20509,20511,20513,20515,20517,20520,20522,20525,20527,20530,20532],{"class":161,"line":6932},[159,20508,179],{"class":165},[159,20510,182],{"class":169},[159,20512,186],{"class":185},[159,20514,189],{"class":165},[159,20516,9623],{"class":192},[159,20518,20519],{"class":165},">共有数据 \u003C",[159,20521,159],{"class":169},[159,20523,20524],{"class":165},">0\u003C\u002F",[159,20526,159],{"class":169},[159,20528,20529],{"class":165},"> 条\u003C\u002F",[159,20531,182],{"class":169},[159,20533,173],{"class":165},[159,20535,20536,20538,20540],{"class":161,"line":6938},[159,20537,179],{"class":165},[159,20539,12347],{"class":169},[159,20541,173],{"class":165},[159,20543,20544,20546,20548],{"class":161,"line":6944},[159,20545,2056],{"class":165},[159,20547,16500],{"class":169},[159,20549,173],{"class":165},[159,20551,20552,20554,20556],{"class":161,"line":6949},[159,20553,2073],{"class":165},[159,20555,12356],{"class":169},[159,20557,173],{"class":165},[159,20559,20560,20562,20564,20567,20569],{"class":161,"line":6955},[159,20561,2146],{"class":165},[159,20563,12365],{"class":169},[159,20565,20566],{"class":165},">ID\u003C\u002F",[159,20568,12365],{"class":169},[159,20570,173],{"class":165},[159,20572,20573,20575,20577,20579,20581],{"class":161,"line":6961},[159,20574,2146],{"class":165},[159,20576,12365],{"class":169},[159,20578,16532],{"class":165},[159,20580,12365],{"class":169},[159,20582,173],{"class":165},[159,20584,20585,20587,20589,20591,20593],{"class":161,"line":6967},[159,20586,2146],{"class":165},[159,20588,12365],{"class":169},[159,20590,16545],{"class":165},[159,20592,12365],{"class":169},[159,20594,173],{"class":165},[159,20596,20597,20599,20601,20603,20605],{"class":161,"line":6973},[159,20598,2146],{"class":165},[159,20600,12365],{"class":169},[159,20602,16558],{"class":165},[159,20604,12365],{"class":169},[159,20606,173],{"class":165},[159,20608,20609,20611,20613,20615,20617],{"class":161,"line":6979},[159,20610,2146],{"class":165},[159,20612,12365],{"class":169},[159,20614,16571],{"class":165},[159,20616,12365],{"class":169},[159,20618,173],{"class":165},[159,20620,20621,20623,20625,20627,20629],{"class":161,"line":6985},[159,20622,2146],{"class":165},[159,20624,12365],{"class":169},[159,20626,16584],{"class":165},[159,20628,12365],{"class":169},[159,20630,173],{"class":165},[159,20632,20633,20635,20637,20640,20642],{"class":161,"line":6991},[159,20634,2146],{"class":165},[159,20636,12365],{"class":169},[159,20638,20639],{"class":165},">录入时间\u003C\u002F",[159,20641,12365],{"class":169},[159,20643,173],{"class":165},[159,20645,20646,20648,20650,20652,20654],{"class":161,"line":6997},[159,20647,2146],{"class":165},[159,20649,12365],{"class":169},[159,20651,16597],{"class":165},[159,20653,12365],{"class":169},[159,20655,173],{"class":165},[159,20657,20658,20660,20662],{"class":161,"line":7003},[159,20659,2259],{"class":165},[159,20661,12356],{"class":169},[159,20663,173],{"class":165},[159,20665,20666,20668,20670],{"class":161,"line":7009},[159,20667,1084],{"class":165},[159,20669,16500],{"class":169},[159,20671,173],{"class":165},[159,20673,20674,20676,20678],{"class":161,"line":7015},[159,20675,2056],{"class":165},[159,20677,16624],{"class":169},[159,20679,173],{"class":165},[159,20681,20682],{"class":161,"line":7021},[159,20683,20684],{"class":1135},"      \u003C!-- \u003Ctr>\n",[159,20686,20687],{"class":161,"line":7026},[159,20688,20689],{"class":1135},"        \u003Ctd>1\u003C\u002Ftd>\n",[159,20691,20692],{"class":161,"line":7031},[159,20693,20689],{"class":1135},[159,20695,20696],{"class":161,"line":7037},[159,20697,20689],{"class":1135},[159,20699,20700],{"class":161,"line":7043},[159,20701,20689],{"class":1135},[159,20703,20704],{"class":161,"line":7049},[159,20705,20689],{"class":1135},[159,20707,20708],{"class":161,"line":7054},[159,20709,20689],{"class":1135},[159,20711,20712],{"class":161,"line":7060},[159,20713,20689],{"class":1135},[159,20715,20716],{"class":161,"line":7066},[159,20717,20718],{"class":1135},"        \u003Ctd>\n",[159,20720,20721],{"class":161,"line":7072},[159,20722,20723],{"class":1135},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[159,20725,20726],{"class":161,"line":7078},[159,20727,20728],{"class":1135},"        \u003C\u002Ftd>\n",[159,20730,20731],{"class":161,"line":7084},[159,20732,20733],{"class":1135},"      \u003C\u002Ftr> -->\n",[159,20735,20736,20738,20740],{"class":161,"line":7089},[159,20737,1084],{"class":165},[159,20739,16624],{"class":169},[159,20741,173],{"class":165},[159,20743,20744,20746,20748],{"class":161,"line":7095},[159,20745,254],{"class":165},[159,20747,12347],{"class":169},[159,20749,173],{"class":165},[159,20751,20752,20754,20756],{"class":161,"line":7100},[159,20753,179],{"class":165},[159,20755,228],{"class":169},[159,20757,173],{"class":165},[159,20759,20760],{"class":161,"line":7105},[159,20761,20762],{"class":1135},"    \u002F\u002F const initData = [{\n",[159,20764,20765],{"class":161,"line":7110},[159,20766,20767],{"class":1135},"    \u002F\u002F   unameId: 1,\n",[159,20769,20770],{"class":161,"line":7115},[159,20771,20772],{"class":1135},"    \u002F\u002F   uname: '华晨宇',\n",[159,20774,20775],{"class":161,"line":7120},[159,20776,20777],{"class":1135},"    \u002F\u002F   age: 22,\n",[159,20779,20780],{"class":161,"line":7125},[159,20781,20782],{"class":1135},"    \u002F\u002F   salary: 12000,\n",[159,20784,20785],{"class":161,"line":7131},[159,20786,20787],{"class":1135},"    \u002F\u002F   gender: '男',\n",[159,20789,20790],{"class":161,"line":7137},[159,20791,20792],{"class":1135},"    \u002F\u002F   city: '北京',\n",[159,20794,20795],{"class":161,"line":7143},[159,20796,20797],{"class":1135},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[159,20799,20800],{"class":161,"line":7149},[159,20801,20802],{"class":1135},"    \u002F\u002F }]\n",[159,20804,20805],{"class":161,"line":7155},[159,20806,20807],{"class":1135},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[159,20809,20810],{"class":161,"line":7161},[159,20811,20812],{"class":1135},"    \u002F\u002F 1.渲染业务\n",[159,20814,20815],{"class":161,"line":7167},[159,20816,20817],{"class":1135},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[159,20819,20820],{"class":161,"line":7173},[159,20821,20822],{"class":1135},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[159,20824,20825],{"class":161,"line":7179},[159,20826,20827],{"class":1135},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[159,20829,20830],{"class":161,"line":7184},[159,20831,590],{"emptyLinePlaceholder":589},[159,20833,20834],{"class":161,"line":7189},[159,20835,20836],{"class":1135},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[159,20838,20839],{"class":161,"line":7195},[159,20840,20841],{"class":1135},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[159,20843,20844,20846,20848,20850],{"class":161,"line":7201},[159,20845,1143],{"class":1142},[159,20847,4603],{"class":1146},[159,20849,1150],{"class":1142},[159,20851,16884],{"class":165},[159,20853,20854,20857,20859],{"class":161,"line":7207},[159,20855,20856],{"class":165},"    console.",[159,20858,5166],{"class":185},[159,20860,20861],{"class":165},"(arr)\n",[159,20863,20864],{"class":161,"line":7213},[159,20865,590],{"emptyLinePlaceholder":589},[159,20867,20868],{"class":161,"line":7219},[159,20869,20870],{"class":1135},"    \u002F\u002F 时间函数\n",[159,20872,20873,20875,20878],{"class":161,"line":7224},[159,20874,17167],{"class":1142},[159,20876,20877],{"class":185}," getTime",[159,20879,17173],{"class":165},[159,20881,20882,20884,20887,20889,20892,20895],{"class":161,"line":7230},[159,20883,5145],{"class":1142},[159,20885,20886],{"class":1146}," date",[159,20888,1150],{"class":1142},[159,20890,20891],{"class":1142}," new",[159,20893,20894],{"class":185}," Date",[159,20896,5158],{"class":165},[159,20898,20899,20901,20904,20906,20909,20912,20914,20916,20918,20921,20924,20926,20928,20930,20932,20935,20937,20939],{"class":161,"line":7236},[159,20900,5145],{"class":1142},[159,20902,20903],{"class":1146}," h",[159,20905,1150],{"class":1142},[159,20907,20908],{"class":165}," date.",[159,20910,20911],{"class":185},"getHours",[159,20913,4774],{"class":165},[159,20915,166],{"class":1142},[159,20917,7664],{"class":1146},[159,20919,20920],{"class":1142}," ?",[159,20922,20923],{"class":192}," '0'",[159,20925,3925],{"class":1142},[159,20927,20908],{"class":165},[159,20929,20911],{"class":185},[159,20931,4774],{"class":165},[159,20933,20934],{"class":1142},":",[159,20936,20908],{"class":165},[159,20938,20911],{"class":185},[159,20940,5158],{"class":165},[159,20942,20943,20945,20948,20950,20952,20955,20957,20959,20961,20963,20965,20967,20969,20971,20973,20975,20977,20979],{"class":161,"line":7242},[159,20944,5145],{"class":1142},[159,20946,20947],{"class":1146}," m",[159,20949,1150],{"class":1142},[159,20951,20908],{"class":165},[159,20953,20954],{"class":185},"getMinutes",[159,20956,4774],{"class":165},[159,20958,166],{"class":1142},[159,20960,7664],{"class":1146},[159,20962,20920],{"class":1142},[159,20964,20923],{"class":192},[159,20966,3925],{"class":1142},[159,20968,20908],{"class":165},[159,20970,20954],{"class":185},[159,20972,4774],{"class":165},[159,20974,20934],{"class":1142},[159,20976,20908],{"class":165},[159,20978,20954],{"class":185},[159,20980,5158],{"class":165},[159,20982,20983,20985,20988,20990,20992,20995,20997,20999,21001,21003,21005,21007,21009,21011,21013,21015,21017,21019],{"class":161,"line":7248},[159,20984,5145],{"class":1142},[159,20986,20987],{"class":1146}," s",[159,20989,1150],{"class":1142},[159,20991,20908],{"class":165},[159,20993,20994],{"class":185},"getSeconds",[159,20996,4774],{"class":165},[159,20998,166],{"class":1142},[159,21000,7664],{"class":1146},[159,21002,20920],{"class":1142},[159,21004,20923],{"class":192},[159,21006,3925],{"class":1142},[159,21008,20908],{"class":165},[159,21010,20994],{"class":185},[159,21012,4774],{"class":165},[159,21014,20934],{"class":1142},[159,21016,20908],{"class":165},[159,21018,20994],{"class":185},[159,21020,5158],{"class":165},[159,21022,21023,21025,21028,21030,21032,21035,21037,21040,21043,21046,21048,21050,21053,21055,21057,21059,21061,21063,21065,21068,21070,21073,21076,21079,21082,21084,21086],{"class":161,"line":7254},[159,21024,5145],{"class":1142},[159,21026,21027],{"class":1146}," str",[159,21029,1150],{"class":1142},[159,21031,9946],{"class":192},[159,21033,21034],{"class":165},"date",[159,21036,9952],{"class":192},[159,21038,21039],{"class":185},"getFullYear",[159,21041,21042],{"class":192},"()",[159,21044,21045],{"class":192},"}\u002F${",[159,21047,21034],{"class":165},[159,21049,9952],{"class":192},[159,21051,21052],{"class":185},"getMonth",[159,21054,4774],{"class":192},[159,21056,2704],{"class":1142},[159,21058,2707],{"class":1146},[159,21060,21045],{"class":192},[159,21062,21034],{"class":165},[159,21064,9952],{"class":192},[159,21066,21067],{"class":185},"getDate",[159,21069,21042],{"class":192},[159,21071,21072],{"class":192},"} ${",[159,21074,21075],{"class":165},"h",[159,21077,21078],{"class":192},"}:${",[159,21080,21081],{"class":165},"m",[159,21083,21078],{"class":192},[159,21085,8909],{"class":165},[159,21087,21088],{"class":192},"}`\n",[159,21090,21091,21094],{"class":161,"line":7260},[159,21092,21093],{"class":1142},"      return",[159,21095,21096],{"class":165}," str\n",[159,21098,21099],{"class":161,"line":7265},[159,21100,1508],{"class":165},[159,21102,21103],{"class":161,"line":7270},[159,21104,21105],{"class":1135},"    \u002F\u002F 渲染函数\n",[159,21107,21108,21110,21112,21114,21116,21118,21120,21122],{"class":161,"line":7276},[159,21109,1143],{"class":1142},[159,21111,16826],{"class":1146},[159,21113,1150],{"class":1142},[159,21115,1153],{"class":165},[159,21117,1156],{"class":185},[159,21119,1159],{"class":165},[159,21121,16837],{"class":192},[159,21123,1165],{"class":165},[159,21125,21126,21128,21130],{"class":161,"line":7281},[159,21127,17167],{"class":1142},[159,21129,17170],{"class":185},[159,21131,17173],{"class":165},[159,21133,21134],{"class":161,"line":7287},[159,21135,21136],{"class":1135},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[159,21138,21139],{"class":161,"line":7292},[159,21140,21141],{"class":1135},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[159,21143,21144,21146,21149,21151,21153,21156,21158,21160,21162,21165,21167,21170],{"class":161,"line":7298},[159,21145,5145],{"class":1142},[159,21147,21148],{"class":1146}," trArr",[159,21150,1150],{"class":1142},[159,21152,4780],{"class":165},[159,21154,21155],{"class":185},"map",[159,21157,1159],{"class":165},[159,21159,1215],{"class":1142},[159,21161,11680],{"class":165},[159,21163,21164],{"class":8765},"ele",[159,21166,1939],{"class":165},[159,21168,21169],{"class":8765},"index",[159,21171,1262],{"class":165},[159,21173,21174,21177],{"class":161,"line":7304},[159,21175,21176],{"class":1142},"        return",[159,21178,17252],{"class":192},[159,21180,21181],{"class":161,"line":7310},[159,21182,21183],{"class":192},"      \u003Ctr>\n",[159,21185,21186,21188,21190,21192,21195],{"class":161,"line":7316},[159,21187,17257],{"class":192},[159,21189,21164],{"class":165},[159,21191,9952],{"class":192},[159,21193,21194],{"class":165},"unameId",[159,21196,17274],{"class":192},[159,21198,21199,21201,21203,21205,21207],{"class":161,"line":7322},[159,21200,17257],{"class":192},[159,21202,21164],{"class":165},[159,21204,9952],{"class":192},[159,21206,17290],{"class":165},[159,21208,17274],{"class":192},[159,21210,21211,21213,21215,21217,21219],{"class":161,"line":7328},[159,21212,17257],{"class":192},[159,21214,21164],{"class":165},[159,21216,9952],{"class":192},[159,21218,17307],{"class":165},[159,21220,17274],{"class":192},[159,21222,21223,21225,21227,21229,21231],{"class":161,"line":7333},[159,21224,17257],{"class":192},[159,21226,21164],{"class":165},[159,21228,9952],{"class":192},[159,21230,17324],{"class":165},[159,21232,17274],{"class":192},[159,21234,21235,21237,21239,21241,21243],{"class":161,"line":7342},[159,21236,17257],{"class":192},[159,21238,21164],{"class":165},[159,21240,9952],{"class":192},[159,21242,17341],{"class":165},[159,21244,17274],{"class":192},[159,21246,21247,21249,21251,21253,21255],{"class":161,"line":7351},[159,21248,17257],{"class":192},[159,21250,21164],{"class":165},[159,21252,9952],{"class":192},[159,21254,17358],{"class":165},[159,21256,17274],{"class":192},[159,21258,21259,21261,21263,21265,21268],{"class":161,"line":7356},[159,21260,17257],{"class":192},[159,21262,21164],{"class":165},[159,21264,9952],{"class":192},[159,21266,21267],{"class":165},"time",[159,21269,17274],{"class":192},[159,21271,21273],{"class":161,"line":21272},211,[159,21274,20718],{"class":192},[159,21276,21278,21281,21283],{"class":161,"line":21277},212,[159,21279,21280],{"class":192},"          \u003Ca href=\"#\" data-id=\"${",[159,21282,21169],{"class":165},[159,21284,21285],{"class":192},"}\">删除\u003C\u002Fa>\n",[159,21287,21289],{"class":161,"line":21288},213,[159,21290,20728],{"class":192},[159,21292,21294],{"class":161,"line":21293},214,[159,21295,21296],{"class":192},"      \u003C\u002Ftr>\n",[159,21298,21300],{"class":161,"line":21299},215,[159,21301,21302],{"class":192},"  `\n",[159,21304,21306],{"class":161,"line":21305},216,[159,21307,11872],{"class":165},[159,21309,21311,21313,21315],{"class":161,"line":21310},217,[159,21312,5163],{"class":165},[159,21314,5166],{"class":185},[159,21316,21317],{"class":165},"(trArr)\n",[159,21319,21321],{"class":161,"line":21320},218,[159,21322,590],{"emptyLinePlaceholder":589},[159,21324,21326],{"class":161,"line":21325},219,[159,21327,21328],{"class":1135},"      \u002F\u002F (2) 把数组转换为字符串join\n",[159,21330,21332],{"class":161,"line":21331},220,[159,21333,21334],{"class":1135},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[159,21336,21338,21340,21342,21345,21348,21350,21353],{"class":161,"line":21337},221,[159,21339,17183],{"class":165},[159,21341,189],{"class":1142},[159,21343,21344],{"class":165}," trArr.",[159,21346,21347],{"class":185},"join",[159,21349,1159],{"class":165},[159,21351,21352],{"class":192},"''",[159,21354,1165],{"class":165},[159,21356,21358],{"class":161,"line":21357},222,[159,21359,21360],{"class":1135},"      \u002F\u002F 显示共有几条\n",[159,21362,21364,21366,21368,21370,21373,21376,21378,21380],{"class":161,"line":21363},223,[159,21365,2651],{"class":165},[159,21367,1156],{"class":185},[159,21369,1159],{"class":165},[159,21371,21372],{"class":192},"'.total span'",[159,21374,21375],{"class":165},").innerHTML ",[159,21377,189],{"class":1142},[159,21379,4780],{"class":165},[159,21381,2718],{"class":1146},[159,21383,21385],{"class":161,"line":21384},224,[159,21386,1508],{"class":165},[159,21388,21390],{"class":161,"line":21389},225,[159,21391,21392],{"class":1135},"    \u002F\u002F render()\n",[159,21394,21396],{"class":161,"line":21395},226,[159,21397,590],{"emptyLinePlaceholder":589},[159,21399,21401],{"class":161,"line":21400},227,[159,21402,21403],{"class":1135},"    \u002F\u002F 获取DOM对象\n",[159,21405,21407,21409,21411,21413,21415,21417,21419,21421],{"class":161,"line":21406},228,[159,21408,1143],{"class":1142},[159,21410,16901],{"class":1146},[159,21412,1150],{"class":1142},[159,21414,1153],{"class":165},[159,21416,1156],{"class":185},[159,21418,1159],{"class":165},[159,21420,16912],{"class":192},[159,21422,1165],{"class":165},[159,21424,21426,21428,21430,21432,21434,21436,21438,21440],{"class":161,"line":21425},229,[159,21427,1143],{"class":1142},[159,21429,16726],{"class":1146},[159,21431,1150],{"class":1142},[159,21433,1153],{"class":165},[159,21435,1156],{"class":185},[159,21437,1159],{"class":165},[159,21439,16737],{"class":192},[159,21441,1165],{"class":165},[159,21443,21445,21447,21449,21451,21453,21455,21457,21459],{"class":161,"line":21444},230,[159,21446,1143],{"class":1142},[159,21448,16746],{"class":1146},[159,21450,1150],{"class":1142},[159,21452,1153],{"class":165},[159,21454,1156],{"class":185},[159,21456,1159],{"class":165},[159,21458,16757],{"class":192},[159,21460,1165],{"class":165},[159,21462,21464,21466,21468,21470,21472,21474,21476,21478],{"class":161,"line":21463},231,[159,21465,1143],{"class":1142},[159,21467,16786],{"class":1146},[159,21469,1150],{"class":1142},[159,21471,1153],{"class":165},[159,21473,1156],{"class":185},[159,21475,1159],{"class":165},[159,21477,16797],{"class":192},[159,21479,1165],{"class":165},[159,21481,21483,21485,21487,21489,21491,21493,21495,21497],{"class":161,"line":21482},232,[159,21484,1143],{"class":1142},[159,21486,16766],{"class":1146},[159,21488,1150],{"class":1142},[159,21490,1153],{"class":165},[159,21492,1156],{"class":185},[159,21494,1159],{"class":165},[159,21496,16777],{"class":192},[159,21498,1165],{"class":165},[159,21500,21502,21504,21506,21508,21510,21512,21514,21516],{"class":161,"line":21501},233,[159,21503,1143],{"class":1142},[159,21505,16806],{"class":1146},[159,21507,1150],{"class":1142},[159,21509,1153],{"class":165},[159,21511,1156],{"class":185},[159,21513,1159],{"class":165},[159,21515,16817],{"class":192},[159,21517,1165],{"class":165},[159,21519,21521],{"class":161,"line":21520},234,[159,21522,590],{"emptyLinePlaceholder":589},[159,21524,21526],{"class":161,"line":21525},235,[159,21527,21528],{"class":1135},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[159,21530,21532,21534,21536,21538,21540,21542,21544,21546,21548],{"class":161,"line":21531},236,[159,21533,16919],{"class":165},[159,21535,4724],{"class":185},[159,21537,1159],{"class":165},[159,21539,16926],{"class":192},[159,21541,1939],{"class":165},[159,21543,1215],{"class":1142},[159,21545,11680],{"class":165},[159,21547,14038],{"class":8765},[159,21549,1262],{"class":165},[159,21551,21553],{"class":161,"line":21552},237,[159,21554,21555],{"class":1135},"      \u002F\u002F 禁止浏览器跳转\n",[159,21557,21559,21561,21563],{"class":161,"line":21558},238,[159,21560,16946],{"class":165},[159,21562,16949],{"class":185},[159,21564,5158],{"class":165},[159,21566,21568],{"class":161,"line":21567},239,[159,21569,21570],{"class":1135},"      \u002F\u002F 非空判断\n",[159,21572,21574],{"class":161,"line":21573},240,[159,21575,21576],{"class":1135},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[159,21578,21580],{"class":161,"line":21579},241,[159,21581,21582],{"class":1135},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[159,21584,21586,21588,21590,21592,21595,21597,21600,21603,21605,21607],{"class":161,"line":21585},242,[159,21587,1250],{"class":1142},[159,21589,11680],{"class":165},[159,21591,18314],{"class":1142},[159,21593,21594],{"class":165},"uname.value ",[159,21596,18451],{"class":1142},[159,21598,21599],{"class":1142}," !",[159,21601,21602],{"class":165},"age.value ",[159,21604,18451],{"class":1142},[159,21606,21599],{"class":1142},[159,21608,21609],{"class":165},"salary.value) {\n",[159,21611,21613,21615,21617,21619,21621],{"class":161,"line":21612},243,[159,21614,21176],{"class":1142},[159,21616,17021],{"class":185},[159,21618,1159],{"class":165},[159,21620,17026],{"class":192},[159,21622,1165],{"class":165},[159,21624,21626],{"class":161,"line":21625},244,[159,21627,1308],{"class":165},[159,21629,21631,21633,21635],{"class":161,"line":21630},245,[159,21632,4923],{"class":165},[159,21634,17116],{"class":185},[159,21636,21637],{"class":165},"({\n",[159,21639,21641],{"class":161,"line":21640},246,[159,21642,21643],{"class":1135},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[159,21645,21647],{"class":161,"line":21646},247,[159,21648,21649],{"class":1135},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[159,21651,21653],{"class":161,"line":21652},248,[159,21654,21655],{"class":1135},"        \u002F\u002F 对象的序号应为数组长度+1\n",[159,21657,21659],{"class":161,"line":21658},249,[159,21660,21661],{"class":1135},"        \u002F\u002F unameId: arr.length + 1,\n",[159,21663,21665],{"class":161,"line":21664},250,[159,21666,590],{"emptyLinePlaceholder":589},[159,21668,21670],{"class":161,"line":21669},251,[159,21671,21672],{"class":1135},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[159,21674,21676],{"class":161,"line":21675},252,[159,21677,21678],{"class":1135},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[159,21680,21682],{"class":161,"line":21681},253,[159,21683,21684],{"class":1135},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[159,21686,21688],{"class":161,"line":21687},254,[159,21689,21690],{"class":1135},"        \u002F\u002F 0当假看\n",[159,21692,21694,21697,21699,21701,21704,21706,21709,21711,21714,21716,21718,21721,21723],{"class":161,"line":21693},255,[159,21695,21696],{"class":165},"        unameId: arr.",[159,21698,3828],{"class":1146},[159,21700,20920],{"class":1142},[159,21702,21703],{"class":165}," arr[arr.",[159,21705,3828],{"class":1146},[159,21707,21708],{"class":1142}," -",[159,21710,2707],{"class":1146},[159,21712,21713],{"class":165},"].unameId ",[159,21715,2704],{"class":1142},[159,21717,2707],{"class":1146},[159,21719,21720],{"class":1142}," :",[159,21722,2707],{"class":1146},[159,21724,17070],{"class":165},[159,21726,21728],{"class":161,"line":21727},256,[159,21729,17075],{"class":165},[159,21731,21733],{"class":161,"line":21732},257,[159,21734,17080],{"class":165},[159,21736,21738],{"class":161,"line":21737},258,[159,21739,17090],{"class":165},[159,21741,21743],{"class":161,"line":21742},259,[159,21744,17085],{"class":165},[159,21746,21748],{"class":161,"line":21747},260,[159,21749,21750],{"class":165},"        city: city.value,\n",[159,21752,21754],{"class":161,"line":21753},261,[159,21755,21756],{"class":1135},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[159,21758,21760],{"class":161,"line":21759},262,[159,21761,21762],{"class":1135},"        \u002F\u002F time: new Date().toDateString()\n",[159,21764,21766,21769,21772],{"class":161,"line":21765},263,[159,21767,21768],{"class":165},"        time: ",[159,21770,21771],{"class":185},"getTime",[159,21773,5158],{"class":165},[159,21775,21777],{"class":161,"line":21776},264,[159,21778,11872],{"class":165},[159,21780,21782],{"class":161,"line":21781},265,[159,21783,21784],{"class":1135},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[159,21786,21788,21790],{"class":161,"line":21787},266,[159,21789,17151],{"class":185},[159,21791,5158],{"class":165},[159,21793,21795,21797,21799,21801,21803],{"class":161,"line":21794},267,[159,21796,17134],{"class":1146},[159,21798,9952],{"class":165},[159,21800,17139],{"class":185},[159,21802,4774],{"class":165},[159,21804,21805],{"class":1135},"\u002F\u002F重置表单\n",[159,21807,21809],{"class":161,"line":21808},268,[159,21810,21811],{"class":1135},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[159,21813,21815,21818,21820,21822,21825,21827,21829,21831,21833],{"class":161,"line":21814},269,[159,21816,21817],{"class":165},"      localStorage.",[159,21819,18749],{"class":185},[159,21821,1159],{"class":165},[159,21823,21824],{"class":192},"'data'",[159,21826,1939],{"class":165},[159,21828,18759],{"class":1146},[159,21830,9952],{"class":165},[159,21832,18764],{"class":185},[159,21834,21835],{"class":165},"(arr))\n",[159,21837,21839],{"class":161,"line":21838},270,[159,21840,4863],{"class":165},[159,21842,21844],{"class":161,"line":21843},271,[159,21845,590],{"emptyLinePlaceholder":589},[159,21847,21849],{"class":161,"line":21848},272,[159,21850,21851],{"class":1135},"    \u002F\u002F 3.删除业务\n",[159,21853,21855],{"class":161,"line":21854},273,[159,21856,21857],{"class":1135},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[159,21859,21861,21863,21865,21867,21869,21871,21873,21875,21877],{"class":161,"line":21860},274,[159,21862,17427],{"class":165},[159,21864,4724],{"class":185},[159,21866,1159],{"class":165},[159,21868,4729],{"class":192},[159,21870,1939],{"class":165},[159,21872,1215],{"class":1142},[159,21874,11680],{"class":165},[159,21876,14038],{"class":8765},[159,21878,1262],{"class":165},[159,21880,21882],{"class":161,"line":21881},275,[159,21883,21884],{"class":1135},"      \u002F\u002F 判断是否点击的是删除按钮\n",[159,21886,21888,21890,21892,21894,21896],{"class":161,"line":21887},276,[159,21889,1250],{"class":1142},[159,21891,14104],{"class":165},[159,21893,1256],{"class":1142},[159,21895,15326],{"class":192},[159,21897,1262],{"class":165},[159,21899,21901],{"class":161,"line":21900},277,[159,21902,21903],{"class":1135},"        \u002F\u002F alert(1)\n",[159,21905,21907],{"class":161,"line":21906},278,[159,21908,21909],{"class":1135},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[159,21911,21913],{"class":161,"line":21912},279,[159,21914,21915],{"class":1135},"        \u002F\u002F console.log(e.target)\n",[159,21917,21919],{"class":161,"line":21918},280,[159,21920,21921],{"class":1135},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[159,21923,21925],{"class":161,"line":21924},281,[159,21926,590],{"emptyLinePlaceholder":589},[159,21928,21930],{"class":161,"line":21929},282,[159,21931,21932],{"class":1135},"        \u002F\u002F 确认框，确然是否真的要删除\n",[159,21934,21936],{"class":161,"line":21935},283,[159,21937,21938],{"class":1135},"        \u002F\u002F confirm()为确认框\n",[159,21940,21942],{"class":161,"line":21941},284,[159,21943,21944],{"class":1135},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[159,21946,21948,21950,21952,21955,21957,21960],{"class":161,"line":21947},285,[159,21949,17003],{"class":1142},[159,21951,11680],{"class":165},[159,21953,21954],{"class":185},"confirm",[159,21956,1159],{"class":165},[159,21958,21959],{"class":192},"'您确定要删除这条数据吗？'",[159,21961,21962],{"class":165},")) {\n",[159,21964,21966,21969,21971,21973,21975],{"class":161,"line":21965},286,[159,21967,21968],{"class":165},"          arr.",[159,21970,4926],{"class":185},[159,21972,17480],{"class":165},[159,21974,4932],{"class":1146},[159,21976,1165],{"class":165},[159,21978,21980],{"class":161,"line":21979},287,[159,21981,21982],{"class":1135},"          \u002F\u002F 3.4 重新渲染页面\n",[159,21984,21986,21989],{"class":161,"line":21985},288,[159,21987,21988],{"class":185},"          render",[159,21990,5158],{"class":165},[159,21992,21994],{"class":161,"line":21993},289,[159,21995,21996],{"class":1135},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[159,21998,22000,22003,22005,22007,22009,22011,22013,22015,22017],{"class":161,"line":21999},290,[159,22001,22002],{"class":165},"          localStorage.",[159,22004,18749],{"class":185},[159,22006,1159],{"class":165},[159,22008,21824],{"class":192},[159,22010,1939],{"class":165},[159,22012,18759],{"class":1146},[159,22014,9952],{"class":165},[159,22016,18764],{"class":185},[159,22018,21835],{"class":165},[159,22020,22022],{"class":161,"line":22021},291,[159,22023,7530],{"class":165},[159,22025,22027],{"class":161,"line":22026},292,[159,22028,1308],{"class":165},[159,22030,22032],{"class":161,"line":22031},293,[159,22033,590],{"emptyLinePlaceholder":589},[159,22035,22037],{"class":161,"line":22036},294,[159,22038,4863],{"class":165},[159,22040,22042],{"class":161,"line":22041},295,[159,22043,590],{"emptyLinePlaceholder":589},[159,22045,22047,22049,22051],{"class":161,"line":22046},296,[159,22048,254],{"class":165},[159,22050,228],{"class":169},[159,22052,173],{"class":165},[159,22054,22056,22058,22060],{"class":161,"line":22055},297,[159,22057,264],{"class":165},[159,22059,170],{"class":169},[159,22061,173],{"class":165},[159,22063,22065],{"class":161,"line":22064},298,[159,22066,590],{"emptyLinePlaceholder":589},[159,22068,22070,22072,22074],{"class":161,"line":22069},299,[159,22071,264],{"class":165},[159,22073,522],{"class":169},[159,22075,173],{"class":165},[37,22077,22079],{"id":22078},"_36-正则表达式","3.6 正则表达式",[14,22081,22082],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,22084,22085],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,22087,22088],{},"正则表达式的作用：",[103,22090,22091,22098,22104],{},[106,22092,22093,22094,22097],{},"表单验证（ ",[61,22095,22096],{},"匹配"," ）",[106,22099,22100,22101,22097],{},"过滤敏感词（ ",[61,22102,22103],{},"替换",[106,22105,22106,22107,22097],{},"字符串中提取我们想要的部分（ ",[61,22108,22109],{},"提取",[42,22111,22113],{"id":22112},"_361-语法","3.6.1 语法",[14,22115,22116],{},"正则表达式使用步骤：",[134,22118,22119,22122],{},[106,22120,22121],{},"定义规则",[106,22123,22124],{},"查找是否匹配",[14,22126,22127],{},"正则表达式里边不需要写引号",[14,22129,22130],{},[23,22131],{"alt":25,"src":22132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,22134,22135],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,22137,22138],{},"reg.test(str)",[14,22140,22141],{},[23,22142],{"alt":25,"src":22143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,22145,22146],{},[23,22147],{"alt":25,"src":22148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[42,22150,22152],{"id":22151},"_362-元字符","3.6.2 元字符",[134,22154,22155,22158,22161,22164,22171],{},[106,22156,22157],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[106,22159,22160],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[106,22162,22163],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[106,22165,22166,22167],{},"正则验证工具：",[8085,22168,22169],{"href":22169,"rel":22170},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[15923],[106,22172,22173],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[326,22175,22177],{"id":22176},"_3621-边界符","3.6.2.1 边界符",[14,22179,22180],{},[23,22181],{"alt":25,"src":22182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,22184,22185],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,22187,22188],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,22190,22191],{},"只匹配一次",[14,22193,22194],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[326,22196,22198],{"id":22197},"_3622-量词","3.6.2.2 量词",[14,22200,22201],{},[23,22202],{"alt":25,"src":22203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,22205,22206],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[326,22208,22210],{"id":22209},"_3623-元字符","3.6.2.3 元字符",[14,22212,22213],{},[23,22214],{"alt":25,"src":22215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,22217,22218],{},"匹配的是a或b或c []只选一个",[14,22220,22221],{},[23,22222],{"alt":25,"src":22223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,22225,22226],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,22228,22229],{},[23,22230],{"alt":25,"src":22231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,22233,22234],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,22236,22237],{},[23,22238],{"alt":25,"src":22239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[151,22241,22243],{"className":520,"code":22242,"language":522,"meta":25,"style":25},"\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",[49,22244,22245,22255,22269,22273,22281,22295,22315,22327,22335,22339,22347,22355,22360,22391,22418,22446,22450,22455,22484,22516,22521,22526,22557,22589,22621,22625,22630,22661,22691,22721,22725,22730,22761,22792,22822,22852,22856,22861,22894,22898,22903,22934,22965,22969,22974,23005,23035,23066,23070,23075,23107,23138,23169,23196,23227,23259,23292,23323,23354,23386,23417,23425,23433,23437],{"__ignoreMap":25},[159,22246,22247,22249,22251,22253],{"class":161,"line":162},[159,22248,914],{"class":165},[159,22250,917],{"class":169},[159,22252,920],{"class":185},[159,22254,173],{"class":165},[159,22256,22257,22259,22261,22263,22265,22267],{"class":161,"line":176},[159,22258,166],{"class":165},[159,22260,522],{"class":169},[159,22262,931],{"class":185},[159,22264,189],{"class":165},[159,22266,936],{"class":192},[159,22268,173],{"class":165},[159,22270,22271],{"class":161,"line":203},[159,22272,590],{"emptyLinePlaceholder":589},[159,22274,22275,22277,22279],{"class":161,"line":223},[159,22276,166],{"class":165},[159,22278,949],{"class":169},[159,22280,173],{"class":165},[159,22282,22283,22285,22287,22289,22291,22293],{"class":161,"line":233},[159,22284,179],{"class":165},[159,22286,958],{"class":169},[159,22288,961],{"class":185},[159,22290,189],{"class":165},[159,22292,966],{"class":192},[159,22294,173],{"class":165},[159,22296,22297,22299,22301,22303,22305,22307,22309,22311,22313],{"class":161,"line":239},[159,22298,179],{"class":165},[159,22300,958],{"class":169},[159,22302,547],{"class":185},[159,22304,189],{"class":165},[159,22306,981],{"class":192},[159,22308,984],{"class":185},[159,22310,189],{"class":165},[159,22312,989],{"class":192},[159,22314,173],{"class":165},[159,22316,22317,22319,22321,22323,22325],{"class":161,"line":245},[159,22318,179],{"class":165},[159,22320,998],{"class":169},[159,22322,1001],{"class":165},[159,22324,998],{"class":169},[159,22326,173],{"class":165},[159,22328,22329,22331,22333],{"class":161,"line":251},[159,22330,264],{"class":165},[159,22332,949],{"class":169},[159,22334,173],{"class":165},[159,22336,22337],{"class":161,"line":261},[159,22338,590],{"emptyLinePlaceholder":589},[159,22340,22341,22343,22345],{"class":161,"line":603},[159,22342,166],{"class":165},[159,22344,170],{"class":169},[159,22346,173],{"class":165},[159,22348,22349,22351,22353],{"class":161,"line":621},[159,22350,179],{"class":165},[159,22352,228],{"class":169},[159,22354,173],{"class":165},[159,22356,22357],{"class":161,"line":634},[159,22358,22359],{"class":1135},"    \u002F\u002F 元字符中\n",[159,22361,22362,22364,22366,22368,22370,22373,22375,22377,22380,22382,22385,22388],{"class":161,"line":640},[159,22363,20856],{"class":165},[159,22365,5166],{"class":185},[159,22367,1159],{"class":165},[159,22369,13083],{"class":192},[159,22371,22372],{"class":18361},"哈",[159,22374,13083],{"class":192},[159,22376,9952],{"class":165},[159,22378,22379],{"class":185},"test",[159,22381,1159],{"class":165},[159,22383,22384],{"class":192},"'哈'",[159,22386,22387],{"class":165},"))  ",[159,22389,22390],{"class":1135},"\u002F\u002Ftrue\n",[159,22392,22393,22395,22397,22399,22401,22403,22405,22407,22409,22411,22414,22416],{"class":161,"line":1075},[159,22394,20856],{"class":165},[159,22396,5166],{"class":185},[159,22398,1159],{"class":165},[159,22400,13083],{"class":192},[159,22402,22372],{"class":18361},[159,22404,13083],{"class":192},[159,22406,9952],{"class":165},[159,22408,22379],{"class":185},[159,22410,1159],{"class":165},[159,22412,22413],{"class":192},"'哈哈'",[159,22415,22387],{"class":165},[159,22417,22390],{"class":1135},[159,22419,22420,22422,22424,22426,22428,22430,22432,22434,22436,22438,22441,22444],{"class":161,"line":1081},[159,22421,20856],{"class":165},[159,22423,5166],{"class":185},[159,22425,1159],{"class":165},[159,22427,13083],{"class":192},[159,22429,22372],{"class":18361},[159,22431,13083],{"class":192},[159,22433,9952],{"class":165},[159,22435,22379],{"class":185},[159,22437,1159],{"class":165},[159,22439,22440],{"class":192},"'二哈'",[159,22442,22443],{"class":165},"))   ",[159,22445,22390],{"class":1135},[159,22447,22448],{"class":161,"line":1091},[159,22449,590],{"emptyLinePlaceholder":589},[159,22451,22452],{"class":161,"line":1100},[159,22453,22454],{"class":1135},"    \u002F\u002F 1.边界符\n",[159,22456,22457,22459,22461,22463,22465,22468,22470,22472,22474,22476,22478,22480,22482],{"class":161,"line":1123},[159,22458,20856],{"class":165},[159,22460,5166],{"class":185},[159,22462,1159],{"class":165},[159,22464,13083],{"class":192},[159,22466,22467],{"class":1142},"^",[159,22469,22372],{"class":18361},[159,22471,13083],{"class":192},[159,22473,9952],{"class":165},[159,22475,22379],{"class":185},[159,22477,1159],{"class":165},[159,22479,22384],{"class":192},[159,22481,22387],{"class":165},[159,22483,22390],{"class":1135},[159,22485,22486,22488,22490,22492,22494,22496,22498,22501,22503,22505,22507,22509,22511,22513],{"class":161,"line":1132},[159,22487,20856],{"class":165},[159,22489,5166],{"class":185},[159,22491,1159],{"class":165},[159,22493,13083],{"class":192},[159,22495,22467],{"class":1142},[159,22497,22372],{"class":18361},[159,22499,22500],{"class":1142},"$",[159,22502,13083],{"class":192},[159,22504,9952],{"class":165},[159,22506,22379],{"class":185},[159,22508,1159],{"class":165},[159,22510,22413],{"class":192},[159,22512,22387],{"class":165},[159,22514,22515],{"class":1135},"\u002F\u002Ffalse\n",[159,22517,22518],{"class":161,"line":1139},[159,22519,22520],{"class":1135},"    \u002F\u002F 2.量词\n",[159,22522,22523],{"class":161,"line":1168},[159,22524,22525],{"class":1135},"    \u002F\u002F 量词 * 类似于 >= 0\n",[159,22527,22528,22530,22532,22534,22536,22538,22540,22543,22545,22547,22549,22551,22553,22555],{"class":161,"line":1174},[159,22529,20856],{"class":165},[159,22531,5166],{"class":185},[159,22533,1159],{"class":165},[159,22535,13083],{"class":192},[159,22537,22467],{"class":1142},[159,22539,22372],{"class":18361},[159,22541,22542],{"class":1142},"*$",[159,22544,13083],{"class":192},[159,22546,9952],{"class":165},[159,22548,22379],{"class":185},[159,22550,1159],{"class":165},[159,22552,22413],{"class":192},[159,22554,22387],{"class":165},[159,22556,22390],{"class":1135},[159,22558,22559,22561,22563,22565,22567,22569,22571,22573,22575,22577,22579,22581,22584,22586],{"class":161,"line":1180},[159,22560,20856],{"class":165},[159,22562,5166],{"class":185},[159,22564,1159],{"class":165},[159,22566,13083],{"class":192},[159,22568,22467],{"class":1142},[159,22570,22372],{"class":18361},[159,22572,22542],{"class":1142},[159,22574,13083],{"class":192},[159,22576,9952],{"class":165},[159,22578,22379],{"class":185},[159,22580,1159],{"class":165},[159,22582,22583],{"class":192},"'二哈好傻'",[159,22585,22387],{"class":165},[159,22587,22588],{"class":1135},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[159,22590,22591,22593,22595,22597,22599,22601,22603,22605,22607,22609,22611,22613,22616,22618],{"class":161,"line":1194},[159,22592,20856],{"class":165},[159,22594,5166],{"class":185},[159,22596,1159],{"class":165},[159,22598,13083],{"class":192},[159,22600,22467],{"class":1142},[159,22602,22372],{"class":18361},[159,22604,22542],{"class":1142},[159,22606,13083],{"class":192},[159,22608,9952],{"class":165},[159,22610,22379],{"class":185},[159,22612,1159],{"class":165},[159,22614,22615],{"class":192},"'哈好哈'",[159,22617,22443],{"class":165},[159,22619,22620],{"class":1135},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[159,22622,22623],{"class":161,"line":1200},[159,22624,590],{"emptyLinePlaceholder":589},[159,22626,22627],{"class":161,"line":1221},[159,22628,22629],{"class":1135},"    \u002F\u002F +类似于>=1\n",[159,22631,22632,22634,22636,22638,22640,22642,22644,22647,22649,22651,22653,22655,22657,22659],{"class":161,"line":1230},[159,22633,20856],{"class":165},[159,22635,5166],{"class":185},[159,22637,1159],{"class":165},[159,22639,13083],{"class":192},[159,22641,22467],{"class":1142},[159,22643,22372],{"class":18361},[159,22645,22646],{"class":1142},"+$",[159,22648,13083],{"class":192},[159,22650,9952],{"class":165},[159,22652,22379],{"class":185},[159,22654,1159],{"class":165},[159,22656,22413],{"class":192},[159,22658,22387],{"class":165},[159,22660,22390],{"class":1135},[159,22662,22663,22665,22667,22669,22671,22673,22675,22677,22679,22681,22683,22685,22687,22689],{"class":161,"line":1247},[159,22664,20856],{"class":165},[159,22666,5166],{"class":185},[159,22668,1159],{"class":165},[159,22670,13083],{"class":192},[159,22672,22467],{"class":1142},[159,22674,22372],{"class":18361},[159,22676,22646],{"class":1142},[159,22678,13083],{"class":192},[159,22680,9952],{"class":165},[159,22682,22379],{"class":185},[159,22684,1159],{"class":165},[159,22686,22583],{"class":192},[159,22688,22387],{"class":165},[159,22690,22588],{"class":1135},[159,22692,22693,22695,22697,22699,22701,22703,22705,22707,22709,22711,22713,22715,22717,22719],{"class":161,"line":1265},[159,22694,20856],{"class":165},[159,22696,5166],{"class":185},[159,22698,1159],{"class":165},[159,22700,13083],{"class":192},[159,22702,22467],{"class":1142},[159,22704,22372],{"class":18361},[159,22706,22646],{"class":1142},[159,22708,13083],{"class":192},[159,22710,9952],{"class":165},[159,22712,22379],{"class":185},[159,22714,1159],{"class":165},[159,22716,22615],{"class":192},[159,22718,22443],{"class":165},[159,22720,22515],{"class":1135},[159,22722,22723],{"class":161,"line":1277},[159,22724,590],{"emptyLinePlaceholder":589},[159,22726,22727],{"class":161,"line":1283},[159,22728,22729],{"class":1135},"    \u002F\u002F ?类似于0次或一次\n",[159,22731,22732,22734,22736,22738,22740,22742,22745,22747,22749,22751,22753,22755,22757,22759],{"class":161,"line":1294},[159,22733,20856],{"class":165},[159,22735,5166],{"class":185},[159,22737,1159],{"class":165},[159,22739,13083],{"class":192},[159,22741,22467],{"class":1142},[159,22743,22744],{"class":18361},"哈？",[159,22746,22500],{"class":1142},[159,22748,13083],{"class":192},[159,22750,9952],{"class":165},[159,22752,22379],{"class":185},[159,22754,1159],{"class":165},[159,22756,21352],{"class":192},[159,22758,22443],{"class":165},[159,22760,22390],{"class":1135},[159,22762,22763,22765,22767,22769,22771,22773,22775,22778,22780,22782,22784,22786,22788,22790],{"class":161,"line":1305},[159,22764,20856],{"class":165},[159,22766,5166],{"class":185},[159,22768,1159],{"class":165},[159,22770,13083],{"class":192},[159,22772,22467],{"class":1142},[159,22774,22372],{"class":18361},[159,22776,22777],{"class":1142},"?$",[159,22779,13083],{"class":192},[159,22781,9952],{"class":165},[159,22783,22379],{"class":185},[159,22785,1159],{"class":165},[159,22787,22413],{"class":192},[159,22789,22387],{"class":165},[159,22791,22515],{"class":1135},[159,22793,22794,22796,22798,22800,22802,22804,22806,22808,22810,22812,22814,22816,22818,22820],{"class":161,"line":1311},[159,22795,20856],{"class":165},[159,22797,5166],{"class":185},[159,22799,1159],{"class":165},[159,22801,13083],{"class":192},[159,22803,22467],{"class":1142},[159,22805,22372],{"class":18361},[159,22807,22777],{"class":1142},[159,22809,13083],{"class":192},[159,22811,9952],{"class":165},[159,22813,22379],{"class":185},[159,22815,1159],{"class":165},[159,22817,22583],{"class":192},[159,22819,22387],{"class":165},[159,22821,22588],{"class":1135},[159,22823,22824,22826,22828,22830,22832,22834,22836,22838,22840,22842,22844,22846,22848,22850],{"class":161,"line":1322},[159,22825,20856],{"class":165},[159,22827,5166],{"class":185},[159,22829,1159],{"class":165},[159,22831,13083],{"class":192},[159,22833,22467],{"class":1142},[159,22835,22372],{"class":18361},[159,22837,22777],{"class":1142},[159,22839,13083],{"class":192},[159,22841,9952],{"class":165},[159,22843,22379],{"class":185},[159,22845,1159],{"class":165},[159,22847,22615],{"class":192},[159,22849,22387],{"class":165},[159,22851,22515],{"class":1135},[159,22853,22854],{"class":161,"line":1327},[159,22855,590],{"emptyLinePlaceholder":589},[159,22857,22858],{"class":161,"line":1336},[159,22859,22860],{"class":1135},"    \u002F\u002F {n}写几，就必须出现几次\n",[159,22862,22863,22865,22867,22869,22871,22873,22875,22878,22880,22882,22884,22886,22889,22892],{"class":161,"line":1345},[159,22864,20856],{"class":165},[159,22866,5166],{"class":185},[159,22868,1159],{"class":165},[159,22870,13083],{"class":192},[159,22872,22467],{"class":1142},[159,22874,22372],{"class":18361},[159,22876,22877],{"class":1142},"{4}$",[159,22879,13083],{"class":192},[159,22881,9952],{"class":165},[159,22883,22379],{"class":185},[159,22885,1159],{"class":165},[159,22887,22888],{"class":192},"'哈哈哈哈'",[159,22890,22891],{"class":165},")) ",[159,22893,22390],{"class":1135},[159,22895,22896],{"class":161,"line":1350},[159,22897,590],{"emptyLinePlaceholder":589},[159,22899,22900],{"class":161,"line":1764},[159,22901,22902],{"class":1135},"    \u002F\u002F {n,}大于等于n次\n",[159,22904,22905,22907,22909,22911,22913,22915,22917,22920,22922,22924,22926,22928,22930,22932],{"class":161,"line":1769},[159,22906,20856],{"class":165},[159,22908,5166],{"class":185},[159,22910,1159],{"class":165},[159,22912,13083],{"class":192},[159,22914,22467],{"class":1142},[159,22916,22372],{"class":18361},[159,22918,22919],{"class":1142},"{4,}$",[159,22921,13083],{"class":192},[159,22923,9952],{"class":165},[159,22925,22379],{"class":185},[159,22927,1159],{"class":165},[159,22929,22888],{"class":192},[159,22931,22891],{"class":165},[159,22933,22390],{"class":1135},[159,22935,22936,22938,22940,22942,22944,22946,22948,22950,22952,22954,22956,22958,22961,22963],{"class":161,"line":1777},[159,22937,20856],{"class":165},[159,22939,5166],{"class":185},[159,22941,1159],{"class":165},[159,22943,13083],{"class":192},[159,22945,22467],{"class":1142},[159,22947,22372],{"class":18361},[159,22949,22919],{"class":1142},[159,22951,13083],{"class":192},[159,22953,9952],{"class":165},[159,22955,22379],{"class":185},[159,22957,1159],{"class":165},[159,22959,22960],{"class":192},"'哈哈哈哈哈'",[159,22962,22891],{"class":165},[159,22964,22390],{"class":1135},[159,22966,22967],{"class":161,"line":1788},[159,22968,590],{"emptyLinePlaceholder":589},[159,22970,22971],{"class":161,"line":1802},[159,22972,22973],{"class":1135},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[159,22975,22976,22978,22980,22982,22984,22986,22988,22991,22993,22995,22997,22999,23001,23003],{"class":161,"line":1815},[159,22977,20856],{"class":165},[159,22979,5166],{"class":185},[159,22981,1159],{"class":165},[159,22983,13083],{"class":192},[159,22985,22467],{"class":1142},[159,22987,22372],{"class":18361},[159,22989,22990],{"class":1142},"{4,6}$",[159,22992,13083],{"class":192},[159,22994,9952],{"class":165},[159,22996,22379],{"class":185},[159,22998,1159],{"class":165},[159,23000,22888],{"class":192},[159,23002,22891],{"class":165},[159,23004,22390],{"class":1135},[159,23006,23007,23009,23011,23013,23015,23017,23019,23021,23023,23025,23027,23029,23031,23033],{"class":161,"line":1828},[159,23008,20856],{"class":165},[159,23010,5166],{"class":185},[159,23012,1159],{"class":165},[159,23014,13083],{"class":192},[159,23016,22467],{"class":1142},[159,23018,22372],{"class":18361},[159,23020,22990],{"class":1142},[159,23022,13083],{"class":192},[159,23024,9952],{"class":165},[159,23026,22379],{"class":185},[159,23028,1159],{"class":165},[159,23030,22960],{"class":192},[159,23032,22891],{"class":165},[159,23034,22390],{"class":1135},[159,23036,23037,23039,23041,23043,23045,23047,23049,23051,23053,23055,23057,23059,23062,23064],{"class":161,"line":1841},[159,23038,20856],{"class":165},[159,23040,5166],{"class":185},[159,23042,1159],{"class":165},[159,23044,13083],{"class":192},[159,23046,22467],{"class":1142},[159,23048,22372],{"class":18361},[159,23050,22990],{"class":1142},[159,23052,13083],{"class":192},[159,23054,9952],{"class":165},[159,23056,22379],{"class":185},[159,23058,1159],{"class":165},[159,23060,23061],{"class":192},"'哈哈哈哈哈哈哈'",[159,23063,22891],{"class":165},[159,23065,22515],{"class":1135},[159,23067,23068],{"class":161,"line":1852},[159,23069,590],{"emptyLinePlaceholder":589},[159,23071,23072],{"class":161,"line":1866},[159,23073,23074],{"class":1135},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[159,23076,23077,23079,23081,23083,23085,23087,23090,23092,23094,23096,23098,23100,23103,23105],{"class":161,"line":1879},[159,23078,20856],{"class":165},[159,23080,5166],{"class":185},[159,23082,1159],{"class":165},[159,23084,13083],{"class":192},[159,23086,22467],{"class":1142},[159,23088,23089],{"class":1146},"[abc]",[159,23091,22500],{"class":1142},[159,23093,13083],{"class":192},[159,23095,9952],{"class":165},[159,23097,22379],{"class":185},[159,23099,1159],{"class":165},[159,23101,23102],{"class":192},"'a'",[159,23104,22387],{"class":165},[159,23106,22390],{"class":1135},[159,23108,23109,23111,23113,23115,23117,23119,23121,23123,23125,23127,23129,23131,23134,23136],{"class":161,"line":1884},[159,23110,20856],{"class":165},[159,23112,5166],{"class":185},[159,23114,1159],{"class":165},[159,23116,13083],{"class":192},[159,23118,22467],{"class":1142},[159,23120,23089],{"class":1146},[159,23122,22500],{"class":1142},[159,23124,13083],{"class":192},[159,23126,9952],{"class":165},[159,23128,22379],{"class":185},[159,23130,1159],{"class":165},[159,23132,23133],{"class":192},"'b'",[159,23135,22387],{"class":165},[159,23137,22390],{"class":1135},[159,23139,23140,23142,23144,23146,23148,23150,23152,23154,23156,23158,23160,23162,23165,23167],{"class":161,"line":1889},[159,23141,20856],{"class":165},[159,23143,5166],{"class":185},[159,23145,1159],{"class":165},[159,23147,13083],{"class":192},[159,23149,22467],{"class":1142},[159,23151,23089],{"class":1146},[159,23153,22500],{"class":1142},[159,23155,13083],{"class":192},[159,23157,9952],{"class":165},[159,23159,22379],{"class":185},[159,23161,1159],{"class":165},[159,23163,23164],{"class":192},"'c'",[159,23166,22387],{"class":165},[159,23168,22390],{"class":1135},[159,23170,23171,23173,23175,23177,23179,23181,23183,23185,23187,23189,23192,23194],{"class":161,"line":1899},[159,23172,20856],{"class":165},[159,23174,5166],{"class":185},[159,23176,1159],{"class":165},[159,23178,13083],{"class":192},[159,23180,23089],{"class":1146},[159,23182,13083],{"class":192},[159,23184,9952],{"class":165},[159,23186,22379],{"class":185},[159,23188,1159],{"class":165},[159,23190,23191],{"class":192},"'ab'",[159,23193,22387],{"class":165},[159,23195,22390],{"class":1135},[159,23197,23198,23200,23202,23204,23206,23208,23210,23212,23214,23216,23218,23220,23222,23224],{"class":161,"line":1912},[159,23199,20856],{"class":165},[159,23201,5166],{"class":185},[159,23203,1159],{"class":165},[159,23205,13083],{"class":192},[159,23207,22467],{"class":1142},[159,23209,23089],{"class":1146},[159,23211,22500],{"class":1142},[159,23213,13083],{"class":192},[159,23215,9952],{"class":165},[159,23217,22379],{"class":185},[159,23219,1159],{"class":165},[159,23221,23191],{"class":192},[159,23223,22387],{"class":165},[159,23225,23226],{"class":1135},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[159,23228,23229,23231,23233,23235,23237,23239,23241,23244,23246,23248,23250,23252,23254,23256],{"class":161,"line":1925},[159,23230,20856],{"class":165},[159,23232,5166],{"class":185},[159,23234,1159],{"class":165},[159,23236,13083],{"class":192},[159,23238,22467],{"class":1142},[159,23240,23089],{"class":1146},[159,23242,23243],{"class":1142},"{2}$",[159,23245,13083],{"class":192},[159,23247,9952],{"class":165},[159,23249,22379],{"class":185},[159,23251,1159],{"class":165},[159,23253,23191],{"class":192},[159,23255,22387],{"class":165},[159,23257,23258],{"class":1135},"\u002F\u002Ftrue   可以选两个\n",[159,23260,23261,23263,23265,23267,23269,23271,23274,23276,23278,23280,23282,23284,23287,23289],{"class":161,"line":1956},[159,23262,20856],{"class":165},[159,23264,5166],{"class":185},[159,23266,1159],{"class":165},[159,23268,13083],{"class":192},[159,23270,22467],{"class":1142},[159,23272,23273],{"class":1146},"[a-z]",[159,23275,22500],{"class":1142},[159,23277,13083],{"class":192},[159,23279,9952],{"class":165},[159,23281,22379],{"class":185},[159,23283,1159],{"class":165},[159,23285,23286],{"class":192},"'p'",[159,23288,22443],{"class":165},[159,23290,23291],{"class":1135},"\u002F\u002Ftrue   依然只能选一个\n",[159,23293,23294,23296,23298,23300,23302,23304,23307,23309,23311,23313,23315,23317,23319,23321],{"class":161,"line":1971},[159,23295,20856],{"class":165},[159,23297,5166],{"class":185},[159,23299,1159],{"class":165},[159,23301,13083],{"class":192},[159,23303,22467],{"class":1142},[159,23305,23306],{"class":1146},"[A-Z]",[159,23308,22500],{"class":1142},[159,23310,13083],{"class":192},[159,23312,9952],{"class":165},[159,23314,22379],{"class":185},[159,23316,1159],{"class":165},[159,23318,23286],{"class":192},[159,23320,22443],{"class":165},[159,23322,22515],{"class":1135},[159,23324,23325,23327,23329,23331,23333,23335,23337,23339,23341,23343,23345,23347,23350,23352],{"class":161,"line":1976},[159,23326,20856],{"class":165},[159,23328,5166],{"class":185},[159,23330,1159],{"class":165},[159,23332,13083],{"class":192},[159,23334,22467],{"class":1142},[159,23336,23306],{"class":1146},[159,23338,22500],{"class":1142},[159,23340,13083],{"class":192},[159,23342,9952],{"class":165},[159,23344,22379],{"class":185},[159,23346,1159],{"class":165},[159,23348,23349],{"class":192},"'P'",[159,23351,22443],{"class":165},[159,23353,22390],{"class":1135},[159,23355,23356,23358,23360,23362,23364,23366,23369,23371,23373,23375,23377,23379,23382,23384],{"class":161,"line":1981},[159,23357,20856],{"class":165},[159,23359,5166],{"class":185},[159,23361,1159],{"class":165},[159,23363,13083],{"class":192},[159,23365,22467],{"class":1142},[159,23367,23368],{"class":1146},"[0-9]",[159,23370,22500],{"class":1142},[159,23372,13083],{"class":192},[159,23374,9952],{"class":165},[159,23376,22379],{"class":185},[159,23378,1159],{"class":165},[159,23380,23381],{"class":192},"'0'",[159,23383,22443],{"class":165},[159,23385,22390],{"class":1135},[159,23387,23388,23390,23392,23394,23396,23398,23401,23403,23405,23407,23409,23411,23413,23415],{"class":161,"line":1989},[159,23389,20856],{"class":165},[159,23391,5166],{"class":185},[159,23393,1159],{"class":165},[159,23395,13083],{"class":192},[159,23397,22467],{"class":1142},[159,23399,23400],{"class":1146},"[a-zA-Z0-9]",[159,23402,22500],{"class":1142},[159,23404,13083],{"class":192},[159,23406,9952],{"class":165},[159,23408,22379],{"class":185},[159,23410,1159],{"class":165},[159,23412,23286],{"class":192},[159,23414,22387],{"class":165},[159,23416,22390],{"class":1135},[159,23418,23419,23421,23423],{"class":161,"line":2001},[159,23420,254],{"class":165},[159,23422,228],{"class":169},[159,23424,173],{"class":165},[159,23426,23427,23429,23431],{"class":161,"line":2006},[159,23428,264],{"class":165},[159,23430,170],{"class":169},[159,23432,173],{"class":165},[159,23434,23435],{"class":161,"line":2015},[159,23436,590],{"emptyLinePlaceholder":589},[159,23438,23439,23441,23443],{"class":161,"line":2024},[159,23440,264],{"class":165},[159,23442,522],{"class":169},[159,23444,173],{"class":165},[326,23446,23448],{"id":23447},"_3624-修饰符","3.6.2.4 修饰符",[14,23450,23451],{},[23,23452],{"alt":25,"src":23453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,23455,23456],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,23458,23459],{},[23,23460],{"alt":25,"src":23461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[151,23463,23465],{"className":520,"code":23464,"language":522,"meta":25,"style":25},"\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",[49,23466,23467,23477,23491,23499,23513,23533,23545,23553,23561,23569,23601,23632,23637,23669,23680,23713,23722,23730,23738],{"__ignoreMap":25},[159,23468,23469,23471,23473,23475],{"class":161,"line":162},[159,23470,914],{"class":165},[159,23472,917],{"class":169},[159,23474,920],{"class":185},[159,23476,173],{"class":165},[159,23478,23479,23481,23483,23485,23487,23489],{"class":161,"line":176},[159,23480,166],{"class":165},[159,23482,522],{"class":169},[159,23484,931],{"class":185},[159,23486,189],{"class":165},[159,23488,936],{"class":192},[159,23490,173],{"class":165},[159,23492,23493,23495,23497],{"class":161,"line":203},[159,23494,166],{"class":165},[159,23496,949],{"class":169},[159,23498,173],{"class":165},[159,23500,23501,23503,23505,23507,23509,23511],{"class":161,"line":223},[159,23502,179],{"class":165},[159,23504,958],{"class":169},[159,23506,961],{"class":185},[159,23508,189],{"class":165},[159,23510,966],{"class":192},[159,23512,173],{"class":165},[159,23514,23515,23517,23519,23521,23523,23525,23527,23529,23531],{"class":161,"line":233},[159,23516,179],{"class":165},[159,23518,958],{"class":169},[159,23520,547],{"class":185},[159,23522,189],{"class":165},[159,23524,981],{"class":192},[159,23526,984],{"class":185},[159,23528,189],{"class":165},[159,23530,989],{"class":192},[159,23532,173],{"class":165},[159,23534,23535,23537,23539,23541,23543],{"class":161,"line":239},[159,23536,179],{"class":165},[159,23538,998],{"class":169},[159,23540,1001],{"class":165},[159,23542,998],{"class":169},[159,23544,173],{"class":165},[159,23546,23547,23549,23551],{"class":161,"line":245},[159,23548,264],{"class":165},[159,23550,949],{"class":169},[159,23552,173],{"class":165},[159,23554,23555,23557,23559],{"class":161,"line":251},[159,23556,166],{"class":165},[159,23558,170],{"class":169},[159,23560,173],{"class":165},[159,23562,23563,23565,23567],{"class":161,"line":261},[159,23564,179],{"class":165},[159,23566,228],{"class":169},[159,23568,173],{"class":165},[159,23570,23571,23573,23575,23577,23579,23581,23584,23586,23588,23590,23592,23594,23597,23599],{"class":161,"line":603},[159,23572,20856],{"class":165},[159,23574,5166],{"class":185},[159,23576,1159],{"class":165},[159,23578,13083],{"class":192},[159,23580,22467],{"class":1142},[159,23582,23583],{"class":18361},"java",[159,23585,22500],{"class":1142},[159,23587,13083],{"class":192},[159,23589,9952],{"class":165},[159,23591,22379],{"class":185},[159,23593,1159],{"class":165},[159,23595,23596],{"class":192},"'java'",[159,23598,22891],{"class":165},[159,23600,22390],{"class":1135},[159,23602,23603,23605,23607,23609,23611,23613,23615,23617,23619,23621,23623,23625,23628,23630],{"class":161,"line":621},[159,23604,20856],{"class":165},[159,23606,5166],{"class":185},[159,23608,1159],{"class":165},[159,23610,13083],{"class":192},[159,23612,22467],{"class":1142},[159,23614,23583],{"class":18361},[159,23616,22500],{"class":1142},[159,23618,13083],{"class":192},[159,23620,9952],{"class":165},[159,23622,22379],{"class":185},[159,23624,1159],{"class":165},[159,23626,23627],{"class":192},"'Java'",[159,23629,22891],{"class":165},[159,23631,22515],{"class":1135},[159,23633,23634],{"class":161,"line":634},[159,23635,23636],{"class":1135},"    \u002F\u002F 不区分大小写、\n",[159,23638,23639,23641,23643,23645,23647,23649,23651,23653,23655,23657,23659,23661,23663,23665,23667],{"class":161,"line":640},[159,23640,20856],{"class":165},[159,23642,5166],{"class":185},[159,23644,1159],{"class":165},[159,23646,13083],{"class":192},[159,23648,22467],{"class":1142},[159,23650,23583],{"class":18361},[159,23652,22500],{"class":1142},[159,23654,13083],{"class":192},[159,23656,1241],{"class":1142},[159,23658,9952],{"class":165},[159,23660,22379],{"class":185},[159,23662,1159],{"class":165},[159,23664,23627],{"class":192},[159,23666,22891],{"class":165},[159,23668,22390],{"class":1135},[159,23670,23671,23673,23675,23677],{"class":161,"line":1075},[159,23672,1143],{"class":1142},[159,23674,21027],{"class":1146},[159,23676,1150],{"class":1142},[159,23678,23679],{"class":192}," 'java是一门编程语言，学完java工资很高'\n",[159,23681,23682,23684,23687,23689,23692,23695,23697,23699,23701,23703,23706,23708,23711],{"class":161,"line":1081},[159,23683,1143],{"class":1142},[159,23685,23686],{"class":1146}," result",[159,23688,1150],{"class":1142},[159,23690,23691],{"class":165}," str.",[159,23693,23694],{"class":185},"replace",[159,23696,1159],{"class":165},[159,23698,13083],{"class":192},[159,23700,23583],{"class":18361},[159,23702,13083],{"class":192},[159,23704,23705],{"class":1142},"ig",[159,23707,1939],{"class":165},[159,23709,23710],{"class":192},"'前端'",[159,23712,1165],{"class":165},[159,23714,23715,23717,23719],{"class":161,"line":1091},[159,23716,20856],{"class":165},[159,23718,5166],{"class":185},[159,23720,23721],{"class":165},"(result)\n",[159,23723,23724,23726,23728],{"class":161,"line":1100},[159,23725,254],{"class":165},[159,23727,228],{"class":169},[159,23729,173],{"class":165},[159,23731,23732,23734,23736],{"class":161,"line":1123},[159,23733,264],{"class":165},[159,23735,170],{"class":169},[159,23737,173],{"class":165},[159,23739,23740,23742,23744],{"class":161,"line":1132},[159,23741,264],{"class":165},[159,23743,522],{"class":169},[159,23745,173],{"class":165},[1468,23747,23748],{},"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":25,"searchDepth":176,"depth":176,"links":23750},[23751,23761,23773,23790,23797,23805],{"id":39,"depth":176,"text":40,"children":23752},[23753,23754,23755,23756,23757,23758,23759,23760],{"id":44,"depth":203,"text":45},{"id":79,"depth":203,"text":80},{"id":120,"depth":203,"text":121},{"id":306,"depth":203,"text":307},{"id":355,"depth":203,"text":356},{"id":492,"depth":203,"text":493},{"id":830,"depth":203,"text":831},{"id":3991,"depth":203,"text":3992},{"id":4019,"depth":176,"text":4020,"children":23762},[23763,23764,23765,23766,23767,23768,23769,23770,23771,23772],{"id":4023,"depth":203,"text":4024},{"id":4046,"depth":203,"text":4047},{"id":4976,"depth":203,"text":4977},{"id":5669,"depth":203,"text":5670},{"id":5953,"depth":203,"text":5954},{"id":10237,"depth":203,"text":10238},{"id":10407,"depth":203,"text":10408},{"id":10535,"depth":203,"text":10536},{"id":10561,"depth":203,"text":10562},{"id":11962,"depth":203,"text":11963},{"id":13123,"depth":176,"text":13124,"children":23774},[23775,23776,23777,23778,23779,23780,23781,23782,23783,23784,23785,23786,23787,23788,23789],{"id":13127,"depth":203,"text":13128},{"id":13784,"depth":203,"text":13785},{"id":15481,"depth":203,"text":15482},{"id":15522,"depth":203,"text":15523},{"id":15564,"depth":203,"text":15565},{"id":15578,"depth":203,"text":15579},{"id":15627,"depth":203,"text":15628},{"id":15639,"depth":203,"text":15640},{"id":15654,"depth":203,"text":15655},{"id":15691,"depth":203,"text":15692},{"id":15772,"depth":203,"text":15773},{"id":15900,"depth":203,"text":15901},{"id":15912,"depth":203,"text":15913},{"id":15932,"depth":203,"text":15933},{"id":18057,"depth":203,"text":18058},{"id":18076,"depth":176,"text":18077,"children":23791},[23792,23793,23794,23795,23796],{"id":18097,"depth":203,"text":18098},{"id":18117,"depth":203,"text":18118},{"id":18166,"depth":203,"text":18167},{"id":18291,"depth":203,"text":18292},{"id":18479,"depth":203,"text":18480},{"id":18497,"depth":176,"text":18498,"children":23798},[23799,23800,23801,23802,23803,23804],{"id":18512,"depth":203,"text":18513},{"id":18571,"depth":203,"text":18572},{"id":18595,"depth":203,"text":18596},{"id":18917,"depth":203,"text":18918},{"id":18949,"depth":203,"text":18950},{"id":18972,"depth":203,"text":18973},{"id":22078,"depth":176,"text":22079,"children":23806},[23807,23808],{"id":22112,"depth":203,"text":22113},{"id":22151,"depth":203,"text":22152},null,"md",{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":5,"description":23809},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",[23817,28780,29885,31300,34254,35601,37087,38174,46897,46909,47506,47532,47656,47897,47962,47980,47993,48040,48164,48333,48531,48710,48915,49051,49146,49183,49196,49506,50247,50955,50976,51995,53626,53777,53790,53802,54102,73773,73788,73805,73838,76646,97978,114123,114144,114257,114378,115148,115811,116172,116210,116316,116416,116459,116485,116546,118200,118301,118326,118817,119317,120397,120680,121422,121924,121936,123952,125616,127119,128817,130734,132653,134675,138145,138577,139040,139789,142733,143081,143103,143459,146766,146778,147181,147204,147351,147518,147723,148024,148581,149238,151169,152767,153416,154910,156341,157576,159270,161022,163432,163548,164483,164694,165579,166814,167042,167055,168210,170622,172990,176311,178788,180432,182209,184222,187274,189454,191981,194175],{"id":23818,"title":23819,"body":23820,"description":25,"extension":23810,"meta":28775,"navigation":589,"path":28776,"seo":28777,"stem":28778,"__hash__":28779},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":23821,"toc":28747},[23822,23825,23829,23832,23836,23847,23851,23855,23858,23861,23864,23867,23870,23895,23899,23902,23905,23908,23911,23959,23963,23981,23983,23997,24000,24008,24011,24814,24821,24837,24841,24927,24931,24937,25022,25026,25063,25067,25130,25134,25138,25144,25155,25159,25164,25168,25173,25177,25182,25186,25190,25195,25440,25445,25583,25588,25841,25844,25852,25856,25861,25962,25965,26259,26268,26366,26369,26372,26375,26378,26638,26643,26782,26785,26962,26965,27093,27096,27248,27252,27257,27260,27271,27279,27282,27384,27388,27392,27397,27447,27452,27457,27481,27486,27538,27541,27546,27720,27725,28008,28013,28410,28414,28419,28476,28481,28489,28492,28632,28635,28744],[10,23823,23819],{"id":23824},"_1基础入门",[37,23826,23828],{"id":23827},"_11注释","1.1注释",[14,23830,23831],{},"\u002F\u002F或者\u002F* *\u002F",[37,23833,23835],{"id":23834},"_12命名","1.2命名",[134,23837,23838,23841,23844],{},[106,23839,23840],{},"字母数字下划线",[106,23842,23843],{},"开头必须是字母或_",[106,23845,23846],{},"不能使用关键词",[37,23848,23850],{"id":23849},"_13数据类型","1.3数据类型",[42,23852,23854],{"id":23853},"_131整形","1.3.1整形",[14,23856,23857],{},"short 短整形 2",[14,23859,23860],{},"int 整形 4",[14,23862,23863],{},"long 长整形 win4 linux32位4 linux64位8",[14,23865,23866],{},"long long 长长整形 8",[14,23868,23869],{},"利用sizeof可以求数据类型占用的内存空间大小",[151,23871,23875],{"className":23872,"code":23873,"language":23874,"meta":25,"style":25},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[49,23876,23877,23889],{"__ignoreMap":25},[159,23878,23879,23882,23884,23887],{"class":161,"line":162},[159,23880,23881],{"class":1142},"sizeof",[159,23883,1159],{"class":165},[159,23885,23886],{"class":1142},"int",[159,23888,1165],{"class":165},[159,23890,23891,23893],{"class":161,"line":176},[159,23892,23881],{"class":1142},[159,23894,5169],{"class":165},[42,23896,23898],{"id":23897},"_132浮点型","1.3.2浮点型",[14,23900,23901],{},"float 单精度 4节 7位有效数字",[14,23903,23904],{},"double 双精度 8节 15-16有效数字",[14,23906,23907],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,23909,23910],{},"注意点：",[151,23912,23914],{"className":23872,"code":23913,"language":23874,"meta":25,"style":25},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[49,23915,23916,23938],{"__ignoreMap":25},[159,23917,23918,23921,23924,23926,23929,23932,23935],{"class":161,"line":162},[159,23919,23920],{"class":1142},"float",[159,23922,23923],{"class":165}," f1",[159,23925,189],{"class":1142},[159,23927,23928],{"class":1146},"3.14",[159,23930,23931],{"class":1142},"f",[159,23933,23934],{"class":165},";",[159,23936,23937],{"class":1135}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[159,23939,23940,23942,23945,23947,23950,23952,23954,23956],{"class":161,"line":176},[159,23941,23920],{"class":1142},[159,23943,23944],{"class":165}," f2",[159,23946,189],{"class":1142},[159,23948,23949],{"class":1146},"3",[159,23951,14038],{"class":1142},[159,23953,11034],{"class":1146},[159,23955,23934],{"class":165},[159,23957,23958],{"class":1135}," \u002F\u002F科学记数法\n",[42,23960,23962],{"id":23961},"_133字符型","1.3.3字符型",[151,23964,23966],{"className":23872,"code":23965,"language":23874,"meta":25,"style":25},"char ch='a'\n",[49,23967,23968],{"__ignoreMap":25},[159,23969,23970,23973,23976,23978],{"class":161,"line":162},[159,23971,23972],{"class":1142},"char",[159,23974,23975],{"class":165}," ch",[159,23977,189],{"class":1142},[159,23979,23980],{"class":192},"'a'\n",[14,23982,23910],{},[134,23984,23985,23988,23991,23994],{},[106,23986,23987],{},"在显示字符型变量时，只能单引号，双引号x",[106,23989,23990],{},"单引号内只能一个字符，不能字符串",[106,23992,23993],{},"c和c++字符型变量只占用一个字符",[106,23995,23996],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,23998,23999],{},"ASCII码大致由以下两部分组成：",[134,24001,24002,24005],{},[106,24003,24004],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[106,24006,24007],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,24009,24010],{},"ASCII码表格：",[12347,24012,24013,24053],{},[16500,24014,24015],{},[12356,24016,24017,24023,24028,24032,24037,24041,24045,24049],{},[12365,24018,24019,24022],{},[61,24020,24021],{},"ASCII","值",[12365,24024,24025],{},[61,24026,24027],{},"控制字符",[12365,24029,24030,24022],{},[61,24031,24021],{},[12365,24033,24034],{},[61,24035,24036],{},"字符",[12365,24038,24039,24022],{},[61,24040,24021],{},[12365,24042,24043],{},[61,24044,24036],{},[12365,24046,24047,24022],{},[61,24048,24021],{},[12365,24050,24051],{},[61,24052,24036],{},[16624,24054,24055,24080,24103,24128,24152,24174,24197,24220,24246,24269,24293,24317,24340,24364,24388,24412,24435,24457,24482,24505,24529,24553,24578,24602,24626,24649,24673,24698,24722,24744,24767,24789],{},[12356,24056,24057,24059,24062,24065,24068,24071,24074,24077],{},[12488,24058,1489],{},[12488,24060,24061],{},"NUT",[12488,24063,24064],{},"32",[12488,24066,24067],{},"(space)",[12488,24069,24070],{},"64",[12488,24072,24073],{},"@",[12488,24075,24076],{},"96",[12488,24078,24079],{},"、",[12356,24081,24082,24084,24087,24090,24092,24095,24098,24101],{},[12488,24083,4932],{},[12488,24085,24086],{},"SOH",[12488,24088,24089],{},"33",[12488,24091,18314],{},[12488,24093,24094],{},"65",[12488,24096,24097],{},"A",[12488,24099,24100],{},"97",[12488,24102,8085],{},[12356,24104,24105,24107,24110,24113,24116,24119,24122,24125],{},[12488,24106,11034],{},[12488,24108,24109],{},"STX",[12488,24111,24112],{},"34",[12488,24114,24115],{},"\"",[12488,24117,24118],{},"66",[12488,24120,24121],{},"B",[12488,24123,24124],{},"98",[12488,24126,24127],{},"b",[12356,24129,24130,24132,24135,24137,24140,24143,24146,24149],{},[12488,24131,23949],{},[12488,24133,24134],{},"ETX",[12488,24136,4397],{},[12488,24138,24139],{},"#",[12488,24141,24142],{},"67",[12488,24144,24145],{},"C",[12488,24147,24148],{},"99",[12488,24150,24151],{},"c",[12356,24153,24154,24156,24159,24161,24163,24166,24169,24171],{},[12488,24155,8866],{},[12488,24157,24158],{},"EOT",[12488,24160,19436],{},[12488,24162,22500],{},[12488,24164,24165],{},"68",[12488,24167,24168],{},"D",[12488,24170,1596],{},[12488,24172,24173],{},"d",[12356,24175,24176,24178,24181,24184,24186,24189,24192,24195],{},[12488,24177,1753],{},[12488,24179,24180],{},"ENQ",[12488,24182,24183],{},"37",[12488,24185,1662],{},[12488,24187,24188],{},"69",[12488,24190,24191],{},"E",[12488,24193,24194],{},"101",[12488,24196,14038],{},[12356,24198,24199,24201,24204,24207,24210,24212,24215,24218],{},[12488,24200,7907],{},[12488,24202,24203],{},"ACK",[12488,24205,24206],{},"38",[12488,24208,24209],{},"&",[12488,24211,9058],{},[12488,24213,24214],{},"F",[12488,24216,24217],{},"102",[12488,24219,23931],{},[12356,24221,24222,24225,24228,24231,24234,24237,24240,24243],{},[12488,24223,24224],{},"7",[12488,24226,24227],{},"BEL",[12488,24229,24230],{},"39",[12488,24232,24233],{},",",[12488,24235,24236],{},"71",[12488,24238,24239],{},"G",[12488,24241,24242],{},"103",[12488,24244,24245],{},"g",[12356,24247,24248,24251,24254,24256,24258,24261,24264,24267],{},[12488,24249,24250],{},"8",[12488,24252,24253],{},"BS",[12488,24255,4269],{},[12488,24257,1159],{},[12488,24259,24260],{},"72",[12488,24262,24263],{},"H",[12488,24265,24266],{},"104",[12488,24268,21075],{},[12356,24270,24271,24274,24277,24280,24282,24285,24288,24291],{},[12488,24272,24273],{},"9",[12488,24275,24276],{},"HT",[12488,24278,24279],{},"41",[12488,24281,18387],{},[12488,24283,24284],{},"73",[12488,24286,24287],{},"I",[12488,24289,24290],{},"105",[12488,24292,1241],{},[12356,24294,24295,24297,24300,24303,24305,24308,24311,24314],{},[12488,24296,1964],{},[12488,24298,24299],{},"LF",[12488,24301,24302],{},"42",[12488,24304,4777],{},[12488,24306,24307],{},"74",[12488,24309,24310],{},"J",[12488,24312,24313],{},"106",[12488,24315,24316],{},"j",[12356,24318,24319,24321,24324,24327,24329,24331,24334,24337],{},[12488,24320,5850],{},[12488,24322,24323],{},"VT",[12488,24325,24326],{},"43",[12488,24328,2704],{},[12488,24330,19408],{},[12488,24332,24333],{},"K",[12488,24335,24336],{},"107",[12488,24338,24339],{},"k",[12356,24341,24342,24344,24347,24350,24352,24355,24358,24361],{},[12488,24343,7925],{},[12488,24345,24346],{},"FF",[12488,24348,24349],{},"44",[12488,24351,24233],{},[12488,24353,24354],{},"76",[12488,24356,24357],{},"L",[12488,24359,24360],{},"108",[12488,24362,24363],{},"l",[12356,24365,24366,24368,24371,24374,24377,24380,24383,24386],{},[12488,24367,19665],{},[12488,24369,24370],{},"CR",[12488,24372,24373],{},"45",[12488,24375,24376],{},"-",[12488,24378,24379],{},"77",[12488,24381,24382],{},"M",[12488,24384,24385],{},"109",[12488,24387,21081],{},[12356,24389,24390,24392,24395,24398,24400,24403,24406,24409],{},[12488,24391,7678],{},[12488,24393,24394],{},"SO",[12488,24396,24397],{},"46",[12488,24399,9952],{},[12488,24401,24402],{},"78",[12488,24404,24405],{},"N",[12488,24407,24408],{},"110",[12488,24410,24411],{},"n",[12356,24413,24414,24416,24419,24422,24424,24427,24430,24432],{},[12488,24415,1673],{},[12488,24417,24418],{},"SI",[12488,24420,24421],{},"47",[12488,24423,13083],{},[12488,24425,24426],{},"79",[12488,24428,24429],{},"O",[12488,24431,10197],{},[12488,24433,24434],{},"o",[12356,24436,24437,24440,24443,24445,24447,24449,24452,24455],{},[12488,24438,24439],{},"16",[12488,24441,24442],{},"DLE",[12488,24444,7649],{},[12488,24446,1489],{},[12488,24448,9100],{},[12488,24450,24451],{},"P",[12488,24453,24454],{},"112",[12488,24456,14],{},[12356,24458,24459,24462,24465,24468,24470,24473,24476,24479],{},[12488,24460,24461],{},"17",[12488,24463,24464],{},"DCI",[12488,24466,24467],{},"49",[12488,24469,4932],{},[12488,24471,24472],{},"81",[12488,24474,24475],{},"Q",[12488,24477,24478],{},"113",[12488,24480,24481],{},"q",[12356,24483,24484,24486,24489,24491,24493,24496,24499,24502],{},[12488,24485,18723],{},[12488,24487,24488],{},"DC2",[12488,24490,4230],{},[12488,24492,11034],{},[12488,24494,24495],{},"82",[12488,24497,24498],{},"R",[12488,24500,24501],{},"114",[12488,24503,24504],{},"r",[12356,24506,24507,24510,24513,24516,24518,24521,24524,24527],{},[12488,24508,24509],{},"19",[12488,24511,24512],{},"DC3",[12488,24514,24515],{},"51",[12488,24517,23949],{},[12488,24519,24520],{},"83",[12488,24522,24523],{},"S",[12488,24525,24526],{},"115",[12488,24528,8909],{},[12356,24530,24531,24533,24536,24539,24541,24544,24547,24550],{},[12488,24532,1739],{},[12488,24534,24535],{},"DC4",[12488,24537,24538],{},"52",[12488,24540,8866],{},[12488,24542,24543],{},"84",[12488,24545,24546],{},"T",[12488,24548,24549],{},"116",[12488,24551,24552],{},"t",[12356,24554,24555,24558,24561,24564,24566,24569,24572,24575],{},[12488,24556,24557],{},"21",[12488,24559,24560],{},"NAK",[12488,24562,24563],{},"53",[12488,24565,1753],{},[12488,24567,24568],{},"85",[12488,24570,24571],{},"U",[12488,24573,24574],{},"117",[12488,24576,24577],{},"u",[12356,24579,24580,24582,24585,24588,24590,24593,24596,24599],{},[12488,24581,5877],{},[12488,24583,24584],{},"SYN",[12488,24586,24587],{},"54",[12488,24589,7907],{},[12488,24591,24592],{},"86",[12488,24594,24595],{},"V",[12488,24597,24598],{},"118",[12488,24600,24601],{},"v",[12356,24603,24604,24607,24610,24612,24614,24617,24620,24623],{},[12488,24605,24606],{},"23",[12488,24608,24609],{},"TB",[12488,24611,1795],{},[12488,24613,24224],{},[12488,24615,24616],{},"87",[12488,24618,24619],{},"W",[12488,24621,24622],{},"119",[12488,24624,24625],{},"w",[12356,24627,24628,24630,24633,24636,24638,24641,24644,24646],{},[12488,24629,10876],{},[12488,24631,24632],{},"CAN",[12488,24634,24635],{},"56",[12488,24637,24250],{},[12488,24639,24640],{},"88",[12488,24642,24643],{},"X",[12488,24645,4384],{},[12488,24647,24648],{},"x",[12356,24650,24651,24653,24656,24659,24661,24664,24667,24670],{},[12488,24652,4255],{},[12488,24654,24655],{},"EM",[12488,24657,24658],{},"57",[12488,24660,24273],{},[12488,24662,24663],{},"89",[12488,24665,24666],{},"Y",[12488,24668,24669],{},"121",[12488,24671,24672],{},"y",[12356,24674,24675,24678,24681,24684,24686,24689,24692,24695],{},[12488,24676,24677],{},"26",[12488,24679,24680],{},"SUB",[12488,24682,24683],{},"58",[12488,24685,20934],{},[12488,24687,24688],{},"90",[12488,24690,24691],{},"Z",[12488,24693,24694],{},"122",[12488,24696,24697],{},"z",[12356,24699,24700,24703,24706,24709,24711,24714,24716,24719],{},[12488,24701,24702],{},"27",[12488,24704,24705],{},"ESC",[12488,24707,24708],{},"59",[12488,24710,23934],{},[12488,24712,24713],{},"91",[12488,24715,17263],{},[12488,24717,24718],{},"123",[12488,24720,24721],{},"{",[12356,24723,24724,24726,24729,24731,24733,24736,24738,24741],{},[12488,24725,1726],{},[12488,24727,24728],{},"FS",[12488,24730,10814],{},[12488,24732,166],{},[12488,24734,24735],{},"92",[12488,24737,13083],{},[12488,24739,24740],{},"124",[12488,24742,24743],{},"|",[12356,24745,24746,24749,24752,24755,24757,24760,24762,24765],{},[12488,24747,24748],{},"29",[12488,24750,24751],{},"GS",[12488,24753,24754],{},"61",[12488,24756,189],{},[12488,24758,24759],{},"93",[12488,24761,18375],{},[12488,24763,24764],{},"125",[12488,24766,886],{},[12356,24768,24769,24771,24774,24777,24779,24782,24784,24786],{},[12488,24770,8920],{},[12488,24772,24773],{},"RS",[12488,24775,24776],{},"62",[12488,24778,6760],{},[12488,24780,24781],{},"94",[12488,24783,22467],{},[12488,24785,19426],{},[12488,24787,24788],{},"`",[12356,24790,24791,24794,24797,24800,24802,24805,24808,24811],{},[12488,24792,24793],{},"31",[12488,24795,24796],{},"US",[12488,24798,24799],{},"63",[12488,24801,18365],{},[12488,24803,24804],{},"95",[12488,24806,24807],{},"_",[12488,24809,24810],{},"127",[12488,24812,24813],{},"DEL",[14,24815,24816,24817,24820],{},"ASCII 码大致由以下",[61,24818,24819],{},"两部分组","成：",[103,24822,24823,24830],{},[106,24824,24825,24826,24829],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[61,24827,24828],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[106,24831,24832,24833,24836],{},"ASCII 打印字符：数字 ",[61,24834,24835],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[42,24838,24840],{"id":24839},"_134转义字符","1.3.4转义字符",[151,24842,24844],{"className":23872,"code":24843,"language":23874,"meta":25,"style":25},"\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",[49,24845,24846,24851,24867,24881,24886,24899,24904],{"__ignoreMap":25},[159,24847,24848],{"class":161,"line":162},[159,24849,24850],{"class":1135},"\u002F\u002F换行符\n",[159,24852,24853,24856,24859,24862,24864],{"class":161,"line":176},[159,24854,24855],{"class":165},"cout ",[159,24857,24858],{"class":1142},"\u003C\u003C",[159,24860,24861],{"class":192},"\"hello world\u002Fn\"",[159,24863,23934],{"class":165},[159,24865,24866],{"class":1135}," \u002F\u002F就等同于如下：\n",[159,24868,24869,24871,24873,24876,24878],{"class":161,"line":203},[159,24870,24855],{"class":165},[159,24872,24858],{"class":1142},[159,24874,24875],{"class":192},"\"hello world\"",[159,24877,24858],{"class":1142},[159,24879,24880],{"class":165},"endl;\n",[159,24882,24883],{"class":161,"line":223},[159,24884,24885],{"class":1135},"\u002F\u002F反斜杠\n",[159,24887,24888,24890,24892,24895,24897],{"class":161,"line":233},[159,24889,24855],{"class":165},[159,24891,24858],{"class":1142},[159,24893,24894],{"class":192},"\"\u002F\u002F\"",[159,24896,24858],{"class":1142},[159,24898,24880],{"class":165},[159,24900,24901],{"class":161,"line":239},[159,24902,24903],{"class":1135},"\u002F\u002F水平制表符\n",[159,24905,24906,24908,24910,24913,24916,24919,24921,24924],{"class":161,"line":245},[159,24907,24855],{"class":165},[159,24909,24858],{"class":1142},[159,24911,24912],{"class":192},"\"aaaa",[159,24914,24915],{"class":1146},"\\t",[159,24917,24918],{"class":192},"helloworld\"",[159,24920,24858],{"class":1142},[159,24922,24923],{"class":165},"endl;",[159,24925,24926],{"class":1135}," \u002F\u002F输出窗口时有对齐效果\n",[42,24928,24930],{"id":24929},"_135字符串型","1.3.5字符串型",[14,24932,24933,24934,24936],{},"char 变量名",[159,24935],{},"=\"字符串值\"",[151,24938,24940],{"className":23872,"code":24939,"language":23874,"meta":25,"style":25},"\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",[49,24941,24942,24947,24952,24957,24962,24975,24988,24993,24998,25009],{"__ignoreMap":25},[159,24943,24944],{"class":161,"line":162},[159,24945,24946],{"class":1135},"\u002F\u002Fc风格字符串\n",[159,24948,24949],{"class":161,"line":176},[159,24950,24951],{"class":1135},"\u002F\u002F注意事项：\n",[159,24953,24954],{"class":161,"line":203},[159,24955,24956],{"class":1135},"\u002F\u002F1.char字符串名[]\n",[159,24958,24959],{"class":161,"line":223},[159,24960,24961],{"class":1135},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[159,24963,24964,24966,24969,24971,24973],{"class":161,"line":233},[159,24965,23972],{"class":1142},[159,24967,24968],{"class":165}," str[]",[159,24970,189],{"class":1142},[159,24972,24875],{"class":192},[159,24974,1492],{"class":165},[159,24976,24977,24979,24981,24984,24986],{"class":161,"line":239},[159,24978,24855],{"class":165},[159,24980,24858],{"class":1142},[159,24982,24983],{"class":165},"str",[159,24985,24858],{"class":1142},[159,24987,24880],{"class":165},[159,24989,24990],{"class":161,"line":245},[159,24991,24992],{"class":1135},"\u002F\u002Fc++风格字符串\n",[159,24994,24995],{"class":161,"line":251},[159,24996,24997],{"class":1135},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[159,24999,25000,25003,25005,25007],{"class":161,"line":261},[159,25001,25002],{"class":165},"string str2",[159,25004,189],{"class":1142},[159,25006,24875],{"class":192},[159,25008,1492],{"class":165},[159,25010,25011,25013,25015,25018,25020],{"class":161,"line":603},[159,25012,24855],{"class":165},[159,25014,24858],{"class":1142},[159,25016,25017],{"class":165},"str2",[159,25019,24858],{"class":1142},[159,25021,24880],{"class":165},[42,25023,25025],{"id":25024},"_136布尔类型bool","1.3.6布尔类型bool",[151,25027,25029],{"className":23872,"code":25028,"language":23874,"meta":25,"style":25},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[49,25030,25031,25045],{"__ignoreMap":25},[159,25032,25033,25036,25039,25041,25043],{"class":161,"line":162},[159,25034,25035],{"class":1142},"bool",[159,25037,25038],{"class":165}," flag",[159,25040,189],{"class":1142},[159,25042,13082],{"class":1146},[159,25044,1492],{"class":165},[159,25046,25047,25050,25053,25056,25058,25060],{"class":161,"line":176},[159,25048,25049],{"class":165},"cout",[159,25051,25052],{"class":1142},"\u003C\u003Csizeof",[159,25054,25055],{"class":165},"(flag)",[159,25057,24858],{"class":1142},[159,25059,24923],{"class":165},[159,25061,25062],{"class":1135}," \u002F\u002F查看布尔占内存空间\n",[37,25064,25066],{"id":25065},"_14键盘输入cin","1.4键盘输入cin",[151,25068,25070],{"className":23872,"code":25069,"language":23874,"meta":25,"style":25},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[49,25071,25072,25084,25101,25112],{"__ignoreMap":25},[159,25073,25074,25076,25078,25080,25082],{"class":161,"line":162},[159,25075,23886],{"class":1142},[159,25077,7885],{"class":165},[159,25079,189],{"class":1142},[159,25081,1489],{"class":1146},[159,25083,1492],{"class":165},[159,25085,25086,25088,25090,25093,25095,25097,25099],{"class":161,"line":176},[159,25087,25049],{"class":165},[159,25089,24858],{"class":1142},[159,25091,25092],{"class":192},"\"请给整型变量a赋值\"",[159,25094,24858],{"class":1142},[159,25096,8085],{"class":165},[159,25098,24858],{"class":1142},[159,25100,24880],{"class":165},[159,25102,25103,25106,25109],{"class":161,"line":203},[159,25104,25105],{"class":165},"cin ",[159,25107,25108],{"class":1142},">>",[159,25110,25111],{"class":165}," a;\n",[159,25113,25114,25116,25118,25121,25124,25126,25128],{"class":161,"line":223},[159,25115,24855],{"class":165},[159,25117,24858],{"class":1142},[159,25119,25120],{"class":192}," \"整型变量a=\"",[159,25122,25123],{"class":1142}," \u003C\u003C",[159,25125,8085],{"class":165},[159,25127,24858],{"class":1142},[159,25129,24880],{"class":165},[37,25131,25133],{"id":25132},"_15运算符","1.5运算符",[42,25135,25137],{"id":25136},"_151算术运算符","1.5.1算术运算符",[14,25139,25140,25143],{},[23,25141],{"alt":25,"src":25142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[134,25145,25146,25149,25152],{},[106,25147,25148],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[106,25150,25151],{},"两个小数不可以做取模运算",[106,25153,25154],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[42,25156,25158],{"id":25157},"_152赋值运算符","1.5.2赋值运算符",[14,25160,25161],{},[23,25162],{"alt":25,"src":25163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[42,25165,25167],{"id":25166},"_153比较运算符","1.5.3比较运算符",[14,25169,25170],{},[23,25171],{"alt":25,"src":25172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[42,25174,25176],{"id":25175},"_154逻辑运算符","1.5.4逻辑运算符",[14,25178,25179],{},[23,25180],{"alt":25,"src":25181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[37,25183,25185],{"id":25184},"_16程序流程结构","1.6程序流程结构",[42,25187,25189],{"id":25188},"_161选择结构","1.6.1选择结构",[134,25191,25192],{},[106,25193,25194],{},"if语句\n单行、多行、多条件if语句",[151,25196,25198],{"className":23872,"code":25197,"language":23874,"meta":25,"style":25},"\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",[49,25199,25200,25205,25218,25223,25237,25241,25246,25255,25268,25272,25285,25289,25294,25298,25311,25315,25320,25339,25343,25356,25360,25386,25390,25406,25410,25414,25418,25431,25435],{"__ignoreMap":25},[159,25201,25202],{"class":161,"line":162},[159,25203,25204],{"class":1135},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[159,25206,25207,25209,25212,25214,25216],{"class":161,"line":176},[159,25208,18445],{"class":1142},[159,25210,25211],{"class":165},"(score",[159,25213,6760],{"class":1142},[159,25215,1583],{"class":1146},[159,25217,1165],{"class":165},[159,25219,25220],{"class":161,"line":203},[159,25221,25222],{"class":165},"{\n",[159,25224,25225,25228,25230,25233,25235],{"class":161,"line":223},[159,25226,25227],{"class":165},"    cout",[159,25229,24858],{"class":1142},[159,25231,25232],{"class":192},"'这是单行if语句'",[159,25234,24858],{"class":1142},[159,25236,24880],{"class":165},[159,25238,25239],{"class":161,"line":233},[159,25240,15685],{"class":165},[159,25242,25243],{"class":161,"line":239},[159,25244,25245],{"class":1135},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[159,25247,25248,25250,25252],{"class":161,"line":245},[159,25249,25105],{"class":165},[159,25251,25108],{"class":1142},[159,25253,25254],{"class":165}," score\n",[159,25256,25257,25259,25261,25264,25266],{"class":161,"line":251},[159,25258,18445],{"class":1142},[159,25260,25211],{"class":165},[159,25262,25263],{"class":1142},"\u003C=",[159,25265,1583],{"class":1146},[159,25267,1165],{"class":165},[159,25269,25270],{"class":161,"line":261},[159,25271,25222],{"class":165},[159,25273,25274,25276,25278,25281,25283],{"class":161,"line":603},[159,25275,25227],{"class":165},[159,25277,25108],{"class":1142},[159,25279,25280],{"class":192},"\"小于等于600\"",[159,25282,24858],{"class":1142},[159,25284,24880],{"class":165},[159,25286,25287],{"class":161,"line":621},[159,25288,15685],{"class":165},[159,25290,25291],{"class":161,"line":634},[159,25292,25293],{"class":1142},"else\n",[159,25295,25296],{"class":161,"line":640},[159,25297,25222],{"class":165},[159,25299,25300,25302,25304,25307,25309],{"class":161,"line":1075},[159,25301,25227],{"class":165},[159,25303,25108],{"class":1142},[159,25305,25306],{"class":192},"\"大于600\"",[159,25308,25108],{"class":1142},[159,25310,24880],{"class":165},[159,25312,25313],{"class":161,"line":1081},[159,25314,15685],{"class":165},[159,25316,25317],{"class":161,"line":1091},[159,25318,25319],{"class":1135},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[159,25321,25322,25324,25326,25328,25330,25333,25335,25337],{"class":161,"line":1100},[159,25323,18445],{"class":1142},[159,25325,11680],{"class":165},[159,25327,1489],{"class":1146},[159,25329,166],{"class":1142},[159,25331,25332],{"class":165},"num",[159,25334,166],{"class":1142},[159,25336,1596],{"class":1146},[159,25338,1165],{"class":165},[159,25340,25341],{"class":161,"line":1123},[159,25342,25222],{"class":165},[159,25344,25345,25347,25349,25352,25354],{"class":161,"line":1132},[159,25346,25227],{"class":165},[159,25348,24858],{"class":1142},[159,25350,25351],{"class":192},"\"小于100\"",[159,25353,24858],{"class":1142},[159,25355,24880],{"class":165},[159,25357,25358],{"class":161,"line":1139},[159,25359,15685],{"class":165},[159,25361,25362,25365,25368,25371,25373,25375,25378,25380,25382,25384],{"class":161,"line":1168},[159,25363,25364],{"class":1142},"else",[159,25366,25367],{"class":1142}," if",[159,25369,25370],{"class":165}," (nmu",[159,25372,3822],{"class":1142},[159,25374,1596],{"class":1146},[159,25376,25377],{"class":1142},"&&",[159,25379,25332],{"class":165},[159,25381,166],{"class":1142},[159,25383,13303],{"class":1146},[159,25385,1165],{"class":165},[159,25387,25388],{"class":161,"line":1174},[159,25389,25222],{"class":165},[159,25391,25392,25394,25396,25399,25401,25403],{"class":161,"line":1180},[159,25393,25227],{"class":165},[159,25395,24858],{"class":1142},[159,25397,25398],{"class":192},"\"不小于100且小于200\"",[159,25400,24858],{"class":1142},[159,25402,24923],{"class":165},[159,25404,25405],{"class":1135}," \u002F\u002F可以无限else if,python中是elif：\n",[159,25407,25408],{"class":161,"line":1194},[159,25409,15685],{"class":165},[159,25411,25412],{"class":161,"line":1200},[159,25413,25293],{"class":1142},[159,25415,25416],{"class":161,"line":1221},[159,25417,25222],{"class":165},[159,25419,25420,25422,25424,25427,25429],{"class":161,"line":1230},[159,25421,25227],{"class":165},[159,25423,24858],{"class":1142},[159,25425,25426],{"class":192},"\"不小于200\"",[159,25428,24858],{"class":1142},[159,25430,24880],{"class":165},[159,25432,25433],{"class":161,"line":1247},[159,25434,15685],{"class":165},[159,25436,25437],{"class":161,"line":1265},[159,25438,25439],{"class":1135},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[134,25441,25442],{"start":176},[106,25443,25444],{},"三目运算符",[151,25446,25448],{"className":23872,"code":25447,"language":23874,"meta":25,"style":25},"\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",[49,25449,25450,25455,25460,25486,25508,25525,25530,25553,25568],{"__ignoreMap":25},[159,25451,25452],{"class":161,"line":162},[159,25453,25454],{"class":1135},"\u002F\u002F创建三个变量a,b,c\n",[159,25456,25457],{"class":161,"line":176},[159,25458,25459],{"class":1135},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[159,25461,25462,25464,25466,25468,25470,25473,25475,25477,25480,25482,25484],{"class":161,"line":203},[159,25463,23886],{"class":1142},[159,25465,7885],{"class":165},[159,25467,189],{"class":1142},[159,25469,1739],{"class":1146},[159,25471,25472],{"class":165},",b",[159,25474,189],{"class":1142},[159,25476,1964],{"class":1146},[159,25478,25479],{"class":165},",c",[159,25481,189],{"class":1142},[159,25483,1489],{"class":1146},[159,25485,1492],{"class":165},[159,25487,25488,25490,25492,25495,25497,25499,25501,25503,25505],{"class":161,"line":223},[159,25489,24151],{"class":165},[159,25491,189],{"class":1142},[159,25493,25494],{"class":165},"(a",[159,25496,6760],{"class":1142},[159,25498,24127],{"class":165},[159,25500,18365],{"class":1142},[159,25502,8085],{"class":165},[159,25504,20934],{"class":1142},[159,25506,25507],{"class":165},"b)\n",[159,25509,25510,25512,25514,25517,25519,25521,25523],{"class":161,"line":233},[159,25511,25049],{"class":165},[159,25513,24858],{"class":1142},[159,25515,25516],{"class":192},"\"c=\"",[159,25518,24858],{"class":1142},[159,25520,24151],{"class":165},[159,25522,24858],{"class":1142},[159,25524,24880],{"class":165},[159,25526,25527],{"class":161,"line":239},[159,25528,25529],{"class":1135},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[159,25531,25532,25534,25536,25538,25540,25542,25544,25547,25549,25551],{"class":161,"line":245},[159,25533,25494],{"class":165},[159,25535,6760],{"class":1142},[159,25537,24127],{"class":165},[159,25539,18365],{"class":1142},[159,25541,8085],{"class":165},[159,25543,20934],{"class":1142},[159,25545,25546],{"class":165},"b)",[159,25548,189],{"class":1142},[159,25550,1596],{"class":1146},[159,25552,1492],{"class":165},[159,25554,25555,25557,25559,25561,25563,25565],{"class":161,"line":251},[159,25556,25049],{"class":165},[159,25558,24858],{"class":1142},[159,25560,8085],{"class":165},[159,25562,24858],{"class":1142},[159,25564,24923],{"class":165},[159,25566,25567],{"class":1135}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[159,25569,25570,25572,25574,25576,25578,25580],{"class":161,"line":261},[159,25571,25049],{"class":165},[159,25573,24858],{"class":1142},[159,25575,24127],{"class":165},[159,25577,24858],{"class":1142},[159,25579,24923],{"class":165},[159,25581,25582],{"class":1135}," \u002F\u002F10   a>b,b还是原值\n",[134,25584,25585],{"start":203},[106,25586,25587],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[151,25589,25591],{"className":23872,"code":25590,"language":23874,"meta":25,"style":25},"\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",[49,25592,25593,25598,25606,25619,25628,25632,25646,25659,25669,25677,25682,25706,25727,25749,25770,25792,25813,25833,25837],{"__ignoreMap":25},[159,25594,25595],{"class":161,"line":162},[159,25596,25597],{"class":1135},"\u002F\u002F案例-电影打分\n",[159,25599,25600,25603],{"class":161,"line":176},[159,25601,25602],{"class":1142},"#include",[159,25604,25605],{"class":192},"\u003Ciostream>\n",[159,25607,25608,25611,25614,25617],{"class":161,"line":203},[159,25609,25610],{"class":1142},"using",[159,25612,25613],{"class":1142}," namespace",[159,25615,25616],{"class":185}," std",[159,25618,1492],{"class":165},[159,25620,25621,25623,25626],{"class":161,"line":223},[159,25622,23886],{"class":1142},[159,25624,25625],{"class":185}," main",[159,25627,5158],{"class":165},[159,25629,25630],{"class":161,"line":233},[159,25631,25222],{"class":165},[159,25633,25634,25637,25640,25642,25644],{"class":161,"line":239},[159,25635,25636],{"class":1142},"    int",[159,25638,25639],{"class":165}," score",[159,25641,189],{"class":1142},[159,25643,1489],{"class":1146},[159,25645,1492],{"class":165},[159,25647,25648,25650,25652,25655,25657],{"class":161,"line":245},[159,25649,25227],{"class":165},[159,25651,24858],{"class":1142},[159,25653,25654],{"class":192},"\"电影打分：\"",[159,25656,24858],{"class":1142},[159,25658,24880],{"class":165},[159,25660,25661,25664,25666],{"class":161,"line":251},[159,25662,25663],{"class":165},"    cin",[159,25665,25108],{"class":1142},[159,25667,25668],{"class":165},"score;\n",[159,25670,25671,25674],{"class":161,"line":261},[159,25672,25673],{"class":1142},"    switch",[159,25675,25676],{"class":165},"(score)\n",[159,25678,25679],{"class":161,"line":603},[159,25680,25681],{"class":165},"    {\n",[159,25683,25684,25687,25689,25692,25694,25697,25699,25701,25704],{"class":161,"line":621},[159,25685,25686],{"class":1142},"        case",[159,25688,7664],{"class":1146},[159,25690,25691],{"class":165},":cout",[159,25693,24858],{"class":1142},[159,25695,25696],{"class":192},"\"经典\"",[159,25698,24858],{"class":1142},[159,25700,24923],{"class":165},[159,25702,25703],{"class":1142},"break",[159,25705,1492],{"class":165},[159,25707,25708,25710,25713,25715,25717,25719,25721,25723,25725],{"class":161,"line":634},[159,25709,25686],{"class":1142},[159,25711,25712],{"class":1146}," 9",[159,25714,25691],{"class":165},[159,25716,24858],{"class":1142},[159,25718,25696],{"class":192},[159,25720,24858],{"class":1142},[159,25722,24923],{"class":165},[159,25724,25703],{"class":1142},[159,25726,1492],{"class":165},[159,25728,25729,25731,25734,25736,25738,25741,25743,25745,25747],{"class":161,"line":640},[159,25730,25686],{"class":1142},[159,25732,25733],{"class":1146}," 8",[159,25735,25691],{"class":165},[159,25737,24858],{"class":1142},[159,25739,25740],{"class":192},"\"非常好\"",[159,25742,24858],{"class":1142},[159,25744,24923],{"class":165},[159,25746,25703],{"class":1142},[159,25748,1492],{"class":165},[159,25750,25751,25753,25756,25758,25760,25762,25764,25766,25768],{"class":161,"line":1075},[159,25752,25686],{"class":1142},[159,25754,25755],{"class":1146}," 7",[159,25757,25691],{"class":165},[159,25759,24858],{"class":1142},[159,25761,25740],{"class":192},[159,25763,24858],{"class":1142},[159,25765,24923],{"class":165},[159,25767,25703],{"class":1142},[159,25769,1492],{"class":165},[159,25771,25772,25774,25777,25779,25781,25784,25786,25788,25790],{"class":161,"line":1081},[159,25773,25686],{"class":1142},[159,25775,25776],{"class":1146}," 6",[159,25778,25691],{"class":165},[159,25780,24858],{"class":1142},[159,25782,25783],{"class":192},"\"一般\"",[159,25785,24858],{"class":1142},[159,25787,24923],{"class":165},[159,25789,25703],{"class":1142},[159,25791,1492],{"class":165},[159,25793,25794,25796,25799,25801,25803,25805,25807,25809,25811],{"class":161,"line":1091},[159,25795,25686],{"class":1142},[159,25797,25798],{"class":1146}," 5",[159,25800,25691],{"class":165},[159,25802,24858],{"class":1142},[159,25804,25783],{"class":192},[159,25806,24858],{"class":1142},[159,25808,24923],{"class":165},[159,25810,25703],{"class":1142},[159,25812,1492],{"class":165},[159,25814,25815,25818,25820,25822,25825,25827,25829,25831],{"class":161,"line":1100},[159,25816,25817],{"class":1142},"        default",[159,25819,25691],{"class":165},[159,25821,24858],{"class":1142},[159,25823,25824],{"class":192},"\"烂片\"",[159,25826,24858],{"class":1142},[159,25828,24923],{"class":165},[159,25830,25703],{"class":1142},[159,25832,1492],{"class":165},[159,25834,25835],{"class":161,"line":1123},[159,25836,1508],{"class":165},[159,25838,25839],{"class":161,"line":1132},[159,25840,15685],{"class":165},[14,25842,25843],{},"if和switch区别：",[103,25845,25846,25849],{},[106,25847,25848],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[106,25850,25851],{},"switch优点：结构清晰，执行效率高",[42,25853,25855],{"id":25854},"_162循环结构","1.6.2循环结构",[134,25857,25858],{},[106,25859,25860],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[151,25862,25864],{"className":23872,"code":25863,"language":23874,"meta":25,"style":25},"\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",[49,25865,25866,25871,25879,25883,25895,25909,25913,25933,25942,25946,25958],{"__ignoreMap":25},[159,25867,25868],{"class":161,"line":162},[159,25869,25870],{"class":1135},"\u002F\u002F打印0-9数字\n",[159,25872,25873,25875,25877],{"class":161,"line":176},[159,25874,23886],{"class":1142},[159,25876,25625],{"class":185},[159,25878,5158],{"class":165},[159,25880,25881],{"class":161,"line":203},[159,25882,25222],{"class":165},[159,25884,25885,25887,25889,25891,25893],{"class":161,"line":223},[159,25886,25636],{"class":1142},[159,25888,5148],{"class":165},[159,25890,189],{"class":1142},[159,25892,1489],{"class":1146},[159,25894,1492],{"class":165},[159,25896,25897,25900,25903,25905,25907],{"class":161,"line":233},[159,25898,25899],{"class":1142},"    while",[159,25901,25902],{"class":165},"(num",[159,25904,166],{"class":1142},[159,25906,1964],{"class":1146},[159,25908,1165],{"class":165},[159,25910,25911],{"class":161,"line":239},[159,25912,25681],{"class":165},[159,25914,25915,25918,25921,25923,25925,25927,25930],{"class":161,"line":245},[159,25916,25917],{"class":185},"       std",[159,25919,25920],{"class":165},"::cout",[159,25922,24858],{"class":1142},[159,25924,25332],{"class":165},[159,25926,24858],{"class":1142},[159,25928,25929],{"class":185},"std",[159,25931,25932],{"class":165},"::endl;\n",[159,25934,25935,25938,25940],{"class":161,"line":251},[159,25936,25937],{"class":165},"        num",[159,25939,11705],{"class":1142},[159,25941,1492],{"class":165},[159,25943,25944],{"class":161,"line":261},[159,25945,1508],{"class":165},[159,25947,25948,25951,25953,25956],{"class":161,"line":603},[159,25949,25950],{"class":185},"    system",[159,25952,1159],{"class":165},[159,25954,25955],{"class":192},"\"pause\"",[159,25957,1165],{"class":165},[159,25959,25960],{"class":161,"line":621},[159,25961,15685],{"class":165},[14,25963,25964],{},"注意：写好循环条件，避免死循环情况",[151,25966,25968],{"className":23872,"code":25967,"language":23874,"meta":25,"style":25},"\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",[49,25969,25970,25975,25982,25989,25999,26007,26011,26016,26042,26046,26051,26059,26085,26090,26095,26108,26118,26122,26132,26137,26149,26154,26168,26172,26187,26191,26204,26208,26213,26217,26230,26237,26241,26246,26251,26255],{"__ignoreMap":25},[159,25971,25972],{"class":161,"line":162},[159,25973,25974],{"class":1135},"\u002F\u002F循环结构-猜数字\n",[159,25976,25977,25979],{"class":161,"line":176},[159,25978,25602],{"class":1142},[159,25980,25981],{"class":192}," \u003Ciostream>\n",[159,25983,25984,25986],{"class":161,"line":203},[159,25985,25602],{"class":1142},[159,25987,25988],{"class":192}," \u003Cctime>\n",[159,25990,25991,25993,25995,25997],{"class":161,"line":223},[159,25992,25610],{"class":1142},[159,25994,25613],{"class":1142},[159,25996,25616],{"class":185},[159,25998,1492],{"class":165},[159,26000,26001,26003,26005],{"class":161,"line":233},[159,26002,23886],{"class":1142},[159,26004,25625],{"class":185},[159,26006,5158],{"class":165},[159,26008,26009],{"class":161,"line":239},[159,26010,25222],{"class":165},[159,26012,26013],{"class":161,"line":245},[159,26014,26015],{"class":1135},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[159,26017,26018,26021,26024,26027,26030,26032,26034,26036,26039],{"class":161,"line":251},[159,26019,26020],{"class":185},"    srand",[159,26022,26023],{"class":165},"((",[159,26025,26026],{"class":1142},"unsigned",[159,26028,26029],{"class":1142}," int",[159,26031,18387],{"class":165},[159,26033,21267],{"class":185},[159,26035,1159],{"class":165},[159,26037,26038],{"class":1146},"NULL",[159,26040,26041],{"class":165},"));\n",[159,26043,26044],{"class":161,"line":261},[159,26045,590],{"emptyLinePlaceholder":589},[159,26047,26048],{"class":161,"line":603},[159,26049,26050],{"class":1135},"    \u002F\u002F1.系统生成随机数\n",[159,26052,26053,26056],{"class":161,"line":621},[159,26054,26055],{"class":1135},"    \u002F\u002Frand()%100",[159,26057,26058],{"class":1135}," \u002F\u002F生成0-99的随机数\n",[159,26060,26061,26063,26065,26067,26070,26072,26074,26076,26078,26080,26082],{"class":161,"line":634},[159,26062,25636],{"class":1142},[159,26064,5148],{"class":165},[159,26066,189],{"class":1142},[159,26068,26069],{"class":185},"rand",[159,26071,21042],{"class":165},[159,26073,1662],{"class":1142},[159,26075,1596],{"class":1146},[159,26077,2704],{"class":1142},[159,26079,4932],{"class":1146},[159,26081,23934],{"class":165},[159,26083,26084],{"class":1135}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[159,26086,26087],{"class":161,"line":640},[159,26088,26089],{"class":1135},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[159,26091,26092],{"class":161,"line":1075},[159,26093,26094],{"class":1135},"    \u002F\u002F2.玩家猜测\n",[159,26096,26097,26099,26102,26104,26106],{"class":161,"line":1081},[159,26098,25636],{"class":1142},[159,26100,26101],{"class":165}," val",[159,26103,189],{"class":1142},[159,26105,1489],{"class":1146},[159,26107,1492],{"class":165},[159,26109,26110,26112,26114,26116],{"class":161,"line":1091},[159,26111,25899],{"class":1142},[159,26113,11680],{"class":165},[159,26115,4932],{"class":1146},[159,26117,1165],{"class":165},[159,26119,26120],{"class":161,"line":1100},[159,26121,25681],{"class":165},[159,26123,26124,26127,26129],{"class":161,"line":1123},[159,26125,26126],{"class":165},"        cin",[159,26128,25108],{"class":1142},[159,26130,26131],{"class":165},"val;\n",[159,26133,26134],{"class":161,"line":1132},[159,26135,26136],{"class":1135},"        \u002F\u002F3.判断玩家猜测\n",[159,26138,26139,26141,26144,26146],{"class":161,"line":1139},[159,26140,17003],{"class":1142},[159,26142,26143],{"class":165},"(val",[159,26145,166],{"class":1142},[159,26147,26148],{"class":165},"num) \n",[159,26150,26151],{"class":161,"line":1168},[159,26152,26153],{"class":165},"        {\n",[159,26155,26156,26159,26161,26164,26166],{"class":161,"line":1174},[159,26157,26158],{"class":165},"            cout",[159,26160,24858],{"class":1142},[159,26162,26163],{"class":192},"\"猜小了！\"",[159,26165,24858],{"class":1142},[159,26167,24880],{"class":165},[159,26169,26170],{"class":161,"line":1180},[159,26171,7530],{"class":165},[159,26173,26174,26177,26179,26182,26184],{"class":161,"line":1194},[159,26175,26176],{"class":1142},"        else",[159,26178,25367],{"class":1142},[159,26180,26181],{"class":165}," (val",[159,26183,6760],{"class":1142},[159,26185,26186],{"class":165},"num)\n",[159,26188,26189],{"class":161,"line":1200},[159,26190,26153],{"class":165},[159,26192,26193,26195,26197,26200,26202],{"class":161,"line":1221},[159,26194,26158],{"class":165},[159,26196,24858],{"class":1142},[159,26198,26199],{"class":192},"\"猜大了！\"",[159,26201,24858],{"class":1142},[159,26203,24880],{"class":165},[159,26205,26206],{"class":161,"line":1230},[159,26207,7530],{"class":165},[159,26209,26210],{"class":161,"line":1247},[159,26211,26212],{"class":1142},"        else\n",[159,26214,26215],{"class":161,"line":1265},[159,26216,26153],{"class":165},[159,26218,26219,26221,26223,26226,26228],{"class":161,"line":1277},[159,26220,26158],{"class":165},[159,26222,24858],{"class":1142},[159,26224,26225],{"class":192},"\"猜对了！\"",[159,26227,24858],{"class":1142},[159,26229,24880],{"class":165},[159,26231,26232,26235],{"class":161,"line":1283},[159,26233,26234],{"class":1142},"            break",[159,26236,1492],{"class":165},[159,26238,26239],{"class":161,"line":1294},[159,26240,7530],{"class":165},[159,26242,26243],{"class":161,"line":1305},[159,26244,26245],{"class":1135},"        \u002F\u002F猜对 退出游戏\n",[159,26247,26248],{"class":161,"line":1311},[159,26249,26250],{"class":1135},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[159,26252,26253],{"class":161,"line":1322},[159,26254,1508],{"class":165},[159,26256,26257],{"class":161,"line":1327},[159,26258,15685],{"class":165},[134,26260,26261],{"start":176},[106,26262,26263,26264,26267],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[61,26265,26266],{},"do...while会先执行一次循环语句","，在判断循环语句",[151,26269,26271],{"className":23872,"code":26270,"language":23874,"meta":25,"style":25},"\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",[49,26272,26273,26278,26286,26290,26302,26309,26313,26330,26336,26340,26352,26362],{"__ignoreMap":25},[159,26274,26275],{"class":161,"line":162},[159,26276,26277],{"class":1135},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[159,26279,26280,26282,26284],{"class":161,"line":176},[159,26281,23886],{"class":1142},[159,26283,25625],{"class":185},[159,26285,5158],{"class":165},[159,26287,26288],{"class":161,"line":203},[159,26289,25222],{"class":165},[159,26291,26292,26294,26296,26298,26300],{"class":161,"line":223},[159,26293,25636],{"class":1142},[159,26295,5148],{"class":165},[159,26297,189],{"class":1142},[159,26299,1489],{"class":1146},[159,26301,1492],{"class":165},[159,26303,26304,26307],{"class":161,"line":233},[159,26305,26306],{"class":1142},"    do",[159,26308,17636],{"class":165},[159,26310,26311],{"class":161,"line":239},[159,26312,25681],{"class":165},[159,26314,26315,26318,26320,26322,26324,26326,26328],{"class":161,"line":245},[159,26316,26317],{"class":185},"        std",[159,26319,25920],{"class":165},[159,26321,24858],{"class":1142},[159,26323,25332],{"class":165},[159,26325,24858],{"class":1142},[159,26327,25929],{"class":185},[159,26329,25932],{"class":165},[159,26331,26332,26334],{"class":161,"line":251},[159,26333,25937],{"class":165},[159,26335,3813],{"class":1142},[159,26337,26338],{"class":161,"line":261},[159,26339,1508],{"class":165},[159,26341,26342,26344,26346,26348,26350],{"class":161,"line":603},[159,26343,25899],{"class":1142},[159,26345,25902],{"class":165},[159,26347,166],{"class":1142},[159,26349,1964],{"class":1146},[159,26351,1953],{"class":165},[159,26353,26354,26356,26358,26360],{"class":161,"line":621},[159,26355,25950],{"class":185},[159,26357,1159],{"class":165},[159,26359,25955],{"class":192},[159,26361,1953],{"class":165},[159,26363,26364],{"class":161,"line":634},[159,26365,15685],{"class":165},[14,26367,26368],{},"案例-水仙花数",[14,26370,26371],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,26373,26374],{},"例如：1^3+5^3+3^3=153",[14,26376,26377],{},"请用do...while语句，求出所有3位数的水仙花数",[151,26379,26381],{"className":23872,"code":26380,"language":23874,"meta":25,"style":25},"#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",[49,26382,26383,26389,26399,26407,26411,26416,26428,26434,26438,26443,26459,26475,26491,26506,26525,26540,26588,26592,26604,26608,26616,26620,26634],{"__ignoreMap":25},[159,26384,26385,26387],{"class":161,"line":162},[159,26386,25602],{"class":1142},[159,26388,25981],{"class":192},[159,26390,26391,26393,26395,26397],{"class":161,"line":176},[159,26392,25610],{"class":1142},[159,26394,25613],{"class":1142},[159,26396,25616],{"class":185},[159,26398,1492],{"class":165},[159,26400,26401,26403,26405],{"class":161,"line":203},[159,26402,23886],{"class":1142},[159,26404,25625],{"class":185},[159,26406,5158],{"class":165},[159,26408,26409],{"class":161,"line":223},[159,26410,25222],{"class":165},[159,26412,26413],{"class":161,"line":233},[159,26414,26415],{"class":1135},"    \u002F\u002F1.先打印所有三位数字\n",[159,26417,26418,26420,26422,26424,26426],{"class":161,"line":239},[159,26419,25636],{"class":1142},[159,26421,5148],{"class":165},[159,26423,189],{"class":1142},[159,26425,1596],{"class":1146},[159,26427,1492],{"class":165},[159,26429,26430,26432],{"class":161,"line":245},[159,26431,26306],{"class":1142},[159,26433,17636],{"class":165},[159,26435,26436],{"class":161,"line":251},[159,26437,25681],{"class":165},[159,26439,26440],{"class":161,"line":261},[159,26441,26442],{"class":1135},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[159,26444,26445,26448,26450,26452,26454,26456],{"class":161,"line":603},[159,26446,26447],{"class":1142},"        int",[159,26449,7885],{"class":165},[159,26451,189],{"class":1142},[159,26453,1489],{"class":1146},[159,26455,23934],{"class":165},[159,26457,26458],{"class":1135}," \u002F\u002F个位\n",[159,26460,26461,26463,26466,26468,26470,26472],{"class":161,"line":621},[159,26462,26447],{"class":1142},[159,26464,26465],{"class":165}," b",[159,26467,189],{"class":1142},[159,26469,1489],{"class":1146},[159,26471,23934],{"class":165},[159,26473,26474],{"class":1135}," \u002F\u002F十位\n",[159,26476,26477,26479,26482,26484,26486,26488],{"class":161,"line":634},[159,26478,26447],{"class":1142},[159,26480,26481],{"class":165}," c",[159,26483,189],{"class":1142},[159,26485,1489],{"class":1146},[159,26487,23934],{"class":165},[159,26489,26490],{"class":1135}," \u002F\u002F百位\n",[159,26492,26493,26496,26498,26500,26502,26504],{"class":161,"line":640},[159,26494,26495],{"class":165},"        a",[159,26497,189],{"class":1142},[159,26499,25332],{"class":165},[159,26501,1662],{"class":1142},[159,26503,1964],{"class":1146},[159,26505,1492],{"class":165},[159,26507,26508,26511,26513,26515,26517,26519,26521,26523],{"class":161,"line":1075},[159,26509,26510],{"class":165},"        b",[159,26512,189],{"class":1142},[159,26514,25332],{"class":165},[159,26516,13083],{"class":1142},[159,26518,1964],{"class":1146},[159,26520,1662],{"class":1142},[159,26522,1964],{"class":1146},[159,26524,1492],{"class":165},[159,26526,26527,26530,26532,26534,26536,26538],{"class":161,"line":1081},[159,26528,26529],{"class":165},"        c",[159,26531,189],{"class":1142},[159,26533,25332],{"class":165},[159,26535,13083],{"class":1142},[159,26537,1596],{"class":1146},[159,26539,1492],{"class":165},[159,26541,26542,26544,26546,26548,26550,26552,26554,26556,26558,26560,26562,26564,26566,26568,26570,26572,26574,26576,26579,26582,26585],{"class":161,"line":1091},[159,26543,17003],{"class":1142},[159,26545,25494],{"class":165},[159,26547,4777],{"class":1142},[159,26549,8085],{"class":165},[159,26551,4777],{"class":1142},[159,26553,8085],{"class":165},[159,26555,2704],{"class":1142},[159,26557,24127],{"class":165},[159,26559,4777],{"class":1142},[159,26561,24127],{"class":165},[159,26563,4777],{"class":1142},[159,26565,24127],{"class":165},[159,26567,2704],{"class":1142},[159,26569,24151],{"class":165},[159,26571,4777],{"class":1142},[159,26573,24151],{"class":165},[159,26575,4777],{"class":1142},[159,26577,26578],{"class":165},"c ",[159,26580,26581],{"class":1142},"==",[159,26583,26584],{"class":165}," num)",[159,26586,26587],{"class":1135}," \u002F\u002F如果是水仙花数，才打印\n",[159,26589,26590],{"class":161,"line":1100},[159,26591,26153],{"class":165},[159,26593,26594,26596,26598,26600,26602],{"class":161,"line":1123},[159,26595,26158],{"class":165},[159,26597,24858],{"class":1142},[159,26599,25332],{"class":165},[159,26601,24858],{"class":1142},[159,26603,24880],{"class":165},[159,26605,26606],{"class":161,"line":1132},[159,26607,7530],{"class":165},[159,26609,26610,26612,26614],{"class":161,"line":1139},[159,26611,25937],{"class":165},[159,26613,11705],{"class":1142},[159,26615,1492],{"class":165},[159,26617,26618],{"class":161,"line":1168},[159,26619,1508],{"class":165},[159,26621,26622,26624,26627,26629,26632],{"class":161,"line":1174},[159,26623,25899],{"class":1142},[159,26625,26626],{"class":165}," (num ",[159,26628,166],{"class":1142},[159,26630,26631],{"class":1146}," 1000",[159,26633,1953],{"class":165},[159,26635,26636],{"class":161,"line":1180},[159,26637,15685],{"class":165},[134,26639,26640],{"start":203},[106,26641,26642],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[151,26644,26646],{"className":23872,"code":26645,"language":23874,"meta":25,"style":25},"\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",[49,26647,26648,26653,26681,26685,26697,26701,26706,26717,26724,26728,26742,26746,26753,26757,26769,26778],{"__ignoreMap":25},[159,26649,26650],{"class":161,"line":162},[159,26651,26652],{"class":1135},"\u002F\u002F从数字0-9打印\n",[159,26654,26655,26658,26660,26662,26664,26666,26668,26671,26673,26675,26677,26679],{"class":161,"line":176},[159,26656,26657],{"class":1142},"for",[159,26659,1159],{"class":165},[159,26661,23886],{"class":1142},[159,26663,15383],{"class":165},[159,26665,189],{"class":1142},[159,26667,1489],{"class":1146},[159,26669,26670],{"class":165},";i",[159,26672,166],{"class":1142},[159,26674,1964],{"class":1146},[159,26676,26670],{"class":165},[159,26678,11705],{"class":1142},[159,26680,1165],{"class":165},[159,26682,26683],{"class":161,"line":203},[159,26684,25222],{"class":165},[159,26686,26687,26689,26691,26693,26695],{"class":161,"line":223},[159,26688,25227],{"class":165},[159,26690,24858],{"class":1142},[159,26692,1241],{"class":165},[159,26694,24858],{"class":1142},[159,26696,24880],{"class":165},[159,26698,26699],{"class":161,"line":233},[159,26700,15685],{"class":165},[159,26702,26703],{"class":161,"line":239},[159,26704,26705],{"class":1135},"\u002F\u002F上式可以进行拆分\n",[159,26707,26708,26710,26712,26714],{"class":161,"line":245},[159,26709,23886],{"class":1142},[159,26711,15383],{"class":165},[159,26713,189],{"class":1142},[159,26715,26716],{"class":1146},"0\n",[159,26718,26719,26721],{"class":161,"line":251},[159,26720,26657],{"class":1142},[159,26722,26723],{"class":165},"(;;;)\n",[159,26725,26726],{"class":161,"line":261},[159,26727,25222],{"class":165},[159,26729,26730,26733,26736,26738,26740],{"class":161,"line":603},[159,26731,26732],{"class":1142},"    if",[159,26734,26735],{"class":165},"(i",[159,26737,3822],{"class":1142},[159,26739,1964],{"class":1146},[159,26741,1165],{"class":165},[159,26743,26744],{"class":161,"line":621},[159,26745,25681],{"class":165},[159,26747,26748,26751],{"class":161,"line":634},[159,26749,26750],{"class":1142},"        break",[159,26752,1492],{"class":165},[159,26754,26755],{"class":161,"line":640},[159,26756,1508],{"class":165},[159,26758,26759,26761,26763,26765,26767],{"class":161,"line":1075},[159,26760,25227],{"class":165},[159,26762,24858],{"class":1142},[159,26764,1241],{"class":165},[159,26766,24858],{"class":1142},[159,26768,24880],{"class":165},[159,26770,26771,26774,26776],{"class":161,"line":1081},[159,26772,26773],{"class":165},"    i",[159,26775,11705],{"class":1142},[159,26777,1492],{"class":165},[159,26779,26780],{"class":161,"line":1091},[159,26781,15685],{"class":165},[14,26783,26784],{},"小练习",[151,26786,26788],{"className":23872,"code":26787,"language":23874,"meta":25,"style":25},"#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",[49,26789,26790,26796,26806,26814,26818,26823,26828,26854,26858,26863,26868,26909,26913,26926,26930,26934,26938,26950,26954,26958],{"__ignoreMap":25},[159,26791,26792,26794],{"class":161,"line":162},[159,26793,25602],{"class":1142},[159,26795,25605],{"class":192},[159,26797,26798,26800,26802,26804],{"class":161,"line":176},[159,26799,25610],{"class":1142},[159,26801,25613],{"class":1142},[159,26803,25616],{"class":185},[159,26805,1492],{"class":165},[159,26807,26808,26810,26812],{"class":161,"line":203},[159,26809,23886],{"class":1142},[159,26811,25625],{"class":185},[159,26813,5158],{"class":165},[159,26815,26816],{"class":161,"line":223},[159,26817,25222],{"class":165},[159,26819,26820],{"class":161,"line":233},[159,26821,26822],{"class":1135},"    \u002F\u002F敲桌子案例\n",[159,26824,26825],{"class":161,"line":239},[159,26826,26827],{"class":1135},"    \u002F\u002F1.先输出1-100的数字\n",[159,26829,26830,26832,26834,26836,26838,26840,26842,26844,26846,26848,26850,26852],{"class":161,"line":245},[159,26831,11677],{"class":1142},[159,26833,1159],{"class":165},[159,26835,23886],{"class":1142},[159,26837,15383],{"class":165},[159,26839,189],{"class":1142},[159,26841,4932],{"class":1146},[159,26843,11702],{"class":165},[159,26845,25263],{"class":1142},[159,26847,1596],{"class":1146},[159,26849,11702],{"class":165},[159,26851,11705],{"class":1142},[159,26853,1165],{"class":165},[159,26855,26856],{"class":161,"line":251},[159,26857,25681],{"class":165},[159,26859,26860],{"class":161,"line":261},[159,26861,26862],{"class":1135},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[159,26864,26865],{"class":161,"line":603},[159,26866,26867],{"class":1135},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[159,26869,26870,26872,26874,26876,26878,26880,26882,26885,26887,26889,26891,26893,26895,26897,26899,26901,26903,26905,26907],{"class":161,"line":621},[159,26871,17003],{"class":1142},[159,26873,26735],{"class":165},[159,26875,1662],{"class":1142},[159,26877,24224],{"class":1146},[159,26879,26581],{"class":1142},[159,26881,1489],{"class":1146},[159,26883,26884],{"class":1142}," ||",[159,26886,15383],{"class":165},[159,26888,1662],{"class":1142},[159,26890,1964],{"class":1146},[159,26892,26581],{"class":1142},[159,26894,24224],{"class":1146},[159,26896,26884],{"class":1142},[159,26898,15383],{"class":165},[159,26900,13083],{"class":1142},[159,26902,1964],{"class":1146},[159,26904,26581],{"class":1142},[159,26906,24224],{"class":1146},[159,26908,1165],{"class":165},[159,26910,26911],{"class":161,"line":634},[159,26912,26153],{"class":165},[159,26914,26915,26917,26919,26922,26924],{"class":161,"line":640},[159,26916,26158],{"class":165},[159,26918,24858],{"class":1142},[159,26920,26921],{"class":192},"\"敲桌子\"",[159,26923,24858],{"class":1142},[159,26925,24880],{"class":165},[159,26927,26928],{"class":161,"line":1075},[159,26929,7530],{"class":165},[159,26931,26932],{"class":161,"line":1081},[159,26933,26212],{"class":1142},[159,26935,26936],{"class":161,"line":1091},[159,26937,26153],{"class":165},[159,26939,26940,26942,26944,26946,26948],{"class":161,"line":1100},[159,26941,26158],{"class":165},[159,26943,24858],{"class":1142},[159,26945,1241],{"class":165},[159,26947,24858],{"class":1142},[159,26949,24880],{"class":165},[159,26951,26952],{"class":161,"line":1123},[159,26953,7530],{"class":165},[159,26955,26956],{"class":161,"line":1132},[159,26957,1508],{"class":165},[159,26959,26960],{"class":161,"line":1139},[159,26961,15685],{"class":165},[14,26963,26964],{},"嵌套实现星图",[151,26966,26968],{"className":23872,"code":26967,"language":23874,"meta":25,"style":25},"#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",[49,26969,26970,26976,26986,26994,26998,27024,27028,27057,27061,27072,27076,27085,27089],{"__ignoreMap":25},[159,26971,26972,26974],{"class":161,"line":162},[159,26973,25602],{"class":1142},[159,26975,25605],{"class":192},[159,26977,26978,26980,26982,26984],{"class":161,"line":176},[159,26979,25610],{"class":1142},[159,26981,25613],{"class":1142},[159,26983,25616],{"class":185},[159,26985,1492],{"class":165},[159,26987,26988,26990,26992],{"class":161,"line":203},[159,26989,23886],{"class":1142},[159,26991,25625],{"class":185},[159,26993,5158],{"class":165},[159,26995,26996],{"class":161,"line":223},[159,26997,25222],{"class":165},[159,26999,27000,27002,27004,27006,27008,27010,27012,27014,27016,27018,27020,27022],{"class":161,"line":233},[159,27001,11677],{"class":1142},[159,27003,11680],{"class":165},[159,27005,23886],{"class":1142},[159,27007,15383],{"class":165},[159,27009,189],{"class":1142},[159,27011,1489],{"class":1146},[159,27013,26670],{"class":165},[159,27015,166],{"class":1142},[159,27017,1964],{"class":1146},[159,27019,26670],{"class":165},[159,27021,11705],{"class":1142},[159,27023,1165],{"class":165},[159,27025,27026],{"class":161,"line":239},[159,27027,25681],{"class":165},[159,27029,27030,27033,27035,27037,27040,27042,27044,27047,27049,27051,27053,27055],{"class":161,"line":245},[159,27031,27032],{"class":1142},"        for",[159,27034,11680],{"class":165},[159,27036,23886],{"class":1142},[159,27038,27039],{"class":165}," j",[159,27041,189],{"class":1142},[159,27043,1489],{"class":1146},[159,27045,27046],{"class":165},";j",[159,27048,166],{"class":1142},[159,27050,1964],{"class":1146},[159,27052,27046],{"class":165},[159,27054,11705],{"class":1142},[159,27056,1165],{"class":165},[159,27058,27059],{"class":161,"line":251},[159,27060,26153],{"class":165},[159,27062,27063,27065,27067,27070],{"class":161,"line":261},[159,27064,26158],{"class":165},[159,27066,24858],{"class":1142},[159,27068,27069],{"class":192},"\"*\"",[159,27071,1492],{"class":165},[159,27073,27074],{"class":161,"line":603},[159,27075,7530],{"class":165},[159,27077,27078,27081,27083],{"class":161,"line":621},[159,27079,27080],{"class":165},"        cout",[159,27082,24858],{"class":1142},[159,27084,24880],{"class":165},[159,27086,27087],{"class":161,"line":634},[159,27088,1508],{"class":165},[159,27090,27091],{"class":161,"line":640},[159,27092,15685],{"class":165},[14,27094,27095],{},"乘法口诀表",[151,27097,27099],{"className":23872,"code":27098,"language":23874,"meta":25,"style":25},"#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",[49,27100,27101,27107,27117,27125,27129,27155,27159,27184,27188,27228,27232,27240,27244],{"__ignoreMap":25},[159,27102,27103,27105],{"class":161,"line":162},[159,27104,25602],{"class":1142},[159,27106,25981],{"class":192},[159,27108,27109,27111,27113,27115],{"class":161,"line":176},[159,27110,25610],{"class":1142},[159,27112,25613],{"class":1142},[159,27114,25616],{"class":185},[159,27116,1492],{"class":165},[159,27118,27119,27121,27123],{"class":161,"line":203},[159,27120,23886],{"class":1142},[159,27122,25625],{"class":185},[159,27124,5158],{"class":165},[159,27126,27127],{"class":161,"line":223},[159,27128,25222],{"class":165},[159,27130,27131,27133,27135,27137,27139,27141,27143,27145,27147,27149,27151,27153],{"class":161,"line":233},[159,27132,11677],{"class":1142},[159,27134,1159],{"class":165},[159,27136,23886],{"class":1142},[159,27138,15383],{"class":165},[159,27140,189],{"class":1142},[159,27142,4932],{"class":1146},[159,27144,26670],{"class":165},[159,27146,166],{"class":1142},[159,27148,1964],{"class":1146},[159,27150,26670],{"class":165},[159,27152,11705],{"class":1142},[159,27154,1165],{"class":165},[159,27156,27157],{"class":161,"line":239},[159,27158,25681],{"class":165},[159,27160,27161,27163,27165,27167,27169,27171,27173,27175,27177,27180,27182],{"class":161,"line":245},[159,27162,27032],{"class":1142},[159,27164,1159],{"class":165},[159,27166,23886],{"class":1142},[159,27168,27039],{"class":165},[159,27170,189],{"class":1142},[159,27172,4932],{"class":1146},[159,27174,27046],{"class":165},[159,27176,25263],{"class":1142},[159,27178,27179],{"class":165},"i;j",[159,27181,11705],{"class":1142},[159,27183,1165],{"class":165},[159,27185,27186],{"class":161,"line":251},[159,27187,26153],{"class":165},[159,27189,27190,27192,27194,27196,27198,27200,27202,27204,27206,27209,27211,27213,27215,27217,27219,27222,27224,27226],{"class":161,"line":261},[159,27191,26158],{"class":165},[159,27193,24858],{"class":1142},[159,27195,24316],{"class":165},[159,27197,24858],{"class":1142},[159,27199,27069],{"class":192},[159,27201,24858],{"class":1142},[159,27203,1241],{"class":165},[159,27205,24858],{"class":1142},[159,27207,27208],{"class":192},"\"=\"",[159,27210,24858],{"class":1142},[159,27212,1241],{"class":165},[159,27214,4777],{"class":1142},[159,27216,24316],{"class":165},[159,27218,24858],{"class":1142},[159,27220,27221],{"class":192},"'",[159,27223,24915],{"class":1146},[159,27225,27221],{"class":192},[159,27227,1492],{"class":165},[159,27229,27230],{"class":161,"line":603},[159,27231,7530],{"class":165},[159,27233,27234,27236,27238],{"class":161,"line":621},[159,27235,27080],{"class":165},[159,27237,24858],{"class":1142},[159,27239,24880],{"class":165},[159,27241,27242],{"class":161,"line":634},[159,27243,1508],{"class":165},[159,27245,27246],{"class":161,"line":640},[159,27247,15685],{"class":165},[42,27249,27251],{"id":27250},"_163跳出语句","1.6.3跳出语句",[134,27253,27254],{},[106,27255,27256],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,27258,27259],{},"break使用时机：",[103,27261,27262,27265,27268],{},[106,27263,27264],{},"出现在switch条件语句中，作用是终止case并跳出switch",[106,27266,27267],{},"出现在循环结构中，作用是跳出当前的循环结构",[106,27269,27270],{},"出现在嵌套循环中，跳出最近的内层循环语句",[134,27272,27273,27276],{"start":176},[106,27274,27275],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[106,27277,27278],{},"goto语句\n语法：goto 标记;",[14,27280,27281],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[151,27283,27285],{"className":23872,"code":27284,"language":23874,"meta":25,"style":25},"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",[49,27286,27287,27295,27299,27311,27321,27333,27345,27357,27365,27380],{"__ignoreMap":25},[159,27288,27289,27291,27293],{"class":161,"line":162},[159,27290,23886],{"class":1142},[159,27292,25625],{"class":185},[159,27294,5158],{"class":165},[159,27296,27297],{"class":161,"line":176},[159,27298,25222],{"class":165},[159,27300,27301,27303,27305,27307,27309],{"class":161,"line":203},[159,27302,25227],{"class":165},[159,27304,24858],{"class":1142},[159,27306,680],{"class":192},[159,27308,24858],{"class":1142},[159,27310,24880],{"class":165},[159,27312,27313,27316,27319],{"class":161,"line":223},[159,27314,27315],{"class":1142},"    goto",[159,27317,27318],{"class":185}," FLAG",[159,27320,1492],{"class":165},[159,27322,27323,27325,27327,27329,27331],{"class":161,"line":233},[159,27324,25227],{"class":165},[159,27326,24858],{"class":1142},[159,27328,708],{"class":192},[159,27330,24858],{"class":1142},[159,27332,24880],{"class":165},[159,27334,27335,27337,27339,27341,27343],{"class":161,"line":239},[159,27336,25227],{"class":165},[159,27338,24858],{"class":1142},[159,27340,728],{"class":192},[159,27342,24858],{"class":1142},[159,27344,24880],{"class":165},[159,27346,27347,27349,27351,27353,27355],{"class":161,"line":245},[159,27348,25227],{"class":165},[159,27350,24858],{"class":1142},[159,27352,748],{"class":192},[159,27354,24858],{"class":1142},[159,27356,24880],{"class":165},[159,27358,27359,27362],{"class":161,"line":251},[159,27360,27361],{"class":185},"    FLAG",[159,27363,27364],{"class":165},":\n",[159,27366,27367,27369,27371,27373,27375,27377],{"class":161,"line":261},[159,27368,25227],{"class":165},[159,27370,24858],{"class":1142},[159,27372,768],{"class":192},[159,27374,24858],{"class":1142},[159,27376,24923],{"class":165},[159,27378,27379],{"class":1135},"\u002F\u002F跳过了2,3,4,直接到5\n",[159,27381,27382],{"class":161,"line":603},[159,27383,15685],{"class":165},[37,27385,27387],{"id":27386},"_17数组","1.7数组",[42,27389,27391],{"id":27390},"_171一维数组","1.7.1一维数组",[134,27393,27394],{},[106,27395,27396],{},"一维数组定义方式",[12347,27398,27399,27409],{},[16500,27400,27401],{},[12356,27402,27403,27406],{},[12365,27404,27405],{},"方式",[12365,27407,27408],{},"注意事项",[16624,27410,27411,27425,27435],{},[12356,27412,27413,27419],{},[12488,27414,27415,27416,23934],{},"数据类型 数组名",[159,27417,27418],{},"数组长度",[12488,27420,27421,27422,27424],{},"这种方式是先定义再arr",[159,27423,1241],{},"赋值",[12356,27426,27427,27432],{},[12488,27428,27415,27429,27431],{},[159,27430,27418],{},"={值1,值2....};",[12488,27433,27434],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[12356,27436,27437,27441],{},[12488,27438,27415,27439,27431],{},[159,27440],{},[12488,27442,27443,27444,27446],{},"int arr",[159,27445],{},";这是不正确的，按照这样的方式定义必须有初始长度",[134,27448,27449],{"start":176},[106,27450,27451],{},"一维数组数组名\n用途：",[103,27453,27454],{},[106,27455,27456],{},"1.可以统计整个数组在内存中的长度：",[151,27458,27460],{"className":23872,"code":27459,"language":23874,"meta":25,"style":25},"sizeof(arr);\nsizeof(arr[0]);\n",[49,27461,27462,27469],{"__ignoreMap":25},[159,27463,27464,27466],{"class":161,"line":162},[159,27465,23881],{"class":1142},[159,27467,27468],{"class":165},"(arr);\n",[159,27470,27471,27473,27476,27478],{"class":161,"line":176},[159,27472,23881],{"class":1142},[159,27474,27475],{"class":165},"(arr[",[159,27477,1489],{"class":1146},[159,27479,27480],{"class":165},"]);\n",[103,27482,27483],{},[106,27484,27485],{},"2.可以获取数组在内存中的首地址:",[151,27487,27489],{"className":23872,"code":27488,"language":23874,"meta":25,"style":25},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[49,27490,27491,27496,27508,27513],{"__ignoreMap":25},[159,27492,27493],{"class":161,"line":162},[159,27494,27495],{"class":1135},"\u002F\u002F查看16进制的首地址\n",[159,27497,27498,27500,27502,27504,27506],{"class":161,"line":176},[159,27499,25049],{"class":165},[159,27501,24858],{"class":1142},[159,27503,17260],{"class":165},[159,27505,24858],{"class":1142},[159,27507,24880],{"class":165},[159,27509,27510],{"class":161,"line":203},[159,27511,27512],{"class":1135},"\u002F\u002F看10进制数\n",[159,27514,27515,27517,27519,27521,27523,27525,27527,27530,27532,27534,27536],{"class":161,"line":223},[159,27516,25049],{"class":165},[159,27518,24858],{"class":1142},[159,27520,1159],{"class":165},[159,27522,23886],{"class":1142},[159,27524,18387],{"class":165},[159,27526,24209],{"class":1142},[159,27528,27529],{"class":165},"arr[",[159,27531,1489],{"class":1146},[159,27533,18375],{"class":165},[159,27535,24858],{"class":1142},[159,27537,24880],{"class":165},[14,27539,27540],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[103,27542,27543],{},[106,27544,27545],{},"1️⃣五只小猪称体重",[151,27547,27549],{"className":23872,"code":27548,"language":23874,"meta":25,"style":25},"#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",[49,27550,27551,27557,27567,27575,27579,27617,27630,27656,27660,27672,27676,27686,27690,27694,27707,27716],{"__ignoreMap":25},[159,27552,27553,27555],{"class":161,"line":162},[159,27554,25602],{"class":1142},[159,27556,25605],{"class":192},[159,27558,27559,27561,27563,27565],{"class":161,"line":176},[159,27560,25610],{"class":1142},[159,27562,25613],{"class":1142},[159,27564,25616],{"class":185},[159,27566,1492],{"class":165},[159,27568,27569,27571,27573],{"class":161,"line":203},[159,27570,23886],{"class":1142},[159,27572,25625],{"class":185},[159,27574,5158],{"class":165},[159,27576,27577],{"class":161,"line":223},[159,27578,25222],{"class":165},[159,27580,27581,27583,27586,27588,27590,27592,27594,27597,27599,27602,27604,27606,27608,27610,27612,27614],{"class":161,"line":233},[159,27582,25636],{"class":1142},[159,27584,27585],{"class":165}," arr[",[159,27587,1753],{"class":1146},[159,27589,18375],{"class":165},[159,27591,189],{"class":1142},[159,27593,24721],{"class":165},[159,27595,27596],{"class":1146},"300",[159,27598,24233],{"class":165},[159,27600,27601],{"class":1146},"350",[159,27603,24233],{"class":165},[159,27605,13303],{"class":1146},[159,27607,24233],{"class":165},[159,27609,8648],{"class":1146},[159,27611,24233],{"class":165},[159,27613,1859],{"class":1146},[159,27615,27616],{"class":165},"};\n",[159,27618,27619,27621,27624,27626,27628],{"class":161,"line":239},[159,27620,25636],{"class":1142},[159,27622,27623],{"class":165}," tmp",[159,27625,189],{"class":1142},[159,27627,1489],{"class":1146},[159,27629,1492],{"class":165},[159,27631,27632,27634,27636,27638,27640,27642,27644,27646,27648,27650,27652,27654],{"class":161,"line":245},[159,27633,11677],{"class":1142},[159,27635,11680],{"class":165},[159,27637,23886],{"class":1142},[159,27639,15383],{"class":165},[159,27641,189],{"class":1142},[159,27643,1489],{"class":1146},[159,27645,26670],{"class":165},[159,27647,166],{"class":1142},[159,27649,1753],{"class":1146},[159,27651,26670],{"class":165},[159,27653,11705],{"class":1142},[159,27655,1165],{"class":165},[159,27657,27658],{"class":161,"line":251},[159,27659,25681],{"class":165},[159,27661,27662,27664,27667,27669],{"class":161,"line":261},[159,27663,17003],{"class":1142},[159,27665,27666],{"class":165},"(tmp",[159,27668,166],{"class":1142},[159,27670,27671],{"class":165},"arr[i])\n",[159,27673,27674],{"class":161,"line":603},[159,27675,26153],{"class":165},[159,27677,27678,27681,27683],{"class":161,"line":621},[159,27679,27680],{"class":165},"            tmp",[159,27682,189],{"class":1142},[159,27684,27685],{"class":165},"arr[i];\n",[159,27687,27688],{"class":161,"line":634},[159,27689,7530],{"class":165},[159,27691,27692],{"class":161,"line":640},[159,27693,1508],{"class":165},[159,27695,27696,27698,27700,27703,27705],{"class":161,"line":1075},[159,27697,25227],{"class":165},[159,27699,24858],{"class":1142},[159,27701,27702],{"class":165},"tmp",[159,27704,24858],{"class":1142},[159,27706,24880],{"class":165},[159,27708,27709,27712,27714],{"class":161,"line":1081},[159,27710,27711],{"class":1142},"    return",[159,27713,1259],{"class":1146},[159,27715,1492],{"class":165},[159,27717,27718],{"class":161,"line":1091},[159,27719,15685],{"class":165},[103,27721,27722],{},[106,27723,27724],{},"2️⃣数组元素逆置",[151,27726,27728],{"className":23872,"code":27727,"language":23874,"meta":25,"style":25},"\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",[49,27729,27730,27735,27741,27751,27759,27763,27798,27813,27844,27857,27862,27867,27879,27889,27899,27904,27913,27923,27928,27933,27960,27964,27980,27984,27995,28004],{"__ignoreMap":25},[159,27731,27732],{"class":161,"line":162},[159,27733,27734],{"class":1135},"\u002F\u002F元素逆置\n",[159,27736,27737,27739],{"class":161,"line":176},[159,27738,25602],{"class":1142},[159,27740,25605],{"class":192},[159,27742,27743,27745,27747,27749],{"class":161,"line":203},[159,27744,25610],{"class":1142},[159,27746,25613],{"class":1142},[159,27748,25616],{"class":185},[159,27750,1492],{"class":165},[159,27752,27753,27755,27757],{"class":161,"line":223},[159,27754,23886],{"class":1142},[159,27756,25625],{"class":185},[159,27758,5158],{"class":165},[159,27760,27761],{"class":161,"line":233},[159,27762,25222],{"class":165},[159,27764,27765,27768,27770,27772,27774,27776,27778,27780,27782,27784,27786,27788,27790,27792,27794,27796],{"class":161,"line":239},[159,27766,27767],{"class":1142},"   int",[159,27769,27585],{"class":165},[159,27771,1753],{"class":1146},[159,27773,18375],{"class":165},[159,27775,189],{"class":1142},[159,27777,24721],{"class":165},[159,27779,4932],{"class":1146},[159,27781,24233],{"class":165},[159,27783,11034],{"class":1146},[159,27785,24233],{"class":165},[159,27787,23949],{"class":1146},[159,27789,24233],{"class":165},[159,27791,8866],{"class":1146},[159,27793,24233],{"class":165},[159,27795,1753],{"class":1146},[159,27797,27616],{"class":165},[159,27799,27800,27802,27804,27806,27808,27810],{"class":161,"line":245},[159,27801,27767],{"class":1142},[159,27803,4666],{"class":165},[159,27805,189],{"class":1142},[159,27807,1489],{"class":1146},[159,27809,23934],{"class":165},[159,27811,27812],{"class":1135},"\u002F\u002F起始下标\n",[159,27814,27815,27817,27819,27822,27825,27828,27830,27832,27835,27837,27839,27841],{"class":161,"line":251},[159,27816,27767],{"class":1142},[159,27818,4875],{"class":165},[159,27820,27821],{"class":1142},"=sizeof",[159,27823,27824],{"class":165},"(arr)",[159,27826,27827],{"class":1142},"\u002Fsizeof",[159,27829,27475],{"class":165},[159,27831,1489],{"class":1146},[159,27833,27834],{"class":165},"])",[159,27836,24376],{"class":1142},[159,27838,4932],{"class":1146},[159,27840,23934],{"class":165},[159,27842,27843],{"class":1135},"\u002F\u002F结束下标\n",[159,27845,27846,27849,27852,27854],{"class":161,"line":261},[159,27847,27848],{"class":1142},"   while",[159,27850,27851],{"class":165}," (start",[159,27853,166],{"class":1142},[159,27855,27856],{"class":165},"end)\n",[159,27858,27859],{"class":161,"line":603},[159,27860,27861],{"class":165},"   {\n",[159,27863,27864],{"class":161,"line":621},[159,27865,27866],{"class":1135},"    \u002F\u002F实现元素互换代码\n",[159,27868,27869,27871,27874,27876],{"class":161,"line":634},[159,27870,25636],{"class":1142},[159,27872,27873],{"class":165}," temp",[159,27875,189],{"class":1142},[159,27877,27878],{"class":165},"arr[start];\n",[159,27880,27881,27884,27886],{"class":161,"line":640},[159,27882,27883],{"class":165},"    arr[start]",[159,27885,189],{"class":1142},[159,27887,27888],{"class":165},"arr[end];\n",[159,27890,27891,27894,27896],{"class":161,"line":1075},[159,27892,27893],{"class":165},"    arr[end]",[159,27895,189],{"class":1142},[159,27897,27898],{"class":165},"temp;\n",[159,27900,27901],{"class":161,"line":1081},[159,27902,27903],{"class":1135},"    \u002F\u002F下标更新\n",[159,27905,27906,27909,27911],{"class":161,"line":1091},[159,27907,27908],{"class":165},"    start",[159,27910,11705],{"class":1142},[159,27912,1492],{"class":165},[159,27914,27915,27918,27921],{"class":161,"line":1100},[159,27916,27917],{"class":165},"    end",[159,27919,27920],{"class":1142},"--",[159,27922,1492],{"class":165},[159,27924,27925],{"class":161,"line":1123},[159,27926,27927],{"class":165},"   }\n",[159,27929,27930],{"class":161,"line":1132},[159,27931,27932],{"class":1135},"   \u002F\u002F输出逆置后的数组\n",[159,27934,27935,27938,27940,27942,27944,27946,27948,27950,27952,27954,27956,27958],{"class":161,"line":1139},[159,27936,27937],{"class":1142},"   for",[159,27939,11680],{"class":165},[159,27941,23886],{"class":1142},[159,27943,15383],{"class":165},[159,27945,189],{"class":1142},[159,27947,1489],{"class":1146},[159,27949,26670],{"class":165},[159,27951,166],{"class":1142},[159,27953,1753],{"class":1146},[159,27955,26670],{"class":165},[159,27957,11705],{"class":1142},[159,27959,1165],{"class":165},[159,27961,27962],{"class":161,"line":1168},[159,27963,27861],{"class":165},[159,27965,27966,27968,27970,27973,27975,27978],{"class":161,"line":1174},[159,27967,25227],{"class":165},[159,27969,24858],{"class":1142},[159,27971,27972],{"class":165},"arr[i]",[159,27974,24858],{"class":1142},[159,27976,27977],{"class":192},"\" \"",[159,27979,1492],{"class":165},[159,27981,27982],{"class":161,"line":1180},[159,27983,27927],{"class":165},[159,27985,27986,27989,27991,27993],{"class":161,"line":1194},[159,27987,27988],{"class":185},"   system",[159,27990,1159],{"class":165},[159,27992,25955],{"class":192},[159,27994,1953],{"class":165},[159,27996,27997,28000,28002],{"class":161,"line":1200},[159,27998,27999],{"class":1142},"   return",[159,28001,1259],{"class":1146},[159,28003,1492],{"class":165},[159,28005,28006],{"class":161,"line":1221},[159,28007,15685],{"class":165},[103,28009,28010],{},[106,28011,28012],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[151,28014,28016],{"className":23872,"code":28015,"language":23874,"meta":25,"style":25},"\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",[49,28017,28018,28023,28029,28039,28047,28051,28103,28116,28142,28146,28160,28164,28169,28174,28204,28208,28213,28247,28251,28256,28276,28281,28293,28309,28324,28329,28333,28337,28350,28376,28380,28394,28398,28406],{"__ignoreMap":25},[159,28019,28020],{"class":161,"line":162},[159,28021,28022],{"class":1135},"\u002F\u002F冒泡排序,升序\n",[159,28024,28025,28027],{"class":161,"line":176},[159,28026,25602],{"class":1142},[159,28028,25605],{"class":192},[159,28030,28031,28033,28035,28037],{"class":161,"line":203},[159,28032,25610],{"class":1142},[159,28034,25613],{"class":1142},[159,28036,25616],{"class":185},[159,28038,1492],{"class":165},[159,28040,28041,28043,28045],{"class":161,"line":223},[159,28042,23886],{"class":1142},[159,28044,25625],{"class":185},[159,28046,5158],{"class":165},[159,28048,28049],{"class":161,"line":233},[159,28050,25222],{"class":165},[159,28052,28053,28055,28057,28059,28062,28064,28067,28069,28071,28073,28075,28077,28079,28081,28083,28085,28087,28089,28091,28093,28095,28097,28099,28101],{"class":161,"line":239},[159,28054,25636],{"class":1142},[159,28056,27585],{"class":165},[159,28058,24273],{"class":1146},[159,28060,28061],{"class":165},"] ",[159,28063,189],{"class":1142},[159,28065,28066],{"class":165}," {",[159,28068,8866],{"class":1146},[159,28070,24233],{"class":165},[159,28072,11034],{"class":1146},[159,28074,24233],{"class":165},[159,28076,24250],{"class":1146},[159,28078,24233],{"class":165},[159,28080,1489],{"class":1146},[159,28082,24233],{"class":165},[159,28084,1753],{"class":1146},[159,28086,24233],{"class":165},[159,28088,24224],{"class":1146},[159,28090,24233],{"class":165},[159,28092,4932],{"class":1146},[159,28094,24233],{"class":165},[159,28096,23949],{"class":1146},[159,28098,24233],{"class":165},[159,28100,24273],{"class":1146},[159,28102,27616],{"class":165},[159,28104,28105,28107,28109,28112,28114],{"class":161,"line":245},[159,28106,25227],{"class":165},[159,28108,24858],{"class":1142},[159,28110,28111],{"class":192},"\"排序前：\"",[159,28113,24858],{"class":1142},[159,28115,24880],{"class":165},[159,28117,28118,28120,28122,28124,28126,28128,28130,28132,28134,28136,28138,28140],{"class":161,"line":251},[159,28119,11677],{"class":1142},[159,28121,11680],{"class":165},[159,28123,23886],{"class":1142},[159,28125,15383],{"class":165},[159,28127,189],{"class":1142},[159,28129,1489],{"class":1146},[159,28131,26670],{"class":165},[159,28133,166],{"class":1142},[159,28135,24273],{"class":1146},[159,28137,26670],{"class":165},[159,28139,11705],{"class":1142},[159,28141,1165],{"class":165},[159,28143,28144],{"class":161,"line":261},[159,28145,25681],{"class":165},[159,28147,28148,28150,28152,28154,28156,28158],{"class":161,"line":603},[159,28149,27080],{"class":165},[159,28151,24858],{"class":1142},[159,28153,27972],{"class":165},[159,28155,24858],{"class":1142},[159,28157,27977],{"class":192},[159,28159,1492],{"class":165},[159,28161,28162],{"class":161,"line":621},[159,28163,1508],{"class":165},[159,28165,28166],{"class":161,"line":634},[159,28167,28168],{"class":1135},"    \u002F\u002F开始冒泡排序\n",[159,28170,28171],{"class":161,"line":640},[159,28172,28173],{"class":1135},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[159,28175,28176,28178,28180,28182,28184,28186,28188,28190,28192,28194,28196,28198,28200,28202],{"class":161,"line":1075},[159,28177,11677],{"class":1142},[159,28179,11680],{"class":165},[159,28181,23886],{"class":1142},[159,28183,15383],{"class":165},[159,28185,189],{"class":1142},[159,28187,1489],{"class":1146},[159,28189,26670],{"class":165},[159,28191,166],{"class":1142},[159,28193,24273],{"class":1146},[159,28195,24376],{"class":1142},[159,28197,4932],{"class":1146},[159,28199,26670],{"class":165},[159,28201,11705],{"class":1142},[159,28203,1165],{"class":165},[159,28205,28206],{"class":161,"line":1081},[159,28207,25681],{"class":165},[159,28209,28210],{"class":161,"line":1091},[159,28211,28212],{"class":1135},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[159,28214,28215,28217,28219,28221,28223,28225,28227,28229,28231,28233,28235,28237,28239,28241,28243,28245],{"class":161,"line":1100},[159,28216,27032],{"class":1142},[159,28218,11680],{"class":165},[159,28220,23886],{"class":1142},[159,28222,27039],{"class":165},[159,28224,189],{"class":1142},[159,28226,1489],{"class":1146},[159,28228,27046],{"class":165},[159,28230,166],{"class":1142},[159,28232,24273],{"class":1146},[159,28234,24376],{"class":1142},[159,28236,1241],{"class":165},[159,28238,24376],{"class":1142},[159,28240,4932],{"class":1146},[159,28242,27046],{"class":165},[159,28244,11705],{"class":1142},[159,28246,1165],{"class":165},[159,28248,28249],{"class":161,"line":1123},[159,28250,26153],{"class":165},[159,28252,28253],{"class":161,"line":1132},[159,28254,28255],{"class":1135},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[159,28257,28258,28261,28264,28266,28269,28271,28273],{"class":161,"line":1139},[159,28259,28260],{"class":1142},"            if",[159,28262,28263],{"class":165},"(arr[j]",[159,28265,6760],{"class":1142},[159,28267,28268],{"class":165},"arr[j",[159,28270,2704],{"class":1142},[159,28272,4932],{"class":1146},[159,28274,28275],{"class":165},"])\n",[159,28277,28278],{"class":161,"line":1168},[159,28279,28280],{"class":165},"            {\n",[159,28282,28283,28286,28288,28290],{"class":161,"line":1174},[159,28284,28285],{"class":1142},"                int",[159,28287,27873],{"class":165},[159,28289,189],{"class":1142},[159,28291,28292],{"class":165},"arr[j];\n",[159,28294,28295,28298,28300,28302,28304,28306],{"class":161,"line":1180},[159,28296,28297],{"class":165},"                arr[j]",[159,28299,189],{"class":1142},[159,28301,28268],{"class":165},[159,28303,2704],{"class":1142},[159,28305,4932],{"class":1146},[159,28307,28308],{"class":165},"];\n",[159,28310,28311,28314,28316,28318,28320,28322],{"class":161,"line":1194},[159,28312,28313],{"class":165},"                arr[j",[159,28315,2704],{"class":1142},[159,28317,4932],{"class":1146},[159,28319,18375],{"class":165},[159,28321,189],{"class":1142},[159,28323,27898],{"class":165},[159,28325,28326],{"class":161,"line":1200},[159,28327,28328],{"class":165},"            }\n",[159,28330,28331],{"class":161,"line":1221},[159,28332,7530],{"class":165},[159,28334,28335],{"class":161,"line":1230},[159,28336,1508],{"class":165},[159,28338,28339,28341,28343,28346,28348],{"class":161,"line":1247},[159,28340,25227],{"class":165},[159,28342,24858],{"class":1142},[159,28344,28345],{"class":192},"\"排序后：\"",[159,28347,24858],{"class":1142},[159,28349,24880],{"class":165},[159,28351,28352,28354,28356,28358,28360,28362,28364,28366,28368,28370,28372,28374],{"class":161,"line":1265},[159,28353,11677],{"class":1142},[159,28355,11680],{"class":165},[159,28357,23886],{"class":1142},[159,28359,15383],{"class":165},[159,28361,189],{"class":1142},[159,28363,1489],{"class":1146},[159,28365,26670],{"class":165},[159,28367,166],{"class":1142},[159,28369,24273],{"class":1146},[159,28371,26670],{"class":165},[159,28373,11705],{"class":1142},[159,28375,1165],{"class":165},[159,28377,28378],{"class":161,"line":1277},[159,28379,25681],{"class":165},[159,28381,28382,28384,28386,28388,28390,28392],{"class":161,"line":1283},[159,28383,27080],{"class":165},[159,28385,24858],{"class":1142},[159,28387,27972],{"class":165},[159,28389,24858],{"class":1142},[159,28391,27977],{"class":192},[159,28393,1492],{"class":165},[159,28395,28396],{"class":161,"line":1294},[159,28397,1508],{"class":165},[159,28399,28400,28402,28404],{"class":161,"line":1305},[159,28401,27711],{"class":1142},[159,28403,1259],{"class":1146},[159,28405,1492],{"class":165},[159,28407,28408],{"class":161,"line":1311},[159,28409,15685],{"class":165},[42,28411,28413],{"id":28412},"_172二维数组","1.7.2二维数组",[134,28415,28416],{},[106,28417,28418],{},"二维数组的四种定义方式",[12347,28420,28421,28430],{},[16500,28422,28423],{},[12356,28424,28425,28428],{},[12365,28426,28427],{},"序号",[12365,28429,27405],{},[16624,28431,28432,28442,28451,28460,28469],{},[12356,28433,28434,28436],{},[12488,28435,4932],{},[12488,28437,28438,28439,23934],{},"数据类型 数组名[行数]",[159,28440,28441],{},"列数",[12356,28443,28444,28446],{},[12488,28445,11034],{},[12488,28447,28438,28448,28450],{},[159,28449,28441],{},"={ {数据1,数据2}，{数据3，数据4}... }",[12356,28452,28453,28455],{},[12488,28454,23949],{},[12488,28456,28438,28457,28459],{},[159,28458,28441],{},"={数据1,数据2,数据3...}",[12356,28461,28462,28464],{},[12488,28463,8866],{},[12488,28465,28466,28467,28459],{},"数据类型 数组名[]",[159,28468,28441],{},[12356,28470,28471,28474],{},[12488,28472,28473],{},"注意：不能只省略列数",[12488,28475],{},[134,28477,28478],{"start":176},[106,28479,28480],{},"二维数组数组名",[103,28482,28483,28486],{},[106,28484,28485],{},"1.查看二维数组所占内存空间",[106,28487,28488],{},"2.获取二维数组首地址",[14,28490,28491],{},"已知二维数组，求二维数组的行数与列数",[151,28493,28495],{"className":23872,"code":28494,"language":23874,"meta":25,"style":25},"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",[49,28496,28497,28505,28509,28527,28531,28549,28565,28570,28595,28628],{"__ignoreMap":25},[159,28498,28499,28501,28503],{"class":161,"line":162},[159,28500,23886],{"class":1142},[159,28502,25625],{"class":185},[159,28504,5158],{"class":165},[159,28506,28507],{"class":161,"line":176},[159,28508,25222],{"class":165},[159,28510,28511,28513,28515,28517,28520,28522,28524],{"class":161,"line":203},[159,28512,25636],{"class":1142},[159,28514,27585],{"class":165},[159,28516,11034],{"class":1146},[159,28518,28519],{"class":165},"][",[159,28521,23949],{"class":1146},[159,28523,18375],{"class":165},[159,28525,28526],{"class":1142},"=\n",[159,28528,28529],{"class":161,"line":223},[159,28530,25681],{"class":165},[159,28532,28533,28536,28538,28540,28542,28544,28546],{"class":161,"line":233},[159,28534,28535],{"class":165},"        {",[159,28537,4932],{"class":1146},[159,28539,24233],{"class":165},[159,28541,11034],{"class":1146},[159,28543,24233],{"class":165},[159,28545,23949],{"class":1146},[159,28547,28548],{"class":165},"},\n",[159,28550,28551,28553,28555,28557,28559,28561,28563],{"class":161,"line":239},[159,28552,28535],{"class":165},[159,28554,8866],{"class":1146},[159,28556,24233],{"class":165},[159,28558,1753],{"class":1146},[159,28560,24233],{"class":165},[159,28562,7907],{"class":1146},[159,28564,15685],{"class":165},[159,28566,28567],{"class":161,"line":245},[159,28568,28569],{"class":165},"    };\n",[159,28571,28572,28574,28576,28579,28581,28583,28585,28587,28589,28591,28593],{"class":161,"line":251},[159,28573,25227],{"class":165},[159,28575,24858],{"class":1142},[159,28577,28578],{"class":192},"\"二维数组的行数\"",[159,28580,25052],{"class":1142},[159,28582,27824],{"class":165},[159,28584,27827],{"class":1142},[159,28586,27475],{"class":165},[159,28588,1489],{"class":1146},[159,28590,27834],{"class":165},[159,28592,24858],{"class":1142},[159,28594,24880],{"class":165},[159,28596,28597,28599,28601,28604,28606,28608,28610,28612,28614,28616,28618,28620,28622,28624,28626],{"class":161,"line":261},[159,28598,25227],{"class":165},[159,28600,24858],{"class":1142},[159,28602,28603],{"class":192},"\"二维数组的列数\"",[159,28605,25052],{"class":1142},[159,28607,27475],{"class":165},[159,28609,1489],{"class":1146},[159,28611,27834],{"class":165},[159,28613,27827],{"class":1142},[159,28615,27475],{"class":165},[159,28617,1489],{"class":1146},[159,28619,28519],{"class":165},[159,28621,1489],{"class":1146},[159,28623,27834],{"class":165},[159,28625,24858],{"class":1142},[159,28627,24880],{"class":165},[159,28629,28630],{"class":161,"line":603},[159,28631,15685],{"class":165},[14,28633,28634],{},"查看二维数组首地址",[151,28636,28638],{"className":23872,"code":28637,"language":23874,"meta":25,"style":25},"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",[49,28639,28640,28657,28683,28708],{"__ignoreMap":25},[159,28641,28642,28644,28646,28649,28651,28653,28655],{"class":161,"line":162},[159,28643,25049],{"class":165},[159,28645,24858],{"class":1142},[159,28647,28648],{"class":192},"\"二维数组首地址：\"",[159,28650,24858],{"class":1142},[159,28652,17260],{"class":165},[159,28654,24858],{"class":1142},[159,28656,24880],{"class":165},[159,28658,28659,28661,28663,28666,28668,28670,28672,28675,28677,28679,28681],{"class":161,"line":176},[159,28660,25049],{"class":165},[159,28662,24858],{"class":1142},[159,28664,28665],{"class":192},"\"二维数组第一行的首地址：\"",[159,28667,24858],{"class":1142},[159,28669,1159],{"class":165},[159,28671,23886],{"class":1142},[159,28673,28674],{"class":165},")arr[",[159,28676,1489],{"class":1146},[159,28678,18375],{"class":165},[159,28680,24858],{"class":1142},[159,28682,24880],{"class":165},[159,28684,28685,28687,28689,28692,28694,28696,28698,28700,28702,28704,28706],{"class":161,"line":203},[159,28686,25049],{"class":165},[159,28688,24858],{"class":1142},[159,28690,28691],{"class":192},"\"二维数组第二行的首地址：\"",[159,28693,24858],{"class":1142},[159,28695,1159],{"class":165},[159,28697,23886],{"class":1142},[159,28699,28674],{"class":165},[159,28701,4932],{"class":1146},[159,28703,18375],{"class":165},[159,28705,24858],{"class":1142},[159,28707,24880],{"class":165},[159,28709,28710,28712,28714,28717,28719,28721,28723,28725,28727,28729,28731,28733,28735,28737,28739,28741],{"class":161,"line":223},[159,28711,25049],{"class":165},[159,28713,24858],{"class":1142},[159,28715,28716],{"class":192},"\"二维数组第一个元素的首地址:\"",[159,28718,24858],{"class":1142},[159,28720,1159],{"class":165},[159,28722,23886],{"class":1142},[159,28724,18387],{"class":165},[159,28726,24209],{"class":1142},[159,28728,27529],{"class":165},[159,28730,1489],{"class":1146},[159,28732,28519],{"class":165},[159,28734,1489],{"class":1146},[159,28736,18375],{"class":165},[159,28738,24858],{"class":1142},[159,28740,24923],{"class":165},[159,28742,28743],{"class":1135},"\u002F\u002F对于数，要加取址符\n",[1468,28745,28746],{},"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":25,"searchDepth":176,"depth":176,"links":28748},[28749,28750,28751,28759,28760,28766,28771],{"id":23827,"depth":176,"text":23828},{"id":23834,"depth":176,"text":23835},{"id":23849,"depth":176,"text":23850,"children":28752},[28753,28754,28755,28756,28757,28758],{"id":23853,"depth":203,"text":23854},{"id":23897,"depth":203,"text":23898},{"id":23961,"depth":203,"text":23962},{"id":24839,"depth":203,"text":24840},{"id":24929,"depth":203,"text":24930},{"id":25024,"depth":203,"text":25025},{"id":25065,"depth":176,"text":25066},{"id":25132,"depth":176,"text":25133,"children":28761},[28762,28763,28764,28765],{"id":25136,"depth":203,"text":25137},{"id":25157,"depth":203,"text":25158},{"id":25166,"depth":203,"text":25167},{"id":25175,"depth":203,"text":25176},{"id":25184,"depth":176,"text":25185,"children":28767},[28768,28769,28770],{"id":25188,"depth":203,"text":25189},{"id":25854,"depth":203,"text":25855},{"id":27250,"depth":203,"text":27251},{"id":27386,"depth":176,"text":27387,"children":28772},[28773,28774],{"id":27390,"depth":203,"text":27391},{"id":28412,"depth":203,"text":28413},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":23819,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":28781,"title":28782,"body":28783,"description":25,"extension":23810,"meta":29880,"navigation":589,"path":29881,"seo":29882,"stem":29883,"__hash__":29884},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":28784,"toc":29872},[28785,28788,28792,28800,28807,28810,28875,28879,28882,28957,28961,28964,28967,28970,29183,29187,29192,29256,29261,29328,29333,29424,29427,29532,29536,29539,29545,29689,29693,29696,29710,29713,29758,29761,29869],[10,28786,28782],{"id":28787},"_2函数",[37,28789,28791],{"id":28790},"_21函数概述","2.1函数概述",[134,28793,28794,28797],{},[106,28795,28796],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[106,28798,28799],{},"语法：",[151,28801,28805],{"className":28802,"code":28804,"language":8507,"meta":25},[28803],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[49,28806,28804],{"__ignoreMap":25},[14,28808,28809],{},"小案例",[151,28811,28813],{"className":23872,"code":28812,"language":23874,"meta":25,"style":25},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[49,28814,28815,28820,28843,28847,28864,28871],{"__ignoreMap":25},[159,28816,28817],{"class":161,"line":162},[159,28818,28819],{"class":1135},"\u002F\u002Fnum1,num2形参\n",[159,28821,28822,28824,28827,28829,28831,28834,28836,28838,28841],{"class":161,"line":176},[159,28823,23886],{"class":1142},[159,28825,28826],{"class":185}," add",[159,28828,1159],{"class":165},[159,28830,23886],{"class":1142},[159,28832,28833],{"class":8765}," num1",[159,28835,24233],{"class":165},[159,28837,23886],{"class":1142},[159,28839,28840],{"class":8765}," num2",[159,28842,1165],{"class":165},[159,28844,28845],{"class":161,"line":203},[159,28846,25222],{"class":165},[159,28848,28849,28851,28854,28856,28859,28861],{"class":161,"line":223},[159,28850,25636],{"class":1142},[159,28852,28853],{"class":165}," sum",[159,28855,189],{"class":1142},[159,28857,28858],{"class":165},"num1",[159,28860,2704],{"class":1142},[159,28862,28863],{"class":165},"num2;\n",[159,28865,28866,28868],{"class":161,"line":233},[159,28867,27711],{"class":1142},[159,28869,28870],{"class":165}," sum;\n",[159,28872,28873],{"class":161,"line":239},[159,28874,15685],{"class":165},[37,28876,28878],{"id":28877},"_22函数调用","2.2函数调用",[14,28880,28881],{},"调用刚刚写的求和函数",[151,28883,28885],{"className":23872,"code":28884,"language":23874,"meta":25,"style":25},"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",[49,28886,28887,28895,28899,28904,28916,28928,28937,28942,28953],{"__ignoreMap":25},[159,28888,28889,28891,28893],{"class":161,"line":162},[159,28890,23886],{"class":1142},[159,28892,25625],{"class":185},[159,28894,5158],{"class":165},[159,28896,28897],{"class":161,"line":176},[159,28898,25222],{"class":165},[159,28900,28901],{"class":161,"line":203},[159,28902,28903],{"class":1135},"    \u002F\u002Fa,b实参\n",[159,28905,28906,28908,28910,28912,28914],{"class":161,"line":223},[159,28907,25636],{"class":1142},[159,28909,7885],{"class":165},[159,28911,189],{"class":1142},[159,28913,1489],{"class":1146},[159,28915,1492],{"class":165},[159,28917,28918,28920,28922,28924,28926],{"class":161,"line":233},[159,28919,25636],{"class":1142},[159,28921,26465],{"class":165},[159,28923,189],{"class":1142},[159,28925,1489],{"class":1146},[159,28927,1492],{"class":165},[159,28929,28930,28932,28934],{"class":161,"line":239},[159,28931,25663],{"class":165},[159,28933,25108],{"class":1142},[159,28935,28936],{"class":165},"a,b;\n",[159,28938,28939],{"class":161,"line":245},[159,28940,28941],{"class":1135},"    \u002F\u002F调用函数时，实参值传给了形参\n",[159,28943,28944,28946,28948,28950],{"class":161,"line":251},[159,28945,25227],{"class":165},[159,28947,24858],{"class":1142},[159,28949,2680],{"class":185},[159,28951,28952],{"class":165},"(a,b);\n",[159,28954,28955],{"class":161,"line":261},[159,28956,15685],{"class":165},[37,28958,28960],{"id":28959},"_23值传递","2.3值传递",[14,28962,28963],{},"值传递就是函数调用时实参将数值传给形参",[14,28965,28966],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,28968,28969],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[151,28971,28973],{"className":23872,"code":28972,"language":23874,"meta":25,"style":25},"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",[49,28974,28975,28997,29001,29014,29031,29049,29060,29069,29078,29091,29107,29123,29132,29136,29144,29148,29160,29172,29179],{"__ignoreMap":25},[159,28976,28977,28980,28983,28985,28987,28989,28991,28993,28995],{"class":161,"line":162},[159,28978,28979],{"class":1142},"void",[159,28981,28982],{"class":185}," swap",[159,28984,1159],{"class":165},[159,28986,23886],{"class":1142},[159,28988,28833],{"class":8765},[159,28990,24233],{"class":165},[159,28992,23886],{"class":1142},[159,28994,28840],{"class":8765},[159,28996,1165],{"class":165},[159,28998,28999],{"class":161,"line":176},[159,29000,25222],{"class":165},[159,29002,29003,29005,29007,29010,29012],{"class":161,"line":203},[159,29004,25227],{"class":165},[159,29006,24858],{"class":1142},[159,29008,29009],{"class":192},"\"交换前：\"",[159,29011,24858],{"class":1142},[159,29013,24880],{"class":165},[159,29015,29016,29018,29020,29023,29025,29027,29029],{"class":161,"line":223},[159,29017,25227],{"class":165},[159,29019,24858],{"class":1142},[159,29021,29022],{"class":192},"\"num1=\"",[159,29024,24858],{"class":1142},[159,29026,28858],{"class":165},[159,29028,24858],{"class":1142},[159,29030,24880],{"class":165},[159,29032,29033,29035,29037,29040,29042,29045,29047],{"class":161,"line":233},[159,29034,25227],{"class":165},[159,29036,24858],{"class":1142},[159,29038,29039],{"class":192},"\"num2=\"",[159,29041,24858],{"class":1142},[159,29043,29044],{"class":165},"num2",[159,29046,24858],{"class":1142},[159,29048,24880],{"class":165},[159,29050,29051,29053,29055,29057],{"class":161,"line":239},[159,29052,25636],{"class":1142},[159,29054,27873],{"class":165},[159,29056,189],{"class":1142},[159,29058,29059],{"class":165},"num1;\n",[159,29061,29062,29065,29067],{"class":161,"line":245},[159,29063,29064],{"class":165},"    num1",[159,29066,189],{"class":1142},[159,29068,28863],{"class":165},[159,29070,29071,29074,29076],{"class":161,"line":251},[159,29072,29073],{"class":165},"    num2",[159,29075,189],{"class":1142},[159,29077,27898],{"class":165},[159,29079,29080,29082,29084,29087,29089],{"class":161,"line":261},[159,29081,25227],{"class":165},[159,29083,24858],{"class":1142},[159,29085,29086],{"class":192},"\"交换后：\"",[159,29088,24858],{"class":1142},[159,29090,24880],{"class":165},[159,29092,29093,29095,29097,29099,29101,29103,29105],{"class":161,"line":603},[159,29094,25227],{"class":165},[159,29096,24858],{"class":1142},[159,29098,29022],{"class":192},[159,29100,24858],{"class":1142},[159,29102,28858],{"class":165},[159,29104,24858],{"class":1142},[159,29106,24880],{"class":165},[159,29108,29109,29111,29113,29115,29117,29119,29121],{"class":161,"line":621},[159,29110,25227],{"class":165},[159,29112,24858],{"class":1142},[159,29114,29039],{"class":192},[159,29116,24858],{"class":1142},[159,29118,29044],{"class":165},[159,29120,24858],{"class":1142},[159,29122,24880],{"class":165},[159,29124,29125,29127,29129],{"class":161,"line":634},[159,29126,27711],{"class":1142},[159,29128,23934],{"class":165},[159,29130,29131],{"class":1135},"\u002F\u002F或者不写\n",[159,29133,29134],{"class":161,"line":640},[159,29135,15685],{"class":165},[159,29137,29138,29140,29142],{"class":161,"line":1075},[159,29139,23886],{"class":1142},[159,29141,25625],{"class":185},[159,29143,5158],{"class":165},[159,29145,29146],{"class":161,"line":1081},[159,29147,25222],{"class":165},[159,29149,29150,29152,29154,29156,29158],{"class":161,"line":1091},[159,29151,25636],{"class":1142},[159,29153,7885],{"class":165},[159,29155,189],{"class":1142},[159,29157,1964],{"class":1146},[159,29159,1492],{"class":165},[159,29161,29162,29164,29166,29168,29170],{"class":161,"line":1100},[159,29163,25636],{"class":1142},[159,29165,26465],{"class":165},[159,29167,189],{"class":1142},[159,29169,1739],{"class":1146},[159,29171,1492],{"class":165},[159,29173,29174,29177],{"class":161,"line":1123},[159,29175,29176],{"class":185},"    swap",[159,29178,28952],{"class":165},[159,29180,29181],{"class":161,"line":1132},[159,29182,15685],{"class":165},[37,29184,29186],{"id":29185},"_24函数的常见形式","2.4函数的常见形式",[134,29188,29189],{},[106,29190,29191],{},"无参无返",[151,29193,29195],{"className":23872,"code":29194,"language":23874,"meta":25,"style":25},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[49,29196,29197,29206,29210,29223,29227,29235,29239,29244,29252],{"__ignoreMap":25},[159,29198,29199,29201,29204],{"class":161,"line":162},[159,29200,28979],{"class":1142},[159,29202,29203],{"class":185}," test01",[159,29205,5158],{"class":165},[159,29207,29208],{"class":161,"line":176},[159,29209,25222],{"class":165},[159,29211,29212,29214,29216,29219,29221],{"class":161,"line":203},[159,29213,25227],{"class":165},[159,29215,24858],{"class":1142},[159,29217,29218],{"class":192},"\"你好\"",[159,29220,24858],{"class":1142},[159,29222,24880],{"class":165},[159,29224,29225],{"class":161,"line":223},[159,29226,15685],{"class":165},[159,29228,29229,29231,29233],{"class":161,"line":233},[159,29230,23886],{"class":1142},[159,29232,25625],{"class":185},[159,29234,5158],{"class":165},[159,29236,29237],{"class":161,"line":239},[159,29238,25222],{"class":165},[159,29240,29241],{"class":161,"line":245},[159,29242,29243],{"class":1135},"    \u002F\u002F函数调用\n",[159,29245,29246,29249],{"class":161,"line":251},[159,29247,29248],{"class":185},"    test01",[159,29250,29251],{"class":165},"();\n",[159,29253,29254],{"class":161,"line":261},[159,29255,15685],{"class":165},[134,29257,29258],{"start":176},[106,29259,29260],{},"有参无返",[151,29262,29264],{"className":23872,"code":29263,"language":23874,"meta":25,"style":25},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[49,29265,29266,29281,29285,29297,29301,29309,29313,29324],{"__ignoreMap":25},[159,29267,29268,29270,29273,29275,29277,29279],{"class":161,"line":162},[159,29269,28979],{"class":1142},[159,29271,29272],{"class":185}," test02",[159,29274,1159],{"class":165},[159,29276,23886],{"class":1142},[159,29278,7885],{"class":8765},[159,29280,1165],{"class":165},[159,29282,29283],{"class":161,"line":176},[159,29284,25222],{"class":165},[159,29286,29287,29289,29291,29293,29295],{"class":161,"line":203},[159,29288,25227],{"class":165},[159,29290,24858],{"class":1142},[159,29292,29218],{"class":192},[159,29294,24858],{"class":1142},[159,29296,24880],{"class":165},[159,29298,29299],{"class":161,"line":223},[159,29300,15685],{"class":165},[159,29302,29303,29305,29307],{"class":161,"line":233},[159,29304,23886],{"class":1142},[159,29306,25625],{"class":185},[159,29308,5158],{"class":165},[159,29310,29311],{"class":161,"line":239},[159,29312,25222],{"class":165},[159,29314,29315,29318,29320,29322],{"class":161,"line":245},[159,29316,29317],{"class":185},"    test02",[159,29319,1159],{"class":165},[159,29321,1596],{"class":1146},[159,29323,1953],{"class":165},[159,29325,29326],{"class":161,"line":251},[159,29327,15685],{"class":165},[134,29329,29330],{"start":203},[106,29331,29332],{},"无参有返",[151,29334,29336],{"className":23872,"code":29335,"language":23874,"meta":25,"style":25},"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",[49,29337,29338,29347,29351,29363,29372,29376,29384,29388,29401,29420],{"__ignoreMap":25},[159,29339,29340,29342,29345],{"class":161,"line":162},[159,29341,23886],{"class":1142},[159,29343,29344],{"class":185}," test03",[159,29346,5158],{"class":165},[159,29348,29349],{"class":161,"line":176},[159,29350,25222],{"class":165},[159,29352,29353,29355,29357,29359,29361],{"class":161,"line":203},[159,29354,25227],{"class":165},[159,29356,24858],{"class":1142},[159,29358,29218],{"class":192},[159,29360,24858],{"class":1142},[159,29362,24880],{"class":165},[159,29364,29365,29367,29370],{"class":161,"line":223},[159,29366,27711],{"class":1142},[159,29368,29369],{"class":1146}," 100",[159,29371,1492],{"class":165},[159,29373,29374],{"class":161,"line":233},[159,29375,15685],{"class":165},[159,29377,29378,29380,29382],{"class":161,"line":239},[159,29379,23886],{"class":1142},[159,29381,25625],{"class":185},[159,29383,5158],{"class":165},[159,29385,29386],{"class":161,"line":245},[159,29387,25222],{"class":165},[159,29389,29390,29392,29394,29396,29399],{"class":161,"line":251},[159,29391,25636],{"class":1142},[159,29393,28833],{"class":165},[159,29395,189],{"class":1142},[159,29397,29398],{"class":185},"test03",[159,29400,29251],{"class":165},[159,29402,29403,29405,29407,29409,29411,29413,29415,29417],{"class":161,"line":261},[159,29404,25227],{"class":165},[159,29406,24858],{"class":1142},[159,29408,29022],{"class":192},[159,29410,24858],{"class":1142},[159,29412,28858],{"class":165},[159,29414,24858],{"class":1142},[159,29416,24923],{"class":165},[159,29418,29419],{"class":1135}," \u002F\u002F100\n",[159,29421,29422],{"class":161,"line":603},[159,29423,15685],{"class":165},[14,29425,29426],{},"4.有参有返",[151,29428,29430],{"className":23872,"code":29429,"language":23874,"meta":25,"style":25},"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",[49,29431,29432,29447,29451,29464,29470,29474,29483,29487,29499,29513,29528],{"__ignoreMap":25},[159,29433,29434,29436,29439,29441,29443,29445],{"class":161,"line":162},[159,29435,23886],{"class":1142},[159,29437,29438],{"class":185}," test04",[159,29440,1159],{"class":165},[159,29442,23886],{"class":1142},[159,29444,7885],{"class":8765},[159,29446,1165],{"class":165},[159,29448,29449],{"class":161,"line":176},[159,29450,25222],{"class":165},[159,29452,29453,29455,29457,29460,29462],{"class":161,"line":203},[159,29454,25227],{"class":165},[159,29456,24858],{"class":1142},[159,29458,29459],{"class":192},"\"hello\"",[159,29461,24858],{"class":1142},[159,29463,24880],{"class":165},[159,29465,29466,29468],{"class":161,"line":223},[159,29467,27711],{"class":1142},[159,29469,25111],{"class":165},[159,29471,29472],{"class":161,"line":233},[159,29473,15685],{"class":165},[159,29475,29476,29478,29481],{"class":161,"line":239},[159,29477,23886],{"class":1142},[159,29479,29480],{"class":185}," mian",[159,29482,5158],{"class":165},[159,29484,29485],{"class":161,"line":245},[159,29486,25222],{"class":165},[159,29488,29489,29491,29493,29495,29497],{"class":161,"line":251},[159,29490,25636],{"class":1142},[159,29492,26465],{"class":165},[159,29494,189],{"class":1142},[159,29496,4932],{"class":1146},[159,29498,1492],{"class":165},[159,29500,29501,29503,29505,29507,29510],{"class":161,"line":261},[159,29502,25636],{"class":1142},[159,29504,26481],{"class":165},[159,29506,189],{"class":1142},[159,29508,29509],{"class":185},"test04",[159,29511,29512],{"class":165},"(b);\n",[159,29514,29515,29517,29519,29521,29523,29525],{"class":161,"line":603},[159,29516,25227],{"class":165},[159,29518,24858],{"class":1142},[159,29520,24151],{"class":165},[159,29522,24858],{"class":1142},[159,29524,24923],{"class":165},[159,29526,29527],{"class":1135}," \u002F\u002F1\n",[159,29529,29530],{"class":161,"line":621},[159,29531,15685],{"class":165},[37,29533,29535],{"id":29534},"_25函数的声明","2.5函数的声明",[14,29537,29538],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,29540,29541,29542],{},"函数的",[61,29543,29544],{},"声明可以多次，但是函数的定义只能有一次",[151,29546,29548],{"className":23872,"code":29547,"language":23874,"meta":25,"style":25},"\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",[49,29549,29550,29555,29560,29585,29594,29598,29610,29622,29638,29642,29662,29666,29685],{"__ignoreMap":25},[159,29551,29552],{"class":161,"line":162},[159,29553,29554],{"class":1135},"\u002F\u002F函数声明\n",[159,29556,29557],{"class":161,"line":176},[159,29558,29559],{"class":1135},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[159,29561,29562,29564,29567,29569,29571,29573,29575,29577,29579,29582],{"class":161,"line":203},[159,29563,23886],{"class":1142},[159,29565,29566],{"class":185}," max",[159,29568,1159],{"class":165},[159,29570,23886],{"class":1142},[159,29572,7885],{"class":8765},[159,29574,24233],{"class":165},[159,29576,23886],{"class":1142},[159,29578,26465],{"class":8765},[159,29580,29581],{"class":165},");",[159,29583,29584],{"class":1135},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[159,29586,29587,29589,29591],{"class":161,"line":223},[159,29588,23886],{"class":1142},[159,29590,25625],{"class":185},[159,29592,29593],{"class":165},"() \n",[159,29595,29596],{"class":161,"line":233},[159,29597,25222],{"class":165},[159,29599,29600,29602,29604,29606,29608],{"class":161,"line":239},[159,29601,25636],{"class":1142},[159,29603,7885],{"class":165},[159,29605,189],{"class":1142},[159,29607,1964],{"class":1146},[159,29609,1492],{"class":165},[159,29611,29612,29614,29616,29618,29620],{"class":161,"line":245},[159,29613,25636],{"class":1142},[159,29615,26465],{"class":165},[159,29617,189],{"class":1142},[159,29619,1739],{"class":1146},[159,29621,1492],{"class":165},[159,29623,29624,29626,29628,29631,29634,29636],{"class":161,"line":251},[159,29625,25227],{"class":165},[159,29627,24858],{"class":1142},[159,29629,29630],{"class":185},"max",[159,29632,29633],{"class":165},"(a,b)",[159,29635,24858],{"class":1142},[159,29637,24880],{"class":165},[159,29639,29640],{"class":161,"line":261},[159,29641,15685],{"class":165},[159,29643,29644,29646,29648,29650,29652,29654,29656,29658,29660],{"class":161,"line":603},[159,29645,23886],{"class":1142},[159,29647,29566],{"class":185},[159,29649,1159],{"class":165},[159,29651,23886],{"class":1142},[159,29653,7885],{"class":8765},[159,29655,24233],{"class":165},[159,29657,23886],{"class":1142},[159,29659,26465],{"class":8765},[159,29661,1165],{"class":165},[159,29663,29664],{"class":161,"line":621},[159,29665,25222],{"class":165},[159,29667,29668,29670,29672,29674,29676,29678,29680,29682],{"class":161,"line":634},[159,29669,27711],{"class":1142},[159,29671,7885],{"class":165},[159,29673,6760],{"class":1142},[159,29675,24127],{"class":165},[159,29677,18365],{"class":1142},[159,29679,8085],{"class":165},[159,29681,20934],{"class":1142},[159,29683,29684],{"class":165},"b;\n",[159,29686,29687],{"class":161,"line":640},[159,29688,15685],{"class":165},[37,29690,29692],{"id":29691},"_26函数的分文件编写","2.6函数的分文件编写",[14,29694,29695],{},"4个步骤：",[103,29697,29698,29701,29704,29707],{},[106,29699,29700],{},"1.创建后缀名为.h的头文件",[106,29702,29703],{},"2.创建后缀名为.cpp的源文件",[106,29705,29706],{},"3.在头文件中写函数的定义",[106,29708,29709],{},"4.在源文件中写函数的定义\n示例：",[14,29711,29712],{},"头文件：swap.h",[151,29714,29716],{"className":23872,"code":29715,"language":23874,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[49,29717,29718,29724,29734,29738],{"__ignoreMap":25},[159,29719,29720,29722],{"class":161,"line":162},[159,29721,25602],{"class":1142},[159,29723,25605],{"class":192},[159,29725,29726,29728,29730,29732],{"class":161,"line":176},[159,29727,25610],{"class":1142},[159,29729,25613],{"class":1142},[159,29731,25616],{"class":185},[159,29733,1492],{"class":165},[159,29735,29736],{"class":161,"line":203},[159,29737,29554],{"class":1135},[159,29739,29740,29742,29744,29746,29748,29750,29752,29754,29756],{"class":161,"line":223},[159,29741,28979],{"class":1142},[159,29743,28982],{"class":185},[159,29745,1159],{"class":165},[159,29747,23886],{"class":1142},[159,29749,7885],{"class":8765},[159,29751,24233],{"class":165},[159,29753,23886],{"class":1142},[159,29755,26465],{"class":8765},[159,29757,1953],{"class":165},[14,29759,29760],{},"源文件：swap.cpp",[151,29762,29764],{"className":23872,"code":29763,"language":23874,"meta":25,"style":25},"#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",[49,29765,29766,29773,29778,29798,29802,29813,29822,29831,29848,29865],{"__ignoreMap":25},[159,29767,29768,29770],{"class":161,"line":162},[159,29769,25602],{"class":1142},[159,29771,29772],{"class":192}," \"swap.h\"\n",[159,29774,29775],{"class":161,"line":176},[159,29776,29777],{"class":1135},"\u002F\u002F函数的定义\n",[159,29779,29780,29782,29784,29786,29788,29790,29792,29794,29796],{"class":161,"line":203},[159,29781,28979],{"class":1142},[159,29783,28982],{"class":185},[159,29785,1159],{"class":165},[159,29787,23886],{"class":1142},[159,29789,7885],{"class":8765},[159,29791,24233],{"class":165},[159,29793,23886],{"class":1142},[159,29795,26465],{"class":8765},[159,29797,1165],{"class":165},[159,29799,29800],{"class":161,"line":223},[159,29801,25222],{"class":165},[159,29803,29804,29806,29808,29810],{"class":161,"line":233},[159,29805,25636],{"class":1142},[159,29807,27873],{"class":165},[159,29809,189],{"class":1142},[159,29811,29812],{"class":165},"a;\n",[159,29814,29815,29818,29820],{"class":161,"line":239},[159,29816,29817],{"class":165},"    a",[159,29819,189],{"class":1142},[159,29821,29684],{"class":165},[159,29823,29824,29827,29829],{"class":161,"line":245},[159,29825,29826],{"class":165},"    b",[159,29828,189],{"class":1142},[159,29830,27898],{"class":165},[159,29832,29833,29835,29837,29840,29842,29844,29846],{"class":161,"line":251},[159,29834,25227],{"class":165},[159,29836,24858],{"class":1142},[159,29838,29839],{"class":192},"\"a=\"",[159,29841,24858],{"class":1142},[159,29843,8085],{"class":165},[159,29845,24858],{"class":1142},[159,29847,24880],{"class":165},[159,29849,29850,29852,29854,29857,29859,29861,29863],{"class":161,"line":261},[159,29851,25227],{"class":165},[159,29853,24858],{"class":1142},[159,29855,29856],{"class":192},"\"b=\"",[159,29858,24858],{"class":1142},[159,29860,24127],{"class":165},[159,29862,24858],{"class":1142},[159,29864,24880],{"class":165},[159,29866,29867],{"class":161,"line":603},[159,29868,15685],{"class":165},[1468,29870,29871],{},"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":25,"searchDepth":176,"depth":176,"links":29873},[29874,29875,29876,29877,29878,29879],{"id":28790,"depth":176,"text":28791},{"id":28877,"depth":176,"text":28878},{"id":28959,"depth":176,"text":28960},{"id":29185,"depth":176,"text":29186},{"id":29534,"depth":176,"text":29535},{"id":29691,"depth":176,"text":29692},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":28782,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":29886,"title":29887,"body":29888,"description":29895,"extension":23810,"meta":31295,"navigation":589,"path":31296,"seo":31297,"stem":31298,"__hash__":31299},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":29889,"toc":31285},[29890,29893,29896,29900,30060,30064,30067,30070,30073,30076,30216,30220,30223,30226,30229,30294,30298,30303,30370,30373,30377,30380,30391,30396,30415,30418,30423,30441,30444,30448,30467,30470,30474,30709,30713,30716,30719,30722,30884,30887,30891,30894,30900,31282],[10,29891,29887],{"id":29892},"_3指针",[14,29894,29895],{},"通过指针保存一个地址，指针就是个地址",[37,29897,29899],{"id":29898},"_31定义指针","3.1定义指针",[151,29901,29903],{"className":23872,"code":29902,"language":23874,"meta":25,"style":25},"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",[49,29904,29905,29913,29917,29922,29934,29939,29947,29957,29975,29995,29999,30004,30009,30014,30026,30042,30056],{"__ignoreMap":25},[159,29906,29907,29909,29911],{"class":161,"line":162},[159,29908,23886],{"class":1142},[159,29910,25625],{"class":185},[159,29912,5158],{"class":165},[159,29914,29915],{"class":161,"line":176},[159,29916,25222],{"class":165},[159,29918,29919],{"class":161,"line":203},[159,29920,29921],{"class":1135},"    \u002F\u002F1.定义指针\n",[159,29923,29924,29926,29928,29930,29932],{"class":161,"line":223},[159,29925,25636],{"class":1142},[159,29927,7885],{"class":165},[159,29929,189],{"class":1142},[159,29931,1964],{"class":1146},[159,29933,1492],{"class":165},[159,29935,29936],{"class":161,"line":233},[159,29937,29938],{"class":1135},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[159,29940,29941,29944],{"class":161,"line":239},[159,29942,29943],{"class":1142},"    int*",[159,29945,29946],{"class":165},"p;\n",[159,29948,29949,29952,29955],{"class":161,"line":245},[159,29950,29951],{"class":165},"    p",[159,29953,29954],{"class":1142},"=&",[159,29956,29812],{"class":165},[159,29958,29959,29961,29963,29966,29969,29971,29973],{"class":161,"line":251},[159,29960,25227],{"class":165},[159,29962,24858],{"class":1142},[159,29964,29965],{"class":192},"\"a的地址为：\"",[159,29967,29968],{"class":1142},"\u003C\u003C&",[159,29970,8085],{"class":165},[159,29972,24858],{"class":1142},[159,29974,24880],{"class":165},[159,29976,29977,29979,29981,29984,29986,29988,29990,29992],{"class":161,"line":261},[159,29978,25227],{"class":165},[159,29980,24858],{"class":1142},[159,29982,29983],{"class":192},"\"指针p为：\"",[159,29985,24858],{"class":1142},[159,29987,14],{"class":165},[159,29989,24858],{"class":1142},[159,29991,24923],{"class":165},[159,29993,29994],{"class":1135},"\u002F\u002F指针p表示的就是a的地址\n",[159,29996,29997],{"class":161,"line":603},[159,29998,590],{"emptyLinePlaceholder":589},[159,30000,30001],{"class":161,"line":621},[159,30002,30003],{"class":1135},"    \u002F\u002F2.使用指针\n",[159,30005,30006],{"class":161,"line":634},[159,30007,30008],{"class":1135},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[159,30010,30011],{"class":161,"line":640},[159,30012,30013],{"class":1135},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[159,30015,30016,30018,30020,30022,30024],{"class":161,"line":1075},[159,30017,1475],{"class":1142},[159,30019,14],{"class":165},[159,30021,189],{"class":1142},[159,30023,1317],{"class":1146},[159,30025,1492],{"class":165},[159,30027,30028,30030,30033,30035,30037,30039],{"class":161,"line":1081},[159,30029,25227],{"class":165},[159,30031,30032],{"class":1142},"\u003C\u003C*",[159,30034,14],{"class":165},[159,30036,24858],{"class":1142},[159,30038,24923],{"class":165},[159,30040,30041],{"class":1135},"\u002F\u002F1000\n",[159,30043,30044,30046,30048,30050,30052,30054],{"class":161,"line":1091},[159,30045,25227],{"class":165},[159,30047,24858],{"class":1142},[159,30049,8085],{"class":165},[159,30051,24858],{"class":1142},[159,30053,24923],{"class":165},[159,30055,30041],{"class":1135},[159,30057,30058],{"class":161,"line":1100},[159,30059,15685],{"class":165},[37,30061,30063],{"id":30062},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,30065,30066],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,30068,30069],{},"在32位操作系统下：占用4个字节空间",[14,30071,30072],{},"在64位操作系统下：占用8个字节空间",[14,30074,30075],{},"上方是不管啥数据类型的",[151,30077,30079],{"className":23872,"code":30078,"language":23874,"meta":25,"style":25},"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",[49,30080,30081,30089,30093,30098,30110,30115,30120,30125,30138,30160,30186,30212],{"__ignoreMap":25},[159,30082,30083,30085,30087],{"class":161,"line":162},[159,30084,23886],{"class":1142},[159,30086,25625],{"class":185},[159,30088,5158],{"class":165},[159,30090,30091],{"class":161,"line":176},[159,30092,25222],{"class":165},[159,30094,30095],{"class":161,"line":203},[159,30096,30097],{"class":1135},"    \u002F\u002F指针所占内存空间\n",[159,30099,30100,30102,30104,30106,30108],{"class":161,"line":223},[159,30101,25636],{"class":1142},[159,30103,7885],{"class":165},[159,30105,189],{"class":1142},[159,30107,1964],{"class":1146},[159,30109,1492],{"class":165},[159,30111,30112],{"class":161,"line":233},[159,30113,30114],{"class":1135},"    \u002F\u002Fint *p;\n",[159,30116,30117],{"class":161,"line":239},[159,30118,30119],{"class":1135},"    \u002F\u002Fp=&a;\n",[159,30121,30122],{"class":161,"line":245},[159,30123,30124],{"class":1135},"    \u002F\u002F上述可以写为以下：\n",[159,30126,30127,30129,30132,30134,30136],{"class":161,"line":251},[159,30128,25636],{"class":1142},[159,30130,30131],{"class":1142}," *",[159,30133,14],{"class":165},[159,30135,29954],{"class":1142},[159,30137,29812],{"class":165},[159,30139,30140,30143,30145,30148,30150,30153,30155,30157],{"class":161,"line":261},[159,30141,30142],{"class":165},"    cout ",[159,30144,24858],{"class":1142},[159,30146,30147],{"class":192},"\"sizeof(int *)\"",[159,30149,25052],{"class":1142},[159,30151,30152],{"class":165},"(p)",[159,30154,24858],{"class":1142},[159,30156,24923],{"class":165},[159,30158,30159],{"class":1135},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[159,30161,30162,30164,30166,30168,30170,30172,30174,30176,30178,30180,30183],{"class":161,"line":603},[159,30163,30142],{"class":165},[159,30165,24858],{"class":1142},[159,30167,30147],{"class":192},[159,30169,25052],{"class":1142},[159,30171,1159],{"class":165},[159,30173,23886],{"class":1142},[159,30175,30131],{"class":1142},[159,30177,18387],{"class":165},[159,30179,24858],{"class":1142},[159,30181,30182],{"class":165},"endl",[159,30184,30185],{"class":1135},"  \u002F\u002F4字节(32位的话)\n",[159,30187,30188,30190,30192,30195,30197,30199,30201,30203,30205,30207,30209],{"class":161,"line":621},[159,30189,30142],{"class":165},[159,30191,24858],{"class":1142},[159,30193,30194],{"class":192},"\"sizeof(char *)\"",[159,30196,25052],{"class":1142},[159,30198,1159],{"class":165},[159,30200,23972],{"class":1142},[159,30202,30131],{"class":1142},[159,30204,18387],{"class":165},[159,30206,24858],{"class":1142},[159,30208,24923],{"class":165},[159,30210,30211],{"class":1135}," \u002F\u002F4字节(32位的话)\n",[159,30213,30214],{"class":161,"line":634},[159,30215,15685],{"class":165},[37,30217,30219],{"id":30218},"_33空指针","3.3空指针",[14,30221,30222],{},"空指针：指针变量指向内存中编号为0的空间",[14,30224,30225],{},"用途：初始化指针变量",[14,30227,30228],{},"注意：空指针指向的内存是不可以访问的",[151,30230,30232],{"className":23872,"code":30231,"language":23874,"meta":25,"style":25},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[49,30233,30234,30242,30246,30251,30265,30270,30285,30290],{"__ignoreMap":25},[159,30235,30236,30238,30240],{"class":161,"line":162},[159,30237,23886],{"class":1142},[159,30239,25625],{"class":185},[159,30241,5158],{"class":165},[159,30243,30244],{"class":161,"line":176},[159,30245,25222],{"class":165},[159,30247,30248],{"class":161,"line":203},[159,30249,30250],{"class":1135},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[159,30252,30253,30255,30257,30259,30261,30263],{"class":161,"line":223},[159,30254,25636],{"class":1142},[159,30256,30131],{"class":1142},[159,30258,14],{"class":165},[159,30260,189],{"class":1142},[159,30262,26038],{"class":1146},[159,30264,1492],{"class":165},[159,30266,30267],{"class":161,"line":233},[159,30268,30269],{"class":1135},"    \u002F\u002F2.空指针不能进行访问\n",[159,30271,30272,30274,30276,30278,30280,30282],{"class":161,"line":239},[159,30273,1475],{"class":1142},[159,30275,14],{"class":165},[159,30277,189],{"class":1142},[159,30279,1596],{"class":1146},[159,30281,23934],{"class":165},[159,30283,30284],{"class":1135},"\u002F\u002F直接报错，压根不能访问\n",[159,30286,30287],{"class":161,"line":245},[159,30288,30289],{"class":1135},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[159,30291,30292],{"class":161,"line":251},[159,30293,15685],{"class":165},[37,30295,30297],{"id":30296},"_34野指针","3.4野指针",[14,30299,30300],{},[61,30301,30302],{},"指针变量指向非法的内存空间",[151,30304,30306],{"className":23872,"code":30305,"language":23874,"meta":25,"style":25},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[49,30307,30308,30316,30320,30349,30354,30366],{"__ignoreMap":25},[159,30309,30310,30312,30314],{"class":161,"line":162},[159,30311,23886],{"class":1142},[159,30313,25625],{"class":185},[159,30315,5158],{"class":165},[159,30317,30318],{"class":161,"line":176},[159,30319,25222],{"class":165},[159,30321,30322,30324,30326,30328,30330,30332,30334,30336,30338,30341,30344,30346],{"class":161,"line":203},[159,30323,25636],{"class":1142},[159,30325,30131],{"class":1142},[159,30327,14],{"class":165},[159,30329,189],{"class":1142},[159,30331,1159],{"class":165},[159,30333,23886],{"class":1142},[159,30335,30131],{"class":1142},[159,30337,18387],{"class":165},[159,30339,30340],{"class":1142},"0x",[159,30342,30343],{"class":1146},"1100",[159,30345,23934],{"class":165},[159,30347,30348],{"class":1135}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[159,30350,30351],{"class":161,"line":223},[159,30352,30353],{"class":1135},"    \u002F\u002F访问野指针报错\n",[159,30355,30356,30358,30360,30362,30364],{"class":161,"line":233},[159,30357,25227],{"class":165},[159,30359,30032],{"class":1142},[159,30361,14],{"class":165},[159,30363,24858],{"class":1142},[159,30365,24880],{"class":165},[159,30367,30368],{"class":161,"line":239},[159,30369,15685],{"class":165},[14,30371,30372],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[37,30374,30376],{"id":30375},"_35const修饰指针","3.5const修饰指针",[14,30378,30379],{},"三种情况：",[103,30381,30382,30385,30388],{},[106,30383,30384],{},"const修饰指针 常量指针",[106,30386,30387],{},"const修饰常量 指针常量",[106,30389,30390],{},"const即修饰指针，又修饰常量",[134,30392,30393],{},[106,30394,30395],{},"常量指针",[151,30397,30399],{"className":23872,"code":30398,"language":23874,"meta":25,"style":25},"const int *p=&a;\n",[49,30400,30401],{"__ignoreMap":25},[159,30402,30403,30405,30407,30409,30411,30413],{"class":161,"line":162},[159,30404,18326],{"class":1142},[159,30406,26029],{"class":1142},[159,30408,30131],{"class":1142},[159,30410,14],{"class":165},[159,30412,29954],{"class":1142},[159,30414,29812],{"class":165},[14,30416,30417],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[134,30419,30420],{"start":176},[106,30421,30422],{},"指针常量",[151,30424,30426],{"className":23872,"code":30425,"language":23874,"meta":25,"style":25},"int *const p=&a;\n",[49,30427,30428],{"__ignoreMap":25},[159,30429,30430,30432,30435,30437,30439],{"class":161,"line":162},[159,30431,23886],{"class":1142},[159,30433,30434],{"class":1142}," *const",[159,30436,1704],{"class":165},[159,30438,29954],{"class":1142},[159,30440,29812],{"class":165},[14,30442,30443],{},"指针的指向不可以改，指针指向的值可以改",[134,30445,30446],{"start":203},[106,30447,30390],{},[151,30449,30451],{"className":23872,"code":30450,"language":23874,"meta":25,"style":25},"const int *const p=&a;\n",[49,30452,30453],{"__ignoreMap":25},[159,30454,30455,30457,30459,30461,30463,30465],{"class":161,"line":162},[159,30456,18326],{"class":1142},[159,30458,26029],{"class":1142},[159,30460,30434],{"class":1142},[159,30462,1704],{"class":165},[159,30464,29954],{"class":1142},[159,30466,29812],{"class":165},[14,30468,30469],{},"指针的指向和指针指向的值都不可以改变",[37,30471,30473],{"id":30472},"_36指针和数组","3.6指针和数组",[151,30475,30477],{"className":23872,"code":30476,"language":23874,"meta":25,"style":25},"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",[49,30478,30479,30487,30491,30496,30550,30571,30587,30603,30614,30631,30636,30650,30676,30680,30692,30701,30705],{"__ignoreMap":25},[159,30480,30481,30483,30485],{"class":161,"line":162},[159,30482,23886],{"class":1142},[159,30484,25625],{"class":185},[159,30486,5158],{"class":165},[159,30488,30489],{"class":161,"line":176},[159,30490,25222],{"class":165},[159,30492,30493],{"class":161,"line":203},[159,30494,30495],{"class":1135},"    \u002F\u002F利用指针访问数组中的元素\n",[159,30497,30498,30500,30502,30504,30506,30508,30510,30512,30514,30516,30518,30520,30522,30524,30526,30528,30530,30532,30534,30536,30538,30540,30542,30544,30546,30548],{"class":161,"line":223},[159,30499,25636],{"class":1142},[159,30501,27585],{"class":165},[159,30503,1964],{"class":1146},[159,30505,18375],{"class":165},[159,30507,189],{"class":1142},[159,30509,24721],{"class":165},[159,30511,4932],{"class":1146},[159,30513,24233],{"class":165},[159,30515,11034],{"class":1146},[159,30517,24233],{"class":165},[159,30519,23949],{"class":1146},[159,30521,24233],{"class":165},[159,30523,8866],{"class":1146},[159,30525,24233],{"class":165},[159,30527,1753],{"class":1146},[159,30529,24233],{"class":165},[159,30531,7907],{"class":1146},[159,30533,24233],{"class":165},[159,30535,24224],{"class":1146},[159,30537,24233],{"class":165},[159,30539,24250],{"class":1146},[159,30541,24233],{"class":165},[159,30543,24273],{"class":1146},[159,30545,24233],{"class":165},[159,30547,1964],{"class":1146},[159,30549,27616],{"class":165},[159,30551,30552,30554,30556,30559,30561,30563,30565,30567,30569],{"class":161,"line":233},[159,30553,25227],{"class":165},[159,30555,24858],{"class":1142},[159,30557,30558],{"class":192},"\"数组的第一个元素为：\"",[159,30560,24858],{"class":1142},[159,30562,27529],{"class":165},[159,30564,1489],{"class":1146},[159,30566,18375],{"class":165},[159,30568,24858],{"class":1142},[159,30570,24880],{"class":165},[159,30572,30573,30575,30577,30579,30581,30584],{"class":161,"line":239},[159,30574,25636],{"class":1142},[159,30576,30131],{"class":1142},[159,30578,14],{"class":165},[159,30580,189],{"class":1142},[159,30582,30583],{"class":165},"arr;",[159,30585,30586],{"class":1135},"\u002F\u002F注意数才要加取地址符号&\n",[159,30588,30589,30591,30593,30595,30597,30599,30601],{"class":161,"line":245},[159,30590,25227],{"class":165},[159,30592,24858],{"class":1142},[159,30594,30558],{"class":192},[159,30596,30032],{"class":1142},[159,30598,14],{"class":165},[159,30600,24858],{"class":1142},[159,30602,24880],{"class":165},[159,30604,30605,30607,30609,30611],{"class":161,"line":251},[159,30606,29951],{"class":165},[159,30608,11705],{"class":1142},[159,30610,23934],{"class":165},[159,30612,30613],{"class":1135}," \u002F\u002F让指针向后偏移4个字节\n",[159,30615,30616,30618,30620,30623,30625,30627,30629],{"class":161,"line":261},[159,30617,25227],{"class":165},[159,30619,24858],{"class":1142},[159,30621,30622],{"class":192},"\"数组的第二个元素为：\"",[159,30624,30032],{"class":1142},[159,30626,14],{"class":165},[159,30628,24858],{"class":1142},[159,30630,24880],{"class":165},[159,30632,30633],{"class":161,"line":603},[159,30634,30635],{"class":1135},"    \u002F\u002F利用指针遍历数组\n",[159,30637,30638,30640,30642,30645,30647],{"class":161,"line":621},[159,30639,25636],{"class":1142},[159,30641,30131],{"class":1142},[159,30643,30644],{"class":165},"p2",[159,30646,189],{"class":1142},[159,30648,30649],{"class":165},"arr;\n",[159,30651,30652,30654,30656,30658,30660,30662,30664,30666,30668,30670,30672,30674],{"class":161,"line":634},[159,30653,11677],{"class":1142},[159,30655,11680],{"class":165},[159,30657,23886],{"class":1142},[159,30659,15383],{"class":165},[159,30661,189],{"class":1142},[159,30663,1489],{"class":1146},[159,30665,26670],{"class":165},[159,30667,166],{"class":1142},[159,30669,1964],{"class":1146},[159,30671,26670],{"class":165},[159,30673,11705],{"class":1142},[159,30675,1165],{"class":165},[159,30677,30678],{"class":161,"line":640},[159,30679,25681],{"class":165},[159,30681,30682,30684,30686,30688,30690],{"class":161,"line":1075},[159,30683,27080],{"class":165},[159,30685,30032],{"class":1142},[159,30687,30644],{"class":165},[159,30689,24858],{"class":1142},[159,30691,24880],{"class":165},[159,30693,30694,30697,30699],{"class":161,"line":1081},[159,30695,30696],{"class":165},"        p2",[159,30698,11705],{"class":1142},[159,30700,1492],{"class":165},[159,30702,30703],{"class":161,"line":1091},[159,30704,1508],{"class":165},[159,30706,30707],{"class":161,"line":1100},[159,30708,15685],{"class":165},[37,30710,30712],{"id":30711},"_37指针和函数","3.7指针和函数",[14,30714,30715],{},"利用指针做函数参数，可以修改实参的值",[14,30717,30718],{},"值传递：只改变形参，不改变实参",[14,30720,30721],{},"地址传递：",[151,30723,30725],{"className":23872,"code":30724,"language":23874,"meta":25,"style":25},"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",[49,30726,30727,30752,30756,30768,30779,30789,30793,30801,30805,30817,30829,30834,30850,30865,30880],{"__ignoreMap":25},[159,30728,30729,30731,30733,30735,30737,30739,30742,30744,30746,30748,30750],{"class":161,"line":162},[159,30730,28979],{"class":1142},[159,30732,28982],{"class":185},[159,30734,1159],{"class":165},[159,30736,23886],{"class":1142},[159,30738,30131],{"class":1142},[159,30740,30741],{"class":8765},"p1",[159,30743,24233],{"class":165},[159,30745,23886],{"class":1142},[159,30747,30131],{"class":1142},[159,30749,30644],{"class":8765},[159,30751,1165],{"class":165},[159,30753,30754],{"class":161,"line":176},[159,30755,25222],{"class":165},[159,30757,30758,30760,30762,30765],{"class":161,"line":203},[159,30759,25636],{"class":1142},[159,30761,27873],{"class":165},[159,30763,30764],{"class":1142},"=*",[159,30766,30767],{"class":165},"p1;\n",[159,30769,30770,30772,30774,30776],{"class":161,"line":223},[159,30771,1475],{"class":1142},[159,30773,30741],{"class":165},[159,30775,30764],{"class":1142},[159,30777,30778],{"class":165},"p2;\n",[159,30780,30781,30783,30785,30787],{"class":161,"line":233},[159,30782,1475],{"class":1142},[159,30784,30644],{"class":165},[159,30786,189],{"class":1142},[159,30788,27898],{"class":165},[159,30790,30791],{"class":161,"line":239},[159,30792,15685],{"class":165},[159,30794,30795,30797,30799],{"class":161,"line":245},[159,30796,23886],{"class":1142},[159,30798,25625],{"class":185},[159,30800,5158],{"class":165},[159,30802,30803],{"class":161,"line":251},[159,30804,25222],{"class":165},[159,30806,30807,30809,30811,30813,30815],{"class":161,"line":261},[159,30808,25636],{"class":1142},[159,30810,7885],{"class":165},[159,30812,189],{"class":1142},[159,30814,1964],{"class":1146},[159,30816,1492],{"class":165},[159,30818,30819,30821,30823,30825,30827],{"class":161,"line":603},[159,30820,25636],{"class":1142},[159,30822,26465],{"class":165},[159,30824,189],{"class":1142},[159,30826,1739],{"class":1146},[159,30828,1492],{"class":165},[159,30830,30831],{"class":161,"line":621},[159,30832,30833],{"class":1135},"    \u002F\u002F地址传递\n",[159,30835,30836,30838,30840,30842,30845,30847],{"class":161,"line":634},[159,30837,29176],{"class":185},[159,30839,1159],{"class":165},[159,30841,24209],{"class":1142},[159,30843,30844],{"class":165},"a,",[159,30846,24209],{"class":1142},[159,30848,30849],{"class":165},"b);\n",[159,30851,30852,30854,30856,30858,30860,30862],{"class":161,"line":640},[159,30853,25227],{"class":165},[159,30855,24858],{"class":1142},[159,30857,8085],{"class":165},[159,30859,24858],{"class":1142},[159,30861,24923],{"class":165},[159,30863,30864],{"class":1135},"\u002F\u002F20\n",[159,30866,30867,30869,30871,30873,30875,30877],{"class":161,"line":1075},[159,30868,25227],{"class":165},[159,30870,24858],{"class":1142},[159,30872,24127],{"class":165},[159,30874,24858],{"class":1142},[159,30876,24923],{"class":165},[159,30878,30879],{"class":1135},"\u002F\u002F10\n",[159,30881,30882],{"class":161,"line":1081},[159,30883,15685],{"class":165},[14,30885,30886],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[37,30888,30890],{"id":30889},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,30892,30893],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,30895,30896,30897,30899],{},"例如数组：int arr",[159,30898,1964],{},"={4,3,6,9,1,2,10,8,7,5}",[151,30901,30903],{"className":23872,"code":30902,"language":23874,"meta":25,"style":25},"#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",[49,30904,30905,30911,30921,30945,30949,30980,30984,31018,31022,31040,31044,31055,31070,31085,31089,31093,31097,31101,31105,31113,31117,31122,31176,31188,31200,31205,31213,31217,31222,31247,31251,31265,31274,31278],{"__ignoreMap":25},[159,30906,30907,30909],{"class":161,"line":162},[159,30908,25602],{"class":1142},[159,30910,25605],{"class":192},[159,30912,30913,30915,30917,30919],{"class":161,"line":176},[159,30914,25610],{"class":1142},[159,30916,25613],{"class":1142},[159,30918,25616],{"class":185},[159,30920,1492],{"class":165},[159,30922,30923,30925,30928,30930,30932,30934,30936,30938,30940,30943],{"class":161,"line":203},[159,30924,28979],{"class":1142},[159,30926,30927],{"class":185}," bubbleSort",[159,30929,1159],{"class":165},[159,30931,23886],{"class":1142},[159,30933,30131],{"class":1142},[159,30935,14],{"class":8765},[159,30937,24233],{"class":165},[159,30939,23886],{"class":1142},[159,30941,30942],{"class":8765}," len",[159,30944,1165],{"class":165},[159,30946,30947],{"class":161,"line":223},[159,30948,25222],{"class":165},[159,30950,30951,30953,30955,30957,30959,30961,30963,30965,30967,30970,30972,30974,30976,30978],{"class":161,"line":233},[159,30952,11677],{"class":1142},[159,30954,1159],{"class":165},[159,30956,23886],{"class":1142},[159,30958,15383],{"class":165},[159,30960,189],{"class":1142},[159,30962,1489],{"class":1146},[159,30964,26670],{"class":165},[159,30966,166],{"class":1142},[159,30968,30969],{"class":165},"len",[159,30971,24376],{"class":1142},[159,30973,4932],{"class":1146},[159,30975,26670],{"class":165},[159,30977,11705],{"class":1142},[159,30979,1165],{"class":165},[159,30981,30982],{"class":161,"line":239},[159,30983,25681],{"class":165},[159,30985,30986,30988,30990,30992,30994,30996,30998,31000,31002,31004,31006,31008,31010,31012,31014,31016],{"class":161,"line":245},[159,30987,27032],{"class":1142},[159,30989,1159],{"class":165},[159,30991,23886],{"class":1142},[159,30993,27039],{"class":165},[159,30995,189],{"class":1142},[159,30997,1489],{"class":1146},[159,30999,27046],{"class":165},[159,31001,166],{"class":1142},[159,31003,30969],{"class":165},[159,31005,24376],{"class":1142},[159,31007,1241],{"class":165},[159,31009,24376],{"class":1142},[159,31011,4932],{"class":1146},[159,31013,27046],{"class":165},[159,31015,11705],{"class":1142},[159,31017,1165],{"class":165},[159,31019,31020],{"class":161,"line":251},[159,31021,26153],{"class":165},[159,31023,31024,31026,31029,31031,31034,31036,31038],{"class":161,"line":261},[159,31025,28260],{"class":1142},[159,31027,31028],{"class":165},"(p[j]",[159,31030,6760],{"class":1142},[159,31032,31033],{"class":165},"p[j",[159,31035,2704],{"class":1142},[159,31037,4932],{"class":1146},[159,31039,28275],{"class":165},[159,31041,31042],{"class":161,"line":603},[159,31043,28280],{"class":165},[159,31045,31046,31048,31050,31052],{"class":161,"line":621},[159,31047,28285],{"class":1142},[159,31049,27873],{"class":165},[159,31051,189],{"class":1142},[159,31053,31054],{"class":165},"p[j];\n",[159,31056,31057,31060,31062,31064,31066,31068],{"class":161,"line":634},[159,31058,31059],{"class":165},"                p[j]",[159,31061,189],{"class":1142},[159,31063,31033],{"class":165},[159,31065,2704],{"class":1142},[159,31067,4932],{"class":1146},[159,31069,28308],{"class":165},[159,31071,31072,31075,31077,31079,31081,31083],{"class":161,"line":640},[159,31073,31074],{"class":165},"                p[j",[159,31076,2704],{"class":1142},[159,31078,4932],{"class":1146},[159,31080,18375],{"class":165},[159,31082,189],{"class":1142},[159,31084,27898],{"class":165},[159,31086,31087],{"class":161,"line":1075},[159,31088,28328],{"class":165},[159,31090,31091],{"class":161,"line":1081},[159,31092,7530],{"class":165},[159,31094,31095],{"class":161,"line":1091},[159,31096,1508],{"class":165},[159,31098,31099],{"class":161,"line":1100},[159,31100,15685],{"class":165},[159,31102,31103],{"class":161,"line":1123},[159,31104,590],{"emptyLinePlaceholder":589},[159,31106,31107,31109,31111],{"class":161,"line":1132},[159,31108,23886],{"class":1142},[159,31110,25625],{"class":185},[159,31112,5158],{"class":165},[159,31114,31115],{"class":161,"line":1139},[159,31116,25222],{"class":165},[159,31118,31119],{"class":161,"line":1168},[159,31120,31121],{"class":1135},"    \u002F\u002F 1.创建数组\n",[159,31123,31124,31126,31128,31130,31132,31134,31136,31138,31140,31142,31144,31146,31148,31150,31152,31154,31156,31158,31160,31162,31164,31166,31168,31170,31172,31174],{"class":161,"line":1174},[159,31125,25636],{"class":1142},[159,31127,27585],{"class":165},[159,31129,1964],{"class":1146},[159,31131,18375],{"class":165},[159,31133,189],{"class":1142},[159,31135,24721],{"class":165},[159,31137,8866],{"class":1146},[159,31139,24233],{"class":165},[159,31141,23949],{"class":1146},[159,31143,24233],{"class":165},[159,31145,7907],{"class":1146},[159,31147,24233],{"class":165},[159,31149,24273],{"class":1146},[159,31151,24233],{"class":165},[159,31153,4932],{"class":1146},[159,31155,24233],{"class":165},[159,31157,11034],{"class":1146},[159,31159,24233],{"class":165},[159,31161,1964],{"class":1146},[159,31163,24233],{"class":165},[159,31165,24250],{"class":1146},[159,31167,24233],{"class":165},[159,31169,24224],{"class":1146},[159,31171,24233],{"class":165},[159,31173,1753],{"class":1146},[159,31175,27616],{"class":165},[159,31177,31178,31180,31182,31184,31186],{"class":161,"line":1180},[159,31179,25636],{"class":1142},[159,31181,30942],{"class":165},[159,31183,189],{"class":1142},[159,31185,1964],{"class":1146},[159,31187,1492],{"class":165},[159,31189,31190,31192,31194,31196,31198],{"class":161,"line":1194},[159,31191,25636],{"class":1142},[159,31193,30131],{"class":1142},[159,31195,14],{"class":165},[159,31197,189],{"class":1142},[159,31199,30649],{"class":165},[159,31201,31202],{"class":161,"line":1200},[159,31203,31204],{"class":1135},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[159,31206,31207,31210],{"class":161,"line":1221},[159,31208,31209],{"class":185},"    bubbleSort",[159,31211,31212],{"class":165},"(p,len);\n",[159,31214,31215],{"class":161,"line":1230},[159,31216,590],{"emptyLinePlaceholder":589},[159,31218,31219],{"class":161,"line":1247},[159,31220,31221],{"class":1135},"    \u002F\u002F 3.打印排序后的数组\n",[159,31223,31224,31226,31228,31230,31232,31234,31236,31238,31240,31243,31245],{"class":161,"line":1265},[159,31225,11677],{"class":1142},[159,31227,11680],{"class":165},[159,31229,23886],{"class":1142},[159,31231,15383],{"class":165},[159,31233,189],{"class":1142},[159,31235,1489],{"class":1146},[159,31237,11702],{"class":165},[159,31239,166],{"class":1142},[159,31241,31242],{"class":165},"len; i",[159,31244,11705],{"class":1142},[159,31246,1165],{"class":165},[159,31248,31249],{"class":161,"line":1277},[159,31250,25681],{"class":165},[159,31252,31253,31255,31257,31259,31261,31263],{"class":161,"line":1283},[159,31254,27080],{"class":165},[159,31256,30032],{"class":1142},[159,31258,14],{"class":165},[159,31260,24858],{"class":1142},[159,31262,552],{"class":192},[159,31264,1492],{"class":165},[159,31266,31267,31270,31272],{"class":161,"line":1294},[159,31268,31269],{"class":165},"        p",[159,31271,11705],{"class":1142},[159,31273,1492],{"class":165},[159,31275,31276],{"class":161,"line":1305},[159,31277,1508],{"class":165},[159,31279,31280],{"class":161,"line":1311},[159,31281,15685],{"class":165},[1468,31283,31284],{},"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":25,"searchDepth":176,"depth":176,"links":31286},[31287,31288,31289,31290,31291,31292,31293,31294],{"id":29898,"depth":176,"text":29899},{"id":30062,"depth":176,"text":30063},{"id":30218,"depth":176,"text":30219},{"id":30296,"depth":176,"text":30297},{"id":30375,"depth":176,"text":30376},{"id":30472,"depth":176,"text":30473},{"id":30711,"depth":176,"text":30712},{"id":30889,"depth":176,"text":30890},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":29887,"description":29895},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":31301,"title":31302,"body":31303,"description":31310,"extension":23810,"meta":34249,"navigation":589,"path":34250,"seo":34251,"stem":34252,"__hash__":34253},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":31304,"toc":34240},[31305,31308,31311,31315,31318,31321,31332,31660,31663,31667,31670,31677,31932,31936,31939,31942,32096,32100,32103,32106,32312,32316,32319,32621,32624,32632,32636,32639,32790,32792,32803,32860,32864,32869,33505,33513,33516,33608,33611,34231,34237],[10,31306,31302],{"id":31307},"_4结构体",[14,31309,31310],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[37,31312,31314],{"id":31313},"_41结构体定义与使用","4.1结构体定义与使用",[14,31316,31317],{},"语法：struct 结构体名 {结构体成员列表}；",[14,31319,31320],{},"通过结构体创建变量的方式：",[103,31322,31323,31326,31329],{},[106,31324,31325],{},"struct 结构体名 变量名",[106,31327,31328],{},"struct 结构体名 变量名={成员1值，成员2值...}",[106,31330,31331],{},"定义结构体时顺便创建变量",[151,31333,31335],{"className":23872,"code":31334,"language":23874,"meta":25,"style":25},"#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",[49,31336,31337,31343,31353,31360,31365,31373,31377,31382,31386,31391,31396,31401,31408,31413,31420,31424,31431,31435,31439,31443,31447,31451,31455,31461,31465,31471,31479,31487,31491,31496,31501,31512,31517,31529,31540,31551,31556,31579,31583,31588,31614,31618,31623,31634,31645,31656],{"__ignoreMap":25},[159,31338,31339,31341],{"class":161,"line":162},[159,31340,25602],{"class":1142},[159,31342,25605],{"class":192},[159,31344,31345,31347,31349,31351],{"class":161,"line":176},[159,31346,25610],{"class":1142},[159,31348,25613],{"class":1142},[159,31350,25616],{"class":185},[159,31352,1492],{"class":165},[159,31354,31355,31357],{"class":161,"line":203},[159,31356,25602],{"class":1142},[159,31358,31359],{"class":192},"\u003Cstring>\n",[159,31361,31362],{"class":161,"line":223},[159,31363,31364],{"class":1135},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[159,31366,31367,31370],{"class":161,"line":233},[159,31368,31369],{"class":1142},"struct",[159,31371,31372],{"class":185}," Student\n",[159,31374,31375],{"class":161,"line":239},[159,31376,25222],{"class":165},[159,31378,31379],{"class":161,"line":245},[159,31380,31381],{"class":1135},"    \u002F\u002F成员列表\n",[159,31383,31384],{"class":161,"line":251},[159,31385,590],{"emptyLinePlaceholder":589},[159,31387,31388],{"class":161,"line":261},[159,31389,31390],{"class":1135},"    \u002F\u002F姓名\n",[159,31392,31393],{"class":161,"line":603},[159,31394,31395],{"class":165},"    string name;\n",[159,31397,31398],{"class":161,"line":621},[159,31399,31400],{"class":1135},"    \u002F\u002F年龄\n",[159,31402,31403,31405],{"class":161,"line":634},[159,31404,25636],{"class":1142},[159,31406,31407],{"class":165}," age;\n",[159,31409,31410],{"class":161,"line":640},[159,31411,31412],{"class":1135},"    \u002F\u002F分数\n",[159,31414,31415,31417],{"class":161,"line":1075},[159,31416,25636],{"class":1142},[159,31418,31419],{"class":165}," score;\n",[159,31421,31422],{"class":161,"line":1081},[159,31423,27616],{"class":165},[159,31425,31426,31428],{"class":161,"line":1091},[159,31427,31369],{"class":1142},[159,31429,31430],{"class":185}," School\n",[159,31432,31433],{"class":161,"line":1100},[159,31434,25222],{"class":165},[159,31436,31437],{"class":161,"line":1123},[159,31438,31381],{"class":1135},[159,31440,31441],{"class":161,"line":1132},[159,31442,590],{"emptyLinePlaceholder":589},[159,31444,31445],{"class":161,"line":1139},[159,31446,31390],{"class":1135},[159,31448,31449],{"class":161,"line":1168},[159,31450,31395],{"class":165},[159,31452,31453],{"class":161,"line":1174},[159,31454,31400],{"class":1135},[159,31456,31457,31459],{"class":161,"line":1180},[159,31458,25636],{"class":1142},[159,31460,31407],{"class":165},[159,31462,31463],{"class":161,"line":1194},[159,31464,31412],{"class":1135},[159,31466,31467,31469],{"class":161,"line":1200},[159,31468,25636],{"class":1142},[159,31470,31419],{"class":165},[159,31472,31473,31476],{"class":161,"line":1221},[159,31474,31475],{"class":165},"} s3;",[159,31477,31478],{"class":1135}," \u002F\u002F创建结构体时就创建了变量\n",[159,31480,31481,31483,31485],{"class":161,"line":1230},[159,31482,23886],{"class":1142},[159,31484,25625],{"class":185},[159,31486,5158],{"class":165},[159,31488,31489],{"class":161,"line":1247},[159,31490,25222],{"class":165},[159,31492,31493],{"class":161,"line":1265},[159,31494,31495],{"class":1135},"    \u002F\u002F2.通过学生类型创建具体学生\n",[159,31497,31498],{"class":161,"line":1277},[159,31499,31500],{"class":1135},"    \u002F\u002F2.1 struct Student s1;\n",[159,31502,31503,31506,31509],{"class":161,"line":1283},[159,31504,31505],{"class":1142},"    struct",[159,31507,31508],{"class":185}," Student",[159,31510,31511],{"class":165}," s1;\n",[159,31513,31514],{"class":161,"line":1294},[159,31515,31516],{"class":1135},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[159,31518,31519,31522,31524,31527],{"class":161,"line":1305},[159,31520,31521],{"class":165},"    s1.name",[159,31523,189],{"class":1142},[159,31525,31526],{"class":192},"\"张三\"",[159,31528,1492],{"class":165},[159,31530,31531,31534,31536,31538],{"class":161,"line":1311},[159,31532,31533],{"class":165},"    s1.age",[159,31535,189],{"class":1142},[159,31537,18723],{"class":1146},[159,31539,1492],{"class":165},[159,31541,31542,31545,31547,31549],{"class":161,"line":1322},[159,31543,31544],{"class":165},"    s1.score",[159,31546,189],{"class":1142},[159,31548,24118],{"class":1146},[159,31550,1492],{"class":165},[159,31552,31553],{"class":161,"line":1327},[159,31554,31555],{"class":1135},"    \u002F\u002F输出结果\n",[159,31557,31558,31560,31562,31565,31567,31570,31572,31575,31577],{"class":161,"line":1336},[159,31559,25227],{"class":165},[159,31561,24858],{"class":1142},[159,31563,31564],{"class":165},"s1.name",[159,31566,24858],{"class":1142},[159,31568,31569],{"class":165},"s1.age",[159,31571,24858],{"class":1142},[159,31573,31574],{"class":165},"s1.score",[159,31576,24858],{"class":1142},[159,31578,24880],{"class":165},[159,31580,31581],{"class":161,"line":1345},[159,31582,590],{"emptyLinePlaceholder":589},[159,31584,31585],{"class":161,"line":1350},[159,31586,31587],{"class":1135},"    \u002F\u002F2.2 struct Student s2={...}\n",[159,31589,31590,31592,31594,31597,31599,31601,31604,31606,31608,31610,31612],{"class":161,"line":1764},[159,31591,31505],{"class":1142},[159,31593,31508],{"class":185},[159,31595,31596],{"class":165}," s2",[159,31598,189],{"class":1142},[159,31600,24721],{"class":165},[159,31602,31603],{"class":192},"\"王五\"",[159,31605,24233],{"class":165},[159,31607,18723],{"class":1146},[159,31609,24233],{"class":165},[159,31611,24118],{"class":1146},[159,31613,27616],{"class":165},[159,31615,31616],{"class":161,"line":1769},[159,31617,590],{"emptyLinePlaceholder":589},[159,31619,31620],{"class":161,"line":1777},[159,31621,31622],{"class":1135},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[159,31624,31625,31628,31630,31632],{"class":161,"line":1788},[159,31626,31627],{"class":165},"    s3.name",[159,31629,189],{"class":1142},[159,31631,680],{"class":192},[159,31633,1492],{"class":165},[159,31635,31636,31639,31641,31643],{"class":161,"line":1802},[159,31637,31638],{"class":165},"    s3.age",[159,31640,189],{"class":1142},[159,31642,18723],{"class":1146},[159,31644,1492],{"class":165},[159,31646,31647,31650,31652,31654],{"class":161,"line":1815},[159,31648,31649],{"class":165},"    s3.score",[159,31651,189],{"class":1142},[159,31653,1739],{"class":1146},[159,31655,1492],{"class":165},[159,31657,31658],{"class":161,"line":1828},[159,31659,15685],{"class":165},[14,31661,31662],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[37,31664,31666],{"id":31665},"_42结构体数组","4.2结构体数组",[14,31668,31669],{},"将自定义的结构体放入到数组中方便维护",[14,31671,31672,31673,31676],{},"语法：struct 结构体名 数组名",[159,31674,31675],{},"元素个数","={ {}，{},...{} };",[151,31678,31680],{"className":23872,"code":31679,"language":23874,"meta":25,"style":25},"#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",[49,31681,31682,31688,31698,31704,31709,31715,31719,31723,31729,31735,31739,31743,31751,31755,31760,31775,31779,31795,31811,31815,31820,31836,31851,31866,31871,31897,31901,31924,31928],{"__ignoreMap":25},[159,31683,31684,31686],{"class":161,"line":162},[159,31685,25602],{"class":1142},[159,31687,25605],{"class":192},[159,31689,31690,31692,31694,31696],{"class":161,"line":176},[159,31691,25610],{"class":1142},[159,31693,25613],{"class":1142},[159,31695,25616],{"class":185},[159,31697,1492],{"class":165},[159,31699,31700,31702],{"class":161,"line":203},[159,31701,25602],{"class":1142},[159,31703,31359],{"class":192},[159,31705,31706],{"class":161,"line":223},[159,31707,31708],{"class":1135},"\u002F\u002F1.定义结构体\n",[159,31710,31711,31713],{"class":161,"line":233},[159,31712,31369],{"class":1142},[159,31714,31372],{"class":185},[159,31716,31717],{"class":161,"line":239},[159,31718,25222],{"class":165},[159,31720,31721],{"class":161,"line":245},[159,31722,31395],{"class":165},[159,31724,31725,31727],{"class":161,"line":251},[159,31726,25636],{"class":1142},[159,31728,31407],{"class":165},[159,31730,31731,31733],{"class":161,"line":261},[159,31732,25636],{"class":1142},[159,31734,31419],{"class":165},[159,31736,31737],{"class":161,"line":603},[159,31738,590],{"emptyLinePlaceholder":589},[159,31740,31741],{"class":161,"line":621},[159,31742,27616],{"class":165},[159,31744,31745,31747,31749],{"class":161,"line":634},[159,31746,23886],{"class":1142},[159,31748,25625],{"class":185},[159,31750,5158],{"class":165},[159,31752,31753],{"class":161,"line":640},[159,31754,25222],{"class":165},[159,31756,31757],{"class":161,"line":1075},[159,31758,31759],{"class":1135},"    \u002F\u002F2.创建结构体数组\n",[159,31761,31762,31764,31766,31769,31771,31773],{"class":161,"line":1081},[159,31763,31505],{"class":1142},[159,31765,31508],{"class":185},[159,31767,31768],{"class":165}," stuArray[",[159,31770,11034],{"class":1146},[159,31772,18375],{"class":165},[159,31774,28526],{"class":1142},[159,31776,31777],{"class":161,"line":1091},[159,31778,25681],{"class":165},[159,31780,31781,31783,31785,31787,31789,31791,31793],{"class":161,"line":1100},[159,31782,28535],{"class":165},[159,31784,31526],{"class":192},[159,31786,24233],{"class":165},[159,31788,18723],{"class":1146},[159,31790,24233],{"class":165},[159,31792,1596],{"class":1146},[159,31794,28548],{"class":165},[159,31796,31797,31799,31801,31803,31805,31807,31809],{"class":161,"line":1123},[159,31798,28535],{"class":165},[159,31800,680],{"class":192},[159,31802,24233],{"class":165},[159,31804,1673],{"class":1146},[159,31806,24233],{"class":165},[159,31808,1673],{"class":1146},[159,31810,15685],{"class":165},[159,31812,31813],{"class":161,"line":1132},[159,31814,1508],{"class":165},[159,31816,31817],{"class":161,"line":1139},[159,31818,31819],{"class":1135},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[159,31821,31822,31825,31827,31830,31832,31834],{"class":161,"line":1168},[159,31823,31824],{"class":165},"    stuArray[",[159,31826,4932],{"class":1146},[159,31828,31829],{"class":165},"].name",[159,31831,189],{"class":1142},[159,31833,708],{"class":192},[159,31835,1492],{"class":165},[159,31837,31838,31840,31842,31845,31847,31849],{"class":161,"line":1174},[159,31839,31824],{"class":165},[159,31841,4932],{"class":1146},[159,31843,31844],{"class":165},"].age",[159,31846,189],{"class":1142},[159,31848,11034],{"class":1146},[159,31850,1492],{"class":165},[159,31852,31853,31855,31857,31860,31862,31864],{"class":161,"line":1180},[159,31854,31824],{"class":165},[159,31856,4932],{"class":1146},[159,31858,31859],{"class":165},"].score",[159,31861,189],{"class":1142},[159,31863,11034],{"class":1146},[159,31865,1492],{"class":165},[159,31867,31868],{"class":161,"line":1194},[159,31869,31870],{"class":1135},"    \u002F\u002F4.遍历结构体数组\n",[159,31872,31873,31875,31877,31879,31881,31883,31885,31887,31889,31891,31893,31895],{"class":161,"line":1200},[159,31874,11677],{"class":1142},[159,31876,11680],{"class":165},[159,31878,23886],{"class":1142},[159,31880,15383],{"class":165},[159,31882,189],{"class":1142},[159,31884,1489],{"class":1146},[159,31886,26670],{"class":165},[159,31888,166],{"class":1142},[159,31890,11034],{"class":1146},[159,31892,26670],{"class":165},[159,31894,11705],{"class":1142},[159,31896,1165],{"class":165},[159,31898,31899],{"class":161,"line":1221},[159,31900,25681],{"class":165},[159,31902,31903,31905,31907,31910,31912,31915,31917,31920,31922],{"class":161,"line":1230},[159,31904,27080],{"class":165},[159,31906,24858],{"class":1142},[159,31908,31909],{"class":165},"stuArray[i].name",[159,31911,24858],{"class":1142},[159,31913,31914],{"class":165},"stuArray[i].age",[159,31916,24858],{"class":1142},[159,31918,31919],{"class":165},"stuArray[i].score",[159,31921,24858],{"class":1142},[159,31923,24880],{"class":165},[159,31925,31926],{"class":161,"line":1247},[159,31927,1508],{"class":165},[159,31929,31930],{"class":161,"line":1265},[159,31931,15685],{"class":165},[37,31933,31935],{"id":31934},"_43结构体指针","4.3结构体指针",[14,31937,31938],{},"作用：通过指针访问结构体中的成员",[14,31940,31941],{},"利用操作符->可以通过结构体指针访问结构体属性",[151,31943,31945],{"className":23872,"code":31944,"language":23874,"meta":25,"style":25},"#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",[49,31946,31947,31953,31963,31969,31973,31979,31983,31987,31993,31999,32003,32011,32015,32020,32044,32049,32064,32069,32092],{"__ignoreMap":25},[159,31948,31949,31951],{"class":161,"line":162},[159,31950,25602],{"class":1142},[159,31952,25605],{"class":192},[159,31954,31955,31957,31959,31961],{"class":161,"line":176},[159,31956,25610],{"class":1142},[159,31958,25613],{"class":1142},[159,31960,25616],{"class":185},[159,31962,1492],{"class":165},[159,31964,31965,31967],{"class":161,"line":203},[159,31966,25602],{"class":1142},[159,31968,31359],{"class":192},[159,31970,31971],{"class":161,"line":223},[159,31972,31708],{"class":1135},[159,31974,31975,31977],{"class":161,"line":233},[159,31976,31369],{"class":1142},[159,31978,31372],{"class":185},[159,31980,31981],{"class":161,"line":239},[159,31982,25222],{"class":165},[159,31984,31985],{"class":161,"line":245},[159,31986,31395],{"class":165},[159,31988,31989,31991],{"class":161,"line":251},[159,31990,25636],{"class":1142},[159,31992,31407],{"class":165},[159,31994,31995,31997],{"class":161,"line":261},[159,31996,25636],{"class":1142},[159,31998,31419],{"class":165},[159,32000,32001],{"class":161,"line":603},[159,32002,27616],{"class":165},[159,32004,32005,32007,32009],{"class":161,"line":621},[159,32006,23886],{"class":1142},[159,32008,25625],{"class":185},[159,32010,5158],{"class":165},[159,32012,32013],{"class":161,"line":634},[159,32014,25222],{"class":165},[159,32016,32017],{"class":161,"line":640},[159,32018,32019],{"class":1135},"    \u002F\u002F创建学生结构体变量\n",[159,32021,32022,32024,32026,32028,32030,32032,32034,32036,32038,32040,32042],{"class":161,"line":1075},[159,32023,31505],{"class":1142},[159,32025,31508],{"class":185},[159,32027,20987],{"class":165},[159,32029,189],{"class":1142},[159,32031,24721],{"class":165},[159,32033,31526],{"class":192},[159,32035,24233],{"class":165},[159,32037,18723],{"class":1146},[159,32039,24233],{"class":165},[159,32041,13303],{"class":1146},[159,32043,27616],{"class":165},[159,32045,32046],{"class":161,"line":1081},[159,32047,32048],{"class":1135},"    \u002F\u002F通过指针指向结构体变量\n",[159,32050,32051,32053,32055,32057,32059,32061],{"class":161,"line":1091},[159,32052,31505],{"class":1142},[159,32054,31508],{"class":185},[159,32056,30131],{"class":1142},[159,32058,14],{"class":165},[159,32060,29954],{"class":1142},[159,32062,32063],{"class":165},"s\n",[159,32065,32066],{"class":161,"line":1100},[159,32067,32068],{"class":1135},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[159,32070,32071,32073,32075,32078,32080,32083,32085,32088,32090],{"class":161,"line":1123},[159,32072,25227],{"class":165},[159,32074,24858],{"class":1142},[159,32076,32077],{"class":165},"p->name",[159,32079,24858],{"class":1142},[159,32081,32082],{"class":165},"p->age",[159,32084,24858],{"class":1142},[159,32086,32087],{"class":165},"p->score",[159,32089,24858],{"class":1142},[159,32091,24880],{"class":165},[159,32093,32094],{"class":161,"line":1132},[159,32095,15685],{"class":165},[37,32097,32099],{"id":32098},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,32101,32102],{},"作用：结构体中的成员可以是另一个结构体",[14,32104,32105],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[151,32107,32109],{"className":23872,"code":32108,"language":23874,"meta":25,"style":25},"#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",[49,32110,32111,32117,32127,32133,32138,32146,32150,32154,32160,32166,32170,32175,32182,32186,32193,32197,32203,32208,32212,32220,32224,32229,32234,32239,32250,32262,32273,32286,32297,32308],{"__ignoreMap":25},[159,32112,32113,32115],{"class":161,"line":162},[159,32114,25602],{"class":1142},[159,32116,25605],{"class":192},[159,32118,32119,32121,32123,32125],{"class":161,"line":176},[159,32120,25610],{"class":1142},[159,32122,25613],{"class":1142},[159,32124,25616],{"class":185},[159,32126,1492],{"class":165},[159,32128,32129,32131],{"class":161,"line":203},[159,32130,25602],{"class":1142},[159,32132,31359],{"class":192},[159,32134,32135],{"class":161,"line":223},[159,32136,32137],{"class":1135},"\u002F\u002F定义学生结构体\n",[159,32139,32140,32142,32144],{"class":161,"line":233},[159,32141,31369],{"class":1142},[159,32143,31508],{"class":185},[159,32145,17636],{"class":165},[159,32147,32148],{"class":161,"line":239},[159,32149,25222],{"class":165},[159,32151,32152],{"class":161,"line":245},[159,32153,31395],{"class":165},[159,32155,32156,32158],{"class":161,"line":251},[159,32157,25636],{"class":1142},[159,32159,31407],{"class":165},[159,32161,32162,32164],{"class":161,"line":261},[159,32163,25636],{"class":1142},[159,32165,31419],{"class":165},[159,32167,32168],{"class":161,"line":603},[159,32169,15685],{"class":165},[159,32171,32172],{"class":161,"line":621},[159,32173,32174],{"class":1135},"\u002F\u002F定义老师结构体\n",[159,32176,32177,32179],{"class":161,"line":634},[159,32178,31369],{"class":1142},[159,32180,32181],{"class":185}," Teacher\n",[159,32183,32184],{"class":161,"line":640},[159,32185,25222],{"class":165},[159,32187,32188,32190],{"class":161,"line":1075},[159,32189,25636],{"class":1142},[159,32191,32192],{"class":165}," id;\n",[159,32194,32195],{"class":161,"line":1081},[159,32196,31395],{"class":165},[159,32198,32199,32201],{"class":161,"line":1091},[159,32200,25636],{"class":1142},[159,32202,31407],{"class":165},[159,32204,32205],{"class":161,"line":1100},[159,32206,32207],{"class":165},"    Student stu;\n",[159,32209,32210],{"class":161,"line":1123},[159,32211,15685],{"class":165},[159,32213,32214,32216,32218],{"class":161,"line":1132},[159,32215,23886],{"class":1142},[159,32217,25625],{"class":185},[159,32219,29593],{"class":165},[159,32221,32222],{"class":161,"line":1139},[159,32223,25222],{"class":165},[159,32225,32226],{"class":161,"line":1168},[159,32227,32228],{"class":1135},"    \u002F\u002F结构体嵌套结构体\n",[159,32230,32231],{"class":161,"line":1174},[159,32232,32233],{"class":1135},"    \u002F\u002F创建老师\n",[159,32235,32236],{"class":161,"line":1180},[159,32237,32238],{"class":165},"    Teacher t;\n",[159,32240,32241,32244,32246,32248],{"class":161,"line":1194},[159,32242,32243],{"class":165},"    t.id",[159,32245,189],{"class":1142},[159,32247,1596],{"class":1146},[159,32249,1492],{"class":165},[159,32251,32252,32255,32257,32260],{"class":161,"line":1200},[159,32253,32254],{"class":165},"    t.name",[159,32256,189],{"class":1142},[159,32258,32259],{"class":192},"\"老王\"",[159,32261,1492],{"class":165},[159,32263,32264,32267,32269,32271],{"class":161,"line":1221},[159,32265,32266],{"class":165},"    t.age",[159,32268,189],{"class":1142},[159,32270,18723],{"class":1146},[159,32272,1492],{"class":165},[159,32274,32275,32278,32280,32283],{"class":161,"line":1230},[159,32276,32277],{"class":165},"    t.stu.name",[159,32279,189],{"class":1142},[159,32281,32282],{"class":192},"\"小王\"",[159,32284,32285],{"class":165},"；\n",[159,32287,32288,32291,32293,32295],{"class":161,"line":1247},[159,32289,32290],{"class":165},"    t.stu.age",[159,32292,189],{"class":1142},[159,32294,1739],{"class":1146},[159,32296,1492],{"class":165},[159,32298,32299,32302,32304,32306],{"class":161,"line":1265},[159,32300,32301],{"class":165},"    t.stu.score",[159,32303,189],{"class":1142},[159,32305,7907],{"class":1146},[159,32307,1492],{"class":165},[159,32309,32310],{"class":161,"line":1277},[159,32311,15685],{"class":165},[37,32313,32315],{"id":32314},"_45结构体做函数参数","4.5结构体做函数参数",[14,32317,32318],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[151,32320,32322],{"className":23872,"code":32321,"language":23874,"meta":25,"style":25},"#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",[49,32323,32324,32330,32340,32346,32352,32356,32360,32366,32372,32376,32381,32386,32403,32407,32440,32444,32449,32468,32472,32503,32507,32515,32519,32528,32540,32551,32563,32576,32584,32597,32609,32617],{"__ignoreMap":25},[159,32325,32326,32328],{"class":161,"line":162},[159,32327,25602],{"class":1142},[159,32329,25605],{"class":192},[159,32331,32332,32334,32336,32338],{"class":161,"line":176},[159,32333,25610],{"class":1142},[159,32335,25613],{"class":1142},[159,32337,25616],{"class":185},[159,32339,1492],{"class":165},[159,32341,32342,32344],{"class":161,"line":203},[159,32343,25602],{"class":1142},[159,32345,31359],{"class":192},[159,32347,32348,32350],{"class":161,"line":223},[159,32349,31369],{"class":1142},[159,32351,31372],{"class":185},[159,32353,32354],{"class":161,"line":233},[159,32355,25222],{"class":165},[159,32357,32358],{"class":161,"line":239},[159,32359,31395],{"class":165},[159,32361,32362,32364],{"class":161,"line":245},[159,32363,25636],{"class":1142},[159,32365,31407],{"class":165},[159,32367,32368,32370],{"class":161,"line":251},[159,32369,25636],{"class":1142},[159,32371,31419],{"class":165},[159,32373,32374],{"class":161,"line":261},[159,32375,27616],{"class":165},[159,32377,32378],{"class":161,"line":603},[159,32379,32380],{"class":1135},"\u002F\u002F打印学生信息的函数\n",[159,32382,32383],{"class":161,"line":621},[159,32384,32385],{"class":1135},"\u002F\u002F值传递\n",[159,32387,32388,32390,32393,32395,32397,32399,32401],{"class":161,"line":634},[159,32389,28979],{"class":1142},[159,32391,32392],{"class":185}," printStudent1",[159,32394,1159],{"class":165},[159,32396,31369],{"class":1142},[159,32398,31508],{"class":185},[159,32400,20987],{"class":8765},[159,32402,1165],{"class":165},[159,32404,32405],{"class":161,"line":640},[159,32406,25222],{"class":165},[159,32408,32409,32411,32413,32416,32418,32421,32423,32426,32428,32430,32432,32435,32437],{"class":161,"line":1075},[159,32410,30142],{"class":165},[159,32412,24858],{"class":1142},[159,32414,32415],{"class":165}," s.name ",[159,32417,24858],{"class":1142},[159,32419,32420],{"class":192}," \" \"",[159,32422,25123],{"class":1142},[159,32424,32425],{"class":165}," s.age ",[159,32427,24858],{"class":1142},[159,32429,32420],{"class":192},[159,32431,25123],{"class":1142},[159,32433,32434],{"class":165}," s.score ",[159,32436,24858],{"class":1142},[159,32438,32439],{"class":165}," endl;\n",[159,32441,32442],{"class":161,"line":1081},[159,32443,15685],{"class":165},[159,32445,32446],{"class":161,"line":1091},[159,32447,32448],{"class":1135},"\u002F\u002F地址传递\n",[159,32450,32451,32453,32456,32458,32460,32462,32464,32466],{"class":161,"line":1100},[159,32452,28979],{"class":1142},[159,32454,32455],{"class":185}," printStudent2",[159,32457,1159],{"class":165},[159,32459,31369],{"class":1142},[159,32461,31508],{"class":185},[159,32463,30131],{"class":1142},[159,32465,8909],{"class":8765},[159,32467,1165],{"class":165},[159,32469,32470],{"class":161,"line":1123},[159,32471,25222],{"class":165},[159,32473,32474,32476,32478,32481,32483,32485,32487,32490,32492,32494,32496,32499,32501],{"class":161,"line":1132},[159,32475,30142],{"class":165},[159,32477,24858],{"class":1142},[159,32479,32480],{"class":165}," s->name ",[159,32482,24858],{"class":1142},[159,32484,32420],{"class":192},[159,32486,25123],{"class":1142},[159,32488,32489],{"class":165}," s->age ",[159,32491,24858],{"class":1142},[159,32493,32420],{"class":192},[159,32495,25123],{"class":1142},[159,32497,32498],{"class":165}," s->score ",[159,32500,24858],{"class":1142},[159,32502,32439],{"class":165},[159,32504,32505],{"class":161,"line":1139},[159,32506,15685],{"class":165},[159,32508,32509,32511,32513],{"class":161,"line":1168},[159,32510,23886],{"class":1142},[159,32512,25625],{"class":185},[159,32514,5158],{"class":165},[159,32516,32517],{"class":161,"line":1174},[159,32518,25222],{"class":165},[159,32520,32521,32523,32525],{"class":161,"line":1180},[159,32522,31505],{"class":1142},[159,32524,31508],{"class":185},[159,32526,32527],{"class":165}," s;\n",[159,32529,32530,32533,32535,32538],{"class":161,"line":1194},[159,32531,32532],{"class":165},"    s.name ",[159,32534,189],{"class":1142},[159,32536,32537],{"class":192}," \"张三\"",[159,32539,1492],{"class":165},[159,32541,32542,32545,32547,32549],{"class":161,"line":1200},[159,32543,32544],{"class":165},"    s.age ",[159,32546,189],{"class":1142},[159,32548,10978],{"class":1146},[159,32550,1492],{"class":165},[159,32552,32553,32556,32558,32561],{"class":161,"line":1221},[159,32554,32555],{"class":165},"    s.score ",[159,32557,189],{"class":1142},[159,32559,32560],{"class":1146}," 85",[159,32562,1492],{"class":165},[159,32564,32565,32567,32569,32572,32574],{"class":161,"line":1230},[159,32566,25227],{"class":165},[159,32568,24858],{"class":1142},[159,32570,32571],{"class":192},"\"值传递:\"",[159,32573,24858],{"class":1142},[159,32575,24880],{"class":165},[159,32577,32578,32581],{"class":161,"line":1247},[159,32579,32580],{"class":185},"    printStudent1",[159,32582,32583],{"class":165},"(s);\n",[159,32585,32586,32588,32590,32593,32595],{"class":161,"line":1265},[159,32587,25227],{"class":165},[159,32589,24858],{"class":1142},[159,32591,32592],{"class":192},"\"地址传递:\"",[159,32594,24858],{"class":1142},[159,32596,24880],{"class":165},[159,32598,32599,32602,32604,32606],{"class":161,"line":1277},[159,32600,32601],{"class":185},"    printStudent2",[159,32603,1159],{"class":165},[159,32605,24209],{"class":1142},[159,32607,32608],{"class":165},"s); \n",[159,32610,32611,32613,32615],{"class":161,"line":1283},[159,32612,27711],{"class":1142},[159,32614,1259],{"class":1146},[159,32616,1492],{"class":165},[159,32618,32619],{"class":161,"line":1294},[159,32620,15685],{"class":165},[14,32622,32623],{},"注意：",[103,32625,32626,32629],{},[106,32627,32628],{},"1.先定义结构体，不要在函数中写结构体的定义",[106,32630,32631],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[37,32633,32635],{"id":32634},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,32637,32638],{},"用const防止误操作",[151,32640,32642],{"className":23872,"code":32641,"language":23874,"meta":25,"style":25},"#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",[49,32643,32644,32650,32660,32666,32671,32675,32679,32685,32691,32695,32711,32715,32738,32742,32750,32754,32775,32782,32786],{"__ignoreMap":25},[159,32645,32646,32648],{"class":161,"line":162},[159,32647,25602],{"class":1142},[159,32649,25605],{"class":192},[159,32651,32652,32654,32656,32658],{"class":161,"line":176},[159,32653,25610],{"class":1142},[159,32655,25613],{"class":1142},[159,32657,25616],{"class":185},[159,32659,1492],{"class":165},[159,32661,32662,32664],{"class":161,"line":203},[159,32663,25602],{"class":1142},[159,32665,31359],{"class":192},[159,32667,32668],{"class":161,"line":223},[159,32669,32670],{"class":165},"sctuct Student\n",[159,32672,32673],{"class":161,"line":233},[159,32674,25222],{"class":165},[159,32676,32677],{"class":161,"line":239},[159,32678,31395],{"class":165},[159,32680,32681,32683],{"class":161,"line":245},[159,32682,25636],{"class":1142},[159,32684,31407],{"class":165},[159,32686,32687,32689],{"class":161,"line":251},[159,32688,25636],{"class":1142},[159,32690,31419],{"class":165},[159,32692,32693],{"class":161,"line":261},[159,32694,27616],{"class":165},[159,32696,32697,32699,32702,32704,32707,32709],{"class":161,"line":603},[159,32698,28979],{"class":1142},[159,32700,32701],{"class":185}," printStudents",[159,32703,1159],{"class":165},[159,32705,32706],{"class":185},"student",[159,32708,20987],{"class":8765},[159,32710,1165],{"class":165},[159,32712,32713],{"class":161,"line":621},[159,32714,25222],{"class":165},[159,32716,32717,32719,32721,32724,32726,32729,32731,32734,32736],{"class":161,"line":634},[159,32718,25227],{"class":165},[159,32720,24858],{"class":1142},[159,32722,32723],{"class":165},"s.name",[159,32725,24858],{"class":1142},[159,32727,32728],{"class":165},"s.age",[159,32730,24858],{"class":1142},[159,32732,32733],{"class":165},"s.score",[159,32735,24858],{"class":1142},[159,32737,24880],{"class":165},[159,32739,32740],{"class":161,"line":640},[159,32741,15685],{"class":165},[159,32743,32744,32746,32748],{"class":161,"line":1075},[159,32745,23886],{"class":1142},[159,32747,25625],{"class":185},[159,32749,29593],{"class":165},[159,32751,32752],{"class":161,"line":1081},[159,32753,25222],{"class":165},[159,32755,32756,32759,32761,32763,32765,32767,32769,32771,32773],{"class":161,"line":1091},[159,32757,32758],{"class":165},"    Student s",[159,32760,189],{"class":1142},[159,32762,24721],{"class":165},[159,32764,31526],{"class":192},[159,32766,24233],{"class":165},[159,32768,18723],{"class":1146},[159,32770,24233],{"class":165},[159,32772,18723],{"class":1146},[159,32774,27616],{"class":165},[159,32776,32777,32780],{"class":161,"line":1100},[159,32778,32779],{"class":185},"    printStudent",[159,32781,32583],{"class":165},[159,32783,32784],{"class":161,"line":1123},[159,32785,590],{"emptyLinePlaceholder":589},[159,32787,32788],{"class":161,"line":1132},[159,32789,15685],{"class":165},[14,32791,32623],{},[103,32793,32794,32797,32800],{},[106,32795,32796],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[106,32798,32799],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[106,32801,32802],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[151,32804,32806],{"className":23872,"code":32805,"language":23874,"meta":25,"style":25},"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",[49,32807,32808,32827,32831,32836,32856],{"__ignoreMap":25},[159,32809,32810,32812,32814,32816,32818,32821,32823,32825],{"class":161,"line":162},[159,32811,28979],{"class":1142},[159,32813,32701],{"class":185},[159,32815,1159],{"class":165},[159,32817,18326],{"class":1142},[159,32819,32820],{"class":185}," student",[159,32822,30131],{"class":1142},[159,32824,8909],{"class":8765},[159,32826,1165],{"class":165},[159,32828,32829],{"class":161,"line":176},[159,32830,25222],{"class":165},[159,32832,32833],{"class":161,"line":203},[159,32834,32835],{"class":1135},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[159,32837,32838,32840,32842,32844,32846,32848,32850,32852,32854],{"class":161,"line":223},[159,32839,25227],{"class":165},[159,32841,24858],{"class":1142},[159,32843,32723],{"class":165},[159,32845,24858],{"class":1142},[159,32847,32728],{"class":165},[159,32849,24858],{"class":1142},[159,32851,32733],{"class":165},[159,32853,24858],{"class":1142},[159,32855,24880],{"class":165},[159,32857,32858],{"class":161,"line":233},[159,32859,15685],{"class":165},[37,32861,32863],{"id":32862},"_47案例","4.7案例",[134,32865,32866],{},[106,32867,32868],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[151,32870,32872],{"className":23872,"code":32871,"language":23874,"meta":25,"style":25},"#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",[49,32873,32874,32880,32890,32896,32903,32907,32913,32917,32922,32928,32934,32938,32942,32948,32952,32957,32962,32975,32979,32984,33010,33014,33026,33051,33055,33067,33077,33081,33086,33115,33119,33131,33140,33167,33178,33188,33192,33196,33200,33205,33229,33233,33257,33261,33280,33306,33310,33334,33356,33379,33383,33387,33391,33399,33403,33408,33428,33433,33446,33451,33477,33485,33490,33497,33501],{"__ignoreMap":25},[159,32875,32876,32878],{"class":161,"line":162},[159,32877,25602],{"class":1142},[159,32879,25605],{"class":192},[159,32881,32882,32884,32886,32888],{"class":161,"line":176},[159,32883,25610],{"class":1142},[159,32885,25613],{"class":1142},[159,32887,25616],{"class":185},[159,32889,1492],{"class":165},[159,32891,32892,32894],{"class":161,"line":203},[159,32893,25602],{"class":1142},[159,32895,31359],{"class":192},[159,32897,32898,32900],{"class":161,"line":223},[159,32899,25602],{"class":1142},[159,32901,32902],{"class":192},"\u003Cctime>\n",[159,32904,32905],{"class":161,"line":233},[159,32906,32137],{"class":1135},[159,32908,32909,32911],{"class":161,"line":239},[159,32910,31369],{"class":1142},[159,32912,31372],{"class":185},[159,32914,32915],{"class":161,"line":245},[159,32916,25222],{"class":165},[159,32918,32919],{"class":161,"line":251},[159,32920,32921],{"class":165},"    string sName;\n",[159,32923,32924,32926],{"class":161,"line":261},[159,32925,25636],{"class":1142},[159,32927,31407],{"class":165},[159,32929,32930,32932],{"class":161,"line":603},[159,32931,25636],{"class":1142},[159,32933,31419],{"class":165},[159,32935,32936],{"class":161,"line":621},[159,32937,27616],{"class":165},[159,32939,32940],{"class":161,"line":634},[159,32941,32174],{"class":1135},[159,32943,32944,32946],{"class":161,"line":640},[159,32945,31369],{"class":1142},[159,32947,32181],{"class":185},[159,32949,32950],{"class":161,"line":1075},[159,32951,25222],{"class":165},[159,32953,32954],{"class":161,"line":1081},[159,32955,32956],{"class":165},"    string tName;\n",[159,32958,32959],{"class":161,"line":1091},[159,32960,32961],{"class":1135},"    \u002F\u002F学生数组\n",[159,32963,32964,32966,32968,32971,32973],{"class":161,"line":1100},[159,32965,31505],{"class":1142},[159,32967,31508],{"class":185},[159,32969,32970],{"class":165}," sArray[",[159,32972,1753],{"class":1146},[159,32974,28308],{"class":165},[159,32976,32977],{"class":161,"line":1123},[159,32978,27616],{"class":165},[159,32980,32981],{"class":161,"line":1132},[159,32982,32983],{"class":1135},"\u002F\u002F给老师和学生赋值的函数\n",[159,32985,32986,32988,32991,32993,32995,32998,33001,33004,33006,33008],{"class":161,"line":1139},[159,32987,28979],{"class":1142},[159,32989,32990],{"class":185}," allocateSpace",[159,32992,1159],{"class":165},[159,32994,31369],{"class":1142},[159,32996,32997],{"class":185}," Teacher",[159,32999,33000],{"class":8765}," tArray",[159,33002,33003],{"class":165},"[],",[159,33005,23886],{"class":1142},[159,33007,30942],{"class":8765},[159,33009,1165],{"class":165},[159,33011,33012],{"class":161,"line":1168},[159,33013,25222],{"class":165},[159,33015,33016,33019,33021,33024],{"class":161,"line":1174},[159,33017,33018],{"class":165},"    string nameSeed",[159,33020,189],{"class":1142},[159,33022,33023],{"class":192},"\"ABCDE\"",[159,33025,1492],{"class":165},[159,33027,33028,33030,33032,33034,33036,33038,33040,33042,33044,33047,33049],{"class":161,"line":1180},[159,33029,11677],{"class":1142},[159,33031,11680],{"class":165},[159,33033,23886],{"class":1142},[159,33035,1186],{"class":165},[159,33037,189],{"class":1142},[159,33039,1259],{"class":1146},[159,33041,11692],{"class":165},[159,33043,166],{"class":1142},[159,33045,33046],{"class":165}," len; i",[159,33048,11705],{"class":1142},[159,33050,1165],{"class":165},[159,33052,33053],{"class":161,"line":1194},[159,33054,25681],{"class":165},[159,33056,33057,33060,33062,33065],{"class":161,"line":1200},[159,33058,33059],{"class":165},"        tArray[i].tName ",[159,33061,189],{"class":1142},[159,33063,33064],{"class":192}," \"Teacher_\"",[159,33066,1492],{"class":165},[159,33068,33069,33071,33074],{"class":161,"line":1221},[159,33070,33059],{"class":165},[159,33072,33073],{"class":1142},"+=",[159,33075,33076],{"class":165},"nameSeed[i];\n",[159,33078,33079],{"class":161,"line":1230},[159,33080,590],{"emptyLinePlaceholder":589},[159,33082,33083],{"class":161,"line":1247},[159,33084,33085],{"class":1135},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[159,33087,33088,33090,33092,33094,33097,33099,33101,33104,33106,33108,33111,33113],{"class":161,"line":1265},[159,33089,27032],{"class":1142},[159,33091,11680],{"class":165},[159,33093,23886],{"class":1142},[159,33095,33096],{"class":165}," j ",[159,33098,189],{"class":1142},[159,33100,1259],{"class":1146},[159,33102,33103],{"class":165},"; j ",[159,33105,166],{"class":1142},[159,33107,25798],{"class":1146},[159,33109,33110],{"class":165},"; j",[159,33112,11705],{"class":1142},[159,33114,1165],{"class":165},[159,33116,33117],{"class":161,"line":1277},[159,33118,26153],{"class":165},[159,33120,33121,33124,33126,33129],{"class":161,"line":1283},[159,33122,33123],{"class":165},"            tArray[i].sArray[j].sName ",[159,33125,189],{"class":1142},[159,33127,33128],{"class":192}," \"Student_\"",[159,33130,1492],{"class":165},[159,33132,33133,33135,33137],{"class":161,"line":1294},[159,33134,33123],{"class":165},[159,33136,33073],{"class":1142},[159,33138,33139],{"class":165}," nameSeed[j];\n",[159,33141,33142,33145,33148,33150,33152,33154,33156,33158,33160,33162,33164],{"class":161,"line":1305},[159,33143,33144],{"class":1142},"            int",[159,33146,33147],{"class":165}," random",[159,33149,189],{"class":1142},[159,33151,26069],{"class":185},[159,33153,21042],{"class":165},[159,33155,1662],{"class":1142},[159,33157,10814],{"class":1146},[159,33159,2704],{"class":1142},[159,33161,4269],{"class":1146},[159,33163,23934],{"class":165},[159,33165,33166],{"class":1135},"\u002F\u002F40~99\n",[159,33168,33169,33172,33174,33176],{"class":161,"line":1311},[159,33170,33171],{"class":165},"            tArray[i].sArray[j].age ",[159,33173,189],{"class":1142},[159,33175,10978],{"class":1146},[159,33177,1492],{"class":165},[159,33179,33180,33183,33185],{"class":161,"line":1322},[159,33181,33182],{"class":165},"            tArray[i].sArray[j].score ",[159,33184,189],{"class":1142},[159,33186,33187],{"class":165}," random;\n",[159,33189,33190],{"class":161,"line":1327},[159,33191,7530],{"class":165},[159,33193,33194],{"class":161,"line":1336},[159,33195,1508],{"class":165},[159,33197,33198],{"class":161,"line":1345},[159,33199,15685],{"class":165},[159,33201,33202],{"class":161,"line":1350},[159,33203,33204],{"class":1135},"\u002F\u002F打印所有信息的函数\n",[159,33206,33207,33209,33212,33214,33216,33218,33220,33223,33225,33227],{"class":161,"line":1764},[159,33208,28979],{"class":1142},[159,33210,33211],{"class":185}," printInfo",[159,33213,1159],{"class":165},[159,33215,31369],{"class":1142},[159,33217,32997],{"class":185},[159,33219,33000],{"class":8765},[159,33221,33222],{"class":165},"[], ",[159,33224,23886],{"class":1142},[159,33226,30942],{"class":8765},[159,33228,1165],{"class":165},[159,33230,33231],{"class":161,"line":1769},[159,33232,25222],{"class":165},[159,33234,33235,33237,33239,33241,33243,33245,33247,33249,33251,33253,33255],{"class":161,"line":1777},[159,33236,11677],{"class":1142},[159,33238,11680],{"class":165},[159,33240,23886],{"class":1142},[159,33242,1186],{"class":165},[159,33244,189],{"class":1142},[159,33246,1259],{"class":1146},[159,33248,11692],{"class":165},[159,33250,166],{"class":1142},[159,33252,33046],{"class":165},[159,33254,11705],{"class":1142},[159,33256,1165],{"class":165},[159,33258,33259],{"class":161,"line":1788},[159,33260,25681],{"class":165},[159,33262,33263,33266,33268,33271,33273,33276,33278],{"class":161,"line":1802},[159,33264,33265],{"class":165},"        cout ",[159,33267,24858],{"class":1142},[159,33269,33270],{"class":192}," \"Teacher: \"",[159,33272,25123],{"class":1142},[159,33274,33275],{"class":165}," tArray[i].tName ",[159,33277,24858],{"class":1142},[159,33279,32439],{"class":165},[159,33281,33282,33284,33286,33288,33290,33292,33294,33296,33298,33300,33302,33304],{"class":161,"line":1815},[159,33283,27032],{"class":1142},[159,33285,11680],{"class":165},[159,33287,23886],{"class":1142},[159,33289,33096],{"class":165},[159,33291,189],{"class":1142},[159,33293,1259],{"class":1146},[159,33295,33103],{"class":165},[159,33297,166],{"class":1142},[159,33299,25798],{"class":1146},[159,33301,33110],{"class":165},[159,33303,11705],{"class":1142},[159,33305,1165],{"class":165},[159,33307,33308],{"class":161,"line":1828},[159,33309,26153],{"class":165},[159,33311,33312,33315,33317,33320,33322,33325,33327,33330,33332],{"class":161,"line":1841},[159,33313,33314],{"class":165},"            cout ",[159,33316,24858],{"class":1142},[159,33318,33319],{"class":192}," \"",[159,33321,24915],{"class":1146},[159,33323,33324],{"class":192},"Student: \"",[159,33326,25123],{"class":1142},[159,33328,33329],{"class":165}," tArray[i].sArray[j].sName",[159,33331,24858],{"class":1142},[159,33333,24880],{"class":165},[159,33335,33336,33338,33340,33342,33344,33347,33349,33352,33354],{"class":161,"line":1852},[159,33337,33314],{"class":165},[159,33339,24858],{"class":1142},[159,33341,33319],{"class":192},[159,33343,24915],{"class":1146},[159,33345,33346],{"class":192},"Age: \"",[159,33348,25123],{"class":1142},[159,33350,33351],{"class":165}," tArray[i].sArray[j].age ",[159,33353,24858],{"class":1142},[159,33355,32439],{"class":165},[159,33357,33358,33360,33362,33364,33366,33369,33371,33374,33376],{"class":161,"line":1866},[159,33359,33314],{"class":165},[159,33361,24858],{"class":1142},[159,33363,33319],{"class":192},[159,33365,24915],{"class":1146},[159,33367,33368],{"class":192},"Score: \"",[159,33370,25123],{"class":1142},[159,33372,33373],{"class":165}," tArray[i].sArray[j].score ",[159,33375,24858],{"class":1142},[159,33377,33378],{"class":165}," endl;   \n",[159,33380,33381],{"class":161,"line":1879},[159,33382,7530],{"class":165},[159,33384,33385],{"class":161,"line":1884},[159,33386,1508],{"class":165},[159,33388,33389],{"class":161,"line":1889},[159,33390,15685],{"class":165},[159,33392,33393,33395,33397],{"class":161,"line":1899},[159,33394,23886],{"class":1142},[159,33396,25625],{"class":185},[159,33398,5158],{"class":165},[159,33400,33401],{"class":161,"line":1912},[159,33402,25222],{"class":165},[159,33404,33405],{"class":161,"line":1925},[159,33406,33407],{"class":1135},"    \u002F\u002F随机数种子\n",[159,33409,33410,33412,33414,33416,33418,33420,33422,33424,33426],{"class":161,"line":1956},[159,33411,26020],{"class":185},[159,33413,26023],{"class":165},[159,33415,26026],{"class":1142},[159,33417,26029],{"class":1142},[159,33419,18387],{"class":165},[159,33421,21267],{"class":185},[159,33423,1159],{"class":165},[159,33425,26038],{"class":1146},[159,33427,26041],{"class":165},[159,33429,33430],{"class":161,"line":1971},[159,33431,33432],{"class":1135},"    \u002F\u002F1.创建3名老师的数组\n",[159,33434,33435,33437,33439,33442,33444],{"class":161,"line":1976},[159,33436,31505],{"class":1142},[159,33438,32997],{"class":185},[159,33440,33441],{"class":165}," tArray[",[159,33443,23949],{"class":1146},[159,33445,28308],{"class":165},[159,33447,33448],{"class":161,"line":1981},[159,33449,33450],{"class":1135},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[159,33452,33453,33455,33458,33460,33463,33466,33468,33470,33473,33475],{"class":161,"line":1989},[159,33454,25636],{"class":1142},[159,33456,33457],{"class":165}," len ",[159,33459,189],{"class":1142},[159,33461,33462],{"class":1142}," sizeof",[159,33464,33465],{"class":165},"(tArray) ",[159,33467,13083],{"class":1142},[159,33469,33462],{"class":1142},[159,33471,33472],{"class":165},"(tArray[",[159,33474,1489],{"class":1146},[159,33476,27480],{"class":165},[159,33478,33479,33482],{"class":161,"line":2001},[159,33480,33481],{"class":185},"    allocateSpace",[159,33483,33484],{"class":165},"(tArray, len);\n",[159,33486,33487],{"class":161,"line":2006},[159,33488,33489],{"class":1135},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[159,33491,33492,33495],{"class":161,"line":2015},[159,33493,33494],{"class":185},"    printInfo",[159,33496,33484],{"class":165},[159,33498,33499],{"class":161,"line":2024},[159,33500,590],{"emptyLinePlaceholder":589},[159,33502,33503],{"class":161,"line":2029},[159,33504,15685],{"class":165},[134,33506,33507],{"start":176},[106,33508,33509,33512],{},[61,33510,33511],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,33514,33515],{},"五名英雄信息如下：",[151,33517,33521],{"className":33518,"code":33519,"language":33520,"meta":25,"style":25},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[49,33522,33523,33540,33557,33574,33591],{"__ignoreMap":25},[159,33524,33525,33527,33530,33532,33534,33536,33538],{"class":161,"line":162},[159,33526,28535],{"class":165},[159,33528,33529],{"class":192},"\"刘备\"",[159,33531,24233],{"class":165},[159,33533,24606],{"class":1146},[159,33535,24233],{"class":165},[159,33537,16247],{"class":192},[159,33539,28548],{"class":165},[159,33541,33542,33544,33547,33549,33551,33553,33555],{"class":161,"line":176},[159,33543,28535],{"class":165},[159,33545,33546],{"class":192},"\"关羽\"",[159,33548,24233],{"class":165},[159,33550,5877],{"class":1146},[159,33552,24233],{"class":165},[159,33554,16247],{"class":192},[159,33556,28548],{"class":165},[159,33558,33559,33561,33564,33566,33568,33570,33572],{"class":161,"line":203},[159,33560,28535],{"class":165},[159,33562,33563],{"class":192},"\"张飞\"",[159,33565,24233],{"class":165},[159,33567,1739],{"class":1146},[159,33569,24233],{"class":165},[159,33571,16247],{"class":192},[159,33573,28548],{"class":165},[159,33575,33576,33578,33581,33583,33585,33587,33589],{"class":161,"line":223},[159,33577,28535],{"class":165},[159,33579,33580],{"class":192},"\"赵云\"",[159,33582,24233],{"class":165},[159,33584,24557],{"class":1146},[159,33586,24233],{"class":165},[159,33588,16247],{"class":192},[159,33590,28548],{"class":165},[159,33592,33593,33595,33598,33600,33602,33604,33606],{"class":161,"line":233},[159,33594,28535],{"class":165},[159,33596,33597],{"class":192},"\"貂蝉\"",[159,33599,24233],{"class":165},[159,33601,24509],{"class":1146},[159,33603,24233],{"class":165},[159,33605,16267],{"class":192},[159,33607,28548],{"class":165},[14,33609,33610],{},"代码：",[151,33612,33614],{"className":23872,"code":33613,"language":23874,"meta":25,"style":25},"#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",[49,33615,33616,33622,33632,33638,33645,33649,33653,33659,33664,33668,33673,33696,33700,33725,33729,33762,33767,33796,33801,33816,33842,33862,33867,33872,33876,33880,33885,33907,33911,33935,33939,34001,34005,34009,34017,34021,34026,34037,34041,34057,34073,34089,34105,34121,34125,34145,34167,34172,34185,34192,34197,34203,34208,34221,34227],{"__ignoreMap":25},[159,33617,33618,33620],{"class":161,"line":162},[159,33619,25602],{"class":1142},[159,33621,25605],{"class":192},[159,33623,33624,33626,33628,33630],{"class":161,"line":176},[159,33625,25610],{"class":1142},[159,33627,25613],{"class":1142},[159,33629,25616],{"class":185},[159,33631,1492],{"class":165},[159,33633,33634,33636],{"class":161,"line":203},[159,33635,25602],{"class":1142},[159,33637,31359],{"class":192},[159,33639,33640,33642],{"class":161,"line":223},[159,33641,31369],{"class":1142},[159,33643,33644],{"class":185}," Sanguo\n",[159,33646,33647],{"class":161,"line":233},[159,33648,25222],{"class":165},[159,33650,33651],{"class":161,"line":239},[159,33652,31395],{"class":165},[159,33654,33655,33657],{"class":161,"line":245},[159,33656,25636],{"class":1142},[159,33658,31407],{"class":165},[159,33660,33661],{"class":161,"line":251},[159,33662,33663],{"class":165},"    string gender;\n",[159,33665,33666],{"class":161,"line":261},[159,33667,27616],{"class":165},[159,33669,33670],{"class":161,"line":603},[159,33671,33672],{"class":1135},"\u002F\u002F定义排序函数\n",[159,33674,33675,33677,33679,33681,33684,33686,33688,33690,33692,33694],{"class":161,"line":621},[159,33676,28979],{"class":1142},[159,33678,30927],{"class":185},[159,33680,1159],{"class":165},[159,33682,33683],{"class":185},"Sanguo",[159,33685,30131],{"class":1142},[159,33687,8909],{"class":8765},[159,33689,24233],{"class":165},[159,33691,23886],{"class":1142},[159,33693,30942],{"class":8765},[159,33695,1165],{"class":165},[159,33697,33698],{"class":161,"line":634},[159,33699,25222],{"class":165},[159,33701,33702,33704,33706,33708,33710,33712,33714,33716,33718,33721,33723],{"class":161,"line":640},[159,33703,11677],{"class":1142},[159,33705,1159],{"class":165},[159,33707,23886],{"class":1142},[159,33709,15383],{"class":165},[159,33711,189],{"class":1142},[159,33713,1489],{"class":1146},[159,33715,26670],{"class":165},[159,33717,166],{"class":1142},[159,33719,33720],{"class":165},"len;i",[159,33722,11705],{"class":1142},[159,33724,1165],{"class":165},[159,33726,33727],{"class":161,"line":1075},[159,33728,25681],{"class":165},[159,33730,33731,33734,33736,33738,33740,33742,33744,33746,33748,33750,33752,33754,33756,33758,33760],{"class":161,"line":1081},[159,33732,33733],{"class":1142},"     for",[159,33735,11680],{"class":165},[159,33737,23886],{"class":1142},[159,33739,27039],{"class":165},[159,33741,189],{"class":1142},[159,33743,1489],{"class":1146},[159,33745,27046],{"class":165},[159,33747,166],{"class":1142},[159,33749,30969],{"class":165},[159,33751,24376],{"class":1142},[159,33753,4932],{"class":1146},[159,33755,24376],{"class":1142},[159,33757,27179],{"class":165},[159,33759,11705],{"class":1142},[159,33761,1165],{"class":165},[159,33763,33764],{"class":161,"line":1091},[159,33765,33766],{"class":165},"     {\n",[159,33768,33769,33772,33775,33777,33780,33782,33785,33787,33789,33791,33793],{"class":161,"line":1100},[159,33770,33771],{"class":1142},"         if",[159,33773,33774],{"class":165}," ((s",[159,33776,2704],{"class":1142},[159,33778,33779],{"class":165},"j)->age ",[159,33781,6760],{"class":1142},[159,33783,33784],{"class":165}," (s",[159,33786,2704],{"class":1142},[159,33788,24316],{"class":165},[159,33790,2704],{"class":1142},[159,33792,4932],{"class":1146},[159,33794,33795],{"class":165},")->age)\n",[159,33797,33798],{"class":161,"line":1123},[159,33799,33800],{"class":165},"         {\n",[159,33802,33803,33806,33808,33811,33813],{"class":161,"line":1132},[159,33804,33805],{"class":165},"             Sanguo temp",[159,33807,30764],{"class":1142},[159,33809,33810],{"class":165},"(s",[159,33812,2704],{"class":1142},[159,33814,33815],{"class":165},"j);\n",[159,33817,33818,33821,33823,33825,33828,33830,33832,33834,33836,33838,33840],{"class":161,"line":1139},[159,33819,33820],{"class":1142},"             *",[159,33822,33810],{"class":165},[159,33824,2704],{"class":1142},[159,33826,33827],{"class":165},"j)",[159,33829,30764],{"class":1142},[159,33831,33810],{"class":165},[159,33833,2704],{"class":1142},[159,33835,24316],{"class":165},[159,33837,2704],{"class":1142},[159,33839,4932],{"class":1146},[159,33841,1953],{"class":165},[159,33843,33844,33846,33848,33850,33852,33854,33856,33858,33860],{"class":161,"line":1168},[159,33845,33820],{"class":1142},[159,33847,33810],{"class":165},[159,33849,2704],{"class":1142},[159,33851,24316],{"class":165},[159,33853,2704],{"class":1142},[159,33855,4932],{"class":1146},[159,33857,18387],{"class":165},[159,33859,189],{"class":1142},[159,33861,27898],{"class":165},[159,33863,33864],{"class":161,"line":1174},[159,33865,33866],{"class":165},"         }\n",[159,33868,33869],{"class":161,"line":1180},[159,33870,33871],{"class":165},"     }\n",[159,33873,33874],{"class":161,"line":1194},[159,33875,1508],{"class":165},[159,33877,33878],{"class":161,"line":1200},[159,33879,15685],{"class":165},[159,33881,33882],{"class":161,"line":1221},[159,33883,33884],{"class":1135},"\u002F\u002F定义打印函数\n",[159,33886,33887,33889,33891,33893,33895,33897,33899,33901,33903,33905],{"class":161,"line":1230},[159,33888,28979],{"class":1142},[159,33890,33211],{"class":185},[159,33892,1159],{"class":165},[159,33894,33683],{"class":185},[159,33896,30131],{"class":1142},[159,33898,8909],{"class":8765},[159,33900,24233],{"class":165},[159,33902,23886],{"class":1142},[159,33904,30942],{"class":8765},[159,33906,1165],{"class":165},[159,33908,33909],{"class":161,"line":1247},[159,33910,25222],{"class":165},[159,33912,33913,33915,33917,33919,33921,33923,33925,33927,33929,33931,33933],{"class":161,"line":1265},[159,33914,11677],{"class":1142},[159,33916,11680],{"class":165},[159,33918,23886],{"class":1142},[159,33920,15383],{"class":165},[159,33922,189],{"class":1142},[159,33924,1489],{"class":1146},[159,33926,26670],{"class":165},[159,33928,166],{"class":1142},[159,33930,33720],{"class":165},[159,33932,11705],{"class":1142},[159,33934,1165],{"class":165},[159,33936,33937],{"class":161,"line":1277},[159,33938,25681],{"class":165},[159,33940,33941,33943,33945,33947,33949,33952,33954,33956,33958,33961,33963,33965,33967,33970,33972,33974,33976,33979,33981,33983,33985,33988,33990,33992,33994,33997,33999],{"class":161,"line":1283},[159,33942,27080],{"class":165},[159,33944,24858],{"class":1142},[159,33946,24115],{"class":192},[159,33948,24915],{"class":1146},[159,33950,33951],{"class":192},"姓名：\"",[159,33953,24858],{"class":1142},[159,33955,33810],{"class":165},[159,33957,2704],{"class":1142},[159,33959,33960],{"class":165},"i)->name",[159,33962,24858],{"class":1142},[159,33964,24115],{"class":192},[159,33966,24915],{"class":1146},[159,33968,33969],{"class":192},"年龄：\"",[159,33971,24858],{"class":1142},[159,33973,33810],{"class":165},[159,33975,2704],{"class":1142},[159,33977,33978],{"class":165},"i)->age",[159,33980,24858],{"class":1142},[159,33982,24115],{"class":192},[159,33984,24915],{"class":1146},[159,33986,33987],{"class":192},"性别：\"",[159,33989,24858],{"class":1142},[159,33991,33810],{"class":165},[159,33993,2704],{"class":1142},[159,33995,33996],{"class":165},"i)->gender",[159,33998,24858],{"class":1142},[159,34000,24880],{"class":165},[159,34002,34003],{"class":161,"line":1294},[159,34004,1508],{"class":165},[159,34006,34007],{"class":161,"line":1305},[159,34008,15685],{"class":165},[159,34010,34011,34013,34015],{"class":161,"line":1311},[159,34012,23886],{"class":1142},[159,34014,25625],{"class":185},[159,34016,5158],{"class":165},[159,34018,34019],{"class":161,"line":1322},[159,34020,25222],{"class":165},[159,34022,34023],{"class":161,"line":1327},[159,34024,34025],{"class":1135},"    \u002F\u002F定义结构体变量\n",[159,34027,34028,34031,34033,34035],{"class":161,"line":1336},[159,34029,34030],{"class":165},"    Sanguo s1[",[159,34032,1753],{"class":1146},[159,34034,18375],{"class":165},[159,34036,28526],{"class":1142},[159,34038,34039],{"class":161,"line":1345},[159,34040,25681],{"class":165},[159,34042,34043,34045,34047,34049,34051,34053,34055],{"class":161,"line":1350},[159,34044,28535],{"class":165},[159,34046,33529],{"class":192},[159,34048,24233],{"class":165},[159,34050,24606],{"class":1146},[159,34052,24233],{"class":165},[159,34054,16247],{"class":192},[159,34056,28548],{"class":165},[159,34058,34059,34061,34063,34065,34067,34069,34071],{"class":161,"line":1764},[159,34060,28535],{"class":165},[159,34062,33546],{"class":192},[159,34064,24233],{"class":165},[159,34066,5877],{"class":1146},[159,34068,24233],{"class":165},[159,34070,16247],{"class":192},[159,34072,28548],{"class":165},[159,34074,34075,34077,34079,34081,34083,34085,34087],{"class":161,"line":1769},[159,34076,28535],{"class":165},[159,34078,33563],{"class":192},[159,34080,24233],{"class":165},[159,34082,1739],{"class":1146},[159,34084,24233],{"class":165},[159,34086,16247],{"class":192},[159,34088,28548],{"class":165},[159,34090,34091,34093,34095,34097,34099,34101,34103],{"class":161,"line":1777},[159,34092,28535],{"class":165},[159,34094,33580],{"class":192},[159,34096,24233],{"class":165},[159,34098,24557],{"class":1146},[159,34100,24233],{"class":165},[159,34102,16247],{"class":192},[159,34104,28548],{"class":165},[159,34106,34107,34109,34111,34113,34115,34117,34119],{"class":161,"line":1788},[159,34108,28535],{"class":165},[159,34110,33597],{"class":192},[159,34112,24233],{"class":165},[159,34114,24509],{"class":1146},[159,34116,24233],{"class":165},[159,34118,16267],{"class":192},[159,34120,28548],{"class":165},[159,34122,34123],{"class":161,"line":1802},[159,34124,28569],{"class":165},[159,34126,34127,34129,34131,34133,34136,34138,34141,34143],{"class":161,"line":1815},[159,34128,25636],{"class":1142},[159,34130,30942],{"class":165},[159,34132,27821],{"class":1142},[159,34134,34135],{"class":165},"(s1)",[159,34137,27827],{"class":1142},[159,34139,34140],{"class":165},"(s1[",[159,34142,1489],{"class":1146},[159,34144,27480],{"class":165},[159,34146,34147,34150,34152,34155,34157,34160,34163,34165],{"class":161,"line":1828},[159,34148,34149],{"class":165},"    Sanguo ",[159,34151,4777],{"class":1142},[159,34153,34154],{"class":165},"s ",[159,34156,189],{"class":1142},[159,34158,34159],{"class":1142}," &",[159,34161,34162],{"class":165},"s1[",[159,34164,1489],{"class":1146},[159,34166,28308],{"class":165},[159,34168,34169],{"class":161,"line":1841},[159,34170,34171],{"class":1135},"    \u002F\u002F排序前：\n",[159,34173,34174,34176,34178,34181,34183],{"class":161,"line":1852},[159,34175,30142],{"class":165},[159,34177,24858],{"class":1142},[159,34179,34180],{"class":192}," \"排序前：\"",[159,34182,25123],{"class":1142},[159,34184,32439],{"class":165},[159,34186,34187,34189],{"class":161,"line":1866},[159,34188,33494],{"class":185},[159,34190,34191],{"class":165},"(s,len);\n",[159,34193,34194],{"class":161,"line":1879},[159,34195,34196],{"class":1135},"    \u002F\u002F调用排序函数\n",[159,34198,34199,34201],{"class":161,"line":1884},[159,34200,31209],{"class":185},[159,34202,34191],{"class":165},[159,34204,34205],{"class":161,"line":1889},[159,34206,34207],{"class":1135},"    \u002F\u002F排序后\n",[159,34209,34210,34212,34214,34217,34219],{"class":161,"line":1899},[159,34211,30142],{"class":165},[159,34213,24858],{"class":1142},[159,34215,34216],{"class":192}," \"排序后：\"",[159,34218,25123],{"class":1142},[159,34220,32439],{"class":165},[159,34222,34223,34225],{"class":161,"line":1912},[159,34224,33494],{"class":185},[159,34226,34191],{"class":165},[159,34228,34229],{"class":161,"line":1925},[159,34230,15685],{"class":165},[14,34232,34233,34234,34236],{},"注意：使用指针时直接用传首地址**&s",[159,34235,1489],{},"**",[1468,34238,34239],{},"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":25,"searchDepth":176,"depth":176,"links":34241},[34242,34243,34244,34245,34246,34247,34248],{"id":31313,"depth":176,"text":31314},{"id":31665,"depth":176,"text":31666},{"id":31934,"depth":176,"text":31935},{"id":32098,"depth":176,"text":32099},{"id":32314,"depth":176,"text":32315},{"id":32634,"depth":176,"text":32635},{"id":32862,"depth":176,"text":32863},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":31302,"description":31310},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":34255,"title":34256,"body":34257,"description":25,"extension":23810,"meta":35596,"navigation":589,"path":35597,"seo":35598,"stem":35599,"__hash__":35600},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":34258,"toc":35590},[34259,34262,34266,34272,34286,34291,34294,34298,34305,34311,34314,34321,34327,34332,34335,34338,34341,34903,34905,34919,34923,34928,34944,35084,35087,35093,35096,35101,35109,35216,35219,35224,35227,35232,35235,35241,35244,35587],[10,34260,34256],{"id":34261},"_5程序内存模型",[37,34263,34265],{"id":34264},"_51内存分区模型","5.1内存分区模型",[14,34267,34268,34269],{},"C++程序在执行时，将内存大方向划分为",[61,34270,34271],{},"4个区域",[103,34273,34274,34277,34280,34283],{},[106,34275,34276],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[106,34278,34279],{},"全局区：存放全局变量和静态变量以及常量",[106,34281,34282],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[106,34284,34285],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,34287,34288],{},[61,34289,34290],{},"内存四区意义：",[14,34292,34293],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[42,34295,34297],{"id":34296},"_511程序运行前","5.1.1程序运行前",[14,34299,34300,34301,34304],{},"​\t在程序编译后，生成了exe可执行程序，",[61,34302,34303],{},"未执行该程序前","分为两个区域",[14,34306,34307,34308],{},"​\t",[61,34309,34310],{},"代码区：",[14,34312,34313],{},"​\t\t存放 CPU 执行的机器指令",[14,34315,34316,34317,34320],{},"​\t\t代码区是",[61,34318,34319],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,34322,34316,34323,34326],{},[61,34324,34325],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,34328,34307,34329],{},[61,34330,34331],{},"全局区：",[14,34333,34334],{},"​\t\t全局变量和静态变量存放在此.",[14,34336,34337],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,34339,34340],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[151,34342,34344],{"className":23872,"code":34343,"language":23874,"meta":25,"style":25},"\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",[49,34345,34346,34351,34364,34377,34381,34386,34401,34416,34420,34428,34432,34437,34450,34463,34467,34472,34498,34524,34528,34555,34581,34585,34590,34606,34621,34625,34651,34677,34681,34706,34731,34735,34761,34787,34791,34806,34821,34847,34873,34877,34887,34891,34899],{"__ignoreMap":25},[159,34347,34348],{"class":161,"line":162},[159,34349,34350],{"class":1135},"\u002F\u002F全局变量\n",[159,34352,34353,34355,34358,34360,34362],{"class":161,"line":176},[159,34354,23886],{"class":1142},[159,34356,34357],{"class":165}," g_a ",[159,34359,189],{"class":1142},[159,34361,7664],{"class":1146},[159,34363,1492],{"class":165},[159,34365,34366,34368,34371,34373,34375],{"class":161,"line":203},[159,34367,23886],{"class":1142},[159,34369,34370],{"class":165}," g_b ",[159,34372,189],{"class":1142},[159,34374,7664],{"class":1146},[159,34376,1492],{"class":165},[159,34378,34379],{"class":161,"line":223},[159,34380,590],{"emptyLinePlaceholder":589},[159,34382,34383],{"class":161,"line":233},[159,34384,34385],{"class":1135},"\u002F\u002F全局常量\n",[159,34387,34388,34390,34392,34395,34397,34399],{"class":161,"line":239},[159,34389,18326],{"class":1142},[159,34391,26029],{"class":1142},[159,34393,34394],{"class":165}," c_g_a ",[159,34396,189],{"class":1142},[159,34398,7664],{"class":1146},[159,34400,1492],{"class":165},[159,34402,34403,34405,34407,34410,34412,34414],{"class":161,"line":245},[159,34404,18326],{"class":1142},[159,34406,26029],{"class":1142},[159,34408,34409],{"class":165}," c_g_b ",[159,34411,189],{"class":1142},[159,34413,7664],{"class":1146},[159,34415,1492],{"class":165},[159,34417,34418],{"class":161,"line":251},[159,34419,590],{"emptyLinePlaceholder":589},[159,34421,34422,34424,34426],{"class":161,"line":261},[159,34423,23886],{"class":1142},[159,34425,25625],{"class":185},[159,34427,17173],{"class":165},[159,34429,34430],{"class":161,"line":603},[159,34431,590],{"emptyLinePlaceholder":589},[159,34433,34434],{"class":161,"line":621},[159,34435,34436],{"class":1135},"    \u002F\u002F局部变量\n",[159,34438,34439,34441,34444,34446,34448],{"class":161,"line":634},[159,34440,25636],{"class":1142},[159,34442,34443],{"class":165}," a ",[159,34445,189],{"class":1142},[159,34447,7664],{"class":1146},[159,34449,1492],{"class":165},[159,34451,34452,34454,34457,34459,34461],{"class":161,"line":640},[159,34453,25636],{"class":1142},[159,34455,34456],{"class":165}," b ",[159,34458,189],{"class":1142},[159,34460,7664],{"class":1146},[159,34462,1492],{"class":165},[159,34464,34465],{"class":161,"line":1075},[159,34466,590],{"emptyLinePlaceholder":589},[159,34468,34469],{"class":161,"line":1081},[159,34470,34471],{"class":1135},"    \u002F\u002F打印地址\n",[159,34473,34474,34476,34478,34481,34483,34485,34487,34489,34491,34494,34496],{"class":161,"line":1091},[159,34475,30142],{"class":165},[159,34477,24858],{"class":1142},[159,34479,34480],{"class":192}," \"局部变量a地址为： \"",[159,34482,25123],{"class":1142},[159,34484,11680],{"class":165},[159,34486,23886],{"class":1142},[159,34488,18387],{"class":165},[159,34490,24209],{"class":1142},[159,34492,34493],{"class":165},"a ",[159,34495,24858],{"class":1142},[159,34497,32439],{"class":165},[159,34499,34500,34502,34504,34507,34509,34511,34513,34515,34517,34520,34522],{"class":161,"line":1100},[159,34501,30142],{"class":165},[159,34503,24858],{"class":1142},[159,34505,34506],{"class":192}," \"局部变量b地址为： \"",[159,34508,25123],{"class":1142},[159,34510,11680],{"class":165},[159,34512,23886],{"class":1142},[159,34514,18387],{"class":165},[159,34516,24209],{"class":1142},[159,34518,34519],{"class":165},"b ",[159,34521,24858],{"class":1142},[159,34523,32439],{"class":165},[159,34525,34526],{"class":161,"line":1123},[159,34527,590],{"emptyLinePlaceholder":589},[159,34529,34530,34532,34534,34537,34539,34542,34544,34546,34548,34551,34553],{"class":161,"line":1132},[159,34531,30142],{"class":165},[159,34533,24858],{"class":1142},[159,34535,34536],{"class":192}," \"全局变量g_a地址为： \"",[159,34538,25123],{"class":1142},[159,34540,34541],{"class":165},"  (",[159,34543,23886],{"class":1142},[159,34545,18387],{"class":165},[159,34547,24209],{"class":1142},[159,34549,34550],{"class":165},"g_a ",[159,34552,24858],{"class":1142},[159,34554,32439],{"class":165},[159,34556,34557,34559,34561,34564,34566,34568,34570,34572,34574,34577,34579],{"class":161,"line":1139},[159,34558,30142],{"class":165},[159,34560,24858],{"class":1142},[159,34562,34563],{"class":192}," \"全局变量g_b地址为： \"",[159,34565,25123],{"class":1142},[159,34567,34541],{"class":165},[159,34569,23886],{"class":1142},[159,34571,18387],{"class":165},[159,34573,24209],{"class":1142},[159,34575,34576],{"class":165},"g_b ",[159,34578,24858],{"class":1142},[159,34580,32439],{"class":165},[159,34582,34583],{"class":161,"line":1168},[159,34584,590],{"emptyLinePlaceholder":589},[159,34586,34587],{"class":161,"line":1174},[159,34588,34589],{"class":1135},"    \u002F\u002F静态变量\n",[159,34591,34592,34595,34597,34600,34602,34604],{"class":161,"line":1180},[159,34593,34594],{"class":1142},"    static",[159,34596,26029],{"class":1142},[159,34598,34599],{"class":165}," s_a ",[159,34601,189],{"class":1142},[159,34603,7664],{"class":1146},[159,34605,1492],{"class":165},[159,34607,34608,34610,34612,34615,34617,34619],{"class":161,"line":1194},[159,34609,34594],{"class":1142},[159,34611,26029],{"class":1142},[159,34613,34614],{"class":165}," s_b ",[159,34616,189],{"class":1142},[159,34618,7664],{"class":1146},[159,34620,1492],{"class":165},[159,34622,34623],{"class":161,"line":1200},[159,34624,590],{"emptyLinePlaceholder":589},[159,34626,34627,34629,34631,34634,34636,34638,34640,34642,34644,34647,34649],{"class":161,"line":1221},[159,34628,30142],{"class":165},[159,34630,24858],{"class":1142},[159,34632,34633],{"class":192}," \"静态变量s_a地址为： \"",[159,34635,25123],{"class":1142},[159,34637,11680],{"class":165},[159,34639,23886],{"class":1142},[159,34641,18387],{"class":165},[159,34643,24209],{"class":1142},[159,34645,34646],{"class":165},"s_a ",[159,34648,24858],{"class":1142},[159,34650,32439],{"class":165},[159,34652,34653,34655,34657,34660,34662,34664,34666,34668,34670,34673,34675],{"class":161,"line":1230},[159,34654,30142],{"class":165},[159,34656,24858],{"class":1142},[159,34658,34659],{"class":192}," \"静态变量s_b地址为： \"",[159,34661,25123],{"class":1142},[159,34663,11680],{"class":165},[159,34665,23886],{"class":1142},[159,34667,18387],{"class":165},[159,34669,24209],{"class":1142},[159,34671,34672],{"class":165},"s_b ",[159,34674,24858],{"class":1142},[159,34676,32439],{"class":165},[159,34678,34679],{"class":161,"line":1247},[159,34680,590],{"emptyLinePlaceholder":589},[159,34682,34683,34685,34687,34690,34692,34694,34696,34698,34700,34702,34704],{"class":161,"line":1265},[159,34684,30142],{"class":165},[159,34686,24858],{"class":1142},[159,34688,34689],{"class":192}," \"字符串常量地址为： \"",[159,34691,25123],{"class":1142},[159,34693,11680],{"class":165},[159,34695,23886],{"class":1142},[159,34697,18387],{"class":165},[159,34699,24209],{"class":1142},[159,34701,24875],{"class":192},[159,34703,25123],{"class":1142},[159,34705,32439],{"class":165},[159,34707,34708,34710,34712,34714,34716,34718,34720,34722,34724,34727,34729],{"class":161,"line":1277},[159,34709,30142],{"class":165},[159,34711,24858],{"class":1142},[159,34713,34689],{"class":192},[159,34715,25123],{"class":1142},[159,34717,11680],{"class":165},[159,34719,23886],{"class":1142},[159,34721,18387],{"class":165},[159,34723,24209],{"class":1142},[159,34725,34726],{"class":192},"\"hello world1\"",[159,34728,25123],{"class":1142},[159,34730,32439],{"class":165},[159,34732,34733],{"class":161,"line":1283},[159,34734,590],{"emptyLinePlaceholder":589},[159,34736,34737,34739,34741,34744,34746,34748,34750,34752,34754,34757,34759],{"class":161,"line":1294},[159,34738,30142],{"class":165},[159,34740,24858],{"class":1142},[159,34742,34743],{"class":192}," \"全局常量c_g_a地址为： \"",[159,34745,25123],{"class":1142},[159,34747,11680],{"class":165},[159,34749,23886],{"class":1142},[159,34751,18387],{"class":165},[159,34753,24209],{"class":1142},[159,34755,34756],{"class":165},"c_g_a ",[159,34758,24858],{"class":1142},[159,34760,32439],{"class":165},[159,34762,34763,34765,34767,34770,34772,34774,34776,34778,34780,34783,34785],{"class":161,"line":1305},[159,34764,30142],{"class":165},[159,34766,24858],{"class":1142},[159,34768,34769],{"class":192}," \"全局常量c_g_b地址为： \"",[159,34771,25123],{"class":1142},[159,34773,11680],{"class":165},[159,34775,23886],{"class":1142},[159,34777,18387],{"class":165},[159,34779,24209],{"class":1142},[159,34781,34782],{"class":165},"c_g_b ",[159,34784,24858],{"class":1142},[159,34786,32439],{"class":165},[159,34788,34789],{"class":161,"line":1311},[159,34790,590],{"emptyLinePlaceholder":589},[159,34792,34793,34795,34797,34800,34802,34804],{"class":161,"line":1322},[159,34794,1143],{"class":1142},[159,34796,26029],{"class":1142},[159,34798,34799],{"class":165}," c_l_a ",[159,34801,189],{"class":1142},[159,34803,7664],{"class":1146},[159,34805,1492],{"class":165},[159,34807,34808,34810,34812,34815,34817,34819],{"class":161,"line":1327},[159,34809,1143],{"class":1142},[159,34811,26029],{"class":1142},[159,34813,34814],{"class":165}," c_l_b ",[159,34816,189],{"class":1142},[159,34818,7664],{"class":1146},[159,34820,1492],{"class":165},[159,34822,34823,34825,34827,34830,34832,34834,34836,34838,34840,34843,34845],{"class":161,"line":1336},[159,34824,30142],{"class":165},[159,34826,24858],{"class":1142},[159,34828,34829],{"class":192}," \"局部常量c_l_a地址为： \"",[159,34831,25123],{"class":1142},[159,34833,11680],{"class":165},[159,34835,23886],{"class":1142},[159,34837,18387],{"class":165},[159,34839,24209],{"class":1142},[159,34841,34842],{"class":165},"c_l_a ",[159,34844,24858],{"class":1142},[159,34846,32439],{"class":165},[159,34848,34849,34851,34853,34856,34858,34860,34862,34864,34866,34869,34871],{"class":161,"line":1345},[159,34850,30142],{"class":165},[159,34852,24858],{"class":1142},[159,34854,34855],{"class":192}," \"局部常量c_l_b地址为： \"",[159,34857,25123],{"class":1142},[159,34859,11680],{"class":165},[159,34861,23886],{"class":1142},[159,34863,18387],{"class":165},[159,34865,24209],{"class":1142},[159,34867,34868],{"class":165},"c_l_b ",[159,34870,24858],{"class":1142},[159,34872,32439],{"class":165},[159,34874,34875],{"class":161,"line":1350},[159,34876,590],{"emptyLinePlaceholder":589},[159,34878,34879,34881,34883,34885],{"class":161,"line":1764},[159,34880,25950],{"class":185},[159,34882,1159],{"class":165},[159,34884,25955],{"class":192},[159,34886,1953],{"class":165},[159,34888,34889],{"class":161,"line":1769},[159,34890,590],{"emptyLinePlaceholder":589},[159,34892,34893,34895,34897],{"class":161,"line":1777},[159,34894,27711],{"class":1142},[159,34896,1259],{"class":1146},[159,34898,1492],{"class":165},[159,34900,34901],{"class":161,"line":1788},[159,34902,15685],{"class":165},[14,34904,10547],{},[103,34906,34907,34910,34913,34916],{},[106,34908,34909],{},"c++中程序运行前分为全局区和代码区",[106,34911,34912],{},"代码区特点是共享和只读",[106,34914,34915],{},"全局区中存放全局变量、静态变量、常量",[106,34917,34918],{},"常量区中存放const修饰的全局常量和字符串常量",[42,34920,34922],{"id":34921},"_512程序运行后","5.1.2程序运行后",[134,34924,34925],{},[106,34926,34927],{},"栈区：",[103,34929,34930,34937],{},[106,34931,34932,34933,34936],{},"由编译器自动分配释放, 存放",[61,34934,34935],{},"函数的参数值,局部变量","等",[106,34938,34939,34940,34943],{},"注意事项：",[61,34941,34942],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[151,34945,34947],{"className":23872,"code":34946,"language":23874,"meta":25,"style":25},"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",[49,34948,34949,34960,34964,34979,34991,34995,34999,35007,35012,35027,35045,35062,35072,35080],{"__ignoreMap":25},[159,34950,34951,34953,34955,34958],{"class":161,"line":162},[159,34952,23886],{"class":1142},[159,34954,30131],{"class":1142},[159,34956,34957],{"class":185}," func",[159,34959,5158],{"class":165},[159,34961,34962],{"class":161,"line":176},[159,34963,25222],{"class":165},[159,34965,34966,34968,34970,34972,34974,34976],{"class":161,"line":203},[159,34967,25636],{"class":1142},[159,34969,34443],{"class":165},[159,34971,189],{"class":1142},[159,34973,7664],{"class":1146},[159,34975,23934],{"class":165},[159,34977,34978],{"class":1135}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[159,34980,34981,34983,34985,34988],{"class":161,"line":223},[159,34982,27711],{"class":1142},[159,34984,34159],{"class":1142},[159,34986,34987],{"class":165},"a;",[159,34989,34990],{"class":1135}," \u002F\u002F放回局部变量的地址\n",[159,34992,34993],{"class":161,"line":233},[159,34994,15685],{"class":165},[159,34996,34997],{"class":161,"line":239},[159,34998,590],{"emptyLinePlaceholder":589},[159,35000,35001,35003,35005],{"class":161,"line":245},[159,35002,23886],{"class":1142},[159,35004,25625],{"class":185},[159,35006,17173],{"class":165},[159,35008,35009],{"class":161,"line":251},[159,35010,35011],{"class":1135},"    \u002F\u002F接受func的返回值\n",[159,35013,35014,35016,35018,35021,35023,35025],{"class":161,"line":261},[159,35015,25636],{"class":1142},[159,35017,30131],{"class":1142},[159,35019,35020],{"class":165},"p ",[159,35022,189],{"class":1142},[159,35024,34957],{"class":185},[159,35026,29251],{"class":165},[159,35028,35029,35031,35033,35035,35037,35039,35042],{"class":161,"line":603},[159,35030,30142],{"class":165},[159,35032,24858],{"class":1142},[159,35034,30131],{"class":1142},[159,35036,35020],{"class":165},[159,35038,24858],{"class":1142},[159,35040,35041],{"class":165}," endl;",[159,35043,35044],{"class":1135}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[159,35046,35047,35049,35051,35053,35055,35057,35059],{"class":161,"line":621},[159,35048,30142],{"class":165},[159,35050,24858],{"class":1142},[159,35052,30131],{"class":1142},[159,35054,35020],{"class":165},[159,35056,24858],{"class":1142},[159,35058,35041],{"class":165},[159,35060,35061],{"class":1135}," \u002F\u002F第二次这个数据不再保留\n",[159,35063,35064,35066,35068,35070],{"class":161,"line":634},[159,35065,25950],{"class":185},[159,35067,1159],{"class":165},[159,35069,25955],{"class":192},[159,35071,1953],{"class":165},[159,35073,35074,35076,35078],{"class":161,"line":640},[159,35075,27711],{"class":1142},[159,35077,1259],{"class":1146},[159,35079,1492],{"class":165},[159,35081,35082],{"class":161,"line":1075},[159,35083,15685],{"class":165},[14,35085,35086],{},"输出结果：",[14,35088,35089],{},[23,35090],{"alt":35091,"src":35092},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,35094,35095],{},"总结：不要返回局部变量的地址",[134,35097,35098],{"start":176},[106,35099,35100],{},"堆区",[103,35102,35103,35106],{},[106,35104,35105],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[106,35107,35108],{},"在c++中主要利用new在堆区开辟内存",[151,35110,35112],{"className":23872,"code":35111,"language":23874,"meta":25,"style":25},"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",[49,35113,35114,35129,35133,35138,35158,35165,35169,35177,35181,35186,35200,35212],{"__ignoreMap":25},[159,35115,35116,35118,35121,35124,35126],{"class":161,"line":162},[159,35117,23886],{"class":1142},[159,35119,35120],{"class":1142},"  *",[159,35122,35123],{"class":185},"func",[159,35125,21042],{"class":165},[159,35127,35128],{"class":1135},"  \u002F\u002F函数返回指针\n",[159,35130,35131],{"class":161,"line":176},[159,35132,25222],{"class":165},[159,35134,35135],{"class":161,"line":203},[159,35136,35137],{"class":1135},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[159,35139,35140,35142,35144,35146,35148,35150,35152,35154,35156],{"class":161,"line":223},[159,35141,27767],{"class":1142},[159,35143,30131],{"class":1142},[159,35145,14],{"class":165},[159,35147,189],{"class":1142},[159,35149,20891],{"class":1142},[159,35151,26029],{"class":1142},[159,35153,1159],{"class":165},[159,35155,1964],{"class":1146},[159,35157,1953],{"class":165},[159,35159,35160,35162],{"class":161,"line":233},[159,35161,27999],{"class":1142},[159,35163,35164],{"class":165}," p;\n",[159,35166,35167],{"class":161,"line":239},[159,35168,15685],{"class":165},[159,35170,35171,35173,35175],{"class":161,"line":245},[159,35172,23886],{"class":1142},[159,35174,25625],{"class":185},[159,35176,5158],{"class":165},[159,35178,35179],{"class":161,"line":251},[159,35180,25222],{"class":165},[159,35182,35183],{"class":161,"line":261},[159,35184,35185],{"class":1135},"    \u002F\u002F在堆区开辟数据\n",[159,35187,35188,35190,35192,35194,35196,35198],{"class":161,"line":603},[159,35189,25636],{"class":1142},[159,35191,30131],{"class":1142},[159,35193,14],{"class":165},[159,35195,189],{"class":1142},[159,35197,35123],{"class":185},[159,35199,29251],{"class":165},[159,35201,35202,35204,35206,35208,35210],{"class":161,"line":621},[159,35203,25227],{"class":165},[159,35205,30032],{"class":1142},[159,35207,14],{"class":165},[159,35209,24858],{"class":1142},[159,35211,24880],{"class":165},[159,35213,35214],{"class":161,"line":634},[159,35215,15685],{"class":165},[14,35217,35218],{},"图片展示：",[14,35220,35221],{},[23,35222],{"alt":35091,"src":35223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,35225,35226],{},"堆区内存由程序员管生死！！！",[134,35228,35229],{"start":203},[106,35230,35231],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,35233,35234],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,35236,35237,35238],{},"​语法：",[49,35239,35240],{}," new 数据类型",[14,35242,35243],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[151,35245,35247],{"className":23872,"code":35246,"language":23874,"meta":25,"style":25},"\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",[49,35248,35249,35254,35264,35268,35273,35278,35300,35304,35312,35316,35330,35342,35354,35366,35371,35376,35387,35391,35396,35404,35408,35413,35435,35461,35465,35483,35487,35513,35517,35529,35533,35538,35543,35551,35555,35559,35567,35571,35577,35583],{"__ignoreMap":25},[159,35250,35251],{"class":161,"line":162},[159,35252,35253],{"class":1135},"\u002F\u002F1.new的基本语法\n",[159,35255,35256,35258,35260,35262],{"class":161,"line":176},[159,35257,23886],{"class":1142},[159,35259,30131],{"class":1142},[159,35261,35123],{"class":185},[159,35263,5158],{"class":165},[159,35265,35266],{"class":161,"line":203},[159,35267,25222],{"class":165},[159,35269,35270],{"class":161,"line":223},[159,35271,35272],{"class":1135},"    \u002F\u002F在堆区创建整型数据\n",[159,35274,35275],{"class":161,"line":233},[159,35276,35277],{"class":1135},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[159,35279,35280,35282,35284,35286,35289,35291,35293,35295,35297],{"class":161,"line":239},[159,35281,25636],{"class":1142},[159,35283,30131],{"class":1142},[159,35285,14],{"class":165},[159,35287,35288],{"class":1142},"=new",[159,35290,26029],{"class":1142},[159,35292,1159],{"class":165},[159,35294,1964],{"class":1146},[159,35296,29581],{"class":165},[159,35298,35299],{"class":1135},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[159,35301,35302],{"class":161,"line":245},[159,35303,15685],{"class":165},[159,35305,35306,35308,35310],{"class":161,"line":251},[159,35307,28979],{"class":1142},[159,35309,29203],{"class":185},[159,35311,5158],{"class":165},[159,35313,35314],{"class":161,"line":261},[159,35315,25222],{"class":165},[159,35317,35318,35320,35322,35324,35326,35328],{"class":161,"line":603},[159,35319,25636],{"class":1142},[159,35321,30131],{"class":1142},[159,35323,14],{"class":165},[159,35325,189],{"class":1142},[159,35327,35123],{"class":185},[159,35329,29251],{"class":165},[159,35331,35332,35334,35336,35338,35340],{"class":161,"line":621},[159,35333,25227],{"class":165},[159,35335,30032],{"class":1142},[159,35337,14],{"class":165},[159,35339,24858],{"class":1142},[159,35341,24880],{"class":165},[159,35343,35344,35346,35348,35350,35352],{"class":161,"line":634},[159,35345,25227],{"class":165},[159,35347,30032],{"class":1142},[159,35349,14],{"class":165},[159,35351,24858],{"class":1142},[159,35353,24880],{"class":165},[159,35355,35356,35358,35360,35362,35364],{"class":161,"line":640},[159,35357,25227],{"class":165},[159,35359,30032],{"class":1142},[159,35361,14],{"class":165},[159,35363,24858],{"class":1142},[159,35365,24880],{"class":165},[159,35367,35368],{"class":161,"line":1075},[159,35369,35370],{"class":1135},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[159,35372,35373],{"class":161,"line":1081},[159,35374,35375],{"class":1135},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[159,35377,35378,35381,35384],{"class":161,"line":1091},[159,35379,35380],{"class":1142},"    delete",[159,35382,35383],{"class":165}," p;",[159,35385,35386],{"class":1135},"\u002F\u002F删除这块地址\n",[159,35388,35389],{"class":161,"line":1100},[159,35390,15685],{"class":165},[159,35392,35393],{"class":161,"line":1123},[159,35394,35395],{"class":1135},"\u002F\u002F2.在堆区利用new开辟数组\n",[159,35397,35398,35400,35402],{"class":161,"line":1132},[159,35399,28979],{"class":1142},[159,35401,29272],{"class":185},[159,35403,5158],{"class":165},[159,35405,35406],{"class":161,"line":1139},[159,35407,25222],{"class":165},[159,35409,35410],{"class":161,"line":1168},[159,35411,35412],{"class":1135},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[159,35414,35415,35417,35419,35421,35423,35425,35427,35429,35432],{"class":161,"line":1174},[159,35416,25636],{"class":1142},[159,35418,30131],{"class":1142},[159,35420,17260],{"class":165},[159,35422,35288],{"class":1142},[159,35424,26029],{"class":1142},[159,35426,17263],{"class":165},[159,35428,1964],{"class":1146},[159,35430,35431],{"class":165},"];",[159,35433,35434],{"class":1135},"\u002F\u002F10代表数组有10个元素\n",[159,35436,35437,35439,35441,35443,35445,35447,35449,35451,35453,35455,35457,35459],{"class":161,"line":1180},[159,35438,11677],{"class":1142},[159,35440,11680],{"class":165},[159,35442,23886],{"class":1142},[159,35444,15383],{"class":165},[159,35446,189],{"class":1142},[159,35448,1489],{"class":1146},[159,35450,26670],{"class":165},[159,35452,166],{"class":1142},[159,35454,1964],{"class":1146},[159,35456,26670],{"class":165},[159,35458,11705],{"class":1142},[159,35460,1165],{"class":165},[159,35462,35463],{"class":161,"line":1194},[159,35464,25681],{"class":165},[159,35466,35467,35470,35472,35474,35476,35478,35480],{"class":161,"line":1200},[159,35468,35469],{"class":165},"        arr[i]",[159,35471,189],{"class":1142},[159,35473,1241],{"class":165},[159,35475,2704],{"class":1142},[159,35477,1596],{"class":1146},[159,35479,23934],{"class":165},[159,35481,35482],{"class":1135},"\u002F\u002F给10个元素赋值100～109\n",[159,35484,35485],{"class":161,"line":1221},[159,35486,1508],{"class":165},[159,35488,35489,35491,35493,35495,35497,35499,35501,35503,35505,35507,35509,35511],{"class":161,"line":1230},[159,35490,11677],{"class":1142},[159,35492,11680],{"class":165},[159,35494,23886],{"class":1142},[159,35496,15383],{"class":165},[159,35498,189],{"class":1142},[159,35500,1489],{"class":1146},[159,35502,26670],{"class":165},[159,35504,166],{"class":1142},[159,35506,1964],{"class":1146},[159,35508,26670],{"class":165},[159,35510,11705],{"class":1142},[159,35512,1165],{"class":165},[159,35514,35515],{"class":161,"line":1247},[159,35516,25681],{"class":165},[159,35518,35519,35521,35523,35525,35527],{"class":161,"line":1265},[159,35520,27080],{"class":165},[159,35522,24858],{"class":1142},[159,35524,27972],{"class":165},[159,35526,24858],{"class":1142},[159,35528,24880],{"class":165},[159,35530,35531],{"class":161,"line":1277},[159,35532,1508],{"class":165},[159,35534,35535],{"class":161,"line":1283},[159,35536,35537],{"class":1135},"    \u002F\u002F释放堆区数组\n",[159,35539,35540],{"class":161,"line":1294},[159,35541,35542],{"class":1135},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[159,35544,35545,35548],{"class":161,"line":1305},[159,35546,35547],{"class":1142},"    delete[]",[159,35549,35550],{"class":165}," arr;\n",[159,35552,35553],{"class":161,"line":1311},[159,35554,15685],{"class":165},[159,35556,35557],{"class":161,"line":1322},[159,35558,590],{"emptyLinePlaceholder":589},[159,35560,35561,35563,35565],{"class":161,"line":1327},[159,35562,23886],{"class":1142},[159,35564,25625],{"class":185},[159,35566,5158],{"class":165},[159,35568,35569],{"class":161,"line":1336},[159,35570,25222],{"class":165},[159,35572,35573,35575],{"class":161,"line":1345},[159,35574,29248],{"class":185},[159,35576,29251],{"class":165},[159,35578,35579,35581],{"class":161,"line":1350},[159,35580,29317],{"class":185},[159,35582,29251],{"class":165},[159,35584,35585],{"class":161,"line":1764},[159,35586,15685],{"class":165},[1468,35588,35589],{},"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":25,"searchDepth":176,"depth":176,"links":35591},[35592],{"id":34264,"depth":176,"text":34265,"children":35593},[35594,35595],{"id":34296,"depth":203,"text":34297},{"id":34921,"depth":203,"text":34922},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":34256,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":35602,"title":35603,"body":35604,"description":25,"extension":23810,"meta":37082,"navigation":589,"path":37083,"seo":37084,"stem":37085,"__hash__":37086},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":35605,"toc":37074},[35606,35609,35613,35616,35619,35788,35792,35797,35814,35819,35971,35975,35978,35981,36373,36377,36380,36385,36388,36699,36703,36709,36869,36871,36879,36883,36886,36893,37071],[10,35607,35603],{"id":35608},"_6引用",[37,35610,35612],{"id":35611},"_61引用基本用法","6.1引用基本用法",[14,35614,35615],{},"引用的本质：给变量起别名",[14,35617,35618],{},"语法：数据类型 &别名=原名",[151,35620,35622],{"className":23872,"code":35621,"language":23874,"meta":25,"style":25},"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",[49,35623,35624,35632,35636,35648,35660,35664,35683,35702,35706,35717,35721,35740,35758,35762,35772,35776,35784],{"__ignoreMap":25},[159,35625,35626,35628,35630],{"class":161,"line":162},[159,35627,23886],{"class":1142},[159,35629,25625],{"class":185},[159,35631,17173],{"class":165},[159,35633,35634],{"class":161,"line":176},[159,35635,590],{"emptyLinePlaceholder":589},[159,35637,35638,35640,35642,35644,35646],{"class":161,"line":203},[159,35639,25636],{"class":1142},[159,35641,34443],{"class":165},[159,35643,189],{"class":1142},[159,35645,7664],{"class":1146},[159,35647,1492],{"class":165},[159,35649,35650,35652,35654,35656,35658],{"class":161,"line":223},[159,35651,25636],{"class":1142},[159,35653,34159],{"class":1142},[159,35655,34519],{"class":165},[159,35657,189],{"class":1142},[159,35659,25111],{"class":165},[159,35661,35662],{"class":161,"line":233},[159,35663,590],{"emptyLinePlaceholder":589},[159,35665,35666,35668,35670,35673,35675,35677,35679,35681],{"class":161,"line":239},[159,35667,30142],{"class":165},[159,35669,24858],{"class":1142},[159,35671,35672],{"class":192}," \"a = \"",[159,35674,25123],{"class":1142},[159,35676,34443],{"class":165},[159,35678,24858],{"class":1142},[159,35680,35041],{"class":165},[159,35682,30879],{"class":1135},[159,35684,35685,35687,35689,35692,35694,35696,35698,35700],{"class":161,"line":245},[159,35686,30142],{"class":165},[159,35688,24858],{"class":1142},[159,35690,35691],{"class":192}," \"b = \"",[159,35693,25123],{"class":1142},[159,35695,34456],{"class":165},[159,35697,24858],{"class":1142},[159,35699,35041],{"class":165},[159,35701,30879],{"class":1135},[159,35703,35704],{"class":161,"line":251},[159,35705,590],{"emptyLinePlaceholder":589},[159,35707,35708,35711,35713,35715],{"class":161,"line":261},[159,35709,35710],{"class":165},"    b ",[159,35712,189],{"class":1142},[159,35714,29369],{"class":1146},[159,35716,1492],{"class":165},[159,35718,35719],{"class":161,"line":603},[159,35720,590],{"emptyLinePlaceholder":589},[159,35722,35723,35725,35727,35729,35731,35733,35735,35737],{"class":161,"line":621},[159,35724,30142],{"class":165},[159,35726,24858],{"class":1142},[159,35728,35672],{"class":192},[159,35730,25123],{"class":1142},[159,35732,34443],{"class":165},[159,35734,24858],{"class":1142},[159,35736,35041],{"class":165},[159,35738,35739],{"class":1135},"\u002F\u002F100\n",[159,35741,35742,35744,35746,35748,35750,35752,35754,35756],{"class":161,"line":634},[159,35743,30142],{"class":165},[159,35745,24858],{"class":1142},[159,35747,35691],{"class":192},[159,35749,25123],{"class":1142},[159,35751,34456],{"class":165},[159,35753,24858],{"class":1142},[159,35755,35041],{"class":165},[159,35757,35739],{"class":1135},[159,35759,35760],{"class":161,"line":640},[159,35761,590],{"emptyLinePlaceholder":589},[159,35763,35764,35766,35768,35770],{"class":161,"line":1075},[159,35765,25950],{"class":185},[159,35767,1159],{"class":165},[159,35769,25955],{"class":192},[159,35771,1953],{"class":165},[159,35773,35774],{"class":161,"line":1081},[159,35775,590],{"emptyLinePlaceholder":589},[159,35777,35778,35780,35782],{"class":161,"line":1091},[159,35779,27711],{"class":1142},[159,35781,1259],{"class":1146},[159,35783,1492],{"class":165},[159,35785,35786],{"class":161,"line":1100},[159,35787,15685],{"class":165},[37,35789,35791],{"id":35790},"_62引用的注意事项","6.2引用的注意事项",[134,35793,35794],{},[106,35795,35796],{},"引用必须要初始化",[151,35798,35800],{"className":23872,"code":35799,"language":23874,"meta":25,"style":25},"int &b;\u002F\u002F非常错误！\n",[49,35801,35802],{"__ignoreMap":25},[159,35803,35804,35806,35808,35811],{"class":161,"line":162},[159,35805,23886],{"class":1142},[159,35807,34159],{"class":1142},[159,35809,35810],{"class":165},"b;",[159,35812,35813],{"class":1135},"\u002F\u002F非常错误！\n",[134,35815,35816],{"start":176},[106,35817,35818],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[151,35820,35822],{"className":23872,"code":35821,"language":23874,"meta":25,"style":25},"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",[49,35823,35824,35832,35844,35856,35864,35880,35893,35911,35929,35949,35959,35967],{"__ignoreMap":25},[159,35825,35826,35828,35830],{"class":161,"line":162},[159,35827,23886],{"class":1142},[159,35829,25625],{"class":185},[159,35831,17173],{"class":165},[159,35833,35834,35836,35838,35840,35842],{"class":161,"line":176},[159,35835,25636],{"class":1142},[159,35837,34443],{"class":165},[159,35839,189],{"class":1142},[159,35841,7664],{"class":1146},[159,35843,1492],{"class":165},[159,35845,35846,35848,35850,35852,35854],{"class":161,"line":203},[159,35847,25636],{"class":1142},[159,35849,34456],{"class":165},[159,35851,189],{"class":1142},[159,35853,10978],{"class":1146},[159,35855,1492],{"class":165},[159,35857,35858,35861],{"class":161,"line":223},[159,35859,35860],{"class":1135},"    \u002F\u002Fint &c;",[159,35862,35863],{"class":1135}," \u002F\u002F错误，引用必须初始化\n",[159,35865,35866,35868,35870,35872,35874,35877],{"class":161,"line":233},[159,35867,25636],{"class":1142},[159,35869,34159],{"class":1142},[159,35871,26578],{"class":165},[159,35873,189],{"class":1142},[159,35875,35876],{"class":165}," a;",[159,35878,35879],{"class":1135}," \u002F\u002F一旦初始化后，就不可以更改\n",[159,35881,35882,35885,35887,35890],{"class":161,"line":239},[159,35883,35884],{"class":165},"    c ",[159,35886,189],{"class":1142},[159,35888,35889],{"class":165}," b;",[159,35891,35892],{"class":1135}," \u002F\u002F这是赋值操作，不是更改引用\n",[159,35894,35895,35897,35899,35901,35903,35905,35907,35909],{"class":161,"line":245},[159,35896,30142],{"class":165},[159,35898,24858],{"class":1142},[159,35900,35672],{"class":192},[159,35902,25123],{"class":1142},[159,35904,34443],{"class":165},[159,35906,24858],{"class":1142},[159,35908,35041],{"class":165},[159,35910,30864],{"class":1135},[159,35912,35913,35915,35917,35919,35921,35923,35925,35927],{"class":161,"line":251},[159,35914,30142],{"class":165},[159,35916,24858],{"class":1142},[159,35918,35691],{"class":192},[159,35920,25123],{"class":1142},[159,35922,34456],{"class":165},[159,35924,24858],{"class":1142},[159,35926,35041],{"class":165},[159,35928,30864],{"class":1135},[159,35930,35931,35933,35935,35938,35940,35943,35945,35947],{"class":161,"line":261},[159,35932,30142],{"class":165},[159,35934,24858],{"class":1142},[159,35936,35937],{"class":192}," \"c = \"",[159,35939,25123],{"class":1142},[159,35941,35942],{"class":165}," c ",[159,35944,24858],{"class":1142},[159,35946,35041],{"class":165},[159,35948,30864],{"class":1135},[159,35950,35951,35953,35955,35957],{"class":161,"line":603},[159,35952,25950],{"class":185},[159,35954,1159],{"class":165},[159,35956,25955],{"class":192},[159,35958,1953],{"class":165},[159,35960,35961,35963,35965],{"class":161,"line":621},[159,35962,27711],{"class":1142},[159,35964,1259],{"class":1146},[159,35966,1492],{"class":165},[159,35968,35969],{"class":161,"line":634},[159,35970,15685],{"class":165},[37,35972,35974],{"id":35973},"_63引用做函数参数","6.3引用做函数参数",[14,35976,35977],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,35979,35980],{},"优点：可以简化指针修改实参",[151,35982,35984],{"className":23872,"code":35983,"language":23874,"meta":25,"style":25},"\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",[49,35985,35986,35991,36012,36023,36033,36042,36046,36050,36055,36077,36089,36101,36111,36115,36119,36124,36146,36156,36164,36172,36176,36180,36188,36192,36204,36216,36220,36231,36257,36261,36281,36305,36309,36319,36343,36347,36357,36361,36369],{"__ignoreMap":25},[159,35987,35988],{"class":161,"line":162},[159,35989,35990],{"class":1135},"\u002F\u002F1. 值传递\n",[159,35992,35993,35995,35998,36000,36002,36004,36006,36008,36010],{"class":161,"line":176},[159,35994,28979],{"class":1142},[159,35996,35997],{"class":185}," mySwap01",[159,35999,1159],{"class":165},[159,36001,23886],{"class":1142},[159,36003,7885],{"class":8765},[159,36005,1939],{"class":165},[159,36007,23886],{"class":1142},[159,36009,26465],{"class":8765},[159,36011,1262],{"class":165},[159,36013,36014,36016,36019,36021],{"class":161,"line":203},[159,36015,25636],{"class":1142},[159,36017,36018],{"class":165}," temp ",[159,36020,189],{"class":1142},[159,36022,25111],{"class":165},[159,36024,36025,36028,36030],{"class":161,"line":223},[159,36026,36027],{"class":165},"    a ",[159,36029,189],{"class":1142},[159,36031,36032],{"class":165}," b;\n",[159,36034,36035,36037,36039],{"class":161,"line":233},[159,36036,35710],{"class":165},[159,36038,189],{"class":1142},[159,36040,36041],{"class":165}," temp;\n",[159,36043,36044],{"class":161,"line":239},[159,36045,15685],{"class":165},[159,36047,36048],{"class":161,"line":245},[159,36049,590],{"emptyLinePlaceholder":589},[159,36051,36052],{"class":161,"line":251},[159,36053,36054],{"class":1135},"\u002F\u002F2. 地址传递\n",[159,36056,36057,36059,36062,36064,36067,36069,36071,36073,36075],{"class":161,"line":261},[159,36058,28979],{"class":1142},[159,36060,36061],{"class":185}," mySwap02",[159,36063,1159],{"class":165},[159,36065,36066],{"class":1142},"int*",[159,36068,7885],{"class":8765},[159,36070,1939],{"class":165},[159,36072,36066],{"class":1142},[159,36074,26465],{"class":8765},[159,36076,1262],{"class":165},[159,36078,36079,36081,36083,36085,36087],{"class":161,"line":603},[159,36080,25636],{"class":1142},[159,36082,36018],{"class":165},[159,36084,189],{"class":1142},[159,36086,30131],{"class":1142},[159,36088,29812],{"class":165},[159,36090,36091,36093,36095,36097,36099],{"class":161,"line":621},[159,36092,1475],{"class":1142},[159,36094,34493],{"class":165},[159,36096,189],{"class":1142},[159,36098,30131],{"class":1142},[159,36100,29684],{"class":165},[159,36102,36103,36105,36107,36109],{"class":161,"line":634},[159,36104,1475],{"class":1142},[159,36106,34519],{"class":165},[159,36108,189],{"class":1142},[159,36110,36041],{"class":165},[159,36112,36113],{"class":161,"line":640},[159,36114,15685],{"class":165},[159,36116,36117],{"class":161,"line":1075},[159,36118,590],{"emptyLinePlaceholder":589},[159,36120,36121],{"class":161,"line":1081},[159,36122,36123],{"class":1135},"\u002F\u002F3. 引用传递\n",[159,36125,36126,36128,36131,36133,36136,36138,36140,36142,36144],{"class":161,"line":1091},[159,36127,28979],{"class":1142},[159,36129,36130],{"class":185}," mySwap03",[159,36132,1159],{"class":165},[159,36134,36135],{"class":1142},"int&",[159,36137,7885],{"class":8765},[159,36139,1939],{"class":165},[159,36141,36135],{"class":1142},[159,36143,26465],{"class":8765},[159,36145,1262],{"class":165},[159,36147,36148,36150,36152,36154],{"class":161,"line":1100},[159,36149,25636],{"class":1142},[159,36151,36018],{"class":165},[159,36153,189],{"class":1142},[159,36155,25111],{"class":165},[159,36157,36158,36160,36162],{"class":161,"line":1123},[159,36159,36027],{"class":165},[159,36161,189],{"class":1142},[159,36163,36032],{"class":165},[159,36165,36166,36168,36170],{"class":161,"line":1132},[159,36167,35710],{"class":165},[159,36169,189],{"class":1142},[159,36171,36041],{"class":165},[159,36173,36174],{"class":161,"line":1139},[159,36175,15685],{"class":165},[159,36177,36178],{"class":161,"line":1168},[159,36179,590],{"emptyLinePlaceholder":589},[159,36181,36182,36184,36186],{"class":161,"line":1174},[159,36183,23886],{"class":1142},[159,36185,25625],{"class":185},[159,36187,17173],{"class":165},[159,36189,36190],{"class":161,"line":1180},[159,36191,590],{"emptyLinePlaceholder":589},[159,36193,36194,36196,36198,36200,36202],{"class":161,"line":1194},[159,36195,25636],{"class":1142},[159,36197,34443],{"class":165},[159,36199,189],{"class":1142},[159,36201,7664],{"class":1146},[159,36203,1492],{"class":165},[159,36205,36206,36208,36210,36212,36214],{"class":161,"line":1200},[159,36207,25636],{"class":1142},[159,36209,34456],{"class":165},[159,36211,189],{"class":1142},[159,36213,10978],{"class":1146},[159,36215,1492],{"class":165},[159,36217,36218],{"class":161,"line":1221},[159,36219,590],{"emptyLinePlaceholder":589},[159,36221,36222,36225,36228],{"class":161,"line":1230},[159,36223,36224],{"class":185},"    mySwap01",[159,36226,36227],{"class":165},"(a, b);",[159,36229,36230],{"class":1135},"\u002F\u002F值传递，形参不会修饰实参\n",[159,36232,36233,36235,36237,36240,36242,36244,36246,36249,36251,36253,36255],{"class":161,"line":1247},[159,36234,30142],{"class":165},[159,36236,24858],{"class":1142},[159,36238,36239],{"class":192}," \"a:\"",[159,36241,25123],{"class":1142},[159,36243,34443],{"class":165},[159,36245,24858],{"class":1142},[159,36247,36248],{"class":192}," \" b:\"",[159,36250,25123],{"class":1142},[159,36252,34456],{"class":165},[159,36254,24858],{"class":1142},[159,36256,32439],{"class":165},[159,36258,36259],{"class":161,"line":1265},[159,36260,590],{"emptyLinePlaceholder":589},[159,36262,36263,36266,36268,36270,36273,36275,36278],{"class":161,"line":1277},[159,36264,36265],{"class":185},"    mySwap02",[159,36267,1159],{"class":165},[159,36269,24209],{"class":1142},[159,36271,36272],{"class":165},"a, ",[159,36274,24209],{"class":1142},[159,36276,36277],{"class":165},"b);",[159,36279,36280],{"class":1135},"\u002F\u002F地址传递，形参会修饰实参\n",[159,36282,36283,36285,36287,36289,36291,36293,36295,36297,36299,36301,36303],{"class":161,"line":1283},[159,36284,30142],{"class":165},[159,36286,24858],{"class":1142},[159,36288,36239],{"class":192},[159,36290,25123],{"class":1142},[159,36292,34443],{"class":165},[159,36294,24858],{"class":1142},[159,36296,36248],{"class":192},[159,36298,25123],{"class":1142},[159,36300,34456],{"class":165},[159,36302,24858],{"class":1142},[159,36304,32439],{"class":165},[159,36306,36307],{"class":161,"line":1294},[159,36308,590],{"emptyLinePlaceholder":589},[159,36310,36311,36314,36316],{"class":161,"line":1305},[159,36312,36313],{"class":185},"    mySwap03",[159,36315,36227],{"class":165},[159,36317,36318],{"class":1135},"\u002F\u002F引用传递，形参会修饰实参\n",[159,36320,36321,36323,36325,36327,36329,36331,36333,36335,36337,36339,36341],{"class":161,"line":1311},[159,36322,30142],{"class":165},[159,36324,24858],{"class":1142},[159,36326,36239],{"class":192},[159,36328,25123],{"class":1142},[159,36330,34443],{"class":165},[159,36332,24858],{"class":1142},[159,36334,36248],{"class":192},[159,36336,25123],{"class":1142},[159,36338,34456],{"class":165},[159,36340,24858],{"class":1142},[159,36342,32439],{"class":165},[159,36344,36345],{"class":161,"line":1322},[159,36346,590],{"emptyLinePlaceholder":589},[159,36348,36349,36351,36353,36355],{"class":161,"line":1327},[159,36350,25950],{"class":185},[159,36352,1159],{"class":165},[159,36354,25955],{"class":192},[159,36356,1953],{"class":165},[159,36358,36359],{"class":161,"line":1336},[159,36360,590],{"emptyLinePlaceholder":589},[159,36362,36363,36365,36367],{"class":161,"line":1345},[159,36364,27711],{"class":1142},[159,36366,1259],{"class":1146},[159,36368,1492],{"class":165},[159,36370,36371],{"class":161,"line":1350},[159,36372,15685],{"class":165},[37,36374,36376],{"id":36375},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,36378,36379],{},"作用：引用是可以作为函数的返回值存在的",[14,36381,32623,36382],{},[61,36383,36384],{},"不要返回局部变量引用",[14,36386,36387],{},"用法：函数调用作为左值",[151,36389,36391],{"className":33518,"code":36390,"language":33520,"meta":25,"style":25},"\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",[49,36392,36393,36398,36406,36421,36427,36431,36435,36440,36448,36465,36471,36475,36479,36487,36491,36496,36510,36530,36549,36553,36558,36571,36591,36609,36613,36628,36632,36651,36669,36673,36683,36687,36695],{"__ignoreMap":25},[159,36394,36395],{"class":161,"line":162},[159,36396,36397],{"class":1135},"\u002F\u002F返回局部变量引用\n",[159,36399,36400,36402,36404],{"class":161,"line":176},[159,36401,36135],{"class":1142},[159,36403,29203],{"class":185},[159,36405,17173],{"class":165},[159,36407,36408,36410,36412,36414,36416,36418],{"class":161,"line":203},[159,36409,25636],{"class":1142},[159,36411,34443],{"class":165},[159,36413,189],{"class":1142},[159,36415,7664],{"class":1146},[159,36417,23934],{"class":165},[159,36419,36420],{"class":1135}," \u002F\u002F局部变量\n",[159,36422,36423,36425],{"class":161,"line":223},[159,36424,27711],{"class":1142},[159,36426,25111],{"class":165},[159,36428,36429],{"class":161,"line":233},[159,36430,15685],{"class":165},[159,36432,36433],{"class":161,"line":239},[159,36434,590],{"emptyLinePlaceholder":589},[159,36436,36437],{"class":161,"line":245},[159,36438,36439],{"class":1135},"\u002F\u002F返回静态变量引用\n",[159,36441,36442,36444,36446],{"class":161,"line":251},[159,36443,36135],{"class":1142},[159,36445,29272],{"class":185},[159,36447,17173],{"class":165},[159,36449,36450,36452,36454,36456,36458,36460,36462],{"class":161,"line":261},[159,36451,34594],{"class":1142},[159,36453,26029],{"class":1142},[159,36455,34443],{"class":165},[159,36457,189],{"class":1142},[159,36459,10978],{"class":1146},[159,36461,23934],{"class":165},[159,36463,36464],{"class":1135},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[159,36466,36467,36469],{"class":161,"line":603},[159,36468,27711],{"class":1142},[159,36470,25111],{"class":165},[159,36472,36473],{"class":161,"line":621},[159,36474,15685],{"class":165},[159,36476,36477],{"class":161,"line":634},[159,36478,590],{"emptyLinePlaceholder":589},[159,36480,36481,36483,36485],{"class":161,"line":640},[159,36482,23886],{"class":1142},[159,36484,25625],{"class":185},[159,36486,17173],{"class":165},[159,36488,36489],{"class":161,"line":1075},[159,36490,590],{"emptyLinePlaceholder":589},[159,36492,36493],{"class":161,"line":1081},[159,36494,36495],{"class":1135},"    \u002F\u002F不能返回局部变量的引用\n",[159,36497,36498,36501,36504,36506,36508],{"class":161,"line":1091},[159,36499,36500],{"class":1142},"    int&",[159,36502,36503],{"class":165}," ref ",[159,36505,189],{"class":1142},[159,36507,29203],{"class":185},[159,36509,29251],{"class":165},[159,36511,36512,36514,36516,36519,36521,36523,36525,36527],{"class":161,"line":1100},[159,36513,30142],{"class":165},[159,36515,24858],{"class":1142},[159,36517,36518],{"class":192}," \"ref = \"",[159,36520,25123],{"class":1142},[159,36522,36503],{"class":165},[159,36524,24858],{"class":1142},[159,36526,35041],{"class":165},[159,36528,36529],{"class":1135},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[159,36531,36532,36534,36536,36538,36540,36542,36544,36546],{"class":161,"line":1123},[159,36533,30142],{"class":165},[159,36535,24858],{"class":1142},[159,36537,36518],{"class":192},[159,36539,25123],{"class":1142},[159,36541,36503],{"class":165},[159,36543,24858],{"class":1142},[159,36545,35041],{"class":165},[159,36547,36548],{"class":1135},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[159,36550,36551],{"class":161,"line":1132},[159,36552,590],{"emptyLinePlaceholder":589},[159,36554,36555],{"class":161,"line":1139},[159,36556,36557],{"class":1135},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[159,36559,36560,36562,36565,36567,36569],{"class":161,"line":1168},[159,36561,36500],{"class":1142},[159,36563,36564],{"class":165}," ref2 ",[159,36566,189],{"class":1142},[159,36568,29272],{"class":185},[159,36570,29251],{"class":165},[159,36572,36573,36575,36577,36580,36582,36584,36586,36588],{"class":161,"line":1174},[159,36574,30142],{"class":165},[159,36576,24858],{"class":1142},[159,36578,36579],{"class":192}," \"ref2 = \"",[159,36581,25123],{"class":1142},[159,36583,36564],{"class":165},[159,36585,24858],{"class":1142},[159,36587,35041],{"class":165},[159,36589,36590],{"class":1135}," \u002F\u002F20\n",[159,36592,36593,36595,36597,36599,36601,36603,36605,36607],{"class":161,"line":1180},[159,36594,30142],{"class":165},[159,36596,24858],{"class":1142},[159,36598,36579],{"class":192},[159,36600,25123],{"class":1142},[159,36602,36564],{"class":165},[159,36604,24858],{"class":1142},[159,36606,35041],{"class":165},[159,36608,36590],{"class":1135},[159,36610,36611],{"class":161,"line":1194},[159,36612,590],{"emptyLinePlaceholder":589},[159,36614,36615,36617,36619,36621,36623,36625],{"class":161,"line":1200},[159,36616,29317],{"class":185},[159,36618,4774],{"class":165},[159,36620,189],{"class":1142},[159,36622,26631],{"class":1146},[159,36624,23934],{"class":165},[159,36626,36627],{"class":1135},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[159,36629,36630],{"class":161,"line":1221},[159,36631,590],{"emptyLinePlaceholder":589},[159,36633,36634,36636,36638,36640,36642,36644,36646,36648],{"class":161,"line":1230},[159,36635,30142],{"class":165},[159,36637,24858],{"class":1142},[159,36639,36579],{"class":192},[159,36641,25123],{"class":1142},[159,36643,36564],{"class":165},[159,36645,24858],{"class":1142},[159,36647,35041],{"class":165},[159,36649,36650],{"class":1135}," \u002F\u002F1000\n",[159,36652,36653,36655,36657,36659,36661,36663,36665,36667],{"class":161,"line":1247},[159,36654,30142],{"class":165},[159,36656,24858],{"class":1142},[159,36658,36579],{"class":192},[159,36660,25123],{"class":1142},[159,36662,36564],{"class":165},[159,36664,24858],{"class":1142},[159,36666,35041],{"class":165},[159,36668,36650],{"class":1135},[159,36670,36671],{"class":161,"line":1265},[159,36672,590],{"emptyLinePlaceholder":589},[159,36674,36675,36677,36679,36681],{"class":161,"line":1277},[159,36676,25950],{"class":185},[159,36678,1159],{"class":165},[159,36680,25955],{"class":192},[159,36682,1953],{"class":165},[159,36684,36685],{"class":161,"line":1283},[159,36686,590],{"emptyLinePlaceholder":589},[159,36688,36689,36691,36693],{"class":161,"line":1294},[159,36690,27711],{"class":1142},[159,36692,1259],{"class":1146},[159,36694,1492],{"class":165},[159,36696,36697],{"class":161,"line":1305},[159,36698,15685],{"class":165},[37,36700,36702],{"id":36701},"_65引用的本质","6.5引用的本质",[14,36704,36705,36706],{},"本质：",[61,36707,36708],{},"引用的本质在c++内部实现是一个指针常量.",[151,36710,36712],{"className":23872,"code":36711,"language":23874,"meta":25,"style":25},"\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",[49,36713,36714,36719,36735,36749,36753,36762,36774,36779,36784,36795,36808,36812,36828,36845,36849,36857,36865],{"__ignoreMap":25},[159,36715,36716],{"class":161,"line":162},[159,36717,36718],{"class":1135},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[159,36720,36721,36723,36725,36727,36729,36732],{"class":161,"line":176},[159,36722,28979],{"class":1142},[159,36724,34957],{"class":185},[159,36726,1159],{"class":165},[159,36728,36135],{"class":1142},[159,36730,36731],{"class":8765}," ref",[159,36733,36734],{"class":165},"){\n",[159,36736,36737,36740,36742,36744,36746],{"class":161,"line":203},[159,36738,36739],{"class":165},"    ref ",[159,36741,189],{"class":1142},[159,36743,29369],{"class":1146},[159,36745,23934],{"class":165},[159,36747,36748],{"class":1135}," \u002F\u002F ref是引用，转换为*ref = 100\n",[159,36750,36751],{"class":161,"line":223},[159,36752,15685],{"class":165},[159,36754,36755,36757,36759],{"class":161,"line":233},[159,36756,23886],{"class":1142},[159,36758,25625],{"class":185},[159,36760,36761],{"class":165},"(){\n",[159,36763,36764,36766,36768,36770,36772],{"class":161,"line":239},[159,36765,25636],{"class":1142},[159,36767,34443],{"class":165},[159,36769,189],{"class":1142},[159,36771,7664],{"class":1146},[159,36773,1492],{"class":165},[159,36775,36776],{"class":161,"line":245},[159,36777,36778],{"class":165},"    \n",[159,36780,36781],{"class":161,"line":251},[159,36782,36783],{"class":1135},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[159,36785,36786,36788,36790,36792],{"class":161,"line":261},[159,36787,36500],{"class":1142},[159,36789,36503],{"class":165},[159,36791,189],{"class":1142},[159,36793,36794],{"class":165}," a; \n",[159,36796,36797,36799,36801,36803,36805],{"class":161,"line":603},[159,36798,36739],{"class":165},[159,36800,189],{"class":1142},[159,36802,10978],{"class":1146},[159,36804,23934],{"class":165},[159,36806,36807],{"class":1135}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[159,36809,36810],{"class":161,"line":621},[159,36811,36778],{"class":165},[159,36813,36814,36816,36818,36820,36822,36824,36826],{"class":161,"line":634},[159,36815,30142],{"class":165},[159,36817,24858],{"class":1142},[159,36819,36239],{"class":192},[159,36821,25123],{"class":1142},[159,36823,34443],{"class":165},[159,36825,24858],{"class":1142},[159,36827,32439],{"class":165},[159,36829,36830,36832,36834,36837,36839,36841,36843],{"class":161,"line":640},[159,36831,30142],{"class":165},[159,36833,24858],{"class":1142},[159,36835,36836],{"class":192}," \"ref:\"",[159,36838,25123],{"class":1142},[159,36840,36503],{"class":165},[159,36842,24858],{"class":1142},[159,36844,32439],{"class":165},[159,36846,36847],{"class":161,"line":1075},[159,36848,36778],{"class":165},[159,36850,36851,36854],{"class":161,"line":1081},[159,36852,36853],{"class":185},"    func",[159,36855,36856],{"class":165},"(a);\n",[159,36858,36859,36861,36863],{"class":161,"line":1091},[159,36860,27711],{"class":1142},[159,36862,1259],{"class":1146},[159,36864,1492],{"class":165},[159,36866,36867],{"class":161,"line":1100},[159,36868,15685],{"class":165},[14,36870,10547],{},[134,36872,36873,36876],{},[106,36874,36875],{},"引用的本质，就是一个指针常量",[106,36877,36878],{},"引用一旦初始化，就不可以发生改变",[37,36880,36882],{"id":36881},"_66常量引用","6.6常量引用",[14,36884,36885],{},"作用：常量引用主要用来修饰形参",[14,36887,36888,36889,36892],{},"在函数形参列表中，可以加",[61,36890,36891],{},"const修饰形参","，防止形参改变实参",[151,36894,36896],{"className":23872,"code":36895,"language":23874,"meta":25,"style":25},"\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",[49,36897,36898,36903,36908,36927,36932,36945,36949,36953,36961,36965,36970,36975,36989,36993,37001,37013,37017,37022,37034,37041,37045,37055,37059,37067],{"__ignoreMap":25},[159,36899,36900],{"class":161,"line":162},[159,36901,36902],{"class":1135},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[159,36904,36905],{"class":161,"line":176},[159,36906,36907],{"class":1135},"\u002F\u002F加上const就不能修改实参的\n",[159,36909,36910,36912,36915,36917,36919,36922,36925],{"class":161,"line":203},[159,36911,28979],{"class":1142},[159,36913,36914],{"class":185}," showValue",[159,36916,1159],{"class":165},[159,36918,18326],{"class":1142},[159,36920,36921],{"class":1142}," int&",[159,36923,36924],{"class":8765}," v",[159,36926,1262],{"class":165},[159,36928,36929],{"class":161,"line":223},[159,36930,36931],{"class":1135},"    \u002F\u002Fv += 100;\n",[159,36933,36934,36936,36938,36941,36943],{"class":161,"line":233},[159,36935,30142],{"class":165},[159,36937,24858],{"class":1142},[159,36939,36940],{"class":165}," v ",[159,36942,24858],{"class":1142},[159,36944,32439],{"class":165},[159,36946,36947],{"class":161,"line":239},[159,36948,15685],{"class":165},[159,36950,36951],{"class":161,"line":245},[159,36952,590],{"emptyLinePlaceholder":589},[159,36954,36955,36957,36959],{"class":161,"line":251},[159,36956,23886],{"class":1142},[159,36958,25625],{"class":185},[159,36960,17173],{"class":165},[159,36962,36963],{"class":161,"line":261},[159,36964,590],{"emptyLinePlaceholder":589},[159,36966,36967],{"class":161,"line":603},[159,36968,36969],{"class":1135},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[159,36971,36972],{"class":161,"line":621},[159,36973,36974],{"class":1135},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[159,36976,36977,36979,36981,36983,36985,36987],{"class":161,"line":634},[159,36978,1143],{"class":1142},[159,36980,36921],{"class":1142},[159,36982,36503],{"class":165},[159,36984,189],{"class":1142},[159,36986,7664],{"class":1146},[159,36988,1492],{"class":165},[159,36990,36991],{"class":161,"line":640},[159,36992,590],{"emptyLinePlaceholder":589},[159,36994,36995,36998],{"class":161,"line":1075},[159,36996,36997],{"class":1135},"    \u002F\u002Fref = 100;",[159,36999,37000],{"class":1135},"  \u002F\u002F加入const后不可以修改变量\n",[159,37002,37003,37005,37007,37009,37011],{"class":161,"line":1081},[159,37004,30142],{"class":165},[159,37006,24858],{"class":1142},[159,37008,36503],{"class":165},[159,37010,24858],{"class":1142},[159,37012,32439],{"class":165},[159,37014,37015],{"class":161,"line":1091},[159,37016,590],{"emptyLinePlaceholder":589},[159,37018,37019],{"class":161,"line":1100},[159,37020,37021],{"class":1135},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[159,37023,37024,37026,37028,37030,37032],{"class":161,"line":1123},[159,37025,25636],{"class":1142},[159,37027,34443],{"class":165},[159,37029,189],{"class":1142},[159,37031,7664],{"class":1146},[159,37033,1492],{"class":165},[159,37035,37036,37039],{"class":161,"line":1132},[159,37037,37038],{"class":185},"    showValue",[159,37040,36856],{"class":165},[159,37042,37043],{"class":161,"line":1139},[159,37044,590],{"emptyLinePlaceholder":589},[159,37046,37047,37049,37051,37053],{"class":161,"line":1168},[159,37048,25950],{"class":185},[159,37050,1159],{"class":165},[159,37052,25955],{"class":192},[159,37054,1953],{"class":165},[159,37056,37057],{"class":161,"line":1174},[159,37058,590],{"emptyLinePlaceholder":589},[159,37060,37061,37063,37065],{"class":161,"line":1180},[159,37062,27711],{"class":1142},[159,37064,1259],{"class":1146},[159,37066,1492],{"class":165},[159,37068,37069],{"class":161,"line":1194},[159,37070,15685],{"class":165},[1468,37072,37073],{},"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":25,"searchDepth":176,"depth":176,"links":37075},[37076,37077,37078,37079,37080,37081],{"id":35611,"depth":176,"text":35612},{"id":35790,"depth":176,"text":35791},{"id":35973,"depth":176,"text":35974},{"id":36375,"depth":176,"text":36376},{"id":36701,"depth":176,"text":36702},{"id":36881,"depth":176,"text":36882},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":35603,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":37088,"title":37089,"body":37090,"description":25,"extension":23810,"meta":38169,"navigation":589,"path":38170,"seo":38171,"stem":38172,"__hash__":38173},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":37091,"toc":38161},[37092,37095,37099,37102,37107,37337,37339,37350,37354,37357,37365,37469,37472,37476,37479,37483,37486,37491,37513,37519,37846,37849,37853,37861,38158],[10,37093,37089],{"id":37094},"_7函数高级部分",[37,37096,37098],{"id":37097},"_71函数默认参数","7.1函数默认参数",[14,37100,37101],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,37103,28799,37104],{},[49,37105,37106],{}," 返回值类型  函数名 （参数= 默认值）{}",[151,37108,37110],{"className":23872,"code":37109,"language":23874,"meta":25,"style":25},"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",[49,37111,37112,37146,37161,37165,37169,37174,37179,37208,37228,37238,37242,37246,37254,37258,37285,37307,37311,37321,37325,37333],{"__ignoreMap":25},[159,37113,37114,37116,37118,37120,37122,37124,37126,37128,37130,37132,37134,37136,37138,37140,37142,37144],{"class":161,"line":162},[159,37115,23886],{"class":1142},[159,37117,34957],{"class":185},[159,37119,1159],{"class":165},[159,37121,23886],{"class":1142},[159,37123,7885],{"class":8765},[159,37125,1939],{"class":165},[159,37127,23886],{"class":1142},[159,37129,26465],{"class":8765},[159,37131,1150],{"class":1142},[159,37133,7664],{"class":1146},[159,37135,1939],{"class":165},[159,37137,23886],{"class":1142},[159,37139,26481],{"class":8765},[159,37141,1150],{"class":1142},[159,37143,7664],{"class":1146},[159,37145,1262],{"class":165},[159,37147,37148,37150,37152,37154,37156,37158],{"class":161,"line":176},[159,37149,27711],{"class":1142},[159,37151,34443],{"class":165},[159,37153,2704],{"class":1142},[159,37155,34456],{"class":165},[159,37157,2704],{"class":1142},[159,37159,37160],{"class":165}," c;\n",[159,37162,37163],{"class":161,"line":203},[159,37164,15685],{"class":165},[159,37166,37167],{"class":161,"line":223},[159,37168,590],{"emptyLinePlaceholder":589},[159,37170,37171],{"class":161,"line":233},[159,37172,37173],{"class":1135},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[159,37175,37176],{"class":161,"line":239},[159,37177,37178],{"class":1135},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[159,37180,37181,37183,37186,37188,37190,37192,37194,37196,37198,37200,37202,37204,37206],{"class":161,"line":245},[159,37182,23886],{"class":1142},[159,37184,37185],{"class":185}," func2",[159,37187,1159],{"class":165},[159,37189,23886],{"class":1142},[159,37191,7885],{"class":8765},[159,37193,1150],{"class":1142},[159,37195,7664],{"class":1146},[159,37197,1939],{"class":165},[159,37199,23886],{"class":1142},[159,37201,26465],{"class":8765},[159,37203,1150],{"class":1142},[159,37205,7664],{"class":1146},[159,37207,1953],{"class":165},[159,37209,37210,37212,37214,37216,37218,37220,37222,37224,37226],{"class":161,"line":251},[159,37211,23886],{"class":1142},[159,37213,37185],{"class":185},[159,37215,1159],{"class":165},[159,37217,23886],{"class":1142},[159,37219,7885],{"class":8765},[159,37221,1939],{"class":165},[159,37223,23886],{"class":1142},[159,37225,26465],{"class":8765},[159,37227,1262],{"class":165},[159,37229,37230,37232,37234,37236],{"class":161,"line":261},[159,37231,27711],{"class":1142},[159,37233,34443],{"class":165},[159,37235,2704],{"class":1142},[159,37237,36032],{"class":165},[159,37239,37240],{"class":161,"line":603},[159,37241,15685],{"class":165},[159,37243,37244],{"class":161,"line":621},[159,37245,590],{"emptyLinePlaceholder":589},[159,37247,37248,37250,37252],{"class":161,"line":634},[159,37249,23886],{"class":1142},[159,37251,25625],{"class":185},[159,37253,17173],{"class":165},[159,37255,37256],{"class":161,"line":640},[159,37257,590],{"emptyLinePlaceholder":589},[159,37259,37260,37262,37264,37267,37269,37271,37273,37275,37277,37279,37281,37283],{"class":161,"line":1075},[159,37261,30142],{"class":165},[159,37263,24858],{"class":1142},[159,37265,37266],{"class":192}," \"ret = \"",[159,37268,25123],{"class":1142},[159,37270,34957],{"class":185},[159,37272,1159],{"class":165},[159,37274,1739],{"class":1146},[159,37276,1939],{"class":165},[159,37278,1739],{"class":1146},[159,37280,2710],{"class":165},[159,37282,24858],{"class":1142},[159,37284,32439],{"class":165},[159,37286,37287,37289,37291,37293,37295,37297,37299,37301,37303,37305],{"class":161,"line":1081},[159,37288,30142],{"class":165},[159,37290,24858],{"class":1142},[159,37292,37266],{"class":192},[159,37294,25123],{"class":1142},[159,37296,34957],{"class":185},[159,37298,1159],{"class":165},[159,37300,1596],{"class":1146},[159,37302,2710],{"class":165},[159,37304,24858],{"class":1142},[159,37306,32439],{"class":165},[159,37308,37309],{"class":161,"line":1091},[159,37310,590],{"emptyLinePlaceholder":589},[159,37312,37313,37315,37317,37319],{"class":161,"line":1100},[159,37314,25950],{"class":185},[159,37316,1159],{"class":165},[159,37318,25955],{"class":192},[159,37320,1953],{"class":165},[159,37322,37323],{"class":161,"line":1123},[159,37324,590],{"emptyLinePlaceholder":589},[159,37326,37327,37329,37331],{"class":161,"line":1132},[159,37328,27711],{"class":1142},[159,37330,1259],{"class":1146},[159,37332,1492],{"class":165},[159,37334,37335],{"class":161,"line":1139},[159,37336,15685],{"class":165},[14,37338,10547],{},[134,37340,37341,37344,37347],{},[106,37342,37343],{},"我传就用我；没传就用你",[106,37345,37346],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[106,37348,37349],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[37,37351,37353],{"id":37352},"_72函数的占位参数","7.2函数的占位参数",[14,37355,37356],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,37358,37359,37361,37362],{},[61,37360,28799],{}," ",[49,37363,37364],{},"返回值类型 函数名 (数据类型){}",[151,37366,37368],{"className":23872,"code":37367,"language":23874,"meta":25,"style":25},"\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",[49,37369,37370,37375,37393,37406,37410,37418,37422,37439,37443,37453,37457,37465],{"__ignoreMap":25},[159,37371,37372],{"class":161,"line":162},[159,37373,37374],{"class":1135},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[159,37376,37377,37379,37381,37383,37385,37387,37389,37391],{"class":161,"line":176},[159,37378,28979],{"class":1142},[159,37380,34957],{"class":185},[159,37382,1159],{"class":165},[159,37384,23886],{"class":1142},[159,37386,7885],{"class":8765},[159,37388,1939],{"class":165},[159,37390,23886],{"class":1142},[159,37392,1262],{"class":165},[159,37394,37395,37397,37399,37402,37404],{"class":161,"line":203},[159,37396,30142],{"class":165},[159,37398,24858],{"class":1142},[159,37400,37401],{"class":192}," \"this is func\"",[159,37403,25123],{"class":1142},[159,37405,32439],{"class":165},[159,37407,37408],{"class":161,"line":223},[159,37409,15685],{"class":165},[159,37411,37412,37414,37416],{"class":161,"line":233},[159,37413,23886],{"class":1142},[159,37415,25625],{"class":185},[159,37417,17173],{"class":165},[159,37419,37420],{"class":161,"line":239},[159,37421,590],{"emptyLinePlaceholder":589},[159,37423,37424,37426,37428,37430,37432,37434,37436],{"class":161,"line":245},[159,37425,36853],{"class":185},[159,37427,1159],{"class":165},[159,37429,1964],{"class":1146},[159,37431,24233],{"class":165},[159,37433,1964],{"class":1146},[159,37435,29581],{"class":165},[159,37437,37438],{"class":1135}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[159,37440,37441],{"class":161,"line":251},[159,37442,590],{"emptyLinePlaceholder":589},[159,37444,37445,37447,37449,37451],{"class":161,"line":261},[159,37446,25950],{"class":185},[159,37448,1159],{"class":165},[159,37450,25955],{"class":192},[159,37452,1953],{"class":165},[159,37454,37455],{"class":161,"line":603},[159,37456,590],{"emptyLinePlaceholder":589},[159,37458,37459,37461,37463],{"class":161,"line":621},[159,37460,27711],{"class":1142},[159,37462,1259],{"class":1146},[159,37464,1492],{"class":165},[159,37466,37467],{"class":161,"line":634},[159,37468,15685],{"class":165},[14,37470,37471],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[37,37473,37475],{"id":37474},"_73函数重载","7.3函数重载",[14,37477,37478],{},"意思是函数名是可以相同的",[42,37480,37482],{"id":37481},"_731基本语法","7.3.1基本语法",[14,37484,37485],{},"作用：函数名可以相同，提高复用性",[14,37487,37488],{},[61,37489,37490],{},"函数重载满足条件：",[103,37492,37493,37496,37499],{},[106,37494,37495],{},"同一个作用域下",[106,37497,37498],{},"函数名称相同",[106,37500,37501,37502,37505,37506,37509,37510],{},"函数参数",[61,37503,37504],{},"类型不同","  或者 ",[61,37507,37508],{},"个数不同"," 或者 ",[61,37511,37512],{},"顺序不同",[14,37514,37515,37518],{},[61,37516,37517],{},"注意:","  函数的返回值不可以作为函数重载的条件",[151,37520,37522],{"className":33518,"code":37521,"language":33520,"meta":25,"style":25},"\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",[49,37523,37524,37529,37537,37541,37554,37558,37572,37576,37589,37593,37608,37612,37625,37629,37650,37654,37667,37671,37691,37695,37708,37712,37716,37721,37726,37731,37736,37741,37745,37749,37757,37761,37767,37777,37787,37801,37816,37820,37830,37834,37842],{"__ignoreMap":25},[159,37525,37526],{"class":161,"line":162},[159,37527,37528],{"class":1135},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[159,37530,37531,37533,37535],{"class":161,"line":176},[159,37532,28979],{"class":1142},[159,37534,34957],{"class":185},[159,37536,5158],{"class":165},[159,37538,37539],{"class":161,"line":203},[159,37540,25222],{"class":165},[159,37542,37543,37545,37547,37550,37552],{"class":161,"line":223},[159,37544,30142],{"class":165},[159,37546,24858],{"class":1142},[159,37548,37549],{"class":192}," \"func 的调用！\"",[159,37551,25123],{"class":1142},[159,37553,32439],{"class":165},[159,37555,37556],{"class":161,"line":233},[159,37557,15685],{"class":165},[159,37559,37560,37562,37564,37566,37568,37570],{"class":161,"line":239},[159,37561,28979],{"class":1142},[159,37563,34957],{"class":185},[159,37565,1159],{"class":165},[159,37567,23886],{"class":1142},[159,37569,7885],{"class":8765},[159,37571,1165],{"class":165},[159,37573,37574],{"class":161,"line":245},[159,37575,25222],{"class":165},[159,37577,37578,37580,37582,37585,37587],{"class":161,"line":251},[159,37579,30142],{"class":165},[159,37581,24858],{"class":1142},[159,37583,37584],{"class":192}," \"func (int a) 的调用！\"",[159,37586,25123],{"class":1142},[159,37588,32439],{"class":165},[159,37590,37591],{"class":161,"line":261},[159,37592,15685],{"class":165},[159,37594,37595,37597,37599,37601,37604,37606],{"class":161,"line":603},[159,37596,28979],{"class":1142},[159,37598,34957],{"class":185},[159,37600,1159],{"class":165},[159,37602,37603],{"class":1142},"double",[159,37605,7885],{"class":8765},[159,37607,1165],{"class":165},[159,37609,37610],{"class":161,"line":621},[159,37611,25222],{"class":165},[159,37613,37614,37616,37618,37621,37623],{"class":161,"line":634},[159,37615,30142],{"class":165},[159,37617,24858],{"class":1142},[159,37619,37620],{"class":192}," \"func (double a)的调用！\"",[159,37622,25123],{"class":1142},[159,37624,32439],{"class":165},[159,37626,37627],{"class":161,"line":640},[159,37628,15685],{"class":165},[159,37630,37631,37633,37635,37637,37639,37641,37644,37646,37648],{"class":161,"line":1075},[159,37632,28979],{"class":1142},[159,37634,34957],{"class":185},[159,37636,1159],{"class":165},[159,37638,23886],{"class":1142},[159,37640,7885],{"class":8765},[159,37642,37643],{"class":165}," ,",[159,37645,37603],{"class":1142},[159,37647,26465],{"class":8765},[159,37649,1165],{"class":165},[159,37651,37652],{"class":161,"line":1081},[159,37653,25222],{"class":165},[159,37655,37656,37658,37660,37663,37665],{"class":161,"line":1091},[159,37657,30142],{"class":165},[159,37659,24858],{"class":1142},[159,37661,37662],{"class":192}," \"func (int a ,double b) 的调用！\"",[159,37664,25123],{"class":1142},[159,37666,32439],{"class":165},[159,37668,37669],{"class":161,"line":1100},[159,37670,15685],{"class":165},[159,37672,37673,37675,37677,37679,37681,37683,37685,37687,37689],{"class":161,"line":1123},[159,37674,28979],{"class":1142},[159,37676,34957],{"class":185},[159,37678,1159],{"class":165},[159,37680,37603],{"class":1142},[159,37682,7885],{"class":8765},[159,37684,37643],{"class":165},[159,37686,23886],{"class":1142},[159,37688,26465],{"class":8765},[159,37690,1165],{"class":165},[159,37692,37693],{"class":161,"line":1132},[159,37694,25222],{"class":165},[159,37696,37697,37699,37701,37704,37706],{"class":161,"line":1139},[159,37698,30142],{"class":165},[159,37700,24858],{"class":1142},[159,37702,37703],{"class":192}," \"func (double a ,int b)的调用！\"",[159,37705,25123],{"class":1142},[159,37707,32439],{"class":165},[159,37709,37710],{"class":161,"line":1168},[159,37711,15685],{"class":165},[159,37713,37714],{"class":161,"line":1174},[159,37715,590],{"emptyLinePlaceholder":589},[159,37717,37718],{"class":161,"line":1180},[159,37719,37720],{"class":1135},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[159,37722,37723],{"class":161,"line":1194},[159,37724,37725],{"class":1135},"\u002F\u002Fint func(double a, int b)\n",[159,37727,37728],{"class":161,"line":1200},[159,37729,37730],{"class":1135},"\u002F\u002F{\n",[159,37732,37733],{"class":161,"line":1221},[159,37734,37735],{"class":1135},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[159,37737,37738],{"class":161,"line":1230},[159,37739,37740],{"class":1135},"\u002F\u002F}\n",[159,37742,37743],{"class":161,"line":1247},[159,37744,590],{"emptyLinePlaceholder":589},[159,37746,37747],{"class":161,"line":1265},[159,37748,590],{"emptyLinePlaceholder":589},[159,37750,37751,37753,37755],{"class":161,"line":1277},[159,37752,23886],{"class":1142},[159,37754,25625],{"class":185},[159,37756,17173],{"class":165},[159,37758,37759],{"class":161,"line":1283},[159,37760,590],{"emptyLinePlaceholder":589},[159,37762,37763,37765],{"class":161,"line":1294},[159,37764,36853],{"class":185},[159,37766,29251],{"class":165},[159,37768,37769,37771,37773,37775],{"class":161,"line":1305},[159,37770,36853],{"class":185},[159,37772,1159],{"class":165},[159,37774,1964],{"class":1146},[159,37776,1953],{"class":165},[159,37778,37779,37781,37783,37785],{"class":161,"line":1311},[159,37780,36853],{"class":185},[159,37782,1159],{"class":165},[159,37784,23928],{"class":1146},[159,37786,1953],{"class":165},[159,37788,37789,37791,37793,37795,37797,37799],{"class":161,"line":1322},[159,37790,36853],{"class":185},[159,37792,1159],{"class":165},[159,37794,1964],{"class":1146},[159,37796,24233],{"class":165},[159,37798,23928],{"class":1146},[159,37800,1953],{"class":165},[159,37802,37803,37805,37807,37809,37812,37814],{"class":161,"line":1327},[159,37804,36853],{"class":185},[159,37806,1159],{"class":165},[159,37808,23928],{"class":1146},[159,37810,37811],{"class":165}," , ",[159,37813,1964],{"class":1146},[159,37815,1953],{"class":165},[159,37817,37818],{"class":161,"line":1336},[159,37819,36778],{"class":165},[159,37821,37822,37824,37826,37828],{"class":161,"line":1345},[159,37823,25950],{"class":185},[159,37825,1159],{"class":165},[159,37827,25955],{"class":192},[159,37829,1953],{"class":165},[159,37831,37832],{"class":161,"line":1350},[159,37833,590],{"emptyLinePlaceholder":589},[159,37835,37836,37838,37840],{"class":161,"line":1764},[159,37837,27711],{"class":1142},[159,37839,1259],{"class":1146},[159,37841,1492],{"class":165},[159,37843,37844],{"class":161,"line":1769},[159,37845,15685],{"class":165},[14,37847,37848],{},"重点：函数返回值不可以作为函数重载条件！",[42,37850,37852],{"id":37851},"_732注意事项","7.3.2注意事项",[103,37854,37855,37858],{},[106,37856,37857],{},"引用作为重载条件!!!",[106,37859,37860],{},"函数重载碰到函数默认参数",[151,37862,37864],{"className":23872,"code":37863,"language":23874,"meta":25,"style":25},"\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",[49,37865,37866,37871,37876,37880,37896,37900,37913,37917,37921,37939,37943,37956,37960,37964,37968,37973,37977,38001,38005,38018,38022,38026,38040,38044,38057,38061,38065,38073,38077,38089,38099,38112,38116,38120,38128,38132,38142,38146,38154],{"__ignoreMap":25},[159,37867,37868],{"class":161,"line":162},[159,37869,37870],{"class":1135},"\u002F\u002F函数重载注意事项\n",[159,37872,37873],{"class":161,"line":176},[159,37874,37875],{"class":1135},"\u002F\u002F1、引用作为重载条件\n",[159,37877,37878],{"class":161,"line":203},[159,37879,590],{"emptyLinePlaceholder":589},[159,37881,37882,37884,37886,37888,37890,37892,37894],{"class":161,"line":223},[159,37883,28979],{"class":1142},[159,37885,34957],{"class":185},[159,37887,1159],{"class":165},[159,37889,23886],{"class":1142},[159,37891,34159],{"class":1142},[159,37893,8085],{"class":8765},[159,37895,1165],{"class":165},[159,37897,37898],{"class":161,"line":233},[159,37899,25222],{"class":165},[159,37901,37902,37904,37906,37909,37911],{"class":161,"line":239},[159,37903,30142],{"class":165},[159,37905,24858],{"class":1142},[159,37907,37908],{"class":192}," \"func (int &a) 调用 \"",[159,37910,25123],{"class":1142},[159,37912,32439],{"class":165},[159,37914,37915],{"class":161,"line":245},[159,37916,15685],{"class":165},[159,37918,37919],{"class":161,"line":251},[159,37920,590],{"emptyLinePlaceholder":589},[159,37922,37923,37925,37927,37929,37931,37933,37935,37937],{"class":161,"line":261},[159,37924,28979],{"class":1142},[159,37926,34957],{"class":185},[159,37928,1159],{"class":165},[159,37930,18326],{"class":1142},[159,37932,26029],{"class":1142},[159,37934,34159],{"class":1142},[159,37936,8085],{"class":8765},[159,37938,1165],{"class":165},[159,37940,37941],{"class":161,"line":603},[159,37942,25222],{"class":165},[159,37944,37945,37947,37949,37952,37954],{"class":161,"line":621},[159,37946,30142],{"class":165},[159,37948,24858],{"class":1142},[159,37950,37951],{"class":192}," \"func (const int &a) 调用 \"",[159,37953,25123],{"class":1142},[159,37955,32439],{"class":165},[159,37957,37958],{"class":161,"line":634},[159,37959,15685],{"class":165},[159,37961,37962],{"class":161,"line":640},[159,37963,590],{"emptyLinePlaceholder":589},[159,37965,37966],{"class":161,"line":1075},[159,37967,590],{"emptyLinePlaceholder":589},[159,37969,37970],{"class":161,"line":1081},[159,37971,37972],{"class":1135},"\u002F\u002F2、函数重载碰到函数默认参数\n",[159,37974,37975],{"class":161,"line":1091},[159,37976,590],{"emptyLinePlaceholder":589},[159,37978,37979,37981,37983,37985,37987,37989,37991,37993,37995,37997,37999],{"class":161,"line":1100},[159,37980,28979],{"class":1142},[159,37982,37185],{"class":185},[159,37984,1159],{"class":165},[159,37986,23886],{"class":1142},[159,37988,7885],{"class":8765},[159,37990,1939],{"class":165},[159,37992,23886],{"class":1142},[159,37994,26465],{"class":8765},[159,37996,1150],{"class":1142},[159,37998,7664],{"class":1146},[159,38000,1165],{"class":165},[159,38002,38003],{"class":161,"line":1123},[159,38004,25222],{"class":165},[159,38006,38007,38009,38011,38014,38016],{"class":161,"line":1132},[159,38008,30142],{"class":165},[159,38010,24858],{"class":1142},[159,38012,38013],{"class":192}," \"func2(int a, int b = 10) 调用\"",[159,38015,25123],{"class":1142},[159,38017,32439],{"class":165},[159,38019,38020],{"class":161,"line":1139},[159,38021,15685],{"class":165},[159,38023,38024],{"class":161,"line":1168},[159,38025,590],{"emptyLinePlaceholder":589},[159,38027,38028,38030,38032,38034,38036,38038],{"class":161,"line":1174},[159,38029,28979],{"class":1142},[159,38031,37185],{"class":185},[159,38033,1159],{"class":165},[159,38035,23886],{"class":1142},[159,38037,7885],{"class":8765},[159,38039,1165],{"class":165},[159,38041,38042],{"class":161,"line":1180},[159,38043,25222],{"class":165},[159,38045,38046,38048,38050,38053,38055],{"class":161,"line":1194},[159,38047,30142],{"class":165},[159,38049,24858],{"class":1142},[159,38051,38052],{"class":192}," \"func2(int a) 调用\"",[159,38054,25123],{"class":1142},[159,38056,32439],{"class":165},[159,38058,38059],{"class":161,"line":1200},[159,38060,15685],{"class":165},[159,38062,38063],{"class":161,"line":1221},[159,38064,590],{"emptyLinePlaceholder":589},[159,38066,38067,38069,38071],{"class":161,"line":1230},[159,38068,23886],{"class":1142},[159,38070,25625],{"class":185},[159,38072,17173],{"class":165},[159,38074,38075],{"class":161,"line":1247},[159,38076,36778],{"class":165},[159,38078,38079,38081,38083,38085,38087],{"class":161,"line":1265},[159,38080,25636],{"class":1142},[159,38082,34443],{"class":165},[159,38084,189],{"class":1142},[159,38086,7664],{"class":1146},[159,38088,1492],{"class":165},[159,38090,38091,38093,38096],{"class":161,"line":1277},[159,38092,36853],{"class":185},[159,38094,38095],{"class":165},"(a);",[159,38097,38098],{"class":1135}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[159,38100,38101,38103,38105,38107,38109],{"class":161,"line":1283},[159,38102,36853],{"class":185},[159,38104,1159],{"class":165},[159,38106,1964],{"class":1146},[159,38108,29581],{"class":165},[159,38110,38111],{"class":1135},"\u002F\u002F调用有const   10是个常量\n",[159,38113,38114],{"class":161,"line":1294},[159,38115,590],{"emptyLinePlaceholder":589},[159,38117,38118],{"class":161,"line":1305},[159,38119,590],{"emptyLinePlaceholder":589},[159,38121,38122,38125],{"class":161,"line":1311},[159,38123,38124],{"class":1135},"    \u002F\u002Ffunc2(10);",[159,38126,38127],{"class":1135}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[159,38129,38130],{"class":161,"line":1322},[159,38131,590],{"emptyLinePlaceholder":589},[159,38133,38134,38136,38138,38140],{"class":161,"line":1327},[159,38135,25950],{"class":185},[159,38137,1159],{"class":165},[159,38139,25955],{"class":192},[159,38141,1953],{"class":165},[159,38143,38144],{"class":161,"line":1336},[159,38145,590],{"emptyLinePlaceholder":589},[159,38147,38148,38150,38152],{"class":161,"line":1345},[159,38149,27711],{"class":1142},[159,38151,1259],{"class":1146},[159,38153,1492],{"class":165},[159,38155,38156],{"class":161,"line":1350},[159,38157,15685],{"class":165},[1468,38159,38160],{},"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":25,"searchDepth":176,"depth":176,"links":38162},[38163,38164,38165],{"id":37097,"depth":176,"text":37098},{"id":37352,"depth":176,"text":37353},{"id":37474,"depth":176,"text":37475,"children":38166},[38167,38168],{"id":37481,"depth":203,"text":37482},{"id":37851,"depth":203,"text":37852},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":37089,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":38175,"title":38176,"body":38177,"description":46891,"extension":23810,"meta":46892,"navigation":589,"path":46893,"seo":46894,"stem":46895,"__hash__":46896},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":38178,"toc":46872},[38179,38182,38188,38195,38200,38203,38206,38209,38213,38217,38220,38223,38231,38236,38239,38246,38251,38409,38412,38663,38666,38669,38672,38677,38680,38683,38694,38699,38935,38939,38949,38952,38960,39107,39111,39114,39117,39121,39564,39568,39576,39584,40463,40470,40475,41102,41105,41108,41111,41230,41233,41320,41323,41449,41452,41546,41549,41902,41906,41914,41918,41925,41928,41931,41942,41948,41953,41965,41973,41993,42001,42018,42204,42207,42211,42214,42217,42220,42223,42226,42229,42232,42692,42698,42702,42705,42716,43303,43306,43795,43799,43802,43805,43808,43811,43814,43822,44218,44222,44225,44228,44675,44678,44681,44686,44689,44694,44697,44701,44704,44706,44712,44715,45021,45031,45072,45076,45079,45081,45114,45117,45424,45426,45441,45444,45467,45476,45482,45485,45489,45492,45495,45500,45511,45516,45524,45528,45658,45661,45664,45839,45844,46056,46060,46063,46177,46182,46421,46425,46429,46432,46435,46440,46545,46548,46551,46554,46558,46669,46672,46675,46680,46732,46735,46738,46743,46789,46792,46797,46865,46867,46870],[10,38180,38176],{"id":38181},"_8类和对象",[14,38183,38184,38185],{},"C++面向对象的三大特性为",[61,38186,38187],{},"封装、继承、多态",[14,38189,38190,38191,38194],{},"C++认为",[61,38192,38193],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,38196,38197],{},[61,38198,38199],{},"例如：",[14,38201,38202],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,38204,38205],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,38207,38208],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[37,38210,38212],{"id":38211},"_81封装","8.1封装",[42,38214,38216],{"id":38215},"_811封装的意义","8.1.1封装的意义",[14,38218,38219],{},"封装是C++面向对象三大特性之一",[14,38221,38222],{},"封装的意义：",[103,38224,38225,38228],{},[106,38226,38227],{},"将属性和行为作为一个整体，表现生活中的事物",[106,38229,38230],{},"将属性和行为加以权限控制",[14,38232,38233],{},[61,38234,38235],{},"封装意义一：",[14,38237,38238],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,38240,38241,37361,38243],{},[61,38242,28799],{},[49,38244,38245],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[134,38247,38248],{},[106,38249,38250],{},"**示例1：**设计一个圆类，求圆的周长",[151,38252,38254],{"className":23872,"code":38253,"language":23874,"meta":25,"style":25},"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",[49,38255,38256,38264,38268,38273,38278,38283,38288,38295,38300,38310,38314,38331,38335,38339,38347,38351,38356,38361,38366,38371,38382,38405],{"__ignoreMap":25},[159,38257,38258,38261],{"class":161,"line":162},[159,38259,38260],{"class":1142},"class",[159,38262,38263],{"class":185}," Circle\n",[159,38265,38266],{"class":161,"line":176},[159,38267,25222],{"class":165},[159,38269,38270],{"class":161,"line":203},[159,38271,38272],{"class":1135},"    \u002F\u002F访问权限\n",[159,38274,38275],{"class":161,"line":223},[159,38276,38277],{"class":1135},"    \u002F\u002F公共权限\n",[159,38279,38280],{"class":161,"line":233},[159,38281,38282],{"class":1142},"public:\n",[159,38284,38285],{"class":161,"line":239},[159,38286,38287],{"class":1135},"    \u002F\u002F属性\n",[159,38289,38290,38292],{"class":161,"line":245},[159,38291,25636],{"class":1142},[159,38293,38294],{"class":165}," m_r;\n",[159,38296,38297],{"class":161,"line":251},[159,38298,38299],{"class":1135},"    \u002F\u002F行为\n",[159,38301,38302,38305,38308],{"class":161,"line":261},[159,38303,38304],{"class":1142},"    double",[159,38306,38307],{"class":185}," calculateZC",[159,38309,5158],{"class":165},[159,38311,38312],{"class":161,"line":603},[159,38313,25681],{"class":165},[159,38315,38316,38318,38321,38323,38326,38328],{"class":161,"line":621},[159,38317,21176],{"class":1142},[159,38319,38320],{"class":1146}," 2",[159,38322,4777],{"class":1142},[159,38324,38325],{"class":165},"PI",[159,38327,4777],{"class":1142},[159,38329,38330],{"class":165},"m_r;\n",[159,38332,38333],{"class":161,"line":634},[159,38334,1508],{"class":165},[159,38336,38337],{"class":161,"line":640},[159,38338,27616],{"class":165},[159,38340,38341,38343,38345],{"class":161,"line":1075},[159,38342,23886],{"class":1142},[159,38344,25625],{"class":185},[159,38346,5158],{"class":165},[159,38348,38349],{"class":161,"line":1081},[159,38350,25222],{"class":165},[159,38352,38353],{"class":161,"line":1091},[159,38354,38355],{"class":1135},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[159,38357,38358],{"class":161,"line":1100},[159,38359,38360],{"class":1135},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[159,38362,38363],{"class":161,"line":1123},[159,38364,38365],{"class":165},"    Circle c1;\n",[159,38367,38368],{"class":161,"line":1132},[159,38369,38370],{"class":1135},"    \u002F\u002F给圆对象 的属性进行赋值\n",[159,38372,38373,38376,38378,38380],{"class":161,"line":1139},[159,38374,38375],{"class":165},"    c1.m_r",[159,38377,189],{"class":1142},[159,38379,1964],{"class":1146},[159,38381,1492],{"class":165},[159,38383,38384,38386,38388,38391,38393,38396,38399,38401,38403],{"class":161,"line":1168},[159,38385,25227],{"class":165},[159,38387,24858],{"class":1142},[159,38389,38390],{"class":192},"\"圆的周长\"",[159,38392,24858],{"class":1142},[159,38394,38395],{"class":165},"c1.",[159,38397,38398],{"class":185},"calculateZC",[159,38400,21042],{"class":165},[159,38402,24858],{"class":1142},[159,38404,24880],{"class":165},[159,38406,38407],{"class":161,"line":1174},[159,38408,15685],{"class":165},[14,38410,38411],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[151,38413,38415],{"className":23872,"code":38414,"language":23874,"meta":25,"style":25},"#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",[49,38416,38417,38423,38433,38439,38445,38449,38453,38458,38465,38470,38487,38491,38501,38505,38510,38525,38529,38539,38543,38548,38556,38560,38592,38596,38600,38608,38612,38617,38622,38636,38650,38659],{"__ignoreMap":25},[159,38418,38419,38421],{"class":161,"line":162},[159,38420,25602],{"class":1142},[159,38422,25605],{"class":192},[159,38424,38425,38427,38429,38431],{"class":161,"line":176},[159,38426,25610],{"class":1142},[159,38428,25613],{"class":1142},[159,38430,25616],{"class":185},[159,38432,1492],{"class":165},[159,38434,38435,38437],{"class":161,"line":203},[159,38436,25602],{"class":1142},[159,38438,31359],{"class":192},[159,38440,38441,38443],{"class":161,"line":223},[159,38442,38260],{"class":1142},[159,38444,31372],{"class":185},[159,38446,38447],{"class":161,"line":233},[159,38448,25222],{"class":165},[159,38450,38451],{"class":161,"line":239},[159,38452,38282],{"class":1142},[159,38454,38455],{"class":161,"line":245},[159,38456,38457],{"class":165},"    string m_name;\n",[159,38459,38460,38462],{"class":161,"line":251},[159,38461,25636],{"class":1142},[159,38463,38464],{"class":165}," m_id;\n",[159,38466,38467],{"class":161,"line":261},[159,38468,38469],{"class":1135},"    \u002F\u002F赋值姓名\n",[159,38471,38472,38475,38478,38480,38483,38485],{"class":161,"line":603},[159,38473,38474],{"class":1142},"    void",[159,38476,38477],{"class":185}," setName",[159,38479,1159],{"class":165},[159,38481,38482],{"class":185},"string",[159,38484,547],{"class":8765},[159,38486,1165],{"class":165},[159,38488,38489],{"class":161,"line":621},[159,38490,25681],{"class":165},[159,38492,38493,38496,38498],{"class":161,"line":634},[159,38494,38495],{"class":165},"        m_name",[159,38497,189],{"class":1142},[159,38499,38500],{"class":165},"name;\n",[159,38502,38503],{"class":161,"line":640},[159,38504,1508],{"class":165},[159,38506,38507],{"class":161,"line":1075},[159,38508,38509],{"class":1135},"    \u002F\u002F赋值学号\n",[159,38511,38512,38514,38517,38519,38521,38523],{"class":161,"line":1081},[159,38513,38474],{"class":1142},[159,38515,38516],{"class":185}," setId",[159,38518,1159],{"class":165},[159,38520,23886],{"class":1142},[159,38522,555],{"class":8765},[159,38524,1165],{"class":165},[159,38526,38527],{"class":161,"line":1091},[159,38528,25681],{"class":165},[159,38530,38531,38534,38536],{"class":161,"line":1100},[159,38532,38533],{"class":165},"        m_id",[159,38535,189],{"class":1142},[159,38537,38538],{"class":165},"id;\n",[159,38540,38541],{"class":161,"line":1123},[159,38542,1508],{"class":165},[159,38544,38545],{"class":161,"line":1132},[159,38546,38547],{"class":1135},"    \u002F\u002F打印学生信息\n",[159,38549,38550,38552,38554],{"class":161,"line":1139},[159,38551,38474],{"class":1142},[159,38553,33211],{"class":185},[159,38555,5158],{"class":165},[159,38557,38558],{"class":161,"line":1168},[159,38559,25681],{"class":165},[159,38561,38562,38564,38566,38569,38571,38574,38576,38578,38580,38583,38585,38588,38590],{"class":161,"line":1174},[159,38563,27080],{"class":165},[159,38565,24858],{"class":1142},[159,38567,38568],{"class":192},"\"姓名：\"",[159,38570,24858],{"class":1142},[159,38572,38573],{"class":165},"m_name",[159,38575,24858],{"class":1142},[159,38577,27977],{"class":192},[159,38579,24858],{"class":1142},[159,38581,38582],{"class":192},"\"学号：\"",[159,38584,24858],{"class":1142},[159,38586,38587],{"class":165},"m_id",[159,38589,24858],{"class":1142},[159,38591,24880],{"class":165},[159,38593,38594],{"class":161,"line":1180},[159,38595,1508],{"class":165},[159,38597,38598],{"class":161,"line":1194},[159,38599,27616],{"class":165},[159,38601,38602,38604,38606],{"class":161,"line":1200},[159,38603,23886],{"class":1142},[159,38605,25625],{"class":185},[159,38607,5158],{"class":165},[159,38609,38610],{"class":161,"line":1221},[159,38611,25222],{"class":165},[159,38613,38614],{"class":161,"line":1230},[159,38615,38616],{"class":1135},"    \u002F\u002F实例化\n",[159,38618,38619],{"class":161,"line":1247},[159,38620,38621],{"class":165},"    Student s1;\n",[159,38623,38624,38627,38630,38632,38634],{"class":161,"line":1265},[159,38625,38626],{"class":165},"    s1.",[159,38628,38629],{"class":185},"setName",[159,38631,1159],{"class":165},[159,38633,31526],{"class":192},[159,38635,1953],{"class":165},[159,38637,38638,38640,38643,38645,38648],{"class":161,"line":1277},[159,38639,38626],{"class":165},[159,38641,38642],{"class":185},"setId",[159,38644,1159],{"class":165},[159,38646,38647],{"class":1146},"123456",[159,38649,1953],{"class":165},[159,38651,38652,38654,38657],{"class":161,"line":1283},[159,38653,38626],{"class":165},[159,38655,38656],{"class":185},"printInfo",[159,38658,29251],{"class":165},[159,38660,38661],{"class":161,"line":1294},[159,38662,15685],{"class":165},[14,38664,38665],{},"类中的属性和行为统称为成员",[14,38667,38668],{},"属性：成员属性(成员变量)",[14,38670,38671],{},"方法：成员函数(成员方法)",[14,38673,38674],{},[61,38675,38676],{},"封装意义二：",[14,38678,38679],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,38681,38682],{},"访问权限有三种：",[134,38684,38685,38688,38691],{},[106,38686,38687],{},"public        公共权限",[106,38689,38690],{},"protected 保护权限",[106,38692,38693],{},"private      私有权限",[14,38695,38696],{},[61,38697,38698],{},"示例：",[151,38700,38702],{"className":33518,"code":38701,"language":33520,"meta":25,"style":25},"\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",[49,38703,38704,38709,38714,38719,38724,38728,38735,38739,38744,38748,38753,38757,38762,38767,38772,38776,38781,38786,38793,38797,38801,38809,38813,38824,38836,38848,38852,38856,38860,38868,38872,38877,38889,38897,38905,38909,38919,38923,38931],{"__ignoreMap":25},[159,38705,38706],{"class":161,"line":162},[159,38707,38708],{"class":1135},"\u002F\u002F三种权限\n",[159,38710,38711],{"class":161,"line":176},[159,38712,38713],{"class":1135},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[159,38715,38716],{"class":161,"line":203},[159,38717,38718],{"class":1135},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[159,38720,38721],{"class":161,"line":223},[159,38722,38723],{"class":1135},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[159,38725,38726],{"class":161,"line":233},[159,38727,590],{"emptyLinePlaceholder":589},[159,38729,38730,38732],{"class":161,"line":239},[159,38731,38260],{"class":1142},[159,38733,38734],{"class":185}," Person\n",[159,38736,38737],{"class":161,"line":245},[159,38738,25222],{"class":165},[159,38740,38741],{"class":161,"line":251},[159,38742,38743],{"class":1135},"    \u002F\u002F姓名  公共权限\n",[159,38745,38746],{"class":161,"line":261},[159,38747,38282],{"class":1142},[159,38749,38750],{"class":161,"line":603},[159,38751,38752],{"class":165},"    string m_Name;\n",[159,38754,38755],{"class":161,"line":621},[159,38756,590],{"emptyLinePlaceholder":589},[159,38758,38759],{"class":161,"line":634},[159,38760,38761],{"class":1135},"    \u002F\u002F汽车  保护权限\n",[159,38763,38764],{"class":161,"line":640},[159,38765,38766],{"class":1142},"protected:\n",[159,38768,38769],{"class":161,"line":1075},[159,38770,38771],{"class":165},"    string m_Car;\n",[159,38773,38774],{"class":161,"line":1081},[159,38775,590],{"emptyLinePlaceholder":589},[159,38777,38778],{"class":161,"line":1091},[159,38779,38780],{"class":1135},"    \u002F\u002F银行卡密码  私有权限\n",[159,38782,38783],{"class":161,"line":1100},[159,38784,38785],{"class":1142},"private:\n",[159,38787,38788,38790],{"class":161,"line":1123},[159,38789,25636],{"class":1142},[159,38791,38792],{"class":165}," m_Password;\n",[159,38794,38795],{"class":161,"line":1132},[159,38796,590],{"emptyLinePlaceholder":589},[159,38798,38799],{"class":161,"line":1139},[159,38800,38282],{"class":1142},[159,38802,38803,38805,38807],{"class":161,"line":1168},[159,38804,38474],{"class":1142},[159,38806,34957],{"class":185},[159,38808,5158],{"class":165},[159,38810,38811],{"class":161,"line":1174},[159,38812,25681],{"class":165},[159,38814,38815,38818,38820,38822],{"class":161,"line":1180},[159,38816,38817],{"class":165},"        m_Name ",[159,38819,189],{"class":1142},[159,38821,32537],{"class":192},[159,38823,1492],{"class":165},[159,38825,38826,38829,38831,38834],{"class":161,"line":1194},[159,38827,38828],{"class":165},"        m_Car ",[159,38830,189],{"class":1142},[159,38832,38833],{"class":192}," \"拖拉机\"",[159,38835,1492],{"class":165},[159,38837,38838,38841,38843,38846],{"class":161,"line":1200},[159,38839,38840],{"class":165},"        m_Password ",[159,38842,189],{"class":1142},[159,38844,38845],{"class":1146}," 123456",[159,38847,1492],{"class":165},[159,38849,38850],{"class":161,"line":1221},[159,38851,1508],{"class":165},[159,38853,38854],{"class":161,"line":1230},[159,38855,27616],{"class":165},[159,38857,38858],{"class":161,"line":1247},[159,38859,590],{"emptyLinePlaceholder":589},[159,38861,38862,38864,38866],{"class":161,"line":1265},[159,38863,23886],{"class":1142},[159,38865,25625],{"class":185},[159,38867,17173],{"class":165},[159,38869,38870],{"class":161,"line":1277},[159,38871,590],{"emptyLinePlaceholder":589},[159,38873,38874],{"class":161,"line":1283},[159,38875,38876],{"class":165},"    Person p;\n",[159,38878,38879,38882,38884,38887],{"class":161,"line":1294},[159,38880,38881],{"class":165},"    p.m_Name ",[159,38883,189],{"class":1142},[159,38885,38886],{"class":192}," \"李四\"",[159,38888,1492],{"class":165},[159,38890,38891,38894],{"class":161,"line":1305},[159,38892,38893],{"class":1135},"    \u002F\u002Fp.m_Car = \"奔驰\";",[159,38895,38896],{"class":1135},"  \u002F\u002F保护权限类外访问不到\n",[159,38898,38899,38902],{"class":161,"line":1311},[159,38900,38901],{"class":1135},"    \u002F\u002Fp.m_Password = 123;",[159,38903,38904],{"class":1135}," \u002F\u002F私有权限类外访问不到\n",[159,38906,38907],{"class":161,"line":1322},[159,38908,590],{"emptyLinePlaceholder":589},[159,38910,38911,38913,38915,38917],{"class":161,"line":1327},[159,38912,25950],{"class":185},[159,38914,1159],{"class":165},[159,38916,25955],{"class":192},[159,38918,1953],{"class":165},[159,38920,38921],{"class":161,"line":1336},[159,38922,590],{"emptyLinePlaceholder":589},[159,38924,38925,38927,38929],{"class":161,"line":1345},[159,38926,27711],{"class":1142},[159,38928,1259],{"class":1146},[159,38930,1492],{"class":165},[159,38932,38933],{"class":161,"line":1350},[159,38934,15685],{"class":165},[42,38936,38938],{"id":38937},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,38940,38941,38942,38945,38946],{},"在C++中 struct和class唯一的",[61,38943,38944],{},"区别","就在于 ",[61,38947,38948],{},"默认的访问权限不同",[14,38950,38951],{},"区别：",[103,38953,38954,38957],{},[106,38955,38956],{},"struct 默认权限为公共",[106,38958,38959],{},"class   默认权限为私有",[151,38961,38963],{"className":33518,"code":38962,"language":33520,"meta":25,"style":25},"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",[49,38964,38965,38972,38976,38986,38990,38994,39001,39005,39015,39019,39023,39031,39035,39040,39054,39058,39063,39077,39081,39091,39095,39103],{"__ignoreMap":25},[159,38966,38967,38969],{"class":161,"line":162},[159,38968,38260],{"class":1142},[159,38970,38971],{"class":185}," C1\n",[159,38973,38974],{"class":161,"line":176},[159,38975,25222],{"class":165},[159,38977,38978,38980,38983],{"class":161,"line":203},[159,38979,25636],{"class":1142},[159,38981,38982],{"class":165},"  m_A;",[159,38984,38985],{"class":1135}," \u002F\u002F默认是私有权限\n",[159,38987,38988],{"class":161,"line":223},[159,38989,27616],{"class":165},[159,38991,38992],{"class":161,"line":233},[159,38993,590],{"emptyLinePlaceholder":589},[159,38995,38996,38998],{"class":161,"line":239},[159,38997,31369],{"class":1142},[159,38999,39000],{"class":185}," C2\n",[159,39002,39003],{"class":161,"line":245},[159,39004,25222],{"class":165},[159,39006,39007,39009,39012],{"class":161,"line":251},[159,39008,25636],{"class":1142},[159,39010,39011],{"class":165}," m_A;",[159,39013,39014],{"class":1135},"  \u002F\u002F默认是公共权限\n",[159,39016,39017],{"class":161,"line":261},[159,39018,27616],{"class":165},[159,39020,39021],{"class":161,"line":603},[159,39022,590],{"emptyLinePlaceholder":589},[159,39024,39025,39027,39029],{"class":161,"line":621},[159,39026,23886],{"class":1142},[159,39028,25625],{"class":185},[159,39030,17173],{"class":165},[159,39032,39033],{"class":161,"line":634},[159,39034,590],{"emptyLinePlaceholder":589},[159,39036,39037],{"class":161,"line":640},[159,39038,39039],{"class":165},"    C1 c1;\n",[159,39041,39042,39045,39047,39049,39051],{"class":161,"line":1075},[159,39043,39044],{"class":165},"    c1.m_A ",[159,39046,189],{"class":1142},[159,39048,7664],{"class":1146},[159,39050,23934],{"class":165},[159,39052,39053],{"class":1135}," \u002F\u002F错误，访问权限是私有\n",[159,39055,39056],{"class":161,"line":1081},[159,39057,590],{"emptyLinePlaceholder":589},[159,39059,39060],{"class":161,"line":1091},[159,39061,39062],{"class":165},"    C2 c2;\n",[159,39064,39065,39068,39070,39072,39074],{"class":161,"line":1100},[159,39066,39067],{"class":165},"    c2.m_A ",[159,39069,189],{"class":1142},[159,39071,7664],{"class":1146},[159,39073,23934],{"class":165},[159,39075,39076],{"class":1135}," \u002F\u002F正确，访问权限是公共\n",[159,39078,39079],{"class":161,"line":1123},[159,39080,590],{"emptyLinePlaceholder":589},[159,39082,39083,39085,39087,39089],{"class":161,"line":1132},[159,39084,25950],{"class":185},[159,39086,1159],{"class":165},[159,39088,25955],{"class":192},[159,39090,1953],{"class":165},[159,39092,39093],{"class":161,"line":1139},[159,39094,590],{"emptyLinePlaceholder":589},[159,39096,39097,39099,39101],{"class":161,"line":1168},[159,39098,27711],{"class":1142},[159,39100,1259],{"class":1146},[159,39102,1492],{"class":165},[159,39104,39105],{"class":161,"line":1174},[159,39106,15685],{"class":165},[42,39108,39110],{"id":39109},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,39112,39113],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,39115,39116],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,39118,39119],{},[61,39120,38698],{},[151,39122,39124],{"className":33518,"code":39123,"language":33520,"meta":25,"style":25},"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",[49,39125,39126,39135,39139,39143,39148,39162,39171,39175,39185,39189,39196,39200,39204,39208,39213,39222,39229,39233,39238,39253,39276,39289,39296,39300,39309,39313,39317,39322,39338,39348,39352,39356,39360,39368,39372,39382,39386,39394,39398,39402,39410,39414,39418,39423,39436,39459,39463,39468,39481,39503,39507,39512,39526,39534,39538,39548,39552,39560],{"__ignoreMap":25},[159,39127,39128,39130,39133],{"class":161,"line":162},[159,39129,38260],{"class":1142},[159,39131,39132],{"class":185}," Person",[159,39134,1478],{"class":165},[159,39136,39137],{"class":161,"line":176},[159,39138,38282],{"class":1142},[159,39140,39141],{"class":161,"line":203},[159,39142,590],{"emptyLinePlaceholder":589},[159,39144,39145],{"class":161,"line":223},[159,39146,39147],{"class":1135},"    \u002F\u002F姓名设置可读可写\n",[159,39149,39150,39152,39154,39156,39158,39160],{"class":161,"line":233},[159,39151,38474],{"class":1142},[159,39153,38477],{"class":185},[159,39155,1159],{"class":165},[159,39157,38482],{"class":185},[159,39159,547],{"class":8765},[159,39161,1262],{"class":165},[159,39163,39164,39166,39168],{"class":161,"line":239},[159,39165,38817],{"class":165},[159,39167,189],{"class":1142},[159,39169,39170],{"class":165}," name;\n",[159,39172,39173],{"class":161,"line":245},[159,39174,1508],{"class":165},[159,39176,39177,39180,39183],{"class":161,"line":251},[159,39178,39179],{"class":185},"    string",[159,39181,39182],{"class":185}," getName",[159,39184,5158],{"class":165},[159,39186,39187],{"class":161,"line":261},[159,39188,25681],{"class":165},[159,39190,39191,39193],{"class":161,"line":603},[159,39192,21176],{"class":1142},[159,39194,39195],{"class":165}," m_Name;\n",[159,39197,39198],{"class":161,"line":621},[159,39199,1508],{"class":165},[159,39201,39202],{"class":161,"line":634},[159,39203,590],{"emptyLinePlaceholder":589},[159,39205,39206],{"class":161,"line":640},[159,39207,590],{"emptyLinePlaceholder":589},[159,39209,39210],{"class":161,"line":1075},[159,39211,39212],{"class":1135},"    \u002F\u002F获取年龄 \n",[159,39214,39215,39217,39220],{"class":161,"line":1081},[159,39216,25636],{"class":1142},[159,39218,39219],{"class":185}," getAge",[159,39221,17173],{"class":165},[159,39223,39224,39226],{"class":161,"line":1091},[159,39225,21176],{"class":1142},[159,39227,39228],{"class":165}," m_Age;\n",[159,39230,39231],{"class":161,"line":1100},[159,39232,1508],{"class":165},[159,39234,39235],{"class":161,"line":1123},[159,39236,39237],{"class":1135},"    \u002F\u002F设置年龄\n",[159,39239,39240,39242,39245,39247,39249,39251],{"class":161,"line":1132},[159,39241,38474],{"class":1142},[159,39243,39244],{"class":185}," setAge",[159,39246,1159],{"class":165},[159,39248,23886],{"class":1142},[159,39250,16746],{"class":8765},[159,39252,1262],{"class":165},[159,39254,39255,39257,39260,39262,39264,39266,39269,39271,39274],{"class":161,"line":1139},[159,39256,17003],{"class":1142},[159,39258,39259],{"class":165}," (age ",[159,39261,166],{"class":1142},[159,39263,1259],{"class":1146},[159,39265,26884],{"class":1142},[159,39267,39268],{"class":165}," age ",[159,39270,6760],{"class":1142},[159,39272,39273],{"class":1146}," 150",[159,39275,1262],{"class":165},[159,39277,39278,39280,39282,39285,39287],{"class":161,"line":1168},[159,39279,33314],{"class":165},[159,39281,24858],{"class":1142},[159,39283,39284],{"class":192}," \"你个老妖精!\"",[159,39286,25123],{"class":1142},[159,39288,32439],{"class":165},[159,39290,39291,39294],{"class":161,"line":1174},[159,39292,39293],{"class":1142},"            return",[159,39295,1492],{"class":165},[159,39297,39298],{"class":161,"line":1180},[159,39299,7530],{"class":165},[159,39301,39302,39305,39307],{"class":161,"line":1194},[159,39303,39304],{"class":165},"        m_Age ",[159,39306,189],{"class":1142},[159,39308,31407],{"class":165},[159,39310,39311],{"class":161,"line":1200},[159,39312,1508],{"class":165},[159,39314,39315],{"class":161,"line":1221},[159,39316,590],{"emptyLinePlaceholder":589},[159,39318,39319],{"class":161,"line":1230},[159,39320,39321],{"class":1135},"    \u002F\u002F情人设置为只写\n",[159,39323,39324,39326,39329,39331,39333,39336],{"class":161,"line":1247},[159,39325,38474],{"class":1142},[159,39327,39328],{"class":185}," setLover",[159,39330,1159],{"class":165},[159,39332,38482],{"class":185},[159,39334,39335],{"class":8765}," lover",[159,39337,1262],{"class":165},[159,39339,39340,39343,39345],{"class":161,"line":1265},[159,39341,39342],{"class":165},"        m_Lover ",[159,39344,189],{"class":1142},[159,39346,39347],{"class":165}," lover;\n",[159,39349,39350],{"class":161,"line":1277},[159,39351,1508],{"class":165},[159,39353,39354],{"class":161,"line":1283},[159,39355,590],{"emptyLinePlaceholder":589},[159,39357,39358],{"class":161,"line":1294},[159,39359,38785],{"class":1142},[159,39361,39362,39365],{"class":161,"line":1305},[159,39363,39364],{"class":165},"    string m_Name;",[159,39366,39367],{"class":1135}," \u002F\u002F可读可写  姓名\n",[159,39369,39370],{"class":161,"line":1311},[159,39371,36778],{"class":165},[159,39373,39374,39376,39379],{"class":161,"line":1322},[159,39375,25636],{"class":1142},[159,39377,39378],{"class":165}," m_Age;",[159,39380,39381],{"class":1135}," \u002F\u002F只读  年龄\n",[159,39383,39384],{"class":161,"line":1327},[159,39385,590],{"emptyLinePlaceholder":589},[159,39387,39388,39391],{"class":161,"line":1336},[159,39389,39390],{"class":165},"    string m_Lover;",[159,39392,39393],{"class":1135}," \u002F\u002F只写  情人\n",[159,39395,39396],{"class":161,"line":1345},[159,39397,27616],{"class":165},[159,39399,39400],{"class":161,"line":1350},[159,39401,590],{"emptyLinePlaceholder":589},[159,39403,39404,39406,39408],{"class":161,"line":1764},[159,39405,23886],{"class":1142},[159,39407,25625],{"class":185},[159,39409,17173],{"class":165},[159,39411,39412],{"class":161,"line":1769},[159,39413,590],{"emptyLinePlaceholder":589},[159,39415,39416],{"class":161,"line":1777},[159,39417,38876],{"class":165},[159,39419,39420],{"class":161,"line":1788},[159,39421,39422],{"class":1135},"    \u002F\u002F姓名设置\n",[159,39424,39425,39428,39430,39432,39434],{"class":161,"line":1802},[159,39426,39427],{"class":165},"    p.",[159,39429,38629],{"class":185},[159,39431,1159],{"class":165},[159,39433,31526],{"class":192},[159,39435,1953],{"class":165},[159,39437,39438,39440,39442,39445,39447,39450,39453,39455,39457],{"class":161,"line":1815},[159,39439,30142],{"class":165},[159,39441,24858],{"class":1142},[159,39443,39444],{"class":192}," \"姓名： \"",[159,39446,25123],{"class":1142},[159,39448,39449],{"class":165}," p.",[159,39451,39452],{"class":185},"getName",[159,39454,4774],{"class":165},[159,39456,24858],{"class":1142},[159,39458,32439],{"class":165},[159,39460,39461],{"class":161,"line":1828},[159,39462,590],{"emptyLinePlaceholder":589},[159,39464,39465],{"class":161,"line":1841},[159,39466,39467],{"class":1135},"    \u002F\u002F年龄设置\n",[159,39469,39470,39472,39475,39477,39479],{"class":161,"line":1852},[159,39471,39427],{"class":165},[159,39473,39474],{"class":185},"setAge",[159,39476,1159],{"class":165},[159,39478,4230],{"class":1146},[159,39480,1953],{"class":165},[159,39482,39483,39485,39487,39490,39492,39494,39497,39499,39501],{"class":161,"line":1866},[159,39484,30142],{"class":165},[159,39486,24858],{"class":1142},[159,39488,39489],{"class":192}," \"年龄： \"",[159,39491,25123],{"class":1142},[159,39493,39449],{"class":165},[159,39495,39496],{"class":185},"getAge",[159,39498,4774],{"class":165},[159,39500,24858],{"class":1142},[159,39502,32439],{"class":165},[159,39504,39505],{"class":161,"line":1879},[159,39506,590],{"emptyLinePlaceholder":589},[159,39508,39509],{"class":161,"line":1884},[159,39510,39511],{"class":1135},"    \u002F\u002F情人设置\n",[159,39513,39514,39516,39519,39521,39524],{"class":161,"line":1889},[159,39515,39427],{"class":165},[159,39517,39518],{"class":185},"setLover",[159,39520,1159],{"class":165},[159,39522,39523],{"class":192},"\"苍井\"",[159,39525,1953],{"class":165},[159,39527,39528,39531],{"class":161,"line":1899},[159,39529,39530],{"class":1135},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[159,39532,39533],{"class":1135},"  \u002F\u002F只写属性，不可以读取\n",[159,39535,39536],{"class":161,"line":1912},[159,39537,590],{"emptyLinePlaceholder":589},[159,39539,39540,39542,39544,39546],{"class":161,"line":1925},[159,39541,25950],{"class":185},[159,39543,1159],{"class":165},[159,39545,25955],{"class":192},[159,39547,1953],{"class":165},[159,39549,39550],{"class":161,"line":1956},[159,39551,590],{"emptyLinePlaceholder":589},[159,39553,39554,39556,39558],{"class":161,"line":1971},[159,39555,27711],{"class":1142},[159,39557,1259],{"class":1146},[159,39559,1492],{"class":165},[159,39561,39562],{"class":161,"line":1976},[159,39563,15685],{"class":165},[42,39565,39567],{"id":39566},"_814封装案例","8.1.4封装案例",[134,39569,39570],{},[106,39571,39572,39575],{},[61,39573,39574],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[103,39577,39578,39581],{},[106,39579,39580],{},"求出立方体的面积和体积",[106,39582,39583],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[151,39585,39587],{"className":23872,"code":39586,"language":23874,"meta":25,"style":25},"#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",[49,39588,39589,39595,39605,39612,39616,39620,39625,39654,39658,39668,39678,39688,39692,39701,39705,39741,39745,39754,39758,39774,39778,39783,39792,39796,39803,39807,39816,39820,39827,39831,39840,39844,39851,39855,39860,39877,39881,39927,39931,39940,39944,39948,39952,39961,39965,39969,39974,39978,39984,39990,39996,40000,40004,40009,40031,40035,40089,40093,40101,40105,40110,40115,40128,40135,40151,40162,40167,40189,40194,40216,40229,40248,40253,40263,40285,40306,40310,40315,40328,40340,40344,40357,40361,40366,40370,40383,40387,40391,40404,40415,40419,40431,40435,40439,40443,40455,40459],{"__ignoreMap":25},[159,39590,39591,39593],{"class":161,"line":162},[159,39592,25602],{"class":1142},[159,39594,25605],{"class":192},[159,39596,39597,39599,39601,39603],{"class":161,"line":176},[159,39598,25610],{"class":1142},[159,39600,25613],{"class":1142},[159,39602,25616],{"class":185},[159,39604,1492],{"class":165},[159,39606,39607,39609],{"class":161,"line":203},[159,39608,38260],{"class":1142},[159,39610,39611],{"class":185}," Cube\n",[159,39613,39614],{"class":161,"line":223},[159,39615,25222],{"class":165},[159,39617,39618],{"class":161,"line":233},[159,39619,38282],{"class":1142},[159,39621,39622],{"class":161,"line":239},[159,39623,39624],{"class":1135},"    \u002F\u002F输入长宽高\n",[159,39626,39627,39629,39632,39634,39636,39639,39641,39643,39646,39648,39650,39652],{"class":161,"line":245},[159,39628,38474],{"class":1142},[159,39630,39631],{"class":185}," setLwh",[159,39633,1159],{"class":165},[159,39635,23886],{"class":1142},[159,39637,39638],{"class":8765}," l",[159,39640,24233],{"class":165},[159,39642,23886],{"class":1142},[159,39644,39645],{"class":8765}," w",[159,39647,24233],{"class":165},[159,39649,23886],{"class":1142},[159,39651,20903],{"class":8765},[159,39653,1165],{"class":165},[159,39655,39656],{"class":161,"line":251},[159,39657,25681],{"class":165},[159,39659,39660,39663,39665],{"class":161,"line":261},[159,39661,39662],{"class":165},"        m_L",[159,39664,189],{"class":1142},[159,39666,39667],{"class":165},"l;\n",[159,39669,39670,39673,39675],{"class":161,"line":603},[159,39671,39672],{"class":165},"        m_W",[159,39674,189],{"class":1142},[159,39676,39677],{"class":165},"w;\n",[159,39679,39680,39683,39685],{"class":161,"line":621},[159,39681,39682],{"class":165},"        m_H",[159,39684,189],{"class":1142},[159,39686,39687],{"class":165},"h;\n",[159,39689,39690],{"class":161,"line":634},[159,39691,1508],{"class":165},[159,39693,39694,39696,39699],{"class":161,"line":640},[159,39695,25636],{"class":1142},[159,39697,39698],{"class":185}," mianji",[159,39700,5158],{"class":165},[159,39702,39703],{"class":161,"line":1075},[159,39704,25681],{"class":165},[159,39706,39707,39709,39711,39713,39716,39718,39721,39723,39726,39728,39731,39733,39736,39738],{"class":161,"line":1081},[159,39708,21176],{"class":1142},[159,39710,38320],{"class":1146},[159,39712,4777],{"class":1142},[159,39714,39715],{"class":165},"(m_L",[159,39717,4777],{"class":1142},[159,39719,39720],{"class":165},"m_W ",[159,39722,2704],{"class":1142},[159,39724,39725],{"class":165}," m_L",[159,39727,4777],{"class":1142},[159,39729,39730],{"class":165},"m_H ",[159,39732,2704],{"class":1142},[159,39734,39735],{"class":165}," m_W",[159,39737,4777],{"class":1142},[159,39739,39740],{"class":165},"m_H);\n",[159,39742,39743],{"class":161,"line":1091},[159,39744,1508],{"class":165},[159,39746,39747,39749,39752],{"class":161,"line":1100},[159,39748,25636],{"class":1142},[159,39750,39751],{"class":185}," tiji",[159,39753,5158],{"class":165},[159,39755,39756],{"class":161,"line":1123},[159,39757,25681],{"class":165},[159,39759,39760,39762,39764,39766,39769,39771],{"class":161,"line":1132},[159,39761,21176],{"class":1142},[159,39763,39725],{"class":165},[159,39765,4777],{"class":1142},[159,39767,39768],{"class":165},"m_W",[159,39770,4777],{"class":1142},[159,39772,39773],{"class":165},"m_H;\n",[159,39775,39776],{"class":161,"line":1139},[159,39777,1508],{"class":165},[159,39779,39780],{"class":161,"line":1168},[159,39781,39782],{"class":1135},"    \u002F\u002F获取长宽高\n",[159,39784,39785,39787,39790],{"class":161,"line":1174},[159,39786,25636],{"class":1142},[159,39788,39789],{"class":185}," getLength",[159,39791,5158],{"class":165},[159,39793,39794],{"class":161,"line":1180},[159,39795,25681],{"class":165},[159,39797,39798,39800],{"class":161,"line":1194},[159,39799,21176],{"class":1142},[159,39801,39802],{"class":165}," m_L;\n",[159,39804,39805],{"class":161,"line":1200},[159,39806,1508],{"class":165},[159,39808,39809,39811,39814],{"class":161,"line":1221},[159,39810,25636],{"class":1142},[159,39812,39813],{"class":185}," getWidth",[159,39815,5158],{"class":165},[159,39817,39818],{"class":161,"line":1230},[159,39819,25681],{"class":165},[159,39821,39822,39824],{"class":161,"line":1247},[159,39823,21176],{"class":1142},[159,39825,39826],{"class":165}," m_W;\n",[159,39828,39829],{"class":161,"line":1265},[159,39830,1508],{"class":165},[159,39832,39833,39835,39838],{"class":161,"line":1277},[159,39834,25636],{"class":1142},[159,39836,39837],{"class":185}," getHeight",[159,39839,5158],{"class":165},[159,39841,39842],{"class":161,"line":1283},[159,39843,25681],{"class":165},[159,39845,39846,39848],{"class":161,"line":1294},[159,39847,21176],{"class":1142},[159,39849,39850],{"class":165}," m_H;\n",[159,39852,39853],{"class":161,"line":1305},[159,39854,1508],{"class":165},[159,39856,39857],{"class":161,"line":1311},[159,39858,39859],{"class":1135},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[159,39861,39862,39865,39868,39870,39873,39875],{"class":161,"line":1322},[159,39863,39864],{"class":1142},"    bool",[159,39866,39867],{"class":185}," isEqual",[159,39869,1159],{"class":165},[159,39871,39872],{"class":185},"Cube",[159,39874,26481],{"class":8765},[159,39876,1165],{"class":165},[159,39878,39879],{"class":161,"line":1327},[159,39880,25681],{"class":165},[159,39882,39883,39885,39888,39891,39893,39895,39898,39900,39903,39906,39908,39910,39913,39915,39917,39920,39922,39924],{"class":161,"line":1336},[159,39884,17003],{"class":1142},[159,39886,39887],{"class":165}," (c.",[159,39889,39890],{"class":185},"getLength",[159,39892,4774],{"class":165},[159,39894,26581],{"class":1142},[159,39896,39897],{"class":165}," m_L ",[159,39899,25377],{"class":1142},[159,39901,39902],{"class":165}," c.",[159,39904,39905],{"class":185},"getWidth",[159,39907,4774],{"class":165},[159,39909,26581],{"class":1142},[159,39911,39912],{"class":165}," m_W ",[159,39914,25377],{"class":1142},[159,39916,39902],{"class":165},[159,39918,39919],{"class":185},"getHeight",[159,39921,4774],{"class":165},[159,39923,26581],{"class":1142},[159,39925,39926],{"class":165}," m_H)\n",[159,39928,39929],{"class":161,"line":1345},[159,39930,26153],{"class":165},[159,39932,39933,39935,39938],{"class":161,"line":1350},[159,39934,39293],{"class":1142},[159,39936,39937],{"class":1146}," true",[159,39939,1492],{"class":165},[159,39941,39942],{"class":161,"line":1764},[159,39943,7530],{"class":165},[159,39945,39946],{"class":161,"line":1769},[159,39947,26212],{"class":1142},[159,39949,39950],{"class":161,"line":1777},[159,39951,26153],{"class":165},[159,39953,39954,39956,39959],{"class":161,"line":1788},[159,39955,39293],{"class":1142},[159,39957,39958],{"class":1146}," false",[159,39960,1492],{"class":165},[159,39962,39963],{"class":161,"line":1802},[159,39964,7530],{"class":165},[159,39966,39967],{"class":161,"line":1815},[159,39968,1508],{"class":165},[159,39970,39971],{"class":161,"line":1828},[159,39972,39973],{"class":1135},"    \u002F\u002F私有属性\n",[159,39975,39976],{"class":161,"line":1841},[159,39977,38785],{"class":1142},[159,39979,39980,39982],{"class":161,"line":1852},[159,39981,25636],{"class":1142},[159,39983,39802],{"class":165},[159,39985,39986,39988],{"class":161,"line":1866},[159,39987,25636],{"class":1142},[159,39989,39826],{"class":165},[159,39991,39992,39994],{"class":161,"line":1879},[159,39993,25636],{"class":1142},[159,39995,39850],{"class":165},[159,39997,39998],{"class":161,"line":1884},[159,39999,590],{"emptyLinePlaceholder":589},[159,40001,40002],{"class":161,"line":1889},[159,40003,27616],{"class":165},[159,40005,40006],{"class":161,"line":1899},[159,40007,40008],{"class":1135},"\u002F\u002F全局函数判断两个立方体是否相等\n",[159,40010,40011,40013,40015,40017,40019,40022,40024,40026,40029],{"class":161,"line":1912},[159,40012,25035],{"class":1142},[159,40014,39867],{"class":185},[159,40016,1159],{"class":165},[159,40018,39872],{"class":185},[159,40020,40021],{"class":8765}," c1",[159,40023,24233],{"class":165},[159,40025,39872],{"class":185},[159,40027,40028],{"class":8765}," c2",[159,40030,1165],{"class":165},[159,40032,40033],{"class":161,"line":1925},[159,40034,25222],{"class":165},[159,40036,40037,40039,40042,40044,40046,40048,40051,40053,40056,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086],{"class":161,"line":1956},[159,40038,27711],{"class":1142},[159,40040,40041],{"class":165}," (c1.",[159,40043,39890],{"class":185},[159,40045,4774],{"class":165},[159,40047,26581],{"class":1142},[159,40049,40050],{"class":165}," c2.",[159,40052,39890],{"class":185},[159,40054,40055],{"class":165},"()) ",[159,40057,25377],{"class":1142},[159,40059,40041],{"class":165},[159,40061,39905],{"class":185},[159,40063,4774],{"class":165},[159,40065,26581],{"class":1142},[159,40067,40050],{"class":165},[159,40069,39905],{"class":185},[159,40071,40055],{"class":165},[159,40073,25377],{"class":1142},[159,40075,40041],{"class":165},[159,40077,39919],{"class":185},[159,40079,4774],{"class":165},[159,40081,26581],{"class":1142},[159,40083,40050],{"class":165},[159,40085,39919],{"class":185},[159,40087,40088],{"class":165},"());\n",[159,40090,40091],{"class":161,"line":1971},[159,40092,15685],{"class":165},[159,40094,40095,40097,40099],{"class":161,"line":1976},[159,40096,23886],{"class":1142},[159,40098,25625],{"class":185},[159,40100,5158],{"class":165},[159,40102,40103],{"class":161,"line":1981},[159,40104,25222],{"class":165},[159,40106,40107],{"class":161,"line":1989},[159,40108,40109],{"class":165},"    Cube c1;\n",[159,40111,40112],{"class":161,"line":2001},[159,40113,40114],{"class":1135},"    \u002F\u002F输入立方体的长宽高\n",[159,40116,40117,40119,40121,40124,40126],{"class":161,"line":2006},[159,40118,25227],{"class":165},[159,40120,24858],{"class":1142},[159,40122,40123],{"class":192},"\"请输入第一个立方体的长、宽、高：\"",[159,40125,24858],{"class":1142},[159,40127,24880],{"class":165},[159,40129,40130,40132],{"class":161,"line":2015},[159,40131,25636],{"class":1142},[159,40133,40134],{"class":165}," l,w,h,l1,w1,h1;\n",[159,40136,40137,40139,40141,40143,40145,40147,40149],{"class":161,"line":2024},[159,40138,25663],{"class":165},[159,40140,25108],{"class":1142},[159,40142,24363],{"class":165},[159,40144,25108],{"class":1142},[159,40146,24625],{"class":165},[159,40148,25108],{"class":1142},[159,40150,39687],{"class":165},[159,40152,40153,40156,40159],{"class":161,"line":2029},[159,40154,40155],{"class":165},"    c1.",[159,40157,40158],{"class":185},"setLwh",[159,40160,40161],{"class":165},"(l,w,h);\n",[159,40163,40164],{"class":161,"line":2038},[159,40165,40166],{"class":1135},"    \u002F\u002F面积\n",[159,40168,40169,40171,40173,40176,40178,40180,40183,40185,40187],{"class":161,"line":2053},[159,40170,25227],{"class":165},[159,40172,24858],{"class":1142},[159,40174,40175],{"class":192},"\"立方体的表面积为：\"",[159,40177,24858],{"class":1142},[159,40179,38395],{"class":165},[159,40181,40182],{"class":185},"mianji",[159,40184,21042],{"class":165},[159,40186,24858],{"class":1142},[159,40188,24880],{"class":165},[159,40190,40191],{"class":161,"line":2070},[159,40192,40193],{"class":1135},"    \u002F\u002F体积\n",[159,40195,40196,40198,40200,40203,40205,40207,40210,40212,40214],{"class":161,"line":2095},[159,40197,25227],{"class":165},[159,40199,24858],{"class":1142},[159,40201,40202],{"class":192},"\"立方体的体积为：\"",[159,40204,24858],{"class":1142},[159,40206,38395],{"class":165},[159,40208,40209],{"class":185},"tiji",[159,40211,21042],{"class":165},[159,40213,24858],{"class":1142},[159,40215,24880],{"class":165},[159,40217,40218,40220,40222,40225,40227],{"class":161,"line":2104},[159,40219,25227],{"class":165},[159,40221,24858],{"class":1142},[159,40223,40224],{"class":192},"\"请输入第二个立方体的长、宽、高：\"",[159,40226,24858],{"class":1142},[159,40228,24880],{"class":165},[159,40230,40231,40233,40235,40238,40240,40243,40245],{"class":161,"line":2120},[159,40232,25663],{"class":165},[159,40234,25108],{"class":1142},[159,40236,40237],{"class":165},"l1",[159,40239,25108],{"class":1142},[159,40241,40242],{"class":165},"w1",[159,40244,25108],{"class":1142},[159,40246,40247],{"class":165},"h1;\n",[159,40249,40250],{"class":161,"line":2134},[159,40251,40252],{"class":165},"    Cube c2;\n",[159,40254,40255,40258,40260],{"class":161,"line":2143},[159,40256,40257],{"class":165},"    c2.",[159,40259,40158],{"class":185},[159,40261,40262],{"class":165},"(l1,w1,h1);\n",[159,40264,40265,40267,40269,40272,40274,40277,40279,40281,40283],{"class":161,"line":2165},[159,40266,25227],{"class":165},[159,40268,24858],{"class":1142},[159,40270,40271],{"class":192},"\"第二个立方体的表面积为：\"",[159,40273,24858],{"class":1142},[159,40275,40276],{"class":165},"c2.",[159,40278,40182],{"class":185},[159,40280,21042],{"class":165},[159,40282,24858],{"class":1142},[159,40284,24880],{"class":165},[159,40286,40287,40289,40291,40294,40296,40298,40300,40302,40304],{"class":161,"line":2178},[159,40288,25227],{"class":165},[159,40290,24858],{"class":1142},[159,40292,40293],{"class":192},"\"第二个立方体的体积为：\"",[159,40295,24858],{"class":1142},[159,40297,40276],{"class":165},[159,40299,40209],{"class":185},[159,40301,21042],{"class":165},[159,40303,24858],{"class":1142},[159,40305,24880],{"class":165},[159,40307,40308],{"class":161,"line":2191},[159,40309,590],{"emptyLinePlaceholder":589},[159,40311,40312],{"class":161,"line":2204},[159,40313,40314],{"class":1135},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[159,40316,40317,40319,40321,40324,40326],{"class":161,"line":2217},[159,40318,25227],{"class":165},[159,40320,24858],{"class":1142},[159,40322,40323],{"class":192},"\"内部函数判断结果：\"",[159,40325,24858],{"class":1142},[159,40327,24880],{"class":165},[159,40329,40330,40332,40334,40337],{"class":161,"line":2230},[159,40331,26732],{"class":1142},[159,40333,40041],{"class":165},[159,40335,40336],{"class":185},"isEqual",[159,40338,40339],{"class":165},"(c2))\n",[159,40341,40342],{"class":161,"line":2243},[159,40343,25681],{"class":165},[159,40345,40346,40348,40350,40353,40355],{"class":161,"line":2256},[159,40347,27080],{"class":165},[159,40349,24858],{"class":1142},[159,40351,40352],{"class":192},"\"两个立方体相等\"",[159,40354,24858],{"class":1142},[159,40356,24880],{"class":165},[159,40358,40359],{"class":161,"line":2266},[159,40360,1508],{"class":165},[159,40362,40363],{"class":161,"line":2275},[159,40364,40365],{"class":1142},"    else\n",[159,40367,40368],{"class":161,"line":2284},[159,40369,25681],{"class":165},[159,40371,40372,40374,40376,40379,40381],{"class":161,"line":2293},[159,40373,27080],{"class":165},[159,40375,24858],{"class":1142},[159,40377,40378],{"class":192},"\"两个立方体不相等\"",[159,40380,24858],{"class":1142},[159,40382,24880],{"class":165},[159,40384,40385],{"class":161,"line":2306},[159,40386,1508],{"class":165},[159,40388,40389],{"class":161,"line":2330},[159,40390,590],{"emptyLinePlaceholder":589},[159,40392,40393,40395,40397,40400,40402],{"class":161,"line":2350},[159,40394,25227],{"class":165},[159,40396,24858],{"class":1142},[159,40398,40399],{"class":192},"\"全局函数判断结果：\"",[159,40401,24858],{"class":1142},[159,40403,24880],{"class":165},[159,40405,40406,40408,40410,40412],{"class":161,"line":2370},[159,40407,26732],{"class":1142},[159,40409,11680],{"class":165},[159,40411,40336],{"class":185},[159,40413,40414],{"class":165},"(c1, c2))\n",[159,40416,40417],{"class":161,"line":2390},[159,40418,25681],{"class":165},[159,40420,40421,40423,40425,40427,40429],{"class":161,"line":2410},[159,40422,27080],{"class":165},[159,40424,24858],{"class":1142},[159,40426,40352],{"class":192},[159,40428,24858],{"class":1142},[159,40430,24880],{"class":165},[159,40432,40433],{"class":161,"line":2430},[159,40434,1508],{"class":165},[159,40436,40437],{"class":161,"line":2450},[159,40438,40365],{"class":1142},[159,40440,40441],{"class":161,"line":2471},[159,40442,25681],{"class":165},[159,40444,40445,40447,40449,40451,40453],{"class":161,"line":2477},[159,40446,27080],{"class":165},[159,40448,24858],{"class":1142},[159,40450,40378],{"class":192},[159,40452,24858],{"class":1142},[159,40454,24880],{"class":165},[159,40456,40457],{"class":161,"line":2498},[159,40458,1508],{"class":165},[159,40460,40461],{"class":161,"line":2518},[159,40462,15685],{"class":165},[134,40464,40465],{"start":176},[106,40466,40467],{},[61,40468,40469],{},"练习案例2：点和圆的关系",[103,40471,40472],{},[106,40473,40474],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[151,40476,40478],{"className":23872,"code":40477,"language":23874,"meta":25,"style":25},"#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",[49,40479,40480,40486,40496,40503,40510,40514,40518,40523,40557,40562,40578,40592,40596,40600,40607,40614,40618,40624,40628,40632,40636,40658,40680,40685,40699,40714,40718,40722,40728,40733,40738,40742,40768,40772,40802,40830,40858,40875,40879,40892,40896,40900,40904,40917,40921,40925,40933,40937,40941,40945,40950,40954,40965,40972,40981,40991,41002,41009,41022,41033,41043,41054,41061,41075,41080,41090,41098],{"__ignoreMap":25},[159,40481,40482,40484],{"class":161,"line":162},[159,40483,25602],{"class":1142},[159,40485,25605],{"class":192},[159,40487,40488,40490,40492,40494],{"class":161,"line":176},[159,40489,25610],{"class":1142},[159,40491,25613],{"class":1142},[159,40493,25616],{"class":185},[159,40495,1492],{"class":165},[159,40497,40498,40500],{"class":161,"line":203},[159,40499,25602],{"class":1142},[159,40501,40502],{"class":192},"\u003Ccmath>\n",[159,40504,40505,40507],{"class":161,"line":223},[159,40506,38260],{"class":1142},[159,40508,40509],{"class":185}," Point\n",[159,40511,40512],{"class":161,"line":233},[159,40513,25222],{"class":165},[159,40515,40516],{"class":161,"line":239},[159,40517,38282],{"class":1142},[159,40519,40520],{"class":161,"line":245},[159,40521,40522],{"class":1135},"    \u002F\u002F赋值\n",[159,40524,40525,40527,40530,40532,40534,40537,40539,40541,40544,40547,40549,40552,40554],{"class":161,"line":251},[159,40526,38474],{"class":1142},[159,40528,40529],{"class":185}," setPoint",[159,40531,1159],{"class":165},[159,40533,37603],{"class":1142},[159,40535,40536],{"class":8765}," x",[159,40538,1939],{"class":165},[159,40540,37603],{"class":1142},[159,40542,40543],{"class":8765}," y",[159,40545,40546],{"class":165},") { m_x ",[159,40548,189],{"class":1142},[159,40550,40551],{"class":165}," x; m_y ",[159,40553,189],{"class":1142},[159,40555,40556],{"class":165}," y; }\n",[159,40558,40559],{"class":161,"line":261},[159,40560,40561],{"class":1135},"    \u002F\u002F获取坐标\n",[159,40563,40564,40566,40569,40572,40575],{"class":161,"line":603},[159,40565,38304],{"class":1142},[159,40567,40568],{"class":185}," getX",[159,40570,40571],{"class":165},"() { ",[159,40573,40574],{"class":1142},"return",[159,40576,40577],{"class":165}," m_x; }\n",[159,40579,40580,40582,40585,40587,40589],{"class":161,"line":621},[159,40581,38304],{"class":1142},[159,40583,40584],{"class":185}," getY",[159,40586,40571],{"class":165},[159,40588,40574],{"class":1142},[159,40590,40591],{"class":165}," m_y; }\n",[159,40593,40594],{"class":161,"line":634},[159,40595,590],{"emptyLinePlaceholder":589},[159,40597,40598],{"class":161,"line":640},[159,40599,38785],{"class":1142},[159,40601,40602,40604],{"class":161,"line":1075},[159,40603,38304],{"class":1142},[159,40605,40606],{"class":165}," m_x;\n",[159,40608,40609,40611],{"class":161,"line":1081},[159,40610,38304],{"class":1142},[159,40612,40613],{"class":165}," m_y;\n",[159,40615,40616],{"class":161,"line":1091},[159,40617,27616],{"class":165},[159,40619,40620,40622],{"class":161,"line":1100},[159,40621,38260],{"class":1142},[159,40623,38263],{"class":185},[159,40625,40626],{"class":161,"line":1123},[159,40627,25222],{"class":165},[159,40629,40630],{"class":161,"line":1132},[159,40631,38282],{"class":1142},[159,40633,40634],{"class":161,"line":1139},[159,40635,40522],{"class":1135},[159,40637,40638,40640,40643,40645,40647,40650,40653,40655],{"class":161,"line":1168},[159,40639,38474],{"class":1142},[159,40641,40642],{"class":185}," setRadius",[159,40644,1159],{"class":165},[159,40646,37603],{"class":1142},[159,40648,40649],{"class":8765}," r",[159,40651,40652],{"class":165},") { m_r ",[159,40654,189],{"class":1142},[159,40656,40657],{"class":165}," r; }\n",[159,40659,40660,40662,40665,40667,40670,40672,40675,40677],{"class":161,"line":1174},[159,40661,38474],{"class":1142},[159,40663,40664],{"class":185}," setCenter",[159,40666,1159],{"class":165},[159,40668,40669],{"class":185},"Point",[159,40671,8774],{"class":8765},[159,40673,40674],{"class":165},") { m_center ",[159,40676,189],{"class":1142},[159,40678,40679],{"class":165}," center; }\n",[159,40681,40682],{"class":161,"line":1180},[159,40683,40684],{"class":1135},"    \u002F\u002F获取属性\n",[159,40686,40687,40689,40692,40694,40696],{"class":161,"line":1194},[159,40688,38304],{"class":1142},[159,40690,40691],{"class":185}," getRadius",[159,40693,40571],{"class":165},[159,40695,40574],{"class":1142},[159,40697,40698],{"class":165}," m_r; }\n",[159,40700,40701,40704,40707,40709,40711],{"class":161,"line":1200},[159,40702,40703],{"class":185},"    Point",[159,40705,40706],{"class":185}," getCenter",[159,40708,40571],{"class":165},[159,40710,40574],{"class":1142},[159,40712,40713],{"class":165}," m_center; }\n",[159,40715,40716],{"class":161,"line":1221},[159,40717,590],{"emptyLinePlaceholder":589},[159,40719,40720],{"class":161,"line":1230},[159,40721,38785],{"class":1142},[159,40723,40724,40726],{"class":161,"line":1247},[159,40725,38304],{"class":1142},[159,40727,38294],{"class":165},[159,40729,40730],{"class":161,"line":1265},[159,40731,40732],{"class":1135},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[159,40734,40735],{"class":161,"line":1277},[159,40736,40737],{"class":165},"    Point m_center;\n",[159,40739,40740],{"class":161,"line":1283},[159,40741,27616],{"class":165},[159,40743,40744,40746,40749,40751,40754,40756,40758,40760,40762,40764,40766],{"class":161,"line":1294},[159,40745,28979],{"class":1142},[159,40747,40748],{"class":185}," isInCircle",[159,40750,1159],{"class":165},[159,40752,40753],{"class":185},"Circle",[159,40755,34159],{"class":1142},[159,40757,24151],{"class":8765},[159,40759,24233],{"class":165},[159,40761,40669],{"class":185},[159,40763,34159],{"class":1142},[159,40765,14],{"class":8765},[159,40767,1165],{"class":165},[159,40769,40770],{"class":161,"line":1305},[159,40771,25222],{"class":165},[159,40773,40774,40776,40779,40781,40783,40786,40789,40792,40794,40796,40798,40800],{"class":161,"line":1311},[159,40775,38304],{"class":1142},[159,40777,40778],{"class":165}," dx ",[159,40780,189],{"class":1142},[159,40782,39902],{"class":165},[159,40784,40785],{"class":185},"getCenter",[159,40787,40788],{"class":165},"().",[159,40790,40791],{"class":185},"getX",[159,40793,4774],{"class":165},[159,40795,24376],{"class":1142},[159,40797,39449],{"class":165},[159,40799,40791],{"class":185},[159,40801,29251],{"class":165},[159,40803,40804,40806,40809,40811,40813,40815,40817,40820,40822,40824,40826,40828],{"class":161,"line":1322},[159,40805,38304],{"class":1142},[159,40807,40808],{"class":165}," dy ",[159,40810,189],{"class":1142},[159,40812,39902],{"class":165},[159,40814,40785],{"class":185},[159,40816,40788],{"class":165},[159,40818,40819],{"class":185},"getY",[159,40821,4774],{"class":165},[159,40823,24376],{"class":1142},[159,40825,39449],{"class":165},[159,40827,40819],{"class":185},[159,40829,29251],{"class":165},[159,40831,40832,40834,40837,40839,40842,40845,40847,40849,40851,40853,40855],{"class":161,"line":1327},[159,40833,38304],{"class":1142},[159,40835,40836],{"class":165}," distance ",[159,40838,189],{"class":1142},[159,40840,40841],{"class":185}," sqrt",[159,40843,40844],{"class":165},"(dx ",[159,40846,4777],{"class":1142},[159,40848,40778],{"class":165},[159,40850,2704],{"class":1142},[159,40852,40808],{"class":165},[159,40854,4777],{"class":1142},[159,40856,40857],{"class":165}," dy);\n",[159,40859,40860,40862,40865,40867,40869,40872],{"class":161,"line":1336},[159,40861,26732],{"class":1142},[159,40863,40864],{"class":165}," (distance ",[159,40866,166],{"class":1142},[159,40868,39902],{"class":165},[159,40870,40871],{"class":185},"getRadius",[159,40873,40874],{"class":165},"())\n",[159,40876,40877],{"class":161,"line":1345},[159,40878,25681],{"class":165},[159,40880,40881,40883,40885,40888,40890],{"class":161,"line":1350},[159,40882,33265],{"class":165},[159,40884,24858],{"class":1142},[159,40886,40887],{"class":192}," \"点在圆内\"",[159,40889,25123],{"class":1142},[159,40891,32439],{"class":165},[159,40893,40894],{"class":161,"line":1764},[159,40895,1508],{"class":165},[159,40897,40898],{"class":161,"line":1769},[159,40899,40365],{"class":1142},[159,40901,40902],{"class":161,"line":1777},[159,40903,25681],{"class":165},[159,40905,40906,40908,40910,40913,40915],{"class":161,"line":1788},[159,40907,33265],{"class":165},[159,40909,24858],{"class":1142},[159,40911,40912],{"class":192}," \"点在圆外\"",[159,40914,25123],{"class":1142},[159,40916,32439],{"class":165},[159,40918,40919],{"class":161,"line":1802},[159,40920,1508],{"class":165},[159,40922,40923],{"class":161,"line":1815},[159,40924,15685],{"class":165},[159,40926,40927,40929,40931],{"class":161,"line":1828},[159,40928,23886],{"class":1142},[159,40930,25625],{"class":185},[159,40932,5158],{"class":165},[159,40934,40935],{"class":161,"line":1841},[159,40936,25222],{"class":165},[159,40938,40939],{"class":161,"line":1852},[159,40940,38616],{"class":1135},[159,40942,40943],{"class":161,"line":1866},[159,40944,38365],{"class":165},[159,40946,40947],{"class":161,"line":1879},[159,40948,40949],{"class":165},"    Point p1;\n",[159,40951,40952],{"class":161,"line":1884},[159,40953,40522],{"class":1135},[159,40955,40956,40958,40960,40963],{"class":161,"line":1889},[159,40957,25227],{"class":165},[159,40959,24858],{"class":1142},[159,40961,40962],{"class":192},"\"请输入圆的半径：\"",[159,40964,1492],{"class":165},[159,40966,40967,40969],{"class":161,"line":1899},[159,40968,38304],{"class":1142},[159,40970,40971],{"class":165}," r;\n",[159,40973,40974,40976,40978],{"class":161,"line":1912},[159,40975,25663],{"class":165},[159,40977,25108],{"class":1142},[159,40979,40980],{"class":165},"r;\n",[159,40982,40983,40985,40988],{"class":161,"line":1925},[159,40984,40155],{"class":165},[159,40986,40987],{"class":185},"setRadius",[159,40989,40990],{"class":165},"(r);\n",[159,40992,40993,40995,40997,41000],{"class":161,"line":1956},[159,40994,25227],{"class":165},[159,40996,24858],{"class":1142},[159,40998,40999],{"class":192},"\"请输入圆心坐标：\"",[159,41001,1492],{"class":165},[159,41003,41004,41006],{"class":161,"line":1971},[159,41005,38304],{"class":1142},[159,41007,41008],{"class":165}," x, y;\n",[159,41010,41011,41013,41015,41017,41019],{"class":161,"line":1976},[159,41012,25663],{"class":165},[159,41014,25108],{"class":1142},[159,41016,24648],{"class":165},[159,41018,25108],{"class":1142},[159,41020,41021],{"class":165},"y;\n",[159,41023,41024,41027,41030],{"class":161,"line":1981},[159,41025,41026],{"class":165},"    p1.",[159,41028,41029],{"class":185},"setPoint",[159,41031,41032],{"class":165},"(x, y);\n",[159,41034,41035,41037,41040],{"class":161,"line":1989},[159,41036,40155],{"class":165},[159,41038,41039],{"class":185},"setCenter",[159,41041,41042],{"class":165},"(p1);\n",[159,41044,41045,41047,41049,41052],{"class":161,"line":2001},[159,41046,25227],{"class":165},[159,41048,24858],{"class":1142},[159,41050,41051],{"class":192},"\"请输入测试点坐标：\"",[159,41053,1492],{"class":165},[159,41055,41056,41058],{"class":161,"line":2006},[159,41057,38304],{"class":1142},[159,41059,41060],{"class":165}," x1, y1;\n",[159,41062,41063,41065,41067,41070,41072],{"class":161,"line":2015},[159,41064,25663],{"class":165},[159,41066,25108],{"class":1142},[159,41068,41069],{"class":165},"x1",[159,41071,25108],{"class":1142},[159,41073,41074],{"class":165},"y1;\n",[159,41076,41077],{"class":161,"line":2024},[159,41078,41079],{"class":165},"    Point p2;\n",[159,41081,41082,41085,41087],{"class":161,"line":2029},[159,41083,41084],{"class":165},"    p2.",[159,41086,41029],{"class":185},[159,41088,41089],{"class":165},"(x1, y1);\n",[159,41091,41092,41095],{"class":161,"line":2038},[159,41093,41094],{"class":185},"    isInCircle",[159,41096,41097],{"class":165},"(c1, p2);\n",[159,41099,41100],{"class":161,"line":2053},[159,41101,15685],{"class":165},[14,41103,41104],{},"在类中可以让另一个类作为本来的成员",[14,41106,41107],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,41109,41110],{},"创建point.h",[151,41112,41114],{"className":23872,"code":41113,"language":23874,"meta":25,"style":25},"#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",[49,41115,41116,41127,41133,41143,41149,41153,41158,41162,41166,41186,41190,41198,41206,41210,41214,41220,41226],{"__ignoreMap":25},[159,41117,41118,41121,41124],{"class":161,"line":162},[159,41119,41120],{"class":1142},"#pragma",[159,41122,41123],{"class":185}," once",[159,41125,41126],{"class":1135}," \u002F\u002F防止头文件重复包含\n",[159,41128,41129,41131],{"class":161,"line":176},[159,41130,25602],{"class":1142},[159,41132,25605],{"class":192},[159,41134,41135,41137,41139,41141],{"class":161,"line":203},[159,41136,25610],{"class":1142},[159,41138,25613],{"class":1142},[159,41140,25616],{"class":185},[159,41142,1492],{"class":165},[159,41144,41145,41147],{"class":161,"line":223},[159,41146,38260],{"class":1142},[159,41148,40509],{"class":185},[159,41150,41151],{"class":161,"line":233},[159,41152,25222],{"class":165},[159,41154,41155],{"class":161,"line":239},[159,41156,41157],{"class":1135},"\u002F\u002F做好声明与变量定义就可以\n",[159,41159,41160],{"class":161,"line":245},[159,41161,38282],{"class":1142},[159,41163,41164],{"class":161,"line":251},[159,41165,40522],{"class":1135},[159,41167,41168,41170,41172,41174,41176,41178,41180,41182,41184],{"class":161,"line":261},[159,41169,38474],{"class":1142},[159,41171,40529],{"class":185},[159,41173,1159],{"class":165},[159,41175,37603],{"class":1142},[159,41177,40536],{"class":8765},[159,41179,1939],{"class":165},[159,41181,37603],{"class":1142},[159,41183,40543],{"class":8765},[159,41185,1953],{"class":165},[159,41187,41188],{"class":161,"line":603},[159,41189,40561],{"class":1135},[159,41191,41192,41194,41196],{"class":161,"line":621},[159,41193,38304],{"class":1142},[159,41195,40568],{"class":185},[159,41197,29251],{"class":165},[159,41199,41200,41202,41204],{"class":161,"line":634},[159,41201,38304],{"class":1142},[159,41203,40584],{"class":185},[159,41205,29251],{"class":165},[159,41207,41208],{"class":161,"line":640},[159,41209,590],{"emptyLinePlaceholder":589},[159,41211,41212],{"class":161,"line":1075},[159,41213,38785],{"class":1142},[159,41215,41216,41218],{"class":161,"line":1081},[159,41217,38304],{"class":1142},[159,41219,40606],{"class":165},[159,41221,41222,41224],{"class":161,"line":1091},[159,41223,38304],{"class":1142},[159,41225,40613],{"class":165},[159,41227,41228],{"class":161,"line":1100},[159,41229,27616],{"class":165},[14,41231,41232],{},"创建point.cpp",[151,41234,41236],{"className":23872,"code":41235,"language":23874,"meta":25,"style":25},"#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",[49,41237,41238,41245,41250,41284,41288,41304],{"__ignoreMap":25},[159,41239,41240,41242],{"class":161,"line":162},[159,41241,25602],{"class":1142},[159,41243,41244],{"class":192},"\u003Cpoint.h>\n",[159,41246,41247],{"class":161,"line":176},[159,41248,41249],{"class":1135},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[159,41251,41252,41254,41257,41260,41262,41264,41266,41268,41270,41272,41274,41276,41278,41280,41282],{"class":161,"line":203},[159,41253,38474],{"class":1142},[159,41255,41256],{"class":185}," Point",[159,41258,41259],{"class":165},"::",[159,41261,41029],{"class":185},[159,41263,1159],{"class":165},[159,41265,37603],{"class":1142},[159,41267,40536],{"class":8765},[159,41269,1939],{"class":165},[159,41271,37603],{"class":1142},[159,41273,40543],{"class":8765},[159,41275,40546],{"class":165},[159,41277,189],{"class":1142},[159,41279,40551],{"class":165},[159,41281,189],{"class":1142},[159,41283,40556],{"class":165},[159,41285,41286],{"class":161,"line":223},[159,41287,40561],{"class":1135},[159,41289,41290,41292,41294,41296,41298,41300,41302],{"class":161,"line":233},[159,41291,38304],{"class":1142},[159,41293,41256],{"class":185},[159,41295,41259],{"class":165},[159,41297,40791],{"class":185},[159,41299,40571],{"class":165},[159,41301,40574],{"class":1142},[159,41303,40577],{"class":165},[159,41305,41306,41308,41310,41312,41314,41316,41318],{"class":161,"line":239},[159,41307,38304],{"class":1142},[159,41309,41256],{"class":185},[159,41311,41259],{"class":165},[159,41313,40819],{"class":185},[159,41315,40571],{"class":165},[159,41317,40574],{"class":1142},[159,41319,40591],{"class":165},[14,41321,41322],{},"创建circle.h",[151,41324,41326],{"className":23872,"code":41325,"language":23874,"meta":25,"style":25},"#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",[49,41327,41328,41335,41341,41351,41357,41363,41367,41371,41375,41389,41403,41407,41415,41423,41427,41431,41437,41441,41445],{"__ignoreMap":25},[159,41329,41330,41332],{"class":161,"line":162},[159,41331,41120],{"class":1142},[159,41333,41334],{"class":185}," once\n",[159,41336,41337,41339],{"class":161,"line":176},[159,41338,25602],{"class":1142},[159,41340,25605],{"class":192},[159,41342,41343,41345,41347,41349],{"class":161,"line":203},[159,41344,25610],{"class":1142},[159,41346,25613],{"class":1142},[159,41348,25616],{"class":185},[159,41350,1492],{"class":165},[159,41352,41353,41355],{"class":161,"line":223},[159,41354,25602],{"class":1142},[159,41356,41244],{"class":192},[159,41358,41359,41361],{"class":161,"line":233},[159,41360,38260],{"class":1142},[159,41362,38263],{"class":185},[159,41364,41365],{"class":161,"line":239},[159,41366,25222],{"class":165},[159,41368,41369],{"class":161,"line":245},[159,41370,38282],{"class":1142},[159,41372,41373],{"class":161,"line":251},[159,41374,40522],{"class":1135},[159,41376,41377,41379,41381,41383,41385,41387],{"class":161,"line":261},[159,41378,38474],{"class":1142},[159,41380,40642],{"class":185},[159,41382,1159],{"class":165},[159,41384,37603],{"class":1142},[159,41386,40649],{"class":8765},[159,41388,1953],{"class":165},[159,41390,41391,41393,41395,41397,41399,41401],{"class":161,"line":603},[159,41392,38474],{"class":1142},[159,41394,40664],{"class":185},[159,41396,1159],{"class":165},[159,41398,40669],{"class":185},[159,41400,8774],{"class":8765},[159,41402,1953],{"class":165},[159,41404,41405],{"class":161,"line":621},[159,41406,40684],{"class":1135},[159,41408,41409,41411,41413],{"class":161,"line":634},[159,41410,38304],{"class":1142},[159,41412,40691],{"class":185},[159,41414,29251],{"class":165},[159,41416,41417,41419,41421],{"class":161,"line":640},[159,41418,40703],{"class":185},[159,41420,40706],{"class":185},[159,41422,29251],{"class":165},[159,41424,41425],{"class":161,"line":1075},[159,41426,590],{"emptyLinePlaceholder":589},[159,41428,41429],{"class":161,"line":1081},[159,41430,38785],{"class":1142},[159,41432,41433,41435],{"class":161,"line":1091},[159,41434,38304],{"class":1142},[159,41436,38294],{"class":165},[159,41438,41439],{"class":161,"line":1100},[159,41440,40732],{"class":1135},[159,41442,41443],{"class":161,"line":1123},[159,41444,40737],{"class":165},[159,41446,41447],{"class":161,"line":1132},[159,41448,27616],{"class":165},[14,41450,41451],{},"创建circle.cpp",[151,41453,41455],{"className":23872,"code":41454,"language":23874,"meta":25,"style":25},"#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",[49,41456,41457,41464,41487,41509,41514,41530],{"__ignoreMap":25},[159,41458,41459,41461],{"class":161,"line":162},[159,41460,25602],{"class":1142},[159,41462,41463],{"class":192},"\u003Ccircle.h>\n",[159,41465,41466,41468,41471,41473,41475,41477,41479,41481,41483,41485],{"class":161,"line":176},[159,41467,28979],{"class":1142},[159,41469,41470],{"class":185}," Circle",[159,41472,41259],{"class":165},[159,41474,40987],{"class":185},[159,41476,1159],{"class":165},[159,41478,37603],{"class":1142},[159,41480,40649],{"class":8765},[159,41482,40652],{"class":165},[159,41484,189],{"class":1142},[159,41486,40657],{"class":165},[159,41488,41489,41491,41493,41495,41497,41499,41501,41503,41505,41507],{"class":161,"line":203},[159,41490,28979],{"class":1142},[159,41492,41470],{"class":185},[159,41494,41259],{"class":165},[159,41496,41039],{"class":185},[159,41498,1159],{"class":165},[159,41500,40669],{"class":185},[159,41502,8774],{"class":8765},[159,41504,40674],{"class":165},[159,41506,189],{"class":1142},[159,41508,40679],{"class":165},[159,41510,41511],{"class":161,"line":223},[159,41512,41513],{"class":1135},"\u002F\u002F获取属性\n",[159,41515,41516,41518,41520,41522,41524,41526,41528],{"class":161,"line":233},[159,41517,37603],{"class":1142},[159,41519,41470],{"class":185},[159,41521,41259],{"class":165},[159,41523,40871],{"class":185},[159,41525,40571],{"class":165},[159,41527,40574],{"class":1142},[159,41529,40698],{"class":165},[159,41531,41532,41534,41536,41538,41540,41542,41544],{"class":161,"line":239},[159,41533,40669],{"class":185},[159,41535,41470],{"class":185},[159,41537,41259],{"class":165},[159,41539,40785],{"class":185},[159,41541,40571],{"class":165},[159,41543,40574],{"class":1142},[159,41545,40713],{"class":165},[14,41547,41548],{},"使用封装的类",[151,41550,41552],{"className":23872,"code":41551,"language":23874,"meta":25,"style":25},"#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",[49,41553,41554,41560,41570,41576,41582,41606,41610,41636,41662,41686,41700,41704,41716,41720,41724,41728,41740,41744,41748,41756,41760,41764,41768,41772,41776,41786,41792,41800,41808,41818,41824,41836,41844,41852,41862,41868,41880,41884,41892,41898],{"__ignoreMap":25},[159,41555,41556,41558],{"class":161,"line":162},[159,41557,25602],{"class":1142},[159,41559,25605],{"class":192},[159,41561,41562,41564,41566,41568],{"class":161,"line":176},[159,41563,25610],{"class":1142},[159,41565,25613],{"class":1142},[159,41567,25616],{"class":185},[159,41569,1492],{"class":165},[159,41571,41572,41574],{"class":161,"line":203},[159,41573,25602],{"class":1142},[159,41575,41463],{"class":192},[159,41577,41578,41580],{"class":161,"line":223},[159,41579,25602],{"class":1142},[159,41581,41244],{"class":192},[159,41583,41584,41586,41588,41590,41592,41594,41596,41598,41600,41602,41604],{"class":161,"line":233},[159,41585,28979],{"class":1142},[159,41587,40748],{"class":185},[159,41589,1159],{"class":165},[159,41591,40753],{"class":185},[159,41593,34159],{"class":1142},[159,41595,24151],{"class":8765},[159,41597,24233],{"class":165},[159,41599,40669],{"class":185},[159,41601,34159],{"class":1142},[159,41603,14],{"class":8765},[159,41605,1165],{"class":165},[159,41607,41608],{"class":161,"line":239},[159,41609,25222],{"class":165},[159,41611,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634],{"class":161,"line":245},[159,41613,38304],{"class":1142},[159,41615,40778],{"class":165},[159,41617,189],{"class":1142},[159,41619,39902],{"class":165},[159,41621,40785],{"class":185},[159,41623,40788],{"class":165},[159,41625,40791],{"class":185},[159,41627,4774],{"class":165},[159,41629,24376],{"class":1142},[159,41631,39449],{"class":165},[159,41633,40791],{"class":185},[159,41635,29251],{"class":165},[159,41637,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656,41658,41660],{"class":161,"line":251},[159,41639,38304],{"class":1142},[159,41641,40808],{"class":165},[159,41643,189],{"class":1142},[159,41645,39902],{"class":165},[159,41647,40785],{"class":185},[159,41649,40788],{"class":165},[159,41651,40819],{"class":185},[159,41653,4774],{"class":165},[159,41655,24376],{"class":1142},[159,41657,39449],{"class":165},[159,41659,40819],{"class":185},[159,41661,29251],{"class":165},[159,41663,41664,41666,41668,41670,41672,41674,41676,41678,41680,41682,41684],{"class":161,"line":261},[159,41665,38304],{"class":1142},[159,41667,40836],{"class":165},[159,41669,189],{"class":1142},[159,41671,40841],{"class":185},[159,41673,40844],{"class":165},[159,41675,4777],{"class":1142},[159,41677,40778],{"class":165},[159,41679,2704],{"class":1142},[159,41681,40808],{"class":165},[159,41683,4777],{"class":1142},[159,41685,40857],{"class":165},[159,41687,41688,41690,41692,41694,41696,41698],{"class":161,"line":603},[159,41689,26732],{"class":1142},[159,41691,40864],{"class":165},[159,41693,166],{"class":1142},[159,41695,39902],{"class":165},[159,41697,40871],{"class":185},[159,41699,40874],{"class":165},[159,41701,41702],{"class":161,"line":621},[159,41703,25681],{"class":165},[159,41705,41706,41708,41710,41712,41714],{"class":161,"line":634},[159,41707,33265],{"class":165},[159,41709,24858],{"class":1142},[159,41711,40887],{"class":192},[159,41713,25123],{"class":1142},[159,41715,32439],{"class":165},[159,41717,41718],{"class":161,"line":640},[159,41719,1508],{"class":165},[159,41721,41722],{"class":161,"line":1075},[159,41723,40365],{"class":1142},[159,41725,41726],{"class":161,"line":1081},[159,41727,25681],{"class":165},[159,41729,41730,41732,41734,41736,41738],{"class":161,"line":1091},[159,41731,33265],{"class":165},[159,41733,24858],{"class":1142},[159,41735,40912],{"class":192},[159,41737,25123],{"class":1142},[159,41739,32439],{"class":165},[159,41741,41742],{"class":161,"line":1100},[159,41743,1508],{"class":165},[159,41745,41746],{"class":161,"line":1123},[159,41747,15685],{"class":165},[159,41749,41750,41752,41754],{"class":161,"line":1132},[159,41751,23886],{"class":1142},[159,41753,25625],{"class":185},[159,41755,5158],{"class":165},[159,41757,41758],{"class":161,"line":1139},[159,41759,25222],{"class":165},[159,41761,41762],{"class":161,"line":1168},[159,41763,38616],{"class":1135},[159,41765,41766],{"class":161,"line":1174},[159,41767,38365],{"class":165},[159,41769,41770],{"class":161,"line":1180},[159,41771,40949],{"class":165},[159,41773,41774],{"class":161,"line":1194},[159,41775,40522],{"class":1135},[159,41777,41778,41780,41782,41784],{"class":161,"line":1200},[159,41779,25227],{"class":165},[159,41781,24858],{"class":1142},[159,41783,40962],{"class":192},[159,41785,1492],{"class":165},[159,41787,41788,41790],{"class":161,"line":1221},[159,41789,38304],{"class":1142},[159,41791,40971],{"class":165},[159,41793,41794,41796,41798],{"class":161,"line":1230},[159,41795,25663],{"class":165},[159,41797,25108],{"class":1142},[159,41799,40980],{"class":165},[159,41801,41802,41804,41806],{"class":161,"line":1247},[159,41803,40155],{"class":165},[159,41805,40987],{"class":185},[159,41807,40990],{"class":165},[159,41809,41810,41812,41814,41816],{"class":161,"line":1265},[159,41811,25227],{"class":165},[159,41813,24858],{"class":1142},[159,41815,40999],{"class":192},[159,41817,1492],{"class":165},[159,41819,41820,41822],{"class":161,"line":1277},[159,41821,38304],{"class":1142},[159,41823,41008],{"class":165},[159,41825,41826,41828,41830,41832,41834],{"class":161,"line":1283},[159,41827,25663],{"class":165},[159,41829,25108],{"class":1142},[159,41831,24648],{"class":165},[159,41833,25108],{"class":1142},[159,41835,41021],{"class":165},[159,41837,41838,41840,41842],{"class":161,"line":1294},[159,41839,41026],{"class":165},[159,41841,41029],{"class":185},[159,41843,41032],{"class":165},[159,41845,41846,41848,41850],{"class":161,"line":1305},[159,41847,40155],{"class":165},[159,41849,41039],{"class":185},[159,41851,41042],{"class":165},[159,41853,41854,41856,41858,41860],{"class":161,"line":1311},[159,41855,25227],{"class":165},[159,41857,24858],{"class":1142},[159,41859,41051],{"class":192},[159,41861,1492],{"class":165},[159,41863,41864,41866],{"class":161,"line":1322},[159,41865,38304],{"class":1142},[159,41867,41060],{"class":165},[159,41869,41870,41872,41874,41876,41878],{"class":161,"line":1327},[159,41871,25663],{"class":165},[159,41873,25108],{"class":1142},[159,41875,41069],{"class":165},[159,41877,25108],{"class":1142},[159,41879,41074],{"class":165},[159,41881,41882],{"class":161,"line":1336},[159,41883,41079],{"class":165},[159,41885,41886,41888,41890],{"class":161,"line":1345},[159,41887,41084],{"class":165},[159,41889,41029],{"class":185},[159,41891,41089],{"class":165},[159,41893,41894,41896],{"class":161,"line":1350},[159,41895,41094],{"class":185},[159,41897,41097],{"class":165},[159,41899,41900],{"class":161,"line":1764},[159,41901,15685],{"class":165},[37,41903,41905],{"id":41904},"_82对象的初始化清理","8.2对象的初始化清理",[103,41907,41908,41911],{},[106,41909,41910],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[106,41912,41913],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[42,41915,41917],{"id":41916},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,41919,41920,41921,41924],{},"对象的",[61,41922,41923],{},"初始化和清理","也是两个非常重要的安全问题",[14,41926,41927],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,41929,41930],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,41932,41933,41934,41937,41938,41941],{},"c++利用了",[61,41935,41936],{},"构造函数","和",[61,41939,41940],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,41943,41944,41945],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[61,41946,41947],{},"我们不提供构造和析构，编译器会提供",[14,41949,41950],{},[61,41951,41952],{},"编译器提供的构造函数和析构函数是空实现。",[103,41954,41955,41958],{},[106,41956,41957],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[106,41959,41960,41961,41964],{},"析构函数：主要作用在于对象",[61,41962,41963],{},"销毁前","系统自动调用，执行一些清理工作。",[14,41966,41967,41970],{},[61,41968,41969],{},"构造函数语法：",[49,41971,41972],{},"类名(){}",[134,41974,41975,41978,41981,41984,41987],{},[106,41976,41977],{},"构造函数，没有返回值也不写void",[106,41979,41980],{},"函数名称与类名相同",[106,41982,41983],{},"构造函数可以有参数，因此可以发生重载",[106,41985,41986],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[106,41988,41989,41990,18387],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[49,41991,41992],{},"Person(){}",[14,41994,41995,37361,41998],{},[61,41996,41997],{},"析构函数语法：",[49,41999,42000],{},"~类名(){}",[134,42002,42003,42006,42009,42015],{},[106,42004,42005],{},"析构函数，没有返回值也不写void",[106,42007,42008],{},"函数名称与类名相同,在名称前加上符号  ~",[106,42010,42011,42012],{},"析构函数不可以有参数，因此",[61,42013,42014],{},"不可以发生重载",[106,42016,42017],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[151,42019,42021],{"className":23872,"code":42020,"language":23874,"meta":25,"style":25},"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",[49,42022,42023,42029,42033,42037,42042,42049,42053,42066,42070,42075,42082,42086,42099,42103,42107,42111,42115,42123,42127,42135,42139,42143,42151,42155,42160,42164,42171,42175,42188,42192,42200],{"__ignoreMap":25},[159,42024,42025,42027],{"class":161,"line":162},[159,42026,38260],{"class":1142},[159,42028,38734],{"class":185},[159,42030,42031],{"class":161,"line":176},[159,42032,25222],{"class":165},[159,42034,42035],{"class":161,"line":203},[159,42036,38282],{"class":1142},[159,42038,42039],{"class":161,"line":223},[159,42040,42041],{"class":1135},"    \u002F\u002F构造函数\n",[159,42043,42044,42047],{"class":161,"line":233},[159,42045,42046],{"class":185},"    Person",[159,42048,5158],{"class":165},[159,42050,42051],{"class":161,"line":239},[159,42052,25681],{"class":165},[159,42054,42055,42057,42059,42062,42064],{"class":161,"line":245},[159,42056,33265],{"class":165},[159,42058,24858],{"class":1142},[159,42060,42061],{"class":192}," \"Person的构造函数调用\"",[159,42063,25123],{"class":1142},[159,42065,32439],{"class":165},[159,42067,42068],{"class":161,"line":251},[159,42069,1508],{"class":165},[159,42071,42072],{"class":161,"line":261},[159,42073,42074],{"class":1135},"    \u002F\u002F析构函数\n",[159,42076,42077,42080],{"class":161,"line":603},[159,42078,42079],{"class":185},"    ~Person",[159,42081,5158],{"class":165},[159,42083,42084],{"class":161,"line":621},[159,42085,25681],{"class":165},[159,42087,42088,42090,42092,42095,42097],{"class":161,"line":634},[159,42089,33265],{"class":165},[159,42091,24858],{"class":1142},[159,42093,42094],{"class":192}," \"Person的析构函数调用\"",[159,42096,25123],{"class":1142},[159,42098,32439],{"class":165},[159,42100,42101],{"class":161,"line":640},[159,42102,1508],{"class":165},[159,42104,42105],{"class":161,"line":1075},[159,42106,590],{"emptyLinePlaceholder":589},[159,42108,42109],{"class":161,"line":1081},[159,42110,27616],{"class":165},[159,42112,42113],{"class":161,"line":1091},[159,42114,590],{"emptyLinePlaceholder":589},[159,42116,42117,42119,42121],{"class":161,"line":1100},[159,42118,28979],{"class":1142},[159,42120,29203],{"class":185},[159,42122,5158],{"class":165},[159,42124,42125],{"class":161,"line":1123},[159,42126,25222],{"class":165},[159,42128,42129,42132],{"class":161,"line":1132},[159,42130,42131],{"class":165},"    Person p;",[159,42133,42134],{"class":1135},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[159,42136,42137],{"class":161,"line":1139},[159,42138,15685],{"class":165},[159,42140,42141],{"class":161,"line":1168},[159,42142,590],{"emptyLinePlaceholder":589},[159,42144,42145,42147,42149],{"class":161,"line":1174},[159,42146,23886],{"class":1142},[159,42148,25625],{"class":185},[159,42150,17173],{"class":165},[159,42152,42153],{"class":161,"line":1180},[159,42154,36778],{"class":165},[159,42156,42157],{"class":161,"line":1194},[159,42158,42159],{"class":1135},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[159,42161,42162],{"class":161,"line":1200},[159,42163,590],{"emptyLinePlaceholder":589},[159,42165,42166,42168],{"class":161,"line":1221},[159,42167,42131],{"class":165},[159,42169,42170],{"class":1135},"\u002F\u002F只有构造函数\n",[159,42172,42173],{"class":161,"line":1230},[159,42174,590],{"emptyLinePlaceholder":589},[159,42176,42177,42179,42181,42183,42185],{"class":161,"line":1247},[159,42178,25950],{"class":185},[159,42180,1159],{"class":165},[159,42182,25955],{"class":192},[159,42184,29581],{"class":165},[159,42186,42187],{"class":1135},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[159,42189,42190],{"class":161,"line":1265},[159,42191,590],{"emptyLinePlaceholder":589},[159,42193,42194,42196,42198],{"class":161,"line":1277},[159,42195,27711],{"class":1142},[159,42197,1259],{"class":1146},[159,42199,1492],{"class":165},[159,42201,42202],{"class":161,"line":1283},[159,42203,15685],{"class":165},[14,42205,42206],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[42,42208,42210],{"id":42209},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,42212,42213],{},"两种分类方式：",[14,42215,42216],{},"​\t按参数分为： 有参构造和无参构造",[14,42218,42219],{},"​\t按类型分为： 普通构造和拷贝构造",[14,42221,42222],{},"三种调用方式：",[14,42224,42225],{},"​\t括号法",[14,42227,42228],{},"​\t显示法",[14,42230,42231],{},"​\t隐式转换法",[151,42233,42235],{"className":23872,"code":42234,"language":23874,"meta":25,"style":25},"#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",[49,42236,42237,42243,42253,42258,42263,42268,42273,42277,42285,42289,42293,42297,42303,42307,42320,42324,42336,42340,42349,42362,42366,42370,42376,42380,42393,42397,42402,42418,42422,42427,42436,42449,42453,42459,42463,42468,42476,42480,42485,42489,42497,42501,42506,42511,42516,42521,42526,42530,42535,42540,42545,42550,42554,42559,42564,42580,42592,42597,42601,42606,42611,42616,42620,42625,42639,42652,42656,42664,42668,42674,42680,42688],{"__ignoreMap":25},[159,42238,42239,42241],{"class":161,"line":162},[159,42240,25602],{"class":1142},[159,42242,25605],{"class":192},[159,42244,42245,42247,42249,42251],{"class":161,"line":176},[159,42246,25610],{"class":1142},[159,42248,25613],{"class":1142},[159,42250,25616],{"class":185},[159,42252,1492],{"class":165},[159,42254,42255],{"class":161,"line":203},[159,42256,42257],{"class":1135},"\u002F\u002F1.构造函数的分类及调用\n",[159,42259,42260],{"class":161,"line":223},[159,42261,42262],{"class":1135},"\u002F\u002F分类\n",[159,42264,42265],{"class":161,"line":233},[159,42266,42267],{"class":1135},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[159,42269,42270],{"class":161,"line":239},[159,42271,42272],{"class":1135},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[159,42274,42275],{"class":161,"line":245},[159,42276,590],{"emptyLinePlaceholder":589},[159,42278,42279,42281,42283],{"class":161,"line":251},[159,42280,38260],{"class":1142},[159,42282,39132],{"class":185},[159,42284,17636],{"class":165},[159,42286,42287],{"class":161,"line":261},[159,42288,25222],{"class":165},[159,42290,42291],{"class":161,"line":603},[159,42292,38282],{"class":1142},[159,42294,42295],{"class":161,"line":621},[159,42296,42041],{"class":1135},[159,42298,42299,42301],{"class":161,"line":634},[159,42300,42046],{"class":185},[159,42302,5158],{"class":165},[159,42304,42305],{"class":161,"line":640},[159,42306,25681],{"class":165},[159,42308,42309,42311,42313,42316,42318],{"class":161,"line":1075},[159,42310,27080],{"class":165},[159,42312,24858],{"class":1142},[159,42314,42315],{"class":192},"\"Person构造函数无参构造\"",[159,42317,24858],{"class":1142},[159,42319,24880],{"class":165},[159,42321,42322],{"class":161,"line":1081},[159,42323,1508],{"class":165},[159,42325,42326,42328,42330,42332,42334],{"class":161,"line":1091},[159,42327,42046],{"class":185},[159,42329,1159],{"class":165},[159,42331,23886],{"class":1142},[159,42333,7885],{"class":8765},[159,42335,1165],{"class":165},[159,42337,42338],{"class":161,"line":1100},[159,42339,25681],{"class":165},[159,42341,42342,42345,42347],{"class":161,"line":1123},[159,42343,42344],{"class":165},"        age",[159,42346,189],{"class":1142},[159,42348,29812],{"class":165},[159,42350,42351,42353,42355,42358,42360],{"class":161,"line":1132},[159,42352,27080],{"class":165},[159,42354,24858],{"class":1142},[159,42356,42357],{"class":192},"\"Person构造函数有参构造\"",[159,42359,24858],{"class":1142},[159,42361,24880],{"class":165},[159,42363,42364],{"class":161,"line":1139},[159,42365,1508],{"class":165},[159,42367,42368],{"class":161,"line":1168},[159,42369,42074],{"class":1135},[159,42371,42372,42374],{"class":161,"line":1174},[159,42373,42079],{"class":185},[159,42375,5158],{"class":165},[159,42377,42378],{"class":161,"line":1180},[159,42379,25681],{"class":165},[159,42381,42382,42384,42386,42389,42391],{"class":161,"line":1194},[159,42383,27080],{"class":165},[159,42385,24858],{"class":1142},[159,42387,42388],{"class":192},"\"Person析构函数被调用\"",[159,42390,24858],{"class":1142},[159,42392,24880],{"class":165},[159,42394,42395],{"class":161,"line":1200},[159,42396,1508],{"class":165},[159,42398,42399],{"class":161,"line":1221},[159,42400,42401],{"class":1135},"    \u002F\u002F拷贝构造函数\n",[159,42403,42404,42406,42408,42410,42412,42414,42416],{"class":161,"line":1230},[159,42405,42046],{"class":185},[159,42407,1159],{"class":165},[159,42409,18326],{"class":1142},[159,42411,39132],{"class":185},[159,42413,34159],{"class":1142},[159,42415,14],{"class":8765},[159,42417,1165],{"class":165},[159,42419,42420],{"class":161,"line":1247},[159,42421,25681],{"class":165},[159,42423,42424],{"class":161,"line":1265},[159,42425,42426],{"class":1135},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[159,42428,42429,42431,42433],{"class":161,"line":1277},[159,42430,42344],{"class":165},[159,42432,189],{"class":1142},[159,42434,42435],{"class":165},"p.age;\n",[159,42437,42438,42440,42442,42445,42447],{"class":161,"line":1283},[159,42439,27080],{"class":165},[159,42441,24858],{"class":1142},[159,42443,42444],{"class":192},"\"Person拷贝构造函数被调用\"",[159,42446,24858],{"class":1142},[159,42448,24880],{"class":165},[159,42450,42451],{"class":161,"line":1294},[159,42452,1508],{"class":165},[159,42454,42455,42457],{"class":161,"line":1305},[159,42456,25636],{"class":1142},[159,42458,31407],{"class":165},[159,42460,42461],{"class":161,"line":1311},[159,42462,27616],{"class":165},[159,42464,42465],{"class":161,"line":1322},[159,42466,42467],{"class":1135},"\u002F\u002F调用\n",[159,42469,42470,42472,42474],{"class":161,"line":1327},[159,42471,28979],{"class":1142},[159,42473,29203],{"class":185},[159,42475,5158],{"class":165},[159,42477,42478],{"class":161,"line":1336},[159,42479,25222],{"class":165},[159,42481,42482],{"class":161,"line":1345},[159,42483,42484],{"class":1135},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[159,42486,42487],{"class":161,"line":1350},[159,42488,15685],{"class":165},[159,42490,42491,42493,42495],{"class":161,"line":1764},[159,42492,28979],{"class":1142},[159,42494,29272],{"class":185},[159,42496,5158],{"class":165},[159,42498,42499],{"class":161,"line":1769},[159,42500,25222],{"class":165},[159,42502,42503],{"class":161,"line":1777},[159,42504,42505],{"class":1135},"    \u002F\u002F1.括号法\n",[159,42507,42508],{"class":161,"line":1788},[159,42509,42510],{"class":1135},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[159,42512,42513],{"class":161,"line":1802},[159,42514,42515],{"class":1135},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[159,42517,42518],{"class":161,"line":1815},[159,42519,42520],{"class":1135},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[159,42522,42523],{"class":161,"line":1828},[159,42524,42525],{"class":1135},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[159,42527,42528],{"class":161,"line":1841},[159,42529,590],{"emptyLinePlaceholder":589},[159,42531,42532],{"class":161,"line":1852},[159,42533,42534],{"class":1135},"    \u002F\u002F注意事项\n",[159,42536,42537],{"class":161,"line":1866},[159,42538,42539],{"class":1135},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[159,42541,42542],{"class":161,"line":1879},[159,42543,42544],{"class":1135},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[159,42546,42547],{"class":161,"line":1884},[159,42548,42549],{"class":1135},"    \u002F\u002F Person p4();\n",[159,42551,42552],{"class":161,"line":1889},[159,42553,590],{"emptyLinePlaceholder":589},[159,42555,42556],{"class":161,"line":1899},[159,42557,42558],{"class":1135},"    \u002F\u002F2.显示法\n",[159,42560,42561],{"class":161,"line":1912},[159,42562,42563],{"class":165},"    Person p1;\n",[159,42565,42566,42569,42571,42574,42576,42578],{"class":161,"line":1925},[159,42567,42568],{"class":165},"    Person p2",[159,42570,189],{"class":1142},[159,42572,42573],{"class":185},"Person",[159,42575,1159],{"class":165},[159,42577,1964],{"class":1146},[159,42579,1953],{"class":165},[159,42581,42582,42585,42587,42589],{"class":161,"line":1956},[159,42583,42584],{"class":165},"    Person p3",[159,42586,189],{"class":1142},[159,42588,42573],{"class":185},[159,42590,42591],{"class":165},"(p2);\n",[159,42593,42594],{"class":161,"line":1971},[159,42595,42596],{"class":1135},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[159,42598,42599],{"class":161,"line":1976},[159,42600,590],{"emptyLinePlaceholder":589},[159,42602,42603],{"class":161,"line":1981},[159,42604,42605],{"class":1135},"    \u002F\u002F 注意事项2\n",[159,42607,42608],{"class":161,"line":1989},[159,42609,42610],{"class":1135},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[159,42612,42613],{"class":161,"line":2001},[159,42614,42615],{"class":1135},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[159,42617,42618],{"class":161,"line":2006},[159,42619,590],{"emptyLinePlaceholder":589},[159,42621,42622],{"class":161,"line":2015},[159,42623,42624],{"class":1135},"    \u002F\u002F3.隐士转换法\n",[159,42626,42627,42630,42632,42634,42636],{"class":161,"line":2024},[159,42628,42629],{"class":165},"    Person p4",[159,42631,189],{"class":1142},[159,42633,1964],{"class":1146},[159,42635,23934],{"class":165},[159,42637,42638],{"class":1135},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[159,42640,42641,42644,42646,42649],{"class":161,"line":2029},[159,42642,42643],{"class":165},"    Person p5",[159,42645,189],{"class":1142},[159,42647,42648],{"class":165},"p4;",[159,42650,42651],{"class":1135}," \u002F\u002F 这里会调用拷贝构造函数\n",[159,42653,42654],{"class":161,"line":2038},[159,42655,15685],{"class":165},[159,42657,42658,42660,42662],{"class":161,"line":2053},[159,42659,23886],{"class":1142},[159,42661,25625],{"class":185},[159,42663,5158],{"class":165},[159,42665,42666],{"class":161,"line":2070},[159,42667,25222],{"class":165},[159,42669,42670,42672],{"class":161,"line":2095},[159,42671,29248],{"class":185},[159,42673,29251],{"class":165},[159,42675,42676,42678],{"class":161,"line":2104},[159,42677,29317],{"class":185},[159,42679,29251],{"class":165},[159,42681,42682,42684,42686],{"class":161,"line":2120},[159,42683,27711],{"class":1142},[159,42685,1259],{"class":1146},[159,42687,1492],{"class":165},[159,42689,42690],{"class":161,"line":2134},[159,42691,15685],{"class":165},[14,42693,42694,42697],{},[61,42695,42696],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[42,42699,42701],{"id":42700},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,42703,42704],{},"C++中拷贝构造函数调用时机通常有三种情况",[103,42706,42707,42710,42713],{},[106,42708,42709],{},"使用一个已经创建完毕的对象来初始化一个新对象",[106,42711,42712],{},"值传递的方式给函数参数传值",[106,42714,42715],{},"以值方式返回局部对象",[151,42717,42719],{"className":23872,"code":42718,"language":23874,"meta":25,"style":25},"#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",[49,42720,42721,42727,42737,42741,42746,42750,42755,42760,42765,42771,42775,42779,42785,42789,42802,42806,42811,42823,42827,42835,42848,42852,42856,42872,42876,42885,42898,42902,42908,42912,42924,42928,42934,42938,42942,42950,42954,42967,42975,42993,42997,43002,43007,43022,43026,43039,43043,43051,43055,43059,43067,43071,43076,43085,43089,43093,43118,43128,43132,43140,43144,43155,43180,43184,43188,43192,43200,43204,43209,43214,43221,43226,43231,43236,43241,43245,43250,43254,43259,43263,43268,43273,43277,43281,43286,43291,43299],{"__ignoreMap":25},[159,42722,42723,42725],{"class":161,"line":162},[159,42724,25602],{"class":1142},[159,42726,25605],{"class":192},[159,42728,42729,42731,42733,42735],{"class":161,"line":176},[159,42730,25610],{"class":1142},[159,42732,25613],{"class":1142},[159,42734,25616],{"class":185},[159,42736,1492],{"class":165},[159,42738,42739],{"class":161,"line":203},[159,42740,590],{"emptyLinePlaceholder":589},[159,42742,42743],{"class":161,"line":223},[159,42744,42745],{"class":1135},"\u002F\u002F拷贝构造函数调用时机\n",[159,42747,42748],{"class":161,"line":233},[159,42749,590],{"emptyLinePlaceholder":589},[159,42751,42752],{"class":161,"line":239},[159,42753,42754],{"class":1135},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[159,42756,42757],{"class":161,"line":245},[159,42758,42759],{"class":1135},"\u002F\u002F2.值传递的方式给函数参数传值\n",[159,42761,42762],{"class":161,"line":251},[159,42763,42764],{"class":1135},"\u002F\u002F3.以值方式返回局部对象\n",[159,42766,42767,42769],{"class":161,"line":261},[159,42768,38260],{"class":1142},[159,42770,38734],{"class":185},[159,42772,42773],{"class":161,"line":603},[159,42774,25222],{"class":165},[159,42776,42777],{"class":161,"line":621},[159,42778,38282],{"class":1142},[159,42780,42781,42783],{"class":161,"line":634},[159,42782,42046],{"class":185},[159,42784,5158],{"class":165},[159,42786,42787],{"class":161,"line":640},[159,42788,25681],{"class":165},[159,42790,42791,42793,42795,42798,42800],{"class":161,"line":1075},[159,42792,33265],{"class":165},[159,42794,24858],{"class":1142},[159,42796,42797],{"class":192}," \"Person的默认构造函数调用\"",[159,42799,25123],{"class":1142},[159,42801,32439],{"class":165},[159,42803,42804],{"class":161,"line":1081},[159,42805,1508],{"class":165},[159,42807,42808],{"class":161,"line":1091},[159,42809,42810],{"class":1135},"    \u002F\u002F有参构造\n",[159,42812,42813,42815,42817,42819,42821],{"class":161,"line":1100},[159,42814,42046],{"class":185},[159,42816,1159],{"class":165},[159,42818,23886],{"class":1142},[159,42820,16746],{"class":8765},[159,42822,1165],{"class":165},[159,42824,42825],{"class":161,"line":1123},[159,42826,25681],{"class":165},[159,42828,42829,42831,42833],{"class":161,"line":1132},[159,42830,39304],{"class":165},[159,42832,189],{"class":1142},[159,42834,31407],{"class":165},[159,42836,42837,42839,42841,42844,42846],{"class":161,"line":1139},[159,42838,33265],{"class":165},[159,42840,24858],{"class":1142},[159,42842,42843],{"class":192}," \"Person的有参构造函数调用\"",[159,42845,25123],{"class":1142},[159,42847,32439],{"class":165},[159,42849,42850],{"class":161,"line":1168},[159,42851,1508],{"class":165},[159,42853,42854],{"class":161,"line":1174},[159,42855,42401],{"class":1135},[159,42857,42858,42860,42862,42864,42866,42868,42870],{"class":161,"line":1180},[159,42859,42046],{"class":185},[159,42861,1159],{"class":165},[159,42863,18326],{"class":1142},[159,42865,39132],{"class":185},[159,42867,34159],{"class":1142},[159,42869,14],{"class":8765},[159,42871,1165],{"class":165},[159,42873,42874],{"class":161,"line":1194},[159,42875,25681],{"class":165},[159,42877,42878,42880,42882],{"class":161,"line":1200},[159,42879,39304],{"class":165},[159,42881,189],{"class":1142},[159,42883,42884],{"class":165}," p.m_Age;\n",[159,42886,42887,42889,42891,42894,42896],{"class":161,"line":1221},[159,42888,33265],{"class":165},[159,42890,24858],{"class":1142},[159,42892,42893],{"class":192}," \"Person的拷贝构造函数调用\"",[159,42895,25123],{"class":1142},[159,42897,32439],{"class":165},[159,42899,42900],{"class":161,"line":1230},[159,42901,1508],{"class":165},[159,42903,42904,42906],{"class":161,"line":1247},[159,42905,42079],{"class":185},[159,42907,5158],{"class":165},[159,42909,42910],{"class":161,"line":1265},[159,42911,25681],{"class":165},[159,42913,42914,42916,42918,42920,42922],{"class":161,"line":1277},[159,42915,33265],{"class":165},[159,42917,24858],{"class":1142},[159,42919,42094],{"class":192},[159,42921,25123],{"class":1142},[159,42923,32439],{"class":165},[159,42925,42926],{"class":161,"line":1283},[159,42927,1508],{"class":165},[159,42929,42930,42932],{"class":161,"line":1294},[159,42931,25636],{"class":1142},[159,42933,39228],{"class":165},[159,42935,42936],{"class":161,"line":1305},[159,42937,27616],{"class":165},[159,42939,42940],{"class":161,"line":1311},[159,42941,42754],{"class":1135},[159,42943,42944,42946,42948],{"class":161,"line":1322},[159,42945,28979],{"class":1142},[159,42947,29203],{"class":185},[159,42949,5158],{"class":165},[159,42951,42952],{"class":161,"line":1327},[159,42953,25222],{"class":165},[159,42955,42956,42959,42961,42963,42965],{"class":161,"line":1336},[159,42957,42958],{"class":165},"    Person ",[159,42960,30741],{"class":185},[159,42962,1159],{"class":165},[159,42964,1739],{"class":1146},[159,42966,1953],{"class":165},[159,42968,42969,42971,42973],{"class":161,"line":1345},[159,42970,42958],{"class":165},[159,42972,30644],{"class":185},[159,42974,41042],{"class":165},[159,42976,42977,42979,42981,42984,42986,42989,42991],{"class":161,"line":1350},[159,42978,25227],{"class":165},[159,42980,24858],{"class":1142},[159,42982,42983],{"class":192},"\"P2的年龄为：\"",[159,42985,24858],{"class":1142},[159,42987,42988],{"class":165},"p2.m_Age",[159,42990,24858],{"class":1142},[159,42992,24880],{"class":165},[159,42994,42995],{"class":161,"line":1764},[159,42996,15685],{"class":165},[159,42998,42999],{"class":161,"line":1769},[159,43000,43001],{"class":1135},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[159,43003,43004],{"class":161,"line":1777},[159,43005,43006],{"class":1135},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[159,43008,43009,43011,43014,43016,43018,43020],{"class":161,"line":1788},[159,43010,28979],{"class":1142},[159,43012,43013],{"class":185}," doWork",[159,43015,1159],{"class":165},[159,43017,42573],{"class":185},[159,43019,1704],{"class":8765},[159,43021,1165],{"class":165},[159,43023,43024],{"class":161,"line":1802},[159,43025,25222],{"class":165},[159,43027,43028,43030,43032,43035,43037],{"class":161,"line":1815},[159,43029,30142],{"class":165},[159,43031,24858],{"class":1142},[159,43033,43034],{"class":192}," \"doWork函数调用\"",[159,43036,25123],{"class":1142},[159,43038,32439],{"class":165},[159,43040,43041],{"class":161,"line":1828},[159,43042,15685],{"class":165},[159,43044,43045,43047,43049],{"class":161,"line":1841},[159,43046,28979],{"class":1142},[159,43048,29272],{"class":185},[159,43050,5158],{"class":165},[159,43052,43053],{"class":161,"line":1852},[159,43054,25222],{"class":165},[159,43056,43057],{"class":161,"line":1866},[159,43058,38876],{"class":165},[159,43060,43061,43064],{"class":161,"line":1879},[159,43062,43063],{"class":185},"    doWork",[159,43065,43066],{"class":165},"(p);\n",[159,43068,43069],{"class":161,"line":1884},[159,43070,15685],{"class":165},[159,43072,43073],{"class":161,"line":1889},[159,43074,43075],{"class":1135},"\u002F\u002F 3.以值方式返回局部对象\n",[159,43077,43078,43080,43083],{"class":161,"line":1899},[159,43079,42573],{"class":185},[159,43081,43082],{"class":185}," doWork2",[159,43084,5158],{"class":165},[159,43086,43087],{"class":161,"line":1912},[159,43088,25222],{"class":165},[159,43090,43091],{"class":161,"line":1925},[159,43092,42563],{"class":165},[159,43094,43095,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115],{"class":161,"line":1956},[159,43096,25227],{"class":165},[159,43098,24858],{"class":1142},[159,43100,1159],{"class":165},[159,43102,23886],{"class":1142},[159,43104,30131],{"class":1142},[159,43106,18387],{"class":165},[159,43108,24209],{"class":1142},[159,43110,30741],{"class":165},[159,43112,24858],{"class":1142},[159,43114,24923],{"class":165},[159,43116,43117],{"class":1135},"\u002F\u002F打印p1的地址\n",[159,43119,43120,43122,43125],{"class":161,"line":1971},[159,43121,27711],{"class":1142},[159,43123,43124],{"class":165}," p1;",[159,43126,43127],{"class":1135},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[159,43129,43130],{"class":161,"line":1976},[159,43131,15685],{"class":165},[159,43133,43134,43136,43138],{"class":161,"line":1981},[159,43135,28979],{"class":1142},[159,43137,29344],{"class":185},[159,43139,5158],{"class":165},[159,43141,43142],{"class":161,"line":1989},[159,43143,25222],{"class":165},[159,43145,43146,43149,43151,43153],{"class":161,"line":2001},[159,43147,43148],{"class":165},"    Person p ",[159,43150,189],{"class":1142},[159,43152,43082],{"class":185},[159,43154,29251],{"class":165},[159,43156,43157,43159,43161,43163,43165,43167,43169,43171,43173,43175,43177],{"class":161,"line":2006},[159,43158,25227],{"class":165},[159,43160,24858],{"class":1142},[159,43162,1159],{"class":165},[159,43164,23886],{"class":1142},[159,43166,30131],{"class":1142},[159,43168,18387],{"class":165},[159,43170,24209],{"class":1142},[159,43172,14],{"class":165},[159,43174,24858],{"class":1142},[159,43176,24923],{"class":165},[159,43178,43179],{"class":1135},"\u002F\u002F打印p的地址\n",[159,43181,43182],{"class":161,"line":2015},[159,43183,15685],{"class":165},[159,43185,43186],{"class":161,"line":2024},[159,43187,590],{"emptyLinePlaceholder":589},[159,43189,43190],{"class":161,"line":2029},[159,43191,590],{"emptyLinePlaceholder":589},[159,43193,43194,43196,43198],{"class":161,"line":2038},[159,43195,23886],{"class":1142},[159,43197,25625],{"class":185},[159,43199,5158],{"class":165},[159,43201,43202],{"class":161,"line":2053},[159,43203,25222],{"class":165},[159,43205,43206],{"class":161,"line":2070},[159,43207,43208],{"class":1135},"    \u002F\u002F test01();\n",[159,43210,43211],{"class":161,"line":2095},[159,43212,43213],{"class":1135},"    \u002F\u002F test02();\n",[159,43215,43216,43219],{"class":161,"line":2104},[159,43217,43218],{"class":185},"    test03",[159,43220,29251],{"class":165},[159,43222,43223],{"class":161,"line":2120},[159,43224,43225],{"class":1135},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[159,43227,43228],{"class":161,"line":2134},[159,43229,43230],{"class":1135},"\u002F\u002F 输出结果如下：\n",[159,43232,43233],{"class":161,"line":2143},[159,43234,43235],{"class":1135},"\u002F\u002F Person的默认构造函数调用\n",[159,43237,43238],{"class":161,"line":2165},[159,43239,43240],{"class":1135},"\u002F\u002F 0x7fffffffceec\n",[159,43242,43243],{"class":161,"line":2178},[159,43244,43240],{"class":1135},[159,43246,43247],{"class":161,"line":2191},[159,43248,43249],{"class":1135},"\u002F\u002F Person的析构函数调用\n",[159,43251,43252],{"class":161,"line":2204},[159,43253,590],{"emptyLinePlaceholder":589},[159,43255,43256],{"class":161,"line":2217},[159,43257,43258],{"class":1135},"\u002F\u002F 之前的输出结果如下：\n",[159,43260,43261],{"class":161,"line":2230},[159,43262,43235],{"class":1135},[159,43264,43265],{"class":161,"line":2243},[159,43266,43267],{"class":1135},"\u002F\u002F 地址\n",[159,43269,43270],{"class":161,"line":2256},[159,43271,43272],{"class":1135},"\u002F\u002F Person的拷贝构造函数调用\n",[159,43274,43275],{"class":161,"line":2266},[159,43276,43249],{"class":1135},[159,43278,43279],{"class":161,"line":2275},[159,43280,43267],{"class":1135},[159,43282,43283],{"class":161,"line":2284},[159,43284,43285],{"class":1135},"\u002F\u002F (这两次输出的地址也是不同的) \n",[159,43287,43288],{"class":161,"line":2293},[159,43289,43290],{"class":1135},"\u002F\u002F Person的析构函数调用     \n",[159,43292,43293,43295,43297],{"class":161,"line":2306},[159,43294,27711],{"class":1142},[159,43296,1259],{"class":1146},[159,43298,1492],{"class":165},[159,43300,43301],{"class":161,"line":2330},[159,43302,15685],{"class":165},[14,43304,43305],{},"简化版理解",[151,43307,43309],{"className":23872,"code":43308,"language":23874,"meta":25,"style":25},"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",[49,43310,43311,43319,43323,43329,43342,43353,43357,43369,43382,43390,43394,43410,43423,43432,43436,43441,43447,43460,43464,43468,43475,43479,43483,43488,43496,43500,43516,43529,43542,43546,43551,43559,43563,43567,43572,43577,43593,43601,43608,43614,43618,43622,43627,43635,43639,43643,43666,43673,43677,43681,43689,43693,43703,43725,43729,43733,43737,43745,43749,43754,43759,43765,43769,43779,43783,43791],{"__ignoreMap":25},[159,43312,43313,43315,43317],{"class":161,"line":162},[159,43314,38260],{"class":1142},[159,43316,39132],{"class":185},[159,43318,1478],{"class":165},[159,43320,43321],{"class":161,"line":176},[159,43322,38282],{"class":1142},[159,43324,43325,43327],{"class":161,"line":203},[159,43326,42046],{"class":185},[159,43328,17173],{"class":165},[159,43330,43331,43333,43335,43338,43340],{"class":161,"line":223},[159,43332,33265],{"class":165},[159,43334,24858],{"class":1142},[159,43336,43337],{"class":192}," \"无参构造函数!\"",[159,43339,25123],{"class":1142},[159,43341,32439],{"class":165},[159,43343,43344,43347,43349,43351],{"class":161,"line":233},[159,43345,43346],{"class":165},"        mAge ",[159,43348,189],{"class":1142},[159,43350,1259],{"class":1146},[159,43352,1492],{"class":165},[159,43354,43355],{"class":161,"line":239},[159,43356,1508],{"class":165},[159,43358,43359,43361,43363,43365,43367],{"class":161,"line":245},[159,43360,42046],{"class":185},[159,43362,1159],{"class":165},[159,43364,23886],{"class":1142},[159,43366,16746],{"class":8765},[159,43368,1262],{"class":165},[159,43370,43371,43373,43375,43378,43380],{"class":161,"line":251},[159,43372,33265],{"class":165},[159,43374,24858],{"class":1142},[159,43376,43377],{"class":192}," \"有参构造函数!\"",[159,43379,25123],{"class":1142},[159,43381,32439],{"class":165},[159,43383,43384,43386,43388],{"class":161,"line":261},[159,43385,43346],{"class":165},[159,43387,189],{"class":1142},[159,43389,31407],{"class":165},[159,43391,43392],{"class":161,"line":603},[159,43393,1508],{"class":165},[159,43395,43396,43398,43400,43402,43404,43406,43408],{"class":161,"line":621},[159,43397,42046],{"class":185},[159,43399,1159],{"class":165},[159,43401,18326],{"class":1142},[159,43403,39132],{"class":185},[159,43405,24209],{"class":1142},[159,43407,1704],{"class":8765},[159,43409,1262],{"class":165},[159,43411,43412,43414,43416,43419,43421],{"class":161,"line":634},[159,43413,33265],{"class":165},[159,43415,24858],{"class":1142},[159,43417,43418],{"class":192}," \"拷贝构造函数!\"",[159,43420,25123],{"class":1142},[159,43422,32439],{"class":165},[159,43424,43425,43427,43429],{"class":161,"line":640},[159,43426,43346],{"class":165},[159,43428,189],{"class":1142},[159,43430,43431],{"class":165}," p.mAge;\n",[159,43433,43434],{"class":161,"line":1075},[159,43435,1508],{"class":165},[159,43437,43438],{"class":161,"line":1081},[159,43439,43440],{"class":1135},"    \u002F\u002F析构函数在释放内存之前调用\n",[159,43442,43443,43445],{"class":161,"line":1091},[159,43444,42079],{"class":185},[159,43446,17173],{"class":165},[159,43448,43449,43451,43453,43456,43458],{"class":161,"line":1100},[159,43450,33265],{"class":165},[159,43452,24858],{"class":1142},[159,43454,43455],{"class":192}," \"析构函数!\"",[159,43457,25123],{"class":1142},[159,43459,32439],{"class":165},[159,43461,43462],{"class":161,"line":1123},[159,43463,1508],{"class":165},[159,43465,43466],{"class":161,"line":1132},[159,43467,38282],{"class":1142},[159,43469,43470,43472],{"class":161,"line":1139},[159,43471,25636],{"class":1142},[159,43473,43474],{"class":165}," mAge;\n",[159,43476,43477],{"class":161,"line":1168},[159,43478,27616],{"class":165},[159,43480,43481],{"class":161,"line":1174},[159,43482,590],{"emptyLinePlaceholder":589},[159,43484,43485],{"class":161,"line":1180},[159,43486,43487],{"class":1135},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[159,43489,43490,43492,43494],{"class":161,"line":1194},[159,43491,28979],{"class":1142},[159,43493,29203],{"class":185},[159,43495,17173],{"class":165},[159,43497,43498],{"class":161,"line":1200},[159,43499,590],{"emptyLinePlaceholder":589},[159,43501,43502,43504,43507,43509,43511,43513],{"class":161,"line":1221},[159,43503,42958],{"class":165},[159,43505,43506],{"class":185},"man",[159,43508,1159],{"class":165},[159,43510,1596],{"class":1146},[159,43512,29581],{"class":165},[159,43514,43515],{"class":1135}," \u002F\u002Fp对象已经创建完毕\n",[159,43517,43518,43520,43523,43526],{"class":161,"line":1230},[159,43519,42958],{"class":165},[159,43521,43522],{"class":185},"newman",[159,43524,43525],{"class":165},"(man);",[159,43527,43528],{"class":1135}," \u002F\u002F调用拷贝构造函数\n",[159,43530,43531,43534,43536,43539],{"class":161,"line":1247},[159,43532,43533],{"class":165},"    Person newman2 ",[159,43535,189],{"class":1142},[159,43537,43538],{"class":165}," man;",[159,43540,43541],{"class":1135}," \u002F\u002F拷贝构造\n",[159,43543,43544],{"class":161,"line":1265},[159,43545,590],{"emptyLinePlaceholder":589},[159,43547,43548],{"class":161,"line":1277},[159,43549,43550],{"class":1135},"    \u002F\u002FPerson newman3;\n",[159,43552,43553,43556],{"class":161,"line":1283},[159,43554,43555],{"class":1135},"    \u002F\u002Fnewman3 = man;",[159,43557,43558],{"class":1135}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[159,43560,43561],{"class":161,"line":1294},[159,43562,15685],{"class":165},[159,43564,43565],{"class":161,"line":1305},[159,43566,590],{"emptyLinePlaceholder":589},[159,43568,43569],{"class":161,"line":1311},[159,43570,43571],{"class":1135},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[159,43573,43574],{"class":161,"line":1322},[159,43575,43576],{"class":1135},"\u002F\u002F相当于Person p1 = p;\n",[159,43578,43579,43581,43583,43585,43587,43590],{"class":161,"line":1327},[159,43580,28979],{"class":1142},[159,43582,43013],{"class":185},[159,43584,1159],{"class":165},[159,43586,42573],{"class":185},[159,43588,43589],{"class":8765}," p1",[159,43591,43592],{"class":165},") {}\n",[159,43594,43595,43597,43599],{"class":161,"line":1336},[159,43596,28979],{"class":1142},[159,43598,29272],{"class":185},[159,43600,17173],{"class":165},[159,43602,43603,43605],{"class":161,"line":1345},[159,43604,42131],{"class":165},[159,43606,43607],{"class":1135}," \u002F\u002F无参构造函数\n",[159,43609,43610,43612],{"class":161,"line":1350},[159,43611,43063],{"class":185},[159,43613,43066],{"class":165},[159,43615,43616],{"class":161,"line":1764},[159,43617,15685],{"class":165},[159,43619,43620],{"class":161,"line":1769},[159,43621,590],{"emptyLinePlaceholder":589},[159,43623,43624],{"class":161,"line":1777},[159,43625,43626],{"class":1135},"\u002F\u002F3. 以值方式返回局部对象\n",[159,43628,43629,43631,43633],{"class":161,"line":1788},[159,43630,42573],{"class":185},[159,43632,43082],{"class":185},[159,43634,5158],{"class":165},[159,43636,43637],{"class":161,"line":1802},[159,43638,25222],{"class":165},[159,43640,43641],{"class":161,"line":1815},[159,43642,42563],{"class":165},[159,43644,43645,43647,43649,43651,43653,43655,43657,43659,43662,43664],{"class":161,"line":1828},[159,43646,30142],{"class":165},[159,43648,24858],{"class":1142},[159,43650,11680],{"class":165},[159,43652,23886],{"class":1142},[159,43654,30131],{"class":1142},[159,43656,18387],{"class":165},[159,43658,24209],{"class":1142},[159,43660,43661],{"class":165},"p1 ",[159,43663,24858],{"class":1142},[159,43665,32439],{"class":165},[159,43667,43668,43670],{"class":161,"line":1841},[159,43669,27711],{"class":1142},[159,43671,43672],{"class":165}," p1;\n",[159,43674,43675],{"class":161,"line":1852},[159,43676,15685],{"class":165},[159,43678,43679],{"class":161,"line":1866},[159,43680,590],{"emptyLinePlaceholder":589},[159,43682,43683,43685,43687],{"class":161,"line":1879},[159,43684,28979],{"class":1142},[159,43686,29344],{"class":185},[159,43688,5158],{"class":165},[159,43690,43691],{"class":161,"line":1884},[159,43692,25222],{"class":165},[159,43694,43695,43697,43699,43701],{"class":161,"line":1889},[159,43696,43148],{"class":165},[159,43698,189],{"class":1142},[159,43700,43082],{"class":185},[159,43702,29251],{"class":165},[159,43704,43705,43707,43709,43711,43713,43715,43717,43719,43721,43723],{"class":161,"line":1899},[159,43706,30142],{"class":165},[159,43708,24858],{"class":1142},[159,43710,11680],{"class":165},[159,43712,23886],{"class":1142},[159,43714,30131],{"class":1142},[159,43716,18387],{"class":165},[159,43718,24209],{"class":1142},[159,43720,35020],{"class":165},[159,43722,24858],{"class":1142},[159,43724,32439],{"class":165},[159,43726,43727],{"class":161,"line":1912},[159,43728,15685],{"class":165},[159,43730,43731],{"class":161,"line":1925},[159,43732,590],{"emptyLinePlaceholder":589},[159,43734,43735],{"class":161,"line":1956},[159,43736,590],{"emptyLinePlaceholder":589},[159,43738,43739,43741,43743],{"class":161,"line":1971},[159,43740,23886],{"class":1142},[159,43742,25625],{"class":185},[159,43744,17173],{"class":165},[159,43746,43747],{"class":161,"line":1976},[159,43748,590],{"emptyLinePlaceholder":589},[159,43750,43751],{"class":161,"line":1981},[159,43752,43753],{"class":1135},"    \u002F\u002Ftest01();\n",[159,43755,43756],{"class":161,"line":1989},[159,43757,43758],{"class":1135},"    \u002F\u002Ftest02();\n",[159,43760,43761,43763],{"class":161,"line":2001},[159,43762,43218],{"class":185},[159,43764,29251],{"class":165},[159,43766,43767],{"class":161,"line":2006},[159,43768,590],{"emptyLinePlaceholder":589},[159,43770,43771,43773,43775,43777],{"class":161,"line":2015},[159,43772,25950],{"class":185},[159,43774,1159],{"class":165},[159,43776,25955],{"class":192},[159,43778,1953],{"class":165},[159,43780,43781],{"class":161,"line":2024},[159,43782,590],{"emptyLinePlaceholder":589},[159,43784,43785,43787,43789],{"class":161,"line":2029},[159,43786,27711],{"class":1142},[159,43788,1259],{"class":1146},[159,43790,1492],{"class":165},[159,43792,43793],{"class":161,"line":2038},[159,43794,15685],{"class":165},[42,43796,43798],{"id":43797},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,43800,43801],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,43803,43804],{},"1．默认构造函数(无参，函数体为空)",[14,43806,43807],{},"2．默认析构函数(无参，函数体为空)",[14,43809,43810],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,43812,43813],{},"构造函数调用规则如下：",[103,43815,43816,43819],{},[106,43817,43818],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[106,43820,43821],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[151,43823,43825],{"className":23872,"code":43824,"language":23874,"meta":25,"style":25},"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",[49,43826,43827,43835,43839,43844,43850,43862,43866,43871,43883,43892,43904,43908,43912,43928,43937,43949,43953,43957,43963,43975,43979,43983,43989,43993,43997,44005,44009,44021,44026,44034,44038,44056,44060,44064,44072,44076,44081,44089,44104,44117,44121,44126,44133,44149,44162,44166,44170,44178,44182,44188,44192,44202,44206,44214],{"__ignoreMap":25},[159,43828,43829,43831,43833],{"class":161,"line":162},[159,43830,38260],{"class":1142},[159,43832,39132],{"class":185},[159,43834,1478],{"class":165},[159,43836,43837],{"class":161,"line":176},[159,43838,38282],{"class":1142},[159,43840,43841],{"class":161,"line":203},[159,43842,43843],{"class":1135},"    \u002F\u002F无参（默认）构造函数\n",[159,43845,43846,43848],{"class":161,"line":223},[159,43847,42046],{"class":185},[159,43849,17173],{"class":165},[159,43851,43852,43854,43856,43858,43860],{"class":161,"line":233},[159,43853,33265],{"class":165},[159,43855,24858],{"class":1142},[159,43857,43337],{"class":192},[159,43859,25123],{"class":1142},[159,43861,32439],{"class":165},[159,43863,43864],{"class":161,"line":239},[159,43865,1508],{"class":165},[159,43867,43868],{"class":161,"line":245},[159,43869,43870],{"class":1135},"    \u002F\u002F有参构造函数\n",[159,43872,43873,43875,43877,43879,43881],{"class":161,"line":251},[159,43874,42046],{"class":185},[159,43876,1159],{"class":165},[159,43878,23886],{"class":1142},[159,43880,7885],{"class":8765},[159,43882,1262],{"class":165},[159,43884,43885,43888,43890],{"class":161,"line":261},[159,43886,43887],{"class":165},"        age ",[159,43889,189],{"class":1142},[159,43891,25111],{"class":165},[159,43893,43894,43896,43898,43900,43902],{"class":161,"line":603},[159,43895,33265],{"class":165},[159,43897,24858],{"class":1142},[159,43899,43377],{"class":192},[159,43901,25123],{"class":1142},[159,43903,32439],{"class":165},[159,43905,43906],{"class":161,"line":621},[159,43907,1508],{"class":165},[159,43909,43910],{"class":161,"line":634},[159,43911,42401],{"class":1135},[159,43913,43914,43916,43918,43920,43922,43924,43926],{"class":161,"line":640},[159,43915,42046],{"class":185},[159,43917,1159],{"class":165},[159,43919,18326],{"class":1142},[159,43921,39132],{"class":185},[159,43923,24209],{"class":1142},[159,43925,1704],{"class":8765},[159,43927,1262],{"class":165},[159,43929,43930,43932,43934],{"class":161,"line":1075},[159,43931,43887],{"class":165},[159,43933,189],{"class":1142},[159,43935,43936],{"class":165}," p.age;\n",[159,43938,43939,43941,43943,43945,43947],{"class":161,"line":1081},[159,43940,33265],{"class":165},[159,43942,24858],{"class":1142},[159,43944,43418],{"class":192},[159,43946,25123],{"class":1142},[159,43948,32439],{"class":165},[159,43950,43951],{"class":161,"line":1091},[159,43952,1508],{"class":165},[159,43954,43955],{"class":161,"line":1100},[159,43956,42074],{"class":1135},[159,43958,43959,43961],{"class":161,"line":1123},[159,43960,42079],{"class":185},[159,43962,17173],{"class":165},[159,43964,43965,43967,43969,43971,43973],{"class":161,"line":1132},[159,43966,33265],{"class":165},[159,43968,24858],{"class":1142},[159,43970,43455],{"class":192},[159,43972,25123],{"class":1142},[159,43974,32439],{"class":165},[159,43976,43977],{"class":161,"line":1139},[159,43978,1508],{"class":165},[159,43980,43981],{"class":161,"line":1168},[159,43982,38282],{"class":1142},[159,43984,43985,43987],{"class":161,"line":1174},[159,43986,25636],{"class":1142},[159,43988,31407],{"class":165},[159,43990,43991],{"class":161,"line":1180},[159,43992,27616],{"class":165},[159,43994,43995],{"class":161,"line":1194},[159,43996,590],{"emptyLinePlaceholder":589},[159,43998,43999,44001,44003],{"class":161,"line":1200},[159,44000,28979],{"class":1142},[159,44002,29203],{"class":185},[159,44004,5158],{"class":165},[159,44006,44007],{"class":161,"line":1221},[159,44008,25222],{"class":165},[159,44010,44011,44013,44015,44017,44019],{"class":161,"line":1230},[159,44012,42958],{"class":165},[159,44014,30741],{"class":185},[159,44016,1159],{"class":165},[159,44018,18723],{"class":1146},[159,44020,1953],{"class":165},[159,44022,44023],{"class":161,"line":1247},[159,44024,44025],{"class":1135},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[159,44027,44028,44030,44032],{"class":161,"line":1265},[159,44029,42958],{"class":165},[159,44031,30644],{"class":185},[159,44033,41042],{"class":165},[159,44035,44036],{"class":161,"line":1277},[159,44037,590],{"emptyLinePlaceholder":589},[159,44039,44040,44042,44044,44047,44049,44052,44054],{"class":161,"line":1283},[159,44041,30142],{"class":165},[159,44043,24858],{"class":1142},[159,44045,44046],{"class":192}," \"p2的年龄为： \"",[159,44048,25123],{"class":1142},[159,44050,44051],{"class":165}," p2.age ",[159,44053,24858],{"class":1142},[159,44055,32439],{"class":165},[159,44057,44058],{"class":161,"line":1294},[159,44059,15685],{"class":165},[159,44061,44062],{"class":161,"line":1305},[159,44063,590],{"emptyLinePlaceholder":589},[159,44065,44066,44068,44070],{"class":161,"line":1311},[159,44067,28979],{"class":1142},[159,44069,29272],{"class":185},[159,44071,5158],{"class":165},[159,44073,44074],{"class":161,"line":1322},[159,44075,25222],{"class":165},[159,44077,44078],{"class":161,"line":1327},[159,44079,44080],{"class":1135},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[159,44082,44083,44086],{"class":161,"line":1336},[159,44084,44085],{"class":165},"    Person p1;",[159,44087,44088],{"class":1135}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[159,44090,44091,44093,44095,44097,44099,44101],{"class":161,"line":1345},[159,44092,42958],{"class":165},[159,44094,30644],{"class":185},[159,44096,1159],{"class":165},[159,44098,1964],{"class":1146},[159,44100,29581],{"class":165},[159,44102,44103],{"class":1135}," \u002F\u002F用户提供的有参\n",[159,44105,44106,44108,44111,44114],{"class":161,"line":1350},[159,44107,42958],{"class":165},[159,44109,44110],{"class":185},"p3",[159,44112,44113],{"class":165},"(p2);",[159,44115,44116],{"class":1135}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[159,44118,44119],{"class":161,"line":1764},[159,44120,590],{"emptyLinePlaceholder":589},[159,44122,44123],{"class":161,"line":1769},[159,44124,44125],{"class":1135},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[159,44127,44128,44131],{"class":161,"line":1777},[159,44129,44130],{"class":165},"    Person p4;",[159,44132,44088],{"class":1135},[159,44134,44135,44137,44140,44142,44144,44146],{"class":161,"line":1788},[159,44136,42958],{"class":165},[159,44138,44139],{"class":185},"p5",[159,44141,1159],{"class":165},[159,44143,1964],{"class":1146},[159,44145,29581],{"class":165},[159,44147,44148],{"class":1135}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[159,44150,44151,44153,44156,44159],{"class":161,"line":1802},[159,44152,42958],{"class":165},[159,44154,44155],{"class":185},"p6",[159,44157,44158],{"class":165},"(p5);",[159,44160,44161],{"class":1135}," \u002F\u002F用户自己提供拷贝构造\n",[159,44163,44164],{"class":161,"line":1815},[159,44165,15685],{"class":165},[159,44167,44168],{"class":161,"line":1828},[159,44169,590],{"emptyLinePlaceholder":589},[159,44171,44172,44174,44176],{"class":161,"line":1841},[159,44173,23886],{"class":1142},[159,44175,25625],{"class":185},[159,44177,17173],{"class":165},[159,44179,44180],{"class":161,"line":1852},[159,44181,590],{"emptyLinePlaceholder":589},[159,44183,44184,44186],{"class":161,"line":1866},[159,44185,29248],{"class":185},[159,44187,29251],{"class":165},[159,44189,44190],{"class":161,"line":1879},[159,44191,590],{"emptyLinePlaceholder":589},[159,44193,44194,44196,44198,44200],{"class":161,"line":1884},[159,44195,25950],{"class":185},[159,44197,1159],{"class":165},[159,44199,25955],{"class":192},[159,44201,1953],{"class":165},[159,44203,44204],{"class":161,"line":1889},[159,44205,590],{"emptyLinePlaceholder":589},[159,44207,44208,44210,44212],{"class":161,"line":1899},[159,44209,27711],{"class":1142},[159,44211,1259],{"class":1146},[159,44213,1492],{"class":165},[159,44215,44216],{"class":161,"line":1912},[159,44217,15685],{"class":165},[42,44219,44221],{"id":44220},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,44223,44224],{},"浅拷贝：简单的赋值拷贝操作",[14,44226,44227],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[151,44229,44231],{"className":23872,"code":44230,"language":23874,"meta":25,"style":25},"#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",[49,44232,44233,44239,44249,44255,44259,44263,44268,44274,44278,44291,44295,44299,44306,44310,44320,44335,44348,44352,44357,44362,44378,44382,44395,44400,44405,44410,44419,44424,44439,44443,44447,44451,44457,44461,44466,44481,44485,44496,44510,44514,44523,44527,44533,44545,44549,44557,44561,44578,44609,44617,44645,44649,44653,44661,44665,44671],{"__ignoreMap":25},[159,44234,44235,44237],{"class":161,"line":162},[159,44236,25602],{"class":1142},[159,44238,25605],{"class":192},[159,44240,44241,44243,44245,44247],{"class":161,"line":176},[159,44242,25610],{"class":1142},[159,44244,25613],{"class":1142},[159,44246,25616],{"class":185},[159,44248,1492],{"class":165},[159,44250,44251,44253],{"class":161,"line":203},[159,44252,38260],{"class":1142},[159,44254,38734],{"class":185},[159,44256,44257],{"class":161,"line":223},[159,44258,25222],{"class":165},[159,44260,44261],{"class":161,"line":233},[159,44262,38282],{"class":1142},[159,44264,44265],{"class":161,"line":239},[159,44266,44267],{"class":1135},"    \u002F\u002F默认构造函数\n",[159,44269,44270,44272],{"class":161,"line":245},[159,44271,42046],{"class":185},[159,44273,5158],{"class":165},[159,44275,44276],{"class":161,"line":251},[159,44277,25681],{"class":165},[159,44279,44280,44282,44284,44287,44289],{"class":161,"line":261},[159,44281,27080],{"class":165},[159,44283,24858],{"class":1142},[159,44285,44286],{"class":192},"\"默认构造函数\"",[159,44288,24858],{"class":1142},[159,44290,24880],{"class":165},[159,44292,44293],{"class":161,"line":603},[159,44294,1508],{"class":165},[159,44296,44297],{"class":161,"line":621},[159,44298,43870],{"class":1135},[159,44300,44301,44303],{"class":161,"line":634},[159,44302,42079],{"class":185},[159,44304,44305],{"class":165},"(int age,int height)\n",[159,44307,44308],{"class":161,"line":640},[159,44309,25681],{"class":165},[159,44311,44312,44315,44317],{"class":161,"line":1075},[159,44313,44314],{"class":165},"        m_Age",[159,44316,189],{"class":1142},[159,44318,44319],{"class":165},"age;\n",[159,44321,44322,44325,44327,44329,44332],{"class":161,"line":1081},[159,44323,44324],{"class":165},"        m_Height",[159,44326,35288],{"class":1142},[159,44328,26029],{"class":1142},[159,44330,44331],{"class":165},"(height);",[159,44333,44334],{"class":1135},"\u002F\u002F放到堆区\n",[159,44336,44337,44339,44341,44344,44346],{"class":161,"line":1091},[159,44338,27080],{"class":165},[159,44340,24858],{"class":1142},[159,44342,44343],{"class":192},"\"有参构造函数\"",[159,44345,24858],{"class":1142},[159,44347,24880],{"class":165},[159,44349,44350],{"class":161,"line":1100},[159,44351,1508],{"class":165},[159,44353,44354],{"class":161,"line":1123},[159,44355,44356],{"class":1135},"    \u002F\u002F深拷贝解决上述问题\n",[159,44358,44359],{"class":161,"line":1132},[159,44360,44361],{"class":1135},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[159,44363,44364,44366,44368,44370,44372,44374,44376],{"class":161,"line":1139},[159,44365,42046],{"class":185},[159,44367,1159],{"class":165},[159,44369,18326],{"class":1142},[159,44371,39132],{"class":185},[159,44373,34159],{"class":1142},[159,44375,14],{"class":8765},[159,44377,1165],{"class":165},[159,44379,44380],{"class":161,"line":1168},[159,44381,25681],{"class":165},[159,44383,44384,44386,44388,44391,44393],{"class":161,"line":1174},[159,44385,27080],{"class":165},[159,44387,24858],{"class":1142},[159,44389,44390],{"class":192},"\"拷贝构造函数\"",[159,44392,24858],{"class":1142},[159,44394,24880],{"class":165},[159,44396,44397],{"class":161,"line":1180},[159,44398,44399],{"class":1135},"        \u002F\u002F编译器默认的写如下注释部分\n",[159,44401,44402],{"class":161,"line":1194},[159,44403,44404],{"class":1135},"        \u002F\u002Fm_Age=p.m_Age;\n",[159,44406,44407],{"class":161,"line":1200},[159,44408,44409],{"class":1135},"        \u002F\u002Fm_Height=p.m_Height;\n",[159,44411,44412,44414,44416],{"class":161,"line":1221},[159,44413,44314],{"class":165},[159,44415,189],{"class":1142},[159,44417,44418],{"class":165},"p.m_Age;\n",[159,44420,44421],{"class":161,"line":1230},[159,44422,44423],{"class":1135},"        \u002F\u002F深拷贝操作\n",[159,44425,44426,44428,44430,44432,44434,44436],{"class":161,"line":1247},[159,44427,44324],{"class":165},[159,44429,35288],{"class":1142},[159,44431,26029],{"class":1142},[159,44433,1159],{"class":165},[159,44435,4777],{"class":1142},[159,44437,44438],{"class":165},"p.m_Height);\n",[159,44440,44441],{"class":161,"line":1265},[159,44442,1508],{"class":165},[159,44444,44445],{"class":161,"line":1277},[159,44446,590],{"emptyLinePlaceholder":589},[159,44448,44449],{"class":161,"line":1283},[159,44450,42074],{"class":1135},[159,44452,44453,44455],{"class":161,"line":1294},[159,44454,42079],{"class":185},[159,44456,5158],{"class":165},[159,44458,44459],{"class":161,"line":1305},[159,44460,25681],{"class":165},[159,44462,44463],{"class":161,"line":1311},[159,44464,44465],{"class":1135},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[159,44467,44468,44470,44473,44476,44479],{"class":161,"line":1322},[159,44469,17003],{"class":1142},[159,44471,44472],{"class":165},"(m_Height ",[159,44474,44475],{"class":1142},"!=",[159,44477,44478],{"class":1146}," NULL",[159,44480,1165],{"class":165},[159,44482,44483],{"class":161,"line":1327},[159,44484,26153],{"class":165},[159,44486,44487,44490,44493],{"class":161,"line":1336},[159,44488,44489],{"class":1142},"            delete",[159,44491,44492],{"class":165}," m_Height;",[159,44494,44495],{"class":1135}," \u002F\u002F释放堆区内存\n",[159,44497,44498,44501,44503,44505,44507],{"class":161,"line":1345},[159,44499,44500],{"class":165},"            m_Height",[159,44502,189],{"class":1142},[159,44504,26038],{"class":1146},[159,44506,23934],{"class":165},[159,44508,44509],{"class":1135}," \u002F\u002F防止野指针\n",[159,44511,44512],{"class":161,"line":1350},[159,44513,7530],{"class":165},[159,44515,44516,44518,44520],{"class":161,"line":1764},[159,44517,27080],{"class":165},[159,44519,24858],{"class":1142},[159,44521,44522],{"class":192},"\"Person的析构函数调用\"\n",[159,44524,44525],{"class":161,"line":1769},[159,44526,1508],{"class":165},[159,44528,44529,44531],{"class":161,"line":1777},[159,44530,25636],{"class":1142},[159,44532,39228],{"class":165},[159,44534,44535,44537,44539,44542],{"class":161,"line":1788},[159,44536,25636],{"class":1142},[159,44538,30131],{"class":1142},[159,44540,44541],{"class":165},"m_Height;",[159,44543,44544],{"class":1135}," \u002F\u002F定义一个指针，指向身高\n",[159,44546,44547],{"class":161,"line":1802},[159,44548,27616],{"class":165},[159,44550,44551,44553,44555],{"class":161,"line":1815},[159,44552,28979],{"class":1142},[159,44554,29203],{"class":185},[159,44556,5158],{"class":165},[159,44558,44559],{"class":161,"line":1828},[159,44560,25222],{"class":165},[159,44562,44563,44565,44567,44569,44571,44573,44576],{"class":161,"line":1841},[159,44564,42958],{"class":165},[159,44566,30741],{"class":185},[159,44568,1159],{"class":165},[159,44570,18723],{"class":1146},[159,44572,24233],{"class":165},[159,44574,44575],{"class":1146},"160",[159,44577,1953],{"class":165},[159,44579,44580,44582,44584,44587,44589,44592,44594,44597,44599,44602,44604,44606],{"class":161,"line":1852},[159,44581,25227],{"class":165},[159,44583,24858],{"class":1142},[159,44585,44586],{"class":192},"\"p1的年龄为:\"",[159,44588,24858],{"class":1142},[159,44590,44591],{"class":165},"p1.m_Age",[159,44593,24858],{"class":1142},[159,44595,44596],{"class":192},"\"身高为：\"",[159,44598,30032],{"class":1142},[159,44600,44601],{"class":165},"p1.m_Height",[159,44603,24858],{"class":1142},[159,44605,24923],{"class":165},[159,44607,44608],{"class":1135},"  \u002F\u002F18\n",[159,44610,44611,44613,44615],{"class":161,"line":1866},[159,44612,42958],{"class":165},[159,44614,30644],{"class":185},[159,44616,41042],{"class":165},[159,44618,44619,44621,44623,44626,44628,44630,44632,44634,44636,44639,44641,44643],{"class":161,"line":1879},[159,44620,25227],{"class":165},[159,44622,24858],{"class":1142},[159,44624,44625],{"class":192},"\"p2的年龄为：\"",[159,44627,24858],{"class":1142},[159,44629,42988],{"class":165},[159,44631,24858],{"class":1142},[159,44633,44596],{"class":192},[159,44635,30032],{"class":1142},[159,44637,44638],{"class":165},"p2.m_Height",[159,44640,24858],{"class":1142},[159,44642,24923],{"class":165},[159,44644,44608],{"class":1135},[159,44646,44647],{"class":161,"line":1884},[159,44648,36778],{"class":165},[159,44650,44651],{"class":161,"line":1889},[159,44652,15685],{"class":165},[159,44654,44655,44657,44659],{"class":161,"line":1899},[159,44656,23886],{"class":1142},[159,44658,25625],{"class":185},[159,44660,5158],{"class":165},[159,44662,44663],{"class":161,"line":1912},[159,44664,25222],{"class":165},[159,44666,44667,44669],{"class":161,"line":1925},[159,44668,29248],{"class":185},[159,44670,29251],{"class":165},[159,44672,44673],{"class":161,"line":1956},[159,44674,15685],{"class":165},[14,44676,44677],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,44679,44680],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,44682,44683],{},[23,44684],{"alt":25,"src":44685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,44687,44688],{},"浅拷贝问题要使用深拷贝来解决",[14,44690,44691],{},[23,44692],{"alt":25,"src":44693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,44695,44696],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[42,44698,44700],{"id":44699},"_826初始化列表","8.2.6初始化列表",[14,44702,44703],{},"作用：初始化属性",[14,44705,28799],{},[151,44707,44710],{"className":44708,"code":44709,"language":8507},[28803],"构造函数():属性1(值1),属性2(值2).....{}\n",[49,44711,44709],{"__ignoreMap":25},[14,44713,44714],{},"例子",[151,44716,44718],{"className":23872,"code":44717,"language":23874,"meta":25,"style":25},"#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",[49,44719,44720,44726,44736,44742,44746,44751,44755,44760,44765,44770,44775,44780,44785,44789,44794,44799,44842,44851,44869,44887,44905,44909,44913,44920,44927,44934,44938,44942,44950,44954,44958,44978,44987,44991,44995,45005,45009,45017],{"__ignoreMap":25},[159,44721,44722,44724],{"class":161,"line":162},[159,44723,25602],{"class":1142},[159,44725,25605],{"class":192},[159,44727,44728,44730,44732,44734],{"class":161,"line":176},[159,44729,25610],{"class":1142},[159,44731,25613],{"class":1142},[159,44733,25616],{"class":185},[159,44735,1492],{"class":165},[159,44737,44738,44740],{"class":161,"line":203},[159,44739,38260],{"class":1142},[159,44741,38734],{"class":185},[159,44743,44744],{"class":161,"line":223},[159,44745,25222],{"class":165},[159,44747,44748],{"class":161,"line":233},[159,44749,44750],{"class":1142},"    public:\n",[159,44752,44753],{"class":161,"line":239},[159,44754,590],{"emptyLinePlaceholder":589},[159,44756,44757],{"class":161,"line":245},[159,44758,44759],{"class":1135},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[159,44761,44762],{"class":161,"line":251},[159,44763,44764],{"class":1135},"    \u002F\u002FPerson(int a, int b, int c) {\n",[159,44766,44767],{"class":161,"line":261},[159,44768,44769],{"class":1135},"    \u002F\u002F  m_A = a;\n",[159,44771,44772],{"class":161,"line":603},[159,44773,44774],{"class":1135},"    \u002F\u002F  m_B = b;\n",[159,44776,44777],{"class":161,"line":621},[159,44778,44779],{"class":1135},"    \u002F\u002F  m_C = c;\n",[159,44781,44782],{"class":161,"line":634},[159,44783,44784],{"class":1135},"    \u002F\u002F}\n",[159,44786,44787],{"class":161,"line":640},[159,44788,590],{"emptyLinePlaceholder":589},[159,44790,44791],{"class":161,"line":1075},[159,44792,44793],{"class":1135},"    \u002F\u002F初始化列表方式初始化\n",[159,44795,44796],{"class":161,"line":1081},[159,44797,44798],{"class":1135},"    \u002F\u002F使用有参构造函数\n",[159,44800,44801,44803,44805,44807,44809,44811,44813,44815,44817,44819,44821,44824,44827,44830,44833,44836,44839],{"class":161,"line":1091},[159,44802,42046],{"class":185},[159,44804,1159],{"class":165},[159,44806,23886],{"class":1142},[159,44808,7885],{"class":8765},[159,44810,1939],{"class":165},[159,44812,23886],{"class":1142},[159,44814,26465],{"class":8765},[159,44816,1939],{"class":165},[159,44818,23886],{"class":1142},[159,44820,26481],{"class":8765},[159,44822,44823],{"class":165},") :",[159,44825,44826],{"class":185},"m_A",[159,44828,44829],{"class":165},"(a), ",[159,44831,44832],{"class":185},"m_B",[159,44834,44835],{"class":165},"(b), ",[159,44837,44838],{"class":185},"m_C",[159,44840,44841],{"class":165},"(c) {}\n",[159,44843,44844,44846,44849],{"class":161,"line":1100},[159,44845,38474],{"class":1142},[159,44847,44848],{"class":185}," PrintPerson",[159,44850,17173],{"class":165},[159,44852,44853,44855,44857,44860,44862,44865,44867],{"class":161,"line":1123},[159,44854,33265],{"class":165},[159,44856,24858],{"class":1142},[159,44858,44859],{"class":192}," \"mA:\"",[159,44861,25123],{"class":1142},[159,44863,44864],{"class":165}," m_A ",[159,44866,24858],{"class":1142},[159,44868,32439],{"class":165},[159,44870,44871,44873,44875,44878,44880,44883,44885],{"class":161,"line":1132},[159,44872,33265],{"class":165},[159,44874,24858],{"class":1142},[159,44876,44877],{"class":192}," \"mB:\"",[159,44879,25123],{"class":1142},[159,44881,44882],{"class":165}," m_B ",[159,44884,24858],{"class":1142},[159,44886,32439],{"class":165},[159,44888,44889,44891,44893,44896,44898,44901,44903],{"class":161,"line":1139},[159,44890,33265],{"class":165},[159,44892,24858],{"class":1142},[159,44894,44895],{"class":192}," \"mC:\"",[159,44897,25123],{"class":1142},[159,44899,44900],{"class":165}," m_C ",[159,44902,24858],{"class":1142},[159,44904,32439],{"class":165},[159,44906,44907],{"class":161,"line":1168},[159,44908,1508],{"class":165},[159,44910,44911],{"class":161,"line":1174},[159,44912,38785],{"class":1142},[159,44914,44915,44917],{"class":161,"line":1180},[159,44916,25636],{"class":1142},[159,44918,44919],{"class":165}," m_A;\n",[159,44921,44922,44924],{"class":161,"line":1194},[159,44923,25636],{"class":1142},[159,44925,44926],{"class":165}," m_B;\n",[159,44928,44929,44931],{"class":161,"line":1200},[159,44930,25636],{"class":1142},[159,44932,44933],{"class":165}," m_C;\n",[159,44935,44936],{"class":161,"line":1221},[159,44937,27616],{"class":165},[159,44939,44940],{"class":161,"line":1230},[159,44941,590],{"emptyLinePlaceholder":589},[159,44943,44944,44946,44948],{"class":161,"line":1247},[159,44945,23886],{"class":1142},[159,44947,25625],{"class":185},[159,44949,29593],{"class":165},[159,44951,44952],{"class":161,"line":1265},[159,44953,25222],{"class":165},[159,44955,44956],{"class":161,"line":1277},[159,44957,590],{"emptyLinePlaceholder":589},[159,44959,44960,44962,44964,44966,44968,44970,44972,44974,44976],{"class":161,"line":1283},[159,44961,42958],{"class":165},[159,44963,14],{"class":185},[159,44965,1159],{"class":165},[159,44967,4932],{"class":1146},[159,44969,1939],{"class":165},[159,44971,11034],{"class":1146},[159,44973,1939],{"class":165},[159,44975,23949],{"class":1146},[159,44977,1953],{"class":165},[159,44979,44980,44982,44985],{"class":161,"line":1294},[159,44981,39427],{"class":165},[159,44983,44984],{"class":185},"PrintPerson",[159,44986,29251],{"class":165},[159,44988,44989],{"class":161,"line":1305},[159,44990,590],{"emptyLinePlaceholder":589},[159,44992,44993],{"class":161,"line":1311},[159,44994,590],{"emptyLinePlaceholder":589},[159,44996,44997,44999,45001,45003],{"class":161,"line":1322},[159,44998,25950],{"class":185},[159,45000,1159],{"class":165},[159,45002,25955],{"class":192},[159,45004,1953],{"class":165},[159,45006,45007],{"class":161,"line":1327},[159,45008,590],{"emptyLinePlaceholder":589},[159,45010,45011,45013,45015],{"class":161,"line":1336},[159,45012,27711],{"class":1142},[159,45014,1259],{"class":1146},[159,45016,1492],{"class":165},[159,45018,45019],{"class":161,"line":1345},[159,45020,15685],{"class":165},[14,45022,45023,45024,45027,45028],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[61,45025,45026],{},"参数名就是定义的对象属性","，",[61,45029,45030],{},"属性后面的值为有参构造函数的形参",[151,45032,45034],{"className":23872,"code":45033,"language":23874,"meta":25,"style":25},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[49,45035,45036],{"__ignoreMap":25},[159,45037,45038,45040,45042,45044,45047,45049,45052,45054,45057,45059,45062,45064,45067,45069],{"class":161,"line":162},[159,45039,42573],{"class":185},[159,45041,1159],{"class":165},[159,45043,23886],{"class":1142},[159,45045,45046],{"class":165}," a.",[159,45048,23886],{"class":1142},[159,45050,45051],{"class":165}," b,",[159,45053,23886],{"class":1142},[159,45055,45056],{"class":165}," b):",[159,45058,44826],{"class":185},[159,45060,45061],{"class":165},"(a),",[159,45063,44832],{"class":185},[159,45065,45066],{"class":165},"(c),",[159,45068,44838],{"class":185},[159,45070,45071],{"class":165},"(b) {}\n",[42,45073,45075],{"id":45074},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,45077,45078],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,45080,38199],{},[151,45082,45084],{"className":23872,"code":45083,"language":23874,"meta":25,"style":25},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[49,45085,45086,45091,45096,45100,45105,45109],{"__ignoreMap":25},[159,45087,45088],{"class":161,"line":162},[159,45089,45090],{"class":165},"A{};\n",[159,45092,45093],{"class":161,"line":176},[159,45094,45095],{"class":165},"B\n",[159,45097,45098],{"class":161,"line":203},[159,45099,25222],{"class":165},[159,45101,45102],{"class":161,"line":223},[159,45103,45104],{"class":165},"    A a;\n",[159,45106,45107],{"class":161,"line":233},[159,45108,15685],{"class":165},[159,45110,45111],{"class":161,"line":239},[159,45112,45113],{"class":1135},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,45115,45116],{},"案例",[151,45118,45120],{"className":23872,"code":45119,"language":23874,"meta":25,"style":25},"\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",[49,45121,45122,45127,45134,45138,45143,45148,45162,45166,45176,45187,45191,45198,45202,45215,45219,45224,45229,45233,45239,45243,45247,45251,45282,45286,45297,45301,45307,45311,45324,45328,45332,45336,45341,45346,45350,45358,45362,45379,45398,45402,45410,45414,45420],{"__ignoreMap":25},[159,45123,45124],{"class":161,"line":162},[159,45125,45126],{"class":1135},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[159,45128,45129,45131],{"class":161,"line":176},[159,45130,38260],{"class":1142},[159,45132,45133],{"class":185}," Phone\n",[159,45135,45136],{"class":161,"line":203},[159,45137,25222],{"class":165},[159,45139,45140],{"class":161,"line":223},[159,45141,45142],{"class":165},"public：\n",[159,45144,45145],{"class":161,"line":233},[159,45146,45147],{"class":1135},"    \u002F\u002F 赋值(构造函数)\n",[159,45149,45150,45153,45155,45157,45160],{"class":161,"line":239},[159,45151,45152],{"class":185},"    Phone",[159,45154,1159],{"class":165},[159,45156,38482],{"class":185},[159,45158,45159],{"class":8765}," pName",[159,45161,1165],{"class":165},[159,45163,45164],{"class":161,"line":245},[159,45165,25681],{"class":165},[159,45167,45168,45171,45173],{"class":161,"line":251},[159,45169,45170],{"class":165},"        m_pName",[159,45172,189],{"class":1142},[159,45174,45175],{"class":165},"pName;\n",[159,45177,45178,45180,45182,45185],{"class":161,"line":261},[159,45179,27080],{"class":165},[159,45181,24858],{"class":1142},[159,45183,45184],{"class":192},"\"Phone的构造函数调用\"",[159,45186,1492],{"class":165},[159,45188,45189],{"class":161,"line":603},[159,45190,1508],{"class":165},[159,45192,45193,45196],{"class":161,"line":621},[159,45194,45195],{"class":185},"    ~Phone",[159,45197,5158],{"class":165},[159,45199,45200],{"class":161,"line":634},[159,45201,25681],{"class":165},[159,45203,45204,45206,45208,45211,45213],{"class":161,"line":640},[159,45205,27080],{"class":165},[159,45207,24858],{"class":1142},[159,45209,45210],{"class":192},"\"Phone析构函数调用\"",[159,45212,24858],{"class":1142},[159,45214,24880],{"class":165},[159,45216,45217],{"class":161,"line":1075},[159,45218,1508],{"class":165},[159,45220,45221],{"class":161,"line":1081},[159,45222,45223],{"class":1135},"    \u002F\u002F\n",[159,45225,45226],{"class":161,"line":1091},[159,45227,45228],{"class":165},"    string m_PName;\n",[159,45230,45231],{"class":161,"line":1100},[159,45232,27616],{"class":165},[159,45234,45235,45237],{"class":161,"line":1123},[159,45236,38260],{"class":1142},[159,45238,38734],{"class":185},[159,45240,45241],{"class":161,"line":1132},[159,45242,25222],{"class":165},[159,45244,45245],{"class":161,"line":1139},[159,45246,38282],{"class":1142},[159,45248,45249],{"class":161,"line":1168},[159,45250,40522],{"class":1135},[159,45252,45253,45255,45257,45259,45261,45263,45265,45268,45271,45273,45276,45279],{"class":161,"line":1174},[159,45254,42046],{"class":185},[159,45256,1159],{"class":165},[159,45258,38482],{"class":185},[159,45260,547],{"class":8765},[159,45262,24233],{"class":165},[159,45264,38482],{"class":185},[159,45266,45267],{"class":8765}," pname",[159,45269,45270],{"class":165},"):",[159,45272,38573],{"class":185},[159,45274,45275],{"class":165},"(name),m_phone.",[159,45277,45278],{"class":185},"m_PName",[159,45280,45281],{"class":165},"(pname) \n",[159,45283,45284],{"class":161,"line":1180},[159,45285,25681],{"class":165},[159,45287,45288,45290,45292,45295],{"class":161,"line":1194},[159,45289,27080],{"class":165},[159,45291,24858],{"class":1142},[159,45293,45294],{"class":192},"\"Person的构造函数调用\"",[159,45296,1492],{"class":165},[159,45298,45299],{"class":161,"line":1200},[159,45300,1508],{"class":165},[159,45302,45303,45305],{"class":161,"line":1221},[159,45304,42079],{"class":185},[159,45306,5158],{"class":165},[159,45308,45309],{"class":161,"line":1230},[159,45310,25681],{"class":165},[159,45312,45313,45315,45317,45320,45322],{"class":161,"line":1247},[159,45314,27080],{"class":165},[159,45316,24858],{"class":1142},[159,45318,45319],{"class":192},"\"Person析构函数调用\"",[159,45321,24858],{"class":1142},[159,45323,24880],{"class":165},[159,45325,45326],{"class":161,"line":1265},[159,45327,1508],{"class":165},[159,45329,45330],{"class":161,"line":1277},[159,45331,31390],{"class":1135},[159,45333,45334],{"class":161,"line":1283},[159,45335,38457],{"class":165},[159,45337,45338],{"class":161,"line":1294},[159,45339,45340],{"class":1135},"    \u002F\u002F手机\n",[159,45342,45343],{"class":161,"line":1305},[159,45344,45345],{"class":165},"    Phone m_Phone;\n",[159,45347,45348],{"class":161,"line":1311},[159,45349,27616],{"class":165},[159,45351,45352,45354,45356],{"class":161,"line":1322},[159,45353,28979],{"class":1142},[159,45355,29203],{"class":185},[159,45357,5158],{"class":165},[159,45359,45360],{"class":161,"line":1327},[159,45361,25222],{"class":165},[159,45363,45364,45366,45368,45370,45372,45374,45377],{"class":161,"line":1336},[159,45365,42958],{"class":165},[159,45367,14],{"class":185},[159,45369,1159],{"class":165},[159,45371,31526],{"class":192},[159,45373,24233],{"class":165},[159,45375,45376],{"class":192},"\"安卓\"",[159,45378,1953],{"class":165},[159,45380,45381,45383,45385,45388,45390,45393,45395],{"class":161,"line":1345},[159,45382,25227],{"class":165},[159,45384,24858],{"class":1142},[159,45386,45387],{"class":165},"p.Name",[159,45389,24858],{"class":1142},[159,45391,45392],{"class":192},"\"拿着：\"",[159,45394,24858],{"class":1142},[159,45396,45397],{"class":165},"p.m_phone.m_PName;\n",[159,45399,45400],{"class":161,"line":1350},[159,45401,15685],{"class":165},[159,45403,45404,45406,45408],{"class":161,"line":1764},[159,45405,23886],{"class":1142},[159,45407,25625],{"class":185},[159,45409,5158],{"class":165},[159,45411,45412],{"class":161,"line":1769},[159,45413,25222],{"class":165},[159,45415,45416,45418],{"class":161,"line":1777},[159,45417,29248],{"class":185},[159,45419,29251],{"class":165},[159,45421,45422],{"class":161,"line":1788},[159,45423,15685],{"class":165},[14,45425,32623],{},[151,45427,45429],{"className":23872,"code":45428,"language":23874,"meta":25,"style":25},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[49,45430,45431,45436],{"__ignoreMap":25},[159,45432,45433],{"class":161,"line":162},[159,45434,45435],{"class":1135},"    \u002F\u002F不需要写这个：\n",[159,45437,45438],{"class":161,"line":176},[159,45439,45440],{"class":1135},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,45442,45443],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[151,45445,45447],{"className":23872,"code":45446,"language":23874,"meta":25,"style":25},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[49,45448,45449],{"__ignoreMap":25},[159,45450,45451,45453,45456,45458,45461,45464],{"class":161,"line":162},[159,45452,42573],{"class":185},[159,45454,45455],{"class":165},"(string name.string pname):",[159,45457,38573],{"class":185},[159,45459,45460],{"class":165},"(name),",[159,45462,45463],{"class":185},"m_phone",[159,45465,45466],{"class":165},"(pname) {}\n",[14,45468,45469,45470,189,45473],{},"采用的是隐式转换法，实际为如下：\n",[49,45471,45472],{},"m_phone(pname)",[49,45474,45475],{},"Phone m_phone=pname",[14,45477,45478,45481],{},[61,45479,45480],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,45483,45484],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[42,45486,45488],{"id":45487},"_828静态对象","8.2.8静态对象",[14,45490,45491],{},"静态对象在成员对象前static，称为静态对象",[14,45493,45494],{},"静态对象分为两类：",[134,45496,45497],{},[106,45498,45499],{},"静态成员变量",[103,45501,45502,45505,45508],{},[106,45503,45504],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[106,45506,45507],{},"②在编译阶段分配内存",[106,45509,45510],{},"③类内声明，类外初始化",[134,45512,45513],{"start":176},[106,45514,45515],{},"静态成员函数",[103,45517,45518,45521],{},[106,45519,45520],{},"①所有对象共享同一个函数",[106,45522,45523],{},"②静态成员函数只能访问静态成员变量",[326,45525,45527],{"id":45526},"_8281静态成员变量","8.2.8.1静态成员变量",[151,45529,45531],{"className":23872,"code":45530,"language":23874,"meta":25,"style":25},"#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",[49,45532,45533,45539,45549,45555,45559,45563,45568,45573,45578,45586,45590,45594,45598,45606,45610,45614,45619,45632,45636,45644,45648,45654],{"__ignoreMap":25},[159,45534,45535,45537],{"class":161,"line":162},[159,45536,25602],{"class":1142},[159,45538,25605],{"class":192},[159,45540,45541,45543,45545,45547],{"class":161,"line":176},[159,45542,25610],{"class":1142},[159,45544,25613],{"class":1142},[159,45546,25616],{"class":185},[159,45548,1492],{"class":165},[159,45550,45551,45553],{"class":161,"line":203},[159,45552,38260],{"class":1142},[159,45554,38734],{"class":185},[159,45556,45557],{"class":161,"line":223},[159,45558,25222],{"class":165},[159,45560,45561],{"class":161,"line":233},[159,45562,38282],{"class":1142},[159,45564,45565],{"class":161,"line":239},[159,45566,45567],{"class":1135},"    \u002F\u002F非静态成员变量\n",[159,45569,45570],{"class":161,"line":245},[159,45571,45572],{"class":1135},"    \u002F\u002F int m_A;\n",[159,45574,45575],{"class":161,"line":251},[159,45576,45577],{"class":1135},"    \u002F\u002F定义静态成员变量\n",[159,45579,45580,45582,45584],{"class":161,"line":261},[159,45581,34594],{"class":1142},[159,45583,26029],{"class":1142},[159,45585,44919],{"class":165},[159,45587,45588],{"class":161,"line":603},[159,45589,590],{"emptyLinePlaceholder":589},[159,45591,45592],{"class":161,"line":621},[159,45593,590],{"emptyLinePlaceholder":589},[159,45595,45596],{"class":161,"line":634},[159,45597,27616],{"class":165},[159,45599,45600,45602,45604],{"class":161,"line":640},[159,45601,28979],{"class":1142},[159,45603,29203],{"class":185},[159,45605,5158],{"class":165},[159,45607,45608],{"class":161,"line":1075},[159,45609,25222],{"class":165},[159,45611,45612],{"class":161,"line":1081},[159,45613,38876],{"class":165},[159,45615,45616],{"class":161,"line":1091},[159,45617,45618],{"class":1135},"    \u002F\u002F输出类成员变量这块内存\n",[159,45620,45621,45623,45625,45628,45630],{"class":161,"line":1100},[159,45622,25227],{"class":165},[159,45624,24858],{"class":1142},[159,45626,45627],{"class":165},"p.m_A",[159,45629,24858],{"class":1142},[159,45631,24880],{"class":165},[159,45633,45634],{"class":161,"line":1123},[159,45635,15685],{"class":165},[159,45637,45638,45640,45642],{"class":161,"line":1132},[159,45639,23886],{"class":1142},[159,45641,25625],{"class":185},[159,45643,5158],{"class":165},[159,45645,45646],{"class":161,"line":1139},[159,45647,25222],{"class":165},[159,45649,45650,45652],{"class":161,"line":1168},[159,45651,29248],{"class":185},[159,45653,5158],{"class":165},[159,45655,45656],{"class":161,"line":1174},[159,45657,15685],{"class":165},[14,45659,45660],{},"此时输出是报错的：无法解析外部命令",[14,45662,45663],{},"解决这一问题：必须用到类内声明，类外初始化操作",[151,45665,45667],{"className":23872,"code":45666,"language":23874,"meta":25,"style":25},"#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",[49,45668,45669,45675,45685,45691,45695,45699,45704,45712,45716,45721,45736,45744,45748,45752,45757,45762,45774,45779,45790,45795,45800,45813,45817,45825,45829,45835],{"__ignoreMap":25},[159,45670,45671,45673],{"class":161,"line":162},[159,45672,25602],{"class":1142},[159,45674,25605],{"class":192},[159,45676,45677,45679,45681,45683],{"class":161,"line":176},[159,45678,25610],{"class":1142},[159,45680,25613],{"class":1142},[159,45682,25616],{"class":185},[159,45684,1492],{"class":165},[159,45686,45687,45689],{"class":161,"line":203},[159,45688,38260],{"class":1142},[159,45690,38734],{"class":185},[159,45692,45693],{"class":161,"line":223},[159,45694,25222],{"class":165},[159,45696,45697],{"class":161,"line":233},[159,45698,38282],{"class":1142},[159,45700,45701],{"class":161,"line":239},[159,45702,45703],{"class":1135},"    \u002F\u002F类内声明\n",[159,45705,45706,45708,45710],{"class":161,"line":245},[159,45707,34594],{"class":1142},[159,45709,26029],{"class":1142},[159,45711,44919],{"class":165},[159,45713,45714],{"class":161,"line":251},[159,45715,27616],{"class":165},[159,45717,45718],{"class":161,"line":261},[159,45719,45720],{"class":1135},"\u002F\u002F类外初始化\n",[159,45722,45723,45725,45727,45730,45732,45734],{"class":161,"line":603},[159,45724,23886],{"class":1142},[159,45726,39132],{"class":185},[159,45728,45729],{"class":165},"::m_A",[159,45731,189],{"class":1142},[159,45733,1964],{"class":1146},[159,45735,1492],{"class":165},[159,45737,45738,45740,45742],{"class":161,"line":621},[159,45739,28979],{"class":1142},[159,45741,29203],{"class":185},[159,45743,5158],{"class":165},[159,45745,45746],{"class":161,"line":634},[159,45747,25222],{"class":165},[159,45749,45750],{"class":161,"line":640},[159,45751,38876],{"class":165},[159,45753,45754],{"class":161,"line":1075},[159,45755,45756],{"class":1135},"    \u002F\u002F访问变量的原内存空间\n",[159,45758,45759],{"class":161,"line":1081},[159,45760,45761],{"class":1135},"    \u002F\u002F100\n",[159,45763,45764,45766,45768,45770,45772],{"class":161,"line":1091},[159,45765,25227],{"class":165},[159,45767,24858],{"class":1142},[159,45769,45627],{"class":165},[159,45771,24858],{"class":1142},[159,45773,24880],{"class":165},[159,45775,45776],{"class":161,"line":1100},[159,45777,45778],{"class":165},"    Person p2;\n",[159,45780,45781,45784,45786,45788],{"class":161,"line":1123},[159,45782,45783],{"class":165},"    p2.m_A",[159,45785,189],{"class":1142},[159,45787,13303],{"class":1146},[159,45789,1492],{"class":165},[159,45791,45792],{"class":161,"line":1132},[159,45793,45794],{"class":1135},"    \u002F\u002F继续访问这片空间\n",[159,45796,45797],{"class":161,"line":1139},[159,45798,45799],{"class":1135},"    \u002F\u002F200\n",[159,45801,45802,45804,45806,45809,45811],{"class":161,"line":1168},[159,45803,25227],{"class":165},[159,45805,24858],{"class":1142},[159,45807,45808],{"class":165},"p2.m_A",[159,45810,24858],{"class":1142},[159,45812,24880],{"class":165},[159,45814,45815],{"class":161,"line":1174},[159,45816,15685],{"class":165},[159,45818,45819,45821,45823],{"class":161,"line":1180},[159,45820,23886],{"class":1142},[159,45822,25625],{"class":185},[159,45824,5158],{"class":165},[159,45826,45827],{"class":161,"line":1194},[159,45828,25222],{"class":165},[159,45830,45831,45833],{"class":161,"line":1200},[159,45832,29248],{"class":185},[159,45834,29251],{"class":165},[159,45836,45837],{"class":161,"line":1221},[159,45838,15685],{"class":165},[14,45840,45841],{},[61,45842,45843],{},"静态变量的访问",[151,45845,45847],{"className":23872,"code":45846,"language":23874,"meta":25,"style":25},"#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",[49,45848,45849,45855,45865,45871,45875,45879,45883,45891,45895,45900,45908,45912,45916,45930,45945,45953,45957,45962,45967,45972,45977,45989,45994,45999,46013,46030,46034,46042,46046,46052],{"__ignoreMap":25},[159,45850,45851,45853],{"class":161,"line":162},[159,45852,25602],{"class":1142},[159,45854,25605],{"class":192},[159,45856,45857,45859,45861,45863],{"class":161,"line":176},[159,45858,25610],{"class":1142},[159,45860,25613],{"class":1142},[159,45862,25616],{"class":185},[159,45864,1492],{"class":165},[159,45866,45867,45869],{"class":161,"line":203},[159,45868,38260],{"class":1142},[159,45870,38734],{"class":185},[159,45872,45873],{"class":161,"line":223},[159,45874,25222],{"class":165},[159,45876,45877],{"class":161,"line":233},[159,45878,38282],{"class":1142},[159,45880,45881],{"class":161,"line":239},[159,45882,45703],{"class":1135},[159,45884,45885,45887,45889],{"class":161,"line":245},[159,45886,34594],{"class":1142},[159,45888,26029],{"class":1142},[159,45890,44919],{"class":165},[159,45892,45893],{"class":161,"line":251},[159,45894,38785],{"class":1142},[159,45896,45897],{"class":161,"line":261},[159,45898,45899],{"class":1135},"    \u002F\u002F静态成员变量也是有访问权限的\n",[159,45901,45902,45904,45906],{"class":161,"line":603},[159,45903,34594],{"class":1142},[159,45905,26029],{"class":1142},[159,45907,44926],{"class":165},[159,45909,45910],{"class":161,"line":621},[159,45911,27616],{"class":165},[159,45913,45914],{"class":161,"line":634},[159,45915,45720],{"class":1135},[159,45917,45918,45920,45922,45924,45926,45928],{"class":161,"line":640},[159,45919,23886],{"class":1142},[159,45921,39132],{"class":185},[159,45923,45729],{"class":165},[159,45925,189],{"class":1142},[159,45927,1964],{"class":1146},[159,45929,1492],{"class":165},[159,45931,45932,45934,45936,45939,45941,45943],{"class":161,"line":1075},[159,45933,23886],{"class":1142},[159,45935,39132],{"class":185},[159,45937,45938],{"class":165},"::m_B",[159,45940,189],{"class":1142},[159,45942,1739],{"class":1146},[159,45944,1492],{"class":165},[159,45946,45947,45949,45951],{"class":161,"line":1081},[159,45948,28979],{"class":1142},[159,45950,29272],{"class":185},[159,45952,5158],{"class":165},[159,45954,45955],{"class":161,"line":1091},[159,45956,25222],{"class":165},[159,45958,45959],{"class":161,"line":1100},[159,45960,45961],{"class":1135},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[159,45963,45964],{"class":161,"line":1123},[159,45965,45966],{"class":1135},"    \u002F\u002F静态成员变量有两种访问方式：\n",[159,45968,45969],{"class":161,"line":1132},[159,45970,45971],{"class":1135},"    \u002F\u002F1.通过对象进行访问\n",[159,45973,45974],{"class":161,"line":1139},[159,45975,45976],{"class":165},"    Person p;  \n",[159,45978,45979,45981,45983,45985,45987],{"class":161,"line":1168},[159,45980,25227],{"class":165},[159,45982,24858],{"class":1142},[159,45984,45627],{"class":165},[159,45986,24858],{"class":1142},[159,45988,24880],{"class":165},[159,45990,45991],{"class":161,"line":1174},[159,45992,45993],{"class":1135},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[159,45995,45996],{"class":161,"line":1180},[159,45997,45998],{"class":1135},"    \u002F\u002F2.通过类名进行访问\n",[159,46000,46001,46003,46005,46007,46009,46011],{"class":161,"line":1194},[159,46002,25227],{"class":165},[159,46004,24858],{"class":1142},[159,46006,42573],{"class":185},[159,46008,45729],{"class":165},[159,46010,24858],{"class":1142},[159,46012,24880],{"class":165},[159,46014,46015,46017,46019,46021,46023,46025,46027],{"class":161,"line":1200},[159,46016,25227],{"class":165},[159,46018,24858],{"class":1142},[159,46020,42573],{"class":185},[159,46022,45938],{"class":165},[159,46024,24858],{"class":1142},[159,46026,24923],{"class":165},[159,46028,46029],{"class":1135}," \u002F\u002F没有访问权限，报错\n",[159,46031,46032],{"class":161,"line":1221},[159,46033,15685],{"class":165},[159,46035,46036,46038,46040],{"class":161,"line":1230},[159,46037,23886],{"class":1142},[159,46039,25625],{"class":185},[159,46041,5158],{"class":165},[159,46043,46044],{"class":161,"line":1247},[159,46045,25222],{"class":165},[159,46047,46048,46050],{"class":161,"line":1265},[159,46049,29317],{"class":185},[159,46051,29251],{"class":165},[159,46053,46054],{"class":161,"line":1277},[159,46055,15685],{"class":165},[326,46057,46059],{"id":46058},"_8282静态成员函数","8.2.8.2静态成员函数",[14,46061,46062],{},"1.静态成员函数定义与访问",[151,46064,46066],{"className":23872,"code":46065,"language":23874,"meta":25,"style":25},"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",[49,46067,46068,46074,46078,46082,46087,46098,46102,46116,46120,46124,46132,46136,46141,46146,46150,46158,46163,46173],{"__ignoreMap":25},[159,46069,46070,46072],{"class":161,"line":162},[159,46071,38260],{"class":1142},[159,46073,38734],{"class":185},[159,46075,46076],{"class":161,"line":176},[159,46077,25222],{"class":165},[159,46079,46080],{"class":161,"line":203},[159,46081,38282],{"class":1142},[159,46083,46084],{"class":161,"line":223},[159,46085,46086],{"class":1135},"    \u002F\u002F在公共权限下定义静态成员函数\n",[159,46088,46089,46091,46094,46096],{"class":161,"line":233},[159,46090,34594],{"class":1142},[159,46092,46093],{"class":1142}," void",[159,46095,34957],{"class":185},[159,46097,5158],{"class":165},[159,46099,46100],{"class":161,"line":239},[159,46101,25681],{"class":165},[159,46103,46104,46107,46109,46112,46114],{"class":161,"line":245},[159,46105,46106],{"class":165},"        coout",[159,46108,24858],{"class":1142},[159,46110,46111],{"class":192},"\"静态成员函数的调用\"",[159,46113,24858],{"class":1142},[159,46115,24880],{"class":165},[159,46117,46118],{"class":161,"line":251},[159,46119,1508],{"class":165},[159,46121,46122],{"class":161,"line":261},[159,46123,27616],{"class":165},[159,46125,46126,46128,46130],{"class":161,"line":603},[159,46127,28979],{"class":1142},[159,46129,29203],{"class":185},[159,46131,5158],{"class":165},[159,46133,46134],{"class":161,"line":621},[159,46135,25222],{"class":165},[159,46137,46138],{"class":161,"line":634},[159,46139,46140],{"class":1135},"    \u002F\u002F静态成员函数的调用方式:\n",[159,46142,46143],{"class":161,"line":640},[159,46144,46145],{"class":1135},"    \u002F\u002F1.通过对象访问\n",[159,46147,46148],{"class":161,"line":1075},[159,46149,38876],{"class":165},[159,46151,46152,46154,46156],{"class":161,"line":1081},[159,46153,39427],{"class":165},[159,46155,35123],{"class":185},[159,46157,29251],{"class":165},[159,46159,46160],{"class":161,"line":1091},[159,46161,46162],{"class":1135},"    \u002F\u002F2.通过类名访问\n",[159,46164,46165,46167,46169,46171],{"class":161,"line":1100},[159,46166,42046],{"class":185},[159,46168,41259],{"class":165},[159,46170,35123],{"class":185},[159,46172,29251],{"class":165},[159,46174,46175],{"class":161,"line":1123},[159,46176,15685],{"class":165},[134,46178,46179],{"start":176},[106,46180,46181],{},"静态成员函数只能访问静态成员变量",[151,46183,46185],{"className":23872,"code":46184,"language":23874,"meta":25,"style":25},"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",[49,46186,46187,46193,46197,46201,46205,46215,46219,46233,46238,46250,46254,46265,46275,46279,46283,46287,46297,46301,46314,46318,46322,46326,46330,46344,46352,46356,46360,46364,46368,46376,46380,46390,46395,46399,46407,46411,46417],{"__ignoreMap":25},[159,46188,46189,46191],{"class":161,"line":162},[159,46190,38260],{"class":1142},[159,46192,38734],{"class":185},[159,46194,46195],{"class":161,"line":176},[159,46196,25222],{"class":165},[159,46198,46199],{"class":161,"line":203},[159,46200,38282],{"class":1142},[159,46202,46203],{"class":161,"line":223},[159,46204,46086],{"class":1135},[159,46206,46207,46209,46211,46213],{"class":161,"line":233},[159,46208,34594],{"class":1142},[159,46210,46093],{"class":1142},[159,46212,34957],{"class":185},[159,46214,5158],{"class":165},[159,46216,46217],{"class":161,"line":239},[159,46218,25681],{"class":165},[159,46220,46221,46224,46226,46228,46230],{"class":161,"line":245},[159,46222,46223],{"class":165},"        m_A",[159,46225,189],{"class":1142},[159,46227,1596],{"class":1146},[159,46229,23934],{"class":165},[159,46231,46232],{"class":1135}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[159,46234,46235],{"class":161,"line":251},[159,46236,46237],{"class":1135},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[159,46239,46240,46242,46244,46246,46248],{"class":161,"line":261},[159,46241,46106],{"class":165},[159,46243,24858],{"class":1142},[159,46245,46111],{"class":192},[159,46247,24858],{"class":1142},[159,46249,24880],{"class":165},[159,46251,46252],{"class":161,"line":603},[159,46253,1508],{"class":165},[159,46255,46256,46258,46260,46262],{"class":161,"line":621},[159,46257,34594],{"class":1142},[159,46259,26029],{"class":1142},[159,46261,39011],{"class":165},[159,46263,46264],{"class":1135}," \u002F\u002F静态成员变量\n",[159,46266,46267,46269,46272],{"class":161,"line":634},[159,46268,25636],{"class":1142},[159,46270,46271],{"class":165}," m_B;",[159,46273,46274],{"class":1135}," \u002F\u002F非静态成员变量\n",[159,46276,46277],{"class":161,"line":640},[159,46278,590],{"emptyLinePlaceholder":589},[159,46280,46281],{"class":161,"line":1075},[159,46282,38785],{"class":1142},[159,46284,46285],{"class":161,"line":1081},[159,46286,45899],{"class":1135},[159,46288,46289,46291,46293,46295],{"class":161,"line":1091},[159,46290,34594],{"class":1142},[159,46292,46093],{"class":1142},[159,46294,37185],{"class":185},[159,46296,5158],{"class":165},[159,46298,46299],{"class":161,"line":1100},[159,46300,25681],{"class":165},[159,46302,46303,46305,46307,46310,46312],{"class":161,"line":1123},[159,46304,27080],{"class":165},[159,46306,24858],{"class":1142},[159,46308,46309],{"class":192},"\"这是私有权限下的静态函数调用\"",[159,46311,24858],{"class":1142},[159,46313,24880],{"class":165},[159,46315,46316],{"class":161,"line":1132},[159,46317,1508],{"class":165},[159,46319,46320],{"class":161,"line":1139},[159,46321,590],{"emptyLinePlaceholder":589},[159,46323,46324],{"class":161,"line":1168},[159,46325,590],{"emptyLinePlaceholder":589},[159,46327,46328],{"class":161,"line":1174},[159,46329,27616],{"class":165},[159,46331,46332,46334,46336,46338,46340,46342],{"class":161,"line":1180},[159,46333,23886],{"class":1142},[159,46335,39132],{"class":185},[159,46337,45729],{"class":165},[159,46339,189],{"class":1142},[159,46341,1489],{"class":1146},[159,46343,1492],{"class":165},[159,46345,46346,46348,46350],{"class":161,"line":1194},[159,46347,28979],{"class":1142},[159,46349,29203],{"class":185},[159,46351,5158],{"class":165},[159,46353,46354],{"class":161,"line":1200},[159,46355,25222],{"class":165},[159,46357,46358],{"class":161,"line":1221},[159,46359,46140],{"class":1135},[159,46361,46362],{"class":161,"line":1230},[159,46363,46145],{"class":1135},[159,46365,46366],{"class":161,"line":1247},[159,46367,38876],{"class":165},[159,46369,46370,46372,46374],{"class":161,"line":1265},[159,46371,39427],{"class":165},[159,46373,35123],{"class":185},[159,46375,29251],{"class":165},[159,46377,46378],{"class":161,"line":1277},[159,46379,46162],{"class":1135},[159,46381,46382,46384,46386,46388],{"class":161,"line":1283},[159,46383,42046],{"class":185},[159,46385,41259],{"class":165},[159,46387,35123],{"class":185},[159,46389,29251],{"class":165},[159,46391,46392],{"class":161,"line":1294},[159,46393,46394],{"class":1135},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[159,46396,46397],{"class":161,"line":1305},[159,46398,15685],{"class":165},[159,46400,46401,46403,46405],{"class":161,"line":1311},[159,46402,23886],{"class":1142},[159,46404,25625],{"class":185},[159,46406,5158],{"class":165},[159,46408,46409],{"class":161,"line":1322},[159,46410,25222],{"class":165},[159,46412,46413,46415],{"class":161,"line":1327},[159,46414,29248],{"class":185},[159,46416,29251],{"class":165},[159,46418,46419],{"class":161,"line":1336},[159,46420,15685],{"class":165},[42,46422,46424],{"id":46423},"_83c对象模型和this指针","8.3C++对象模型和this指针",[326,46426,46428],{"id":46427},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,46430,46431],{},"在c++中，类内的成员变量和成员函数分开存储",[14,46433,46434],{},"只有非静态成员变量才属于类的对象上",[46436,46437,46439],"h5",{"id":46438},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[151,46441,46443],{"className":23872,"code":46442,"language":23874,"meta":25,"style":25},"#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",[49,46444,46445,46452,46462,46468,46472,46476,46480,46488,46492,46496,46519,46523,46531,46535,46541],{"__ignoreMap":25},[159,46446,46447,46449],{"class":161,"line":162},[159,46448,25602],{"class":1142},[159,46450,46451],{"class":192},"\u003Ciostraem>\n",[159,46453,46454,46456,46458,46460],{"class":161,"line":176},[159,46455,25610],{"class":1142},[159,46457,25613],{"class":1142},[159,46459,25616],{"class":185},[159,46461,1492],{"class":165},[159,46463,46464,46466],{"class":161,"line":203},[159,46465,38260],{"class":1142},[159,46467,38734],{"class":185},[159,46469,46470],{"class":161,"line":223},[159,46471,25222],{"class":165},[159,46473,46474],{"class":161,"line":233},[159,46475,590],{"emptyLinePlaceholder":589},[159,46477,46478],{"class":161,"line":239},[159,46479,27616],{"class":165},[159,46481,46482,46484,46486],{"class":161,"line":245},[159,46483,28979],{"class":1142},[159,46485,29203],{"class":185},[159,46487,5158],{"class":165},[159,46489,46490],{"class":161,"line":251},[159,46491,25222],{"class":165},[159,46493,46494],{"class":161,"line":261},[159,46495,38876],{"class":165},[159,46497,46498,46500,46502,46505,46507,46510,46512,46514,46516],{"class":161,"line":603},[159,46499,25227],{"class":165},[159,46501,24858],{"class":1142},[159,46503,46504],{"class":192},"\"size of p=\"",[159,46506,24858],{"class":1142},[159,46508,46509],{"class":185},"sizeoif",[159,46511,30152],{"class":165},[159,46513,24858],{"class":1142},[159,46515,24923],{"class":165},[159,46517,46518],{"class":1135}," \u002F\u002F查看这个空类的占用的内存空间\n",[159,46520,46521],{"class":161,"line":621},[159,46522,15685],{"class":165},[159,46524,46525,46527,46529],{"class":161,"line":634},[159,46526,23886],{"class":1142},[159,46528,25625],{"class":185},[159,46530,5158],{"class":165},[159,46532,46533],{"class":161,"line":640},[159,46534,25222],{"class":165},[159,46536,46537,46539],{"class":161,"line":1075},[159,46538,29248],{"class":185},[159,46540,29251],{"class":165},[159,46542,46543],{"class":161,"line":1081},[159,46544,15685],{"class":165},[14,46546,46547],{},"输出结果为：size of p=1",[14,46549,46550],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,46552,46553],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[46436,46555,46557],{"id":46556},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[151,46559,46561],{"className":23872,"code":46560,"language":23874,"meta":25,"style":25},"#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",[49,46562,46563,46569,46579,46587,46591,46600,46604,46612,46616,46620,46639,46643,46647,46655,46659,46665],{"__ignoreMap":25},[159,46564,46565,46567],{"class":161,"line":162},[159,46566,25602],{"class":1142},[159,46568,25605],{"class":192},[159,46570,46571,46573,46575,46577],{"class":161,"line":176},[159,46572,25610],{"class":1142},[159,46574,25613],{"class":1142},[159,46576,25616],{"class":185},[159,46578,1492],{"class":165},[159,46580,46581,46583,46585],{"class":161,"line":203},[159,46582,38260],{"class":1142},[159,46584,39132],{"class":185},[159,46586,17636],{"class":165},[159,46588,46589],{"class":161,"line":223},[159,46590,25222],{"class":165},[159,46592,46593,46595,46597],{"class":161,"line":233},[159,46594,25636],{"class":1142},[159,46596,39011],{"class":165},[159,46598,46599],{"class":1135},"\u002F\u002F非静态成员变量\n",[159,46601,46602],{"class":161,"line":239},[159,46603,27616],{"class":165},[159,46605,46606,46608,46610],{"class":161,"line":245},[159,46607,28979],{"class":1142},[159,46609,29203],{"class":185},[159,46611,5158],{"class":165},[159,46613,46614],{"class":161,"line":251},[159,46615,25222],{"class":165},[159,46617,46618],{"class":161,"line":261},[159,46619,38876],{"class":165},[159,46621,46622,46624,46626,46628,46630,46632,46634,46636],{"class":161,"line":603},[159,46623,25227],{"class":165},[159,46625,24858],{"class":1142},[159,46627,46504],{"class":192},[159,46629,25052],{"class":1142},[159,46631,30152],{"class":165},[159,46633,24858],{"class":1142},[159,46635,24923],{"class":165},[159,46637,46638],{"class":1135}," \u002F\u002F查看不是空对象时占用多少内存\n",[159,46640,46641],{"class":161,"line":621},[159,46642,590],{"emptyLinePlaceholder":589},[159,46644,46645],{"class":161,"line":634},[159,46646,15685],{"class":165},[159,46648,46649,46651,46653],{"class":161,"line":640},[159,46650,23886],{"class":1142},[159,46652,25625],{"class":185},[159,46654,5158],{"class":165},[159,46656,46657],{"class":161,"line":1075},[159,46658,25222],{"class":165},[159,46660,46661,46663],{"class":161,"line":1081},[159,46662,29248],{"class":185},[159,46664,29251],{"class":165},[159,46666,46667],{"class":161,"line":1091},[159,46668,15685],{"class":165},[14,46670,46671],{},"输出结果：size of p=4",[14,46673,46674],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[134,46676,46677],{},[106,46678,46679],{},"如果加上非静态成员变量，Person类修改如下",[151,46681,46683],{"className":23872,"code":46682,"language":23874,"meta":25,"style":25},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[49,46684,46685,46691,46695,46701,46709,46713,46718],{"__ignoreMap":25},[159,46686,46687,46689],{"class":161,"line":162},[159,46688,38260],{"class":1142},[159,46690,38734],{"class":185},[159,46692,46693],{"class":161,"line":176},[159,46694,25222],{"class":165},[159,46696,46697,46699],{"class":161,"line":203},[159,46698,25636],{"class":1142},[159,46700,44919],{"class":165},[159,46702,46703,46705,46707],{"class":161,"line":223},[159,46704,34594],{"class":1142},[159,46706,26029],{"class":1142},[159,46708,44926],{"class":165},[159,46710,46711],{"class":161,"line":233},[159,46712,27616],{"class":165},[159,46714,46715],{"class":161,"line":239},[159,46716,46717],{"class":1135},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[159,46719,46720,46722,46724,46726,46728,46730],{"class":161,"line":245},[159,46721,23886],{"class":1142},[159,46723,39132],{"class":185},[159,46725,45938],{"class":165},[159,46727,189],{"class":1142},[159,46729,1489],{"class":1146},[159,46731,1492],{"class":165},[14,46733,46734],{},"输出结果：4",[14,46736,46737],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[134,46739,46740],{"start":176},[106,46741,46742],{},"加上非静态成员函数",[151,46744,46746],{"className":23872,"code":46745,"language":23874,"meta":25,"style":25},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[49,46747,46748,46755,46759,46765,46773,46777,46781,46785],{"__ignoreMap":25},[159,46749,46750,46752],{"class":161,"line":162},[159,46751,38260],{"class":1142},[159,46753,46754],{"class":185},"  Person\n",[159,46756,46757],{"class":161,"line":176},[159,46758,25222],{"class":165},[159,46760,46761,46763],{"class":161,"line":203},[159,46762,25636],{"class":1142},[159,46764,44919],{"class":165},[159,46766,46767,46769,46771],{"class":161,"line":223},[159,46768,38474],{"class":1142},[159,46770,34957],{"class":185},[159,46772,5158],{"class":165},[159,46774,46775],{"class":161,"line":233},[159,46776,25681],{"class":165},[159,46778,46779],{"class":161,"line":239},[159,46780,590],{"emptyLinePlaceholder":589},[159,46782,46783],{"class":161,"line":245},[159,46784,1508],{"class":165},[159,46786,46787],{"class":161,"line":251},[159,46788,27616],{"class":165},[14,46790,46791],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[134,46793,46794],{"start":203},[106,46795,46796],{},"加上静态成员函数",[151,46798,46800],{"className":23872,"code":46799,"language":23874,"meta":25,"style":25},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[49,46801,46802,46808,46812,46818,46826,46830,46834,46838,46849,46853,46857,46861],{"__ignoreMap":25},[159,46803,46804,46806],{"class":161,"line":162},[159,46805,38260],{"class":1142},[159,46807,46754],{"class":185},[159,46809,46810],{"class":161,"line":176},[159,46811,25222],{"class":165},[159,46813,46814,46816],{"class":161,"line":203},[159,46815,25636],{"class":1142},[159,46817,44919],{"class":165},[159,46819,46820,46822,46824],{"class":161,"line":223},[159,46821,38474],{"class":1142},[159,46823,34957],{"class":185},[159,46825,5158],{"class":165},[159,46827,46828],{"class":161,"line":233},[159,46829,25681],{"class":165},[159,46831,46832],{"class":161,"line":239},[159,46833,590],{"emptyLinePlaceholder":589},[159,46835,46836],{"class":161,"line":245},[159,46837,1508],{"class":165},[159,46839,46840,46842,46844,46847],{"class":161,"line":251},[159,46841,34594],{"class":1142},[159,46843,46093],{"class":1142},[159,46845,46846],{"class":185}," func1",[159,46848,5158],{"class":165},[159,46850,46851],{"class":161,"line":261},[159,46852,25681],{"class":165},[159,46854,46855],{"class":161,"line":603},[159,46856,590],{"emptyLinePlaceholder":589},[159,46858,46859],{"class":161,"line":621},[159,46860,1508],{"class":165},[159,46862,46863],{"class":161,"line":634},[159,46864,27616],{"class":165},[14,46866,46734],{},[14,46868,46869],{},"解释：静态成员函数也不属于类上",[1468,46871,31284],{},{"title":25,"searchDepth":176,"depth":176,"links":46873},[46874,46880],{"id":38211,"depth":176,"text":38212,"children":46875},[46876,46877,46878,46879],{"id":38215,"depth":203,"text":38216},{"id":38937,"depth":203,"text":38938},{"id":39109,"depth":203,"text":39110},{"id":39566,"depth":203,"text":39567},{"id":41904,"depth":176,"text":41905,"children":46881},[46882,46883,46884,46885,46886,46887,46888,46889,46890],{"id":41916,"depth":203,"text":41917},{"id":42209,"depth":203,"text":42210},{"id":42700,"depth":203,"text":42701},{"id":43797,"depth":203,"text":43798},{"id":44220,"depth":203,"text":44221},{"id":44699,"depth":203,"text":44700},{"id":45074,"depth":203,"text":45075},{"id":45487,"depth":203,"text":45488},{"id":46423,"depth":203,"text":46424},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":38176,"description":46891},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":46898,"title":23874,"body":46899,"description":23809,"extension":23810,"meta":46903,"navigation":589,"path":46905,"seo":46906,"stem":46907,"__hash__":46908},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":46900,"toc":46901},[],{"title":25,"searchDepth":176,"depth":176,"links":46902},[],{"category":46904},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":23874,"description":23809},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":46910,"title":46911,"body":46912,"description":25,"extension":23810,"meta":47501,"navigation":589,"path":47502,"seo":47503,"stem":47504,"__hash__":47505},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":46913,"toc":47483},[46914,46917,46921,46924,46927,46930,46948,46953,46956,46959,46962,46965,46970,46973,46978,46981,46984,46988,46991,46994,47000,47003,47021,47025,47029,47032,47037,47040,47044,47047,47060,47063,47067,47070,47073,47076,47101,47104,47113,47124,47139,47171,47175,47182,47190,47194,47197,47200,47205,47209,47212,47215,47220,47223,47227,47230,47233,47238,47241,47245,47250,47254,47320,47324,47327,47330,47333,47336,47339,47345,47366,47369,47383,47391,47395,47398,47401,47406,47409,47414,47419,47422,47425,47430,47435,47438,47443,47448,47451,47456,47461,47464,47467,47472,47475,47480],[10,46915,46911],{"id":46916},"_1强化学习基本认识",[37,46918,46920],{"id":46919},"_11什么是强化学习","1.1.什么是强化学习",[14,46922,46923],{},"强化学习有两部分组成：智能体和环境；",[14,46925,46926],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,46928,46929],{},"强化学习与监督学习的区别:",[134,46931,46932,46935,46938,46941],{},[106,46933,46934],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[106,46936,46937],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[106,46939,46940],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[106,46942,46943,46944,46947],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[61,46945,46946],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,46949,46950],{},[23,46951],{"alt":25,"src":46952},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,46954,46955],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,46957,46958],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,46960,46961],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,46963,46964],{},"获取奖励",[14,46966,46967],{},[23,46968],{"alt":25,"src":46969},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,46971,46972],{},"强化学习可以分成标准强化学习和深度强化学习",[14,46974,46975],{},[23,46976],{"alt":25,"src":46977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,46979,46980],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,46982,46983],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[37,46985,46987],{"id":46986},"_12强化学习应用场景","1.2.强化学习应用场景",[14,46989,46990],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,46992,46993],{},"具身智能中的应用",[14,46995,46996,46999],{},[61,46997,46998],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,47001,47002],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,47004,47005,47006,47009,47010,47013,47014,47017,47018],{},"机器人是",[61,47007,47008],{},"躯体","，深度学习是",[61,47011,47012],{},"神经元****网络","，VLA是",[61,47015,47016],{},"通用的行为逻辑","，而强化学习是",[61,47019,47020],{},"教练",[37,47022,47024],{"id":47023},"_13序列决策","1.3.序列决策",[42,47026,47028],{"id":47027},"_131智能体与环境","1.3.1.智能体与环境",[14,47030,47031],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,47033,47034],{},[23,47035],{"alt":25,"src":47036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,47038,47039],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[42,47041,47043],{"id":47042},"_132奖励","1.3.2.奖励",[14,47045,47046],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,47048,47049,47050,47059],{},"取某个策略的表现如何。强化学习的目的就是",[61,47051,47052,47053,47058],{},"最大化",[61,47054,47055],{},[61,47056,47057],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,47061,47062],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[42,47064,47066],{"id":47065},"_133序列决策","1.3.3.序列决策",[14,47068,47069],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,47071,47072],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,47074,47075],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,47077,47078,47082,47083,47085,47086,47088,47089,47091,47092,37361,47095,37361,47098],{},[47079,47080,47081],"em",{},"Ht"," = ",[47079,47084,24434],{},"1*, a",[47079,47087,4932],{},", r",[47079,47090,4932],{},", . . . ,* ",[47079,47093,47094],{},"ot",[47079,47096,47097],{},", at ,",[47079,47099,47100],{},"rt",[14,47102,47103],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,47105,47106,47082,47109,11680,47111,18387],{},[47079,47107,47108],{},"st",[47079,47110,23931],{},[47079,47112,47081],{},[14,47114,47115,47116,47119,47120,47123],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[61,47117,47118],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[61,47121,47122],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,47125,47126,47127,47130,47131,47134,47135,47138],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[61,47128,47129],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[61,47132,47133],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[47079,47136,47137],{},"S, A, T, R, Ω, O, γ",")。",[14,47140,47141,47142,47144,47145,47147,47148,1159,47150,47153,47154,47156,47157,1159,47160,47163,47164,47166,47167,47170],{},"其中 ",[47079,47143,24523],{}," 表示状态空间，为隐变量，",[47079,47146,24097],{}," 为动作空间，",[47079,47149,24546],{},[47079,47151,47152],{},"s ′ |s, a",") 为状态转移概率，",[47079,47155,24498],{}," 为奖励函数，",[47079,47158,47159],{},"Ω",[47079,47161,47162],{},"o|s, a",") 为观测概率，",[47079,47165,24429],{}," 为观测空间，",[47079,47168,47169],{},"γ"," 为折扣因子。",[37,47172,47174],{"id":47173},"_14动作空间","1.4.动作空间",[14,47176,47177,47178,47181],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[61,47179,47180],{},"动作空间"," ，动作空间分为:",[134,47183,47184,47187],{},[106,47185,47186],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[106,47188,47189],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[37,47191,47193],{"id":47192},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,47195,47196],{},"由策略、价值函数、模型三部分组成",[14,47198,47199],{},"这三者组成马尔可夫决策过程",[14,47201,47202],{},[23,47203],{"alt":25,"src":47204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[42,47206,47208],{"id":47207},"_151策略","1.5.1.策略",[14,47210,47211],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,47213,47214],{},"策略可分为两种：",[14,47216,47217],{},[23,47218],{"alt":25,"src":47219},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,47221,47222],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[42,47224,47226],{"id":47225},"_152价值函数","1.5.2.价值函数",[14,47228,47229],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,47231,47232],{},"价值函数中有一个折扣因子，类似于存款利息",[14,47234,47235],{},[23,47236],{"alt":25,"src":47237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,47239,47240],{},"进入某个状态采取的最优动作可以通过Q函数得到",[42,47242,47244],{"id":47243},"_153模型","1.5.3.模型",[14,47246,47247],{},[23,47248],{"alt":25,"src":47249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[37,47251,47253],{"id":47252},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[12347,47255,47256,47266],{},[16500,47257,47258],{},[12356,47259,47260,47263],{},[12365,47261,47262],{"align":19854},"类型",[12365,47264,47265],{"align":19854},"特点",[16624,47267,47268,47278,47288,47298,47310],{},[12356,47269,47270,47275],{},[12488,47271,47272],{"align":19854},[61,47273,47274],{},"基于价值的智能体",[12488,47276,47277],{"align":19854},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[12356,47279,47280,47285],{},[12488,47281,47282],{"align":19854},[61,47283,47284],{},"基于策略的智能体",[12488,47286,47287],{"align":19854},"直接学习策略，没有学习价值函数",[12356,47289,47290,47295],{},[12488,47291,47292],{"align":19854},[61,47293,47294],{},"演员-评论员智能体",[12488,47296,47297],{"align":19854},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[12356,47299,47300,47305],{},[12488,47301,47302],{"align":19854},[61,47303,47304],{},"有模型强化学习智能体",[12488,47306,47307],{"align":19854},[23,47308],{"alt":25,"src":47309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[12356,47311,47312,47317],{},[12488,47313,47314],{"align":19854},[61,47315,47316],{},"免模型强化学习智能体",[12488,47318,47319],{"align":19854},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[37,47321,47323],{"id":47322},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,47325,47326],{},"学习和规划是序列决策的两个基本问题",[14,47328,47329],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,47331,47332],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,47334,47335],{},"强化学习用到的库：Gym",[14,47337,47338],{},"Gym可以检验强化学习算法的优劣",[14,47340,47341,47344],{},[61,47342,47343],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[151,47346,47350],{"className":47347,"code":47348,"language":47349,"meta":25,"style":25},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[49,47351,47352],{"__ignoreMap":25},[159,47353,47354,47357,47360,47363],{"class":161,"line":162},[159,47355,47356],{"class":185},"pip",[159,47358,47359],{"class":192}," install",[159,47361,47362],{"class":192}," gym==",[159,47364,47365],{"class":1146},"0.25.2\n",[14,47367,47368],{},"显示图形界面需要",[151,47370,47372],{"className":47347,"code":47371,"language":47349,"meta":25,"style":25},"pip install pygame\n",[49,47373,47374],{"__ignoreMap":25},[159,47375,47376,47378,47380],{"class":161,"line":162},[159,47377,47356],{"class":185},[159,47379,47359],{"class":192},[159,47381,47382],{"class":192}," pygame\n",[14,47384,47385,47386],{},"有关Gym库的相关文档介绍：",[8085,47387,47390],{"href":47388,"rel":47389},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[15923],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[37,47392,47394],{"id":47393},"_18一些补充基础概念","1.8.一些补充基础概念",[14,47396,47397],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,47399,47400],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,47402,47403],{},[23,47404],{"alt":25,"src":47405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,47407,47408],{},"折扣率需要自己来设定",[14,47410,47411],{},[23,47412],{"alt":25,"src":47413},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[134,47415,47416],{},[106,47417,47418],{},"状态转移函数：",[14,47420,47421],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,47423,47424],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,47426,47427],{},[23,47428],{"alt":25,"src":47429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[134,47431,47432],{"start":176},[106,47433,47434],{},"动作价值函数：",[14,47436,47437],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,47439,47440],{},[23,47441],{"alt":25,"src":47442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[134,47444,47445],{"start":203},[106,47446,47447],{},"最优动作价值函数：",[14,47449,47450],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[14,47452,47453],{},[23,47454],{"alt":25,"src":47455},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[134,47457,47458],{"start":223},[106,47459,47460],{},"状态价值函数:",[14,47462,47463],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,47465,47466],{},"它衡量的是“一个具体动作”的长期价值",[14,47468,47469],{},[23,47470],{"alt":25,"src":47471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,47473,47474],{},"几个价值函数之间的比较：",[14,47476,47477],{},[23,47478],{"alt":25,"src":47479},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1468,47481,47482],{},"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":25,"searchDepth":176,"depth":176,"links":47484},[47485,47486,47487,47492,47493,47498,47499,47500],{"id":46919,"depth":176,"text":46920},{"id":46986,"depth":176,"text":46987},{"id":47023,"depth":176,"text":47024,"children":47488},[47489,47490,47491],{"id":47027,"depth":203,"text":47028},{"id":47042,"depth":203,"text":47043},{"id":47065,"depth":203,"text":47066},{"id":47173,"depth":176,"text":47174},{"id":47192,"depth":176,"text":47193,"children":47494},[47495,47496,47497],{"id":47207,"depth":203,"text":47208},{"id":47225,"depth":203,"text":47226},{"id":47243,"depth":203,"text":47244},{"id":47252,"depth":176,"text":47253},{"id":47322,"depth":176,"text":47323},{"id":47393,"depth":176,"text":47394},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":46911,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":47507,"title":47508,"body":47509,"description":47516,"extension":23810,"meta":47527,"navigation":589,"path":47528,"seo":47529,"stem":47530,"__hash__":47531},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":47510,"toc":47525},[47511,47514,47517,47522],[10,47512,47508],{"id":47513},"_2马尔可夫决策过程",[14,47515,47516],{},"这是强化学习的基本框架",[14,47518,47519],{},[23,47520],{"alt":25,"src":47521},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,47523,47524],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":25,"searchDepth":176,"depth":176,"links":47526},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":47508,"description":47516},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":47533,"title":47534,"body":47535,"description":25,"extension":23810,"meta":47651,"navigation":589,"path":47652,"seo":47653,"stem":47654,"__hash__":47655},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":47536,"toc":47646},[47537,47540,47544,47547,47552,47557,47560,47565,47568,47573,47576,47580,47585,47588,47593,47598,47603,47606,47610,47615,47618,47623,47628,47633,47638,47641],[10,47538,47534],{"id":47539},"_3动作价值函数",[37,47541,47543],{"id":47542},"_31dqn","3.1.DQN",[14,47545,47546],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,47548,47549],{},[23,47550],{"alt":25,"src":47551},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,47553,47554],{},[23,47555],{"alt":25,"src":47556},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,47558,47559],{},"DQN算法的描述：",[14,47561,47562],{},[23,47563],{"alt":25,"src":47564},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,47566,47567],{},"这里的Dense指的是全连接层",[14,47569,47570],{},[23,47571],{"alt":25,"src":47572},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,47574,47575],{},"当前观测的状态为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算法",[37,47577,47579],{"id":47578},"_32dqn的举例","3.2.DQN的举例",[14,47581,47582],{},[23,47583],{"alt":25,"src":47584},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,47586,47587],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,47589,47590],{},[23,47591],{"alt":25,"src":47592},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,47594,47595],{},[23,47596],{"alt":25,"src":47597},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,47599,47600],{},[23,47601],{"alt":25,"src":47602},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,47604,47605],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[37,47607,47609],{"id":47608},"_33td算法","3.3.TD算法",[14,47611,47612],{},[23,47613],{"alt":25,"src":47614},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,47616,47617],{},"强化学习TD算法公式的粗略解释：",[14,47619,47620],{},[23,47621],{"alt":25,"src":47622},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,47624,47625],{},[23,47626],{"alt":25,"src":47627},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,47629,47630],{},[23,47631],{"alt":25,"src":47632},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,47634,47635],{},[23,47636],{"alt":25,"src":47637},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,47639,47640],{},"TD算法总结：",[14,47642,47643],{},[23,47644],{"alt":25,"src":47645},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":25,"searchDepth":176,"depth":176,"links":47647},[47648,47649,47650],{"id":47542,"depth":176,"text":47543},{"id":47578,"depth":176,"text":47579},{"id":47608,"depth":176,"text":47609},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":47534,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":47657,"title":47658,"body":47659,"description":25,"extension":23810,"meta":47892,"navigation":589,"path":47893,"seo":47894,"stem":47895,"__hash__":47896},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":47660,"toc":47888},[47661,47664,47668,47671,47674,47679,47684,47687,47692,47697,47700,47705,47708,47713,47716,47721,47724,47729,47732,47737,47742,47745,47750,47753,47756,47761,47764,47769,47774,47778,47781,47784,47789,47794,47797,47802,47807,47810,47815,47818,47821,47826,47829,47834,47837,47842,47847,47850,47855,47860,47863,47868,47871,47876,47879],[10,47662,47658],{"id":47663},"_4策略学习",[37,47665,47667],{"id":47666},"_41概念描述","4.1.概念描述",[14,47669,47670],{},"用神经网络（策略网络）近似策略函数",[14,47672,47673],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,47675,47676],{},[23,47677],{"alt":25,"src":47678},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,47680,47681],{},[23,47682],{"alt":25,"src":47683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,47685,47686],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,47688,47689],{},[23,47690],{"alt":25,"src":47691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,47693,47694],{},[23,47695],{"alt":25,"src":47696},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,47698,47699],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,47701,47702],{},[23,47703],{"alt":25,"src":47704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,47706,47707],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,47709,47710],{},[23,47711],{"alt":25,"src":47712},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,47714,47715],{},"改进theta要用到策略梯度算法",[14,47717,47718],{},[23,47719],{"alt":25,"src":47720},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,47722,47723],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,47725,47726],{},[23,47727],{"alt":25,"src":47728},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,47730,47731],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,47733,47734],{},[23,47735],{"alt":25,"src":47736},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,47738,47739],{},[23,47740],{"alt":25,"src":47741},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,47743,47744],{},"梯度公式总结：",[14,47746,47747],{},[23,47748],{"alt":25,"src":47749},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,47751,47752],{},"两个公式的分别应用场景：",[14,47754,47755],{},"对于离散的动作：",[14,47757,47758],{},[23,47759],{"alt":25,"src":47760},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,47762,47763],{},"对于连续的动作：",[14,47765,47766],{},[23,47767],{"alt":25,"src":47768},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,47770,47771],{},[23,47772],{"alt":25,"src":47773},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[37,47775,47777],{"id":47776},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,47779,47780],{},"使用蒙特卡洛来近似计算策略梯度",[14,47782,47783],{},"蒙特卡洛法的解释如下：",[14,47785,47786],{},[23,47787],{"alt":25,"src":47788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,47790,47791],{},[23,47792],{"alt":25,"src":47793},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,47795,47796],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[134,47798,47799],{},[106,47800,47801],{},"方法一：reinforce算法",[14,47803,47804],{},[23,47805],{"alt":25,"src":47806},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,47808,47809],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[134,47811,47812],{"start":176},[106,47813,47814],{},"方法二：actor-critic算法",[14,47816,47817],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,47819,47820],{},"两个网络的构建：",[14,47822,47823],{},[23,47824],{"alt":25,"src":47825},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,47827,47828],{},"actor网路：",[14,47830,47831],{},[23,47832],{"alt":25,"src":47833},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,47835,47836],{},"critic网络",[14,47838,47839],{},[23,47840],{"alt":25,"src":47841},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[134,47843,47844],{"start":203},[106,47845,47846],{},"网络的训练",[14,47848,47849],{},"网络描述",[14,47851,47852],{},[23,47853],{"alt":25,"src":47854},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,47856,47857],{},[23,47858],{"alt":25,"src":47859},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,47861,47862],{},"TD算法更新梯度：",[14,47864,47865],{},[23,47866],{"alt":25,"src":47867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,47869,47870],{},"策略网络更新梯度：",[14,47872,47873],{},[23,47874],{"alt":25,"src":47875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,47877,47878],{},"训练整个流程的具体描述：",[14,47880,47881,47884,47885],{},[23,47882],{"alt":25,"src":47883},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[23,47886],{"alt":25,"src":47887},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":25,"searchDepth":176,"depth":176,"links":47889},[47890,47891],{"id":47666,"depth":176,"text":47667},{"id":47776,"depth":176,"text":47777},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":47658,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":47898,"title":47899,"body":47900,"description":47907,"extension":23810,"meta":47957,"navigation":589,"path":47958,"seo":47959,"stem":47960,"__hash__":47961},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":47901,"toc":47953},[47902,47905,47908,47912,47915,47920,47924,47927,47932,47935,47940,47945,47948],[10,47903,47899],{"id":47904},"_5alphago算法",[14,47906,47907],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[37,47909,47911],{"id":47910},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,47913,47914],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,47916,47917],{},[23,47918],{"alt":25,"src":47919},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[37,47921,47923],{"id":47922},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,47925,47926],{},"采用强化学习的方式训练策略网络",[14,47928,47929],{},[23,47930],{"alt":25,"src":47931},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,47933,47934],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,47936,47937],{},[23,47938],{"alt":25,"src":47939},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,47941,47942],{},[23,47943],{"alt":25,"src":47944},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,47946,47947],{},"强化学习训练策略网络的总结：",[14,47949,47950],{},[23,47951],{"alt":25,"src":47952},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":25,"searchDepth":176,"depth":176,"links":47954},[47955,47956],{"id":47910,"depth":176,"text":47911},{"id":47922,"depth":176,"text":47923},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":47899,"description":47907},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":47963,"title":47964,"body":47965,"description":47972,"extension":23810,"meta":47975,"navigation":589,"path":47976,"seo":47977,"stem":47978,"__hash__":47979},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":47966,"toc":47973},[47967,47970],[10,47968,47964],{"id":47969},"_6价值网络",[14,47971,47972],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":25,"searchDepth":176,"depth":176,"links":47974},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":47964,"description":47972},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":47981,"title":47982,"body":47983,"description":47987,"extension":23810,"meta":47988,"navigation":589,"path":47989,"seo":47990,"stem":47991,"__hash__":47992},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":47984,"toc":47985},[],{"title":25,"searchDepth":176,"depth":176,"links":47986},[],"记录自己的强化学习笔记。",{"category":46904},"\u002Fwiki\u002F2025-12-04",{"title":47982,"description":47987},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":47994,"title":47995,"body":47996,"description":23809,"extension":23810,"meta":48035,"navigation":589,"path":48036,"seo":48037,"stem":48038,"__hash__":48039},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":47997,"toc":48033},[47998,48001,48004,48010,48013,48019,48022,48027,48030],[10,47999,47995],{"id":48000},"_1-项目概览与官方资源",[14,48002,48003],{},"官方文档：",[14,48005,48006],{},[8085,48007,48008],{"href":48008,"rel":48009},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[15923],[14,48011,48012],{},"官方代码仓库：",[14,48014,48015],{},[8085,48016,48017],{"href":48017,"rel":48018},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[15923],[14,48020,48021],{},"复现大体流程：",[14,48023,48024],{},[23,48025],{"alt":25,"src":48026},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,48028,48029],{},"本教程的目标是打通这条链路：",[14,48031,48032],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":25,"searchDepth":176,"depth":176,"links":48034},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":47995,"description":23809},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":48041,"title":48042,"body":48043,"description":23809,"extension":23810,"meta":48159,"navigation":589,"path":48160,"seo":48161,"stem":48162,"__hash__":48163},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":48044,"toc":48154},[48045,48048,48052,48055,48062,48066,48069,48078,48088,48092,48122,48125,48151],[10,48046,48042],{"id":48047},"_2-环境准备与设备连接",[37,48049,48051],{"id":48050},"_21-系统与环境","2.1 系统与环境",[14,48053,48054],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,48056,48057,48058,48061],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[49,48059,48060],{},"lerobot"," 依赖。",[37,48063,48065],{"id":48064},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,48067,48068],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[151,48070,48072],{"className":47347,"code":48071,"language":47349,"meta":25,"style":25},"lerobot-find-out\n",[49,48073,48074],{"__ignoreMap":25},[159,48075,48076],{"class":161,"line":162},[159,48077,48071],{"class":185},[14,48079,48080,48081,24079,48084,48087],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[49,48082,48083],{},"\u002Fdev\u002FttyACM0",[49,48085,48086],{},"\u002Fdev\u002FttyACM1","）。",[37,48089,48091],{"id":48090},"_23-串口授权","2.3 串口授权",[151,48093,48095],{"className":47347,"code":48094,"language":47349,"meta":25,"style":25},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[49,48096,48097,48111],{"__ignoreMap":25},[159,48098,48099,48102,48105,48108],{"class":161,"line":162},[159,48100,48101],{"class":185},"sudo",[159,48103,48104],{"class":192}," chmod",[159,48106,48107],{"class":1146}," 666",[159,48109,48110],{"class":192}," \u002Fdev\u002FttyACM0\n",[159,48112,48113,48115,48117,48119],{"class":161,"line":176},[159,48114,48101],{"class":185},[159,48116,48104],{"class":192},[159,48118,48107],{"class":1146},[159,48120,48121],{"class":192}," \u002Fdev\u002FttyACM1\n",[14,48123,48124],{},"说明：",[103,48126,48127,48132,48138,48148],{},[106,48128,48129,48131],{},[49,48130,48101],{},"：以 root 权限执行命令。",[106,48133,48134,48137],{},[49,48135,48136],{},"chmod","：修改设备节点权限。",[106,48139,48140,48143,48144,48147],{},[49,48141,48142],{},"666","：",[49,48145,48146],{},"rw-rw-rw-","，所有用户可读写。",[106,48149,48150],{},"串口号必须替换为你机器上的真实端口。",[1468,48152,48153],{},"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":25,"searchDepth":176,"depth":176,"links":48155},[48156,48157,48158],{"id":48050,"depth":176,"text":48051},{"id":48064,"depth":176,"text":48065},{"id":48090,"depth":176,"text":48091},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":48042,"description":23809},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":48165,"title":48166,"body":48167,"description":23809,"extension":23810,"meta":48328,"navigation":589,"path":48329,"seo":48330,"stem":48331,"__hash__":48332},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":48168,"toc":48324},[48169,48173,48177,48183,48186,48243,48246,48250,48253,48321],[10,48170,48172],{"id":48171},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[37,48174,48176],{"id":48175},"_31-配置电机-id","3.1 配置电机 ID",[14,48178,48179,48180,48182],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[49,48181,4932],{},"，需要改成机械臂链路里不冲突的编号。",[14,48184,48185],{},"方式一：用 LeRobot 命令逐步写入。",[151,48187,48189],{"className":47347,"code":48188,"language":47349,"meta":25,"style":25},"# 主臂舵机配置 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",[49,48190,48191,48196,48204,48211,48216,48220,48225,48231,48238],{"__ignoreMap":25},[159,48192,48193],{"class":161,"line":162},[159,48194,48195],{"class":1135},"# 主臂舵机配置 ID\n",[159,48197,48198,48201],{"class":161,"line":176},[159,48199,48200],{"class":185},"lerobot-setup-motors",[159,48202,48203],{"class":1146}," \\\n",[159,48205,48206,48209],{"class":161,"line":203},[159,48207,48208],{"class":1146},"  --teleop.type=so101_leader",[159,48210,48203],{"class":1146},[159,48212,48213],{"class":161,"line":223},[159,48214,48215],{"class":1146},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[159,48217,48218],{"class":161,"line":233},[159,48219,590],{"emptyLinePlaceholder":589},[159,48221,48222],{"class":161,"line":239},[159,48223,48224],{"class":1135},"# 从臂舵机配置 ID\n",[159,48226,48227,48229],{"class":161,"line":245},[159,48228,48200],{"class":185},[159,48230,48203],{"class":1146},[159,48232,48233,48236],{"class":161,"line":251},[159,48234,48235],{"class":1146},"  --robot.type=so101_follower",[159,48237,48203],{"class":1146},[159,48239,48240],{"class":161,"line":261},[159,48241,48242],{"class":1146},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,48244,48245],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[37,48247,48249],{"id":48248},"_32-机械臂校准","3.2 机械臂校准",[14,48251,48252],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[151,48254,48256],{"className":47347,"code":48255,"language":47349,"meta":25,"style":25},"# 主臂校准\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",[49,48257,48258,48263,48270,48276,48283,48288,48292,48297,48303,48309,48316],{"__ignoreMap":25},[159,48259,48260],{"class":161,"line":162},[159,48261,48262],{"class":1135},"# 主臂校准\n",[159,48264,48265,48268],{"class":161,"line":176},[159,48266,48267],{"class":185},"lerobot-calibrate",[159,48269,48203],{"class":1146},[159,48271,48272,48274],{"class":161,"line":203},[159,48273,48208],{"class":1146},[159,48275,48203],{"class":1146},[159,48277,48278,48281],{"class":161,"line":223},[159,48279,48280],{"class":1146},"  --teleop.port=\u002Fdev\u002FttyACM0",[159,48282,48203],{"class":1146},[159,48284,48285],{"class":161,"line":233},[159,48286,48287],{"class":1146},"  --teleop.id=my_awesome_leader_arm\n",[159,48289,48290],{"class":161,"line":239},[159,48291,590],{"emptyLinePlaceholder":589},[159,48293,48294],{"class":161,"line":245},[159,48295,48296],{"class":1135},"# 从臂校准\n",[159,48298,48299,48301],{"class":161,"line":251},[159,48300,48267],{"class":185},[159,48302,48203],{"class":1146},[159,48304,48305,48307],{"class":161,"line":261},[159,48306,48235],{"class":1146},[159,48308,48203],{"class":1146},[159,48310,48311,48314],{"class":161,"line":603},[159,48312,48313],{"class":1146},"  --robot.port=\u002Fdev\u002FttyACM1",[159,48315,48203],{"class":1146},[159,48317,48318],{"class":161,"line":621},[159,48319,48320],{"class":1146},"  --robot.id=my_awesome_follower_arm\n",[1468,48322,48323],{},"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":25,"searchDepth":176,"depth":176,"links":48325},[48326,48327],{"id":48175,"depth":176,"text":48176},{"id":48248,"depth":176,"text":48249},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":48166,"description":23809},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":48334,"title":48335,"body":48336,"description":23809,"extension":23810,"meta":48526,"navigation":589,"path":48527,"seo":48528,"stem":48529,"__hash__":48530},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":48337,"toc":48522},[48338,48341,48345,48392,48396,48409,48472,48475,48519],[10,48339,48335],{"id":48340},"_4-遥操与相机接入",[37,48342,48344],{"id":48343},"_41-不带相机遥操","4.1 不带相机遥操",[151,48346,48348],{"className":47347,"code":48347,"language":47349,"meta":25,"style":25},"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",[49,48349,48350,48357,48363,48369,48376,48382,48388],{"__ignoreMap":25},[159,48351,48352,48355],{"class":161,"line":162},[159,48353,48354],{"class":185},"lerobot-teleoperate",[159,48356,48203],{"class":1146},[159,48358,48359,48361],{"class":161,"line":176},[159,48360,48235],{"class":1146},[159,48362,48203],{"class":1146},[159,48364,48365,48367],{"class":161,"line":203},[159,48366,48313],{"class":1146},[159,48368,48203],{"class":1146},[159,48370,48371,48374],{"class":161,"line":223},[159,48372,48373],{"class":1146},"  --robot.id=my_awesome_follower_arm",[159,48375,48203],{"class":1146},[159,48377,48378,48380],{"class":161,"line":233},[159,48379,48208],{"class":1146},[159,48381,48203],{"class":1146},[159,48383,48384,48386],{"class":161,"line":239},[159,48385,48280],{"class":1146},[159,48387,48203],{"class":1146},[159,48389,48390],{"class":161,"line":245},[159,48391,48287],{"class":1146},[37,48393,48395],{"id":48394},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[151,48397,48399],{"className":47347,"code":48398,"language":47349,"meta":25,"style":25},"lerobot-find-cameras opencv\n",[49,48400,48401],{"__ignoreMap":25},[159,48402,48403,48406],{"class":161,"line":162},[159,48404,48405],{"class":185},"lerobot-find-cameras",[159,48407,48408],{"class":192}," opencv\n",[151,48410,48412],{"className":47347,"code":48411,"language":47349,"meta":25,"style":25},"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",[49,48413,48414,48420,48426,48432,48438,48448,48454,48460,48467],{"__ignoreMap":25},[159,48415,48416,48418],{"class":161,"line":162},[159,48417,48354],{"class":185},[159,48419,48203],{"class":1146},[159,48421,48422,48424],{"class":161,"line":176},[159,48423,48235],{"class":1146},[159,48425,48203],{"class":1146},[159,48427,48428,48430],{"class":161,"line":203},[159,48429,48313],{"class":1146},[159,48431,48203],{"class":1146},[159,48433,48434,48436],{"class":161,"line":223},[159,48435,48373],{"class":1146},[159,48437,48203],{"class":1146},[159,48439,48440,48443,48446],{"class":161,"line":233},[159,48441,48442],{"class":1146},"  --robot.cameras=",[159,48444,48445],{"class":192},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[159,48447,48203],{"class":1146},[159,48449,48450,48452],{"class":161,"line":239},[159,48451,48208],{"class":1146},[159,48453,48203],{"class":1146},[159,48455,48456,48458],{"class":161,"line":245},[159,48457,48280],{"class":1146},[159,48459,48203],{"class":1146},[159,48461,48462,48465],{"class":161,"line":251},[159,48463,48464],{"class":1146},"  --teleop.id=my_awesome_leader_arm",[159,48466,48203],{"class":1146},[159,48468,48469],{"class":161,"line":261},[159,48470,48471],{"class":1146},"  --display_data=true\n",[14,48473,48474],{},"相机参数说明：",[103,48476,48477,48483,48489,48498,48507,48513],{},[106,48478,48479,48482],{},[49,48480,48481],{},"front","：相机名称。",[106,48484,48485,48488],{},[49,48486,48487],{},"type: opencv","：相机驱动类型。",[106,48490,48491,48494,48495,48087],{},[49,48492,48493],{},"index_or_path","：设备编号或设备路径（如 ",[49,48496,48497],{},"\u002Fdev\u002Fvideo4",[106,48499,48500,8777,48503,48506],{},[49,48501,48502],{},"width",[49,48504,48505],{},"height","：图像分辨率。",[106,48508,48509,48512],{},[49,48510,48511],{},"fps","：采样帧率。",[106,48514,48515,48518],{},[49,48516,48517],{},"--display_data=true","：启用实时可视化。",[1468,48520,48521],{},"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":25,"searchDepth":176,"depth":176,"links":48523},[48524,48525],{"id":48343,"depth":176,"text":48344},{"id":48394,"depth":176,"text":48395},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":48335,"description":23809},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":48532,"title":48533,"body":48534,"description":23809,"extension":23810,"meta":48705,"navigation":589,"path":48706,"seo":48707,"stem":48708,"__hash__":48709},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":48535,"toc":48700},[48536,48540,48544,48549,48554,48557,48599,48605,48609,48657,48662,48666,48669,48677,48682,48687,48692,48697],[10,48537,48539],{"id":48538},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[37,48541,48543],{"id":48542},"_51-生成访问令牌","5.1 生成访问令牌",[14,48545,48546],{},[23,48547],{"alt":25,"src":48548},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,48550,48551],{},[23,48552],{"alt":25,"src":48553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,48555,48556],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[151,48558,48560],{"className":47347,"code":48559,"language":47349,"meta":25,"style":25},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[49,48561,48562,48575],{"__ignoreMap":25},[159,48563,48564,48567,48570,48572],{"class":161,"line":162},[159,48565,48566],{"class":1142},"export",[159,48568,48569],{"class":165}," HF_TOKEN",[159,48571,189],{"class":1142},[159,48573,48574],{"class":192},"\"your_huggingface_token\"\n",[159,48576,48577,48580,48583,48586,48589,48591,48594,48596],{"class":161,"line":176},[159,48578,48579],{"class":185},"hf",[159,48581,48582],{"class":192}," auth",[159,48584,48585],{"class":192}," login",[159,48587,48588],{"class":1146}," --token",[159,48590,33319],{"class":192},[159,48592,48593],{"class":165},"$HF_TOKEN",[159,48595,24115],{"class":192},[159,48597,48598],{"class":1146}," --add-to-git-credential\n",[14,48600,48601,48604],{},[49,48602,48603],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[37,48606,48608],{"id":48607},"_52-验证登录","5.2 验证登录",[151,48610,48612],{"className":47347,"code":48611,"language":47349,"meta":25,"style":25},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[49,48613,48614,48644],{"__ignoreMap":25},[159,48615,48616,48619,48621,48624,48626,48628,48631,48634,48637,48640,48642],{"class":161,"line":162},[159,48617,48618],{"class":165},"HF_USER",[159,48620,189],{"class":1142},[159,48622,48623],{"class":165},"$(",[159,48625,48579],{"class":185},[159,48627,48582],{"class":192},[159,48629,48630],{"class":192}," whoami",[159,48632,48633],{"class":1142}," |",[159,48635,48636],{"class":185}," head",[159,48638,48639],{"class":1146}," -n",[159,48641,2707],{"class":1146},[159,48643,1165],{"class":165},[159,48645,48646,48649,48651,48654],{"class":161,"line":176},[159,48647,48648],{"class":1146},"echo",[159,48650,33319],{"class":192},[159,48652,48653],{"class":165},"$HF_USER",[159,48655,48656],{"class":192},"\"\n",[14,48658,48659],{},[23,48660],{"alt":25,"src":48661},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[37,48663,48665],{"id":48664},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,48667,48668],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[103,48670,48671,48674],{},[106,48672,48673],{},"Dataset Repo（用于上传演示数据）",[106,48675,48676],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,48678,48679],{},[23,48680],{"alt":25,"src":48681},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,48683,48684],{},[23,48685],{"alt":25,"src":48686},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,48688,48689],{},[23,48690],{"alt":25,"src":48691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,48693,48694],{},[23,48695],{"alt":25,"src":48696},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1468,48698,48699],{},"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":25,"searchDepth":176,"depth":176,"links":48701},[48702,48703,48704],{"id":48542,"depth":176,"text":48543},{"id":48607,"depth":176,"text":48608},{"id":48664,"depth":176,"text":48665},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":48533,"description":23809},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":48711,"title":48712,"body":48713,"description":23809,"extension":23810,"meta":48910,"navigation":589,"path":48911,"seo":48912,"stem":48913,"__hash__":48914},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":48714,"toc":48905},[48715,48719,48723,48819,48827,48832,48836,48852,48855,48859,48902],[10,48716,48718],{"id":48717},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[37,48720,48722],{"id":48721},"_61-录制示教数据","6.1 录制示教数据",[151,48724,48726],{"className":47347,"code":48725,"language":47349,"meta":25,"style":25},"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",[49,48727,48728,48735,48741,48747,48753,48762,48768,48774,48780,48787,48797,48804,48814],{"__ignoreMap":25},[159,48729,48730,48733],{"class":161,"line":162},[159,48731,48732],{"class":185},"lerobot-record",[159,48734,48203],{"class":1146},[159,48736,48737,48739],{"class":161,"line":176},[159,48738,48235],{"class":1146},[159,48740,48203],{"class":1146},[159,48742,48743,48745],{"class":161,"line":203},[159,48744,48313],{"class":1146},[159,48746,48203],{"class":1146},[159,48748,48749,48751],{"class":161,"line":223},[159,48750,48373],{"class":1146},[159,48752,48203],{"class":1146},[159,48754,48755,48757,48760],{"class":161,"line":233},[159,48756,48442],{"class":1146},[159,48758,48759],{"class":192},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[159,48761,48203],{"class":1146},[159,48763,48764,48766],{"class":161,"line":239},[159,48765,48208],{"class":1146},[159,48767,48203],{"class":1146},[159,48769,48770,48772],{"class":161,"line":245},[159,48771,48280],{"class":1146},[159,48773,48203],{"class":1146},[159,48775,48776,48778],{"class":161,"line":251},[159,48777,48464],{"class":1146},[159,48779,48203],{"class":1146},[159,48781,48782,48785],{"class":161,"line":261},[159,48783,48784],{"class":1146},"  --display_data=true",[159,48786,48203],{"class":1146},[159,48788,48789,48792,48795],{"class":161,"line":603},[159,48790,48791],{"class":1146},"  --dataset.repo_id=",[159,48793,48794],{"class":192},"\"Embodied-AI-6\u002Fso101_test\"",[159,48796,48203],{"class":1146},[159,48798,48799,48802],{"class":161,"line":621},[159,48800,48801],{"class":1146},"  --dataset.num_episodes=10",[159,48803,48203],{"class":1146},[159,48805,48806,48809,48812],{"class":161,"line":634},[159,48807,48808],{"class":1146},"  --dataset.single_task=",[159,48810,48811],{"class":192},"\"Grab the green cube\"",[159,48813,48203],{"class":1146},[159,48815,48816],{"class":161,"line":640},[159,48817,48818],{"class":1146},"  --resume=true\n",[103,48820,48821],{},[106,48822,48823,48826],{},[49,48824,48825],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,48828,48829],{},[23,48830],{"alt":25,"src":48831},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[37,48833,48835],{"id":48834},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[151,48837,48839],{"className":47347,"code":48838,"language":47349,"meta":25,"style":25},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[49,48840,48841],{"__ignoreMap":25},[159,48842,48843,48846,48849],{"class":161,"line":162},[159,48844,48845],{"class":185},"rm",[159,48847,48848],{"class":1146}," -rf",[159,48850,48851],{"class":192}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,48853,48854],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[37,48856,48858],{"id":48857},"_63-回放指定-episode","6.3 回放指定 episode",[151,48860,48862],{"className":47347,"code":48861,"language":47349,"meta":25,"style":25},"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",[49,48863,48864,48871,48877,48883,48889,48897],{"__ignoreMap":25},[159,48865,48866,48869],{"class":161,"line":162},[159,48867,48868],{"class":185},"lerobot-replay",[159,48870,48203],{"class":1146},[159,48872,48873,48875],{"class":161,"line":176},[159,48874,48235],{"class":1146},[159,48876,48203],{"class":1146},[159,48878,48879,48881],{"class":161,"line":203},[159,48880,48313],{"class":1146},[159,48882,48203],{"class":1146},[159,48884,48885,48887],{"class":161,"line":223},[159,48886,48373],{"class":1146},[159,48888,48203],{"class":1146},[159,48890,48891,48893,48895],{"class":161,"line":233},[159,48892,48791],{"class":1146},[159,48894,48794],{"class":192},[159,48896,48203],{"class":1146},[159,48898,48899],{"class":161,"line":239},[159,48900,48901],{"class":1146},"  --dataset.episode=0\n",[1468,48903,48904],{},"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":25,"searchDepth":176,"depth":176,"links":48906},[48907,48908,48909],{"id":48721,"depth":176,"text":48722},{"id":48834,"depth":176,"text":48835},{"id":48857,"depth":176,"text":48858},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":48712,"description":23809},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":48916,"title":48917,"body":48918,"description":23809,"extension":23810,"meta":49046,"navigation":589,"path":49047,"seo":49048,"stem":49049,"__hash__":49050},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":48919,"toc":49044},[48920,48924,48987,48990,49037,49042],[10,48921,48923],{"id":48922},"_7-act-模型训练","7. ACT 模型训练",[151,48925,48927],{"className":47347,"code":48926,"language":47349,"meta":25,"style":25},"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",[49,48928,48929,48936,48944,48951,48958,48965,48972,48979],{"__ignoreMap":25},[159,48930,48931,48934],{"class":161,"line":162},[159,48932,48933],{"class":185},"lerobot-train",[159,48935,48203],{"class":1146},[159,48937,48938,48940,48942],{"class":161,"line":176},[159,48939,48791],{"class":1146},[159,48941,48794],{"class":192},[159,48943,48203],{"class":1146},[159,48945,48946,48949],{"class":161,"line":203},[159,48947,48948],{"class":1146},"  --policy.type=act",[159,48950,48203],{"class":1146},[159,48952,48953,48956],{"class":161,"line":223},[159,48954,48955],{"class":1146},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[159,48957,48203],{"class":1146},[159,48959,48960,48963],{"class":161,"line":233},[159,48961,48962],{"class":1146},"  --job_name=act_so101_test",[159,48964,48203],{"class":1146},[159,48966,48967,48970],{"class":161,"line":239},[159,48968,48969],{"class":1146},"  --policy.device=cuda",[159,48971,48203],{"class":1146},[159,48973,48974,48977],{"class":161,"line":245},[159,48975,48976],{"class":1146},"  --wandb.enable=false",[159,48978,48203],{"class":1146},[159,48980,48981,48984],{"class":161,"line":251},[159,48982,48983],{"class":1146},"  --policy.repo_id=",[159,48985,48986],{"class":192},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,48988,48989],{},"参数说明：",[103,48991,48992,48998,49004,49010,49016,49025,49031],{},[106,48993,48994,48997],{},[49,48995,48996],{},"--dataset.repo_id","：训练数据集仓库。",[106,48999,49000,49003],{},[49,49001,49002],{},"--policy.type=act","：策略模型类型为 ACT。",[106,49005,49006,49009],{},[49,49007,49008],{},"--output_dir","：本地训练输出目录。",[106,49011,49012,49015],{},[49,49013,49014],{},"--job_name","：训练任务名称。",[106,49017,49018,49021,49022,48087],{},[49,49019,49020],{},"--policy.device","：训练设备（如 ",[49,49023,49024],{},"cuda",[106,49026,49027,49030],{},[49,49028,49029],{},"--wandb.enable","：是否启用 WandB 可视化。",[106,49032,49033,49036],{},[49,49034,49035],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,49038,49039],{},[23,49040],{"alt":25,"src":49041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1468,49043,48904],{},{"title":25,"searchDepth":176,"depth":176,"links":49045},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":48917,"description":23809},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":49052,"title":49053,"body":49054,"description":23809,"extension":23810,"meta":49141,"navigation":589,"path":49142,"seo":49143,"stem":49144,"__hash__":49145},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":49055,"toc":49139},[49056,49059,49062,49129,49137],[10,49057,49053],{"id":49058},"_8-策略部署与自动采集",[14,49060,49061],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[151,49063,49065],{"className":47347,"code":49064,"language":47349,"meta":25,"style":25},"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",[49,49066,49067,49073,49079,49085,49093,49099,49106,49114,49122],{"__ignoreMap":25},[159,49068,49069,49071],{"class":161,"line":162},[159,49070,48732],{"class":185},[159,49072,48203],{"class":1146},[159,49074,49075,49077],{"class":161,"line":176},[159,49076,48235],{"class":1146},[159,49078,48203],{"class":1146},[159,49080,49081,49083],{"class":161,"line":203},[159,49082,48313],{"class":1146},[159,49084,48203],{"class":1146},[159,49086,49087,49089,49091],{"class":161,"line":223},[159,49088,48442],{"class":1146},[159,49090,48759],{"class":192},[159,49092,48203],{"class":1146},[159,49094,49095,49097],{"class":161,"line":233},[159,49096,48373],{"class":1146},[159,49098,48203],{"class":1146},[159,49100,49101,49104],{"class":161,"line":239},[159,49102,49103],{"class":1146},"  --display_data=false",[159,49105,48203],{"class":1146},[159,49107,49108,49110,49112],{"class":161,"line":245},[159,49109,48791],{"class":1146},[159,49111,48794],{"class":192},[159,49113,48203],{"class":1146},[159,49115,49116,49118,49120],{"class":161,"line":251},[159,49117,48808],{"class":1146},[159,49119,48811],{"class":192},[159,49121,48203],{"class":1146},[159,49123,49124,49127],{"class":161,"line":261},[159,49125,49126],{"class":1146},"  --policy.path=",[159,49128,48986],{"class":192},[103,49130,49131],{},[106,49132,49133,49136],{},[49,49134,49135],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1468,49138,48904],{},{"title":25,"searchDepth":176,"depth":176,"links":49140},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":49053,"description":23809},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":49147,"title":49148,"body":49149,"description":23809,"extension":23810,"meta":49178,"navigation":589,"path":49179,"seo":49180,"stem":49181,"__hash__":49182},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":49150,"toc":49176},[49151,49155,49158,49164,49167,49173],[10,49152,49154],{"id":49153},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,49156,49157],{},"项目地址：",[14,49159,49160],{},[8085,49161,49162],{"href":49162,"rel":49163},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[15923],[14,49165,49166],{},"参考教程：",[14,49168,49169],{},[8085,49170,49171],{"href":49171,"rel":49172},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[15923],[14,49174,49175],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":25,"searchDepth":176,"depth":176,"links":49177},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":49148,"description":23809},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":49184,"title":49185,"body":49186,"description":49190,"extension":23810,"meta":49191,"navigation":589,"path":49192,"seo":49193,"stem":49194,"__hash__":49195},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":49187,"toc":49188},[],{"title":25,"searchDepth":176,"depth":176,"links":49189},[],"act复现",{"category":46904},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":49185,"description":49190},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":49197,"title":49198,"body":49199,"description":25,"extension":23810,"meta":49501,"navigation":589,"path":49502,"seo":49503,"stem":49504,"__hash__":49505},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":49200,"toc":49493},[49201,49204,49208,49218,49225,49232,49235,49242,49245,49248,49252,49264,49268,49314,49317,49320,49323,49326,49329,49333,49371,49377,49381,49435,49440,49443,49446,49451,49454,49459,49462,49465,49469,49472,49475,49479],[10,49202,49198],{"id":49203},"_1简介",[42,49205,49207],{"id":49206},"_11什么是-docker","1.1什么是 Docker？",[14,49209,49210,49211,49214,49215],{},"Docker 是一个开源的 ",[61,49212,49213],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[61,49216,49217],{},"一次构建，到处运行。",[14,49219,49220,49221,49224],{},"“ ",[61,49222,49223],{},"一次构建，到处运行"," ”也就是说：",[134,49226,49227],{},[106,49228,49229],{},[61,49230,49231],{},"之前：",[14,49233,49234],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[134,49236,49237],{},[106,49238,49239],{},[61,49240,49241],{},"使用docker后：",[14,49243,49244],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,49246,49247],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[42,49249,49251],{"id":49250},"_12它是怎么工作的","1.2.它是怎么工作的？",[103,49253,49254,49257],{},[106,49255,49256],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[106,49258,49259,49260,49263],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[61,49261,49262],{},"无论在哪运行都一样稳定"," 。",[42,49265,49267],{"id":49266},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[12347,49269,49270,49280],{},[16500,49271,49272],{},[12356,49273,49274,49277],{},[12365,49275,49276],{"align":19854},"概念",[12365,49278,49279],{"align":19854},"解释",[16624,49281,49282,49290,49298,49306],{},[12356,49283,49284,49287],{},[12488,49285,49286],{"align":19854},"镜像",[12488,49288,49289],{"align":19854},"Image，运行容器的模板，像是一个应用快照",[12356,49291,49292,49295],{},[12488,49293,49294],{"align":19854},"容器",[12488,49296,49297],{"align":19854},"Container，运行中的镜像实例，有自己的文件系统、网络等",[12356,49299,49300,49303],{},[12488,49301,49302],{"align":19854},"Dockerfile",[12488,49304,49305],{"align":19854},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[12356,49307,49308,49311],{},[12488,49309,49310],{"align":19854},"仓库",[12488,49312,49313],{"align":19854},"Registry，存放镜像的地方，比如 Docker Hub",[14,49315,49316],{},"抽象化理解:",[14,49318,49319],{},"Docker镜像≈C++类",[14,49321,49322],{},"Docker容器≈C++类实例(即对象)",[14,49324,49325],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,49327,49328],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[42,49330,49332],{"id":49331},"_14类比理解","1.4.类比理解",[12347,49334,49335,49345],{},[16500,49336,49337],{},[12356,49338,49339,49342],{},[12365,49340,49341],{"align":19854},"传统部署",[12365,49343,49344],{"align":19854},"Docker部署",[16624,49346,49347,49355,49363],{},[12356,49348,49349,49352],{},[12488,49350,49351],{"align":19854},"手动安装依赖、调试版本不一致问题",[12488,49353,49354],{"align":19854},"一次打包环境和代码",[12356,49356,49357,49360],{},[12488,49358,49359],{"align":19854},"程序“裸奔”跑在系统上",[12488,49361,49362],{"align":19854},"程序“穿着容器”隔离运行",[12356,49364,49365,49368],{},[12488,49366,49367],{"align":19854},"容易“在我电脑上能跑”",[12488,49369,49370],{"align":19854},"保证“无论在哪都能跑”",[14,49372,49373,49374],{},"就像快递包裹： ",[61,49375,49376],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[42,49378,49380],{"id":49379},"_15docker-的核心优势","1.5.Docker 的核心优势",[12347,49382,49383,49393],{},[16500,49384,49385],{},[12356,49386,49387,49390],{},[12365,49388,49389],{"align":19854},"优势",[12365,49391,49392],{"align":19854},"说明",[16624,49394,49395,49403,49411,49419,49427],{},[12356,49396,49397,49400],{},[12488,49398,49399],{"align":19854},"轻量级",[12488,49401,49402],{"align":19854},"基于系统内核共享，启动速度快，占资源少",[12356,49404,49405,49408],{},[12488,49406,49407],{"align":19854},"跨平台",[12488,49409,49410],{"align":19854},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[12356,49412,49413,49416],{},[12488,49414,49415],{"align":19854},"易于迁移部署",[12488,49417,49418],{"align":19854},"应用和环境一起封装，不怕依赖不一致",[12356,49420,49421,49424],{},[12488,49422,49423],{"align":19854},"易于版本控制",[12488,49425,49426],{"align":19854},"镜像版本可控，支持回滚",[12356,49428,49429,49432],{},[12488,49430,49431],{"align":19854},"生态丰富",[12488,49433,49434],{"align":19854},"Docker Hub 上有成千上万的现成镜像可用",[134,49436,49437],{},[106,49438,49439],{},"在Linux上可以几乎实现无性能损失。",[14,49441,49442],{},"docker里的发行版和本机共用Linux内核。",[14,49444,49445],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[134,49447,49448],{},[106,49449,49450],{},"可以快速部署在绝大多数Linux发行版",[14,49452,49453],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[134,49455,49456],{},[106,49457,49458],{},"配置环境简单",[14,49460,49461],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,49463,49464],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[134,49466,49467],{},[106,49468,49431],{},[14,49470,49471],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,49473,49474],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[42,49476,49478],{"id":49477},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[103,49480,49481,49484,49487,49490],{},[106,49482,49483],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[106,49485,49486],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[106,49488,49489],{},"微服务架构：每个服务一个容器，灵活组合",[106,49491,49492],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":25,"searchDepth":176,"depth":176,"links":49494},[49495,49496,49497,49498,49499,49500],{"id":49206,"depth":203,"text":49207},{"id":49250,"depth":203,"text":49251},{"id":49266,"depth":203,"text":49267},{"id":49331,"depth":203,"text":49332},{"id":49379,"depth":203,"text":49380},{"id":49477,"depth":203,"text":49478},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":49198,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":49507,"title":49508,"body":49509,"description":25,"extension":23810,"meta":50242,"navigation":589,"path":50243,"seo":50244,"stem":50245,"__hash__":50246},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":49510,"toc":50237},[49511,49514,49518,49521,49524,49530,49536,49540,49549,49552,49609,49612,49663,49666,49749,49752,49789,49793,49804,49817,49824,49827,49907,49910,49960,49963,49986,49990,49997,50000,50016,50022,50025,50041,50047,50050,50066,50080,50086,50106,50112,50115,50127,50133,50136,50150,50156,50159,50179,50184,50187,50190,50194,50197,50200,50203,50210,50213,50216,50219,50224,50229,50234],[10,49512,49508],{"id":49513},"_2安装docker",[42,49515,49517],{"id":49516},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,49519,49520],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,49522,49523],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,49525,49526],{},[8085,49527,49528],{"href":49528,"rel":49529},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[15923],[14,49531,49532],{},[8085,49533,49534],{"href":49534,"rel":49535},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[15923],[326,49537,49539],{"id":49538},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,49541,49542,49543,49548],{},"以下内容根据 ",[8085,49544,49547],{"href":49545,"rel":49546},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[15923],"官方文档"," 修改而来。",[14,49550,49551],{},"如果你过去安装过 docker，先删掉：",[151,49553,49555],{"className":47347,"code":49554,"language":47349,"meta":25,"style":25},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[49,49556,49557],{"__ignoreMap":25},[159,49558,49559,49561,49564,49567,49570,49573,49576,49579,49582,49585,49588,49591,49594,49597,49600,49603,49606],{"class":161,"line":162},[159,49560,26657],{"class":1142},[159,49562,49563],{"class":165}," pkg ",[159,49565,49566],{"class":1142},"in",[159,49568,49569],{"class":192}," docker.io",[159,49571,49572],{"class":192}," docker-doc",[159,49574,49575],{"class":192}," docker-compose",[159,49577,49578],{"class":192}," docker-compose-v2",[159,49580,49581],{"class":192}," podman-docker",[159,49583,49584],{"class":192}," containerd",[159,49586,49587],{"class":192}," runc",[159,49589,49590],{"class":165},"; ",[159,49592,49593],{"class":1142},"do",[159,49595,49596],{"class":185}," sudo",[159,49598,49599],{"class":192}," apt-get",[159,49601,49602],{"class":192}," remove",[159,49604,49605],{"class":165}," $pkg; ",[159,49607,49608],{"class":1142},"done\n",[14,49610,49611],{},"首先安装依赖和GPG：",[151,49613,49617],{"className":49614,"code":49615,"language":49616,"meta":25,"style":25},"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",[49,49618,49619,49624,49629,49634,49639,49644,49649,49653,49658],{"__ignoreMap":25},[159,49620,49621],{"class":161,"line":162},[159,49622,49623],{},"# Add Docker's official GPG key:\n",[159,49625,49626],{"class":161,"line":176},[159,49627,49628],{},"sudo apt-get update\n",[159,49630,49631],{"class":161,"line":203},[159,49632,49633],{},"sudo apt-get install ca-certificates curl\n",[159,49635,49636],{"class":161,"line":223},[159,49637,49638],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[159,49640,49641],{"class":161,"line":233},[159,49642,49643],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[159,49645,49646],{"class":161,"line":239},[159,49647,49648],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[159,49650,49651],{"class":161,"line":245},[159,49652,590],{"emptyLinePlaceholder":589},[159,49654,49655],{"class":161,"line":251},[159,49656,49657],{},"# 如果上面这行报错就弄下面这行\n",[159,49659,49660],{"class":161,"line":261},[159,49661,49662],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,49664,49665],{},"信任 Docker 的 GPG 公钥并添加仓库：",[151,49667,49669],{"className":47347,"code":49668,"language":47349,"meta":25,"style":25},"# 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",[49,49670,49671,49676,49682,49699,49732],{"__ignoreMap":25},[159,49672,49673],{"class":161,"line":162},[159,49674,49675],{"class":1135},"# Add the repository to Apt sources:\n",[159,49677,49678,49680],{"class":161,"line":176},[159,49679,48648],{"class":1146},[159,49681,48203],{"class":1146},[159,49683,49684,49687,49690,49693,49696],{"class":161,"line":203},[159,49685,49686],{"class":192},"  \"deb [arch=$(",[159,49688,49689],{"class":185},"dpkg",[159,49691,49692],{"class":1146}," --print-architecture",[159,49694,49695],{"class":192},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[159,49697,49698],{"class":1146},"\\\n",[159,49700,49701,49704,49706,49708,49711,49714,49716,49718,49721,49723,49725,49728,49730],{"class":161,"line":223},[159,49702,49703],{"class":192},"  \"",[159,49705,48623],{"class":165},[159,49707,9952],{"class":1146},[159,49709,49710],{"class":192}," \u002Fetc\u002Fos-release",[159,49712,49713],{"class":165}," && ",[159,49715,48648],{"class":1146},[159,49717,33319],{"class":192},[159,49719,49720],{"class":165},"$VERSION_CODENAME",[159,49722,24115],{"class":192},[159,49724,18387],{"class":165},[159,49726,49727],{"class":192},"\" stable\"",[159,49729,48633],{"class":1142},[159,49731,48203],{"class":1146},[159,49733,49734,49737,49740,49743,49746],{"class":161,"line":233},[159,49735,49736],{"class":185},"  sudo",[159,49738,49739],{"class":192}," tee",[159,49741,49742],{"class":192}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[159,49744,49745],{"class":1142}," >",[159,49747,49748],{"class":192}," \u002Fdev\u002Fnull\n",[14,49750,49751],{},"最后安装",[151,49753,49755],{"className":47347,"code":49754,"language":47349,"meta":25,"style":25},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[49,49756,49757,49766],{"__ignoreMap":25},[159,49758,49759,49761,49763],{"class":161,"line":162},[159,49760,48101],{"class":185},[159,49762,49599],{"class":192},[159,49764,49765],{"class":192}," update\n",[159,49767,49768,49770,49772,49774,49777,49780,49783,49786],{"class":161,"line":176},[159,49769,48101],{"class":185},[159,49771,49599],{"class":192},[159,49773,47359],{"class":192},[159,49775,49776],{"class":192}," docker-ce",[159,49778,49779],{"class":192}," docker-ce-cli",[159,49781,49782],{"class":192}," containerd.io",[159,49784,49785],{"class":192}," docker-buildx-plugin",[159,49787,49788],{"class":192}," docker-compose-plugin\n",[326,49790,49792],{"id":49791},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,49794,49795,49796,49799,49800,49803],{},"查看自己自己包管理工具版本（dnf是 ",[61,49797,49798],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[61,49801,49802],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[151,49805,49807],{"className":47347,"code":49806,"language":47349,"meta":25,"style":25},"dnf --version\n",[49,49808,49809],{"__ignoreMap":25},[159,49810,49811,49814],{"class":161,"line":162},[159,49812,49813],{"class":185},"dnf",[159,49815,49816],{"class":1146}," --version\n",[14,49818,49542,49819,49823],{},[8085,49820,49547],{"href":49821,"rel":49822},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[15923]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,49825,49826],{},"如果你之前安装过 docker，请先删掉",[151,49828,49830],{"className":47347,"code":49829,"language":47349,"meta":25,"style":25},"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",[49,49831,49832,49846,49853,49860,49867,49874,49881,49888,49895,49902],{"__ignoreMap":25},[159,49833,49834,49836,49839,49841,49844],{"class":161,"line":162},[159,49835,48101],{"class":185},[159,49837,49838],{"class":192}," dnf",[159,49840,49602],{"class":192},[159,49842,49843],{"class":192}," docker",[159,49845,48203],{"class":1146},[159,49847,49848,49851],{"class":161,"line":176},[159,49849,49850],{"class":192},"                  docker-client",[159,49852,48203],{"class":1146},[159,49854,49855,49858],{"class":161,"line":203},[159,49856,49857],{"class":192},"                  docker-client-latest",[159,49859,48203],{"class":1146},[159,49861,49862,49865],{"class":161,"line":223},[159,49863,49864],{"class":192},"                  docker-common",[159,49866,48203],{"class":1146},[159,49868,49869,49872],{"class":161,"line":233},[159,49870,49871],{"class":192},"                  docker-latest",[159,49873,48203],{"class":1146},[159,49875,49876,49879],{"class":161,"line":239},[159,49877,49878],{"class":192},"                  docker-latest-logrotate",[159,49880,48203],{"class":1146},[159,49882,49883,49886],{"class":161,"line":245},[159,49884,49885],{"class":192},"                  docker-logrotate",[159,49887,48203],{"class":1146},[159,49889,49890,49893],{"class":161,"line":251},[159,49891,49892],{"class":192},"                  docker-selinux",[159,49894,48203],{"class":1146},[159,49896,49897,49900],{"class":161,"line":261},[159,49898,49899],{"class":192},"                  docker-engine-selinux",[159,49901,48203],{"class":1146},[159,49903,49904],{"class":161,"line":603},[159,49905,49906],{"class":192},"                  docker-engine\n",[14,49908,49909],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[151,49911,49913],{"className":47347,"code":49912,"language":47349,"meta":25,"style":25},"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",[49,49914,49915,49929,49944],{"__ignoreMap":25},[159,49916,49917,49919,49921,49924,49926],{"class":161,"line":162},[159,49918,48101],{"class":185},[159,49920,49838],{"class":192},[159,49922,49923],{"class":1146}," -y",[159,49925,47359],{"class":192},[159,49927,49928],{"class":192}," dnf-plugins-core\n",[159,49930,49931,49933,49935,49938,49941],{"class":161,"line":176},[159,49932,48101],{"class":185},[159,49934,49838],{"class":192},[159,49936,49937],{"class":192}," config-manager",[159,49939,49940],{"class":192}," addrepo",[159,49942,49943],{"class":1146}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[159,49945,49946,49948,49951,49954,49957],{"class":161,"line":203},[159,49947,48101],{"class":185},[159,49949,49950],{"class":192}," sed",[159,49952,49953],{"class":1146}," -i",[159,49955,49956],{"class":192}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[159,49958,49959],{"class":192}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,49961,49962],{},"最后安装：",[151,49964,49966],{"className":47347,"code":49965,"language":47349,"meta":25,"style":25},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[49,49967,49968],{"__ignoreMap":25},[159,49969,49970,49972,49974,49976,49978,49980,49982,49984],{"class":161,"line":162},[159,49971,48101],{"class":185},[159,49973,49838],{"class":192},[159,49975,47359],{"class":192},[159,49977,49776],{"class":192},[159,49979,49779],{"class":192},[159,49981,49782],{"class":192},[159,49983,49785],{"class":192},[159,49985,49788],{"class":192},[42,49987,49989],{"id":49988},"_22配置环境","2.2.配置环境",[326,49991,49993,49996],{"id":49992},"_221检查-docker-服务状态",[61,49994,49995],{},"2.2.1.检查 Docker 服务状态"," ：",[14,49998,49999],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[151,50001,50003],{"className":47347,"code":50002,"language":47349,"meta":25,"style":25},"systemctl status docker\n",[49,50004,50005],{"__ignoreMap":25},[159,50006,50007,50010,50013],{"class":161,"line":162},[159,50008,50009],{"class":185},"systemctl",[159,50011,50012],{"class":192}," status",[159,50014,50015],{"class":192}," docker\n",[326,50017,50019,49996],{"id":50018},"_222启动-docker-服务",[61,50020,50021],{},"2.2.2.启动 Docker 服务",[14,50023,50024],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[151,50026,50028],{"className":47347,"code":50027,"language":47349,"meta":25,"style":25},"sudo systemctl start docker\n",[49,50029,50030],{"__ignoreMap":25},[159,50031,50032,50034,50037,50039],{"class":161,"line":162},[159,50033,48101],{"class":185},[159,50035,50036],{"class":192}," systemctl",[159,50038,4666],{"class":192},[159,50040,50015],{"class":192},[326,50042,50044,49996],{"id":50043},"_223设置-docker-开机自启",[61,50045,50046],{},"2.2.3.设置 Docker 开机自启",[14,50048,50049],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[151,50051,50053],{"className":47347,"code":50052,"language":47349,"meta":25,"style":25},"sudo systemctl enable docker\n",[49,50054,50055],{"__ignoreMap":25},[159,50056,50057,50059,50061,50064],{"class":161,"line":162},[159,50058,48101],{"class":185},[159,50060,50036],{"class":192},[159,50062,50063],{"class":192}," enable",[159,50065,50015],{"class":192},[326,50067,50069,37361,50072,37361,50077,49996],{"id":50068},"_224将用户添加到-docker-组",[61,50070,50071],{},"2.2.4.将用户添加到",[61,50073,50074],{},[49,50075,50076],{},"docker",[61,50078,50079],{},"组",[14,50081,50082,50083,50085],{},"使用以下命令将当前用户添加到 ",[49,50084,50076],{}," 组：",[151,50087,50089],{"className":47347,"code":50088,"language":47349,"meta":25,"style":25},"sudo usermod -aG docker $USER\n",[49,50090,50091],{"__ignoreMap":25},[159,50092,50093,50095,50098,50101,50103],{"class":161,"line":162},[159,50094,48101],{"class":185},[159,50096,50097],{"class":192}," usermod",[159,50099,50100],{"class":1146}," -aG",[159,50102,49843],{"class":192},[159,50104,50105],{"class":165}," $USER\n",[326,50107,50109,49996],{"id":50108},"_225退出并重新登录",[61,50110,50111],{},"2.2.5.退出并重新登录",[14,50113,50114],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[151,50116,50118],{"className":47347,"code":50117,"language":47349,"meta":25,"style":25},"newgrp docker\n",[49,50119,50120],{"__ignoreMap":25},[159,50121,50122,50125],{"class":161,"line":162},[159,50123,50124],{"class":185},"newgrp",[159,50126,50015],{"class":192},[326,50128,50130,49996],{"id":50129},"_226重新启动-docker-服务如果需要",[61,50131,50132],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,50134,50135],{},"确保 Docker 服务正在运行，可以使用以下命令：",[151,50137,50138],{"className":47347,"code":50027,"language":47349,"meta":25,"style":25},[49,50139,50140],{"__ignoreMap":25},[159,50141,50142,50144,50146,50148],{"class":161,"line":162},[159,50143,48101],{"class":185},[159,50145,50036],{"class":192},[159,50147,4666],{"class":192},[159,50149,50015],{"class":192},[326,50151,50153,49996],{"id":50152},"_227重启电脑后检查-docker-服务状态",[61,50154,50155],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,50157,50158],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[151,50160,50162],{"className":47347,"code":50161,"language":47349,"meta":25,"style":25},"sudo reboot\nsystemctl status docker\n",[49,50163,50164,50171],{"__ignoreMap":25},[159,50165,50166,50168],{"class":161,"line":162},[159,50167,48101],{"class":185},[159,50169,50170],{"class":192}," reboot\n",[159,50172,50173,50175,50177],{"class":161,"line":176},[159,50174,50009],{"class":185},[159,50176,50012],{"class":192},[159,50178,50015],{"class":192},[14,50180,50181],{},[23,50182],{"alt":25,"src":50183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,50185,50186],{},"第三行显示enabled说明开机自启动成功",[14,50188,50189],{},"按q退出",[42,50191,50193],{"id":50192},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,50195,50196],{},"优先使用linux来使用docker是比较好的",[14,50198,50199],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,50201,50202],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,50204,50205,50206],{},"官方下载安装:",[8085,50207,50208],{"href":50208,"rel":50209},"https:\u002F\u002Fwww.docker.com\u002F",[15923],[14,50211,50212],{},"Windows的Docker显卡直通与USB直通:",[14,50214,50215],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,50217,50218],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,50220,50221],{},[23,50222],{"alt":25,"src":50223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,50225,50226],{},[23,50227],{"alt":25,"src":50228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,50230,50231],{},[23,50232],{"alt":25,"src":50233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1468,50235,50236],{},"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":25,"searchDepth":176,"depth":176,"links":50238},[50239,50240,50241],{"id":49516,"depth":203,"text":49517},{"id":49988,"depth":203,"text":49989},{"id":50192,"depth":203,"text":50193},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":49508,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":50248,"title":50249,"body":50250,"description":50257,"extension":23810,"meta":50950,"navigation":589,"path":50951,"seo":50952,"stem":50953,"__hash__":50954},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":50251,"toc":50944},[50252,50255,50258,50262,50267,50272,50275,50303,50308,50317,50320,50325,50329,50336,50341,50347,50351,50354,50358,50363,50455,50460,50478,50483,50504,50509,50525,50529,50534,50563,50568,50614,50619,50663,50671,50688,50693,50709,50714,50728,50731,50734,50737,50740,50769,50772,50777,50781,50784,50787,50793,50796,50799,50802,50864,50871,50876,50879,50897,50901,50904,50921,50924,50927,50941],[10,50253,50249],{"id":50254},"_3docker直通",[14,50256,50257],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[42,50259,50261],{"id":50260},"_31usb直通","3.1.USB直通",[14,50263,50264],{},[23,50265],{"alt":25,"src":50266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[134,50268,50269],{},[106,50270,50271],{},"方法一(不是很推荐新手)：",[14,50273,50274],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[151,50276,50278],{"className":47347,"code":50277,"language":47349,"meta":25,"style":25},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[49,50279,50280,50288,50293],{"__ignoreMap":25},[159,50281,50282,50285],{"class":161,"line":162},[159,50283,50284],{"class":185},"ls",[159,50286,50287],{"class":192}," \u002Fdev\n",[159,50289,50290],{"class":161,"line":176},[159,50291,50292],{"class":1135},"#例如\n",[159,50294,50295,50298,50300],{"class":161,"line":203},[159,50296,50297],{"class":165},"--device",[159,50299,189],{"class":1142},[159,50301,50302],{"class":192},"\u002Fdev\u002Ftty_USB0\n",[134,50304,50305],{"start":176},[106,50306,50307],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[151,50309,50311],{"className":47347,"code":50310,"language":47349,"meta":25,"style":25},"--privileged\n",[49,50312,50313],{"__ignoreMap":25},[159,50314,50315],{"class":161,"line":162},[159,50316,50310],{"class":185},[14,50318,50319],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,50321,50322],{},[23,50323],{"alt":25,"src":50324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[42,50326,50328],{"id":50327},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,50330,50331,50332,50335],{},"NVIDIA Container Toolkit使用户 ",[61,50333,50334],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,50337,50338],{},[23,50339],{"alt":25,"src":50340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,50342,50343],{},[8085,50344,50345],{"href":50345,"rel":50346},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[15923],[326,50348,50350],{"id":50349},"_321安装","3.2.1.安装",[14,50352,50353],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[46436,50355,50357],{"id":50356},"_3211ubuntu","3.2.1.1.Ubuntu",[134,50359,50360],{},[106,50361,50362],{},"配置存储库 并更新",[151,50364,50366],{"className":47347,"code":50365,"language":47349,"meta":25,"style":25},"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",[49,50367,50368,50397,50417,50429,50441,50447],{"__ignoreMap":25},[159,50369,50370,50373,50376,50379,50381,50383,50386,50389,50392,50395],{"class":161,"line":162},[159,50371,50372],{"class":185},"curl",[159,50374,50375],{"class":1146}," -fsSL",[159,50377,50378],{"class":192}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[159,50380,48633],{"class":1142},[159,50382,49596],{"class":185},[159,50384,50385],{"class":192}," gpg",[159,50387,50388],{"class":1146}," --dearmor",[159,50390,50391],{"class":1146}," -o",[159,50393,50394],{"class":192}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[159,50396,48203],{"class":1146},[159,50398,50399,50402,50404,50407,50410,50413,50415],{"class":161,"line":176},[159,50400,50401],{"class":165},"  && ",[159,50403,50372],{"class":185},[159,50405,50406],{"class":1146}," -s",[159,50408,50409],{"class":1146}," -L",[159,50411,50412],{"class":192}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[159,50414,48633],{"class":1142},[159,50416,48203],{"class":1146},[159,50418,50419,50422,50425,50427],{"class":161,"line":203},[159,50420,50421],{"class":185},"    sed",[159,50423,50424],{"class":192}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[159,50426,48633],{"class":1142},[159,50428,48203],{"class":1146},[159,50430,50431,50434,50436,50439],{"class":161,"line":223},[159,50432,50433],{"class":185},"    sudo",[159,50435,49739],{"class":192},[159,50437,50438],{"class":192}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[159,50440,48203],{"class":1146},[159,50442,50443,50445],{"class":161,"line":233},[159,50444,50401],{"class":165},[159,50446,49698],{"class":1146},[159,50448,50449,50451,50453],{"class":161,"line":239},[159,50450,50433],{"class":185},[159,50452,49599],{"class":192},[159,50454,49765],{"class":192},[134,50456,50457],{"start":176},[106,50458,50459],{},"安装nvidia-docker2",[151,50461,50463],{"className":47347,"code":50462,"language":47349,"meta":25,"style":25},"sudo apt-get install -y nvidia-docker2\n",[49,50464,50465],{"__ignoreMap":25},[159,50466,50467,50469,50471,50473,50475],{"class":161,"line":162},[159,50468,48101],{"class":185},[159,50470,49599],{"class":192},[159,50472,47359],{"class":192},[159,50474,49923],{"class":1146},[159,50476,50477],{"class":192}," nvidia-docker2\n",[134,50479,50480],{"start":203},[106,50481,50482],{},"使用nvidia-ctk命令配置container runtime",[151,50484,50486],{"className":47347,"code":50485,"language":47349,"meta":25,"style":25},"sudo nvidia-ctk runtime configure --runtime=docker\n",[49,50487,50488],{"__ignoreMap":25},[159,50489,50490,50492,50495,50498,50501],{"class":161,"line":162},[159,50491,48101],{"class":185},[159,50493,50494],{"class":192}," nvidia-ctk",[159,50496,50497],{"class":192}," runtime",[159,50499,50500],{"class":192}," configure",[159,50502,50503],{"class":1146}," --runtime=docker\n",[134,50505,50506],{"start":223},[106,50507,50508],{},"重启docker服务:",[151,50510,50512],{"className":47347,"code":50511,"language":47349,"meta":25,"style":25},"sudo systemctl restart docker\n",[49,50513,50514],{"__ignoreMap":25},[159,50515,50516,50518,50520,50523],{"class":161,"line":162},[159,50517,48101],{"class":185},[159,50519,50036],{"class":192},[159,50521,50522],{"class":192}," restart",[159,50524,50015],{"class":192},[46436,50526,50528],{"id":50527},"_3212fedora","3.2.1.2.Fedora",[134,50530,50531],{},[106,50532,50533],{},"配置存储库",[151,50535,50537],{"className":47347,"code":50536,"language":47349,"meta":25,"style":25},"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",[49,50538,50539,50554],{"__ignoreMap":25},[159,50540,50541,50543,50545,50547,50550,50552],{"class":161,"line":162},[159,50542,50372],{"class":185},[159,50544,50406],{"class":1146},[159,50546,50409],{"class":1146},[159,50548,50549],{"class":192}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[159,50551,48633],{"class":1142},[159,50553,48203],{"class":1146},[159,50555,50556,50558,50560],{"class":161,"line":176},[159,50557,48101],{"class":185},[159,50559,49739],{"class":192},[159,50561,50562],{"class":192}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[134,50564,50565],{"start":176},[106,50566,50567],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[151,50569,50571],{"className":47347,"code":50570,"language":47349,"meta":25,"style":25},"# 如果是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",[49,50572,50573,50578,50592,50596,50601],{"__ignoreMap":25},[159,50574,50575],{"class":161,"line":162},[159,50576,50577],{"class":1135},"# 如果是RHEL或者Rocky（DNF4）\n",[159,50579,50580,50582,50584,50586,50589],{"class":161,"line":176},[159,50581,48101],{"class":185},[159,50583,49838],{"class":192},[159,50585,49937],{"class":192},[159,50587,50588],{"class":1146}," --add-repo",[159,50590,50591],{"class":192}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[159,50593,50594],{"class":161,"line":203},[159,50595,590],{"emptyLinePlaceholder":589},[159,50597,50598],{"class":161,"line":223},[159,50599,50600],{"class":1135},"# 如果是Feodra41+（DNF5）\n",[159,50602,50603,50605,50607,50609,50611],{"class":161,"line":233},[159,50604,48101],{"class":185},[159,50606,49838],{"class":192},[159,50608,49937],{"class":192},[159,50610,49940],{"class":192},[159,50612,50613],{"class":1146}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[134,50615,50616],{"start":203},[106,50617,50618],{},"安装NVIDIA Container Toolki包",[151,50620,50622],{"className":47347,"code":50621,"language":47349,"meta":25,"style":25},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[49,50623,50624,50629,50642,50646,50651],{"__ignoreMap":25},[159,50625,50626],{"class":161,"line":162},[159,50627,50628],{"class":1135},"# 如果是RHEL或者Rocky\n",[159,50630,50631,50633,50635,50637,50639],{"class":161,"line":176},[159,50632,48101],{"class":185},[159,50634,49838],{"class":192},[159,50636,47359],{"class":192},[159,50638,49923],{"class":1146},[159,50640,50641],{"class":192}," nvidia-container-toolkit\n",[159,50643,50644],{"class":161,"line":203},[159,50645,590],{"emptyLinePlaceholder":589},[159,50647,50648],{"class":161,"line":223},[159,50649,50650],{"class":1135},"# 如果是Fedora\n",[159,50652,50653,50655,50657,50659,50661],{"class":161,"line":233},[159,50654,48101],{"class":185},[159,50656,49838],{"class":192},[159,50658,47359],{"class":192},[159,50660,49923],{"class":1146},[159,50662,50641],{"class":192},[134,50664,50665],{"start":223},[106,50666,50667,50668,50670],{},"安装nvidia-docker2 ： 在Fedora上使用",[49,50669,49813],{},"进行安装",[151,50672,50674],{"className":47347,"code":50673,"language":47349,"meta":25,"style":25},"sudo dnf install -y nvidia-docker2\n",[49,50675,50676],{"__ignoreMap":25},[159,50677,50678,50680,50682,50684,50686],{"class":161,"line":162},[159,50679,48101],{"class":185},[159,50681,49838],{"class":192},[159,50683,47359],{"class":192},[159,50685,49923],{"class":1146},[159,50687,50477],{"class":192},[134,50689,50690],{"start":233},[106,50691,50692],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[151,50694,50695],{"className":47347,"code":50485,"language":47349,"meta":25,"style":25},[49,50696,50697],{"__ignoreMap":25},[159,50698,50699,50701,50703,50705,50707],{"class":161,"line":162},[159,50700,48101],{"class":185},[159,50702,50494],{"class":192},[159,50704,50497],{"class":192},[159,50706,50500],{"class":192},[159,50708,50503],{"class":1146},[134,50710,50711],{"start":239},[106,50712,50713],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[151,50715,50716],{"className":47347,"code":50511,"language":47349,"meta":25,"style":25},[49,50717,50718],{"__ignoreMap":25},[159,50719,50720,50722,50724,50726],{"class":161,"line":162},[159,50721,48101],{"class":185},[159,50723,50036],{"class":192},[159,50725,50522],{"class":192},[159,50727,50015],{"class":192},[14,50729,50730],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,50732,50733],{},"方法：",[14,50735,50736],{},"1️⃣nvidia-smi",[14,50738,50739],{},"2️⃣运行nvidia cuda 容器进行测试",[151,50741,50743],{"className":47347,"code":50742,"language":47349,"meta":25,"style":25},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[49,50744,50745],{"__ignoreMap":25},[159,50746,50747,50749,50751,50754,50757,50760,50763,50766],{"class":161,"line":162},[159,50748,48101],{"class":185},[159,50750,49843],{"class":192},[159,50752,50753],{"class":192}," run",[159,50755,50756],{"class":1146}," --rm",[159,50758,50759],{"class":1146}," --gpus",[159,50761,50762],{"class":192}," all",[159,50764,50765],{"class":192}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[159,50767,50768],{"class":192}," nvidia-smi\n",[14,50770,50771],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,50773,50774],{},[23,50775],{"alt":25,"src":50776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[42,50778,50780],{"id":50779},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,50782,50783],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,50785,50786],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,50788,50789],{},[8085,50790,50791],{"href":50791,"rel":50792},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[15923],[14,50794,50795],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,50797,50798],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,50800,50801],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[12347,50803,50804,50820],{},[16500,50805,50806],{},[12356,50807,50808,50811,50814,50817],{},[12365,50809,50810],{"align":19854},"镜像类型",[12365,50812,50813],{"align":19854},"适用场景",[12365,50815,50816],{"align":19854},"示例标签",[12365,50818,50819],{"align":19854},"大小",[16624,50821,50822,50836,50850],{},[12356,50823,50824,50827,50830,50833],{},[12488,50825,50826],{"align":19854},"base",[12488,50828,50829],{"align":19854},"仅需 CUDA 运行时库",[12488,50831,50832],{"align":19854},"12.4.0-base-ubuntu22.04",[12488,50834,50835],{"align":19854},"~240MB",[12356,50837,50838,50841,50844,50847],{},[12488,50839,50840],{"align":19854},"runtime",[12488,50842,50843],{"align":19854},"部署编译后的应用（含数学库）",[12488,50845,50846],{"align":19854},"12.4.0-runtime-ubuntu22.04",[12488,50848,50849],{"align":19854},"~2GB",[12356,50851,50852,50855,50858,50861],{},[12488,50853,50854],{"align":19854},"devel",[12488,50856,50857],{"align":19854},"开发环境（含编译工具）",[12488,50859,50860],{"align":19854},"12.4.0-devel-ubuntu22.04",[12488,50862,50863],{"align":19854},"~3GB",[14,50865,50866,50867,50870],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[49,50868,50869],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,50872,50873],{},[23,50874],{"alt":25,"src":50875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,50877,50878],{},"在dockerfile里就可以开头这么写：",[151,50880,50882],{"className":47347,"code":50881,"language":47349,"meta":25,"style":25},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[49,50883,50884,50889],{"__ignoreMap":25},[159,50885,50886],{"class":161,"line":162},[159,50887,50888],{"class":1135},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[159,50890,50891,50894],{"class":161,"line":176},[159,50892,50893],{"class":185},"FROM",[159,50895,50896],{"class":192}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[42,50898,50900],{"id":50899},"_34配置以太网","3.4.配置以太网",[14,50902,50903],{},"指定网络模式",[151,50905,50907],{"className":47347,"code":50906,"language":47349,"meta":25,"style":25},"--net=host \\\n",[49,50908,50909],{"__ignoreMap":25},[159,50910,50911,50914,50916,50919],{"class":161,"line":162},[159,50912,50913],{"class":165},"--net",[159,50915,189],{"class":1142},[159,50917,50918],{"class":192},"host",[159,50920,48203],{"class":185},[14,50922,50923],{},"启动参数里加上这行即可。具体在下方",[14,50925,50926],{},"--net选项：指定网络模式，该选项有以下参数可选：",[103,50928,50929,50932,50935,50938],{},[106,50930,50931],{},"--net=bridge:默认选项，表示连接到默认的网桥",[106,50933,50934],{},"--net=host:容器使用宿主机的网络",[106,50936,50937],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[106,50939,50940],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1468,50942,50943],{},"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":25,"searchDepth":176,"depth":176,"links":50945},[50946,50947,50948,50949],{"id":50260,"depth":203,"text":50261},{"id":50327,"depth":203,"text":50328},{"id":50779,"depth":203,"text":50780},{"id":50899,"depth":203,"text":50900},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":50249,"description":50257},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":50956,"title":50957,"body":50958,"description":50965,"extension":23810,"meta":50971,"navigation":589,"path":50972,"seo":50973,"stem":50974,"__hash__":50975},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":50959,"toc":50969},[50960,50963,50966],[10,50961,50957],{"id":50962},"_4dockerhub换源",[14,50964,50965],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,50967,50968],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":25,"searchDepth":176,"depth":176,"links":50970},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":50957,"description":50965},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":50977,"title":50978,"body":50979,"description":25,"extension":23810,"meta":51990,"navigation":589,"path":51991,"seo":51992,"stem":51993,"__hash__":51994},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":50980,"toc":51985},[50981,50984,50988,50994,50998,51001,51341,51344,51347,51350,51355,51360,51363,51366,51369,51372,51391,51394,51405,51411,51593,51603,51619,51881,51883,51908,51923,51932,51982],[10,50982,50978],{"id":50983},"_5docker命令学习",[42,50985,50987],{"id":50986},"_51参考文档","5.1.参考文档",[14,50989,50990],{},[8085,50991,50992],{"href":50992,"rel":50993},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[15923],[42,50995,50997],{"id":50996},"_52常用命令","5.2.常用命令",[14,50999,51000],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[12347,51002,51003,51016],{},[16500,51004,51005],{},[12356,51006,51007,51010,51013],{},[12365,51008,51009],{"align":19854},"命令",[12365,51011,51012],{"align":19854},"描述",[12365,51014,51015],{"align":19854},"示例",[16624,51017,51018,51029,51040,51051,51062,51073,51084,51095,51105,51116,51127,51138,51148,51159,51170,51181,51191,51201,51211,51221,51232,51243,51254,51265,51276,51287,51297,51308,51319,51330],{},[12356,51019,51020,51023,51026],{},[12488,51021,51022],{"align":19854},"docker run",[12488,51024,51025],{"align":19854},"创建并启动一个新的容器。",[12488,51027,51028],{"align":19854},"docker run -it ubuntu bash",[12356,51030,51031,51034,51037],{},[12488,51032,51033],{"align":19854},"docker build",[12488,51035,51036],{"align":19854},"通过指定的 Dockerfile 创建一个新的镜像。",[12488,51038,51039],{"align":19854},"docker build -t myimage .",[12356,51041,51042,51045,51048],{},[12488,51043,51044],{"align":19854},"docker pull",[12488,51046,51047],{"align":19854},"从 Docker 仓库拉取镜像。",[12488,51049,51050],{"align":19854},"docker pull ubuntu",[12356,51052,51053,51056,51059],{},[12488,51054,51055],{"align":19854},"docker push",[12488,51057,51058],{"align":19854},"将本地镜像推送到 Docker 仓库。",[12488,51060,51061],{"align":19854},"docker push myimage",[12356,51063,51064,51067,51070],{},[12488,51065,51066],{"align":19854},"docker stop",[12488,51068,51069],{"align":19854},"停止一个正在运行的容器。",[12488,51071,51072],{"align":19854},"docker stop container_id",[12356,51074,51075,51078,51081],{},[12488,51076,51077],{"align":19854},"docker start",[12488,51079,51080],{"align":19854},"启动一个已经存在的容器。",[12488,51082,51083],{"align":19854},"docker start container_id",[12356,51085,51086,51089,51092],{},[12488,51087,51088],{"align":19854},"docker restart",[12488,51090,51091],{"align":19854},"重新启动容器。",[12488,51093,51094],{"align":19854},"docker restart container_id",[12356,51096,51097,51100,51103],{},[12488,51098,51099],{"align":19854},"docker ps",[12488,51101,51102],{"align":19854},"列出当前正在运行的容器。",[12488,51104,51099],{"align":19854},[12356,51106,51107,51110,51113],{},[12488,51108,51109],{"align":19854},"docker rm",[12488,51111,51112],{"align":19854},"删除一个或多个停止的容器。",[12488,51114,51115],{"align":19854},"docker rm container_id",[12356,51117,51118,51121,51124],{},[12488,51119,51120],{"align":19854},"docker exec",[12488,51122,51123],{"align":19854},"在一个正在运行的容器中执行命令。",[12488,51125,51126],{"align":19854},"docker exec -it container_id bash",[12356,51128,51129,51132,51135],{},[12488,51130,51131],{"align":19854},"docker logs",[12488,51133,51134],{"align":19854},"查看容器的日志输出。",[12488,51136,51137],{"align":19854},"docker logs container_id",[12356,51139,51140,51143,51146],{},[12488,51141,51142],{"align":19854},"docker images",[12488,51144,51145],{"align":19854},"列出本地所有镜像。",[12488,51147,51142],{"align":19854},[12356,51149,51150,51153,51156],{},[12488,51151,51152],{"align":19854},"docker rmi",[12488,51154,51155],{"align":19854},"删除一个或多个镜像。",[12488,51157,51158],{"align":19854},"docker rmi myimage",[12356,51160,51161,51164,51167],{},[12488,51162,51163],{"align":19854},"docker network",[12488,51165,51166],{"align":19854},"管理 Docker 网络。",[12488,51168,51169],{"align":19854},"docker network ls",[12356,51171,51172,51175,51178],{},[12488,51173,51174],{"align":19854},"docker volume",[12488,51176,51177],{"align":19854},"管理 Docker 数据卷。",[12488,51179,51180],{"align":19854},"docker volume ls",[12356,51182,51183,51186,51189],{},[12488,51184,51185],{"align":19854},"docker-compose up",[12488,51187,51188],{"align":19854},"启动 docker-compose.yml 中定义的所有服务。",[12488,51190,51185],{"align":19854},[12356,51192,51193,51196,51199],{},[12488,51194,51195],{"align":19854},"docker-compose down",[12488,51197,51198],{"align":19854},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[12488,51200,51195],{"align":19854},[12356,51202,51203,51206,51209],{},[12488,51204,51205],{"align":19854},"docker info",[12488,51207,51208],{"align":19854},"显示 Docker 系统的详细信息。",[12488,51210,51205],{"align":19854},[12356,51212,51213,51216,51219],{},[12488,51214,51215],{"align":19854},"docker stats",[12488,51217,51218],{"align":19854},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[12488,51220,51215],{"align":19854},[12356,51222,51223,51226,51229],{},[12488,51224,51225],{"align":19854},"docker inspect",[12488,51227,51228],{"align":19854},"查看容器或镜像的详细信息（JSON 格式）。",[12488,51230,51231],{"align":19854},"docker inspect container_id",[12356,51233,51234,51237,51240],{},[12488,51235,51236],{"align":19854},"docker save",[12488,51238,51239],{"align":19854},"将一个镜像保存为 tar 文件。",[12488,51241,51242],{"align":19854},"docker save -o myimage.tar myimage",[12356,51244,51245,51248,51251],{},[12488,51246,51247],{"align":19854},"docker load",[12488,51249,51250],{"align":19854},"从 tar 文件中加载镜像。",[12488,51252,51253],{"align":19854},"docker load -i myimage.tar",[12356,51255,51256,51259,51262],{},[12488,51257,51258],{"align":19854},"docker tag",[12488,51260,51261],{"align":19854},"为镜像添加标签（tag）。",[12488,51263,51264],{"align":19854},"docker tag myimage myimage:v1",[12356,51266,51267,51270,51273],{},[12488,51268,51269],{"align":19854},"docker buildx build",[12488,51271,51272],{"align":19854},"使用 Buildx 构建多架构镜像。",[12488,51274,51275],{"align":19854},"docker buildx build -t myimage .",[12356,51277,51278,51281,51284],{},[12488,51279,51280],{"align":19854},"docker buildx create",[12488,51282,51283],{"align":19854},"创建一个新的 Buildx 构建实例。",[12488,51285,51286],{"align":19854},"docker buildx create –use",[12356,51288,51289,51292,51295],{},[12488,51290,51291],{"align":19854},"docker buildx ls",[12488,51293,51294],{"align":19854},"列出所有可用的 Buildx 构建实例。",[12488,51296,51291],{"align":19854},[12356,51298,51299,51302,51305],{},[12488,51300,51301],{"align":19854},"docker buildx use",[12488,51303,51304],{"align":19854},"设置当前的 Buildx 构建实例。",[12488,51306,51307],{"align":19854},"docker buildx use mybuilder",[12356,51309,51310,51313,51316],{},[12488,51311,51312],{"align":19854},"docker buildx bake",[12488,51314,51315],{"align":19854},"使用 Bake 文件批量构建镜像。",[12488,51317,51318],{"align":19854},"docker buildx bake -f bake.hcl",[12356,51320,51321,51324,51327],{},[12488,51322,51323],{"align":19854},"docker buildx build –push",[12488,51325,51326],{"align":19854},"构建镜像并推送到镜像仓库。",[12488,51328,51329],{"align":19854},"docker buildx build –push -t myimage .",[12356,51331,51332,51335,51338],{},[12488,51333,51334],{"align":19854},"docker buildx build –platform",[12488,51336,51337],{"align":19854},"构建镜像并为多个平台生成支持。",[12488,51339,51340],{"align":19854},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,51342,51343],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,51345,51346],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,51348,51349],{},"docker images 可以查看已经下载的镜像",[14,51351,51352],{},[23,51353],{"alt":25,"src":51354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,51356,51357],{},[61,51358,51359],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,51361,51362],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,51364,51365],{},"docker container logs 查看容器日志",[14,51367,51368],{},"docker top 查看容器里的进程",[14,51370,51371],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[151,51373,51375],{"className":47347,"code":51374,"language":47349,"meta":25,"style":25},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[49,51376,51377],{"__ignoreMap":25},[159,51378,51379,51382,51385,51388],{"class":161,"line":162},[159,51380,51381],{"class":185},"如：docker",[159,51383,51384],{"class":192}," cp",[159,51386,51387],{"class":192}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[159,51389,51390],{"class":192}," \u002Fmydata\u002Fnginx\n",[14,51392,51393],{},"docker run时在启动容器的时候会有几个常用的选项：",[103,51395,51396,51399,51402],{},[106,51397,51398],{},"-d选项：表示后台运行",[106,51400,51401],{},"-P选项：随机端口映射",[106,51403,51404],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[42,51406,51408],{"id":51407},"_53run命令的参数非常重要",[61,51409,51410],{},"5.3.run命令的参数（非常重要）",[12347,51412,51413,51426],{},[16500,51414,51415],{},[12356,51416,51417,51420,51423],{},[12365,51418,51419],{"align":19854},"参数\u002F配置",[12365,51421,51422],{"align":19854},"功能说明",[12365,51424,51425],{"align":19854},"重要性与参考依据",[16624,51427,51428,51439,51450,51461,51472,51483,51494,51505,51516,51527,51538,51549,51560,51571,51582],{},[12356,51429,51430,51433,51436],{},[12488,51431,51432],{"align":19854},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[12488,51434,51435],{"align":19854},"指定容器名称，便于后续管理",[12488,51437,51438],{"align":19854},"替代随机生成的容器名。",[12356,51440,51441,51444,51447],{},[12488,51442,51443],{"align":19854},"–gpus all",[12488,51445,51446],{"align":19854},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[12488,51448,51449],{"align":19854},"用于CUDA加速等GPU依赖任务。",[12356,51451,51452,51455,51458],{},[12488,51453,51454],{"align":19854},"-e NVIDIA_DRIVER_CAPABILITIES=all",[12488,51456,51457],{"align":19854},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[12488,51459,51460],{"align":19854},"确保容器内GPU功能完整67。",[12356,51462,51463,51466,51469],{},[12488,51464,51465],{"align":19854},"-dit",[12488,51467,51468],{"align":19854},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[12488,51470,51471],{"align":19854},"允许容器在后台运行并支持交互操作。",[12356,51473,51474,51477,51480],{},[12488,51475,51476],{"align":19854},"–privileged",[12488,51478,51479],{"align":19854},"赋予容器完全主机权限（可访问设备、内核模块等）",[12488,51481,51482],{"align":19854},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[12356,51484,51485,51488,51491],{},[12488,51486,51487],{"align":19854},"–net=host",[12488,51489,51490],{"align":19854},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[12488,51492,51493],{"align":19854},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[12356,51495,51496,51499,51502],{},[12488,51497,51498],{"align":19854},"–group-add audio–group-add video–group-add dialout",[12488,51500,51501],{"align":19854},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[12488,51503,51504],{"align":19854},"避免权限问题（如避免无法调用摄像头、麦克风）。",[12356,51506,51507,51510,51513],{},[12488,51508,51509],{"align":19854},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[12488,51511,51512],{"align":19854},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[12488,51514,51515],{"align":19854},"支持容器内运行图形界面应用（如OpenCV可视化）。",[12356,51517,51518,51521,51524],{},[12488,51519,51520],{"align":19854},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[12488,51522,51523],{"align":19854},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[12488,51525,51526],{"align":19854},"实现容器内图形显示。",[12356,51528,51529,51532,51535],{},[12488,51530,51531],{"align":19854},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[12488,51533,51534],{"align":19854},"挂载X11认证文件（只读）",[12488,51536,51537],{"align":19854},"确保容器有权连接宿主机显示服务。",[12356,51539,51540,51543,51546],{},[12488,51541,51542],{"align":19854},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[12488,51544,51545],{"align":19854},"挂载Wayland显示协议相关目录",[12488,51547,51548],{"align":19854},"支持Wayland协议的图形显示。",[12356,51550,51551,51554,51557],{},[12488,51552,51553],{"align":19854},"–ulimit nofile=1024:524288",[12488,51555,51556],{"align":19854},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[12488,51558,51559],{"align":19854},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[12356,51561,51562,51565,51568],{},[12488,51563,51564],{"align":19854},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[12488,51566,51567],{"align":19854},"挂载宿主机用户目录到容器内同名路径",[12488,51569,51570],{"align":19854},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[12356,51572,51573,51576,51579],{},[12488,51574,51575],{"align":19854},"-w \u002Fhome\u002Ftungchiahui",[12488,51577,51578],{"align":19854},"设置容器启动后的默认工作目录",[12488,51580,51581],{"align":19854},"直接进入项目路径，方便执行命令2324。",[12356,51583,51584,51587,51590],{},[12488,51585,51586],{"align":19854},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[12488,51588,51589],{"align":19854},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[12488,51591,51592],{"align":19854},"提供预配置的深度学习与机器人开发环境。",[14,51594,51595,51596,51598,51599,51602],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[49,51597,48101],{},"加不加",[49,51600,51601],{},"sudo -E","都无所谓。",[14,51604,51605,51606,51608,51609,51611,51612,51615,51616,51618],{},"用户已经被加到docker组了，不用",[49,51607,48101],{},"也行跑，其次，",[49,51610,48101],{},"运行的话，你的",[49,51613,51614],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[49,51617,51614],{},"更不可能变了。",[151,51620,51622],{"className":47347,"code":51621,"language":47349,"meta":25,"style":25},"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",[49,51623,51624,51637,51646,51656,51668,51675,51682,51689,51699,51708,51717,51731,51743,51755,51764,51774,51783,51798,51831,51858,51869,51876],{"__ignoreMap":25},[159,51625,51626,51628,51630,51632,51635],{"class":161,"line":162},[159,51627,48101],{"class":185},[159,51629,49843],{"class":192},[159,51631,50753],{"class":192},[159,51633,51634],{"class":1146}," --name=ros_opencv_cuda",[159,51636,48203],{"class":1146},[159,51638,51639,51642,51644],{"class":161,"line":176},[159,51640,51641],{"class":165},"--gpus ",[159,51643,8903],{"class":192},[159,51645,48203],{"class":1146},[159,51647,51648,51651,51654],{"class":161,"line":203},[159,51649,51650],{"class":165},"-e ",[159,51652,51653],{"class":192},"NVIDIA_DRIVER_CAPABILITIES=all",[159,51655,48203],{"class":1146},[159,51657,51658,51660,51663,51666],{"class":161,"line":223},[159,51659,51650],{"class":165},[159,51661,51662],{"class":192},"DISPLAY=",[159,51664,51665],{"class":165},"$DISPLAY ",[159,51667,49698],{"class":1146},[159,51669,51670,51673],{"class":161,"line":233},[159,51671,51672],{"class":165},"-dit ",[159,51674,49698],{"class":1146},[159,51676,51677,51680],{"class":161,"line":239},[159,51678,51679],{"class":165},"--privileged ",[159,51681,49698],{"class":1146},[159,51683,51684,51687],{"class":161,"line":245},[159,51685,51686],{"class":165},"--net=host ",[159,51688,49698],{"class":1146},[159,51690,51691,51694,51697],{"class":161,"line":251},[159,51692,51693],{"class":165},"--group-add ",[159,51695,51696],{"class":192},"audio",[159,51698,48203],{"class":1146},[159,51700,51701,51703,51706],{"class":161,"line":261},[159,51702,51693],{"class":165},[159,51704,51705],{"class":192},"video",[159,51707,48203],{"class":1146},[159,51709,51710,51712,51715],{"class":161,"line":603},[159,51711,51693],{"class":165},[159,51713,51714],{"class":192},"dialout",[159,51716,48203],{"class":1146},[159,51718,51719,51721,51724,51726,51729],{"class":161,"line":621},[159,51720,51650],{"class":165},[159,51722,51723],{"class":192},"XAUTHORITY=",[159,51725,51614],{"class":165},[159,51727,51728],{"class":192},"\u002F.Xauthority",[159,51730,48203],{"class":1146},[159,51732,51733,51735,51738,51741],{"class":161,"line":634},[159,51734,51650],{"class":165},[159,51736,51737],{"class":192},"WAYLAND_DISPLAY=",[159,51739,51740],{"class":165},"$WAYLAND_DISPLAY ",[159,51742,49698],{"class":1146},[159,51744,51745,51747,51750,51753],{"class":161,"line":640},[159,51746,51650],{"class":165},[159,51748,51749],{"class":192},"XDG_RUNTIME_DIR=",[159,51751,51752],{"class":165},"$XDG_RUNTIME_DIR ",[159,51754,49698],{"class":1146},[159,51756,51757,51759,51762],{"class":161,"line":1075},[159,51758,51650],{"class":165},[159,51760,51761],{"class":192},"QT_QPA_PLATFORM=xcb",[159,51763,48203],{"class":1146},[159,51765,51766,51769,51772],{"class":161,"line":1081},[159,51767,51768],{"class":165},"-v ",[159,51770,51771],{"class":192},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[159,51773,48203],{"class":1146},[159,51775,51776,51778,51781],{"class":161,"line":1091},[159,51777,51768],{"class":165},[159,51779,51780],{"class":192},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[159,51782,48203],{"class":1146},[159,51784,51785,51788,51791,51793,51796],{"class":161,"line":1100},[159,51786,51787],{"class":165},"-v $HOME",[159,51789,51790],{"class":192},"\u002F.Xauthority:",[159,51792,51614],{"class":165},[159,51794,51795],{"class":192},"\u002F.Xauthority:ro",[159,51797,48203],{"class":1146},[159,51799,51800,51802,51805,51807,51810,51813,51815,51818,51820,51822,51824,51826,51829],{"class":161,"line":1123},[159,51801,51768],{"class":165},[159,51803,51804],{"class":192},"\u002Frun\u002Fuser\u002F",[159,51806,48623],{"class":165},[159,51808,51809],{"class":185},"id",[159,51811,51812],{"class":1146}," -u",[159,51814,18387],{"class":165},[159,51816,51817],{"class":192},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[159,51819,48623],{"class":165},[159,51821,51809],{"class":185},[159,51823,51812],{"class":1146},[159,51825,18387],{"class":165},[159,51827,51828],{"class":192},"\u002Fwayland-0",[159,51830,48203],{"class":1146},[159,51832,51833,51835,51837,51839,51841,51843,51845,51848,51850,51852,51854,51856],{"class":161,"line":1132},[159,51834,51768],{"class":165},[159,51836,51804],{"class":192},[159,51838,48623],{"class":165},[159,51840,51809],{"class":185},[159,51842,51812],{"class":1146},[159,51844,18387],{"class":165},[159,51846,51847],{"class":192},":\u002Frun\u002Fuser\u002F",[159,51849,48623],{"class":165},[159,51851,51809],{"class":185},[159,51853,51812],{"class":1146},[159,51855,2710],{"class":165},[159,51857,49698],{"class":1146},[159,51859,51860,51862,51864,51867],{"class":161,"line":1139},[159,51861,51787],{"class":165},[159,51863,20934],{"class":192},[159,51865,51866],{"class":165},"$HOME ",[159,51868,49698],{"class":1146},[159,51870,51871,51874],{"class":161,"line":1168},[159,51872,51873],{"class":165},"-w $HOME ",[159,51875,49698],{"class":1146},[159,51877,51878],{"class":161,"line":1174},[159,51879,51880],{"class":165},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,51882,32623],{},[134,51884,51885,51893,51896,51899],{},[106,51886,51887,37361,51889,51892],{},[49,51888,51653],{},[49,51890,51891],{},"--gpus all","没有英伟达显卡请注释。",[106,51894,51895],{},"--name后面请自己为容器起名。",[106,51897,51898],{},"最后一行仓库名称请你自己找对应的镜像填上。",[106,51900,51901,51902,51907],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[47079,51903,51904],{},[61,51905,51906],{},"请不要加","。",[151,51909,51911],{"className":47347,"code":51910,"language":47349,"meta":25,"style":25},"--ulimit nofile=1024:524288 \\\n",[49,51912,51913],{"__ignoreMap":25},[159,51914,51915,51918,51921],{"class":161,"line":162},[159,51916,51917],{"class":185},"--ulimit",[159,51919,51920],{"class":192}," nofile=1024:524288",[159,51922,48203],{"class":1146},[14,51924,51925,51926,51931],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[47079,51927,51928],{},[61,51929,51930],{},"不建议","**.**",[151,51933,51935],{"className":47347,"code":51934,"language":47349,"meta":25,"style":25},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[49,51936,51937,51964,51973],{"__ignoreMap":25},[159,51938,51939,51942,51945,51947,51949,51951,51953,51955,51957,51960,51962],{"class":161,"line":162},[159,51940,51941],{"class":185},"--user",[159,51943,51944],{"class":165}," $(",[159,51946,51809],{"class":185},[159,51948,51812],{"class":1146},[159,51950,18387],{"class":165},[159,51952,20934],{"class":192},[159,51954,48623],{"class":165},[159,51956,51809],{"class":185},[159,51958,51959],{"class":1146}," -g",[159,51961,2710],{"class":165},[159,51963,49698],{"class":1146},[159,51965,51966,51968,51971],{"class":161,"line":176},[159,51967,51768],{"class":165},[159,51969,51970],{"class":192},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[159,51972,48203],{"class":1146},[159,51974,51975,51977,51980],{"class":161,"line":203},[159,51976,51768],{"class":165},[159,51978,51979],{"class":192},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[159,51981,48203],{"class":1146},[1468,51983,51984],{},"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":25,"searchDepth":176,"depth":176,"links":51986},[51987,51988,51989],{"id":50986,"depth":203,"text":50987},{"id":50996,"depth":203,"text":50997},{"id":51407,"depth":203,"text":51410},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":50978,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":51996,"title":51997,"body":51998,"description":25,"extension":23810,"meta":53621,"navigation":589,"path":53622,"seo":53623,"stem":53624,"__hash__":53625},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":51999,"toc":53616},[52000,52003,52007,52010,52232,52236,52240,52243,52349,52354,52357,52362,52365,52370,52373,52378,52381,52393,52396,52401,52408,52436,52443,52519,52524,52527,52550,52552,52627,52632,52635,52639,52647,52652,52657,52661,52672,52678,52681,52684,52708,52711,52714,52742,52745,52748,53213,53216,53221,53226,53230,53253,53258,53262,53266,53269,53272,53275,53302,53305,53308,53326,53329,53332,53354,53362,53367,53372,53376,53379,53382,53385,53388,53433,53436,53454,53457,53462,53465,53486,53489,53545,53548,53553,53557,53560,53567,53570,53573,53578,53581,53597,53600,53613],[10,52001,51997],{"id":52002},"_6手动创建docker镜像",[42,52004,52006],{"id":52005},"_61dockerfile","6.1.DockerFile",[14,52008,52009],{},"常用命令：",[12347,52011,52012,52023],{},[16500,52013,52014],{},[12356,52015,52016,52019,52021],{},[12365,52017,52018],{"align":19854},"指令",[12365,52020,49392],{"align":19854},[12365,52022,51015],{"align":19854},[16624,52024,52025,52035,52051,52062,52073,52084,52095,52106,52117,52131,52145,52156,52170,52181,52192,52206,52221],{},[12356,52026,52027,52029,52032],{},[12488,52028,50893],{"align":19854},[12488,52030,52031],{"align":19854},"指定基础镜像，是 Dockerfile 的起点",[12488,52033,52034],{"align":19854},"FROM ubuntu:22.04",[12356,52036,52037,52040,52043],{},[12488,52038,52039],{"align":19854},"LABEL",[12488,52041,52042],{"align":19854},"添加元数据（如作者、版本等）",[12488,52044,52045,52046,52050],{"align":19854},"LABEL maintainer=”",[8085,52047,52049],{"href":52048},"mailto:you@example.com","you@example.com","”",[12356,52052,52053,52056,52059],{},[12488,52054,52055],{"align":19854},"ENV",[12488,52057,52058],{"align":19854},"设置环境变量",[12488,52060,52061],{"align":19854},"ENV PORT=8080",[12356,52063,52064,52067,52070],{},[12488,52065,52066],{"align":19854},"ARG",[12488,52068,52069],{"align":19854},"构建参数，只在构建期间可用",[12488,52071,52072],{"align":19854},"ARG VERSION=1.0",[12356,52074,52075,52078,52081],{},[12488,52076,52077],{"align":19854},"RUN",[12488,52079,52080],{"align":19854},"构建镜像时运行命令",[12488,52082,52083],{"align":19854},"RUN apt-get update && apt-get install -y curl",[12356,52085,52086,52089,52092],{},[12488,52087,52088],{"align":19854},"COPY",[12488,52090,52091],{"align":19854},"复制文件到镜像中",[12488,52093,52094],{"align":19854},"COPY . \u002Fapp",[12356,52096,52097,52100,52103],{},[12488,52098,52099],{"align":19854},"ADD",[12488,52101,52102],{"align":19854},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[12488,52104,52105],{"align":19854},"ADD archive.tar.gz \u002Fdata\u002F",[12356,52107,52108,52111,52114],{},[12488,52109,52110],{"align":19854},"WORKDIR",[12488,52112,52113],{"align":19854},"设置工作目录",[12488,52115,52116],{"align":19854},"WORKDIR \u002Fopt",[12356,52118,52119,52122,52125],{},[12488,52120,52121],{"align":19854},"CMD",[12488,52123,52124],{"align":19854},"设置容器启动时默认命令（可被 docker run 覆盖）",[12488,52126,52127,52128],{"align":19854},"CMD ",[159,52129,52130],{},"“node”, “index.js”",[12356,52132,52133,52136,52139],{},[12488,52134,52135],{"align":19854},"ENTRYPOINT",[12488,52137,52138],{"align":19854},"设置容器启动时固定命令（通常用于 CLI 工具等）",[12488,52140,52141,52142],{"align":19854},"ENTRYPOINT ",[159,52143,52144],{},"“python3”",[12356,52146,52147,52150,52153],{},[12488,52148,52149],{"align":19854},"EXPOSE",[12488,52151,52152],{"align":19854},"声明镜像内服务监听的端口（不会自动映射）",[12488,52154,52155],{"align":19854},"EXPOSE 80",[12356,52157,52158,52161,52164],{},[12488,52159,52160],{"align":19854},"VOLUME",[12488,52162,52163],{"align":19854},"声明数据卷挂载点",[12488,52165,52166,52167],{"align":19854},"VOLUME ",[159,52168,52169],{},"“\u002Fdata”",[12356,52171,52172,52175,52178],{},[12488,52173,52174],{"align":19854},"USER",[12488,52176,52177],{"align":19854},"设置后续命令执行的用户",[12488,52179,52180],{"align":19854},"USER appuser",[12356,52182,52183,52186,52189],{},[12488,52184,52185],{"align":19854},"ONBUILD",[12488,52187,52188],{"align":19854},"当镜像作为其他镜像基础镜像时触发的构建指令",[12488,52190,52191],{"align":19854},"ONBUILD COPY . \u002Fsrc",[12356,52193,52194,52197,52200],{},[12488,52195,52196],{"align":19854},"SHELL",[12488,52198,52199],{"align":19854},"更改默认 shell，比如将 sh -c 改为 bash -c",[12488,52201,52202,52203],{"align":19854},"SHELL ",[159,52204,52205],{},"“\u002Fbin\u002Fbash”, “-c”",[12356,52207,52208,52211,52214],{},[12488,52209,52210],{"align":19854},"HEALTHCHECK",[12488,52212,52213],{"align":19854},"定义容器运行时的健康检查命令",[12488,52215,52216,52217],{"align":19854},"`HEALTHCHECK CMD curl –fail ",[8085,52218,52219],{"href":52219,"rel":52220},"http:\u002F\u002Flocalhost:8080",[15923],[12356,52222,52223,52226,52229],{},[12488,52224,52225],{"align":19854},"STOPSIGNAL",[12488,52227,52228],{"align":19854},"容器停止时发送的信号",[12488,52230,52231],{"align":19854},"STOPSIGNAL SIGKILL",[42,52233,52235],{"id":52234},"_62自己创建容器","6.2.自己创建容器",[326,52237,52239],{"id":52238},"_621手动创建","6.2.1.手动创建",[14,52241,52242],{},"在x86电脑上编译x86的：",[151,52244,52246],{"className":47347,"code":52245,"language":47349,"meta":25,"style":25},"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",[49,52247,52248,52264,52268,52281,52285,52298,52302,52315,52319,52332,52336],{"__ignoreMap":25},[159,52249,52250,52252,52255,52258,52261],{"class":161,"line":162},[159,52251,50076],{"class":185},[159,52253,52254],{"class":192}," build",[159,52256,52257],{"class":1146}," -t",[159,52259,52260],{"class":192}," ros-melodic-cuda118-cudnn8-bionic:latest",[159,52262,52263],{"class":192}," .\n",[159,52265,52266],{"class":161,"line":176},[159,52267,590],{"emptyLinePlaceholder":589},[159,52269,52270,52272,52274,52276,52279],{"class":161,"line":203},[159,52271,50076],{"class":185},[159,52273,52254],{"class":192},[159,52275,52257],{"class":1146},[159,52277,52278],{"class":192}," ros-noetic-focal:latest",[159,52280,52263],{"class":192},[159,52282,52283],{"class":161,"line":223},[159,52284,590],{"emptyLinePlaceholder":589},[159,52286,52287,52289,52291,52293,52296],{"class":161,"line":233},[159,52288,50076],{"class":185},[159,52290,52254],{"class":192},[159,52292,52257],{"class":1146},[159,52294,52295],{"class":192}," ros-humble-jammy:latest",[159,52297,52263],{"class":192},[159,52299,52300],{"class":161,"line":239},[159,52301,590],{"emptyLinePlaceholder":589},[159,52303,52304,52306,52308,52310,52313],{"class":161,"line":245},[159,52305,50076],{"class":185},[159,52307,52254],{"class":192},[159,52309,52257],{"class":1146},[159,52311,52312],{"class":192}," ros-jazzy-noble:latest",[159,52314,52263],{"class":192},[159,52316,52317],{"class":161,"line":251},[159,52318,590],{"emptyLinePlaceholder":589},[159,52320,52321,52323,52325,52327,52330],{"class":161,"line":261},[159,52322,50076],{"class":185},[159,52324,52254],{"class":192},[159,52326,52257],{"class":1146},[159,52328,52329],{"class":192}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[159,52331,52263],{"class":192},[159,52333,52334],{"class":161,"line":603},[159,52335,590],{"emptyLinePlaceholder":589},[159,52337,52338,52340,52342,52344,52347],{"class":161,"line":621},[159,52339,50076],{"class":185},[159,52341,52254],{"class":192},[159,52343,52257],{"class":1146},[159,52345,52346],{"class":192}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[159,52348,52263],{"class":192},[14,52350,52351],{},[23,52352],{"alt":25,"src":52353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,52355,52356],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,52358,52359],{},[23,52360],{"alt":25,"src":52361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,52363,52364],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[134,52366,52367],{},[106,52368,52369],{},"创建 Docker Hub 账户",[14,52371,52372],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[134,52374,52375],{"start":176},[106,52376,52377],{},"登录 Docker Hub",[14,52379,52380],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[151,52382,52384],{"className":47347,"code":52383,"language":47349,"meta":25,"style":25},"docker login\n",[49,52385,52386],{"__ignoreMap":25},[159,52387,52388,52390],{"class":161,"line":162},[159,52389,50076],{"class":185},[159,52391,52392],{"class":192}," login\n",[14,52394,52395],{},"输入你的 Docker Hub 用户名和密码进行验证。",[134,52397,52398],{},[106,52399,52400],{},"为你的镜像打标签",[14,52402,52403,52404,52407],{},"Docker Hub 使用 ",[49,52405,52406],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[151,52409,52411],{"className":47347,"code":52410,"language":47349,"meta":25,"style":25},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[49,52412,52413],{"__ignoreMap":25},[159,52414,52415,52417,52420,52422,52425,52428,52431,52433],{"class":161,"line":162},[159,52416,50076],{"class":185},[159,52418,52419],{"class":192}," tag",[159,52421,52312],{"class":192},[159,52423,52424],{"class":1142}," \u003C",[159,52426,52427],{"class":192},"你的用户",[159,52429,52430],{"class":165},"名",[159,52432,6760],{"class":1142},[159,52434,52435],{"class":192},"\u002Fros-jazzy-noble:latest\n",[14,52437,52438,52439,52442],{},"例如，如果你的 Docker Hub 用户名是 ",[49,52440,52441],{},"tungchiahui","，你应该执行：",[151,52444,52446],{"className":47347,"code":52445,"language":47349,"meta":25,"style":25},"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",[49,52447,52448,52459,52463,52474,52478,52489,52493,52504,52508],{"__ignoreMap":25},[159,52449,52450,52452,52454,52456],{"class":161,"line":162},[159,52451,50076],{"class":185},[159,52453,52419],{"class":192},[159,52455,52278],{"class":192},[159,52457,52458],{"class":192}," tungchiahui\u002Fros-noetic-focal:latest\n",[159,52460,52461],{"class":161,"line":176},[159,52462,590],{"emptyLinePlaceholder":589},[159,52464,52465,52467,52469,52471],{"class":161,"line":203},[159,52466,50076],{"class":185},[159,52468,52419],{"class":192},[159,52470,52295],{"class":192},[159,52472,52473],{"class":192}," tungchiahui\u002Fros-humble-jammy:latest\n",[159,52475,52476],{"class":161,"line":223},[159,52477,590],{"emptyLinePlaceholder":589},[159,52479,52480,52482,52484,52486],{"class":161,"line":233},[159,52481,50076],{"class":185},[159,52483,52419],{"class":192},[159,52485,52312],{"class":192},[159,52487,52488],{"class":192}," tungchiahui\u002Fros-jazzy-noble:latest\n",[159,52490,52491],{"class":161,"line":239},[159,52492,590],{"emptyLinePlaceholder":589},[159,52494,52495,52497,52499,52501],{"class":161,"line":245},[159,52496,50076],{"class":185},[159,52498,52419],{"class":192},[159,52500,52329],{"class":192},[159,52502,52503],{"class":192}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[159,52505,52506],{"class":161,"line":251},[159,52507,590],{"emptyLinePlaceholder":589},[159,52509,52510,52512,52514,52516],{"class":161,"line":261},[159,52511,50076],{"class":185},[159,52513,52419],{"class":192},[159,52515,52346],{"class":192},[159,52517,52518],{"class":192}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[134,52520,52521],{"start":176},[106,52522,52523],{},"推送镜像到 Docker Hub",[14,52525,52526],{},"使用以下命令将镜像推送到 Docker Hub：",[151,52528,52530],{"className":47347,"code":52529,"language":47349,"meta":25,"style":25},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[49,52531,52532],{"__ignoreMap":25},[159,52533,52534,52536,52539,52541,52543,52545,52547],{"class":161,"line":162},[159,52535,50076],{"class":185},[159,52537,52538],{"class":192}," push",[159,52540,52424],{"class":1142},[159,52542,52427],{"class":192},[159,52544,52430],{"class":165},[159,52546,6760],{"class":1142},[159,52548,52549],{"class":192},"\u002Fros-noetic-jazzy-noble:latest\n",[14,52551,38199],{},[151,52553,52555],{"className":47347,"code":52554,"language":47349,"meta":25,"style":25},"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",[49,52556,52557,52565,52569,52577,52581,52589,52593,52602,52606,52614,52618],{"__ignoreMap":25},[159,52558,52559,52561,52563],{"class":161,"line":162},[159,52560,50076],{"class":185},[159,52562,52538],{"class":192},[159,52564,52458],{"class":192},[159,52566,52567],{"class":161,"line":176},[159,52568,590],{"emptyLinePlaceholder":589},[159,52570,52571,52573,52575],{"class":161,"line":203},[159,52572,50076],{"class":185},[159,52574,52538],{"class":192},[159,52576,52473],{"class":192},[159,52578,52579],{"class":161,"line":223},[159,52580,590],{"emptyLinePlaceholder":589},[159,52582,52583,52585,52587],{"class":161,"line":233},[159,52584,50076],{"class":185},[159,52586,52538],{"class":192},[159,52588,52488],{"class":192},[159,52590,52591],{"class":161,"line":239},[159,52592,590],{"emptyLinePlaceholder":589},[159,52594,52595,52597,52599],{"class":161,"line":245},[159,52596,50076],{"class":185},[159,52598,52538],{"class":192},[159,52600,52601],{"class":192}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[159,52603,52604],{"class":161,"line":251},[159,52605,590],{"emptyLinePlaceholder":589},[159,52607,52608,52610,52612],{"class":161,"line":261},[159,52609,50076],{"class":185},[159,52611,52538],{"class":192},[159,52613,52518],{"class":192},[159,52615,52616],{"class":161,"line":603},[159,52617,590],{"emptyLinePlaceholder":589},[159,52619,52620,52622,52624],{"class":161,"line":621},[159,52621,50076],{"class":185},[159,52623,52538],{"class":192},[159,52625,52626],{"class":192}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[134,52628,52629],{"start":203},[106,52630,52631],{},"验证推送成功",[14,52633,52634],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,52636,52637],{},[61,52638,27408],{},[103,52640,52641,52644],{},[106,52642,52643],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[106,52645,52646],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,52648,52649],{},[23,52650],{"alt":25,"src":52651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,52653,52654],{},[23,52655],{"alt":25,"src":52656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[326,52658,52660],{"id":52659},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,52662,52663,52664,52667,52668,52671],{},"如果您想在 ",[61,52665,52666],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[61,52669,52670],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,52673,52674,52675],{},"1. ",[61,52676,52677],{},"启用 Docker 跨平台构建",[14,52679,52680],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,52682,52683],{},"第一步：启用 buildx（只需执行一次）",[151,52685,52687],{"className":47347,"code":52686,"language":47349,"meta":25,"style":25},"docker buildx create --name multiarch_builder --use\n",[49,52688,52689],{"__ignoreMap":25},[159,52690,52691,52693,52696,52699,52702,52705],{"class":161,"line":162},[159,52692,50076],{"class":185},[159,52694,52695],{"class":192}," buildx",[159,52697,52698],{"class":192}," create",[159,52700,52701],{"class":1146}," --name",[159,52703,52704],{"class":192}," multiarch_builder",[159,52706,52707],{"class":1146}," --use\n",[14,52709,52710],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,52712,52713],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[151,52715,52717],{"className":47347,"code":52716,"language":47349,"meta":25,"style":25},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[49,52718,52719],{"__ignoreMap":25},[159,52720,52721,52723,52725,52727,52730,52733,52736,52739],{"class":161,"line":162},[159,52722,50076],{"class":185},[159,52724,50753],{"class":192},[159,52726,50756],{"class":1146},[159,52728,52729],{"class":1146}," --privileged",[159,52731,52732],{"class":192}," multiarch\u002Fqemu-user-static",[159,52734,52735],{"class":1146}," --reset",[159,52737,52738],{"class":1146}," -p",[159,52740,52741],{"class":192}," yes\n",[14,52743,52744],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,52746,52747],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[151,52749,52751],{"className":47347,"code":52750,"language":47349,"meta":25,"style":25},"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",[49,52752,52753,52795,52799,52804,52814,52824,52833,52839,52843,52847,52857,52865,52874,52880,52884,52888,52898,52906,52915,52921,52925,52929,52939,52947,52956,52962,52966,52970,52980,52988,52997,53003,53007,53011,53021,53029,53038,53044,53048,53052,53062,53070,53079,53085,53089,53093,53103,53111,53120,53126,53130,53134,53144,53152,53161,53167,53171,53175,53186,53194,53203,53209],{"__ignoreMap":25},[159,52754,52755,52757,52759,52761,52764,52767,52769,52771,52774,52776,52778,52780,52782,52785,52788,52790,52793],{"class":161,"line":162},[159,52756,50076],{"class":185},[159,52758,52695],{"class":192},[159,52760,52254],{"class":192},[159,52762,52763],{"class":1146}," --platform",[159,52765,52766],{"class":192}," linux\u002Famd64,linux\u002Farm64",[159,52768,52257],{"class":1146},[159,52770,52424],{"class":1142},[159,52772,52773],{"class":192},"你的镜像",[159,52775,52430],{"class":165},[159,52777,6760],{"class":1142},[159,52779,20934],{"class":192},[159,52781,166],{"class":1142},[159,52783,52784],{"class":192},"标",[159,52786,52787],{"class":165},"签",[159,52789,6760],{"class":1142},[159,52791,52792],{"class":1146}," --push",[159,52794,52263],{"class":192},[159,52796,52797],{"class":161,"line":176},[159,52798,590],{"emptyLinePlaceholder":589},[159,52800,52801],{"class":161,"line":203},[159,52802,52803],{"class":1135},"# 例子：\n",[159,52805,52806,52808,52810,52812],{"class":161,"line":223},[159,52807,50076],{"class":185},[159,52809,52695],{"class":192},[159,52811,52254],{"class":192},[159,52813,48203],{"class":1146},[159,52815,52816,52819,52822],{"class":161,"line":233},[159,52817,52818],{"class":165},"--platform ",[159,52820,52821],{"class":192},"linux\u002Famd64,linux\u002Farm64",[159,52823,48203],{"class":1146},[159,52825,52826,52828,52831],{"class":161,"line":239},[159,52827,52257],{"class":1146},[159,52829,52830],{"class":192}," tungchiahui\u002Fros:noetic-focal",[159,52832,48203],{"class":1146},[159,52834,52835,52837],{"class":161,"line":245},[159,52836,52792],{"class":1146},[159,52838,48203],{"class":1146},[159,52840,52841],{"class":161,"line":251},[159,52842,52263],{"class":192},[159,52844,52845],{"class":161,"line":261},[159,52846,590],{"emptyLinePlaceholder":589},[159,52848,52849,52851,52853,52855],{"class":161,"line":603},[159,52850,50076],{"class":185},[159,52852,52695],{"class":192},[159,52854,52254],{"class":192},[159,52856,48203],{"class":1146},[159,52858,52859,52861,52863],{"class":161,"line":621},[159,52860,52818],{"class":165},[159,52862,52821],{"class":192},[159,52864,48203],{"class":1146},[159,52866,52867,52869,52872],{"class":161,"line":634},[159,52868,52257],{"class":1146},[159,52870,52871],{"class":192}," tungchiahui\u002Fros:humble-jammy",[159,52873,48203],{"class":1146},[159,52875,52876,52878],{"class":161,"line":640},[159,52877,52792],{"class":1146},[159,52879,48203],{"class":1146},[159,52881,52882],{"class":161,"line":1075},[159,52883,52263],{"class":192},[159,52885,52886],{"class":161,"line":1081},[159,52887,590],{"emptyLinePlaceholder":589},[159,52889,52890,52892,52894,52896],{"class":161,"line":1091},[159,52891,50076],{"class":185},[159,52893,52695],{"class":192},[159,52895,52254],{"class":192},[159,52897,48203],{"class":1146},[159,52899,52900,52902,52904],{"class":161,"line":1100},[159,52901,52818],{"class":165},[159,52903,52821],{"class":192},[159,52905,48203],{"class":1146},[159,52907,52908,52910,52913],{"class":161,"line":1123},[159,52909,52257],{"class":1146},[159,52911,52912],{"class":192}," tungchiahui\u002Fros:jazzy-noble",[159,52914,48203],{"class":1146},[159,52916,52917,52919],{"class":161,"line":1132},[159,52918,52792],{"class":1146},[159,52920,48203],{"class":1146},[159,52922,52923],{"class":161,"line":1139},[159,52924,52263],{"class":192},[159,52926,52927],{"class":161,"line":1168},[159,52928,590],{"emptyLinePlaceholder":589},[159,52930,52931,52933,52935,52937],{"class":161,"line":1174},[159,52932,49843],{"class":185},[159,52934,52695],{"class":192},[159,52936,52254],{"class":192},[159,52938,48203],{"class":1146},[159,52940,52941,52943,52945],{"class":161,"line":1180},[159,52942,52818],{"class":165},[159,52944,52821],{"class":192},[159,52946,48203],{"class":1146},[159,52948,52949,52951,52954],{"class":161,"line":1194},[159,52950,52257],{"class":1146},[159,52952,52953],{"class":192}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[159,52955,48203],{"class":1146},[159,52957,52958,52960],{"class":161,"line":1200},[159,52959,52792],{"class":1146},[159,52961,48203],{"class":1146},[159,52963,52964],{"class":161,"line":1221},[159,52965,52263],{"class":192},[159,52967,52968],{"class":161,"line":1230},[159,52969,590],{"emptyLinePlaceholder":589},[159,52971,52972,52974,52976,52978],{"class":161,"line":1247},[159,52973,50076],{"class":185},[159,52975,52695],{"class":192},[159,52977,52254],{"class":192},[159,52979,48203],{"class":1146},[159,52981,52982,52984,52986],{"class":161,"line":1265},[159,52983,52818],{"class":165},[159,52985,52821],{"class":192},[159,52987,48203],{"class":1146},[159,52989,52990,52992,52995],{"class":161,"line":1277},[159,52991,52257],{"class":1146},[159,52993,52994],{"class":192}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[159,52996,48203],{"class":1146},[159,52998,52999,53001],{"class":161,"line":1283},[159,53000,52792],{"class":1146},[159,53002,48203],{"class":1146},[159,53004,53005],{"class":161,"line":1294},[159,53006,52263],{"class":192},[159,53008,53009],{"class":161,"line":1305},[159,53010,590],{"emptyLinePlaceholder":589},[159,53012,53013,53015,53017,53019],{"class":161,"line":1311},[159,53014,49843],{"class":185},[159,53016,52695],{"class":192},[159,53018,52254],{"class":192},[159,53020,48203],{"class":1146},[159,53022,53023,53025,53027],{"class":161,"line":1322},[159,53024,52818],{"class":165},[159,53026,52821],{"class":192},[159,53028,48203],{"class":1146},[159,53030,53031,53033,53036],{"class":161,"line":1327},[159,53032,52257],{"class":1146},[159,53034,53035],{"class":192}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[159,53037,48203],{"class":1146},[159,53039,53040,53042],{"class":161,"line":1336},[159,53041,52792],{"class":1146},[159,53043,48203],{"class":1146},[159,53045,53046],{"class":161,"line":1345},[159,53047,52263],{"class":192},[159,53049,53050],{"class":161,"line":1350},[159,53051,590],{"emptyLinePlaceholder":589},[159,53053,53054,53056,53058,53060],{"class":161,"line":1764},[159,53055,50076],{"class":185},[159,53057,52695],{"class":192},[159,53059,52254],{"class":192},[159,53061,48203],{"class":1146},[159,53063,53064,53066,53068],{"class":161,"line":1769},[159,53065,52818],{"class":165},[159,53067,52821],{"class":192},[159,53069,48203],{"class":1146},[159,53071,53072,53074,53077],{"class":161,"line":1777},[159,53073,52257],{"class":1146},[159,53075,53076],{"class":192}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[159,53078,48203],{"class":1146},[159,53080,53081,53083],{"class":161,"line":1788},[159,53082,52792],{"class":1146},[159,53084,48203],{"class":1146},[159,53086,53087],{"class":161,"line":1802},[159,53088,52263],{"class":192},[159,53090,53091],{"class":161,"line":1815},[159,53092,590],{"emptyLinePlaceholder":589},[159,53094,53095,53097,53099,53101],{"class":161,"line":1828},[159,53096,50076],{"class":185},[159,53098,52695],{"class":192},[159,53100,52254],{"class":192},[159,53102,48203],{"class":1146},[159,53104,53105,53107,53109],{"class":161,"line":1841},[159,53106,52818],{"class":165},[159,53108,52821],{"class":192},[159,53110,48203],{"class":1146},[159,53112,53113,53115,53118],{"class":161,"line":1852},[159,53114,52257],{"class":1146},[159,53116,53117],{"class":192}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[159,53119,48203],{"class":1146},[159,53121,53122,53124],{"class":161,"line":1866},[159,53123,52792],{"class":1146},[159,53125,48203],{"class":1146},[159,53127,53128],{"class":161,"line":1879},[159,53129,52263],{"class":192},[159,53131,53132],{"class":161,"line":1884},[159,53133,590],{"emptyLinePlaceholder":589},[159,53135,53136,53138,53140,53142],{"class":161,"line":1889},[159,53137,49843],{"class":185},[159,53139,52695],{"class":192},[159,53141,52254],{"class":192},[159,53143,48203],{"class":1146},[159,53145,53146,53148,53150],{"class":161,"line":1899},[159,53147,52818],{"class":165},[159,53149,52821],{"class":192},[159,53151,48203],{"class":1146},[159,53153,53154,53156,53159],{"class":161,"line":1912},[159,53155,52257],{"class":1146},[159,53157,53158],{"class":192}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[159,53160,48203],{"class":1146},[159,53162,53163,53165],{"class":161,"line":1925},[159,53164,52792],{"class":1146},[159,53166,48203],{"class":1146},[159,53168,53169],{"class":161,"line":1956},[159,53170,52263],{"class":192},[159,53172,53173],{"class":161,"line":1971},[159,53174,590],{"emptyLinePlaceholder":589},[159,53176,53177,53180,53182,53184],{"class":161,"line":1976},[159,53178,53179],{"class":185},"  docker",[159,53181,52695],{"class":192},[159,53183,52254],{"class":192},[159,53185,48203],{"class":1146},[159,53187,53188,53190,53192],{"class":161,"line":1981},[159,53189,52818],{"class":165},[159,53191,52821],{"class":192},[159,53193,48203],{"class":1146},[159,53195,53196,53198,53201],{"class":161,"line":1989},[159,53197,52257],{"class":1146},[159,53199,53200],{"class":192}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[159,53202,48203],{"class":1146},[159,53204,53205,53207],{"class":161,"line":2001},[159,53206,52792],{"class":1146},[159,53208,48203],{"class":1146},[159,53210,53211],{"class":161,"line":2006},[159,53212,52263],{"class":192},[14,53214,53215],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,53217,53218],{},[23,53219],{"alt":25,"src":53220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,53222,53223],{},[23,53224],{"alt":25,"src":53225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[326,53227,53229],{"id":53228},"_623清除构建缓存","6.2.3.清除构建缓存",[151,53231,53233],{"className":47347,"code":53232,"language":47349,"meta":25,"style":25},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[49,53234,53235,53240],{"__ignoreMap":25},[159,53236,53237],{"class":161,"line":162},[159,53238,53239],{"class":1135},"# 清理BuildKit构建缓存\n",[159,53241,53242,53244,53247,53250],{"class":161,"line":176},[159,53243,50076],{"class":185},[159,53245,53246],{"class":192}," builder",[159,53248,53249],{"class":192}," prune",[159,53251,53252],{"class":1146}," -f\n",[14,53254,53255],{},[23,53256],{"alt":25,"src":53257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[42,53259,53261],{"id":53260},"_63补充","6.3.补充",[326,53263,53265],{"id":53264},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,53267,53268],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,53270,53271],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,53273,53274],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[151,53276,53278],{"className":47347,"code":53277,"language":47349,"meta":25,"style":25},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[49,53279,53280,53287],{"__ignoreMap":25},[159,53281,53282,53284],{"class":161,"line":162},[159,53283,50893],{"class":185},[159,53285,53286],{"class":192}," nginx\n",[159,53288,53289,53291,53294,53297,53299],{"class":161,"line":176},[159,53290,52077],{"class":185},[159,53292,53293],{"class":192}," echo",[159,53295,53296],{"class":192}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[159,53298,49745],{"class":1142},[159,53300,53301],{"class":192}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,53303,53304],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,53306,53307],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[151,53309,53311],{"className":47347,"code":53310,"language":47349,"meta":25,"style":25},"docker build -t nginx:tuling .\n",[49,53312,53313],{"__ignoreMap":25},[159,53314,53315,53317,53319,53321,53324],{"class":161,"line":162},[159,53316,50076],{"class":185},[159,53318,52254],{"class":192},[159,53320,52257],{"class":1146},[159,53322,53323],{"class":192}," nginx:tuling",[159,53325,52263],{"class":192},[14,53327,53328],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,53330,53331],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[151,53333,53335],{"className":47347,"code":53334,"language":47349,"meta":25,"style":25},"docker run -d -p 92:80 nginx:tuling\n",[49,53336,53337],{"__ignoreMap":25},[159,53338,53339,53341,53343,53346,53348,53351],{"class":161,"line":162},[159,53340,50076],{"class":185},[159,53342,50753],{"class":192},[159,53344,53345],{"class":1146}," -d",[159,53347,52738],{"class":1146},[159,53349,53350],{"class":192}," 92:80",[159,53352,53353],{"class":192}," nginx:tuling\n",[14,53355,53356,53357],{},"4、访问 ",[8085,53358,53361],{"href":53359,"rel":53360},"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",[15923],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,53363,53364],{},[23,53365],{"alt":25,"src":53366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,53368,53369],{},[23,53370],{"alt":25,"src":53371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[326,53373,53375],{"id":53374},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,53377,53378],{},"只需要知道大体流程即可",[14,53380,53381],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,53383,53384],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,53386,53387],{},"2、在Dockerfile中添加以下内容",[151,53389,53391],{"className":49614,"code":53390,"language":49616,"meta":25,"style":25},"# 基于哪个镜像\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",[49,53392,53393,53398,53403,53408,53413,53418,53423,53428],{"__ignoreMap":25},[159,53394,53395],{"class":161,"line":162},[159,53396,53397],{},"# 基于哪个镜像\n",[159,53399,53400],{"class":161,"line":176},[159,53401,53402],{},"From java:8\n",[159,53404,53405],{"class":161,"line":203},[159,53406,53407],{},"# 复制文件到容器\n",[159,53409,53410],{"class":161,"line":223},[159,53411,53412],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[159,53414,53415],{"class":161,"line":233},[159,53416,53417],{},"# 声明需要暴露的端口\n",[159,53419,53420],{"class":161,"line":239},[159,53421,53422],{},"EXPOSE 8877\n",[159,53424,53425],{"class":161,"line":245},[159,53426,53427],{},"# 配置容器启动后执行的命令\n",[159,53429,53430],{"class":161,"line":251},[159,53431,53432],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,53434,53435],{},"3、使用docker build命令构建镜像",[151,53437,53439],{"className":47347,"code":53438,"language":47349,"meta":25,"style":25},"docker build -t tulingmall-member:0.0.5 .\n",[49,53440,53441],{"__ignoreMap":25},[159,53442,53443,53445,53447,53449,53452],{"class":161,"line":162},[159,53444,50076],{"class":185},[159,53446,52254],{"class":192},[159,53448,52257],{"class":1146},[159,53450,53451],{"class":192}," tulingmall-member:0.0.5",[159,53453,52263],{"class":192},[14,53455,53456],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,53458,53459],{},[23,53460],{"alt":25,"src":53461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,53463,53464],{},"4、启动镜像，加-d可在后台启动",[151,53466,53468],{"className":47347,"code":53467,"language":47349,"meta":25,"style":25},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[49,53469,53470],{"__ignoreMap":25},[159,53471,53472,53474,53476,53478,53480,53483],{"class":161,"line":162},[159,53473,50076],{"class":185},[159,53475,50753],{"class":192},[159,53477,53345],{"class":1146},[159,53479,52738],{"class":1146},[159,53481,53482],{"class":192}," 8877:8877",[159,53484,53485],{"class":192}," tulingmall-member:0.0.5\n",[14,53487,53488],{},"加上JVM参数：",[151,53490,53492],{"className":47347,"code":53491,"language":47349,"meta":25,"style":25},"# --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",[49,53493,53494,53499,53514,53524,53533,53540],{"__ignoreMap":25},[159,53495,53496],{"class":161,"line":162},[159,53497,53498],{"class":1135},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[159,53500,53501,53503,53505,53508,53510,53512],{"class":161,"line":176},[159,53502,50076],{"class":185},[159,53504,50753],{"class":192},[159,53506,53507],{"class":1146},"  -d",[159,53509,52738],{"class":1146},[159,53511,53482],{"class":192},[159,53513,48203],{"class":1146},[159,53515,53516,53518,53521],{"class":161,"line":203},[159,53517,51650],{"class":165},[159,53519,53520],{"class":192},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[159,53522,53523],{"class":1146},"  \\\n",[159,53525,53526,53528,53531],{"class":161,"line":223},[159,53527,51650],{"class":165},[159,53529,53530],{"class":192},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[159,53532,53523],{"class":1146},[159,53534,53535,53538],{"class":161,"line":233},[159,53536,53537],{"class":165},"--cap-add=SYS_PTRACE  ",[159,53539,49698],{"class":1146},[159,53541,53542],{"class":161,"line":239},[159,53543,53544],{"class":165},"tulingmall-member:0.0.5\n",[14,53546,53547],{},"5、访问会员服务接口",[14,53549,53550],{},[23,53551],{"alt":25,"src":53552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[326,53554,53556],{"id":53555},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,53558,53559],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,53561,53562,53563],{},"阿里云docker镜像仓库：",[8085,53564,53565],{"href":53565,"rel":53566},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[15923],[14,53568,53569],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,53571,53572],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,53574,53575],{},[23,53576],{"alt":25,"src":53577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,53579,53580],{},"要把镜像推送到镜像仓库",[151,53582,53584],{"className":47347,"code":53583,"language":47349,"meta":25,"style":25},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[49,53585,53586],{"__ignoreMap":25},[159,53587,53588,53590,53592,53594],{"class":161,"line":162},[159,53589,50076],{"class":185},[159,53591,52419],{"class":192},[159,53593,53451],{"class":192},[159,53595,53596],{"class":192}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,53598,53599],{},"最后将镜像推送到远程仓库",[151,53601,53603],{"className":47347,"code":53602,"language":47349,"meta":25,"style":25},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[49,53604,53605],{"__ignoreMap":25},[159,53606,53607,53609,53611],{"class":161,"line":162},[159,53608,50076],{"class":185},[159,53610,52538],{"class":192},[159,53612,53596],{"class":192},[1468,53614,53615],{},"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":25,"searchDepth":176,"depth":176,"links":53617},[53618,53619,53620],{"id":52005,"depth":203,"text":52006},{"id":52234,"depth":203,"text":52235},{"id":53260,"depth":203,"text":53261},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":51997,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":53627,"title":53628,"body":53629,"description":25,"extension":23810,"meta":53772,"navigation":589,"path":53773,"seo":53774,"stem":53775,"__hash__":53776},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":53630,"toc":53770},[53631,53634,53639,53644,53647,53652,53657,53660,53665,53670,53673,53678,53681,53684,53687,53690,53693,53696,53716,53738,53741,53744,53764,53767],[10,53632,53628],{"id":53633},"_7vscode远程开发",[134,53635,53636],{},[106,53637,53638],{},"插件1：微软Docker工具",[14,53640,53641],{},[23,53642],{"alt":25,"src":53643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,53645,53646],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,53648,53649],{},[23,53650],{"alt":25,"src":53651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[134,53653,53654],{"start":176},[106,53655,53656],{},"插件2：微软Docker远程开发工具",[14,53658,53659],{},"下面这是远程开发的插件。",[14,53661,53662],{},[23,53663],{"alt":25,"src":53664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,53666,53667],{},[23,53668],{"alt":25,"src":53669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,53671,53672],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,53674,53675],{},[23,53676],{"alt":25,"src":53677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,53679,53680],{},"安装完拓展之后，vscode进行链接：",[14,53682,53683],{},"1.按ctrl+shift+p",[14,53685,53686],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,53688,53689],{},"3.选择目前运行的容器",[14,53691,53692],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,53694,53695],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[151,53697,53699],{"className":47347,"code":53698,"language":47349,"meta":25,"style":25},"docker run -v 主机目录:容器目录 image-name\n",[49,53700,53701],{"__ignoreMap":25},[159,53702,53703,53705,53707,53710,53713],{"class":161,"line":162},[159,53704,50076],{"class":185},[159,53706,50753],{"class":192},[159,53708,53709],{"class":1146}," -v",[159,53711,53712],{"class":192}," 主机目录:容器目录",[159,53714,53715],{"class":192}," image-name\n",[151,53717,53719],{"className":47347,"code":53718,"language":47349,"meta":25,"style":25},"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",[49,53720,53721],{"__ignoreMap":25},[159,53722,53723,53725,53727,53730,53732,53735],{"class":161,"line":162},[159,53724,50076],{"class":185},[159,53726,50753],{"class":192},[159,53728,53729],{"class":1146}," -it",[159,53731,53709],{"class":1146},[159,53733,53734],{"class":192}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[159,53736,53737],{"class":192}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,53739,53740],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,53742,53743],{},"查看挂载情况：",[151,53745,53747],{"className":47347,"code":53746,"language":47349,"meta":25,"style":25},"mount | grep -i project\n",[49,53748,53749],{"__ignoreMap":25},[159,53750,53751,53754,53756,53759,53761],{"class":161,"line":162},[159,53752,53753],{"class":185},"mount",[159,53755,48633],{"class":1142},[159,53757,53758],{"class":185}," grep",[159,53760,49953],{"class":1146},[159,53762,53763],{"class":192}," project\n",[14,53765,53766],{},"也可以通过ls来进行查看",[1468,53768,53769],{},"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":25,"searchDepth":176,"depth":176,"links":53771},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":53628,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":53778,"title":53779,"body":53780,"description":23809,"extension":23810,"meta":53784,"navigation":589,"path":53786,"seo":53787,"stem":53788,"__hash__":53789},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":53781,"toc":53782},[],{"title":25,"searchDepth":176,"depth":176,"links":53783},[],{"category":53785},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":53779,"description":23809},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":53791,"title":53792,"body":53793,"description":23809,"extension":23810,"meta":53797,"navigation":589,"path":53798,"seo":53799,"stem":53800,"__hash__":53801},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":53794,"toc":53795},[],{"title":25,"searchDepth":176,"depth":176,"links":53796},[],{"category":53785},"\u002Fwiki\u002F2025-11-10-k8s",{"title":53792,"description":23809},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":53803,"title":53804,"body":53805,"description":23809,"extension":23810,"meta":54097,"navigation":589,"path":54098,"seo":54099,"stem":54100,"__hash__":54101},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":53806,"toc":54095},[53807,53810,53818,53833,53838,53889,53892,53898,54084,54089,54092],[10,53808,53804],{"id":53809},"_1验证深度学习环境",[14,53811,53812,53813],{},"关于环境的安装，看",[8085,53814,53817],{"href":53815,"rel":53816},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[15923],"Pytorch-->深度学习",[14,53819,53820,53821,53824,53825,53828,53829,53832],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[49,53822,53823],{},"pytorch-cuda=12.4"," 是一个“ ",[61,53826,53827],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[61,53830,53831],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,53834,53835],{},[23,53836],{"alt":25,"src":53837},"\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",[151,53839,53841],{"className":47347,"code":53840,"language":47349,"meta":25,"style":25},"# 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",[49,53842,53843,53848],{"__ignoreMap":25},[159,53844,53845],{"class":161,"line":162},[159,53846,53847],{"class":1135},"# CUDA 12.4\n",[159,53849,53850,53853,53855,53858,53861,53864,53867,53870,53872,53875,53878,53881,53884,53886],{"class":161,"line":176},[159,53851,53852],{"class":185},"conda",[159,53854,47359],{"class":192},[159,53856,53857],{"class":192}," pytorch==",[159,53859,53860],{"class":1146},"2.5.1",[159,53862,53863],{"class":192}," torchvision==",[159,53865,53866],{"class":1146},"0.20.1",[159,53868,53869],{"class":192}," torchaudio==",[159,53871,53860],{"class":1146},[159,53873,53874],{"class":192}," pytorch-cuda=",[159,53876,53877],{"class":1146},"12.4",[159,53879,53880],{"class":1146}," -c",[159,53882,53883],{"class":192}," pytorch",[159,53885,53880],{"class":1146},[159,53887,53888],{"class":192}," nvidia\n",[14,53890,53891],{},"）：",[14,53893,53894],{},[8085,53895,53896],{"href":53896,"rel":53897},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[15923],[151,53899,53903],{"className":53900,"code":53901,"language":53902,"meta":25,"style":25},"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",[49,53904,53905,53910,53918,53923,53933,53949,53954,53964,54001,54008,54019,54035,54040,54050,54062,54072],{"__ignoreMap":25},[159,53906,53907],{"class":161,"line":162},[159,53908,53909],{"class":1135},"# 对深度学习环境进行测试\n",[159,53911,53912,53915],{"class":161,"line":176},[159,53913,53914],{"class":1142},"import",[159,53916,53917],{"class":165}," torch\n",[159,53919,53920],{"class":161,"line":203},[159,53921,53922],{"class":1135},"# 查看cuda是否被激活\n",[159,53924,53925,53928,53930],{"class":161,"line":223},[159,53926,53927],{"class":165},"flag",[159,53929,189],{"class":1142},[159,53931,53932],{"class":165},"torch.cuda.is_available()\n",[159,53934,53935,53938,53940,53943,53946],{"class":161,"line":233},[159,53936,53937],{"class":1146},"print",[159,53939,1159],{"class":165},[159,53941,53942],{"class":192},"\"cuda:\"",[159,53944,53945],{"class":165},", flag)   ",[159,53947,53948],{"class":1135},"#返回true的话说明被激活\n",[159,53950,53951],{"class":161,"line":239},[159,53952,53953],{"class":1135},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[159,53955,53956,53959,53961],{"class":161,"line":245},[159,53957,53958],{"class":165},"ngpu",[159,53960,189],{"class":1142},[159,53962,53963],{"class":1146},"1\n",[159,53965,53966,53969,53971,53974,53977,53979,53982,53985,53988,53990,53992,53994,53996,53999],{"class":161,"line":251},[159,53967,53968],{"class":165},"device",[159,53970,189],{"class":1142},[159,53972,53973],{"class":165},"torch.device(",[159,53975,53976],{"class":192},"\"cuda:0\"",[159,53978,25367],{"class":1142},[159,53980,53981],{"class":165},"(torch.cuda.is_available() ",[159,53983,53984],{"class":1142},"and",[159,53986,53987],{"class":165}," ngpu",[159,53989,6760],{"class":1142},[159,53991,1489],{"class":1146},[159,53993,2710],{"class":165},[159,53995,25364],{"class":1142},[159,53997,53998],{"class":192}," \"cpu\"",[159,54000,1165],{"class":165},[159,54002,54003,54005],{"class":161,"line":261},[159,54004,53937],{"class":1146},[159,54006,54007],{"class":165},"(device)\n",[159,54009,54010,54012,54015,54017],{"class":161,"line":603},[159,54011,53937],{"class":1146},[159,54013,54014],{"class":165},"(torch.cuda.get_device_name(",[159,54016,1489],{"class":1146},[159,54018,18787],{"class":165},[159,54020,54021,54023,54026,54028,54030,54032],{"class":161,"line":621},[159,54022,53937],{"class":1146},[159,54024,54025],{"class":165},"(torch.rand(",[159,54027,23949],{"class":1146},[159,54029,24233],{"class":165},[159,54031,23949],{"class":1146},[159,54033,54034],{"class":165},").cuda())\n",[159,54036,54037],{"class":161,"line":634},[159,54038,54039],{"class":1135},"# 查看cuda和cudnn的版本\n",[159,54041,54042,54045,54047],{"class":161,"line":640},[159,54043,54044],{"class":165},"cuda_version",[159,54046,189],{"class":1142},[159,54048,54049],{"class":165},"torch.version.cuda\n",[159,54051,54052,54054,54056,54059],{"class":161,"line":1075},[159,54053,53937],{"class":1146},[159,54055,1159],{"class":165},[159,54057,54058],{"class":192},"\"cuda version\"",[159,54060,54061],{"class":165},",cuda_version)\n",[159,54063,54064,54067,54069],{"class":161,"line":1081},[159,54065,54066],{"class":165},"cudnn_version",[159,54068,189],{"class":1142},[159,54070,54071],{"class":165},"torch.backends.cudnn.version()\n",[159,54073,54074,54076,54078,54081],{"class":161,"line":1091},[159,54075,53937],{"class":1146},[159,54077,1159],{"class":165},[159,54079,54080],{"class":192},"\"cudnn version\"",[159,54082,54083],{"class":165},",cudnn_version)\n",[14,54085,54086],{},[23,54087],{"alt":25,"src":54088},"\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",[14,54090,54091],{},"cuda:0 指的是一块显卡",[1468,54093,54094],{},"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":25,"searchDepth":176,"depth":176,"links":54096},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":53804,"description":23809},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":54103,"title":54104,"body":54105,"description":23809,"extension":23810,"meta":73768,"navigation":589,"path":73769,"seo":73770,"stem":73771,"__hash__":73772},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":54106,"toc":73762},[54107,54110,54114,54118,54121,54126,54131,54134,54139,54144,54149,54152,54156,54161,54165,54170,54173,54178,54181,54184,54187,54190,54195,54198,54203,54208,54213,54218,54221,54225,54228,54233,54836,54841,54844,54849,54852,54855,55317,55320,55323,55326,55329,57257,57260,57265,57270,58065,58068,58073,58851,58855,60514,60518,61232,61236,61240,61245,61250,61255,61258,61263,61268,61273,61278,61283,61287,61292,62574,62579,62582,62585,62588,62743,62746,62749,63965,63970,64665,64669,64673,64678,64683,64686,64691,64696,64701,64706,64711,64716,64721,64726,64731,64736,64741,64746,64751,64756,64761,64766,64771,64776,64781,64786,64791,64796,64801,64806,64811,64816,64821,64826,64831,64836,64840,64844,64847,66325,66329,67976,67980,68674,68678,68681,68684,69227,69230,69234,69237,70634,70638,70641,71218,72992,72996,72999,73759],[10,54108,54104],{"id":54109},"_2经典神经网络",[42,54111,54113],{"id":54112},"_21lenet与alexnet","2.1.LeNet与AlexNet",[326,54115,54117],{"id":54116},"_211原理介绍","2.1.1.原理介绍",[14,54119,54120],{},"LeNet-5",[134,54122,54123],{},[106,54124,54125],{},"原理",[14,54127,54128],{},[23,54129],{"alt":25,"src":54130},"\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",[14,54132,54133],{},"B是batch批次；C是channel通道",[134,54135,54136],{"start":176},[106,54137,54138],{},"网络参数详细",[14,54140,54141],{},[23,54142],{"alt":25,"src":54143},"\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",[14,54145,54146],{},[23,54147],{"alt":25,"src":54148},"\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",[14,54150,54151],{},"AlexNet",[134,54153,54154],{},[106,54155,54125],{},[14,54157,54158],{},[23,54159],{"alt":25,"src":54160},"\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",[134,54162,54163],{"start":176},[106,54164,54138],{},[14,54166,54167],{},[23,54168],{"alt":25,"src":54169},"\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",[14,54171,54172],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,54174,54175],{},[23,54176],{"alt":25,"src":54177},"\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",[14,54179,54180],{},"数据处理中的图像增强操作:",[14,54182,54183],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,54185,54186],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,54188,54189],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,54191,54192],{},[23,54193],{"alt":25,"src":54194},"\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",[14,54196,54197],{},"提升网络精确度的方法：LRN正则化",[14,54199,54200],{},[23,54201],{"alt":25,"src":54202},"\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",[14,54204,54205],{},[23,54206],{"alt":25,"src":54207},"\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",[134,54209,54210],{"start":203},[106,54211,54212],{},"AlexNet的总结",[14,54214,54215],{},[23,54216],{"alt":25,"src":54217},"\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",[14,54219,54220],{},"比LeNet模型要深一丢丢",[326,54222,54224],{"id":54223},"_212代码实现","2.1.2.代码实现",[14,54226,54227],{},"（1）LeNet",[134,54229,54230],{},[106,54231,54232],{},"模型搭建",[151,54234,54236],{"className":53900,"code":54235,"language":53902,"meta":25,"style":25},"# 导入库\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",[49,54237,54238,54243,54249,54254,54267,54272,54284,54288,54308,54313,54318,54329,54334,54352,54356,54361,54410,54422,54427,54456,54491,54518,54523,54535,54540,54560,54579,54598,54602,54607,54617,54634,54645,54660,54671,54682,54697,54712,54723,54730,54734,54748,54753,54776,54781,54786,54791,54795,54800,54805,54815],{"__ignoreMap":25},[159,54239,54240],{"class":161,"line":162},[159,54241,54242],{"class":1135},"# 导入库\n",[159,54244,54245,54247],{"class":161,"line":176},[159,54246,53914],{"class":1142},[159,54248,53917],{"class":165},[159,54250,54251],{"class":161,"line":203},[159,54252,54253],{"class":1135},"# 导入神经网络层\n",[159,54255,54256,54259,54262,54264],{"class":161,"line":223},[159,54257,54258],{"class":1142},"from",[159,54260,54261],{"class":165}," torch ",[159,54263,53914],{"class":1142},[159,54265,54266],{"class":165}," nn\n",[159,54268,54269],{"class":161,"line":233},[159,54270,54271],{"class":1135},"# 导入展示神经网络参数的包\n",[159,54273,54274,54276,54279,54281],{"class":161,"line":239},[159,54275,54258],{"class":1142},[159,54277,54278],{"class":165}," torchsummary ",[159,54280,53914],{"class":1142},[159,54282,54283],{"class":165}," summary\n",[159,54285,54286],{"class":161,"line":245},[159,54287,590],{"emptyLinePlaceholder":589},[159,54289,54290,54292,54295,54297,54300,54302,54305],{"class":161,"line":251},[159,54291,38260],{"class":1142},[159,54293,54294],{"class":185}," LeNet",[159,54296,1159],{"class":165},[159,54298,54299],{"class":185},"nn",[159,54301,9952],{"class":165},[159,54303,54304],{"class":185},"Module",[159,54306,54307],{"class":165},"):\n",[159,54309,54310],{"class":161,"line":261},[159,54311,54312],{"class":1135},"    # 模型初始化:\n",[159,54314,54315],{"class":161,"line":603},[159,54316,54317],{"class":1135},"    # 定义一些网络层和激活函数\n",[159,54319,54320,54323,54326],{"class":161,"line":621},[159,54321,54322],{"class":1142},"    def",[159,54324,54325],{"class":1146}," __init__",[159,54327,54328],{"class":165},"(self):\n",[159,54330,54331],{"class":161,"line":634},[159,54332,54333],{"class":1135},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[159,54335,54336,54339,54342,54345,54347,54350],{"class":161,"line":640},[159,54337,54338],{"class":1146},"        super",[159,54340,54341],{"class":165},"(LeNet,",[159,54343,54344],{"class":1146},"self",[159,54346,13019],{"class":165},[159,54348,54349],{"class":1146},"__init__",[159,54351,5158],{"class":165},[159,54353,54354],{"class":161,"line":1075},[159,54355,590],{"emptyLinePlaceholder":589},[159,54357,54358],{"class":161,"line":1081},[159,54359,54360],{"class":1135},"        # 定义网络层\n",[159,54362,54363,54366,54369,54371,54374,54377,54379,54381,54383,54386,54388,54390,54392,54395,54397,54399,54401,54404,54406,54408],{"class":161,"line":1091},[159,54364,54365],{"class":1146},"        self",[159,54367,54368],{"class":165},".c1",[159,54370,189],{"class":1142},[159,54372,54373],{"class":165},"nn.Conv2d(",[159,54375,54376],{"class":8765},"in_channels",[159,54378,189],{"class":1142},[159,54380,4932],{"class":1146},[159,54382,24233],{"class":165},[159,54384,54385],{"class":8765},"out_channels",[159,54387,189],{"class":1142},[159,54389,7907],{"class":1146},[159,54391,24233],{"class":165},[159,54393,54394],{"class":8765},"kernel_size",[159,54396,189],{"class":1142},[159,54398,1753],{"class":1146},[159,54400,24233],{"class":165},[159,54402,54403],{"class":8765},"padding",[159,54405,189],{"class":1142},[159,54407,11034],{"class":1146},[159,54409,1165],{"class":165},[159,54411,54412,54414,54417,54419],{"class":161,"line":1100},[159,54413,54365],{"class":1146},[159,54415,54416],{"class":165},".sig",[159,54418,189],{"class":1142},[159,54420,54421],{"class":165},"nn.Sigmoid()\n",[159,54423,54424],{"class":161,"line":1123},[159,54425,54426],{"class":1135},"        # 定义池化\n",[159,54428,54429,54431,54434,54436,54439,54441,54443,54445,54447,54450,54452,54454],{"class":161,"line":1132},[159,54430,54365],{"class":1146},[159,54432,54433],{"class":165},".s2",[159,54435,189],{"class":1142},[159,54437,54438],{"class":165},"nn.AvgPool2d(",[159,54440,54394],{"class":8765},[159,54442,189],{"class":1142},[159,54444,11034],{"class":1146},[159,54446,24233],{"class":165},[159,54448,54449],{"class":8765},"stride",[159,54451,189],{"class":1142},[159,54453,11034],{"class":1146},[159,54455,1165],{"class":165},[159,54457,54458,54460,54463,54465,54467,54469,54471,54473,54475,54477,54479,54481,54483,54485,54487,54489],{"class":161,"line":1139},[159,54459,54365],{"class":1146},[159,54461,54462],{"class":165},".c3",[159,54464,189],{"class":1142},[159,54466,54373],{"class":165},[159,54468,54376],{"class":8765},[159,54470,189],{"class":1142},[159,54472,7907],{"class":1146},[159,54474,24233],{"class":165},[159,54476,54385],{"class":8765},[159,54478,189],{"class":1142},[159,54480,24439],{"class":1146},[159,54482,24233],{"class":165},[159,54484,54394],{"class":8765},[159,54486,189],{"class":1142},[159,54488,1753],{"class":1146},[159,54490,1165],{"class":165},[159,54492,54493,54495,54498,54500,54502,54504,54506,54508,54510,54512,54514,54516],{"class":161,"line":1168},[159,54494,54365],{"class":1146},[159,54496,54497],{"class":165},".s4",[159,54499,189],{"class":1142},[159,54501,54438],{"class":165},[159,54503,54394],{"class":8765},[159,54505,189],{"class":1142},[159,54507,11034],{"class":1146},[159,54509,24233],{"class":165},[159,54511,54449],{"class":8765},[159,54513,189],{"class":1142},[159,54515,11034],{"class":1146},[159,54517,1165],{"class":165},[159,54519,54520],{"class":161,"line":1174},[159,54521,54522],{"class":1135},"        # 定义平展层\n",[159,54524,54525,54527,54530,54532],{"class":161,"line":1180},[159,54526,54365],{"class":1146},[159,54528,54529],{"class":165},".flatten",[159,54531,189],{"class":1142},[159,54533,54534],{"class":165},"nn.Flatten()\n",[159,54536,54537],{"class":161,"line":1194},[159,54538,54539],{"class":1135},"        # 定义全连接层\n",[159,54541,54542,54544,54547,54549,54552,54554,54556,54558],{"class":161,"line":1200},[159,54543,54365],{"class":1146},[159,54545,54546],{"class":165},".f5",[159,54548,189],{"class":1142},[159,54550,54551],{"class":165},"nn.Linear(",[159,54553,8648],{"class":1146},[159,54555,24233],{"class":165},[159,54557,4384],{"class":1146},[159,54559,1165],{"class":165},[159,54561,54562,54564,54567,54569,54571,54573,54575,54577],{"class":161,"line":1221},[159,54563,54365],{"class":1146},[159,54565,54566],{"class":165},".f6",[159,54568,189],{"class":1142},[159,54570,54551],{"class":165},[159,54572,4384],{"class":1146},[159,54574,24233],{"class":165},[159,54576,24543],{"class":1146},[159,54578,1165],{"class":165},[159,54580,54581,54583,54586,54588,54590,54592,54594,54596],{"class":161,"line":1230},[159,54582,54365],{"class":1146},[159,54584,54585],{"class":165},".f7",[159,54587,189],{"class":1142},[159,54589,54551],{"class":165},[159,54591,24543],{"class":1146},[159,54593,24233],{"class":165},[159,54595,1964],{"class":1146},[159,54597,1165],{"class":165},[159,54599,54600],{"class":161,"line":1247},[159,54601,590],{"emptyLinePlaceholder":589},[159,54603,54604],{"class":161,"line":1265},[159,54605,54606],{"class":1135},"    # 写工具->写前向传播\n",[159,54608,54609,54611,54614],{"class":161,"line":1277},[159,54610,54322],{"class":1142},[159,54612,54613],{"class":185}," forward",[159,54615,54616],{"class":165},"(self,x):\n",[159,54618,54619,54622,54624,54626,54629,54631],{"class":161,"line":1283},[159,54620,54621],{"class":165},"        x",[159,54623,189],{"class":1142},[159,54625,54344],{"class":1146},[159,54627,54628],{"class":165},".sig(",[159,54630,54344],{"class":1146},[159,54632,54633],{"class":165},".c1(x))\n",[159,54635,54636,54638,54640,54642],{"class":161,"line":1294},[159,54637,54621],{"class":165},[159,54639,189],{"class":1142},[159,54641,54344],{"class":1146},[159,54643,54644],{"class":165},".s2(x)\n",[159,54646,54647,54649,54651,54653,54655,54657],{"class":161,"line":1305},[159,54648,54621],{"class":165},[159,54650,189],{"class":1142},[159,54652,54344],{"class":1146},[159,54654,54628],{"class":165},[159,54656,54344],{"class":1146},[159,54658,54659],{"class":165},".c3(x))\n",[159,54661,54662,54664,54666,54668],{"class":161,"line":1311},[159,54663,54621],{"class":165},[159,54665,189],{"class":1142},[159,54667,54344],{"class":1146},[159,54669,54670],{"class":165},".s4(x)\n",[159,54672,54673,54675,54677,54679],{"class":161,"line":1322},[159,54674,54621],{"class":165},[159,54676,189],{"class":1142},[159,54678,54344],{"class":1146},[159,54680,54681],{"class":165},".flatten(x)\n",[159,54683,54684,54686,54688,54690,54692,54694],{"class":161,"line":1327},[159,54685,54621],{"class":165},[159,54687,189],{"class":1142},[159,54689,54344],{"class":1146},[159,54691,54628],{"class":165},[159,54693,54344],{"class":1146},[159,54695,54696],{"class":165},".f5(x))\n",[159,54698,54699,54701,54703,54705,54707,54709],{"class":161,"line":1336},[159,54700,54621],{"class":165},[159,54702,189],{"class":1142},[159,54704,54344],{"class":1146},[159,54706,54628],{"class":165},[159,54708,54344],{"class":1146},[159,54710,54711],{"class":165},".f6(x))\n",[159,54713,54714,54716,54718,54720],{"class":161,"line":1345},[159,54715,54621],{"class":165},[159,54717,189],{"class":1142},[159,54719,54344],{"class":1146},[159,54721,54722],{"class":165},".f7(x)\n",[159,54724,54725,54727],{"class":161,"line":1350},[159,54726,21176],{"class":1142},[159,54728,54729],{"class":165}," x\n",[159,54731,54732],{"class":161,"line":1764},[159,54733,590],{"emptyLinePlaceholder":589},[159,54735,54736,54738,54741,54743,54746],{"class":161,"line":1769},[159,54737,18445],{"class":1142},[159,54739,54740],{"class":1146}," __name__",[159,54742,26581],{"class":1142},[159,54744,54745],{"class":192},"\"__main__\"",[159,54747,27364],{"class":165},[159,54749,54750],{"class":161,"line":1777},[159,54751,54752],{"class":1135},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[159,54754,54755,54758,54760,54762,54765,54767,54770,54772,54774],{"class":161,"line":1788},[159,54756,54757],{"class":165},"    device",[159,54759,189],{"class":1142},[159,54761,53973],{"class":165},[159,54763,54764],{"class":192},"\"cuda\"",[159,54766,25367],{"class":1142},[159,54768,54769],{"class":165}," torch.cuda.is_available() ",[159,54771,25364],{"class":1142},[159,54773,53998],{"class":192},[159,54775,1165],{"class":165},[159,54777,54778],{"class":161,"line":1802},[159,54779,54780],{"class":1135},"    # 如果就是想指定用cpu用下方代码:\n",[159,54782,54783],{"class":161,"line":1815},[159,54784,54785],{"class":1135},"    # device=\"cpu\"\n",[159,54787,54788],{"class":161,"line":1828},[159,54789,54790],{"class":1135},"    # print(device)\n",[159,54792,54793],{"class":161,"line":1841},[159,54794,590],{"emptyLinePlaceholder":589},[159,54796,54797],{"class":161,"line":1852},[159,54798,54799],{"class":1135},"    # 实例化模型\n",[159,54801,54802],{"class":161,"line":1866},[159,54803,54804],{"class":1135},"    # 将模型放到设备中去运行\n",[159,54806,54807,54810,54812],{"class":161,"line":1879},[159,54808,54809],{"class":165},"    model",[159,54811,189],{"class":1142},[159,54813,54814],{"class":165},"LeNet().to(device)\n",[159,54816,54817,54820,54823,54825,54827,54829,54831,54833],{"class":161,"line":1884},[159,54818,54819],{"class":1146},"    print",[159,54821,54822],{"class":165},"(summary(model,(",[159,54824,4932],{"class":1146},[159,54826,24233],{"class":165},[159,54828,1726],{"class":1146},[159,54830,24233],{"class":165},[159,54832,1726],{"class":1146},[159,54834,54835],{"class":165},")))\n",[14,54837,54838],{},[23,54839],{"alt":25,"src":54840},"\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",[14,54842,54843],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[134,54845,54846],{"start":176},[106,54847,54848],{},"训练",[14,54850,54851],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,54853,54854],{},"在训练之前可以将数据展示看一下",[151,54856,54858],{"className":53900,"code":54857,"language":53902,"meta":25,"style":25},"# 建立画图的函数，用于展示数据\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",[49,54859,54860,54865,54870,54882,54894,54907,54912,54924,54929,54941,54946,54958,54962,54966,54986,54998,55003,55024,55035,55039,55044,55062,55073,55078,55089,55094,55105,55109,55114,55129,55142,55147,55152,55165,55178,55191,55196,55200,55205,55225,55242,55262,55275,55288,55297,55312],{"__ignoreMap":25},[159,54861,54862],{"class":161,"line":162},[159,54863,54864],{"class":1135},"# 建立画图的函数，用于展示数据\n",[159,54866,54867],{"class":161,"line":176},[159,54868,54869],{"class":1135},"# torchvision中包含很多内置的数据集\n",[159,54871,54872,54874,54877,54879],{"class":161,"line":203},[159,54873,54258],{"class":1142},[159,54875,54876],{"class":165}," sklearn.externals.array_api_compat.torch ",[159,54878,53914],{"class":1142},[159,54880,54881],{"class":165}," squeeze\n",[159,54883,54884,54886,54889,54891],{"class":161,"line":223},[159,54885,54258],{"class":1142},[159,54887,54888],{"class":165}," torchvision.datasets ",[159,54890,53914],{"class":1142},[159,54892,54893],{"class":165}," FashionMNIST\n",[159,54895,54896,54898,54901,54904],{"class":161,"line":233},[159,54897,53914],{"class":1142},[159,54899,54900],{"class":165}," numpy ",[159,54902,54903],{"class":1142},"as",[159,54905,54906],{"class":165}," np\n",[159,54908,54909],{"class":161,"line":239},[159,54910,54911],{"class":1135},"# 引入处理数据集的包\n",[159,54913,54914,54916,54919,54921],{"class":161,"line":245},[159,54915,54258],{"class":1142},[159,54917,54918],{"class":165}," torchvision ",[159,54920,53914],{"class":1142},[159,54922,54923],{"class":165}," transforms\n",[159,54925,54926],{"class":161,"line":251},[159,54927,54928],{"class":1135},"# 从torch库中引入数据处理的包\n",[159,54930,54931,54933,54936,54938],{"class":161,"line":261},[159,54932,53914],{"class":1142},[159,54934,54935],{"class":165}," torch.utils.data ",[159,54937,54903],{"class":1142},[159,54939,54940],{"class":165}," Data\n",[159,54942,54943],{"class":161,"line":603},[159,54944,54945],{"class":1135},"# 导入画图的库\n",[159,54947,54948,54950,54953,54955],{"class":161,"line":621},[159,54949,53914],{"class":1142},[159,54951,54952],{"class":165}," matplotlib.pyplot ",[159,54954,54903],{"class":1142},[159,54956,54957],{"class":165}," plt\n",[159,54959,54960],{"class":161,"line":634},[159,54961,590],{"emptyLinePlaceholder":589},[159,54963,54964],{"class":161,"line":640},[159,54965,590],{"emptyLinePlaceholder":589},[159,54967,54968,54971,54973,54976,54979,54981,54984],{"class":161,"line":1075},[159,54969,54970],{"class":165},"train_data",[159,54972,189],{"class":1142},[159,54974,54975],{"class":165},"FashionMNIST(",[159,54977,54978],{"class":8765},"root",[159,54980,189],{"class":1142},[159,54982,54983],{"class":192},"'.\u002Fdata'",[159,54985,17070],{"class":165},[159,54987,54988,54991,54993,54996],{"class":161,"line":1081},[159,54989,54990],{"class":8765},"                        train",[159,54992,189],{"class":1142},[159,54994,54995],{"class":1146},"True",[159,54997,17070],{"class":165},[159,54999,55000],{"class":161,"line":1091},[159,55001,55002],{"class":1135},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[159,55004,55005,55008,55010,55013,55016,55018,55021],{"class":161,"line":1100},[159,55006,55007],{"class":8765},"                        transform",[159,55009,189],{"class":1142},[159,55011,55012],{"class":165},"transforms.Compose([transforms.Resize(",[159,55014,55015],{"class":8765},"size",[159,55017,189],{"class":1142},[159,55019,55020],{"class":1146},"224",[159,55022,55023],{"class":165},"),transforms.ToTensor()]),\n",[159,55025,55026,55029,55031,55033],{"class":161,"line":1123},[159,55027,55028],{"class":8765},"                        download",[159,55030,189],{"class":1142},[159,55032,54995],{"class":1146},[159,55034,1165],{"class":165},[159,55036,55037],{"class":161,"line":1132},[159,55038,590],{"emptyLinePlaceholder":589},[159,55040,55041],{"class":161,"line":1139},[159,55042,55043],{"class":1135},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[159,55045,55046,55049,55051,55054,55057,55059],{"class":161,"line":1168},[159,55047,55048],{"class":165},"train_loader",[159,55050,189],{"class":1142},[159,55052,55053],{"class":165},"Data.DataLoader(",[159,55055,55056],{"class":8765},"dataset",[159,55058,189],{"class":1142},[159,55060,55061],{"class":165},"train_data,\n",[159,55063,55064,55067,55069,55071],{"class":161,"line":1174},[159,55065,55066],{"class":8765},"                             batch_size",[159,55068,189],{"class":1142},[159,55070,24070],{"class":1146},[159,55072,17070],{"class":165},[159,55074,55075],{"class":161,"line":1180},[159,55076,55077],{"class":1135},"                             # 数据是否打乱\n",[159,55079,55080,55083,55085,55087],{"class":161,"line":1194},[159,55081,55082],{"class":8765},"                             shuffle",[159,55084,189],{"class":1142},[159,55086,54995],{"class":1146},[159,55088,17070],{"class":165},[159,55090,55091],{"class":161,"line":1200},[159,55092,55093],{"class":1135},"                             # 规定加载数据的进程\n",[159,55095,55096,55099,55101,55103],{"class":161,"line":1221},[159,55097,55098],{"class":8765},"                             num_workers",[159,55100,189],{"class":1142},[159,55102,1489],{"class":1146},[159,55104,1165],{"class":165},[159,55106,55107],{"class":161,"line":1230},[159,55108,590],{"emptyLinePlaceholder":589},[159,55110,55111],{"class":161,"line":1247},[159,55112,55113],{"class":1135},"# 获得一个batch的数据\n",[159,55115,55116,55118,55121,55123,55126],{"class":161,"line":1265},[159,55117,26657],{"class":1142},[159,55119,55120],{"class":165}," step,(b_x,b_y) ",[159,55122,49566],{"class":1142},[159,55124,55125],{"class":1146}," enumerate",[159,55127,55128],{"class":165},"(train_loader):\n",[159,55130,55131,55133,55136,55138,55140],{"class":161,"line":1277},[159,55132,26732],{"class":1142},[159,55134,55135],{"class":165}," step ",[159,55137,6760],{"class":1142},[159,55139,1259],{"class":1146},[159,55141,27364],{"class":165},[159,55143,55144],{"class":161,"line":1283},[159,55145,55146],{"class":1142},"        break\n",[159,55148,55149],{"class":161,"line":1294},[159,55150,55151],{"class":1135},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[159,55153,55154,55157,55159,55162],{"class":161,"line":1305},[159,55155,55156],{"class":165},"batch_x",[159,55158,189],{"class":1142},[159,55160,55161],{"class":165},"b_x.squeeze().numpy()  ",[159,55163,55164],{"class":1135},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[159,55166,55167,55170,55172,55175],{"class":161,"line":1311},[159,55168,55169],{"class":165},"batch_y",[159,55171,189],{"class":1142},[159,55173,55174],{"class":165},"b_y.numpy()   ",[159,55176,55177],{"class":1135},"#将张量转换成功numpy数组\n",[159,55179,55180,55183,55185,55188],{"class":161,"line":1322},[159,55181,55182],{"class":165},"class_label",[159,55184,189],{"class":1142},[159,55186,55187],{"class":165},"train_data.classes  ",[159,55189,55190],{"class":1135},"#训练集标签\n",[159,55192,55193],{"class":161,"line":1327},[159,55194,55195],{"class":1135},"# print(class_label)\n",[159,55197,55198],{"class":161,"line":1336},[159,55199,590],{"emptyLinePlaceholder":589},[159,55201,55202],{"class":161,"line":1345},[159,55203,55204],{"class":1135},"# 可视化一个batch的图像\n",[159,55206,55207,55210,55213,55215,55217,55219,55221,55223],{"class":161,"line":1350},[159,55208,55209],{"class":165},"plt.figure(",[159,55211,55212],{"class":8765},"figsize",[159,55214,189],{"class":1142},[159,55216,1159],{"class":165},[159,55218,7925],{"class":1146},[159,55220,24233],{"class":165},[159,55222,1753],{"class":1146},[159,55224,18787],{"class":165},[159,55226,55227,55229,55232,55234,55237,55239],{"class":161,"line":1764},[159,55228,26657],{"class":1142},[159,55230,55231],{"class":165}," ii ",[159,55233,49566],{"class":1142},[159,55235,55236],{"class":165}," np.arange(",[159,55238,30969],{"class":1146},[159,55240,55241],{"class":165},"(batch_y)):\n",[159,55243,55244,55247,55249,55251,55253,55256,55258,55260],{"class":161,"line":1769},[159,55245,55246],{"class":165},"    plt.subplot(",[159,55248,8866],{"class":1146},[159,55250,24233],{"class":165},[159,55252,24439],{"class":1146},[159,55254,55255],{"class":165},",ii ",[159,55257,2704],{"class":1142},[159,55259,2707],{"class":1146},[159,55261,1165],{"class":165},[159,55263,55264,55267,55270,55272],{"class":161,"line":1777},[159,55265,55266],{"class":165},"    plt.imshow(batch_x[ii,:,:],",[159,55268,55269],{"class":8765},"cmap",[159,55271,189],{"class":1142},[159,55273,55274],{"class":165},"plt.cm.gray)\n",[159,55276,55277,55280,55282,55284,55286],{"class":161,"line":1788},[159,55278,55279],{"class":165},"    plt.title(class_label[batch_y[ii]],",[159,55281,55015],{"class":8765},[159,55283,189],{"class":1142},[159,55285,1964],{"class":1146},[159,55287,1165],{"class":165},[159,55289,55290,55293,55295],{"class":161,"line":1802},[159,55291,55292],{"class":165},"    plt.axis(",[159,55294,16148],{"class":192},[159,55296,1165],{"class":165},[159,55298,55299,55302,55305,55307,55310],{"class":161,"line":1815},[159,55300,55301],{"class":165},"    plt.subplots_adjust(",[159,55303,55304],{"class":8765},"wspace",[159,55306,189],{"class":1142},[159,55308,55309],{"class":1146},"0.05",[159,55311,1165],{"class":165},[159,55313,55314],{"class":161,"line":1828},[159,55315,55316],{"class":165},"plt.show()\n",[14,55318,55319],{},"用matplotlib进行展示的过程可以后续再补",[14,55321,55322],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,55324,55325],{},"训练次数就是按照批次过整个训练集数据的次数",[14,55327,55328],{},"模型训练：",[151,55330,55332],{"className":53900,"code":55331,"language":53902,"meta":25,"style":25},"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",[49,55333,55334,55341,55348,55352,55364,55370,55381,55391,55401,55411,55421,55426,55438,55448,55452,55456,55461,55472,55485,55496,55513,55524,55563,55579,55591,55602,55607,55618,55634,55645,55656,55667,55674,55678,55683,55688,55692,55697,55707,55728,55732,55736,55741,55746,55751,55771,55775,55780,55790,55794,55799,55808,55813,55818,55823,55833,55837,55841,55846,55851,55861,55866,55876,55881,55890,55895,55904,55909,55918,55922,55927,55937,55941,55945,55950,55965,55993,56008,56012,56017,56022,56031,56036,56045,56050,56059,56064,56073,56078,56087,56092,56101,56106,56119,56124,56134,56139,56149,56154,56159,56164,56169,56179,56184,56203,56208,56218,56223,56228,56233,56238,56243,56248,56253,56272,56277,56292,56297,56310,56315,56329,56334,56342,56347,56355,56360,56365,56373,56378,56388,56393,56411,56416,56426,56431,56450,56465,56470,56483,56488,56493,56503,56508,56513,56522,56527,56537,56542,56551,56555,56560,56608,56654,56658,56663,56681,56686,56704,56709,56714,56723,56727,56732,56747,56791,56796,56801,56806,56816,56821,56826,56831,56848,56861,56869,56877,56885,56893,56897,56902,56909,56913,56918,56928,56933,56952,56957,56962,56967,56983,56988,56993,56998,57003,57008,57034,57057,57062,57067,57072,57082,57092,57097,57113,57135,57157,57162,57166,57174,57183,57188,57192,57197,57209,57214,57224,57234,57252],{"__ignoreMap":25},[159,55335,55336,55338],{"class":161,"line":162},[159,55337,53914],{"class":1142},[159,55339,55340],{"class":165}," copy\n",[159,55342,55343,55345],{"class":161,"line":176},[159,55344,53914],{"class":1142},[159,55346,55347],{"class":165}," time\n",[159,55349,55350],{"class":161,"line":203},[159,55351,590],{"emptyLinePlaceholder":589},[159,55353,55354,55356,55359,55361],{"class":161,"line":223},[159,55355,53914],{"class":1142},[159,55357,55358],{"class":165}," pandas ",[159,55360,54903],{"class":1142},[159,55362,55363],{"class":165}," pd\n",[159,55365,55366,55368],{"class":161,"line":233},[159,55367,53914],{"class":1142},[159,55369,53917],{"class":165},[159,55371,55372,55374,55376,55378],{"class":161,"line":239},[159,55373,54258],{"class":1142},[159,55375,54935],{"class":165},[159,55377,53914],{"class":1142},[159,55379,55380],{"class":165}," Dataset\n",[159,55382,55383,55385,55387,55389],{"class":161,"line":245},[159,55384,54258],{"class":1142},[159,55386,54888],{"class":165},[159,55388,53914],{"class":1142},[159,55390,54893],{"class":165},[159,55392,55393,55395,55397,55399],{"class":161,"line":251},[159,55394,54258],{"class":1142},[159,55396,54918],{"class":165},[159,55398,53914],{"class":1142},[159,55400,54923],{"class":165},[159,55402,55403,55405,55407,55409],{"class":161,"line":261},[159,55404,53914],{"class":1142},[159,55406,54935],{"class":165},[159,55408,54903],{"class":1142},[159,55410,54940],{"class":165},[159,55412,55413,55415,55417,55419],{"class":161,"line":603},[159,55414,53914],{"class":1142},[159,55416,54952],{"class":165},[159,55418,54903],{"class":1142},[159,55420,54957],{"class":165},[159,55422,55423],{"class":161,"line":621},[159,55424,55425],{"class":1135},"# 导入模型\n",[159,55427,55428,55430,55433,55435],{"class":161,"line":634},[159,55429,54258],{"class":1142},[159,55431,55432],{"class":165}," model ",[159,55434,53914],{"class":1142},[159,55436,55437],{"class":165}," LeNet\n",[159,55439,55440,55442,55444,55446],{"class":161,"line":640},[159,55441,54258],{"class":1142},[159,55443,54261],{"class":165},[159,55445,53914],{"class":1142},[159,55447,54266],{"class":165},[159,55449,55450],{"class":161,"line":1075},[159,55451,590],{"emptyLinePlaceholder":589},[159,55453,55454],{"class":161,"line":1081},[159,55455,590],{"emptyLinePlaceholder":589},[159,55457,55458],{"class":161,"line":1091},[159,55459,55460],{"class":1135},"# 处理训练集与验证集函数--->划分数据集\n",[159,55462,55463,55466,55469],{"class":161,"line":1100},[159,55464,55465],{"class":1142},"def",[159,55467,55468],{"class":185}," train_val_data_process",[159,55470,55471],{"class":165},"():\n",[159,55473,55474,55477,55479,55481,55483],{"class":161,"line":1123},[159,55475,55476],{"class":165},"    train_data",[159,55478,189],{"class":1142},[159,55480,54975],{"class":165},[159,55482,54983],{"class":192},[159,55484,17070],{"class":165},[159,55486,55487,55490,55492,55494],{"class":161,"line":1132},[159,55488,55489],{"class":8765},"                            train",[159,55491,189],{"class":1142},[159,55493,54995],{"class":1146},[159,55495,17070],{"class":165},[159,55497,55498,55501,55503,55505,55507,55509,55511],{"class":161,"line":1139},[159,55499,55500],{"class":8765},"                            transform",[159,55502,189],{"class":1142},[159,55504,55012],{"class":165},[159,55506,55015],{"class":8765},[159,55508,189],{"class":1142},[159,55510,1726],{"class":1146},[159,55512,55023],{"class":165},[159,55514,55515,55518,55520,55522],{"class":161,"line":1168},[159,55516,55517],{"class":8765},"                            download",[159,55519,189],{"class":1142},[159,55521,54995],{"class":1146},[159,55523,1165],{"class":165},[159,55525,55526,55529,55531,55534,55537,55539,55542,55544,55546,55549,55551,55553,55556,55558,55560],{"class":161,"line":1174},[159,55527,55528],{"class":165},"    train_data,val_data",[159,55530,189],{"class":1142},[159,55532,55533],{"class":165},"Data.random_split(train_data,[",[159,55535,55536],{"class":1146},"round",[159,55538,1159],{"class":165},[159,55540,55541],{"class":1146},"0.8",[159,55543,4777],{"class":1142},[159,55545,30969],{"class":1146},[159,55547,55548],{"class":165},"(train_data)),",[159,55550,55536],{"class":1146},[159,55552,1159],{"class":165},[159,55554,55555],{"class":1146},"0.2",[159,55557,4777],{"class":1142},[159,55559,30969],{"class":1146},[159,55561,55562],{"class":165},"(train_data))])\n",[159,55564,55565,55568,55570,55573,55575,55577],{"class":161,"line":1180},[159,55566,55567],{"class":165},"    train_dataloader ",[159,55569,189],{"class":1142},[159,55571,55572],{"class":165}," Data.DataLoader(",[159,55574,55056],{"class":8765},[159,55576,189],{"class":1142},[159,55578,55061],{"class":165},[159,55580,55581,55584,55586,55589],{"class":161,"line":1194},[159,55582,55583],{"class":8765},"                                       batch_size",[159,55585,189],{"class":1142},[159,55587,55588],{"class":1146},"128",[159,55590,17070],{"class":165},[159,55592,55593,55596,55598,55600],{"class":161,"line":1200},[159,55594,55595],{"class":8765},"                                       shuffle",[159,55597,189],{"class":1142},[159,55599,54995],{"class":1146},[159,55601,17070],{"class":165},[159,55603,55604],{"class":161,"line":1221},[159,55605,55606],{"class":1135},"                                       # 规定8个进程\n",[159,55608,55609,55612,55614,55616],{"class":161,"line":1230},[159,55610,55611],{"class":8765},"                                       num_workers",[159,55613,189],{"class":1142},[159,55615,24250],{"class":1146},[159,55617,1165],{"class":165},[159,55619,55620,55623,55625,55627,55629,55631],{"class":161,"line":1247},[159,55621,55622],{"class":165},"    val_dataloader",[159,55624,189],{"class":1142},[159,55626,55053],{"class":165},[159,55628,55056],{"class":8765},[159,55630,189],{"class":1142},[159,55632,55633],{"class":165},"val_data,\n",[159,55635,55636,55639,55641,55643],{"class":161,"line":1265},[159,55637,55638],{"class":8765},"                                   batch_size",[159,55640,189],{"class":1142},[159,55642,55588],{"class":1146},[159,55644,17070],{"class":165},[159,55646,55647,55650,55652,55654],{"class":161,"line":1277},[159,55648,55649],{"class":8765},"                                   shuffle",[159,55651,189],{"class":1142},[159,55653,54995],{"class":1146},[159,55655,17070],{"class":165},[159,55657,55658,55661,55663,55665],{"class":161,"line":1283},[159,55659,55660],{"class":8765},"                                   num_workers",[159,55662,189],{"class":1142},[159,55664,24250],{"class":1146},[159,55666,1165],{"class":165},[159,55668,55669,55671],{"class":161,"line":1294},[159,55670,27711],{"class":1142},[159,55672,55673],{"class":165}," train_dataloader,val_dataloader\n",[159,55675,55676],{"class":161,"line":1305},[159,55677,590],{"emptyLinePlaceholder":589},[159,55679,55680],{"class":161,"line":1311},[159,55681,55682],{"class":1135},"# 验证是否出错\n",[159,55684,55685],{"class":161,"line":1322},[159,55686,55687],{"class":1135},"# train_val_data_process()\n",[159,55689,55690],{"class":161,"line":1327},[159,55691,590],{"emptyLinePlaceholder":589},[159,55693,55694],{"class":161,"line":1336},[159,55695,55696],{"class":1135},"# 定义模型训练函数\n",[159,55698,55699,55701,55704],{"class":161,"line":1345},[159,55700,55465],{"class":1142},[159,55702,55703],{"class":185}," train_model_process",[159,55705,55706],{"class":165},"(model,train_dataloader,val_dataloader,num_epochs):\n",[159,55708,55709,55711,55713,55715,55717,55719,55721,55723,55726],{"class":161,"line":1350},[159,55710,54757],{"class":165},[159,55712,189],{"class":1142},[159,55714,53973],{"class":165},[159,55716,54764],{"class":192},[159,55718,25367],{"class":1142},[159,55720,54769],{"class":165},[159,55722,25364],{"class":1142},[159,55724,55725],{"class":192}," 'cpu'",[159,55727,1165],{"class":165},[159,55729,55730],{"class":161,"line":1764},[159,55731,590],{"emptyLinePlaceholder":589},[159,55733,55734],{"class":161,"line":1769},[159,55735,590],{"emptyLinePlaceholder":589},[159,55737,55738],{"class":161,"line":1777},[159,55739,55740],{"class":1135},"    # 定义优化器\n",[159,55742,55743],{"class":161,"line":1788},[159,55744,55745],{"class":1135},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[159,55747,55748],{"class":161,"line":1802},[159,55749,55750],{"class":1135},"    # lr为学习率\n",[159,55752,55753,55756,55758,55761,55764,55766,55769],{"class":161,"line":1815},[159,55754,55755],{"class":165},"    optimizer",[159,55757,189],{"class":1142},[159,55759,55760],{"class":165},"torch.optim.Adam(model.parameters(),",[159,55762,55763],{"class":8765},"lr",[159,55765,189],{"class":1142},[159,55767,55768],{"class":1146},"0.001",[159,55770,1165],{"class":165},[159,55772,55773],{"class":161,"line":1828},[159,55774,590],{"emptyLinePlaceholder":589},[159,55776,55777],{"class":161,"line":1841},[159,55778,55779],{"class":1135},"    # 定义损失函数使用交叉熵损失函数\n",[159,55781,55782,55785,55787],{"class":161,"line":1852},[159,55783,55784],{"class":165},"    criterion",[159,55786,189],{"class":1142},[159,55788,55789],{"class":165},"nn.CrossEntropyLoss()\n",[159,55791,55792],{"class":161,"line":1866},[159,55793,590],{"emptyLinePlaceholder":589},[159,55795,55796],{"class":161,"line":1879},[159,55797,55798],{"class":1135},"    # 将模型放到GPU中进行训练\n",[159,55800,55801,55803,55805],{"class":161,"line":1884},[159,55802,54809],{"class":165},[159,55804,189],{"class":1142},[159,55806,55807],{"class":165},"model.to(device)\n",[159,55809,55810],{"class":161,"line":1889},[159,55811,55812],{"class":1135},"    # 复制当前模型的参数\n",[159,55814,55815],{"class":161,"line":1899},[159,55816,55817],{"class":1135},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[159,55819,55820],{"class":161,"line":1912},[159,55821,55822],{"class":1135},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[159,55824,55825,55828,55830],{"class":161,"line":1925},[159,55826,55827],{"class":165},"    best_model_wts",[159,55829,189],{"class":1142},[159,55831,55832],{"class":165},"copy.deepcopy(model.state_dict())\n",[159,55834,55835],{"class":161,"line":1956},[159,55836,590],{"emptyLinePlaceholder":589},[159,55838,55839],{"class":161,"line":1971},[159,55840,590],{"emptyLinePlaceholder":589},[159,55842,55843],{"class":161,"line":1976},[159,55844,55845],{"class":1135},"    # 初始化参数\n",[159,55847,55848],{"class":161,"line":1981},[159,55849,55850],{"class":1135},"    # 最高准确度\n",[159,55852,55853,55856,55858],{"class":161,"line":1989},[159,55854,55855],{"class":165},"    best_acc",[159,55857,189],{"class":1142},[159,55859,55860],{"class":1146},"0.0\n",[159,55862,55863],{"class":161,"line":2001},[159,55864,55865],{"class":1135},"    # 训练集损失列表\n",[159,55867,55868,55871,55873],{"class":161,"line":2006},[159,55869,55870],{"class":165},"    train_loss_all",[159,55872,189],{"class":1142},[159,55874,55875],{"class":165},"[]\n",[159,55877,55878],{"class":161,"line":2015},[159,55879,55880],{"class":1135},"    # 验证集函数列表\n",[159,55882,55883,55886,55888],{"class":161,"line":2024},[159,55884,55885],{"class":165},"    val_loss_all",[159,55887,189],{"class":1142},[159,55889,55875],{"class":165},[159,55891,55892],{"class":161,"line":2029},[159,55893,55894],{"class":1135},"    # 训练集准确度列表\n",[159,55896,55897,55900,55902],{"class":161,"line":2038},[159,55898,55899],{"class":165},"    train_acc_all",[159,55901,189],{"class":1142},[159,55903,55875],{"class":165},[159,55905,55906],{"class":161,"line":2053},[159,55907,55908],{"class":1135},"    # 验证集准确度列表\n",[159,55910,55911,55914,55916],{"class":161,"line":2070},[159,55912,55913],{"class":165},"    val_acc_all",[159,55915,189],{"class":1142},[159,55917,55875],{"class":165},[159,55919,55920],{"class":161,"line":2095},[159,55921,590],{"emptyLinePlaceholder":589},[159,55923,55924],{"class":161,"line":2104},[159,55925,55926],{"class":1135},"    # 保存当前时间--->方便看每轮训练的时间\n",[159,55928,55929,55932,55934],{"class":161,"line":2120},[159,55930,55931],{"class":165},"    since",[159,55933,189],{"class":1142},[159,55935,55936],{"class":165},"time.time()\n",[159,55938,55939],{"class":161,"line":2134},[159,55940,590],{"emptyLinePlaceholder":589},[159,55942,55943],{"class":161,"line":2143},[159,55944,590],{"emptyLinePlaceholder":589},[159,55946,55947],{"class":161,"line":2165},[159,55948,55949],{"class":1135},"    # 准备工作完成--->开始训练模型\n",[159,55951,55952,55954,55957,55959,55962],{"class":161,"line":2178},[159,55953,11677],{"class":1142},[159,55955,55956],{"class":165}," epoch ",[159,55958,49566],{"class":1142},[159,55960,55961],{"class":1146}," range",[159,55963,55964],{"class":165},"(num_epochs):\n",[159,55966,55967,55970,55972,55975,55978,55980,55982,55984,55987,55989,55991],{"class":161,"line":2191},[159,55968,55969],{"class":1146},"        print",[159,55971,1159],{"class":165},[159,55973,55974],{"class":192},"\"Epoch ",[159,55976,55977],{"class":1146},"{}",[159,55979,13083],{"class":192},[159,55981,55977],{"class":1146},[159,55983,24115],{"class":192},[159,55985,55986],{"class":165},".format(epoch,num_epochs",[159,55988,24376],{"class":1142},[159,55990,4932],{"class":1146},[159,55992,18787],{"class":165},[159,55994,55995,55997,55999,56002,56004,56006],{"class":161,"line":2204},[159,55996,55969],{"class":1146},[159,55998,1159],{"class":165},[159,56000,56001],{"class":192},"\"-\"",[159,56003,4777],{"class":1142},[159,56005,1964],{"class":1146},[159,56007,1165],{"class":165},[159,56009,56010],{"class":161,"line":2217},[159,56011,590],{"emptyLinePlaceholder":589},[159,56013,56014],{"class":161,"line":2230},[159,56015,56016],{"class":1135},"        # 初始化参数\n",[159,56018,56019],{"class":161,"line":2243},[159,56020,56021],{"class":1135},"        # 训练集损失函数\n",[159,56023,56024,56027,56029],{"class":161,"line":2256},[159,56025,56026],{"class":165},"        train_loss",[159,56028,189],{"class":1142},[159,56030,55860],{"class":1146},[159,56032,56033],{"class":161,"line":2266},[159,56034,56035],{"class":1135},"        # 训练集准确度\n",[159,56037,56038,56041,56043],{"class":161,"line":2275},[159,56039,56040],{"class":165},"        train_corrects",[159,56042,189],{"class":1142},[159,56044,26716],{"class":1146},[159,56046,56047],{"class":161,"line":2284},[159,56048,56049],{"class":1135},"        # 验证集损失函数\n",[159,56051,56052,56055,56057],{"class":161,"line":2293},[159,56053,56054],{"class":165},"        val_loss",[159,56056,189],{"class":1142},[159,56058,55860],{"class":1146},[159,56060,56061],{"class":161,"line":2306},[159,56062,56063],{"class":1135},"        # 验证集准确度\n",[159,56065,56066,56069,56071],{"class":161,"line":2330},[159,56067,56068],{"class":165},"        val_corrects",[159,56070,189],{"class":1142},[159,56072,26716],{"class":1146},[159,56074,56075],{"class":161,"line":2350},[159,56076,56077],{"class":1135},"        # 训练集样本数量\n",[159,56079,56080,56083,56085],{"class":161,"line":2370},[159,56081,56082],{"class":165},"        train_num",[159,56084,189],{"class":1142},[159,56086,26716],{"class":1146},[159,56088,56089],{"class":161,"line":2390},[159,56090,56091],{"class":1135},"        # 验证集样本数量\n",[159,56093,56094,56097,56099],{"class":161,"line":2410},[159,56095,56096],{"class":165},"        val_num",[159,56098,189],{"class":1142},[159,56100,26716],{"class":1146},[159,56102,56103],{"class":161,"line":2430},[159,56104,56105],{"class":1135},"        # 将数据放到设备,并开始训练\n",[159,56107,56108,56110,56112,56114,56116],{"class":161,"line":2450},[159,56109,27032],{"class":1142},[159,56111,55120],{"class":165},[159,56113,49566],{"class":1142},[159,56115,55125],{"class":1146},[159,56117,56118],{"class":165},"(train_dataloader):\n",[159,56120,56121],{"class":161,"line":2471},[159,56122,56123],{"class":1135},"            # 将特征放入到训练设备\n",[159,56125,56126,56129,56131],{"class":161,"line":2477},[159,56127,56128],{"class":165},"            b_x",[159,56130,189],{"class":1142},[159,56132,56133],{"class":165},"b_x.to(device)\n",[159,56135,56136],{"class":161,"line":2498},[159,56137,56138],{"class":1135},"            # 将标签放入到训练设备当中\n",[159,56140,56141,56144,56146],{"class":161,"line":2518},[159,56142,56143],{"class":165},"            b_y",[159,56145,189],{"class":1142},[159,56147,56148],{"class":165},"b_y.to(device)\n",[159,56150,56151],{"class":161,"line":2539},[159,56152,56153],{"class":1135},"            # 设置模型为训练模式\n",[159,56155,56156],{"class":161,"line":2561},[159,56157,56158],{"class":165},"            model.train()\n",[159,56160,56161],{"class":161,"line":2573},[159,56162,56163],{"class":1135},"            # 将数据放到模型当中,开始前向传播\n",[159,56165,56166],{"class":161,"line":2591},[159,56167,56168],{"class":1135},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[159,56170,56171,56174,56176],{"class":161,"line":2602},[159,56172,56173],{"class":165},"            output",[159,56175,189],{"class":1142},[159,56177,56178],{"class":165},"model(b_x)\n",[159,56180,56181],{"class":161,"line":2613},[159,56182,56183],{"class":1135},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[159,56185,56186,56189,56191,56194,56197,56199,56201],{"class":161,"line":2624},[159,56187,56188],{"class":165},"            pre_lab",[159,56190,189],{"class":1142},[159,56192,56193],{"class":165},"torch.argmax(output,",[159,56195,56196],{"class":8765},"dim",[159,56198,189],{"class":1142},[159,56200,4932],{"class":1146},[159,56202,1165],{"class":165},[159,56204,56205],{"class":161,"line":2630},[159,56206,56207],{"class":1135},"            # 计算每一个batch的损失函数\n",[159,56209,56210,56213,56215],{"class":161,"line":2636},[159,56211,56212],{"class":165},"            loss",[159,56214,189],{"class":1142},[159,56216,56217],{"class":165},"criterion(output,b_y)\n",[159,56219,56220],{"class":161,"line":2642},[159,56221,56222],{"class":1135},"            # 将梯度初始化为0\n",[159,56224,56225],{"class":161,"line":2648},[159,56226,56227],{"class":165},"            optimizer.zero_grad()\n",[159,56229,56230],{"class":161,"line":2674},[159,56231,56232],{"class":1135},"            # 梯度置为0后再进行反向传播\n",[159,56234,56235],{"class":161,"line":2689},[159,56236,56237],{"class":165},"            loss.backward()\n",[159,56239,56240],{"class":161,"line":2694},[159,56241,56242],{"class":1135},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[159,56244,56245],{"class":161,"line":2721},[159,56246,56247],{"class":165},"            optimizer.step()\n",[159,56249,56250],{"class":161,"line":2726},[159,56251,56252],{"class":1135},"            # loss.item()指的是batch的平均损失\n",[159,56254,56255,56258,56260,56263,56265,56268,56270],{"class":161,"line":2735},[159,56256,56257],{"class":165},"            train_loss",[159,56259,33073],{"class":1142},[159,56261,56262],{"class":165},"loss.item()",[159,56264,4777],{"class":1142},[159,56266,56267],{"class":165},"b_x.size(",[159,56269,1489],{"class":1146},[159,56271,1165],{"class":165},[159,56273,56274],{"class":161,"line":2744},[159,56275,56276],{"class":1135},"            # 计算每个批次中正确预测的数量\n",[159,56278,56279,56282,56284,56287,56289],{"class":161,"line":2753},[159,56280,56281],{"class":165},"            train_corrects",[159,56283,33073],{"class":1142},[159,56285,56286],{"class":165},"torch.sum(pre_lab",[159,56288,26581],{"class":1142},[159,56290,56291],{"class":165},"b_y.data)\n",[159,56293,56294],{"class":161,"line":2758},[159,56295,56296],{"class":1135},"            # 计算目前为止一共处理了多少样本\n",[159,56298,56299,56302,56304,56306,56308],{"class":161,"line":3959},[159,56300,56301],{"class":165},"            train_num",[159,56303,33073],{"class":1142},[159,56305,56267],{"class":165},[159,56307,1489],{"class":1146},[159,56309,1165],{"class":165},[159,56311,56312],{"class":161,"line":3968},[159,56313,56314],{"class":1135},"        # 验证数据\n",[159,56316,56317,56319,56322,56324,56326],{"class":161,"line":3977},[159,56318,27032],{"class":1142},[159,56320,56321],{"class":165}," step ,(b_x,b_y) ",[159,56323,49566],{"class":1142},[159,56325,55125],{"class":1146},[159,56327,56328],{"class":165},"(val_dataloader):\n",[159,56330,56331],{"class":161,"line":3982},[159,56332,56333],{"class":1135},"            # 将特征放到验证设备当中\n",[159,56335,56336,56338,56340],{"class":161,"line":6843},[159,56337,56128],{"class":165},[159,56339,189],{"class":1142},[159,56341,56133],{"class":165},[159,56343,56344],{"class":161,"line":6849},[159,56345,56346],{"class":1135},"            # 将标签放到放到训练设备当中\n",[159,56348,56349,56351,56353],{"class":161,"line":6855},[159,56350,56143],{"class":165},[159,56352,189],{"class":1142},[159,56354,56148],{"class":165},[159,56356,56357],{"class":161,"line":6861},[159,56358,56359],{"class":1135},"            # 开启验证模式，设置模型为评估模式\n",[159,56361,56362],{"class":161,"line":6867},[159,56363,56364],{"class":165},"            model.eval()\n",[159,56366,56367,56370],{"class":161,"line":6873},[159,56368,56369],{"class":1142},"            with",[159,56371,56372],{"class":165}," torch.no_grad():\n",[159,56374,56375],{"class":161,"line":6879},[159,56376,56377],{"class":1135},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[159,56379,56380,56383,56385],{"class":161,"line":6885},[159,56381,56382],{"class":165},"                output ",[159,56384,189],{"class":1142},[159,56386,56387],{"class":165}," model(b_x)\n",[159,56389,56390],{"class":161,"line":6890},[159,56391,56392],{"class":1135},"                # 查找每一行中最大值对应的下标\n",[159,56394,56395,56398,56400,56403,56405,56407,56409],{"class":161,"line":6896},[159,56396,56397],{"class":165},"                pre_lab ",[159,56399,189],{"class":1142},[159,56401,56402],{"class":165}," torch.argmax(output, ",[159,56404,56196],{"class":8765},[159,56406,189],{"class":1142},[159,56408,4932],{"class":1146},[159,56410,1165],{"class":165},[159,56412,56413],{"class":161,"line":6902},[159,56414,56415],{"class":1135},"                # 计算验证集上的当前 batch 损失\n",[159,56417,56418,56421,56423],{"class":161,"line":6908},[159,56419,56420],{"class":165},"                val_batch_loss ",[159,56422,189],{"class":1142},[159,56424,56425],{"class":165}," criterion(output, b_y)\n",[159,56427,56428],{"class":161,"line":6914},[159,56429,56430],{"class":1135},"                # 对损失函数进行累加（按样本数加权）\n",[159,56432,56433,56436,56438,56441,56443,56446,56448],{"class":161,"line":6920},[159,56434,56435],{"class":165},"                val_loss ",[159,56437,33073],{"class":1142},[159,56439,56440],{"class":165}," val_batch_loss.item() ",[159,56442,4777],{"class":1142},[159,56444,56445],{"class":165}," b_x.size(",[159,56447,1489],{"class":1146},[159,56449,1165],{"class":165},[159,56451,56452,56455,56457,56460,56462],{"class":161,"line":6926},[159,56453,56454],{"class":165},"                val_corrects ",[159,56456,33073],{"class":1142},[159,56458,56459],{"class":165}," torch.sum(pre_lab ",[159,56461,26581],{"class":1142},[159,56463,56464],{"class":165}," b_y.data)\n",[159,56466,56467],{"class":161,"line":6932},[159,56468,56469],{"class":1135},"                # 当前用于验证的样本数量\n",[159,56471,56472,56475,56477,56479,56481],{"class":161,"line":6938},[159,56473,56474],{"class":165},"            val_num ",[159,56476,33073],{"class":1142},[159,56478,56445],{"class":165},[159,56480,1489],{"class":1146},[159,56482,1165],{"class":165},[159,56484,56485],{"class":161,"line":6944},[159,56486,56487],{"class":1135},"        # 计算并保存每一次迭代的loss值和准确率\n",[159,56489,56490],{"class":161,"line":6949},[159,56491,56492],{"class":1135},"        # 计算并保存训练集的loss值\n",[159,56494,56495,56498,56500],{"class":161,"line":6955},[159,56496,56497],{"class":165},"        train_loss_all.append(train_loss",[159,56499,13083],{"class":1142},[159,56501,56502],{"class":165},"train_num)\n",[159,56504,56505],{"class":161,"line":6961},[159,56506,56507],{"class":1135},"        # 取双精度\n",[159,56509,56510],{"class":161,"line":6967},[159,56511,56512],{"class":1135},"        # 计算并保存训练集的准确率\n",[159,56514,56515,56518,56520],{"class":161,"line":6973},[159,56516,56517],{"class":165},"        train_acc_all.append(train_corrects.double().item()",[159,56519,13083],{"class":1142},[159,56521,56502],{"class":165},[159,56523,56524],{"class":161,"line":6979},[159,56525,56526],{"class":1135},"        # 计算并保存验证集的loss值\n",[159,56528,56529,56532,56534],{"class":161,"line":6985},[159,56530,56531],{"class":165},"        val_loss_all.append(val_loss",[159,56533,13083],{"class":1142},[159,56535,56536],{"class":165},"val_num)\n",[159,56538,56539],{"class":161,"line":6991},[159,56540,56541],{"class":1135},"        # 计算并保存验证集的准确率\n",[159,56543,56544,56547,56549],{"class":161,"line":6997},[159,56545,56546],{"class":165},"        val_acc_all.append(val_corrects.double().item()",[159,56548,13083],{"class":1142},[159,56550,56536],{"class":165},[159,56552,56553],{"class":161,"line":7003},[159,56554,590],{"emptyLinePlaceholder":589},[159,56556,56557],{"class":161,"line":7009},[159,56558,56559],{"class":1135},"        # 打印训练一轮的loss值和准确率\n",[159,56561,56562,56564,56566,56568,56570,56573,56575,56578,56580,56583,56585,56587,56589,56591,56594,56596,56598,56601,56603,56605],{"class":161,"line":7015},[159,56563,55969],{"class":1146},[159,56565,1159],{"class":165},[159,56567,27221],{"class":192},[159,56569,55977],{"class":1146},[159,56571,56572],{"class":192},"train loss:",[159,56574,24721],{"class":1146},[159,56576,56577],{"class":1142},":.4f",[159,56579,886],{"class":1146},[159,56581,56582],{"class":192}," train acc:",[159,56584,24721],{"class":1146},[159,56586,56577],{"class":1142},[159,56588,886],{"class":1146},[159,56590,27221],{"class":192},[159,56592,56593],{"class":165},".format(epoch,train_loss_all[",[159,56595,24376],{"class":1142},[159,56597,4932],{"class":1146},[159,56599,56600],{"class":165},"],train_acc_all[",[159,56602,24376],{"class":1142},[159,56604,4932],{"class":1146},[159,56606,56607],{"class":165},"]))\n",[159,56609,56610,56612,56614,56616,56618,56621,56623,56625,56627,56630,56632,56634,56636,56638,56641,56643,56645,56648,56650,56652],{"class":161,"line":7021},[159,56611,55969],{"class":1146},[159,56613,1159],{"class":165},[159,56615,27221],{"class":192},[159,56617,55977],{"class":1146},[159,56619,56620],{"class":192},"val loss:",[159,56622,24721],{"class":1146},[159,56624,56577],{"class":1142},[159,56626,886],{"class":1146},[159,56628,56629],{"class":192}," val acc:",[159,56631,24721],{"class":1146},[159,56633,56577],{"class":1142},[159,56635,886],{"class":1146},[159,56637,27221],{"class":192},[159,56639,56640],{"class":165},".format(epoch,val_loss_all[",[159,56642,24376],{"class":1142},[159,56644,4932],{"class":1146},[159,56646,56647],{"class":165},"],val_acc_all[",[159,56649,24376],{"class":1142},[159,56651,4932],{"class":1146},[159,56653,56607],{"class":165},[159,56655,56656],{"class":161,"line":7026},[159,56657,590],{"emptyLinePlaceholder":589},[159,56659,56660],{"class":161,"line":7031},[159,56661,56662],{"class":1135},"        # 判断准确度--->保存最优模型\n",[159,56664,56665,56667,56670,56672,56674,56676,56678],{"class":161,"line":7037},[159,56666,17003],{"class":1142},[159,56668,56669],{"class":165}," val_acc_all[",[159,56671,24376],{"class":1142},[159,56673,4932],{"class":1146},[159,56675,18375],{"class":165},[159,56677,6760],{"class":1142},[159,56679,56680],{"class":165},"best_acc:\n",[159,56682,56683],{"class":161,"line":7043},[159,56684,56685],{"class":1135},"            # 保存当前模型准确度\n",[159,56687,56688,56691,56693,56695,56698,56700,56702],{"class":161,"line":7049},[159,56689,56690],{"class":165},"            best_acc:",[159,56692,23920],{"class":1146},[159,56694,189],{"class":1142},[159,56696,56697],{"class":165},"val_acc_all[",[159,56699,24376],{"class":1142},[159,56701,4932],{"class":1146},[159,56703,4634],{"class":165},[159,56705,56706],{"class":161,"line":7054},[159,56707,56708],{"class":1135},"            # 保存当前的准确度\n",[159,56710,56711],{"class":161,"line":7060},[159,56712,56713],{"class":1135},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[159,56715,56716,56719,56721],{"class":161,"line":7066},[159,56717,56718],{"class":165},"            best_model_wts",[159,56720,189],{"class":1142},[159,56722,55832],{"class":165},[159,56724,56725],{"class":161,"line":7072},[159,56726,590],{"emptyLinePlaceholder":589},[159,56728,56729],{"class":161,"line":7078},[159,56730,56731],{"class":1135},"        # 计算耗时\n",[159,56733,56734,56737,56739,56742,56744],{"class":161,"line":7084},[159,56735,56736],{"class":165},"        time_use",[159,56738,189],{"class":1142},[159,56740,56741],{"class":165},"time.time()",[159,56743,24376],{"class":1142},[159,56745,56746],{"class":165},"since\n",[159,56748,56749,56751,56753,56756,56758,56761,56763,56765,56767,56769,56771,56774,56777,56780,56782,56785,56787,56789],{"class":161,"line":7089},[159,56750,55969],{"class":1146},[159,56752,1159],{"class":165},[159,56754,56755],{"class":192},"'训练和验证耗费的时间",[159,56757,24721],{"class":1146},[159,56759,56760],{"class":1142},":.0f",[159,56762,886],{"class":1146},[159,56764,21081],{"class":192},[159,56766,24721],{"class":1146},[159,56768,56760],{"class":1142},[159,56770,886],{"class":1146},[159,56772,56773],{"class":192},"s'",[159,56775,56776],{"class":165},".format(time_use",[159,56778,56779],{"class":1142},"\u002F\u002F",[159,56781,10814],{"class":1146},[159,56783,56784],{"class":165},",time_use",[159,56786,1662],{"class":1142},[159,56788,10814],{"class":1146},[159,56790,18787],{"class":165},[159,56792,56793],{"class":161,"line":7095},[159,56794,56795],{"class":1135},"    # 选择最优参数\n",[159,56797,56798],{"class":161,"line":7100},[159,56799,56800],{"class":1135},"    # 加载最高准确率下的模型参数\n",[159,56802,56803],{"class":161,"line":7105},[159,56804,56805],{"class":1135},"    # model.load_state_dict(best_model_wts)\n",[159,56807,56808,56811,56814],{"class":161,"line":7110},[159,56809,56810],{"class":165},"    torch.save(model.state_dict(best_model_wts), ",[159,56812,56813],{"class":192},"'.\u002Fbest_model.pth'",[159,56815,1165],{"class":165},[159,56817,56818],{"class":161,"line":7115},[159,56819,56820],{"class":1135},"    # 或者写成\n",[159,56822,56823],{"class":161,"line":7120},[159,56824,56825],{"class":1135},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[159,56827,56828],{"class":161,"line":7125},[159,56829,56830],{"class":1135},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[159,56832,56833,56836,56838,56841,56844,56846],{"class":161,"line":7131},[159,56834,56835],{"class":165},"    train_process",[159,56837,189],{"class":1142},[159,56839,56840],{"class":165},"pd.DataFrame(",[159,56842,56843],{"class":8765},"data",[159,56845,189],{"class":1142},[159,56847,25222],{"class":165},[159,56849,56850,56853,56855,56858],{"class":161,"line":7137},[159,56851,56852],{"class":192},"        \"epoch\"",[159,56854,20934],{"class":165},[159,56856,56857],{"class":1146},"range",[159,56859,56860],{"class":165},"(num_epochs),\n",[159,56862,56863,56866],{"class":161,"line":7143},[159,56864,56865],{"class":192},"        \"train_loss_all\"",[159,56867,56868],{"class":165},":train_loss_all,\n",[159,56870,56871,56874],{"class":161,"line":7149},[159,56872,56873],{"class":192},"        \"val_loss_all\"",[159,56875,56876],{"class":165},":val_loss_all,\n",[159,56878,56879,56882],{"class":161,"line":7155},[159,56880,56881],{"class":192},"        \"train_acc_all\"",[159,56883,56884],{"class":165},":train_acc_all,\n",[159,56886,56887,56890],{"class":161,"line":7161},[159,56888,56889],{"class":192},"        \"val_acc_all\"",[159,56891,56892],{"class":165},":val_acc_all\n",[159,56894,56895],{"class":161,"line":7167},[159,56896,4863],{"class":165},[159,56898,56899],{"class":161,"line":7173},[159,56900,56901],{"class":1135},"    # 返回训练保存的过程\n",[159,56903,56904,56906],{"class":161,"line":7179},[159,56905,27711],{"class":1142},[159,56907,56908],{"class":165}," train_process\n",[159,56910,56911],{"class":161,"line":7184},[159,56912,590],{"emptyLinePlaceholder":589},[159,56914,56915],{"class":161,"line":7189},[159,56916,56917],{"class":1135},"# 将loss值和精度按照图片的形式展示出来\n",[159,56919,56920,56922,56925],{"class":161,"line":7195},[159,56921,55465],{"class":1142},[159,56923,56924],{"class":185}," matplot_acc_loss",[159,56926,56927],{"class":165},"(train_process):\n",[159,56929,56930],{"class":161,"line":7201},[159,56931,56932],{"class":1135},"    # 设置图的大小\n",[159,56934,56935,56938,56940,56942,56944,56946,56948,56950],{"class":161,"line":7207},[159,56936,56937],{"class":165},"    plt.figure(",[159,56939,55212],{"class":8765},[159,56941,189],{"class":1142},[159,56943,1159],{"class":165},[159,56945,7925],{"class":1146},[159,56947,24233],{"class":165},[159,56949,8866],{"class":1146},[159,56951,18787],{"class":165},[159,56953,56954],{"class":161,"line":7213},[159,56955,56956],{"class":1135},"    # 设置图中有几张图\n",[159,56958,56959],{"class":161,"line":7219},[159,56960,56961],{"class":1135},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[159,56963,56964],{"class":161,"line":7224},[159,56965,56966],{"class":1135},"    # ①loss图\n",[159,56968,56969,56971,56973,56975,56977,56979,56981],{"class":161,"line":7230},[159,56970,55246],{"class":165},[159,56972,4932],{"class":1146},[159,56974,24233],{"class":165},[159,56976,11034],{"class":1146},[159,56978,24233],{"class":165},[159,56980,4932],{"class":1146},[159,56982,1165],{"class":165},[159,56984,56985],{"class":161,"line":7236},[159,56986,56987],{"class":1135},"    # 补充:\n",[159,56989,56990],{"class":161,"line":7242},[159,56991,56992],{"class":1135},"    # plt.subplot(nrows, ncols, index)\n",[159,56994,56995],{"class":161,"line":7248},[159,56996,56997],{"class":1135},"    # nrows：行数\n",[159,56999,57000],{"class":161,"line":7254},[159,57001,57002],{"class":1135},"    # ncols：列数\n",[159,57004,57005],{"class":161,"line":7260},[159,57006,57007],{"class":1135},"    # index：目前选中第几个子图（从1开始）\n",[159,57009,57010,57013,57016,57019,57022,57024,57027,57029,57032],{"class":161,"line":7265},[159,57011,57012],{"class":165},"    plt.plot(train_process[",[159,57014,57015],{"class":192},"\"epoch\"",[159,57017,57018],{"class":165},"],train_process.train_loss_all,",[159,57020,57021],{"class":192},"'ro-'",[159,57023,24233],{"class":165},[159,57025,57026],{"class":8765},"label",[159,57028,189],{"class":1142},[159,57030,57031],{"class":192},"'train loss'",[159,57033,1165],{"class":165},[159,57035,57036,57038,57040,57043,57046,57048,57050,57052,57055],{"class":161,"line":7270},[159,57037,57012],{"class":165},[159,57039,57015],{"class":192},[159,57041,57042],{"class":165},"],train_process.val_loss_all,",[159,57044,57045],{"class":192},"'bs--'",[159,57047,24233],{"class":165},[159,57049,57026],{"class":8765},[159,57051,189],{"class":1142},[159,57053,57054],{"class":192},"'val loss'",[159,57056,1165],{"class":165},[159,57058,57059],{"class":161,"line":7276},[159,57060,57061],{"class":1135},"    # 添加一个图例\n",[159,57063,57064],{"class":161,"line":7281},[159,57065,57066],{"class":165},"    plt.legend()\n",[159,57068,57069],{"class":161,"line":7287},[159,57070,57071],{"class":1135},"    # 给轴添加标签\n",[159,57073,57074,57077,57080],{"class":161,"line":7292},[159,57075,57076],{"class":165},"    plt.xlabel(",[159,57078,57079],{"class":192},"'epoch'",[159,57081,1165],{"class":165},[159,57083,57084,57087,57090],{"class":161,"line":7298},[159,57085,57086],{"class":165},"    plt.ylabel(",[159,57088,57089],{"class":192},"'loss'",[159,57091,1165],{"class":165},[159,57093,57094],{"class":161,"line":7304},[159,57095,57096],{"class":1135},"    # ②准确度图\n",[159,57098,57099,57101,57103,57105,57107,57109,57111],{"class":161,"line":7310},[159,57100,55246],{"class":165},[159,57102,4932],{"class":1146},[159,57104,24233],{"class":165},[159,57106,11034],{"class":1146},[159,57108,24233],{"class":165},[159,57110,11034],{"class":1146},[159,57112,1165],{"class":165},[159,57114,57115,57117,57119,57122,57124,57126,57128,57130,57133],{"class":161,"line":7316},[159,57116,57012],{"class":165},[159,57118,57015],{"class":192},[159,57120,57121],{"class":165},"],train_process.train_acc_all,",[159,57123,57021],{"class":192},[159,57125,24233],{"class":165},[159,57127,57026],{"class":8765},[159,57129,189],{"class":1142},[159,57131,57132],{"class":192},"'train acc'",[159,57134,1165],{"class":165},[159,57136,57137,57139,57141,57144,57146,57148,57150,57152,57155],{"class":161,"line":7322},[159,57138,57012],{"class":165},[159,57140,57015],{"class":192},[159,57142,57143],{"class":165},"],train_process.val_acc_all,",[159,57145,57045],{"class":192},[159,57147,24233],{"class":165},[159,57149,57026],{"class":8765},[159,57151,189],{"class":1142},[159,57153,57154],{"class":192},"'val acc'",[159,57156,1165],{"class":165},[159,57158,57159],{"class":161,"line":7328},[159,57160,57161],{"class":1135},"    # 添加图例\n",[159,57163,57164],{"class":161,"line":7333},[159,57165,57066],{"class":165},[159,57167,57168,57170,57172],{"class":161,"line":7342},[159,57169,57076],{"class":165},[159,57171,57015],{"class":192},[159,57173,1165],{"class":165},[159,57175,57176,57178,57181],{"class":161,"line":7351},[159,57177,57086],{"class":165},[159,57179,57180],{"class":192},"\"acc\"",[159,57182,1165],{"class":165},[159,57184,57185],{"class":161,"line":7356},[159,57186,57187],{"class":165},"    plt.show()\n",[159,57189,57190],{"class":161,"line":21272},[159,57191,590],{"emptyLinePlaceholder":589},[159,57193,57194],{"class":161,"line":21277},[159,57195,57196],{"class":1135},"# 正式开始训练:\n",[159,57198,57199,57201,57203,57205,57207],{"class":161,"line":21288},[159,57200,18445],{"class":1142},[159,57202,54740],{"class":1146},[159,57204,26581],{"class":1142},[159,57206,54745],{"class":192},[159,57208,27364],{"class":165},[159,57210,57211],{"class":161,"line":21293},[159,57212,57213],{"class":1135},"    # 将模型实例化\n",[159,57215,57216,57219,57221],{"class":161,"line":21299},[159,57217,57218],{"class":165},"    LeNet",[159,57220,189],{"class":1142},[159,57222,57223],{"class":165},"LeNet()\n",[159,57225,57226,57229,57231],{"class":161,"line":21305},[159,57227,57228],{"class":165},"    train_dataloader,val_dataloader",[159,57230,189],{"class":1142},[159,57232,57233],{"class":165},"train_val_data_process()\n",[159,57235,57236,57238,57240,57243,57246,57248,57250],{"class":161,"line":21310},[159,57237,56835],{"class":165},[159,57239,189],{"class":1142},[159,57241,57242],{"class":165},"train_model_process(LeNet,train_dataloader,val_dataloader,",[159,57244,57245],{"class":8765},"num_epochs",[159,57247,189],{"class":1142},[159,57249,1739],{"class":1146},[159,57251,1165],{"class":165},[159,57253,57254],{"class":161,"line":21320},[159,57255,57256],{"class":165},"    matplot_acc_loss(train_process)\n",[14,57258,57259],{},"画图的补充点学习：",[14,57261,57262],{},[23,57263],{"alt":25,"src":57264},"\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",[134,57266,57267],{"start":203},[106,57268,57269],{},"测试",[151,57271,57273],{"className":53900,"code":57272,"language":53902,"meta":25,"style":25},"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",[49,57274,57275,57281,57291,57303,57313,57318,57328,57338,57342,57347,57356,57373,57385,57402,57413,57429,57434,57445,57456,57467,57474,57478,57483,57493,57498,57515,57523,57527,57532,57541,57550,57554,57559,57564,57569,57576,57581,57593,57603,57613,57618,57622,57627,57636,57641,57657,57662,57667,57672,57686,57691,57705,57709,57714,57729,57734,57746,57750,57755,57767,57772,57780,57785,57790,57800,57805,57814,57819,57824,57828,57833,57838,57854,57862,57867,57872,57931,57937,57942,57953,57961,57969,57973,57978,57982,57987,57995,58000,58016,58021,58031,58041],{"__ignoreMap":25},[159,57276,57277,57279],{"class":161,"line":162},[159,57278,53914],{"class":1142},[159,57280,53917],{"class":165},[159,57282,57283,57285,57287,57289],{"class":161,"line":176},[159,57284,53914],{"class":1142},[159,57286,54935],{"class":165},[159,57288,54903],{"class":1142},[159,57290,54940],{"class":165},[159,57292,57293,57295,57298,57300],{"class":161,"line":203},[159,57294,54258],{"class":1142},[159,57296,57297],{"class":165}," jupyter_client.consoleapp ",[159,57299,53914],{"class":1142},[159,57301,57302],{"class":165}," classes\n",[159,57304,57305,57307,57309,57311],{"class":161,"line":223},[159,57306,54258],{"class":1142},[159,57308,54918],{"class":165},[159,57310,53914],{"class":1142},[159,57312,54923],{"class":165},[159,57314,57315],{"class":161,"line":233},[159,57316,57317],{"class":1135},"# 导入数据集\n",[159,57319,57320,57322,57324,57326],{"class":161,"line":239},[159,57321,54258],{"class":1142},[159,57323,54888],{"class":165},[159,57325,53914],{"class":1142},[159,57327,54893],{"class":165},[159,57329,57330,57332,57334,57336],{"class":161,"line":245},[159,57331,54258],{"class":1142},[159,57333,55432],{"class":165},[159,57335,53914],{"class":1142},[159,57337,55437],{"class":165},[159,57339,57340],{"class":161,"line":251},[159,57341,590],{"emptyLinePlaceholder":589},[159,57343,57344],{"class":161,"line":261},[159,57345,57346],{"class":1135},"# 测试数据处理\n",[159,57348,57349,57351,57354],{"class":161,"line":603},[159,57350,55465],{"class":1142},[159,57352,57353],{"class":185}," test_data_process",[159,57355,55471],{"class":165},[159,57357,57358,57361,57363,57365,57367,57369,57371],{"class":161,"line":621},[159,57359,57360],{"class":165},"    test_data",[159,57362,189],{"class":1142},[159,57364,54975],{"class":165},[159,57366,54978],{"class":8765},[159,57368,189],{"class":1142},[159,57370,54983],{"class":192},[159,57372,17070],{"class":165},[159,57374,57375,57378,57380,57383],{"class":161,"line":634},[159,57376,57377],{"class":8765},"                           train",[159,57379,189],{"class":1142},[159,57381,57382],{"class":1146},"False",[159,57384,17070],{"class":165},[159,57386,57387,57390,57392,57394,57396,57398,57400],{"class":161,"line":640},[159,57388,57389],{"class":8765},"                           transform",[159,57391,189],{"class":1142},[159,57393,55012],{"class":165},[159,57395,55015],{"class":8765},[159,57397,189],{"class":1142},[159,57399,1726],{"class":1146},[159,57401,55023],{"class":165},[159,57403,57404,57407,57409,57411],{"class":161,"line":1075},[159,57405,57406],{"class":8765},"                           download",[159,57408,189],{"class":1142},[159,57410,54995],{"class":1146},[159,57412,1165],{"class":165},[159,57414,57415,57418,57420,57422,57424,57426],{"class":161,"line":1081},[159,57416,57417],{"class":165},"    test_dataloader",[159,57419,189],{"class":1142},[159,57421,55053],{"class":165},[159,57423,55056],{"class":8765},[159,57425,189],{"class":1142},[159,57427,57428],{"class":165},"test_data,\n",[159,57430,57431],{"class":161,"line":1091},[159,57432,57433],{"class":1135},"                                    # 这里是一张一张进行测试\n",[159,57435,57436,57439,57441,57443],{"class":161,"line":1100},[159,57437,57438],{"class":8765},"                                    batch_size",[159,57440,189],{"class":1142},[159,57442,4932],{"class":1146},[159,57444,17070],{"class":165},[159,57446,57447,57450,57452,57454],{"class":161,"line":1123},[159,57448,57449],{"class":8765},"                                    shuffle",[159,57451,189],{"class":1142},[159,57453,54995],{"class":1146},[159,57455,17070],{"class":165},[159,57457,57458,57461,57463,57465],{"class":161,"line":1132},[159,57459,57460],{"class":8765},"                                    num_workers",[159,57462,189],{"class":1142},[159,57464,1489],{"class":1146},[159,57466,1165],{"class":165},[159,57468,57469,57471],{"class":161,"line":1139},[159,57470,27711],{"class":1142},[159,57472,57473],{"class":165}," test_dataloader\n",[159,57475,57476],{"class":161,"line":1168},[159,57477,590],{"emptyLinePlaceholder":589},[159,57479,57480],{"class":161,"line":1174},[159,57481,57482],{"class":1135},"# 定义模型测试函数\n",[159,57484,57485,57487,57490],{"class":161,"line":1180},[159,57486,55465],{"class":1142},[159,57488,57489],{"class":185}," test_model_process",[159,57491,57492],{"class":165},"(model,test_dataloader):\n",[159,57494,57495],{"class":161,"line":1194},[159,57496,57497],{"class":1135},"    # 将模型放到设备当中，先进行判断\n",[159,57499,57500,57502,57504,57506,57508,57510,57512],{"class":161,"line":1200},[159,57501,54757],{"class":165},[159,57503,189],{"class":1142},[159,57505,54764],{"class":192},[159,57507,25367],{"class":1142},[159,57509,54769],{"class":165},[159,57511,25364],{"class":1142},[159,57513,57514],{"class":192}," \"cpu\"\n",[159,57516,57517,57519,57521],{"class":161,"line":1221},[159,57518,54809],{"class":165},[159,57520,189],{"class":1142},[159,57522,55807],{"class":165},[159,57524,57525],{"class":161,"line":1230},[159,57526,590],{"emptyLinePlaceholder":589},[159,57528,57529],{"class":161,"line":1247},[159,57530,57531],{"class":1135},"    # 设置初始化参数\n",[159,57533,57534,57537,57539],{"class":161,"line":1265},[159,57535,57536],{"class":165},"    test_corrects",[159,57538,189],{"class":1142},[159,57540,55860],{"class":1146},[159,57542,57543,57546,57548],{"class":161,"line":1277},[159,57544,57545],{"class":165},"    test_num",[159,57547,189],{"class":1142},[159,57549,26716],{"class":1146},[159,57551,57552],{"class":161,"line":1283},[159,57553,590],{"emptyLinePlaceholder":589},[159,57555,57556],{"class":161,"line":1294},[159,57557,57558],{"class":1135},"    # 进行模型测试\n",[159,57560,57561],{"class":161,"line":1305},[159,57562,57563],{"class":1135},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[159,57565,57566],{"class":161,"line":1311},[159,57567,57568],{"class":1135},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[159,57570,57571,57574],{"class":161,"line":1322},[159,57572,57573],{"class":1142},"    with",[159,57575,56372],{"class":165},[159,57577,57578],{"class":161,"line":1327},[159,57579,57580],{"class":1135},"        # 从数据中进行\n",[159,57582,57583,57585,57588,57590],{"class":161,"line":1336},[159,57584,27032],{"class":1142},[159,57586,57587],{"class":165}," test_data_x,test_data_y ",[159,57589,49566],{"class":1142},[159,57591,57592],{"class":165}," test_dataloader:\n",[159,57594,57595,57598,57600],{"class":161,"line":1345},[159,57596,57597],{"class":165},"            test_data_x",[159,57599,189],{"class":1142},[159,57601,57602],{"class":165},"test_data_x.to(device)\n",[159,57604,57605,57608,57610],{"class":161,"line":1350},[159,57606,57607],{"class":165},"            test_data_y",[159,57609,189],{"class":1142},[159,57611,57612],{"class":165},"test_data_y.to(device)\n",[159,57614,57615],{"class":161,"line":1764},[159,57616,57617],{"class":1135},"            # 设置为验证模式\n",[159,57619,57620],{"class":161,"line":1769},[159,57621,56364],{"class":165},[159,57623,57624],{"class":161,"line":1777},[159,57625,57626],{"class":1135},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[159,57628,57629,57631,57633],{"class":161,"line":1788},[159,57630,56173],{"class":165},[159,57632,189],{"class":1142},[159,57634,57635],{"class":165},"model(test_data_x)\n",[159,57637,57638],{"class":161,"line":1802},[159,57639,57640],{"class":1135},"            # 查找每一行中最大值对应的下标\n",[159,57642,57643,57645,57647,57649,57651,57653,57655],{"class":161,"line":1815},[159,57644,56188],{"class":165},[159,57646,189],{"class":1142},[159,57648,56193],{"class":165},[159,57650,56196],{"class":8765},[159,57652,189],{"class":1142},[159,57654,4932],{"class":1146},[159,57656,1165],{"class":165},[159,57658,57659],{"class":161,"line":1828},[159,57660,57661],{"class":1135},"            # 计算正确率\n",[159,57663,57664],{"class":161,"line":1841},[159,57665,57666],{"class":1135},"            # .data表示是一个不带梯度信息的tensor\n",[159,57668,57669],{"class":161,"line":1852},[159,57670,57671],{"class":1135},"            # 如果预测正确，则准确度test_corrects加1\n",[159,57673,57674,57677,57679,57681,57683],{"class":161,"line":1866},[159,57675,57676],{"class":165},"            test_corrects",[159,57678,33073],{"class":1142},[159,57680,56286],{"class":165},[159,57682,26581],{"class":1142},[159,57684,57685],{"class":165},"test_data_y.data)\n",[159,57687,57688],{"class":161,"line":1879},[159,57689,57690],{"class":1135},"            # 将所有的测试样本进行累计\n",[159,57692,57693,57696,57698,57701,57703],{"class":161,"line":1884},[159,57694,57695],{"class":165},"            test_num",[159,57697,33073],{"class":1142},[159,57699,57700],{"class":165},"test_data_x.size(",[159,57702,1489],{"class":1146},[159,57704,1165],{"class":165},[159,57706,57707],{"class":161,"line":1889},[159,57708,590],{"emptyLinePlaceholder":589},[159,57710,57711],{"class":161,"line":1899},[159,57712,57713],{"class":1135},"        # 计算准确度\n",[159,57715,57716,57719,57721,57724,57726],{"class":161,"line":1912},[159,57717,57718],{"class":165},"        test_acc",[159,57720,189],{"class":1142},[159,57722,57723],{"class":165},"test_corrects.double().item()",[159,57725,13083],{"class":1142},[159,57727,57728],{"class":165},"test_num\n",[159,57730,57731],{"class":161,"line":1925},[159,57732,57733],{"class":1135},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[159,57735,57736,57738,57740,57743],{"class":161,"line":1956},[159,57737,55969],{"class":1146},[159,57739,1159],{"class":165},[159,57741,57742],{"class":192},"\"测试的准确率：\"",[159,57744,57745],{"class":165},",test_acc)\n",[159,57747,57748],{"class":161,"line":1971},[159,57749,590],{"emptyLinePlaceholder":589},[159,57751,57752],{"class":161,"line":1976},[159,57753,57754],{"class":1135},"# 实现模型的测试功能\n",[159,57756,57757,57759,57761,57763,57765],{"class":161,"line":1981},[159,57758,18445],{"class":1142},[159,57760,54740],{"class":1146},[159,57762,26581],{"class":1142},[159,57764,54745],{"class":192},[159,57766,27364],{"class":165},[159,57768,57769],{"class":161,"line":1989},[159,57770,57771],{"class":1135},"    # 加载模型\n",[159,57773,57774,57776,57778],{"class":161,"line":2001},[159,57775,54809],{"class":165},[159,57777,189],{"class":1142},[159,57779,57223],{"class":165},[159,57781,57782],{"class":161,"line":2006},[159,57783,57784],{"class":1135},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[159,57786,57787],{"class":161,"line":2015},[159,57788,57789],{"class":1135},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[159,57791,57792,57795,57798],{"class":161,"line":2024},[159,57793,57794],{"class":165},"    model.load_state_dict(torch.load(",[159,57796,57797],{"class":192},"'best_model.pth'",[159,57799,18787],{"class":165},[159,57801,57802],{"class":161,"line":2029},[159,57803,57804],{"class":1135},"    # 数据加载\n",[159,57806,57807,57809,57811],{"class":161,"line":2038},[159,57808,57417],{"class":165},[159,57810,189],{"class":1142},[159,57812,57813],{"class":165},"test_data_process()\n",[159,57815,57816],{"class":161,"line":2053},[159,57817,57818],{"class":1135},"    # 加载模型测试的函数\n",[159,57820,57821],{"class":161,"line":2070},[159,57822,57823],{"class":165},"    test_model_process(model,test_dataloader)\n",[159,57825,57826],{"class":161,"line":2095},[159,57827,590],{"emptyLinePlaceholder":589},[159,57829,57830],{"class":161,"line":2104},[159,57831,57832],{"class":1135},"    # 验证集推理实现：\n",[159,57834,57835],{"class":161,"line":2120},[159,57836,57837],{"class":1135},"    # 加载数据加载的更详细一些\n",[159,57839,57840,57842,57844,57846,57848,57850,57852],{"class":161,"line":2134},[159,57841,54757],{"class":165},[159,57843,189],{"class":1142},[159,57845,54764],{"class":192},[159,57847,25367],{"class":1142},[159,57849,54769],{"class":165},[159,57851,25364],{"class":1142},[159,57853,57514],{"class":192},[159,57855,57856,57858,57860],{"class":161,"line":2143},[159,57857,54809],{"class":165},[159,57859,189],{"class":1142},[159,57861,55807],{"class":165},[159,57863,57864],{"class":161,"line":2165},[159,57865,57866],{"class":1135},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[159,57868,57869],{"class":161,"line":2178},[159,57870,57871],{"class":1135},"    # 顺序不可改变\n",[159,57873,57874,57877,57879,57881,57884,57886,57889,57891,57894,57896,57899,57901,57904,57906,57909,57911,57914,57916,57919,57921,57924,57926,57929],{"class":161,"line":2191},[159,57875,57876],{"class":165},"    classes",[159,57878,189],{"class":1142},[159,57880,17263],{"class":165},[159,57882,57883],{"class":192},"'T-shirt\u002Ftop'",[159,57885,24233],{"class":165},[159,57887,57888],{"class":192},"'Trouser'",[159,57890,24233],{"class":165},[159,57892,57893],{"class":192},"'Pullover'",[159,57895,24233],{"class":165},[159,57897,57898],{"class":192},"'Dress'",[159,57900,24233],{"class":165},[159,57902,57903],{"class":192},"'Coat'",[159,57905,24233],{"class":165},[159,57907,57908],{"class":192},"'Sandal'",[159,57910,24233],{"class":165},[159,57912,57913],{"class":192},"'Shirt'",[159,57915,24233],{"class":165},[159,57917,57918],{"class":192},"'Sneaker'",[159,57920,24233],{"class":165},[159,57922,57923],{"class":192},"'Bag'",[159,57925,24233],{"class":165},[159,57927,57928],{"class":192},"'Ankle boot'",[159,57930,4634],{"class":165},[159,57932,57933,57935],{"class":161,"line":2204},[159,57934,57573],{"class":1142},[159,57936,56372],{"class":165},[159,57938,57939],{"class":161,"line":2217},[159,57940,57941],{"class":1135},"        # 将数据和标签都放到设备当中\n",[159,57943,57944,57946,57949,57951],{"class":161,"line":2230},[159,57945,27032],{"class":1142},[159,57947,57948],{"class":165}," b_x,b_y ",[159,57950,49566],{"class":1142},[159,57952,57592],{"class":165},[159,57954,57955,57957,57959],{"class":161,"line":2243},[159,57956,56128],{"class":165},[159,57958,189],{"class":1142},[159,57960,56133],{"class":165},[159,57962,57963,57965,57967],{"class":161,"line":2256},[159,57964,56143],{"class":165},[159,57966,189],{"class":1142},[159,57968,56148],{"class":165},[159,57970,57971],{"class":161,"line":2266},[159,57972,590],{"emptyLinePlaceholder":589},[159,57974,57975],{"class":161,"line":2275},[159,57976,57977],{"class":1135},"            # 设置模型为验证模式\n",[159,57979,57980],{"class":161,"line":2284},[159,57981,56364],{"class":165},[159,57983,57984],{"class":161,"line":2293},[159,57985,57986],{"class":1135},"            # 模型推理结果\n",[159,57988,57989,57991,57993],{"class":161,"line":2306},[159,57990,56173],{"class":165},[159,57992,189],{"class":1142},[159,57994,56178],{"class":165},[159,57996,57997],{"class":161,"line":2330},[159,57998,57999],{"class":1135},"            # 获取最大下标，最大下标就是类别号\n",[159,58001,58002,58004,58006,58008,58010,58012,58014],{"class":161,"line":2350},[159,58003,56188],{"class":165},[159,58005,189],{"class":1142},[159,58007,56193],{"class":165},[159,58009,56196],{"class":8765},[159,58011,189],{"class":1142},[159,58013,4932],{"class":1146},[159,58015,1165],{"class":165},[159,58017,58018],{"class":161,"line":2370},[159,58019,58020],{"class":1135},"            # 取出张量中的数值\n",[159,58022,58023,58026,58028],{"class":161,"line":2390},[159,58024,58025],{"class":165},"            result",[159,58027,189],{"class":1142},[159,58029,58030],{"class":165},"pre_lab.item()\n",[159,58032,58033,58036,58038],{"class":161,"line":2410},[159,58034,58035],{"class":165},"            label",[159,58037,189],{"class":1142},[159,58039,58040],{"class":165},"b_y.item()\n",[159,58042,58043,58046,58048,58051,58054,58057,58059,58062],{"class":161,"line":2430},[159,58044,58045],{"class":1146},"            print",[159,58047,1159],{"class":165},[159,58049,58050],{"class":192},"\"预测值：\"",[159,58052,58053],{"class":165},",classes[result],",[159,58055,58056],{"class":192},"\"------\"",[159,58058,24233],{"class":165},[159,58060,58061],{"class":192},"\"真实值：\"",[159,58063,58064],{"class":165},",classes[label])\n",[14,58066,58067],{},"（2）AlexNet",[134,58069,58070],{},[106,58071,58072],{},"神经网络构建",[151,58074,58076],{"className":53900,"code":58075,"language":53902,"meta":25,"style":25},"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",[49,58077,58078,58084,58094,58104,58116,58120,58137,58145,58160,58172,58214,58241,58284,58310,58354,58397,58440,58467,58471,58481,58486,58514,58533,58552,58556,58561,58569,58584,58594,58608,58618,58633,58648,58663,58674,58678,58683,58693,58708,58713,58727,58742,58754,58759,58770,58775,58781,58786,58798,58818,58823,58832],{"__ignoreMap":25},[159,58079,58080,58082],{"class":161,"line":162},[159,58081,53914],{"class":1142},[159,58083,53917],{"class":165},[159,58085,58086,58088,58090,58092],{"class":161,"line":176},[159,58087,54258],{"class":1142},[159,58089,54261],{"class":165},[159,58091,53914],{"class":1142},[159,58093,54266],{"class":165},[159,58095,58096,58098,58100,58102],{"class":161,"line":203},[159,58097,54258],{"class":1142},[159,58099,54278],{"class":165},[159,58101,53914],{"class":1142},[159,58103,54283],{"class":165},[159,58105,58106,58108,58111,58113],{"class":161,"line":223},[159,58107,53914],{"class":1142},[159,58109,58110],{"class":165}," torch.nn.functional ",[159,58112,54903],{"class":1142},[159,58114,58115],{"class":165}," F\n",[159,58117,58118],{"class":161,"line":233},[159,58119,590],{"emptyLinePlaceholder":589},[159,58121,58122,58124,58127,58129,58131,58133,58135],{"class":161,"line":239},[159,58123,38260],{"class":1142},[159,58125,58126],{"class":185}," AlexNet",[159,58128,1159],{"class":165},[159,58130,54299],{"class":185},[159,58132,9952],{"class":165},[159,58134,54304],{"class":185},[159,58136,54307],{"class":165},[159,58138,58139,58141,58143],{"class":161,"line":245},[159,58140,54322],{"class":1142},[159,58142,54325],{"class":1146},[159,58144,54328],{"class":165},[159,58146,58147,58149,58152,58154,58156,58158],{"class":161,"line":251},[159,58148,54338],{"class":1146},[159,58150,58151],{"class":165},"(AlexNet,",[159,58153,54344],{"class":1146},[159,58155,13019],{"class":165},[159,58157,54349],{"class":1146},[159,58159,5158],{"class":165},[159,58161,58162,58164,58167,58169],{"class":161,"line":261},[159,58163,54365],{"class":1146},[159,58165,58166],{"class":165},".ReLu",[159,58168,189],{"class":1142},[159,58170,58171],{"class":165},"nn.ReLU()\n",[159,58173,58174,58176,58178,58180,58182,58184,58186,58188,58190,58192,58194,58196,58198,58200,58202,58204,58206,58208,58210,58212],{"class":161,"line":603},[159,58175,54365],{"class":1146},[159,58177,54368],{"class":165},[159,58179,189],{"class":1142},[159,58181,54373],{"class":165},[159,58183,54376],{"class":8765},[159,58185,189],{"class":1142},[159,58187,4932],{"class":1146},[159,58189,24233],{"class":165},[159,58191,54385],{"class":8765},[159,58193,189],{"class":1142},[159,58195,24076],{"class":1146},[159,58197,24233],{"class":165},[159,58199,54394],{"class":8765},[159,58201,189],{"class":1142},[159,58203,5850],{"class":1146},[159,58205,24233],{"class":165},[159,58207,54449],{"class":8765},[159,58209,189],{"class":1142},[159,58211,8866],{"class":1146},[159,58213,1165],{"class":165},[159,58215,58216,58218,58220,58222,58225,58227,58229,58231,58233,58235,58237,58239],{"class":161,"line":621},[159,58217,54365],{"class":1146},[159,58219,54433],{"class":165},[159,58221,189],{"class":1142},[159,58223,58224],{"class":165},"nn.MaxPool2d(",[159,58226,54394],{"class":8765},[159,58228,189],{"class":1142},[159,58230,23949],{"class":1146},[159,58232,24233],{"class":165},[159,58234,54449],{"class":8765},[159,58236,189],{"class":1142},[159,58238,11034],{"class":1146},[159,58240,1165],{"class":165},[159,58242,58243,58245,58247,58249,58251,58253,58255,58257,58259,58261,58263,58266,58268,58270,58272,58274,58276,58278,58280,58282],{"class":161,"line":634},[159,58244,54365],{"class":1146},[159,58246,54462],{"class":165},[159,58248,189],{"class":1142},[159,58250,54373],{"class":165},[159,58252,54376],{"class":8765},[159,58254,189],{"class":1142},[159,58256,24076],{"class":1146},[159,58258,24233],{"class":165},[159,58260,54385],{"class":8765},[159,58262,189],{"class":1142},[159,58264,58265],{"class":1146},"256",[159,58267,24233],{"class":165},[159,58269,54394],{"class":8765},[159,58271,189],{"class":1142},[159,58273,1753],{"class":1146},[159,58275,24233],{"class":165},[159,58277,54403],{"class":8765},[159,58279,189],{"class":1142},[159,58281,11034],{"class":1146},[159,58283,1165],{"class":165},[159,58285,58286,58288,58290,58292,58294,58296,58298,58300,58302,58304,58306,58308],{"class":161,"line":640},[159,58287,54365],{"class":1146},[159,58289,54497],{"class":165},[159,58291,189],{"class":1142},[159,58293,58224],{"class":165},[159,58295,54394],{"class":8765},[159,58297,189],{"class":1142},[159,58299,23949],{"class":1146},[159,58301,24233],{"class":165},[159,58303,54449],{"class":8765},[159,58305,189],{"class":1142},[159,58307,11034],{"class":1146},[159,58309,1165],{"class":165},[159,58311,58312,58314,58317,58319,58321,58323,58325,58327,58329,58331,58333,58336,58338,58340,58342,58344,58346,58348,58350,58352],{"class":161,"line":1075},[159,58313,54365],{"class":1146},[159,58315,58316],{"class":165},".c5",[159,58318,189],{"class":1142},[159,58320,54373],{"class":165},[159,58322,54376],{"class":8765},[159,58324,189],{"class":1142},[159,58326,58265],{"class":1146},[159,58328,24233],{"class":165},[159,58330,54385],{"class":8765},[159,58332,189],{"class":1142},[159,58334,58335],{"class":1146},"384",[159,58337,24233],{"class":165},[159,58339,54394],{"class":8765},[159,58341,189],{"class":1142},[159,58343,23949],{"class":1146},[159,58345,24233],{"class":165},[159,58347,54403],{"class":8765},[159,58349,189],{"class":1142},[159,58351,4932],{"class":1146},[159,58353,1165],{"class":165},[159,58355,58356,58358,58361,58363,58365,58367,58369,58371,58373,58375,58377,58379,58381,58383,58385,58387,58389,58391,58393,58395],{"class":161,"line":1081},[159,58357,54365],{"class":1146},[159,58359,58360],{"class":165},".c6",[159,58362,189],{"class":1142},[159,58364,54373],{"class":165},[159,58366,54376],{"class":8765},[159,58368,189],{"class":1142},[159,58370,58335],{"class":1146},[159,58372,24233],{"class":165},[159,58374,54385],{"class":8765},[159,58376,189],{"class":1142},[159,58378,58335],{"class":1146},[159,58380,24233],{"class":165},[159,58382,54394],{"class":8765},[159,58384,189],{"class":1142},[159,58386,23949],{"class":1146},[159,58388,24233],{"class":165},[159,58390,54403],{"class":8765},[159,58392,189],{"class":1142},[159,58394,4932],{"class":1146},[159,58396,1165],{"class":165},[159,58398,58399,58401,58404,58406,58408,58410,58412,58414,58416,58418,58420,58422,58424,58426,58428,58430,58432,58434,58436,58438],{"class":161,"line":1091},[159,58400,54365],{"class":1146},[159,58402,58403],{"class":165},".c7",[159,58405,189],{"class":1142},[159,58407,54373],{"class":165},[159,58409,54376],{"class":8765},[159,58411,189],{"class":1142},[159,58413,58335],{"class":1146},[159,58415,24233],{"class":165},[159,58417,54385],{"class":8765},[159,58419,189],{"class":1142},[159,58421,58265],{"class":1146},[159,58423,24233],{"class":165},[159,58425,54394],{"class":8765},[159,58427,189],{"class":1142},[159,58429,23949],{"class":1146},[159,58431,24233],{"class":165},[159,58433,54403],{"class":8765},[159,58435,189],{"class":1142},[159,58437,4932],{"class":1146},[159,58439,1165],{"class":165},[159,58441,58442,58444,58447,58449,58451,58453,58455,58457,58459,58461,58463,58465],{"class":161,"line":1100},[159,58443,54365],{"class":1146},[159,58445,58446],{"class":165},".s8",[159,58448,189],{"class":1142},[159,58450,58224],{"class":165},[159,58452,54394],{"class":8765},[159,58454,189],{"class":1142},[159,58456,23949],{"class":1146},[159,58458,24233],{"class":165},[159,58460,54449],{"class":8765},[159,58462,189],{"class":1142},[159,58464,11034],{"class":1146},[159,58466,1165],{"class":165},[159,58468,58469],{"class":161,"line":1123},[159,58470,54522],{"class":1135},[159,58472,58473,58475,58477,58479],{"class":161,"line":1132},[159,58474,54365],{"class":1146},[159,58476,54529],{"class":165},[159,58478,189],{"class":1142},[159,58480,54534],{"class":165},[159,58482,58483],{"class":161,"line":1139},[159,58484,58485],{"class":1135},"       # 定义全连接层\n",[159,58487,58488,58490,58493,58495,58497,58499,58501,58503,58505,58507,58509,58512],{"class":161,"line":1168},[159,58489,54365],{"class":1146},[159,58491,58492],{"class":165},".f1",[159,58494,189],{"class":1142},[159,58496,54551],{"class":165},[159,58498,7907],{"class":1146},[159,58500,4777],{"class":1142},[159,58502,7907],{"class":1146},[159,58504,4777],{"class":1142},[159,58506,58265],{"class":1146},[159,58508,24233],{"class":165},[159,58510,58511],{"class":1146},"4096",[159,58513,1165],{"class":165},[159,58515,58516,58518,58521,58523,58525,58527,58529,58531],{"class":161,"line":1174},[159,58517,54365],{"class":1146},[159,58519,58520],{"class":165},".f2",[159,58522,189],{"class":1142},[159,58524,54551],{"class":165},[159,58526,58511],{"class":1146},[159,58528,24233],{"class":165},[159,58530,58511],{"class":1146},[159,58532,1165],{"class":165},[159,58534,58535,58537,58540,58542,58544,58546,58548,58550],{"class":161,"line":1180},[159,58536,54365],{"class":1146},[159,58538,58539],{"class":165},".f3",[159,58541,189],{"class":1142},[159,58543,54551],{"class":165},[159,58545,58511],{"class":1146},[159,58547,24233],{"class":165},[159,58549,1964],{"class":1146},[159,58551,1165],{"class":165},[159,58553,58554],{"class":161,"line":1194},[159,58555,590],{"emptyLinePlaceholder":589},[159,58557,58558],{"class":161,"line":1200},[159,58559,58560],{"class":1135},"    # 定义前向传播\n",[159,58562,58563,58565,58567],{"class":161,"line":1221},[159,58564,54322],{"class":1142},[159,58566,54613],{"class":185},[159,58568,54616],{"class":165},[159,58570,58571,58573,58575,58577,58580,58582],{"class":161,"line":1230},[159,58572,54621],{"class":165},[159,58574,189],{"class":1142},[159,58576,54344],{"class":1146},[159,58578,58579],{"class":165},".ReLu(",[159,58581,54344],{"class":1146},[159,58583,54633],{"class":165},[159,58585,58586,58588,58590,58592],{"class":161,"line":1247},[159,58587,54621],{"class":165},[159,58589,189],{"class":1142},[159,58591,54344],{"class":1146},[159,58593,54644],{"class":165},[159,58595,58596,58598,58600,58602,58604,58606],{"class":161,"line":1265},[159,58597,54621],{"class":165},[159,58599,189],{"class":1142},[159,58601,54344],{"class":1146},[159,58603,58579],{"class":165},[159,58605,54344],{"class":1146},[159,58607,54659],{"class":165},[159,58609,58610,58612,58614,58616],{"class":161,"line":1277},[159,58611,54621],{"class":165},[159,58613,189],{"class":1142},[159,58615,54344],{"class":1146},[159,58617,54670],{"class":165},[159,58619,58620,58622,58624,58626,58628,58630],{"class":161,"line":1283},[159,58621,54621],{"class":165},[159,58623,189],{"class":1142},[159,58625,54344],{"class":1146},[159,58627,58579],{"class":165},[159,58629,54344],{"class":1146},[159,58631,58632],{"class":165},".c5(x))\n",[159,58634,58635,58637,58639,58641,58643,58645],{"class":161,"line":1294},[159,58636,54621],{"class":165},[159,58638,189],{"class":1142},[159,58640,54344],{"class":1146},[159,58642,58579],{"class":165},[159,58644,54344],{"class":1146},[159,58646,58647],{"class":165},".c6(x))\n",[159,58649,58650,58652,58654,58656,58658,58660],{"class":161,"line":1305},[159,58651,54621],{"class":165},[159,58653,189],{"class":1142},[159,58655,54344],{"class":1146},[159,58657,58579],{"class":165},[159,58659,54344],{"class":1146},[159,58661,58662],{"class":165},".c7(x))\n",[159,58664,58665,58667,58669,58671],{"class":161,"line":1311},[159,58666,54621],{"class":165},[159,58668,189],{"class":1142},[159,58670,54344],{"class":1146},[159,58672,58673],{"class":165},".s8(x)\n",[159,58675,58676],{"class":161,"line":1322},[159,58677,590],{"emptyLinePlaceholder":589},[159,58679,58680],{"class":161,"line":1327},[159,58681,58682],{"class":1135},"        # 展平加线性全连接层\n",[159,58684,58685,58687,58689,58691],{"class":161,"line":1336},[159,58686,54621],{"class":165},[159,58688,189],{"class":1142},[159,58690,54344],{"class":1146},[159,58692,54681],{"class":165},[159,58694,58695,58697,58699,58701,58703,58705],{"class":161,"line":1345},[159,58696,54621],{"class":165},[159,58698,189],{"class":1142},[159,58700,54344],{"class":1146},[159,58702,58579],{"class":165},[159,58704,54344],{"class":1146},[159,58706,58707],{"class":165},".f1(x))\n",[159,58709,58710],{"class":161,"line":1350},[159,58711,58712],{"class":1135},"        # 还需要dropout对神经元随机进行失活\n",[159,58714,58715,58717,58719,58722,58725],{"class":161,"line":1764},[159,58716,54621],{"class":165},[159,58718,189],{"class":1142},[159,58720,58721],{"class":165},"F.dropout(x,",[159,58723,58724],{"class":1146},"0.5",[159,58726,1165],{"class":165},[159,58728,58729,58731,58733,58735,58737,58739],{"class":161,"line":1769},[159,58730,54621],{"class":165},[159,58732,189],{"class":1142},[159,58734,54344],{"class":1146},[159,58736,58579],{"class":165},[159,58738,54344],{"class":1146},[159,58740,58741],{"class":165},".f2(x))\n",[159,58743,58744,58746,58748,58750,58752],{"class":161,"line":1777},[159,58745,54621],{"class":165},[159,58747,189],{"class":1142},[159,58749,58721],{"class":165},[159,58751,58724],{"class":1146},[159,58753,1165],{"class":165},[159,58755,58756],{"class":161,"line":1788},[159,58757,58758],{"class":1135},"        # 直接输出\n",[159,58760,58761,58763,58765,58767],{"class":161,"line":1802},[159,58762,54621],{"class":165},[159,58764,189],{"class":1142},[159,58766,54344],{"class":1146},[159,58768,58769],{"class":165},".f3(x)\n",[159,58771,58772],{"class":161,"line":1815},[159,58773,58774],{"class":1135},"        # 前向传播输出\n",[159,58776,58777,58779],{"class":161,"line":1828},[159,58778,21176],{"class":1142},[159,58780,54729],{"class":165},[159,58782,58783],{"class":161,"line":1841},[159,58784,58785],{"class":1135},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[159,58787,58788,58790,58792,58794,58796],{"class":161,"line":1852},[159,58789,18445],{"class":1142},[159,58791,54740],{"class":1146},[159,58793,26581],{"class":1142},[159,58795,54745],{"class":192},[159,58797,27364],{"class":165},[159,58799,58800,58802,58804,58806,58808,58810,58812,58814,58816],{"class":161,"line":1866},[159,58801,54757],{"class":165},[159,58803,189],{"class":1142},[159,58805,53973],{"class":165},[159,58807,54764],{"class":192},[159,58809,25367],{"class":1142},[159,58811,54769],{"class":165},[159,58813,25364],{"class":1142},[159,58815,53998],{"class":192},[159,58817,1165],{"class":165},[159,58819,58820],{"class":161,"line":1879},[159,58821,58822],{"class":1135},"    # 模型实例化，然后将实例化的模型放到设备中\n",[159,58824,58825,58827,58829],{"class":161,"line":1884},[159,58826,54809],{"class":165},[159,58828,189],{"class":1142},[159,58830,58831],{"class":165},"AlexNet().to(device)\n",[159,58833,58834,58836,58838,58840,58842,58845,58847,58849],{"class":161,"line":1889},[159,58835,54819],{"class":1146},[159,58837,54822],{"class":165},[159,58839,4932],{"class":1146},[159,58841,24233],{"class":165},[159,58843,58844],{"class":1146},"227",[159,58846,24233],{"class":165},[159,58848,58844],{"class":1146},[159,58850,54835],{"class":165},[134,58852,58853],{"start":176},[106,58854,54848],{},[151,58856,58858],{"className":53900,"code":58857,"language":53902,"meta":25,"style":25},"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",[49,58859,58860,58866,58872,58882,58888,58898,58908,58918,58928,58938,58942,58953,58963,58967,58971,58975,58983,58995,59005,59021,59031,59063,59077,59087,59097,59101,59111,59125,59135,59145,59155,59161,59165,59169,59173,59177,59181,59189,59209,59213,59217,59221,59225,59229,59245,59249,59253,59261,59265,59269,59277,59281,59285,59289,59297,59301,59305,59309,59313,59321,59325,59333,59337,59345,59349,59357,59361,59369,59373,59377,59385,59389,59393,59397,59409,59433,59447,59451,59455,59459,59467,59471,59479,59483,59491,59495,59503,59507,59515,59519,59527,59531,59543,59547,59555,59559,59567,59571,59575,59579,59583,59591,59595,59611,59615,59623,59627,59631,59635,59639,59643,59647,59651,59667,59671,59683,59687,59699,59703,59715,59719,59727,59731,59739,59743,59747,59752,59758,59762,59771,59775,59792,59796,59805,59809,59827,59840,59845,59858,59862,59866,59874,59878,59882,59890,59894,59902,59906,59914,59918,59922,59964,60006,60010,60014,60030,60034,60050,60054,60058,60066,60070,60074,60086,60124,60129,60134,60143,60147,60161,60171,60177,60183,60189,60195,60199,60203,60209,60213,60217,60225,60229,60247,60251,60255,60259,60275,60279,60283,60287,60291,60295,60315,60335,60339,60343,60347,60355,60363,60367,60383,60403,60423,60427,60431,60439,60447,60451,60455,60459,60471,60475,60485,60493,60510],{"__ignoreMap":25},[159,58861,58862,58864],{"class":161,"line":162},[159,58863,53914],{"class":1142},[159,58865,55340],{"class":165},[159,58867,58868,58870],{"class":161,"line":176},[159,58869,53914],{"class":1142},[159,58871,55347],{"class":165},[159,58873,58874,58876,58878,58880],{"class":161,"line":203},[159,58875,53914],{"class":1142},[159,58877,55358],{"class":165},[159,58879,54903],{"class":1142},[159,58881,55363],{"class":165},[159,58883,58884,58886],{"class":161,"line":223},[159,58885,53914],{"class":1142},[159,58887,53917],{"class":165},[159,58889,58890,58892,58894,58896],{"class":161,"line":233},[159,58891,54258],{"class":1142},[159,58893,54935],{"class":165},[159,58895,53914],{"class":1142},[159,58897,55380],{"class":165},[159,58899,58900,58902,58904,58906],{"class":161,"line":239},[159,58901,54258],{"class":1142},[159,58903,54888],{"class":165},[159,58905,53914],{"class":1142},[159,58907,54893],{"class":165},[159,58909,58910,58912,58914,58916],{"class":161,"line":245},[159,58911,54258],{"class":1142},[159,58913,54918],{"class":165},[159,58915,53914],{"class":1142},[159,58917,54923],{"class":165},[159,58919,58920,58922,58924,58926],{"class":161,"line":251},[159,58921,53914],{"class":1142},[159,58923,54935],{"class":165},[159,58925,54903],{"class":1142},[159,58927,54940],{"class":165},[159,58929,58930,58932,58934,58936],{"class":161,"line":261},[159,58931,53914],{"class":1142},[159,58933,54952],{"class":165},[159,58935,54903],{"class":1142},[159,58937,54957],{"class":165},[159,58939,58940],{"class":161,"line":603},[159,58941,55425],{"class":1135},[159,58943,58944,58946,58948,58950],{"class":161,"line":621},[159,58945,54258],{"class":1142},[159,58947,55432],{"class":165},[159,58949,53914],{"class":1142},[159,58951,58952],{"class":165}," AlexNet\n",[159,58954,58955,58957,58959,58961],{"class":161,"line":634},[159,58956,54258],{"class":1142},[159,58958,54261],{"class":165},[159,58960,53914],{"class":1142},[159,58962,54266],{"class":165},[159,58964,58965],{"class":161,"line":640},[159,58966,590],{"emptyLinePlaceholder":589},[159,58968,58969],{"class":161,"line":1075},[159,58970,590],{"emptyLinePlaceholder":589},[159,58972,58973],{"class":161,"line":1081},[159,58974,55460],{"class":1135},[159,58976,58977,58979,58981],{"class":161,"line":1091},[159,58978,55465],{"class":1142},[159,58980,55468],{"class":185},[159,58982,55471],{"class":165},[159,58984,58985,58987,58989,58991,58993],{"class":161,"line":1100},[159,58986,55476],{"class":165},[159,58988,189],{"class":1142},[159,58990,54975],{"class":165},[159,58992,54983],{"class":192},[159,58994,17070],{"class":165},[159,58996,58997,58999,59001,59003],{"class":161,"line":1123},[159,58998,55489],{"class":8765},[159,59000,189],{"class":1142},[159,59002,54995],{"class":1146},[159,59004,17070],{"class":165},[159,59006,59007,59009,59011,59013,59015,59017,59019],{"class":161,"line":1132},[159,59008,55500],{"class":8765},[159,59010,189],{"class":1142},[159,59012,55012],{"class":165},[159,59014,55015],{"class":8765},[159,59016,189],{"class":1142},[159,59018,58844],{"class":1146},[159,59020,55023],{"class":165},[159,59022,59023,59025,59027,59029],{"class":161,"line":1139},[159,59024,55517],{"class":8765},[159,59026,189],{"class":1142},[159,59028,54995],{"class":1146},[159,59030,1165],{"class":165},[159,59032,59033,59035,59037,59039,59041,59043,59045,59047,59049,59051,59053,59055,59057,59059,59061],{"class":161,"line":1168},[159,59034,55528],{"class":165},[159,59036,189],{"class":1142},[159,59038,55533],{"class":165},[159,59040,55536],{"class":1146},[159,59042,1159],{"class":165},[159,59044,55541],{"class":1146},[159,59046,4777],{"class":1142},[159,59048,30969],{"class":1146},[159,59050,55548],{"class":165},[159,59052,55536],{"class":1146},[159,59054,1159],{"class":165},[159,59056,55555],{"class":1146},[159,59058,4777],{"class":1142},[159,59060,30969],{"class":1146},[159,59062,55562],{"class":165},[159,59064,59065,59067,59069,59071,59073,59075],{"class":161,"line":1174},[159,59066,55567],{"class":165},[159,59068,189],{"class":1142},[159,59070,55572],{"class":165},[159,59072,55056],{"class":8765},[159,59074,189],{"class":1142},[159,59076,55061],{"class":165},[159,59078,59079,59081,59083,59085],{"class":161,"line":1180},[159,59080,55583],{"class":8765},[159,59082,189],{"class":1142},[159,59084,55588],{"class":1146},[159,59086,17070],{"class":165},[159,59088,59089,59091,59093,59095],{"class":161,"line":1194},[159,59090,55595],{"class":8765},[159,59092,189],{"class":1142},[159,59094,54995],{"class":1146},[159,59096,17070],{"class":165},[159,59098,59099],{"class":161,"line":1200},[159,59100,55606],{"class":1135},[159,59102,59103,59105,59107,59109],{"class":161,"line":1221},[159,59104,55611],{"class":8765},[159,59106,189],{"class":1142},[159,59108,24250],{"class":1146},[159,59110,1165],{"class":165},[159,59112,59113,59115,59117,59119,59121,59123],{"class":161,"line":1230},[159,59114,55622],{"class":165},[159,59116,189],{"class":1142},[159,59118,55053],{"class":165},[159,59120,55056],{"class":8765},[159,59122,189],{"class":1142},[159,59124,55633],{"class":165},[159,59126,59127,59129,59131,59133],{"class":161,"line":1247},[159,59128,55638],{"class":8765},[159,59130,189],{"class":1142},[159,59132,55588],{"class":1146},[159,59134,17070],{"class":165},[159,59136,59137,59139,59141,59143],{"class":161,"line":1265},[159,59138,55649],{"class":8765},[159,59140,189],{"class":1142},[159,59142,54995],{"class":1146},[159,59144,17070],{"class":165},[159,59146,59147,59149,59151,59153],{"class":161,"line":1277},[159,59148,55660],{"class":8765},[159,59150,189],{"class":1142},[159,59152,24250],{"class":1146},[159,59154,1165],{"class":165},[159,59156,59157,59159],{"class":161,"line":1283},[159,59158,27711],{"class":1142},[159,59160,55673],{"class":165},[159,59162,59163],{"class":161,"line":1294},[159,59164,590],{"emptyLinePlaceholder":589},[159,59166,59167],{"class":161,"line":1305},[159,59168,55682],{"class":1135},[159,59170,59171],{"class":161,"line":1311},[159,59172,55687],{"class":1135},[159,59174,59175],{"class":161,"line":1322},[159,59176,590],{"emptyLinePlaceholder":589},[159,59178,59179],{"class":161,"line":1327},[159,59180,55696],{"class":1135},[159,59182,59183,59185,59187],{"class":161,"line":1336},[159,59184,55465],{"class":1142},[159,59186,55703],{"class":185},[159,59188,55706],{"class":165},[159,59190,59191,59193,59195,59197,59199,59201,59203,59205,59207],{"class":161,"line":1345},[159,59192,54757],{"class":165},[159,59194,189],{"class":1142},[159,59196,53973],{"class":165},[159,59198,54764],{"class":192},[159,59200,25367],{"class":1142},[159,59202,54769],{"class":165},[159,59204,25364],{"class":1142},[159,59206,55725],{"class":192},[159,59208,1165],{"class":165},[159,59210,59211],{"class":161,"line":1350},[159,59212,590],{"emptyLinePlaceholder":589},[159,59214,59215],{"class":161,"line":1764},[159,59216,590],{"emptyLinePlaceholder":589},[159,59218,59219],{"class":161,"line":1769},[159,59220,55740],{"class":1135},[159,59222,59223],{"class":161,"line":1777},[159,59224,55745],{"class":1135},[159,59226,59227],{"class":161,"line":1788},[159,59228,55750],{"class":1135},[159,59230,59231,59233,59235,59237,59239,59241,59243],{"class":161,"line":1802},[159,59232,55755],{"class":165},[159,59234,189],{"class":1142},[159,59236,55760],{"class":165},[159,59238,55763],{"class":8765},[159,59240,189],{"class":1142},[159,59242,55768],{"class":1146},[159,59244,1165],{"class":165},[159,59246,59247],{"class":161,"line":1815},[159,59248,590],{"emptyLinePlaceholder":589},[159,59250,59251],{"class":161,"line":1828},[159,59252,55779],{"class":1135},[159,59254,59255,59257,59259],{"class":161,"line":1841},[159,59256,55784],{"class":165},[159,59258,189],{"class":1142},[159,59260,55789],{"class":165},[159,59262,59263],{"class":161,"line":1852},[159,59264,590],{"emptyLinePlaceholder":589},[159,59266,59267],{"class":161,"line":1866},[159,59268,55798],{"class":1135},[159,59270,59271,59273,59275],{"class":161,"line":1879},[159,59272,54809],{"class":165},[159,59274,189],{"class":1142},[159,59276,55807],{"class":165},[159,59278,59279],{"class":161,"line":1884},[159,59280,55812],{"class":1135},[159,59282,59283],{"class":161,"line":1889},[159,59284,55817],{"class":1135},[159,59286,59287],{"class":161,"line":1899},[159,59288,55822],{"class":1135},[159,59290,59291,59293,59295],{"class":161,"line":1912},[159,59292,55827],{"class":165},[159,59294,189],{"class":1142},[159,59296,55832],{"class":165},[159,59298,59299],{"class":161,"line":1925},[159,59300,590],{"emptyLinePlaceholder":589},[159,59302,59303],{"class":161,"line":1956},[159,59304,590],{"emptyLinePlaceholder":589},[159,59306,59307],{"class":161,"line":1971},[159,59308,55845],{"class":1135},[159,59310,59311],{"class":161,"line":1976},[159,59312,55850],{"class":1135},[159,59314,59315,59317,59319],{"class":161,"line":1981},[159,59316,55855],{"class":165},[159,59318,189],{"class":1142},[159,59320,55860],{"class":1146},[159,59322,59323],{"class":161,"line":1989},[159,59324,55865],{"class":1135},[159,59326,59327,59329,59331],{"class":161,"line":2001},[159,59328,55870],{"class":165},[159,59330,189],{"class":1142},[159,59332,55875],{"class":165},[159,59334,59335],{"class":161,"line":2006},[159,59336,55880],{"class":1135},[159,59338,59339,59341,59343],{"class":161,"line":2015},[159,59340,55885],{"class":165},[159,59342,189],{"class":1142},[159,59344,55875],{"class":165},[159,59346,59347],{"class":161,"line":2024},[159,59348,55894],{"class":1135},[159,59350,59351,59353,59355],{"class":161,"line":2029},[159,59352,55899],{"class":165},[159,59354,189],{"class":1142},[159,59356,55875],{"class":165},[159,59358,59359],{"class":161,"line":2038},[159,59360,55908],{"class":1135},[159,59362,59363,59365,59367],{"class":161,"line":2053},[159,59364,55913],{"class":165},[159,59366,189],{"class":1142},[159,59368,55875],{"class":165},[159,59370,59371],{"class":161,"line":2070},[159,59372,590],{"emptyLinePlaceholder":589},[159,59374,59375],{"class":161,"line":2095},[159,59376,55926],{"class":1135},[159,59378,59379,59381,59383],{"class":161,"line":2104},[159,59380,55931],{"class":165},[159,59382,189],{"class":1142},[159,59384,55936],{"class":165},[159,59386,59387],{"class":161,"line":2120},[159,59388,590],{"emptyLinePlaceholder":589},[159,59390,59391],{"class":161,"line":2134},[159,59392,590],{"emptyLinePlaceholder":589},[159,59394,59395],{"class":161,"line":2143},[159,59396,55949],{"class":1135},[159,59398,59399,59401,59403,59405,59407],{"class":161,"line":2165},[159,59400,11677],{"class":1142},[159,59402,55956],{"class":165},[159,59404,49566],{"class":1142},[159,59406,55961],{"class":1146},[159,59408,55964],{"class":165},[159,59410,59411,59413,59415,59417,59419,59421,59423,59425,59427,59429,59431],{"class":161,"line":2178},[159,59412,55969],{"class":1146},[159,59414,1159],{"class":165},[159,59416,55974],{"class":192},[159,59418,55977],{"class":1146},[159,59420,13083],{"class":192},[159,59422,55977],{"class":1146},[159,59424,24115],{"class":192},[159,59426,55986],{"class":165},[159,59428,24376],{"class":1142},[159,59430,4932],{"class":1146},[159,59432,18787],{"class":165},[159,59434,59435,59437,59439,59441,59443,59445],{"class":161,"line":2191},[159,59436,55969],{"class":1146},[159,59438,1159],{"class":165},[159,59440,56001],{"class":192},[159,59442,4777],{"class":1142},[159,59444,1964],{"class":1146},[159,59446,1165],{"class":165},[159,59448,59449],{"class":161,"line":2204},[159,59450,590],{"emptyLinePlaceholder":589},[159,59452,59453],{"class":161,"line":2217},[159,59454,56016],{"class":1135},[159,59456,59457],{"class":161,"line":2230},[159,59458,56021],{"class":1135},[159,59460,59461,59463,59465],{"class":161,"line":2243},[159,59462,56026],{"class":165},[159,59464,189],{"class":1142},[159,59466,55860],{"class":1146},[159,59468,59469],{"class":161,"line":2256},[159,59470,56035],{"class":1135},[159,59472,59473,59475,59477],{"class":161,"line":2266},[159,59474,56040],{"class":165},[159,59476,189],{"class":1142},[159,59478,26716],{"class":1146},[159,59480,59481],{"class":161,"line":2275},[159,59482,56049],{"class":1135},[159,59484,59485,59487,59489],{"class":161,"line":2284},[159,59486,56054],{"class":165},[159,59488,189],{"class":1142},[159,59490,55860],{"class":1146},[159,59492,59493],{"class":161,"line":2293},[159,59494,56063],{"class":1135},[159,59496,59497,59499,59501],{"class":161,"line":2306},[159,59498,56068],{"class":165},[159,59500,189],{"class":1142},[159,59502,26716],{"class":1146},[159,59504,59505],{"class":161,"line":2330},[159,59506,56077],{"class":1135},[159,59508,59509,59511,59513],{"class":161,"line":2350},[159,59510,56082],{"class":165},[159,59512,189],{"class":1142},[159,59514,26716],{"class":1146},[159,59516,59517],{"class":161,"line":2370},[159,59518,56091],{"class":1135},[159,59520,59521,59523,59525],{"class":161,"line":2390},[159,59522,56096],{"class":165},[159,59524,189],{"class":1142},[159,59526,26716],{"class":1146},[159,59528,59529],{"class":161,"line":2410},[159,59530,56105],{"class":1135},[159,59532,59533,59535,59537,59539,59541],{"class":161,"line":2430},[159,59534,27032],{"class":1142},[159,59536,55120],{"class":165},[159,59538,49566],{"class":1142},[159,59540,55125],{"class":1146},[159,59542,56118],{"class":165},[159,59544,59545],{"class":161,"line":2450},[159,59546,56123],{"class":1135},[159,59548,59549,59551,59553],{"class":161,"line":2471},[159,59550,56128],{"class":165},[159,59552,189],{"class":1142},[159,59554,56133],{"class":165},[159,59556,59557],{"class":161,"line":2477},[159,59558,56138],{"class":1135},[159,59560,59561,59563,59565],{"class":161,"line":2498},[159,59562,56143],{"class":165},[159,59564,189],{"class":1142},[159,59566,56148],{"class":165},[159,59568,59569],{"class":161,"line":2518},[159,59570,56153],{"class":1135},[159,59572,59573],{"class":161,"line":2539},[159,59574,56158],{"class":165},[159,59576,59577],{"class":161,"line":2561},[159,59578,56163],{"class":1135},[159,59580,59581],{"class":161,"line":2573},[159,59582,56168],{"class":1135},[159,59584,59585,59587,59589],{"class":161,"line":2591},[159,59586,56173],{"class":165},[159,59588,189],{"class":1142},[159,59590,56178],{"class":165},[159,59592,59593],{"class":161,"line":2602},[159,59594,56183],{"class":1135},[159,59596,59597,59599,59601,59603,59605,59607,59609],{"class":161,"line":2613},[159,59598,56188],{"class":165},[159,59600,189],{"class":1142},[159,59602,56193],{"class":165},[159,59604,56196],{"class":8765},[159,59606,189],{"class":1142},[159,59608,4932],{"class":1146},[159,59610,1165],{"class":165},[159,59612,59613],{"class":161,"line":2624},[159,59614,56207],{"class":1135},[159,59616,59617,59619,59621],{"class":161,"line":2630},[159,59618,56212],{"class":165},[159,59620,189],{"class":1142},[159,59622,56217],{"class":165},[159,59624,59625],{"class":161,"line":2636},[159,59626,56222],{"class":1135},[159,59628,59629],{"class":161,"line":2642},[159,59630,56227],{"class":165},[159,59632,59633],{"class":161,"line":2648},[159,59634,56232],{"class":1135},[159,59636,59637],{"class":161,"line":2674},[159,59638,56237],{"class":165},[159,59640,59641],{"class":161,"line":2689},[159,59642,56242],{"class":1135},[159,59644,59645],{"class":161,"line":2694},[159,59646,56247],{"class":165},[159,59648,59649],{"class":161,"line":2721},[159,59650,56252],{"class":1135},[159,59652,59653,59655,59657,59659,59661,59663,59665],{"class":161,"line":2726},[159,59654,56257],{"class":165},[159,59656,33073],{"class":1142},[159,59658,56262],{"class":165},[159,59660,4777],{"class":1142},[159,59662,56267],{"class":165},[159,59664,1489],{"class":1146},[159,59666,1165],{"class":165},[159,59668,59669],{"class":161,"line":2735},[159,59670,56276],{"class":1135},[159,59672,59673,59675,59677,59679,59681],{"class":161,"line":2744},[159,59674,56281],{"class":165},[159,59676,33073],{"class":1142},[159,59678,56286],{"class":165},[159,59680,26581],{"class":1142},[159,59682,56291],{"class":165},[159,59684,59685],{"class":161,"line":2753},[159,59686,56296],{"class":1135},[159,59688,59689,59691,59693,59695,59697],{"class":161,"line":2758},[159,59690,56301],{"class":165},[159,59692,33073],{"class":1142},[159,59694,56267],{"class":165},[159,59696,1489],{"class":1146},[159,59698,1165],{"class":165},[159,59700,59701],{"class":161,"line":3959},[159,59702,56314],{"class":1135},[159,59704,59705,59707,59709,59711,59713],{"class":161,"line":3968},[159,59706,27032],{"class":1142},[159,59708,56321],{"class":165},[159,59710,49566],{"class":1142},[159,59712,55125],{"class":1146},[159,59714,56328],{"class":165},[159,59716,59717],{"class":161,"line":3977},[159,59718,56333],{"class":1135},[159,59720,59721,59723,59725],{"class":161,"line":3982},[159,59722,56128],{"class":165},[159,59724,189],{"class":1142},[159,59726,56133],{"class":165},[159,59728,59729],{"class":161,"line":6843},[159,59730,56346],{"class":1135},[159,59732,59733,59735,59737],{"class":161,"line":6849},[159,59734,56143],{"class":165},[159,59736,189],{"class":1142},[159,59738,56148],{"class":165},[159,59740,59741],{"class":161,"line":6855},[159,59742,56359],{"class":1135},[159,59744,59745],{"class":161,"line":6861},[159,59746,56364],{"class":165},[159,59748,59749],{"class":161,"line":6867},[159,59750,59751],{"class":1135},"            # 验证时不计算梯度以节省内存\u002F计算\n",[159,59753,59754,59756],{"class":161,"line":6873},[159,59755,56369],{"class":1142},[159,59757,56372],{"class":165},[159,59759,59760],{"class":161,"line":6879},[159,59761,56377],{"class":1135},[159,59763,59764,59767,59769],{"class":161,"line":6885},[159,59765,59766],{"class":165},"                output",[159,59768,189],{"class":1142},[159,59770,56178],{"class":165},[159,59772,59773],{"class":161,"line":6890},[159,59774,56392],{"class":1135},[159,59776,59777,59780,59782,59784,59786,59788,59790],{"class":161,"line":6896},[159,59778,59779],{"class":165},"                pre_lab",[159,59781,189],{"class":1142},[159,59783,56193],{"class":165},[159,59785,56196],{"class":8765},[159,59787,189],{"class":1142},[159,59789,4932],{"class":1146},[159,59791,1165],{"class":165},[159,59793,59794],{"class":161,"line":6902},[159,59795,56415],{"class":1135},[159,59797,59798,59801,59803],{"class":161,"line":6908},[159,59799,59800],{"class":165},"                val_batch_loss",[159,59802,189],{"class":1142},[159,59804,56217],{"class":165},[159,59806,59807],{"class":161,"line":6914},[159,59808,56430],{"class":1135},[159,59810,59811,59814,59816,59819,59821,59823,59825],{"class":161,"line":6920},[159,59812,59813],{"class":165},"                val_loss",[159,59815,33073],{"class":1142},[159,59817,59818],{"class":165},"val_batch_loss.item()",[159,59820,4777],{"class":1142},[159,59822,56267],{"class":165},[159,59824,1489],{"class":1146},[159,59826,1165],{"class":165},[159,59828,59829,59832,59834,59836,59838],{"class":161,"line":6926},[159,59830,59831],{"class":165},"                val_corrects",[159,59833,33073],{"class":1142},[159,59835,56286],{"class":165},[159,59837,26581],{"class":1142},[159,59839,56291],{"class":165},[159,59841,59842],{"class":161,"line":6932},[159,59843,59844],{"class":1135},"            # 当前用于验证的样本数量\n",[159,59846,59847,59850,59852,59854,59856],{"class":161,"line":6938},[159,59848,59849],{"class":165},"            val_num",[159,59851,33073],{"class":1142},[159,59853,56267],{"class":165},[159,59855,1489],{"class":1146},[159,59857,1165],{"class":165},[159,59859,59860],{"class":161,"line":6944},[159,59861,56487],{"class":1135},[159,59863,59864],{"class":161,"line":6949},[159,59865,56492],{"class":1135},[159,59867,59868,59870,59872],{"class":161,"line":6955},[159,59869,56497],{"class":165},[159,59871,13083],{"class":1142},[159,59873,56502],{"class":165},[159,59875,59876],{"class":161,"line":6961},[159,59877,56507],{"class":1135},[159,59879,59880],{"class":161,"line":6967},[159,59881,56512],{"class":1135},[159,59883,59884,59886,59888],{"class":161,"line":6973},[159,59885,56517],{"class":165},[159,59887,13083],{"class":1142},[159,59889,56502],{"class":165},[159,59891,59892],{"class":161,"line":6979},[159,59893,56526],{"class":1135},[159,59895,59896,59898,59900],{"class":161,"line":6985},[159,59897,56531],{"class":165},[159,59899,13083],{"class":1142},[159,59901,56536],{"class":165},[159,59903,59904],{"class":161,"line":6991},[159,59905,56541],{"class":1135},[159,59907,59908,59910,59912],{"class":161,"line":6997},[159,59909,56546],{"class":165},[159,59911,13083],{"class":1142},[159,59913,56536],{"class":165},[159,59915,59916],{"class":161,"line":7003},[159,59917,590],{"emptyLinePlaceholder":589},[159,59919,59920],{"class":161,"line":7009},[159,59921,56559],{"class":1135},[159,59923,59924,59926,59928,59930,59932,59934,59936,59938,59940,59942,59944,59946,59948,59950,59952,59954,59956,59958,59960,59962],{"class":161,"line":7015},[159,59925,55969],{"class":1146},[159,59927,1159],{"class":165},[159,59929,27221],{"class":192},[159,59931,55977],{"class":1146},[159,59933,56572],{"class":192},[159,59935,24721],{"class":1146},[159,59937,56577],{"class":1142},[159,59939,886],{"class":1146},[159,59941,56582],{"class":192},[159,59943,24721],{"class":1146},[159,59945,56577],{"class":1142},[159,59947,886],{"class":1146},[159,59949,27221],{"class":192},[159,59951,56593],{"class":165},[159,59953,24376],{"class":1142},[159,59955,4932],{"class":1146},[159,59957,56600],{"class":165},[159,59959,24376],{"class":1142},[159,59961,4932],{"class":1146},[159,59963,56607],{"class":165},[159,59965,59966,59968,59970,59972,59974,59976,59978,59980,59982,59984,59986,59988,59990,59992,59994,59996,59998,60000,60002,60004],{"class":161,"line":7021},[159,59967,55969],{"class":1146},[159,59969,1159],{"class":165},[159,59971,27221],{"class":192},[159,59973,55977],{"class":1146},[159,59975,56620],{"class":192},[159,59977,24721],{"class":1146},[159,59979,56577],{"class":1142},[159,59981,886],{"class":1146},[159,59983,56629],{"class":192},[159,59985,24721],{"class":1146},[159,59987,56577],{"class":1142},[159,59989,886],{"class":1146},[159,59991,27221],{"class":192},[159,59993,56640],{"class":165},[159,59995,24376],{"class":1142},[159,59997,4932],{"class":1146},[159,59999,56647],{"class":165},[159,60001,24376],{"class":1142},[159,60003,4932],{"class":1146},[159,60005,56607],{"class":165},[159,60007,60008],{"class":161,"line":7026},[159,60009,590],{"emptyLinePlaceholder":589},[159,60011,60012],{"class":161,"line":7031},[159,60013,56662],{"class":1135},[159,60015,60016,60018,60020,60022,60024,60026,60028],{"class":161,"line":7037},[159,60017,17003],{"class":1142},[159,60019,56669],{"class":165},[159,60021,24376],{"class":1142},[159,60023,4932],{"class":1146},[159,60025,18375],{"class":165},[159,60027,6760],{"class":1142},[159,60029,56680],{"class":165},[159,60031,60032],{"class":161,"line":7043},[159,60033,56685],{"class":1135},[159,60035,60036,60038,60040,60042,60044,60046,60048],{"class":161,"line":7049},[159,60037,56690],{"class":165},[159,60039,23920],{"class":1146},[159,60041,189],{"class":1142},[159,60043,56697],{"class":165},[159,60045,24376],{"class":1142},[159,60047,4932],{"class":1146},[159,60049,4634],{"class":165},[159,60051,60052],{"class":161,"line":7054},[159,60053,56708],{"class":1135},[159,60055,60056],{"class":161,"line":7060},[159,60057,56713],{"class":1135},[159,60059,60060,60062,60064],{"class":161,"line":7066},[159,60061,56718],{"class":165},[159,60063,189],{"class":1142},[159,60065,55832],{"class":165},[159,60067,60068],{"class":161,"line":7072},[159,60069,590],{"emptyLinePlaceholder":589},[159,60071,60072],{"class":161,"line":7078},[159,60073,56731],{"class":1135},[159,60075,60076,60078,60080,60082,60084],{"class":161,"line":7084},[159,60077,56736],{"class":165},[159,60079,189],{"class":1142},[159,60081,56741],{"class":165},[159,60083,24376],{"class":1142},[159,60085,56746],{"class":165},[159,60087,60088,60090,60092,60094,60096,60098,60100,60102,60104,60106,60108,60110,60112,60114,60116,60118,60120,60122],{"class":161,"line":7089},[159,60089,55969],{"class":1146},[159,60091,1159],{"class":165},[159,60093,56755],{"class":192},[159,60095,24721],{"class":1146},[159,60097,56760],{"class":1142},[159,60099,886],{"class":1146},[159,60101,21081],{"class":192},[159,60103,24721],{"class":1146},[159,60105,56760],{"class":1142},[159,60107,886],{"class":1146},[159,60109,56773],{"class":192},[159,60111,56776],{"class":165},[159,60113,56779],{"class":1142},[159,60115,10814],{"class":1146},[159,60117,56784],{"class":165},[159,60119,1662],{"class":1142},[159,60121,10814],{"class":1146},[159,60123,18787],{"class":165},[159,60125,60126],{"class":161,"line":7095},[159,60127,60128],{"class":1135},"    # 选择最优参数并保存\n",[159,60130,60131],{"class":161,"line":7100},[159,60132,60133],{"class":1135},"    # 保存最佳模型权重字典\n",[159,60135,60136,60139,60141],{"class":161,"line":7105},[159,60137,60138],{"class":165},"    torch.save(best_model_wts,",[159,60140,56813],{"class":192},[159,60142,1165],{"class":165},[159,60144,60145],{"class":161,"line":7110},[159,60146,56830],{"class":1135},[159,60148,60149,60151,60153,60155,60157,60159],{"class":161,"line":7115},[159,60150,56835],{"class":165},[159,60152,189],{"class":1142},[159,60154,56840],{"class":165},[159,60156,56843],{"class":8765},[159,60158,189],{"class":1142},[159,60160,25222],{"class":165},[159,60162,60163,60165,60167,60169],{"class":161,"line":7120},[159,60164,56852],{"class":192},[159,60166,20934],{"class":165},[159,60168,56857],{"class":1146},[159,60170,56860],{"class":165},[159,60172,60173,60175],{"class":161,"line":7125},[159,60174,56865],{"class":192},[159,60176,56868],{"class":165},[159,60178,60179,60181],{"class":161,"line":7131},[159,60180,56873],{"class":192},[159,60182,56876],{"class":165},[159,60184,60185,60187],{"class":161,"line":7137},[159,60186,56881],{"class":192},[159,60188,56884],{"class":165},[159,60190,60191,60193],{"class":161,"line":7143},[159,60192,56889],{"class":192},[159,60194,56892],{"class":165},[159,60196,60197],{"class":161,"line":7149},[159,60198,4863],{"class":165},[159,60200,60201],{"class":161,"line":7155},[159,60202,56901],{"class":1135},[159,60204,60205,60207],{"class":161,"line":7161},[159,60206,27711],{"class":1142},[159,60208,56908],{"class":165},[159,60210,60211],{"class":161,"line":7167},[159,60212,590],{"emptyLinePlaceholder":589},[159,60214,60215],{"class":161,"line":7173},[159,60216,56917],{"class":1135},[159,60218,60219,60221,60223],{"class":161,"line":7179},[159,60220,55465],{"class":1142},[159,60222,56924],{"class":185},[159,60224,56927],{"class":165},[159,60226,60227],{"class":161,"line":7184},[159,60228,56932],{"class":1135},[159,60230,60231,60233,60235,60237,60239,60241,60243,60245],{"class":161,"line":7189},[159,60232,56937],{"class":165},[159,60234,55212],{"class":8765},[159,60236,189],{"class":1142},[159,60238,1159],{"class":165},[159,60240,7925],{"class":1146},[159,60242,24233],{"class":165},[159,60244,8866],{"class":1146},[159,60246,18787],{"class":165},[159,60248,60249],{"class":161,"line":7195},[159,60250,56956],{"class":1135},[159,60252,60253],{"class":161,"line":7201},[159,60254,56961],{"class":1135},[159,60256,60257],{"class":161,"line":7207},[159,60258,56966],{"class":1135},[159,60260,60261,60263,60265,60267,60269,60271,60273],{"class":161,"line":7213},[159,60262,55246],{"class":165},[159,60264,4932],{"class":1146},[159,60266,24233],{"class":165},[159,60268,11034],{"class":1146},[159,60270,24233],{"class":165},[159,60272,4932],{"class":1146},[159,60274,1165],{"class":165},[159,60276,60277],{"class":161,"line":7219},[159,60278,56987],{"class":1135},[159,60280,60281],{"class":161,"line":7224},[159,60282,56992],{"class":1135},[159,60284,60285],{"class":161,"line":7230},[159,60286,56997],{"class":1135},[159,60288,60289],{"class":161,"line":7236},[159,60290,57002],{"class":1135},[159,60292,60293],{"class":161,"line":7242},[159,60294,57007],{"class":1135},[159,60296,60297,60299,60301,60303,60305,60307,60309,60311,60313],{"class":161,"line":7248},[159,60298,57012],{"class":165},[159,60300,57015],{"class":192},[159,60302,57018],{"class":165},[159,60304,57021],{"class":192},[159,60306,24233],{"class":165},[159,60308,57026],{"class":8765},[159,60310,189],{"class":1142},[159,60312,57031],{"class":192},[159,60314,1165],{"class":165},[159,60316,60317,60319,60321,60323,60325,60327,60329,60331,60333],{"class":161,"line":7254},[159,60318,57012],{"class":165},[159,60320,57015],{"class":192},[159,60322,57042],{"class":165},[159,60324,57045],{"class":192},[159,60326,24233],{"class":165},[159,60328,57026],{"class":8765},[159,60330,189],{"class":1142},[159,60332,57054],{"class":192},[159,60334,1165],{"class":165},[159,60336,60337],{"class":161,"line":7260},[159,60338,57061],{"class":1135},[159,60340,60341],{"class":161,"line":7265},[159,60342,57066],{"class":165},[159,60344,60345],{"class":161,"line":7270},[159,60346,57071],{"class":1135},[159,60348,60349,60351,60353],{"class":161,"line":7276},[159,60350,57076],{"class":165},[159,60352,57079],{"class":192},[159,60354,1165],{"class":165},[159,60356,60357,60359,60361],{"class":161,"line":7281},[159,60358,57086],{"class":165},[159,60360,57089],{"class":192},[159,60362,1165],{"class":165},[159,60364,60365],{"class":161,"line":7287},[159,60366,57096],{"class":1135},[159,60368,60369,60371,60373,60375,60377,60379,60381],{"class":161,"line":7292},[159,60370,55246],{"class":165},[159,60372,4932],{"class":1146},[159,60374,24233],{"class":165},[159,60376,11034],{"class":1146},[159,60378,24233],{"class":165},[159,60380,11034],{"class":1146},[159,60382,1165],{"class":165},[159,60384,60385,60387,60389,60391,60393,60395,60397,60399,60401],{"class":161,"line":7298},[159,60386,57012],{"class":165},[159,60388,57015],{"class":192},[159,60390,57121],{"class":165},[159,60392,57021],{"class":192},[159,60394,24233],{"class":165},[159,60396,57026],{"class":8765},[159,60398,189],{"class":1142},[159,60400,57132],{"class":192},[159,60402,1165],{"class":165},[159,60404,60405,60407,60409,60411,60413,60415,60417,60419,60421],{"class":161,"line":7304},[159,60406,57012],{"class":165},[159,60408,57015],{"class":192},[159,60410,57143],{"class":165},[159,60412,57045],{"class":192},[159,60414,24233],{"class":165},[159,60416,57026],{"class":8765},[159,60418,189],{"class":1142},[159,60420,57154],{"class":192},[159,60422,1165],{"class":165},[159,60424,60425],{"class":161,"line":7310},[159,60426,57161],{"class":1135},[159,60428,60429],{"class":161,"line":7316},[159,60430,57066],{"class":165},[159,60432,60433,60435,60437],{"class":161,"line":7322},[159,60434,57076],{"class":165},[159,60436,57015],{"class":192},[159,60438,1165],{"class":165},[159,60440,60441,60443,60445],{"class":161,"line":7328},[159,60442,57086],{"class":165},[159,60444,57180],{"class":192},[159,60446,1165],{"class":165},[159,60448,60449],{"class":161,"line":7333},[159,60450,57187],{"class":165},[159,60452,60453],{"class":161,"line":7342},[159,60454,590],{"emptyLinePlaceholder":589},[159,60456,60457],{"class":161,"line":7351},[159,60458,57196],{"class":1135},[159,60460,60461,60463,60465,60467,60469],{"class":161,"line":7356},[159,60462,18445],{"class":1142},[159,60464,54740],{"class":1146},[159,60466,26581],{"class":1142},[159,60468,54745],{"class":192},[159,60470,27364],{"class":165},[159,60472,60473],{"class":161,"line":21272},[159,60474,57213],{"class":1135},[159,60476,60477,60480,60482],{"class":161,"line":21277},[159,60478,60479],{"class":165},"    AlexNet",[159,60481,189],{"class":1142},[159,60483,60484],{"class":165},"AlexNet()\n",[159,60486,60487,60489,60491],{"class":161,"line":21288},[159,60488,57228],{"class":165},[159,60490,189],{"class":1142},[159,60492,57233],{"class":165},[159,60494,60495,60497,60499,60502,60504,60506,60508],{"class":161,"line":21293},[159,60496,56835],{"class":165},[159,60498,189],{"class":1142},[159,60500,60501],{"class":165},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[159,60503,57245],{"class":8765},[159,60505,189],{"class":1142},[159,60507,1739],{"class":1146},[159,60509,1165],{"class":165},[159,60511,60512],{"class":161,"line":21299},[159,60513,57256],{"class":165},[134,60515,60516],{"start":203},[106,60517,57269],{},[151,60519,60521],{"className":53900,"code":60520,"language":53902,"meta":25,"style":25},"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",[49,60522,60523,60529,60539,60549,60559,60563,60573,60583,60594,60598,60602,60606,60614,60630,60640,60656,60666,60680,60684,60694,60704,60714,60720,60724,60728,60736,60740,60756,60764,60768,60772,60780,60788,60792,60796,60800,60804,60810,60814,60824,60832,60840,60844,60848,60852,60860,60864,60880,60884,60888,60892,60904,60908,60920,60924,60928,60940,60944,60954,60958,60962,60974,60978,60986,60990,60994,61002,61006,61014,61018,61022,61026,61030,61034,61050,61058,61062,61066,61114,61120,61124,61134,61142,61150,61154,61158,61162,61166,61174,61178,61194,61198,61206,61214],{"__ignoreMap":25},[159,60524,60525,60527],{"class":161,"line":162},[159,60526,53914],{"class":1142},[159,60528,53917],{"class":165},[159,60530,60531,60533,60535,60537],{"class":161,"line":176},[159,60532,53914],{"class":1142},[159,60534,54935],{"class":165},[159,60536,54903],{"class":1142},[159,60538,54940],{"class":165},[159,60540,60541,60543,60545,60547],{"class":161,"line":203},[159,60542,54258],{"class":1142},[159,60544,57297],{"class":165},[159,60546,53914],{"class":1142},[159,60548,57302],{"class":165},[159,60550,60551,60553,60555,60557],{"class":161,"line":223},[159,60552,54258],{"class":1142},[159,60554,54918],{"class":165},[159,60556,53914],{"class":1142},[159,60558,54923],{"class":165},[159,60560,60561],{"class":161,"line":233},[159,60562,57317],{"class":1135},[159,60564,60565,60567,60569,60571],{"class":161,"line":239},[159,60566,54258],{"class":1142},[159,60568,54888],{"class":165},[159,60570,53914],{"class":1142},[159,60572,54893],{"class":165},[159,60574,60575,60577,60579,60581],{"class":161,"line":245},[159,60576,54258],{"class":1142},[159,60578,55432],{"class":165},[159,60580,53914],{"class":1142},[159,60582,58952],{"class":165},[159,60584,60585,60587,60590,60592],{"class":161,"line":251},[159,60586,54258],{"class":1142},[159,60588,60589],{"class":165}," 练习.AlexNet.model ",[159,60591,53914],{"class":1142},[159,60593,58952],{"class":165},[159,60595,60596],{"class":161,"line":261},[159,60597,590],{"emptyLinePlaceholder":589},[159,60599,60600],{"class":161,"line":603},[159,60601,590],{"emptyLinePlaceholder":589},[159,60603,60604],{"class":161,"line":621},[159,60605,57346],{"class":1135},[159,60607,60608,60610,60612],{"class":161,"line":634},[159,60609,55465],{"class":1142},[159,60611,57353],{"class":185},[159,60613,55471],{"class":165},[159,60615,60616,60618,60620,60622,60624,60626,60628],{"class":161,"line":640},[159,60617,57360],{"class":165},[159,60619,189],{"class":1142},[159,60621,54975],{"class":165},[159,60623,54978],{"class":8765},[159,60625,189],{"class":1142},[159,60627,54983],{"class":192},[159,60629,17070],{"class":165},[159,60631,60632,60634,60636,60638],{"class":161,"line":1075},[159,60633,57377],{"class":8765},[159,60635,189],{"class":1142},[159,60637,57382],{"class":1146},[159,60639,17070],{"class":165},[159,60641,60642,60644,60646,60648,60650,60652,60654],{"class":161,"line":1081},[159,60643,57389],{"class":8765},[159,60645,189],{"class":1142},[159,60647,55012],{"class":165},[159,60649,55015],{"class":8765},[159,60651,189],{"class":1142},[159,60653,58844],{"class":1146},[159,60655,55023],{"class":165},[159,60657,60658,60660,60662,60664],{"class":161,"line":1091},[159,60659,57406],{"class":8765},[159,60661,189],{"class":1142},[159,60663,54995],{"class":1146},[159,60665,1165],{"class":165},[159,60667,60668,60670,60672,60674,60676,60678],{"class":161,"line":1100},[159,60669,57417],{"class":165},[159,60671,189],{"class":1142},[159,60673,55053],{"class":165},[159,60675,55056],{"class":8765},[159,60677,189],{"class":1142},[159,60679,57428],{"class":165},[159,60681,60682],{"class":161,"line":1123},[159,60683,57433],{"class":1135},[159,60685,60686,60688,60690,60692],{"class":161,"line":1132},[159,60687,57438],{"class":8765},[159,60689,189],{"class":1142},[159,60691,4932],{"class":1146},[159,60693,17070],{"class":165},[159,60695,60696,60698,60700,60702],{"class":161,"line":1139},[159,60697,57449],{"class":8765},[159,60699,189],{"class":1142},[159,60701,54995],{"class":1146},[159,60703,17070],{"class":165},[159,60705,60706,60708,60710,60712],{"class":161,"line":1168},[159,60707,57460],{"class":8765},[159,60709,189],{"class":1142},[159,60711,1489],{"class":1146},[159,60713,1165],{"class":165},[159,60715,60716,60718],{"class":161,"line":1174},[159,60717,27711],{"class":1142},[159,60719,57473],{"class":165},[159,60721,60722],{"class":161,"line":1180},[159,60723,590],{"emptyLinePlaceholder":589},[159,60725,60726],{"class":161,"line":1194},[159,60727,57482],{"class":1135},[159,60729,60730,60732,60734],{"class":161,"line":1200},[159,60731,55465],{"class":1142},[159,60733,57489],{"class":185},[159,60735,57492],{"class":165},[159,60737,60738],{"class":161,"line":1221},[159,60739,57497],{"class":1135},[159,60741,60742,60744,60746,60748,60750,60752,60754],{"class":161,"line":1230},[159,60743,54757],{"class":165},[159,60745,189],{"class":1142},[159,60747,54764],{"class":192},[159,60749,25367],{"class":1142},[159,60751,54769],{"class":165},[159,60753,25364],{"class":1142},[159,60755,57514],{"class":192},[159,60757,60758,60760,60762],{"class":161,"line":1247},[159,60759,54809],{"class":165},[159,60761,189],{"class":1142},[159,60763,55807],{"class":165},[159,60765,60766],{"class":161,"line":1265},[159,60767,590],{"emptyLinePlaceholder":589},[159,60769,60770],{"class":161,"line":1277},[159,60771,57531],{"class":1135},[159,60773,60774,60776,60778],{"class":161,"line":1283},[159,60775,57536],{"class":165},[159,60777,189],{"class":1142},[159,60779,55860],{"class":1146},[159,60781,60782,60784,60786],{"class":161,"line":1294},[159,60783,57545],{"class":165},[159,60785,189],{"class":1142},[159,60787,26716],{"class":1146},[159,60789,60790],{"class":161,"line":1305},[159,60791,590],{"emptyLinePlaceholder":589},[159,60793,60794],{"class":161,"line":1311},[159,60795,57558],{"class":1135},[159,60797,60798],{"class":161,"line":1322},[159,60799,57563],{"class":1135},[159,60801,60802],{"class":161,"line":1327},[159,60803,57568],{"class":1135},[159,60805,60806,60808],{"class":161,"line":1336},[159,60807,57573],{"class":1142},[159,60809,56372],{"class":165},[159,60811,60812],{"class":161,"line":1345},[159,60813,57580],{"class":1135},[159,60815,60816,60818,60820,60822],{"class":161,"line":1350},[159,60817,27032],{"class":1142},[159,60819,57587],{"class":165},[159,60821,49566],{"class":1142},[159,60823,57592],{"class":165},[159,60825,60826,60828,60830],{"class":161,"line":1764},[159,60827,57597],{"class":165},[159,60829,189],{"class":1142},[159,60831,57602],{"class":165},[159,60833,60834,60836,60838],{"class":161,"line":1769},[159,60835,57607],{"class":165},[159,60837,189],{"class":1142},[159,60839,57612],{"class":165},[159,60841,60842],{"class":161,"line":1777},[159,60843,57617],{"class":1135},[159,60845,60846],{"class":161,"line":1788},[159,60847,56364],{"class":165},[159,60849,60850],{"class":161,"line":1802},[159,60851,57626],{"class":1135},[159,60853,60854,60856,60858],{"class":161,"line":1815},[159,60855,56173],{"class":165},[159,60857,189],{"class":1142},[159,60859,57635],{"class":165},[159,60861,60862],{"class":161,"line":1828},[159,60863,57640],{"class":1135},[159,60865,60866,60868,60870,60872,60874,60876,60878],{"class":161,"line":1841},[159,60867,56188],{"class":165},[159,60869,189],{"class":1142},[159,60871,56193],{"class":165},[159,60873,56196],{"class":8765},[159,60875,189],{"class":1142},[159,60877,4932],{"class":1146},[159,60879,1165],{"class":165},[159,60881,60882],{"class":161,"line":1852},[159,60883,57661],{"class":1135},[159,60885,60886],{"class":161,"line":1866},[159,60887,57666],{"class":1135},[159,60889,60890],{"class":161,"line":1879},[159,60891,57671],{"class":1135},[159,60893,60894,60896,60898,60900,60902],{"class":161,"line":1884},[159,60895,57676],{"class":165},[159,60897,33073],{"class":1142},[159,60899,56286],{"class":165},[159,60901,26581],{"class":1142},[159,60903,57685],{"class":165},[159,60905,60906],{"class":161,"line":1889},[159,60907,57690],{"class":1135},[159,60909,60910,60912,60914,60916,60918],{"class":161,"line":1899},[159,60911,57695],{"class":165},[159,60913,33073],{"class":1142},[159,60915,57700],{"class":165},[159,60917,1489],{"class":1146},[159,60919,1165],{"class":165},[159,60921,60922],{"class":161,"line":1912},[159,60923,590],{"emptyLinePlaceholder":589},[159,60925,60926],{"class":161,"line":1925},[159,60927,57713],{"class":1135},[159,60929,60930,60932,60934,60936,60938],{"class":161,"line":1956},[159,60931,57718],{"class":165},[159,60933,189],{"class":1142},[159,60935,57723],{"class":165},[159,60937,13083],{"class":1142},[159,60939,57728],{"class":165},[159,60941,60942],{"class":161,"line":1971},[159,60943,57733],{"class":1135},[159,60945,60946,60948,60950,60952],{"class":161,"line":1976},[159,60947,55969],{"class":1146},[159,60949,1159],{"class":165},[159,60951,57742],{"class":192},[159,60953,57745],{"class":165},[159,60955,60956],{"class":161,"line":1981},[159,60957,590],{"emptyLinePlaceholder":589},[159,60959,60960],{"class":161,"line":1989},[159,60961,57754],{"class":1135},[159,60963,60964,60966,60968,60970,60972],{"class":161,"line":2001},[159,60965,18445],{"class":1142},[159,60967,54740],{"class":1146},[159,60969,26581],{"class":1142},[159,60971,54745],{"class":192},[159,60973,27364],{"class":165},[159,60975,60976],{"class":161,"line":2006},[159,60977,57771],{"class":1135},[159,60979,60980,60982,60984],{"class":161,"line":2015},[159,60981,54809],{"class":165},[159,60983,189],{"class":1142},[159,60985,60484],{"class":165},[159,60987,60988],{"class":161,"line":2024},[159,60989,57784],{"class":1135},[159,60991,60992],{"class":161,"line":2029},[159,60993,57789],{"class":1135},[159,60995,60996,60998,61000],{"class":161,"line":2038},[159,60997,57794],{"class":165},[159,60999,57797],{"class":192},[159,61001,18787],{"class":165},[159,61003,61004],{"class":161,"line":2053},[159,61005,57804],{"class":1135},[159,61007,61008,61010,61012],{"class":161,"line":2070},[159,61009,57417],{"class":165},[159,61011,189],{"class":1142},[159,61013,57813],{"class":165},[159,61015,61016],{"class":161,"line":2095},[159,61017,57818],{"class":1135},[159,61019,61020],{"class":161,"line":2104},[159,61021,57823],{"class":165},[159,61023,61024],{"class":161,"line":2120},[159,61025,590],{"emptyLinePlaceholder":589},[159,61027,61028],{"class":161,"line":2134},[159,61029,57832],{"class":1135},[159,61031,61032],{"class":161,"line":2143},[159,61033,57837],{"class":1135},[159,61035,61036,61038,61040,61042,61044,61046,61048],{"class":161,"line":2165},[159,61037,54757],{"class":165},[159,61039,189],{"class":1142},[159,61041,54764],{"class":192},[159,61043,25367],{"class":1142},[159,61045,54769],{"class":165},[159,61047,25364],{"class":1142},[159,61049,57514],{"class":192},[159,61051,61052,61054,61056],{"class":161,"line":2178},[159,61053,54809],{"class":165},[159,61055,189],{"class":1142},[159,61057,55807],{"class":165},[159,61059,61060],{"class":161,"line":2191},[159,61061,57866],{"class":1135},[159,61063,61064],{"class":161,"line":2204},[159,61065,57871],{"class":1135},[159,61067,61068,61070,61072,61074,61076,61078,61080,61082,61084,61086,61088,61090,61092,61094,61096,61098,61100,61102,61104,61106,61108,61110,61112],{"class":161,"line":2217},[159,61069,57876],{"class":165},[159,61071,189],{"class":1142},[159,61073,17263],{"class":165},[159,61075,57883],{"class":192},[159,61077,24233],{"class":165},[159,61079,57888],{"class":192},[159,61081,24233],{"class":165},[159,61083,57893],{"class":192},[159,61085,24233],{"class":165},[159,61087,57898],{"class":192},[159,61089,24233],{"class":165},[159,61091,57903],{"class":192},[159,61093,24233],{"class":165},[159,61095,57908],{"class":192},[159,61097,24233],{"class":165},[159,61099,57913],{"class":192},[159,61101,24233],{"class":165},[159,61103,57918],{"class":192},[159,61105,24233],{"class":165},[159,61107,57923],{"class":192},[159,61109,24233],{"class":165},[159,61111,57928],{"class":192},[159,61113,4634],{"class":165},[159,61115,61116,61118],{"class":161,"line":2230},[159,61117,57573],{"class":1142},[159,61119,56372],{"class":165},[159,61121,61122],{"class":161,"line":2243},[159,61123,57941],{"class":1135},[159,61125,61126,61128,61130,61132],{"class":161,"line":2256},[159,61127,27032],{"class":1142},[159,61129,57948],{"class":165},[159,61131,49566],{"class":1142},[159,61133,57592],{"class":165},[159,61135,61136,61138,61140],{"class":161,"line":2266},[159,61137,56128],{"class":165},[159,61139,189],{"class":1142},[159,61141,56133],{"class":165},[159,61143,61144,61146,61148],{"class":161,"line":2275},[159,61145,56143],{"class":165},[159,61147,189],{"class":1142},[159,61149,56148],{"class":165},[159,61151,61152],{"class":161,"line":2284},[159,61153,590],{"emptyLinePlaceholder":589},[159,61155,61156],{"class":161,"line":2293},[159,61157,57977],{"class":1135},[159,61159,61160],{"class":161,"line":2306},[159,61161,56364],{"class":165},[159,61163,61164],{"class":161,"line":2330},[159,61165,57986],{"class":1135},[159,61167,61168,61170,61172],{"class":161,"line":2350},[159,61169,56173],{"class":165},[159,61171,189],{"class":1142},[159,61173,56178],{"class":165},[159,61175,61176],{"class":161,"line":2370},[159,61177,57999],{"class":1135},[159,61179,61180,61182,61184,61186,61188,61190,61192],{"class":161,"line":2390},[159,61181,56188],{"class":165},[159,61183,189],{"class":1142},[159,61185,56193],{"class":165},[159,61187,56196],{"class":8765},[159,61189,189],{"class":1142},[159,61191,4932],{"class":1146},[159,61193,1165],{"class":165},[159,61195,61196],{"class":161,"line":2410},[159,61197,58020],{"class":1135},[159,61199,61200,61202,61204],{"class":161,"line":2430},[159,61201,58025],{"class":165},[159,61203,189],{"class":1142},[159,61205,58030],{"class":165},[159,61207,61208,61210,61212],{"class":161,"line":2450},[159,61209,58035],{"class":165},[159,61211,189],{"class":1142},[159,61213,58040],{"class":165},[159,61215,61216,61218,61220,61222,61224,61226,61228,61230],{"class":161,"line":2471},[159,61217,58045],{"class":1146},[159,61219,1159],{"class":165},[159,61221,58050],{"class":192},[159,61223,58053],{"class":165},[159,61225,58056],{"class":192},[159,61227,24233],{"class":165},[159,61229,58061],{"class":192},[159,61231,58064],{"class":165},[42,61233,61235],{"id":61234},"_22vgg","2.2.VGG",[326,61237,61239],{"id":61238},"_221原理","2.2.1.原理",[14,61241,61242],{},[23,61243],{"alt":25,"src":61244},"\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",[14,61246,61247],{},[23,61248],{"alt":25,"src":61249},"\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",[14,61251,61252],{},[23,61253],{"alt":25,"src":61254},"\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",[14,61256,61257],{},"参数详细描述：",[14,61259,61260],{},[23,61261],{"alt":25,"src":61262},"\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",[14,61264,61265],{},[23,61266],{"alt":25,"src":61267},"\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",[14,61269,61270],{},[23,61271],{"alt":25,"src":61272},"\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",[14,61274,61275],{},[23,61276],{"alt":25,"src":61277},"\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",[14,61279,61280],{},[23,61281],{"alt":25,"src":61282},"\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",[326,61284,61286],{"id":61285},"_222代码实现","2.2.2.代码实现",[134,61288,61289],{},[106,61290,61291],{},"网络搭建",[151,61293,61295],{"className":53900,"code":61294,"language":53902,"meta":25,"style":25},"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",[49,61296,61297,61303,61315,61325,61335,61339,61356,61364,61383,61388,61393,61405,61443,61448,61484,61488,61517,61522,61527,61538,61574,61578,61614,61618,61646,61650,61655,61666,61702,61706,61742,61746,61782,61786,61814,61818,61823,61834,61871,61875,61911,61915,61951,61955,61983,61987,61992,62003,62039,62043,62079,62083,62119,62123,62151,62155,62160,62171,62176,62181,62186,62207,62211,62223,62227,62239,62243,62247,62252,62257,62272,62277,62287,62292,62307,62312,62331,62336,62345,62350,62360,62365,62370,62384,62389,62403,62411,62415,62419,62427,62438,62449,62460,62471,62482,62493,62499,62503,62508,62521,62541,62547,62556],{"__ignoreMap":25},[159,61298,61299,61301],{"class":161,"line":162},[159,61300,53914],{"class":1142},[159,61302,53917],{"class":165},[159,61304,61305,61307,61310,61312],{"class":161,"line":176},[159,61306,54258],{"class":1142},[159,61308,61309],{"class":165}," sympy.core.sympify ",[159,61311,53914],{"class":1142},[159,61313,61314],{"class":165}," kernS\n",[159,61316,61317,61319,61321,61323],{"class":161,"line":203},[159,61318,54258],{"class":1142},[159,61320,54261],{"class":165},[159,61322,53914],{"class":1142},[159,61324,54266],{"class":165},[159,61326,61327,61329,61331,61333],{"class":161,"line":223},[159,61328,54258],{"class":1142},[159,61330,54278],{"class":165},[159,61332,53914],{"class":1142},[159,61334,54283],{"class":165},[159,61336,61337],{"class":161,"line":233},[159,61338,590],{"emptyLinePlaceholder":589},[159,61340,61341,61343,61346,61348,61350,61352,61354],{"class":161,"line":239},[159,61342,38260],{"class":1142},[159,61344,61345],{"class":185}," VGG16",[159,61347,1159],{"class":165},[159,61349,54299],{"class":185},[159,61351,9952],{"class":165},[159,61353,54304],{"class":185},[159,61355,54307],{"class":165},[159,61357,61358,61360,61362],{"class":161,"line":245},[159,61359,54322],{"class":1142},[159,61361,54325],{"class":1146},[159,61363,54328],{"class":165},[159,61365,61366,61368,61370,61373,61375,61377,61379,61381],{"class":161,"line":251},[159,61367,54338],{"class":1146},[159,61369,1159],{"class":165},[159,61371,61372],{"class":1146},"VGG16",[159,61374,1939],{"class":165},[159,61376,54344],{"class":1146},[159,61378,13019],{"class":165},[159,61380,54349],{"class":1146},[159,61382,5158],{"class":165},[159,61384,61385],{"class":161,"line":261},[159,61386,61387],{"class":1135},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[159,61389,61390],{"class":161,"line":603},[159,61391,61392],{"class":1135},"        # 这里用的是灰度图\n",[159,61394,61395,61397,61400,61402],{"class":161,"line":621},[159,61396,54365],{"class":1146},[159,61398,61399],{"class":165},".block1",[159,61401,189],{"class":1142},[159,61403,61404],{"class":165},"nn.Sequential(\n",[159,61406,61407,61410,61412,61414,61416,61418,61420,61422,61424,61426,61428,61430,61432,61434,61436,61438,61440],{"class":161,"line":634},[159,61408,61409],{"class":165},"            nn.Conv2d(",[159,61411,54376],{"class":8765},[159,61413,189],{"class":1142},[159,61415,4932],{"class":1146},[159,61417,24233],{"class":165},[159,61419,54385],{"class":8765},[159,61421,189],{"class":1142},[159,61423,24070],{"class":1146},[159,61425,24233],{"class":165},[159,61427,54394],{"class":8765},[159,61429,189],{"class":1142},[159,61431,23949],{"class":1146},[159,61433,24233],{"class":165},[159,61435,54403],{"class":8765},[159,61437,189],{"class":1142},[159,61439,4932],{"class":1146},[159,61441,61442],{"class":165},"),\n",[159,61444,61445],{"class":161,"line":640},[159,61446,61447],{"class":165},"            nn.ReLU(),\n",[159,61449,61450,61452,61454,61456,61458,61460,61462,61464,61466,61468,61470,61472,61474,61476,61478,61480,61482],{"class":161,"line":1075},[159,61451,61409],{"class":165},[159,61453,54376],{"class":8765},[159,61455,189],{"class":1142},[159,61457,24070],{"class":1146},[159,61459,24233],{"class":165},[159,61461,54385],{"class":8765},[159,61463,189],{"class":1142},[159,61465,24070],{"class":1146},[159,61467,24233],{"class":165},[159,61469,54394],{"class":8765},[159,61471,189],{"class":1142},[159,61473,23949],{"class":1146},[159,61475,24233],{"class":165},[159,61477,54403],{"class":8765},[159,61479,189],{"class":1142},[159,61481,4932],{"class":1146},[159,61483,61442],{"class":165},[159,61485,61486],{"class":161,"line":1081},[159,61487,61447],{"class":165},[159,61489,61490,61493,61495,61497,61499,61501,61503,61505,61507,61509,61511,61513,61515],{"class":161,"line":1091},[159,61491,61492],{"class":165},"            nn.MaxPool2d(",[159,61494,54394],{"class":8765},[159,61496,189],{"class":1142},[159,61498,11034],{"class":1146},[159,61500,24233],{"class":165},[159,61502,54449],{"class":8765},[159,61504,189],{"class":1142},[159,61506,11034],{"class":1146},[159,61508,24233],{"class":165},[159,61510,54403],{"class":8765},[159,61512,189],{"class":1142},[159,61514,1489],{"class":1146},[159,61516,1165],{"class":165},[159,61518,61519],{"class":161,"line":1100},[159,61520,61521],{"class":165},"        )\n",[159,61523,61524],{"class":161,"line":1123},[159,61525,61526],{"class":1135},"        # 第二层\n",[159,61528,61529,61531,61534,61536],{"class":161,"line":1132},[159,61530,54365],{"class":1146},[159,61532,61533],{"class":165},".block2",[159,61535,189],{"class":1142},[159,61537,61404],{"class":165},[159,61539,61540,61542,61544,61546,61548,61550,61552,61554,61556,61558,61560,61562,61564,61566,61568,61570,61572],{"class":161,"line":1139},[159,61541,61409],{"class":165},[159,61543,54376],{"class":8765},[159,61545,189],{"class":1142},[159,61547,24070],{"class":1146},[159,61549,24233],{"class":165},[159,61551,54385],{"class":8765},[159,61553,189],{"class":1142},[159,61555,55588],{"class":1146},[159,61557,24233],{"class":165},[159,61559,54394],{"class":8765},[159,61561,189],{"class":1142},[159,61563,23949],{"class":1146},[159,61565,24233],{"class":165},[159,61567,54403],{"class":8765},[159,61569,189],{"class":1142},[159,61571,4932],{"class":1146},[159,61573,61442],{"class":165},[159,61575,61576],{"class":161,"line":1168},[159,61577,61447],{"class":165},[159,61579,61580,61582,61584,61586,61588,61590,61592,61594,61596,61598,61600,61602,61604,61606,61608,61610,61612],{"class":161,"line":1174},[159,61581,61409],{"class":165},[159,61583,54376],{"class":8765},[159,61585,189],{"class":1142},[159,61587,55588],{"class":1146},[159,61589,24233],{"class":165},[159,61591,54385],{"class":8765},[159,61593,189],{"class":1142},[159,61595,55588],{"class":1146},[159,61597,24233],{"class":165},[159,61599,54394],{"class":8765},[159,61601,189],{"class":1142},[159,61603,23949],{"class":1146},[159,61605,24233],{"class":165},[159,61607,54403],{"class":8765},[159,61609,189],{"class":1142},[159,61611,4932],{"class":1146},[159,61613,61442],{"class":165},[159,61615,61616],{"class":161,"line":1180},[159,61617,61447],{"class":165},[159,61619,61620,61622,61624,61626,61628,61630,61632,61634,61636,61638,61640,61642,61644],{"class":161,"line":1194},[159,61621,61492],{"class":165},[159,61623,54394],{"class":8765},[159,61625,189],{"class":1142},[159,61627,11034],{"class":1146},[159,61629,24233],{"class":165},[159,61631,54449],{"class":8765},[159,61633,189],{"class":1142},[159,61635,11034],{"class":1146},[159,61637,24233],{"class":165},[159,61639,54403],{"class":8765},[159,61641,189],{"class":1142},[159,61643,1489],{"class":1146},[159,61645,1165],{"class":165},[159,61647,61648],{"class":161,"line":1200},[159,61649,61521],{"class":165},[159,61651,61652],{"class":161,"line":1221},[159,61653,61654],{"class":1135},"        # 第三层\n",[159,61656,61657,61659,61662,61664],{"class":161,"line":1230},[159,61658,54365],{"class":1146},[159,61660,61661],{"class":165},".block3",[159,61663,189],{"class":1142},[159,61665,61404],{"class":165},[159,61667,61668,61670,61672,61674,61676,61678,61680,61682,61684,61686,61688,61690,61692,61694,61696,61698,61700],{"class":161,"line":1247},[159,61669,61409],{"class":165},[159,61671,54376],{"class":8765},[159,61673,189],{"class":1142},[159,61675,55588],{"class":1146},[159,61677,24233],{"class":165},[159,61679,54385],{"class":8765},[159,61681,189],{"class":1142},[159,61683,58265],{"class":1146},[159,61685,24233],{"class":165},[159,61687,54394],{"class":8765},[159,61689,189],{"class":1142},[159,61691,23949],{"class":1146},[159,61693,24233],{"class":165},[159,61695,54403],{"class":8765},[159,61697,189],{"class":1142},[159,61699,4932],{"class":1146},[159,61701,61442],{"class":165},[159,61703,61704],{"class":161,"line":1265},[159,61705,61447],{"class":165},[159,61707,61708,61710,61712,61714,61716,61718,61720,61722,61724,61726,61728,61730,61732,61734,61736,61738,61740],{"class":161,"line":1277},[159,61709,61409],{"class":165},[159,61711,54376],{"class":8765},[159,61713,189],{"class":1142},[159,61715,58265],{"class":1146},[159,61717,24233],{"class":165},[159,61719,54385],{"class":8765},[159,61721,189],{"class":1142},[159,61723,58265],{"class":1146},[159,61725,24233],{"class":165},[159,61727,54394],{"class":8765},[159,61729,189],{"class":1142},[159,61731,23949],{"class":1146},[159,61733,24233],{"class":165},[159,61735,54403],{"class":8765},[159,61737,189],{"class":1142},[159,61739,4932],{"class":1146},[159,61741,61442],{"class":165},[159,61743,61744],{"class":161,"line":1283},[159,61745,61447],{"class":165},[159,61747,61748,61750,61752,61754,61756,61758,61760,61762,61764,61766,61768,61770,61772,61774,61776,61778,61780],{"class":161,"line":1294},[159,61749,61409],{"class":165},[159,61751,54376],{"class":8765},[159,61753,189],{"class":1142},[159,61755,58265],{"class":1146},[159,61757,24233],{"class":165},[159,61759,54385],{"class":8765},[159,61761,189],{"class":1142},[159,61763,58265],{"class":1146},[159,61765,24233],{"class":165},[159,61767,54394],{"class":8765},[159,61769,189],{"class":1142},[159,61771,23949],{"class":1146},[159,61773,24233],{"class":165},[159,61775,54403],{"class":8765},[159,61777,189],{"class":1142},[159,61779,4932],{"class":1146},[159,61781,61442],{"class":165},[159,61783,61784],{"class":161,"line":1305},[159,61785,61447],{"class":165},[159,61787,61788,61790,61792,61794,61796,61798,61800,61802,61804,61806,61808,61810,61812],{"class":161,"line":1311},[159,61789,61492],{"class":165},[159,61791,54394],{"class":8765},[159,61793,189],{"class":1142},[159,61795,11034],{"class":1146},[159,61797,24233],{"class":165},[159,61799,54449],{"class":8765},[159,61801,189],{"class":1142},[159,61803,11034],{"class":1146},[159,61805,24233],{"class":165},[159,61807,54403],{"class":8765},[159,61809,189],{"class":1142},[159,61811,1489],{"class":1146},[159,61813,1165],{"class":165},[159,61815,61816],{"class":161,"line":1322},[159,61817,61521],{"class":165},[159,61819,61820],{"class":161,"line":1327},[159,61821,61822],{"class":1135},"        # 第四层\n",[159,61824,61825,61827,61830,61832],{"class":161,"line":1336},[159,61826,54365],{"class":1146},[159,61828,61829],{"class":165},".block4",[159,61831,189],{"class":1142},[159,61833,61404],{"class":165},[159,61835,61836,61838,61840,61842,61844,61846,61848,61850,61853,61855,61857,61859,61861,61863,61865,61867,61869],{"class":161,"line":1345},[159,61837,61409],{"class":165},[159,61839,54376],{"class":8765},[159,61841,189],{"class":1142},[159,61843,58265],{"class":1146},[159,61845,24233],{"class":165},[159,61847,54385],{"class":8765},[159,61849,189],{"class":1142},[159,61851,61852],{"class":1146},"512",[159,61854,24233],{"class":165},[159,61856,54394],{"class":8765},[159,61858,189],{"class":1142},[159,61860,23949],{"class":1146},[159,61862,24233],{"class":165},[159,61864,54403],{"class":8765},[159,61866,189],{"class":1142},[159,61868,4932],{"class":1146},[159,61870,61442],{"class":165},[159,61872,61873],{"class":161,"line":1350},[159,61874,61447],{"class":165},[159,61876,61877,61879,61881,61883,61885,61887,61889,61891,61893,61895,61897,61899,61901,61903,61905,61907,61909],{"class":161,"line":1764},[159,61878,61409],{"class":165},[159,61880,54376],{"class":8765},[159,61882,189],{"class":1142},[159,61884,61852],{"class":1146},[159,61886,24233],{"class":165},[159,61888,54385],{"class":8765},[159,61890,189],{"class":1142},[159,61892,61852],{"class":1146},[159,61894,24233],{"class":165},[159,61896,54394],{"class":8765},[159,61898,189],{"class":1142},[159,61900,23949],{"class":1146},[159,61902,24233],{"class":165},[159,61904,54403],{"class":8765},[159,61906,189],{"class":1142},[159,61908,4932],{"class":1146},[159,61910,61442],{"class":165},[159,61912,61913],{"class":161,"line":1769},[159,61914,61447],{"class":165},[159,61916,61917,61919,61921,61923,61925,61927,61929,61931,61933,61935,61937,61939,61941,61943,61945,61947,61949],{"class":161,"line":1777},[159,61918,61409],{"class":165},[159,61920,54376],{"class":8765},[159,61922,189],{"class":1142},[159,61924,61852],{"class":1146},[159,61926,24233],{"class":165},[159,61928,54385],{"class":8765},[159,61930,189],{"class":1142},[159,61932,61852],{"class":1146},[159,61934,24233],{"class":165},[159,61936,54394],{"class":8765},[159,61938,189],{"class":1142},[159,61940,23949],{"class":1146},[159,61942,24233],{"class":165},[159,61944,54403],{"class":8765},[159,61946,189],{"class":1142},[159,61948,4932],{"class":1146},[159,61950,61442],{"class":165},[159,61952,61953],{"class":161,"line":1788},[159,61954,61447],{"class":165},[159,61956,61957,61959,61961,61963,61965,61967,61969,61971,61973,61975,61977,61979,61981],{"class":161,"line":1802},[159,61958,61492],{"class":165},[159,61960,54394],{"class":8765},[159,61962,189],{"class":1142},[159,61964,11034],{"class":1146},[159,61966,24233],{"class":165},[159,61968,54449],{"class":8765},[159,61970,189],{"class":1142},[159,61972,11034],{"class":1146},[159,61974,24233],{"class":165},[159,61976,54403],{"class":8765},[159,61978,189],{"class":1142},[159,61980,1489],{"class":1146},[159,61982,1165],{"class":165},[159,61984,61985],{"class":161,"line":1815},[159,61986,61521],{"class":165},[159,61988,61989],{"class":161,"line":1828},[159,61990,61991],{"class":1135},"        # 第五层\n",[159,61993,61994,61996,61999,62001],{"class":161,"line":1841},[159,61995,54365],{"class":1146},[159,61997,61998],{"class":165},".block5",[159,62000,189],{"class":1142},[159,62002,61404],{"class":165},[159,62004,62005,62007,62009,62011,62013,62015,62017,62019,62021,62023,62025,62027,62029,62031,62033,62035,62037],{"class":161,"line":1852},[159,62006,61409],{"class":165},[159,62008,54376],{"class":8765},[159,62010,189],{"class":1142},[159,62012,61852],{"class":1146},[159,62014,24233],{"class":165},[159,62016,54385],{"class":8765},[159,62018,189],{"class":1142},[159,62020,61852],{"class":1146},[159,62022,24233],{"class":165},[159,62024,54394],{"class":8765},[159,62026,189],{"class":1142},[159,62028,23949],{"class":1146},[159,62030,24233],{"class":165},[159,62032,54403],{"class":8765},[159,62034,189],{"class":1142},[159,62036,4932],{"class":1146},[159,62038,61442],{"class":165},[159,62040,62041],{"class":161,"line":1866},[159,62042,61447],{"class":165},[159,62044,62045,62047,62049,62051,62053,62055,62057,62059,62061,62063,62065,62067,62069,62071,62073,62075,62077],{"class":161,"line":1879},[159,62046,61409],{"class":165},[159,62048,54376],{"class":8765},[159,62050,189],{"class":1142},[159,62052,61852],{"class":1146},[159,62054,24233],{"class":165},[159,62056,54385],{"class":8765},[159,62058,189],{"class":1142},[159,62060,61852],{"class":1146},[159,62062,24233],{"class":165},[159,62064,54394],{"class":8765},[159,62066,189],{"class":1142},[159,62068,23949],{"class":1146},[159,62070,24233],{"class":165},[159,62072,54403],{"class":8765},[159,62074,189],{"class":1142},[159,62076,4932],{"class":1146},[159,62078,61442],{"class":165},[159,62080,62081],{"class":161,"line":1884},[159,62082,61447],{"class":165},[159,62084,62085,62087,62089,62091,62093,62095,62097,62099,62101,62103,62105,62107,62109,62111,62113,62115,62117],{"class":161,"line":1889},[159,62086,61409],{"class":165},[159,62088,54376],{"class":8765},[159,62090,189],{"class":1142},[159,62092,61852],{"class":1146},[159,62094,24233],{"class":165},[159,62096,54385],{"class":8765},[159,62098,189],{"class":1142},[159,62100,61852],{"class":1146},[159,62102,24233],{"class":165},[159,62104,54394],{"class":8765},[159,62106,189],{"class":1142},[159,62108,23949],{"class":1146},[159,62110,24233],{"class":165},[159,62112,54403],{"class":8765},[159,62114,189],{"class":1142},[159,62116,4932],{"class":1146},[159,62118,61442],{"class":165},[159,62120,62121],{"class":161,"line":1899},[159,62122,61447],{"class":165},[159,62124,62125,62127,62129,62131,62133,62135,62137,62139,62141,62143,62145,62147,62149],{"class":161,"line":1912},[159,62126,61492],{"class":165},[159,62128,54394],{"class":8765},[159,62130,189],{"class":1142},[159,62132,11034],{"class":1146},[159,62134,24233],{"class":165},[159,62136,54449],{"class":8765},[159,62138,189],{"class":1142},[159,62140,11034],{"class":1146},[159,62142,24233],{"class":165},[159,62144,54403],{"class":8765},[159,62146,189],{"class":1142},[159,62148,1489],{"class":1146},[159,62150,1165],{"class":165},[159,62152,62153],{"class":161,"line":1925},[159,62154,61521],{"class":165},[159,62156,62157],{"class":161,"line":1956},[159,62158,62159],{"class":1135},"        # 全连接层\n",[159,62161,62162,62164,62167,62169],{"class":161,"line":1971},[159,62163,54365],{"class":1146},[159,62165,62166],{"class":165},".block6",[159,62168,189],{"class":1142},[159,62170,61404],{"class":165},[159,62172,62173],{"class":161,"line":1976},[159,62174,62175],{"class":1135},"            # 平展操作\n",[159,62177,62178],{"class":161,"line":1981},[159,62179,62180],{"class":1135},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[159,62182,62183],{"class":161,"line":1989},[159,62184,62185],{"class":165},"            nn.Flatten(),\n",[159,62187,62188,62191,62193,62195,62197,62199,62201,62203,62205],{"class":161,"line":2001},[159,62189,62190],{"class":165},"            nn.Linear(",[159,62192,24224],{"class":1146},[159,62194,4777],{"class":1142},[159,62196,24224],{"class":1146},[159,62198,4777],{"class":1142},[159,62200,61852],{"class":1146},[159,62202,24233],{"class":165},[159,62204,58265],{"class":1146},[159,62206,61442],{"class":165},[159,62208,62209],{"class":161,"line":2006},[159,62210,61447],{"class":165},[159,62212,62213,62215,62217,62219,62221],{"class":161,"line":2015},[159,62214,62190],{"class":165},[159,62216,58265],{"class":1146},[159,62218,24233],{"class":165},[159,62220,55588],{"class":1146},[159,62222,61442],{"class":165},[159,62224,62225],{"class":161,"line":2024},[159,62226,61447],{"class":165},[159,62228,62229,62231,62233,62235,62237],{"class":161,"line":2029},[159,62230,62190],{"class":165},[159,62232,55588],{"class":1146},[159,62234,24233],{"class":165},[159,62236,1964],{"class":1146},[159,62238,1165],{"class":165},[159,62240,62241],{"class":161,"line":2038},[159,62242,61521],{"class":165},[159,62244,62245],{"class":161,"line":2053},[159,62246,590],{"emptyLinePlaceholder":589},[159,62248,62249],{"class":161,"line":2070},[159,62250,62251],{"class":1135},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[159,62253,62254],{"class":161,"line":2095},[159,62255,62256],{"class":1135},"        # 循环遍历模型\n",[159,62258,62259,62261,62264,62266,62269],{"class":161,"line":2104},[159,62260,27032],{"class":1142},[159,62262,62263],{"class":165}," m ",[159,62265,49566],{"class":1142},[159,62267,62268],{"class":1146}," self",[159,62270,62271],{"class":165},".modules():\n",[159,62273,62274],{"class":161,"line":2120},[159,62275,62276],{"class":1135},"            # print(m)\n",[159,62278,62279,62281,62284],{"class":161,"line":2134},[159,62280,28260],{"class":1142},[159,62282,62283],{"class":1146}," isinstance",[159,62285,62286],{"class":165},"(m,nn.Conv2d):\n",[159,62288,62289],{"class":161,"line":2143},[159,62290,62291],{"class":1135},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[159,62293,62294,62297,62300,62302,62305],{"class":161,"line":2165},[159,62295,62296],{"class":165},"                nn.init.kaiming_normal_(m.weight,",[159,62298,62299],{"class":8765},"nonlinearity",[159,62301,189],{"class":1142},[159,62303,62304],{"class":192},"'relu'",[159,62306,1165],{"class":165},[159,62308,62309],{"class":161,"line":2178},[159,62310,62311],{"class":1135},"                # 判断b参数是否存在\n",[159,62313,62314,62317,62320,62323,62326,62329],{"class":161,"line":2191},[159,62315,62316],{"class":1142},"                if",[159,62318,62319],{"class":165}," m.bias ",[159,62321,62322],{"class":1142},"is",[159,62324,62325],{"class":1142}," not",[159,62327,62328],{"class":1146}," None",[159,62330,27364],{"class":165},[159,62332,62333],{"class":161,"line":2204},[159,62334,62335],{"class":1135},"                    # 如果参数不存在的化初始化b=0\n",[159,62337,62338,62341,62343],{"class":161,"line":2217},[159,62339,62340],{"class":165},"                    nn.init.constant_(m.bias,",[159,62342,1489],{"class":1146},[159,62344,1165],{"class":165},[159,62346,62347],{"class":161,"line":2230},[159,62348,62349],{"class":1135},"            # 全连接层初始化\n",[159,62351,62352,62355,62357],{"class":161,"line":2243},[159,62353,62354],{"class":1142},"            elif",[159,62356,62283],{"class":1146},[159,62358,62359],{"class":165},"(m,nn.Linear):\n",[159,62361,62362],{"class":161,"line":2256},[159,62363,62364],{"class":1135},"                # 这个初始化方法是利用的是正太分布的方式\n",[159,62366,62367],{"class":161,"line":2266},[159,62368,62369],{"class":1135},"                # 均值为0，方差为0.01\n",[159,62371,62372,62375,62377,62379,62382],{"class":161,"line":2275},[159,62373,62374],{"class":165},"                nn.init.normal_(m.weight,",[159,62376,1489],{"class":1146},[159,62378,24233],{"class":165},[159,62380,62381],{"class":1146},"0.01",[159,62383,1165],{"class":165},[159,62385,62386],{"class":161,"line":2284},[159,62387,62388],{"class":1135},"                # 初始化b参数\n",[159,62390,62391,62393,62395,62397,62399,62401],{"class":161,"line":2293},[159,62392,62316],{"class":1142},[159,62394,62319],{"class":165},[159,62396,62322],{"class":1142},[159,62398,62325],{"class":1142},[159,62400,62328],{"class":1146},[159,62402,27364],{"class":165},[159,62404,62405,62407,62409],{"class":161,"line":2306},[159,62406,62340],{"class":165},[159,62408,1489],{"class":1146},[159,62410,1165],{"class":165},[159,62412,62413],{"class":161,"line":2330},[159,62414,590],{"emptyLinePlaceholder":589},[159,62416,62417],{"class":161,"line":2350},[159,62418,58560],{"class":1135},[159,62420,62421,62423,62425],{"class":161,"line":2370},[159,62422,54322],{"class":1142},[159,62424,54613],{"class":185},[159,62426,54616],{"class":165},[159,62428,62429,62431,62433,62435],{"class":161,"line":2390},[159,62430,54621],{"class":165},[159,62432,189],{"class":1142},[159,62434,54344],{"class":1146},[159,62436,62437],{"class":165},".block1(x)\n",[159,62439,62440,62442,62444,62446],{"class":161,"line":2410},[159,62441,54621],{"class":165},[159,62443,189],{"class":1142},[159,62445,54344],{"class":1146},[159,62447,62448],{"class":165},".block2(x)\n",[159,62450,62451,62453,62455,62457],{"class":161,"line":2430},[159,62452,54621],{"class":165},[159,62454,189],{"class":1142},[159,62456,54344],{"class":1146},[159,62458,62459],{"class":165},".block3(x)\n",[159,62461,62462,62464,62466,62468],{"class":161,"line":2450},[159,62463,54621],{"class":165},[159,62465,189],{"class":1142},[159,62467,54344],{"class":1146},[159,62469,62470],{"class":165},".block4(x)\n",[159,62472,62473,62475,62477,62479],{"class":161,"line":2471},[159,62474,54621],{"class":165},[159,62476,189],{"class":1142},[159,62478,54344],{"class":1146},[159,62480,62481],{"class":165},".block5(x)\n",[159,62483,62484,62486,62488,62490],{"class":161,"line":2477},[159,62485,54621],{"class":165},[159,62487,189],{"class":1142},[159,62489,54344],{"class":1146},[159,62491,62492],{"class":165},".block6(x)\n",[159,62494,62495,62497],{"class":161,"line":2498},[159,62496,21176],{"class":1142},[159,62498,54729],{"class":165},[159,62500,62501],{"class":161,"line":2518},[159,62502,590],{"emptyLinePlaceholder":589},[159,62504,62505],{"class":161,"line":2539},[159,62506,62507],{"class":1135},"# 验证模型\n",[159,62509,62510,62512,62514,62516,62519],{"class":161,"line":2561},[159,62511,18445],{"class":1142},[159,62513,54740],{"class":1146},[159,62515,26581],{"class":1142},[159,62517,62518],{"class":192},"'__main__'",[159,62520,27364],{"class":165},[159,62522,62523,62525,62527,62529,62531,62533,62535,62537,62539],{"class":161,"line":2573},[159,62524,54757],{"class":165},[159,62526,189],{"class":1142},[159,62528,53973],{"class":165},[159,62530,54764],{"class":192},[159,62532,25367],{"class":1142},[159,62534,54769],{"class":165},[159,62536,25364],{"class":1142},[159,62538,53998],{"class":192},[159,62540,1165],{"class":165},[159,62542,62543,62545],{"class":161,"line":2591},[159,62544,54819],{"class":1146},[159,62546,54007],{"class":165},[159,62548,62549,62551,62553],{"class":161,"line":2602},[159,62550,54809],{"class":165},[159,62552,189],{"class":1142},[159,62554,62555],{"class":165},"VGG16().to(device)\n",[159,62557,62558,62560,62562,62564,62566,62568,62570,62572],{"class":161,"line":2613},[159,62559,54819],{"class":1146},[159,62561,54822],{"class":165},[159,62563,4932],{"class":1146},[159,62565,24233],{"class":165},[159,62567,55020],{"class":1146},[159,62569,24233],{"class":165},[159,62571,55020],{"class":1146},[159,62573,54835],{"class":165},[134,62575,62576],{"start":176},[106,62577,62578],{},"训练代码",[14,62580,62581],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,62583,62584],{},"解决方式:",[14,62586,62587],{},"①权重初始化",[151,62589,62591],{"className":53900,"code":62590,"language":53902,"meta":25,"style":25},"# 权重初始化,保证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",[49,62592,62593,62598,62603,62615,62620,62628,62633,62646,62651,62665,62670,62679,62684,62693,62698,62703,62716,62721,62735],{"__ignoreMap":25},[159,62594,62595],{"class":161,"line":162},[159,62596,62597],{"class":1135},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[159,62599,62600],{"class":161,"line":176},[159,62601,62602],{"class":1135},"# 循环遍历模型\n",[159,62604,62605,62607,62609,62611,62613],{"class":161,"line":203},[159,62606,26657],{"class":1142},[159,62608,62263],{"class":165},[159,62610,49566],{"class":1142},[159,62612,62268],{"class":1146},[159,62614,62271],{"class":165},[159,62616,62617],{"class":161,"line":223},[159,62618,62619],{"class":1135},"    # print(m)\n",[159,62621,62622,62624,62626],{"class":161,"line":233},[159,62623,26732],{"class":1142},[159,62625,62283],{"class":1146},[159,62627,62286],{"class":165},[159,62629,62630],{"class":161,"line":239},[159,62631,62632],{"class":1135},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[159,62634,62635,62638,62640,62642,62644],{"class":161,"line":245},[159,62636,62637],{"class":165},"        nn.init.kaiming_normal_(m.weight,",[159,62639,62299],{"class":8765},[159,62641,189],{"class":1142},[159,62643,62304],{"class":192},[159,62645,1165],{"class":165},[159,62647,62648],{"class":161,"line":251},[159,62649,62650],{"class":1135},"        # 判断b参数是否存在\n",[159,62652,62653,62655,62657,62659,62661,62663],{"class":161,"line":261},[159,62654,17003],{"class":1142},[159,62656,62319],{"class":165},[159,62658,62322],{"class":1142},[159,62660,62325],{"class":1142},[159,62662,62328],{"class":1146},[159,62664,27364],{"class":165},[159,62666,62667],{"class":161,"line":603},[159,62668,62669],{"class":1135},"            # 如果参数不存在的化初始化b=0\n",[159,62671,62672,62675,62677],{"class":161,"line":621},[159,62673,62674],{"class":165},"            nn.init.constant_(m.bias,",[159,62676,1489],{"class":1146},[159,62678,1165],{"class":165},[159,62680,62681],{"class":161,"line":634},[159,62682,62683],{"class":1135},"    # 全连接层初始化\n",[159,62685,62686,62689,62691],{"class":161,"line":640},[159,62687,62688],{"class":1142},"    elif",[159,62690,62283],{"class":1146},[159,62692,62359],{"class":165},[159,62694,62695],{"class":161,"line":1075},[159,62696,62697],{"class":1135},"        # 这个初始化方法是利用的是正太分布的方式\n",[159,62699,62700],{"class":161,"line":1081},[159,62701,62702],{"class":1135},"        # 均值为0，方差为0.01\n",[159,62704,62705,62708,62710,62712,62714],{"class":161,"line":1091},[159,62706,62707],{"class":165},"        nn.init.normal_(m.weight,",[159,62709,1489],{"class":1146},[159,62711,24233],{"class":165},[159,62713,62381],{"class":1146},[159,62715,1165],{"class":165},[159,62717,62718],{"class":161,"line":1100},[159,62719,62720],{"class":1135},"        # 初始化b参数\n",[159,62722,62723,62725,62727,62729,62731,62733],{"class":161,"line":1123},[159,62724,17003],{"class":1142},[159,62726,62319],{"class":165},[159,62728,62322],{"class":1142},[159,62730,62325],{"class":1142},[159,62732,62328],{"class":1146},[159,62734,27364],{"class":165},[159,62736,62737,62739,62741],{"class":161,"line":1132},[159,62738,62674],{"class":165},[159,62740,1489],{"class":1146},[159,62742,1165],{"class":165},[14,62744,62745],{},"②尽可能地增加批次",[14,62747,62748],{},"训练完整代码：",[151,62750,62751],{"className":53900,"code":61294,"language":53902,"meta":25,"style":25},[49,62752,62753,62759,62769,62779,62789,62793,62809,62817,62835,62839,62843,62853,62889,62893,62929,62933,62961,62965,62969,62979,63015,63019,63055,63059,63087,63091,63095,63105,63141,63145,63181,63185,63221,63225,63253,63257,63261,63271,63307,63311,63347,63351,63387,63391,63419,63423,63427,63437,63473,63477,63513,63517,63553,63557,63585,63589,63593,63603,63607,63611,63615,63635,63639,63651,63655,63667,63671,63675,63679,63683,63695,63699,63707,63711,63723,63727,63741,63745,63753,63757,63765,63769,63773,63785,63789,63803,63811,63815,63819,63827,63837,63847,63857,63867,63877,63887,63893,63897,63901,63913,63933,63939,63947],{"__ignoreMap":25},[159,62754,62755,62757],{"class":161,"line":162},[159,62756,53914],{"class":1142},[159,62758,53917],{"class":165},[159,62760,62761,62763,62765,62767],{"class":161,"line":176},[159,62762,54258],{"class":1142},[159,62764,61309],{"class":165},[159,62766,53914],{"class":1142},[159,62768,61314],{"class":165},[159,62770,62771,62773,62775,62777],{"class":161,"line":203},[159,62772,54258],{"class":1142},[159,62774,54261],{"class":165},[159,62776,53914],{"class":1142},[159,62778,54266],{"class":165},[159,62780,62781,62783,62785,62787],{"class":161,"line":223},[159,62782,54258],{"class":1142},[159,62784,54278],{"class":165},[159,62786,53914],{"class":1142},[159,62788,54283],{"class":165},[159,62790,62791],{"class":161,"line":233},[159,62792,590],{"emptyLinePlaceholder":589},[159,62794,62795,62797,62799,62801,62803,62805,62807],{"class":161,"line":239},[159,62796,38260],{"class":1142},[159,62798,61345],{"class":185},[159,62800,1159],{"class":165},[159,62802,54299],{"class":185},[159,62804,9952],{"class":165},[159,62806,54304],{"class":185},[159,62808,54307],{"class":165},[159,62810,62811,62813,62815],{"class":161,"line":245},[159,62812,54322],{"class":1142},[159,62814,54325],{"class":1146},[159,62816,54328],{"class":165},[159,62818,62819,62821,62823,62825,62827,62829,62831,62833],{"class":161,"line":251},[159,62820,54338],{"class":1146},[159,62822,1159],{"class":165},[159,62824,61372],{"class":1146},[159,62826,1939],{"class":165},[159,62828,54344],{"class":1146},[159,62830,13019],{"class":165},[159,62832,54349],{"class":1146},[159,62834,5158],{"class":165},[159,62836,62837],{"class":161,"line":261},[159,62838,61387],{"class":1135},[159,62840,62841],{"class":161,"line":603},[159,62842,61392],{"class":1135},[159,62844,62845,62847,62849,62851],{"class":161,"line":621},[159,62846,54365],{"class":1146},[159,62848,61399],{"class":165},[159,62850,189],{"class":1142},[159,62852,61404],{"class":165},[159,62854,62855,62857,62859,62861,62863,62865,62867,62869,62871,62873,62875,62877,62879,62881,62883,62885,62887],{"class":161,"line":634},[159,62856,61409],{"class":165},[159,62858,54376],{"class":8765},[159,62860,189],{"class":1142},[159,62862,4932],{"class":1146},[159,62864,24233],{"class":165},[159,62866,54385],{"class":8765},[159,62868,189],{"class":1142},[159,62870,24070],{"class":1146},[159,62872,24233],{"class":165},[159,62874,54394],{"class":8765},[159,62876,189],{"class":1142},[159,62878,23949],{"class":1146},[159,62880,24233],{"class":165},[159,62882,54403],{"class":8765},[159,62884,189],{"class":1142},[159,62886,4932],{"class":1146},[159,62888,61442],{"class":165},[159,62890,62891],{"class":161,"line":640},[159,62892,61447],{"class":165},[159,62894,62895,62897,62899,62901,62903,62905,62907,62909,62911,62913,62915,62917,62919,62921,62923,62925,62927],{"class":161,"line":1075},[159,62896,61409],{"class":165},[159,62898,54376],{"class":8765},[159,62900,189],{"class":1142},[159,62902,24070],{"class":1146},[159,62904,24233],{"class":165},[159,62906,54385],{"class":8765},[159,62908,189],{"class":1142},[159,62910,24070],{"class":1146},[159,62912,24233],{"class":165},[159,62914,54394],{"class":8765},[159,62916,189],{"class":1142},[159,62918,23949],{"class":1146},[159,62920,24233],{"class":165},[159,62922,54403],{"class":8765},[159,62924,189],{"class":1142},[159,62926,4932],{"class":1146},[159,62928,61442],{"class":165},[159,62930,62931],{"class":161,"line":1081},[159,62932,61447],{"class":165},[159,62934,62935,62937,62939,62941,62943,62945,62947,62949,62951,62953,62955,62957,62959],{"class":161,"line":1091},[159,62936,61492],{"class":165},[159,62938,54394],{"class":8765},[159,62940,189],{"class":1142},[159,62942,11034],{"class":1146},[159,62944,24233],{"class":165},[159,62946,54449],{"class":8765},[159,62948,189],{"class":1142},[159,62950,11034],{"class":1146},[159,62952,24233],{"class":165},[159,62954,54403],{"class":8765},[159,62956,189],{"class":1142},[159,62958,1489],{"class":1146},[159,62960,1165],{"class":165},[159,62962,62963],{"class":161,"line":1100},[159,62964,61521],{"class":165},[159,62966,62967],{"class":161,"line":1123},[159,62968,61526],{"class":1135},[159,62970,62971,62973,62975,62977],{"class":161,"line":1132},[159,62972,54365],{"class":1146},[159,62974,61533],{"class":165},[159,62976,189],{"class":1142},[159,62978,61404],{"class":165},[159,62980,62981,62983,62985,62987,62989,62991,62993,62995,62997,62999,63001,63003,63005,63007,63009,63011,63013],{"class":161,"line":1139},[159,62982,61409],{"class":165},[159,62984,54376],{"class":8765},[159,62986,189],{"class":1142},[159,62988,24070],{"class":1146},[159,62990,24233],{"class":165},[159,62992,54385],{"class":8765},[159,62994,189],{"class":1142},[159,62996,55588],{"class":1146},[159,62998,24233],{"class":165},[159,63000,54394],{"class":8765},[159,63002,189],{"class":1142},[159,63004,23949],{"class":1146},[159,63006,24233],{"class":165},[159,63008,54403],{"class":8765},[159,63010,189],{"class":1142},[159,63012,4932],{"class":1146},[159,63014,61442],{"class":165},[159,63016,63017],{"class":161,"line":1168},[159,63018,61447],{"class":165},[159,63020,63021,63023,63025,63027,63029,63031,63033,63035,63037,63039,63041,63043,63045,63047,63049,63051,63053],{"class":161,"line":1174},[159,63022,61409],{"class":165},[159,63024,54376],{"class":8765},[159,63026,189],{"class":1142},[159,63028,55588],{"class":1146},[159,63030,24233],{"class":165},[159,63032,54385],{"class":8765},[159,63034,189],{"class":1142},[159,63036,55588],{"class":1146},[159,63038,24233],{"class":165},[159,63040,54394],{"class":8765},[159,63042,189],{"class":1142},[159,63044,23949],{"class":1146},[159,63046,24233],{"class":165},[159,63048,54403],{"class":8765},[159,63050,189],{"class":1142},[159,63052,4932],{"class":1146},[159,63054,61442],{"class":165},[159,63056,63057],{"class":161,"line":1180},[159,63058,61447],{"class":165},[159,63060,63061,63063,63065,63067,63069,63071,63073,63075,63077,63079,63081,63083,63085],{"class":161,"line":1194},[159,63062,61492],{"class":165},[159,63064,54394],{"class":8765},[159,63066,189],{"class":1142},[159,63068,11034],{"class":1146},[159,63070,24233],{"class":165},[159,63072,54449],{"class":8765},[159,63074,189],{"class":1142},[159,63076,11034],{"class":1146},[159,63078,24233],{"class":165},[159,63080,54403],{"class":8765},[159,63082,189],{"class":1142},[159,63084,1489],{"class":1146},[159,63086,1165],{"class":165},[159,63088,63089],{"class":161,"line":1200},[159,63090,61521],{"class":165},[159,63092,63093],{"class":161,"line":1221},[159,63094,61654],{"class":1135},[159,63096,63097,63099,63101,63103],{"class":161,"line":1230},[159,63098,54365],{"class":1146},[159,63100,61661],{"class":165},[159,63102,189],{"class":1142},[159,63104,61404],{"class":165},[159,63106,63107,63109,63111,63113,63115,63117,63119,63121,63123,63125,63127,63129,63131,63133,63135,63137,63139],{"class":161,"line":1247},[159,63108,61409],{"class":165},[159,63110,54376],{"class":8765},[159,63112,189],{"class":1142},[159,63114,55588],{"class":1146},[159,63116,24233],{"class":165},[159,63118,54385],{"class":8765},[159,63120,189],{"class":1142},[159,63122,58265],{"class":1146},[159,63124,24233],{"class":165},[159,63126,54394],{"class":8765},[159,63128,189],{"class":1142},[159,63130,23949],{"class":1146},[159,63132,24233],{"class":165},[159,63134,54403],{"class":8765},[159,63136,189],{"class":1142},[159,63138,4932],{"class":1146},[159,63140,61442],{"class":165},[159,63142,63143],{"class":161,"line":1265},[159,63144,61447],{"class":165},[159,63146,63147,63149,63151,63153,63155,63157,63159,63161,63163,63165,63167,63169,63171,63173,63175,63177,63179],{"class":161,"line":1277},[159,63148,61409],{"class":165},[159,63150,54376],{"class":8765},[159,63152,189],{"class":1142},[159,63154,58265],{"class":1146},[159,63156,24233],{"class":165},[159,63158,54385],{"class":8765},[159,63160,189],{"class":1142},[159,63162,58265],{"class":1146},[159,63164,24233],{"class":165},[159,63166,54394],{"class":8765},[159,63168,189],{"class":1142},[159,63170,23949],{"class":1146},[159,63172,24233],{"class":165},[159,63174,54403],{"class":8765},[159,63176,189],{"class":1142},[159,63178,4932],{"class":1146},[159,63180,61442],{"class":165},[159,63182,63183],{"class":161,"line":1283},[159,63184,61447],{"class":165},[159,63186,63187,63189,63191,63193,63195,63197,63199,63201,63203,63205,63207,63209,63211,63213,63215,63217,63219],{"class":161,"line":1294},[159,63188,61409],{"class":165},[159,63190,54376],{"class":8765},[159,63192,189],{"class":1142},[159,63194,58265],{"class":1146},[159,63196,24233],{"class":165},[159,63198,54385],{"class":8765},[159,63200,189],{"class":1142},[159,63202,58265],{"class":1146},[159,63204,24233],{"class":165},[159,63206,54394],{"class":8765},[159,63208,189],{"class":1142},[159,63210,23949],{"class":1146},[159,63212,24233],{"class":165},[159,63214,54403],{"class":8765},[159,63216,189],{"class":1142},[159,63218,4932],{"class":1146},[159,63220,61442],{"class":165},[159,63222,63223],{"class":161,"line":1305},[159,63224,61447],{"class":165},[159,63226,63227,63229,63231,63233,63235,63237,63239,63241,63243,63245,63247,63249,63251],{"class":161,"line":1311},[159,63228,61492],{"class":165},[159,63230,54394],{"class":8765},[159,63232,189],{"class":1142},[159,63234,11034],{"class":1146},[159,63236,24233],{"class":165},[159,63238,54449],{"class":8765},[159,63240,189],{"class":1142},[159,63242,11034],{"class":1146},[159,63244,24233],{"class":165},[159,63246,54403],{"class":8765},[159,63248,189],{"class":1142},[159,63250,1489],{"class":1146},[159,63252,1165],{"class":165},[159,63254,63255],{"class":161,"line":1322},[159,63256,61521],{"class":165},[159,63258,63259],{"class":161,"line":1327},[159,63260,61822],{"class":1135},[159,63262,63263,63265,63267,63269],{"class":161,"line":1336},[159,63264,54365],{"class":1146},[159,63266,61829],{"class":165},[159,63268,189],{"class":1142},[159,63270,61404],{"class":165},[159,63272,63273,63275,63277,63279,63281,63283,63285,63287,63289,63291,63293,63295,63297,63299,63301,63303,63305],{"class":161,"line":1345},[159,63274,61409],{"class":165},[159,63276,54376],{"class":8765},[159,63278,189],{"class":1142},[159,63280,58265],{"class":1146},[159,63282,24233],{"class":165},[159,63284,54385],{"class":8765},[159,63286,189],{"class":1142},[159,63288,61852],{"class":1146},[159,63290,24233],{"class":165},[159,63292,54394],{"class":8765},[159,63294,189],{"class":1142},[159,63296,23949],{"class":1146},[159,63298,24233],{"class":165},[159,63300,54403],{"class":8765},[159,63302,189],{"class":1142},[159,63304,4932],{"class":1146},[159,63306,61442],{"class":165},[159,63308,63309],{"class":161,"line":1350},[159,63310,61447],{"class":165},[159,63312,63313,63315,63317,63319,63321,63323,63325,63327,63329,63331,63333,63335,63337,63339,63341,63343,63345],{"class":161,"line":1764},[159,63314,61409],{"class":165},[159,63316,54376],{"class":8765},[159,63318,189],{"class":1142},[159,63320,61852],{"class":1146},[159,63322,24233],{"class":165},[159,63324,54385],{"class":8765},[159,63326,189],{"class":1142},[159,63328,61852],{"class":1146},[159,63330,24233],{"class":165},[159,63332,54394],{"class":8765},[159,63334,189],{"class":1142},[159,63336,23949],{"class":1146},[159,63338,24233],{"class":165},[159,63340,54403],{"class":8765},[159,63342,189],{"class":1142},[159,63344,4932],{"class":1146},[159,63346,61442],{"class":165},[159,63348,63349],{"class":161,"line":1769},[159,63350,61447],{"class":165},[159,63352,63353,63355,63357,63359,63361,63363,63365,63367,63369,63371,63373,63375,63377,63379,63381,63383,63385],{"class":161,"line":1777},[159,63354,61409],{"class":165},[159,63356,54376],{"class":8765},[159,63358,189],{"class":1142},[159,63360,61852],{"class":1146},[159,63362,24233],{"class":165},[159,63364,54385],{"class":8765},[159,63366,189],{"class":1142},[159,63368,61852],{"class":1146},[159,63370,24233],{"class":165},[159,63372,54394],{"class":8765},[159,63374,189],{"class":1142},[159,63376,23949],{"class":1146},[159,63378,24233],{"class":165},[159,63380,54403],{"class":8765},[159,63382,189],{"class":1142},[159,63384,4932],{"class":1146},[159,63386,61442],{"class":165},[159,63388,63389],{"class":161,"line":1788},[159,63390,61447],{"class":165},[159,63392,63393,63395,63397,63399,63401,63403,63405,63407,63409,63411,63413,63415,63417],{"class":161,"line":1802},[159,63394,61492],{"class":165},[159,63396,54394],{"class":8765},[159,63398,189],{"class":1142},[159,63400,11034],{"class":1146},[159,63402,24233],{"class":165},[159,63404,54449],{"class":8765},[159,63406,189],{"class":1142},[159,63408,11034],{"class":1146},[159,63410,24233],{"class":165},[159,63412,54403],{"class":8765},[159,63414,189],{"class":1142},[159,63416,1489],{"class":1146},[159,63418,1165],{"class":165},[159,63420,63421],{"class":161,"line":1815},[159,63422,61521],{"class":165},[159,63424,63425],{"class":161,"line":1828},[159,63426,61991],{"class":1135},[159,63428,63429,63431,63433,63435],{"class":161,"line":1841},[159,63430,54365],{"class":1146},[159,63432,61998],{"class":165},[159,63434,189],{"class":1142},[159,63436,61404],{"class":165},[159,63438,63439,63441,63443,63445,63447,63449,63451,63453,63455,63457,63459,63461,63463,63465,63467,63469,63471],{"class":161,"line":1852},[159,63440,61409],{"class":165},[159,63442,54376],{"class":8765},[159,63444,189],{"class":1142},[159,63446,61852],{"class":1146},[159,63448,24233],{"class":165},[159,63450,54385],{"class":8765},[159,63452,189],{"class":1142},[159,63454,61852],{"class":1146},[159,63456,24233],{"class":165},[159,63458,54394],{"class":8765},[159,63460,189],{"class":1142},[159,63462,23949],{"class":1146},[159,63464,24233],{"class":165},[159,63466,54403],{"class":8765},[159,63468,189],{"class":1142},[159,63470,4932],{"class":1146},[159,63472,61442],{"class":165},[159,63474,63475],{"class":161,"line":1866},[159,63476,61447],{"class":165},[159,63478,63479,63481,63483,63485,63487,63489,63491,63493,63495,63497,63499,63501,63503,63505,63507,63509,63511],{"class":161,"line":1879},[159,63480,61409],{"class":165},[159,63482,54376],{"class":8765},[159,63484,189],{"class":1142},[159,63486,61852],{"class":1146},[159,63488,24233],{"class":165},[159,63490,54385],{"class":8765},[159,63492,189],{"class":1142},[159,63494,61852],{"class":1146},[159,63496,24233],{"class":165},[159,63498,54394],{"class":8765},[159,63500,189],{"class":1142},[159,63502,23949],{"class":1146},[159,63504,24233],{"class":165},[159,63506,54403],{"class":8765},[159,63508,189],{"class":1142},[159,63510,4932],{"class":1146},[159,63512,61442],{"class":165},[159,63514,63515],{"class":161,"line":1884},[159,63516,61447],{"class":165},[159,63518,63519,63521,63523,63525,63527,63529,63531,63533,63535,63537,63539,63541,63543,63545,63547,63549,63551],{"class":161,"line":1889},[159,63520,61409],{"class":165},[159,63522,54376],{"class":8765},[159,63524,189],{"class":1142},[159,63526,61852],{"class":1146},[159,63528,24233],{"class":165},[159,63530,54385],{"class":8765},[159,63532,189],{"class":1142},[159,63534,61852],{"class":1146},[159,63536,24233],{"class":165},[159,63538,54394],{"class":8765},[159,63540,189],{"class":1142},[159,63542,23949],{"class":1146},[159,63544,24233],{"class":165},[159,63546,54403],{"class":8765},[159,63548,189],{"class":1142},[159,63550,4932],{"class":1146},[159,63552,61442],{"class":165},[159,63554,63555],{"class":161,"line":1899},[159,63556,61447],{"class":165},[159,63558,63559,63561,63563,63565,63567,63569,63571,63573,63575,63577,63579,63581,63583],{"class":161,"line":1912},[159,63560,61492],{"class":165},[159,63562,54394],{"class":8765},[159,63564,189],{"class":1142},[159,63566,11034],{"class":1146},[159,63568,24233],{"class":165},[159,63570,54449],{"class":8765},[159,63572,189],{"class":1142},[159,63574,11034],{"class":1146},[159,63576,24233],{"class":165},[159,63578,54403],{"class":8765},[159,63580,189],{"class":1142},[159,63582,1489],{"class":1146},[159,63584,1165],{"class":165},[159,63586,63587],{"class":161,"line":1925},[159,63588,61521],{"class":165},[159,63590,63591],{"class":161,"line":1956},[159,63592,62159],{"class":1135},[159,63594,63595,63597,63599,63601],{"class":161,"line":1971},[159,63596,54365],{"class":1146},[159,63598,62166],{"class":165},[159,63600,189],{"class":1142},[159,63602,61404],{"class":165},[159,63604,63605],{"class":161,"line":1976},[159,63606,62175],{"class":1135},[159,63608,63609],{"class":161,"line":1981},[159,63610,62180],{"class":1135},[159,63612,63613],{"class":161,"line":1989},[159,63614,62185],{"class":165},[159,63616,63617,63619,63621,63623,63625,63627,63629,63631,63633],{"class":161,"line":2001},[159,63618,62190],{"class":165},[159,63620,24224],{"class":1146},[159,63622,4777],{"class":1142},[159,63624,24224],{"class":1146},[159,63626,4777],{"class":1142},[159,63628,61852],{"class":1146},[159,63630,24233],{"class":165},[159,63632,58265],{"class":1146},[159,63634,61442],{"class":165},[159,63636,63637],{"class":161,"line":2006},[159,63638,61447],{"class":165},[159,63640,63641,63643,63645,63647,63649],{"class":161,"line":2015},[159,63642,62190],{"class":165},[159,63644,58265],{"class":1146},[159,63646,24233],{"class":165},[159,63648,55588],{"class":1146},[159,63650,61442],{"class":165},[159,63652,63653],{"class":161,"line":2024},[159,63654,61447],{"class":165},[159,63656,63657,63659,63661,63663,63665],{"class":161,"line":2029},[159,63658,62190],{"class":165},[159,63660,55588],{"class":1146},[159,63662,24233],{"class":165},[159,63664,1964],{"class":1146},[159,63666,1165],{"class":165},[159,63668,63669],{"class":161,"line":2038},[159,63670,61521],{"class":165},[159,63672,63673],{"class":161,"line":2053},[159,63674,590],{"emptyLinePlaceholder":589},[159,63676,63677],{"class":161,"line":2070},[159,63678,62251],{"class":1135},[159,63680,63681],{"class":161,"line":2095},[159,63682,62256],{"class":1135},[159,63684,63685,63687,63689,63691,63693],{"class":161,"line":2104},[159,63686,27032],{"class":1142},[159,63688,62263],{"class":165},[159,63690,49566],{"class":1142},[159,63692,62268],{"class":1146},[159,63694,62271],{"class":165},[159,63696,63697],{"class":161,"line":2120},[159,63698,62276],{"class":1135},[159,63700,63701,63703,63705],{"class":161,"line":2134},[159,63702,28260],{"class":1142},[159,63704,62283],{"class":1146},[159,63706,62286],{"class":165},[159,63708,63709],{"class":161,"line":2143},[159,63710,62291],{"class":1135},[159,63712,63713,63715,63717,63719,63721],{"class":161,"line":2165},[159,63714,62296],{"class":165},[159,63716,62299],{"class":8765},[159,63718,189],{"class":1142},[159,63720,62304],{"class":192},[159,63722,1165],{"class":165},[159,63724,63725],{"class":161,"line":2178},[159,63726,62311],{"class":1135},[159,63728,63729,63731,63733,63735,63737,63739],{"class":161,"line":2191},[159,63730,62316],{"class":1142},[159,63732,62319],{"class":165},[159,63734,62322],{"class":1142},[159,63736,62325],{"class":1142},[159,63738,62328],{"class":1146},[159,63740,27364],{"class":165},[159,63742,63743],{"class":161,"line":2204},[159,63744,62335],{"class":1135},[159,63746,63747,63749,63751],{"class":161,"line":2217},[159,63748,62340],{"class":165},[159,63750,1489],{"class":1146},[159,63752,1165],{"class":165},[159,63754,63755],{"class":161,"line":2230},[159,63756,62349],{"class":1135},[159,63758,63759,63761,63763],{"class":161,"line":2243},[159,63760,62354],{"class":1142},[159,63762,62283],{"class":1146},[159,63764,62359],{"class":165},[159,63766,63767],{"class":161,"line":2256},[159,63768,62364],{"class":1135},[159,63770,63771],{"class":161,"line":2266},[159,63772,62369],{"class":1135},[159,63774,63775,63777,63779,63781,63783],{"class":161,"line":2275},[159,63776,62374],{"class":165},[159,63778,1489],{"class":1146},[159,63780,24233],{"class":165},[159,63782,62381],{"class":1146},[159,63784,1165],{"class":165},[159,63786,63787],{"class":161,"line":2284},[159,63788,62388],{"class":1135},[159,63790,63791,63793,63795,63797,63799,63801],{"class":161,"line":2293},[159,63792,62316],{"class":1142},[159,63794,62319],{"class":165},[159,63796,62322],{"class":1142},[159,63798,62325],{"class":1142},[159,63800,62328],{"class":1146},[159,63802,27364],{"class":165},[159,63804,63805,63807,63809],{"class":161,"line":2306},[159,63806,62340],{"class":165},[159,63808,1489],{"class":1146},[159,63810,1165],{"class":165},[159,63812,63813],{"class":161,"line":2330},[159,63814,590],{"emptyLinePlaceholder":589},[159,63816,63817],{"class":161,"line":2350},[159,63818,58560],{"class":1135},[159,63820,63821,63823,63825],{"class":161,"line":2370},[159,63822,54322],{"class":1142},[159,63824,54613],{"class":185},[159,63826,54616],{"class":165},[159,63828,63829,63831,63833,63835],{"class":161,"line":2390},[159,63830,54621],{"class":165},[159,63832,189],{"class":1142},[159,63834,54344],{"class":1146},[159,63836,62437],{"class":165},[159,63838,63839,63841,63843,63845],{"class":161,"line":2410},[159,63840,54621],{"class":165},[159,63842,189],{"class":1142},[159,63844,54344],{"class":1146},[159,63846,62448],{"class":165},[159,63848,63849,63851,63853,63855],{"class":161,"line":2430},[159,63850,54621],{"class":165},[159,63852,189],{"class":1142},[159,63854,54344],{"class":1146},[159,63856,62459],{"class":165},[159,63858,63859,63861,63863,63865],{"class":161,"line":2450},[159,63860,54621],{"class":165},[159,63862,189],{"class":1142},[159,63864,54344],{"class":1146},[159,63866,62470],{"class":165},[159,63868,63869,63871,63873,63875],{"class":161,"line":2471},[159,63870,54621],{"class":165},[159,63872,189],{"class":1142},[159,63874,54344],{"class":1146},[159,63876,62481],{"class":165},[159,63878,63879,63881,63883,63885],{"class":161,"line":2477},[159,63880,54621],{"class":165},[159,63882,189],{"class":1142},[159,63884,54344],{"class":1146},[159,63886,62492],{"class":165},[159,63888,63889,63891],{"class":161,"line":2498},[159,63890,21176],{"class":1142},[159,63892,54729],{"class":165},[159,63894,63895],{"class":161,"line":2518},[159,63896,590],{"emptyLinePlaceholder":589},[159,63898,63899],{"class":161,"line":2539},[159,63900,62507],{"class":1135},[159,63902,63903,63905,63907,63909,63911],{"class":161,"line":2561},[159,63904,18445],{"class":1142},[159,63906,54740],{"class":1146},[159,63908,26581],{"class":1142},[159,63910,62518],{"class":192},[159,63912,27364],{"class":165},[159,63914,63915,63917,63919,63921,63923,63925,63927,63929,63931],{"class":161,"line":2573},[159,63916,54757],{"class":165},[159,63918,189],{"class":1142},[159,63920,53973],{"class":165},[159,63922,54764],{"class":192},[159,63924,25367],{"class":1142},[159,63926,54769],{"class":165},[159,63928,25364],{"class":1142},[159,63930,53998],{"class":192},[159,63932,1165],{"class":165},[159,63934,63935,63937],{"class":161,"line":2591},[159,63936,54819],{"class":1146},[159,63938,54007],{"class":165},[159,63940,63941,63943,63945],{"class":161,"line":2602},[159,63942,54809],{"class":165},[159,63944,189],{"class":1142},[159,63946,62555],{"class":165},[159,63948,63949,63951,63953,63955,63957,63959,63961,63963],{"class":161,"line":2613},[159,63950,54819],{"class":1146},[159,63952,54822],{"class":165},[159,63954,4932],{"class":1146},[159,63956,24233],{"class":165},[159,63958,55020],{"class":1146},[159,63960,24233],{"class":165},[159,63962,55020],{"class":1146},[159,63964,54835],{"class":165},[134,63966,63967],{"start":203},[106,63968,63969],{},"测试代码",[151,63971,63973],{"className":53900,"code":63972,"language":53902,"meta":25,"style":25},"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",[49,63974,63975,63981,63991,64001,64005,64015,64026,64030,64034,64038,64046,64062,64072,64088,64098,64112,64116,64126,64136,64146,64152,64156,64160,64168,64172,64188,64196,64200,64204,64212,64220,64224,64228,64232,64236,64242,64246,64256,64264,64272,64276,64280,64284,64292,64296,64312,64316,64320,64324,64336,64340,64352,64356,64360,64372,64376,64386,64390,64394,64406,64410,64419,64423,64427,64435,64439,64447,64451,64455,64459,64463,64467,64483,64491,64495,64499,64547,64553,64557,64567,64575,64583,64587,64591,64595,64599,64607,64611,64627,64631,64639,64647],{"__ignoreMap":25},[159,63976,63977,63979],{"class":161,"line":162},[159,63978,53914],{"class":1142},[159,63980,53917],{"class":165},[159,63982,63983,63985,63987,63989],{"class":161,"line":176},[159,63984,53914],{"class":1142},[159,63986,54935],{"class":165},[159,63988,54903],{"class":1142},[159,63990,54940],{"class":165},[159,63992,63993,63995,63997,63999],{"class":161,"line":203},[159,63994,54258],{"class":1142},[159,63996,54918],{"class":165},[159,63998,53914],{"class":1142},[159,64000,54923],{"class":165},[159,64002,64003],{"class":161,"line":223},[159,64004,57317],{"class":1135},[159,64006,64007,64009,64011,64013],{"class":161,"line":233},[159,64008,54258],{"class":1142},[159,64010,54888],{"class":165},[159,64012,53914],{"class":1142},[159,64014,54893],{"class":165},[159,64016,64017,64019,64021,64023],{"class":161,"line":239},[159,64018,54258],{"class":1142},[159,64020,55432],{"class":165},[159,64022,53914],{"class":1142},[159,64024,64025],{"class":1146}," VGG16\n",[159,64027,64028],{"class":161,"line":245},[159,64029,590],{"emptyLinePlaceholder":589},[159,64031,64032],{"class":161,"line":251},[159,64033,590],{"emptyLinePlaceholder":589},[159,64035,64036],{"class":161,"line":261},[159,64037,57346],{"class":1135},[159,64039,64040,64042,64044],{"class":161,"line":603},[159,64041,55465],{"class":1142},[159,64043,57353],{"class":185},[159,64045,55471],{"class":165},[159,64047,64048,64050,64052,64054,64056,64058,64060],{"class":161,"line":621},[159,64049,57360],{"class":165},[159,64051,189],{"class":1142},[159,64053,54975],{"class":165},[159,64055,54978],{"class":8765},[159,64057,189],{"class":1142},[159,64059,54983],{"class":192},[159,64061,17070],{"class":165},[159,64063,64064,64066,64068,64070],{"class":161,"line":634},[159,64065,57377],{"class":8765},[159,64067,189],{"class":1142},[159,64069,57382],{"class":1146},[159,64071,17070],{"class":165},[159,64073,64074,64076,64078,64080,64082,64084,64086],{"class":161,"line":640},[159,64075,57389],{"class":8765},[159,64077,189],{"class":1142},[159,64079,55012],{"class":165},[159,64081,55015],{"class":8765},[159,64083,189],{"class":1142},[159,64085,55020],{"class":1146},[159,64087,55023],{"class":165},[159,64089,64090,64092,64094,64096],{"class":161,"line":1075},[159,64091,57406],{"class":8765},[159,64093,189],{"class":1142},[159,64095,54995],{"class":1146},[159,64097,1165],{"class":165},[159,64099,64100,64102,64104,64106,64108,64110],{"class":161,"line":1081},[159,64101,57417],{"class":165},[159,64103,189],{"class":1142},[159,64105,55053],{"class":165},[159,64107,55056],{"class":8765},[159,64109,189],{"class":1142},[159,64111,57428],{"class":165},[159,64113,64114],{"class":161,"line":1091},[159,64115,57433],{"class":1135},[159,64117,64118,64120,64122,64124],{"class":161,"line":1100},[159,64119,57438],{"class":8765},[159,64121,189],{"class":1142},[159,64123,4932],{"class":1146},[159,64125,17070],{"class":165},[159,64127,64128,64130,64132,64134],{"class":161,"line":1123},[159,64129,57449],{"class":8765},[159,64131,189],{"class":1142},[159,64133,54995],{"class":1146},[159,64135,17070],{"class":165},[159,64137,64138,64140,64142,64144],{"class":161,"line":1132},[159,64139,57460],{"class":8765},[159,64141,189],{"class":1142},[159,64143,1489],{"class":1146},[159,64145,1165],{"class":165},[159,64147,64148,64150],{"class":161,"line":1139},[159,64149,27711],{"class":1142},[159,64151,57473],{"class":165},[159,64153,64154],{"class":161,"line":1168},[159,64155,590],{"emptyLinePlaceholder":589},[159,64157,64158],{"class":161,"line":1174},[159,64159,57482],{"class":1135},[159,64161,64162,64164,64166],{"class":161,"line":1180},[159,64163,55465],{"class":1142},[159,64165,57489],{"class":185},[159,64167,57492],{"class":165},[159,64169,64170],{"class":161,"line":1194},[159,64171,57497],{"class":1135},[159,64173,64174,64176,64178,64180,64182,64184,64186],{"class":161,"line":1200},[159,64175,54757],{"class":165},[159,64177,189],{"class":1142},[159,64179,54764],{"class":192},[159,64181,25367],{"class":1142},[159,64183,54769],{"class":165},[159,64185,25364],{"class":1142},[159,64187,57514],{"class":192},[159,64189,64190,64192,64194],{"class":161,"line":1221},[159,64191,54809],{"class":165},[159,64193,189],{"class":1142},[159,64195,55807],{"class":165},[159,64197,64198],{"class":161,"line":1230},[159,64199,590],{"emptyLinePlaceholder":589},[159,64201,64202],{"class":161,"line":1247},[159,64203,57531],{"class":1135},[159,64205,64206,64208,64210],{"class":161,"line":1265},[159,64207,57536],{"class":165},[159,64209,189],{"class":1142},[159,64211,55860],{"class":1146},[159,64213,64214,64216,64218],{"class":161,"line":1277},[159,64215,57545],{"class":165},[159,64217,189],{"class":1142},[159,64219,26716],{"class":1146},[159,64221,64222],{"class":161,"line":1283},[159,64223,590],{"emptyLinePlaceholder":589},[159,64225,64226],{"class":161,"line":1294},[159,64227,57558],{"class":1135},[159,64229,64230],{"class":161,"line":1305},[159,64231,57563],{"class":1135},[159,64233,64234],{"class":161,"line":1311},[159,64235,57568],{"class":1135},[159,64237,64238,64240],{"class":161,"line":1322},[159,64239,57573],{"class":1142},[159,64241,56372],{"class":165},[159,64243,64244],{"class":161,"line":1327},[159,64245,57580],{"class":1135},[159,64247,64248,64250,64252,64254],{"class":161,"line":1336},[159,64249,27032],{"class":1142},[159,64251,57587],{"class":165},[159,64253,49566],{"class":1142},[159,64255,57592],{"class":165},[159,64257,64258,64260,64262],{"class":161,"line":1345},[159,64259,57597],{"class":165},[159,64261,189],{"class":1142},[159,64263,57602],{"class":165},[159,64265,64266,64268,64270],{"class":161,"line":1350},[159,64267,57607],{"class":165},[159,64269,189],{"class":1142},[159,64271,57612],{"class":165},[159,64273,64274],{"class":161,"line":1764},[159,64275,57617],{"class":1135},[159,64277,64278],{"class":161,"line":1769},[159,64279,56364],{"class":165},[159,64281,64282],{"class":161,"line":1777},[159,64283,57626],{"class":1135},[159,64285,64286,64288,64290],{"class":161,"line":1788},[159,64287,56173],{"class":165},[159,64289,189],{"class":1142},[159,64291,57635],{"class":165},[159,64293,64294],{"class":161,"line":1802},[159,64295,57640],{"class":1135},[159,64297,64298,64300,64302,64304,64306,64308,64310],{"class":161,"line":1815},[159,64299,56188],{"class":165},[159,64301,189],{"class":1142},[159,64303,56193],{"class":165},[159,64305,56196],{"class":8765},[159,64307,189],{"class":1142},[159,64309,4932],{"class":1146},[159,64311,1165],{"class":165},[159,64313,64314],{"class":161,"line":1828},[159,64315,57661],{"class":1135},[159,64317,64318],{"class":161,"line":1841},[159,64319,57666],{"class":1135},[159,64321,64322],{"class":161,"line":1852},[159,64323,57671],{"class":1135},[159,64325,64326,64328,64330,64332,64334],{"class":161,"line":1866},[159,64327,57676],{"class":165},[159,64329,33073],{"class":1142},[159,64331,56286],{"class":165},[159,64333,26581],{"class":1142},[159,64335,57685],{"class":165},[159,64337,64338],{"class":161,"line":1879},[159,64339,57690],{"class":1135},[159,64341,64342,64344,64346,64348,64350],{"class":161,"line":1884},[159,64343,57695],{"class":165},[159,64345,33073],{"class":1142},[159,64347,57700],{"class":165},[159,64349,1489],{"class":1146},[159,64351,1165],{"class":165},[159,64353,64354],{"class":161,"line":1889},[159,64355,590],{"emptyLinePlaceholder":589},[159,64357,64358],{"class":161,"line":1899},[159,64359,57713],{"class":1135},[159,64361,64362,64364,64366,64368,64370],{"class":161,"line":1912},[159,64363,57718],{"class":165},[159,64365,189],{"class":1142},[159,64367,57723],{"class":165},[159,64369,13083],{"class":1142},[159,64371,57728],{"class":165},[159,64373,64374],{"class":161,"line":1925},[159,64375,57733],{"class":1135},[159,64377,64378,64380,64382,64384],{"class":161,"line":1956},[159,64379,55969],{"class":1146},[159,64381,1159],{"class":165},[159,64383,57742],{"class":192},[159,64385,57745],{"class":165},[159,64387,64388],{"class":161,"line":1971},[159,64389,590],{"emptyLinePlaceholder":589},[159,64391,64392],{"class":161,"line":1976},[159,64393,57754],{"class":1135},[159,64395,64396,64398,64400,64402,64404],{"class":161,"line":1981},[159,64397,18445],{"class":1142},[159,64399,54740],{"class":1146},[159,64401,26581],{"class":1142},[159,64403,54745],{"class":192},[159,64405,27364],{"class":165},[159,64407,64408],{"class":161,"line":1989},[159,64409,57771],{"class":1135},[159,64411,64412,64414,64416],{"class":161,"line":2001},[159,64413,54809],{"class":165},[159,64415,189],{"class":1142},[159,64417,64418],{"class":165},"VGG16()\n",[159,64420,64421],{"class":161,"line":2006},[159,64422,57784],{"class":1135},[159,64424,64425],{"class":161,"line":2015},[159,64426,57789],{"class":1135},[159,64428,64429,64431,64433],{"class":161,"line":2024},[159,64430,57794],{"class":165},[159,64432,57797],{"class":192},[159,64434,18787],{"class":165},[159,64436,64437],{"class":161,"line":2029},[159,64438,57804],{"class":1135},[159,64440,64441,64443,64445],{"class":161,"line":2038},[159,64442,57417],{"class":165},[159,64444,189],{"class":1142},[159,64446,57813],{"class":165},[159,64448,64449],{"class":161,"line":2053},[159,64450,57818],{"class":1135},[159,64452,64453],{"class":161,"line":2070},[159,64454,57823],{"class":165},[159,64456,64457],{"class":161,"line":2095},[159,64458,590],{"emptyLinePlaceholder":589},[159,64460,64461],{"class":161,"line":2104},[159,64462,57832],{"class":1135},[159,64464,64465],{"class":161,"line":2120},[159,64466,57837],{"class":1135},[159,64468,64469,64471,64473,64475,64477,64479,64481],{"class":161,"line":2134},[159,64470,54757],{"class":165},[159,64472,189],{"class":1142},[159,64474,54764],{"class":192},[159,64476,25367],{"class":1142},[159,64478,54769],{"class":165},[159,64480,25364],{"class":1142},[159,64482,57514],{"class":192},[159,64484,64485,64487,64489],{"class":161,"line":2143},[159,64486,54809],{"class":165},[159,64488,189],{"class":1142},[159,64490,55807],{"class":165},[159,64492,64493],{"class":161,"line":2165},[159,64494,57866],{"class":1135},[159,64496,64497],{"class":161,"line":2178},[159,64498,57871],{"class":1135},[159,64500,64501,64503,64505,64507,64509,64511,64513,64515,64517,64519,64521,64523,64525,64527,64529,64531,64533,64535,64537,64539,64541,64543,64545],{"class":161,"line":2191},[159,64502,57876],{"class":165},[159,64504,189],{"class":1142},[159,64506,17263],{"class":165},[159,64508,57883],{"class":192},[159,64510,24233],{"class":165},[159,64512,57888],{"class":192},[159,64514,24233],{"class":165},[159,64516,57893],{"class":192},[159,64518,24233],{"class":165},[159,64520,57898],{"class":192},[159,64522,24233],{"class":165},[159,64524,57903],{"class":192},[159,64526,24233],{"class":165},[159,64528,57908],{"class":192},[159,64530,24233],{"class":165},[159,64532,57913],{"class":192},[159,64534,24233],{"class":165},[159,64536,57918],{"class":192},[159,64538,24233],{"class":165},[159,64540,57923],{"class":192},[159,64542,24233],{"class":165},[159,64544,57928],{"class":192},[159,64546,4634],{"class":165},[159,64548,64549,64551],{"class":161,"line":2204},[159,64550,57573],{"class":1142},[159,64552,56372],{"class":165},[159,64554,64555],{"class":161,"line":2217},[159,64556,57941],{"class":1135},[159,64558,64559,64561,64563,64565],{"class":161,"line":2230},[159,64560,27032],{"class":1142},[159,64562,57948],{"class":165},[159,64564,49566],{"class":1142},[159,64566,57592],{"class":165},[159,64568,64569,64571,64573],{"class":161,"line":2243},[159,64570,56128],{"class":165},[159,64572,189],{"class":1142},[159,64574,56133],{"class":165},[159,64576,64577,64579,64581],{"class":161,"line":2256},[159,64578,56143],{"class":165},[159,64580,189],{"class":1142},[159,64582,56148],{"class":165},[159,64584,64585],{"class":161,"line":2266},[159,64586,590],{"emptyLinePlaceholder":589},[159,64588,64589],{"class":161,"line":2275},[159,64590,57977],{"class":1135},[159,64592,64593],{"class":161,"line":2284},[159,64594,56364],{"class":165},[159,64596,64597],{"class":161,"line":2293},[159,64598,57986],{"class":1135},[159,64600,64601,64603,64605],{"class":161,"line":2306},[159,64602,56173],{"class":165},[159,64604,189],{"class":1142},[159,64606,56178],{"class":165},[159,64608,64609],{"class":161,"line":2330},[159,64610,57999],{"class":1135},[159,64612,64613,64615,64617,64619,64621,64623,64625],{"class":161,"line":2350},[159,64614,56188],{"class":165},[159,64616,189],{"class":1142},[159,64618,56193],{"class":165},[159,64620,56196],{"class":8765},[159,64622,189],{"class":1142},[159,64624,4932],{"class":1146},[159,64626,1165],{"class":165},[159,64628,64629],{"class":161,"line":2370},[159,64630,58020],{"class":1135},[159,64632,64633,64635,64637],{"class":161,"line":2390},[159,64634,58025],{"class":165},[159,64636,189],{"class":1142},[159,64638,58030],{"class":165},[159,64640,64641,64643,64645],{"class":161,"line":2410},[159,64642,58035],{"class":165},[159,64644,189],{"class":1142},[159,64646,58040],{"class":165},[159,64648,64649,64651,64653,64655,64657,64659,64661,64663],{"class":161,"line":2430},[159,64650,58045],{"class":1146},[159,64652,1159],{"class":165},[159,64654,58050],{"class":192},[159,64656,58053],{"class":165},[159,64658,58056],{"class":192},[159,64660,24233],{"class":165},[159,64662,58061],{"class":192},[159,64664,58064],{"class":165},[42,64666,64668],{"id":64667},"_23googlenet","2.3.GoogLeNet",[326,64670,64672],{"id":64671},"_231原理","2.3.1.原理",[134,64674,64675],{},[106,64676,64677],{},"网络结构",[14,64679,64680],{},[23,64681],{"alt":25,"src":64682},"\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",[14,64684,64685],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,64687,64688],{},[23,64689],{"alt":25,"src":64690},"\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",[14,64692,64693],{},[23,64694],{"alt":25,"src":64695},"\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",[14,64697,64698],{},[23,64699],{"alt":25,"src":64700},"\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",[134,64702,64703],{"start":176},[106,64704,64705],{},"1x1卷积的优点",[14,64707,64708],{},[23,64709],{"alt":25,"src":64710},"\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",[134,64712,64713],{"start":203},[106,64714,64715],{},"全局平均池化层优点",[14,64717,64718],{},[23,64719],{"alt":25,"src":64720},"\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",[14,64722,64723],{},[23,64724],{"alt":25,"src":64725},"\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",[134,64727,64728],{"start":223},[106,64729,64730],{},"参数详细描述",[14,64732,64733],{},[23,64734],{"alt":25,"src":64735},"\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",[14,64737,64738],{},[23,64739],{"alt":25,"src":64740},"\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",[14,64742,64743],{},[23,64744],{"alt":25,"src":64745},"\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",[14,64747,64748],{},[23,64749],{"alt":25,"src":64750},"\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",[14,64752,64753],{},[23,64754],{"alt":25,"src":64755},"\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",[14,64757,64758],{},[23,64759],{"alt":25,"src":64760},"\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",[14,64762,64763],{},[23,64764],{"alt":25,"src":64765},"\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",[14,64767,64768],{},[23,64769],{"alt":25,"src":64770},"\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",[14,64772,64773],{},[23,64774],{"alt":25,"src":64775},"\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",[14,64777,64778],{},[23,64779],{"alt":25,"src":64780},"\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",[14,64782,64783],{},[23,64784],{"alt":25,"src":64785},"\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",[14,64787,64788],{},[23,64789],{"alt":25,"src":64790},"\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",[14,64792,64793],{},[23,64794],{"alt":25,"src":64795},"\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",[14,64797,64798],{},[23,64799],{"alt":25,"src":64800},"\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",[14,64802,64803],{},[23,64804],{"alt":25,"src":64805},"\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",[14,64807,64808],{},[23,64809],{"alt":25,"src":64810},"\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",[14,64812,64813],{},[23,64814],{"alt":25,"src":64815},"\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",[14,64817,64818],{},[23,64819],{"alt":25,"src":64820},"\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",[14,64822,64823],{},[23,64824],{"alt":25,"src":64825},"\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",[14,64827,64828],{},[23,64829],{"alt":25,"src":64830},"\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",[14,64832,64833],{},[23,64834],{"alt":25,"src":64835},"\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",[326,64837,64839],{"id":64838},"_232代码实现","2.3.2.代码实现",[134,64841,64842],{},[106,64843,54232],{},[14,64845,64846],{},"根据原理一步一步搭建即可",[151,64848,64850],{"className":53900,"code":64849,"language":53902,"meta":25,"style":25},"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",[49,64851,64852,64858,64868,64878,64882,64899,64908,64923,64933,64938,64971,64976,65013,65060,65065,65101,65148,65153,65158,65193,65225,65229,65237,65253,65277,65302,65323,65328,65343,65347,65351,65356,65373,65378,65387,65402,65413,65457,65461,65489,65493,65504,65532,65536,65573,65577,65605,65609,65620,65656,65688,65716,65720,65731,65765,65797,65829,65862,65896,65924,65928,65939,65972,66004,66018,66022,66035,66039,66044,66056,66064,66086,66091,66096,66101,66106,66111,66116,66130,66138,66147,66160,66175,66184,66188,66196,66207,66218,66229,66240,66251,66257,66261,66266,66278,66298,66307],{"__ignoreMap":25},[159,64853,64854,64856],{"class":161,"line":162},[159,64855,53914],{"class":1142},[159,64857,53917],{"class":165},[159,64859,64860,64862,64864,64866],{"class":161,"line":176},[159,64861,54258],{"class":1142},[159,64863,54261],{"class":165},[159,64865,53914],{"class":1142},[159,64867,54266],{"class":165},[159,64869,64870,64872,64874,64876],{"class":161,"line":203},[159,64871,54258],{"class":1142},[159,64873,54278],{"class":165},[159,64875,53914],{"class":1142},[159,64877,54283],{"class":165},[159,64879,64880],{"class":161,"line":223},[159,64881,590],{"emptyLinePlaceholder":589},[159,64883,64884,64886,64889,64891,64893,64895,64897],{"class":161,"line":233},[159,64885,38260],{"class":1142},[159,64887,64888],{"class":185}," Inception",[159,64890,1159],{"class":165},[159,64892,54299],{"class":185},[159,64894,9952],{"class":165},[159,64896,54304],{"class":185},[159,64898,54307],{"class":165},[159,64900,64901,64903,64905],{"class":161,"line":239},[159,64902,54322],{"class":1142},[159,64904,54325],{"class":1146},[159,64906,64907],{"class":165},"(self,in_channels,c1,c2,c3,c4):\n",[159,64909,64910,64912,64915,64917,64919,64921],{"class":161,"line":245},[159,64911,54338],{"class":1146},[159,64913,64914],{"class":165},"(Inception,",[159,64916,54344],{"class":1146},[159,64918,13019],{"class":165},[159,64920,54349],{"class":1146},[159,64922,5158],{"class":165},[159,64924,64925,64927,64929,64931],{"class":161,"line":251},[159,64926,54365],{"class":1146},[159,64928,58166],{"class":165},[159,64930,189],{"class":1142},[159,64932,58171],{"class":165},[159,64934,64935],{"class":161,"line":261},[159,64936,64937],{"class":1135},"        # 路线1：定义1*1卷积\n",[159,64939,64940,64942,64945,64947,64949,64951,64953,64956,64958,64960,64963,64965,64967,64969],{"class":161,"line":603},[159,64941,54365],{"class":1146},[159,64943,64944],{"class":165},".p1_1",[159,64946,189],{"class":1142},[159,64948,54373],{"class":165},[159,64950,54376],{"class":8765},[159,64952,189],{"class":1142},[159,64954,64955],{"class":165},"in_channels,",[159,64957,54385],{"class":8765},[159,64959,189],{"class":1142},[159,64961,64962],{"class":165},"c1,",[159,64964,54394],{"class":8765},[159,64966,189],{"class":1142},[159,64968,4932],{"class":1146},[159,64970,1165],{"class":165},[159,64972,64973],{"class":161,"line":621},[159,64974,64975],{"class":1135},"        # 路线2：定义1*1卷积和3*3\n",[159,64977,64978,64980,64983,64985,64987,64989,64991,64993,64995,64997,65000,65002,65005,65007,65009,65011],{"class":161,"line":634},[159,64979,54365],{"class":1146},[159,64981,64982],{"class":165},".p2_1",[159,64984,189],{"class":1142},[159,64986,54373],{"class":165},[159,64988,54376],{"class":8765},[159,64990,189],{"class":1142},[159,64992,64955],{"class":165},[159,64994,54385],{"class":8765},[159,64996,189],{"class":1142},[159,64998,64999],{"class":165},"c2[",[159,65001,1489],{"class":1146},[159,65003,65004],{"class":165},"],",[159,65006,54394],{"class":8765},[159,65008,189],{"class":1142},[159,65010,4932],{"class":1146},[159,65012,1165],{"class":165},[159,65014,65015,65017,65020,65022,65024,65026,65028,65030,65032,65034,65036,65038,65040,65042,65044,65046,65048,65050,65052,65054,65056,65058],{"class":161,"line":640},[159,65016,54365],{"class":1146},[159,65018,65019],{"class":165},".p2_2",[159,65021,189],{"class":1142},[159,65023,54373],{"class":165},[159,65025,54376],{"class":8765},[159,65027,189],{"class":1142},[159,65029,64999],{"class":165},[159,65031,1489],{"class":1146},[159,65033,65004],{"class":165},[159,65035,54385],{"class":8765},[159,65037,189],{"class":1142},[159,65039,64999],{"class":165},[159,65041,4932],{"class":1146},[159,65043,65004],{"class":165},[159,65045,54394],{"class":8765},[159,65047,189],{"class":1142},[159,65049,23949],{"class":1146},[159,65051,24233],{"class":165},[159,65053,54403],{"class":8765},[159,65055,189],{"class":1142},[159,65057,4932],{"class":1146},[159,65059,1165],{"class":165},[159,65061,65062],{"class":161,"line":1075},[159,65063,65064],{"class":1135},"        # 路线3：定义1*1卷积和5*5\n",[159,65066,65067,65069,65072,65074,65076,65078,65080,65082,65084,65086,65089,65091,65093,65095,65097,65099],{"class":161,"line":1081},[159,65068,54365],{"class":1146},[159,65070,65071],{"class":165},".p3_1",[159,65073,189],{"class":1142},[159,65075,54373],{"class":165},[159,65077,54376],{"class":8765},[159,65079,189],{"class":1142},[159,65081,64955],{"class":165},[159,65083,54385],{"class":8765},[159,65085,189],{"class":1142},[159,65087,65088],{"class":165},"c3[",[159,65090,1489],{"class":1146},[159,65092,65004],{"class":165},[159,65094,54394],{"class":8765},[159,65096,189],{"class":1142},[159,65098,4932],{"class":1146},[159,65100,1165],{"class":165},[159,65102,65103,65105,65108,65110,65112,65114,65116,65118,65120,65122,65124,65126,65128,65130,65132,65134,65136,65138,65140,65142,65144,65146],{"class":161,"line":1091},[159,65104,54365],{"class":1146},[159,65106,65107],{"class":165},".p3_2",[159,65109,189],{"class":1142},[159,65111,54373],{"class":165},[159,65113,54376],{"class":8765},[159,65115,189],{"class":1142},[159,65117,65088],{"class":165},[159,65119,1489],{"class":1146},[159,65121,65004],{"class":165},[159,65123,54385],{"class":8765},[159,65125,189],{"class":1142},[159,65127,65088],{"class":165},[159,65129,4932],{"class":1146},[159,65131,65004],{"class":165},[159,65133,54394],{"class":8765},[159,65135,189],{"class":1142},[159,65137,1753],{"class":1146},[159,65139,24233],{"class":165},[159,65141,54403],{"class":8765},[159,65143,189],{"class":1142},[159,65145,11034],{"class":1146},[159,65147,1165],{"class":165},[159,65149,65150],{"class":161,"line":1100},[159,65151,65152],{"class":1135},"        # 路线4：定义3*3最大池化和1*1卷积\n",[159,65154,65155],{"class":161,"line":1123},[159,65156,65157],{"class":1135},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[159,65159,65160,65162,65165,65167,65169,65171,65173,65175,65177,65179,65181,65183,65185,65187,65189,65191],{"class":161,"line":1132},[159,65161,54365],{"class":1146},[159,65163,65164],{"class":165},".p4_1",[159,65166,189],{"class":1142},[159,65168,58224],{"class":165},[159,65170,54394],{"class":8765},[159,65172,189],{"class":1142},[159,65174,23949],{"class":1146},[159,65176,24233],{"class":165},[159,65178,54449],{"class":8765},[159,65180,189],{"class":1142},[159,65182,4932],{"class":1146},[159,65184,24233],{"class":165},[159,65186,54403],{"class":8765},[159,65188,189],{"class":1142},[159,65190,4932],{"class":1146},[159,65192,1165],{"class":165},[159,65194,65195,65197,65200,65202,65204,65206,65208,65210,65212,65214,65217,65219,65221,65223],{"class":161,"line":1139},[159,65196,54365],{"class":1146},[159,65198,65199],{"class":165},".p4_2",[159,65201,189],{"class":1142},[159,65203,54373],{"class":165},[159,65205,54376],{"class":8765},[159,65207,189],{"class":1142},[159,65209,64955],{"class":165},[159,65211,54385],{"class":8765},[159,65213,189],{"class":1142},[159,65215,65216],{"class":165},"c4,",[159,65218,54394],{"class":8765},[159,65220,189],{"class":1142},[159,65222,4932],{"class":1146},[159,65224,1165],{"class":165},[159,65226,65227],{"class":161,"line":1168},[159,65228,590],{"emptyLinePlaceholder":589},[159,65230,65231,65233,65235],{"class":161,"line":1174},[159,65232,54322],{"class":1142},[159,65234,54613],{"class":185},[159,65236,54616],{"class":165},[159,65238,65239,65242,65244,65246,65248,65250],{"class":161,"line":1180},[159,65240,65241],{"class":165},"        p1",[159,65243,189],{"class":1142},[159,65245,54344],{"class":1146},[159,65247,58579],{"class":165},[159,65249,54344],{"class":1146},[159,65251,65252],{"class":165},".p1_1(x))\n",[159,65254,65255,65257,65259,65261,65263,65265,65268,65270,65272,65274],{"class":161,"line":1194},[159,65256,30696],{"class":165},[159,65258,189],{"class":1142},[159,65260,54344],{"class":1146},[159,65262,58579],{"class":165},[159,65264,54344],{"class":1146},[159,65266,65267],{"class":165},".p2_2(",[159,65269,54344],{"class":1146},[159,65271,58579],{"class":165},[159,65273,54344],{"class":1146},[159,65275,65276],{"class":165},".p2_1(x))))\n",[159,65278,65279,65282,65284,65286,65288,65290,65293,65295,65297,65299],{"class":161,"line":1200},[159,65280,65281],{"class":165},"        p3",[159,65283,189],{"class":1142},[159,65285,54344],{"class":1146},[159,65287,58579],{"class":165},[159,65289,54344],{"class":1146},[159,65291,65292],{"class":165},".p3_2(",[159,65294,54344],{"class":1146},[159,65296,58579],{"class":165},[159,65298,54344],{"class":1146},[159,65300,65301],{"class":165},".p3_1(x))))\n",[159,65303,65304,65307,65309,65311,65313,65315,65318,65320],{"class":161,"line":1221},[159,65305,65306],{"class":165},"        p4",[159,65308,189],{"class":1142},[159,65310,54344],{"class":1146},[159,65312,58579],{"class":165},[159,65314,54344],{"class":1146},[159,65316,65317],{"class":165},".p4_2(",[159,65319,54344],{"class":1146},[159,65321,65322],{"class":165},".p4_1(x)))\n",[159,65324,65325],{"class":161,"line":1230},[159,65326,65327],{"class":1135},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[159,65329,65330,65332,65335,65337,65339,65341],{"class":161,"line":1247},[159,65331,21176],{"class":1142},[159,65333,65334],{"class":165}," torch.cat((p1,p2,p3,p4),",[159,65336,56196],{"class":8765},[159,65338,189],{"class":1142},[159,65340,4932],{"class":1146},[159,65342,1165],{"class":165},[159,65344,65345],{"class":161,"line":1265},[159,65346,590],{"emptyLinePlaceholder":589},[159,65348,65349],{"class":161,"line":1277},[159,65350,590],{"emptyLinePlaceholder":589},[159,65352,65353],{"class":161,"line":1283},[159,65354,65355],{"class":1135},"# 搭建GoogLeNet网络\n",[159,65357,65358,65360,65363,65365,65367,65369,65371],{"class":161,"line":1294},[159,65359,38260],{"class":1142},[159,65361,65362],{"class":185}," GoogLeNet",[159,65364,1159],{"class":165},[159,65366,54299],{"class":185},[159,65368,9952],{"class":165},[159,65370,54304],{"class":185},[159,65372,54307],{"class":165},[159,65374,65375],{"class":161,"line":1305},[159,65376,65377],{"class":1135},"    # 必须把Inception导入到里边\n",[159,65379,65380,65382,65384],{"class":161,"line":1311},[159,65381,54322],{"class":1142},[159,65383,54325],{"class":1146},[159,65385,65386],{"class":165},"(self,Inception):\n",[159,65388,65389,65391,65394,65396,65398,65400],{"class":161,"line":1322},[159,65390,54338],{"class":1146},[159,65392,65393],{"class":165},"(GoogLeNet,",[159,65395,54344],{"class":1146},[159,65397,13019],{"class":165},[159,65399,54349],{"class":1146},[159,65401,5158],{"class":165},[159,65403,65404,65406,65409,65411],{"class":161,"line":1327},[159,65405,54365],{"class":1146},[159,65407,65408],{"class":165},".b1",[159,65410,189],{"class":1142},[159,65412,61404],{"class":165},[159,65414,65415,65417,65419,65421,65423,65425,65427,65429,65431,65433,65435,65437,65439,65441,65443,65445,65447,65449,65451,65453,65455],{"class":161,"line":1336},[159,65416,61409],{"class":165},[159,65418,54376],{"class":8765},[159,65420,189],{"class":1142},[159,65422,4932],{"class":1146},[159,65424,24233],{"class":165},[159,65426,54385],{"class":8765},[159,65428,189],{"class":1142},[159,65430,24070],{"class":1146},[159,65432,24233],{"class":165},[159,65434,54394],{"class":8765},[159,65436,189],{"class":1142},[159,65438,24224],{"class":1146},[159,65440,24233],{"class":165},[159,65442,54449],{"class":8765},[159,65444,189],{"class":1142},[159,65446,11034],{"class":1146},[159,65448,24233],{"class":165},[159,65450,54403],{"class":8765},[159,65452,189],{"class":1142},[159,65454,23949],{"class":1146},[159,65456,61442],{"class":165},[159,65458,65459],{"class":161,"line":1345},[159,65460,61447],{"class":165},[159,65462,65463,65465,65467,65469,65471,65473,65475,65477,65479,65481,65483,65485,65487],{"class":161,"line":1350},[159,65464,61492],{"class":165},[159,65466,54394],{"class":8765},[159,65468,189],{"class":1142},[159,65470,23949],{"class":1146},[159,65472,24233],{"class":165},[159,65474,54449],{"class":8765},[159,65476,189],{"class":1142},[159,65478,11034],{"class":1146},[159,65480,24233],{"class":165},[159,65482,54403],{"class":8765},[159,65484,189],{"class":1142},[159,65486,4932],{"class":1146},[159,65488,1165],{"class":165},[159,65490,65491],{"class":161,"line":1764},[159,65492,61521],{"class":165},[159,65494,65495,65497,65500,65502],{"class":161,"line":1769},[159,65496,54365],{"class":1146},[159,65498,65499],{"class":165},".b2",[159,65501,189],{"class":1142},[159,65503,61404],{"class":165},[159,65505,65506,65508,65510,65512,65514,65516,65518,65520,65522,65524,65526,65528,65530],{"class":161,"line":1777},[159,65507,61409],{"class":165},[159,65509,54376],{"class":8765},[159,65511,189],{"class":1142},[159,65513,24070],{"class":1146},[159,65515,24233],{"class":165},[159,65517,54385],{"class":8765},[159,65519,189],{"class":1142},[159,65521,24070],{"class":1146},[159,65523,24233],{"class":165},[159,65525,54394],{"class":8765},[159,65527,189],{"class":1142},[159,65529,4932],{"class":1146},[159,65531,61442],{"class":165},[159,65533,65534],{"class":161,"line":1788},[159,65535,61447],{"class":165},[159,65537,65538,65540,65542,65544,65546,65548,65550,65552,65555,65557,65559,65561,65563,65565,65567,65569,65571],{"class":161,"line":1802},[159,65539,61409],{"class":165},[159,65541,54376],{"class":8765},[159,65543,189],{"class":1142},[159,65545,24070],{"class":1146},[159,65547,24233],{"class":165},[159,65549,54385],{"class":8765},[159,65551,189],{"class":1142},[159,65553,65554],{"class":1146},"192",[159,65556,24233],{"class":165},[159,65558,54394],{"class":8765},[159,65560,189],{"class":1142},[159,65562,23949],{"class":1146},[159,65564,24233],{"class":165},[159,65566,54403],{"class":8765},[159,65568,189],{"class":1142},[159,65570,4932],{"class":1146},[159,65572,61442],{"class":165},[159,65574,65575],{"class":161,"line":1815},[159,65576,61447],{"class":165},[159,65578,65579,65581,65583,65585,65587,65589,65591,65593,65595,65597,65599,65601,65603],{"class":161,"line":1828},[159,65580,61492],{"class":165},[159,65582,54394],{"class":8765},[159,65584,189],{"class":1142},[159,65586,23949],{"class":1146},[159,65588,24233],{"class":165},[159,65590,54449],{"class":8765},[159,65592,189],{"class":1142},[159,65594,11034],{"class":1146},[159,65596,24233],{"class":165},[159,65598,54403],{"class":8765},[159,65600,189],{"class":1142},[159,65602,4932],{"class":1146},[159,65604,1165],{"class":165},[159,65606,65607],{"class":161,"line":1841},[159,65608,61521],{"class":165},[159,65610,65611,65613,65616,65618],{"class":161,"line":1852},[159,65612,54365],{"class":1146},[159,65614,65615],{"class":165},".b3",[159,65617,189],{"class":1142},[159,65619,61404],{"class":165},[159,65621,65622,65625,65627,65629,65631,65634,65636,65638,65640,65643,65645,65647,65649,65652,65654],{"class":161,"line":1866},[159,65623,65624],{"class":165},"            Inception(",[159,65626,65554],{"class":1146},[159,65628,24233],{"class":165},[159,65630,24070],{"class":1146},[159,65632,65633],{"class":165},",(",[159,65635,24076],{"class":1146},[159,65637,24233],{"class":165},[159,65639,55588],{"class":1146},[159,65641,65642],{"class":165},"),(",[159,65644,24439],{"class":1146},[159,65646,24233],{"class":165},[159,65648,24064],{"class":1146},[159,65650,65651],{"class":165},"),",[159,65653,24064],{"class":1146},[159,65655,61442],{"class":165},[159,65657,65658,65660,65662,65664,65666,65668,65670,65672,65674,65676,65678,65680,65682,65684,65686],{"class":161,"line":1879},[159,65659,65624],{"class":165},[159,65661,58265],{"class":1146},[159,65663,24233],{"class":165},[159,65665,55588],{"class":1146},[159,65667,65633],{"class":165},[159,65669,55588],{"class":1146},[159,65671,24233],{"class":165},[159,65673,65554],{"class":1146},[159,65675,65642],{"class":165},[159,65677,24064],{"class":1146},[159,65679,24233],{"class":165},[159,65681,24076],{"class":1146},[159,65683,65651],{"class":165},[159,65685,24070],{"class":1146},[159,65687,61442],{"class":165},[159,65689,65690,65692,65694,65696,65698,65700,65702,65704,65706,65708,65710,65712,65714],{"class":161,"line":1884},[159,65691,61492],{"class":165},[159,65693,54394],{"class":8765},[159,65695,189],{"class":1142},[159,65697,23949],{"class":1146},[159,65699,24233],{"class":165},[159,65701,54449],{"class":8765},[159,65703,189],{"class":1142},[159,65705,11034],{"class":1146},[159,65707,24233],{"class":165},[159,65709,54403],{"class":8765},[159,65711,189],{"class":1142},[159,65713,4932],{"class":1146},[159,65715,1165],{"class":165},[159,65717,65718],{"class":161,"line":1889},[159,65719,61521],{"class":165},[159,65721,65722,65724,65727,65729],{"class":161,"line":1899},[159,65723,54365],{"class":1146},[159,65725,65726],{"class":165},".b4",[159,65728,189],{"class":1142},[159,65730,61404],{"class":165},[159,65732,65733,65735,65738,65740,65742,65744,65746,65748,65751,65753,65755,65757,65759,65761,65763],{"class":161,"line":1912},[159,65734,65624],{"class":165},[159,65736,65737],{"class":1146},"480",[159,65739,24233],{"class":165},[159,65741,65554],{"class":1146},[159,65743,65633],{"class":165},[159,65745,24076],{"class":1146},[159,65747,24233],{"class":165},[159,65749,65750],{"class":1146},"208",[159,65752,65642],{"class":165},[159,65754,24439],{"class":1146},[159,65756,24233],{"class":165},[159,65758,7649],{"class":1146},[159,65760,65651],{"class":165},[159,65762,24070],{"class":1146},[159,65764,61442],{"class":165},[159,65766,65767,65769,65771,65773,65775,65777,65779,65781,65783,65785,65787,65789,65791,65793,65795],{"class":161,"line":1925},[159,65768,65624],{"class":165},[159,65770,61852],{"class":1146},[159,65772,24233],{"class":165},[159,65774,44575],{"class":1146},[159,65776,65633],{"class":165},[159,65778,24454],{"class":1146},[159,65780,24233],{"class":165},[159,65782,55020],{"class":1146},[159,65784,65642],{"class":165},[159,65786,10876],{"class":1146},[159,65788,24233],{"class":165},[159,65790,24070],{"class":1146},[159,65792,65651],{"class":165},[159,65794,24070],{"class":1146},[159,65796,61442],{"class":165},[159,65798,65799,65801,65803,65805,65807,65809,65811,65813,65815,65817,65819,65821,65823,65825,65827],{"class":161,"line":1956},[159,65800,65624],{"class":165},[159,65802,61852],{"class":1146},[159,65804,24233],{"class":165},[159,65806,55588],{"class":1146},[159,65808,65633],{"class":165},[159,65810,55588],{"class":1146},[159,65812,24233],{"class":165},[159,65814,58265],{"class":1146},[159,65816,65642],{"class":165},[159,65818,10876],{"class":1146},[159,65820,24233],{"class":165},[159,65822,24070],{"class":1146},[159,65824,65651],{"class":165},[159,65826,24070],{"class":1146},[159,65828,61442],{"class":165},[159,65830,65831,65833,65835,65837,65839,65841,65843,65845,65848,65850,65852,65854,65856,65858,65860],{"class":161,"line":1971},[159,65832,65624],{"class":165},[159,65834,61852],{"class":1146},[159,65836,24233],{"class":165},[159,65838,24454],{"class":1146},[159,65840,65633],{"class":165},[159,65842,55588],{"class":1146},[159,65844,24233],{"class":165},[159,65846,65847],{"class":1146},"288",[159,65849,65642],{"class":165},[159,65851,24064],{"class":1146},[159,65853,24233],{"class":165},[159,65855,24070],{"class":1146},[159,65857,65651],{"class":165},[159,65859,24070],{"class":1146},[159,65861,61442],{"class":165},[159,65863,65864,65866,65869,65871,65873,65875,65877,65879,65882,65884,65886,65888,65890,65892,65894],{"class":161,"line":1976},[159,65865,65624],{"class":165},[159,65867,65868],{"class":1146},"528",[159,65870,24233],{"class":165},[159,65872,58265],{"class":1146},[159,65874,65633],{"class":165},[159,65876,44575],{"class":1146},[159,65878,24233],{"class":165},[159,65880,65881],{"class":1146},"320",[159,65883,65642],{"class":165},[159,65885,24064],{"class":1146},[159,65887,24233],{"class":165},[159,65889,55588],{"class":1146},[159,65891,65651],{"class":165},[159,65893,55588],{"class":1146},[159,65895,61442],{"class":165},[159,65897,65898,65900,65902,65904,65906,65908,65910,65912,65914,65916,65918,65920,65922],{"class":161,"line":1981},[159,65899,61492],{"class":165},[159,65901,54394],{"class":8765},[159,65903,189],{"class":1142},[159,65905,23949],{"class":1146},[159,65907,24233],{"class":165},[159,65909,54449],{"class":8765},[159,65911,189],{"class":1142},[159,65913,11034],{"class":1146},[159,65915,24233],{"class":165},[159,65917,54403],{"class":8765},[159,65919,189],{"class":1142},[159,65921,4932],{"class":1146},[159,65923,1165],{"class":165},[159,65925,65926],{"class":161,"line":1989},[159,65927,61521],{"class":165},[159,65929,65930,65932,65935,65937],{"class":161,"line":2001},[159,65931,54365],{"class":1146},[159,65933,65934],{"class":165},".b5",[159,65936,189],{"class":1142},[159,65938,61404],{"class":165},[159,65940,65941,65943,65946,65948,65950,65952,65954,65956,65958,65960,65962,65964,65966,65968,65970],{"class":161,"line":2006},[159,65942,65624],{"class":165},[159,65944,65945],{"class":1146},"832",[159,65947,24233],{"class":165},[159,65949,58265],{"class":1146},[159,65951,65633],{"class":165},[159,65953,44575],{"class":1146},[159,65955,24233],{"class":165},[159,65957,65881],{"class":1146},[159,65959,65642],{"class":165},[159,65961,24064],{"class":1146},[159,65963,24233],{"class":165},[159,65965,55588],{"class":1146},[159,65967,65651],{"class":165},[159,65969,55588],{"class":1146},[159,65971,61442],{"class":165},[159,65973,65974,65976,65978,65980,65982,65984,65986,65988,65990,65992,65994,65996,65998,66000,66002],{"class":161,"line":2015},[159,65975,65624],{"class":165},[159,65977,65945],{"class":1146},[159,65979,24233],{"class":165},[159,65981,58335],{"class":1146},[159,65983,65633],{"class":165},[159,65985,65554],{"class":1146},[159,65987,24233],{"class":165},[159,65989,58335],{"class":1146},[159,65991,65642],{"class":165},[159,65993,7649],{"class":1146},[159,65995,24233],{"class":165},[159,65997,55588],{"class":1146},[159,65999,65651],{"class":165},[159,66001,55588],{"class":1146},[159,66003,61442],{"class":165},[159,66005,66006,66009,66011,66013,66015],{"class":161,"line":2024},[159,66007,66008],{"class":165},"            nn.AdaptiveAvgPool2d((",[159,66010,4932],{"class":1146},[159,66012,24233],{"class":165},[159,66014,4932],{"class":1146},[159,66016,66017],{"class":165},")),\n",[159,66019,66020],{"class":161,"line":2029},[159,66021,62185],{"class":165},[159,66023,66024,66026,66029,66031,66033],{"class":161,"line":2038},[159,66025,62190],{"class":165},[159,66027,66028],{"class":1146},"1024",[159,66030,24233],{"class":165},[159,66032,1964],{"class":1146},[159,66034,1165],{"class":165},[159,66036,66037],{"class":161,"line":2053},[159,66038,61521],{"class":165},[159,66040,66041],{"class":161,"line":2070},[159,66042,66043],{"class":1135},"        # 对模型参数初始化\n",[159,66045,66046,66048,66050,66052,66054],{"class":161,"line":2095},[159,66047,27032],{"class":1142},[159,66049,62263],{"class":165},[159,66051,49566],{"class":1142},[159,66053,62268],{"class":1146},[159,66055,62271],{"class":165},[159,66057,66058,66060,66062],{"class":161,"line":2104},[159,66059,28260],{"class":1142},[159,66061,62283],{"class":1146},[159,66063,62286],{"class":165},[159,66065,66066,66068,66071,66073,66076,66078,66080,66082,66084],{"class":161,"line":2120},[159,66067,62296],{"class":165},[159,66069,66070],{"class":8765},"mode",[159,66072,189],{"class":1142},[159,66074,66075],{"class":192},"'fan_out'",[159,66077,24233],{"class":165},[159,66079,62299],{"class":8765},[159,66081,189],{"class":1142},[159,66083,62304],{"class":192},[159,66085,1165],{"class":165},[159,66087,66088],{"class":161,"line":2134},[159,66089,66090],{"class":1135},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[159,66092,66093],{"class":161,"line":2143},[159,66094,66095],{"class":1135},"                # ② mode = 'fan_out'决定使用的fan值：\n",[159,66097,66098],{"class":161,"line":2165},[159,66099,66100],{"class":1135},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[159,66102,66103],{"class":161,"line":2178},[159,66104,66105],{"class":1135},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[159,66107,66108],{"class":161,"line":2191},[159,66109,66110],{"class":1135},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[159,66112,66113],{"class":161,"line":2204},[159,66114,66115],{"class":1135},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[159,66117,66118,66120,66122,66124,66126,66128],{"class":161,"line":2217},[159,66119,62316],{"class":1142},[159,66121,62319],{"class":165},[159,66123,62322],{"class":1142},[159,66125,62325],{"class":1142},[159,66127,62328],{"class":1146},[159,66129,27364],{"class":165},[159,66131,66132,66134,66136],{"class":161,"line":2230},[159,66133,62340],{"class":165},[159,66135,1489],{"class":1146},[159,66137,1165],{"class":165},[159,66139,66140,66143,66145],{"class":161,"line":2243},[159,66141,66142],{"class":1142},"                elif",[159,66144,62283],{"class":1146},[159,66146,62359],{"class":165},[159,66148,66149,66152,66154,66156,66158],{"class":161,"line":2256},[159,66150,66151],{"class":165},"                    nn.init.normal_(m.weight,",[159,66153,1489],{"class":1146},[159,66155,24233],{"class":165},[159,66157,62381],{"class":1146},[159,66159,1165],{"class":165},[159,66161,66162,66165,66167,66169,66171,66173],{"class":161,"line":2266},[159,66163,66164],{"class":1142},"                    if",[159,66166,62319],{"class":165},[159,66168,62322],{"class":1142},[159,66170,62325],{"class":1142},[159,66172,62328],{"class":1146},[159,66174,27364],{"class":165},[159,66176,66177,66180,66182],{"class":161,"line":2275},[159,66178,66179],{"class":165},"                        nn.init.constant_(m.bias,",[159,66181,1489],{"class":1146},[159,66183,1165],{"class":165},[159,66185,66186],{"class":161,"line":2284},[159,66187,58560],{"class":1135},[159,66189,66190,66192,66194],{"class":161,"line":2293},[159,66191,54322],{"class":1142},[159,66193,54613],{"class":185},[159,66195,54616],{"class":165},[159,66197,66198,66200,66202,66204],{"class":161,"line":2306},[159,66199,54621],{"class":165},[159,66201,189],{"class":1142},[159,66203,54344],{"class":1146},[159,66205,66206],{"class":165},".b1(x)\n",[159,66208,66209,66211,66213,66215],{"class":161,"line":2330},[159,66210,54621],{"class":165},[159,66212,189],{"class":1142},[159,66214,54344],{"class":1146},[159,66216,66217],{"class":165},".b2(x)\n",[159,66219,66220,66222,66224,66226],{"class":161,"line":2350},[159,66221,54621],{"class":165},[159,66223,189],{"class":1142},[159,66225,54344],{"class":1146},[159,66227,66228],{"class":165},".b3(x)\n",[159,66230,66231,66233,66235,66237],{"class":161,"line":2370},[159,66232,54621],{"class":165},[159,66234,189],{"class":1142},[159,66236,54344],{"class":1146},[159,66238,66239],{"class":165},".b4(x)\n",[159,66241,66242,66244,66246,66248],{"class":161,"line":2390},[159,66243,54621],{"class":165},[159,66245,189],{"class":1142},[159,66247,54344],{"class":1146},[159,66249,66250],{"class":165},".b5(x)\n",[159,66252,66253,66255],{"class":161,"line":2410},[159,66254,21176],{"class":1142},[159,66256,54729],{"class":165},[159,66258,66259],{"class":161,"line":2430},[159,66260,590],{"emptyLinePlaceholder":589},[159,66262,66263],{"class":161,"line":2450},[159,66264,66265],{"class":1135},"# 模型展示\n",[159,66267,66268,66270,66272,66274,66276],{"class":161,"line":2471},[159,66269,18445],{"class":1142},[159,66271,54740],{"class":1146},[159,66273,26581],{"class":1142},[159,66275,54745],{"class":192},[159,66277,27364],{"class":165},[159,66279,66280,66282,66284,66286,66288,66290,66292,66294,66296],{"class":161,"line":2477},[159,66281,54757],{"class":165},[159,66283,189],{"class":1142},[159,66285,53973],{"class":165},[159,66287,54764],{"class":192},[159,66289,25367],{"class":1142},[159,66291,54769],{"class":165},[159,66293,25364],{"class":1142},[159,66295,53998],{"class":192},[159,66297,1165],{"class":165},[159,66299,66300,66302,66304],{"class":161,"line":2498},[159,66301,54809],{"class":165},[159,66303,189],{"class":1142},[159,66305,66306],{"class":165},"GoogLeNet(Inception).to(device)\n",[159,66308,66309,66311,66313,66315,66317,66319,66321,66323],{"class":161,"line":2518},[159,66310,54819],{"class":1146},[159,66312,54822],{"class":165},[159,66314,4932],{"class":1146},[159,66316,24233],{"class":165},[159,66318,55020],{"class":1146},[159,66320,24233],{"class":165},[159,66322,55020],{"class":1146},[159,66324,54835],{"class":165},[134,66326,66327],{"start":176},[106,66328,62578],{},[151,66330,66332],{"className":53900,"code":66331,"language":53902,"meta":25,"style":25},"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",[49,66333,66334,66340,66346,66356,66362,66372,66382,66392,66402,66412,66416,66427,66437,66441,66445,66449,66457,66469,66479,66495,66505,66537,66551,66561,66571,66575,66585,66599,66609,66619,66629,66635,66639,66643,66647,66651,66655,66663,66683,66687,66691,66695,66699,66703,66719,66723,66727,66735,66739,66743,66751,66755,66759,66763,66771,66775,66779,66783,66787,66795,66799,66807,66811,66819,66823,66831,66835,66843,66847,66851,66859,66863,66867,66871,66883,66907,66921,66925,66929,66933,66941,66945,66953,66957,66965,66969,66977,66981,66989,66993,67001,67005,67017,67021,67029,67033,67041,67045,67049,67053,67057,67065,67069,67085,67089,67097,67101,67105,67109,67113,67117,67121,67125,67141,67145,67157,67161,67173,67177,67189,67193,67201,67205,67213,67217,67221,67225,67231,67235,67243,67247,67263,67267,67275,67279,67295,67307,67311,67323,67327,67331,67339,67343,67347,67355,67359,67367,67371,67379,67383,67387,67429,67471,67475,67479,67495,67499,67515,67519,67523,67531,67535,67539,67551,67589,67593,67597,67605,67609,67623,67633,67639,67645,67651,67657,67661,67665,67671,67675,67679,67687,67691,67709,67713,67717,67721,67737,67741,67745,67749,67753,67757,67777,67797,67801,67805,67809,67817,67825,67829,67845,67865,67885,67889,67893,67901,67909,67913,67917,67921,67933,67937,67947,67955,67972],{"__ignoreMap":25},[159,66335,66336,66338],{"class":161,"line":162},[159,66337,53914],{"class":1142},[159,66339,55340],{"class":165},[159,66341,66342,66344],{"class":161,"line":176},[159,66343,53914],{"class":1142},[159,66345,55347],{"class":165},[159,66347,66348,66350,66352,66354],{"class":161,"line":203},[159,66349,53914],{"class":1142},[159,66351,55358],{"class":165},[159,66353,54903],{"class":1142},[159,66355,55363],{"class":165},[159,66357,66358,66360],{"class":161,"line":223},[159,66359,53914],{"class":1142},[159,66361,53917],{"class":165},[159,66363,66364,66366,66368,66370],{"class":161,"line":233},[159,66365,54258],{"class":1142},[159,66367,54935],{"class":165},[159,66369,53914],{"class":1142},[159,66371,55380],{"class":165},[159,66373,66374,66376,66378,66380],{"class":161,"line":239},[159,66375,54258],{"class":1142},[159,66377,54888],{"class":165},[159,66379,53914],{"class":1142},[159,66381,54893],{"class":165},[159,66383,66384,66386,66388,66390],{"class":161,"line":245},[159,66385,54258],{"class":1142},[159,66387,54918],{"class":165},[159,66389,53914],{"class":1142},[159,66391,54923],{"class":165},[159,66393,66394,66396,66398,66400],{"class":161,"line":251},[159,66395,53914],{"class":1142},[159,66397,54935],{"class":165},[159,66399,54903],{"class":1142},[159,66401,54940],{"class":165},[159,66403,66404,66406,66408,66410],{"class":161,"line":261},[159,66405,53914],{"class":1142},[159,66407,54952],{"class":165},[159,66409,54903],{"class":1142},[159,66411,54957],{"class":165},[159,66413,66414],{"class":161,"line":603},[159,66415,55425],{"class":1135},[159,66417,66418,66420,66422,66424],{"class":161,"line":621},[159,66419,54258],{"class":1142},[159,66421,55432],{"class":165},[159,66423,53914],{"class":1142},[159,66425,66426],{"class":165}," GoogLeNet, Inception\n",[159,66428,66429,66431,66433,66435],{"class":161,"line":634},[159,66430,54258],{"class":1142},[159,66432,54261],{"class":165},[159,66434,53914],{"class":1142},[159,66436,54266],{"class":165},[159,66438,66439],{"class":161,"line":640},[159,66440,590],{"emptyLinePlaceholder":589},[159,66442,66443],{"class":161,"line":1075},[159,66444,590],{"emptyLinePlaceholder":589},[159,66446,66447],{"class":161,"line":1081},[159,66448,55460],{"class":1135},[159,66450,66451,66453,66455],{"class":161,"line":1091},[159,66452,55465],{"class":1142},[159,66454,55468],{"class":185},[159,66456,55471],{"class":165},[159,66458,66459,66461,66463,66465,66467],{"class":161,"line":1100},[159,66460,55476],{"class":165},[159,66462,189],{"class":1142},[159,66464,54975],{"class":165},[159,66466,54983],{"class":192},[159,66468,17070],{"class":165},[159,66470,66471,66473,66475,66477],{"class":161,"line":1123},[159,66472,55489],{"class":8765},[159,66474,189],{"class":1142},[159,66476,54995],{"class":1146},[159,66478,17070],{"class":165},[159,66480,66481,66483,66485,66487,66489,66491,66493],{"class":161,"line":1132},[159,66482,55500],{"class":8765},[159,66484,189],{"class":1142},[159,66486,55012],{"class":165},[159,66488,55015],{"class":8765},[159,66490,189],{"class":1142},[159,66492,58844],{"class":1146},[159,66494,55023],{"class":165},[159,66496,66497,66499,66501,66503],{"class":161,"line":1139},[159,66498,55517],{"class":8765},[159,66500,189],{"class":1142},[159,66502,54995],{"class":1146},[159,66504,1165],{"class":165},[159,66506,66507,66509,66511,66513,66515,66517,66519,66521,66523,66525,66527,66529,66531,66533,66535],{"class":161,"line":1168},[159,66508,55528],{"class":165},[159,66510,189],{"class":1142},[159,66512,55533],{"class":165},[159,66514,55536],{"class":1146},[159,66516,1159],{"class":165},[159,66518,55541],{"class":1146},[159,66520,4777],{"class":1142},[159,66522,30969],{"class":1146},[159,66524,55548],{"class":165},[159,66526,55536],{"class":1146},[159,66528,1159],{"class":165},[159,66530,55555],{"class":1146},[159,66532,4777],{"class":1142},[159,66534,30969],{"class":1146},[159,66536,55562],{"class":165},[159,66538,66539,66541,66543,66545,66547,66549],{"class":161,"line":1174},[159,66540,55567],{"class":165},[159,66542,189],{"class":1142},[159,66544,55572],{"class":165},[159,66546,55056],{"class":8765},[159,66548,189],{"class":1142},[159,66550,55061],{"class":165},[159,66552,66553,66555,66557,66559],{"class":161,"line":1180},[159,66554,55583],{"class":8765},[159,66556,189],{"class":1142},[159,66558,24064],{"class":1146},[159,66560,17070],{"class":165},[159,66562,66563,66565,66567,66569],{"class":161,"line":1194},[159,66564,55595],{"class":8765},[159,66566,189],{"class":1142},[159,66568,54995],{"class":1146},[159,66570,17070],{"class":165},[159,66572,66573],{"class":161,"line":1200},[159,66574,55606],{"class":1135},[159,66576,66577,66579,66581,66583],{"class":161,"line":1221},[159,66578,55611],{"class":8765},[159,66580,189],{"class":1142},[159,66582,24250],{"class":1146},[159,66584,1165],{"class":165},[159,66586,66587,66589,66591,66593,66595,66597],{"class":161,"line":1230},[159,66588,55622],{"class":165},[159,66590,189],{"class":1142},[159,66592,55053],{"class":165},[159,66594,55056],{"class":8765},[159,66596,189],{"class":1142},[159,66598,55633],{"class":165},[159,66600,66601,66603,66605,66607],{"class":161,"line":1247},[159,66602,55638],{"class":8765},[159,66604,189],{"class":1142},[159,66606,24064],{"class":1146},[159,66608,17070],{"class":165},[159,66610,66611,66613,66615,66617],{"class":161,"line":1265},[159,66612,55649],{"class":8765},[159,66614,189],{"class":1142},[159,66616,54995],{"class":1146},[159,66618,17070],{"class":165},[159,66620,66621,66623,66625,66627],{"class":161,"line":1277},[159,66622,55660],{"class":8765},[159,66624,189],{"class":1142},[159,66626,24250],{"class":1146},[159,66628,1165],{"class":165},[159,66630,66631,66633],{"class":161,"line":1283},[159,66632,27711],{"class":1142},[159,66634,55673],{"class":165},[159,66636,66637],{"class":161,"line":1294},[159,66638,590],{"emptyLinePlaceholder":589},[159,66640,66641],{"class":161,"line":1305},[159,66642,55682],{"class":1135},[159,66644,66645],{"class":161,"line":1311},[159,66646,55687],{"class":1135},[159,66648,66649],{"class":161,"line":1322},[159,66650,590],{"emptyLinePlaceholder":589},[159,66652,66653],{"class":161,"line":1327},[159,66654,55696],{"class":1135},[159,66656,66657,66659,66661],{"class":161,"line":1336},[159,66658,55465],{"class":1142},[159,66660,55703],{"class":185},[159,66662,55706],{"class":165},[159,66664,66665,66667,66669,66671,66673,66675,66677,66679,66681],{"class":161,"line":1345},[159,66666,54757],{"class":165},[159,66668,189],{"class":1142},[159,66670,53973],{"class":165},[159,66672,54764],{"class":192},[159,66674,25367],{"class":1142},[159,66676,54769],{"class":165},[159,66678,25364],{"class":1142},[159,66680,55725],{"class":192},[159,66682,1165],{"class":165},[159,66684,66685],{"class":161,"line":1350},[159,66686,590],{"emptyLinePlaceholder":589},[159,66688,66689],{"class":161,"line":1764},[159,66690,590],{"emptyLinePlaceholder":589},[159,66692,66693],{"class":161,"line":1769},[159,66694,55740],{"class":1135},[159,66696,66697],{"class":161,"line":1777},[159,66698,55745],{"class":1135},[159,66700,66701],{"class":161,"line":1788},[159,66702,55750],{"class":1135},[159,66704,66705,66707,66709,66711,66713,66715,66717],{"class":161,"line":1802},[159,66706,55755],{"class":165},[159,66708,189],{"class":1142},[159,66710,55760],{"class":165},[159,66712,55763],{"class":8765},[159,66714,189],{"class":1142},[159,66716,55768],{"class":1146},[159,66718,1165],{"class":165},[159,66720,66721],{"class":161,"line":1815},[159,66722,590],{"emptyLinePlaceholder":589},[159,66724,66725],{"class":161,"line":1828},[159,66726,55779],{"class":1135},[159,66728,66729,66731,66733],{"class":161,"line":1841},[159,66730,55784],{"class":165},[159,66732,189],{"class":1142},[159,66734,55789],{"class":165},[159,66736,66737],{"class":161,"line":1852},[159,66738,590],{"emptyLinePlaceholder":589},[159,66740,66741],{"class":161,"line":1866},[159,66742,55798],{"class":1135},[159,66744,66745,66747,66749],{"class":161,"line":1879},[159,66746,54809],{"class":165},[159,66748,189],{"class":1142},[159,66750,55807],{"class":165},[159,66752,66753],{"class":161,"line":1884},[159,66754,55812],{"class":1135},[159,66756,66757],{"class":161,"line":1889},[159,66758,55817],{"class":1135},[159,66760,66761],{"class":161,"line":1899},[159,66762,55822],{"class":1135},[159,66764,66765,66767,66769],{"class":161,"line":1912},[159,66766,55827],{"class":165},[159,66768,189],{"class":1142},[159,66770,55832],{"class":165},[159,66772,66773],{"class":161,"line":1925},[159,66774,590],{"emptyLinePlaceholder":589},[159,66776,66777],{"class":161,"line":1956},[159,66778,590],{"emptyLinePlaceholder":589},[159,66780,66781],{"class":161,"line":1971},[159,66782,55845],{"class":1135},[159,66784,66785],{"class":161,"line":1976},[159,66786,55850],{"class":1135},[159,66788,66789,66791,66793],{"class":161,"line":1981},[159,66790,55855],{"class":165},[159,66792,189],{"class":1142},[159,66794,55860],{"class":1146},[159,66796,66797],{"class":161,"line":1989},[159,66798,55865],{"class":1135},[159,66800,66801,66803,66805],{"class":161,"line":2001},[159,66802,55870],{"class":165},[159,66804,189],{"class":1142},[159,66806,55875],{"class":165},[159,66808,66809],{"class":161,"line":2006},[159,66810,55880],{"class":1135},[159,66812,66813,66815,66817],{"class":161,"line":2015},[159,66814,55885],{"class":165},[159,66816,189],{"class":1142},[159,66818,55875],{"class":165},[159,66820,66821],{"class":161,"line":2024},[159,66822,55894],{"class":1135},[159,66824,66825,66827,66829],{"class":161,"line":2029},[159,66826,55899],{"class":165},[159,66828,189],{"class":1142},[159,66830,55875],{"class":165},[159,66832,66833],{"class":161,"line":2038},[159,66834,55908],{"class":1135},[159,66836,66837,66839,66841],{"class":161,"line":2053},[159,66838,55913],{"class":165},[159,66840,189],{"class":1142},[159,66842,55875],{"class":165},[159,66844,66845],{"class":161,"line":2070},[159,66846,590],{"emptyLinePlaceholder":589},[159,66848,66849],{"class":161,"line":2095},[159,66850,55926],{"class":1135},[159,66852,66853,66855,66857],{"class":161,"line":2104},[159,66854,55931],{"class":165},[159,66856,189],{"class":1142},[159,66858,55936],{"class":165},[159,66860,66861],{"class":161,"line":2120},[159,66862,590],{"emptyLinePlaceholder":589},[159,66864,66865],{"class":161,"line":2134},[159,66866,590],{"emptyLinePlaceholder":589},[159,66868,66869],{"class":161,"line":2143},[159,66870,55949],{"class":1135},[159,66872,66873,66875,66877,66879,66881],{"class":161,"line":2165},[159,66874,11677],{"class":1142},[159,66876,55956],{"class":165},[159,66878,49566],{"class":1142},[159,66880,55961],{"class":1146},[159,66882,55964],{"class":165},[159,66884,66885,66887,66889,66891,66893,66895,66897,66899,66901,66903,66905],{"class":161,"line":2178},[159,66886,55969],{"class":1146},[159,66888,1159],{"class":165},[159,66890,55974],{"class":192},[159,66892,55977],{"class":1146},[159,66894,13083],{"class":192},[159,66896,55977],{"class":1146},[159,66898,24115],{"class":192},[159,66900,55986],{"class":165},[159,66902,24376],{"class":1142},[159,66904,4932],{"class":1146},[159,66906,18787],{"class":165},[159,66908,66909,66911,66913,66915,66917,66919],{"class":161,"line":2191},[159,66910,55969],{"class":1146},[159,66912,1159],{"class":165},[159,66914,56001],{"class":192},[159,66916,4777],{"class":1142},[159,66918,1964],{"class":1146},[159,66920,1165],{"class":165},[159,66922,66923],{"class":161,"line":2204},[159,66924,590],{"emptyLinePlaceholder":589},[159,66926,66927],{"class":161,"line":2217},[159,66928,56016],{"class":1135},[159,66930,66931],{"class":161,"line":2230},[159,66932,56021],{"class":1135},[159,66934,66935,66937,66939],{"class":161,"line":2243},[159,66936,56026],{"class":165},[159,66938,189],{"class":1142},[159,66940,55860],{"class":1146},[159,66942,66943],{"class":161,"line":2256},[159,66944,56035],{"class":1135},[159,66946,66947,66949,66951],{"class":161,"line":2266},[159,66948,56040],{"class":165},[159,66950,189],{"class":1142},[159,66952,26716],{"class":1146},[159,66954,66955],{"class":161,"line":2275},[159,66956,56049],{"class":1135},[159,66958,66959,66961,66963],{"class":161,"line":2284},[159,66960,56054],{"class":165},[159,66962,189],{"class":1142},[159,66964,55860],{"class":1146},[159,66966,66967],{"class":161,"line":2293},[159,66968,56063],{"class":1135},[159,66970,66971,66973,66975],{"class":161,"line":2306},[159,66972,56068],{"class":165},[159,66974,189],{"class":1142},[159,66976,26716],{"class":1146},[159,66978,66979],{"class":161,"line":2330},[159,66980,56077],{"class":1135},[159,66982,66983,66985,66987],{"class":161,"line":2350},[159,66984,56082],{"class":165},[159,66986,189],{"class":1142},[159,66988,26716],{"class":1146},[159,66990,66991],{"class":161,"line":2370},[159,66992,56091],{"class":1135},[159,66994,66995,66997,66999],{"class":161,"line":2390},[159,66996,56096],{"class":165},[159,66998,189],{"class":1142},[159,67000,26716],{"class":1146},[159,67002,67003],{"class":161,"line":2410},[159,67004,56105],{"class":1135},[159,67006,67007,67009,67011,67013,67015],{"class":161,"line":2430},[159,67008,27032],{"class":1142},[159,67010,55120],{"class":165},[159,67012,49566],{"class":1142},[159,67014,55125],{"class":1146},[159,67016,56118],{"class":165},[159,67018,67019],{"class":161,"line":2450},[159,67020,56123],{"class":1135},[159,67022,67023,67025,67027],{"class":161,"line":2471},[159,67024,56128],{"class":165},[159,67026,189],{"class":1142},[159,67028,56133],{"class":165},[159,67030,67031],{"class":161,"line":2477},[159,67032,56138],{"class":1135},[159,67034,67035,67037,67039],{"class":161,"line":2498},[159,67036,56143],{"class":165},[159,67038,189],{"class":1142},[159,67040,56148],{"class":165},[159,67042,67043],{"class":161,"line":2518},[159,67044,56153],{"class":1135},[159,67046,67047],{"class":161,"line":2539},[159,67048,56158],{"class":165},[159,67050,67051],{"class":161,"line":2561},[159,67052,56163],{"class":1135},[159,67054,67055],{"class":161,"line":2573},[159,67056,56168],{"class":1135},[159,67058,67059,67061,67063],{"class":161,"line":2591},[159,67060,56173],{"class":165},[159,67062,189],{"class":1142},[159,67064,56178],{"class":165},[159,67066,67067],{"class":161,"line":2602},[159,67068,56183],{"class":1135},[159,67070,67071,67073,67075,67077,67079,67081,67083],{"class":161,"line":2613},[159,67072,56188],{"class":165},[159,67074,189],{"class":1142},[159,67076,56193],{"class":165},[159,67078,56196],{"class":8765},[159,67080,189],{"class":1142},[159,67082,4932],{"class":1146},[159,67084,1165],{"class":165},[159,67086,67087],{"class":161,"line":2624},[159,67088,56207],{"class":1135},[159,67090,67091,67093,67095],{"class":161,"line":2630},[159,67092,56212],{"class":165},[159,67094,189],{"class":1142},[159,67096,56217],{"class":165},[159,67098,67099],{"class":161,"line":2636},[159,67100,56222],{"class":1135},[159,67102,67103],{"class":161,"line":2642},[159,67104,56227],{"class":165},[159,67106,67107],{"class":161,"line":2648},[159,67108,56232],{"class":1135},[159,67110,67111],{"class":161,"line":2674},[159,67112,56237],{"class":165},[159,67114,67115],{"class":161,"line":2689},[159,67116,56242],{"class":1135},[159,67118,67119],{"class":161,"line":2694},[159,67120,56247],{"class":165},[159,67122,67123],{"class":161,"line":2721},[159,67124,56252],{"class":1135},[159,67126,67127,67129,67131,67133,67135,67137,67139],{"class":161,"line":2726},[159,67128,56257],{"class":165},[159,67130,33073],{"class":1142},[159,67132,56262],{"class":165},[159,67134,4777],{"class":1142},[159,67136,56267],{"class":165},[159,67138,1489],{"class":1146},[159,67140,1165],{"class":165},[159,67142,67143],{"class":161,"line":2735},[159,67144,56276],{"class":1135},[159,67146,67147,67149,67151,67153,67155],{"class":161,"line":2744},[159,67148,56281],{"class":165},[159,67150,33073],{"class":1142},[159,67152,56286],{"class":165},[159,67154,26581],{"class":1142},[159,67156,56291],{"class":165},[159,67158,67159],{"class":161,"line":2753},[159,67160,56296],{"class":1135},[159,67162,67163,67165,67167,67169,67171],{"class":161,"line":2758},[159,67164,56301],{"class":165},[159,67166,33073],{"class":1142},[159,67168,56267],{"class":165},[159,67170,1489],{"class":1146},[159,67172,1165],{"class":165},[159,67174,67175],{"class":161,"line":3959},[159,67176,56314],{"class":1135},[159,67178,67179,67181,67183,67185,67187],{"class":161,"line":3968},[159,67180,27032],{"class":1142},[159,67182,56321],{"class":165},[159,67184,49566],{"class":1142},[159,67186,55125],{"class":1146},[159,67188,56328],{"class":165},[159,67190,67191],{"class":161,"line":3977},[159,67192,56333],{"class":1135},[159,67194,67195,67197,67199],{"class":161,"line":3982},[159,67196,56128],{"class":165},[159,67198,189],{"class":1142},[159,67200,56133],{"class":165},[159,67202,67203],{"class":161,"line":6843},[159,67204,56346],{"class":1135},[159,67206,67207,67209,67211],{"class":161,"line":6849},[159,67208,56143],{"class":165},[159,67210,189],{"class":1142},[159,67212,56148],{"class":165},[159,67214,67215],{"class":161,"line":6855},[159,67216,56359],{"class":1135},[159,67218,67219],{"class":161,"line":6861},[159,67220,56364],{"class":165},[159,67222,67223],{"class":161,"line":6867},[159,67224,59751],{"class":1135},[159,67226,67227,67229],{"class":161,"line":6873},[159,67228,56369],{"class":1142},[159,67230,56372],{"class":165},[159,67232,67233],{"class":161,"line":6879},[159,67234,56377],{"class":1135},[159,67236,67237,67239,67241],{"class":161,"line":6885},[159,67238,59766],{"class":165},[159,67240,189],{"class":1142},[159,67242,56178],{"class":165},[159,67244,67245],{"class":161,"line":6890},[159,67246,56392],{"class":1135},[159,67248,67249,67251,67253,67255,67257,67259,67261],{"class":161,"line":6896},[159,67250,59779],{"class":165},[159,67252,189],{"class":1142},[159,67254,56193],{"class":165},[159,67256,56196],{"class":8765},[159,67258,189],{"class":1142},[159,67260,4932],{"class":1146},[159,67262,1165],{"class":165},[159,67264,67265],{"class":161,"line":6902},[159,67266,56415],{"class":1135},[159,67268,67269,67271,67273],{"class":161,"line":6908},[159,67270,59800],{"class":165},[159,67272,189],{"class":1142},[159,67274,56217],{"class":165},[159,67276,67277],{"class":161,"line":6914},[159,67278,56430],{"class":1135},[159,67280,67281,67283,67285,67287,67289,67291,67293],{"class":161,"line":6920},[159,67282,59813],{"class":165},[159,67284,33073],{"class":1142},[159,67286,59818],{"class":165},[159,67288,4777],{"class":1142},[159,67290,56267],{"class":165},[159,67292,1489],{"class":1146},[159,67294,1165],{"class":165},[159,67296,67297,67299,67301,67303,67305],{"class":161,"line":6926},[159,67298,59831],{"class":165},[159,67300,33073],{"class":1142},[159,67302,56286],{"class":165},[159,67304,26581],{"class":1142},[159,67306,56291],{"class":165},[159,67308,67309],{"class":161,"line":6932},[159,67310,59844],{"class":1135},[159,67312,67313,67315,67317,67319,67321],{"class":161,"line":6938},[159,67314,59849],{"class":165},[159,67316,33073],{"class":1142},[159,67318,56267],{"class":165},[159,67320,1489],{"class":1146},[159,67322,1165],{"class":165},[159,67324,67325],{"class":161,"line":6944},[159,67326,56487],{"class":1135},[159,67328,67329],{"class":161,"line":6949},[159,67330,56492],{"class":1135},[159,67332,67333,67335,67337],{"class":161,"line":6955},[159,67334,56497],{"class":165},[159,67336,13083],{"class":1142},[159,67338,56502],{"class":165},[159,67340,67341],{"class":161,"line":6961},[159,67342,56507],{"class":1135},[159,67344,67345],{"class":161,"line":6967},[159,67346,56512],{"class":1135},[159,67348,67349,67351,67353],{"class":161,"line":6973},[159,67350,56517],{"class":165},[159,67352,13083],{"class":1142},[159,67354,56502],{"class":165},[159,67356,67357],{"class":161,"line":6979},[159,67358,56526],{"class":1135},[159,67360,67361,67363,67365],{"class":161,"line":6985},[159,67362,56531],{"class":165},[159,67364,13083],{"class":1142},[159,67366,56536],{"class":165},[159,67368,67369],{"class":161,"line":6991},[159,67370,56541],{"class":1135},[159,67372,67373,67375,67377],{"class":161,"line":6997},[159,67374,56546],{"class":165},[159,67376,13083],{"class":1142},[159,67378,56536],{"class":165},[159,67380,67381],{"class":161,"line":7003},[159,67382,590],{"emptyLinePlaceholder":589},[159,67384,67385],{"class":161,"line":7009},[159,67386,56559],{"class":1135},[159,67388,67389,67391,67393,67395,67397,67399,67401,67403,67405,67407,67409,67411,67413,67415,67417,67419,67421,67423,67425,67427],{"class":161,"line":7015},[159,67390,55969],{"class":1146},[159,67392,1159],{"class":165},[159,67394,27221],{"class":192},[159,67396,55977],{"class":1146},[159,67398,56572],{"class":192},[159,67400,24721],{"class":1146},[159,67402,56577],{"class":1142},[159,67404,886],{"class":1146},[159,67406,56582],{"class":192},[159,67408,24721],{"class":1146},[159,67410,56577],{"class":1142},[159,67412,886],{"class":1146},[159,67414,27221],{"class":192},[159,67416,56593],{"class":165},[159,67418,24376],{"class":1142},[159,67420,4932],{"class":1146},[159,67422,56600],{"class":165},[159,67424,24376],{"class":1142},[159,67426,4932],{"class":1146},[159,67428,56607],{"class":165},[159,67430,67431,67433,67435,67437,67439,67441,67443,67445,67447,67449,67451,67453,67455,67457,67459,67461,67463,67465,67467,67469],{"class":161,"line":7021},[159,67432,55969],{"class":1146},[159,67434,1159],{"class":165},[159,67436,27221],{"class":192},[159,67438,55977],{"class":1146},[159,67440,56620],{"class":192},[159,67442,24721],{"class":1146},[159,67444,56577],{"class":1142},[159,67446,886],{"class":1146},[159,67448,56629],{"class":192},[159,67450,24721],{"class":1146},[159,67452,56577],{"class":1142},[159,67454,886],{"class":1146},[159,67456,27221],{"class":192},[159,67458,56640],{"class":165},[159,67460,24376],{"class":1142},[159,67462,4932],{"class":1146},[159,67464,56647],{"class":165},[159,67466,24376],{"class":1142},[159,67468,4932],{"class":1146},[159,67470,56607],{"class":165},[159,67472,67473],{"class":161,"line":7026},[159,67474,590],{"emptyLinePlaceholder":589},[159,67476,67477],{"class":161,"line":7031},[159,67478,56662],{"class":1135},[159,67480,67481,67483,67485,67487,67489,67491,67493],{"class":161,"line":7037},[159,67482,17003],{"class":1142},[159,67484,56669],{"class":165},[159,67486,24376],{"class":1142},[159,67488,4932],{"class":1146},[159,67490,18375],{"class":165},[159,67492,6760],{"class":1142},[159,67494,56680],{"class":165},[159,67496,67497],{"class":161,"line":7043},[159,67498,56685],{"class":1135},[159,67500,67501,67503,67505,67507,67509,67511,67513],{"class":161,"line":7049},[159,67502,56690],{"class":165},[159,67504,23920],{"class":1146},[159,67506,189],{"class":1142},[159,67508,56697],{"class":165},[159,67510,24376],{"class":1142},[159,67512,4932],{"class":1146},[159,67514,4634],{"class":165},[159,67516,67517],{"class":161,"line":7054},[159,67518,56708],{"class":1135},[159,67520,67521],{"class":161,"line":7060},[159,67522,56713],{"class":1135},[159,67524,67525,67527,67529],{"class":161,"line":7066},[159,67526,56718],{"class":165},[159,67528,189],{"class":1142},[159,67530,55832],{"class":165},[159,67532,67533],{"class":161,"line":7072},[159,67534,590],{"emptyLinePlaceholder":589},[159,67536,67537],{"class":161,"line":7078},[159,67538,56731],{"class":1135},[159,67540,67541,67543,67545,67547,67549],{"class":161,"line":7084},[159,67542,56736],{"class":165},[159,67544,189],{"class":1142},[159,67546,56741],{"class":165},[159,67548,24376],{"class":1142},[159,67550,56746],{"class":165},[159,67552,67553,67555,67557,67559,67561,67563,67565,67567,67569,67571,67573,67575,67577,67579,67581,67583,67585,67587],{"class":161,"line":7089},[159,67554,55969],{"class":1146},[159,67556,1159],{"class":165},[159,67558,56755],{"class":192},[159,67560,24721],{"class":1146},[159,67562,56760],{"class":1142},[159,67564,886],{"class":1146},[159,67566,21081],{"class":192},[159,67568,24721],{"class":1146},[159,67570,56760],{"class":1142},[159,67572,886],{"class":1146},[159,67574,56773],{"class":192},[159,67576,56776],{"class":165},[159,67578,56779],{"class":1142},[159,67580,10814],{"class":1146},[159,67582,56784],{"class":165},[159,67584,1662],{"class":1142},[159,67586,10814],{"class":1146},[159,67588,18787],{"class":165},[159,67590,67591],{"class":161,"line":7095},[159,67592,60128],{"class":1135},[159,67594,67595],{"class":161,"line":7100},[159,67596,60133],{"class":1135},[159,67598,67599,67601,67603],{"class":161,"line":7105},[159,67600,60138],{"class":165},[159,67602,56813],{"class":192},[159,67604,1165],{"class":165},[159,67606,67607],{"class":161,"line":7110},[159,67608,56830],{"class":1135},[159,67610,67611,67613,67615,67617,67619,67621],{"class":161,"line":7115},[159,67612,56835],{"class":165},[159,67614,189],{"class":1142},[159,67616,56840],{"class":165},[159,67618,56843],{"class":8765},[159,67620,189],{"class":1142},[159,67622,25222],{"class":165},[159,67624,67625,67627,67629,67631],{"class":161,"line":7120},[159,67626,56852],{"class":192},[159,67628,20934],{"class":165},[159,67630,56857],{"class":1146},[159,67632,56860],{"class":165},[159,67634,67635,67637],{"class":161,"line":7125},[159,67636,56865],{"class":192},[159,67638,56868],{"class":165},[159,67640,67641,67643],{"class":161,"line":7131},[159,67642,56873],{"class":192},[159,67644,56876],{"class":165},[159,67646,67647,67649],{"class":161,"line":7137},[159,67648,56881],{"class":192},[159,67650,56884],{"class":165},[159,67652,67653,67655],{"class":161,"line":7143},[159,67654,56889],{"class":192},[159,67656,56892],{"class":165},[159,67658,67659],{"class":161,"line":7149},[159,67660,4863],{"class":165},[159,67662,67663],{"class":161,"line":7155},[159,67664,56901],{"class":1135},[159,67666,67667,67669],{"class":161,"line":7161},[159,67668,27711],{"class":1142},[159,67670,56908],{"class":165},[159,67672,67673],{"class":161,"line":7167},[159,67674,590],{"emptyLinePlaceholder":589},[159,67676,67677],{"class":161,"line":7173},[159,67678,56917],{"class":1135},[159,67680,67681,67683,67685],{"class":161,"line":7179},[159,67682,55465],{"class":1142},[159,67684,56924],{"class":185},[159,67686,56927],{"class":165},[159,67688,67689],{"class":161,"line":7184},[159,67690,56932],{"class":1135},[159,67692,67693,67695,67697,67699,67701,67703,67705,67707],{"class":161,"line":7189},[159,67694,56937],{"class":165},[159,67696,55212],{"class":8765},[159,67698,189],{"class":1142},[159,67700,1159],{"class":165},[159,67702,7925],{"class":1146},[159,67704,24233],{"class":165},[159,67706,8866],{"class":1146},[159,67708,18787],{"class":165},[159,67710,67711],{"class":161,"line":7195},[159,67712,56956],{"class":1135},[159,67714,67715],{"class":161,"line":7201},[159,67716,56961],{"class":1135},[159,67718,67719],{"class":161,"line":7207},[159,67720,56966],{"class":1135},[159,67722,67723,67725,67727,67729,67731,67733,67735],{"class":161,"line":7213},[159,67724,55246],{"class":165},[159,67726,4932],{"class":1146},[159,67728,24233],{"class":165},[159,67730,11034],{"class":1146},[159,67732,24233],{"class":165},[159,67734,4932],{"class":1146},[159,67736,1165],{"class":165},[159,67738,67739],{"class":161,"line":7219},[159,67740,56987],{"class":1135},[159,67742,67743],{"class":161,"line":7224},[159,67744,56992],{"class":1135},[159,67746,67747],{"class":161,"line":7230},[159,67748,56997],{"class":1135},[159,67750,67751],{"class":161,"line":7236},[159,67752,57002],{"class":1135},[159,67754,67755],{"class":161,"line":7242},[159,67756,57007],{"class":1135},[159,67758,67759,67761,67763,67765,67767,67769,67771,67773,67775],{"class":161,"line":7248},[159,67760,57012],{"class":165},[159,67762,57015],{"class":192},[159,67764,57018],{"class":165},[159,67766,57021],{"class":192},[159,67768,24233],{"class":165},[159,67770,57026],{"class":8765},[159,67772,189],{"class":1142},[159,67774,57031],{"class":192},[159,67776,1165],{"class":165},[159,67778,67779,67781,67783,67785,67787,67789,67791,67793,67795],{"class":161,"line":7254},[159,67780,57012],{"class":165},[159,67782,57015],{"class":192},[159,67784,57042],{"class":165},[159,67786,57045],{"class":192},[159,67788,24233],{"class":165},[159,67790,57026],{"class":8765},[159,67792,189],{"class":1142},[159,67794,57054],{"class":192},[159,67796,1165],{"class":165},[159,67798,67799],{"class":161,"line":7260},[159,67800,57061],{"class":1135},[159,67802,67803],{"class":161,"line":7265},[159,67804,57066],{"class":165},[159,67806,67807],{"class":161,"line":7270},[159,67808,57071],{"class":1135},[159,67810,67811,67813,67815],{"class":161,"line":7276},[159,67812,57076],{"class":165},[159,67814,57079],{"class":192},[159,67816,1165],{"class":165},[159,67818,67819,67821,67823],{"class":161,"line":7281},[159,67820,57086],{"class":165},[159,67822,57089],{"class":192},[159,67824,1165],{"class":165},[159,67826,67827],{"class":161,"line":7287},[159,67828,57096],{"class":1135},[159,67830,67831,67833,67835,67837,67839,67841,67843],{"class":161,"line":7292},[159,67832,55246],{"class":165},[159,67834,4932],{"class":1146},[159,67836,24233],{"class":165},[159,67838,11034],{"class":1146},[159,67840,24233],{"class":165},[159,67842,11034],{"class":1146},[159,67844,1165],{"class":165},[159,67846,67847,67849,67851,67853,67855,67857,67859,67861,67863],{"class":161,"line":7298},[159,67848,57012],{"class":165},[159,67850,57015],{"class":192},[159,67852,57121],{"class":165},[159,67854,57021],{"class":192},[159,67856,24233],{"class":165},[159,67858,57026],{"class":8765},[159,67860,189],{"class":1142},[159,67862,57132],{"class":192},[159,67864,1165],{"class":165},[159,67866,67867,67869,67871,67873,67875,67877,67879,67881,67883],{"class":161,"line":7304},[159,67868,57012],{"class":165},[159,67870,57015],{"class":192},[159,67872,57143],{"class":165},[159,67874,57045],{"class":192},[159,67876,24233],{"class":165},[159,67878,57026],{"class":8765},[159,67880,189],{"class":1142},[159,67882,57154],{"class":192},[159,67884,1165],{"class":165},[159,67886,67887],{"class":161,"line":7310},[159,67888,57161],{"class":1135},[159,67890,67891],{"class":161,"line":7316},[159,67892,57066],{"class":165},[159,67894,67895,67897,67899],{"class":161,"line":7322},[159,67896,57076],{"class":165},[159,67898,57015],{"class":192},[159,67900,1165],{"class":165},[159,67902,67903,67905,67907],{"class":161,"line":7328},[159,67904,57086],{"class":165},[159,67906,57180],{"class":192},[159,67908,1165],{"class":165},[159,67910,67911],{"class":161,"line":7333},[159,67912,57187],{"class":165},[159,67914,67915],{"class":161,"line":7342},[159,67916,590],{"emptyLinePlaceholder":589},[159,67918,67919],{"class":161,"line":7351},[159,67920,57196],{"class":1135},[159,67922,67923,67925,67927,67929,67931],{"class":161,"line":7356},[159,67924,18445],{"class":1142},[159,67926,54740],{"class":1146},[159,67928,26581],{"class":1142},[159,67930,54745],{"class":192},[159,67932,27364],{"class":165},[159,67934,67935],{"class":161,"line":21272},[159,67936,57213],{"class":1135},[159,67938,67939,67942,67944],{"class":161,"line":21277},[159,67940,67941],{"class":165},"    GoogLeNet",[159,67943,189],{"class":1142},[159,67945,67946],{"class":165},"GoogLeNet(Inception)\n",[159,67948,67949,67951,67953],{"class":161,"line":21288},[159,67950,57228],{"class":165},[159,67952,189],{"class":1142},[159,67954,57233],{"class":165},[159,67956,67957,67959,67961,67964,67966,67968,67970],{"class":161,"line":21293},[159,67958,56835],{"class":165},[159,67960,189],{"class":1142},[159,67962,67963],{"class":165},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[159,67965,57245],{"class":8765},[159,67967,189],{"class":1142},[159,67969,8920],{"class":1146},[159,67971,1165],{"class":165},[159,67973,67974],{"class":161,"line":21299},[159,67975,57256],{"class":165},[134,67977,67978],{"start":203},[106,67979,63969],{},[151,67981,67983],{"className":53900,"code":67982,"language":53902,"meta":25,"style":25},"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",[49,67984,67985,67991,68001,68011,68015,68025,68036,68040,68044,68048,68056,68072,68082,68098,68108,68122,68126,68136,68146,68156,68162,68166,68170,68178,68182,68198,68206,68210,68214,68222,68230,68234,68238,68242,68246,68252,68256,68266,68274,68282,68286,68290,68294,68302,68306,68322,68326,68330,68334,68346,68350,68362,68366,68370,68382,68386,68396,68400,68404,68416,68420,68428,68432,68436,68444,68448,68456,68460,68464,68468,68472,68476,68492,68500,68504,68508,68556,68562,68566,68576,68584,68592,68596,68600,68604,68608,68616,68620,68636,68640,68648,68656],{"__ignoreMap":25},[159,67986,67987,67989],{"class":161,"line":162},[159,67988,53914],{"class":1142},[159,67990,53917],{"class":165},[159,67992,67993,67995,67997,67999],{"class":161,"line":176},[159,67994,53914],{"class":1142},[159,67996,54935],{"class":165},[159,67998,54903],{"class":1142},[159,68000,54940],{"class":165},[159,68002,68003,68005,68007,68009],{"class":161,"line":203},[159,68004,54258],{"class":1142},[159,68006,54918],{"class":165},[159,68008,53914],{"class":1142},[159,68010,54923],{"class":165},[159,68012,68013],{"class":161,"line":223},[159,68014,57317],{"class":1135},[159,68016,68017,68019,68021,68023],{"class":161,"line":233},[159,68018,54258],{"class":1142},[159,68020,54888],{"class":165},[159,68022,53914],{"class":1142},[159,68024,54893],{"class":165},[159,68026,68027,68029,68031,68033],{"class":161,"line":239},[159,68028,54258],{"class":1142},[159,68030,55432],{"class":165},[159,68032,53914],{"class":1142},[159,68034,68035],{"class":165}," GoogLeNet,Inception\n",[159,68037,68038],{"class":161,"line":245},[159,68039,590],{"emptyLinePlaceholder":589},[159,68041,68042],{"class":161,"line":251},[159,68043,590],{"emptyLinePlaceholder":589},[159,68045,68046],{"class":161,"line":261},[159,68047,57346],{"class":1135},[159,68049,68050,68052,68054],{"class":161,"line":603},[159,68051,55465],{"class":1142},[159,68053,57353],{"class":185},[159,68055,55471],{"class":165},[159,68057,68058,68060,68062,68064,68066,68068,68070],{"class":161,"line":621},[159,68059,57360],{"class":165},[159,68061,189],{"class":1142},[159,68063,54975],{"class":165},[159,68065,54978],{"class":8765},[159,68067,189],{"class":1142},[159,68069,54983],{"class":192},[159,68071,17070],{"class":165},[159,68073,68074,68076,68078,68080],{"class":161,"line":634},[159,68075,57377],{"class":8765},[159,68077,189],{"class":1142},[159,68079,57382],{"class":1146},[159,68081,17070],{"class":165},[159,68083,68084,68086,68088,68090,68092,68094,68096],{"class":161,"line":640},[159,68085,57389],{"class":8765},[159,68087,189],{"class":1142},[159,68089,55012],{"class":165},[159,68091,55015],{"class":8765},[159,68093,189],{"class":1142},[159,68095,58844],{"class":1146},[159,68097,55023],{"class":165},[159,68099,68100,68102,68104,68106],{"class":161,"line":1075},[159,68101,57406],{"class":8765},[159,68103,189],{"class":1142},[159,68105,54995],{"class":1146},[159,68107,1165],{"class":165},[159,68109,68110,68112,68114,68116,68118,68120],{"class":161,"line":1081},[159,68111,57417],{"class":165},[159,68113,189],{"class":1142},[159,68115,55053],{"class":165},[159,68117,55056],{"class":8765},[159,68119,189],{"class":1142},[159,68121,57428],{"class":165},[159,68123,68124],{"class":161,"line":1091},[159,68125,57433],{"class":1135},[159,68127,68128,68130,68132,68134],{"class":161,"line":1100},[159,68129,57438],{"class":8765},[159,68131,189],{"class":1142},[159,68133,4932],{"class":1146},[159,68135,17070],{"class":165},[159,68137,68138,68140,68142,68144],{"class":161,"line":1123},[159,68139,57449],{"class":8765},[159,68141,189],{"class":1142},[159,68143,54995],{"class":1146},[159,68145,17070],{"class":165},[159,68147,68148,68150,68152,68154],{"class":161,"line":1132},[159,68149,57460],{"class":8765},[159,68151,189],{"class":1142},[159,68153,1489],{"class":1146},[159,68155,1165],{"class":165},[159,68157,68158,68160],{"class":161,"line":1139},[159,68159,27711],{"class":1142},[159,68161,57473],{"class":165},[159,68163,68164],{"class":161,"line":1168},[159,68165,590],{"emptyLinePlaceholder":589},[159,68167,68168],{"class":161,"line":1174},[159,68169,57482],{"class":1135},[159,68171,68172,68174,68176],{"class":161,"line":1180},[159,68173,55465],{"class":1142},[159,68175,57489],{"class":185},[159,68177,57492],{"class":165},[159,68179,68180],{"class":161,"line":1194},[159,68181,57497],{"class":1135},[159,68183,68184,68186,68188,68190,68192,68194,68196],{"class":161,"line":1200},[159,68185,54757],{"class":165},[159,68187,189],{"class":1142},[159,68189,54764],{"class":192},[159,68191,25367],{"class":1142},[159,68193,54769],{"class":165},[159,68195,25364],{"class":1142},[159,68197,57514],{"class":192},[159,68199,68200,68202,68204],{"class":161,"line":1221},[159,68201,54809],{"class":165},[159,68203,189],{"class":1142},[159,68205,55807],{"class":165},[159,68207,68208],{"class":161,"line":1230},[159,68209,590],{"emptyLinePlaceholder":589},[159,68211,68212],{"class":161,"line":1247},[159,68213,57531],{"class":1135},[159,68215,68216,68218,68220],{"class":161,"line":1265},[159,68217,57536],{"class":165},[159,68219,189],{"class":1142},[159,68221,55860],{"class":1146},[159,68223,68224,68226,68228],{"class":161,"line":1277},[159,68225,57545],{"class":165},[159,68227,189],{"class":1142},[159,68229,26716],{"class":1146},[159,68231,68232],{"class":161,"line":1283},[159,68233,590],{"emptyLinePlaceholder":589},[159,68235,68236],{"class":161,"line":1294},[159,68237,57558],{"class":1135},[159,68239,68240],{"class":161,"line":1305},[159,68241,57563],{"class":1135},[159,68243,68244],{"class":161,"line":1311},[159,68245,57568],{"class":1135},[159,68247,68248,68250],{"class":161,"line":1322},[159,68249,57573],{"class":1142},[159,68251,56372],{"class":165},[159,68253,68254],{"class":161,"line":1327},[159,68255,57580],{"class":1135},[159,68257,68258,68260,68262,68264],{"class":161,"line":1336},[159,68259,27032],{"class":1142},[159,68261,57587],{"class":165},[159,68263,49566],{"class":1142},[159,68265,57592],{"class":165},[159,68267,68268,68270,68272],{"class":161,"line":1345},[159,68269,57597],{"class":165},[159,68271,189],{"class":1142},[159,68273,57602],{"class":165},[159,68275,68276,68278,68280],{"class":161,"line":1350},[159,68277,57607],{"class":165},[159,68279,189],{"class":1142},[159,68281,57612],{"class":165},[159,68283,68284],{"class":161,"line":1764},[159,68285,57617],{"class":1135},[159,68287,68288],{"class":161,"line":1769},[159,68289,56364],{"class":165},[159,68291,68292],{"class":161,"line":1777},[159,68293,57626],{"class":1135},[159,68295,68296,68298,68300],{"class":161,"line":1788},[159,68297,56173],{"class":165},[159,68299,189],{"class":1142},[159,68301,57635],{"class":165},[159,68303,68304],{"class":161,"line":1802},[159,68305,57640],{"class":1135},[159,68307,68308,68310,68312,68314,68316,68318,68320],{"class":161,"line":1815},[159,68309,56188],{"class":165},[159,68311,189],{"class":1142},[159,68313,56193],{"class":165},[159,68315,56196],{"class":8765},[159,68317,189],{"class":1142},[159,68319,4932],{"class":1146},[159,68321,1165],{"class":165},[159,68323,68324],{"class":161,"line":1828},[159,68325,57661],{"class":1135},[159,68327,68328],{"class":161,"line":1841},[159,68329,57666],{"class":1135},[159,68331,68332],{"class":161,"line":1852},[159,68333,57671],{"class":1135},[159,68335,68336,68338,68340,68342,68344],{"class":161,"line":1866},[159,68337,57676],{"class":165},[159,68339,33073],{"class":1142},[159,68341,56286],{"class":165},[159,68343,26581],{"class":1142},[159,68345,57685],{"class":165},[159,68347,68348],{"class":161,"line":1879},[159,68349,57690],{"class":1135},[159,68351,68352,68354,68356,68358,68360],{"class":161,"line":1884},[159,68353,57695],{"class":165},[159,68355,33073],{"class":1142},[159,68357,57700],{"class":165},[159,68359,1489],{"class":1146},[159,68361,1165],{"class":165},[159,68363,68364],{"class":161,"line":1889},[159,68365,590],{"emptyLinePlaceholder":589},[159,68367,68368],{"class":161,"line":1899},[159,68369,57713],{"class":1135},[159,68371,68372,68374,68376,68378,68380],{"class":161,"line":1912},[159,68373,57718],{"class":165},[159,68375,189],{"class":1142},[159,68377,57723],{"class":165},[159,68379,13083],{"class":1142},[159,68381,57728],{"class":165},[159,68383,68384],{"class":161,"line":1925},[159,68385,57733],{"class":1135},[159,68387,68388,68390,68392,68394],{"class":161,"line":1956},[159,68389,55969],{"class":1146},[159,68391,1159],{"class":165},[159,68393,57742],{"class":192},[159,68395,57745],{"class":165},[159,68397,68398],{"class":161,"line":1971},[159,68399,590],{"emptyLinePlaceholder":589},[159,68401,68402],{"class":161,"line":1976},[159,68403,57754],{"class":1135},[159,68405,68406,68408,68410,68412,68414],{"class":161,"line":1981},[159,68407,18445],{"class":1142},[159,68409,54740],{"class":1146},[159,68411,26581],{"class":1142},[159,68413,54745],{"class":192},[159,68415,27364],{"class":165},[159,68417,68418],{"class":161,"line":1989},[159,68419,57771],{"class":1135},[159,68421,68422,68424,68426],{"class":161,"line":2001},[159,68423,54809],{"class":165},[159,68425,189],{"class":1142},[159,68427,67946],{"class":165},[159,68429,68430],{"class":161,"line":2006},[159,68431,57784],{"class":1135},[159,68433,68434],{"class":161,"line":2015},[159,68435,57789],{"class":1135},[159,68437,68438,68440,68442],{"class":161,"line":2024},[159,68439,57794],{"class":165},[159,68441,57797],{"class":192},[159,68443,18787],{"class":165},[159,68445,68446],{"class":161,"line":2029},[159,68447,57804],{"class":1135},[159,68449,68450,68452,68454],{"class":161,"line":2038},[159,68451,57417],{"class":165},[159,68453,189],{"class":1142},[159,68455,57813],{"class":165},[159,68457,68458],{"class":161,"line":2053},[159,68459,57818],{"class":1135},[159,68461,68462],{"class":161,"line":2070},[159,68463,57823],{"class":165},[159,68465,68466],{"class":161,"line":2095},[159,68467,590],{"emptyLinePlaceholder":589},[159,68469,68470],{"class":161,"line":2104},[159,68471,57832],{"class":1135},[159,68473,68474],{"class":161,"line":2120},[159,68475,57837],{"class":1135},[159,68477,68478,68480,68482,68484,68486,68488,68490],{"class":161,"line":2134},[159,68479,54757],{"class":165},[159,68481,189],{"class":1142},[159,68483,54764],{"class":192},[159,68485,25367],{"class":1142},[159,68487,54769],{"class":165},[159,68489,25364],{"class":1142},[159,68491,57514],{"class":192},[159,68493,68494,68496,68498],{"class":161,"line":2143},[159,68495,54809],{"class":165},[159,68497,189],{"class":1142},[159,68499,55807],{"class":165},[159,68501,68502],{"class":161,"line":2165},[159,68503,57866],{"class":1135},[159,68505,68506],{"class":161,"line":2178},[159,68507,57871],{"class":1135},[159,68509,68510,68512,68514,68516,68518,68520,68522,68524,68526,68528,68530,68532,68534,68536,68538,68540,68542,68544,68546,68548,68550,68552,68554],{"class":161,"line":2191},[159,68511,57876],{"class":165},[159,68513,189],{"class":1142},[159,68515,17263],{"class":165},[159,68517,57883],{"class":192},[159,68519,24233],{"class":165},[159,68521,57888],{"class":192},[159,68523,24233],{"class":165},[159,68525,57893],{"class":192},[159,68527,24233],{"class":165},[159,68529,57898],{"class":192},[159,68531,24233],{"class":165},[159,68533,57903],{"class":192},[159,68535,24233],{"class":165},[159,68537,57908],{"class":192},[159,68539,24233],{"class":165},[159,68541,57913],{"class":192},[159,68543,24233],{"class":165},[159,68545,57918],{"class":192},[159,68547,24233],{"class":165},[159,68549,57923],{"class":192},[159,68551,24233],{"class":165},[159,68553,57928],{"class":192},[159,68555,4634],{"class":165},[159,68557,68558,68560],{"class":161,"line":2204},[159,68559,57573],{"class":1142},[159,68561,56372],{"class":165},[159,68563,68564],{"class":161,"line":2217},[159,68565,57941],{"class":1135},[159,68567,68568,68570,68572,68574],{"class":161,"line":2230},[159,68569,27032],{"class":1142},[159,68571,57948],{"class":165},[159,68573,49566],{"class":1142},[159,68575,57592],{"class":165},[159,68577,68578,68580,68582],{"class":161,"line":2243},[159,68579,56128],{"class":165},[159,68581,189],{"class":1142},[159,68583,56133],{"class":165},[159,68585,68586,68588,68590],{"class":161,"line":2256},[159,68587,56143],{"class":165},[159,68589,189],{"class":1142},[159,68591,56148],{"class":165},[159,68593,68594],{"class":161,"line":2266},[159,68595,590],{"emptyLinePlaceholder":589},[159,68597,68598],{"class":161,"line":2275},[159,68599,57977],{"class":1135},[159,68601,68602],{"class":161,"line":2284},[159,68603,56364],{"class":165},[159,68605,68606],{"class":161,"line":2293},[159,68607,57986],{"class":1135},[159,68609,68610,68612,68614],{"class":161,"line":2306},[159,68611,56173],{"class":165},[159,68613,189],{"class":1142},[159,68615,56178],{"class":165},[159,68617,68618],{"class":161,"line":2330},[159,68619,57999],{"class":1135},[159,68621,68622,68624,68626,68628,68630,68632,68634],{"class":161,"line":2350},[159,68623,56188],{"class":165},[159,68625,189],{"class":1142},[159,68627,56193],{"class":165},[159,68629,56196],{"class":8765},[159,68631,189],{"class":1142},[159,68633,4932],{"class":1146},[159,68635,1165],{"class":165},[159,68637,68638],{"class":161,"line":2370},[159,68639,58020],{"class":1135},[159,68641,68642,68644,68646],{"class":161,"line":2390},[159,68643,58025],{"class":165},[159,68645,189],{"class":1142},[159,68647,58030],{"class":165},[159,68649,68650,68652,68654],{"class":161,"line":2410},[159,68651,58035],{"class":165},[159,68653,189],{"class":1142},[159,68655,58040],{"class":165},[159,68657,68658,68660,68662,68664,68666,68668,68670,68672],{"class":161,"line":2430},[159,68659,58045],{"class":1146},[159,68661,1159],{"class":165},[159,68663,58050],{"class":192},[159,68665,58053],{"class":165},[159,68667,58056],{"class":192},[159,68669,24233],{"class":165},[159,68671,58061],{"class":192},[159,68673,58064],{"class":165},[42,68675,68677],{"id":68676},"_24训练自己的数据集","2.4.训练自己的数据集",[14,68679,68680],{},"猫狗分类任务",[14,68682,68683],{},"划分数据集和验证集",[151,68685,68687],{"className":53900,"code":68686,"language":53902,"meta":25,"style":25},"# 创建脚本，用于划分数据集和验证集\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",[49,68688,68689,68694,68701,68706,68717,68724,68728,68738,68752,68761,68765,68770,68780,68800,68804,68809,68819,68830,68843,68847,68852,68861,68871,68882,68886,68891,68901,68905,68910,68915,68920,68925,68930,68934,68944,68970,68983,68995,69022,69027,69032,69046,69051,69063,69078,69093,69101,69105,69110,69116,69128,69141,69146,69151,69156,69206,69212,69216],{"__ignoreMap":25},[159,68690,68691],{"class":161,"line":162},[159,68692,68693],{"class":1135},"# 创建脚本，用于划分数据集和验证集\n",[159,68695,68696,68698],{"class":161,"line":176},[159,68697,53914],{"class":1142},[159,68699,68700],{"class":165}," os\n",[159,68702,68703],{"class":161,"line":203},[159,68704,68705],{"class":1135},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[159,68707,68708,68710,68713,68715],{"class":161,"line":223},[159,68709,54258],{"class":1142},[159,68711,68712],{"class":165}," shutil ",[159,68714,53914],{"class":1142},[159,68716,55340],{"class":165},[159,68718,68719,68721],{"class":161,"line":233},[159,68720,53914],{"class":1142},[159,68722,68723],{"class":165}," random\n",[159,68725,68726],{"class":161,"line":239},[159,68727,590],{"emptyLinePlaceholder":589},[159,68729,68730,68732,68735],{"class":161,"line":245},[159,68731,55465],{"class":1142},[159,68733,68734],{"class":185}," mkfile",[159,68736,68737],{"class":165},"(file):\n",[159,68739,68740,68742,68744,68747,68750],{"class":161,"line":251},[159,68741,26732],{"class":1142},[159,68743,62325],{"class":1142},[159,68745,68746],{"class":165}," os.path.exists(",[159,68748,68749],{"class":8765},"file",[159,68751,54307],{"class":165},[159,68753,68754,68757,68759],{"class":161,"line":261},[159,68755,68756],{"class":165},"        os.makedirs(",[159,68758,68749],{"class":8765},[159,68760,1165],{"class":165},[159,68762,68763],{"class":161,"line":603},[159,68764,590],{"emptyLinePlaceholder":589},[159,68766,68767],{"class":161,"line":621},[159,68768,68769],{"class":1135},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[159,68771,68772,68775,68777],{"class":161,"line":634},[159,68773,68774],{"class":165},"file_path",[159,68776,189],{"class":1142},[159,68778,68779],{"class":192},"'data_cat_dog'\n",[159,68781,68782,68785,68787,68790,68792,68795,68797],{"class":161,"line":640},[159,68783,68784],{"class":165},"flower_class",[159,68786,189],{"class":1142},[159,68788,68789],{"class":165},"[cla ",[159,68791,26657],{"class":1142},[159,68793,68794],{"class":165}," cla ",[159,68796,49566],{"class":1142},[159,68798,68799],{"class":165}," os.listdir(file_path)]\n",[159,68801,68802],{"class":161,"line":1075},[159,68803,590],{"emptyLinePlaceholder":589},[159,68805,68806],{"class":161,"line":1081},[159,68807,68808],{"class":1135},"# 创建训练集train文件夹\n",[159,68810,68811,68814,68817],{"class":161,"line":1091},[159,68812,68813],{"class":165},"mkfile(",[159,68815,68816],{"class":192},"'data\u002Ftrain'",[159,68818,1165],{"class":165},[159,68820,68821,68823,68825,68827],{"class":161,"line":1100},[159,68822,26657],{"class":1142},[159,68824,68794],{"class":165},[159,68826,49566],{"class":1142},[159,68828,68829],{"class":165}," flower_class:\n",[159,68831,68832,68835,68838,68840],{"class":161,"line":1123},[159,68833,68834],{"class":165},"    mkfile(",[159,68836,68837],{"class":192},"'data\u002Ftrain\u002F'",[159,68839,2704],{"class":1142},[159,68841,68842],{"class":165},"cla)\n",[159,68844,68845],{"class":161,"line":1132},[159,68846,590],{"emptyLinePlaceholder":589},[159,68848,68849],{"class":161,"line":1139},[159,68850,68851],{"class":1135},"# 创建验证集val文件夹\n",[159,68853,68854,68856,68859],{"class":161,"line":1168},[159,68855,68813],{"class":165},[159,68857,68858],{"class":192},"'data\u002Ftest'",[159,68860,1165],{"class":165},[159,68862,68863,68865,68867,68869],{"class":161,"line":1174},[159,68864,26657],{"class":1142},[159,68866,68794],{"class":165},[159,68868,49566],{"class":1142},[159,68870,68829],{"class":165},[159,68872,68873,68875,68878,68880],{"class":161,"line":1180},[159,68874,68834],{"class":165},[159,68876,68877],{"class":192},"'data\u002Ftest\u002F'",[159,68879,2704],{"class":1142},[159,68881,68842],{"class":165},[159,68883,68884],{"class":161,"line":1194},[159,68885,590],{"emptyLinePlaceholder":589},[159,68887,68888],{"class":161,"line":1200},[159,68889,68890],{"class":1135},"# 划分比例，训练集：测试集=9：1\n",[159,68892,68893,68896,68898],{"class":161,"line":1221},[159,68894,68895],{"class":165},"split_rate",[159,68897,189],{"class":1142},[159,68899,68900],{"class":1146},"0.1\n",[159,68902,68903],{"class":161,"line":1230},[159,68904,590],{"emptyLinePlaceholder":589},[159,68906,68907],{"class":161,"line":1247},[159,68908,68909],{"class":1135},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[159,68911,68912],{"class":161,"line":1265},[159,68913,68914],{"class":1135},"# cla_path：当前类别的原始图片路径\n",[159,68916,68917],{"class":161,"line":1277},[159,68918,68919],{"class":1135},"# images：当前类别下所有图片的文件名列表\n",[159,68921,68922],{"class":161,"line":1283},[159,68923,68924],{"class":1135},"# num：该类别图片总数\n",[159,68926,68927],{"class":161,"line":1294},[159,68928,68929],{"class":1135},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[159,68931,68932],{"class":161,"line":1305},[159,68933,590],{"emptyLinePlaceholder":589},[159,68935,68936,68938,68940,68942],{"class":161,"line":1311},[159,68937,26657],{"class":1142},[159,68939,68794],{"class":165},[159,68941,49566],{"class":1142},[159,68943,68829],{"class":165},[159,68945,68946,68949,68951,68954,68956,68959,68961,68963,68965,68967],{"class":161,"line":1322},[159,68947,68948],{"class":165},"    cla_path ",[159,68950,189],{"class":1142},[159,68952,68953],{"class":165}," file_path ",[159,68955,2704],{"class":1142},[159,68957,68958],{"class":192}," '\u002F'",[159,68960,3925],{"class":1142},[159,68962,68794],{"class":165},[159,68964,2704],{"class":1142},[159,68966,68958],{"class":192},[159,68968,68969],{"class":1135},"  # 某一类别的子目录\n",[159,68971,68972,68975,68977,68980],{"class":161,"line":1327},[159,68973,68974],{"class":165},"    images ",[159,68976,189],{"class":1142},[159,68978,68979],{"class":165}," os.listdir(cla_path)  ",[159,68981,68982],{"class":1135},"# iamges 列表存储了该目录下所有图像的名称\n",[159,68984,68985,68988,68990,68992],{"class":161,"line":1336},[159,68986,68987],{"class":165},"    num ",[159,68989,189],{"class":1142},[159,68991,30942],{"class":1146},[159,68993,68994],{"class":165},"(images)\n",[159,68996,68997,69000,69002,69005,69007,69009,69011,69014,69016,69019],{"class":161,"line":1345},[159,68998,68999],{"class":165},"    eval_index ",[159,69001,189],{"class":1142},[159,69003,69004],{"class":165}," random.sample(images, ",[159,69006,24339],{"class":8765},[159,69008,189],{"class":1142},[159,69010,23886],{"class":1146},[159,69012,69013],{"class":165},"(num ",[159,69015,4777],{"class":1142},[159,69017,69018],{"class":165}," split_rate))  ",[159,69020,69021],{"class":1135},"# 从images列表中随机抽取 k 个图像名称\n",[159,69023,69024],{"class":161,"line":1350},[159,69025,69026],{"class":1135},"    # 遍历该类别下的所有图片\n",[159,69028,69029],{"class":161,"line":1764},[159,69030,69031],{"class":1135},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[159,69033,69034,69036,69039,69041,69043],{"class":161,"line":1769},[159,69035,11677],{"class":1142},[159,69037,69038],{"class":165}," index, image ",[159,69040,49566],{"class":1142},[159,69042,55125],{"class":1146},[159,69044,69045],{"class":165},"(images):\n",[159,69047,69048],{"class":161,"line":1777},[159,69049,69050],{"class":1135},"        # eval_index 中保存验证集val的图像名称\n",[159,69052,69053,69055,69058,69060],{"class":161,"line":1788},[159,69054,17003],{"class":1142},[159,69056,69057],{"class":165}," image ",[159,69059,49566],{"class":1142},[159,69061,69062],{"class":165}," eval_index:\n",[159,69064,69065,69068,69070,69073,69075],{"class":161,"line":1802},[159,69066,69067],{"class":165},"            image_path ",[159,69069,189],{"class":1142},[159,69071,69072],{"class":165}," cla_path ",[159,69074,2704],{"class":1142},[159,69076,69077],{"class":165}," image\n",[159,69079,69080,69083,69085,69088,69090],{"class":161,"line":1815},[159,69081,69082],{"class":165},"            new_path ",[159,69084,189],{"class":1142},[159,69086,69087],{"class":192}," 'data\u002Ftest\u002F'",[159,69089,3925],{"class":1142},[159,69091,69092],{"class":165}," cla\n",[159,69094,69095,69098],{"class":161,"line":1828},[159,69096,69097],{"class":165},"            copy(image_path, new_path)  ",[159,69099,69100],{"class":1135},"# 将选中的图像复制到新路径\n",[159,69102,69103],{"class":161,"line":1841},[159,69104,590],{"emptyLinePlaceholder":589},[159,69106,69107],{"class":161,"line":1852},[159,69108,69109],{"class":1135},"        # 其余的图像保存在训练集train中\n",[159,69111,69112,69114],{"class":161,"line":1866},[159,69113,26176],{"class":1142},[159,69115,27364],{"class":165},[159,69117,69118,69120,69122,69124,69126],{"class":161,"line":1879},[159,69119,69067],{"class":165},[159,69121,189],{"class":1142},[159,69123,69072],{"class":165},[159,69125,2704],{"class":1142},[159,69127,69077],{"class":165},[159,69129,69130,69132,69134,69137,69139],{"class":161,"line":1884},[159,69131,69082],{"class":165},[159,69133,189],{"class":1142},[159,69135,69136],{"class":192}," 'data\u002Ftrain\u002F'",[159,69138,3925],{"class":1142},[159,69140,69092],{"class":165},[159,69142,69143],{"class":161,"line":1889},[159,69144,69145],{"class":165},"            copy(image_path, new_path)\n",[159,69147,69148],{"class":161,"line":1899},[159,69149,69150],{"class":1135},"            # 打印进度条信息\n",[159,69152,69153],{"class":161,"line":1912},[159,69154,69155],{"class":1135},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[159,69157,69158,69160,69162,69164,69167,69169,69171,69174,69176,69178,69180,69183,69186,69188,69190,69193,69196,69198,69200,69203],{"class":161,"line":1925},[159,69159,55969],{"class":1146},[159,69161,1159],{"class":165},[159,69163,24115],{"class":192},[159,69165,69166],{"class":1146},"\\r",[159,69168,17263],{"class":192},[159,69170,55977],{"class":1146},[159,69172,69173],{"class":192},"] processing [",[159,69175,55977],{"class":1146},[159,69177,13083],{"class":192},[159,69179,55977],{"class":1146},[159,69181,69182],{"class":192},"]\"",[159,69184,69185],{"class":165},".format(cla, index ",[159,69187,2704],{"class":1142},[159,69189,2707],{"class":1146},[159,69191,69192],{"class":165},", num), ",[159,69194,69195],{"class":8765},"end",[159,69197,189],{"class":1142},[159,69199,552],{"class":192},[159,69201,69202],{"class":165},")  ",[159,69204,69205],{"class":1135},"# processing bar\n",[159,69207,69208,69210],{"class":161,"line":1956},[159,69209,54819],{"class":1146},[159,69211,5158],{"class":165},[159,69213,69214],{"class":161,"line":1971},[159,69215,590],{"emptyLinePlaceholder":589},[159,69217,69218,69220,69222,69225],{"class":161,"line":1976},[159,69219,53937],{"class":1146},[159,69221,1159],{"class":165},[159,69223,69224],{"class":192},"\"processing done!\"",[159,69226,1165],{"class":165},[14,69228,69229],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[326,69231,69233],{"id":69232},"_242模型代码","2.4.2.模型代码",[14,69235,69236],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[151,69238,69240],{"className":53900,"code":69239,"language":53902,"meta":25,"style":25},"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",[49,69241,69242,69248,69258,69268,69272,69288,69296,69310,69320,69324,69354,69358,69392,69438,69442,69476,69522,69526,69530,69564,69594,69598,69606,69620,69642,69664,69682,69686,69700,69704,69708,69724,69728,69736,69750,69760,69804,69808,69836,69840,69850,69878,69882,69918,69922,69950,69954,69964,69996,70028,70056,70060,70070,70102,70134,70166,70198,70230,70258,70262,70272,70304,70336,70348,70352,70364,70368,70372,70384,70392,70412,70416,70420,70424,70428,70432,70436,70450,70458,70466,70478,70492,70500,70504,70512,70522,70532,70542,70552,70562,70568,70572,70576,70588,70608,70616],{"__ignoreMap":25},[159,69243,69244,69246],{"class":161,"line":162},[159,69245,53914],{"class":1142},[159,69247,53917],{"class":165},[159,69249,69250,69252,69254,69256],{"class":161,"line":176},[159,69251,54258],{"class":1142},[159,69253,54261],{"class":165},[159,69255,53914],{"class":1142},[159,69257,54266],{"class":165},[159,69259,69260,69262,69264,69266],{"class":161,"line":203},[159,69261,54258],{"class":1142},[159,69263,54278],{"class":165},[159,69265,53914],{"class":1142},[159,69267,54283],{"class":165},[159,69269,69270],{"class":161,"line":223},[159,69271,590],{"emptyLinePlaceholder":589},[159,69273,69274,69276,69278,69280,69282,69284,69286],{"class":161,"line":233},[159,69275,38260],{"class":1142},[159,69277,64888],{"class":185},[159,69279,1159],{"class":165},[159,69281,54299],{"class":185},[159,69283,9952],{"class":165},[159,69285,54304],{"class":185},[159,69287,54307],{"class":165},[159,69289,69290,69292,69294],{"class":161,"line":239},[159,69291,54322],{"class":1142},[159,69293,54325],{"class":1146},[159,69295,64907],{"class":165},[159,69297,69298,69300,69302,69304,69306,69308],{"class":161,"line":245},[159,69299,54338],{"class":1146},[159,69301,64914],{"class":165},[159,69303,54344],{"class":1146},[159,69305,13019],{"class":165},[159,69307,54349],{"class":1146},[159,69309,5158],{"class":165},[159,69311,69312,69314,69316,69318],{"class":161,"line":251},[159,69313,54365],{"class":1146},[159,69315,58166],{"class":165},[159,69317,189],{"class":1142},[159,69319,58171],{"class":165},[159,69321,69322],{"class":161,"line":261},[159,69323,64937],{"class":1135},[159,69325,69326,69328,69330,69332,69334,69336,69338,69340,69342,69344,69346,69348,69350,69352],{"class":161,"line":603},[159,69327,54365],{"class":1146},[159,69329,64944],{"class":165},[159,69331,189],{"class":1142},[159,69333,54373],{"class":165},[159,69335,54376],{"class":8765},[159,69337,189],{"class":1142},[159,69339,64955],{"class":165},[159,69341,54385],{"class":8765},[159,69343,189],{"class":1142},[159,69345,64962],{"class":165},[159,69347,54394],{"class":8765},[159,69349,189],{"class":1142},[159,69351,4932],{"class":1146},[159,69353,1165],{"class":165},[159,69355,69356],{"class":161,"line":621},[159,69357,64975],{"class":1135},[159,69359,69360,69362,69364,69366,69368,69370,69372,69374,69376,69378,69380,69382,69384,69386,69388,69390],{"class":161,"line":634},[159,69361,54365],{"class":1146},[159,69363,64982],{"class":165},[159,69365,189],{"class":1142},[159,69367,54373],{"class":165},[159,69369,54376],{"class":8765},[159,69371,189],{"class":1142},[159,69373,64955],{"class":165},[159,69375,54385],{"class":8765},[159,69377,189],{"class":1142},[159,69379,64999],{"class":165},[159,69381,1489],{"class":1146},[159,69383,65004],{"class":165},[159,69385,54394],{"class":8765},[159,69387,189],{"class":1142},[159,69389,4932],{"class":1146},[159,69391,1165],{"class":165},[159,69393,69394,69396,69398,69400,69402,69404,69406,69408,69410,69412,69414,69416,69418,69420,69422,69424,69426,69428,69430,69432,69434,69436],{"class":161,"line":640},[159,69395,54365],{"class":1146},[159,69397,65019],{"class":165},[159,69399,189],{"class":1142},[159,69401,54373],{"class":165},[159,69403,54376],{"class":8765},[159,69405,189],{"class":1142},[159,69407,64999],{"class":165},[159,69409,1489],{"class":1146},[159,69411,65004],{"class":165},[159,69413,54385],{"class":8765},[159,69415,189],{"class":1142},[159,69417,64999],{"class":165},[159,69419,4932],{"class":1146},[159,69421,65004],{"class":165},[159,69423,54394],{"class":8765},[159,69425,189],{"class":1142},[159,69427,23949],{"class":1146},[159,69429,24233],{"class":165},[159,69431,54403],{"class":8765},[159,69433,189],{"class":1142},[159,69435,4932],{"class":1146},[159,69437,1165],{"class":165},[159,69439,69440],{"class":161,"line":1075},[159,69441,65064],{"class":1135},[159,69443,69444,69446,69448,69450,69452,69454,69456,69458,69460,69462,69464,69466,69468,69470,69472,69474],{"class":161,"line":1081},[159,69445,54365],{"class":1146},[159,69447,65071],{"class":165},[159,69449,189],{"class":1142},[159,69451,54373],{"class":165},[159,69453,54376],{"class":8765},[159,69455,189],{"class":1142},[159,69457,64955],{"class":165},[159,69459,54385],{"class":8765},[159,69461,189],{"class":1142},[159,69463,65088],{"class":165},[159,69465,1489],{"class":1146},[159,69467,65004],{"class":165},[159,69469,54394],{"class":8765},[159,69471,189],{"class":1142},[159,69473,4932],{"class":1146},[159,69475,1165],{"class":165},[159,69477,69478,69480,69482,69484,69486,69488,69490,69492,69494,69496,69498,69500,69502,69504,69506,69508,69510,69512,69514,69516,69518,69520],{"class":161,"line":1091},[159,69479,54365],{"class":1146},[159,69481,65107],{"class":165},[159,69483,189],{"class":1142},[159,69485,54373],{"class":165},[159,69487,54376],{"class":8765},[159,69489,189],{"class":1142},[159,69491,65088],{"class":165},[159,69493,1489],{"class":1146},[159,69495,65004],{"class":165},[159,69497,54385],{"class":8765},[159,69499,189],{"class":1142},[159,69501,65088],{"class":165},[159,69503,4932],{"class":1146},[159,69505,65004],{"class":165},[159,69507,54394],{"class":8765},[159,69509,189],{"class":1142},[159,69511,1753],{"class":1146},[159,69513,24233],{"class":165},[159,69515,54403],{"class":8765},[159,69517,189],{"class":1142},[159,69519,11034],{"class":1146},[159,69521,1165],{"class":165},[159,69523,69524],{"class":161,"line":1100},[159,69525,65152],{"class":1135},[159,69527,69528],{"class":161,"line":1123},[159,69529,65157],{"class":1135},[159,69531,69532,69534,69536,69538,69540,69542,69544,69546,69548,69550,69552,69554,69556,69558,69560,69562],{"class":161,"line":1132},[159,69533,54365],{"class":1146},[159,69535,65164],{"class":165},[159,69537,189],{"class":1142},[159,69539,58224],{"class":165},[159,69541,54394],{"class":8765},[159,69543,189],{"class":1142},[159,69545,23949],{"class":1146},[159,69547,24233],{"class":165},[159,69549,54449],{"class":8765},[159,69551,189],{"class":1142},[159,69553,4932],{"class":1146},[159,69555,24233],{"class":165},[159,69557,54403],{"class":8765},[159,69559,189],{"class":1142},[159,69561,4932],{"class":1146},[159,69563,1165],{"class":165},[159,69565,69566,69568,69570,69572,69574,69576,69578,69580,69582,69584,69586,69588,69590,69592],{"class":161,"line":1139},[159,69567,54365],{"class":1146},[159,69569,65199],{"class":165},[159,69571,189],{"class":1142},[159,69573,54373],{"class":165},[159,69575,54376],{"class":8765},[159,69577,189],{"class":1142},[159,69579,64955],{"class":165},[159,69581,54385],{"class":8765},[159,69583,189],{"class":1142},[159,69585,65216],{"class":165},[159,69587,54394],{"class":8765},[159,69589,189],{"class":1142},[159,69591,4932],{"class":1146},[159,69593,1165],{"class":165},[159,69595,69596],{"class":161,"line":1168},[159,69597,590],{"emptyLinePlaceholder":589},[159,69599,69600,69602,69604],{"class":161,"line":1174},[159,69601,54322],{"class":1142},[159,69603,54613],{"class":185},[159,69605,54616],{"class":165},[159,69607,69608,69610,69612,69614,69616,69618],{"class":161,"line":1180},[159,69609,65241],{"class":165},[159,69611,189],{"class":1142},[159,69613,54344],{"class":1146},[159,69615,58579],{"class":165},[159,69617,54344],{"class":1146},[159,69619,65252],{"class":165},[159,69621,69622,69624,69626,69628,69630,69632,69634,69636,69638,69640],{"class":161,"line":1194},[159,69623,30696],{"class":165},[159,69625,189],{"class":1142},[159,69627,54344],{"class":1146},[159,69629,58579],{"class":165},[159,69631,54344],{"class":1146},[159,69633,65267],{"class":165},[159,69635,54344],{"class":1146},[159,69637,58579],{"class":165},[159,69639,54344],{"class":1146},[159,69641,65276],{"class":165},[159,69643,69644,69646,69648,69650,69652,69654,69656,69658,69660,69662],{"class":161,"line":1200},[159,69645,65281],{"class":165},[159,69647,189],{"class":1142},[159,69649,54344],{"class":1146},[159,69651,58579],{"class":165},[159,69653,54344],{"class":1146},[159,69655,65292],{"class":165},[159,69657,54344],{"class":1146},[159,69659,58579],{"class":165},[159,69661,54344],{"class":1146},[159,69663,65301],{"class":165},[159,69665,69666,69668,69670,69672,69674,69676,69678,69680],{"class":161,"line":1221},[159,69667,65306],{"class":165},[159,69669,189],{"class":1142},[159,69671,54344],{"class":1146},[159,69673,58579],{"class":165},[159,69675,54344],{"class":1146},[159,69677,65317],{"class":165},[159,69679,54344],{"class":1146},[159,69681,65322],{"class":165},[159,69683,69684],{"class":161,"line":1230},[159,69685,65327],{"class":1135},[159,69687,69688,69690,69692,69694,69696,69698],{"class":161,"line":1247},[159,69689,21176],{"class":1142},[159,69691,65334],{"class":165},[159,69693,56196],{"class":8765},[159,69695,189],{"class":1142},[159,69697,4932],{"class":1146},[159,69699,1165],{"class":165},[159,69701,69702],{"class":161,"line":1265},[159,69703,590],{"emptyLinePlaceholder":589},[159,69705,69706],{"class":161,"line":1277},[159,69707,65355],{"class":1135},[159,69709,69710,69712,69714,69716,69718,69720,69722],{"class":161,"line":1283},[159,69711,38260],{"class":1142},[159,69713,65362],{"class":185},[159,69715,1159],{"class":165},[159,69717,54299],{"class":185},[159,69719,9952],{"class":165},[159,69721,54304],{"class":185},[159,69723,54307],{"class":165},[159,69725,69726],{"class":161,"line":1294},[159,69727,65377],{"class":1135},[159,69729,69730,69732,69734],{"class":161,"line":1305},[159,69731,54322],{"class":1142},[159,69733,54325],{"class":1146},[159,69735,65386],{"class":165},[159,69737,69738,69740,69742,69744,69746,69748],{"class":161,"line":1311},[159,69739,54338],{"class":1146},[159,69741,65393],{"class":165},[159,69743,54344],{"class":1146},[159,69745,13019],{"class":165},[159,69747,54349],{"class":1146},[159,69749,5158],{"class":165},[159,69751,69752,69754,69756,69758],{"class":161,"line":1322},[159,69753,54365],{"class":1146},[159,69755,65408],{"class":165},[159,69757,189],{"class":1142},[159,69759,61404],{"class":165},[159,69761,69762,69764,69766,69768,69770,69772,69774,69776,69778,69780,69782,69784,69786,69788,69790,69792,69794,69796,69798,69800,69802],{"class":161,"line":1327},[159,69763,61409],{"class":165},[159,69765,54376],{"class":8765},[159,69767,189],{"class":1142},[159,69769,23949],{"class":1146},[159,69771,24233],{"class":165},[159,69773,54385],{"class":8765},[159,69775,189],{"class":1142},[159,69777,24070],{"class":1146},[159,69779,24233],{"class":165},[159,69781,54394],{"class":8765},[159,69783,189],{"class":1142},[159,69785,24224],{"class":1146},[159,69787,24233],{"class":165},[159,69789,54449],{"class":8765},[159,69791,189],{"class":1142},[159,69793,11034],{"class":1146},[159,69795,24233],{"class":165},[159,69797,54403],{"class":8765},[159,69799,189],{"class":1142},[159,69801,23949],{"class":1146},[159,69803,61442],{"class":165},[159,69805,69806],{"class":161,"line":1336},[159,69807,61447],{"class":165},[159,69809,69810,69812,69814,69816,69818,69820,69822,69824,69826,69828,69830,69832,69834],{"class":161,"line":1345},[159,69811,61492],{"class":165},[159,69813,54394],{"class":8765},[159,69815,189],{"class":1142},[159,69817,23949],{"class":1146},[159,69819,24233],{"class":165},[159,69821,54449],{"class":8765},[159,69823,189],{"class":1142},[159,69825,11034],{"class":1146},[159,69827,24233],{"class":165},[159,69829,54403],{"class":8765},[159,69831,189],{"class":1142},[159,69833,4932],{"class":1146},[159,69835,1165],{"class":165},[159,69837,69838],{"class":161,"line":1350},[159,69839,61521],{"class":165},[159,69841,69842,69844,69846,69848],{"class":161,"line":1764},[159,69843,54365],{"class":1146},[159,69845,65499],{"class":165},[159,69847,189],{"class":1142},[159,69849,61404],{"class":165},[159,69851,69852,69854,69856,69858,69860,69862,69864,69866,69868,69870,69872,69874,69876],{"class":161,"line":1769},[159,69853,61409],{"class":165},[159,69855,54376],{"class":8765},[159,69857,189],{"class":1142},[159,69859,24070],{"class":1146},[159,69861,24233],{"class":165},[159,69863,54385],{"class":8765},[159,69865,189],{"class":1142},[159,69867,24070],{"class":1146},[159,69869,24233],{"class":165},[159,69871,54394],{"class":8765},[159,69873,189],{"class":1142},[159,69875,4932],{"class":1146},[159,69877,61442],{"class":165},[159,69879,69880],{"class":161,"line":1777},[159,69881,61447],{"class":165},[159,69883,69884,69886,69888,69890,69892,69894,69896,69898,69900,69902,69904,69906,69908,69910,69912,69914,69916],{"class":161,"line":1788},[159,69885,61409],{"class":165},[159,69887,54376],{"class":8765},[159,69889,189],{"class":1142},[159,69891,24070],{"class":1146},[159,69893,24233],{"class":165},[159,69895,54385],{"class":8765},[159,69897,189],{"class":1142},[159,69899,65554],{"class":1146},[159,69901,24233],{"class":165},[159,69903,54394],{"class":8765},[159,69905,189],{"class":1142},[159,69907,23949],{"class":1146},[159,69909,24233],{"class":165},[159,69911,54403],{"class":8765},[159,69913,189],{"class":1142},[159,69915,4932],{"class":1146},[159,69917,61442],{"class":165},[159,69919,69920],{"class":161,"line":1802},[159,69921,61447],{"class":165},[159,69923,69924,69926,69928,69930,69932,69934,69936,69938,69940,69942,69944,69946,69948],{"class":161,"line":1815},[159,69925,61492],{"class":165},[159,69927,54394],{"class":8765},[159,69929,189],{"class":1142},[159,69931,23949],{"class":1146},[159,69933,24233],{"class":165},[159,69935,54449],{"class":8765},[159,69937,189],{"class":1142},[159,69939,11034],{"class":1146},[159,69941,24233],{"class":165},[159,69943,54403],{"class":8765},[159,69945,189],{"class":1142},[159,69947,4932],{"class":1146},[159,69949,1165],{"class":165},[159,69951,69952],{"class":161,"line":1828},[159,69953,61521],{"class":165},[159,69955,69956,69958,69960,69962],{"class":161,"line":1841},[159,69957,54365],{"class":1146},[159,69959,65615],{"class":165},[159,69961,189],{"class":1142},[159,69963,61404],{"class":165},[159,69965,69966,69968,69970,69972,69974,69976,69978,69980,69982,69984,69986,69988,69990,69992,69994],{"class":161,"line":1852},[159,69967,65624],{"class":165},[159,69969,65554],{"class":1146},[159,69971,24233],{"class":165},[159,69973,24070],{"class":1146},[159,69975,65633],{"class":165},[159,69977,24076],{"class":1146},[159,69979,24233],{"class":165},[159,69981,55588],{"class":1146},[159,69983,65642],{"class":165},[159,69985,24439],{"class":1146},[159,69987,24233],{"class":165},[159,69989,24064],{"class":1146},[159,69991,65651],{"class":165},[159,69993,24064],{"class":1146},[159,69995,61442],{"class":165},[159,69997,69998,70000,70002,70004,70006,70008,70010,70012,70014,70016,70018,70020,70022,70024,70026],{"class":161,"line":1866},[159,69999,65624],{"class":165},[159,70001,58265],{"class":1146},[159,70003,24233],{"class":165},[159,70005,55588],{"class":1146},[159,70007,65633],{"class":165},[159,70009,55588],{"class":1146},[159,70011,24233],{"class":165},[159,70013,65554],{"class":1146},[159,70015,65642],{"class":165},[159,70017,24064],{"class":1146},[159,70019,24233],{"class":165},[159,70021,24076],{"class":1146},[159,70023,65651],{"class":165},[159,70025,24070],{"class":1146},[159,70027,61442],{"class":165},[159,70029,70030,70032,70034,70036,70038,70040,70042,70044,70046,70048,70050,70052,70054],{"class":161,"line":1879},[159,70031,61492],{"class":165},[159,70033,54394],{"class":8765},[159,70035,189],{"class":1142},[159,70037,23949],{"class":1146},[159,70039,24233],{"class":165},[159,70041,54449],{"class":8765},[159,70043,189],{"class":1142},[159,70045,11034],{"class":1146},[159,70047,24233],{"class":165},[159,70049,54403],{"class":8765},[159,70051,189],{"class":1142},[159,70053,4932],{"class":1146},[159,70055,1165],{"class":165},[159,70057,70058],{"class":161,"line":1884},[159,70059,61521],{"class":165},[159,70061,70062,70064,70066,70068],{"class":161,"line":1889},[159,70063,54365],{"class":1146},[159,70065,65726],{"class":165},[159,70067,189],{"class":1142},[159,70069,61404],{"class":165},[159,70071,70072,70074,70076,70078,70080,70082,70084,70086,70088,70090,70092,70094,70096,70098,70100],{"class":161,"line":1899},[159,70073,65624],{"class":165},[159,70075,65737],{"class":1146},[159,70077,24233],{"class":165},[159,70079,65554],{"class":1146},[159,70081,65633],{"class":165},[159,70083,24076],{"class":1146},[159,70085,24233],{"class":165},[159,70087,65750],{"class":1146},[159,70089,65642],{"class":165},[159,70091,24439],{"class":1146},[159,70093,24233],{"class":165},[159,70095,7649],{"class":1146},[159,70097,65651],{"class":165},[159,70099,24070],{"class":1146},[159,70101,61442],{"class":165},[159,70103,70104,70106,70108,70110,70112,70114,70116,70118,70120,70122,70124,70126,70128,70130,70132],{"class":161,"line":1912},[159,70105,65624],{"class":165},[159,70107,61852],{"class":1146},[159,70109,24233],{"class":165},[159,70111,44575],{"class":1146},[159,70113,65633],{"class":165},[159,70115,24454],{"class":1146},[159,70117,24233],{"class":165},[159,70119,55020],{"class":1146},[159,70121,65642],{"class":165},[159,70123,10876],{"class":1146},[159,70125,24233],{"class":165},[159,70127,24070],{"class":1146},[159,70129,65651],{"class":165},[159,70131,24070],{"class":1146},[159,70133,61442],{"class":165},[159,70135,70136,70138,70140,70142,70144,70146,70148,70150,70152,70154,70156,70158,70160,70162,70164],{"class":161,"line":1925},[159,70137,65624],{"class":165},[159,70139,61852],{"class":1146},[159,70141,24233],{"class":165},[159,70143,55588],{"class":1146},[159,70145,65633],{"class":165},[159,70147,55588],{"class":1146},[159,70149,24233],{"class":165},[159,70151,58265],{"class":1146},[159,70153,65642],{"class":165},[159,70155,10876],{"class":1146},[159,70157,24233],{"class":165},[159,70159,24070],{"class":1146},[159,70161,65651],{"class":165},[159,70163,24070],{"class":1146},[159,70165,61442],{"class":165},[159,70167,70168,70170,70172,70174,70176,70178,70180,70182,70184,70186,70188,70190,70192,70194,70196],{"class":161,"line":1956},[159,70169,65624],{"class":165},[159,70171,61852],{"class":1146},[159,70173,24233],{"class":165},[159,70175,24454],{"class":1146},[159,70177,65633],{"class":165},[159,70179,55588],{"class":1146},[159,70181,24233],{"class":165},[159,70183,65847],{"class":1146},[159,70185,65642],{"class":165},[159,70187,24064],{"class":1146},[159,70189,24233],{"class":165},[159,70191,24070],{"class":1146},[159,70193,65651],{"class":165},[159,70195,24070],{"class":1146},[159,70197,61442],{"class":165},[159,70199,70200,70202,70204,70206,70208,70210,70212,70214,70216,70218,70220,70222,70224,70226,70228],{"class":161,"line":1971},[159,70201,65624],{"class":165},[159,70203,65868],{"class":1146},[159,70205,24233],{"class":165},[159,70207,58265],{"class":1146},[159,70209,65633],{"class":165},[159,70211,44575],{"class":1146},[159,70213,24233],{"class":165},[159,70215,65881],{"class":1146},[159,70217,65642],{"class":165},[159,70219,24064],{"class":1146},[159,70221,24233],{"class":165},[159,70223,55588],{"class":1146},[159,70225,65651],{"class":165},[159,70227,55588],{"class":1146},[159,70229,61442],{"class":165},[159,70231,70232,70234,70236,70238,70240,70242,70244,70246,70248,70250,70252,70254,70256],{"class":161,"line":1976},[159,70233,61492],{"class":165},[159,70235,54394],{"class":8765},[159,70237,189],{"class":1142},[159,70239,23949],{"class":1146},[159,70241,24233],{"class":165},[159,70243,54449],{"class":8765},[159,70245,189],{"class":1142},[159,70247,11034],{"class":1146},[159,70249,24233],{"class":165},[159,70251,54403],{"class":8765},[159,70253,189],{"class":1142},[159,70255,4932],{"class":1146},[159,70257,1165],{"class":165},[159,70259,70260],{"class":161,"line":1981},[159,70261,61521],{"class":165},[159,70263,70264,70266,70268,70270],{"class":161,"line":1989},[159,70265,54365],{"class":1146},[159,70267,65934],{"class":165},[159,70269,189],{"class":1142},[159,70271,61404],{"class":165},[159,70273,70274,70276,70278,70280,70282,70284,70286,70288,70290,70292,70294,70296,70298,70300,70302],{"class":161,"line":2001},[159,70275,65624],{"class":165},[159,70277,65945],{"class":1146},[159,70279,24233],{"class":165},[159,70281,58265],{"class":1146},[159,70283,65633],{"class":165},[159,70285,44575],{"class":1146},[159,70287,24233],{"class":165},[159,70289,65881],{"class":1146},[159,70291,65642],{"class":165},[159,70293,24064],{"class":1146},[159,70295,24233],{"class":165},[159,70297,55588],{"class":1146},[159,70299,65651],{"class":165},[159,70301,55588],{"class":1146},[159,70303,61442],{"class":165},[159,70305,70306,70308,70310,70312,70314,70316,70318,70320,70322,70324,70326,70328,70330,70332,70334],{"class":161,"line":2006},[159,70307,65624],{"class":165},[159,70309,65945],{"class":1146},[159,70311,24233],{"class":165},[159,70313,58335],{"class":1146},[159,70315,65633],{"class":165},[159,70317,65554],{"class":1146},[159,70319,24233],{"class":165},[159,70321,58335],{"class":1146},[159,70323,65642],{"class":165},[159,70325,7649],{"class":1146},[159,70327,24233],{"class":165},[159,70329,55588],{"class":1146},[159,70331,65651],{"class":165},[159,70333,55588],{"class":1146},[159,70335,61442],{"class":165},[159,70337,70338,70340,70342,70344,70346],{"class":161,"line":2015},[159,70339,66008],{"class":165},[159,70341,4932],{"class":1146},[159,70343,24233],{"class":165},[159,70345,4932],{"class":1146},[159,70347,66017],{"class":165},[159,70349,70350],{"class":161,"line":2024},[159,70351,62185],{"class":165},[159,70353,70354,70356,70358,70360,70362],{"class":161,"line":2029},[159,70355,62190],{"class":165},[159,70357,66028],{"class":1146},[159,70359,24233],{"class":165},[159,70361,11034],{"class":1146},[159,70363,1165],{"class":165},[159,70365,70366],{"class":161,"line":2038},[159,70367,61521],{"class":165},[159,70369,70370],{"class":161,"line":2053},[159,70371,66043],{"class":1135},[159,70373,70374,70376,70378,70380,70382],{"class":161,"line":2070},[159,70375,27032],{"class":1142},[159,70377,62263],{"class":165},[159,70379,49566],{"class":1142},[159,70381,62268],{"class":1146},[159,70383,62271],{"class":165},[159,70385,70386,70388,70390],{"class":161,"line":2095},[159,70387,28260],{"class":1142},[159,70389,62283],{"class":1146},[159,70391,62286],{"class":165},[159,70393,70394,70396,70398,70400,70402,70404,70406,70408,70410],{"class":161,"line":2104},[159,70395,62296],{"class":165},[159,70397,66070],{"class":8765},[159,70399,189],{"class":1142},[159,70401,66075],{"class":192},[159,70403,24233],{"class":165},[159,70405,62299],{"class":8765},[159,70407,189],{"class":1142},[159,70409,62304],{"class":192},[159,70411,1165],{"class":165},[159,70413,70414],{"class":161,"line":2120},[159,70415,66090],{"class":1135},[159,70417,70418],{"class":161,"line":2134},[159,70419,66095],{"class":1135},[159,70421,70422],{"class":161,"line":2143},[159,70423,66100],{"class":1135},[159,70425,70426],{"class":161,"line":2165},[159,70427,66105],{"class":1135},[159,70429,70430],{"class":161,"line":2178},[159,70431,66110],{"class":1135},[159,70433,70434],{"class":161,"line":2191},[159,70435,66115],{"class":1135},[159,70437,70438,70440,70442,70444,70446,70448],{"class":161,"line":2204},[159,70439,62316],{"class":1142},[159,70441,62319],{"class":165},[159,70443,62322],{"class":1142},[159,70445,62325],{"class":1142},[159,70447,62328],{"class":1146},[159,70449,27364],{"class":165},[159,70451,70452,70454,70456],{"class":161,"line":2217},[159,70453,62340],{"class":165},[159,70455,1489],{"class":1146},[159,70457,1165],{"class":165},[159,70459,70460,70462,70464],{"class":161,"line":2230},[159,70461,66142],{"class":1142},[159,70463,62283],{"class":1146},[159,70465,62359],{"class":165},[159,70467,70468,70470,70472,70474,70476],{"class":161,"line":2243},[159,70469,66151],{"class":165},[159,70471,1489],{"class":1146},[159,70473,24233],{"class":165},[159,70475,62381],{"class":1146},[159,70477,1165],{"class":165},[159,70479,70480,70482,70484,70486,70488,70490],{"class":161,"line":2256},[159,70481,66164],{"class":1142},[159,70483,62319],{"class":165},[159,70485,62322],{"class":1142},[159,70487,62325],{"class":1142},[159,70489,62328],{"class":1146},[159,70491,27364],{"class":165},[159,70493,70494,70496,70498],{"class":161,"line":2266},[159,70495,66179],{"class":165},[159,70497,1489],{"class":1146},[159,70499,1165],{"class":165},[159,70501,70502],{"class":161,"line":2275},[159,70503,58560],{"class":1135},[159,70505,70506,70508,70510],{"class":161,"line":2284},[159,70507,54322],{"class":1142},[159,70509,54613],{"class":185},[159,70511,54616],{"class":165},[159,70513,70514,70516,70518,70520],{"class":161,"line":2293},[159,70515,54621],{"class":165},[159,70517,189],{"class":1142},[159,70519,54344],{"class":1146},[159,70521,66206],{"class":165},[159,70523,70524,70526,70528,70530],{"class":161,"line":2306},[159,70525,54621],{"class":165},[159,70527,189],{"class":1142},[159,70529,54344],{"class":1146},[159,70531,66217],{"class":165},[159,70533,70534,70536,70538,70540],{"class":161,"line":2330},[159,70535,54621],{"class":165},[159,70537,189],{"class":1142},[159,70539,54344],{"class":1146},[159,70541,66228],{"class":165},[159,70543,70544,70546,70548,70550],{"class":161,"line":2350},[159,70545,54621],{"class":165},[159,70547,189],{"class":1142},[159,70549,54344],{"class":1146},[159,70551,66239],{"class":165},[159,70553,70554,70556,70558,70560],{"class":161,"line":2370},[159,70555,54621],{"class":165},[159,70557,189],{"class":1142},[159,70559,54344],{"class":1146},[159,70561,66250],{"class":165},[159,70563,70564,70566],{"class":161,"line":2390},[159,70565,21176],{"class":1142},[159,70567,54729],{"class":165},[159,70569,70570],{"class":161,"line":2410},[159,70571,590],{"emptyLinePlaceholder":589},[159,70573,70574],{"class":161,"line":2430},[159,70575,66265],{"class":1135},[159,70577,70578,70580,70582,70584,70586],{"class":161,"line":2450},[159,70579,18445],{"class":1142},[159,70581,54740],{"class":1146},[159,70583,26581],{"class":1142},[159,70585,54745],{"class":192},[159,70587,27364],{"class":165},[159,70589,70590,70592,70594,70596,70598,70600,70602,70604,70606],{"class":161,"line":2471},[159,70591,54757],{"class":165},[159,70593,189],{"class":1142},[159,70595,53973],{"class":165},[159,70597,54764],{"class":192},[159,70599,25367],{"class":1142},[159,70601,54769],{"class":165},[159,70603,25364],{"class":1142},[159,70605,53998],{"class":192},[159,70607,1165],{"class":165},[159,70609,70610,70612,70614],{"class":161,"line":2477},[159,70611,54809],{"class":165},[159,70613,189],{"class":1142},[159,70615,66306],{"class":165},[159,70617,70618,70620,70622,70624,70626,70628,70630,70632],{"class":161,"line":2498},[159,70619,54819],{"class":1146},[159,70621,54822],{"class":165},[159,70623,4932],{"class":1146},[159,70625,24233],{"class":165},[159,70627,55020],{"class":1146},[159,70629,24233],{"class":165},[159,70631,55020],{"class":1146},[159,70633,54835],{"class":165},[326,70635,70637],{"id":70636},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,70639,70640],{},"计算图片的均值与方差，用于训练中归一化处理操作",[151,70642,70644],{"className":53900,"code":70643,"language":53902,"meta":25,"style":25},"# 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",[49,70645,70646,70651,70664,70669,70675,70680,70690,70694,70699,70709,70713,70718,70727,70744,70748,70753,70765,70777,70808,70817,70827,70837,70841,70846,70861,70865,70870,70875,70880,70890,70895,70920,70924,70929,70944,70948,70961,70965,70970,70975,70980,70985,70990,71000,71010,71033,71041,71049,71057,71061,71073,71077,71082,71086,71090,71097,71117,71141,71148,71162,71167,71172,71176,71190,71194,71206],{"__ignoreMap":25},[159,70647,70648],{"class":161,"line":162},[159,70649,70650],{"class":1135},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[159,70652,70653,70655,70658,70661],{"class":161,"line":176},[159,70654,54258],{"class":1142},[159,70656,70657],{"class":1146}," PIL",[159,70659,70660],{"class":1142}," import",[159,70662,70663],{"class":165}," Image\n",[159,70665,70666],{"class":161,"line":203},[159,70667,70668],{"class":1135},"# os 用来处理文件夹和文件路径\n",[159,70670,70671,70673],{"class":161,"line":223},[159,70672,53914],{"class":1142},[159,70674,68700],{"class":165},[159,70676,70677],{"class":161,"line":233},[159,70678,70679],{"class":1135},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[159,70681,70682,70684,70686,70688],{"class":161,"line":239},[159,70683,53914],{"class":1142},[159,70685,54900],{"class":165},[159,70687,54903],{"class":1142},[159,70689,54906],{"class":165},[159,70691,70692],{"class":161,"line":245},[159,70693,590],{"emptyLinePlaceholder":589},[159,70695,70696],{"class":161,"line":251},[159,70697,70698],{"class":1135},"# 文件夹路径，包含所有图片文件\n",[159,70700,70701,70704,70706],{"class":161,"line":261},[159,70702,70703],{"class":165},"folder_path ",[159,70705,189],{"class":1142},[159,70707,70708],{"class":192}," 'data_cat_dog'\n",[159,70710,70711],{"class":161,"line":603},[159,70712,590],{"emptyLinePlaceholder":589},[159,70714,70715],{"class":161,"line":621},[159,70716,70717],{"class":1135},"# 初始化累积变量\n",[159,70719,70720,70723,70725],{"class":161,"line":634},[159,70721,70722],{"class":165},"total_pixels ",[159,70724,189],{"class":1142},[159,70726,3785],{"class":1146},[159,70728,70729,70732,70734,70737,70739,70741],{"class":161,"line":640},[159,70730,70731],{"class":165},"sum_normalized_pixel_values ",[159,70733,189],{"class":1142},[159,70735,70736],{"class":165}," np.zeros(",[159,70738,23949],{"class":1146},[159,70740,69202],{"class":165},[159,70742,70743],{"class":1135},"# 如果是RGB图像，需要三个通道的均值和方差\n",[159,70745,70746],{"class":161,"line":1075},[159,70747,590],{"emptyLinePlaceholder":589},[159,70749,70750],{"class":161,"line":1081},[159,70751,70752],{"class":1135},"# 遍历文件夹中的图片文件\n",[159,70754,70755,70757,70760,70762],{"class":161,"line":1091},[159,70756,26657],{"class":1142},[159,70758,70759],{"class":165}," root, dirs, files ",[159,70761,49566],{"class":1142},[159,70763,70764],{"class":165}," os.walk(folder_path):\n",[159,70766,70767,70769,70772,70774],{"class":161,"line":1100},[159,70768,11677],{"class":1142},[159,70770,70771],{"class":165}," filename ",[159,70773,49566],{"class":1142},[159,70775,70776],{"class":165}," files:\n",[159,70778,70779,70781,70784,70787,70789,70792,70794,70797,70799,70802,70805],{"class":161,"line":1123},[159,70780,17003],{"class":1142},[159,70782,70783],{"class":165}," filename.endswith((",[159,70785,70786],{"class":192},"'.jpg'",[159,70788,1939],{"class":165},[159,70790,70791],{"class":192},"'.jpeg'",[159,70793,1939],{"class":165},[159,70795,70796],{"class":192},"'.png'",[159,70798,1939],{"class":165},[159,70800,70801],{"class":192},"'.bmp'",[159,70803,70804],{"class":165},")):  ",[159,70806,70807],{"class":1135},"# 可根据实际情况添加其他格式\n",[159,70809,70810,70812,70814],{"class":161,"line":1132},[159,70811,69067],{"class":165},[159,70813,189],{"class":1142},[159,70815,70816],{"class":165}," os.path.join(root, filename)\n",[159,70818,70819,70822,70824],{"class":161,"line":1139},[159,70820,70821],{"class":165},"            image ",[159,70823,189],{"class":1142},[159,70825,70826],{"class":165}," Image.open(image_path)\n",[159,70828,70829,70832,70834],{"class":161,"line":1168},[159,70830,70831],{"class":165},"            image_array ",[159,70833,189],{"class":1142},[159,70835,70836],{"class":165}," np.array(image)\n",[159,70838,70839],{"class":161,"line":1174},[159,70840,590],{"emptyLinePlaceholder":589},[159,70842,70843],{"class":161,"line":1180},[159,70844,70845],{"class":1135},"            # 归一化像素值到0-1之间\n",[159,70847,70848,70851,70853,70856,70858],{"class":161,"line":1194},[159,70849,70850],{"class":165},"            normalized_image_array ",[159,70852,189],{"class":1142},[159,70854,70855],{"class":165}," image_array ",[159,70857,13083],{"class":1142},[159,70859,70860],{"class":1146}," 255.0\n",[159,70862,70863],{"class":161,"line":1200},[159,70864,590],{"emptyLinePlaceholder":589},[159,70866,70867],{"class":161,"line":1221},[159,70868,70869],{"class":1135},"            # print(image_path)\n",[159,70871,70872],{"class":161,"line":1230},[159,70873,70874],{"class":1135},"            # print(normalized_image_array.shape)\n",[159,70876,70877],{"class":161,"line":1247},[159,70878,70879],{"class":1135},"            # 累积归一化后的像素值和像素数量\n",[159,70881,70882,70885,70887],{"class":161,"line":1265},[159,70883,70884],{"class":165},"            total_pixels ",[159,70886,33073],{"class":1142},[159,70888,70889],{"class":165}," normalized_image_array.size\n",[159,70891,70892],{"class":161,"line":1277},[159,70893,70894],{"class":1135},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[159,70896,70897,70900,70902,70905,70908,70910,70912,70914,70916,70918],{"class":161,"line":1283},[159,70898,70899],{"class":165},"            sum_normalized_pixel_values ",[159,70901,33073],{"class":1142},[159,70903,70904],{"class":165}," np.sum(normalized_image_array, ",[159,70906,70907],{"class":8765},"axis",[159,70909,189],{"class":1142},[159,70911,1159],{"class":165},[159,70913,1489],{"class":1146},[159,70915,1939],{"class":165},[159,70917,4932],{"class":1146},[159,70919,18787],{"class":165},[159,70921,70922],{"class":161,"line":1294},[159,70923,590],{"emptyLinePlaceholder":589},[159,70925,70926],{"class":161,"line":1305},[159,70927,70928],{"class":1135},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[159,70930,70931,70934,70936,70939,70941],{"class":161,"line":1311},[159,70932,70933],{"class":165},"mean ",[159,70935,189],{"class":1142},[159,70937,70938],{"class":165}," sum_normalized_pixel_values ",[159,70940,13083],{"class":1142},[159,70942,70943],{"class":165}," total_pixels\n",[159,70945,70946],{"class":161,"line":1322},[159,70947,590],{"emptyLinePlaceholder":589},[159,70949,70950,70953,70955,70957,70959],{"class":161,"line":1327},[159,70951,70952],{"class":165},"sum_squared_diff ",[159,70954,189],{"class":1142},[159,70956,70736],{"class":165},[159,70958,23949],{"class":1146},[159,70960,1165],{"class":165},[159,70962,70963],{"class":161,"line":1336},[159,70964,590],{"emptyLinePlaceholder":589},[159,70966,70967],{"class":161,"line":1345},[159,70968,70969],{"class":1135},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[159,70971,70972],{"class":161,"line":1350},[159,70973,70974],{"class":1135},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[159,70976,70977],{"class":161,"line":1764},[159,70978,70979],{"class":1135},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[159,70981,70982],{"class":161,"line":1769},[159,70983,70984],{"class":1135},"# Image.open(image_path)：打开图片\n",[159,70986,70987],{"class":161,"line":1777},[159,70988,70989],{"class":1135},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[159,70991,70992,70994,70996,70998],{"class":161,"line":1788},[159,70993,26657],{"class":1142},[159,70995,70759],{"class":165},[159,70997,49566],{"class":1142},[159,70999,70764],{"class":165},[159,71001,71002,71004,71006,71008],{"class":161,"line":1802},[159,71003,11677],{"class":1142},[159,71005,70771],{"class":165},[159,71007,49566],{"class":1142},[159,71009,70776],{"class":165},[159,71011,71012,71014,71016,71018,71020,71022,71024,71026,71028,71030],{"class":161,"line":1815},[159,71013,17003],{"class":1142},[159,71015,70783],{"class":165},[159,71017,70786],{"class":192},[159,71019,1939],{"class":165},[159,71021,70791],{"class":192},[159,71023,1939],{"class":165},[159,71025,70796],{"class":192},[159,71027,1939],{"class":165},[159,71029,70801],{"class":192},[159,71031,71032],{"class":165},")):\n",[159,71034,71035,71037,71039],{"class":161,"line":1828},[159,71036,69067],{"class":165},[159,71038,189],{"class":1142},[159,71040,70816],{"class":165},[159,71042,71043,71045,71047],{"class":161,"line":1841},[159,71044,70821],{"class":165},[159,71046,189],{"class":1142},[159,71048,70826],{"class":165},[159,71050,71051,71053,71055],{"class":161,"line":1852},[159,71052,70831],{"class":165},[159,71054,189],{"class":1142},[159,71056,70836],{"class":165},[159,71058,71059],{"class":161,"line":1866},[159,71060,70845],{"class":1135},[159,71062,71063,71065,71067,71069,71071],{"class":161,"line":1879},[159,71064,70850],{"class":165},[159,71066,189],{"class":1142},[159,71068,70855],{"class":165},[159,71070,13083],{"class":1142},[159,71072,70860],{"class":1146},[159,71074,71075],{"class":161,"line":1884},[159,71076,70874],{"class":1135},[159,71078,71079],{"class":161,"line":1889},[159,71080,71081],{"class":1135},"            # print(mean.shape)\n",[159,71083,71084],{"class":161,"line":1899},[159,71085,70869],{"class":1135},[159,71087,71088],{"class":161,"line":1912},[159,71089,590],{"emptyLinePlaceholder":589},[159,71091,71092,71095],{"class":161,"line":1925},[159,71093,71094],{"class":1142},"            try",[159,71096,27364],{"class":165},[159,71098,71099,71102,71104,71107,71109,71112,71114],{"class":161,"line":1956},[159,71100,71101],{"class":165},"                diff ",[159,71103,189],{"class":1142},[159,71105,71106],{"class":165}," (normalized_image_array ",[159,71108,24376],{"class":1142},[159,71110,71111],{"class":165}," mean) ",[159,71113,34236],{"class":1142},[159,71115,71116],{"class":1146}," 2\n",[159,71118,71119,71122,71124,71127,71129,71131,71133,71135,71137,71139],{"class":161,"line":1971},[159,71120,71121],{"class":165},"                sum_squared_diff ",[159,71123,33073],{"class":1142},[159,71125,71126],{"class":165}," np.sum(diff, ",[159,71128,70907],{"class":8765},[159,71130,189],{"class":1142},[159,71132,1159],{"class":165},[159,71134,1489],{"class":1146},[159,71136,1939],{"class":165},[159,71138,4932],{"class":1146},[159,71140,18787],{"class":165},[159,71142,71143,71146],{"class":161,"line":1976},[159,71144,71145],{"class":1142},"            except",[159,71147,27364],{"class":165},[159,71149,71150,71153,71155,71157,71160],{"class":161,"line":1981},[159,71151,71152],{"class":1146},"                print",[159,71154,1159],{"class":165},[159,71156,23931],{"class":1142},[159,71158,71159],{"class":192},"\"捕获到自定义异常\"",[159,71161,1165],{"class":165},[159,71163,71164],{"class":161,"line":1989},[159,71165,71166],{"class":1135},"            # diff = (normalized_image_array - mean) ** 2\n",[159,71168,71169],{"class":161,"line":2001},[159,71170,71171],{"class":1135},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[159,71173,71174],{"class":161,"line":2006},[159,71175,590],{"emptyLinePlaceholder":589},[159,71177,71178,71181,71183,71186,71188],{"class":161,"line":2015},[159,71179,71180],{"class":165},"variance ",[159,71182,189],{"class":1142},[159,71184,71185],{"class":165}," sum_squared_diff ",[159,71187,13083],{"class":1142},[159,71189,70943],{"class":165},[159,71191,71192],{"class":161,"line":2024},[159,71193,590],{"emptyLinePlaceholder":589},[159,71195,71196,71198,71200,71203],{"class":161,"line":2029},[159,71197,53937],{"class":1146},[159,71199,1159],{"class":165},[159,71201,71202],{"class":192},"\"Mean:\"",[159,71204,71205],{"class":165},", mean)\n",[159,71207,71208,71210,71212,71215],{"class":161,"line":2038},[159,71209,53937],{"class":1146},[159,71211,1159],{"class":165},[159,71213,71214],{"class":192},"\"Variance:\"",[159,71216,71217],{"class":165},", variance)\n",[151,71219,71221],{"className":53900,"code":71220,"language":53902,"meta":25,"style":25},"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",[49,71222,71223,71229,71235,71245,71251,71261,71275,71285,71295,71305,71309,71319,71329,71333,71337,71345,71350,71355,71373,71377,71382,71387,71392,71397,71438,71443,71453,71458,71471,71476,71481,71486,71491,71496,71500,71505,71510,71532,71536,71568,71582,71592,71602,71606,71616,71630,71640,71650,71660,71666,71670,71674,71678,71682,71686,71694,71714,71718,71722,71726,71730,71746,71750,71754,71762,71766,71770,71778,71782,71786,71790,71798,71802,71806,71810,71818,71822,71830,71834,71842,71846,71854,71858,71866,71870,71874,71882,71886,71890,71902,71926,71940,71944,71948,71952,71960,71964,71972,71976,71984,71988,71996,72000,72008,72012,72020,72024,72036,72040,72048,72052,72060,72064,72068,72072,72076,72084,72088,72104,72108,72116,72120,72124,72128,72132,72136,72140,72144,72160,72164,72176,72180,72192,72196,72208,72212,72220,72224,72232,72236,72240,72244,72250,72254,72262,72266,72282,72286,72294,72298,72314,72326,72330,72342,72346,72350,72358,72362,72366,72374,72378,72386,72390,72398,72402,72406,72448,72490,72494,72498,72514,72518,72534,72538,72542,72550,72554,72558,72570,72608,72612,72616,72624,72628,72642,72652,72658,72664,72670,72676,72680,72684,72690,72694,72698,72706,72710,72728,72732,72736,72740,72756,72760,72764,72768,72772,72776,72796,72816,72820,72824,72828,72836,72844,72848,72864,72884,72904,72908,72912,72920,72928,72932,72936,72940,72952,72956,72964,72972,72988],{"__ignoreMap":25},[159,71224,71225,71227],{"class":161,"line":162},[159,71226,53914],{"class":1142},[159,71228,55340],{"class":165},[159,71230,71231,71233],{"class":161,"line":176},[159,71232,53914],{"class":1142},[159,71234,55347],{"class":165},[159,71236,71237,71239,71241,71243],{"class":161,"line":203},[159,71238,53914],{"class":1142},[159,71240,55358],{"class":165},[159,71242,54903],{"class":1142},[159,71244,55363],{"class":165},[159,71246,71247,71249],{"class":161,"line":223},[159,71248,53914],{"class":1142},[159,71250,53917],{"class":165},[159,71252,71253,71255,71257,71259],{"class":161,"line":233},[159,71254,54258],{"class":1142},[159,71256,54935],{"class":165},[159,71258,53914],{"class":1142},[159,71260,55380],{"class":165},[159,71262,71263,71265,71267,71269,71272],{"class":161,"line":239},[159,71264,54258],{"class":1142},[159,71266,54888],{"class":165},[159,71268,53914],{"class":1142},[159,71270,71271],{"class":165}," ImageFolder ",[159,71273,71274],{"class":1135},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[159,71276,71277,71279,71281,71283],{"class":161,"line":245},[159,71278,54258],{"class":1142},[159,71280,54918],{"class":165},[159,71282,53914],{"class":1142},[159,71284,54923],{"class":165},[159,71286,71287,71289,71291,71293],{"class":161,"line":251},[159,71288,53914],{"class":1142},[159,71290,54935],{"class":165},[159,71292,54903],{"class":1142},[159,71294,54940],{"class":165},[159,71296,71297,71299,71301,71303],{"class":161,"line":261},[159,71298,53914],{"class":1142},[159,71300,54952],{"class":165},[159,71302,54903],{"class":1142},[159,71304,54957],{"class":165},[159,71306,71307],{"class":161,"line":603},[159,71308,55425],{"class":1135},[159,71310,71311,71313,71315,71317],{"class":161,"line":621},[159,71312,54258],{"class":1142},[159,71314,55432],{"class":165},[159,71316,53914],{"class":1142},[159,71318,66426],{"class":165},[159,71320,71321,71323,71325,71327],{"class":161,"line":634},[159,71322,54258],{"class":1142},[159,71324,54261],{"class":165},[159,71326,53914],{"class":1142},[159,71328,54266],{"class":165},[159,71330,71331],{"class":161,"line":640},[159,71332,590],{"emptyLinePlaceholder":589},[159,71334,71335],{"class":161,"line":1075},[159,71336,55460],{"class":1135},[159,71338,71339,71341,71343],{"class":161,"line":1081},[159,71340,55465],{"class":1142},[159,71342,55468],{"class":185},[159,71344,55471],{"class":165},[159,71346,71347],{"class":161,"line":1091},[159,71348,71349],{"class":1135},"    # 导入自己的数据集，并进行数据处理\n",[159,71351,71352],{"class":161,"line":1100},[159,71353,71354],{"class":1135},"    # 定义数据集的路径\n",[159,71356,71357,71360,71362,71364,71366,71368,71371],{"class":161,"line":1123},[159,71358,71359],{"class":1146},"    ROOT_PATH",[159,71361,189],{"class":1142},[159,71363,24504],{"class":1142},[159,71365,24115],{"class":192},[159,71367,9952],{"class":1146},[159,71369,71370],{"class":18361},"\u002Fdata\u002Ftrain",[159,71372,48656],{"class":192},[159,71374,71375],{"class":161,"line":1132},[159,71376,590],{"emptyLinePlaceholder":589},[159,71378,71379],{"class":161,"line":1139},[159,71380,71381],{"class":1135},"    # 定义归一化方法\n",[159,71383,71384],{"class":161,"line":1168},[159,71385,71386],{"class":1135},"    # 这里需要先计算一下数据集的均值和方差\n",[159,71388,71389],{"class":161,"line":1174},[159,71390,71391],{"class":1135},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[159,71393,71394],{"class":161,"line":1180},[159,71395,71396],{"class":1135},"    # 第一个参数是均值，第二个参数是方差\n",[159,71398,71399,71402,71404,71407,71410,71412,71415,71417,71420,71423,71426,71428,71431,71433,71436],{"class":161,"line":1194},[159,71400,71401],{"class":165},"    normalize",[159,71403,189],{"class":1142},[159,71405,71406],{"class":165},"transforms.Normalize([",[159,71408,71409],{"class":1146},"0.162",[159,71411,24233],{"class":165},[159,71413,71414],{"class":1146},"0.151",[159,71416,24233],{"class":165},[159,71418,71419],{"class":1146},"0.138",[159,71421,71422],{"class":165},"],[",[159,71424,71425],{"class":1146},"0.058",[159,71427,24233],{"class":165},[159,71429,71430],{"class":1146},"0.052",[159,71432,24233],{"class":165},[159,71434,71435],{"class":1146},"0.048",[159,71437,28275],{"class":165},[159,71439,71440],{"class":161,"line":1200},[159,71441,71442],{"class":1135},"    # 定义数据集处理方法变量\n",[159,71444,71445,71448,71450],{"class":161,"line":1221},[159,71446,71447],{"class":165},"    train_transform",[159,71449,189],{"class":1142},[159,71451,71452],{"class":165},"transforms.Compose([\n",[159,71454,71455],{"class":161,"line":1230},[159,71456,71457],{"class":1135},"        # 调整图像大小为224*224\n",[159,71459,71460,71463,71465,71467,71469],{"class":161,"line":1247},[159,71461,71462],{"class":165},"        transforms.Resize((",[159,71464,55020],{"class":1146},[159,71466,24233],{"class":165},[159,71468,55020],{"class":1146},[159,71470,66017],{"class":165},[159,71472,71473],{"class":161,"line":1265},[159,71474,71475],{"class":1135},"        # 将图像转换为张量\n",[159,71477,71478],{"class":161,"line":1277},[159,71479,71480],{"class":165},"        transforms.ToTensor(),\n",[159,71482,71483],{"class":161,"line":1283},[159,71484,71485],{"class":165},"        normalize])\n",[159,71487,71488],{"class":161,"line":1294},[159,71489,71490],{"class":1135},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[159,71492,71493],{"class":161,"line":1305},[159,71494,71495],{"class":1135},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[159,71497,71498],{"class":161,"line":1311},[159,71499,590],{"emptyLinePlaceholder":589},[159,71501,71502],{"class":161,"line":1322},[159,71503,71504],{"class":1135},"    # 加载数据集\n",[159,71506,71507],{"class":161,"line":1327},[159,71508,71509],{"class":1135},"    # 传入数据集路径与处理方法\n",[159,71511,71512,71514,71516,71519,71522,71524,71527,71529],{"class":161,"line":1336},[159,71513,55476],{"class":165},[159,71515,189],{"class":1142},[159,71517,71518],{"class":165},"ImageFolder(",[159,71520,71521],{"class":1146},"ROOT_PATH",[159,71523,24233],{"class":165},[159,71525,71526],{"class":8765},"transform",[159,71528,189],{"class":1142},[159,71530,71531],{"class":165},"train_transform)\n",[159,71533,71534],{"class":161,"line":1345},[159,71535,590],{"emptyLinePlaceholder":589},[159,71537,71538,71540,71542,71544,71546,71548,71550,71552,71554,71556,71558,71560,71562,71564,71566],{"class":161,"line":1350},[159,71539,55528],{"class":165},[159,71541,189],{"class":1142},[159,71543,55533],{"class":165},[159,71545,55536],{"class":1146},[159,71547,1159],{"class":165},[159,71549,55541],{"class":1146},[159,71551,4777],{"class":1142},[159,71553,30969],{"class":1146},[159,71555,55548],{"class":165},[159,71557,55536],{"class":1146},[159,71559,1159],{"class":165},[159,71561,55555],{"class":1146},[159,71563,4777],{"class":1142},[159,71565,30969],{"class":1146},[159,71567,55562],{"class":165},[159,71569,71570,71572,71574,71576,71578,71580],{"class":161,"line":1764},[159,71571,55567],{"class":165},[159,71573,189],{"class":1142},[159,71575,55572],{"class":165},[159,71577,55056],{"class":8765},[159,71579,189],{"class":1142},[159,71581,55061],{"class":165},[159,71583,71584,71586,71588,71590],{"class":161,"line":1769},[159,71585,55583],{"class":8765},[159,71587,189],{"class":1142},[159,71589,24064],{"class":1146},[159,71591,17070],{"class":165},[159,71593,71594,71596,71598,71600],{"class":161,"line":1777},[159,71595,55595],{"class":8765},[159,71597,189],{"class":1142},[159,71599,54995],{"class":1146},[159,71601,17070],{"class":165},[159,71603,71604],{"class":161,"line":1788},[159,71605,55606],{"class":1135},[159,71607,71608,71610,71612,71614],{"class":161,"line":1802},[159,71609,55611],{"class":8765},[159,71611,189],{"class":1142},[159,71613,24250],{"class":1146},[159,71615,1165],{"class":165},[159,71617,71618,71620,71622,71624,71626,71628],{"class":161,"line":1815},[159,71619,55622],{"class":165},[159,71621,189],{"class":1142},[159,71623,55053],{"class":165},[159,71625,55056],{"class":8765},[159,71627,189],{"class":1142},[159,71629,55633],{"class":165},[159,71631,71632,71634,71636,71638],{"class":161,"line":1828},[159,71633,55638],{"class":8765},[159,71635,189],{"class":1142},[159,71637,24064],{"class":1146},[159,71639,17070],{"class":165},[159,71641,71642,71644,71646,71648],{"class":161,"line":1841},[159,71643,55649],{"class":8765},[159,71645,189],{"class":1142},[159,71647,54995],{"class":1146},[159,71649,17070],{"class":165},[159,71651,71652,71654,71656,71658],{"class":161,"line":1852},[159,71653,55660],{"class":8765},[159,71655,189],{"class":1142},[159,71657,24250],{"class":1146},[159,71659,1165],{"class":165},[159,71661,71662,71664],{"class":161,"line":1866},[159,71663,27711],{"class":1142},[159,71665,55673],{"class":165},[159,71667,71668],{"class":161,"line":1879},[159,71669,590],{"emptyLinePlaceholder":589},[159,71671,71672],{"class":161,"line":1884},[159,71673,55682],{"class":1135},[159,71675,71676],{"class":161,"line":1889},[159,71677,55687],{"class":1135},[159,71679,71680],{"class":161,"line":1899},[159,71681,590],{"emptyLinePlaceholder":589},[159,71683,71684],{"class":161,"line":1912},[159,71685,55696],{"class":1135},[159,71687,71688,71690,71692],{"class":161,"line":1925},[159,71689,55465],{"class":1142},[159,71691,55703],{"class":185},[159,71693,55706],{"class":165},[159,71695,71696,71698,71700,71702,71704,71706,71708,71710,71712],{"class":161,"line":1956},[159,71697,54757],{"class":165},[159,71699,189],{"class":1142},[159,71701,53973],{"class":165},[159,71703,54764],{"class":192},[159,71705,25367],{"class":1142},[159,71707,54769],{"class":165},[159,71709,25364],{"class":1142},[159,71711,55725],{"class":192},[159,71713,1165],{"class":165},[159,71715,71716],{"class":161,"line":1971},[159,71717,590],{"emptyLinePlaceholder":589},[159,71719,71720],{"class":161,"line":1976},[159,71721,55740],{"class":1135},[159,71723,71724],{"class":161,"line":1981},[159,71725,55745],{"class":1135},[159,71727,71728],{"class":161,"line":1989},[159,71729,55750],{"class":1135},[159,71731,71732,71734,71736,71738,71740,71742,71744],{"class":161,"line":2001},[159,71733,55755],{"class":165},[159,71735,189],{"class":1142},[159,71737,55760],{"class":165},[159,71739,55763],{"class":8765},[159,71741,189],{"class":1142},[159,71743,55768],{"class":1146},[159,71745,1165],{"class":165},[159,71747,71748],{"class":161,"line":2006},[159,71749,590],{"emptyLinePlaceholder":589},[159,71751,71752],{"class":161,"line":2015},[159,71753,55779],{"class":1135},[159,71755,71756,71758,71760],{"class":161,"line":2024},[159,71757,55784],{"class":165},[159,71759,189],{"class":1142},[159,71761,55789],{"class":165},[159,71763,71764],{"class":161,"line":2029},[159,71765,590],{"emptyLinePlaceholder":589},[159,71767,71768],{"class":161,"line":2038},[159,71769,55798],{"class":1135},[159,71771,71772,71774,71776],{"class":161,"line":2053},[159,71773,54809],{"class":165},[159,71775,189],{"class":1142},[159,71777,55807],{"class":165},[159,71779,71780],{"class":161,"line":2070},[159,71781,55812],{"class":1135},[159,71783,71784],{"class":161,"line":2095},[159,71785,55817],{"class":1135},[159,71787,71788],{"class":161,"line":2104},[159,71789,55822],{"class":1135},[159,71791,71792,71794,71796],{"class":161,"line":2120},[159,71793,55827],{"class":165},[159,71795,189],{"class":1142},[159,71797,55832],{"class":165},[159,71799,71800],{"class":161,"line":2134},[159,71801,590],{"emptyLinePlaceholder":589},[159,71803,71804],{"class":161,"line":2143},[159,71805,55845],{"class":1135},[159,71807,71808],{"class":161,"line":2165},[159,71809,55850],{"class":1135},[159,71811,71812,71814,71816],{"class":161,"line":2178},[159,71813,55855],{"class":165},[159,71815,189],{"class":1142},[159,71817,55860],{"class":1146},[159,71819,71820],{"class":161,"line":2191},[159,71821,55865],{"class":1135},[159,71823,71824,71826,71828],{"class":161,"line":2204},[159,71825,55870],{"class":165},[159,71827,189],{"class":1142},[159,71829,55875],{"class":165},[159,71831,71832],{"class":161,"line":2217},[159,71833,55880],{"class":1135},[159,71835,71836,71838,71840],{"class":161,"line":2230},[159,71837,55885],{"class":165},[159,71839,189],{"class":1142},[159,71841,55875],{"class":165},[159,71843,71844],{"class":161,"line":2243},[159,71845,55894],{"class":1135},[159,71847,71848,71850,71852],{"class":161,"line":2256},[159,71849,55899],{"class":165},[159,71851,189],{"class":1142},[159,71853,55875],{"class":165},[159,71855,71856],{"class":161,"line":2266},[159,71857,55908],{"class":1135},[159,71859,71860,71862,71864],{"class":161,"line":2275},[159,71861,55913],{"class":165},[159,71863,189],{"class":1142},[159,71865,55875],{"class":165},[159,71867,71868],{"class":161,"line":2284},[159,71869,590],{"emptyLinePlaceholder":589},[159,71871,71872],{"class":161,"line":2293},[159,71873,55926],{"class":1135},[159,71875,71876,71878,71880],{"class":161,"line":2306},[159,71877,55931],{"class":165},[159,71879,189],{"class":1142},[159,71881,55936],{"class":165},[159,71883,71884],{"class":161,"line":2330},[159,71885,590],{"emptyLinePlaceholder":589},[159,71887,71888],{"class":161,"line":2350},[159,71889,55949],{"class":1135},[159,71891,71892,71894,71896,71898,71900],{"class":161,"line":2370},[159,71893,11677],{"class":1142},[159,71895,55956],{"class":165},[159,71897,49566],{"class":1142},[159,71899,55961],{"class":1146},[159,71901,55964],{"class":165},[159,71903,71904,71906,71908,71910,71912,71914,71916,71918,71920,71922,71924],{"class":161,"line":2390},[159,71905,55969],{"class":1146},[159,71907,1159],{"class":165},[159,71909,55974],{"class":192},[159,71911,55977],{"class":1146},[159,71913,13083],{"class":192},[159,71915,55977],{"class":1146},[159,71917,24115],{"class":192},[159,71919,55986],{"class":165},[159,71921,24376],{"class":1142},[159,71923,4932],{"class":1146},[159,71925,18787],{"class":165},[159,71927,71928,71930,71932,71934,71936,71938],{"class":161,"line":2410},[159,71929,55969],{"class":1146},[159,71931,1159],{"class":165},[159,71933,56001],{"class":192},[159,71935,4777],{"class":1142},[159,71937,1964],{"class":1146},[159,71939,1165],{"class":165},[159,71941,71942],{"class":161,"line":2430},[159,71943,590],{"emptyLinePlaceholder":589},[159,71945,71946],{"class":161,"line":2450},[159,71947,56016],{"class":1135},[159,71949,71950],{"class":161,"line":2471},[159,71951,56021],{"class":1135},[159,71953,71954,71956,71958],{"class":161,"line":2477},[159,71955,56026],{"class":165},[159,71957,189],{"class":1142},[159,71959,55860],{"class":1146},[159,71961,71962],{"class":161,"line":2498},[159,71963,56035],{"class":1135},[159,71965,71966,71968,71970],{"class":161,"line":2518},[159,71967,56040],{"class":165},[159,71969,189],{"class":1142},[159,71971,26716],{"class":1146},[159,71973,71974],{"class":161,"line":2539},[159,71975,56049],{"class":1135},[159,71977,71978,71980,71982],{"class":161,"line":2561},[159,71979,56054],{"class":165},[159,71981,189],{"class":1142},[159,71983,55860],{"class":1146},[159,71985,71986],{"class":161,"line":2573},[159,71987,56063],{"class":1135},[159,71989,71990,71992,71994],{"class":161,"line":2591},[159,71991,56068],{"class":165},[159,71993,189],{"class":1142},[159,71995,26716],{"class":1146},[159,71997,71998],{"class":161,"line":2602},[159,71999,56077],{"class":1135},[159,72001,72002,72004,72006],{"class":161,"line":2613},[159,72003,56082],{"class":165},[159,72005,189],{"class":1142},[159,72007,26716],{"class":1146},[159,72009,72010],{"class":161,"line":2624},[159,72011,56091],{"class":1135},[159,72013,72014,72016,72018],{"class":161,"line":2630},[159,72015,56096],{"class":165},[159,72017,189],{"class":1142},[159,72019,26716],{"class":1146},[159,72021,72022],{"class":161,"line":2636},[159,72023,56105],{"class":1135},[159,72025,72026,72028,72030,72032,72034],{"class":161,"line":2642},[159,72027,27032],{"class":1142},[159,72029,55120],{"class":165},[159,72031,49566],{"class":1142},[159,72033,55125],{"class":1146},[159,72035,56118],{"class":165},[159,72037,72038],{"class":161,"line":2648},[159,72039,56123],{"class":1135},[159,72041,72042,72044,72046],{"class":161,"line":2674},[159,72043,56128],{"class":165},[159,72045,189],{"class":1142},[159,72047,56133],{"class":165},[159,72049,72050],{"class":161,"line":2689},[159,72051,56138],{"class":1135},[159,72053,72054,72056,72058],{"class":161,"line":2694},[159,72055,56143],{"class":165},[159,72057,189],{"class":1142},[159,72059,56148],{"class":165},[159,72061,72062],{"class":161,"line":2721},[159,72063,56153],{"class":1135},[159,72065,72066],{"class":161,"line":2726},[159,72067,56158],{"class":165},[159,72069,72070],{"class":161,"line":2735},[159,72071,56163],{"class":1135},[159,72073,72074],{"class":161,"line":2744},[159,72075,56168],{"class":1135},[159,72077,72078,72080,72082],{"class":161,"line":2753},[159,72079,56173],{"class":165},[159,72081,189],{"class":1142},[159,72083,56178],{"class":165},[159,72085,72086],{"class":161,"line":2758},[159,72087,56183],{"class":1135},[159,72089,72090,72092,72094,72096,72098,72100,72102],{"class":161,"line":3959},[159,72091,56188],{"class":165},[159,72093,189],{"class":1142},[159,72095,56193],{"class":165},[159,72097,56196],{"class":8765},[159,72099,189],{"class":1142},[159,72101,4932],{"class":1146},[159,72103,1165],{"class":165},[159,72105,72106],{"class":161,"line":3968},[159,72107,56207],{"class":1135},[159,72109,72110,72112,72114],{"class":161,"line":3977},[159,72111,56212],{"class":165},[159,72113,189],{"class":1142},[159,72115,56217],{"class":165},[159,72117,72118],{"class":161,"line":3982},[159,72119,56222],{"class":1135},[159,72121,72122],{"class":161,"line":6843},[159,72123,56227],{"class":165},[159,72125,72126],{"class":161,"line":6849},[159,72127,56232],{"class":1135},[159,72129,72130],{"class":161,"line":6855},[159,72131,56237],{"class":165},[159,72133,72134],{"class":161,"line":6861},[159,72135,56242],{"class":1135},[159,72137,72138],{"class":161,"line":6867},[159,72139,56247],{"class":165},[159,72141,72142],{"class":161,"line":6873},[159,72143,56252],{"class":1135},[159,72145,72146,72148,72150,72152,72154,72156,72158],{"class":161,"line":6879},[159,72147,56257],{"class":165},[159,72149,33073],{"class":1142},[159,72151,56262],{"class":165},[159,72153,4777],{"class":1142},[159,72155,56267],{"class":165},[159,72157,1489],{"class":1146},[159,72159,1165],{"class":165},[159,72161,72162],{"class":161,"line":6885},[159,72163,56276],{"class":1135},[159,72165,72166,72168,72170,72172,72174],{"class":161,"line":6890},[159,72167,56281],{"class":165},[159,72169,33073],{"class":1142},[159,72171,56286],{"class":165},[159,72173,26581],{"class":1142},[159,72175,56291],{"class":165},[159,72177,72178],{"class":161,"line":6896},[159,72179,56296],{"class":1135},[159,72181,72182,72184,72186,72188,72190],{"class":161,"line":6902},[159,72183,56301],{"class":165},[159,72185,33073],{"class":1142},[159,72187,56267],{"class":165},[159,72189,1489],{"class":1146},[159,72191,1165],{"class":165},[159,72193,72194],{"class":161,"line":6908},[159,72195,56314],{"class":1135},[159,72197,72198,72200,72202,72204,72206],{"class":161,"line":6914},[159,72199,27032],{"class":1142},[159,72201,56321],{"class":165},[159,72203,49566],{"class":1142},[159,72205,55125],{"class":1146},[159,72207,56328],{"class":165},[159,72209,72210],{"class":161,"line":6920},[159,72211,56333],{"class":1135},[159,72213,72214,72216,72218],{"class":161,"line":6926},[159,72215,56128],{"class":165},[159,72217,189],{"class":1142},[159,72219,56133],{"class":165},[159,72221,72222],{"class":161,"line":6932},[159,72223,56346],{"class":1135},[159,72225,72226,72228,72230],{"class":161,"line":6938},[159,72227,56143],{"class":165},[159,72229,189],{"class":1142},[159,72231,56148],{"class":165},[159,72233,72234],{"class":161,"line":6944},[159,72235,56359],{"class":1135},[159,72237,72238],{"class":161,"line":6949},[159,72239,56364],{"class":165},[159,72241,72242],{"class":161,"line":6955},[159,72243,59751],{"class":1135},[159,72245,72246,72248],{"class":161,"line":6961},[159,72247,56369],{"class":1142},[159,72249,56372],{"class":165},[159,72251,72252],{"class":161,"line":6967},[159,72253,56377],{"class":1135},[159,72255,72256,72258,72260],{"class":161,"line":6973},[159,72257,59766],{"class":165},[159,72259,189],{"class":1142},[159,72261,56178],{"class":165},[159,72263,72264],{"class":161,"line":6979},[159,72265,56392],{"class":1135},[159,72267,72268,72270,72272,72274,72276,72278,72280],{"class":161,"line":6985},[159,72269,59779],{"class":165},[159,72271,189],{"class":1142},[159,72273,56193],{"class":165},[159,72275,56196],{"class":8765},[159,72277,189],{"class":1142},[159,72279,4932],{"class":1146},[159,72281,1165],{"class":165},[159,72283,72284],{"class":161,"line":6991},[159,72285,56415],{"class":1135},[159,72287,72288,72290,72292],{"class":161,"line":6997},[159,72289,59800],{"class":165},[159,72291,189],{"class":1142},[159,72293,56217],{"class":165},[159,72295,72296],{"class":161,"line":7003},[159,72297,56430],{"class":1135},[159,72299,72300,72302,72304,72306,72308,72310,72312],{"class":161,"line":7009},[159,72301,59813],{"class":165},[159,72303,33073],{"class":1142},[159,72305,59818],{"class":165},[159,72307,4777],{"class":1142},[159,72309,56267],{"class":165},[159,72311,1489],{"class":1146},[159,72313,1165],{"class":165},[159,72315,72316,72318,72320,72322,72324],{"class":161,"line":7015},[159,72317,59831],{"class":165},[159,72319,33073],{"class":1142},[159,72321,56286],{"class":165},[159,72323,26581],{"class":1142},[159,72325,56291],{"class":165},[159,72327,72328],{"class":161,"line":7021},[159,72329,59844],{"class":1135},[159,72331,72332,72334,72336,72338,72340],{"class":161,"line":7026},[159,72333,59849],{"class":165},[159,72335,33073],{"class":1142},[159,72337,56267],{"class":165},[159,72339,1489],{"class":1146},[159,72341,1165],{"class":165},[159,72343,72344],{"class":161,"line":7031},[159,72345,56487],{"class":1135},[159,72347,72348],{"class":161,"line":7037},[159,72349,56492],{"class":1135},[159,72351,72352,72354,72356],{"class":161,"line":7043},[159,72353,56497],{"class":165},[159,72355,13083],{"class":1142},[159,72357,56502],{"class":165},[159,72359,72360],{"class":161,"line":7049},[159,72361,56507],{"class":1135},[159,72363,72364],{"class":161,"line":7054},[159,72365,56512],{"class":1135},[159,72367,72368,72370,72372],{"class":161,"line":7060},[159,72369,56517],{"class":165},[159,72371,13083],{"class":1142},[159,72373,56502],{"class":165},[159,72375,72376],{"class":161,"line":7066},[159,72377,56526],{"class":1135},[159,72379,72380,72382,72384],{"class":161,"line":7072},[159,72381,56531],{"class":165},[159,72383,13083],{"class":1142},[159,72385,56536],{"class":165},[159,72387,72388],{"class":161,"line":7078},[159,72389,56541],{"class":1135},[159,72391,72392,72394,72396],{"class":161,"line":7084},[159,72393,56546],{"class":165},[159,72395,13083],{"class":1142},[159,72397,56536],{"class":165},[159,72399,72400],{"class":161,"line":7089},[159,72401,590],{"emptyLinePlaceholder":589},[159,72403,72404],{"class":161,"line":7095},[159,72405,56559],{"class":1135},[159,72407,72408,72410,72412,72414,72416,72418,72420,72422,72424,72426,72428,72430,72432,72434,72436,72438,72440,72442,72444,72446],{"class":161,"line":7100},[159,72409,55969],{"class":1146},[159,72411,1159],{"class":165},[159,72413,27221],{"class":192},[159,72415,55977],{"class":1146},[159,72417,56572],{"class":192},[159,72419,24721],{"class":1146},[159,72421,56577],{"class":1142},[159,72423,886],{"class":1146},[159,72425,56582],{"class":192},[159,72427,24721],{"class":1146},[159,72429,56577],{"class":1142},[159,72431,886],{"class":1146},[159,72433,27221],{"class":192},[159,72435,56593],{"class":165},[159,72437,24376],{"class":1142},[159,72439,4932],{"class":1146},[159,72441,56600],{"class":165},[159,72443,24376],{"class":1142},[159,72445,4932],{"class":1146},[159,72447,56607],{"class":165},[159,72449,72450,72452,72454,72456,72458,72460,72462,72464,72466,72468,72470,72472,72474,72476,72478,72480,72482,72484,72486,72488],{"class":161,"line":7105},[159,72451,55969],{"class":1146},[159,72453,1159],{"class":165},[159,72455,27221],{"class":192},[159,72457,55977],{"class":1146},[159,72459,56620],{"class":192},[159,72461,24721],{"class":1146},[159,72463,56577],{"class":1142},[159,72465,886],{"class":1146},[159,72467,56629],{"class":192},[159,72469,24721],{"class":1146},[159,72471,56577],{"class":1142},[159,72473,886],{"class":1146},[159,72475,27221],{"class":192},[159,72477,56640],{"class":165},[159,72479,24376],{"class":1142},[159,72481,4932],{"class":1146},[159,72483,56647],{"class":165},[159,72485,24376],{"class":1142},[159,72487,4932],{"class":1146},[159,72489,56607],{"class":165},[159,72491,72492],{"class":161,"line":7110},[159,72493,590],{"emptyLinePlaceholder":589},[159,72495,72496],{"class":161,"line":7115},[159,72497,56662],{"class":1135},[159,72499,72500,72502,72504,72506,72508,72510,72512],{"class":161,"line":7120},[159,72501,17003],{"class":1142},[159,72503,56669],{"class":165},[159,72505,24376],{"class":1142},[159,72507,4932],{"class":1146},[159,72509,18375],{"class":165},[159,72511,6760],{"class":1142},[159,72513,56680],{"class":165},[159,72515,72516],{"class":161,"line":7125},[159,72517,56685],{"class":1135},[159,72519,72520,72522,72524,72526,72528,72530,72532],{"class":161,"line":7131},[159,72521,56690],{"class":165},[159,72523,23920],{"class":1146},[159,72525,189],{"class":1142},[159,72527,56697],{"class":165},[159,72529,24376],{"class":1142},[159,72531,4932],{"class":1146},[159,72533,4634],{"class":165},[159,72535,72536],{"class":161,"line":7137},[159,72537,56708],{"class":1135},[159,72539,72540],{"class":161,"line":7143},[159,72541,56713],{"class":1135},[159,72543,72544,72546,72548],{"class":161,"line":7149},[159,72545,56718],{"class":165},[159,72547,189],{"class":1142},[159,72549,55832],{"class":165},[159,72551,72552],{"class":161,"line":7155},[159,72553,590],{"emptyLinePlaceholder":589},[159,72555,72556],{"class":161,"line":7161},[159,72557,56731],{"class":1135},[159,72559,72560,72562,72564,72566,72568],{"class":161,"line":7167},[159,72561,56736],{"class":165},[159,72563,189],{"class":1142},[159,72565,56741],{"class":165},[159,72567,24376],{"class":1142},[159,72569,56746],{"class":165},[159,72571,72572,72574,72576,72578,72580,72582,72584,72586,72588,72590,72592,72594,72596,72598,72600,72602,72604,72606],{"class":161,"line":7173},[159,72573,55969],{"class":1146},[159,72575,1159],{"class":165},[159,72577,56755],{"class":192},[159,72579,24721],{"class":1146},[159,72581,56760],{"class":1142},[159,72583,886],{"class":1146},[159,72585,21081],{"class":192},[159,72587,24721],{"class":1146},[159,72589,56760],{"class":1142},[159,72591,886],{"class":1146},[159,72593,56773],{"class":192},[159,72595,56776],{"class":165},[159,72597,56779],{"class":1142},[159,72599,10814],{"class":1146},[159,72601,56784],{"class":165},[159,72603,1662],{"class":1142},[159,72605,10814],{"class":1146},[159,72607,18787],{"class":165},[159,72609,72610],{"class":161,"line":7179},[159,72611,60128],{"class":1135},[159,72613,72614],{"class":161,"line":7184},[159,72615,60133],{"class":1135},[159,72617,72618,72620,72622],{"class":161,"line":7189},[159,72619,60138],{"class":165},[159,72621,56813],{"class":192},[159,72623,1165],{"class":165},[159,72625,72626],{"class":161,"line":7195},[159,72627,56830],{"class":1135},[159,72629,72630,72632,72634,72636,72638,72640],{"class":161,"line":7201},[159,72631,56835],{"class":165},[159,72633,189],{"class":1142},[159,72635,56840],{"class":165},[159,72637,56843],{"class":8765},[159,72639,189],{"class":1142},[159,72641,25222],{"class":165},[159,72643,72644,72646,72648,72650],{"class":161,"line":7207},[159,72645,56852],{"class":192},[159,72647,20934],{"class":165},[159,72649,56857],{"class":1146},[159,72651,56860],{"class":165},[159,72653,72654,72656],{"class":161,"line":7213},[159,72655,56865],{"class":192},[159,72657,56868],{"class":165},[159,72659,72660,72662],{"class":161,"line":7219},[159,72661,56873],{"class":192},[159,72663,56876],{"class":165},[159,72665,72666,72668],{"class":161,"line":7224},[159,72667,56881],{"class":192},[159,72669,56884],{"class":165},[159,72671,72672,72674],{"class":161,"line":7230},[159,72673,56889],{"class":192},[159,72675,56892],{"class":165},[159,72677,72678],{"class":161,"line":7236},[159,72679,4863],{"class":165},[159,72681,72682],{"class":161,"line":7242},[159,72683,56901],{"class":1135},[159,72685,72686,72688],{"class":161,"line":7248},[159,72687,27711],{"class":1142},[159,72689,56908],{"class":165},[159,72691,72692],{"class":161,"line":7254},[159,72693,590],{"emptyLinePlaceholder":589},[159,72695,72696],{"class":161,"line":7260},[159,72697,56917],{"class":1135},[159,72699,72700,72702,72704],{"class":161,"line":7265},[159,72701,55465],{"class":1142},[159,72703,56924],{"class":185},[159,72705,56927],{"class":165},[159,72707,72708],{"class":161,"line":7270},[159,72709,56932],{"class":1135},[159,72711,72712,72714,72716,72718,72720,72722,72724,72726],{"class":161,"line":7276},[159,72713,56937],{"class":165},[159,72715,55212],{"class":8765},[159,72717,189],{"class":1142},[159,72719,1159],{"class":165},[159,72721,7925],{"class":1146},[159,72723,24233],{"class":165},[159,72725,8866],{"class":1146},[159,72727,18787],{"class":165},[159,72729,72730],{"class":161,"line":7281},[159,72731,56956],{"class":1135},[159,72733,72734],{"class":161,"line":7287},[159,72735,56961],{"class":1135},[159,72737,72738],{"class":161,"line":7292},[159,72739,56966],{"class":1135},[159,72741,72742,72744,72746,72748,72750,72752,72754],{"class":161,"line":7298},[159,72743,55246],{"class":165},[159,72745,4932],{"class":1146},[159,72747,24233],{"class":165},[159,72749,11034],{"class":1146},[159,72751,24233],{"class":165},[159,72753,4932],{"class":1146},[159,72755,1165],{"class":165},[159,72757,72758],{"class":161,"line":7304},[159,72759,56987],{"class":1135},[159,72761,72762],{"class":161,"line":7310},[159,72763,56992],{"class":1135},[159,72765,72766],{"class":161,"line":7316},[159,72767,56997],{"class":1135},[159,72769,72770],{"class":161,"line":7322},[159,72771,57002],{"class":1135},[159,72773,72774],{"class":161,"line":7328},[159,72775,57007],{"class":1135},[159,72777,72778,72780,72782,72784,72786,72788,72790,72792,72794],{"class":161,"line":7333},[159,72779,57012],{"class":165},[159,72781,57015],{"class":192},[159,72783,57018],{"class":165},[159,72785,57021],{"class":192},[159,72787,24233],{"class":165},[159,72789,57026],{"class":8765},[159,72791,189],{"class":1142},[159,72793,57031],{"class":192},[159,72795,1165],{"class":165},[159,72797,72798,72800,72802,72804,72806,72808,72810,72812,72814],{"class":161,"line":7342},[159,72799,57012],{"class":165},[159,72801,57015],{"class":192},[159,72803,57042],{"class":165},[159,72805,57045],{"class":192},[159,72807,24233],{"class":165},[159,72809,57026],{"class":8765},[159,72811,189],{"class":1142},[159,72813,57054],{"class":192},[159,72815,1165],{"class":165},[159,72817,72818],{"class":161,"line":7351},[159,72819,57061],{"class":1135},[159,72821,72822],{"class":161,"line":7356},[159,72823,57066],{"class":165},[159,72825,72826],{"class":161,"line":21272},[159,72827,57071],{"class":1135},[159,72829,72830,72832,72834],{"class":161,"line":21277},[159,72831,57076],{"class":165},[159,72833,57079],{"class":192},[159,72835,1165],{"class":165},[159,72837,72838,72840,72842],{"class":161,"line":21288},[159,72839,57086],{"class":165},[159,72841,57089],{"class":192},[159,72843,1165],{"class":165},[159,72845,72846],{"class":161,"line":21293},[159,72847,57096],{"class":1135},[159,72849,72850,72852,72854,72856,72858,72860,72862],{"class":161,"line":21299},[159,72851,55246],{"class":165},[159,72853,4932],{"class":1146},[159,72855,24233],{"class":165},[159,72857,11034],{"class":1146},[159,72859,24233],{"class":165},[159,72861,11034],{"class":1146},[159,72863,1165],{"class":165},[159,72865,72866,72868,72870,72872,72874,72876,72878,72880,72882],{"class":161,"line":21305},[159,72867,57012],{"class":165},[159,72869,57015],{"class":192},[159,72871,57121],{"class":165},[159,72873,57021],{"class":192},[159,72875,24233],{"class":165},[159,72877,57026],{"class":8765},[159,72879,189],{"class":1142},[159,72881,57132],{"class":192},[159,72883,1165],{"class":165},[159,72885,72886,72888,72890,72892,72894,72896,72898,72900,72902],{"class":161,"line":21310},[159,72887,57012],{"class":165},[159,72889,57015],{"class":192},[159,72891,57143],{"class":165},[159,72893,57045],{"class":192},[159,72895,24233],{"class":165},[159,72897,57026],{"class":8765},[159,72899,189],{"class":1142},[159,72901,57154],{"class":192},[159,72903,1165],{"class":165},[159,72905,72906],{"class":161,"line":21320},[159,72907,57161],{"class":1135},[159,72909,72910],{"class":161,"line":21325},[159,72911,57066],{"class":165},[159,72913,72914,72916,72918],{"class":161,"line":21331},[159,72915,57076],{"class":165},[159,72917,57015],{"class":192},[159,72919,1165],{"class":165},[159,72921,72922,72924,72926],{"class":161,"line":21337},[159,72923,57086],{"class":165},[159,72925,57180],{"class":192},[159,72927,1165],{"class":165},[159,72929,72930],{"class":161,"line":21357},[159,72931,57187],{"class":165},[159,72933,72934],{"class":161,"line":21363},[159,72935,590],{"emptyLinePlaceholder":589},[159,72937,72938],{"class":161,"line":21384},[159,72939,57196],{"class":1135},[159,72941,72942,72944,72946,72948,72950],{"class":161,"line":21389},[159,72943,18445],{"class":1142},[159,72945,54740],{"class":1146},[159,72947,26581],{"class":1142},[159,72949,54745],{"class":192},[159,72951,27364],{"class":165},[159,72953,72954],{"class":161,"line":21395},[159,72955,57213],{"class":1135},[159,72957,72958,72960,72962],{"class":161,"line":21400},[159,72959,67941],{"class":165},[159,72961,189],{"class":1142},[159,72963,67946],{"class":165},[159,72965,72966,72968,72970],{"class":161,"line":21406},[159,72967,57228],{"class":165},[159,72969,189],{"class":1142},[159,72971,57233],{"class":165},[159,72973,72974,72976,72978,72980,72982,72984,72986],{"class":161,"line":21425},[159,72975,56835],{"class":165},[159,72977,189],{"class":1142},[159,72979,67963],{"class":165},[159,72981,57245],{"class":8765},[159,72983,189],{"class":1142},[159,72985,10814],{"class":1146},[159,72987,1165],{"class":165},[159,72989,72990],{"class":161,"line":21444},[159,72991,57256],{"class":165},[326,72993,72995],{"id":72994},"_242测试代码","2.4.2.测试代码",[14,72997,72998],{},"使用测试集进行测试与推理",[151,73000,73002],{"className":53900,"code":73001,"language":53902,"meta":25,"style":25},"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",[49,73003,73004,73010,73020,73030,73041,73051,73055,73059,73067,73072,73076,73093,73097,73101,73105,73109,73113,73145,73149,73157,73161,73173,73177,73181,73185,73189,73193,73197,73201,73205,73223,73237,73241,73251,73261,73271,73277,73281,73285,73293,73297,73313,73321,73325,73329,73337,73345,73349,73353,73357,73361,73367,73371,73381,73389,73397,73401,73405,73409,73417,73421,73437,73441,73445,73449,73461,73465,73477,73481,73485,73497,73501,73511,73515,73519,73531,73535,73543,73547,73551,73559,73563,73571,73575,73579,73583,73587,73591,73607,73615,73619,73623,73641,73647,73651,73661,73669,73677,73681,73685,73689,73693,73701,73705,73721,73725,73733,73741],{"__ignoreMap":25},[159,73005,73006,73008],{"class":161,"line":162},[159,73007,53914],{"class":1142},[159,73009,53917],{"class":165},[159,73011,73012,73014,73016,73018],{"class":161,"line":176},[159,73013,53914],{"class":1142},[159,73015,54935],{"class":165},[159,73017,54903],{"class":1142},[159,73019,54940],{"class":165},[159,73021,73022,73024,73026,73028],{"class":161,"line":203},[159,73023,54258],{"class":1142},[159,73025,54918],{"class":165},[159,73027,53914],{"class":1142},[159,73029,54923],{"class":165},[159,73031,73032,73034,73036,73038],{"class":161,"line":223},[159,73033,54258],{"class":1142},[159,73035,54888],{"class":165},[159,73037,53914],{"class":1142},[159,73039,73040],{"class":165}," ImageFolder\n",[159,73042,73043,73045,73047,73049],{"class":161,"line":233},[159,73044,54258],{"class":1142},[159,73046,55432],{"class":165},[159,73048,53914],{"class":1142},[159,73050,68035],{"class":165},[159,73052,73053],{"class":161,"line":239},[159,73054,590],{"emptyLinePlaceholder":589},[159,73056,73057],{"class":161,"line":245},[159,73058,57346],{"class":1135},[159,73060,73061,73063,73065],{"class":161,"line":251},[159,73062,55465],{"class":1142},[159,73064,57353],{"class":185},[159,73066,55471],{"class":165},[159,73068,73069],{"class":161,"line":261},[159,73070,73071],{"class":1135},"   # 导入自己的数据集，并进行数据处理\n",[159,73073,73074],{"class":161,"line":603},[159,73075,71354],{"class":1135},[159,73077,73078,73080,73082,73084,73086,73088,73091],{"class":161,"line":621},[159,73079,71359],{"class":1146},[159,73081,189],{"class":1142},[159,73083,24504],{"class":1142},[159,73085,24115],{"class":192},[159,73087,9952],{"class":1146},[159,73089,73090],{"class":18361},"\u002Fdata\u002Ftest",[159,73092,48656],{"class":192},[159,73094,73095],{"class":161,"line":634},[159,73096,590],{"emptyLinePlaceholder":589},[159,73098,73099],{"class":161,"line":640},[159,73100,71381],{"class":1135},[159,73102,73103],{"class":161,"line":1075},[159,73104,71386],{"class":1135},[159,73106,73107],{"class":161,"line":1081},[159,73108,71391],{"class":1135},[159,73110,73111],{"class":161,"line":1091},[159,73112,71396],{"class":1135},[159,73114,73115,73117,73119,73121,73123,73125,73127,73129,73131,73133,73135,73137,73139,73141,73143],{"class":161,"line":1100},[159,73116,71401],{"class":165},[159,73118,189],{"class":1142},[159,73120,71406],{"class":165},[159,73122,71409],{"class":1146},[159,73124,24233],{"class":165},[159,73126,71414],{"class":1146},[159,73128,24233],{"class":165},[159,73130,71419],{"class":1146},[159,73132,71422],{"class":165},[159,73134,71425],{"class":1146},[159,73136,24233],{"class":165},[159,73138,71430],{"class":1146},[159,73140,24233],{"class":165},[159,73142,71435],{"class":1146},[159,73144,28275],{"class":165},[159,73146,73147],{"class":161,"line":1123},[159,73148,71442],{"class":1135},[159,73150,73151,73153,73155],{"class":161,"line":1132},[159,73152,71447],{"class":165},[159,73154,189],{"class":1142},[159,73156,71452],{"class":165},[159,73158,73159],{"class":161,"line":1139},[159,73160,71457],{"class":1135},[159,73162,73163,73165,73167,73169,73171],{"class":161,"line":1168},[159,73164,71462],{"class":165},[159,73166,55020],{"class":1146},[159,73168,24233],{"class":165},[159,73170,55020],{"class":1146},[159,73172,66017],{"class":165},[159,73174,73175],{"class":161,"line":1174},[159,73176,71475],{"class":1135},[159,73178,73179],{"class":161,"line":1180},[159,73180,71480],{"class":165},[159,73182,73183],{"class":161,"line":1194},[159,73184,71485],{"class":165},[159,73186,73187],{"class":161,"line":1200},[159,73188,71490],{"class":1135},[159,73190,73191],{"class":161,"line":1221},[159,73192,71495],{"class":1135},[159,73194,73195],{"class":161,"line":1230},[159,73196,590],{"emptyLinePlaceholder":589},[159,73198,73199],{"class":161,"line":1247},[159,73200,71504],{"class":1135},[159,73202,73203],{"class":161,"line":1265},[159,73204,71509],{"class":1135},[159,73206,73207,73209,73211,73213,73215,73217,73219,73221],{"class":161,"line":1277},[159,73208,57360],{"class":165},[159,73210,189],{"class":1142},[159,73212,71518],{"class":165},[159,73214,71521],{"class":1146},[159,73216,24233],{"class":165},[159,73218,71526],{"class":8765},[159,73220,189],{"class":1142},[159,73222,71531],{"class":165},[159,73224,73225,73227,73229,73231,73233,73235],{"class":161,"line":1283},[159,73226,57417],{"class":165},[159,73228,189],{"class":1142},[159,73230,55053],{"class":165},[159,73232,55056],{"class":8765},[159,73234,189],{"class":1142},[159,73236,57428],{"class":165},[159,73238,73239],{"class":161,"line":1294},[159,73240,57433],{"class":1135},[159,73242,73243,73245,73247,73249],{"class":161,"line":1305},[159,73244,57438],{"class":8765},[159,73246,189],{"class":1142},[159,73248,4932],{"class":1146},[159,73250,17070],{"class":165},[159,73252,73253,73255,73257,73259],{"class":161,"line":1311},[159,73254,57449],{"class":8765},[159,73256,189],{"class":1142},[159,73258,54995],{"class":1146},[159,73260,17070],{"class":165},[159,73262,73263,73265,73267,73269],{"class":161,"line":1322},[159,73264,57460],{"class":8765},[159,73266,189],{"class":1142},[159,73268,1489],{"class":1146},[159,73270,1165],{"class":165},[159,73272,73273,73275],{"class":161,"line":1327},[159,73274,27711],{"class":1142},[159,73276,57473],{"class":165},[159,73278,73279],{"class":161,"line":1336},[159,73280,590],{"emptyLinePlaceholder":589},[159,73282,73283],{"class":161,"line":1345},[159,73284,57482],{"class":1135},[159,73286,73287,73289,73291],{"class":161,"line":1350},[159,73288,55465],{"class":1142},[159,73290,57489],{"class":185},[159,73292,57492],{"class":165},[159,73294,73295],{"class":161,"line":1764},[159,73296,57497],{"class":1135},[159,73298,73299,73301,73303,73305,73307,73309,73311],{"class":161,"line":1769},[159,73300,54757],{"class":165},[159,73302,189],{"class":1142},[159,73304,54764],{"class":192},[159,73306,25367],{"class":1142},[159,73308,54769],{"class":165},[159,73310,25364],{"class":1142},[159,73312,57514],{"class":192},[159,73314,73315,73317,73319],{"class":161,"line":1777},[159,73316,54809],{"class":165},[159,73318,189],{"class":1142},[159,73320,55807],{"class":165},[159,73322,73323],{"class":161,"line":1788},[159,73324,590],{"emptyLinePlaceholder":589},[159,73326,73327],{"class":161,"line":1802},[159,73328,57531],{"class":1135},[159,73330,73331,73333,73335],{"class":161,"line":1815},[159,73332,57536],{"class":165},[159,73334,189],{"class":1142},[159,73336,55860],{"class":1146},[159,73338,73339,73341,73343],{"class":161,"line":1828},[159,73340,57545],{"class":165},[159,73342,189],{"class":1142},[159,73344,26716],{"class":1146},[159,73346,73347],{"class":161,"line":1841},[159,73348,590],{"emptyLinePlaceholder":589},[159,73350,73351],{"class":161,"line":1852},[159,73352,57558],{"class":1135},[159,73354,73355],{"class":161,"line":1866},[159,73356,57563],{"class":1135},[159,73358,73359],{"class":161,"line":1879},[159,73360,57568],{"class":1135},[159,73362,73363,73365],{"class":161,"line":1884},[159,73364,57573],{"class":1142},[159,73366,56372],{"class":165},[159,73368,73369],{"class":161,"line":1889},[159,73370,57580],{"class":1135},[159,73372,73373,73375,73377,73379],{"class":161,"line":1899},[159,73374,27032],{"class":1142},[159,73376,57587],{"class":165},[159,73378,49566],{"class":1142},[159,73380,57592],{"class":165},[159,73382,73383,73385,73387],{"class":161,"line":1912},[159,73384,57597],{"class":165},[159,73386,189],{"class":1142},[159,73388,57602],{"class":165},[159,73390,73391,73393,73395],{"class":161,"line":1925},[159,73392,57607],{"class":165},[159,73394,189],{"class":1142},[159,73396,57612],{"class":165},[159,73398,73399],{"class":161,"line":1956},[159,73400,57617],{"class":1135},[159,73402,73403],{"class":161,"line":1971},[159,73404,56364],{"class":165},[159,73406,73407],{"class":161,"line":1976},[159,73408,57626],{"class":1135},[159,73410,73411,73413,73415],{"class":161,"line":1981},[159,73412,56173],{"class":165},[159,73414,189],{"class":1142},[159,73416,57635],{"class":165},[159,73418,73419],{"class":161,"line":1989},[159,73420,57640],{"class":1135},[159,73422,73423,73425,73427,73429,73431,73433,73435],{"class":161,"line":2001},[159,73424,56188],{"class":165},[159,73426,189],{"class":1142},[159,73428,56193],{"class":165},[159,73430,56196],{"class":8765},[159,73432,189],{"class":1142},[159,73434,4932],{"class":1146},[159,73436,1165],{"class":165},[159,73438,73439],{"class":161,"line":2006},[159,73440,57661],{"class":1135},[159,73442,73443],{"class":161,"line":2015},[159,73444,57666],{"class":1135},[159,73446,73447],{"class":161,"line":2024},[159,73448,57671],{"class":1135},[159,73450,73451,73453,73455,73457,73459],{"class":161,"line":2029},[159,73452,57676],{"class":165},[159,73454,33073],{"class":1142},[159,73456,56286],{"class":165},[159,73458,26581],{"class":1142},[159,73460,57685],{"class":165},[159,73462,73463],{"class":161,"line":2038},[159,73464,57690],{"class":1135},[159,73466,73467,73469,73471,73473,73475],{"class":161,"line":2053},[159,73468,57695],{"class":165},[159,73470,33073],{"class":1142},[159,73472,57700],{"class":165},[159,73474,1489],{"class":1146},[159,73476,1165],{"class":165},[159,73478,73479],{"class":161,"line":2070},[159,73480,590],{"emptyLinePlaceholder":589},[159,73482,73483],{"class":161,"line":2095},[159,73484,57713],{"class":1135},[159,73486,73487,73489,73491,73493,73495],{"class":161,"line":2104},[159,73488,57718],{"class":165},[159,73490,189],{"class":1142},[159,73492,57723],{"class":165},[159,73494,13083],{"class":1142},[159,73496,57728],{"class":165},[159,73498,73499],{"class":161,"line":2120},[159,73500,57733],{"class":1135},[159,73502,73503,73505,73507,73509],{"class":161,"line":2134},[159,73504,55969],{"class":1146},[159,73506,1159],{"class":165},[159,73508,57742],{"class":192},[159,73510,57745],{"class":165},[159,73512,73513],{"class":161,"line":2143},[159,73514,590],{"emptyLinePlaceholder":589},[159,73516,73517],{"class":161,"line":2165},[159,73518,57754],{"class":1135},[159,73520,73521,73523,73525,73527,73529],{"class":161,"line":2178},[159,73522,18445],{"class":1142},[159,73524,54740],{"class":1146},[159,73526,26581],{"class":1142},[159,73528,54745],{"class":192},[159,73530,27364],{"class":165},[159,73532,73533],{"class":161,"line":2191},[159,73534,57771],{"class":1135},[159,73536,73537,73539,73541],{"class":161,"line":2204},[159,73538,54809],{"class":165},[159,73540,189],{"class":1142},[159,73542,67946],{"class":165},[159,73544,73545],{"class":161,"line":2217},[159,73546,57784],{"class":1135},[159,73548,73549],{"class":161,"line":2230},[159,73550,57789],{"class":1135},[159,73552,73553,73555,73557],{"class":161,"line":2243},[159,73554,57794],{"class":165},[159,73556,57797],{"class":192},[159,73558,18787],{"class":165},[159,73560,73561],{"class":161,"line":2256},[159,73562,57804],{"class":1135},[159,73564,73565,73567,73569],{"class":161,"line":2266},[159,73566,57417],{"class":165},[159,73568,189],{"class":1142},[159,73570,57813],{"class":165},[159,73572,73573],{"class":161,"line":2275},[159,73574,57818],{"class":1135},[159,73576,73577],{"class":161,"line":2284},[159,73578,57823],{"class":165},[159,73580,73581],{"class":161,"line":2293},[159,73582,590],{"emptyLinePlaceholder":589},[159,73584,73585],{"class":161,"line":2306},[159,73586,57832],{"class":1135},[159,73588,73589],{"class":161,"line":2330},[159,73590,57837],{"class":1135},[159,73592,73593,73595,73597,73599,73601,73603,73605],{"class":161,"line":2350},[159,73594,54757],{"class":165},[159,73596,189],{"class":1142},[159,73598,54764],{"class":192},[159,73600,25367],{"class":1142},[159,73602,54769],{"class":165},[159,73604,25364],{"class":1142},[159,73606,57514],{"class":192},[159,73608,73609,73611,73613],{"class":161,"line":2370},[159,73610,54809],{"class":165},[159,73612,189],{"class":1142},[159,73614,55807],{"class":165},[159,73616,73617],{"class":161,"line":2390},[159,73618,57866],{"class":1135},[159,73620,73621],{"class":161,"line":2410},[159,73622,57871],{"class":1135},[159,73624,73625,73627,73629,73631,73634,73636,73639],{"class":161,"line":2430},[159,73626,57876],{"class":165},[159,73628,189],{"class":1142},[159,73630,17263],{"class":165},[159,73632,73633],{"class":192},"'猫'",[159,73635,24233],{"class":165},[159,73637,73638],{"class":192},"'狗'",[159,73640,4634],{"class":165},[159,73642,73643,73645],{"class":161,"line":2450},[159,73644,57573],{"class":1142},[159,73646,56372],{"class":165},[159,73648,73649],{"class":161,"line":2471},[159,73650,57941],{"class":1135},[159,73652,73653,73655,73657,73659],{"class":161,"line":2477},[159,73654,27032],{"class":1142},[159,73656,57948],{"class":165},[159,73658,49566],{"class":1142},[159,73660,57592],{"class":165},[159,73662,73663,73665,73667],{"class":161,"line":2498},[159,73664,56128],{"class":165},[159,73666,189],{"class":1142},[159,73668,56133],{"class":165},[159,73670,73671,73673,73675],{"class":161,"line":2518},[159,73672,56143],{"class":165},[159,73674,189],{"class":1142},[159,73676,56148],{"class":165},[159,73678,73679],{"class":161,"line":2539},[159,73680,590],{"emptyLinePlaceholder":589},[159,73682,73683],{"class":161,"line":2561},[159,73684,57977],{"class":1135},[159,73686,73687],{"class":161,"line":2573},[159,73688,56364],{"class":165},[159,73690,73691],{"class":161,"line":2591},[159,73692,57986],{"class":1135},[159,73694,73695,73697,73699],{"class":161,"line":2602},[159,73696,56173],{"class":165},[159,73698,189],{"class":1142},[159,73700,56178],{"class":165},[159,73702,73703],{"class":161,"line":2613},[159,73704,57999],{"class":1135},[159,73706,73707,73709,73711,73713,73715,73717,73719],{"class":161,"line":2624},[159,73708,56188],{"class":165},[159,73710,189],{"class":1142},[159,73712,56193],{"class":165},[159,73714,56196],{"class":8765},[159,73716,189],{"class":1142},[159,73718,4932],{"class":1146},[159,73720,1165],{"class":165},[159,73722,73723],{"class":161,"line":2630},[159,73724,58020],{"class":1135},[159,73726,73727,73729,73731],{"class":161,"line":2636},[159,73728,58025],{"class":165},[159,73730,189],{"class":1142},[159,73732,58030],{"class":165},[159,73734,73735,73737,73739],{"class":161,"line":2642},[159,73736,58035],{"class":165},[159,73738,189],{"class":1142},[159,73740,58040],{"class":165},[159,73742,73743,73745,73747,73749,73751,73753,73755,73757],{"class":161,"line":2648},[159,73744,58045],{"class":1146},[159,73746,1159],{"class":165},[159,73748,58050],{"class":192},[159,73750,58053],{"class":165},[159,73752,58056],{"class":192},[159,73754,24233],{"class":165},[159,73756,58061],{"class":192},[159,73758,58064],{"class":165},[1468,73760,73761],{},"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":25,"searchDepth":176,"depth":176,"links":73763},[73764,73765,73766,73767],{"id":54112,"depth":203,"text":54113},{"id":61234,"depth":203,"text":61235},{"id":64667,"depth":203,"text":64668},{"id":68676,"depth":203,"text":68677},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":54104,"description":23809},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":73774,"title":73775,"body":73776,"description":23809,"extension":23810,"meta":73783,"navigation":589,"path":73784,"seo":73785,"stem":73786,"__hash__":73787},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":73777,"toc":73781},[73778],[10,73779,73775],{"id":73780},"_3yolo模型学习",{"title":25,"searchDepth":176,"depth":176,"links":73782},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":73775,"description":23809},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":73789,"title":73790,"body":73791,"description":73798,"extension":23810,"meta":73799,"navigation":589,"path":73801,"seo":73802,"stem":73803,"__hash__":73804},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":73792,"toc":73796},[73793],[14,73794,73795],{},"yolo模型还未补充",{"title":25,"searchDepth":176,"depth":176,"links":73797},[],"深度学习学习",{"category":73800},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":73790,"description":73798},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":73806,"title":73807,"body":73808,"description":23809,"extension":23810,"meta":73833,"navigation":589,"path":73834,"seo":73835,"stem":73836,"__hash__":73837},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":73809,"toc":73831},[73810,73813,73816,73821,73828],[10,73811,73807],{"id":73812},"_1工具",[14,73814,73815],{},"提示错误插件：有问题会提前报错",[14,73817,73818],{},[23,73819],{"alt":25,"src":73820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,73822,73823],{},[8085,73824,73827],{"href":73825,"rel":73826},"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",[15923],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,73829,73830],{},"alt键加上下箭头可以实现语句的移动",{"title":25,"searchDepth":176,"depth":176,"links":73832},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":73807,"description":23809},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":73839,"title":73840,"body":73841,"description":23809,"extension":23810,"meta":76641,"navigation":589,"path":76642,"seo":76643,"stem":76644,"__hash__":76645},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":73842,"toc":76592},[73843,73846,73850,73854,73859,73862,73867,73871,73878,73883,73890,73895,73902,73907,73911,73916,73919,73923,73928,73932,73937,73940,73943,73946,73949,73952,73955,73958,73961,73966,73971,73976,73980,73983,73986,73990,73995,73998,74006,74011,74026,74034,74039,74044,74049,74054,74059,74062,74067,74072,74076,74085,74090,74095,74099,74104,74107,74111,74116,74124,74129,74134,74137,74142,74147,74152,74155,74158,74161,74166,74171,74174,74179,74182,74187,74190,74193,74196,74201,74204,74207,74222,74227,74232,74237,74240,74243,74246,74260,74263,74268,74273,74276,74279,74282,74285,74288,74291,74294,74298,74302,74307,74311,74314,74319,74324,74327,74332,74335,74339,74344,74347,74350,74353,74356,74359,74362,74365,74368,74371,74375,74380,74385,74390,74393,74396,74400,74405,74408,74412,74415,74418,74423,74426,74429,74433,74437,74440,74445,74450,74453,74482,74487,74492,74497,74502,74506,74511,74515,74520,74523,74527,74531,74536,74540,74545,74550,74554,74559,74562,74564,74567,74572,74576,74581,74585,74589,74594,74599,74604,74609,74613,74618,74623,74628,74631,74634,74639,74642,74647,74652,74657,74662,74666,75424,75428,75762,75767,75770,75773,75776,75779,75782,75784,75787,75790,75792,75795,75797,75800,75804,75809,75812,75815,75818,75822,75827,75832,75852,75855,75859,75864,75869,75886,75890,75919,75923,75945,75947,75986,75994,76000,76004,76007,76010,76015,76020,76023,76026,76029,76034,76039,76042,76045,76048,76051,76054,76057,76060,76063,76066,76069,76072,76074,76077,76080,76083,76086,76089,76092,76095,76098,76102,76107,76110,76115,76118,76121,76124,76127,76130,76133,76136,76138,76141,76144,76147,76150,76153,76156,76160,76163,76172,76175,76180,76183,76188,76191,76194,76197,76200,76203,76206,76209,76213,76217,76220,76223,76228,76233,76238,76242,76247,76252,76255,76258,76261,76264,76267,76272,76275,76280,76282,76287,76290,76294,76299,76302,76305,76310,76314,76317,76322,76325,76328,76357,76362,76365,76368,76371,76374,76377,76381,76384,76467,76471,76474,76479,76484,76491,76494,76497,76500,76503,76506,76511,76516,76519,76522,76525,76528,76531,76534,76537,76540,76543,76545,76548,76552,76557,76562,76567,76570,76575,76580,76583,76586,76589],[10,73844,73840],{"id":73845},"_2基础语法",[37,73847,73849],{"id":73848},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[42,73851,73853],{"id":73852},"_211-js组成","2.1.1 js组成",[134,73855,73856],{},[106,73857,73858],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,73860,73861],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[134,73863,73864],{"start":176},[106,73865,73866],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[42,73868,73870],{"id":73869},"_212-js书写位置","2.1.2 js书写位置",[134,73872,73873],{},[106,73874,73875],{},[61,73876,73877],{},"内部 JavaScript",[14,73879,73880],{},[23,73881],{"alt":25,"src":73882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[134,73884,73885],{"start":176},[106,73886,73887],{},[61,73888,73889],{},"外部 JavaScript",[14,73891,73892],{},[23,73893],{"alt":25,"src":73894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[134,73896,73897],{"start":203},[106,73898,73899],{},[61,73900,73901],{},"内联 JavaScript",[14,73903,73904],{},[23,73905],{"alt":25,"src":73906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[42,73908,73910],{"id":73909},"_213-javascript注释","2.1.3 JavaScript注释",[14,73912,73913],{},[23,73914],{"alt":25,"src":73915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,73917,73918],{},"alt+shift+a一定要记住！",[42,73920,73922],{"id":73921},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,73924,73925],{},[23,73926],{"alt":25,"src":73927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[42,73929,73931],{"id":73930},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[134,73933,73934],{},[106,73935,73936],{},"输出语法：",[14,73938,73939],{},"①document.write('要出的内容')",[14,73941,73942],{},"向body内输出内容；",[14,73944,73945],{},"如果输出的内容写的是标签，也会被解析cheng",[14,73947,73948],{},"②alert('要出的内容')",[14,73950,73951],{},"页面弹出警告对话框",[14,73953,73954],{},"③console.log('控制台打印')",[14,73956,73957],{},"控制台输出语法，程序员调试使用",[14,73959,73960],{},"输入log就行，自动生成：",[14,73962,73963],{},[23,73964],{"alt":25,"src":73965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[134,73967,73968],{"start":176},[106,73969,73970],{},"输入语法：",[14,73972,73973],{},[23,73974],{"alt":25,"src":73975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[42,73977,73979],{"id":73978},"_2116-字面量","21.1.6 字面量",[14,73981,73982],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,73984,73985],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[37,73987,73989],{"id":73988},"_22-变量","2.2 变量",[134,73991,73992],{},[106,73993,73994],{},"变量声明",[14,73996,73997],{},"let 变量名",[103,73999,74000,74003],{},[106,74001,74002],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[106,74004,74005],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[134,74007,74008],{"start":176},[106,74009,74010],{},"变量赋值",[151,74012,74014],{"className":520,"code":74013,"language":522,"meta":25,"style":25},"let age\nage=18 \n",[49,74015,74016,74021],{"__ignoreMap":25},[159,74017,74018],{"class":161,"line":162},[159,74019,74020],{"class":165},"let age\n",[159,74022,74023],{"class":161,"line":176},[159,74024,74025],{"class":165},"age=18\n",[134,74027,74028,74031],{"start":203},[106,74029,74030],{},"连这些（变量的初始化）：let age=18",[106,74032,74033],{},"更新变量",[14,74035,74036],{},[23,74037],{"alt":25,"src":74038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[134,74040,74041],{"start":233},[106,74042,74043],{},"声明多个变量",[14,74045,74046],{},[23,74047],{"alt":25,"src":74048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[134,74050,74051],{"start":239},[106,74052,74053],{},"变量命名规则与规范",[14,74055,74056],{},[23,74057],{"alt":25,"src":74058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,74060,74061],{},"遵守小驼峰！",[134,74063,74064],{"start":245},[106,74065,74066],{},"变量拓展-let和var的区别",[14,74068,74069],{},[23,74070],{"alt":25,"src":74071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[37,74073,74075],{"id":74074},"_23-数组","2.3 数组",[151,74077,74079],{"className":520,"code":74078,"language":522,"meta":25,"style":25},"let arr = []\n",[49,74080,74081],{"__ignoreMap":25},[159,74082,74083],{"class":161,"line":162},[159,74084,74078],{"class":165},[14,74086,74087],{},[23,74088],{"alt":25,"src":74089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,74091,74092],{},[23,74093],{"alt":25,"src":74094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[37,74096,74098],{"id":74097},"_24-常量","2.4 常量",[14,74100,74101],{},[23,74102],{"alt":25,"src":74103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,74105,74106],{},"const — 类似于 let ，但是变量的值无法被修改",[37,74108,74110],{"id":74109},"_25-数据类型","2.5 数据类型",[14,74112,74113],{},[23,74114],{"alt":25,"src":74115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[134,74117,74118,74121],{},[106,74119,74120],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[106,74122,74123],{},"算数运算符：",[14,74125,74126],{},[23,74127],{"alt":25,"src":74128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[134,74130,74131],{"start":203},[106,74132,74133],{},"数字类型（Number）",[14,74135,74136],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,74138,74139],{},[23,74140],{"alt":25,"src":74141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[134,74143,74144],{"start":223},[106,74145,74146],{},"字符串类型（string）",[14,74148,74149],{},[23,74150],{"alt":25,"src":74151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,74153,74154],{},"反引号也是可以使用的",[14,74156,74157],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,74159,74160],{},"例如：document.write(\"我今年\"+age+\"岁\")",[134,74162,74163],{"start":233},[106,74164,74165],{},"模板字符串",[14,74167,74168],{},[23,74169],{"alt":25,"src":74170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,74172,74173],{},"类似于python的字符串格式化",[134,74175,74176],{"start":239},[106,74177,74178],{},"布尔类型",[14,74180,74181],{},"true 和 false",[134,74183,74184],{"start":245},[106,74185,74186],{},"未定义类型（underfined）",[14,74188,74189],{},"表示没有赋值",[14,74191,74192],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,74194,74195],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[134,74197,74198],{"start":251},[106,74199,74200],{},"null（空类型）",[14,74202,74203],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,74205,74206],{},"赋值了，但是内容为空",[151,74208,74210],{"className":520,"code":74209,"language":522,"meta":25,"style":25},"typeof null\n输出的是'object'，是一个对象数据类型\n",[49,74211,74212,74217],{"__ignoreMap":25},[159,74213,74214],{"class":161,"line":162},[159,74215,74216],{"class":165},"typeof null\n",[159,74218,74219],{"class":161,"line":176},[159,74220,74221],{"class":165},"输出的是'object'，是一个对象数据类型\n",[134,74223,74224],{"start":261},[106,74225,74226],{},"控制台检测数据类型",[14,74228,74229],{},[23,74230],{"alt":25,"src":74231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[134,74233,74234],{"start":603},[106,74235,74236],{},"类型转换",[14,74238,74239],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,74241,74242],{},"转换方式：隐式转换和显示转换",[14,74244,74245],{},"①隐式转换",[103,74247,74248,74251,74254,74257],{},[106,74249,74250],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[106,74252,74253],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[106,74255,74256],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[106,74258,74259],{},"任何数据和字符串相加结果都是字符串",[14,74261,74262],{},"②显示转换",[14,74264,74265],{},[23,74266],{"alt":25,"src":74267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,74269,74270],{},[23,74271],{"alt":25,"src":74272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,74274,74275],{},"在输入的时候要用好隐式转换，简单写起来",[14,74277,74278],{},"let num = +prompt(’请输入数字：‘)",[14,74280,74281],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,74283,74284],{},"console.log(parseInt('12.333px'))",[14,74286,74287],{},"输出为：12",[14,74289,74290],{},"console.log(parseInt('a'a'a12.333px'))",[14,74292,74293],{},"输出：NaN",[37,74295,74297],{"id":74296},"_26-运算符","2.6 运算符",[42,74299,74301],{"id":74300},"_261-赋值运算符","2.6.1 赋值运算符",[14,74303,74304],{},[23,74305],{"alt":25,"src":74306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[42,74308,74310],{"id":74309},"_262-一元运算符","2.6.2 一元运算符",[14,74312,74313],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,74315,74316],{},[23,74317],{"alt":25,"src":74318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,74320,74321],{},[23,74322],{"alt":25,"src":74323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,74325,74326],{},"两者的区别：",[14,74328,74329],{},[23,74330],{"alt":25,"src":74331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,74333,74334],{},"前置先自加；后置后加，代码执行完之后再加",[42,74336,74338],{"id":74337},"_263-比较运算符","2.6.3 比较运算符",[14,74340,74341],{},[23,74342],{"alt":25,"src":74343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,74345,74346],{},"比较运算符也有隐式转换",[14,74348,74349],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,74351,74352],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,74354,74355],{},"要使用三等，开发的时候",[14,74357,74358],{},"NaN不等于任何人，包括它自己",[14,74360,74361],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,74363,74364],{},"7\u002F10=0.7",[14,74366,74367],{},"最后：0.5+0.2=0.7",[14,74369,74370],{},"字符串比较，比较的是字符对应的ASCII码",[42,74372,74374],{"id":74373},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,74376,74377],{},[23,74378],{"alt":25,"src":74379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,74381,74382],{},[23,74383],{"alt":25,"src":74384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,74386,74387],{},[23,74388],{"alt":25,"src":74389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,74391,74392],{},"上述题目选D",[14,74394,74395],{},"与真2假1；或真1假2",[42,74397,74399],{"id":74398},"_265-运算符优先级","2.6.5 运算符优先级",[14,74401,74402],{},[23,74403],{"alt":25,"src":74404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,74406,74407],{},"先算逻辑与，后算逻辑或",[37,74409,74411],{"id":74410},"_27-语句","2.7 语句",[14,74413,74414],{},"表达式：是可以被求值的代码，会有结果给我们",[14,74416,74417],{},"语句：语句是可以被执行的代码，例如prompt()",[14,74419,74420],{},[23,74421],{"alt":25,"src":74422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,74424,74425],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,74427,74428],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[42,74430,74432],{"id":74431},"_271-分支语句","2.7.1 分支语句",[326,74434,74436],{"id":74435},"_2711-if分支语句","2.7.1.1 if分支语句",[14,74438,74439],{},"if语句单行简单的话，可以不写{}，写在一行就行",[134,74441,74442],{},[106,74443,74444],{},"单分支语句",[14,74446,74447],{},[23,74448],{"alt":25,"src":74449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,74451,74452],{},"除了0，所有数字都为真",[151,74454,74456],{"className":520,"code":74455,"language":522,"meta":25,"style":25},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[49,74457,74458,74463,74468,74473,74477],{"__ignoreMap":25},[159,74459,74460],{"class":161,"line":162},[159,74461,74462],{"class":165},"if（0) {\n",[159,74464,74465],{"class":161,"line":176},[159,74466,74467],{"class":165},"    let a=1\n",[159,74469,74470],{"class":161,"line":203},[159,74471,74472],{"class":165},"    alert(typeof a)\n",[159,74474,74475],{"class":161,"line":223},[159,74476,15685],{"class":165},[159,74478,74479],{"class":161,"line":233},[159,74480,74481],{"class":165},"不输出，括号为假\n",[134,74483,74484],{"start":176},[106,74485,74486],{},"双分支语句",[14,74488,74489],{},[23,74490],{"alt":25,"src":74491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[134,74493,74494],{"start":203},[106,74495,74496],{},"多分支语句",[14,74498,74499],{},[23,74500],{"alt":25,"src":74501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[326,74503,74505],{"id":74504},"_2712-三元运算符","2.7.1.2 三元运算符",[14,74507,74508],{},[23,74509],{"alt":25,"src":74510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[326,74512,74514],{"id":74513},"_2713-switch语句","2.7.1.3 switch语句",[14,74516,74517],{},[23,74518],{"alt":25,"src":74519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,74521,74522],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[42,74524,74526],{"id":74525},"_272-循环语句","2.7.2 循环语句",[326,74528,74530],{"id":74529},"_2721-断点演示","2.7.2.1 断点演示",[14,74532,74533],{},[23,74534],{"alt":25,"src":74535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[326,74537,74539],{"id":74538},"_2722-while循环","2.7.2.2 while循环",[14,74541,74542],{},[23,74543],{"alt":25,"src":74544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,74546,74547],{},[23,74548],{"alt":25,"src":74549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[326,74551,74553],{"id":74552},"_2723-for循环","2.7.2.3 for循环",[14,74555,74556],{},[23,74557],{"alt":25,"src":74558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,74560,74561],{},"for(;;) {",[14,74563,886],{},[14,74565,74566],{},"表示无限循环",[14,74568,74569],{},[23,74570],{"alt":25,"src":74571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[326,74573,74575],{"id":74574},"_2724-循环的退出","2.7.2.4 循环的退出",[14,74577,74578],{},[23,74579],{"alt":25,"src":74580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[37,74582,74584],{"id":74583},"_28-数组","2.8 数组",[42,74586,74588],{"id":74587},"_281-基础认识","2.8.1 基础认识",[14,74590,74591],{},[23,74592],{"alt":25,"src":74593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,74595,74596],{},[23,74597],{"alt":25,"src":74598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,74600,74601],{},[23,74602],{"alt":25,"src":74603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,74605,74606],{},[23,74607],{"alt":25,"src":74608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[42,74610,74612],{"id":74611},"_282-操作数组","2.8.2 操作数组",[14,74614,74615],{},[23,74616],{"alt":25,"src":74617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[134,74619,74620],{},[106,74621,74622],{},"添加元素",[14,74624,74625],{},[23,74626],{"alt":25,"src":74627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,74629,74630],{},"console.log(arr.push('green'))",[14,74632,74633],{},"输出结果：为新数组的长度",[14,74635,74636],{},[23,74637],{"alt":25,"src":74638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,74640,74641],{},"push用的非常多，一定要记住",[134,74643,74644],{},[106,74645,74646],{},"删除元素",[14,74648,74649],{},[23,74650],{"alt":25,"src":74651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,74653,74654],{},[23,74655],{"alt":25,"src":74656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,74658,74659],{},[23,74660],{"alt":25,"src":74661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[42,74663,74665],{"id":74664},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[151,74667,74669],{"className":520,"code":74668,"language":522,"meta":25,"style":25},"\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",[49,74670,74671,74681,74695,74699,74707,74721,74741,74761,74773,74781,74787,74797,74807,74811,74815,74822,74832,74844,74856,74874,74891,74905,74917,74928,74939,74943,74947,74957,74967,74979,74989,75001,75011,75015,75019,75030,75034,75048,75052,75056,75067,75081,75093,75107,75111,75119,75127,75131,75139,75143,75151,75156,75161,75173,75200,75205,75210,75234,75239,75243,75248,75253,75267,75271,75276,75304,75316,75332,75348,75362,75367,75374,75378,75383,75396,75404,75412,75416],{"__ignoreMap":25},[159,74672,74673,74675,74677,74679],{"class":161,"line":162},[159,74674,914],{"class":165},[159,74676,917],{"class":169},[159,74678,920],{"class":185},[159,74680,173],{"class":165},[159,74682,74683,74685,74687,74689,74691,74693],{"class":161,"line":176},[159,74684,166],{"class":165},[159,74686,522],{"class":169},[159,74688,931],{"class":185},[159,74690,189],{"class":165},[159,74692,936],{"class":192},[159,74694,173],{"class":165},[159,74696,74697],{"class":161,"line":203},[159,74698,590],{"emptyLinePlaceholder":589},[159,74700,74701,74703,74705],{"class":161,"line":223},[159,74702,166],{"class":165},[159,74704,949],{"class":169},[159,74706,173],{"class":165},[159,74708,74709,74711,74713,74715,74717,74719],{"class":161,"line":233},[159,74710,2056],{"class":165},[159,74712,958],{"class":169},[159,74714,961],{"class":185},[159,74716,189],{"class":165},[159,74718,966],{"class":192},[159,74720,173],{"class":165},[159,74722,74723,74725,74727,74729,74731,74733,74735,74737,74739],{"class":161,"line":239},[159,74724,2056],{"class":165},[159,74726,958],{"class":169},[159,74728,6058],{"class":185},[159,74730,189],{"class":165},[159,74732,6063],{"class":192},[159,74734,984],{"class":185},[159,74736,189],{"class":165},[159,74738,6070],{"class":192},[159,74740,173],{"class":165},[159,74742,74743,74745,74747,74749,74751,74753,74755,74757,74759],{"class":161,"line":245},[159,74744,2056],{"class":165},[159,74746,958],{"class":169},[159,74748,547],{"class":185},[159,74750,189],{"class":165},[159,74752,981],{"class":192},[159,74754,984],{"class":185},[159,74756,189],{"class":165},[159,74758,989],{"class":192},[159,74760,173],{"class":165},[159,74762,74763,74765,74767,74769,74771],{"class":161,"line":251},[159,74764,2056],{"class":165},[159,74766,998],{"class":169},[159,74768,1001],{"class":165},[159,74770,998],{"class":169},[159,74772,173],{"class":165},[159,74774,74775,74777,74779],{"class":161,"line":261},[159,74776,2056],{"class":165},[159,74778,1468],{"class":169},[159,74780,173],{"class":165},[159,74782,74783,74785],{"class":161,"line":603},[159,74784,7489],{"class":169},[159,74786,1478],{"class":165},[159,74788,74789,74791,74793,74795],{"class":161,"line":621},[159,74790,7496],{"class":1146},[159,74792,1486],{"class":165},[159,74794,1489],{"class":1146},[159,74796,1492],{"class":165},[159,74798,74799,74801,74803,74805],{"class":161,"line":634},[159,74800,7507],{"class":1146},[159,74802,1486],{"class":165},[159,74804,1489],{"class":1146},[159,74806,1492],{"class":165},[159,74808,74809],{"class":161,"line":640},[159,74810,7530],{"class":165},[159,74812,74813],{"class":161,"line":1075},[159,74814,590],{"emptyLinePlaceholder":589},[159,74816,74817,74820],{"class":161,"line":1081},[159,74818,74819],{"class":185},"        .box",[159,74821,1478],{"class":165},[159,74823,74824,74826,74828,74830],{"class":161,"line":1091},[159,74825,7779],{"class":1146},[159,74827,1486],{"class":165},[159,74829,1823],{"class":1146},[159,74831,1492],{"class":165},[159,74833,74834,74836,74838,74840,74842],{"class":161,"line":1100},[159,74835,7587],{"class":1146},[159,74837,1486],{"class":165},[159,74839,19171],{"class":1146},[159,74841,1571],{"class":1142},[159,74843,1492],{"class":165},[159,74845,74846,74848,74850,74852,74854],{"class":161,"line":1123},[159,74847,7644],{"class":1146},[159,74849,1486],{"class":165},[159,74851,27596],{"class":1146},[159,74853,1571],{"class":1142},[159,74855,1492],{"class":165},[159,74857,74858,74861,74863,74865,74867,74869,74872],{"class":161,"line":1132},[159,74859,74860],{"class":1146},"            border-left",[159,74862,1486],{"class":165},[159,74864,4932],{"class":1146},[159,74866,1571],{"class":1142},[159,74868,7709],{"class":1146},[159,74870,74871],{"class":1146}," pink",[159,74873,1492],{"class":165},[159,74875,74876,74879,74881,74883,74885,74887,74889],{"class":161,"line":1139},[159,74877,74878],{"class":1146},"            border-bottom",[159,74880,1486],{"class":165},[159,74882,4932],{"class":1146},[159,74884,1571],{"class":1142},[159,74886,7709],{"class":1146},[159,74888,74871],{"class":1146},[159,74890,1492],{"class":165},[159,74892,74893,74895,74897,74899,74901,74903],{"class":161,"line":1168},[159,74894,7496],{"class":1146},[159,74896,1486],{"class":165},[159,74898,4230],{"class":1146},[159,74900,1571],{"class":1142},[159,74902,1601],{"class":1146},[159,74904,1492],{"class":165},[159,74906,74907,74910,74912,74915],{"class":161,"line":1174},[159,74908,74909],{"class":1146},"            justify-content",[159,74911,1486],{"class":165},[159,74913,74914],{"class":1146},"space-around",[159,74916,1492],{"class":165},[159,74918,74919,74922,74924,74926],{"class":161,"line":1180},[159,74920,74921],{"class":1146},"            align-items",[159,74923,1486],{"class":165},[159,74925,8685],{"class":1146},[159,74927,1492],{"class":165},[159,74929,74930,74933,74935,74937],{"class":161,"line":1194},[159,74931,74932],{"class":1146},"            text-align",[159,74934,1486],{"class":165},[159,74936,4193],{"class":1146},[159,74938,1492],{"class":165},[159,74940,74941],{"class":161,"line":1200},[159,74942,7530],{"class":165},[159,74944,74945],{"class":161,"line":1221},[159,74946,590],{"emptyLinePlaceholder":589},[159,74948,74949,74951,74953,74955],{"class":161,"line":1230},[159,74950,74819],{"class":185},[159,74952,6760],{"class":1142},[159,74954,182],{"class":169},[159,74956,1478],{"class":165},[159,74958,74959,74961,74963,74965],{"class":161,"line":1247},[159,74960,7779],{"class":1146},[159,74962,1486],{"class":165},[159,74964,1823],{"class":1146},[159,74966,1492],{"class":165},[159,74968,74969,74971,74973,74975,74977],{"class":161,"line":1265},[159,74970,7587],{"class":1146},[159,74972,1486],{"class":165},[159,74974,4230],{"class":1146},[159,74976,1571],{"class":1142},[159,74978,1492],{"class":165},[159,74980,74981,74983,74985,74987],{"class":161,"line":1277},[159,74982,7976],{"class":1146},[159,74984,1486],{"class":165},[159,74986,13277],{"class":1146},[159,74988,1492],{"class":165},[159,74990,74991,74994,74996,74999],{"class":161,"line":1283},[159,74992,74993],{"class":1146},"            flex-direction",[159,74995,1486],{"class":165},[159,74997,74998],{"class":1146},"column",[159,75000,1492],{"class":165},[159,75002,75003,75005,75007,75009],{"class":161,"line":1294},[159,75004,74909],{"class":1146},[159,75006,1486],{"class":165},[159,75008,1836],{"class":1146},[159,75010,1492],{"class":165},[159,75012,75013],{"class":161,"line":1305},[159,75014,7530],{"class":165},[159,75016,75017],{"class":161,"line":1311},[159,75018,590],{"emptyLinePlaceholder":589},[159,75020,75021,75023,75026,75028],{"class":161,"line":1322},[159,75022,74819],{"class":185},[159,75024,75025],{"class":169}," div",[159,75027,19473],{"class":169},[159,75029,1478],{"class":165},[159,75031,75032],{"class":161,"line":1327},[159,75033,590],{"emptyLinePlaceholder":589},[159,75035,75036,75039,75041,75044,75046],{"class":161,"line":1336},[159,75037,75038],{"class":1146},"            margin-top",[159,75040,1486],{"class":165},[159,75042,75043],{"class":1146},"-20",[159,75045,1571],{"class":1142},[159,75047,1492],{"class":165},[159,75049,75050],{"class":161,"line":1345},[159,75051,7530],{"class":165},[159,75053,75054],{"class":161,"line":1350},[159,75055,590],{"emptyLinePlaceholder":589},[159,75057,75058,75060,75062,75065],{"class":161,"line":1764},[159,75059,74819],{"class":185},[159,75061,75025],{"class":169},[159,75063,75064],{"class":169}," h4",[159,75066,1478],{"class":165},[159,75068,75069,75072,75074,75077,75079],{"class":161,"line":1769},[159,75070,75071],{"class":1146},"            margin-bottom",[159,75073,1486],{"class":165},[159,75075,75076],{"class":1146},"-35",[159,75078,1571],{"class":1142},[159,75080,1492],{"class":165},[159,75082,75083,75085,75087,75089,75091],{"class":161,"line":1777},[159,75084,7587],{"class":1146},[159,75086,1486],{"class":165},[159,75088,9058],{"class":1146},[159,75090,1571],{"class":1142},[159,75092,1492],{"class":165},[159,75094,75095,75098,75100,75103,75105],{"class":161,"line":1788},[159,75096,75097],{"class":1146},"            margin-left",[159,75099,1486],{"class":165},[159,75101,75102],{"class":1146},"-10",[159,75104,1571],{"class":1142},[159,75106,1492],{"class":165},[159,75108,75109],{"class":161,"line":1802},[159,75110,7530],{"class":165},[159,75112,75113,75115,75117],{"class":161,"line":1815},[159,75114,1084],{"class":165},[159,75116,1468],{"class":169},[159,75118,173],{"class":165},[159,75120,75121,75123,75125],{"class":161,"line":1828},[159,75122,264],{"class":165},[159,75124,949],{"class":169},[159,75126,173],{"class":165},[159,75128,75129],{"class":161,"line":1841},[159,75130,590],{"emptyLinePlaceholder":589},[159,75132,75133,75135,75137],{"class":161,"line":1852},[159,75134,166],{"class":165},[159,75136,170],{"class":169},[159,75138,173],{"class":165},[159,75140,75141],{"class":161,"line":1866},[159,75142,590],{"emptyLinePlaceholder":589},[159,75144,75145,75147,75149],{"class":161,"line":1879},[159,75146,2056],{"class":165},[159,75148,228],{"class":169},[159,75150,173],{"class":165},[159,75152,75153],{"class":161,"line":1884},[159,75154,75155],{"class":1135},"        \u002F\u002F 1. 四次弹框效果\n",[159,75157,75158],{"class":161,"line":1889},[159,75159,75160],{"class":1135},"        \u002F\u002F 声明一个新的数组\n",[159,75162,75163,75166,75169,75171],{"class":161,"line":1899},[159,75164,75165],{"class":1142},"        let",[159,75167,75168],{"class":165}," arr ",[159,75170,189],{"class":1142},[159,75172,16884],{"class":165},[159,75174,75175,75177,75179,75181,75183,75185,75187,75189,75191,75194,75196,75198],{"class":161,"line":1912},[159,75176,27032],{"class":1142},[159,75178,11680],{"class":165},[159,75180,11683],{"class":1142},[159,75182,1186],{"class":165},[159,75184,189],{"class":1142},[159,75186,2707],{"class":1146},[159,75188,11692],{"class":165},[159,75190,25263],{"class":1142},[159,75192,75193],{"class":1146}," 4",[159,75195,11702],{"class":165},[159,75197,11705],{"class":1142},[159,75199,1262],{"class":165},[159,75201,75202],{"class":161,"line":1925},[159,75203,75204],{"class":1135},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[159,75206,75207],{"class":161,"line":1956},[159,75208,75209],{"class":1135},"            \u002F\u002F arr.push(num)\n",[159,75211,75212,75215,75217,75219,75222,75224,75227,75229,75232],{"class":161,"line":1971},[159,75213,75214],{"class":165},"            arr.",[159,75216,17116],{"class":185},[159,75218,1159],{"class":165},[159,75220,75221],{"class":185},"prompt",[159,75223,1159],{"class":165},[159,75225,75226],{"class":192},"`请输入第${",[159,75228,1241],{"class":165},[159,75230,75231],{"class":192},"}季度的数据:`",[159,75233,18787],{"class":165},[159,75235,75236],{"class":161,"line":1976},[159,75237,75238],{"class":1135},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[159,75240,75241],{"class":161,"line":1981},[159,75242,7530],{"class":165},[159,75244,75245],{"class":161,"line":1989},[159,75246,75247],{"class":1135},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[159,75249,75250],{"class":161,"line":2001},[159,75251,75252],{"class":1135},"        \u002F\u002F 盒子开头\n",[159,75254,75255,75257,75260,75262,75265],{"class":161,"line":2006},[159,75256,11755],{"class":165},[159,75258,75259],{"class":185},"write",[159,75261,1159],{"class":165},[159,75263,75264],{"class":192},"` \u003Cdiv class=\"box\">`",[159,75266,1165],{"class":165},[159,75268,75269],{"class":161,"line":2015},[159,75270,590],{"emptyLinePlaceholder":589},[159,75272,75273],{"class":161,"line":2024},[159,75274,75275],{"class":1135},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[159,75277,75278,75280,75282,75284,75286,75288,75290,75292,75294,75296,75298,75300,75302],{"class":161,"line":2029},[159,75279,27032],{"class":1142},[159,75281,11680],{"class":165},[159,75283,11683],{"class":1142},[159,75285,1186],{"class":165},[159,75287,189],{"class":1142},[159,75289,1259],{"class":1146},[159,75291,11692],{"class":165},[159,75293,166],{"class":1142},[159,75295,4780],{"class":165},[159,75297,3828],{"class":1146},[159,75299,11702],{"class":165},[159,75301,11705],{"class":1142},[159,75303,1262],{"class":165},[159,75305,75306,75309,75311,75313],{"class":161,"line":2038},[159,75307,75308],{"class":165},"            document.",[159,75310,75259],{"class":185},[159,75312,1159],{"class":165},[159,75314,75315],{"class":192},"`\n",[159,75317,75318,75321,75323,75325,75327,75329],{"class":161,"line":2053},[159,75319,75320],{"class":192},"              \u003Cdiv style=\"height: ${",[159,75322,17260],{"class":165},[159,75324,17263],{"class":192},[159,75326,1241],{"class":165},[159,75328,18375],{"class":192},[159,75330,75331],{"class":192},"}px;\">\n",[159,75333,75334,75337,75339,75341,75343,75345],{"class":161,"line":2070},[159,75335,75336],{"class":192},"                \u003Cspan>${",[159,75338,17260],{"class":165},[159,75340,17263],{"class":192},[159,75342,1241],{"class":165},[159,75344,18375],{"class":192},[159,75346,75347],{"class":192},"}\u003C\u002Fspan>\n",[159,75349,75350,75353,75355,75357,75359],{"class":161,"line":2095},[159,75351,75352],{"class":192},"                \u003Ch4>第${",[159,75354,1241],{"class":165},[159,75356,3925],{"class":1142},[159,75358,2707],{"class":1146},[159,75360,75361],{"class":192},"}季度\u003C\u002Fh4>\n",[159,75363,75364],{"class":161,"line":2104},[159,75365,75366],{"class":192},"              \u003C\u002Fdiv>          \n",[159,75368,75369,75372],{"class":161,"line":2120},[159,75370,75371],{"class":192},"            `",[159,75373,1165],{"class":165},[159,75375,75376],{"class":161,"line":2134},[159,75377,7530],{"class":165},[159,75379,75380],{"class":161,"line":2143},[159,75381,75382],{"class":1135},"        \u002F\u002F 盒子结尾\n",[159,75384,75385,75387,75389,75391,75394],{"class":161,"line":2165},[159,75386,11755],{"class":165},[159,75388,75259],{"class":185},[159,75390,1159],{"class":165},[159,75392,75393],{"class":192},"` \u003C\u002Fdiv>`",[159,75395,1165],{"class":165},[159,75397,75398,75400,75402],{"class":161,"line":2178},[159,75399,1084],{"class":165},[159,75401,228],{"class":169},[159,75403,173],{"class":165},[159,75405,75406,75408,75410],{"class":161,"line":2191},[159,75407,264],{"class":165},[159,75409,170],{"class":169},[159,75411,173],{"class":165},[159,75413,75414],{"class":161,"line":2204},[159,75415,590],{"emptyLinePlaceholder":589},[159,75417,75418,75420,75422],{"class":161,"line":2217},[159,75419,264],{"class":165},[159,75421,522],{"class":169},[159,75423,173],{"class":165},[42,75425,75427],{"id":75426},"_284-冒泡排序","2.8.4 冒泡排序",[151,75429,75431],{"className":520,"code":75430,"language":522,"meta":25,"style":25},"\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",[49,75432,75433,75443,75457,75461,75469,75483,75503,75515,75523,75527,75535,75543,75573,75605,75641,75646,75665,75670,75683,75698,75714,75718,75722,75726,75734,75742,75750,75754],{"__ignoreMap":25},[159,75434,75435,75437,75439,75441],{"class":161,"line":162},[159,75436,914],{"class":165},[159,75438,917],{"class":169},[159,75440,920],{"class":185},[159,75442,173],{"class":165},[159,75444,75445,75447,75449,75451,75453,75455],{"class":161,"line":176},[159,75446,166],{"class":165},[159,75448,522],{"class":169},[159,75450,931],{"class":185},[159,75452,189],{"class":165},[159,75454,936],{"class":192},[159,75456,173],{"class":165},[159,75458,75459],{"class":161,"line":203},[159,75460,590],{"emptyLinePlaceholder":589},[159,75462,75463,75465,75467],{"class":161,"line":223},[159,75464,166],{"class":165},[159,75466,949],{"class":169},[159,75468,173],{"class":165},[159,75470,75471,75473,75475,75477,75479,75481],{"class":161,"line":233},[159,75472,179],{"class":165},[159,75474,958],{"class":169},[159,75476,961],{"class":185},[159,75478,189],{"class":165},[159,75480,966],{"class":192},[159,75482,173],{"class":165},[159,75484,75485,75487,75489,75491,75493,75495,75497,75499,75501],{"class":161,"line":239},[159,75486,179],{"class":165},[159,75488,958],{"class":169},[159,75490,547],{"class":185},[159,75492,189],{"class":165},[159,75494,981],{"class":192},[159,75496,984],{"class":185},[159,75498,189],{"class":165},[159,75500,989],{"class":192},[159,75502,173],{"class":165},[159,75504,75505,75507,75509,75511,75513],{"class":161,"line":245},[159,75506,179],{"class":165},[159,75508,998],{"class":169},[159,75510,1001],{"class":165},[159,75512,998],{"class":169},[159,75514,173],{"class":165},[159,75516,75517,75519,75521],{"class":161,"line":251},[159,75518,264],{"class":165},[159,75520,949],{"class":169},[159,75522,173],{"class":165},[159,75524,75525],{"class":161,"line":261},[159,75526,590],{"emptyLinePlaceholder":589},[159,75528,75529,75531,75533],{"class":161,"line":603},[159,75530,166],{"class":165},[159,75532,170],{"class":169},[159,75534,173],{"class":165},[159,75536,75537,75539,75541],{"class":161,"line":621},[159,75538,179],{"class":165},[159,75540,228],{"class":169},[159,75542,173],{"class":165},[159,75544,75545,75547,75549,75551,75553,75555,75557,75559,75561,75563,75565,75567,75569,75571],{"class":161,"line":634},[159,75546,1183],{"class":1142},[159,75548,75168],{"class":165},[159,75550,189],{"class":1142},[159,75552,4608],{"class":165},[159,75554,1753],{"class":1146},[159,75556,1939],{"class":165},[159,75558,8866],{"class":1146},[159,75560,1939],{"class":165},[159,75562,23949],{"class":1146},[159,75564,1939],{"class":165},[159,75566,11034],{"class":1146},[159,75568,1939],{"class":165},[159,75570,4932],{"class":1146},[159,75572,4634],{"class":165},[159,75574,75575,75577,75579,75581,75583,75585,75587,75589,75591,75593,75595,75597,75599,75601,75603],{"class":161,"line":640},[159,75576,11677],{"class":1142},[159,75578,11680],{"class":165},[159,75580,11683],{"class":1142},[159,75582,1186],{"class":165},[159,75584,189],{"class":1142},[159,75586,1259],{"class":1146},[159,75588,11692],{"class":165},[159,75590,166],{"class":1142},[159,75592,4780],{"class":165},[159,75594,3828],{"class":1146},[159,75596,21708],{"class":1142},[159,75598,2707],{"class":1146},[159,75600,11702],{"class":165},[159,75602,11705],{"class":1142},[159,75604,1262],{"class":165},[159,75606,75607,75609,75611,75613,75615,75617,75619,75621,75623,75625,75627,75629,75631,75633,75635,75637,75639],{"class":161,"line":1075},[159,75608,12875],{"class":1142},[159,75610,11680],{"class":165},[159,75612,11683],{"class":1142},[159,75614,33096],{"class":165},[159,75616,189],{"class":1142},[159,75618,1259],{"class":1146},[159,75620,33103],{"class":165},[159,75622,166],{"class":1142},[159,75624,4780],{"class":165},[159,75626,3828],{"class":1146},[159,75628,21708],{"class":1142},[159,75630,1186],{"class":165},[159,75632,24376],{"class":1142},[159,75634,2707],{"class":1146},[159,75636,33110],{"class":165},[159,75638,11705],{"class":1142},[159,75640,1262],{"class":165},[159,75642,75643],{"class":161,"line":1081},[159,75644,75645],{"class":1135},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[159,75647,75648,75650,75653,75655,75658,75660,75662],{"class":161,"line":1091},[159,75649,17003],{"class":1142},[159,75651,75652],{"class":165}," (arr[j] ",[159,75654,6760],{"class":1142},[159,75656,75657],{"class":165}," arr[j ",[159,75659,2704],{"class":1142},[159,75661,2707],{"class":1146},[159,75663,75664],{"class":165},"]) {\n",[159,75666,75667],{"class":161,"line":1100},[159,75668,75669],{"class":1135},"          \u002F\u002F 交换两个变量\n",[159,75671,75672,75675,75678,75680],{"class":161,"line":1123},[159,75673,75674],{"class":1142},"          let",[159,75676,75677],{"class":165}," tmp ",[159,75679,189],{"class":1142},[159,75681,75682],{"class":165}," arr[j]\n",[159,75684,75685,75688,75690,75692,75694,75696],{"class":161,"line":1132},[159,75686,75687],{"class":165},"          arr[j] ",[159,75689,189],{"class":1142},[159,75691,75657],{"class":165},[159,75693,2704],{"class":1142},[159,75695,2707],{"class":1146},[159,75697,4634],{"class":165},[159,75699,75700,75703,75705,75707,75709,75711],{"class":161,"line":1139},[159,75701,75702],{"class":165},"          arr[j ",[159,75704,2704],{"class":1142},[159,75706,2707],{"class":1146},[159,75708,28061],{"class":165},[159,75710,189],{"class":1142},[159,75712,75713],{"class":165}," tmp\n",[159,75715,75716],{"class":161,"line":1168},[159,75717,7530],{"class":165},[159,75719,75720],{"class":161,"line":1174},[159,75721,1308],{"class":165},[159,75723,75724],{"class":161,"line":1180},[159,75725,1508],{"class":165},[159,75727,75728,75730,75732],{"class":161,"line":1194},[159,75729,13456],{"class":165},[159,75731,75259],{"class":185},[159,75733,20861],{"class":165},[159,75735,75736,75738,75740],{"class":161,"line":1200},[159,75737,254],{"class":165},[159,75739,228],{"class":169},[159,75741,173],{"class":165},[159,75743,75744,75746,75748],{"class":161,"line":1221},[159,75745,264],{"class":165},[159,75747,170],{"class":169},[159,75749,173],{"class":165},[159,75751,75752],{"class":161,"line":1230},[159,75753,590],{"emptyLinePlaceholder":589},[159,75755,75756,75758,75760],{"class":161,"line":1247},[159,75757,264],{"class":165},[159,75759,522],{"class":169},[159,75761,173],{"class":165},[14,75763,75764],{},[23,75765],{"alt":25,"src":75766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,75768,75769],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,75771,75772],{},"let arr = [4, 2, 5, 1, 3]",[14,75774,75775],{},"\u002F\u002F 1.升序排列写法",[14,75777,75778],{},"arr.sort(function (a, b) {",[14,75780,75781],{},"return a - b",[14,75783,11956],{},[14,75785,75786],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,75788,75789],{},"\u002F\u002F 降序排列写法",[14,75791,75778],{},[14,75793,75794],{},"return b - a",[14,75796,11956],{},[14,75798,75799],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[37,75801,75803],{"id":75802},"_29-函数","2.9 函数",[14,75805,75806],{},[23,75807],{"alt":25,"src":75808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,75810,75811],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,75813,75814],{},"函数的声明用function",[14,75816,75817],{},"函数里边可以嵌套函数",[42,75819,75821],{"id":75820},"_291-函数传参","2.9.1 函数传参",[14,75823,75824],{},[23,75825],{"alt":25,"src":75826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,75828,75829],{},[23,75830],{"alt":25,"src":75831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[103,75833,75834,75837,75840,75843,75846,75849],{},[106,75835,75836],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[106,75838,75839],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[106,75841,75842],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[106,75844,75845],{},"开发中尽量保持形参和实参个数一致",[106,75847,75848],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[106,75850,75851],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,75853,75854],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[42,75856,75858],{"id":75857},"_292-函数的返回值","2.9.2 函数的返回值",[14,75860,75861],{},[23,75862],{"alt":25,"src":75863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,75865,75866],{},[23,75867],{"alt":25,"src":75868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[103,75870,75871,75874,75877,75880,75883],{},[106,75872,75873],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[106,75875,75876],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[106,75878,75879],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[106,75881,75882],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[106,75884,75885],{},"断点调试:进入函数内部看执行过程F11",[42,75887,75889],{"id":75888},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[151,75891,75893],{"className":520,"code":75892,"language":522,"meta":25,"style":25},"    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",[49,75894,75895,75900,75905,75909,75914],{"__ignoreMap":25},[159,75896,75897],{"class":161,"line":162},[159,75898,75899],{"class":165},"    function fn(a, b) {\n",[159,75901,75902],{"class":161,"line":176},[159,75903,75904],{"class":165},"      console.log(a + b);\n",[159,75906,75907],{"class":161,"line":203},[159,75908,1508],{"class":165},[159,75910,75911],{"class":161,"line":223},[159,75912,75913],{"class":165},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[159,75915,75916],{"class":161,"line":233},[159,75917,75918],{"class":165},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[42,75920,75922],{"id":75921},"_294-作用域","2.9.4 作用域",[103,75924,75925,75931,75936,75939,75942],{},[106,75926,75927,75928],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[61,75929,75930],{},"作用域",[106,75932,75933],{},[61,75934,75935],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[106,75937,75938],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[106,75940,75941],{},"函数内部可以直接所使用全局变量",[106,75943,75944],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,75946,38199],{},[151,75948,75950],{"className":520,"code":75949,"language":522,"meta":25,"style":25},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[49,75951,75952,75957,75962,75966,75971,75976,75981],{"__ignoreMap":25},[159,75953,75954],{"class":161,"line":162},[159,75955,75956],{"class":165},"    function fun() {\n",[159,75958,75959],{"class":161,"line":176},[159,75960,75961],{"class":165},"      num = 10\n",[159,75963,75964],{"class":161,"line":203},[159,75965,1508],{"class":165},[159,75967,75968],{"class":161,"line":223},[159,75969,75970],{"class":165},"    fun()\n",[159,75972,75973],{"class":161,"line":233},[159,75974,75975],{"class":165},"    console.log(num)\n",[159,75977,75978],{"class":161,"line":239},[159,75979,75980],{"class":165},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[159,75982,75983],{"class":161,"line":245},[159,75984,75985],{"class":165},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[103,75987,75988,75991],{},[106,75989,75990],{},"函数内部的形参可以看做是局部变量",[106,75992,75993],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,75995,75996,75997],{},"变量访问原则： ",[61,75998,75999],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[42,76001,76003],{"id":76002},"_295-匿名函数","2.9.5 匿名函数",[14,76005,76006],{},"函数可以分为具名函数和匿名函数",[14,76008,76009],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[134,76011,76012],{},[106,76013,76014],{},"函数表达式",[14,76016,76017],{},[23,76018],{"alt":25,"src":76019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,76021,76022],{},"里边也可以写参数",[14,76024,76025],{},"具名函数调用位置可以随意调整；",[14,76027,76028],{},"匿名函数函数表达式形式只能在声明后才可以使用",[134,76030,76031],{"start":176},[106,76032,76033],{},"立即执行函数",[14,76035,76036],{},[23,76037],{"alt":25,"src":76038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,76040,76041],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,76043,76044],{},"写法：两个小括号，然后在第一个小括号中写function",[14,76046,76047],{},"(function () {})();",[14,76049,76050],{},"不要落下最后的;",[14,76052,76053],{},"立即执行函数必须要加;",[14,76055,76056],{},"分号写前写后都没问题",[14,76058,76059],{},"写前：",[14,76061,76062],{},"(function() {})()",[14,76064,76065],{},";(function () {})();",[14,76067,76068],{},"写后:",[14,76070,76071],{},"(function() {})();",[14,76073,76047],{},[14,76075,76076],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,76078,76079],{},"还有一种写法：",[14,76081,76082],{},"(function(){}());",[14,76084,76085],{},"或者:",[14,76087,76088],{},"!function(){}();",[14,76090,76091],{},"立即执行函数有时候也是可以加名字的：",[14,76093,76094],{},"(function flexible(window,document) {}(window,document));",[14,76096,76097],{},"省一些调用方法",[42,76099,76101],{"id":76100},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,76103,76104],{},[23,76105],{"alt":25,"src":76106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,76108,76109],{},"这样就不用非得给x,y初始化了",[14,76111,76112],{},[23,76113],{"alt":25,"src":76114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,76116,76117],{},"代码执行时先看左边",[14,76119,76120],{},"例如：console.log(false && 3+5)",[14,76122,76123],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,76125,76126],{},"&&都是真时，就返回最后一个真值",[14,76128,76129],{},"console.log(11 && 22)",[14,76131,76132],{},"输出22",[14,76134,76135],{},"逻辑与：遇真则真",[14,76137,38199],{},[14,76139,76140],{},"let age=1",[14,76142,76143],{},"console.log(11 || age++)",[14,76145,76146],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,76148,76149],{},"console.log(11 || 22)",[14,76151,76152],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,76154,76155],{},"||如果都是假的话，就取最后一个假的值了",[42,76157,76159],{"id":76158},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,76161,76162],{},"显示转换：",[14,76164,76165,76168,76169],{},[61,76166,76167],{},"记忆","： ",[61,76170,76171],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,76173,76174],{},"空字符串为假，其他字符串全为真",[14,76176,76177],{},[23,76178],{"alt":25,"src":76179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,76181,76182],{},"隐式转换：",[14,76184,76185],{},[23,76186],{"alt":25,"src":76187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,76189,76190],{},"隐式转换:",[14,76192,76193],{},"null+3=3",[14,76195,76196],{},"undefined+3=NaN",[14,76198,76199],{},"null==undefined 输出true,他两个都当0看",[14,76201,76202],{},"null===undefined 输出false",[14,76204,76205],{},"undefined做任何操作都是NaN",[14,76207,76208],{},"NaN不等于NaN，NaN表示计算错误",[37,76210,76212],{"id":76211},"_210-对象","2.10 对象",[42,76214,76216],{"id":76215},"_2101-对象的介绍","2.10.1 对象的介绍",[14,76218,76219],{},"对象也是一种数据类型，里边的数据是无序的",[14,76221,76222],{},"对象由属性和方法组成",[14,76224,76225],{},[23,76226],{"alt":25,"src":76227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,76229,76230],{},[23,76231],{"alt":25,"src":76232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,76234,76235],{},[23,76236],{"alt":25,"src":76237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[42,76239,76241],{"id":76240},"_2102-对象属性","2.10.2 对象属性",[14,76243,76244],{},[23,76245],{"alt":25,"src":76246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[134,76248,76249],{},[106,76250,76251],{},"查询对象",[14,76253,76254],{},"对象名.属性 goods.uname",[14,76256,76257],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,76259,76260],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,76262,76263],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,76265,76266],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[134,76268,76269],{"start":176},[106,76270,76271],{},"重新赋值",[14,76273,76274],{},"对象名.属性=新值",[134,76276,76277],{"start":203},[106,76278,76279],{},"增加新数据",[14,76281,76274],{},[134,76283,76284],{"start":223},[106,76285,76286],{},"删除对象中的属性",[14,76288,76289],{},"delete 对象名.属性",[42,76291,76293],{"id":76292},"_2103-对象方法","2.10.3 对象方法",[14,76295,76296],{},[23,76297],{"alt":25,"src":76298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,76300,76301],{},"后边跟的是匿名函数",[14,76303,76304],{},"对象外面的叫函数；对象内部的叫方法",[14,76306,76307],{},[23,76308],{"alt":25,"src":76309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[42,76311,76313],{"id":76312},"_2104-遍历对象","2.10.4 遍历对象",[14,76315,76316],{},"理解为加括号的python字典遍历",[14,76318,76319],{},[23,76320],{"alt":25,"src":76321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,76323,76324],{},"k是字符串类型",[14,76326,76327],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[151,76329,76331],{"className":520,"code":76330,"language":522,"meta":25,"style":25},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[49,76332,76333,76338,76343,76348,76353],{"__ignoreMap":25},[159,76334,76335],{"class":161,"line":162},[159,76336,76337],{"class":165},"   let arr = [1, 2, 3]\n",[159,76339,76340],{"class":161,"line":176},[159,76341,76342],{"class":165},"    for (let k in arr) {\n",[159,76344,76345],{"class":161,"line":203},[159,76346,76347],{"class":165},"      console.log(k)\n",[159,76349,76350],{"class":161,"line":223},[159,76351,76352],{"class":165},"      console.log(arr[k])\n",[159,76354,76355],{"class":161,"line":233},[159,76356,1508],{"class":165},[14,76358,76359],{},[23,76360],{"alt":25,"src":76361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,76363,76364],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,76366,76367],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,76369,76370],{},"for in 得到的k是属性名",[228,76372,76373],{},"\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",[14,76375,76376],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[42,76378,76380],{"id":76379},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,76382,76383],{},"数组中放对象信息",[151,76385,76387],{"className":153,"code":76386,"language":155,"meta":25,"style":25},"\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",[49,76388,76389,76397,76402,76407,76412,76417,76422,76426,76431,76436,76441,76446,76451,76455,76459],{"__ignoreMap":25},[159,76390,76391,76393,76395],{"class":161,"line":162},[159,76392,166],{"class":165},[159,76394,228],{"class":169},[159,76396,173],{"class":165},[159,76398,76399],{"class":161,"line":176},[159,76400,76401],{"class":165},"    let students = [\n",[159,76403,76404],{"class":161,"line":203},[159,76405,76406],{"class":165},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[159,76408,76409],{"class":161,"line":223},[159,76410,76411],{"class":165},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[159,76413,76414],{"class":161,"line":233},[159,76415,76416],{"class":165},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[159,76418,76419],{"class":161,"line":239},[159,76420,76421],{"class":165},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[159,76423,76424],{"class":161,"line":245},[159,76425,2474],{"class":165},[159,76427,76428],{"class":161,"line":251},[159,76429,76430],{"class":165},"    for (let i = 0; i \u003C students.length; i++) {\n",[159,76432,76433],{"class":161,"line":261},[159,76434,76435],{"class":165},"      for (let k in students[i]) {\n",[159,76437,76438],{"class":161,"line":603},[159,76439,76440],{"class":165},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[159,76442,76443],{"class":161,"line":621},[159,76444,76445],{"class":165},"        \u002F\u002F输出每个人的名字：\n",[159,76447,76448],{"class":161,"line":634},[159,76449,76450],{"class":165},"        \u002F\u002Fconsole.log(students[i].name)\n",[159,76452,76453],{"class":161,"line":640},[159,76454,1308],{"class":165},[159,76456,76457],{"class":161,"line":1075},[159,76458,1508],{"class":165},[159,76460,76461,76463,76465],{"class":161,"line":1081},[159,76462,254],{"class":165},[159,76464,228],{"class":169},[159,76466,173],{"class":165},[42,76468,76470],{"id":76469},"_2106-内置对象","2.10.6 内置对象",[14,76472,76473],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[134,76475,76476],{},[106,76477,76478],{},"数学对象Math",[14,76480,76481],{},[23,76482],{"alt":25,"src":76483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,76485,76486],{},[8085,76487,76490],{"href":76488,"rel":76489},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[15923],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,76492,76493],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,76495,76496],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,76498,76499],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,76501,76502],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,76504,76505],{},"null属于对象数据类型",[134,76507,76508],{"start":176},[106,76509,76510],{},"生成任意范围随机数",[14,76512,76513],{},[23,76514],{"alt":25,"src":76515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,76517,76518],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,76520,76521],{},"乘以几就取不到几",[14,76523,76524],{},"取数组中的随机元素：",[14,76526,76527],{},"let arr = ['red', 'green', 'blue']",[14,76529,76530],{},"let random = Math.floor(Math.random() * arr.length)",[14,76532,76533],{},"console.log(arr[random])",[14,76535,76536],{},"这个函数得到的是全闭区间",[14,76538,76539],{},"function getRandom(N, M) {",[14,76541,76542],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,76544,886],{},[14,76546,76547],{},"console.log(getRandom(4, 8))",[42,76549,76551],{"id":76550},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,76553,76554],{},[23,76555],{"alt":25,"src":76556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,76558,76559],{},[23,76560],{"alt":25,"src":76561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,76563,76564],{},[23,76565],{"alt":25,"src":76566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,76568,76569],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,76571,76572],{},[23,76573],{"alt":25,"src":76574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,76576,76577],{},[23,76578],{"alt":25,"src":76579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,76581,76582],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,76584,76585],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,76587,76588],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1468,76590,76591],{},"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":25,"searchDepth":176,"depth":176,"links":76593},[76594,76602,76603,76604,76605,76606,76613,76617,76623,76632],{"id":73848,"depth":176,"text":73849,"children":76595},[76596,76597,76598,76599,76600,76601],{"id":73852,"depth":203,"text":73853},{"id":73869,"depth":203,"text":73870},{"id":73909,"depth":203,"text":73910},{"id":73921,"depth":203,"text":73922},{"id":73930,"depth":203,"text":73931},{"id":73978,"depth":203,"text":73979},{"id":73988,"depth":176,"text":73989},{"id":74074,"depth":176,"text":74075},{"id":74097,"depth":176,"text":74098},{"id":74109,"depth":176,"text":74110},{"id":74296,"depth":176,"text":74297,"children":76607},[76608,76609,76610,76611,76612],{"id":74300,"depth":203,"text":74301},{"id":74309,"depth":203,"text":74310},{"id":74337,"depth":203,"text":74338},{"id":74373,"depth":203,"text":74374},{"id":74398,"depth":203,"text":74399},{"id":74410,"depth":176,"text":74411,"children":76614},[76615,76616],{"id":74431,"depth":203,"text":74432},{"id":74525,"depth":203,"text":74526},{"id":74583,"depth":176,"text":74584,"children":76618},[76619,76620,76621,76622],{"id":74587,"depth":203,"text":74588},{"id":74611,"depth":203,"text":74612},{"id":74664,"depth":203,"text":74665},{"id":75426,"depth":203,"text":75427},{"id":75802,"depth":176,"text":75803,"children":76624},[76625,76626,76627,76628,76629,76630,76631],{"id":75820,"depth":203,"text":75821},{"id":75857,"depth":203,"text":75858},{"id":75888,"depth":203,"text":75889},{"id":75921,"depth":203,"text":75922},{"id":76002,"depth":203,"text":76003},{"id":76100,"depth":203,"text":76101},{"id":76158,"depth":203,"text":76159},{"id":76211,"depth":176,"text":76212,"children":76633},[76634,76635,76636,76637,76638,76639,76640],{"id":76215,"depth":203,"text":76216},{"id":76240,"depth":203,"text":76241},{"id":76292,"depth":203,"text":76293},{"id":76312,"depth":203,"text":76313},{"id":76379,"depth":203,"text":76380},{"id":76469,"depth":203,"text":76470},{"id":76550,"depth":203,"text":76551},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":73840,"description":23809},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":4,"title":5,"body":76647,"description":23809,"extension":23810,"meta":97976,"navigation":589,"path":23812,"seo":97977,"stem":23814,"__hash__":23815},{"type":7,"value":76648,"toc":97916},[76649,76651,76653,76655,76659,76661,76663,76665,76667,76669,76673,76677,76683,76689,76691,76693,76697,76701,76705,76707,76709,76717,76719,76721,76723,76725,76729,76733,76737,76739,76741,76825,76827,76831,76833,76837,76839,76841,76845,76847,76851,76853,76855,76865,76867,76871,76873,76875,76877,76881,76883,76885,76887,76891,76893,76897,76899,76901,76903,76905,76907,76909,76913,76917,76936,76938,76941,76943,76947,76949,76951,76953,76955,76957,76977,76979,76983,76987,76989,76991,76993,76997,77095,77099,77103,77251,77255,77257,77259,77263,77267,77269,77271,77273,77275,77277,77279,77281,77283,77285,77287,77289,77291,77293,77295,77297,77299,77301,77303,77307,77309,77665,77667,77671,77673,77677,78859,78863,78865,78867,78869,78873,80049,80051,80055,80059,80061,80065,80069,80071,80073,80077,80079,80083,80085,80087,80089,80931,80933,80935,81149,81151,81153,81155,81379,81381,81603,81605,81607,81611,81613,81615,81839,81841,81869,81871,81873,81877,81879,81881,81883,81885,81887,81889,81891,81893,81897,83043,83045,83047,84075,84077,84079,84081,84083,84085,84087,84089,84091,84093,84099,85493,85495,85497,85499,85501,85707,85709,85711,85713,85717,85721,85723,85725,85729,85731,85735,85737,85835,85837,85841,85845,85847,85849,85851,85855,85859,85863,85865,85867,85875,85877,85881,85885,85887,85889,85957,85959,85963,85965,85967,85975,85977,85981,87251,87253,87255,87257,87259,87261,87263,87265,87267,87269,87271,87273,87275,87277,87279,87281,87283,87285,87287,87289,87291,88329,88331,88333,88343,88351,88353,88357,88361,88365,88367,88369,88373,88375,88379,88807,88811,88813,88815,88819,88821,88823,88825,88829,88831,88835,88839,88841,88845,88849,88851,88855,88859,88861,88865,88869,88963,88965,88967,88971,89319,89321,89323,89325,89327,89329,89331,89333,89335,90617,90619,90623,90627,90629,90631,90633,90635,90637,90641,90645,90647,90649,90653,90657,90661,90663,90665,90667,90669,90671,90675,90677,90679,90683,90687,90689,90693,90695,90699,90701,90703,90705,90707,90709,90713,90715,90717,90719,90721,90723,90727,90729,90731,90735,90737,90739,90741,90765,90767,90769,90771,90775,90777,90781,90783,90785,90787,90789,90791,90793,90795,90797,90799,90801,90803,90805,90807,90809,90811,90815,90819,90821,90823,90825,90829,90831,90833,90835,90837,90841,90845,90849,90853,90857,90859,90861,90865,90869,90871,90875,90877,90881,90883,90885,90887,90889,90893,90895,90903,90905,90909,90911,90913,90915,90917,90921,90923,90925,90930,90935,90937,90955,90957,92373,92375,92803,92805,92809,92813,92817,92819,92823,92827,92831,92833,92837,92839,92841,92843,92845,92847,92849,92853,92855,92859,92861,92865,92867,92871,92875,92879,92881,92883,92887,92891,92893,92895,92897,92899,92903,92905,92909,92911,92915,92919,92923,92925,92929,92987,92989,92997,92999,93003,93145,93147,93151,93153,93155,93157,93159,93167,93169,93171,93175,93179,93181,93183,93185,93187,93189,93191,93193,93195,93197,93201,93203,93207,93209,93211,93213,93215,93225,93227,93229,93277,93281,93283,93285,93289,93291,93293,93297,93409,93411,93415,93419,93491,93495,93497,93499,93503,93507,93511,93513,93515,93517,93519,93523,93525,93533,93535,93547,96365,96367,96369,96371,96373,96387,96389,96391,96397,96399,96403,96405,96407,96411,96415,96417,96432,96434,96438,96440,96442,96444,96446,96448,96452,96454,96456,96460,96462,96466,96468,96472,96474,96478,97630,97632,97636,97638,97642,97914],[10,76650,5],{"id":12},[14,76652,16],{},[14,76654,19],{},[14,76656,76657],{},[23,76658],{"alt":25,"src":26},[14,76660,29],{},[14,76662,32],{},[14,76664,35],{},[37,76666,40],{"id":39},[42,76668,45],{"id":44},[14,76670,76671,52],{},[49,76672,51],{},[14,76674,76675,57],{},[49,76676,51],{},[14,76678,76679,66],{},[61,76680,76681],{},[49,76682,65],{},[14,76684,76685,73],{},[61,76686,76687],{},[49,76688,51],{},[14,76690,76],{},[42,76692,80],{"id":79},[14,76694,76695],{},[23,76696],{"alt":25,"src":85},[14,76698,76699],{},[23,76700],{"alt":25,"src":90},[14,76702,76703],{},[23,76704],{"alt":25,"src":95},[14,76706,98],{},[14,76708,101],{},[103,76710,76711,76713,76715],{},[106,76712,108],{},[106,76714,111],{},[106,76716,114],{},[14,76718,117],{},[42,76720,121],{"id":120},[14,76722,124],{},[14,76724,127],{},[14,76726,76727],{},[61,76728,132],{},[134,76730,76731],{},[106,76732,138],{},[14,76734,76735],{},[23,76736],{"alt":25,"src":143},[14,76738,146],{},[14,76740,149],{},[151,76742,76743],{"className":153,"code":154,"language":155,"meta":25,"style":25},[49,76744,76745,76753,76771,76789,76797,76801,76805,76809,76817],{"__ignoreMap":25},[159,76746,76747,76749,76751],{"class":161,"line":162},[159,76748,166],{"class":165},[159,76750,170],{"class":169},[159,76752,173],{"class":165},[159,76754,76755,76757,76759,76761,76763,76765,76767,76769],{"class":161,"line":176},[159,76756,179],{"class":165},[159,76758,182],{"class":169},[159,76760,186],{"class":185},[159,76762,189],{"class":165},[159,76764,193],{"class":192},[159,76766,196],{"class":165},[159,76768,182],{"class":169},[159,76770,173],{"class":165},[159,76772,76773,76775,76777,76779,76781,76783,76785,76787],{"class":161,"line":203},[159,76774,179],{"class":165},[159,76776,182],{"class":169},[159,76778,186],{"class":185},[159,76780,189],{"class":165},[159,76782,193],{"class":192},[159,76784,216],{"class":165},[159,76786,182],{"class":169},[159,76788,173],{"class":165},[159,76790,76791,76793,76795],{"class":161,"line":223},[159,76792,179],{"class":165},[159,76794,228],{"class":169},[159,76796,173],{"class":165},[159,76798,76799],{"class":161,"line":233},[159,76800,236],{"class":165},[159,76802,76803],{"class":161,"line":239},[159,76804,242],{"class":165},[159,76806,76807],{"class":161,"line":245},[159,76808,248],{"class":165},[159,76810,76811,76813,76815],{"class":161,"line":251},[159,76812,254],{"class":165},[159,76814,228],{"class":169},[159,76816,173],{"class":165},[159,76818,76819,76821,76823],{"class":161,"line":261},[159,76820,264],{"class":165},[159,76822,170],{"class":169},[159,76824,173],{"class":165},[14,76826,271],{},[14,76828,76829],{},[23,76830],{"alt":25,"src":276},[14,76832,279],{},[14,76834,76835],{},[23,76836],{"alt":25,"src":284},[14,76838,287],{},[14,76840,290],{},[134,76842,76843],{"start":176},[106,76844,295],{},[14,76846,298],{},[14,76848,76849],{},[23,76850],{"alt":25,"src":303},[42,76852,307],{"id":306},[14,76854,310],{},[103,76856,76857,76859,76861,76863],{},[106,76858,315],{},[106,76860,318],{},[106,76862,321],{},[106,76864,324],{},[326,76866,329],{"id":328},[14,76868,76869],{},[23,76870],{"alt":25,"src":334},[14,76872,337],{},[14,76874,340],{},[326,76876,344],{"id":343},[14,76878,76879],{},[23,76880],{"alt":25,"src":349},[14,76882,352],{},[42,76884,356],{"id":355},[326,76886,360],{"id":359},[14,76888,76889],{},[23,76890],{"alt":25,"src":365},[326,76892,369],{"id":368},[14,76894,76895],{},[23,76896],{"alt":25,"src":374},[14,76898,377],{},[14,76900,380],{},[14,76902,383],{},[14,76904,386],{},[14,76906,389],{},[14,76908,392],{},[14,76910,76911],{},[23,76912],{"alt":25,"src":397},[14,76914,76915],{},[23,76916],{"alt":25,"src":402},[134,76918,76919,76921,76923,76925,76927,76929],{},[106,76920,407],{},[106,76922,410],{},[106,76924,413],{},[106,76926,416],{},[106,76928,419],{},[106,76930,422,76931,76934],{},[182,76932],{"className":76933},[426,427],[429,76935],{},[14,76937,433],{},[182,76939],{"className":76940},[426],[228,76942,439],{},[14,76944,76945],{},[23,76946],{"alt":25,"src":444},[14,76948,447],{},[14,76950,450],{},[14,76952,453],{},[14,76954,456],{},[326,76956,460],{"id":459},[134,76958,76959,76961,76963,76965,76967,76969,76971,76973,76975],{},[106,76960,465],{},[106,76962,468],{},[106,76964,471],{},[106,76966,474],{},[106,76968,477],{},[106,76970,480],{},[106,76972,483],{},[106,76974,486],{},[106,76976,489],{},[42,76978,493],{"id":492},[134,76980,76981],{},[106,76982,498],{},[14,76984,76985],{},[23,76986],{"alt":25,"src":503},[14,76988,506],{},[14,76990,509],{},[14,76992,512],{},[14,76994,76995],{},[23,76996],{"alt":25,"src":517},[151,76998,76999],{"className":520,"code":521,"language":522,"meta":25,"style":25},[49,77000,77001,77005,77033,77037,77041,77045,77049,77053,77057,77061,77075,77087,77091],{"__ignoreMap":25},[159,77002,77003],{"class":161,"line":162},[159,77004,529],{"class":165},[159,77006,77007,77009,77011,77013,77015,77017,77019,77021,77023,77025,77027,77029,77031],{"class":161,"line":176},[159,77008,166],{"class":165},[159,77010,536],{"class":169},[159,77012,539],{"class":185},[159,77014,189],{"class":165},[159,77016,544],{"class":192},[159,77018,547],{"class":185},[159,77020,189],{"class":165},[159,77022,552],{"class":192},[159,77024,555],{"class":185},[159,77026,189],{"class":165},[159,77028,552],{"class":192},[159,77030,562],{"class":185},[159,77032,173],{"class":165},[159,77034,77035],{"class":161,"line":203},[159,77036,569],{"class":165},[159,77038,77039],{"class":161,"line":223},[159,77040,574],{"class":165},[159,77042,77043],{"class":161,"line":233},[159,77044,579],{"class":165},[159,77046,77047],{"class":161,"line":239},[159,77048,584],{"class":165},[159,77050,77051],{"class":161,"line":245},[159,77052,590],{"emptyLinePlaceholder":589},[159,77054,77055],{"class":161,"line":251},[159,77056,595],{"class":165},[159,77058,77059],{"class":161,"line":261},[159,77060,600],{"class":165},[159,77062,77063,77065,77067,77069,77071,77073],{"class":161,"line":603},[159,77064,166],{"class":165},[159,77066,608],{"class":169},[159,77068,611],{"class":185},[159,77070,614],{"class":165},[159,77072,608],{"class":169},[159,77074,173],{"class":165},[159,77076,77077,77079,77081,77083,77085],{"class":161,"line":621},[159,77078,166],{"class":165},[159,77080,608],{"class":169},[159,77082,614],{"class":165},[159,77084,608],{"class":169},[159,77086,173],{"class":165},[159,77088,77089],{"class":161,"line":634},[159,77090,637],{"class":165},[159,77092,77093],{"class":161,"line":640},[159,77094,643],{"class":165},[134,77096,77097],{"start":176},[106,77098,648],{},[14,77100,77101],{},[23,77102],{"alt":25,"src":653},[151,77104,77105],{"className":153,"code":656,"language":155,"meta":25,"style":25},[49,77106,77107,77115,77139,77157,77175,77193,77211,77219,77223,77227,77231,77235,77243],{"__ignoreMap":25},[159,77108,77109,77111,77113],{"class":161,"line":162},[159,77110,166],{"class":165},[159,77112,170],{"class":169},[159,77114,173],{"class":165},[159,77116,77117,77119,77121,77123,77125,77127,77129,77131,77133,77135,77137],{"class":161,"line":176},[159,77118,179],{"class":165},[159,77120,182],{"class":169},[159,77122,675],{"class":185},[159,77124,189],{"class":165},[159,77126,680],{"class":192},[159,77128,683],{"class":185},[159,77130,189],{"class":165},[159,77132,688],{"class":192},[159,77134,691],{"class":165},[159,77136,182],{"class":169},[159,77138,173],{"class":165},[159,77140,77141,77143,77145,77147,77149,77151,77153,77155],{"class":161,"line":203},[159,77142,179],{"class":165},[159,77144,182],{"class":169},[159,77146,675],{"class":185},[159,77148,189],{"class":165},[159,77150,708],{"class":192},[159,77152,711],{"class":165},[159,77154,182],{"class":169},[159,77156,173],{"class":165},[159,77158,77159,77161,77163,77165,77167,77169,77171,77173],{"class":161,"line":223},[159,77160,179],{"class":165},[159,77162,182],{"class":169},[159,77164,675],{"class":185},[159,77166,189],{"class":165},[159,77168,728],{"class":192},[159,77170,731],{"class":165},[159,77172,182],{"class":169},[159,77174,173],{"class":165},[159,77176,77177,77179,77181,77183,77185,77187,77189,77191],{"class":161,"line":233},[159,77178,179],{"class":165},[159,77180,182],{"class":169},[159,77182,675],{"class":185},[159,77184,189],{"class":165},[159,77186,748],{"class":192},[159,77188,751],{"class":165},[159,77190,182],{"class":169},[159,77192,173],{"class":165},[159,77194,77195,77197,77199,77201,77203,77205,77207,77209],{"class":161,"line":239},[159,77196,179],{"class":165},[159,77198,182],{"class":169},[159,77200,675],{"class":185},[159,77202,189],{"class":165},[159,77204,768],{"class":192},[159,77206,771],{"class":165},[159,77208,182],{"class":169},[159,77210,173],{"class":165},[159,77212,77213,77215,77217],{"class":161,"line":245},[159,77214,179],{"class":165},[159,77216,228],{"class":169},[159,77218,173],{"class":165},[159,77220,77221],{"class":161,"line":251},[159,77222,788],{"class":165},[159,77224,77225],{"class":161,"line":261},[159,77226,793],{"class":165},[159,77228,77229],{"class":161,"line":603},[159,77230,798],{"class":165},[159,77232,77233],{"class":161,"line":621},[159,77234,803],{"class":165},[159,77236,77237,77239,77241],{"class":161,"line":634},[159,77238,254],{"class":165},[159,77240,228],{"class":169},[159,77242,173],{"class":165},[159,77244,77245,77247,77249],{"class":161,"line":640},[159,77246,264],{"class":165},[159,77248,170],{"class":169},[159,77250,173],{"class":165},[14,77252,77253],{},[23,77254],{"alt":25,"src":824},[14,77256,827],{},[42,77258,831],{"id":830},[14,77260,77261],{},[23,77262],{"alt":25,"src":836},[14,77264,77265],{},[23,77266],{"alt":25,"src":841},[14,77268,844],{},[228,77270,847],{},[14,77272,850],{},[228,77274,853],{},[14,77276,856],{},[14,77278,859],{},[14,77280,862],{},[14,77282,865],{},[14,77284,868],{},[14,77286,871],{},[14,77288,874],{},[14,77290,877],{},[14,77292,880],{},[14,77294,883],{},[14,77296,886],{},[14,77298,889],{},[14,77300,892],{},[14,77302,895],{},[14,77304,77305],{},[23,77306],{"alt":25,"src":900},[326,77308,904],{"id":903},[151,77310,77311],{"className":520,"code":907,"language":522,"meta":25,"style":25},[49,77312,77313,77323,77337,77341,77349,77363,77383,77395,77403,77407,77415,77447,77451,77455,77459,77467,77475,77495,77503,77507,77525,77529,77533,77543,77547,77563,77569,77581,77593,77601,77605,77613,77621,77625,77633,77637,77645,77653,77657],{"__ignoreMap":25},[159,77314,77315,77317,77319,77321],{"class":161,"line":162},[159,77316,914],{"class":165},[159,77318,917],{"class":169},[159,77320,920],{"class":185},[159,77322,173],{"class":165},[159,77324,77325,77327,77329,77331,77333,77335],{"class":161,"line":176},[159,77326,166],{"class":165},[159,77328,522],{"class":169},[159,77330,931],{"class":185},[159,77332,189],{"class":165},[159,77334,936],{"class":192},[159,77336,173],{"class":165},[159,77338,77339],{"class":161,"line":203},[159,77340,590],{"emptyLinePlaceholder":589},[159,77342,77343,77345,77347],{"class":161,"line":223},[159,77344,166],{"class":165},[159,77346,949],{"class":169},[159,77348,173],{"class":165},[159,77350,77351,77353,77355,77357,77359,77361],{"class":161,"line":233},[159,77352,179],{"class":165},[159,77354,958],{"class":169},[159,77356,961],{"class":185},[159,77358,189],{"class":165},[159,77360,966],{"class":192},[159,77362,173],{"class":165},[159,77364,77365,77367,77369,77371,77373,77375,77377,77379,77381],{"class":161,"line":239},[159,77366,179],{"class":165},[159,77368,958],{"class":169},[159,77370,547],{"class":185},[159,77372,189],{"class":165},[159,77374,981],{"class":192},[159,77376,984],{"class":185},[159,77378,189],{"class":165},[159,77380,989],{"class":192},[159,77382,173],{"class":165},[159,77384,77385,77387,77389,77391,77393],{"class":161,"line":245},[159,77386,179],{"class":165},[159,77388,998],{"class":169},[159,77390,1001],{"class":165},[159,77392,998],{"class":169},[159,77394,173],{"class":165},[159,77396,77397,77399,77401],{"class":161,"line":251},[159,77398,264],{"class":165},[159,77400,949],{"class":169},[159,77402,173],{"class":165},[159,77404,77405],{"class":161,"line":261},[159,77406,590],{"emptyLinePlaceholder":589},[159,77408,77409,77411,77413],{"class":161,"line":603},[159,77410,166],{"class":165},[159,77412,170],{"class":169},[159,77414,173],{"class":165},[159,77416,77417,77419,77421,77423,77425,77427,77429,77431,77433,77435,77437,77439,77441,77443,77445],{"class":161,"line":621},[159,77418,179],{"class":165},[159,77420,1032],{"class":169},[159,77422,547],{"class":185},[159,77424,189],{"class":165},[159,77426,552],{"class":192},[159,77428,555],{"class":185},[159,77430,189],{"class":165},[159,77432,552],{"class":192},[159,77434,1047],{"class":185},[159,77436,189],{"class":165},[159,77438,1052],{"class":192},[159,77440,1055],{"class":185},[159,77442,189],{"class":165},[159,77444,1060],{"class":192},[159,77446,173],{"class":165},[159,77448,77449],{"class":161,"line":634},[159,77450,1067],{"class":165},[159,77452,77453],{"class":161,"line":640},[159,77454,1072],{"class":165},[159,77456,77457],{"class":161,"line":1075},[159,77458,1078],{"class":165},[159,77460,77461,77463,77465],{"class":161,"line":1081},[159,77462,1084],{"class":165},[159,77464,1032],{"class":169},[159,77466,173],{"class":165},[159,77468,77469,77471,77473],{"class":161,"line":1091},[159,77470,179],{"class":165},[159,77472,429],{"class":169},[159,77474,173],{"class":165},[159,77476,77477,77479,77481,77483,77485,77487,77489,77491,77493],{"class":161,"line":1100},[159,77478,179],{"class":165},[159,77480,608],{"class":169},[159,77482,186],{"class":185},[159,77484,189],{"class":165},[159,77486,1111],{"class":192},[159,77488,611],{"class":185},[159,77490,1116],{"class":165},[159,77492,608],{"class":169},[159,77494,173],{"class":165},[159,77496,77497,77499,77501],{"class":161,"line":1123},[159,77498,179],{"class":165},[159,77500,228],{"class":169},[159,77502,173],{"class":165},[159,77504,77505],{"class":161,"line":1132},[159,77506,1136],{"class":1135},[159,77508,77509,77511,77513,77515,77517,77519,77521,77523],{"class":161,"line":1139},[159,77510,1143],{"class":1142},[159,77512,1147],{"class":1146},[159,77514,1150],{"class":1142},[159,77516,1153],{"class":165},[159,77518,1156],{"class":185},[159,77520,1159],{"class":165},[159,77522,1162],{"class":192},[159,77524,1165],{"class":165},[159,77526,77527],{"class":161,"line":1168},[159,77528,1171],{"class":1135},[159,77530,77531],{"class":161,"line":1174},[159,77532,1177],{"class":1135},[159,77534,77535,77537,77539,77541],{"class":161,"line":1180},[159,77536,1183],{"class":1142},[159,77538,1186],{"class":165},[159,77540,189],{"class":1142},[159,77542,1191],{"class":1146},[159,77544,77545],{"class":161,"line":1194},[159,77546,1197],{"class":1135},[159,77548,77549,77551,77553,77555,77557,77559,77561],{"class":161,"line":1200},[159,77550,1183],{"class":1142},[159,77552,1205],{"class":165},[159,77554,189],{"class":1142},[159,77556,1210],{"class":185},[159,77558,1159],{"class":165},[159,77560,1215],{"class":1142},[159,77562,1218],{"class":165},[159,77564,77565,77567],{"class":161,"line":1221},[159,77566,1224],{"class":165},[159,77568,1227],{"class":1142},[159,77570,77571,77573,77575,77577,77579],{"class":161,"line":1230},[159,77572,1233],{"class":165},[159,77574,189],{"class":1142},[159,77576,1238],{"class":192},[159,77578,1241],{"class":165},[159,77580,1244],{"class":192},[159,77582,77583,77585,77587,77589,77591],{"class":161,"line":1247},[159,77584,1250],{"class":1142},[159,77586,1253],{"class":165},[159,77588,1256],{"class":1142},[159,77590,1259],{"class":1146},[159,77592,1262],{"class":165},[159,77594,77595,77597,77599],{"class":161,"line":1265},[159,77596,1268],{"class":185},[159,77598,1271],{"class":165},[159,77600,1274],{"class":1135},[159,77602,77603],{"class":161,"line":1277},[159,77604,1280],{"class":1135},[159,77606,77607,77609,77611],{"class":161,"line":1283},[159,77608,1286],{"class":165},[159,77610,189],{"class":1142},[159,77612,1291],{"class":1146},[159,77614,77615,77617,77619],{"class":161,"line":1294},[159,77616,1297],{"class":165},[159,77618,189],{"class":1142},[159,77620,1302],{"class":192},[159,77622,77623],{"class":161,"line":1305},[159,77624,1308],{"class":165},[159,77626,77627,77629,77631],{"class":161,"line":1311},[159,77628,1314],{"class":165},[159,77630,1317],{"class":1146},[159,77632,1165],{"class":165},[159,77634,77635],{"class":161,"line":1322},[159,77636,590],{"emptyLinePlaceholder":589},[159,77638,77639,77641,77643],{"class":161,"line":1327},[159,77640,254],{"class":165},[159,77642,228],{"class":169},[159,77644,173],{"class":165},[159,77646,77647,77649,77651],{"class":161,"line":1336},[159,77648,264],{"class":165},[159,77650,170],{"class":169},[159,77652,173],{"class":165},[159,77654,77655],{"class":161,"line":1345},[159,77656,590],{"emptyLinePlaceholder":589},[159,77658,77659,77661,77663],{"class":161,"line":1350},[159,77660,264],{"class":165},[159,77662,522],{"class":169},[159,77664,173],{"class":165},[14,77666,1359],{},[14,77668,77669,1365],{},[49,77670,1364],{},[326,77672,1369],{"id":1368},[134,77674,77675],{},[106,77676,1374],{},[151,77678,77679],{"className":520,"code":1377,"language":522,"meta":25,"style":25},[49,77680,77681,77691,77705,77709,77717,77731,77751,77763,77771,77777,77787,77797,77801,77805,77811,77821,77825,77829,77835,77845,77857,77869,77883,77887,77891,77897,77907,77917,77927,77939,77951,77961,77965,77969,77977,77987,77999,78011,78023,78027,78031,78037,78047,78059,78071,78081,78091,78101,78113,78125,78129,78133,78141,78153,78165,78191,78203,78207,78211,78217,78227,78231,78239,78247,78251,78259,78273,78287,78307,78315,78329,78341,78349,78367,78379,78391,78403,78415,78427,78439,78451,78459,78467,78475,78483,78493,78509,78525,78541,78557,78573,78589,78605,78621,78625,78643,78661,78679,78697,78707,78723,78731,78739,78747,78751,78755,78759,78763,78783,78795,78799,78819,78823,78831,78839,78847,78851],{"__ignoreMap":25},[159,77682,77683,77685,77687,77689],{"class":161,"line":162},[159,77684,914],{"class":165},[159,77686,917],{"class":169},[159,77688,920],{"class":185},[159,77690,173],{"class":165},[159,77692,77693,77695,77697,77699,77701,77703],{"class":161,"line":176},[159,77694,166],{"class":165},[159,77696,522],{"class":169},[159,77698,931],{"class":185},[159,77700,189],{"class":165},[159,77702,936],{"class":192},[159,77704,173],{"class":165},[159,77706,77707],{"class":161,"line":203},[159,77708,590],{"emptyLinePlaceholder":589},[159,77710,77711,77713,77715],{"class":161,"line":223},[159,77712,166],{"class":165},[159,77714,949],{"class":169},[159,77716,173],{"class":165},[159,77718,77719,77721,77723,77725,77727,77729],{"class":161,"line":233},[159,77720,179],{"class":165},[159,77722,958],{"class":169},[159,77724,961],{"class":185},[159,77726,189],{"class":165},[159,77728,966],{"class":192},[159,77730,173],{"class":165},[159,77732,77733,77735,77737,77739,77741,77743,77745,77747,77749],{"class":161,"line":239},[159,77734,179],{"class":165},[159,77736,958],{"class":169},[159,77738,547],{"class":185},[159,77740,189],{"class":165},[159,77742,981],{"class":192},[159,77744,984],{"class":185},[159,77746,189],{"class":165},[159,77748,989],{"class":192},[159,77750,173],{"class":165},[159,77752,77753,77755,77757,77759,77761],{"class":161,"line":245},[159,77754,179],{"class":165},[159,77756,998],{"class":169},[159,77758,1001],{"class":165},[159,77760,998],{"class":169},[159,77762,173],{"class":165},[159,77764,77765,77767,77769],{"class":161,"line":251},[159,77766,179],{"class":165},[159,77768,1468],{"class":169},[159,77770,173],{"class":165},[159,77772,77773,77775],{"class":161,"line":261},[159,77774,1475],{"class":169},[159,77776,1478],{"class":165},[159,77778,77779,77781,77783,77785],{"class":161,"line":603},[159,77780,1483],{"class":1146},[159,77782,1486],{"class":165},[159,77784,1489],{"class":1146},[159,77786,1492],{"class":165},[159,77788,77789,77791,77793,77795],{"class":161,"line":621},[159,77790,1497],{"class":1146},[159,77792,1486],{"class":165},[159,77794,1489],{"class":1146},[159,77796,1492],{"class":165},[159,77798,77799],{"class":161,"line":634},[159,77800,1508],{"class":165},[159,77802,77803],{"class":161,"line":640},[159,77804,590],{"emptyLinePlaceholder":589},[159,77806,77807,77809],{"class":161,"line":1075},[159,77808,1517],{"class":169},[159,77810,1478],{"class":165},[159,77812,77813,77815,77817,77819],{"class":161,"line":1081},[159,77814,1524],{"class":1146},[159,77816,1486],{"class":165},[159,77818,1529],{"class":1146},[159,77820,1492],{"class":165},[159,77822,77823],{"class":161,"line":1091},[159,77824,1508],{"class":165},[159,77826,77827],{"class":161,"line":1100},[159,77828,590],{"emptyLinePlaceholder":589},[159,77830,77831,77833],{"class":161,"line":1123},[159,77832,1544],{"class":185},[159,77834,1478],{"class":165},[159,77836,77837,77839,77841,77843],{"class":161,"line":1132},[159,77838,1551],{"class":1146},[159,77840,1486],{"class":165},[159,77842,1556],{"class":1146},[159,77844,1492],{"class":165},[159,77846,77847,77849,77851,77853,77855],{"class":161,"line":1139},[159,77848,1563],{"class":1146},[159,77850,1486],{"class":165},[159,77852,1568],{"class":1146},[159,77854,1571],{"class":1142},[159,77856,1492],{"class":165},[159,77858,77859,77861,77863,77865,77867],{"class":161,"line":1168},[159,77860,1578],{"class":1146},[159,77862,1486],{"class":165},[159,77864,1583],{"class":1146},[159,77866,1571],{"class":1142},[159,77868,1492],{"class":165},[159,77870,77871,77873,77875,77877,77879,77881],{"class":161,"line":1174},[159,77872,1497],{"class":1146},[159,77874,1486],{"class":165},[159,77876,1596],{"class":1146},[159,77878,1571],{"class":1142},[159,77880,1601],{"class":1146},[159,77882,1492],{"class":165},[159,77884,77885],{"class":161,"line":1180},[159,77886,1508],{"class":165},[159,77888,77889],{"class":161,"line":1194},[159,77890,590],{"emptyLinePlaceholder":589},[159,77892,77893,77895],{"class":161,"line":1200},[159,77894,1616],{"class":185},[159,77896,1478],{"class":165},[159,77898,77899,77901,77903,77905],{"class":161,"line":1221},[159,77900,1551],{"class":1146},[159,77902,1486],{"class":165},[159,77904,1627],{"class":1146},[159,77906,1492],{"class":165},[159,77908,77909,77911,77913,77915],{"class":161,"line":1230},[159,77910,1634],{"class":1146},[159,77912,1486],{"class":165},[159,77914,1489],{"class":1146},[159,77916,1492],{"class":165},[159,77918,77919,77921,77923,77925],{"class":161,"line":1247},[159,77920,1645],{"class":1146},[159,77922,1486],{"class":165},[159,77924,1489],{"class":1146},[159,77926,1492],{"class":165},[159,77928,77929,77931,77933,77935,77937],{"class":161,"line":1265},[159,77930,1563],{"class":1146},[159,77932,1486],{"class":165},[159,77934,1596],{"class":1146},[159,77936,1662],{"class":1142},[159,77938,1492],{"class":165},[159,77940,77941,77943,77945,77947,77949],{"class":161,"line":1277},[159,77942,1578],{"class":1146},[159,77944,1486],{"class":165},[159,77946,1673],{"class":1146},[159,77948,1662],{"class":1142},[159,77950,1492],{"class":165},[159,77952,77953,77955,77957,77959],{"class":161,"line":1283},[159,77954,1682],{"class":1146},[159,77956,1486],{"class":165},[159,77958,1687],{"class":1146},[159,77960,1492],{"class":165},[159,77962,77963],{"class":161,"line":1294},[159,77964,1508],{"class":165},[159,77966,77967],{"class":161,"line":1305},[159,77968,590],{"emptyLinePlaceholder":589},[159,77970,77971,77973,77975],{"class":161,"line":1311},[159,77972,1616],{"class":185},[159,77974,1704],{"class":169},[159,77976,1478],{"class":165},[159,77978,77979,77981,77983,77985],{"class":161,"line":1322},[159,77980,1551],{"class":1146},[159,77982,1486],{"class":165},[159,77984,1627],{"class":1146},[159,77986,1492],{"class":165},[159,77988,77989,77991,77993,77995,77997],{"class":161,"line":1327},[159,77990,1721],{"class":1146},[159,77992,1486],{"class":165},[159,77994,1726],{"class":1146},[159,77996,1571],{"class":1142},[159,77998,1492],{"class":165},[159,78000,78001,78003,78005,78007,78009],{"class":161,"line":1336},[159,78002,1634],{"class":1146},[159,78004,1486],{"class":165},[159,78006,1739],{"class":1146},[159,78008,1571],{"class":1142},[159,78010,1492],{"class":165},[159,78012,78013,78015,78017,78019,78021],{"class":161,"line":1345},[159,78014,1748],{"class":1146},[159,78016,1486],{"class":165},[159,78018,1753],{"class":1146},[159,78020,1571],{"class":1142},[159,78022,1492],{"class":165},[159,78024,78025],{"class":161,"line":1350},[159,78026,1508],{"class":165},[159,78028,78029],{"class":161,"line":1764},[159,78030,590],{"emptyLinePlaceholder":589},[159,78032,78033,78035],{"class":161,"line":1769},[159,78034,1772],{"class":169},[159,78036,1478],{"class":165},[159,78038,78039,78041,78043,78045],{"class":161,"line":1777},[159,78040,1551],{"class":1146},[159,78042,1486],{"class":165},[159,78044,1627],{"class":1146},[159,78046,1492],{"class":165},[159,78048,78049,78051,78053,78055,78057],{"class":161,"line":1788},[159,78050,1748],{"class":1146},[159,78052,1486],{"class":165},[159,78054,1795],{"class":1146},[159,78056,1571],{"class":1142},[159,78058,1492],{"class":165},[159,78060,78061,78063,78065,78067,78069],{"class":161,"line":1802},[159,78062,1634],{"class":1146},[159,78064,1486],{"class":165},[159,78066,1739],{"class":1146},[159,78068,1571],{"class":1142},[159,78070,1492],{"class":165},[159,78072,78073,78075,78077,78079],{"class":161,"line":1815},[159,78074,1818],{"class":1146},[159,78076,1486],{"class":165},[159,78078,1823],{"class":1146},[159,78080,1492],{"class":165},[159,78082,78083,78085,78087,78089],{"class":161,"line":1828},[159,78084,1831],{"class":1146},[159,78086,1486],{"class":165},[159,78088,1836],{"class":1146},[159,78090,1492],{"class":165},[159,78092,78093,78095,78097,78099],{"class":161,"line":1841},[159,78094,1551],{"class":1146},[159,78096,1486],{"class":165},[159,78098,1627],{"class":1146},[159,78100,1492],{"class":165},[159,78102,78103,78105,78107,78109,78111],{"class":161,"line":1852},[159,78104,1563],{"class":1146},[159,78106,1486],{"class":165},[159,78108,1859],{"class":1146},[159,78110,1571],{"class":1142},[159,78112,1492],{"class":165},[159,78114,78115,78117,78119,78121,78123],{"class":161,"line":1866},[159,78116,1578],{"class":1146},[159,78118,1486],{"class":165},[159,78120,1739],{"class":1146},[159,78122,1571],{"class":1142},[159,78124,1492],{"class":165},[159,78126,78127],{"class":161,"line":1879},[159,78128,1508],{"class":165},[159,78130,78131],{"class":161,"line":1884},[159,78132,590],{"emptyLinePlaceholder":589},[159,78134,78135,78137,78139],{"class":161,"line":1889},[159,78136,1772],{"class":169},[159,78138,1894],{"class":169},[159,78140,1478],{"class":165},[159,78142,78143,78145,78147,78149,78151],{"class":161,"line":1899},[159,78144,1563],{"class":1146},[159,78146,1486],{"class":165},[159,78148,1739],{"class":1146},[159,78150,1571],{"class":1142},[159,78152,1492],{"class":165},[159,78154,78155,78157,78159,78161,78163],{"class":161,"line":1912},[159,78156,1578],{"class":1146},[159,78158,1486],{"class":165},[159,78160,1739],{"class":1146},[159,78162,1571],{"class":1142},[159,78164,1492],{"class":165},[159,78166,78167,78169,78171,78173,78175,78177,78179,78181,78183,78185,78187,78189],{"class":161,"line":1925},[159,78168,1682],{"class":1146},[159,78170,1486],{"class":165},[159,78172,1932],{"class":1146},[159,78174,1159],{"class":165},[159,78176,1489],{"class":1146},[159,78178,1939],{"class":165},[159,78180,1489],{"class":1146},[159,78182,1939],{"class":165},[159,78184,1489],{"class":1146},[159,78186,1939],{"class":165},[159,78188,1950],{"class":1146},[159,78190,1953],{"class":165},[159,78192,78193,78195,78197,78199,78201],{"class":161,"line":1956},[159,78194,1959],{"class":1146},[159,78196,1486],{"class":165},[159,78198,1964],{"class":1146},[159,78200,1571],{"class":1142},[159,78202,1492],{"class":165},[159,78204,78205],{"class":161,"line":1971},[159,78206,1508],{"class":165},[159,78208,78209],{"class":161,"line":1976},[159,78210,590],{"emptyLinePlaceholder":589},[159,78212,78213,78215],{"class":161,"line":1981},[159,78214,1984],{"class":185},[159,78216,1478],{"class":165},[159,78218,78219,78221,78223,78225],{"class":161,"line":1989},[159,78220,1682],{"class":1146},[159,78222,1486],{"class":165},[159,78224,1996],{"class":1146},[159,78226,1492],{"class":165},[159,78228,78229],{"class":161,"line":2001},[159,78230,1508],{"class":165},[159,78232,78233,78235,78237],{"class":161,"line":2006},[159,78234,254],{"class":165},[159,78236,1468],{"class":169},[159,78238,173],{"class":165},[159,78240,78241,78243,78245],{"class":161,"line":2015},[159,78242,264],{"class":165},[159,78244,949],{"class":169},[159,78246,173],{"class":165},[159,78248,78249],{"class":161,"line":2024},[159,78250,590],{"emptyLinePlaceholder":589},[159,78252,78253,78255,78257],{"class":161,"line":2029},[159,78254,166],{"class":165},[159,78256,170],{"class":169},[159,78258,173],{"class":165},[159,78260,78261,78263,78265,78267,78269,78271],{"class":161,"line":2038},[159,78262,179],{"class":165},[159,78264,182],{"class":169},[159,78266,186],{"class":185},[159,78268,189],{"class":165},[159,78270,193],{"class":192},[159,78272,173],{"class":165},[159,78274,78275,78277,78279,78281,78283,78285],{"class":161,"line":2053},[159,78276,2056],{"class":165},[159,78278,182],{"class":169},[159,78280,186],{"class":185},[159,78282,189],{"class":165},[159,78284,2065],{"class":192},[159,78286,173],{"class":165},[159,78288,78289,78291,78293,78295,78297,78299,78301,78303,78305],{"class":161,"line":2070},[159,78290,2073],{"class":165},[159,78292,23],{"class":169},[159,78294,2078],{"class":185},[159,78296,189],{"class":165},[159,78298,2083],{"class":192},[159,78300,2086],{"class":185},[159,78302,189],{"class":165},[159,78304,552],{"class":192},[159,78306,173],{"class":165},[159,78308,78309,78311,78313],{"class":161,"line":2095},[159,78310,1084],{"class":165},[159,78312,182],{"class":169},[159,78314,173],{"class":165},[159,78316,78317,78319,78321,78323,78325,78327],{"class":161,"line":2104},[159,78318,2056],{"class":165},[159,78320,182],{"class":169},[159,78322,186],{"class":185},[159,78324,189],{"class":165},[159,78326,2115],{"class":192},[159,78328,173],{"class":165},[159,78330,78331,78333,78335,78337,78339],{"class":161,"line":2120},[159,78332,2073],{"class":165},[159,78334,14],{"class":169},[159,78336,2127],{"class":165},[159,78338,14],{"class":169},[159,78340,173],{"class":165},[159,78342,78343,78345,78347],{"class":161,"line":2134},[159,78344,2073],{"class":165},[159,78346,103],{"class":169},[159,78348,173],{"class":165},[159,78350,78351,78353,78355,78357,78359,78361,78363,78365],{"class":161,"line":2143},[159,78352,2146],{"class":165},[159,78354,106],{"class":169},[159,78356,186],{"class":185},[159,78358,189],{"class":165},[159,78360,2155],{"class":192},[159,78362,2158],{"class":165},[159,78364,106],{"class":169},[159,78366,173],{"class":165},[159,78368,78369,78371,78373,78375,78377],{"class":161,"line":2165},[159,78370,2146],{"class":165},[159,78372,106],{"class":169},[159,78374,2158],{"class":165},[159,78376,106],{"class":169},[159,78378,173],{"class":165},[159,78380,78381,78383,78385,78387,78389],{"class":161,"line":2178},[159,78382,2146],{"class":165},[159,78384,106],{"class":169},[159,78386,2158],{"class":165},[159,78388,106],{"class":169},[159,78390,173],{"class":165},[159,78392,78393,78395,78397,78399,78401],{"class":161,"line":2191},[159,78394,2146],{"class":165},[159,78396,106],{"class":169},[159,78398,2158],{"class":165},[159,78400,106],{"class":169},[159,78402,173],{"class":165},[159,78404,78405,78407,78409,78411,78413],{"class":161,"line":2204},[159,78406,2146],{"class":165},[159,78408,106],{"class":169},[159,78410,2158],{"class":165},[159,78412,106],{"class":169},[159,78414,173],{"class":165},[159,78416,78417,78419,78421,78423,78425],{"class":161,"line":2217},[159,78418,2146],{"class":165},[159,78420,106],{"class":169},[159,78422,2158],{"class":165},[159,78424,106],{"class":169},[159,78426,173],{"class":165},[159,78428,78429,78431,78433,78435,78437],{"class":161,"line":2230},[159,78430,2146],{"class":165},[159,78432,106],{"class":169},[159,78434,2158],{"class":165},[159,78436,106],{"class":169},[159,78438,173],{"class":165},[159,78440,78441,78443,78445,78447,78449],{"class":161,"line":2243},[159,78442,2146],{"class":165},[159,78444,106],{"class":169},[159,78446,2158],{"class":165},[159,78448,106],{"class":169},[159,78450,173],{"class":165},[159,78452,78453,78455,78457],{"class":161,"line":2256},[159,78454,2259],{"class":165},[159,78456,103],{"class":169},[159,78458,173],{"class":165},[159,78460,78461,78463,78465],{"class":161,"line":2266},[159,78462,1084],{"class":165},[159,78464,182],{"class":169},[159,78466,173],{"class":165},[159,78468,78469,78471,78473],{"class":161,"line":2275},[159,78470,254],{"class":165},[159,78472,182],{"class":169},[159,78474,173],{"class":165},[159,78476,78477,78479,78481],{"class":161,"line":2284},[159,78478,179],{"class":165},[159,78480,228],{"class":169},[159,78482,173],{"class":165},[159,78484,78485,78487,78489,78491],{"class":161,"line":2293},[159,78486,1143],{"class":1142},[159,78488,2298],{"class":1146},[159,78490,1150],{"class":1142},[159,78492,2303],{"class":165},[159,78494,78495,78497,78499,78501,78503,78505,78507],{"class":161,"line":2306},[159,78496,2309],{"class":165},[159,78498,2312],{"class":192},[159,78500,2315],{"class":165},[159,78502,2318],{"class":192},[159,78504,2321],{"class":165},[159,78506,2324],{"class":192},[159,78508,2327],{"class":165},[159,78510,78511,78513,78515,78517,78519,78521,78523],{"class":161,"line":2330},[159,78512,2309],{"class":165},[159,78514,2335],{"class":192},[159,78516,2315],{"class":165},[159,78518,2340],{"class":192},[159,78520,2321],{"class":165},[159,78522,2345],{"class":192},[159,78524,2327],{"class":165},[159,78526,78527,78529,78531,78533,78535,78537,78539],{"class":161,"line":2350},[159,78528,2309],{"class":165},[159,78530,2355],{"class":192},[159,78532,2315],{"class":165},[159,78534,2360],{"class":192},[159,78536,2321],{"class":165},[159,78538,2365],{"class":192},[159,78540,2327],{"class":165},[159,78542,78543,78545,78547,78549,78551,78553,78555],{"class":161,"line":2370},[159,78544,2309],{"class":165},[159,78546,2375],{"class":192},[159,78548,2315],{"class":165},[159,78550,2380],{"class":192},[159,78552,2321],{"class":165},[159,78554,2385],{"class":192},[159,78556,2327],{"class":165},[159,78558,78559,78561,78563,78565,78567,78569,78571],{"class":161,"line":2390},[159,78560,2309],{"class":165},[159,78562,2395],{"class":192},[159,78564,2315],{"class":165},[159,78566,2400],{"class":192},[159,78568,2321],{"class":165},[159,78570,2405],{"class":192},[159,78572,2327],{"class":165},[159,78574,78575,78577,78579,78581,78583,78585,78587],{"class":161,"line":2410},[159,78576,2309],{"class":165},[159,78578,2415],{"class":192},[159,78580,2315],{"class":165},[159,78582,2420],{"class":192},[159,78584,2321],{"class":165},[159,78586,2425],{"class":192},[159,78588,2327],{"class":165},[159,78590,78591,78593,78595,78597,78599,78601,78603],{"class":161,"line":2430},[159,78592,2309],{"class":165},[159,78594,2435],{"class":192},[159,78596,2315],{"class":165},[159,78598,2440],{"class":192},[159,78600,2321],{"class":165},[159,78602,2445],{"class":192},[159,78604,2327],{"class":165},[159,78606,78607,78609,78611,78613,78615,78617,78619],{"class":161,"line":2450},[159,78608,2309],{"class":165},[159,78610,2455],{"class":192},[159,78612,2315],{"class":165},[159,78614,2460],{"class":192},[159,78616,2321],{"class":165},[159,78618,2465],{"class":192},[159,78620,2468],{"class":165},[159,78622,78623],{"class":161,"line":2471},[159,78624,2474],{"class":165},[159,78626,78627,78629,78631,78633,78635,78637,78639,78641],{"class":161,"line":2477},[159,78628,1143],{"class":1142},[159,78630,2482],{"class":1146},[159,78632,1150],{"class":1142},[159,78634,1153],{"class":165},[159,78636,1156],{"class":185},[159,78638,1159],{"class":165},[159,78640,2493],{"class":192},[159,78642,1165],{"class":165},[159,78644,78645,78647,78649,78651,78653,78655,78657,78659],{"class":161,"line":2498},[159,78646,1143],{"class":1142},[159,78648,1704],{"class":1146},[159,78650,1150],{"class":1142},[159,78652,1153],{"class":165},[159,78654,1156],{"class":185},[159,78656,1159],{"class":165},[159,78658,2513],{"class":192},[159,78660,1165],{"class":165},[159,78662,78663,78665,78667,78669,78671,78673,78675,78677],{"class":161,"line":2518},[159,78664,1143],{"class":1142},[159,78666,2523],{"class":1146},[159,78668,1150],{"class":1142},[159,78670,1153],{"class":165},[159,78672,1156],{"class":185},[159,78674,1159],{"class":165},[159,78676,2534],{"class":192},[159,78678,1165],{"class":165},[159,78680,78681,78683,78685,78687,78689,78691,78693,78695],{"class":161,"line":2539},[159,78682,1143],{"class":1142},[159,78684,2544],{"class":1146},[159,78686,1150],{"class":1142},[159,78688,1153],{"class":165},[159,78690,2551],{"class":185},[159,78692,1159],{"class":165},[159,78694,2556],{"class":192},[159,78696,1165],{"class":165},[159,78698,78699,78701,78703,78705],{"class":161,"line":2561},[159,78700,1183],{"class":1142},[159,78702,1186],{"class":165},[159,78704,189],{"class":1142},[159,78706,2570],{"class":1146},[159,78708,78709,78711,78713,78715,78717,78719,78721],{"class":161,"line":2573},[159,78710,1183],{"class":1142},[159,78712,2578],{"class":165},[159,78714,189],{"class":1142},[159,78716,1210],{"class":185},[159,78718,1159],{"class":165},[159,78720,1215],{"class":1142},[159,78722,1218],{"class":165},[159,78724,78725,78727,78729],{"class":161,"line":2591},[159,78726,2594],{"class":165},[159,78728,189],{"class":1142},[159,78730,2599],{"class":165},[159,78732,78733,78735,78737],{"class":161,"line":2602},[159,78734,2605],{"class":165},[159,78736,189],{"class":1142},[159,78738,2610],{"class":165},[159,78740,78741,78743,78745],{"class":161,"line":2613},[159,78742,2616],{"class":165},[159,78744,189],{"class":1142},[159,78746,2621],{"class":165},[159,78748,78749],{"class":161,"line":2624},[159,78750,2627],{"class":1135},[159,78752,78753],{"class":161,"line":2630},[159,78754,2633],{"class":1135},[159,78756,78757],{"class":161,"line":2636},[159,78758,2639],{"class":1135},[159,78760,78761],{"class":161,"line":2642},[159,78762,2645],{"class":1135},[159,78764,78765,78767,78769,78771,78773,78775,78777,78779,78781],{"class":161,"line":2648},[159,78766,2651],{"class":165},[159,78768,1156],{"class":185},[159,78770,1159],{"class":165},[159,78772,2658],{"class":192},[159,78774,2661],{"class":165},[159,78776,2664],{"class":185},[159,78778,1159],{"class":165},[159,78780,2669],{"class":192},[159,78782,1165],{"class":165},[159,78784,78785,78787,78789,78791,78793],{"class":161,"line":2674},[159,78786,2677],{"class":165},[159,78788,2680],{"class":185},[159,78790,1159],{"class":165},[159,78792,2669],{"class":192},[159,78794,1165],{"class":165},[159,78796,78797],{"class":161,"line":2689},[159,78798,590],{"emptyLinePlaceholder":589},[159,78800,78801,78803,78805,78807,78809,78811,78813,78815,78817],{"class":161,"line":2694},[159,78802,2697],{"class":165},[159,78804,189],{"class":1142},[159,78806,1253],{"class":165},[159,78808,2704],{"class":1142},[159,78810,2707],{"class":1146},[159,78812,2710],{"class":165},[159,78814,1662],{"class":1142},[159,78816,2715],{"class":165},[159,78818,2718],{"class":1146},[159,78820,78821],{"class":161,"line":2721},[159,78822,590],{"emptyLinePlaceholder":589},[159,78824,78825,78827,78829],{"class":161,"line":2726},[159,78826,1314],{"class":165},[159,78828,1317],{"class":1146},[159,78830,1165],{"class":165},[159,78832,78833,78835,78837],{"class":161,"line":2735},[159,78834,254],{"class":165},[159,78836,228],{"class":169},[159,78838,173],{"class":165},[159,78840,78841,78843,78845],{"class":161,"line":2744},[159,78842,264],{"class":165},[159,78844,170],{"class":169},[159,78846,173],{"class":165},[159,78848,78849],{"class":161,"line":2753},[159,78850,590],{"emptyLinePlaceholder":589},[159,78852,78853,78855,78857],{"class":161,"line":2758},[159,78854,264],{"class":165},[159,78856,522],{"class":169},[159,78858,173],{"class":165},[14,78860,78861],{},[23,78862],{"alt":25,"src":2769},[14,78864,2772],{},[14,78866,2775],{},[14,78868,2778],{},[134,78870,78871],{"start":176},[106,78872,2783],{},[151,78874,78875],{"className":520,"code":2786,"language":522,"meta":25,"style":25},[49,78876,78877,78887,78901,78905,78913,78927,78947,78959,78967,78973,78983,78993,78997,79001,79007,79017,79021,79025,79031,79041,79053,79065,79079,79083,79087,79093,79103,79113,79123,79135,79147,79157,79161,79165,79173,79183,79195,79207,79219,79223,79227,79233,79243,79255,79267,79277,79287,79297,79309,79321,79325,79329,79337,79349,79361,79387,79399,79403,79407,79413,79423,79427,79435,79443,79447,79455,79469,79483,79503,79511,79525,79537,79545,79563,79575,79587,79599,79611,79623,79635,79647,79655,79663,79671,79679,79689,79705,79721,79737,79753,79769,79785,79801,79817,79821,79825,79843,79861,79871,79875,79879,79889,79895,79909,79917,79921,79925,79933,79937,79945,79949,79953,79957,79977,80005,80009,80017,80021,80029,80037,80041],{"__ignoreMap":25},[159,78878,78879,78881,78883,78885],{"class":161,"line":162},[159,78880,914],{"class":165},[159,78882,917],{"class":169},[159,78884,920],{"class":185},[159,78886,173],{"class":165},[159,78888,78889,78891,78893,78895,78897,78899],{"class":161,"line":176},[159,78890,166],{"class":165},[159,78892,522],{"class":169},[159,78894,931],{"class":185},[159,78896,189],{"class":165},[159,78898,936],{"class":192},[159,78900,173],{"class":165},[159,78902,78903],{"class":161,"line":203},[159,78904,590],{"emptyLinePlaceholder":589},[159,78906,78907,78909,78911],{"class":161,"line":223},[159,78908,166],{"class":165},[159,78910,949],{"class":169},[159,78912,173],{"class":165},[159,78914,78915,78917,78919,78921,78923,78925],{"class":161,"line":233},[159,78916,179],{"class":165},[159,78918,958],{"class":169},[159,78920,961],{"class":185},[159,78922,189],{"class":165},[159,78924,966],{"class":192},[159,78926,173],{"class":165},[159,78928,78929,78931,78933,78935,78937,78939,78941,78943,78945],{"class":161,"line":239},[159,78930,179],{"class":165},[159,78932,958],{"class":169},[159,78934,547],{"class":185},[159,78936,189],{"class":165},[159,78938,981],{"class":192},[159,78940,984],{"class":185},[159,78942,189],{"class":165},[159,78944,989],{"class":192},[159,78946,173],{"class":165},[159,78948,78949,78951,78953,78955,78957],{"class":161,"line":245},[159,78950,179],{"class":165},[159,78952,998],{"class":169},[159,78954,1001],{"class":165},[159,78956,998],{"class":169},[159,78958,173],{"class":165},[159,78960,78961,78963,78965],{"class":161,"line":251},[159,78962,179],{"class":165},[159,78964,1468],{"class":169},[159,78966,173],{"class":165},[159,78968,78969,78971],{"class":161,"line":261},[159,78970,1475],{"class":169},[159,78972,1478],{"class":165},[159,78974,78975,78977,78979,78981],{"class":161,"line":603},[159,78976,1483],{"class":1146},[159,78978,1486],{"class":165},[159,78980,1489],{"class":1146},[159,78982,1492],{"class":165},[159,78984,78985,78987,78989,78991],{"class":161,"line":621},[159,78986,1497],{"class":1146},[159,78988,1486],{"class":165},[159,78990,1489],{"class":1146},[159,78992,1492],{"class":165},[159,78994,78995],{"class":161,"line":634},[159,78996,1508],{"class":165},[159,78998,78999],{"class":161,"line":640},[159,79000,590],{"emptyLinePlaceholder":589},[159,79002,79003,79005],{"class":161,"line":1075},[159,79004,1517],{"class":169},[159,79006,1478],{"class":165},[159,79008,79009,79011,79013,79015],{"class":161,"line":1081},[159,79010,1524],{"class":1146},[159,79012,1486],{"class":165},[159,79014,1529],{"class":1146},[159,79016,1492],{"class":165},[159,79018,79019],{"class":161,"line":1091},[159,79020,1508],{"class":165},[159,79022,79023],{"class":161,"line":1100},[159,79024,590],{"emptyLinePlaceholder":589},[159,79026,79027,79029],{"class":161,"line":1123},[159,79028,1544],{"class":185},[159,79030,1478],{"class":165},[159,79032,79033,79035,79037,79039],{"class":161,"line":1132},[159,79034,1551],{"class":1146},[159,79036,1486],{"class":165},[159,79038,1556],{"class":1146},[159,79040,1492],{"class":165},[159,79042,79043,79045,79047,79049,79051],{"class":161,"line":1139},[159,79044,1563],{"class":1146},[159,79046,1486],{"class":165},[159,79048,1568],{"class":1146},[159,79050,1571],{"class":1142},[159,79052,1492],{"class":165},[159,79054,79055,79057,79059,79061,79063],{"class":161,"line":1168},[159,79056,1578],{"class":1146},[159,79058,1486],{"class":165},[159,79060,1583],{"class":1146},[159,79062,1571],{"class":1142},[159,79064,1492],{"class":165},[159,79066,79067,79069,79071,79073,79075,79077],{"class":161,"line":1174},[159,79068,1497],{"class":1146},[159,79070,1486],{"class":165},[159,79072,1596],{"class":1146},[159,79074,1571],{"class":1142},[159,79076,1601],{"class":1146},[159,79078,1492],{"class":165},[159,79080,79081],{"class":161,"line":1180},[159,79082,1508],{"class":165},[159,79084,79085],{"class":161,"line":1194},[159,79086,590],{"emptyLinePlaceholder":589},[159,79088,79089,79091],{"class":161,"line":1200},[159,79090,1616],{"class":185},[159,79092,1478],{"class":165},[159,79094,79095,79097,79099,79101],{"class":161,"line":1221},[159,79096,1551],{"class":1146},[159,79098,1486],{"class":165},[159,79100,1627],{"class":1146},[159,79102,1492],{"class":165},[159,79104,79105,79107,79109,79111],{"class":161,"line":1230},[159,79106,1634],{"class":1146},[159,79108,1486],{"class":165},[159,79110,1489],{"class":1146},[159,79112,1492],{"class":165},[159,79114,79115,79117,79119,79121],{"class":161,"line":1247},[159,79116,1645],{"class":1146},[159,79118,1486],{"class":165},[159,79120,1489],{"class":1146},[159,79122,1492],{"class":165},[159,79124,79125,79127,79129,79131,79133],{"class":161,"line":1265},[159,79126,1563],{"class":1146},[159,79128,1486],{"class":165},[159,79130,1596],{"class":1146},[159,79132,1662],{"class":1142},[159,79134,1492],{"class":165},[159,79136,79137,79139,79141,79143,79145],{"class":161,"line":1277},[159,79138,1578],{"class":1146},[159,79140,1486],{"class":165},[159,79142,1673],{"class":1146},[159,79144,1662],{"class":1142},[159,79146,1492],{"class":165},[159,79148,79149,79151,79153,79155],{"class":161,"line":1283},[159,79150,1682],{"class":1146},[159,79152,1486],{"class":165},[159,79154,1687],{"class":1146},[159,79156,1492],{"class":165},[159,79158,79159],{"class":161,"line":1294},[159,79160,1508],{"class":165},[159,79162,79163],{"class":161,"line":1305},[159,79164,590],{"emptyLinePlaceholder":589},[159,79166,79167,79169,79171],{"class":161,"line":1311},[159,79168,1616],{"class":185},[159,79170,1704],{"class":169},[159,79172,1478],{"class":165},[159,79174,79175,79177,79179,79181],{"class":161,"line":1322},[159,79176,1551],{"class":1146},[159,79178,1486],{"class":165},[159,79180,1627],{"class":1146},[159,79182,1492],{"class":165},[159,79184,79185,79187,79189,79191,79193],{"class":161,"line":1327},[159,79186,1721],{"class":1146},[159,79188,1486],{"class":165},[159,79190,1726],{"class":1146},[159,79192,1571],{"class":1142},[159,79194,1492],{"class":165},[159,79196,79197,79199,79201,79203,79205],{"class":161,"line":1336},[159,79198,1634],{"class":1146},[159,79200,1486],{"class":165},[159,79202,1739],{"class":1146},[159,79204,1571],{"class":1142},[159,79206,1492],{"class":165},[159,79208,79209,79211,79213,79215,79217],{"class":161,"line":1345},[159,79210,1748],{"class":1146},[159,79212,1486],{"class":165},[159,79214,1753],{"class":1146},[159,79216,1571],{"class":1142},[159,79218,1492],{"class":165},[159,79220,79221],{"class":161,"line":1350},[159,79222,1508],{"class":165},[159,79224,79225],{"class":161,"line":1764},[159,79226,590],{"emptyLinePlaceholder":589},[159,79228,79229,79231],{"class":161,"line":1769},[159,79230,1772],{"class":169},[159,79232,1478],{"class":165},[159,79234,79235,79237,79239,79241],{"class":161,"line":1777},[159,79236,1551],{"class":1146},[159,79238,1486],{"class":165},[159,79240,1627],{"class":1146},[159,79242,1492],{"class":165},[159,79244,79245,79247,79249,79251,79253],{"class":161,"line":1788},[159,79246,1748],{"class":1146},[159,79248,1486],{"class":165},[159,79250,1795],{"class":1146},[159,79252,1571],{"class":1142},[159,79254,1492],{"class":165},[159,79256,79257,79259,79261,79263,79265],{"class":161,"line":1802},[159,79258,1634],{"class":1146},[159,79260,1486],{"class":165},[159,79262,1739],{"class":1146},[159,79264,1571],{"class":1142},[159,79266,1492],{"class":165},[159,79268,79269,79271,79273,79275],{"class":161,"line":1815},[159,79270,1818],{"class":1146},[159,79272,1486],{"class":165},[159,79274,1823],{"class":1146},[159,79276,1492],{"class":165},[159,79278,79279,79281,79283,79285],{"class":161,"line":1828},[159,79280,1831],{"class":1146},[159,79282,1486],{"class":165},[159,79284,1836],{"class":1146},[159,79286,1492],{"class":165},[159,79288,79289,79291,79293,79295],{"class":161,"line":1841},[159,79290,1551],{"class":1146},[159,79292,1486],{"class":165},[159,79294,1627],{"class":1146},[159,79296,1492],{"class":165},[159,79298,79299,79301,79303,79305,79307],{"class":161,"line":1852},[159,79300,1563],{"class":1146},[159,79302,1486],{"class":165},[159,79304,1859],{"class":1146},[159,79306,1571],{"class":1142},[159,79308,1492],{"class":165},[159,79310,79311,79313,79315,79317,79319],{"class":161,"line":1866},[159,79312,1578],{"class":1146},[159,79314,1486],{"class":165},[159,79316,1739],{"class":1146},[159,79318,1571],{"class":1142},[159,79320,1492],{"class":165},[159,79322,79323],{"class":161,"line":1879},[159,79324,1508],{"class":165},[159,79326,79327],{"class":161,"line":1884},[159,79328,590],{"emptyLinePlaceholder":589},[159,79330,79331,79333,79335],{"class":161,"line":1889},[159,79332,1772],{"class":169},[159,79334,1894],{"class":169},[159,79336,1478],{"class":165},[159,79338,79339,79341,79343,79345,79347],{"class":161,"line":1899},[159,79340,1563],{"class":1146},[159,79342,1486],{"class":165},[159,79344,1739],{"class":1146},[159,79346,1571],{"class":1142},[159,79348,1492],{"class":165},[159,79350,79351,79353,79355,79357,79359],{"class":161,"line":1912},[159,79352,1578],{"class":1146},[159,79354,1486],{"class":165},[159,79356,1739],{"class":1146},[159,79358,1571],{"class":1142},[159,79360,1492],{"class":165},[159,79362,79363,79365,79367,79369,79371,79373,79375,79377,79379,79381,79383,79385],{"class":161,"line":1925},[159,79364,1682],{"class":1146},[159,79366,1486],{"class":165},[159,79368,1932],{"class":1146},[159,79370,1159],{"class":165},[159,79372,1489],{"class":1146},[159,79374,1939],{"class":165},[159,79376,1489],{"class":1146},[159,79378,1939],{"class":165},[159,79380,1489],{"class":1146},[159,79382,1939],{"class":165},[159,79384,1950],{"class":1146},[159,79386,1953],{"class":165},[159,79388,79389,79391,79393,79395,79397],{"class":161,"line":1956},[159,79390,1959],{"class":1146},[159,79392,1486],{"class":165},[159,79394,1964],{"class":1146},[159,79396,1571],{"class":1142},[159,79398,1492],{"class":165},[159,79400,79401],{"class":161,"line":1971},[159,79402,1508],{"class":165},[159,79404,79405],{"class":161,"line":1976},[159,79406,590],{"emptyLinePlaceholder":589},[159,79408,79409,79411],{"class":161,"line":1981},[159,79410,1984],{"class":185},[159,79412,1478],{"class":165},[159,79414,79415,79417,79419,79421],{"class":161,"line":1989},[159,79416,1682],{"class":1146},[159,79418,1486],{"class":165},[159,79420,1996],{"class":1146},[159,79422,1492],{"class":165},[159,79424,79425],{"class":161,"line":2001},[159,79426,1508],{"class":165},[159,79428,79429,79431,79433],{"class":161,"line":2006},[159,79430,254],{"class":165},[159,79432,1468],{"class":169},[159,79434,173],{"class":165},[159,79436,79437,79439,79441],{"class":161,"line":2015},[159,79438,264],{"class":165},[159,79440,949],{"class":169},[159,79442,173],{"class":165},[159,79444,79445],{"class":161,"line":2024},[159,79446,590],{"emptyLinePlaceholder":589},[159,79448,79449,79451,79453],{"class":161,"line":2029},[159,79450,166],{"class":165},[159,79452,170],{"class":169},[159,79454,173],{"class":165},[159,79456,79457,79459,79461,79463,79465,79467],{"class":161,"line":2038},[159,79458,179],{"class":165},[159,79460,182],{"class":169},[159,79462,186],{"class":185},[159,79464,189],{"class":165},[159,79466,193],{"class":192},[159,79468,173],{"class":165},[159,79470,79471,79473,79475,79477,79479,79481],{"class":161,"line":2053},[159,79472,2056],{"class":165},[159,79474,182],{"class":169},[159,79476,186],{"class":185},[159,79478,189],{"class":165},[159,79480,2065],{"class":192},[159,79482,173],{"class":165},[159,79484,79485,79487,79489,79491,79493,79495,79497,79499,79501],{"class":161,"line":2070},[159,79486,2073],{"class":165},[159,79488,23],{"class":169},[159,79490,2078],{"class":185},[159,79492,189],{"class":165},[159,79494,2083],{"class":192},[159,79496,2086],{"class":185},[159,79498,189],{"class":165},[159,79500,552],{"class":192},[159,79502,173],{"class":165},[159,79504,79505,79507,79509],{"class":161,"line":2095},[159,79506,1084],{"class":165},[159,79508,182],{"class":169},[159,79510,173],{"class":165},[159,79512,79513,79515,79517,79519,79521,79523],{"class":161,"line":2104},[159,79514,2056],{"class":165},[159,79516,182],{"class":169},[159,79518,186],{"class":185},[159,79520,189],{"class":165},[159,79522,2115],{"class":192},[159,79524,173],{"class":165},[159,79526,79527,79529,79531,79533,79535],{"class":161,"line":2120},[159,79528,2073],{"class":165},[159,79530,14],{"class":169},[159,79532,2127],{"class":165},[159,79534,14],{"class":169},[159,79536,173],{"class":165},[159,79538,79539,79541,79543],{"class":161,"line":2134},[159,79540,2073],{"class":165},[159,79542,103],{"class":169},[159,79544,173],{"class":165},[159,79546,79547,79549,79551,79553,79555,79557,79559,79561],{"class":161,"line":2143},[159,79548,2146],{"class":165},[159,79550,106],{"class":169},[159,79552,186],{"class":185},[159,79554,189],{"class":165},[159,79556,2155],{"class":192},[159,79558,2158],{"class":165},[159,79560,106],{"class":169},[159,79562,173],{"class":165},[159,79564,79565,79567,79569,79571,79573],{"class":161,"line":2165},[159,79566,2146],{"class":165},[159,79568,106],{"class":169},[159,79570,2158],{"class":165},[159,79572,106],{"class":169},[159,79574,173],{"class":165},[159,79576,79577,79579,79581,79583,79585],{"class":161,"line":2178},[159,79578,2146],{"class":165},[159,79580,106],{"class":169},[159,79582,2158],{"class":165},[159,79584,106],{"class":169},[159,79586,173],{"class":165},[159,79588,79589,79591,79593,79595,79597],{"class":161,"line":2191},[159,79590,2146],{"class":165},[159,79592,106],{"class":169},[159,79594,2158],{"class":165},[159,79596,106],{"class":169},[159,79598,173],{"class":165},[159,79600,79601,79603,79605,79607,79609],{"class":161,"line":2204},[159,79602,2146],{"class":165},[159,79604,106],{"class":169},[159,79606,2158],{"class":165},[159,79608,106],{"class":169},[159,79610,173],{"class":165},[159,79612,79613,79615,79617,79619,79621],{"class":161,"line":2217},[159,79614,2146],{"class":165},[159,79616,106],{"class":169},[159,79618,2158],{"class":165},[159,79620,106],{"class":169},[159,79622,173],{"class":165},[159,79624,79625,79627,79629,79631,79633],{"class":161,"line":2230},[159,79626,2146],{"class":165},[159,79628,106],{"class":169},[159,79630,2158],{"class":165},[159,79632,106],{"class":169},[159,79634,173],{"class":165},[159,79636,79637,79639,79641,79643,79645],{"class":161,"line":2243},[159,79638,2146],{"class":165},[159,79640,106],{"class":169},[159,79642,2158],{"class":165},[159,79644,106],{"class":169},[159,79646,173],{"class":165},[159,79648,79649,79651,79653],{"class":161,"line":2256},[159,79650,2259],{"class":165},[159,79652,103],{"class":169},[159,79654,173],{"class":165},[159,79656,79657,79659,79661],{"class":161,"line":2266},[159,79658,1084],{"class":165},[159,79660,182],{"class":169},[159,79662,173],{"class":165},[159,79664,79665,79667,79669],{"class":161,"line":2275},[159,79666,254],{"class":165},[159,79668,182],{"class":169},[159,79670,173],{"class":165},[159,79672,79673,79675,79677],{"class":161,"line":2284},[159,79674,179],{"class":165},[159,79676,228],{"class":169},[159,79678,173],{"class":165},[159,79680,79681,79683,79685,79687],{"class":161,"line":2293},[159,79682,1143],{"class":1142},[159,79684,3597],{"class":1146},[159,79686,1150],{"class":1142},[159,79688,2303],{"class":165},[159,79690,79691,79693,79695,79697,79699,79701,79703],{"class":161,"line":2306},[159,79692,2309],{"class":165},[159,79694,2312],{"class":192},[159,79696,2315],{"class":165},[159,79698,2318],{"class":192},[159,79700,2321],{"class":165},[159,79702,2324],{"class":192},[159,79704,2327],{"class":165},[159,79706,79707,79709,79711,79713,79715,79717,79719],{"class":161,"line":2330},[159,79708,2309],{"class":165},[159,79710,2335],{"class":192},[159,79712,2315],{"class":165},[159,79714,2340],{"class":192},[159,79716,2321],{"class":165},[159,79718,2345],{"class":192},[159,79720,2327],{"class":165},[159,79722,79723,79725,79727,79729,79731,79733,79735],{"class":161,"line":2350},[159,79724,2309],{"class":165},[159,79726,2355],{"class":192},[159,79728,2315],{"class":165},[159,79730,2360],{"class":192},[159,79732,2321],{"class":165},[159,79734,2365],{"class":192},[159,79736,2327],{"class":165},[159,79738,79739,79741,79743,79745,79747,79749,79751],{"class":161,"line":2370},[159,79740,2309],{"class":165},[159,79742,2375],{"class":192},[159,79744,2315],{"class":165},[159,79746,2380],{"class":192},[159,79748,2321],{"class":165},[159,79750,2385],{"class":192},[159,79752,2327],{"class":165},[159,79754,79755,79757,79759,79761,79763,79765,79767],{"class":161,"line":2390},[159,79756,2309],{"class":165},[159,79758,2395],{"class":192},[159,79760,2315],{"class":165},[159,79762,2400],{"class":192},[159,79764,2321],{"class":165},[159,79766,2405],{"class":192},[159,79768,2327],{"class":165},[159,79770,79771,79773,79775,79777,79779,79781,79783],{"class":161,"line":2410},[159,79772,2309],{"class":165},[159,79774,2415],{"class":192},[159,79776,2315],{"class":165},[159,79778,2420],{"class":192},[159,79780,2321],{"class":165},[159,79782,2425],{"class":192},[159,79784,2327],{"class":165},[159,79786,79787,79789,79791,79793,79795,79797,79799],{"class":161,"line":2430},[159,79788,2309],{"class":165},[159,79790,2435],{"class":192},[159,79792,2315],{"class":165},[159,79794,2440],{"class":192},[159,79796,2321],{"class":165},[159,79798,2445],{"class":192},[159,79800,2327],{"class":165},[159,79802,79803,79805,79807,79809,79811,79813,79815],{"class":161,"line":2450},[159,79804,2309],{"class":165},[159,79806,2455],{"class":192},[159,79808,2315],{"class":165},[159,79810,2460],{"class":192},[159,79812,2321],{"class":165},[159,79814,2465],{"class":192},[159,79816,2468],{"class":165},[159,79818,79819],{"class":161,"line":2471},[159,79820,2474],{"class":165},[159,79822,79823],{"class":161,"line":2477},[159,79824,3738],{"class":1135},[159,79826,79827,79829,79831,79833,79835,79837,79839,79841],{"class":161,"line":2498},[159,79828,1143],{"class":1142},[159,79830,2482],{"class":1146},[159,79832,1150],{"class":1142},[159,79834,1153],{"class":165},[159,79836,1156],{"class":185},[159,79838,1159],{"class":165},[159,79840,2493],{"class":192},[159,79842,1165],{"class":165},[159,79844,79845,79847,79849,79851,79853,79855,79857,79859],{"class":161,"line":2518},[159,79846,1143],{"class":1142},[159,79848,1704],{"class":1146},[159,79850,1150],{"class":1142},[159,79852,1153],{"class":165},[159,79854,1156],{"class":185},[159,79856,1159],{"class":165},[159,79858,2513],{"class":192},[159,79860,1165],{"class":165},[159,79862,79863,79865,79867,79869],{"class":161,"line":2539},[159,79864,1183],{"class":1142},[159,79866,1186],{"class":165},[159,79868,189],{"class":1142},[159,79870,3785],{"class":1146},[159,79872,79873],{"class":161,"line":2561},[159,79874,3790],{"class":1135},[159,79876,79877],{"class":161,"line":2573},[159,79878,3795],{"class":1135},[159,79880,79881,79883,79885,79887],{"class":161,"line":2591},[159,79882,3800],{"class":185},[159,79884,1159],{"class":165},[159,79886,1215],{"class":1142},[159,79888,1218],{"class":165},[159,79890,79891,79893],{"class":161,"line":2602},[159,79892,1224],{"class":165},[159,79894,3813],{"class":1142},[159,79896,79897,79899,79901,79903,79905,79907],{"class":161,"line":2613},[159,79898,1250],{"class":1142},[159,79900,1253],{"class":165},[159,79902,3822],{"class":1142},[159,79904,3825],{"class":165},[159,79906,3828],{"class":1146},[159,79908,1262],{"class":165},[159,79910,79911,79913,79915],{"class":161,"line":2624},[159,79912,3835],{"class":165},[159,79914,189],{"class":1142},[159,79916,3785],{"class":1146},[159,79918,79919],{"class":161,"line":2630},[159,79920,1308],{"class":165},[159,79922,79923],{"class":161,"line":2636},[159,79924,3848],{"class":1135},[159,79926,79927,79929,79931],{"class":161,"line":2642},[159,79928,2594],{"class":165},[159,79930,189],{"class":1142},[159,79932,3857],{"class":165},[159,79934,79935],{"class":161,"line":2648},[159,79936,3862],{"class":1135},[159,79938,79939,79941,79943],{"class":161,"line":2674},[159,79940,2605],{"class":165},[159,79942,189],{"class":1142},[159,79944,3871],{"class":165},[159,79946,79947],{"class":161,"line":2689},[159,79948,3876],{"class":1135},[159,79950,79951],{"class":161,"line":2694},[159,79952,3881],{"class":1135},[159,79954,79955],{"class":161,"line":2721},[159,79956,3886],{"class":1135},[159,79958,79959,79961,79963,79965,79967,79969,79971,79973,79975],{"class":161,"line":2726},[159,79960,2651],{"class":165},[159,79962,1156],{"class":185},[159,79964,1159],{"class":165},[159,79966,3897],{"class":192},[159,79968,3900],{"class":165},[159,79970,3903],{"class":185},[159,79972,1159],{"class":165},[159,79974,2669],{"class":192},[159,79976,1165],{"class":165},[159,79978,79979,79981,79983,79985,79987,79989,79991,79993,79995,79997,79999,80001,80003],{"class":161,"line":2735},[159,79980,2651],{"class":165},[159,79982,1156],{"class":185},[159,79984,1159],{"class":165},[159,79986,3920],{"class":192},[159,79988,1241],{"class":165},[159,79990,3925],{"class":1142},[159,79992,2707],{"class":1146},[159,79994,3930],{"class":192},[159,79996,3900],{"class":165},[159,79998,2680],{"class":185},[159,80000,1159],{"class":165},[159,80002,2669],{"class":192},[159,80004,1165],{"class":165},[159,80006,80007],{"class":161,"line":2744},[159,80008,590],{"emptyLinePlaceholder":589},[159,80010,80011,80013,80015],{"class":161,"line":2753},[159,80012,1314],{"class":165},[159,80014,1317],{"class":1146},[159,80016,1165],{"class":165},[159,80018,80019],{"class":161,"line":2758},[159,80020,590],{"emptyLinePlaceholder":589},[159,80022,80023,80025,80027],{"class":161,"line":3959},[159,80024,254],{"class":165},[159,80026,228],{"class":169},[159,80028,173],{"class":165},[159,80030,80031,80033,80035],{"class":161,"line":3968},[159,80032,264],{"class":165},[159,80034,170],{"class":169},[159,80036,173],{"class":165},[159,80038,80039],{"class":161,"line":3977},[159,80040,590],{"emptyLinePlaceholder":589},[159,80042,80043,80045,80047],{"class":161,"line":3982},[159,80044,264],{"class":165},[159,80046,522],{"class":169},[159,80048,173],{"class":165},[42,80050,3992],{"id":3991},[14,80052,3995,80053],{},[61,80054,3998],{},[14,80056,80057],{},[23,80058],{"alt":25,"src":4003},[14,80060,4006],{},[14,80062,80063],{},[23,80064],{"alt":25,"src":4011},[14,80066,80067],{},[23,80068],{"alt":25,"src":4016},[37,80070,4020],{"id":4019},[42,80072,4024],{"id":4023},[14,80074,80075],{},[23,80076],{"alt":25,"src":4029},[14,80078,4032],{},[14,80080,80081],{},[23,80082],{"alt":25,"src":4037},[14,80084,4040],{},[14,80086,4043],{},[42,80088,4047],{"id":4046},[151,80090,80091],{"className":520,"code":4050,"language":522,"meta":25,"style":25},[49,80092,80093,80103,80117,80121,80129,80143,80163,80175,80183,80189,80199,80209,80213,80217,80223,80233,80237,80241,80247,80259,80273,80283,80295,80307,80311,80315,80321,80325,80337,80349,80359,80363,80367,80371,80377,80387,80391,80395,80403,80415,80427,80441,80445,80453,80461,80465,80473,80485,80499,80511,80529,80537,80551,80569,80587,80595,80599,80607,80611,80641,80659,80663,80681,80685,80695,80699,80709,80713,80729,80743,80747,80769,80777,80785,80789,80803,80807,80811,80815,80827,80831,80835,80839,80857,80873,80879,80883,80895,80899,80903,80911,80919,80923],{"__ignoreMap":25},[159,80094,80095,80097,80099,80101],{"class":161,"line":162},[159,80096,914],{"class":165},[159,80098,917],{"class":169},[159,80100,920],{"class":185},[159,80102,173],{"class":165},[159,80104,80105,80107,80109,80111,80113,80115],{"class":161,"line":176},[159,80106,166],{"class":165},[159,80108,522],{"class":169},[159,80110,931],{"class":185},[159,80112,189],{"class":165},[159,80114,936],{"class":192},[159,80116,173],{"class":165},[159,80118,80119],{"class":161,"line":203},[159,80120,590],{"emptyLinePlaceholder":589},[159,80122,80123,80125,80127],{"class":161,"line":223},[159,80124,166],{"class":165},[159,80126,949],{"class":169},[159,80128,173],{"class":165},[159,80130,80131,80133,80135,80137,80139,80141],{"class":161,"line":233},[159,80132,179],{"class":165},[159,80134,958],{"class":169},[159,80136,961],{"class":185},[159,80138,189],{"class":165},[159,80140,966],{"class":192},[159,80142,173],{"class":165},[159,80144,80145,80147,80149,80151,80153,80155,80157,80159,80161],{"class":161,"line":239},[159,80146,179],{"class":165},[159,80148,958],{"class":169},[159,80150,547],{"class":185},[159,80152,189],{"class":165},[159,80154,981],{"class":192},[159,80156,984],{"class":185},[159,80158,189],{"class":165},[159,80160,989],{"class":192},[159,80162,173],{"class":165},[159,80164,80165,80167,80169,80171,80173],{"class":161,"line":245},[159,80166,179],{"class":165},[159,80168,998],{"class":169},[159,80170,1001],{"class":165},[159,80172,998],{"class":169},[159,80174,173],{"class":165},[159,80176,80177,80179,80181],{"class":161,"line":251},[159,80178,179],{"class":165},[159,80180,1468],{"class":169},[159,80182,173],{"class":165},[159,80184,80185,80187],{"class":161,"line":261},[159,80186,1475],{"class":169},[159,80188,1478],{"class":165},[159,80190,80191,80193,80195,80197],{"class":161,"line":603},[159,80192,1497],{"class":1146},[159,80194,1486],{"class":165},[159,80196,1489],{"class":1146},[159,80198,1492],{"class":165},[159,80200,80201,80203,80205,80207],{"class":161,"line":621},[159,80202,1483],{"class":1146},[159,80204,1486],{"class":165},[159,80206,1489],{"class":1146},[159,80208,1492],{"class":165},[159,80210,80211],{"class":161,"line":634},[159,80212,1508],{"class":165},[159,80214,80215],{"class":161,"line":640},[159,80216,590],{"emptyLinePlaceholder":589},[159,80218,80219,80221],{"class":161,"line":1075},[159,80220,4181],{"class":169},[159,80222,1478],{"class":165},[159,80224,80225,80227,80229,80231],{"class":161,"line":1081},[159,80226,4188],{"class":1146},[159,80228,1486],{"class":165},[159,80230,4193],{"class":1146},[159,80232,1492],{"class":165},[159,80234,80235],{"class":161,"line":1091},[159,80236,1508],{"class":165},[159,80238,80239],{"class":161,"line":1100},[159,80240,590],{"emptyLinePlaceholder":589},[159,80242,80243,80245],{"class":161,"line":1123},[159,80244,1544],{"class":185},[159,80246,1478],{"class":165},[159,80248,80249,80251,80253,80255,80257],{"class":161,"line":1132},[159,80250,1563],{"class":1146},[159,80252,1486],{"class":165},[159,80254,1583],{"class":1146},[159,80256,1571],{"class":1142},[159,80258,1492],{"class":165},[159,80260,80261,80263,80265,80267,80269,80271],{"class":161,"line":1139},[159,80262,1497],{"class":1146},[159,80264,1486],{"class":165},[159,80266,4230],{"class":1146},[159,80268,1571],{"class":1142},[159,80270,1601],{"class":1146},[159,80272,1492],{"class":165},[159,80274,80275,80277,80279,80281],{"class":161,"line":1168},[159,80276,1818],{"class":1146},[159,80278,1486],{"class":165},[159,80280,1823],{"class":1146},[159,80282,1492],{"class":165},[159,80284,80285,80287,80289,80291,80293],{"class":161,"line":1174},[159,80286,1721],{"class":1146},[159,80288,1486],{"class":165},[159,80290,4255],{"class":1146},[159,80292,1571],{"class":1142},[159,80294,1492],{"class":165},[159,80296,80297,80299,80301,80303,80305],{"class":161,"line":1180},[159,80298,4264],{"class":1146},[159,80300,1486],{"class":165},[159,80302,4269],{"class":1146},[159,80304,1571],{"class":1142},[159,80306,1492],{"class":165},[159,80308,80309],{"class":161,"line":1194},[159,80310,1508],{"class":165},[159,80312,80313],{"class":161,"line":1200},[159,80314,590],{"emptyLinePlaceholder":589},[159,80316,80317,80319],{"class":161,"line":1221},[159,80318,4286],{"class":185},[159,80320,1478],{"class":165},[159,80322,80323],{"class":161,"line":1230},[159,80324,590],{"emptyLinePlaceholder":589},[159,80326,80327,80329,80331,80333,80335],{"class":161,"line":1247},[159,80328,1563],{"class":1146},[159,80330,1486],{"class":165},[159,80332,4301],{"class":1146},[159,80334,1571],{"class":1142},[159,80336,1492],{"class":165},[159,80338,80339,80341,80343,80345,80347],{"class":161,"line":1265},[159,80340,1578],{"class":1146},[159,80342,1486],{"class":165},[159,80344,4269],{"class":1146},[159,80346,1571],{"class":1142},[159,80348,1492],{"class":165},[159,80350,80351,80353,80355,80357],{"class":161,"line":1277},[159,80352,4322],{"class":1146},[159,80354,1486],{"class":165},[159,80356,4327],{"class":1146},[159,80358,1492],{"class":165},[159,80360,80361],{"class":161,"line":1283},[159,80362,590],{"emptyLinePlaceholder":589},[159,80364,80365],{"class":161,"line":1294},[159,80366,1508],{"class":165},[159,80368,80369],{"class":161,"line":1305},[159,80370,590],{"emptyLinePlaceholder":589},[159,80372,80373,80375],{"class":161,"line":1311},[159,80374,4346],{"class":185},[159,80376,1478],{"class":165},[159,80378,80379,80381,80383,80385],{"class":161,"line":1322},[159,80380,4188],{"class":1146},[159,80382,1486],{"class":165},[159,80384,4193],{"class":1146},[159,80386,1492],{"class":165},[159,80388,80389],{"class":161,"line":1327},[159,80390,1508],{"class":165},[159,80392,80393],{"class":161,"line":1336},[159,80394,590],{"emptyLinePlaceholder":589},[159,80396,80397,80399,80401],{"class":161,"line":1345},[159,80398,4346],{"class":185},[159,80400,4373],{"class":169},[159,80402,1478],{"class":165},[159,80404,80405,80407,80409,80411,80413],{"class":161,"line":1350},[159,80406,1563],{"class":1146},[159,80408,1486],{"class":165},[159,80410,4384],{"class":1146},[159,80412,1571],{"class":1142},[159,80414,1492],{"class":165},[159,80416,80417,80419,80421,80423,80425],{"class":161,"line":1764},[159,80418,1578],{"class":1146},[159,80420,1486],{"class":165},[159,80422,4397],{"class":1146},[159,80424,1571],{"class":1142},[159,80426,1492],{"class":165},[159,80428,80429,80431,80433,80435,80437,80439],{"class":161,"line":1769},[159,80430,1497],{"class":1146},[159,80432,1486],{"class":165},[159,80434,1489],{"class":1146},[159,80436,4412],{"class":1146},[159,80438,1571],{"class":1142},[159,80440,1492],{"class":165},[159,80442,80443],{"class":161,"line":1777},[159,80444,1508],{"class":165},[159,80446,80447,80449,80451],{"class":161,"line":1788},[159,80448,254],{"class":165},[159,80450,1468],{"class":169},[159,80452,173],{"class":165},[159,80454,80455,80457,80459],{"class":161,"line":1802},[159,80456,264],{"class":165},[159,80458,949],{"class":169},[159,80460,173],{"class":165},[159,80462,80463],{"class":161,"line":1815},[159,80464,590],{"emptyLinePlaceholder":589},[159,80466,80467,80469,80471],{"class":161,"line":1828},[159,80468,166],{"class":165},[159,80470,170],{"class":169},[159,80472,173],{"class":165},[159,80474,80475,80477,80479,80481,80483],{"class":161,"line":1841},[159,80476,179],{"class":165},[159,80478,37],{"class":169},[159,80480,4457],{"class":165},[159,80482,37],{"class":169},[159,80484,173],{"class":165},[159,80486,80487,80489,80491,80493,80495,80497],{"class":161,"line":1852},[159,80488,179],{"class":165},[159,80490,182],{"class":169},[159,80492,186],{"class":185},[159,80494,189],{"class":165},[159,80496,193],{"class":192},[159,80498,173],{"class":165},[159,80500,80501,80503,80505,80507,80509],{"class":161,"line":1866},[159,80502,2056],{"class":165},[159,80504,159],{"class":169},[159,80506,4484],{"class":165},[159,80508,159],{"class":169},[159,80510,173],{"class":165},[159,80512,80513,80515,80517,80519,80521,80523,80525,80527],{"class":161,"line":1879},[159,80514,2056],{"class":165},[159,80516,182],{"class":169},[159,80518,186],{"class":185},[159,80520,189],{"class":165},[159,80522,4501],{"class":192},[159,80524,4504],{"class":165},[159,80526,182],{"class":169},[159,80528,173],{"class":165},[159,80530,80531,80533,80535],{"class":161,"line":1884},[159,80532,254],{"class":165},[159,80534,182],{"class":169},[159,80536,173],{"class":165},[159,80538,80539,80541,80543,80545,80547,80549],{"class":161,"line":1889},[159,80540,179],{"class":165},[159,80542,182],{"class":169},[159,80544,186],{"class":185},[159,80546,189],{"class":165},[159,80548,4529],{"class":192},[159,80550,173],{"class":165},[159,80552,80553,80555,80557,80559,80561,80563,80565,80567],{"class":161,"line":1899},[159,80554,2056],{"class":165},[159,80556,608],{"class":169},[159,80558,186],{"class":185},[159,80560,189],{"class":165},[159,80562,4544],{"class":192},[159,80564,4547],{"class":165},[159,80566,608],{"class":169},[159,80568,173],{"class":165},[159,80570,80571,80573,80575,80577,80579,80581,80583,80585],{"class":161,"line":1912},[159,80572,2056],{"class":165},[159,80574,608],{"class":169},[159,80576,186],{"class":185},[159,80578,189],{"class":165},[159,80580,4564],{"class":192},[159,80582,4567],{"class":165},[159,80584,608],{"class":169},[159,80586,173],{"class":165},[159,80588,80589,80591,80593],{"class":161,"line":1925},[159,80590,254],{"class":165},[159,80592,182],{"class":169},[159,80594,173],{"class":165},[159,80596,80597],{"class":161,"line":1956},[159,80598,590],{"emptyLinePlaceholder":589},[159,80600,80601,80603,80605],{"class":161,"line":1971},[159,80602,179],{"class":165},[159,80604,228],{"class":169},[159,80606,173],{"class":165},[159,80608,80609],{"class":161,"line":1976},[159,80610,4596],{"class":1135},[159,80612,80613,80615,80617,80619,80621,80623,80625,80627,80629,80631,80633,80635,80637,80639],{"class":161,"line":1981},[159,80614,1143],{"class":1142},[159,80616,4603],{"class":1146},[159,80618,1150],{"class":1142},[159,80620,4608],{"class":165},[159,80622,4611],{"class":192},[159,80624,1939],{"class":165},[159,80626,4616],{"class":192},[159,80628,1939],{"class":165},[159,80630,4621],{"class":192},[159,80632,1939],{"class":165},[159,80634,4626],{"class":192},[159,80636,1939],{"class":165},[159,80638,4631],{"class":192},[159,80640,4634],{"class":165},[159,80642,80643,80645,80647,80649,80651,80653,80655,80657],{"class":161,"line":1989},[159,80644,1143],{"class":1142},[159,80646,4641],{"class":1146},[159,80648,1150],{"class":1142},[159,80650,1153],{"class":165},[159,80652,1156],{"class":185},[159,80654,1159],{"class":165},[159,80656,4652],{"class":192},[159,80658,1165],{"class":165},[159,80660,80661],{"class":161,"line":2001},[159,80662,4659],{"class":1135},[159,80664,80665,80667,80669,80671,80673,80675,80677,80679],{"class":161,"line":2006},[159,80666,1143],{"class":1142},[159,80668,4666],{"class":1146},[159,80670,1150],{"class":1142},[159,80672,1153],{"class":165},[159,80674,1156],{"class":185},[159,80676,1159],{"class":165},[159,80678,4677],{"class":192},[159,80680,1165],{"class":165},[159,80682,80683],{"class":161,"line":2015},[159,80684,4684],{"class":1135},[159,80686,80687,80689,80691,80693],{"class":161,"line":2024},[159,80688,1183],{"class":1142},[159,80690,4691],{"class":165},[159,80692,189],{"class":1142},[159,80694,3785],{"class":1146},[159,80696,80697],{"class":161,"line":2029},[159,80698,4700],{"class":1135},[159,80700,80701,80703,80705,80707],{"class":161,"line":2038},[159,80702,1183],{"class":1142},[159,80704,4707],{"class":165},[159,80706,189],{"class":1142},[159,80708,3785],{"class":1146},[159,80710,80711],{"class":161,"line":2053},[159,80712,4716],{"class":1135},[159,80714,80715,80717,80719,80721,80723,80725,80727],{"class":161,"line":2070},[159,80716,4721],{"class":165},[159,80718,4724],{"class":185},[159,80720,1159],{"class":165},[159,80722,4729],{"class":192},[159,80724,1939],{"class":165},[159,80726,1215],{"class":1142},[159,80728,1218],{"class":165},[159,80730,80731,80733,80735,80737,80739,80741],{"class":161,"line":2095},[159,80732,4740],{"class":165},[159,80734,189],{"class":1142},[159,80736,1210],{"class":185},[159,80738,1159],{"class":165},[159,80740,1215],{"class":1142},[159,80742,1218],{"class":165},[159,80744,80745],{"class":161,"line":2104},[159,80746,4755],{"class":1135},[159,80748,80749,80751,80753,80755,80757,80759,80761,80763,80765,80767],{"class":161,"line":2120},[159,80750,4760],{"class":165},[159,80752,189],{"class":1142},[159,80754,4765],{"class":185},[159,80756,4768],{"class":165},[159,80758,4771],{"class":185},[159,80760,4774],{"class":165},[159,80762,4777],{"class":1142},[159,80764,4780],{"class":165},[159,80766,3828],{"class":1146},[159,80768,1165],{"class":165},[159,80770,80771,80773,80775],{"class":161,"line":2134},[159,80772,4789],{"class":165},[159,80774,189],{"class":1142},[159,80776,4794],{"class":165},[159,80778,80779,80781,80783],{"class":161,"line":2143},[159,80780,4799],{"class":165},[159,80782,4397],{"class":1146},[159,80784,1165],{"class":165},[159,80786,80787],{"class":161,"line":2165},[159,80788,4808],{"class":1135},[159,80790,80791,80793,80795,80797,80799,80801],{"class":161,"line":2178},[159,80792,1250],{"class":1142},[159,80794,4815],{"class":165},[159,80796,3828],{"class":1146},[159,80798,4820],{"class":1142},[159,80800,2707],{"class":1146},[159,80802,1262],{"class":165},[159,80804,80805],{"class":161,"line":2191},[159,80806,4829],{"class":1135},[159,80808,80809],{"class":161,"line":2204},[159,80810,4834],{"class":1135},[159,80812,80813],{"class":161,"line":2217},[159,80814,4839],{"class":1135},[159,80816,80817,80819,80821,80823,80825],{"class":161,"line":2230},[159,80818,4844],{"class":165},[159,80820,189],{"class":1142},[159,80822,4849],{"class":165},[159,80824,189],{"class":1142},[159,80826,4854],{"class":1146},[159,80828,80829],{"class":161,"line":2243},[159,80830,1308],{"class":165},[159,80832,80833],{"class":161,"line":2256},[159,80834,4863],{"class":165},[159,80836,80837],{"class":161,"line":2266},[159,80838,4868],{"class":1135},[159,80840,80841,80843,80845,80847,80849,80851,80853,80855],{"class":161,"line":2275},[159,80842,1143],{"class":1142},[159,80844,4875],{"class":1146},[159,80846,1150],{"class":1142},[159,80848,1153],{"class":165},[159,80850,1156],{"class":185},[159,80852,1159],{"class":165},[159,80854,4886],{"class":192},[159,80856,1165],{"class":165},[159,80858,80859,80861,80863,80865,80867,80869,80871],{"class":161,"line":2284},[159,80860,4893],{"class":165},[159,80862,4724],{"class":185},[159,80864,1159],{"class":165},[159,80866,4729],{"class":192},[159,80868,1939],{"class":165},[159,80870,1215],{"class":1142},[159,80872,1218],{"class":165},[159,80874,80875,80877],{"class":161,"line":2293},[159,80876,4910],{"class":185},[159,80878,4913],{"class":165},[159,80880,80881],{"class":161,"line":2306},[159,80882,4918],{"class":1135},[159,80884,80885,80887,80889,80891,80893],{"class":161,"line":2330},[159,80886,4923],{"class":165},[159,80888,4926],{"class":185},[159,80890,4929],{"class":165},[159,80892,4932],{"class":1146},[159,80894,1165],{"class":165},[159,80896,80897],{"class":161,"line":2350},[159,80898,4863],{"class":165},[159,80900,80901],{"class":161,"line":2370},[159,80902,590],{"emptyLinePlaceholder":589},[159,80904,80905,80907,80909],{"class":161,"line":2390},[159,80906,254],{"class":165},[159,80908,228],{"class":169},[159,80910,173],{"class":165},[159,80912,80913,80915,80917],{"class":161,"line":2410},[159,80914,264],{"class":165},[159,80916,170],{"class":169},[159,80918,173],{"class":165},[159,80920,80921],{"class":161,"line":2430},[159,80922,590],{"emptyLinePlaceholder":589},[159,80924,80925,80927,80929],{"class":161,"line":2450},[159,80926,264],{"class":165},[159,80928,522],{"class":169},[159,80930,173],{"class":165},[14,80932,4973],{},[42,80934,4977],{"id":4976},[151,80936,80937],{"className":520,"code":4980,"language":522,"meta":25,"style":25},[49,80938,80939,80949,80963,80967,80975,80989,81009,81021,81029,81033,81041,81053,81061,81079,81095,81109,81117,81121,81129,81137,81141],{"__ignoreMap":25},[159,80940,80941,80943,80945,80947],{"class":161,"line":162},[159,80942,914],{"class":165},[159,80944,917],{"class":169},[159,80946,920],{"class":185},[159,80948,173],{"class":165},[159,80950,80951,80953,80955,80957,80959,80961],{"class":161,"line":176},[159,80952,166],{"class":165},[159,80954,522],{"class":169},[159,80956,931],{"class":185},[159,80958,189],{"class":165},[159,80960,936],{"class":192},[159,80962,173],{"class":165},[159,80964,80965],{"class":161,"line":203},[159,80966,590],{"emptyLinePlaceholder":589},[159,80968,80969,80971,80973],{"class":161,"line":223},[159,80970,166],{"class":165},[159,80972,949],{"class":169},[159,80974,173],{"class":165},[159,80976,80977,80979,80981,80983,80985,80987],{"class":161,"line":233},[159,80978,179],{"class":165},[159,80980,958],{"class":169},[159,80982,961],{"class":185},[159,80984,189],{"class":165},[159,80986,966],{"class":192},[159,80988,173],{"class":165},[159,80990,80991,80993,80995,80997,80999,81001,81003,81005,81007],{"class":161,"line":239},[159,80992,179],{"class":165},[159,80994,958],{"class":169},[159,80996,547],{"class":185},[159,80998,189],{"class":165},[159,81000,981],{"class":192},[159,81002,984],{"class":185},[159,81004,189],{"class":165},[159,81006,989],{"class":192},[159,81008,173],{"class":165},[159,81010,81011,81013,81015,81017,81019],{"class":161,"line":245},[159,81012,179],{"class":165},[159,81014,998],{"class":169},[159,81016,1001],{"class":165},[159,81018,998],{"class":169},[159,81020,173],{"class":165},[159,81022,81023,81025,81027],{"class":161,"line":251},[159,81024,264],{"class":165},[159,81026,949],{"class":169},[159,81028,173],{"class":165},[159,81030,81031],{"class":161,"line":261},[159,81032,590],{"emptyLinePlaceholder":589},[159,81034,81035,81037,81039],{"class":161,"line":603},[159,81036,166],{"class":165},[159,81038,170],{"class":169},[159,81040,173],{"class":165},[159,81042,81043,81045,81047,81049,81051],{"class":161,"line":621},[159,81044,179],{"class":165},[159,81046,608],{"class":169},[159,81048,614],{"class":165},[159,81050,608],{"class":169},[159,81052,173],{"class":165},[159,81054,81055,81057,81059],{"class":161,"line":634},[159,81056,179],{"class":165},[159,81058,228],{"class":169},[159,81060,173],{"class":165},[159,81062,81063,81065,81067,81069,81071,81073,81075,81077],{"class":161,"line":640},[159,81064,1143],{"class":1142},[159,81066,1147],{"class":1146},[159,81068,1150],{"class":1142},[159,81070,1153],{"class":165},[159,81072,1156],{"class":185},[159,81074,1159],{"class":165},[159,81076,5121],{"class":192},[159,81078,1165],{"class":165},[159,81080,81081,81083,81085,81087,81089,81091,81093],{"class":161,"line":1075},[159,81082,5128],{"class":165},[159,81084,4724],{"class":185},[159,81086,1159],{"class":165},[159,81088,4729],{"class":192},[159,81090,1939],{"class":165},[159,81092,1215],{"class":1142},[159,81094,1218],{"class":165},[159,81096,81097,81099,81101,81103,81105,81107],{"class":161,"line":1081},[159,81098,5145],{"class":1142},[159,81100,5148],{"class":1146},[159,81102,1150],{"class":1142},[159,81104,5153],{"class":165},[159,81106,4771],{"class":185},[159,81108,5158],{"class":165},[159,81110,81111,81113,81115],{"class":161,"line":1091},[159,81112,5163],{"class":165},[159,81114,5166],{"class":185},[159,81116,5169],{"class":165},[159,81118,81119],{"class":161,"line":1100},[159,81120,4863],{"class":165},[159,81122,81123,81125,81127],{"class":161,"line":1123},[159,81124,254],{"class":165},[159,81126,228],{"class":169},[159,81128,173],{"class":165},[159,81130,81131,81133,81135],{"class":161,"line":1132},[159,81132,264],{"class":165},[159,81134,170],{"class":169},[159,81136,173],{"class":165},[159,81138,81139],{"class":161,"line":1139},[159,81140,590],{"emptyLinePlaceholder":589},[159,81142,81143,81145,81147],{"class":161,"line":1168},[159,81144,264],{"class":165},[159,81146,522],{"class":169},[159,81148,173],{"class":165},[14,81150,5204],{},[14,81152,5207],{},[14,81154,5210],{},[151,81156,81157],{"className":520,"code":5213,"language":522,"meta":25,"style":25},[49,81158,81159,81169,81183,81187,81195,81209,81229,81241,81249,81253,81261,81273,81281,81291,81309,81325,81339,81347,81351,81359,81367,81371],{"__ignoreMap":25},[159,81160,81161,81163,81165,81167],{"class":161,"line":162},[159,81162,914],{"class":165},[159,81164,917],{"class":169},[159,81166,920],{"class":185},[159,81168,173],{"class":165},[159,81170,81171,81173,81175,81177,81179,81181],{"class":161,"line":176},[159,81172,166],{"class":165},[159,81174,522],{"class":169},[159,81176,931],{"class":185},[159,81178,189],{"class":165},[159,81180,936],{"class":192},[159,81182,173],{"class":165},[159,81184,81185],{"class":161,"line":203},[159,81186,590],{"emptyLinePlaceholder":589},[159,81188,81189,81191,81193],{"class":161,"line":223},[159,81190,166],{"class":165},[159,81192,949],{"class":169},[159,81194,173],{"class":165},[159,81196,81197,81199,81201,81203,81205,81207],{"class":161,"line":233},[159,81198,179],{"class":165},[159,81200,958],{"class":169},[159,81202,961],{"class":185},[159,81204,189],{"class":165},[159,81206,966],{"class":192},[159,81208,173],{"class":165},[159,81210,81211,81213,81215,81217,81219,81221,81223,81225,81227],{"class":161,"line":239},[159,81212,179],{"class":165},[159,81214,958],{"class":169},[159,81216,547],{"class":185},[159,81218,189],{"class":165},[159,81220,981],{"class":192},[159,81222,984],{"class":185},[159,81224,189],{"class":165},[159,81226,989],{"class":192},[159,81228,173],{"class":165},[159,81230,81231,81233,81235,81237,81239],{"class":161,"line":245},[159,81232,179],{"class":165},[159,81234,998],{"class":169},[159,81236,1001],{"class":165},[159,81238,998],{"class":169},[159,81240,173],{"class":165},[159,81242,81243,81245,81247],{"class":161,"line":251},[159,81244,264],{"class":165},[159,81246,949],{"class":169},[159,81248,173],{"class":165},[159,81250,81251],{"class":161,"line":261},[159,81252,590],{"emptyLinePlaceholder":589},[159,81254,81255,81257,81259],{"class":161,"line":603},[159,81256,166],{"class":165},[159,81258,170],{"class":169},[159,81260,173],{"class":165},[159,81262,81263,81265,81267,81269,81271],{"class":161,"line":621},[159,81264,179],{"class":165},[159,81266,608],{"class":169},[159,81268,614],{"class":165},[159,81270,608],{"class":169},[159,81272,173],{"class":165},[159,81274,81275,81277,81279],{"class":161,"line":634},[159,81276,179],{"class":165},[159,81278,228],{"class":169},[159,81280,173],{"class":165},[159,81282,81283,81285,81287,81289],{"class":161,"line":640},[159,81284,1143],{"class":1142},[159,81286,5148],{"class":1146},[159,81288,1150],{"class":1142},[159,81290,5348],{"class":1146},[159,81292,81293,81295,81297,81299,81301,81303,81305,81307],{"class":161,"line":1075},[159,81294,1143],{"class":1142},[159,81296,1147],{"class":1146},[159,81298,1150],{"class":1142},[159,81300,1153],{"class":165},[159,81302,1156],{"class":185},[159,81304,1159],{"class":165},[159,81306,5121],{"class":192},[159,81308,1165],{"class":165},[159,81310,81311,81313,81315,81317,81319,81321,81323],{"class":161,"line":1081},[159,81312,5128],{"class":165},[159,81314,4724],{"class":185},[159,81316,1159],{"class":165},[159,81318,4729],{"class":192},[159,81320,1939],{"class":165},[159,81322,1215],{"class":1142},[159,81324,1218],{"class":165},[159,81326,81327,81329,81331,81333,81335,81337],{"class":161,"line":1091},[159,81328,5145],{"class":1142},[159,81330,5148],{"class":1146},[159,81332,1150],{"class":1142},[159,81334,5153],{"class":165},[159,81336,4771],{"class":185},[159,81338,5158],{"class":165},[159,81340,81341,81343,81345],{"class":161,"line":1100},[159,81342,5163],{"class":165},[159,81344,5166],{"class":185},[159,81346,5169],{"class":165},[159,81348,81349],{"class":161,"line":1123},[159,81350,4863],{"class":165},[159,81352,81353,81355,81357],{"class":161,"line":1132},[159,81354,254],{"class":165},[159,81356,228],{"class":169},[159,81358,173],{"class":165},[159,81360,81361,81363,81365],{"class":161,"line":1139},[159,81362,264],{"class":165},[159,81364,170],{"class":169},[159,81366,173],{"class":165},[159,81368,81369],{"class":161,"line":1168},[159,81370,590],{"emptyLinePlaceholder":589},[159,81372,81373,81375,81377],{"class":161,"line":1174},[159,81374,264],{"class":165},[159,81376,522],{"class":169},[159,81378,173],{"class":165},[14,81380,5439],{},[151,81382,81383],{"className":520,"code":5442,"language":522,"meta":25,"style":25},[49,81384,81385,81395,81409,81413,81421,81435,81455,81467,81475,81479,81487,81499,81507,81517,81535,81551,81563,81571,81575,81583,81591,81595],{"__ignoreMap":25},[159,81386,81387,81389,81391,81393],{"class":161,"line":162},[159,81388,914],{"class":165},[159,81390,917],{"class":169},[159,81392,920],{"class":185},[159,81394,173],{"class":165},[159,81396,81397,81399,81401,81403,81405,81407],{"class":161,"line":176},[159,81398,166],{"class":165},[159,81400,522],{"class":169},[159,81402,931],{"class":185},[159,81404,189],{"class":165},[159,81406,936],{"class":192},[159,81408,173],{"class":165},[159,81410,81411],{"class":161,"line":203},[159,81412,590],{"emptyLinePlaceholder":589},[159,81414,81415,81417,81419],{"class":161,"line":223},[159,81416,166],{"class":165},[159,81418,949],{"class":169},[159,81420,173],{"class":165},[159,81422,81423,81425,81427,81429,81431,81433],{"class":161,"line":233},[159,81424,179],{"class":165},[159,81426,958],{"class":169},[159,81428,961],{"class":185},[159,81430,189],{"class":165},[159,81432,966],{"class":192},[159,81434,173],{"class":165},[159,81436,81437,81439,81441,81443,81445,81447,81449,81451,81453],{"class":161,"line":239},[159,81438,179],{"class":165},[159,81440,958],{"class":169},[159,81442,547],{"class":185},[159,81444,189],{"class":165},[159,81446,981],{"class":192},[159,81448,984],{"class":185},[159,81450,189],{"class":165},[159,81452,989],{"class":192},[159,81454,173],{"class":165},[159,81456,81457,81459,81461,81463,81465],{"class":161,"line":245},[159,81458,179],{"class":165},[159,81460,998],{"class":169},[159,81462,1001],{"class":165},[159,81464,998],{"class":169},[159,81466,173],{"class":165},[159,81468,81469,81471,81473],{"class":161,"line":251},[159,81470,264],{"class":165},[159,81472,949],{"class":169},[159,81474,173],{"class":165},[159,81476,81477],{"class":161,"line":261},[159,81478,590],{"emptyLinePlaceholder":589},[159,81480,81481,81483,81485],{"class":161,"line":603},[159,81482,166],{"class":165},[159,81484,170],{"class":169},[159,81486,173],{"class":165},[159,81488,81489,81491,81493,81495,81497],{"class":161,"line":621},[159,81490,179],{"class":165},[159,81492,608],{"class":169},[159,81494,614],{"class":165},[159,81496,608],{"class":169},[159,81498,173],{"class":165},[159,81500,81501,81503,81505],{"class":161,"line":634},[159,81502,179],{"class":165},[159,81504,228],{"class":169},[159,81506,173],{"class":165},[159,81508,81509,81511,81513,81515],{"class":161,"line":640},[159,81510,1143],{"class":1142},[159,81512,5148],{"class":1146},[159,81514,1150],{"class":1142},[159,81516,5348],{"class":1146},[159,81518,81519,81521,81523,81525,81527,81529,81531,81533],{"class":161,"line":1075},[159,81520,1143],{"class":1142},[159,81522,1147],{"class":1146},[159,81524,1150],{"class":1142},[159,81526,1153],{"class":165},[159,81528,1156],{"class":185},[159,81530,1159],{"class":165},[159,81532,5121],{"class":192},[159,81534,1165],{"class":165},[159,81536,81537,81539,81541,81543,81545,81547,81549],{"class":161,"line":1081},[159,81538,5128],{"class":165},[159,81540,4724],{"class":185},[159,81542,1159],{"class":165},[159,81544,4729],{"class":192},[159,81546,1939],{"class":165},[159,81548,1215],{"class":1142},[159,81550,1218],{"class":165},[159,81552,81553,81555,81557,81559,81561],{"class":161,"line":1091},[159,81554,5615],{"class":165},[159,81556,189],{"class":1142},[159,81558,5153],{"class":165},[159,81560,4771],{"class":185},[159,81562,5158],{"class":165},[159,81564,81565,81567,81569],{"class":161,"line":1100},[159,81566,5163],{"class":165},[159,81568,5166],{"class":185},[159,81570,5169],{"class":165},[159,81572,81573],{"class":161,"line":1123},[159,81574,4863],{"class":165},[159,81576,81577,81579,81581],{"class":161,"line":1132},[159,81578,254],{"class":165},[159,81580,228],{"class":169},[159,81582,173],{"class":165},[159,81584,81585,81587,81589],{"class":161,"line":1139},[159,81586,264],{"class":165},[159,81588,170],{"class":169},[159,81590,173],{"class":165},[159,81592,81593],{"class":161,"line":1168},[159,81594,590],{"emptyLinePlaceholder":589},[159,81596,81597,81599,81601],{"class":161,"line":1174},[159,81598,264],{"class":165},[159,81600,522],{"class":169},[159,81602,173],{"class":165},[14,81604,5666],{},[42,81606,5670],{"id":5669},[14,81608,81609],{},[23,81610],{"alt":25,"src":5675},[14,81612,5678],{},[14,81614,5681],{},[151,81616,81617],{"className":520,"code":5684,"language":522,"meta":25,"style":25},[49,81618,81619,81629,81643,81647,81655,81669,81689,81701,81709,81713,81721,81733,81741,81759,81771,81781,81785,81797,81807,81811,81819,81827,81831],{"__ignoreMap":25},[159,81620,81621,81623,81625,81627],{"class":161,"line":162},[159,81622,914],{"class":165},[159,81624,917],{"class":169},[159,81626,920],{"class":185},[159,81628,173],{"class":165},[159,81630,81631,81633,81635,81637,81639,81641],{"class":161,"line":176},[159,81632,166],{"class":165},[159,81634,522],{"class":169},[159,81636,931],{"class":185},[159,81638,189],{"class":165},[159,81640,936],{"class":192},[159,81642,173],{"class":165},[159,81644,81645],{"class":161,"line":203},[159,81646,590],{"emptyLinePlaceholder":589},[159,81648,81649,81651,81653],{"class":161,"line":223},[159,81650,166],{"class":165},[159,81652,949],{"class":169},[159,81654,173],{"class":165},[159,81656,81657,81659,81661,81663,81665,81667],{"class":161,"line":233},[159,81658,179],{"class":165},[159,81660,958],{"class":169},[159,81662,961],{"class":185},[159,81664,189],{"class":165},[159,81666,966],{"class":192},[159,81668,173],{"class":165},[159,81670,81671,81673,81675,81677,81679,81681,81683,81685,81687],{"class":161,"line":239},[159,81672,179],{"class":165},[159,81674,958],{"class":169},[159,81676,547],{"class":185},[159,81678,189],{"class":165},[159,81680,981],{"class":192},[159,81682,984],{"class":185},[159,81684,189],{"class":165},[159,81686,989],{"class":192},[159,81688,173],{"class":165},[159,81690,81691,81693,81695,81697,81699],{"class":161,"line":245},[159,81692,179],{"class":165},[159,81694,998],{"class":169},[159,81696,1001],{"class":165},[159,81698,998],{"class":169},[159,81700,173],{"class":165},[159,81702,81703,81705,81707],{"class":161,"line":251},[159,81704,264],{"class":165},[159,81706,949],{"class":169},[159,81708,173],{"class":165},[159,81710,81711],{"class":161,"line":261},[159,81712,590],{"emptyLinePlaceholder":589},[159,81714,81715,81717,81719],{"class":161,"line":603},[159,81716,166],{"class":165},[159,81718,170],{"class":169},[159,81720,173],{"class":165},[159,81722,81723,81725,81727,81729,81731],{"class":161,"line":621},[159,81724,179],{"class":165},[159,81726,608],{"class":169},[159,81728,614],{"class":165},[159,81730,608],{"class":169},[159,81732,173],{"class":165},[159,81734,81735,81737,81739],{"class":161,"line":634},[159,81736,179],{"class":165},[159,81738,228],{"class":169},[159,81740,173],{"class":165},[159,81742,81743,81745,81747,81749,81751,81753,81755,81757],{"class":161,"line":640},[159,81744,1143],{"class":1142},[159,81746,1147],{"class":1146},[159,81748,1150],{"class":1142},[159,81750,1153],{"class":165},[159,81752,1156],{"class":185},[159,81754,1159],{"class":165},[159,81756,5121],{"class":192},[159,81758,1165],{"class":165},[159,81760,81761,81763,81765,81767,81769],{"class":161,"line":1075},[159,81762,5128],{"class":165},[159,81764,5833],{"class":185},[159,81766,1150],{"class":1142},[159,81768,5838],{"class":1142},[159,81770,1218],{"class":165},[159,81772,81773,81775,81777,81779],{"class":161,"line":1081},[159,81774,5845],{"class":185},[159,81776,1159],{"class":165},[159,81778,5850],{"class":1146},[159,81780,1165],{"class":165},[159,81782,81783],{"class":161,"line":1091},[159,81784,1508],{"class":165},[159,81786,81787,81789,81791,81793,81795],{"class":161,"line":1100},[159,81788,5128],{"class":165},[159,81790,5833],{"class":185},[159,81792,1150],{"class":1142},[159,81794,5838],{"class":1142},[159,81796,1218],{"class":165},[159,81798,81799,81801,81803,81805],{"class":161,"line":1123},[159,81800,5845],{"class":185},[159,81802,1159],{"class":165},[159,81804,5877],{"class":1146},[159,81806,1165],{"class":165},[159,81808,81809],{"class":161,"line":1132},[159,81810,1508],{"class":165},[159,81812,81813,81815,81817],{"class":161,"line":1139},[159,81814,254],{"class":165},[159,81816,228],{"class":169},[159,81818,173],{"class":165},[159,81820,81821,81823,81825],{"class":161,"line":1168},[159,81822,264],{"class":165},[159,81824,170],{"class":169},[159,81826,173],{"class":165},[159,81828,81829],{"class":161,"line":1174},[159,81830,590],{"emptyLinePlaceholder":589},[159,81832,81833,81835,81837],{"class":161,"line":1180},[159,81834,264],{"class":165},[159,81836,522],{"class":169},[159,81838,173],{"class":165},[14,81840,5914],{},[151,81842,81843],{"className":520,"code":5917,"language":522,"meta":25,"style":25},[49,81844,81845,81849,81853,81857,81861,81865],{"__ignoreMap":25},[159,81846,81847],{"class":161,"line":162},[159,81848,5924],{"class":165},[159,81850,81851],{"class":161,"line":176},[159,81852,5929],{"class":165},[159,81854,81855],{"class":161,"line":203},[159,81856,4863],{"class":165},[159,81858,81859],{"class":161,"line":223},[159,81860,5938],{"class":165},[159,81862,81863],{"class":161,"line":233},[159,81864,5943],{"class":165},[159,81866,81867],{"class":161,"line":239},[159,81868,4863],{"class":165},[14,81870,5950],{},[42,81872,5954],{"id":5953},[14,81874,81875],{},[23,81876],{"alt":25,"src":5959},[326,81878,5963],{"id":5962},[14,81880,5966],{},[14,81882,5969],{},[14,81884,5972],{},[14,81886,5975],{},[14,81888,5978],{},[14,81890,5981],{},[14,81892,5984],{},[14,81894,81895],{},[23,81896],{"alt":25,"src":5989},[151,81898,81899],{"className":153,"code":5992,"language":155,"meta":25,"style":25},[49,81900,81901,81905,81915,81929,81933,81941,81955,81975,81995,82007,82015,82019,82023,82027,82031,82035,82039,82043,82047,82051,82055,82059,82063,82067,82071,82075,82079,82083,82087,82091,82095,82099,82103,82107,82111,82115,82119,82123,82127,82131,82135,82139,82143,82147,82151,82155,82159,82163,82167,82171,82175,82179,82183,82187,82191,82195,82199,82203,82207,82211,82215,82219,82223,82227,82231,82235,82239,82243,82247,82251,82255,82259,82263,82267,82271,82275,82279,82283,82287,82291,82295,82299,82303,82307,82311,82315,82319,82323,82327,82331,82335,82339,82347,82355,82359,82367,82381,82395,82415,82423,82437,82449,82463,82481,82493,82505,82517,82529,82541,82553,82565,82573,82587,82609,82631,82639,82647,82655,82663,82667,82671,82675,82679,82683,82687,82691,82695,82699,82703,82707,82711,82715,82719,82723,82727,82731,82735,82739,82743,82747,82751,82755,82759,82763,82767,82771,82775,82779,82783,82787,82791,82795,82799,82803,82807,82811,82815,82819,82823,82827,82831,82835,82839,82843,82847,82851,82855,82859,82863,82867,82871,82875,82879,82883,82887,82891,82895,82899,82903,82907,82911,82915,82919,82923,82927,82931,82935,82939,82943,82947,82951,82955,82959,82963,82967,82971,82975,82979,82983,82987,82991,82995,82999,83003,83007,83011,83015,83023,83031,83035],{"__ignoreMap":25},[159,81902,81903],{"class":161,"line":162},[159,81904,590],{"emptyLinePlaceholder":589},[159,81906,81907,81909,81911,81913],{"class":161,"line":176},[159,81908,914],{"class":165},[159,81910,917],{"class":1142},[159,81912,920],{"class":1146},[159,81914,173],{"class":165},[159,81916,81917,81919,81921,81923,81925,81927],{"class":161,"line":203},[159,81918,166],{"class":165},[159,81920,522],{"class":169},[159,81922,931],{"class":185},[159,81924,189],{"class":165},[159,81926,936],{"class":192},[159,81928,173],{"class":165},[159,81930,81931],{"class":161,"line":223},[159,81932,590],{"emptyLinePlaceholder":589},[159,81934,81935,81937,81939],{"class":161,"line":233},[159,81936,166],{"class":165},[159,81938,949],{"class":169},[159,81940,173],{"class":165},[159,81942,81943,81945,81947,81949,81951,81953],{"class":161,"line":239},[159,81944,179],{"class":165},[159,81946,958],{"class":169},[159,81948,961],{"class":185},[159,81950,189],{"class":165},[159,81952,966],{"class":192},[159,81954,6049],{"class":165},[159,81956,81957,81959,81961,81963,81965,81967,81969,81971,81973],{"class":161,"line":245},[159,81958,179],{"class":165},[159,81960,958],{"class":169},[159,81962,6058],{"class":185},[159,81964,189],{"class":165},[159,81966,6063],{"class":192},[159,81968,984],{"class":185},[159,81970,189],{"class":165},[159,81972,6070],{"class":192},[159,81974,6049],{"class":165},[159,81976,81977,81979,81981,81983,81985,81987,81989,81991,81993],{"class":161,"line":251},[159,81978,179],{"class":165},[159,81980,958],{"class":169},[159,81982,547],{"class":185},[159,81984,189],{"class":165},[159,81986,981],{"class":192},[159,81988,984],{"class":185},[159,81990,189],{"class":165},[159,81992,989],{"class":192},[159,81994,6049],{"class":165},[159,81996,81997,81999,82001,82003,82005],{"class":161,"line":261},[159,81998,179],{"class":165},[159,82000,998],{"class":169},[159,82002,6101],{"class":165},[159,82004,998],{"class":169},[159,82006,173],{"class":165},[159,82008,82009,82011,82013],{"class":161,"line":603},[159,82010,179],{"class":165},[159,82012,1468],{"class":169},[159,82014,173],{"class":165},[159,82016,82017],{"class":161,"line":621},[159,82018,6118],{"class":165},[159,82020,82021],{"class":161,"line":634},[159,82022,6123],{"class":165},[159,82024,82025],{"class":161,"line":640},[159,82026,1508],{"class":165},[159,82028,82029],{"class":161,"line":1075},[159,82030,590],{"emptyLinePlaceholder":589},[159,82032,82033],{"class":161,"line":1081},[159,82034,6136],{"class":165},[159,82036,82037],{"class":161,"line":1091},[159,82038,6141],{"class":165},[159,82040,82041],{"class":161,"line":1100},[159,82042,6146],{"class":165},[159,82044,82045],{"class":161,"line":1123},[159,82046,6151],{"class":165},[159,82048,82049],{"class":161,"line":1132},[159,82050,1508],{"class":165},[159,82052,82053],{"class":161,"line":1139},[159,82054,590],{"emptyLinePlaceholder":589},[159,82056,82057],{"class":161,"line":1168},[159,82058,6164],{"class":165},[159,82060,82061],{"class":161,"line":1174},[159,82062,6169],{"class":165},[159,82064,82065],{"class":161,"line":1180},[159,82066,6174],{"class":165},[159,82068,82069],{"class":161,"line":1194},[159,82070,1508],{"class":165},[159,82072,82073],{"class":161,"line":1200},[159,82074,590],{"emptyLinePlaceholder":589},[159,82076,82077],{"class":161,"line":1221},[159,82078,6187],{"class":165},[159,82080,82081],{"class":161,"line":1230},[159,82082,6169],{"class":165},[159,82084,82085],{"class":161,"line":1247},[159,82086,6196],{"class":165},[159,82088,82089],{"class":161,"line":1265},[159,82090,6201],{"class":165},[159,82092,82093],{"class":161,"line":1277},[159,82094,1508],{"class":165},[159,82096,82097],{"class":161,"line":1283},[159,82098,590],{"emptyLinePlaceholder":589},[159,82100,82101],{"class":161,"line":1294},[159,82102,6214],{"class":165},[159,82104,82105],{"class":161,"line":1305},[159,82106,6219],{"class":165},[159,82108,82109],{"class":161,"line":1311},[159,82110,6224],{"class":165},[159,82112,82113],{"class":161,"line":1322},[159,82114,6229],{"class":165},[159,82116,82117],{"class":161,"line":1327},[159,82118,6234],{"class":165},[159,82120,82121],{"class":161,"line":1336},[159,82122,1508],{"class":165},[159,82124,82125],{"class":161,"line":1345},[159,82126,590],{"emptyLinePlaceholder":589},[159,82128,82129],{"class":161,"line":1350},[159,82130,6247],{"class":165},[159,82132,82133],{"class":161,"line":1764},[159,82134,6252],{"class":165},[159,82136,82137],{"class":161,"line":1769},[159,82138,6257],{"class":165},[159,82140,82141],{"class":161,"line":1777},[159,82142,6262],{"class":165},[159,82144,82145],{"class":161,"line":1788},[159,82146,6267],{"class":165},[159,82148,82149],{"class":161,"line":1802},[159,82150,1508],{"class":165},[159,82152,82153],{"class":161,"line":1815},[159,82154,590],{"emptyLinePlaceholder":589},[159,82156,82157],{"class":161,"line":1828},[159,82158,6280],{"class":165},[159,82160,82161],{"class":161,"line":1841},[159,82162,6285],{"class":165},[159,82164,82165],{"class":161,"line":1852},[159,82166,6290],{"class":165},[159,82168,82169],{"class":161,"line":1866},[159,82170,6295],{"class":165},[159,82172,82173],{"class":161,"line":1879},[159,82174,6300],{"class":165},[159,82176,82177],{"class":161,"line":1884},[159,82178,6305],{"class":165},[159,82180,82181],{"class":161,"line":1889},[159,82182,6310],{"class":165},[159,82184,82185],{"class":161,"line":1899},[159,82186,6315],{"class":165},[159,82188,82189],{"class":161,"line":1912},[159,82190,6320],{"class":165},[159,82192,82193],{"class":161,"line":1925},[159,82194,6325],{"class":165},[159,82196,82197],{"class":161,"line":1956},[159,82198,1508],{"class":165},[159,82200,82201],{"class":161,"line":1971},[159,82202,590],{"emptyLinePlaceholder":589},[159,82204,82205],{"class":161,"line":1976},[159,82206,6338],{"class":165},[159,82208,82209],{"class":161,"line":1981},[159,82210,6343],{"class":165},[159,82212,82213],{"class":161,"line":1989},[159,82214,1508],{"class":165},[159,82216,82217],{"class":161,"line":2001},[159,82218,590],{"emptyLinePlaceholder":589},[159,82220,82221],{"class":161,"line":2006},[159,82222,6356],{"class":165},[159,82224,82225],{"class":161,"line":2015},[159,82226,6361],{"class":165},[159,82228,82229],{"class":161,"line":2024},[159,82230,6315],{"class":165},[159,82232,82233],{"class":161,"line":2029},[159,82234,6370],{"class":165},[159,82236,82237],{"class":161,"line":2038},[159,82238,6375],{"class":165},[159,82240,82241],{"class":161,"line":2053},[159,82242,1508],{"class":165},[159,82244,82245],{"class":161,"line":2070},[159,82246,590],{"emptyLinePlaceholder":589},[159,82248,82249],{"class":161,"line":2095},[159,82250,6388],{"class":165},[159,82252,82253],{"class":161,"line":2104},[159,82254,6361],{"class":165},[159,82256,82257],{"class":161,"line":2120},[159,82258,6397],{"class":165},[159,82260,82261],{"class":161,"line":2134},[159,82262,6402],{"class":165},[159,82264,82265],{"class":161,"line":2143},[159,82266,6267],{"class":165},[159,82268,82269],{"class":161,"line":2165},[159,82270,6411],{"class":165},[159,82272,82273],{"class":161,"line":2178},[159,82274,1508],{"class":165},[159,82276,82277],{"class":161,"line":2191},[159,82278,590],{"emptyLinePlaceholder":589},[159,82280,82281],{"class":161,"line":2204},[159,82282,6424],{"class":165},[159,82284,82285],{"class":161,"line":2217},[159,82286,6429],{"class":165},[159,82288,82289],{"class":161,"line":2230},[159,82290,6434],{"class":165},[159,82292,82293],{"class":161,"line":2243},[159,82294,6439],{"class":165},[159,82296,82297],{"class":161,"line":2256},[159,82298,6444],{"class":165},[159,82300,82301],{"class":161,"line":2266},[159,82302,6449],{"class":165},[159,82304,82305],{"class":161,"line":2275},[159,82306,6454],{"class":165},[159,82308,82309],{"class":161,"line":2284},[159,82310,6325],{"class":165},[159,82312,82313],{"class":161,"line":2293},[159,82314,1508],{"class":165},[159,82316,82317],{"class":161,"line":2306},[159,82318,590],{"emptyLinePlaceholder":589},[159,82320,82321],{"class":161,"line":2330},[159,82322,6471],{"class":165},[159,82324,82325],{"class":161,"line":2350},[159,82326,6476],{"class":165},[159,82328,82329],{"class":161,"line":2370},[159,82330,6481],{"class":165},[159,82332,82333],{"class":161,"line":2390},[159,82334,6486],{"class":165},[159,82336,82337],{"class":161,"line":2410},[159,82338,1508],{"class":165},[159,82340,82341,82343,82345],{"class":161,"line":2430},[159,82342,254],{"class":165},[159,82344,1468],{"class":169},[159,82346,173],{"class":165},[159,82348,82349,82351,82353],{"class":161,"line":2450},[159,82350,264],{"class":165},[159,82352,949],{"class":169},[159,82354,173],{"class":165},[159,82356,82357],{"class":161,"line":2471},[159,82358,590],{"emptyLinePlaceholder":589},[159,82360,82361,82363,82365],{"class":161,"line":2477},[159,82362,166],{"class":165},[159,82364,170],{"class":169},[159,82366,173],{"class":165},[159,82368,82369,82371,82373,82375,82377,82379],{"class":161,"line":2498},[159,82370,179],{"class":165},[159,82372,182],{"class":169},[159,82374,186],{"class":185},[159,82376,189],{"class":165},[159,82378,6531],{"class":192},[159,82380,173],{"class":165},[159,82382,82383,82385,82387,82389,82391,82393],{"class":161,"line":2518},[159,82384,2056],{"class":165},[159,82386,182],{"class":169},[159,82388,186],{"class":185},[159,82390,189],{"class":165},[159,82392,2065],{"class":192},[159,82394,173],{"class":165},[159,82396,82397,82399,82401,82403,82405,82407,82409,82411,82413],{"class":161,"line":2539},[159,82398,2073],{"class":165},[159,82400,23],{"class":169},[159,82402,2078],{"class":185},[159,82404,189],{"class":165},[159,82406,6560],{"class":192},[159,82408,2086],{"class":185},[159,82410,189],{"class":165},[159,82412,552],{"class":192},[159,82414,6049],{"class":165},[159,82416,82417,82419,82421],{"class":161,"line":2561},[159,82418,1084],{"class":165},[159,82420,182],{"class":169},[159,82422,173],{"class":165},[159,82424,82425,82427,82429,82431,82433,82435],{"class":161,"line":2573},[159,82426,2056],{"class":165},[159,82428,182],{"class":169},[159,82430,186],{"class":185},[159,82432,189],{"class":165},[159,82434,2115],{"class":192},[159,82436,173],{"class":165},[159,82438,82439,82441,82443,82445,82447],{"class":161,"line":2591},[159,82440,2073],{"class":165},[159,82442,14],{"class":169},[159,82444,6599],{"class":165},[159,82446,14],{"class":169},[159,82448,173],{"class":165},[159,82450,82451,82453,82455,82457,82459,82461],{"class":161,"line":2602},[159,82452,2073],{"class":165},[159,82454,103],{"class":169},[159,82456,186],{"class":185},[159,82458,189],{"class":165},[159,82460,6616],{"class":192},[159,82462,173],{"class":165},[159,82464,82465,82467,82469,82471,82473,82475,82477,82479],{"class":161,"line":2613},[159,82466,2146],{"class":165},[159,82468,106],{"class":169},[159,82470,186],{"class":185},[159,82472,189],{"class":165},[159,82474,6631],{"class":192},[159,82476,2158],{"class":165},[159,82478,106],{"class":169},[159,82480,173],{"class":165},[159,82482,82483,82485,82487,82489,82491],{"class":161,"line":2624},[159,82484,2146],{"class":165},[159,82486,106],{"class":169},[159,82488,2158],{"class":165},[159,82490,106],{"class":169},[159,82492,173],{"class":165},[159,82494,82495,82497,82499,82501,82503],{"class":161,"line":2630},[159,82496,2146],{"class":165},[159,82498,106],{"class":169},[159,82500,2158],{"class":165},[159,82502,106],{"class":169},[159,82504,173],{"class":165},[159,82506,82507,82509,82511,82513,82515],{"class":161,"line":2636},[159,82508,2146],{"class":165},[159,82510,106],{"class":169},[159,82512,2158],{"class":165},[159,82514,106],{"class":169},[159,82516,173],{"class":165},[159,82518,82519,82521,82523,82525,82527],{"class":161,"line":2642},[159,82520,2146],{"class":165},[159,82522,106],{"class":169},[159,82524,2158],{"class":165},[159,82526,106],{"class":169},[159,82528,173],{"class":165},[159,82530,82531,82533,82535,82537,82539],{"class":161,"line":2648},[159,82532,2146],{"class":165},[159,82534,106],{"class":169},[159,82536,2158],{"class":165},[159,82538,106],{"class":169},[159,82540,173],{"class":165},[159,82542,82543,82545,82547,82549,82551],{"class":161,"line":2674},[159,82544,2146],{"class":165},[159,82546,106],{"class":169},[159,82548,2158],{"class":165},[159,82550,106],{"class":169},[159,82552,173],{"class":165},[159,82554,82555,82557,82559,82561,82563],{"class":161,"line":2689},[159,82556,2146],{"class":165},[159,82558,106],{"class":169},[159,82560,2158],{"class":165},[159,82562,106],{"class":169},[159,82564,173],{"class":165},[159,82566,82567,82569,82571],{"class":161,"line":2694},[159,82568,2259],{"class":165},[159,82570,103],{"class":169},[159,82572,173],{"class":165},[159,82574,82575,82577,82579,82581,82583,82585],{"class":161,"line":2721},[159,82576,2073],{"class":165},[159,82578,182],{"class":169},[159,82580,186],{"class":185},[159,82582,189],{"class":165},[159,82584,6742],{"class":192},[159,82586,173],{"class":165},[159,82588,82589,82591,82593,82595,82597,82599,82601,82603,82605,82607],{"class":161,"line":2726},[159,82590,2146],{"class":165},[159,82592,608],{"class":169},[159,82594,186],{"class":185},[159,82596,189],{"class":165},[159,82598,6757],{"class":192},[159,82600,6760],{"class":165},[159,82602,6763],{"class":1146},[159,82604,264],{"class":165},[159,82606,608],{"class":169},[159,82608,173],{"class":165},[159,82610,82611,82613,82615,82617,82619,82621,82623,82625,82627,82629],{"class":161,"line":2735},[159,82612,2146],{"class":165},[159,82614,608],{"class":169},[159,82616,186],{"class":185},[159,82618,189],{"class":165},[159,82620,6782],{"class":192},[159,82622,6760],{"class":165},[159,82624,6787],{"class":1146},[159,82626,264],{"class":165},[159,82628,608],{"class":169},[159,82630,173],{"class":165},[159,82632,82633,82635,82637],{"class":161,"line":2744},[159,82634,2259],{"class":165},[159,82636,182],{"class":169},[159,82638,173],{"class":165},[159,82640,82641,82643,82645],{"class":161,"line":2753},[159,82642,1084],{"class":165},[159,82644,182],{"class":169},[159,82646,173],{"class":165},[159,82648,82649,82651,82653],{"class":161,"line":2758},[159,82650,254],{"class":165},[159,82652,182],{"class":169},[159,82654,173],{"class":165},[159,82656,82657,82659,82661],{"class":161,"line":3959},[159,82658,179],{"class":165},[159,82660,228],{"class":169},[159,82662,173],{"class":165},[159,82664,82665],{"class":161,"line":3968},[159,82666,6830],{"class":165},[159,82668,82669],{"class":161,"line":3977},[159,82670,6835],{"class":165},[159,82672,82673],{"class":161,"line":3982},[159,82674,6840],{"class":165},[159,82676,82677],{"class":161,"line":6843},[159,82678,6846],{"class":165},[159,82680,82681],{"class":161,"line":6849},[159,82682,6852],{"class":165},[159,82684,82685],{"class":161,"line":6855},[159,82686,6858],{"class":165},[159,82688,82689],{"class":161,"line":6861},[159,82690,6864],{"class":165},[159,82692,82693],{"class":161,"line":6867},[159,82694,6870],{"class":165},[159,82696,82697],{"class":161,"line":6873},[159,82698,6876],{"class":165},[159,82700,82701],{"class":161,"line":6879},[159,82702,6882],{"class":165},[159,82704,82705],{"class":161,"line":6885},[159,82706,2474],{"class":165},[159,82708,82709],{"class":161,"line":6890},[159,82710,6893],{"class":165},[159,82712,82713],{"class":161,"line":6896},[159,82714,6899],{"class":165},[159,82716,82717],{"class":161,"line":6902},[159,82718,6905],{"class":165},[159,82720,82721],{"class":161,"line":6908},[159,82722,6911],{"class":165},[159,82724,82725],{"class":161,"line":6914},[159,82726,6917],{"class":165},[159,82728,82729],{"class":161,"line":6920},[159,82730,6923],{"class":165},[159,82732,82733],{"class":161,"line":6926},[159,82734,6929],{"class":165},[159,82736,82737],{"class":161,"line":6932},[159,82738,6935],{"class":165},[159,82740,82741],{"class":161,"line":6938},[159,82742,6941],{"class":165},[159,82744,82745],{"class":161,"line":6944},[159,82746,590],{"emptyLinePlaceholder":589},[159,82748,82749],{"class":161,"line":6949},[159,82750,6952],{"class":165},[159,82752,82753],{"class":161,"line":6955},[159,82754,6958],{"class":165},[159,82756,82757],{"class":161,"line":6961},[159,82758,6964],{"class":165},[159,82760,82761],{"class":161,"line":6967},[159,82762,6970],{"class":165},[159,82764,82765],{"class":161,"line":6973},[159,82766,6976],{"class":165},[159,82768,82769],{"class":161,"line":6979},[159,82770,6982],{"class":165},[159,82772,82773],{"class":161,"line":6985},[159,82774,6988],{"class":165},[159,82776,82777],{"class":161,"line":6991},[159,82778,6994],{"class":165},[159,82780,82781],{"class":161,"line":6997},[159,82782,7000],{"class":165},[159,82784,82785],{"class":161,"line":7003},[159,82786,7006],{"class":165},[159,82788,82789],{"class":161,"line":7009},[159,82790,7012],{"class":165},[159,82792,82793],{"class":161,"line":7015},[159,82794,7018],{"class":165},[159,82796,82797],{"class":161,"line":7021},[159,82798,4863],{"class":165},[159,82800,82801],{"class":161,"line":7026},[159,82802,590],{"emptyLinePlaceholder":589},[159,82804,82805],{"class":161,"line":7031},[159,82806,7034],{"class":165},[159,82808,82809],{"class":161,"line":7037},[159,82810,7040],{"class":165},[159,82812,82813],{"class":161,"line":7043},[159,82814,7046],{"class":165},[159,82816,82817],{"class":161,"line":7049},[159,82818,6941],{"class":165},[159,82820,82821],{"class":161,"line":7054},[159,82822,7057],{"class":165},[159,82824,82825],{"class":161,"line":7060},[159,82826,7063],{"class":165},[159,82828,82829],{"class":161,"line":7066},[159,82830,7069],{"class":165},[159,82832,82833],{"class":161,"line":7072},[159,82834,7075],{"class":165},[159,82836,82837],{"class":161,"line":7078},[159,82838,7081],{"class":165},[159,82840,82841],{"class":161,"line":7084},[159,82842,6988],{"class":165},[159,82844,82845],{"class":161,"line":7089},[159,82846,7092],{"class":165},[159,82848,82849],{"class":161,"line":7095},[159,82850,7000],{"class":165},[159,82852,82853],{"class":161,"line":7100},[159,82854,7006],{"class":165},[159,82856,82857],{"class":161,"line":7105},[159,82858,7012],{"class":165},[159,82860,82861],{"class":161,"line":7110},[159,82862,7018],{"class":165},[159,82864,82865],{"class":161,"line":7115},[159,82866,4863],{"class":165},[159,82868,82869],{"class":161,"line":7120},[159,82870,590],{"emptyLinePlaceholder":589},[159,82872,82873],{"class":161,"line":7125},[159,82874,7128],{"class":165},[159,82876,82877],{"class":161,"line":7131},[159,82878,7134],{"class":165},[159,82880,82881],{"class":161,"line":7137},[159,82882,7140],{"class":165},[159,82884,82885],{"class":161,"line":7143},[159,82886,7146],{"class":165},[159,82888,82889],{"class":161,"line":7149},[159,82890,7152],{"class":165},[159,82892,82893],{"class":161,"line":7155},[159,82894,7158],{"class":165},[159,82896,82897],{"class":161,"line":7161},[159,82898,7164],{"class":165},[159,82900,82901],{"class":161,"line":7167},[159,82902,7170],{"class":165},[159,82904,82905],{"class":161,"line":7173},[159,82906,7176],{"class":165},[159,82908,82909],{"class":161,"line":7179},[159,82910,1508],{"class":165},[159,82912,82913],{"class":161,"line":7184},[159,82914,590],{"emptyLinePlaceholder":589},[159,82916,82917],{"class":161,"line":7189},[159,82918,7192],{"class":165},[159,82920,82921],{"class":161,"line":7195},[159,82922,7198],{"class":165},[159,82924,82925],{"class":161,"line":7201},[159,82926,7204],{"class":165},[159,82928,82929],{"class":161,"line":7207},[159,82930,7210],{"class":165},[159,82932,82933],{"class":161,"line":7213},[159,82934,7216],{"class":165},[159,82936,82937],{"class":161,"line":7219},[159,82938,590],{"emptyLinePlaceholder":589},[159,82940,82941],{"class":161,"line":7224},[159,82942,7227],{"class":165},[159,82944,82945],{"class":161,"line":7230},[159,82946,7233],{"class":165},[159,82948,82949],{"class":161,"line":7236},[159,82950,7239],{"class":165},[159,82952,82953],{"class":161,"line":7242},[159,82954,7245],{"class":165},[159,82956,82957],{"class":161,"line":7248},[159,82958,7251],{"class":165},[159,82960,82961],{"class":161,"line":7254},[159,82962,7257],{"class":165},[159,82964,82965],{"class":161,"line":7260},[159,82966,4863],{"class":165},[159,82968,82969],{"class":161,"line":7265},[159,82970,590],{"emptyLinePlaceholder":589},[159,82972,82973],{"class":161,"line":7270},[159,82974,7273],{"class":165},[159,82976,82977],{"class":161,"line":7276},[159,82978,7239],{"class":165},[159,82980,82981],{"class":161,"line":7281},[159,82982,7284],{"class":165},[159,82984,82985],{"class":161,"line":7287},[159,82986,7251],{"class":165},[159,82988,82989],{"class":161,"line":7292},[159,82990,7295],{"class":165},[159,82992,82993],{"class":161,"line":7298},[159,82994,7301],{"class":165},[159,82996,82997],{"class":161,"line":7304},[159,82998,7307],{"class":165},[159,83000,83001],{"class":161,"line":7310},[159,83002,7313],{"class":165},[159,83004,83005],{"class":161,"line":7316},[159,83006,7319],{"class":165},[159,83008,83009],{"class":161,"line":7322},[159,83010,7325],{"class":165},[159,83012,83013],{"class":161,"line":7328},[159,83014,4863],{"class":165},[159,83016,83017,83019,83021],{"class":161,"line":7333},[159,83018,254],{"class":165},[159,83020,228],{"class":169},[159,83022,173],{"class":165},[159,83024,83025,83027,83029],{"class":161,"line":7342},[159,83026,264],{"class":165},[159,83028,170],{"class":169},[159,83030,173],{"class":165},[159,83032,83033],{"class":161,"line":7351},[159,83034,590],{"emptyLinePlaceholder":589},[159,83036,83037,83039,83041],{"class":161,"line":7356},[159,83038,264],{"class":165},[159,83040,522],{"class":169},[159,83042,173],{"class":165},[326,83044,7366],{"id":7365},[14,83046,7369],{},[151,83048,83049],{"className":520,"code":7372,"language":522,"meta":25,"style":25},[49,83050,83051,83061,83075,83079,83087,83101,83121,83141,83153,83161,83167,83177,83187,83197,83201,83205,83211,83215,83225,83229,83233,83239,83249,83261,83275,83279,83283,83291,83303,83315,83329,83341,83353,83369,83379,83383,83387,83395,83411,83415,83419,83425,83435,83445,83455,83467,83479,83495,83505,83515,83519,83523,83531,83541,83557,83569,83579,83589,83593,83597,83607,83617,83621,83629,83633,83641,83645,83653,83667,83687,83701,83727,83753,83779,83805,83831,83857,83883,83891,83899,83907,83911,83929,83947,83951,83955,83971,83975,83983,83987,83999,84003,84007,84023,84031,84043,84047,84055,84063,84067],{"__ignoreMap":25},[159,83052,83053,83055,83057,83059],{"class":161,"line":162},[159,83054,914],{"class":165},[159,83056,917],{"class":169},[159,83058,920],{"class":185},[159,83060,173],{"class":165},[159,83062,83063,83065,83067,83069,83071,83073],{"class":161,"line":176},[159,83064,166],{"class":165},[159,83066,522],{"class":169},[159,83068,931],{"class":185},[159,83070,189],{"class":165},[159,83072,936],{"class":192},[159,83074,173],{"class":165},[159,83076,83077],{"class":161,"line":203},[159,83078,590],{"emptyLinePlaceholder":589},[159,83080,83081,83083,83085],{"class":161,"line":223},[159,83082,166],{"class":165},[159,83084,949],{"class":169},[159,83086,173],{"class":165},[159,83088,83089,83091,83093,83095,83097,83099],{"class":161,"line":233},[159,83090,2056],{"class":165},[159,83092,958],{"class":169},[159,83094,961],{"class":185},[159,83096,189],{"class":165},[159,83098,966],{"class":192},[159,83100,173],{"class":165},[159,83102,83103,83105,83107,83109,83111,83113,83115,83117,83119],{"class":161,"line":239},[159,83104,2056],{"class":165},[159,83106,958],{"class":169},[159,83108,6058],{"class":185},[159,83110,189],{"class":165},[159,83112,6063],{"class":192},[159,83114,984],{"class":185},[159,83116,189],{"class":165},[159,83118,6070],{"class":192},[159,83120,173],{"class":165},[159,83122,83123,83125,83127,83129,83131,83133,83135,83137,83139],{"class":161,"line":245},[159,83124,2056],{"class":165},[159,83126,958],{"class":169},[159,83128,547],{"class":185},[159,83130,189],{"class":165},[159,83132,981],{"class":192},[159,83134,984],{"class":185},[159,83136,189],{"class":165},[159,83138,989],{"class":192},[159,83140,173],{"class":165},[159,83142,83143,83145,83147,83149,83151],{"class":161,"line":251},[159,83144,2056],{"class":165},[159,83146,998],{"class":169},[159,83148,1001],{"class":165},[159,83150,998],{"class":169},[159,83152,173],{"class":165},[159,83154,83155,83157,83159],{"class":161,"line":261},[159,83156,2056],{"class":165},[159,83158,1468],{"class":169},[159,83160,173],{"class":165},[159,83162,83163,83165],{"class":161,"line":603},[159,83164,7489],{"class":169},[159,83166,1478],{"class":165},[159,83168,83169,83171,83173,83175],{"class":161,"line":621},[159,83170,7496],{"class":1146},[159,83172,1486],{"class":165},[159,83174,1489],{"class":1146},[159,83176,1492],{"class":165},[159,83178,83179,83181,83183,83185],{"class":161,"line":634},[159,83180,7507],{"class":1146},[159,83182,1486],{"class":165},[159,83184,1489],{"class":1146},[159,83186,1492],{"class":165},[159,83188,83189,83191,83193,83195],{"class":161,"line":640},[159,83190,7518],{"class":1146},[159,83192,1486],{"class":165},[159,83194,7523],{"class":1146},[159,83196,1492],{"class":165},[159,83198,83199],{"class":161,"line":1075},[159,83200,7530],{"class":165},[159,83202,83203],{"class":161,"line":1081},[159,83204,590],{"emptyLinePlaceholder":589},[159,83206,83207,83209],{"class":161,"line":1091},[159,83208,7539],{"class":169},[159,83210,1478],{"class":165},[159,83212,83213],{"class":161,"line":1100},[159,83214,590],{"emptyLinePlaceholder":589},[159,83216,83217,83219,83221,83223],{"class":161,"line":1123},[159,83218,7550],{"class":1146},[159,83220,1486],{"class":165},[159,83222,1529],{"class":1146},[159,83224,1492],{"class":165},[159,83226,83227],{"class":161,"line":1132},[159,83228,7530],{"class":165},[159,83230,83231],{"class":161,"line":1139},[159,83232,590],{"emptyLinePlaceholder":589},[159,83234,83235,83237],{"class":161,"line":1168},[159,83236,7569],{"class":185},[159,83238,1478],{"class":165},[159,83240,83241,83243,83245,83247],{"class":161,"line":1174},[159,83242,7576],{"class":1146},[159,83244,1486],{"class":165},[159,83246,1556],{"class":1146},[159,83248,1492],{"class":165},[159,83250,83251,83253,83255,83257,83259],{"class":161,"line":1180},[159,83252,7587],{"class":1146},[159,83254,1486],{"class":165},[159,83256,7592],{"class":1146},[159,83258,1571],{"class":1142},[159,83260,1492],{"class":165},[159,83262,83263,83265,83267,83269,83271,83273],{"class":161,"line":1194},[159,83264,7496],{"class":1146},[159,83266,1486],{"class":165},[159,83268,1596],{"class":1146},[159,83270,1571],{"class":1142},[159,83272,1601],{"class":1146},[159,83274,1492],{"class":165},[159,83276,83277],{"class":161,"line":1200},[159,83278,7530],{"class":165},[159,83280,83281],{"class":161,"line":1221},[159,83282,590],{"emptyLinePlaceholder":589},[159,83284,83285,83287,83289],{"class":161,"line":1230},[159,83286,7569],{"class":185},[159,83288,7625],{"class":169},[159,83290,1478],{"class":165},[159,83292,83293,83295,83297,83299,83301],{"class":161,"line":1247},[159,83294,7587],{"class":1146},[159,83296,1486],{"class":165},[159,83298,7592],{"class":1146},[159,83300,1571],{"class":1142},[159,83302,1492],{"class":165},[159,83304,83305,83307,83309,83311,83313],{"class":161,"line":1265},[159,83306,7644],{"class":1146},[159,83308,1486],{"class":165},[159,83310,7649],{"class":1146},[159,83312,1571],{"class":1142},[159,83314,1492],{"class":165},[159,83316,83317,83319,83321,83323,83325,83327],{"class":161,"line":1277},[159,83318,7507],{"class":1146},[159,83320,1486],{"class":165},[159,83322,1489],{"class":1146},[159,83324,7664],{"class":1146},[159,83326,1571],{"class":1142},[159,83328,1492],{"class":165},[159,83330,83331,83333,83335,83337,83339],{"class":161,"line":1283},[159,83332,7673],{"class":1146},[159,83334,1486],{"class":165},[159,83336,7678],{"class":1146},[159,83338,1571],{"class":1142},[159,83340,1492],{"class":165},[159,83342,83343,83345,83347,83349,83351],{"class":161,"line":1294},[159,83344,7687],{"class":1146},[159,83346,1486],{"class":165},[159,83348,7649],{"class":1146},[159,83350,1571],{"class":1142},[159,83352,1492],{"class":165},[159,83354,83355,83357,83359,83361,83363,83365,83367],{"class":161,"line":1305},[159,83356,7700],{"class":1146},[159,83358,1486],{"class":165},[159,83360,4932],{"class":1146},[159,83362,1571],{"class":1142},[159,83364,7709],{"class":1146},[159,83366,7712],{"class":1146},[159,83368,1492],{"class":165},[159,83370,83371,83373,83375,83377],{"class":161,"line":1311},[159,83372,7719],{"class":1146},[159,83374,1486],{"class":165},[159,83376,1529],{"class":1146},[159,83378,1492],{"class":165},[159,83380,83381],{"class":161,"line":1322},[159,83382,7530],{"class":165},[159,83384,83385],{"class":161,"line":1327},[159,83386,590],{"emptyLinePlaceholder":589},[159,83388,83389,83391,83393],{"class":161,"line":1336},[159,83390,7569],{"class":185},[159,83392,7740],{"class":185},[159,83394,1478],{"class":165},[159,83396,83397,83399,83401,83403,83405,83407,83409],{"class":161,"line":1345},[159,83398,7700],{"class":1146},[159,83400,1486],{"class":165},[159,83402,4932],{"class":1146},[159,83404,1571],{"class":1142},[159,83406,7709],{"class":1146},[159,83408,7757],{"class":1146},[159,83410,1492],{"class":165},[159,83412,83413],{"class":161,"line":1350},[159,83414,7530],{"class":165},[159,83416,83417],{"class":161,"line":1764},[159,83418,590],{"emptyLinePlaceholder":589},[159,83420,83421,83423],{"class":161,"line":1769},[159,83422,7772],{"class":185},[159,83424,1478],{"class":165},[159,83426,83427,83429,83431,83433],{"class":161,"line":1777},[159,83428,7779],{"class":1146},[159,83430,1486],{"class":165},[159,83432,1529],{"class":1146},[159,83434,1492],{"class":165},[159,83436,83437,83439,83441,83443],{"class":161,"line":1788},[159,83438,7576],{"class":1146},[159,83440,1486],{"class":165},[159,83442,1627],{"class":1146},[159,83444,1492],{"class":165},[159,83446,83447,83449,83451,83453],{"class":161,"line":1802},[159,83448,7800],{"class":1146},[159,83450,1486],{"class":165},[159,83452,1489],{"class":1146},[159,83454,1492],{"class":165},[159,83456,83457,83459,83461,83463,83465],{"class":161,"line":1815},[159,83458,7811],{"class":1146},[159,83460,1486],{"class":165},[159,83462,7649],{"class":1146},[159,83464,1571],{"class":1142},[159,83466,1492],{"class":165},[159,83468,83469,83471,83473,83475,83477],{"class":161,"line":1828},[159,83470,7587],{"class":1146},[159,83472,1486],{"class":165},[159,83474,7592],{"class":1146},[159,83476,1571],{"class":1142},[159,83478,1492],{"class":165},[159,83480,83481,83483,83485,83487,83489,83491,83493],{"class":161,"line":1841},[159,83482,7700],{"class":1146},[159,83484,1486],{"class":165},[159,83486,4932],{"class":1146},[159,83488,1571],{"class":1142},[159,83490,7709],{"class":1146},[159,83492,7757],{"class":1146},[159,83494,1492],{"class":165},[159,83496,83497,83499,83501,83503],{"class":161,"line":1852},[159,83498,7852],{"class":1146},[159,83500,1486],{"class":165},[159,83502,1489],{"class":1146},[159,83504,1492],{"class":165},[159,83506,83507,83509,83511,83513],{"class":161,"line":1866},[159,83508,7863],{"class":1146},[159,83510,1486],{"class":165},[159,83512,7868],{"class":1146},[159,83514,1492],{"class":165},[159,83516,83517],{"class":161,"line":1879},[159,83518,7530],{"class":165},[159,83520,83521],{"class":161,"line":1884},[159,83522,590],{"emptyLinePlaceholder":589},[159,83524,83525,83527,83529],{"class":161,"line":1889},[159,83526,7772],{"class":185},[159,83528,7885],{"class":169},[159,83530,1478],{"class":165},[159,83532,83533,83535,83537,83539],{"class":161,"line":1899},[159,83534,7779],{"class":1146},[159,83536,1486],{"class":165},[159,83538,7896],{"class":1146},[159,83540,1492],{"class":165},[159,83542,83543,83545,83547,83549,83551,83553,83555],{"class":161,"line":1912},[159,83544,7507],{"class":1146},[159,83546,1486],{"class":165},[159,83548,7907],{"class":1146},[159,83550,1571],{"class":1142},[159,83552,7912],{"class":1146},[159,83554,1571],{"class":1142},[159,83556,1492],{"class":165},[159,83558,83559,83561,83563,83565,83567],{"class":161,"line":1925},[159,83560,7673],{"class":1146},[159,83562,1486],{"class":165},[159,83564,7925],{"class":1146},[159,83566,1571],{"class":1142},[159,83568,1492],{"class":165},[159,83570,83571,83573,83575,83577],{"class":161,"line":1956},[159,83572,7934],{"class":1146},[159,83574,1486],{"class":165},[159,83576,7939],{"class":1146},[159,83578,1492],{"class":165},[159,83580,83581,83583,83585,83587],{"class":161,"line":1971},[159,83582,7946],{"class":1146},[159,83584,1486],{"class":165},[159,83586,1529],{"class":1146},[159,83588,1492],{"class":165},[159,83590,83591],{"class":161,"line":1976},[159,83592,7530],{"class":165},[159,83594,83595],{"class":161,"line":1981},[159,83596,590],{"emptyLinePlaceholder":589},[159,83598,83599,83601,83603,83605],{"class":161,"line":1989},[159,83600,7772],{"class":185},[159,83602,7885],{"class":169},[159,83604,7969],{"class":185},[159,83606,1478],{"class":165},[159,83608,83609,83611,83613,83615],{"class":161,"line":2001},[159,83610,7976],{"class":1146},[159,83612,1486],{"class":165},[159,83614,7981],{"class":1146},[159,83616,1492],{"class":165},[159,83618,83619],{"class":161,"line":2006},[159,83620,7530],{"class":165},[159,83622,83623,83625,83627],{"class":161,"line":2015},[159,83624,1084],{"class":165},[159,83626,1468],{"class":169},[159,83628,173],{"class":165},[159,83630,83631],{"class":161,"line":2024},[159,83632,590],{"emptyLinePlaceholder":589},[159,83634,83635,83637,83639],{"class":161,"line":2029},[159,83636,264],{"class":165},[159,83638,949],{"class":169},[159,83640,173],{"class":165},[159,83642,83643],{"class":161,"line":2038},[159,83644,590],{"emptyLinePlaceholder":589},[159,83646,83647,83649,83651],{"class":161,"line":2053},[159,83648,166],{"class":165},[159,83650,170],{"class":169},[159,83652,173],{"class":165},[159,83654,83655,83657,83659,83661,83663,83665],{"class":161,"line":2070},[159,83656,2056],{"class":165},[159,83658,182],{"class":169},[159,83660,186],{"class":185},[159,83662,189],{"class":165},[159,83664,8032],{"class":192},[159,83666,173],{"class":165},[159,83668,83669,83671,83673,83675,83677,83679,83681,83683,83685],{"class":161,"line":2095},[159,83670,2146],{"class":165},[159,83672,536],{"class":169},[159,83674,539],{"class":185},[159,83676,189],{"class":165},[159,83678,8047],{"class":192},[159,83680,8050],{"class":185},[159,83682,189],{"class":165},[159,83684,8055],{"class":192},[159,83686,173],{"class":165},[159,83688,83689,83691,83693,83695,83697,83699],{"class":161,"line":2104},[159,83690,2146],{"class":165},[159,83692,103],{"class":169},[159,83694,186],{"class":185},[159,83696,189],{"class":165},[159,83698,8070],{"class":192},[159,83700,173],{"class":165},[159,83702,83703,83705,83707,83709,83711,83713,83715,83717,83719,83721,83723,83725],{"class":161,"line":2120},[159,83704,8077],{"class":165},[159,83706,106],{"class":169},[159,83708,8082],{"class":165},[159,83710,8085],{"class":169},[159,83712,8088],{"class":185},[159,83714,189],{"class":165},[159,83716,8093],{"class":192},[159,83718,8096],{"class":165},[159,83720,8085],{"class":169},[159,83722,2158],{"class":165},[159,83724,106],{"class":169},[159,83726,173],{"class":165},[159,83728,83729,83731,83733,83735,83737,83739,83741,83743,83745,83747,83749,83751],{"class":161,"line":2134},[159,83730,8077],{"class":165},[159,83732,106],{"class":169},[159,83734,8082],{"class":165},[159,83736,8085],{"class":169},[159,83738,8088],{"class":185},[159,83740,189],{"class":165},[159,83742,8093],{"class":192},[159,83744,8123],{"class":165},[159,83746,8085],{"class":169},[159,83748,2158],{"class":165},[159,83750,106],{"class":169},[159,83752,173],{"class":165},[159,83754,83755,83757,83759,83761,83763,83765,83767,83769,83771,83773,83775,83777],{"class":161,"line":2143},[159,83756,8077],{"class":165},[159,83758,106],{"class":169},[159,83760,8082],{"class":165},[159,83762,8085],{"class":169},[159,83764,8088],{"class":185},[159,83766,189],{"class":165},[159,83768,8093],{"class":192},[159,83770,8150],{"class":165},[159,83772,8085],{"class":169},[159,83774,2158],{"class":165},[159,83776,106],{"class":169},[159,83778,173],{"class":165},[159,83780,83781,83783,83785,83787,83789,83791,83793,83795,83797,83799,83801,83803],{"class":161,"line":2165},[159,83782,8077],{"class":165},[159,83784,106],{"class":169},[159,83786,8082],{"class":165},[159,83788,8085],{"class":169},[159,83790,8088],{"class":185},[159,83792,189],{"class":165},[159,83794,8093],{"class":192},[159,83796,8177],{"class":165},[159,83798,8085],{"class":169},[159,83800,2158],{"class":165},[159,83802,106],{"class":169},[159,83804,173],{"class":165},[159,83806,83807,83809,83811,83813,83815,83817,83819,83821,83823,83825,83827,83829],{"class":161,"line":2178},[159,83808,8077],{"class":165},[159,83810,106],{"class":169},[159,83812,8082],{"class":165},[159,83814,8085],{"class":169},[159,83816,8088],{"class":185},[159,83818,189],{"class":165},[159,83820,8093],{"class":192},[159,83822,8204],{"class":165},[159,83824,8085],{"class":169},[159,83826,2158],{"class":165},[159,83828,106],{"class":169},[159,83830,173],{"class":165},[159,83832,83833,83835,83837,83839,83841,83843,83845,83847,83849,83851,83853,83855],{"class":161,"line":2191},[159,83834,8077],{"class":165},[159,83836,106],{"class":169},[159,83838,8082],{"class":165},[159,83840,8085],{"class":169},[159,83842,8088],{"class":185},[159,83844,189],{"class":165},[159,83846,8093],{"class":192},[159,83848,8231],{"class":165},[159,83850,8085],{"class":169},[159,83852,2158],{"class":165},[159,83854,106],{"class":169},[159,83856,173],{"class":165},[159,83858,83859,83861,83863,83865,83867,83869,83871,83873,83875,83877,83879,83881],{"class":161,"line":2204},[159,83860,8077],{"class":165},[159,83862,106],{"class":169},[159,83864,8082],{"class":165},[159,83866,8085],{"class":169},[159,83868,8088],{"class":185},[159,83870,189],{"class":165},[159,83872,8093],{"class":192},[159,83874,8258],{"class":165},[159,83876,8085],{"class":169},[159,83878,2158],{"class":165},[159,83880,106],{"class":169},[159,83882,173],{"class":165},[159,83884,83885,83887,83889],{"class":161,"line":2217},[159,83886,8271],{"class":165},[159,83888,103],{"class":169},[159,83890,173],{"class":165},[159,83892,83893,83895,83897],{"class":161,"line":2230},[159,83894,1084],{"class":165},[159,83896,182],{"class":169},[159,83898,173],{"class":165},[159,83900,83901,83903,83905],{"class":161,"line":2243},[159,83902,2056],{"class":165},[159,83904,228],{"class":169},[159,83906,173],{"class":165},[159,83908,83909],{"class":161,"line":2256},[159,83910,8296],{"class":1135},[159,83912,83913,83915,83917,83919,83921,83923,83925,83927],{"class":161,"line":2266},[159,83914,8301],{"class":1142},[159,83916,7625],{"class":1146},[159,83918,1150],{"class":1142},[159,83920,1153],{"class":165},[159,83922,1156],{"class":185},[159,83924,1159],{"class":165},[159,83926,8314],{"class":192},[159,83928,1165],{"class":165},[159,83930,83931,83933,83935,83937,83939,83941,83943,83945],{"class":161,"line":2275},[159,83932,8301],{"class":1142},[159,83934,8323],{"class":1146},[159,83936,1150],{"class":1142},[159,83938,1153],{"class":165},[159,83940,1156],{"class":185},[159,83942,1159],{"class":165},[159,83944,8334],{"class":192},[159,83946,1165],{"class":165},[159,83948,83949],{"class":161,"line":2284},[159,83950,8341],{"class":1135},[159,83952,83953],{"class":161,"line":2293},[159,83954,8346],{"class":1135},[159,83956,83957,83959,83961,83963,83965,83967,83969],{"class":161,"line":2306},[159,83958,8351],{"class":165},[159,83960,4724],{"class":185},[159,83962,1159],{"class":165},[159,83964,8358],{"class":192},[159,83966,1939],{"class":165},[159,83968,1215],{"class":1142},[159,83970,1218],{"class":165},[159,83972,83973],{"class":161,"line":2330},[159,83974,8369],{"class":1135},[159,83976,83977,83979,83981],{"class":161,"line":2350},[159,83978,8374],{"class":165},[159,83980,189],{"class":1142},[159,83982,8379],{"class":192},[159,83984,83985],{"class":161,"line":2370},[159,83986,8384],{"class":1135},[159,83988,83989,83991,83993,83995,83997],{"class":161,"line":2390},[159,83990,8389],{"class":165},[159,83992,2680],{"class":185},[159,83994,1159],{"class":165},[159,83996,8396],{"class":192},[159,83998,1165],{"class":165},[159,84000,84001],{"class":161,"line":2410},[159,84002,8403],{"class":165},[159,84004,84005],{"class":161,"line":2430},[159,84006,8408],{"class":1135},[159,84008,84009,84011,84013,84015,84017,84019,84021],{"class":161,"line":2450},[159,84010,8351],{"class":165},[159,84012,4724],{"class":185},[159,84014,1159],{"class":165},[159,84016,8419],{"class":192},[159,84018,1939],{"class":165},[159,84020,1215],{"class":1142},[159,84022,1218],{"class":165},[159,84024,84025,84027,84029],{"class":161,"line":2471},[159,84026,8374],{"class":165},[159,84028,189],{"class":1142},[159,84030,8434],{"class":192},[159,84032,84033,84035,84037,84039,84041],{"class":161,"line":2477},[159,84034,8389],{"class":165},[159,84036,3903],{"class":185},[159,84038,1159],{"class":165},[159,84040,8396],{"class":192},[159,84042,1165],{"class":165},[159,84044,84045],{"class":161,"line":2498},[159,84046,8403],{"class":165},[159,84048,84049,84051,84053],{"class":161,"line":2518},[159,84050,1084],{"class":165},[159,84052,228],{"class":169},[159,84054,173],{"class":165},[159,84056,84057,84059,84061],{"class":161,"line":2539},[159,84058,264],{"class":165},[159,84060,170],{"class":169},[159,84062,173],{"class":165},[159,84064,84065],{"class":161,"line":2561},[159,84066,590],{"emptyLinePlaceholder":589},[159,84068,84069,84071,84073],{"class":161,"line":2573},[159,84070,264],{"class":165},[159,84072,522],{"class":169},[159,84074,173],{"class":165},[326,84076,8482],{"id":8481},[14,84078,8485],{},[14,84080,8488],{},[14,84082,8491],{},[958,84084],{"charSet":8494},[958,84086],{"name":8497,"content":8498},[998,84088,8501],{},[1468,84090,8504],{},[536,84092],{"type":8507},[103,84094,84095,84097],{},[106,84096,8512],{},[106,84098,8515],{},[151,84100,84101],{"className":520,"code":8518,"language":522,"meta":25,"style":25},[49,84102,84103,84113,84127,84131,84139,84153,84173,84193,84205,84213,84219,84231,84243,84253,84263,84267,84271,84277,84289,84301,84313,84323,84347,84359,84363,84367,84375,84385,84395,84405,84415,84427,84437,84449,84463,84475,84479,84483,84493,84503,84513,84525,84529,84533,84541,84551,84561,84571,84583,84595,84607,84617,84621,84625,84633,84645,84655,84667,84677,84691,84695,84699,84705,84717,84729,84739,84743,84747,84755,84767,84777,84781,84785,84795,84805,84821,84833,84837,84841,84851,84861,84865,84869,84879,84889,84901,84911,84915,84919,84929,84939,84953,84957,84961,84971,84981,84993,84997,85005,85013,85017,85025,85039,85057,85093,85105,85113,85127,85145,85153,85167,85187,85205,85219,85237,85255,85273,85281,85289,85297,85305,85323,85341,85345,85361,85369,85373,85377,85393,85401,85405,85409,85425,85429,85449,85453,85457,85461,85465,85473,85481,85485],{"__ignoreMap":25},[159,84104,84105,84107,84109,84111],{"class":161,"line":162},[159,84106,914],{"class":165},[159,84108,917],{"class":169},[159,84110,920],{"class":185},[159,84112,173],{"class":165},[159,84114,84115,84117,84119,84121,84123,84125],{"class":161,"line":176},[159,84116,166],{"class":165},[159,84118,522],{"class":169},[159,84120,931],{"class":185},[159,84122,189],{"class":165},[159,84124,936],{"class":192},[159,84126,173],{"class":165},[159,84128,84129],{"class":161,"line":203},[159,84130,590],{"emptyLinePlaceholder":589},[159,84132,84133,84135,84137],{"class":161,"line":223},[159,84134,166],{"class":165},[159,84136,949],{"class":169},[159,84138,173],{"class":165},[159,84140,84141,84143,84145,84147,84149,84151],{"class":161,"line":233},[159,84142,179],{"class":165},[159,84144,958],{"class":169},[159,84146,961],{"class":185},[159,84148,189],{"class":165},[159,84150,966],{"class":192},[159,84152,173],{"class":165},[159,84154,84155,84157,84159,84161,84163,84165,84167,84169,84171],{"class":161,"line":239},[159,84156,179],{"class":165},[159,84158,958],{"class":169},[159,84160,6058],{"class":185},[159,84162,189],{"class":165},[159,84164,6063],{"class":192},[159,84166,984],{"class":185},[159,84168,189],{"class":165},[159,84170,6070],{"class":192},[159,84172,173],{"class":165},[159,84174,84175,84177,84179,84181,84183,84185,84187,84189,84191],{"class":161,"line":245},[159,84176,179],{"class":165},[159,84178,958],{"class":169},[159,84180,547],{"class":185},[159,84182,189],{"class":165},[159,84184,981],{"class":192},[159,84186,984],{"class":185},[159,84188,189],{"class":165},[159,84190,989],{"class":192},[159,84192,173],{"class":165},[159,84194,84195,84197,84199,84201,84203],{"class":161,"line":251},[159,84196,179],{"class":165},[159,84198,998],{"class":169},[159,84200,8619],{"class":165},[159,84202,998],{"class":169},[159,84204,173],{"class":165},[159,84206,84207,84209,84211],{"class":161,"line":261},[159,84208,179],{"class":165},[159,84210,1468],{"class":169},[159,84212,173],{"class":165},[159,84214,84215,84217],{"class":161,"line":603},[159,84216,8636],{"class":185},[159,84218,1478],{"class":165},[159,84220,84221,84223,84225,84227,84229],{"class":161,"line":621},[159,84222,8643],{"class":1146},[159,84224,1486],{"class":165},[159,84226,8648],{"class":1146},[159,84228,1571],{"class":1142},[159,84230,1492],{"class":165},[159,84232,84233,84235,84237,84239,84241],{"class":161,"line":634},[159,84234,8657],{"class":1146},[159,84236,1486],{"class":165},[159,84238,8662],{"class":1146},[159,84240,1571],{"class":1142},[159,84242,1492],{"class":165},[159,84244,84245,84247,84249,84251],{"class":161,"line":640},[159,84246,1818],{"class":1146},[159,84248,1486],{"class":165},[159,84250,1823],{"class":1146},[159,84252,1492],{"class":165},[159,84254,84255,84257,84259,84261],{"class":161,"line":1075},[159,84256,1831],{"class":1146},[159,84258,1486],{"class":165},[159,84260,8685],{"class":1146},[159,84262,1492],{"class":165},[159,84264,84265],{"class":161,"line":1081},[159,84266,1508],{"class":165},[159,84268,84269],{"class":161,"line":1091},[159,84270,590],{"emptyLinePlaceholder":589},[159,84272,84273,84275],{"class":161,"line":1100},[159,84274,8700],{"class":185},[159,84276,1478],{"class":165},[159,84278,84279,84281,84283,84285,84287],{"class":161,"line":1123},[159,84280,1563],{"class":1146},[159,84282,1486],{"class":165},[159,84284,7649],{"class":1146},[159,84286,1571],{"class":1142},[159,84288,1492],{"class":165},[159,84290,84291,84293,84295,84297,84299],{"class":161,"line":1132},[159,84292,1578],{"class":1146},[159,84294,1486],{"class":165},[159,84296,7649],{"class":1146},[159,84298,1571],{"class":1142},[159,84300,1492],{"class":165},[159,84302,84303,84305,84307,84309,84311],{"class":161,"line":1139},[159,84304,1959],{"class":1146},[159,84306,1486],{"class":165},[159,84308,4230],{"class":1146},[159,84310,1662],{"class":1142},[159,84312,1492],{"class":165},[159,84314,84315,84317,84319,84321],{"class":161,"line":1168},[159,84316,8743],{"class":1146},[159,84318,1486],{"class":165},[159,84320,8748],{"class":1146},[159,84322,1492],{"class":165},[159,84324,84325,84327,84329,84331,84333,84335,84337,84339,84341,84343,84345],{"class":161,"line":1174},[159,84326,8755],{"class":1146},[159,84328,1486],{"class":165},[159,84330,8760],{"class":1146},[159,84332,1159],{"class":165},[159,84334,8766],{"class":8765},[159,84336,2710],{"class":165},[159,84338,8771],{"class":1146},[159,84340,8774],{"class":1146},[159,84342,8777],{"class":165},[159,84344,8780],{"class":1146},[159,84346,1492],{"class":165},[159,84348,84349,84351,84353,84355,84357],{"class":161,"line":1180},[159,84350,8787],{"class":1146},[159,84352,1486],{"class":165},[159,84354,1739],{"class":1146},[159,84356,1571],{"class":1142},[159,84358,1492],{"class":165},[159,84360,84361],{"class":161,"line":1194},[159,84362,1508],{"class":165},[159,84364,84365],{"class":161,"line":1200},[159,84366,590],{"emptyLinePlaceholder":589},[159,84368,84369,84371,84373],{"class":161,"line":1221},[159,84370,8636],{"class":185},[159,84372,8810],{"class":169},[159,84374,1478],{"class":165},[159,84376,84377,84379,84381,84383],{"class":161,"line":1230},[159,84378,8817],{"class":1146},[159,84380,1486],{"class":165},[159,84382,1529],{"class":1146},[159,84384,1492],{"class":165},[159,84386,84387,84389,84391,84393],{"class":161,"line":1247},[159,84388,8828],{"class":1146},[159,84390,1486],{"class":165},[159,84392,8833],{"class":1146},[159,84394,1492],{"class":165},[159,84396,84397,84399,84401,84403],{"class":161,"line":1265},[159,84398,8840],{"class":1146},[159,84400,1486],{"class":165},[159,84402,1529],{"class":1146},[159,84404,1492],{"class":165},[159,84406,84407,84409,84411,84413],{"class":161,"line":1277},[159,84408,8755],{"class":1146},[159,84410,1486],{"class":165},[159,84412,8855],{"class":1146},[159,84414,1492],{"class":165},[159,84416,84417,84419,84421,84423,84425],{"class":161,"line":1283},[159,84418,1959],{"class":1146},[159,84420,1486],{"class":165},[159,84422,8866],{"class":1146},[159,84424,1571],{"class":1142},[159,84426,1492],{"class":165},[159,84428,84429,84431,84433,84435],{"class":161,"line":1294},[159,84430,8875],{"class":1146},[159,84432,1486],{"class":165},[159,84434,4932],{"class":1146},[159,84436,1492],{"class":165},[159,84438,84439,84441,84443,84445,84447],{"class":161,"line":1305},[159,84440,1483],{"class":1146},[159,84442,1486],{"class":165},[159,84444,1964],{"class":1146},[159,84446,1571],{"class":1142},[159,84448,1492],{"class":165},[159,84450,84451,84453,84455,84457,84459,84461],{"class":161,"line":1311},[159,84452,8898],{"class":1146},[159,84454,1486],{"class":165},[159,84456,8903],{"class":1146},[159,84458,8906],{"class":1146},[159,84460,8909],{"class":1142},[159,84462,1492],{"class":165},[159,84464,84465,84467,84469,84471,84473],{"class":161,"line":1322},[159,84466,1578],{"class":1146},[159,84468,1486],{"class":165},[159,84470,8920],{"class":1146},[159,84472,1571],{"class":1142},[159,84474,1492],{"class":165},[159,84476,84477],{"class":161,"line":1327},[159,84478,1508],{"class":165},[159,84480,84481],{"class":161,"line":1336},[159,84482,590],{"emptyLinePlaceholder":589},[159,84484,84485,84487,84489,84491],{"class":161,"line":1345},[159,84486,8636],{"class":185},[159,84488,8810],{"class":169},[159,84490,8941],{"class":185},[159,84492,1478],{"class":165},[159,84494,84495,84497,84499,84501],{"class":161,"line":1350},[159,84496,8828],{"class":1146},[159,84498,1486],{"class":165},[159,84500,8952],{"class":1146},[159,84502,1492],{"class":165},[159,84504,84505,84507,84509,84511],{"class":161,"line":1764},[159,84506,8755],{"class":1146},[159,84508,1486],{"class":165},[159,84510,7868],{"class":1146},[159,84512,1492],{"class":165},[159,84514,84515,84517,84519,84521,84523],{"class":161,"line":1769},[159,84516,1578],{"class":1146},[159,84518,1486],{"class":165},[159,84520,4230],{"class":1146},[159,84522,1571],{"class":1142},[159,84524,1492],{"class":165},[159,84526,84527],{"class":161,"line":1777},[159,84528,1508],{"class":165},[159,84530,84531],{"class":161,"line":1788},[159,84532,590],{"emptyLinePlaceholder":589},[159,84534,84535,84537,84539],{"class":161,"line":1802},[159,84536,8636],{"class":185},[159,84538,4373],{"class":169},[159,84540,1478],{"class":165},[159,84542,84543,84545,84547,84549],{"class":161,"line":1815},[159,84544,8755],{"class":1146},[159,84546,1486],{"class":165},[159,84548,9001],{"class":1146},[159,84550,1492],{"class":165},[159,84552,84553,84555,84557,84559],{"class":161,"line":1828},[159,84554,4322],{"class":1146},[159,84556,1486],{"class":165},[159,84558,7868],{"class":1146},[159,84560,1492],{"class":165},[159,84562,84563,84565,84567,84569],{"class":161,"line":1841},[159,84564,9018],{"class":1146},[159,84566,1486],{"class":165},[159,84568,1529],{"class":1146},[159,84570,1492],{"class":165},[159,84572,84573,84575,84577,84579,84581],{"class":161,"line":1852},[159,84574,1959],{"class":1146},[159,84576,1486],{"class":165},[159,84578,8866],{"class":1146},[159,84580,1571],{"class":1142},[159,84582,1492],{"class":165},[159,84584,84585,84587,84589,84591,84593],{"class":161,"line":1866},[159,84586,9041],{"class":1146},[159,84588,1486],{"class":165},[159,84590,1964],{"class":1146},[159,84592,1571],{"class":1142},[159,84594,1492],{"class":165},[159,84596,84597,84599,84601,84603,84605],{"class":161,"line":1879},[159,84598,1563],{"class":1146},[159,84600,1486],{"class":165},[159,84602,9058],{"class":1146},[159,84604,1571],{"class":1142},[159,84606,1492],{"class":165},[159,84608,84609,84611,84613,84615],{"class":161,"line":1884},[159,84610,9067],{"class":1146},[159,84612,1486],{"class":165},[159,84614,9072],{"class":1146},[159,84616,1492],{"class":165},[159,84618,84619],{"class":161,"line":1889},[159,84620,1508],{"class":165},[159,84622,84623],{"class":161,"line":1899},[159,84624,590],{"emptyLinePlaceholder":589},[159,84626,84627,84629,84631],{"class":161,"line":1912},[159,84628,8636],{"class":185},[159,84630,9089],{"class":185},[159,84632,1478],{"class":165},[159,84634,84635,84637,84639,84641,84643],{"class":161,"line":1925},[159,84636,8787],{"class":1146},[159,84638,1486],{"class":165},[159,84640,9100],{"class":1146},[159,84642,1571],{"class":1142},[159,84644,1492],{"class":165},[159,84646,84647,84649,84651,84653],{"class":161,"line":1956},[159,84648,4322],{"class":1146},[159,84650,1486],{"class":165},[159,84652,9113],{"class":1146},[159,84654,1492],{"class":165},[159,84656,84657,84659,84661,84663,84665],{"class":161,"line":1971},[159,84658,9120],{"class":1146},[159,84660,1486],{"class":165},[159,84662,1753],{"class":1146},[159,84664,1571],{"class":1142},[159,84666,1492],{"class":165},[159,84668,84669,84671,84673,84675],{"class":161,"line":1976},[159,84670,9133],{"class":1146},[159,84672,1486],{"class":165},[159,84674,1489],{"class":1146},[159,84676,1492],{"class":165},[159,84678,84679,84681,84683,84685,84687,84689],{"class":161,"line":1981},[159,84680,8898],{"class":1146},[159,84682,1486],{"class":165},[159,84684,8903],{"class":1146},[159,84686,8906],{"class":1146},[159,84688,8909],{"class":1142},[159,84690,1492],{"class":165},[159,84692,84693],{"class":161,"line":1989},[159,84694,1508],{"class":165},[159,84696,84697],{"class":161,"line":2001},[159,84698,590],{"emptyLinePlaceholder":589},[159,84700,84701,84703],{"class":161,"line":2006},[159,84702,9166],{"class":185},[159,84704,1478],{"class":165},[159,84706,84707,84709,84711,84713,84715],{"class":161,"line":2015},[159,84708,8643],{"class":1146},[159,84710,1486],{"class":165},[159,84712,8648],{"class":1146},[159,84714,1571],{"class":1142},[159,84716,1492],{"class":165},[159,84718,84719,84721,84723,84725,84727],{"class":161,"line":2024},[159,84720,8657],{"class":1146},[159,84722,1486],{"class":165},[159,84724,8662],{"class":1146},[159,84726,1571],{"class":1142},[159,84728,1492],{"class":165},[159,84730,84731,84733,84735,84737],{"class":161,"line":2029},[159,84732,1818],{"class":1146},[159,84734,1486],{"class":165},[159,84736,1823],{"class":1146},[159,84738,1492],{"class":165},[159,84740,84741],{"class":161,"line":2038},[159,84742,1508],{"class":165},[159,84744,84745],{"class":161,"line":2053},[159,84746,590],{"emptyLinePlaceholder":589},[159,84748,84749,84751,84753],{"class":161,"line":2070},[159,84750,9166],{"class":185},[159,84752,9217],{"class":185},[159,84754,1478],{"class":165},[159,84756,84757,84759,84761,84763,84765],{"class":161,"line":2095},[159,84758,1563],{"class":1146},[159,84760,1486],{"class":165},[159,84762,1596],{"class":1146},[159,84764,1662],{"class":1142},[159,84766,1492],{"class":165},[159,84768,84769,84771,84773,84775],{"class":161,"line":2104},[159,84770,1818],{"class":1146},[159,84772,1486],{"class":165},[159,84774,1823],{"class":1146},[159,84776,1492],{"class":165},[159,84778,84779],{"class":161,"line":2120},[159,84780,1508],{"class":165},[159,84782,84783],{"class":161,"line":2134},[159,84784,590],{"emptyLinePlaceholder":589},[159,84786,84787,84789,84791,84793],{"class":161,"line":2143},[159,84788,9166],{"class":185},[159,84790,9217],{"class":185},[159,84792,9258],{"class":185},[159,84794,1478],{"class":165},[159,84796,84797,84799,84801,84803],{"class":161,"line":2165},[159,84798,8875],{"class":1146},[159,84800,1486],{"class":165},[159,84802,4932],{"class":1146},[159,84804,1492],{"class":165},[159,84806,84807,84809,84811,84813,84815,84817,84819],{"class":161,"line":2178},[159,84808,9275],{"class":1146},[159,84810,1486],{"class":165},[159,84812,4932],{"class":1146},[159,84814,1571],{"class":1142},[159,84816,9284],{"class":1146},[159,84818,9287],{"class":1146},[159,84820,1492],{"class":165},[159,84822,84823,84825,84827,84829,84831],{"class":161,"line":2191},[159,84824,9294],{"class":1146},[159,84826,1486],{"class":165},[159,84828,1964],{"class":1146},[159,84830,1571],{"class":1142},[159,84832,1492],{"class":165},[159,84834,84835],{"class":161,"line":2204},[159,84836,1508],{"class":165},[159,84838,84839],{"class":161,"line":2217},[159,84840,590],{"emptyLinePlaceholder":589},[159,84842,84843,84845,84847,84849],{"class":161,"line":2230},[159,84844,9166],{"class":185},[159,84846,9217],{"class":185},[159,84848,1704],{"class":169},[159,84850,1478],{"class":165},[159,84852,84853,84855,84857,84859],{"class":161,"line":2243},[159,84854,1497],{"class":1146},[159,84856,1486],{"class":165},[159,84858,1489],{"class":1146},[159,84860,1492],{"class":165},[159,84862,84863],{"class":161,"line":2256},[159,84864,1508],{"class":165},[159,84866,84867],{"class":161,"line":2266},[159,84868,590],{"emptyLinePlaceholder":589},[159,84870,84871,84873,84875,84877],{"class":161,"line":2275},[159,84872,9166],{"class":185},[159,84874,9217],{"class":185},[159,84876,9347],{"class":185},[159,84878,1478],{"class":165},[159,84880,84881,84883,84885,84887],{"class":161,"line":2284},[159,84882,4322],{"class":1146},[159,84884,1486],{"class":165},[159,84886,9358],{"class":1146},[159,84888,1492],{"class":165},[159,84890,84891,84893,84895,84897,84899],{"class":161,"line":2293},[159,84892,1721],{"class":1146},[159,84894,1486],{"class":165},[159,84896,7678],{"class":1146},[159,84898,1571],{"class":1142},[159,84900,1492],{"class":165},[159,84902,84903,84905,84907,84909],{"class":161,"line":2306},[159,84904,9377],{"class":1146},[159,84906,1486],{"class":165},[159,84908,9382],{"class":1146},[159,84910,1492],{"class":165},[159,84912,84913],{"class":161,"line":2330},[159,84914,1508],{"class":165},[159,84916,84917],{"class":161,"line":2350},[159,84918,590],{"emptyLinePlaceholder":589},[159,84920,84921,84923,84925,84927],{"class":161,"line":2370},[159,84922,9166],{"class":185},[159,84924,9217],{"class":185},[159,84926,9401],{"class":185},[159,84928,1478],{"class":165},[159,84930,84931,84933,84935,84937],{"class":161,"line":2390},[159,84932,4322],{"class":1146},[159,84934,1486],{"class":165},[159,84936,9412],{"class":1146},[159,84938,1492],{"class":165},[159,84940,84941,84943,84945,84947,84949,84951],{"class":161,"line":2410},[159,84942,1483],{"class":1146},[159,84944,1486],{"class":165},[159,84946,1964],{"class":1146},[159,84948,1571],{"class":1142},[159,84950,1259],{"class":1146},[159,84952,1492],{"class":165},[159,84954,84955],{"class":161,"line":2430},[159,84956,1508],{"class":165},[159,84958,84959],{"class":161,"line":2450},[159,84960,590],{"emptyLinePlaceholder":589},[159,84962,84963,84965,84967,84969],{"class":161,"line":2471},[159,84964,9166],{"class":185},[159,84966,9217],{"class":185},[159,84968,9445],{"class":185},[159,84970,1478],{"class":165},[159,84972,84973,84975,84977,84979],{"class":161,"line":2477},[159,84974,4322],{"class":1146},[159,84976,1486],{"class":165},[159,84978,9113],{"class":1146},[159,84980,1492],{"class":165},[159,84982,84983,84985,84987,84989,84991],{"class":161,"line":2498},[159,84984,1721],{"class":1146},[159,84986,1486],{"class":165},[159,84988,7925],{"class":1146},[159,84990,1571],{"class":1142},[159,84992,1492],{"class":165},[159,84994,84995],{"class":161,"line":2518},[159,84996,1508],{"class":165},[159,84998,84999,85001,85003],{"class":161,"line":2539},[159,85000,254],{"class":165},[159,85002,1468],{"class":169},[159,85004,173],{"class":165},[159,85006,85007,85009,85011],{"class":161,"line":2561},[159,85008,264],{"class":165},[159,85010,949],{"class":169},[159,85012,173],{"class":165},[159,85014,85015],{"class":161,"line":2573},[159,85016,590],{"emptyLinePlaceholder":589},[159,85018,85019,85021,85023],{"class":161,"line":2591},[159,85020,166],{"class":165},[159,85022,170],{"class":169},[159,85024,173],{"class":165},[159,85026,85027,85029,85031,85033,85035,85037],{"class":161,"line":2602},[159,85028,179],{"class":165},[159,85030,182],{"class":169},[159,85032,186],{"class":185},[159,85034,189],{"class":165},[159,85036,9514],{"class":192},[159,85038,173],{"class":165},[159,85040,85041,85043,85045,85047,85049,85051,85053,85055],{"class":161,"line":2613},[159,85042,2056],{"class":165},[159,85044,1241],{"class":169},[159,85046,186],{"class":185},[159,85048,189],{"class":165},[159,85050,9529],{"class":192},[159,85052,2158],{"class":165},[159,85054,1241],{"class":169},[159,85056,173],{"class":165},[159,85058,85059,85061,85063,85065,85067,85069,85071,85073,85075,85077,85079,85081,85083,85085,85087,85089,85091],{"class":161,"line":2624},[159,85060,2056],{"class":165},[159,85062,1032],{"class":169},[159,85064,555],{"class":185},[159,85066,189],{"class":165},[159,85068,9548],{"class":192},[159,85070,8050],{"class":185},[159,85072,189],{"class":165},[159,85074,9555],{"class":192},[159,85076,1055],{"class":185},[159,85078,189],{"class":165},[159,85080,708],{"class":192},[159,85082,9564],{"class":185},[159,85084,189],{"class":165},[159,85086,9569],{"class":192},[159,85088,2158],{"class":165},[159,85090,1032],{"class":169},[159,85092,173],{"class":165},[159,85094,85095,85097,85099,85101,85103],{"class":161,"line":2630},[159,85096,2056],{"class":165},[159,85098,608],{"class":169},[159,85100,9584],{"class":165},[159,85102,608],{"class":169},[159,85104,173],{"class":165},[159,85106,85107,85109,85111],{"class":161,"line":2636},[159,85108,254],{"class":165},[159,85110,182],{"class":169},[159,85112,173],{"class":165},[159,85114,85115,85117,85119,85121,85123,85125],{"class":161,"line":2642},[159,85116,179],{"class":165},[159,85118,182],{"class":169},[159,85120,186],{"class":185},[159,85122,189],{"class":165},[159,85124,9514],{"class":192},[159,85126,173],{"class":165},[159,85128,85129,85131,85133,85135,85137,85139,85141,85143],{"class":161,"line":2648},[159,85130,2056],{"class":165},[159,85132,159],{"class":169},[159,85134,186],{"class":185},[159,85136,189],{"class":165},[159,85138,9623],{"class":192},[159,85140,9626],{"class":165},[159,85142,159],{"class":169},[159,85144,173],{"class":165},[159,85146,85147,85149,85151],{"class":161,"line":2674},[159,85148,254],{"class":165},[159,85150,182],{"class":169},[159,85152,173],{"class":165},[159,85154,85155,85157,85159,85161,85163,85165],{"class":161,"line":2689},[159,85156,179],{"class":165},[159,85158,182],{"class":169},[159,85160,186],{"class":185},[159,85162,189],{"class":165},[159,85164,9651],{"class":192},[159,85166,173],{"class":165},[159,85168,85169,85171,85173,85175,85177,85179,85181,85183,85185],{"class":161,"line":2694},[159,85170,2056],{"class":165},[159,85172,182],{"class":169},[159,85174,186],{"class":185},[159,85176,189],{"class":165},[159,85178,9666],{"class":192},[159,85180,9669],{"class":185},[159,85182,189],{"class":165},[159,85184,9674],{"class":192},[159,85186,173],{"class":165},[159,85188,85189,85191,85193,85195,85197,85199,85201,85203],{"class":161,"line":2721},[159,85190,2073],{"class":165},[159,85192,1241],{"class":169},[159,85194,186],{"class":185},[159,85196,189],{"class":165},[159,85198,9529],{"class":192},[159,85200,2158],{"class":165},[159,85202,1241],{"class":169},[159,85204,173],{"class":165},[159,85206,85207,85209,85211,85213,85215,85217],{"class":161,"line":2726},[159,85208,2073],{"class":165},[159,85210,182],{"class":169},[159,85212,186],{"class":185},[159,85214,189],{"class":165},[159,85216,9707],{"class":192},[159,85218,173],{"class":165},[159,85220,85221,85223,85225,85227,85229,85231,85233,85235],{"class":161,"line":2735},[159,85222,2146],{"class":165},[159,85224,14],{"class":169},[159,85226,186],{"class":185},[159,85228,189],{"class":165},[159,85230,9722],{"class":192},[159,85232,9725],{"class":165},[159,85234,14],{"class":169},[159,85236,173],{"class":165},[159,85238,85239,85241,85243,85245,85247,85249,85251,85253],{"class":161,"line":2744},[159,85240,2146],{"class":165},[159,85242,14],{"class":169},[159,85244,186],{"class":185},[159,85246,189],{"class":165},[159,85248,9742],{"class":192},[159,85250,9745],{"class":165},[159,85252,14],{"class":169},[159,85254,173],{"class":165},[159,85256,85257,85259,85261,85263,85265,85267,85269,85271],{"class":161,"line":2753},[159,85258,2146],{"class":165},[159,85260,14],{"class":169},[159,85262,186],{"class":185},[159,85264,189],{"class":165},[159,85266,9762],{"class":192},[159,85268,9765],{"class":165},[159,85270,14],{"class":169},[159,85272,173],{"class":165},[159,85274,85275,85277,85279],{"class":161,"line":2758},[159,85276,2259],{"class":165},[159,85278,182],{"class":169},[159,85280,173],{"class":165},[159,85282,85283,85285,85287],{"class":161,"line":3959},[159,85284,1084],{"class":165},[159,85286,182],{"class":169},[159,85288,173],{"class":165},[159,85290,85291,85293,85295],{"class":161,"line":3968},[159,85292,254],{"class":165},[159,85294,182],{"class":169},[159,85296,173],{"class":165},[159,85298,85299,85301,85303],{"class":161,"line":3977},[159,85300,179],{"class":165},[159,85302,228],{"class":169},[159,85304,173],{"class":165},[159,85306,85307,85309,85311,85313,85315,85317,85319,85321],{"class":161,"line":3982},[159,85308,1143],{"class":1142},[159,85310,9808],{"class":1146},[159,85312,1150],{"class":1142},[159,85314,1153],{"class":165},[159,85316,1156],{"class":185},[159,85318,1159],{"class":165},[159,85320,9819],{"class":192},[159,85322,1165],{"class":165},[159,85324,85325,85327,85329,85331,85333,85335,85337,85339],{"class":161,"line":6843},[159,85326,1143],{"class":1142},[159,85328,9828],{"class":1146},[159,85330,1150],{"class":1142},[159,85332,1153],{"class":165},[159,85334,1156],{"class":185},[159,85336,1159],{"class":165},[159,85338,9839],{"class":192},[159,85340,1165],{"class":165},[159,85342,85343],{"class":161,"line":6849},[159,85344,9846],{"class":1135},[159,85346,85347,85349,85351,85353,85355,85357,85359],{"class":161,"line":6855},[159,85348,9851],{"class":165},[159,85350,4724],{"class":185},[159,85352,1159],{"class":165},[159,85354,8358],{"class":192},[159,85356,1939],{"class":165},[159,85358,1215],{"class":1142},[159,85360,1218],{"class":165},[159,85362,85363,85365,85367],{"class":161,"line":6861},[159,85364,9868],{"class":165},[159,85366,189],{"class":1142},[159,85368,2570],{"class":1146},[159,85370,85371],{"class":161,"line":6867},[159,85372,4863],{"class":165},[159,85374,85375],{"class":161,"line":6873},[159,85376,9881],{"class":1135},[159,85378,85379,85381,85383,85385,85387,85389,85391],{"class":161,"line":6879},[159,85380,9851],{"class":165},[159,85382,4724],{"class":185},[159,85384,1159],{"class":165},[159,85386,8419],{"class":192},[159,85388,1939],{"class":165},[159,85390,1215],{"class":1142},[159,85392,1218],{"class":165},[159,85394,85395,85397,85399],{"class":161,"line":6885},[159,85396,9868],{"class":165},[159,85398,189],{"class":1142},[159,85400,3785],{"class":1146},[159,85402,85403],{"class":161,"line":6890},[159,85404,4863],{"class":165},[159,85406,85407],{"class":161,"line":6896},[159,85408,9914],{"class":1135},[159,85410,85411,85413,85415,85417,85419,85421,85423],{"class":161,"line":6902},[159,85412,9851],{"class":165},[159,85414,4724],{"class":185},[159,85416,1159],{"class":165},[159,85418,9925],{"class":192},[159,85420,1939],{"class":165},[159,85422,1215],{"class":1142},[159,85424,1218],{"class":165},[159,85426,85427],{"class":161,"line":6908},[159,85428,9936],{"class":1135},[159,85430,85431,85433,85435,85437,85439,85441,85443,85445,85447],{"class":161,"line":6914},[159,85432,9941],{"class":165},[159,85434,189],{"class":1142},[159,85436,9946],{"class":192},[159,85438,9949],{"class":165},[159,85440,9952],{"class":192},[159,85442,9955],{"class":165},[159,85444,9952],{"class":192},[159,85446,3828],{"class":1146},[159,85448,9962],{"class":192},[159,85450,85451],{"class":161,"line":6920},[159,85452,4863],{"class":165},[159,85454,85455],{"class":161,"line":6926},[159,85456,590],{"emptyLinePlaceholder":589},[159,85458,85459],{"class":161,"line":6932},[159,85460,9975],{"class":1135},[159,85462,85463],{"class":161,"line":6938},[159,85464,9980],{"class":1135},[159,85466,85467,85469,85471],{"class":161,"line":6944},[159,85468,254],{"class":165},[159,85470,228],{"class":169},[159,85472,173],{"class":165},[159,85474,85475,85477,85479],{"class":161,"line":6949},[159,85476,264],{"class":165},[159,85478,170],{"class":169},[159,85480,173],{"class":165},[159,85482,85483],{"class":161,"line":6955},[159,85484,590],{"emptyLinePlaceholder":589},[159,85486,85487,85489,85491],{"class":161,"line":6961},[159,85488,264],{"class":165},[159,85490,522],{"class":169},[159,85492,173],{"class":165},[326,85494,10012],{"id":10011},[14,85496,10015],{},[14,85498,10018],{},[14,85500,10021],{},[151,85502,85503],{"className":520,"code":10024,"language":522,"meta":25,"style":25},[49,85504,85505,85515,85529,85533,85541,85555,85575,85587,85595,85599,85607,85621,85629,85647,85663,85675,85679,85687,85695,85699],{"__ignoreMap":25},[159,85506,85507,85509,85511,85513],{"class":161,"line":162},[159,85508,914],{"class":165},[159,85510,917],{"class":169},[159,85512,920],{"class":185},[159,85514,173],{"class":165},[159,85516,85517,85519,85521,85523,85525,85527],{"class":161,"line":176},[159,85518,166],{"class":165},[159,85520,522],{"class":169},[159,85522,931],{"class":185},[159,85524,189],{"class":165},[159,85526,936],{"class":192},[159,85528,173],{"class":165},[159,85530,85531],{"class":161,"line":203},[159,85532,590],{"emptyLinePlaceholder":589},[159,85534,85535,85537,85539],{"class":161,"line":223},[159,85536,166],{"class":165},[159,85538,949],{"class":169},[159,85540,173],{"class":165},[159,85542,85543,85545,85547,85549,85551,85553],{"class":161,"line":233},[159,85544,179],{"class":165},[159,85546,958],{"class":169},[159,85548,961],{"class":185},[159,85550,189],{"class":165},[159,85552,966],{"class":192},[159,85554,173],{"class":165},[159,85556,85557,85559,85561,85563,85565,85567,85569,85571,85573],{"class":161,"line":239},[159,85558,179],{"class":165},[159,85560,958],{"class":169},[159,85562,547],{"class":185},[159,85564,189],{"class":165},[159,85566,981],{"class":192},[159,85568,984],{"class":185},[159,85570,189],{"class":165},[159,85572,989],{"class":192},[159,85574,173],{"class":165},[159,85576,85577,85579,85581,85583,85585],{"class":161,"line":245},[159,85578,179],{"class":165},[159,85580,998],{"class":169},[159,85582,1001],{"class":165},[159,85584,998],{"class":169},[159,85586,173],{"class":165},[159,85588,85589,85591,85593],{"class":161,"line":251},[159,85590,264],{"class":165},[159,85592,949],{"class":169},[159,85594,173],{"class":165},[159,85596,85597],{"class":161,"line":261},[159,85598,590],{"emptyLinePlaceholder":589},[159,85600,85601,85603,85605],{"class":161,"line":603},[159,85602,166],{"class":165},[159,85604,170],{"class":169},[159,85606,173],{"class":165},[159,85608,85609,85611,85613,85615,85617,85619],{"class":161,"line":621},[159,85610,179],{"class":165},[159,85612,536],{"class":169},[159,85614,539],{"class":185},[159,85616,189],{"class":165},[159,85618,9742],{"class":192},[159,85620,173],{"class":165},[159,85622,85623,85625,85627],{"class":161,"line":634},[159,85624,179],{"class":165},[159,85626,228],{"class":169},[159,85628,173],{"class":165},[159,85630,85631,85633,85635,85637,85639,85641,85643,85645],{"class":161,"line":640},[159,85632,1143],{"class":1142},[159,85634,7625],{"class":1146},[159,85636,1150],{"class":1142},[159,85638,1153],{"class":165},[159,85640,1156],{"class":185},[159,85642,1159],{"class":165},[159,85644,9925],{"class":192},[159,85646,1165],{"class":165},[159,85648,85649,85651,85653,85655,85657,85659,85661],{"class":161,"line":1075},[159,85650,10173],{"class":165},[159,85652,4724],{"class":185},[159,85654,1159],{"class":165},[159,85656,10180],{"class":192},[159,85658,1939],{"class":165},[159,85660,1215],{"class":1142},[159,85662,1218],{"class":165},[159,85664,85665,85667,85669,85671,85673],{"class":161,"line":1081},[159,85666,5163],{"class":165},[159,85668,5166],{"class":185},[159,85670,1159],{"class":165},[159,85672,10197],{"class":1146},[159,85674,1165],{"class":165},[159,85676,85677],{"class":161,"line":1091},[159,85678,4863],{"class":165},[159,85680,85681,85683,85685],{"class":161,"line":1100},[159,85682,254],{"class":165},[159,85684,228],{"class":169},[159,85686,173],{"class":165},[159,85688,85689,85691,85693],{"class":161,"line":1123},[159,85690,264],{"class":165},[159,85692,170],{"class":169},[159,85694,173],{"class":165},[159,85696,85697],{"class":161,"line":1132},[159,85698,590],{"emptyLinePlaceholder":589},[159,85700,85701,85703,85705],{"class":161,"line":1139},[159,85702,264],{"class":165},[159,85704,522],{"class":169},[159,85706,173],{"class":165},[14,85708,10234],{},[42,85710,10238],{"id":10237},[326,85712,10242],{"id":10241},[14,85714,85715],{},[23,85716],{"alt":25,"src":10247},[14,85718,85719],{},[23,85720],{"alt":25,"src":10252},[14,85722,10255],{},[14,85724,10258],{},[14,85726,85727],{},[23,85728],{"alt":25,"src":10263},[326,85730,10267],{"id":10266},[14,85732,85733],{},[23,85734],{"alt":25,"src":10272},[14,85736,10275],{},[151,85738,85739],{"className":153,"code":10278,"language":155,"meta":25,"style":25},[49,85740,85741,85749,85753,85767,85775,85779,85783,85787,85791,85795,85799,85803,85807,85811,85815,85819,85827],{"__ignoreMap":25},[159,85742,85743,85745,85747],{"class":161,"line":162},[159,85744,166],{"class":165},[159,85746,170],{"class":169},[159,85748,173],{"class":165},[159,85750,85751],{"class":161,"line":176},[159,85752,10293],{"class":1135},[159,85754,85755,85757,85759,85761,85763,85765],{"class":161,"line":203},[159,85756,179],{"class":165},[159,85758,536],{"class":169},[159,85760,539],{"class":185},[159,85762,189],{"class":165},[159,85764,9742],{"class":192},[159,85766,173],{"class":165},[159,85768,85769,85771,85773],{"class":161,"line":223},[159,85770,179],{"class":165},[159,85772,228],{"class":169},[159,85774,173],{"class":165},[159,85776,85777],{"class":161,"line":233},[159,85778,10320],{"class":165},[159,85780,85781],{"class":161,"line":239},[159,85782,10325],{"class":165},[159,85784,85785],{"class":161,"line":245},[159,85786,10330],{"class":165},[159,85788,85789],{"class":161,"line":251},[159,85790,10335],{"class":165},[159,85792,85793],{"class":161,"line":261},[159,85794,10340],{"class":165},[159,85796,85797],{"class":161,"line":603},[159,85798,10345],{"class":165},[159,85800,85801],{"class":161,"line":621},[159,85802,10350],{"class":165},[159,85804,85805],{"class":161,"line":634},[159,85806,10355],{"class":165},[159,85808,85809],{"class":161,"line":640},[159,85810,10360],{"class":165},[159,85812,85813],{"class":161,"line":1075},[159,85814,1308],{"class":165},[159,85816,85817],{"class":161,"line":1081},[159,85818,4863],{"class":165},[159,85820,85821,85823,85825],{"class":161,"line":1091},[159,85822,254],{"class":165},[159,85824,228],{"class":169},[159,85826,173],{"class":165},[159,85828,85829,85831,85833],{"class":161,"line":1100},[159,85830,264],{"class":165},[159,85832,170],{"class":169},[159,85834,173],{"class":165},[326,85836,10388],{"id":10387},[14,85838,85839],{},[23,85840],{"alt":25,"src":10393},[14,85842,85843],{},[23,85844],{"alt":25,"src":10398},[14,85846,10401],{},[14,85848,10404],{},[42,85850,10408],{"id":10407},[14,85852,85853],{},[23,85854],{"alt":25,"src":10413},[14,85856,85857],{},[23,85858],{"alt":25,"src":10418},[14,85860,85861],{},[23,85862],{"alt":25,"src":10423},[14,85864,10426],{},[14,85866,10429],{},[103,85868,85869,85871,85873],{},[106,85870,10434],{},[106,85872,10437],{},[106,85874,10440],{},[14,85876,10443],{},[14,85878,85879],{},[23,85880],{"alt":25,"src":10448},[14,85882,85883],{},[23,85884],{"alt":25,"src":10453},[14,85886,10456],{},[14,85888,10459],{},[151,85890,85891],{"className":153,"code":10462,"language":155,"meta":25,"style":25},[49,85892,85893,85901,85913,85921,85925,85929,85933,85937,85941,85949],{"__ignoreMap":25},[159,85894,85895,85897,85899],{"class":161,"line":162},[159,85896,166],{"class":165},[159,85898,170],{"class":169},[159,85900,173],{"class":165},[159,85902,85903,85905,85907,85909,85911],{"class":161,"line":176},[159,85904,179],{"class":165},[159,85906,608],{"class":169},[159,85908,614],{"class":165},[159,85910,608],{"class":169},[159,85912,173],{"class":165},[159,85914,85915,85917,85919],{"class":161,"line":203},[159,85916,179],{"class":165},[159,85918,228],{"class":169},[159,85920,173],{"class":165},[159,85922,85923],{"class":161,"line":223},[159,85924,10497],{"class":165},[159,85926,85927],{"class":161,"line":233},[159,85928,10502],{"class":165},[159,85930,85931],{"class":161,"line":239},[159,85932,10507],{"class":165},[159,85934,85935],{"class":161,"line":245},[159,85936,10512],{"class":165},[159,85938,85939],{"class":161,"line":251},[159,85940,4863],{"class":165},[159,85942,85943,85945,85947],{"class":161,"line":261},[159,85944,254],{"class":165},[159,85946,228],{"class":169},[159,85948,173],{"class":165},[159,85950,85951,85953,85955],{"class":161,"line":603},[159,85952,264],{"class":165},[159,85954,170],{"class":169},[159,85956,173],{"class":165},[42,85958,10536],{"id":10535},[14,85960,85961],{},[23,85962],{"alt":25,"src":10541},[14,85964,10544],{},[14,85966,10547],{},[103,85968,85969,85971,85973],{},[106,85970,10552],{},[106,85972,10555],{},[106,85974,10558],{},[42,85976,10562],{"id":10561},[14,85978,85979],{},[23,85980],{"alt":25,"src":10567},[151,85982,85983],{"className":520,"code":10570,"language":522,"meta":25,"style":25},[49,85984,85985,85995,86009,86013,86021,86035,86055,86075,86087,86095,86101,86111,86121,86125,86129,86135,86147,86159,86171,86187,86191,86195,86201,86213,86225,86237,86247,86257,86261,86265,86273,86285,86295,86307,86311,86315,86323,86333,86343,86353,86357,86361,86371,86385,86397,86401,86405,86417,86427,86443,86453,86457,86461,86475,86485,86495,86499,86503,86509,86523,86527,86531,86539,86549,86553,86557,86565,86575,86579,86587,86595,86599,86607,86621,86635,86647,86655,86687,86713,86739,86765,86791,86799,86807,86821,86855,86889,86923,86957,86991,86999,87007,87015,87019,87023,87041,87045,87073,87077,87081,87097,87101,87105,87109,87129,87133,87147,87151,87155,87159,87179,87183,87211,87215,87219,87223,87231,87239,87243],{"__ignoreMap":25},[159,85986,85987,85989,85991,85993],{"class":161,"line":162},[159,85988,914],{"class":165},[159,85990,917],{"class":169},[159,85992,920],{"class":185},[159,85994,173],{"class":165},[159,85996,85997,85999,86001,86003,86005,86007],{"class":161,"line":176},[159,85998,166],{"class":165},[159,86000,522],{"class":169},[159,86002,931],{"class":185},[159,86004,189],{"class":165},[159,86006,936],{"class":192},[159,86008,173],{"class":165},[159,86010,86011],{"class":161,"line":203},[159,86012,590],{"emptyLinePlaceholder":589},[159,86014,86015,86017,86019],{"class":161,"line":223},[159,86016,166],{"class":165},[159,86018,949],{"class":169},[159,86020,173],{"class":165},[159,86022,86023,86025,86027,86029,86031,86033],{"class":161,"line":233},[159,86024,179],{"class":165},[159,86026,958],{"class":169},[159,86028,961],{"class":185},[159,86030,189],{"class":165},[159,86032,966],{"class":192},[159,86034,6049],{"class":165},[159,86036,86037,86039,86041,86043,86045,86047,86049,86051,86053],{"class":161,"line":239},[159,86038,179],{"class":165},[159,86040,958],{"class":169},[159,86042,6058],{"class":185},[159,86044,189],{"class":165},[159,86046,6063],{"class":192},[159,86048,984],{"class":185},[159,86050,189],{"class":165},[159,86052,6070],{"class":192},[159,86054,6049],{"class":165},[159,86056,86057,86059,86061,86063,86065,86067,86069,86071,86073],{"class":161,"line":245},[159,86058,179],{"class":165},[159,86060,958],{"class":169},[159,86062,547],{"class":185},[159,86064,189],{"class":165},[159,86066,981],{"class":192},[159,86068,984],{"class":185},[159,86070,189],{"class":165},[159,86072,989],{"class":192},[159,86074,6049],{"class":165},[159,86076,86077,86079,86081,86083,86085],{"class":161,"line":251},[159,86078,179],{"class":165},[159,86080,998],{"class":169},[159,86082,10671],{"class":165},[159,86084,998],{"class":169},[159,86086,173],{"class":165},[159,86088,86089,86091,86093],{"class":161,"line":261},[159,86090,179],{"class":165},[159,86092,1468],{"class":169},[159,86094,173],{"class":165},[159,86096,86097,86099],{"class":161,"line":603},[159,86098,1475],{"class":169},[159,86100,1478],{"class":165},[159,86102,86103,86105,86107,86109],{"class":161,"line":621},[159,86104,1497],{"class":1146},[159,86106,1486],{"class":165},[159,86108,1489],{"class":1146},[159,86110,1492],{"class":165},[159,86112,86113,86115,86117,86119],{"class":161,"line":634},[159,86114,1483],{"class":1146},[159,86116,1486],{"class":165},[159,86118,1489],{"class":1146},[159,86120,1492],{"class":165},[159,86122,86123],{"class":161,"line":640},[159,86124,1508],{"class":165},[159,86126,86127],{"class":161,"line":1075},[159,86128,590],{"emptyLinePlaceholder":589},[159,86130,86131,86133],{"class":161,"line":1081},[159,86132,10722],{"class":185},[159,86134,1478],{"class":165},[159,86136,86137,86139,86141,86143,86145],{"class":161,"line":1091},[159,86138,1563],{"class":1146},[159,86140,1486],{"class":165},[159,86142,10733],{"class":1146},[159,86144,1571],{"class":1142},[159,86146,1492],{"class":165},[159,86148,86149,86151,86153,86155,86157],{"class":161,"line":1100},[159,86150,1578],{"class":1146},[159,86152,1486],{"class":165},[159,86154,10746],{"class":1146},[159,86156,1571],{"class":1142},[159,86158,1492],{"class":165},[159,86160,86161,86163,86165,86167,86169],{"class":161,"line":1123},[159,86162,1497],{"class":1146},[159,86164,1486],{"class":165},[159,86166,1739],{"class":1146},[159,86168,1571],{"class":1142},[159,86170,1492],{"class":165},[159,86172,86173,86175,86177,86179,86181,86183,86185],{"class":161,"line":1132},[159,86174,9018],{"class":1146},[159,86176,1486],{"class":165},[159,86178,4932],{"class":1146},[159,86180,1571],{"class":1142},[159,86182,7709],{"class":1146},[159,86184,9287],{"class":1146},[159,86186,1492],{"class":165},[159,86188,86189],{"class":161,"line":1139},[159,86190,1508],{"class":165},[159,86192,86193],{"class":161,"line":1168},[159,86194,590],{"emptyLinePlaceholder":589},[159,86196,86197,86199],{"class":161,"line":1174},[159,86198,10791],{"class":185},[159,86200,1478],{"class":165},[159,86202,86203,86205,86207,86209,86211],{"class":161,"line":1180},[159,86204,1563],{"class":1146},[159,86206,1486],{"class":165},[159,86208,1596],{"class":1146},[159,86210,1662],{"class":1142},[159,86212,1492],{"class":165},[159,86214,86215,86217,86219,86221,86223],{"class":161,"line":1194},[159,86216,1578],{"class":1146},[159,86218,1486],{"class":165},[159,86220,10814],{"class":1146},[159,86222,1571],{"class":1142},[159,86224,1492],{"class":165},[159,86226,86227,86229,86231,86233,86235],{"class":161,"line":1200},[159,86228,4264],{"class":1146},[159,86230,1486],{"class":165},[159,86232,10814],{"class":1146},[159,86234,1571],{"class":1142},[159,86236,1492],{"class":165},[159,86238,86239,86241,86243,86245],{"class":161,"line":1221},[159,86240,1818],{"class":1146},[159,86242,1486],{"class":165},[159,86244,1823],{"class":1146},[159,86246,1492],{"class":165},[159,86248,86249,86251,86253,86255],{"class":161,"line":1230},[159,86250,1831],{"class":1146},[159,86252,1486],{"class":165},[159,86254,1836],{"class":1146},[159,86256,1492],{"class":165},[159,86258,86259],{"class":161,"line":1247},[159,86260,1508],{"class":165},[159,86262,86263],{"class":161,"line":1265},[159,86264,590],{"emptyLinePlaceholder":589},[159,86266,86267,86269,86271],{"class":161,"line":1277},[159,86268,10791],{"class":185},[159,86270,10865],{"class":169},[159,86272,1478],{"class":165},[159,86274,86275,86277,86279,86281,86283],{"class":161,"line":1283},[159,86276,1721],{"class":1146},[159,86278,1486],{"class":165},[159,86280,10876],{"class":1146},[159,86282,1571],{"class":1142},[159,86284,1492],{"class":165},[159,86286,86287,86289,86291,86293],{"class":161,"line":1294},[159,86288,9377],{"class":1146},[159,86290,1486],{"class":165},[159,86292,10889],{"class":1146},[159,86294,1492],{"class":165},[159,86296,86297,86299,86301,86303,86305],{"class":161,"line":1305},[159,86298,9041],{"class":1146},[159,86300,1486],{"class":165},[159,86302,1739],{"class":1146},[159,86304,1571],{"class":1142},[159,86306,1492],{"class":165},[159,86308,86309],{"class":161,"line":1311},[159,86310,1508],{"class":165},[159,86312,86313],{"class":161,"line":1322},[159,86314,590],{"emptyLinePlaceholder":589},[159,86316,86317,86319,86321],{"class":161,"line":1327},[159,86318,10791],{"class":185},[159,86320,8323],{"class":169},[159,86322,1478],{"class":165},[159,86324,86325,86327,86329,86331],{"class":161,"line":1336},[159,86326,1524],{"class":1146},[159,86328,1486],{"class":165},[159,86330,1529],{"class":1146},[159,86332,1492],{"class":165},[159,86334,86335,86337,86339,86341],{"class":161,"line":1345},[159,86336,1818],{"class":1146},[159,86338,1486],{"class":165},[159,86340,1823],{"class":1146},[159,86342,1492],{"class":165},[159,86344,86345,86347,86349,86351],{"class":161,"line":1350},[159,86346,1831],{"class":1146},[159,86348,1486],{"class":165},[159,86350,8685],{"class":1146},[159,86352,1492],{"class":165},[159,86354,86355],{"class":161,"line":1764},[159,86356,1508],{"class":165},[159,86358,86359],{"class":161,"line":1769},[159,86360,590],{"emptyLinePlaceholder":589},[159,86362,86363,86365,86367,86369],{"class":161,"line":1777},[159,86364,10791],{"class":185},[159,86366,8323],{"class":169},[159,86368,1894],{"class":169},[159,86370,1478],{"class":165},[159,86372,86373,86375,86377,86379,86381,86383],{"class":161,"line":1788},[159,86374,1497],{"class":1146},[159,86376,1486],{"class":165},[159,86378,1489],{"class":1146},[159,86380,10978],{"class":1146},[159,86382,1571],{"class":1142},[159,86384,1492],{"class":165},[159,86386,86387,86389,86391,86393,86395],{"class":161,"line":1802},[159,86388,1721],{"class":1146},[159,86390,1486],{"class":165},[159,86392,7678],{"class":1146},[159,86394,1571],{"class":1142},[159,86396,1492],{"class":165},[159,86398,86399],{"class":161,"line":1815},[159,86400,1508],{"class":165},[159,86402,86403],{"class":161,"line":1828},[159,86404,590],{"emptyLinePlaceholder":589},[159,86406,86407,86409,86411,86413,86415],{"class":161,"line":1841},[159,86408,10791],{"class":185},[159,86410,8323],{"class":169},[159,86412,1894],{"class":169},[159,86414,7885],{"class":169},[159,86416,1478],{"class":165},[159,86418,86419,86421,86423,86425],{"class":161,"line":1852},[159,86420,11019],{"class":1146},[159,86422,1486],{"class":165},[159,86424,1529],{"class":1146},[159,86426,1492],{"class":165},[159,86428,86429,86431,86433,86435,86437,86439,86441],{"class":161,"line":1866},[159,86430,9275],{"class":1146},[159,86432,1486],{"class":165},[159,86434,11034],{"class":1146},[159,86436,1571],{"class":1142},[159,86438,7709],{"class":1146},[159,86440,11041],{"class":1146},[159,86442,1492],{"class":165},[159,86444,86445,86447,86449,86451],{"class":161,"line":1879},[159,86446,4322],{"class":1146},[159,86448,1486],{"class":165},[159,86450,9412],{"class":1146},[159,86452,1492],{"class":165},[159,86454,86455],{"class":161,"line":1884},[159,86456,1508],{"class":165},[159,86458,86459],{"class":161,"line":1889},[159,86460,590],{"emptyLinePlaceholder":589},[159,86462,86463,86465,86467,86469,86471,86473],{"class":161,"line":1899},[159,86464,10791],{"class":185},[159,86466,8323],{"class":169},[159,86468,1894],{"class":169},[159,86470,7885],{"class":169},[159,86472,11074],{"class":185},[159,86474,1478],{"class":165},[159,86476,86477,86479,86481,86483],{"class":161,"line":1912},[159,86478,8828],{"class":1146},[159,86480,1486],{"class":165},[159,86482,11085],{"class":1146},[159,86484,1492],{"class":165},[159,86486,86487,86489,86491,86493],{"class":161,"line":1925},[159,86488,4322],{"class":1146},[159,86490,1486],{"class":165},[159,86492,11085],{"class":1146},[159,86494,1492],{"class":165},[159,86496,86497],{"class":161,"line":1956},[159,86498,1508],{"class":165},[159,86500,86501],{"class":161,"line":1971},[159,86502,590],{"emptyLinePlaceholder":589},[159,86504,86505,86507],{"class":161,"line":1976},[159,86506,11110],{"class":185},[159,86508,1478],{"class":165},[159,86510,86511,86513,86515,86517,86519,86521],{"class":161,"line":1981},[159,86512,1483],{"class":1146},[159,86514,1486],{"class":165},[159,86516,1489],{"class":1146},[159,86518,11123],{"class":1146},[159,86520,1571],{"class":1142},[159,86522,1492],{"class":165},[159,86524,86525],{"class":161,"line":1989},[159,86526,1508],{"class":165},[159,86528,86529],{"class":161,"line":2001},[159,86530,590],{"emptyLinePlaceholder":589},[159,86532,86533,86535,86537],{"class":161,"line":2006},[159,86534,11110],{"class":185},[159,86536,9217],{"class":185},[159,86538,1478],{"class":165},[159,86540,86541,86543,86545,86547],{"class":161,"line":2015},[159,86542,1818],{"class":1146},[159,86544,1486],{"class":165},[159,86546,1529],{"class":1146},[159,86548,1492],{"class":165},[159,86550,86551],{"class":161,"line":2024},[159,86552,1508],{"class":165},[159,86554,86555],{"class":161,"line":2029},[159,86556,590],{"emptyLinePlaceholder":589},[159,86558,86559,86561,86563],{"class":161,"line":2038},[159,86560,11110],{"class":185},[159,86562,11168],{"class":185},[159,86564,1478],{"class":165},[159,86566,86567,86569,86571,86573],{"class":161,"line":2053},[159,86568,1818],{"class":1146},[159,86570,1486],{"class":165},[159,86572,7896],{"class":1146},[159,86574,1492],{"class":165},[159,86576,86577],{"class":161,"line":2070},[159,86578,1508],{"class":165},[159,86580,86581,86583,86585],{"class":161,"line":2095},[159,86582,254],{"class":165},[159,86584,1468],{"class":169},[159,86586,173],{"class":165},[159,86588,86589,86591,86593],{"class":161,"line":2104},[159,86590,264],{"class":165},[159,86592,949],{"class":169},[159,86594,173],{"class":165},[159,86596,86597],{"class":161,"line":2120},[159,86598,590],{"emptyLinePlaceholder":589},[159,86600,86601,86603,86605],{"class":161,"line":2134},[159,86602,166],{"class":165},[159,86604,170],{"class":169},[159,86606,173],{"class":165},[159,86608,86609,86611,86613,86615,86617,86619],{"class":161,"line":2143},[159,86610,179],{"class":165},[159,86612,182],{"class":169},[159,86614,186],{"class":185},[159,86616,189],{"class":165},[159,86618,11225],{"class":192},[159,86620,173],{"class":165},[159,86622,86623,86625,86627,86629,86631,86633],{"class":161,"line":2165},[159,86624,2056],{"class":165},[159,86626,182],{"class":169},[159,86628,186],{"class":185},[159,86630,189],{"class":165},[159,86632,11240],{"class":192},[159,86634,173],{"class":165},[159,86636,86637,86639,86641,86643,86645],{"class":161,"line":2178},[159,86638,2073],{"class":165},[159,86640,42],{"class":169},[159,86642,11251],{"class":165},[159,86644,42],{"class":169},[159,86646,173],{"class":165},[159,86648,86649,86651,86653],{"class":161,"line":2191},[159,86650,2073],{"class":165},[159,86652,103],{"class":169},[159,86654,173],{"class":165},[159,86656,86657,86659,86661,86663,86665,86667,86669,86671,86673,86675,86677,86679,86681,86683,86685],{"class":161,"line":2204},[159,86658,2146],{"class":165},[159,86660,106],{"class":169},[159,86662,8082],{"class":165},[159,86664,8085],{"class":169},[159,86666,186],{"class":185},[159,86668,189],{"class":165},[159,86670,6631],{"class":192},[159,86672,8088],{"class":185},[159,86674,189],{"class":165},[159,86676,11286],{"class":192},[159,86678,11289],{"class":165},[159,86680,8085],{"class":169},[159,86682,2158],{"class":165},[159,86684,106],{"class":169},[159,86686,173],{"class":165},[159,86688,86689,86691,86693,86695,86697,86699,86701,86703,86705,86707,86709,86711],{"class":161,"line":2217},[159,86690,2146],{"class":165},[159,86692,106],{"class":169},[159,86694,8082],{"class":165},[159,86696,8085],{"class":169},[159,86698,8088],{"class":185},[159,86700,189],{"class":165},[159,86702,11286],{"class":192},[159,86704,11316],{"class":165},[159,86706,8085],{"class":169},[159,86708,2158],{"class":165},[159,86710,106],{"class":169},[159,86712,173],{"class":165},[159,86714,86715,86717,86719,86721,86723,86725,86727,86729,86731,86733,86735,86737],{"class":161,"line":2230},[159,86716,2146],{"class":165},[159,86718,106],{"class":169},[159,86720,8082],{"class":165},[159,86722,8085],{"class":169},[159,86724,8088],{"class":185},[159,86726,189],{"class":165},[159,86728,11286],{"class":192},[159,86730,11343],{"class":165},[159,86732,8085],{"class":169},[159,86734,2158],{"class":165},[159,86736,106],{"class":169},[159,86738,173],{"class":165},[159,86740,86741,86743,86745,86747,86749,86751,86753,86755,86757,86759,86761,86763],{"class":161,"line":2243},[159,86742,2146],{"class":165},[159,86744,106],{"class":169},[159,86746,8082],{"class":165},[159,86748,8085],{"class":169},[159,86750,8088],{"class":185},[159,86752,189],{"class":165},[159,86754,11286],{"class":192},[159,86756,11370],{"class":165},[159,86758,8085],{"class":169},[159,86760,2158],{"class":165},[159,86762,106],{"class":169},[159,86764,173],{"class":165},[159,86766,86767,86769,86771,86773,86775,86777,86779,86781,86783,86785,86787,86789],{"class":161,"line":2256},[159,86768,2146],{"class":165},[159,86770,106],{"class":169},[159,86772,8082],{"class":165},[159,86774,8085],{"class":169},[159,86776,8088],{"class":185},[159,86778,189],{"class":165},[159,86780,11286],{"class":192},[159,86782,11397],{"class":165},[159,86784,8085],{"class":169},[159,86786,2158],{"class":165},[159,86788,106],{"class":169},[159,86790,173],{"class":165},[159,86792,86793,86795,86797],{"class":161,"line":2266},[159,86794,2259],{"class":165},[159,86796,103],{"class":169},[159,86798,173],{"class":165},[159,86800,86801,86803,86805],{"class":161,"line":2275},[159,86802,1084],{"class":165},[159,86804,182],{"class":169},[159,86806,173],{"class":165},[159,86808,86809,86811,86813,86815,86817,86819],{"class":161,"line":2284},[159,86810,2056],{"class":165},[159,86812,182],{"class":169},[159,86814,186],{"class":185},[159,86816,189],{"class":165},[159,86818,11434],{"class":192},[159,86820,173],{"class":165},[159,86822,86823,86825,86827,86829,86831,86833,86835,86837,86839,86841,86843,86845,86847,86849,86851,86853],{"class":161,"line":2293},[159,86824,2073],{"class":165},[159,86826,182],{"class":169},[159,86828,186],{"class":185},[159,86830,189],{"class":165},[159,86832,11449],{"class":192},[159,86834,8082],{"class":165},[159,86836,23],{"class":169},[159,86838,2078],{"class":185},[159,86840,189],{"class":165},[159,86842,11460],{"class":192},[159,86844,2086],{"class":185},[159,86846,189],{"class":165},[159,86848,552],{"class":192},[159,86850,11469],{"class":165},[159,86852,182],{"class":169},[159,86854,173],{"class":165},[159,86856,86857,86859,86861,86863,86865,86867,86869,86871,86873,86875,86877,86879,86881,86883,86885,86887],{"class":161,"line":2306},[159,86858,2073],{"class":165},[159,86860,182],{"class":169},[159,86862,186],{"class":185},[159,86864,189],{"class":165},[159,86866,9666],{"class":192},[159,86868,8082],{"class":165},[159,86870,23],{"class":169},[159,86872,2078],{"class":185},[159,86874,189],{"class":165},[159,86876,11496],{"class":192},[159,86878,2086],{"class":185},[159,86880,189],{"class":165},[159,86882,552],{"class":192},[159,86884,11469],{"class":165},[159,86886,182],{"class":169},[159,86888,173],{"class":165},[159,86890,86891,86893,86895,86897,86899,86901,86903,86905,86907,86909,86911,86913,86915,86917,86919,86921],{"class":161,"line":2330},[159,86892,2073],{"class":165},[159,86894,182],{"class":169},[159,86896,186],{"class":185},[159,86898,189],{"class":165},[159,86900,9666],{"class":192},[159,86902,8082],{"class":165},[159,86904,23],{"class":169},[159,86906,2078],{"class":185},[159,86908,189],{"class":165},[159,86910,11531],{"class":192},[159,86912,2086],{"class":185},[159,86914,189],{"class":165},[159,86916,552],{"class":192},[159,86918,11469],{"class":165},[159,86920,182],{"class":169},[159,86922,173],{"class":165},[159,86924,86925,86927,86929,86931,86933,86935,86937,86939,86941,86943,86945,86947,86949,86951,86953,86955],{"class":161,"line":2350},[159,86926,2073],{"class":165},[159,86928,182],{"class":169},[159,86930,186],{"class":185},[159,86932,189],{"class":165},[159,86934,9666],{"class":192},[159,86936,8082],{"class":165},[159,86938,23],{"class":169},[159,86940,2078],{"class":185},[159,86942,189],{"class":165},[159,86944,11566],{"class":192},[159,86946,2086],{"class":185},[159,86948,189],{"class":165},[159,86950,552],{"class":192},[159,86952,11469],{"class":165},[159,86954,182],{"class":169},[159,86956,173],{"class":165},[159,86958,86959,86961,86963,86965,86967,86969,86971,86973,86975,86977,86979,86981,86983,86985,86987,86989],{"class":161,"line":2370},[159,86960,2073],{"class":165},[159,86962,182],{"class":169},[159,86964,186],{"class":185},[159,86966,189],{"class":165},[159,86968,9666],{"class":192},[159,86970,8082],{"class":165},[159,86972,23],{"class":169},[159,86974,2078],{"class":185},[159,86976,189],{"class":165},[159,86978,11601],{"class":192},[159,86980,2086],{"class":185},[159,86982,189],{"class":165},[159,86984,552],{"class":192},[159,86986,11469],{"class":165},[159,86988,182],{"class":169},[159,86990,173],{"class":165},[159,86992,86993,86995,86997],{"class":161,"line":2390},[159,86994,1084],{"class":165},[159,86996,182],{"class":169},[159,86998,173],{"class":165},[159,87000,87001,87003,87005],{"class":161,"line":2410},[159,87002,254],{"class":165},[159,87004,182],{"class":169},[159,87006,173],{"class":165},[159,87008,87009,87011,87013],{"class":161,"line":2430},[159,87010,179],{"class":165},[159,87012,228],{"class":169},[159,87014,173],{"class":165},[159,87016,87017],{"class":161,"line":2450},[159,87018,11642],{"class":1135},[159,87020,87021],{"class":161,"line":2471},[159,87022,11647],{"class":1135},[159,87024,87025,87027,87029,87031,87033,87035,87037,87039],{"class":161,"line":2477},[159,87026,1143],{"class":1142},[159,87028,11654],{"class":1146},[159,87030,1150],{"class":1142},[159,87032,1153],{"class":165},[159,87034,2551],{"class":185},[159,87036,1159],{"class":165},[159,87038,11665],{"class":192},[159,87040,1165],{"class":165},[159,87042,87043],{"class":161,"line":2498},[159,87044,11672],{"class":1135},[159,87046,87047,87049,87051,87053,87055,87057,87059,87061,87063,87065,87067,87069,87071],{"class":161,"line":2518},[159,87048,11677],{"class":1142},[159,87050,11680],{"class":165},[159,87052,11683],{"class":1142},[159,87054,1186],{"class":165},[159,87056,189],{"class":1142},[159,87058,1259],{"class":1146},[159,87060,11692],{"class":165},[159,87062,166],{"class":1142},[159,87064,11697],{"class":165},[159,87066,3828],{"class":1146},[159,87068,11702],{"class":165},[159,87070,11705],{"class":1142},[159,87072,1262],{"class":165},[159,87074,87075],{"class":161,"line":2539},[159,87076,11712],{"class":1135},[159,87078,87079],{"class":161,"line":2561},[159,87080,11717],{"class":1135},[159,87082,87083,87085,87087,87089,87091,87093,87095],{"class":161,"line":2573},[159,87084,11722],{"class":165},[159,87086,4724],{"class":185},[159,87088,1159],{"class":165},[159,87090,11729],{"class":192},[159,87092,1939],{"class":165},[159,87094,1215],{"class":1142},[159,87096,1218],{"class":165},[159,87098,87099],{"class":161,"line":2591},[159,87100,11740],{"class":1135},[159,87102,87103],{"class":161,"line":2602},[159,87104,11745],{"class":1135},[159,87106,87107],{"class":161,"line":2613},[159,87108,11750],{"class":1135},[159,87110,87111,87113,87115,87117,87119,87121,87123,87125,87127],{"class":161,"line":2624},[159,87112,11755],{"class":165},[159,87114,1156],{"class":185},[159,87116,1159],{"class":165},[159,87118,11762],{"class":192},[159,87120,3900],{"class":165},[159,87122,3903],{"class":185},[159,87124,1159],{"class":165},[159,87126,11771],{"class":192},[159,87128,1165],{"class":165},[159,87130,87131],{"class":161,"line":2630},[159,87132,11778],{"class":1135},[159,87134,87135,87137,87139,87141,87143,87145],{"class":161,"line":2636},[159,87136,11783],{"class":1146},[159,87138,11786],{"class":165},[159,87140,2680],{"class":185},[159,87142,1159],{"class":165},[159,87144,11771],{"class":192},[159,87146,1165],{"class":165},[159,87148,87149],{"class":161,"line":2642},[159,87150,590],{"emptyLinePlaceholder":589},[159,87152,87153],{"class":161,"line":2648},[159,87154,11803],{"class":1135},[159,87156,87157],{"class":161,"line":2674},[159,87158,11808],{"class":1135},[159,87160,87161,87163,87165,87167,87169,87171,87173,87175,87177],{"class":161,"line":2689},[159,87162,11755],{"class":165},[159,87164,1156],{"class":185},[159,87166,1159],{"class":165},[159,87168,11819],{"class":192},[159,87170,3900],{"class":165},[159,87172,3903],{"class":185},[159,87174,1159],{"class":165},[159,87176,11771],{"class":192},[159,87178,1165],{"class":165},[159,87180,87181],{"class":161,"line":2694},[159,87182,11834],{"class":1135},[159,87184,87185,87187,87189,87191,87193,87195,87197,87199,87201,87203,87205,87207,87209],{"class":161,"line":2721},[159,87186,11755],{"class":165},[159,87188,1156],{"class":185},[159,87190,1159],{"class":165},[159,87192,11845],{"class":192},[159,87194,1241],{"class":165},[159,87196,3925],{"class":1142},[159,87198,2707],{"class":1146},[159,87200,3930],{"class":192},[159,87202,3900],{"class":165},[159,87204,2680],{"class":185},[159,87206,1159],{"class":165},[159,87208,11771],{"class":192},[159,87210,1165],{"class":165},[159,87212,87213],{"class":161,"line":2726},[159,87214,590],{"emptyLinePlaceholder":589},[159,87216,87217],{"class":161,"line":2735},[159,87218,11872],{"class":165},[159,87220,87221],{"class":161,"line":2744},[159,87222,1508],{"class":165},[159,87224,87225,87227,87229],{"class":161,"line":2753},[159,87226,254],{"class":165},[159,87228,228],{"class":169},[159,87230,173],{"class":165},[159,87232,87233,87235,87237],{"class":161,"line":2758},[159,87234,264],{"class":165},[159,87236,170],{"class":169},[159,87238,173],{"class":165},[159,87240,87241],{"class":161,"line":3959},[159,87242,590],{"emptyLinePlaceholder":589},[159,87244,87245,87247,87249],{"class":161,"line":3968},[159,87246,264],{"class":165},[159,87248,522],{"class":169},[159,87250,173],{"class":165},[14,87252,11907],{},[14,87254,11910],{},[14,87256,11913],{},[14,87258,433],{},[14,87260,11918],{},[14,87262,11921],{},[14,87264,11924],{},[14,87266,11927],{},[14,87268,11930],{},[14,87270,11933],{},[14,87272,11936],{},[14,87274,11939],{},[14,87276,11942],{},[14,87278,11945],{},[14,87280,11948],{},[14,87282,11951],{},[14,87284,886],{},[14,87286,11956],{},[14,87288,11959],{},[42,87290,11963],{"id":11962},[151,87292,87293],{"className":520,"code":11966,"language":522,"meta":25,"style":25},[49,87294,87295,87305,87309,87317,87321,87335,87349,87361,87369,87375,87385,87395,87399,87403,87409,87419,87429,87445,87457,87471,87481,87485,87489,87495,87505,87521,87531,87543,87547,87551,87557,87573,87583,87595,87599,87603,87609,87621,87625,87633,87641,87645,87653,87661,87669,87683,87723,87731,87743,87755,87767,87775,87783,87791,87817,87825,87837,87849,87861,87869,87877,87885,87911,87919,87931,87943,87955,87963,87971,87979,88005,88013,88025,88037,88049,88057,88065,88073,88077,88095,88099,88117,88121,88137,88141,88147,88151,88179,88189,88193,88197,88201,88205,88233,88237,88253,88257,88261,88265,88269,88293,88297,88301,88309,88317,88321],{"__ignoreMap":25},[159,87296,87297,87299,87301,87303],{"class":161,"line":162},[159,87298,914],{"class":165},[159,87300,917],{"class":169},[159,87302,920],{"class":185},[159,87304,173],{"class":165},[159,87306,87307],{"class":161,"line":176},[159,87308,590],{"emptyLinePlaceholder":589},[159,87310,87311,87313,87315],{"class":161,"line":203},[159,87312,166],{"class":165},[159,87314,522],{"class":169},[159,87316,173],{"class":165},[159,87318,87319],{"class":161,"line":223},[159,87320,590],{"emptyLinePlaceholder":589},[159,87322,87323,87325,87327,87329,87331,87333],{"class":161,"line":233},[159,87324,166],{"class":165},[159,87326,949],{"class":169},[159,87328,931],{"class":185},[159,87330,189],{"class":165},[159,87332,936],{"class":192},[159,87334,173],{"class":165},[159,87336,87337,87339,87341,87343,87345,87347],{"class":161,"line":239},[159,87338,179],{"class":165},[159,87340,958],{"class":169},[159,87342,961],{"class":185},[159,87344,189],{"class":165},[159,87346,966],{"class":192},[159,87348,173],{"class":165},[159,87350,87351,87353,87355,87357,87359],{"class":161,"line":245},[159,87352,179],{"class":165},[159,87354,998],{"class":169},[159,87356,2158],{"class":165},[159,87358,998],{"class":169},[159,87360,173],{"class":165},[159,87362,87363,87365,87367],{"class":161,"line":251},[159,87364,179],{"class":165},[159,87366,1468],{"class":169},[159,87368,173],{"class":165},[159,87370,87371,87373],{"class":161,"line":261},[159,87372,1475],{"class":169},[159,87374,1478],{"class":165},[159,87376,87377,87379,87381,87383],{"class":161,"line":603},[159,87378,1497],{"class":1146},[159,87380,1486],{"class":165},[159,87382,1489],{"class":1146},[159,87384,1492],{"class":165},[159,87386,87387,87389,87391,87393],{"class":161,"line":621},[159,87388,1483],{"class":1146},[159,87390,1486],{"class":165},[159,87392,1489],{"class":1146},[159,87394,1492],{"class":165},[159,87396,87397],{"class":161,"line":634},[159,87398,1508],{"class":165},[159,87400,87401],{"class":161,"line":640},[159,87402,590],{"emptyLinePlaceholder":589},[159,87404,87405,87407],{"class":161,"line":1075},[159,87406,12081],{"class":169},[159,87408,1478],{"class":165},[159,87410,87411,87413,87415,87417],{"class":161,"line":1081},[159,87412,12088],{"class":1146},[159,87414,1486],{"class":165},[159,87416,12093],{"class":1146},[159,87418,1492],{"class":165},[159,87420,87421,87423,87425,87427],{"class":161,"line":1091},[159,87422,12100],{"class":1146},[159,87424,1486],{"class":165},[159,87426,1489],{"class":1146},[159,87428,1492],{"class":165},[159,87430,87431,87433,87435,87437,87439,87441,87443],{"class":161,"line":1100},[159,87432,9018],{"class":1146},[159,87434,1486],{"class":165},[159,87436,4932],{"class":1146},[159,87438,1571],{"class":1142},[159,87440,7709],{"class":1146},[159,87442,12121],{"class":1146},[159,87444,1492],{"class":165},[159,87446,87447,87449,87451,87453,87455],{"class":161,"line":1123},[159,87448,1563],{"class":1146},[159,87450,1486],{"class":165},[159,87452,12132],{"class":1146},[159,87454,1571],{"class":1142},[159,87456,1492],{"class":165},[159,87458,87459,87461,87463,87465,87467,87469],{"class":161,"line":1132},[159,87460,1497],{"class":1146},[159,87462,1486],{"class":165},[159,87464,1596],{"class":1146},[159,87466,1571],{"class":1142},[159,87468,1601],{"class":1146},[159,87470,1492],{"class":165},[159,87472,87473,87475,87477,87479],{"class":161,"line":1139},[159,87474,4188],{"class":1146},[159,87476,1486],{"class":165},[159,87478,4193],{"class":1146},[159,87480,1492],{"class":165},[159,87482,87483],{"class":161,"line":1168},[159,87484,1508],{"class":165},[159,87486,87487],{"class":161,"line":1174},[159,87488,590],{"emptyLinePlaceholder":589},[159,87490,87491,87493],{"class":161,"line":1180},[159,87492,12173],{"class":169},[159,87494,1478],{"class":165},[159,87496,87497,87499,87501,87503],{"class":161,"line":1194},[159,87498,1682],{"class":1146},[159,87500,1486],{"class":165},[159,87502,12184],{"class":1146},[159,87504,1492],{"class":165},[159,87506,87507,87509,87511,87513,87515,87517,87519],{"class":161,"line":1200},[159,87508,12191],{"class":1146},[159,87510,1486],{"class":165},[159,87512,9382],{"class":1146},[159,87514,11123],{"class":1146},[159,87516,1571],{"class":1142},[159,87518,12202],{"class":192},[159,87520,1492],{"class":165},[159,87522,87523,87525,87527,87529],{"class":161,"line":1221},[159,87524,4322],{"class":1146},[159,87526,1486],{"class":165},[159,87528,7868],{"class":1146},[159,87530,1492],{"class":165},[159,87532,87533,87535,87537,87539,87541],{"class":161,"line":1230},[159,87534,1578],{"class":1146},[159,87536,1486],{"class":165},[159,87538,10876],{"class":1146},[159,87540,1571],{"class":1142},[159,87542,1492],{"class":165},[159,87544,87545],{"class":161,"line":1247},[159,87546,1508],{"class":165},[159,87548,87549],{"class":161,"line":1265},[159,87550,590],{"emptyLinePlaceholder":589},[159,87552,87553,87555],{"class":161,"line":1277},[159,87554,12239],{"class":169},[159,87556,1478],{"class":165},[159,87558,87559,87561,87563,87565,87567,87569,87571],{"class":161,"line":1283},[159,87560,9018],{"class":1146},[159,87562,1486],{"class":165},[159,87564,4932],{"class":1146},[159,87566,1571],{"class":1142},[159,87568,7709],{"class":1146},[159,87570,12256],{"class":1146},[159,87572,1492],{"class":165},[159,87574,87575,87577,87579,87581],{"class":161,"line":1294},[159,87576,4322],{"class":1146},[159,87578,1486],{"class":165},[159,87580,12267],{"class":1146},[159,87582,1492],{"class":165},[159,87584,87585,87587,87589,87591,87593],{"class":161,"line":1305},[159,87586,1483],{"class":1146},[159,87588,1486],{"class":165},[159,87590,1964],{"class":1146},[159,87592,1571],{"class":1142},[159,87594,1492],{"class":165},[159,87596,87597],{"class":161,"line":1311},[159,87598,1508],{"class":165},[159,87600,87601],{"class":161,"line":1322},[159,87602,590],{"emptyLinePlaceholder":589},[159,87604,87605,87607],{"class":161,"line":1327},[159,87606,12294],{"class":185},[159,87608,1478],{"class":165},[159,87610,87611,87613,87615,87617,87619],{"class":161,"line":1336},[159,87612,1563],{"class":1146},[159,87614,1486],{"class":165},[159,87616,9100],{"class":1146},[159,87618,1571],{"class":1142},[159,87620,1492],{"class":165},[159,87622,87623],{"class":161,"line":1345},[159,87624,1508],{"class":165},[159,87626,87627,87629,87631],{"class":161,"line":1350},[159,87628,254],{"class":165},[159,87630,1468],{"class":169},[159,87632,173],{"class":165},[159,87634,87635,87637,87639],{"class":161,"line":1764},[159,87636,264],{"class":165},[159,87638,949],{"class":169},[159,87640,173],{"class":165},[159,87642,87643],{"class":161,"line":1769},[159,87644,590],{"emptyLinePlaceholder":589},[159,87646,87647,87649,87651],{"class":161,"line":1777},[159,87648,166],{"class":165},[159,87650,170],{"class":169},[159,87652,173],{"class":165},[159,87654,87655,87657,87659],{"class":161,"line":1788},[159,87656,179],{"class":165},[159,87658,12347],{"class":169},[159,87660,173],{"class":165},[159,87662,87663,87665,87667],{"class":161,"line":1802},[159,87664,2056],{"class":165},[159,87666,12356],{"class":169},[159,87668,173],{"class":165},[159,87670,87671,87673,87675,87677,87679,87681],{"class":161,"line":1815},[159,87672,2073],{"class":165},[159,87674,12365],{"class":169},[159,87676,186],{"class":185},[159,87678,189],{"class":165},[159,87680,12372],{"class":192},[159,87682,173],{"class":165},[159,87684,87685,87687,87689,87691,87693,87695,87697,87699,87701,87703,87705,87707,87709,87711,87713,87715,87717,87719,87721],{"class":161,"line":1828},[159,87686,2146],{"class":165},[159,87688,536],{"class":169},[159,87690,539],{"class":185},[159,87692,189],{"class":165},[159,87694,544],{"class":192},[159,87696,547],{"class":185},[159,87698,189],{"class":165},[159,87700,552],{"class":192},[159,87702,555],{"class":185},[159,87704,189],{"class":165},[159,87706,12399],{"class":192},[159,87708,12402],{"class":165},[159,87710,159],{"class":169},[159,87712,186],{"class":185},[159,87714,189],{"class":165},[159,87716,12411],{"class":192},[159,87718,12414],{"class":165},[159,87720,159],{"class":169},[159,87722,173],{"class":165},[159,87724,87725,87727,87729],{"class":161,"line":1841},[159,87726,2259],{"class":165},[159,87728,12365],{"class":169},[159,87730,173],{"class":165},[159,87732,87733,87735,87737,87739,87741],{"class":161,"line":1852},[159,87734,2073],{"class":165},[159,87736,12365],{"class":169},[159,87738,12435],{"class":165},[159,87740,12365],{"class":169},[159,87742,173],{"class":165},[159,87744,87745,87747,87749,87751,87753],{"class":161,"line":1866},[159,87746,2073],{"class":165},[159,87748,12365],{"class":169},[159,87750,12448],{"class":165},[159,87752,12365],{"class":169},[159,87754,173],{"class":165},[159,87756,87757,87759,87761,87763,87765],{"class":161,"line":1879},[159,87758,2073],{"class":165},[159,87760,12365],{"class":169},[159,87762,12461],{"class":165},[159,87764,12365],{"class":169},[159,87766,173],{"class":165},[159,87768,87769,87771,87773],{"class":161,"line":1884},[159,87770,1084],{"class":165},[159,87772,12356],{"class":169},[159,87774,173],{"class":165},[159,87776,87777,87779,87781],{"class":161,"line":1889},[159,87778,2056],{"class":165},[159,87780,12356],{"class":169},[159,87782,173],{"class":165},[159,87784,87785,87787,87789],{"class":161,"line":1899},[159,87786,2073],{"class":165},[159,87788,12488],{"class":169},[159,87790,173],{"class":165},[159,87792,87793,87795,87797,87799,87801,87803,87805,87807,87809,87811,87813,87815],{"class":161,"line":1912},[159,87794,2146],{"class":165},[159,87796,536],{"class":169},[159,87798,539],{"class":185},[159,87800,189],{"class":165},[159,87802,544],{"class":192},[159,87804,547],{"class":185},[159,87806,189],{"class":165},[159,87808,12509],{"class":192},[159,87810,186],{"class":185},[159,87812,189],{"class":165},[159,87814,12516],{"class":192},[159,87816,173],{"class":165},[159,87818,87819,87821,87823],{"class":161,"line":1925},[159,87820,2259],{"class":165},[159,87822,12488],{"class":169},[159,87824,173],{"class":165},[159,87826,87827,87829,87831,87833,87835],{"class":161,"line":1956},[159,87828,2073],{"class":165},[159,87830,12488],{"class":169},[159,87832,8204],{"class":165},[159,87834,12488],{"class":169},[159,87836,173],{"class":165},[159,87838,87839,87841,87843,87845,87847],{"class":161,"line":1971},[159,87840,2073],{"class":165},[159,87842,12488],{"class":169},[159,87844,12547],{"class":165},[159,87846,12488],{"class":169},[159,87848,173],{"class":165},[159,87850,87851,87853,87855,87857,87859],{"class":161,"line":1976},[159,87852,2073],{"class":165},[159,87854,12488],{"class":169},[159,87856,12560],{"class":165},[159,87858,12488],{"class":169},[159,87860,173],{"class":165},[159,87862,87863,87865,87867],{"class":161,"line":1981},[159,87864,1084],{"class":165},[159,87866,12356],{"class":169},[159,87868,173],{"class":165},[159,87870,87871,87873,87875],{"class":161,"line":1989},[159,87872,2056],{"class":165},[159,87874,12356],{"class":169},[159,87876,173],{"class":165},[159,87878,87879,87881,87883],{"class":161,"line":2001},[159,87880,2073],{"class":165},[159,87882,12488],{"class":169},[159,87884,173],{"class":165},[159,87886,87887,87889,87891,87893,87895,87897,87899,87901,87903,87905,87907,87909],{"class":161,"line":2006},[159,87888,2146],{"class":165},[159,87890,536],{"class":169},[159,87892,539],{"class":185},[159,87894,189],{"class":165},[159,87896,544],{"class":192},[159,87898,547],{"class":185},[159,87900,189],{"class":165},[159,87902,12509],{"class":192},[159,87904,186],{"class":185},[159,87906,189],{"class":165},[159,87908,12516],{"class":192},[159,87910,173],{"class":165},[159,87912,87913,87915,87917],{"class":161,"line":2015},[159,87914,2259],{"class":165},[159,87916,12488],{"class":169},[159,87918,173],{"class":165},[159,87920,87921,87923,87925,87927,87929],{"class":161,"line":2024},[159,87922,2073],{"class":165},[159,87924,12488],{"class":169},[159,87926,12631],{"class":165},[159,87928,12488],{"class":169},[159,87930,173],{"class":165},[159,87932,87933,87935,87937,87939,87941],{"class":161,"line":2029},[159,87934,2073],{"class":165},[159,87936,12488],{"class":169},[159,87938,12547],{"class":165},[159,87940,12488],{"class":169},[159,87942,173],{"class":165},[159,87944,87945,87947,87949,87951,87953],{"class":161,"line":2038},[159,87946,2073],{"class":165},[159,87948,12488],{"class":169},[159,87950,12656],{"class":165},[159,87952,12488],{"class":169},[159,87954,173],{"class":165},[159,87956,87957,87959,87961],{"class":161,"line":2053},[159,87958,1084],{"class":165},[159,87960,12356],{"class":169},[159,87962,173],{"class":165},[159,87964,87965,87967,87969],{"class":161,"line":2070},[159,87966,2056],{"class":165},[159,87968,12356],{"class":169},[159,87970,173],{"class":165},[159,87972,87973,87975,87977],{"class":161,"line":2095},[159,87974,2073],{"class":165},[159,87976,12488],{"class":169},[159,87978,173],{"class":165},[159,87980,87981,87983,87985,87987,87989,87991,87993,87995,87997,87999,88001,88003],{"class":161,"line":2104},[159,87982,2146],{"class":165},[159,87984,536],{"class":169},[159,87986,539],{"class":185},[159,87988,189],{"class":165},[159,87990,544],{"class":192},[159,87992,547],{"class":185},[159,87994,189],{"class":165},[159,87996,12509],{"class":192},[159,87998,186],{"class":185},[159,88000,189],{"class":165},[159,88002,12516],{"class":192},[159,88004,173],{"class":165},[159,88006,88007,88009,88011],{"class":161,"line":2120},[159,88008,2259],{"class":165},[159,88010,12488],{"class":169},[159,88012,173],{"class":165},[159,88014,88015,88017,88019,88021,88023],{"class":161,"line":2134},[159,88016,2073],{"class":165},[159,88018,12488],{"class":169},[159,88020,12727],{"class":165},[159,88022,12488],{"class":169},[159,88024,173],{"class":165},[159,88026,88027,88029,88031,88033,88035],{"class":161,"line":2143},[159,88028,2073],{"class":165},[159,88030,12488],{"class":169},[159,88032,12547],{"class":165},[159,88034,12488],{"class":169},[159,88036,173],{"class":165},[159,88038,88039,88041,88043,88045,88047],{"class":161,"line":2165},[159,88040,2073],{"class":165},[159,88042,12488],{"class":169},[159,88044,12752],{"class":165},[159,88046,12488],{"class":169},[159,88048,173],{"class":165},[159,88050,88051,88053,88055],{"class":161,"line":2178},[159,88052,1084],{"class":165},[159,88054,12356],{"class":169},[159,88056,173],{"class":165},[159,88058,88059,88061,88063],{"class":161,"line":2191},[159,88060,254],{"class":165},[159,88062,12347],{"class":169},[159,88064,173],{"class":165},[159,88066,88067,88069,88071],{"class":161,"line":2204},[159,88068,179],{"class":165},[159,88070,228],{"class":169},[159,88072,173],{"class":165},[159,88074,88075],{"class":161,"line":2217},[159,88076,12785],{"class":1135},[159,88078,88079,88081,88083,88085,88087,88089,88091,88093],{"class":161,"line":2230},[159,88080,1143],{"class":1142},[159,88082,12792],{"class":1146},[159,88084,1150],{"class":1142},[159,88086,1153],{"class":165},[159,88088,1156],{"class":185},[159,88090,1159],{"class":165},[159,88092,12803],{"class":192},[159,88094,1165],{"class":165},[159,88096,88097],{"class":161,"line":2243},[159,88098,12810],{"class":1135},[159,88100,88101,88103,88105,88107,88109,88111,88113,88115],{"class":161,"line":2256},[159,88102,1143],{"class":1142},[159,88104,12817],{"class":1146},[159,88106,1150],{"class":1142},[159,88108,1153],{"class":165},[159,88110,2551],{"class":185},[159,88112,1159],{"class":165},[159,88114,12828],{"class":192},[159,88116,1165],{"class":165},[159,88118,88119],{"class":161,"line":2266},[159,88120,12835],{"class":1135},[159,88122,88123,88125,88127,88129,88131,88133,88135],{"class":161,"line":2275},[159,88124,12840],{"class":165},[159,88126,4724],{"class":185},[159,88128,1159],{"class":165},[159,88130,4729],{"class":192},[159,88132,1939],{"class":165},[159,88134,1215],{"class":1142},[159,88136,1218],{"class":165},[159,88138,88139],{"class":161,"line":2284},[159,88140,12857],{"class":1135},[159,88142,88143,88145],{"class":161,"line":2293},[159,88144,12862],{"class":1135},[159,88146,12865],{"class":1135},[159,88148,88149],{"class":161,"line":2306},[159,88150,12870],{"class":1135},[159,88152,88153,88155,88157,88159,88161,88163,88165,88167,88169,88171,88173,88175,88177],{"class":161,"line":2330},[159,88154,12875],{"class":1142},[159,88156,11680],{"class":165},[159,88158,11683],{"class":1142},[159,88160,1186],{"class":165},[159,88162,189],{"class":1142},[159,88164,1259],{"class":1146},[159,88166,11692],{"class":165},[159,88168,166],{"class":1142},[159,88170,12892],{"class":165},[159,88172,3828],{"class":1146},[159,88174,11702],{"class":165},[159,88176,11705],{"class":1142},[159,88178,1262],{"class":165},[159,88180,88181,88183,88185,88187],{"class":161,"line":2350},[159,88182,12905],{"class":165},[159,88184,189],{"class":1142},[159,88186,12910],{"class":1146},[159,88188,12913],{"class":165},[159,88190,88191],{"class":161,"line":2370},[159,88192,1308],{"class":165},[159,88194,88195],{"class":161,"line":2390},[159,88196,4863],{"class":165},[159,88198,88199],{"class":161,"line":2410},[159,88200,12926],{"class":1135},[159,88202,88203],{"class":161,"line":2430},[159,88204,590],{"emptyLinePlaceholder":589},[159,88206,88207,88209,88211,88213,88215,88217,88219,88221,88223,88225,88227,88229,88231],{"class":161,"line":2450},[159,88208,11677],{"class":1142},[159,88210,11680],{"class":165},[159,88212,11683],{"class":1142},[159,88214,1186],{"class":165},[159,88216,189],{"class":1142},[159,88218,1259],{"class":1146},[159,88220,11692],{"class":165},[159,88222,166],{"class":1142},[159,88224,12892],{"class":165},[159,88226,3828],{"class":1146},[159,88228,11702],{"class":165},[159,88230,11705],{"class":1142},[159,88232,1262],{"class":165},[159,88234,88235],{"class":161,"line":2471},[159,88236,12963],{"class":1135},[159,88238,88239,88241,88243,88245,88247,88249,88251],{"class":161,"line":2477},[159,88240,12968],{"class":165},[159,88242,4724],{"class":185},[159,88244,1159],{"class":165},[159,88246,4729],{"class":192},[159,88248,1939],{"class":165},[159,88250,1215],{"class":1142},[159,88252,1218],{"class":165},[159,88254,88255],{"class":161,"line":2498},[159,88256,12985],{"class":1135},[159,88258,88259],{"class":161,"line":2518},[159,88260,12990],{"class":1135},[159,88262,88263],{"class":161,"line":2539},[159,88264,12995],{"class":1135},[159,88266,88267],{"class":161,"line":2561},[159,88268,13000],{"class":1135},[159,88270,88271,88273,88275,88277,88279,88281,88283,88285,88287,88289,88291],{"class":161,"line":2573},[159,88272,13005],{"class":165},[159,88274,189],{"class":1142},[159,88276,1153],{"class":165},[159,88278,2551],{"class":185},[159,88280,1159],{"class":165},[159,88282,13016],{"class":192},[159,88284,13019],{"class":165},[159,88286,3828],{"class":1146},[159,88288,4820],{"class":1142},[159,88290,12892],{"class":165},[159,88292,2718],{"class":1146},[159,88294,88295],{"class":161,"line":2591},[159,88296,11872],{"class":165},[159,88298,88299],{"class":161,"line":2602},[159,88300,1508],{"class":165},[159,88302,88303,88305,88307],{"class":161,"line":2613},[159,88304,254],{"class":165},[159,88306,228],{"class":169},[159,88308,173],{"class":165},[159,88310,88311,88313,88315],{"class":161,"line":2624},[159,88312,264],{"class":165},[159,88314,170],{"class":169},[159,88316,173],{"class":165},[159,88318,88319],{"class":161,"line":2630},[159,88320,590],{"emptyLinePlaceholder":589},[159,88322,88323,88325,88327],{"class":161,"line":2636},[159,88324,264],{"class":165},[159,88326,522],{"class":169},[159,88328,173],{"class":165},[14,88330,13066],{},[14,88332,13069],{},[14,88334,13072,88335,13076,88337,11680,88339,13083,88341,13087],{},[49,88336,13075],{},[61,88338,13079],{},[49,88340,13082],{},[49,88342,13086],{},[14,88344,13090,88345,13094,88347],{},[49,88346,13093],{},[61,88348,13097,88349,13101],{},[49,88350,13100],{},[14,88352,13104],{},[14,88354,88355],{},[23,88356],{"alt":25,"src":13109},[14,88358,88359,13115],{},[13113,88360],{},[14,88362,88363],{},[23,88364],{"alt":25,"src":13120},[37,88366,13124],{"id":13123},[42,88368,13128],{"id":13127},[14,88370,88371],{},[23,88372],{"alt":25,"src":13133},[326,88374,13137],{"id":13136},[14,88376,88377],{},[23,88378],{"alt":25,"src":13142},[151,88380,88381],{"className":520,"code":13145,"language":522,"meta":25,"style":25},[49,88382,88383,88393,88407,88411,88419,88433,88453,88465,88473,88479,88491,88503,88513,88517,88521,88527,88539,88551,88561,88565,88573,88581,88585,88593,88607,88625,88633,88641,88659,88677,88693,88703,88711,88727,88737,88745,88761,88771,88779,88787,88795,88799],{"__ignoreMap":25},[159,88384,88385,88387,88389,88391],{"class":161,"line":162},[159,88386,914],{"class":165},[159,88388,917],{"class":169},[159,88390,920],{"class":185},[159,88392,173],{"class":165},[159,88394,88395,88397,88399,88401,88403,88405],{"class":161,"line":176},[159,88396,166],{"class":165},[159,88398,522],{"class":169},[159,88400,931],{"class":185},[159,88402,189],{"class":165},[159,88404,936],{"class":192},[159,88406,173],{"class":165},[159,88408,88409],{"class":161,"line":203},[159,88410,590],{"emptyLinePlaceholder":589},[159,88412,88413,88415,88417],{"class":161,"line":223},[159,88414,166],{"class":165},[159,88416,949],{"class":169},[159,88418,173],{"class":165},[159,88420,88421,88423,88425,88427,88429,88431],{"class":161,"line":233},[159,88422,179],{"class":165},[159,88424,958],{"class":169},[159,88426,961],{"class":185},[159,88428,189],{"class":165},[159,88430,966],{"class":192},[159,88432,173],{"class":165},[159,88434,88435,88437,88439,88441,88443,88445,88447,88449,88451],{"class":161,"line":239},[159,88436,179],{"class":165},[159,88438,958],{"class":169},[159,88440,547],{"class":185},[159,88442,189],{"class":165},[159,88444,981],{"class":192},[159,88446,984],{"class":185},[159,88448,189],{"class":165},[159,88450,989],{"class":192},[159,88452,173],{"class":165},[159,88454,88455,88457,88459,88461,88463],{"class":161,"line":245},[159,88456,179],{"class":165},[159,88458,998],{"class":169},[159,88460,1001],{"class":165},[159,88462,998],{"class":169},[159,88464,173],{"class":165},[159,88466,88467,88469,88471],{"class":161,"line":251},[159,88468,179],{"class":165},[159,88470,1468],{"class":169},[159,88472,173],{"class":165},[159,88474,88475,88477],{"class":161,"line":261},[159,88476,13242],{"class":185},[159,88478,1478],{"class":165},[159,88480,88481,88483,88485,88487,88489],{"class":161,"line":603},[159,88482,1563],{"class":1146},[159,88484,1486],{"class":165},[159,88486,12132],{"class":1146},[159,88488,1571],{"class":1142},[159,88490,1492],{"class":165},[159,88492,88493,88495,88497,88499,88501],{"class":161,"line":621},[159,88494,1578],{"class":1146},[159,88496,1486],{"class":165},[159,88498,12132],{"class":1146},[159,88500,1571],{"class":1142},[159,88502,1492],{"class":165},[159,88504,88505,88507,88509,88511],{"class":161,"line":634},[159,88506,1682],{"class":1146},[159,88508,1486],{"class":165},[159,88510,13277],{"class":1146},[159,88512,1492],{"class":165},[159,88514,88515],{"class":161,"line":640},[159,88516,1508],{"class":165},[159,88518,88519],{"class":161,"line":1075},[159,88520,590],{"emptyLinePlaceholder":589},[159,88522,88523,88525],{"class":161,"line":1081},[159,88524,13292],{"class":185},[159,88526,1478],{"class":165},[159,88528,88529,88531,88533,88535,88537],{"class":161,"line":1091},[159,88530,1563],{"class":1146},[159,88532,1486],{"class":165},[159,88534,13303],{"class":1146},[159,88536,1571],{"class":1142},[159,88538,1492],{"class":165},[159,88540,88541,88543,88545,88547,88549],{"class":161,"line":1100},[159,88542,1578],{"class":1146},[159,88544,1486],{"class":165},[159,88546,13303],{"class":1146},[159,88548,1571],{"class":1142},[159,88550,1492],{"class":165},[159,88552,88553,88555,88557,88559],{"class":161,"line":1123},[159,88554,1682],{"class":1146},[159,88556,1486],{"class":165},[159,88558,1687],{"class":1146},[159,88560,1492],{"class":165},[159,88562,88563],{"class":161,"line":1132},[159,88564,1508],{"class":165},[159,88566,88567,88569,88571],{"class":161,"line":1139},[159,88568,254],{"class":165},[159,88570,1468],{"class":169},[159,88572,173],{"class":165},[159,88574,88575,88577,88579],{"class":161,"line":1168},[159,88576,264],{"class":165},[159,88578,949],{"class":169},[159,88580,173],{"class":165},[159,88582,88583],{"class":161,"line":1174},[159,88584,590],{"emptyLinePlaceholder":589},[159,88586,88587,88589,88591],{"class":161,"line":1180},[159,88588,166],{"class":165},[159,88590,170],{"class":169},[159,88592,173],{"class":165},[159,88594,88595,88597,88599,88601,88603,88605],{"class":161,"line":1194},[159,88596,179],{"class":165},[159,88598,182],{"class":169},[159,88600,186],{"class":185},[159,88602,189],{"class":165},[159,88604,13374],{"class":192},[159,88606,173],{"class":165},[159,88608,88609,88611,88613,88615,88617,88619,88621,88623],{"class":161,"line":1200},[159,88610,2056],{"class":165},[159,88612,182],{"class":169},[159,88614,186],{"class":185},[159,88616,189],{"class":165},[159,88618,13389],{"class":192},[159,88620,2158],{"class":165},[159,88622,182],{"class":169},[159,88624,173],{"class":165},[159,88626,88627,88629,88631],{"class":161,"line":1221},[159,88628,254],{"class":165},[159,88630,182],{"class":169},[159,88632,173],{"class":165},[159,88634,88635,88637,88639],{"class":161,"line":1230},[159,88636,179],{"class":165},[159,88638,228],{"class":169},[159,88640,173],{"class":165},[159,88642,88643,88645,88647,88649,88651,88653,88655,88657],{"class":161,"line":1247},[159,88644,1143],{"class":1142},[159,88646,13418],{"class":1146},[159,88648,1150],{"class":1142},[159,88650,1153],{"class":165},[159,88652,1156],{"class":185},[159,88654,1159],{"class":165},[159,88656,13429],{"class":192},[159,88658,1165],{"class":165},[159,88660,88661,88663,88665,88667,88669,88671,88673,88675],{"class":161,"line":1265},[159,88662,1143],{"class":1142},[159,88664,13438],{"class":1146},[159,88666,1150],{"class":1142},[159,88668,1153],{"class":165},[159,88670,1156],{"class":185},[159,88672,1159],{"class":165},[159,88674,13449],{"class":192},[159,88676,1165],{"class":165},[159,88678,88679,88681,88683,88685,88687,88689,88691],{"class":161,"line":1277},[159,88680,13456],{"class":165},[159,88682,4724],{"class":185},[159,88684,1159],{"class":165},[159,88686,4729],{"class":192},[159,88688,1939],{"class":165},[159,88690,1215],{"class":1142},[159,88692,1218],{"class":165},[159,88694,88695,88697,88699,88701],{"class":161,"line":1283},[159,88696,5845],{"class":185},[159,88698,1159],{"class":165},[159,88700,13477],{"class":192},[159,88702,1165],{"class":165},[159,88704,88705,88707,88709],{"class":161,"line":1294},[159,88706,1314],{"class":165},[159,88708,13082],{"class":1146},[159,88710,1165],{"class":165},[159,88712,88713,88715,88717,88719,88721,88723,88725],{"class":161,"line":1305},[159,88714,13492],{"class":165},[159,88716,4724],{"class":185},[159,88718,1159],{"class":165},[159,88720,4729],{"class":192},[159,88722,1939],{"class":165},[159,88724,1215],{"class":1142},[159,88726,1218],{"class":165},[159,88728,88729,88731,88733,88735],{"class":161,"line":1311},[159,88730,5845],{"class":185},[159,88732,1159],{"class":165},[159,88734,13513],{"class":192},[159,88736,1165],{"class":165},[159,88738,88739,88741,88743],{"class":161,"line":1322},[159,88740,1314],{"class":165},[159,88742,13082],{"class":1146},[159,88744,1165],{"class":165},[159,88746,88747,88749,88751,88753,88755,88757,88759],{"class":161,"line":1327},[159,88748,13528],{"class":165},[159,88750,4724],{"class":185},[159,88752,1159],{"class":165},[159,88754,4729],{"class":192},[159,88756,1939],{"class":165},[159,88758,1215],{"class":1142},[159,88760,1218],{"class":165},[159,88762,88763,88765,88767,88769],{"class":161,"line":1336},[159,88764,5845],{"class":185},[159,88766,1159],{"class":165},[159,88768,13549],{"class":192},[159,88770,1165],{"class":165},[159,88772,88773,88775,88777],{"class":161,"line":1345},[159,88774,1314],{"class":165},[159,88776,13082],{"class":1146},[159,88778,1165],{"class":165},[159,88780,88781,88783,88785],{"class":161,"line":1350},[159,88782,254],{"class":165},[159,88784,228],{"class":169},[159,88786,173],{"class":165},[159,88788,88789,88791,88793],{"class":161,"line":1764},[159,88790,264],{"class":165},[159,88792,170],{"class":169},[159,88794,173],{"class":165},[159,88796,88797],{"class":161,"line":1769},[159,88798,590],{"emptyLinePlaceholder":589},[159,88800,88801,88803,88805],{"class":161,"line":1777},[159,88802,264],{"class":165},[159,88804,522],{"class":169},[159,88806,173],{"class":165},[14,88808,88809],{},[23,88810],{"alt":25,"src":13592},[14,88812,13595],{},[326,88814,13599],{"id":13598},[14,88816,88817],{},[23,88818],{"alt":25,"src":13604},[14,88820,13607],{},[14,88822,13610],{},[326,88824,13614],{"id":13613},[14,88826,88827],{},[23,88828],{"alt":25,"src":13619},[326,88830,13623],{"id":13622},[14,88832,88833],{},[23,88834],{"alt":25,"src":13628},[14,88836,88837],{},[23,88838],{"alt":25,"src":13633},[326,88840,13637],{"id":13636},[134,88842,88843],{},[106,88844,13642],{},[14,88846,88847],{},[23,88848],{"alt":25,"src":13647},[14,88850,13650],{},[134,88852,88853],{"start":176},[106,88854,13655],{},[14,88856,88857],{},[23,88858],{"alt":25,"src":13660},[326,88860,13664],{"id":13663},[14,88862,88863],{},[23,88864],{"alt":25,"src":13669},[14,88866,88867],{},[23,88868],{"alt":25,"src":13674},[151,88870,88871],{"className":153,"code":13677,"language":155,"meta":25,"style":25},[49,88872,88873,88881,88895,88915,88923,88927,88931,88935,88939,88947,88955],{"__ignoreMap":25},[159,88874,88875,88877,88879],{"class":161,"line":162},[159,88876,166],{"class":165},[159,88878,170],{"class":169},[159,88880,173],{"class":165},[159,88882,88883,88885,88887,88889,88891,88893],{"class":161,"line":176},[159,88884,179],{"class":165},[159,88886,13694],{"class":169},[159,88888,13697],{"class":185},[159,88890,189],{"class":165},[159,88892,13702],{"class":192},[159,88894,173],{"class":165},[159,88896,88897,88899,88901,88903,88905,88907,88909,88911,88913],{"class":161,"line":203},[159,88898,2056],{"class":165},[159,88900,536],{"class":169},[159,88902,539],{"class":185},[159,88904,189],{"class":165},[159,88906,13717],{"class":192},[159,88908,13720],{"class":185},[159,88910,189],{"class":165},[159,88912,13725],{"class":192},[159,88914,173],{"class":165},[159,88916,88917,88919,88921],{"class":161,"line":223},[159,88918,2056],{"class":165},[159,88920,228],{"class":169},[159,88922,173],{"class":165},[159,88924,88925],{"class":161,"line":233},[159,88926,13740],{"class":165},[159,88928,88929],{"class":161,"line":239},[159,88930,13745],{"class":165},[159,88932,88933],{"class":161,"line":245},[159,88934,13750],{"class":165},[159,88936,88937],{"class":161,"line":251},[159,88938,11872],{"class":165},[159,88940,88941,88943,88945],{"class":161,"line":261},[159,88942,1084],{"class":165},[159,88944,228],{"class":169},[159,88946,173],{"class":165},[159,88948,88949,88951,88953],{"class":161,"line":603},[159,88950,254],{"class":165},[159,88952,13694],{"class":169},[159,88954,173],{"class":165},[159,88956,88957,88959,88961],{"class":161,"line":621},[159,88958,264],{"class":165},[159,88960,170],{"class":169},[159,88962,173],{"class":165},[14,88964,13781],{},[42,88966,13785],{"id":13784},[14,88968,88969],{},[23,88970],{"alt":25,"src":13790},[151,88972,88973],{"className":520,"code":13793,"language":522,"meta":25,"style":25},[49,88974,88975,88985,88999,89003,89011,89025,89045,89057,89065,89069,89077,89085,89097,89109,89121,89133,89145,89157,89165,89173,89177,89195,89215,89219,89223,89227,89231,89239,89243,89251,89255,89259,89263,89275,89283,89287,89291,89299,89307,89311],{"__ignoreMap":25},[159,88976,88977,88979,88981,88983],{"class":161,"line":162},[159,88978,914],{"class":165},[159,88980,917],{"class":169},[159,88982,920],{"class":185},[159,88984,173],{"class":165},[159,88986,88987,88989,88991,88993,88995,88997],{"class":161,"line":176},[159,88988,166],{"class":165},[159,88990,522],{"class":169},[159,88992,931],{"class":185},[159,88994,189],{"class":165},[159,88996,936],{"class":192},[159,88998,173],{"class":165},[159,89000,89001],{"class":161,"line":203},[159,89002,590],{"emptyLinePlaceholder":589},[159,89004,89005,89007,89009],{"class":161,"line":223},[159,89006,166],{"class":165},[159,89008,949],{"class":169},[159,89010,173],{"class":165},[159,89012,89013,89015,89017,89019,89021,89023],{"class":161,"line":233},[159,89014,179],{"class":165},[159,89016,958],{"class":169},[159,89018,961],{"class":185},[159,89020,189],{"class":165},[159,89022,966],{"class":192},[159,89024,173],{"class":165},[159,89026,89027,89029,89031,89033,89035,89037,89039,89041,89043],{"class":161,"line":239},[159,89028,179],{"class":165},[159,89030,958],{"class":169},[159,89032,547],{"class":185},[159,89034,189],{"class":165},[159,89036,981],{"class":192},[159,89038,984],{"class":185},[159,89040,189],{"class":165},[159,89042,989],{"class":192},[159,89044,173],{"class":165},[159,89046,89047,89049,89051,89053,89055],{"class":161,"line":245},[159,89048,179],{"class":165},[159,89050,998],{"class":169},[159,89052,1001],{"class":165},[159,89054,998],{"class":169},[159,89056,173],{"class":165},[159,89058,89059,89061,89063],{"class":161,"line":251},[159,89060,264],{"class":165},[159,89062,949],{"class":169},[159,89064,173],{"class":165},[159,89066,89067],{"class":161,"line":261},[159,89068,590],{"emptyLinePlaceholder":589},[159,89070,89071,89073,89075],{"class":161,"line":603},[159,89072,166],{"class":165},[159,89074,170],{"class":169},[159,89076,173],{"class":165},[159,89078,89079,89081,89083],{"class":161,"line":621},[159,89080,179],{"class":165},[159,89082,103],{"class":169},[159,89084,173],{"class":165},[159,89086,89087,89089,89091,89093,89095],{"class":161,"line":634},[159,89088,2056],{"class":165},[159,89090,106],{"class":169},[159,89092,691],{"class":165},[159,89094,106],{"class":169},[159,89096,173],{"class":165},[159,89098,89099,89101,89103,89105,89107],{"class":161,"line":640},[159,89100,2056],{"class":165},[159,89102,106],{"class":169},[159,89104,711],{"class":165},[159,89106,106],{"class":169},[159,89108,173],{"class":165},[159,89110,89111,89113,89115,89117,89119],{"class":161,"line":1075},[159,89112,2056],{"class":165},[159,89114,106],{"class":169},[159,89116,731],{"class":165},[159,89118,106],{"class":169},[159,89120,173],{"class":165},[159,89122,89123,89125,89127,89129,89131],{"class":161,"line":1081},[159,89124,2056],{"class":165},[159,89126,106],{"class":169},[159,89128,751],{"class":165},[159,89130,106],{"class":169},[159,89132,173],{"class":165},[159,89134,89135,89137,89139,89141,89143],{"class":161,"line":1091},[159,89136,2056],{"class":165},[159,89138,106],{"class":169},[159,89140,771],{"class":165},[159,89142,106],{"class":169},[159,89144,173],{"class":165},[159,89146,89147,89149,89151,89153,89155],{"class":161,"line":1100},[159,89148,2056],{"class":165},[159,89150,14],{"class":169},[159,89152,13974],{"class":165},[159,89154,14],{"class":169},[159,89156,173],{"class":165},[159,89158,89159,89161,89163],{"class":161,"line":1123},[159,89160,254],{"class":165},[159,89162,103],{"class":169},[159,89164,173],{"class":165},[159,89166,89167,89169,89171],{"class":161,"line":1132},[159,89168,179],{"class":165},[159,89170,228],{"class":169},[159,89172,173],{"class":165},[159,89174,89175],{"class":161,"line":1139},[159,89176,13999],{"class":1135},[159,89178,89179,89181,89183,89185,89187,89189,89191,89193],{"class":161,"line":1168},[159,89180,1143],{"class":1142},[159,89182,8323],{"class":1146},[159,89184,1150],{"class":1142},[159,89186,1153],{"class":165},[159,89188,1156],{"class":185},[159,89190,1159],{"class":165},[159,89192,14016],{"class":192},[159,89194,1165],{"class":165},[159,89196,89197,89199,89201,89203,89205,89207,89209,89211,89213],{"class":161,"line":1174},[159,89198,14023],{"class":165},[159,89200,4724],{"class":185},[159,89202,1159],{"class":165},[159,89204,4729],{"class":192},[159,89206,1939],{"class":165},[159,89208,1215],{"class":1142},[159,89210,11680],{"class":165},[159,89212,14038],{"class":8765},[159,89214,1262],{"class":165},[159,89216,89217],{"class":161,"line":1180},[159,89218,14045],{"class":1135},[159,89220,89221],{"class":161,"line":1194},[159,89222,14050],{"class":1135},[159,89224,89225],{"class":161,"line":1200},[159,89226,14055],{"class":1135},[159,89228,89229],{"class":161,"line":1221},[159,89230,14060],{"class":1135},[159,89232,89233,89235,89237],{"class":161,"line":1230},[159,89234,5163],{"class":165},[159,89236,5166],{"class":185},[159,89238,14069],{"class":165},[159,89240,89241],{"class":161,"line":1247},[159,89242,590],{"emptyLinePlaceholder":589},[159,89244,89245,89247,89249],{"class":161,"line":1265},[159,89246,5163],{"class":165},[159,89248,14080],{"class":185},[159,89250,14083],{"class":165},[159,89252,89253],{"class":161,"line":1277},[159,89254,590],{"emptyLinePlaceholder":589},[159,89256,89257],{"class":161,"line":1283},[159,89258,14092],{"class":1135},[159,89260,89261],{"class":161,"line":1294},[159,89262,14097],{"class":1135},[159,89264,89265,89267,89269,89271,89273],{"class":161,"line":1305},[159,89266,1250],{"class":1142},[159,89268,14104],{"class":165},[159,89270,1256],{"class":1142},[159,89272,14109],{"class":192},[159,89274,1262],{"class":165},[159,89276,89277,89279,89281],{"class":161,"line":1311},[159,89278,14116],{"class":165},[159,89280,189],{"class":1142},[159,89282,14121],{"class":192},[159,89284,89285],{"class":161,"line":1322},[159,89286,1308],{"class":165},[159,89288,89289],{"class":161,"line":1327},[159,89290,4863],{"class":165},[159,89292,89293,89295,89297],{"class":161,"line":1336},[159,89294,254],{"class":165},[159,89296,228],{"class":169},[159,89298,173],{"class":165},[159,89300,89301,89303,89305],{"class":161,"line":1345},[159,89302,264],{"class":165},[159,89304,170],{"class":169},[159,89306,173],{"class":165},[159,89308,89309],{"class":161,"line":1350},[159,89310,590],{"emptyLinePlaceholder":589},[159,89312,89313,89315,89317],{"class":161,"line":1764},[159,89314,264],{"class":165},[159,89316,522],{"class":169},[159,89318,173],{"class":165},[14,89320,14160],{},[14,89322,14163],{},[14,89324,14166],{},[14,89326,14169],{},[14,89328,14172],{},[14,89330,14175],{},[14,89332,14178],{},[14,89334,14181],{},[151,89336,89337],{"className":520,"code":14184,"language":522,"meta":25,"style":25},[49,89338,89339,89349,89363,89367,89375,89389,89409,89429,89441,89449,89455,89465,89475,89479,89483,89489,89501,89513,89525,89541,89545,89549,89555,89567,89579,89591,89601,89611,89615,89619,89627,89639,89649,89661,89665,89669,89677,89687,89697,89707,89711,89715,89725,89739,89751,89755,89759,89771,89781,89797,89807,89811,89815,89829,89839,89849,89853,89857,89863,89877,89881,89885,89893,89903,89907,89911,89919,89929,89933,89941,89949,89953,89961,89975,89989,90001,90009,90047,90079,90111,90143,90175,90183,90191,90205,90239,90273,90307,90341,90375,90383,90391,90399,90403,90407,90425,90429,90449,90457,90461,90473,90493,90505,90509,90513,90517,90529,90549,90577,90581,90585,90589,90597,90605,90609],{"__ignoreMap":25},[159,89340,89341,89343,89345,89347],{"class":161,"line":162},[159,89342,914],{"class":165},[159,89344,917],{"class":169},[159,89346,920],{"class":185},[159,89348,173],{"class":165},[159,89350,89351,89353,89355,89357,89359,89361],{"class":161,"line":176},[159,89352,166],{"class":165},[159,89354,522],{"class":169},[159,89356,931],{"class":185},[159,89358,189],{"class":165},[159,89360,936],{"class":192},[159,89362,173],{"class":165},[159,89364,89365],{"class":161,"line":203},[159,89366,590],{"emptyLinePlaceholder":589},[159,89368,89369,89371,89373],{"class":161,"line":223},[159,89370,166],{"class":165},[159,89372,949],{"class":169},[159,89374,173],{"class":165},[159,89376,89377,89379,89381,89383,89385,89387],{"class":161,"line":233},[159,89378,179],{"class":165},[159,89380,958],{"class":169},[159,89382,961],{"class":185},[159,89384,189],{"class":165},[159,89386,966],{"class":192},[159,89388,6049],{"class":165},[159,89390,89391,89393,89395,89397,89399,89401,89403,89405,89407],{"class":161,"line":239},[159,89392,179],{"class":165},[159,89394,958],{"class":169},[159,89396,6058],{"class":185},[159,89398,189],{"class":165},[159,89400,6063],{"class":192},[159,89402,984],{"class":185},[159,89404,189],{"class":165},[159,89406,6070],{"class":192},[159,89408,6049],{"class":165},[159,89410,89411,89413,89415,89417,89419,89421,89423,89425,89427],{"class":161,"line":245},[159,89412,179],{"class":165},[159,89414,958],{"class":169},[159,89416,547],{"class":185},[159,89418,189],{"class":165},[159,89420,981],{"class":192},[159,89422,984],{"class":185},[159,89424,189],{"class":165},[159,89426,989],{"class":192},[159,89428,6049],{"class":165},[159,89430,89431,89433,89435,89437,89439],{"class":161,"line":251},[159,89432,179],{"class":165},[159,89434,998],{"class":169},[159,89436,10671],{"class":165},[159,89438,998],{"class":169},[159,89440,173],{"class":165},[159,89442,89443,89445,89447],{"class":161,"line":261},[159,89444,179],{"class":165},[159,89446,1468],{"class":169},[159,89448,173],{"class":165},[159,89450,89451,89453],{"class":161,"line":603},[159,89452,1475],{"class":169},[159,89454,1478],{"class":165},[159,89456,89457,89459,89461,89463],{"class":161,"line":621},[159,89458,1497],{"class":1146},[159,89460,1486],{"class":165},[159,89462,1489],{"class":1146},[159,89464,1492],{"class":165},[159,89466,89467,89469,89471,89473],{"class":161,"line":634},[159,89468,1483],{"class":1146},[159,89470,1486],{"class":165},[159,89472,1489],{"class":1146},[159,89474,1492],{"class":165},[159,89476,89477],{"class":161,"line":640},[159,89478,1508],{"class":165},[159,89480,89481],{"class":161,"line":1075},[159,89482,590],{"emptyLinePlaceholder":589},[159,89484,89485,89487],{"class":161,"line":1081},[159,89486,10722],{"class":185},[159,89488,1478],{"class":165},[159,89490,89491,89493,89495,89497,89499],{"class":161,"line":1091},[159,89492,1563],{"class":1146},[159,89494,1486],{"class":165},[159,89496,10733],{"class":1146},[159,89498,1571],{"class":1142},[159,89500,1492],{"class":165},[159,89502,89503,89505,89507,89509,89511],{"class":161,"line":1100},[159,89504,1578],{"class":1146},[159,89506,1486],{"class":165},[159,89508,10746],{"class":1146},[159,89510,1571],{"class":1142},[159,89512,1492],{"class":165},[159,89514,89515,89517,89519,89521,89523],{"class":161,"line":1123},[159,89516,1497],{"class":1146},[159,89518,1486],{"class":165},[159,89520,1739],{"class":1146},[159,89522,1571],{"class":1142},[159,89524,1492],{"class":165},[159,89526,89527,89529,89531,89533,89535,89537,89539],{"class":161,"line":1132},[159,89528,9018],{"class":1146},[159,89530,1486],{"class":165},[159,89532,4932],{"class":1146},[159,89534,1571],{"class":1142},[159,89536,7709],{"class":1146},[159,89538,9287],{"class":1146},[159,89540,1492],{"class":165},[159,89542,89543],{"class":161,"line":1139},[159,89544,1508],{"class":165},[159,89546,89547],{"class":161,"line":1168},[159,89548,590],{"emptyLinePlaceholder":589},[159,89550,89551,89553],{"class":161,"line":1174},[159,89552,10791],{"class":185},[159,89554,1478],{"class":165},[159,89556,89557,89559,89561,89563,89565],{"class":161,"line":1180},[159,89558,1563],{"class":1146},[159,89560,1486],{"class":165},[159,89562,1596],{"class":1146},[159,89564,1662],{"class":1142},[159,89566,1492],{"class":165},[159,89568,89569,89571,89573,89575,89577],{"class":161,"line":1194},[159,89570,1578],{"class":1146},[159,89572,1486],{"class":165},[159,89574,10814],{"class":1146},[159,89576,1571],{"class":1142},[159,89578,1492],{"class":165},[159,89580,89581,89583,89585,89587,89589],{"class":161,"line":1200},[159,89582,4264],{"class":1146},[159,89584,1486],{"class":165},[159,89586,10814],{"class":1146},[159,89588,1571],{"class":1142},[159,89590,1492],{"class":165},[159,89592,89593,89595,89597,89599],{"class":161,"line":1221},[159,89594,1818],{"class":1146},[159,89596,1486],{"class":165},[159,89598,1823],{"class":1146},[159,89600,1492],{"class":165},[159,89602,89603,89605,89607,89609],{"class":161,"line":1230},[159,89604,1831],{"class":1146},[159,89606,1486],{"class":165},[159,89608,1836],{"class":1146},[159,89610,1492],{"class":165},[159,89612,89613],{"class":161,"line":1247},[159,89614,1508],{"class":165},[159,89616,89617],{"class":161,"line":1265},[159,89618,590],{"emptyLinePlaceholder":589},[159,89620,89621,89623,89625],{"class":161,"line":1277},[159,89622,10791],{"class":185},[159,89624,10865],{"class":169},[159,89626,1478],{"class":165},[159,89628,89629,89631,89633,89635,89637],{"class":161,"line":1283},[159,89630,1721],{"class":1146},[159,89632,1486],{"class":165},[159,89634,10876],{"class":1146},[159,89636,1571],{"class":1142},[159,89638,1492],{"class":165},[159,89640,89641,89643,89645,89647],{"class":161,"line":1294},[159,89642,9377],{"class":1146},[159,89644,1486],{"class":165},[159,89646,10889],{"class":1146},[159,89648,1492],{"class":165},[159,89650,89651,89653,89655,89657,89659],{"class":161,"line":1305},[159,89652,9041],{"class":1146},[159,89654,1486],{"class":165},[159,89656,1739],{"class":1146},[159,89658,1571],{"class":1142},[159,89660,1492],{"class":165},[159,89662,89663],{"class":161,"line":1311},[159,89664,1508],{"class":165},[159,89666,89667],{"class":161,"line":1322},[159,89668,590],{"emptyLinePlaceholder":589},[159,89670,89671,89673,89675],{"class":161,"line":1327},[159,89672,10791],{"class":185},[159,89674,8323],{"class":169},[159,89676,1478],{"class":165},[159,89678,89679,89681,89683,89685],{"class":161,"line":1336},[159,89680,1524],{"class":1146},[159,89682,1486],{"class":165},[159,89684,1529],{"class":1146},[159,89686,1492],{"class":165},[159,89688,89689,89691,89693,89695],{"class":161,"line":1345},[159,89690,1818],{"class":1146},[159,89692,1486],{"class":165},[159,89694,1823],{"class":1146},[159,89696,1492],{"class":165},[159,89698,89699,89701,89703,89705],{"class":161,"line":1350},[159,89700,1831],{"class":1146},[159,89702,1486],{"class":165},[159,89704,8685],{"class":1146},[159,89706,1492],{"class":165},[159,89708,89709],{"class":161,"line":1764},[159,89710,1508],{"class":165},[159,89712,89713],{"class":161,"line":1769},[159,89714,590],{"emptyLinePlaceholder":589},[159,89716,89717,89719,89721,89723],{"class":161,"line":1777},[159,89718,10791],{"class":185},[159,89720,8323],{"class":169},[159,89722,1894],{"class":169},[159,89724,1478],{"class":165},[159,89726,89727,89729,89731,89733,89735,89737],{"class":161,"line":1788},[159,89728,1497],{"class":1146},[159,89730,1486],{"class":165},[159,89732,1489],{"class":1146},[159,89734,10978],{"class":1146},[159,89736,1571],{"class":1142},[159,89738,1492],{"class":165},[159,89740,89741,89743,89745,89747,89749],{"class":161,"line":1802},[159,89742,1721],{"class":1146},[159,89744,1486],{"class":165},[159,89746,7678],{"class":1146},[159,89748,1571],{"class":1142},[159,89750,1492],{"class":165},[159,89752,89753],{"class":161,"line":1815},[159,89754,1508],{"class":165},[159,89756,89757],{"class":161,"line":1828},[159,89758,590],{"emptyLinePlaceholder":589},[159,89760,89761,89763,89765,89767,89769],{"class":161,"line":1841},[159,89762,10791],{"class":185},[159,89764,8323],{"class":169},[159,89766,1894],{"class":169},[159,89768,7885],{"class":169},[159,89770,1478],{"class":165},[159,89772,89773,89775,89777,89779],{"class":161,"line":1852},[159,89774,11019],{"class":1146},[159,89776,1486],{"class":165},[159,89778,1529],{"class":1146},[159,89780,1492],{"class":165},[159,89782,89783,89785,89787,89789,89791,89793,89795],{"class":161,"line":1866},[159,89784,9275],{"class":1146},[159,89786,1486],{"class":165},[159,89788,11034],{"class":1146},[159,89790,1571],{"class":1142},[159,89792,7709],{"class":1146},[159,89794,11041],{"class":1146},[159,89796,1492],{"class":165},[159,89798,89799,89801,89803,89805],{"class":161,"line":1879},[159,89800,4322],{"class":1146},[159,89802,1486],{"class":165},[159,89804,9412],{"class":1146},[159,89806,1492],{"class":165},[159,89808,89809],{"class":161,"line":1884},[159,89810,1508],{"class":165},[159,89812,89813],{"class":161,"line":1889},[159,89814,590],{"emptyLinePlaceholder":589},[159,89816,89817,89819,89821,89823,89825,89827],{"class":161,"line":1899},[159,89818,10791],{"class":185},[159,89820,8323],{"class":169},[159,89822,1894],{"class":169},[159,89824,7885],{"class":169},[159,89826,11074],{"class":185},[159,89828,1478],{"class":165},[159,89830,89831,89833,89835,89837],{"class":161,"line":1912},[159,89832,8828],{"class":1146},[159,89834,1486],{"class":165},[159,89836,11085],{"class":1146},[159,89838,1492],{"class":165},[159,89840,89841,89843,89845,89847],{"class":161,"line":1925},[159,89842,4322],{"class":1146},[159,89844,1486],{"class":165},[159,89846,11085],{"class":1146},[159,89848,1492],{"class":165},[159,89850,89851],{"class":161,"line":1956},[159,89852,1508],{"class":165},[159,89854,89855],{"class":161,"line":1971},[159,89856,590],{"emptyLinePlaceholder":589},[159,89858,89859,89861],{"class":161,"line":1976},[159,89860,11110],{"class":185},[159,89862,1478],{"class":165},[159,89864,89865,89867,89869,89871,89873,89875],{"class":161,"line":1981},[159,89866,1483],{"class":1146},[159,89868,1486],{"class":165},[159,89870,1489],{"class":1146},[159,89872,11123],{"class":1146},[159,89874,1571],{"class":1142},[159,89876,1492],{"class":165},[159,89878,89879],{"class":161,"line":1989},[159,89880,1508],{"class":165},[159,89882,89883],{"class":161,"line":2001},[159,89884,590],{"emptyLinePlaceholder":589},[159,89886,89887,89889,89891],{"class":161,"line":2006},[159,89888,11110],{"class":185},[159,89890,9217],{"class":185},[159,89892,1478],{"class":165},[159,89894,89895,89897,89899,89901],{"class":161,"line":2015},[159,89896,1818],{"class":1146},[159,89898,1486],{"class":165},[159,89900,1529],{"class":1146},[159,89902,1492],{"class":165},[159,89904,89905],{"class":161,"line":2024},[159,89906,1508],{"class":165},[159,89908,89909],{"class":161,"line":2029},[159,89910,590],{"emptyLinePlaceholder":589},[159,89912,89913,89915,89917],{"class":161,"line":2038},[159,89914,11110],{"class":185},[159,89916,14765],{"class":185},[159,89918,1478],{"class":165},[159,89920,89921,89923,89925,89927],{"class":161,"line":2053},[159,89922,1818],{"class":1146},[159,89924,1486],{"class":165},[159,89926,7896],{"class":1146},[159,89928,1492],{"class":165},[159,89930,89931],{"class":161,"line":2070},[159,89932,1508],{"class":165},[159,89934,89935,89937,89939],{"class":161,"line":2095},[159,89936,254],{"class":165},[159,89938,1468],{"class":169},[159,89940,173],{"class":165},[159,89942,89943,89945,89947],{"class":161,"line":2104},[159,89944,264],{"class":165},[159,89946,949],{"class":169},[159,89948,173],{"class":165},[159,89950,89951],{"class":161,"line":2120},[159,89952,590],{"emptyLinePlaceholder":589},[159,89954,89955,89957,89959],{"class":161,"line":2134},[159,89956,166],{"class":165},[159,89958,170],{"class":169},[159,89960,173],{"class":165},[159,89962,89963,89965,89967,89969,89971,89973],{"class":161,"line":2143},[159,89964,179],{"class":165},[159,89966,182],{"class":169},[159,89968,186],{"class":185},[159,89970,189],{"class":165},[159,89972,11225],{"class":192},[159,89974,173],{"class":165},[159,89976,89977,89979,89981,89983,89985,89987],{"class":161,"line":2165},[159,89978,2056],{"class":165},[159,89980,182],{"class":169},[159,89982,186],{"class":185},[159,89984,189],{"class":165},[159,89986,11240],{"class":192},[159,89988,173],{"class":165},[159,89990,89991,89993,89995,89997,89999],{"class":161,"line":2178},[159,89992,2073],{"class":165},[159,89994,42],{"class":169},[159,89996,11251],{"class":165},[159,89998,42],{"class":169},[159,90000,173],{"class":165},[159,90002,90003,90005,90007],{"class":161,"line":2191},[159,90004,2073],{"class":165},[159,90006,103],{"class":169},[159,90008,173],{"class":165},[159,90010,90011,90013,90015,90017,90019,90021,90023,90025,90027,90029,90031,90033,90035,90037,90039,90041,90043,90045],{"class":161,"line":2204},[159,90012,2146],{"class":165},[159,90014,106],{"class":169},[159,90016,8082],{"class":165},[159,90018,8085],{"class":169},[159,90020,186],{"class":185},[159,90022,189],{"class":165},[159,90024,6631],{"class":192},[159,90026,8088],{"class":185},[159,90028,189],{"class":165},[159,90030,11286],{"class":192},[159,90032,675],{"class":185},[159,90034,189],{"class":165},[159,90036,14886],{"class":192},[159,90038,11289],{"class":165},[159,90040,8085],{"class":169},[159,90042,2158],{"class":165},[159,90044,106],{"class":169},[159,90046,173],{"class":165},[159,90048,90049,90051,90053,90055,90057,90059,90061,90063,90065,90067,90069,90071,90073,90075,90077],{"class":161,"line":2217},[159,90050,2146],{"class":165},[159,90052,106],{"class":169},[159,90054,8082],{"class":165},[159,90056,8085],{"class":169},[159,90058,8088],{"class":185},[159,90060,189],{"class":165},[159,90062,11286],{"class":192},[159,90064,675],{"class":185},[159,90066,189],{"class":165},[159,90068,680],{"class":192},[159,90070,11316],{"class":165},[159,90072,8085],{"class":169},[159,90074,2158],{"class":165},[159,90076,106],{"class":169},[159,90078,173],{"class":165},[159,90080,90081,90083,90085,90087,90089,90091,90093,90095,90097,90099,90101,90103,90105,90107,90109],{"class":161,"line":2230},[159,90082,2146],{"class":165},[159,90084,106],{"class":169},[159,90086,8082],{"class":165},[159,90088,8085],{"class":169},[159,90090,8088],{"class":185},[159,90092,189],{"class":165},[159,90094,11286],{"class":192},[159,90096,675],{"class":185},[159,90098,189],{"class":165},[159,90100,708],{"class":192},[159,90102,11343],{"class":165},[159,90104,8085],{"class":169},[159,90106,2158],{"class":165},[159,90108,106],{"class":169},[159,90110,173],{"class":165},[159,90112,90113,90115,90117,90119,90121,90123,90125,90127,90129,90131,90133,90135,90137,90139,90141],{"class":161,"line":2243},[159,90114,2146],{"class":165},[159,90116,106],{"class":169},[159,90118,8082],{"class":165},[159,90120,8085],{"class":169},[159,90122,8088],{"class":185},[159,90124,189],{"class":165},[159,90126,11286],{"class":192},[159,90128,675],{"class":185},[159,90130,189],{"class":165},[159,90132,728],{"class":192},[159,90134,11370],{"class":165},[159,90136,8085],{"class":169},[159,90138,2158],{"class":165},[159,90140,106],{"class":169},[159,90142,173],{"class":165},[159,90144,90145,90147,90149,90151,90153,90155,90157,90159,90161,90163,90165,90167,90169,90171,90173],{"class":161,"line":2256},[159,90146,2146],{"class":165},[159,90148,106],{"class":169},[159,90150,8082],{"class":165},[159,90152,8085],{"class":169},[159,90154,8088],{"class":185},[159,90156,189],{"class":165},[159,90158,11286],{"class":192},[159,90160,675],{"class":185},[159,90162,189],{"class":165},[159,90164,748],{"class":192},[159,90166,11397],{"class":165},[159,90168,8085],{"class":169},[159,90170,2158],{"class":165},[159,90172,106],{"class":169},[159,90174,173],{"class":165},[159,90176,90177,90179,90181],{"class":161,"line":2266},[159,90178,2259],{"class":165},[159,90180,103],{"class":169},[159,90182,173],{"class":165},[159,90184,90185,90187,90189],{"class":161,"line":2275},[159,90186,1084],{"class":165},[159,90188,182],{"class":169},[159,90190,173],{"class":165},[159,90192,90193,90195,90197,90199,90201,90203],{"class":161,"line":2284},[159,90194,2056],{"class":165},[159,90196,182],{"class":169},[159,90198,186],{"class":185},[159,90200,189],{"class":165},[159,90202,11434],{"class":192},[159,90204,173],{"class":165},[159,90206,90207,90209,90211,90213,90215,90217,90219,90221,90223,90225,90227,90229,90231,90233,90235,90237],{"class":161,"line":2293},[159,90208,2073],{"class":165},[159,90210,182],{"class":169},[159,90212,186],{"class":185},[159,90214,189],{"class":165},[159,90216,11449],{"class":192},[159,90218,8082],{"class":165},[159,90220,23],{"class":169},[159,90222,2078],{"class":185},[159,90224,189],{"class":165},[159,90226,11460],{"class":192},[159,90228,2086],{"class":185},[159,90230,189],{"class":165},[159,90232,552],{"class":192},[159,90234,11469],{"class":165},[159,90236,182],{"class":169},[159,90238,173],{"class":165},[159,90240,90241,90243,90245,90247,90249,90251,90253,90255,90257,90259,90261,90263,90265,90267,90269,90271],{"class":161,"line":2306},[159,90242,2073],{"class":165},[159,90244,182],{"class":169},[159,90246,186],{"class":185},[159,90248,189],{"class":165},[159,90250,9666],{"class":192},[159,90252,8082],{"class":165},[159,90254,23],{"class":169},[159,90256,2078],{"class":185},[159,90258,189],{"class":165},[159,90260,11496],{"class":192},[159,90262,2086],{"class":185},[159,90264,189],{"class":165},[159,90266,552],{"class":192},[159,90268,11469],{"class":165},[159,90270,182],{"class":169},[159,90272,173],{"class":165},[159,90274,90275,90277,90279,90281,90283,90285,90287,90289,90291,90293,90295,90297,90299,90301,90303,90305],{"class":161,"line":2330},[159,90276,2073],{"class":165},[159,90278,182],{"class":169},[159,90280,186],{"class":185},[159,90282,189],{"class":165},[159,90284,9666],{"class":192},[159,90286,8082],{"class":165},[159,90288,23],{"class":169},[159,90290,2078],{"class":185},[159,90292,189],{"class":165},[159,90294,11531],{"class":192},[159,90296,2086],{"class":185},[159,90298,189],{"class":165},[159,90300,552],{"class":192},[159,90302,11469],{"class":165},[159,90304,182],{"class":169},[159,90306,173],{"class":165},[159,90308,90309,90311,90313,90315,90317,90319,90321,90323,90325,90327,90329,90331,90333,90335,90337,90339],{"class":161,"line":2350},[159,90310,2073],{"class":165},[159,90312,182],{"class":169},[159,90314,186],{"class":185},[159,90316,189],{"class":165},[159,90318,9666],{"class":192},[159,90320,8082],{"class":165},[159,90322,23],{"class":169},[159,90324,2078],{"class":185},[159,90326,189],{"class":165},[159,90328,11566],{"class":192},[159,90330,2086],{"class":185},[159,90332,189],{"class":165},[159,90334,552],{"class":192},[159,90336,11469],{"class":165},[159,90338,182],{"class":169},[159,90340,173],{"class":165},[159,90342,90343,90345,90347,90349,90351,90353,90355,90357,90359,90361,90363,90365,90367,90369,90371,90373],{"class":161,"line":2370},[159,90344,2073],{"class":165},[159,90346,182],{"class":169},[159,90348,186],{"class":185},[159,90350,189],{"class":165},[159,90352,9666],{"class":192},[159,90354,8082],{"class":165},[159,90356,23],{"class":169},[159,90358,2078],{"class":185},[159,90360,189],{"class":165},[159,90362,11601],{"class":192},[159,90364,2086],{"class":185},[159,90366,189],{"class":165},[159,90368,552],{"class":192},[159,90370,11469],{"class":165},[159,90372,182],{"class":169},[159,90374,173],{"class":165},[159,90376,90377,90379,90381],{"class":161,"line":2390},[159,90378,1084],{"class":165},[159,90380,182],{"class":169},[159,90382,173],{"class":165},[159,90384,90385,90387,90389],{"class":161,"line":2410},[159,90386,254],{"class":165},[159,90388,182],{"class":169},[159,90390,173],{"class":165},[159,90392,90393,90395,90397],{"class":161,"line":2430},[159,90394,179],{"class":165},[159,90396,228],{"class":169},[159,90398,173],{"class":165},[159,90400,90401],{"class":161,"line":2450},[159,90402,15253],{"class":1135},[159,90404,90405],{"class":161,"line":2471},[159,90406,15258],{"class":1135},[159,90408,90409,90411,90413,90415,90417,90419,90421,90423],{"class":161,"line":2477},[159,90410,1143],{"class":1142},[159,90412,8323],{"class":1146},[159,90414,1150],{"class":1142},[159,90416,1153],{"class":165},[159,90418,1156],{"class":185},[159,90420,1159],{"class":165},[159,90422,15275],{"class":192},[159,90424,1165],{"class":165},[159,90426,90427],{"class":161,"line":2498},[159,90428,15282],{"class":1135},[159,90430,90431,90433,90435,90437,90439,90441,90443,90445,90447],{"class":161,"line":2518},[159,90432,14023],{"class":165},[159,90434,4724],{"class":185},[159,90436,1159],{"class":165},[159,90438,4729],{"class":192},[159,90440,1939],{"class":165},[159,90442,1215],{"class":1142},[159,90444,11680],{"class":165},[159,90446,14038],{"class":8765},[159,90448,1262],{"class":165},[159,90450,90451,90453,90455],{"class":161,"line":2539},[159,90452,5163],{"class":165},[159,90454,14080],{"class":185},[159,90456,14083],{"class":165},[159,90458,90459],{"class":161,"line":2561},[159,90460,15315],{"class":1135},[159,90462,90463,90465,90467,90469,90471],{"class":161,"line":2573},[159,90464,1250],{"class":1142},[159,90466,14104],{"class":165},[159,90468,1256],{"class":1142},[159,90470,15326],{"class":192},[159,90472,1262],{"class":165},[159,90474,90475,90477,90479,90481,90483,90485,90487,90489,90491],{"class":161,"line":2591},[159,90476,11755],{"class":165},[159,90478,1156],{"class":185},[159,90480,1159],{"class":165},[159,90482,15339],{"class":192},[159,90484,3900],{"class":165},[159,90486,3903],{"class":185},[159,90488,1159],{"class":165},[159,90490,11771],{"class":192},[159,90492,1165],{"class":165},[159,90494,90495,90497,90499,90501,90503],{"class":161,"line":2602},[159,90496,15354],{"class":165},[159,90498,2680],{"class":185},[159,90500,1159],{"class":165},[159,90502,11771],{"class":192},[159,90504,1165],{"class":165},[159,90506,90507],{"class":161,"line":2613},[159,90508,590],{"emptyLinePlaceholder":589},[159,90510,90511],{"class":161,"line":2624},[159,90512,15371],{"class":1135},[159,90514,90515],{"class":161,"line":2630},[159,90516,15376],{"class":1135},[159,90518,90519,90521,90523,90525,90527],{"class":161,"line":2636},[159,90520,8301],{"class":1142},[159,90522,15383],{"class":1146},[159,90524,1150],{"class":1142},[159,90526,3925],{"class":1142},[159,90528,15390],{"class":165},[159,90530,90531,90533,90535,90537,90539,90541,90543,90545,90547],{"class":161,"line":2642},[159,90532,11755],{"class":165},[159,90534,1156],{"class":185},[159,90536,1159],{"class":165},[159,90538,11819],{"class":192},[159,90540,3900],{"class":165},[159,90542,3903],{"class":185},[159,90544,1159],{"class":165},[159,90546,11771],{"class":192},[159,90548,1165],{"class":165},[159,90550,90551,90553,90555,90557,90559,90561,90563,90565,90567,90569,90571,90573,90575],{"class":161,"line":2648},[159,90552,11755],{"class":165},[159,90554,1156],{"class":185},[159,90556,1159],{"class":165},[159,90558,11845],{"class":192},[159,90560,1241],{"class":165},[159,90562,3925],{"class":1142},[159,90564,2707],{"class":1146},[159,90566,3930],{"class":192},[159,90568,3900],{"class":165},[159,90570,2680],{"class":185},[159,90572,1159],{"class":165},[159,90574,11771],{"class":192},[159,90576,1165],{"class":165},[159,90578,90579],{"class":161,"line":2674},[159,90580,590],{"emptyLinePlaceholder":589},[159,90582,90583],{"class":161,"line":2689},[159,90584,1308],{"class":165},[159,90586,90587],{"class":161,"line":2694},[159,90588,4863],{"class":165},[159,90590,90591,90593,90595],{"class":161,"line":2721},[159,90592,254],{"class":165},[159,90594,228],{"class":169},[159,90596,173],{"class":165},[159,90598,90599,90601,90603],{"class":161,"line":2726},[159,90600,264],{"class":165},[159,90602,170],{"class":169},[159,90604,173],{"class":165},[159,90606,90607],{"class":161,"line":2735},[159,90608,590],{"emptyLinePlaceholder":589},[159,90610,90611,90613,90615],{"class":161,"line":2744},[159,90612,264],{"class":165},[159,90614,522],{"class":169},[159,90616,173],{"class":165},[42,90618,15482],{"id":15481},[134,90620,90621],{},[106,90622,15487],{},[14,90624,90625],{},[23,90626],{"alt":25,"src":15492},[14,90628,15495],{},[14,90630,15498],{},[14,90632,15501],{},[14,90634,15504],{},[14,90636,11956],{},[134,90638,90639],{"start":176},[106,90640,15511],{},[14,90642,90643],{},[23,90644],{"alt":25,"src":15516},[14,90646,15519],{},[42,90648,15523],{"id":15522},[14,90650,90651],{},[23,90652],{"alt":25,"src":15528},[14,90654,90655],{},[23,90656],{"alt":25,"src":15533},[14,90658,90659],{},[23,90660],{"alt":25,"src":15538},[14,90662,15541],{},[14,90664,15544],{},[14,90666,15547],{},[14,90668,15550],{},[14,90670,15553],{},[14,90672,90673],{},[23,90674],{"alt":25,"src":15558},[14,90676,15561],{},[42,90678,15565],{"id":15564},[14,90680,90681],{},[23,90682],{"alt":25,"src":15570},[14,90684,90685],{},[23,90686],{"alt":25,"src":15575},[42,90688,15579],{"id":15578},[14,90690,90691],{},[23,90692],{"alt":25,"src":15584},[14,90694,15587],{},[14,90696,90697],{},[23,90698],{"alt":25,"src":15592},[14,90700,15595],{},[14,90702,15598],{},[14,90704,15601],{},[14,90706,15604],{},[14,90708,15607],{},[14,90710,90711],{},[23,90712],{"alt":25,"src":15612},[14,90714,15615],{},[14,90716,15618],{},[14,90718,15621],{},[14,90720,15624],{},[42,90722,15628],{"id":15627},[14,90724,90725],{},[23,90726],{"alt":25,"src":15633},[14,90728,15636],{},[42,90730,15640],{"id":15639},[14,90732,90733],{},[23,90734],{"alt":25,"src":15645},[14,90736,15648],{},[14,90738,15651],{},[42,90740,15655],{"id":15654},[151,90742,90743],{"className":520,"code":15658,"language":522,"meta":25,"style":25},[49,90744,90745,90749,90753,90757,90761],{"__ignoreMap":25},[159,90746,90747],{"class":161,"line":162},[159,90748,15665],{"class":165},[159,90750,90751],{"class":161,"line":176},[159,90752,15670],{"class":165},[159,90754,90755],{"class":161,"line":203},[159,90756,15675],{"class":165},[159,90758,90759],{"class":161,"line":223},[159,90760,15680],{"class":165},[159,90762,90763],{"class":161,"line":233},[159,90764,15685],{"class":165},[14,90766,15688],{},[42,90768,15692],{"id":15691},[326,90770,15696],{"id":15695},[14,90772,90773],{},[23,90774],{"alt":25,"src":15701},[326,90776,15705],{"id":15704},[14,90778,90779],{},[23,90780],{"alt":25,"src":15710},[14,90782,15713],{},[14,90784,15716],{},[14,90786,15719],{},[14,90788,15722],{},[14,90790,15725],{},[14,90792,15728],{},[14,90794,15731],{},[14,90796,15734],{},[14,90798,15737],{},[14,90800,15740],{},[14,90802,15743],{},[14,90804,15746],{},[228,90806,15749],{},[14,90808,15752],{},[326,90810,15756],{"id":15755},[14,90812,90813],{},[23,90814],{"alt":25,"src":15761},[14,90816,90817],{},[23,90818],{"alt":25,"src":15766},[14,90820,15769],{},[42,90822,15773],{"id":15772},[326,90824,15777],{"id":15776},[14,90826,90827],{},[23,90828],{"alt":25,"src":15782},[14,90830,15785],{},[326,90832,15789],{"id":15788},[14,90834,15792],{},[14,90836,15795],{},[14,90838,90839],{},[23,90840],{"alt":25,"src":15800},[134,90842,90843],{},[106,90844,15805],{},[14,90846,90847],{},[23,90848],{"alt":25,"src":15810},[134,90850,90851],{"start":176},[106,90852,15815],{},[14,90854,90855],{},[23,90856],{"alt":25,"src":15820},[14,90858,15823],{},[14,90860,15826],{},[134,90862,90863],{"start":203},[106,90864,15831],{},[14,90866,90867],{},[23,90868],{"alt":25,"src":15836},[326,90870,15840],{"id":15839},[14,90872,90873],{},[23,90874],{"alt":25,"src":15845},[14,90876,15848],{},[14,90878,90879],{},[23,90880],{"alt":25,"src":15853},[14,90882,15856],{},[14,90884,15859],{},[14,90886,15862],{},[228,90888,15865],{},[14,90890,90891],{},[23,90892],{"alt":25,"src":15870},[14,90894,15873],{},[151,90896,90897],{"className":520,"code":15876,"language":522,"meta":25,"style":25},[49,90898,90899],{"__ignoreMap":25},[159,90900,90901],{"class":161,"line":162},[159,90902,15876],{"class":165},[326,90904,15886],{"id":15885},[14,90906,90907],{},[23,90908],{"alt":25,"src":15891},[14,90910,15894],{},[14,90912,15897],{},[42,90914,15901],{"id":15900},[14,90916,15904],{},[14,90918,90919],{},[23,90920],{"alt":25,"src":15909},[42,90922,15913],{"id":15912},[14,90924,15916],{},[14,90926,90927],{},[8085,90928,15921],{"href":15921,"rel":90929},[15923],[14,90931,90932],{},[8085,90933,15928],{"href":15928,"rel":90934},[15923],[42,90936,15933],{"id":15932},[134,90938,90939,90941,90943,90945,90947,90949,90951,90953],{},[106,90940,15938],{},[106,90942,15941],{},[106,90944,15944],{},[106,90946,15947],{},[106,90948,15950],{},[106,90950,15953],{},[106,90952,15956],{},[106,90954,15959],{},[14,90956,15962],{},[151,90958,90959],{"className":520,"code":15965,"language":522,"meta":25,"style":25},[49,90960,90961,90971,90985,90989,90997,91011,91031,91051,91063,91083,91091,91095,91103,91115,91135,91161,91187,91191,91211,91229,91247,91255,91281,91301,91319,91337,91355,91373,91391,91399,91417,91425,91429,91441,91449,91457,91465,91477,91489,91501,91513,91525,91537,91549,91557,91565,91573,91577,91581,91585,91589,91593,91597,91601,91605,91609,91613,91617,91621,91625,91633,91641,91649,91653,91671,91689,91707,91725,91743,91761,91765,91769,91787,91791,91801,91805,91809,91827,91847,91851,91859,91863,91867,91871,91875,91903,91915,91927,91931,91935,91939,91943,91953,91965,91969,91973,91977,91981,91985,91989,91993,91997,92005,92009,92013,92023,92027,92033,92037,92041,92049,92053,92061,92065,92093,92111,92119,92135,92151,92167,92183,92199,92215,92219,92227,92231,92235,92239,92247,92251,92255,92259,92263,92267,92287,92299,92303,92307,92311,92323,92327,92333,92337,92341,92349,92353,92361,92365],{"__ignoreMap":25},[159,90962,90963,90965,90967,90969],{"class":161,"line":162},[159,90964,914],{"class":165},[159,90966,917],{"class":169},[159,90968,920],{"class":185},[159,90970,173],{"class":165},[159,90972,90973,90975,90977,90979,90981,90983],{"class":161,"line":176},[159,90974,166],{"class":165},[159,90976,522],{"class":169},[159,90978,931],{"class":185},[159,90980,189],{"class":165},[159,90982,936],{"class":192},[159,90984,173],{"class":165},[159,90986,90987],{"class":161,"line":203},[159,90988,590],{"emptyLinePlaceholder":589},[159,90990,90991,90993,90995],{"class":161,"line":223},[159,90992,166],{"class":165},[159,90994,949],{"class":169},[159,90996,173],{"class":165},[159,90998,90999,91001,91003,91005,91007,91009],{"class":161,"line":233},[159,91000,179],{"class":165},[159,91002,958],{"class":169},[159,91004,961],{"class":185},[159,91006,189],{"class":165},[159,91008,966],{"class":192},[159,91010,6049],{"class":165},[159,91012,91013,91015,91017,91019,91021,91023,91025,91027,91029],{"class":161,"line":239},[159,91014,179],{"class":165},[159,91016,958],{"class":169},[159,91018,547],{"class":185},[159,91020,189],{"class":165},[159,91022,981],{"class":192},[159,91024,984],{"class":185},[159,91026,189],{"class":165},[159,91028,989],{"class":192},[159,91030,6049],{"class":165},[159,91032,91033,91035,91037,91039,91041,91043,91045,91047,91049],{"class":161,"line":245},[159,91034,179],{"class":165},[159,91036,958],{"class":169},[159,91038,6058],{"class":185},[159,91040,189],{"class":165},[159,91042,6063],{"class":192},[159,91044,984],{"class":185},[159,91046,189],{"class":165},[159,91048,16056],{"class":192},[159,91050,6049],{"class":165},[159,91052,91053,91055,91057,91059,91061],{"class":161,"line":251},[159,91054,179],{"class":165},[159,91056,998],{"class":169},[159,91058,16067],{"class":165},[159,91060,998],{"class":169},[159,91062,173],{"class":165},[159,91064,91065,91067,91069,91071,91073,91075,91077,91079,91081],{"class":161,"line":261},[159,91066,179],{"class":165},[159,91068,16078],{"class":169},[159,91070,16081],{"class":185},[159,91072,189],{"class":165},[159,91074,16086],{"class":192},[159,91076,8088],{"class":185},[159,91078,189],{"class":165},[159,91080,16093],{"class":192},[159,91082,6049],{"class":165},[159,91084,91085,91087,91089],{"class":161,"line":603},[159,91086,264],{"class":165},[159,91088,949],{"class":169},[159,91090,173],{"class":165},[159,91092,91093],{"class":161,"line":621},[159,91094,590],{"emptyLinePlaceholder":589},[159,91096,91097,91099,91101],{"class":161,"line":634},[159,91098,166],{"class":165},[159,91100,170],{"class":169},[159,91102,173],{"class":165},[159,91104,91105,91107,91109,91111,91113],{"class":161,"line":640},[159,91106,179],{"class":165},[159,91108,10],{"class":169},[159,91110,16124],{"class":165},[159,91112,10],{"class":169},[159,91114,173],{"class":165},[159,91116,91117,91119,91121,91123,91125,91127,91129,91131,91133],{"class":161,"line":1075},[159,91118,179],{"class":165},[159,91120,13694],{"class":169},[159,91122,186],{"class":185},[159,91124,189],{"class":165},[159,91126,9707],{"class":192},[159,91128,16143],{"class":185},[159,91130,189],{"class":165},[159,91132,16148],{"class":192},[159,91134,173],{"class":165},[159,91136,91137,91139,91141,91143,91145,91147,91149,91151,91153,91155,91157,91159],{"class":161,"line":1081},[159,91138,16155],{"class":165},[159,91140,536],{"class":169},[159,91142,539],{"class":185},[159,91144,189],{"class":165},[159,91146,9742],{"class":192},[159,91148,186],{"class":185},[159,91150,189],{"class":165},[159,91152,16170],{"class":192},[159,91154,547],{"class":185},[159,91156,189],{"class":165},[159,91158,16170],{"class":192},[159,91160,6049],{"class":165},[159,91162,91163,91165,91167,91169,91171,91173,91175,91177,91179,91181,91183,91185],{"class":161,"line":1091},[159,91164,16183],{"class":165},[159,91166,536],{"class":169},[159,91168,539],{"class":185},[159,91170,189],{"class":165},[159,91172,9742],{"class":192},[159,91174,186],{"class":185},[159,91176,189],{"class":165},[159,91178,16198],{"class":192},[159,91180,547],{"class":185},[159,91182,189],{"class":165},[159,91184,16198],{"class":192},[159,91186,6049],{"class":165},[159,91188,91189],{"class":161,"line":1100},[159,91190,16211],{"class":165},[159,91192,91193,91195,91197,91199,91201,91203,91205,91207,91209],{"class":161,"line":1123},[159,91194,2056],{"class":165},[159,91196,16218],{"class":169},[159,91198,547],{"class":185},[159,91200,189],{"class":165},[159,91202,16225],{"class":192},[159,91204,186],{"class":185},[159,91206,189],{"class":165},[159,91208,16225],{"class":192},[159,91210,173],{"class":165},[159,91212,91213,91215,91217,91219,91221,91223,91225,91227],{"class":161,"line":1132},[159,91214,2073],{"class":165},[159,91216,16240],{"class":169},[159,91218,13720],{"class":185},[159,91220,189],{"class":165},[159,91222,16247],{"class":192},[159,91224,16250],{"class":165},[159,91226,16240],{"class":169},[159,91228,173],{"class":165},[159,91230,91231,91233,91235,91237,91239,91241,91243,91245],{"class":161,"line":1139},[159,91232,2073],{"class":165},[159,91234,16240],{"class":169},[159,91236,13720],{"class":185},[159,91238,189],{"class":165},[159,91240,16267],{"class":192},[159,91242,16270],{"class":165},[159,91244,16240],{"class":169},[159,91246,173],{"class":165},[159,91248,91249,91251,91253],{"class":161,"line":1168},[159,91250,1084],{"class":165},[159,91252,16218],{"class":169},[159,91254,173],{"class":165},[159,91256,91257,91259,91261,91263,91265,91267,91269,91271,91273,91275,91277,91279],{"class":161,"line":1174},[159,91258,16287],{"class":165},[159,91260,536],{"class":169},[159,91262,539],{"class":185},[159,91264,189],{"class":165},[159,91266,9742],{"class":192},[159,91268,186],{"class":185},[159,91270,189],{"class":165},[159,91272,16302],{"class":192},[159,91274,547],{"class":185},[159,91276,189],{"class":165},[159,91278,16302],{"class":192},[159,91280,6049],{"class":165},[159,91282,91283,91285,91287,91289,91291,91293,91295,91297,91299],{"class":161,"line":1180},[159,91284,16315],{"class":165},[159,91286,16218],{"class":169},[159,91288,547],{"class":185},[159,91290,189],{"class":165},[159,91292,16324],{"class":192},[159,91294,186],{"class":185},[159,91296,189],{"class":165},[159,91298,16324],{"class":192},[159,91300,173],{"class":165},[159,91302,91303,91305,91307,91309,91311,91313,91315,91317],{"class":161,"line":1194},[159,91304,2073],{"class":165},[159,91306,16240],{"class":169},[159,91308,13720],{"class":185},[159,91310,189],{"class":165},[159,91312,16345],{"class":192},[159,91314,16348],{"class":165},[159,91316,16240],{"class":169},[159,91318,173],{"class":165},[159,91320,91321,91323,91325,91327,91329,91331,91333,91335],{"class":161,"line":1200},[159,91322,2073],{"class":165},[159,91324,16240],{"class":169},[159,91326,13720],{"class":185},[159,91328,189],{"class":165},[159,91330,16365],{"class":192},[159,91332,16368],{"class":165},[159,91334,16240],{"class":169},[159,91336,173],{"class":165},[159,91338,91339,91341,91343,91345,91347,91349,91351,91353],{"class":161,"line":1221},[159,91340,2073],{"class":165},[159,91342,16240],{"class":169},[159,91344,13720],{"class":185},[159,91346,189],{"class":165},[159,91348,16385],{"class":192},[159,91350,16388],{"class":165},[159,91352,16240],{"class":169},[159,91354,173],{"class":165},[159,91356,91357,91359,91361,91363,91365,91367,91369,91371],{"class":161,"line":1230},[159,91358,2073],{"class":165},[159,91360,16240],{"class":169},[159,91362,13720],{"class":185},[159,91364,189],{"class":165},[159,91366,16405],{"class":192},[159,91368,16408],{"class":165},[159,91370,16240],{"class":169},[159,91372,173],{"class":165},[159,91374,91375,91377,91379,91381,91383,91385,91387,91389],{"class":161,"line":1247},[159,91376,2073],{"class":165},[159,91378,16240],{"class":169},[159,91380,13720],{"class":185},[159,91382,189],{"class":165},[159,91384,16425],{"class":192},[159,91386,16428],{"class":165},[159,91388,16240],{"class":169},[159,91390,173],{"class":165},[159,91392,91393,91395,91397],{"class":161,"line":1265},[159,91394,1084],{"class":165},[159,91396,16218],{"class":169},[159,91398,173],{"class":165},[159,91400,91401,91403,91405,91407,91409,91411,91413,91415],{"class":161,"line":1277},[159,91402,2056],{"class":165},[159,91404,608],{"class":169},[159,91406,186],{"class":185},[159,91408,189],{"class":165},[159,91410,16453],{"class":192},[159,91412,16456],{"class":165},[159,91414,608],{"class":169},[159,91416,173],{"class":165},[159,91418,91419,91421,91423],{"class":161,"line":1283},[159,91420,254],{"class":165},[159,91422,13694],{"class":169},[159,91424,173],{"class":165},[159,91426,91427],{"class":161,"line":1294},[159,91428,590],{"emptyLinePlaceholder":589},[159,91430,91431,91433,91435,91437,91439],{"class":161,"line":1305},[159,91432,179],{"class":165},[159,91434,10],{"class":169},[159,91436,16481],{"class":165},[159,91438,10],{"class":169},[159,91440,173],{"class":165},[159,91442,91443,91445,91447],{"class":161,"line":1311},[159,91444,179],{"class":165},[159,91446,12347],{"class":169},[159,91448,173],{"class":165},[159,91450,91451,91453,91455],{"class":161,"line":1322},[159,91452,2056],{"class":165},[159,91454,16500],{"class":169},[159,91456,173],{"class":165},[159,91458,91459,91461,91463],{"class":161,"line":1327},[159,91460,2073],{"class":165},[159,91462,12356],{"class":169},[159,91464,173],{"class":165},[159,91466,91467,91469,91471,91473,91475],{"class":161,"line":1336},[159,91468,2146],{"class":165},[159,91470,12365],{"class":169},[159,91472,16519],{"class":165},[159,91474,12365],{"class":169},[159,91476,173],{"class":165},[159,91478,91479,91481,91483,91485,91487],{"class":161,"line":1345},[159,91480,2146],{"class":165},[159,91482,12365],{"class":169},[159,91484,16532],{"class":165},[159,91486,12365],{"class":169},[159,91488,173],{"class":165},[159,91490,91491,91493,91495,91497,91499],{"class":161,"line":1350},[159,91492,2146],{"class":165},[159,91494,12365],{"class":169},[159,91496,16545],{"class":165},[159,91498,12365],{"class":169},[159,91500,173],{"class":165},[159,91502,91503,91505,91507,91509,91511],{"class":161,"line":1764},[159,91504,2146],{"class":165},[159,91506,12365],{"class":169},[159,91508,16558],{"class":165},[159,91510,12365],{"class":169},[159,91512,173],{"class":165},[159,91514,91515,91517,91519,91521,91523],{"class":161,"line":1769},[159,91516,2146],{"class":165},[159,91518,12365],{"class":169},[159,91520,16571],{"class":165},[159,91522,12365],{"class":169},[159,91524,173],{"class":165},[159,91526,91527,91529,91531,91533,91535],{"class":161,"line":1777},[159,91528,2146],{"class":165},[159,91530,12365],{"class":169},[159,91532,16584],{"class":165},[159,91534,12365],{"class":169},[159,91536,173],{"class":165},[159,91538,91539,91541,91543,91545,91547],{"class":161,"line":1788},[159,91540,2146],{"class":165},[159,91542,12365],{"class":169},[159,91544,16597],{"class":165},[159,91546,12365],{"class":169},[159,91548,173],{"class":165},[159,91550,91551,91553,91555],{"class":161,"line":1802},[159,91552,2259],{"class":165},[159,91554,12356],{"class":169},[159,91556,173],{"class":165},[159,91558,91559,91561,91563],{"class":161,"line":1815},[159,91560,1084],{"class":165},[159,91562,16500],{"class":169},[159,91564,173],{"class":165},[159,91566,91567,91569,91571],{"class":161,"line":1828},[159,91568,2056],{"class":165},[159,91570,16624],{"class":169},[159,91572,173],{"class":165},[159,91574,91575],{"class":161,"line":1841},[159,91576,16631],{"class":1135},[159,91578,91579],{"class":161,"line":1852},[159,91580,16636],{"class":1135},[159,91582,91583],{"class":161,"line":1866},[159,91584,16641],{"class":1135},[159,91586,91587],{"class":161,"line":1879},[159,91588,16646],{"class":1135},[159,91590,91591],{"class":161,"line":1884},[159,91592,16651],{"class":1135},[159,91594,91595],{"class":161,"line":1889},[159,91596,16656],{"class":1135},[159,91598,91599],{"class":161,"line":1899},[159,91600,16661],{"class":1135},[159,91602,91603],{"class":161,"line":1912},[159,91604,16666],{"class":1135},[159,91606,91607],{"class":161,"line":1925},[159,91608,16671],{"class":1135},[159,91610,91611],{"class":161,"line":1956},[159,91612,16676],{"class":1135},[159,91614,91615],{"class":161,"line":1971},[159,91616,16681],{"class":1135},[159,91618,91619],{"class":161,"line":1976},[159,91620,16686],{"class":1135},[159,91622,91623],{"class":161,"line":1981},[159,91624,16691],{"class":1135},[159,91626,91627,91629,91631],{"class":161,"line":1989},[159,91628,1084],{"class":165},[159,91630,16624],{"class":169},[159,91632,173],{"class":165},[159,91634,91635,91637,91639],{"class":161,"line":2001},[159,91636,254],{"class":165},[159,91638,12347],{"class":169},[159,91640,173],{"class":165},[159,91642,91643,91645,91647],{"class":161,"line":2006},[159,91644,179],{"class":165},[159,91646,228],{"class":169},[159,91648,173],{"class":165},[159,91650,91651],{"class":161,"line":2015},[159,91652,6893],{"class":1135},[159,91654,91655,91657,91659,91661,91663,91665,91667,91669],{"class":161,"line":2024},[159,91656,1143],{"class":1142},[159,91658,16726],{"class":1146},[159,91660,1150],{"class":1142},[159,91662,1153],{"class":165},[159,91664,1156],{"class":185},[159,91666,1159],{"class":165},[159,91668,16737],{"class":192},[159,91670,1165],{"class":165},[159,91672,91673,91675,91677,91679,91681,91683,91685,91687],{"class":161,"line":2029},[159,91674,1143],{"class":1142},[159,91676,16746],{"class":1146},[159,91678,1150],{"class":1142},[159,91680,1153],{"class":165},[159,91682,1156],{"class":185},[159,91684,1159],{"class":165},[159,91686,16757],{"class":192},[159,91688,1165],{"class":165},[159,91690,91691,91693,91695,91697,91699,91701,91703,91705],{"class":161,"line":2038},[159,91692,1143],{"class":1142},[159,91694,16766],{"class":1146},[159,91696,1150],{"class":1142},[159,91698,1153],{"class":165},[159,91700,1156],{"class":185},[159,91702,1159],{"class":165},[159,91704,16777],{"class":192},[159,91706,1165],{"class":165},[159,91708,91709,91711,91713,91715,91717,91719,91721,91723],{"class":161,"line":2053},[159,91710,1143],{"class":1142},[159,91712,16786],{"class":1146},[159,91714,1150],{"class":1142},[159,91716,1153],{"class":165},[159,91718,1156],{"class":185},[159,91720,1159],{"class":165},[159,91722,16797],{"class":192},[159,91724,1165],{"class":165},[159,91726,91727,91729,91731,91733,91735,91737,91739,91741],{"class":161,"line":2070},[159,91728,1143],{"class":1142},[159,91730,16806],{"class":1146},[159,91732,1150],{"class":1142},[159,91734,1153],{"class":165},[159,91736,1156],{"class":185},[159,91738,1159],{"class":165},[159,91740,16817],{"class":192},[159,91742,1165],{"class":165},[159,91744,91745,91747,91749,91751,91753,91755,91757,91759],{"class":161,"line":2095},[159,91746,1143],{"class":1142},[159,91748,16826],{"class":1146},[159,91750,1150],{"class":1142},[159,91752,1153],{"class":165},[159,91754,1156],{"class":185},[159,91756,1159],{"class":165},[159,91758,16837],{"class":192},[159,91760,1165],{"class":165},[159,91762,91763],{"class":161,"line":2104},[159,91764,590],{"emptyLinePlaceholder":589},[159,91766,91767],{"class":161,"line":2120},[159,91768,16848],{"class":1135},[159,91770,91771,91773,91775,91777,91779,91781,91783,91785],{"class":161,"line":2134},[159,91772,1143],{"class":1142},[159,91774,16855],{"class":1146},[159,91776,1150],{"class":1142},[159,91778,1153],{"class":165},[159,91780,2551],{"class":185},[159,91782,1159],{"class":165},[159,91784,16866],{"class":192},[159,91786,1165],{"class":165},[159,91788,91789],{"class":161,"line":2143},[159,91790,16873],{"class":1135},[159,91792,91793,91795,91797,91799],{"class":161,"line":2165},[159,91794,1143],{"class":1142},[159,91796,4603],{"class":1146},[159,91798,1150],{"class":1142},[159,91800,16884],{"class":165},[159,91802,91803],{"class":161,"line":2178},[159,91804,16889],{"class":1135},[159,91806,91807],{"class":161,"line":2191},[159,91808,16894],{"class":1135},[159,91810,91811,91813,91815,91817,91819,91821,91823,91825],{"class":161,"line":2204},[159,91812,1143],{"class":1142},[159,91814,16901],{"class":1146},[159,91816,1150],{"class":1142},[159,91818,1153],{"class":165},[159,91820,1156],{"class":185},[159,91822,1159],{"class":165},[159,91824,16912],{"class":192},[159,91826,1165],{"class":165},[159,91828,91829,91831,91833,91835,91837,91839,91841,91843,91845],{"class":161,"line":2217},[159,91830,16919],{"class":165},[159,91832,4724],{"class":185},[159,91834,1159],{"class":165},[159,91836,16926],{"class":192},[159,91838,1939],{"class":165},[159,91840,1215],{"class":1142},[159,91842,11680],{"class":165},[159,91844,14038],{"class":8765},[159,91846,1262],{"class":165},[159,91848,91849],{"class":161,"line":2230},[159,91850,16941],{"class":1135},[159,91852,91853,91855,91857],{"class":161,"line":2243},[159,91854,16946],{"class":165},[159,91856,16949],{"class":185},[159,91858,5158],{"class":165},[159,91860,91861],{"class":161,"line":2256},[159,91862,6958],{"class":1135},[159,91864,91865],{"class":161,"line":2266},[159,91866,590],{"emptyLinePlaceholder":589},[159,91868,91869],{"class":161,"line":2275},[159,91870,16964],{"class":1135},[159,91872,91873],{"class":161,"line":2284},[159,91874,16969],{"class":1135},[159,91876,91877,91879,91881,91883,91885,91887,91889,91891,91893,91895,91897,91899,91901],{"class":161,"line":2293},[159,91878,12875],{"class":1142},[159,91880,11680],{"class":165},[159,91882,11683],{"class":1142},[159,91884,1186],{"class":165},[159,91886,189],{"class":1142},[159,91888,1259],{"class":1146},[159,91890,11692],{"class":165},[159,91892,166],{"class":1142},[159,91894,16990],{"class":165},[159,91896,3828],{"class":1146},[159,91898,11702],{"class":165},[159,91900,11705],{"class":1142},[159,91902,1262],{"class":165},[159,91904,91905,91907,91909,91911,91913],{"class":161,"line":2306},[159,91906,17003],{"class":1142},[159,91908,17006],{"class":165},[159,91910,1256],{"class":1142},[159,91912,17011],{"class":192},[159,91914,1262],{"class":165},[159,91916,91917,91919,91921,91923,91925],{"class":161,"line":2330},[159,91918,17018],{"class":1142},[159,91920,17021],{"class":185},[159,91922,1159],{"class":165},[159,91924,17026],{"class":192},[159,91926,1165],{"class":165},[159,91928,91929],{"class":161,"line":2350},[159,91930,7530],{"class":165},[159,91932,91933],{"class":161,"line":2370},[159,91934,1308],{"class":165},[159,91936,91937],{"class":161,"line":2390},[159,91938,590],{"emptyLinePlaceholder":589},[159,91940,91941],{"class":161,"line":2410},[159,91942,17045],{"class":1135},[159,91944,91945,91947,91949,91951],{"class":161,"line":2430},[159,91946,5145],{"class":1142},[159,91948,17052],{"class":1146},[159,91950,1150],{"class":1142},[159,91952,1478],{"class":165},[159,91954,91955,91957,91959,91961,91963],{"class":161,"line":2450},[159,91956,17061],{"class":165},[159,91958,3828],{"class":1146},[159,91960,3925],{"class":1142},[159,91962,2707],{"class":1146},[159,91964,17070],{"class":165},[159,91966,91967],{"class":161,"line":2471},[159,91968,17075],{"class":165},[159,91970,91971],{"class":161,"line":2477},[159,91972,17080],{"class":165},[159,91974,91975],{"class":161,"line":2498},[159,91976,17085],{"class":165},[159,91978,91979],{"class":161,"line":2518},[159,91980,17090],{"class":165},[159,91982,91983],{"class":161,"line":2539},[159,91984,17095],{"class":165},[159,91986,91987],{"class":161,"line":2561},[159,91988,1308],{"class":165},[159,91990,91991],{"class":161,"line":2573},[159,91992,17104],{"class":1135},[159,91994,91995],{"class":161,"line":2591},[159,91996,17109],{"class":1135},[159,91998,91999,92001,92003],{"class":161,"line":2602},[159,92000,4923],{"class":165},[159,92002,17116],{"class":185},[159,92004,17119],{"class":165},[159,92006,92007],{"class":161,"line":2613},[159,92008,17124],{"class":1135},[159,92010,92011],{"class":161,"line":2624},[159,92012,17129],{"class":1135},[159,92014,92015,92017,92019,92021],{"class":161,"line":2630},[159,92016,17134],{"class":1146},[159,92018,9952],{"class":165},[159,92020,17139],{"class":185},[159,92022,5158],{"class":165},[159,92024,92025],{"class":161,"line":2636},[159,92026,17146],{"class":1135},[159,92028,92029,92031],{"class":161,"line":2642},[159,92030,17151],{"class":185},[159,92032,5158],{"class":165},[159,92034,92035],{"class":161,"line":2648},[159,92036,4863],{"class":165},[159,92038,92039],{"class":161,"line":2674},[159,92040,17162],{"class":1135},[159,92042,92043,92045,92047],{"class":161,"line":2689},[159,92044,17167],{"class":1142},[159,92046,17170],{"class":185},[159,92048,17173],{"class":165},[159,92050,92051],{"class":161,"line":2694},[159,92052,17178],{"class":1135},[159,92054,92055,92057,92059],{"class":161,"line":2721},[159,92056,17183],{"class":165},[159,92058,189],{"class":1142},[159,92060,17188],{"class":192},[159,92062,92063],{"class":161,"line":2726},[159,92064,17193],{"class":1135},[159,92066,92067,92069,92071,92073,92075,92077,92079,92081,92083,92085,92087,92089,92091],{"class":161,"line":2735},[159,92068,12875],{"class":1142},[159,92070,11680],{"class":165},[159,92072,11683],{"class":1142},[159,92074,1186],{"class":165},[159,92076,189],{"class":1142},[159,92078,1259],{"class":1146},[159,92080,11692],{"class":165},[159,92082,166],{"class":1142},[159,92084,4780],{"class":165},[159,92086,3828],{"class":1146},[159,92088,11702],{"class":165},[159,92090,11705],{"class":1142},[159,92092,1262],{"class":165},[159,92094,92095,92097,92099,92101,92103,92105,92107,92109],{"class":161,"line":2744},[159,92096,8301],{"class":1142},[159,92098,17228],{"class":1146},[159,92100,1150],{"class":1142},[159,92102,1153],{"class":165},[159,92104,17235],{"class":185},[159,92106,1159],{"class":165},[159,92108,17240],{"class":192},[159,92110,1165],{"class":165},[159,92112,92113,92115,92117],{"class":161,"line":2753},[159,92114,17247],{"class":165},[159,92116,189],{"class":1142},[159,92118,17252],{"class":192},[159,92120,92121,92123,92125,92127,92129,92131,92133],{"class":161,"line":2758},[159,92122,17257],{"class":192},[159,92124,17260],{"class":165},[159,92126,17263],{"class":192},[159,92128,1241],{"class":165},[159,92130,17268],{"class":192},[159,92132,17271],{"class":165},[159,92134,17274],{"class":192},[159,92136,92137,92139,92141,92143,92145,92147,92149],{"class":161,"line":3959},[159,92138,17279],{"class":192},[159,92140,17260],{"class":165},[159,92142,17263],{"class":192},[159,92144,1241],{"class":165},[159,92146,17268],{"class":192},[159,92148,17290],{"class":165},[159,92150,17274],{"class":192},[159,92152,92153,92155,92157,92159,92161,92163,92165],{"class":161,"line":3968},[159,92154,17279],{"class":192},[159,92156,17260],{"class":165},[159,92158,17263],{"class":192},[159,92160,1241],{"class":165},[159,92162,17268],{"class":192},[159,92164,17307],{"class":165},[159,92166,17274],{"class":192},[159,92168,92169,92171,92173,92175,92177,92179,92181],{"class":161,"line":3977},[159,92170,17279],{"class":192},[159,92172,17260],{"class":165},[159,92174,17263],{"class":192},[159,92176,1241],{"class":165},[159,92178,17268],{"class":192},[159,92180,17324],{"class":165},[159,92182,17274],{"class":192},[159,92184,92185,92187,92189,92191,92193,92195,92197],{"class":161,"line":3982},[159,92186,17279],{"class":192},[159,92188,17260],{"class":165},[159,92190,17263],{"class":192},[159,92192,1241],{"class":165},[159,92194,17268],{"class":192},[159,92196,17341],{"class":165},[159,92198,17274],{"class":192},[159,92200,92201,92203,92205,92207,92209,92211,92213],{"class":161,"line":6843},[159,92202,17279],{"class":192},[159,92204,17260],{"class":165},[159,92206,17263],{"class":192},[159,92208,1241],{"class":165},[159,92210,17268],{"class":192},[159,92212,17358],{"class":165},[159,92214,17274],{"class":192},[159,92216,92217],{"class":161,"line":6849},[159,92218,16671],{"class":192},[159,92220,92221,92223,92225],{"class":161,"line":6855},[159,92222,17369],{"class":192},[159,92224,1241],{"class":165},[159,92226,17374],{"class":192},[159,92228,92229],{"class":161,"line":6861},[159,92230,17379],{"class":192},[159,92232,92233],{"class":161,"line":6867},[159,92234,17384],{"class":192},[159,92236,92237],{"class":161,"line":6873},[159,92238,17389],{"class":1135},[159,92240,92241,92243,92245],{"class":161,"line":6879},[159,92242,17394],{"class":165},[159,92244,17397],{"class":185},[159,92246,17400],{"class":165},[159,92248,92249],{"class":161,"line":6885},[159,92250,1308],{"class":165},[159,92252,92253],{"class":161,"line":6890},[159,92254,1508],{"class":165},[159,92256,92257],{"class":161,"line":6896},[159,92258,590],{"emptyLinePlaceholder":589},[159,92260,92261],{"class":161,"line":6902},[159,92262,17417],{"class":1135},[159,92264,92265],{"class":161,"line":6908},[159,92266,17422],{"class":1135},[159,92268,92269,92271,92273,92275,92277,92279,92281,92283,92285],{"class":161,"line":6914},[159,92270,17427],{"class":165},[159,92272,4724],{"class":185},[159,92274,1159],{"class":165},[159,92276,4729],{"class":192},[159,92278,1939],{"class":165},[159,92280,1215],{"class":1142},[159,92282,11680],{"class":165},[159,92284,14038],{"class":8765},[159,92286,1262],{"class":165},[159,92288,92289,92291,92293,92295,92297],{"class":161,"line":6920},[159,92290,1250],{"class":1142},[159,92292,14104],{"class":165},[159,92294,1256],{"class":1142},[159,92296,15326],{"class":192},[159,92298,1262],{"class":165},[159,92300,92301],{"class":161,"line":6926},[159,92302,17460],{"class":1135},[159,92304,92305],{"class":161,"line":6932},[159,92306,17465],{"class":1135},[159,92308,92309],{"class":161,"line":6938},[159,92310,17470],{"class":1135},[159,92312,92313,92315,92317,92319,92321],{"class":161,"line":6944},[159,92314,17475],{"class":165},[159,92316,4926],{"class":185},[159,92318,17480],{"class":165},[159,92320,4932],{"class":1146},[159,92322,1165],{"class":165},[159,92324,92325],{"class":161,"line":6949},[159,92326,17489],{"class":1135},[159,92328,92329,92331],{"class":161,"line":6955},[159,92330,17494],{"class":185},[159,92332,5158],{"class":165},[159,92334,92335],{"class":161,"line":6961},[159,92336,1308],{"class":165},[159,92338,92339],{"class":161,"line":6967},[159,92340,4863],{"class":165},[159,92342,92343,92345,92347],{"class":161,"line":6973},[159,92344,254],{"class":165},[159,92346,228],{"class":169},[159,92348,173],{"class":165},[159,92350,92351],{"class":161,"line":6979},[159,92352,590],{"emptyLinePlaceholder":589},[159,92354,92355,92357,92359],{"class":161,"line":6985},[159,92356,264],{"class":165},[159,92358,170],{"class":169},[159,92360,173],{"class":165},[159,92362,92363],{"class":161,"line":6991},[159,92364,590],{"emptyLinePlaceholder":589},[159,92366,92367,92369,92371],{"class":161,"line":6997},[159,92368,264],{"class":165},[159,92370,522],{"class":169},[159,92372,173],{"class":165},[14,92374,17539],{},[151,92376,92377],{"className":17542,"code":17543,"language":17544,"meta":25,"style":25},[49,92378,92379,92383,92391,92399,92403,92407,92411,92419,92423,92427,92431,92439,92443,92451,92455,92459,92463,92467,92475,92483,92487,92491,92495,92503,92511,92515,92523,92531,92535,92539,92545,92549,92553,92557,92561,92569,92577,92581,92585,92593,92597,92601,92609,92613,92617,92625,92633,92641,92645,92649,92657,92665,92673,92681,92687,92695,92703,92711,92715,92719,92727,92735,92743,92751,92759,92767,92775,92783,92787,92791,92799],{"__ignoreMap":25},[159,92380,92381],{"class":161,"line":162},[159,92382,17551],{"class":165},[159,92384,92385,92387,92389],{"class":161,"line":176},[159,92386,17556],{"class":169},[159,92388,1486],{"class":165},[159,92390,17561],{"class":192},[159,92392,92393,92395,92397],{"class":161,"line":203},[159,92394,17566],{"class":192},[159,92396,1486],{"class":165},[159,92398,17561],{"class":192},[159,92400,92401],{"class":161,"line":223},[159,92402,15685],{"class":165},[159,92404,92405],{"class":161,"line":233},[159,92406,590],{"emptyLinePlaceholder":589},[159,92408,92409],{"class":161,"line":239},[159,92410,17583],{"class":192},[159,92412,92413,92415,92417],{"class":161,"line":245},[159,92414,17588],{"class":169},[159,92416,1486],{"class":165},[159,92418,17593],{"class":192},[159,92420,92421],{"class":161,"line":251},[159,92422,17598],{"class":192},[159,92424,92425],{"class":161,"line":261},[159,92426,15685],{"class":165},[159,92428,92429],{"class":161,"line":603},[159,92430,17607],{"class":192},[159,92432,92433,92435,92437],{"class":161,"line":621},[159,92434,17612],{"class":169},[159,92436,1486],{"class":165},[159,92438,17617],{"class":192},[159,92440,92441],{"class":161,"line":634},[159,92442,17622],{"class":192},[159,92444,92445,92447,92449],{"class":161,"line":640},[159,92446,17556],{"class":169},[159,92448,1486],{"class":165},[159,92450,17631],{"class":192},[159,92452,92453],{"class":161,"line":1075},[159,92454,17636],{"class":165},[159,92456,92457],{"class":161,"line":1081},[159,92458,15685],{"class":165},[159,92460,92461],{"class":161,"line":1091},[159,92462,17645],{"class":192},[159,92464,92465],{"class":161,"line":1100},[159,92466,17650],{"class":192},[159,92468,92469,92471,92473],{"class":161,"line":1123},[159,92470,17655],{"class":169},[159,92472,1486],{"class":165},[159,92474,17660],{"class":192},[159,92476,92477,92479,92481],{"class":161,"line":1132},[159,92478,17665],{"class":169},[159,92480,1486],{"class":165},[159,92482,17670],{"class":192},[159,92484,92485],{"class":161,"line":1139},[159,92486,17675],{"class":192},[159,92488,92489],{"class":161,"line":1168},[159,92490,15685],{"class":165},[159,92492,92493],{"class":161,"line":1174},[159,92494,17684],{"class":192},[159,92496,92497,92499,92501],{"class":161,"line":1180},[159,92498,17566],{"class":169},[159,92500,1486],{"class":165},[159,92502,17693],{"class":192},[159,92504,92505,92507,92509],{"class":161,"line":1194},[159,92506,17698],{"class":169},[159,92508,1486],{"class":165},[159,92510,17703],{"class":1135},[159,92512,92513],{"class":161,"line":1200},[159,92514,17708],{"class":165},[159,92516,92517,92519,92521],{"class":161,"line":1221},[159,92518,17713],{"class":169},[159,92520,1486],{"class":165},[159,92522,17718],{"class":192},[159,92524,92525,92527,92529],{"class":161,"line":1230},[159,92526,17723],{"class":169},[159,92528,1486],{"class":165},[159,92530,17728],{"class":192},[159,92532,92533],{"class":161,"line":1247},[159,92534,15685],{"class":165},[159,92536,92537],{"class":161,"line":1265},[159,92538,17737],{"class":192},[159,92540,92541,92543],{"class":161,"line":1277},[159,92542,17742],{"class":192},[159,92544,17745],{"class":1135},[159,92546,92547],{"class":161,"line":1283},[159,92548,15685],{"class":165},[159,92550,92551],{"class":161,"line":1294},[159,92552,17754],{"class":192},[159,92554,92555],{"class":161,"line":1305},[159,92556,17759],{"class":192},[159,92558,92559],{"class":161,"line":1311},[159,92560,17764],{"class":192},[159,92562,92563,92565,92567],{"class":161,"line":1322},[159,92564,17612],{"class":169},[159,92566,1486],{"class":165},[159,92568,17617],{"class":192},[159,92570,92571,92573,92575],{"class":161,"line":1327},[159,92572,17713],{"class":169},[159,92574,1486],{"class":165},[159,92576,17781],{"class":192},[159,92578,92579],{"class":161,"line":1336},[159,92580,15685],{"class":165},[159,92582,92583],{"class":161,"line":1345},[159,92584,17790],{"class":192},[159,92586,92587,92589,92591],{"class":161,"line":1350},[159,92588,17698],{"class":169},[159,92590,1486],{"class":165},[159,92592,17799],{"class":1135},[159,92594,92595],{"class":161,"line":1764},[159,92596,15685],{"class":165},[159,92598,92599],{"class":161,"line":1769},[159,92600,17808],{"class":192},[159,92602,92603,92605,92607],{"class":161,"line":1777},[159,92604,17698],{"class":169},[159,92606,1486],{"class":165},[159,92608,17817],{"class":1135},[159,92610,92611],{"class":161,"line":1788},[159,92612,15685],{"class":165},[159,92614,92615],{"class":161,"line":1802},[159,92616,17826],{"class":192},[159,92618,92619,92621,92623],{"class":161,"line":1815},[159,92620,17655],{"class":169},[159,92622,1486],{"class":165},[159,92624,17835],{"class":192},[159,92626,92627,92629,92631],{"class":161,"line":1828},[159,92628,17556],{"class":169},[159,92630,1486],{"class":165},[159,92632,17844],{"class":192},[159,92634,92635,92637,92639],{"class":161,"line":1841},[159,92636,17612],{"class":169},[159,92638,1486],{"class":165},[159,92640,17617],{"class":192},[159,92642,92643],{"class":161,"line":1852},[159,92644,15685],{"class":165},[159,92646,92647],{"class":161,"line":1866},[159,92648,17861],{"class":192},[159,92650,92651,92653,92655],{"class":161,"line":1879},[159,92652,17655],{"class":169},[159,92654,1486],{"class":165},[159,92656,17870],{"class":192},[159,92658,92659,92661,92663],{"class":161,"line":1884},[159,92660,17875],{"class":169},[159,92662,1486],{"class":165},[159,92664,17880],{"class":192},[159,92666,92667,92669,92671],{"class":161,"line":1889},[159,92668,17885],{"class":169},[159,92670,1486],{"class":165},[159,92672,17593],{"class":192},[159,92674,92675,92677,92679],{"class":161,"line":1899},[159,92676,17894],{"class":169},[159,92678,1486],{"class":165},[159,92680,17899],{"class":192},[159,92682,92683,92685],{"class":161,"line":1912},[159,92684,17742],{"class":192},[159,92686,17745],{"class":1135},[159,92688,92689,92691,92693],{"class":161,"line":1925},[159,92690,17910],{"class":169},[159,92692,1486],{"class":165},[159,92694,17899],{"class":192},[159,92696,92697,92699,92701],{"class":161,"line":1956},[159,92698,17919],{"class":169},[159,92700,1486],{"class":165},[159,92702,17924],{"class":192},[159,92704,92705,92707,92709],{"class":161,"line":1971},[159,92706,17929],{"class":169},[159,92708,1486],{"class":165},[159,92710,17934],{"class":192},[159,92712,92713],{"class":161,"line":1976},[159,92714,15685],{"class":165},[159,92716,92717],{"class":161,"line":1981},[159,92718,17943],{"class":192},[159,92720,92721,92723,92725],{"class":161,"line":1989},[159,92722,17655],{"class":169},[159,92724,1486],{"class":165},[159,92726,17952],{"class":192},[159,92728,92729,92731,92733],{"class":161,"line":2001},[159,92730,17875],{"class":169},[159,92732,1486],{"class":165},[159,92734,17880],{"class":192},[159,92736,92737,92739,92741],{"class":161,"line":2006},[159,92738,17965],{"class":169},[159,92740,1486],{"class":165},[159,92742,17970],{"class":1135},[159,92744,92745,92747,92749],{"class":161,"line":2015},[159,92746,17885],{"class":169},[159,92748,1486],{"class":165},[159,92750,17593],{"class":192},[159,92752,92753,92755,92757],{"class":161,"line":2024},[159,92754,17983],{"class":169},[159,92756,1486],{"class":165},[159,92758,17561],{"class":192},[159,92760,92761,92763,92765],{"class":161,"line":2029},[159,92762,17992],{"class":169},[159,92764,1486],{"class":165},[159,92766,17799],{"class":1135},[159,92768,92769,92771,92773],{"class":161,"line":2038},[159,92770,18001],{"class":169},[159,92772,1486],{"class":165},[159,92774,18006],{"class":192},[159,92776,92777,92779,92781],{"class":161,"line":2053},[159,92778,17894],{"class":169},[159,92780,1486],{"class":165},[159,92782,17899],{"class":192},[159,92784,92785],{"class":161,"line":2070},[159,92786,15685],{"class":165},[159,92788,92789],{"class":161,"line":2095},[159,92790,18023],{"class":192},[159,92792,92793,92795,92797],{"class":161,"line":2104},[159,92794,17655],{"class":169},[159,92796,1486],{"class":165},[159,92798,18032],{"class":192},[159,92800,92801],{"class":161,"line":2120},[159,92802,15685],{"class":165},[14,92804,18039],{},[14,92806,92807],{},[23,92808],{"alt":25,"src":18044},[14,92810,92811],{},[23,92812],{"alt":25,"src":18049},[14,92814,92815],{},[23,92816],{"alt":25,"src":18054},[42,92818,18058],{"id":18057},[14,92820,92821],{},[23,92822],{"alt":25,"src":18063},[14,92824,92825],{},[23,92826],{"alt":25,"src":18068},[14,92828,92829],{},[23,92830],{"alt":25,"src":18073},[37,92832,18077],{"id":18076},[14,92834,92835],{},[23,92836],{"alt":25,"src":18082},[14,92838,18085],{},[14,92840,18088],{},[14,92842,18091],{},[14,92844,18094],{},[42,92846,18098],{"id":18097},[14,92848,18101],{},[14,92850,92851],{},[23,92852],{"alt":25,"src":18106},[14,92854,18109],{},[14,92856,92857],{},[23,92858],{"alt":25,"src":18114},[42,92860,18118],{"id":18117},[14,92862,92863],{},[23,92864],{"alt":25,"src":18123},[14,92866,18126],{},[14,92868,92869],{},[23,92870],{"alt":25,"src":18131},[14,92872,92873],{},[23,92874],{"alt":25,"src":18136},[14,92876,92877],{},[23,92878],{"alt":25,"src":18141},[14,92880,18144],{},[14,92882,18147],{},[14,92884,92885],{},[23,92886],{"alt":25,"src":18152},[14,92888,92889],{},[23,92890],{"alt":25,"src":18157},[14,92892,18160],{},[14,92894,18163],{},[42,92896,18167],{"id":18166},[14,92898,18170],{},[14,92900,92901],{},[23,92902],{"alt":25,"src":18175},[14,92904,18178],{},[134,92906,92907],{},[106,92908,18183],{},[14,92910,18186],{},[14,92912,92913],{},[23,92914],{"alt":25,"src":18191},[14,92916,92917],{},[23,92918],{"alt":25,"src":18196},[134,92920,92921],{"start":176},[106,92922,18201],{},[14,92924,18204],{},[14,92926,92927],{},[23,92928],{"alt":25,"src":18209},[151,92930,92931],{"className":153,"code":18212,"language":155,"meta":25,"style":25},[49,92932,92933,92951,92969],{"__ignoreMap":25},[159,92934,92935,92937,92939,92941,92943,92945,92947,92949],{"class":161,"line":162},[159,92936,179],{"class":165},[159,92938,8085],{"class":169},[159,92940,8088],{"class":185},[159,92942,189],{"class":165},[159,92944,18227],{"class":192},[159,92946,18230],{"class":165},[159,92948,8085],{"class":169},[159,92950,173],{"class":165},[159,92952,92953,92955,92957,92959,92961,92963,92965,92967],{"class":161,"line":176},[159,92954,179],{"class":165},[159,92956,8085],{"class":169},[159,92958,8088],{"class":185},[159,92960,189],{"class":165},[159,92962,18247],{"class":192},[159,92964,18250],{"class":165},[159,92966,8085],{"class":169},[159,92968,173],{"class":165},[159,92970,92971,92973,92975,92977,92979,92981,92983,92985],{"class":161,"line":203},[159,92972,179],{"class":165},[159,92974,8085],{"class":169},[159,92976,8088],{"class":185},[159,92978,189],{"class":165},[159,92980,18267],{"class":192},[159,92982,18270],{"class":165},[159,92984,8085],{"class":169},[159,92986,173],{"class":165},[14,92988,18277],{},[134,92990,92991],{"start":203},[106,92992,18282,92993,18285,92995,18288],{},[429,92994],{},[429,92996],{},[42,92998,18292],{"id":18291},[14,93000,93001],{},[23,93002],{"alt":25,"src":18297},[151,93004,93005],{"className":18300,"code":18301,"language":18302,"meta":25,"style":25},[49,93006,93007,93011,93021,93031,93035,93077,93113,93117,93127,93137,93141],{"__ignoreMap":25},[159,93008,93009],{"class":161,"line":162},[159,93010,18309],{"class":1135},[159,93012,93013,93015,93017,93019],{"class":161,"line":176},[159,93014,18314],{"class":1142},[159,93016,1159],{"class":165},[159,93018,1215],{"class":1142},[159,93020,18321],{"class":165},[159,93022,93023,93025,93027,93029],{"class":161,"line":203},[159,93024,18326],{"class":1142},[159,93026,18329],{"class":1146},[159,93028,1150],{"class":1142},[159,93030,18334],{"class":165},[159,93032,93033],{"class":161,"line":223},[159,93034,18339],{"class":1135},[159,93036,93037,93039,93041,93043,93045,93047,93049,93051,93053,93055,93057,93059,93061,93063,93065,93067,93069,93071,93073,93075],{"class":161,"line":233},[159,93038,18326],{"class":1142},[159,93040,18346],{"class":1146},[159,93042,1150],{"class":1142},[159,93044,18351],{"class":165},[159,93046,18354],{"class":185},[159,93048,1159],{"class":165},[159,93050,13083],{"class":192},[159,93052,18362],{"class":18361},[159,93054,18365],{"class":1142},[159,93056,18368],{"class":1146},[159,93058,18372],{"class":18371},[159,93060,18375],{"class":1146},[159,93062,2704],{"class":1142},[159,93064,1159],{"class":18361},[159,93066,18382],{"class":1146},[159,93068,2704],{"class":1142},[159,93070,18387],{"class":18361},[159,93072,18365],{"class":1142},[159,93074,13083],{"class":192},[159,93076,18394],{"class":165},[159,93078,93079,93081,93083,93085,93087,93089,93091,93093,93095,93097,93099,93101,93103,93105,93107,93109,93111],{"class":161,"line":239},[159,93080,18326],{"class":1142},[159,93082,18401],{"class":1146},[159,93084,1150],{"class":1142},[159,93086,18351],{"class":165},[159,93088,18354],{"class":185},[159,93090,1159],{"class":165},[159,93092,13083],{"class":192},[159,93094,18414],{"class":18361},[159,93096,18417],{"class":1146},[159,93098,18420],{"class":18361},[159,93100,18417],{"class":1146},[159,93102,1159],{"class":18361},[159,93104,18427],{"class":1146},[159,93106,2704],{"class":1142},[159,93108,18387],{"class":18361},[159,93110,13083],{"class":192},[159,93112,18394],{"class":165},[159,93114,93115],{"class":161,"line":245},[159,93116,18440],{"class":1135},[159,93118,93119,93121,93123,93125],{"class":161,"line":251},[159,93120,18445],{"class":1142},[159,93122,18448],{"class":165},[159,93124,18451],{"class":1142},[159,93126,18454],{"class":165},[159,93128,93129,93131,93133,93135],{"class":161,"line":261},[159,93130,18459],{"class":165},[159,93132,189],{"class":1142},[159,93134,18464],{"class":192},[159,93136,17636],{"class":165},[159,93138,93139],{"class":161,"line":603},[159,93140,18471],{"class":165},[159,93142,93143],{"class":161,"line":621},[159,93144,18476],{"class":165},[42,93146,18480],{"id":18479},[14,93148,93149],{},[23,93150],{"alt":25,"src":18485},[14,93152,18488],{},[14,93154,18491],{},[14,93156,18494],{},[37,93158,18498],{"id":18497},[134,93160,93161,93163,93165],{},[106,93162,18503],{},[106,93164,18506],{},[106,93166,18509],{},[42,93168,18513],{"id":18512},[14,93170,18516],{},[14,93172,93173],{},[23,93174],{"alt":25,"src":18521},[14,93176,93177],{},[23,93178],{"alt":25,"src":18526},[14,93180,18529],{},[14,93182,18532],{},[14,93184,18535],{},[14,93186,18538],{},[14,93188,18541],{},[14,93190,18532],{},[14,93192,18546],{},[14,93194,18549],{},[14,93196,18552],{},[14,93198,93199],{},[23,93200],{"alt":25,"src":18557},[14,93202,18560],{},[14,93204,93205],{},[23,93206],{"alt":25,"src":18565},[14,93208,18568],{},[42,93210,18572],{"id":18571},[14,93212,18575],{},[14,93214,18578],{},[134,93216,93217,93219,93221,93223],{},[106,93218,18583],{},[106,93220,18586],{},[106,93222,18589],{},[106,93224,18592],{},[42,93226,18596],{"id":18595},[14,93228,18599],{},[151,93230,93231],{"className":153,"code":18602,"language":155,"meta":25,"style":25},[49,93232,93233,93241,93245,93249,93253,93257,93261,93265,93269],{"__ignoreMap":25},[159,93234,93235,93237,93239],{"class":161,"line":162},[159,93236,166],{"class":165},[159,93238,228],{"class":169},[159,93240,173],{"class":165},[159,93242,93243],{"class":161,"line":176},[159,93244,18617],{"class":165},[159,93246,93247],{"class":161,"line":203},[159,93248,18622],{"class":165},[159,93250,93251],{"class":161,"line":223},[159,93252,18627],{"class":165},[159,93254,93255],{"class":161,"line":233},[159,93256,18632],{"class":165},[159,93258,93259],{"class":161,"line":239},[159,93260,1508],{"class":165},[159,93262,93263],{"class":161,"line":245},[159,93264,18641],{"class":165},[159,93266,93267],{"class":161,"line":251},[159,93268,18646],{"class":165},[159,93270,93271,93273,93275],{"class":161,"line":261},[159,93272,254],{"class":165},[159,93274,228],{"class":169},[159,93276,173],{"class":165},[14,93278,93279],{},[23,93280],{"alt":25,"src":18659},[14,93282,18662],{},[14,93284,18665],{},[14,93286,93287],{},[23,93288],{"alt":25,"src":18670},[14,93290,18673],{},[326,93292,18677],{"id":18676},[14,93294,93295],{},[23,93296],{"alt":25,"src":18682},[151,93298,93299],{"className":520,"code":18685,"language":522,"meta":25,"style":25},[49,93300,93301,93309,93319,93327,93335,93341,93345,93349,93369,93385,93393,93397,93401,93405],{"__ignoreMap":25},[159,93302,93303,93305,93307],{"class":161,"line":162},[159,93304,166],{"class":165},[159,93306,228],{"class":169},[159,93308,173],{"class":165},[159,93310,93311,93313,93315,93317],{"class":161,"line":176},[159,93312,1143],{"class":1142},[159,93314,17052],{"class":1146},[159,93316,1150],{"class":1142},[159,93318,1478],{"class":165},[159,93320,93321,93323,93325],{"class":161,"line":203},[159,93322,18710],{"class":165},[159,93324,18713],{"class":192},[159,93326,17070],{"class":165},[159,93328,93329,93331,93333],{"class":161,"line":223},[159,93330,18720],{"class":165},[159,93332,18723],{"class":1146},[159,93334,17070],{"class":165},[159,93336,93337,93339],{"class":161,"line":233},[159,93338,18730],{"class":165},[159,93340,18733],{"class":192},[159,93342,93343],{"class":161,"line":239},[159,93344,1508],{"class":165},[159,93346,93347],{"class":161,"line":245},[159,93348,18641],{"class":1135},[159,93350,93351,93353,93355,93357,93359,93361,93363,93365,93367],{"class":161,"line":251},[159,93352,18746],{"class":165},[159,93354,18749],{"class":185},[159,93356,1159],{"class":165},[159,93358,18754],{"class":192},[159,93360,1939],{"class":165},[159,93362,18759],{"class":1146},[159,93364,9952],{"class":165},[159,93366,18764],{"class":185},[159,93368,18767],{"class":165},[159,93370,93371,93373,93375,93377,93379,93381,93383],{"class":161,"line":261},[159,93372,18772],{"class":165},[159,93374,5166],{"class":185},[159,93376,18777],{"class":165},[159,93378,18780],{"class":185},[159,93380,1159],{"class":165},[159,93382,18754],{"class":192},[159,93384,18787],{"class":165},[159,93386,93387,93389,93391],{"class":161,"line":603},[159,93388,254],{"class":165},[159,93390,228],{"class":169},[159,93392,173],{"class":165},[159,93394,93395],{"class":161,"line":621},[159,93396,17708],{"class":165},[159,93398,93399],{"class":161,"line":634},[159,93400,18804],{"class":165},[159,93402,93403],{"class":161,"line":640},[159,93404,18809],{"class":165},[159,93406,93407],{"class":161,"line":1075},[159,93408,18814],{"class":165},[326,93410,18818],{"id":18817},[14,93412,93413],{},[23,93414],{"alt":25,"src":18823},[14,93416,93417],{},[23,93418],{"alt":25,"src":18828},[151,93420,93421],{"className":153,"code":18831,"language":155,"meta":25,"style":25},[49,93422,93423,93431,93435,93439,93443,93447,93451,93455,93459,93463,93467,93471,93475,93479,93483],{"__ignoreMap":25},[159,93424,93425,93427,93429],{"class":161,"line":162},[159,93426,179],{"class":165},[159,93428,228],{"class":169},[159,93430,173],{"class":165},[159,93432,93433],{"class":161,"line":176},[159,93434,18617],{"class":165},[159,93436,93437],{"class":161,"line":203},[159,93438,18622],{"class":165},[159,93440,93441],{"class":161,"line":223},[159,93442,18627],{"class":165},[159,93444,93445],{"class":161,"line":233},[159,93446,18632],{"class":165},[159,93448,93449],{"class":161,"line":239},[159,93450,1508],{"class":165},[159,93452,93453],{"class":161,"line":245},[159,93454,18866],{"class":165},[159,93456,93457],{"class":161,"line":251},[159,93458,18871],{"class":165},[159,93460,93461],{"class":161,"line":261},[159,93462,18876],{"class":165},[159,93464,93465],{"class":161,"line":603},[159,93466,18881],{"class":165},[159,93468,93469],{"class":161,"line":621},[159,93470,18886],{"class":165},[159,93472,93473],{"class":161,"line":634},[159,93474,18891],{"class":165},[159,93476,93477],{"class":161,"line":640},[159,93478,18896],{"class":165},[159,93480,93481],{"class":161,"line":1075},[159,93482,18901],{"class":165},[159,93484,93485,93487,93489],{"class":161,"line":1081},[159,93486,254],{"class":165},[159,93488,228],{"class":169},[159,93490,173],{"class":165},[14,93492,93493],{},[23,93494],{"alt":25,"src":18914},[42,93496,18918],{"id":18917},[14,93498,18921],{},[14,93500,93501],{},[23,93502],{"alt":25,"src":18926},[14,93504,93505],{},[23,93506],{"alt":25,"src":18931},[14,93508,93509,18937],{},[61,93510,18936],{},[14,93512,18940],{},[14,93514,18943],{},[14,93516,18946],{},[42,93518,18950],{"id":18949},[14,93520,93521],{},[23,93522],{"alt":25,"src":18955},[14,93524,18958],{},[134,93526,93527,93529,93531],{},[106,93528,18963],{},[106,93530,18966],{},[106,93532,18969],{},[42,93534,18973],{"id":18972},[134,93536,93537,93539,93541,93543,93545],{},[106,93538,18978],{},[106,93540,18981],{},[106,93542,18984],{},[106,93544,18987],{},[106,93546,18990],{},[151,93548,93549],{"className":520,"code":18993,"language":522,"meta":25,"style":25},[49,93550,93551,93561,93575,93579,93587,93601,93621,93633,93641,93647,93657,93667,93671,93675,93681,93691,93703,93707,93711,93717,93729,93743,93753,93757,93761,93767,93773,93779,93791,93803,93813,93825,93829,93833,93839,93845,93857,93869,93879,93891,93919,93923,93927,93933,93945,93957,93979,93989,93999,94003,94007,94015,94025,94037,94049,94061,94077,94089,94101,94105,94109,94115,94127,94139,94151,94161,94179,94191,94203,94225,94235,94239,94243,94251,94261,94265,94269,94275,94287,94297,94307,94311,94315,94321,94343,94347,94351,94357,94363,94375,94385,94397,94425,94437,94453,94457,94461,94471,94493,94503,94507,94511,94523,94533,94545,94557,94569,94581,94591,94601,94611,94621,94633,94637,94645,94653,94657,94665,94677,94697,94729,94761,94793,94819,94837,94855,94863,94889,94907,94925,94943,94961,94979,94987,94995,95011,95019,95045,95053,95061,95069,95081,95093,95105,95117,95129,95141,95153,95165,95173,95181,95189,95193,95197,95201,95205,95209,95213,95217,95221,95225,95229,95233,95237,95245,95253,95261,95265,95269,95273,95277,95281,95285,95289,95293,95297,95301,95305,95309,95313,95317,95321,95325,95329,95339,95347,95351,95355,95363,95377,95415,95453,95491,95547,95553,95557,95561,95579,95587,95591,95595,95621,95627,95631,95643,95655,95667,95679,95691,95703,95715,95719,95727,95731,95735,95739,95743,95751,95755,95759,95763,95779,95783,95801,95805,95809,95813,95817,95835,95853,95871,95889,95907,95925,95929,95933,95953,95957,95965,95969,95973,95977,95999,96011,96015,96023,96027,96031,96035,96039,96043,96047,96051,96055,96059,96087,96091,96095,96099,96103,96107,96111,96115,96123,96127,96131,96137,96149,96153,96173,96177,96181,96185,96189,96209,96213,96225,96229,96233,96237,96241,96245,96249,96253,96257,96271,96283,96287,96293,96297,96317,96321,96325,96329,96333,96337,96345,96353,96357],{"__ignoreMap":25},[159,93552,93553,93555,93557,93559],{"class":161,"line":162},[159,93554,914],{"class":165},[159,93556,917],{"class":169},[159,93558,920],{"class":185},[159,93560,173],{"class":165},[159,93562,93563,93565,93567,93569,93571,93573],{"class":161,"line":176},[159,93564,166],{"class":165},[159,93566,522],{"class":169},[159,93568,931],{"class":185},[159,93570,189],{"class":165},[159,93572,936],{"class":192},[159,93574,173],{"class":165},[159,93576,93577],{"class":161,"line":203},[159,93578,590],{"emptyLinePlaceholder":589},[159,93580,93581,93583,93585],{"class":161,"line":223},[159,93582,166],{"class":165},[159,93584,949],{"class":169},[159,93586,173],{"class":165},[159,93588,93589,93591,93593,93595,93597,93599],{"class":161,"line":233},[159,93590,179],{"class":165},[159,93592,958],{"class":169},[159,93594,961],{"class":185},[159,93596,189],{"class":165},[159,93598,966],{"class":192},[159,93600,173],{"class":165},[159,93602,93603,93605,93607,93609,93611,93613,93615,93617,93619],{"class":161,"line":239},[159,93604,179],{"class":165},[159,93606,958],{"class":169},[159,93608,547],{"class":185},[159,93610,189],{"class":165},[159,93612,981],{"class":192},[159,93614,984],{"class":185},[159,93616,189],{"class":165},[159,93618,989],{"class":192},[159,93620,173],{"class":165},[159,93622,93623,93625,93627,93629,93631],{"class":161,"line":245},[159,93624,179],{"class":165},[159,93626,998],{"class":169},[159,93628,1001],{"class":165},[159,93630,998],{"class":169},[159,93632,173],{"class":165},[159,93634,93635,93637,93639],{"class":161,"line":251},[159,93636,179],{"class":165},[159,93638,1468],{"class":169},[159,93640,173],{"class":165},[159,93642,93643,93645],{"class":161,"line":261},[159,93644,1475],{"class":169},[159,93646,1478],{"class":165},[159,93648,93649,93651,93653,93655],{"class":161,"line":603},[159,93650,1483],{"class":1146},[159,93652,1486],{"class":165},[159,93654,1489],{"class":1146},[159,93656,1492],{"class":165},[159,93658,93659,93661,93663,93665],{"class":161,"line":621},[159,93660,1497],{"class":1146},[159,93662,1486],{"class":165},[159,93664,1489],{"class":1146},[159,93666,1492],{"class":165},[159,93668,93669],{"class":161,"line":634},[159,93670,1508],{"class":165},[159,93672,93673],{"class":161,"line":640},[159,93674,590],{"emptyLinePlaceholder":589},[159,93676,93677,93679],{"class":161,"line":1075},[159,93678,4181],{"class":169},[159,93680,1478],{"class":165},[159,93682,93683,93685,93687,93689],{"class":161,"line":1081},[159,93684,4188],{"class":1146},[159,93686,1486],{"class":165},[159,93688,4193],{"class":1146},[159,93690,1492],{"class":165},[159,93692,93693,93695,93697,93699,93701],{"class":161,"line":1091},[159,93694,9120],{"class":1146},[159,93696,1486],{"class":165},[159,93698,1739],{"class":1146},[159,93700,1571],{"class":1142},[159,93702,1492],{"class":165},[159,93704,93705],{"class":161,"line":1100},[159,93706,1508],{"class":165},[159,93708,93709],{"class":161,"line":1123},[159,93710,590],{"emptyLinePlaceholder":589},[159,93712,93713,93715],{"class":161,"line":1132},[159,93714,19160],{"class":185},[159,93716,1478],{"class":165},[159,93718,93719,93721,93723,93725,93727],{"class":161,"line":1139},[159,93720,1563],{"class":1146},[159,93722,1486],{"class":165},[159,93724,19171],{"class":1146},[159,93726,1571],{"class":1142},[159,93728,1492],{"class":165},[159,93730,93731,93733,93735,93737,93739,93741],{"class":161,"line":1168},[159,93732,1497],{"class":1146},[159,93734,1486],{"class":165},[159,93736,1964],{"class":1146},[159,93738,1571],{"class":1142},[159,93740,1601],{"class":1146},[159,93742,1492],{"class":165},[159,93744,93745,93747,93749,93751],{"class":161,"line":1174},[159,93746,4188],{"class":1146},[159,93748,1486],{"class":165},[159,93750,4193],{"class":1146},[159,93752,1492],{"class":165},[159,93754,93755],{"class":161,"line":1180},[159,93756,1508],{"class":165},[159,93758,93759],{"class":161,"line":1194},[159,93760,590],{"emptyLinePlaceholder":589},[159,93762,93763,93765],{"class":161,"line":1200},[159,93764,19212],{"class":185},[159,93766,17070],{"class":165},[159,93768,93769,93771],{"class":161,"line":1221},[159,93770,19219],{"class":185},[159,93772,17070],{"class":165},[159,93774,93775,93777],{"class":161,"line":1230},[159,93776,19226],{"class":185},[159,93778,1478],{"class":165},[159,93780,93781,93783,93785,93787,93789],{"class":161,"line":1247},[159,93782,1563],{"class":1146},[159,93784,1486],{"class":165},[159,93786,1596],{"class":1146},[159,93788,1571],{"class":1142},[159,93790,1492],{"class":165},[159,93792,93793,93795,93797,93799,93801],{"class":161,"line":1265},[159,93794,1578],{"class":1146},[159,93796,1486],{"class":165},[159,93798,1739],{"class":1146},[159,93800,1571],{"class":1142},[159,93802,1492],{"class":165},[159,93804,93805,93807,93809,93811],{"class":161,"line":1277},[159,93806,8817],{"class":1146},[159,93808,1486],{"class":165},[159,93810,1529],{"class":1146},[159,93812,1492],{"class":165},[159,93814,93815,93817,93819,93821,93823],{"class":161,"line":1283},[159,93816,8787],{"class":1146},[159,93818,1486],{"class":165},[159,93820,1673],{"class":1146},[159,93822,1571],{"class":1142},[159,93824,1492],{"class":165},[159,93826,93827],{"class":161,"line":1294},[159,93828,1508],{"class":165},[159,93830,93831],{"class":161,"line":1305},[159,93832,590],{"emptyLinePlaceholder":589},[159,93834,93835,93837],{"class":161,"line":1311},[159,93836,19287],{"class":185},[159,93838,17070],{"class":165},[159,93840,93841,93843],{"class":161,"line":1322},[159,93842,19294],{"class":185},[159,93844,1478],{"class":165},[159,93846,93847,93849,93851,93853,93855],{"class":161,"line":1327},[159,93848,1563],{"class":1146},[159,93850,1486],{"class":165},[159,93852,1596],{"class":1146},[159,93854,1571],{"class":1142},[159,93856,1492],{"class":165},[159,93858,93859,93861,93863,93865,93867],{"class":161,"line":1336},[159,93860,1578],{"class":1146},[159,93862,1486],{"class":165},[159,93864,4255],{"class":1146},[159,93866,1571],{"class":1142},[159,93868,1492],{"class":165},[159,93870,93871,93873,93875,93877],{"class":161,"line":1345},[159,93872,8817],{"class":1146},[159,93874,1486],{"class":165},[159,93876,1529],{"class":1146},[159,93878,1492],{"class":165},[159,93880,93881,93883,93885,93887,93889],{"class":161,"line":1350},[159,93882,8787],{"class":1146},[159,93884,1486],{"class":165},[159,93886,1673],{"class":1146},[159,93888,1571],{"class":1142},[159,93890,1492],{"class":165},[159,93892,93893,93895,93897,93899,93901,93903,93905,93907,93909,93911,93913,93915,93917],{"class":161,"line":1764},[159,93894,9018],{"class":1146},[159,93896,1486],{"class":165},[159,93898,4932],{"class":1146},[159,93900,1571],{"class":1142},[159,93902,7709],{"class":1146},[159,93904,19357],{"class":1146},[159,93906,1159],{"class":165},[159,93908,13303],{"class":1146},[159,93910,1939],{"class":165},[159,93912,19366],{"class":1146},[159,93914,1939],{"class":165},[159,93916,19366],{"class":1146},[159,93918,1953],{"class":165},[159,93920,93921],{"class":161,"line":1769},[159,93922,1508],{"class":165},[159,93924,93925],{"class":161,"line":1777},[159,93926,590],{"emptyLinePlaceholder":589},[159,93928,93929,93931],{"class":161,"line":1788},[159,93930,19385],{"class":169},[159,93932,1478],{"class":165},[159,93934,93935,93937,93939,93941,93943],{"class":161,"line":1802},[159,93936,1578],{"class":1146},[159,93938,1486],{"class":165},[159,93940,4255],{"class":1146},[159,93942,1571],{"class":1142},[159,93944,1492],{"class":165},[159,93946,93947,93949,93951,93953,93955],{"class":161,"line":1815},[159,93948,1563],{"class":1146},[159,93950,1486],{"class":165},[159,93952,19408],{"class":1146},[159,93954,1571],{"class":1142},[159,93956,1492],{"class":165},[159,93958,93959,93961,93963,93965,93967,93969,93971,93973,93975,93977],{"class":161,"line":1828},[159,93960,1682],{"class":1146},[159,93962,1486],{"class":165},[159,93964,19421],{"class":1146},[159,93966,1159],{"class":165},[159,93968,19426],{"class":1146},[159,93970,1939],{"class":165},[159,93972,19431],{"class":1146},[159,93974,1939],{"class":165},[159,93976,19436],{"class":1146},[159,93978,1953],{"class":165},[159,93980,93981,93983,93985,93987],{"class":161,"line":1841},[159,93982,4322],{"class":1146},[159,93984,1486],{"class":165},[159,93986,7868],{"class":1146},[159,93988,1492],{"class":165},[159,93990,93991,93993,93995,93997],{"class":161,"line":1852},[159,93992,9018],{"class":1146},[159,93994,1486],{"class":165},[159,93996,1489],{"class":1146},[159,93998,1492],{"class":165},[159,94000,94001],{"class":161,"line":1866},[159,94002,1508],{"class":165},[159,94004,94005],{"class":161,"line":1879},[159,94006,590],{"emptyLinePlaceholder":589},[159,94008,94009,94011,94013],{"class":161,"line":1884},[159,94010,19385],{"class":169},[159,94012,19473],{"class":169},[159,94014,1478],{"class":165},[159,94016,94017,94019,94021,94023],{"class":161,"line":1889},[159,94018,1818],{"class":1146},[159,94020,1486],{"class":165},[159,94022,19484],{"class":1146},[159,94024,1492],{"class":165},[159,94026,94027,94029,94031,94033,94035],{"class":161,"line":1899},[159,94028,1563],{"class":1146},[159,94030,1486],{"class":165},[159,94032,1964],{"class":1146},[159,94034,1571],{"class":1142},[159,94036,1492],{"class":165},[159,94038,94039,94041,94043,94045,94047],{"class":161,"line":1912},[159,94040,1578],{"class":1146},[159,94042,1486],{"class":165},[159,94044,1964],{"class":1146},[159,94046,1571],{"class":1142},[159,94048,1492],{"class":165},[159,94050,94051,94053,94055,94057,94059],{"class":161,"line":1925},[159,94052,4264],{"class":1146},[159,94054,1486],{"class":165},[159,94056,5850],{"class":1146},[159,94058,1571],{"class":1142},[159,94060,1492],{"class":165},[159,94062,94063,94065,94067,94069,94071,94073,94075],{"class":161,"line":1956},[159,94064,9018],{"class":1146},[159,94066,1486],{"class":165},[159,94068,4932],{"class":1146},[159,94070,1571],{"class":1142},[159,94072,7709],{"class":1146},[159,94074,19537],{"class":1146},[159,94076,1492],{"class":165},[159,94078,94079,94081,94083,94085,94087],{"class":161,"line":1971},[159,94080,1959],{"class":1146},[159,94082,1486],{"class":165},[159,94084,1753],{"class":1146},[159,94086,1571],{"class":1142},[159,94088,1492],{"class":165},[159,94090,94091,94093,94095,94097,94099],{"class":161,"line":1976},[159,94092,8787],{"class":1146},[159,94094,1486],{"class":165},[159,94096,4932],{"class":1146},[159,94098,1571],{"class":1142},[159,94100,1492],{"class":165},[159,94102,94103],{"class":161,"line":1981},[159,94104,1508],{"class":165},[159,94106,94107],{"class":161,"line":1989},[159,94108,590],{"emptyLinePlaceholder":589},[159,94110,94111,94113],{"class":161,"line":2001},[159,94112,19576],{"class":185},[159,94114,1478],{"class":165},[159,94116,94117,94119,94121,94123,94125],{"class":161,"line":2006},[159,94118,1563],{"class":1146},[159,94120,1486],{"class":165},[159,94122,8662],{"class":1146},[159,94124,1571],{"class":1142},[159,94126,1492],{"class":165},[159,94128,94129,94131,94133,94135,94137],{"class":161,"line":2015},[159,94130,1578],{"class":1146},[159,94132,1486],{"class":165},[159,94134,4269],{"class":1146},[159,94136,1571],{"class":1142},[159,94138,1492],{"class":165},[159,94140,94141,94143,94145,94147,94149],{"class":161,"line":2024},[159,94142,4264],{"class":1146},[159,94144,1486],{"class":165},[159,94146,4269],{"class":1146},[159,94148,1571],{"class":1142},[159,94150,1492],{"class":165},[159,94152,94153,94155,94157,94159],{"class":161,"line":2029},[159,94154,4188],{"class":1146},[159,94156,1486],{"class":165},[159,94158,19623],{"class":1146},[159,94160,1492],{"class":165},[159,94162,94163,94165,94167,94169,94171,94173,94175,94177],{"class":161,"line":2038},[159,94164,1497],{"class":1146},[159,94166,1486],{"class":165},[159,94168,4269],{"class":1146},[159,94170,1571],{"class":1142},[159,94172,1601],{"class":1146},[159,94174,7664],{"class":1146},[159,94176,1571],{"class":1142},[159,94178,1492],{"class":165},[159,94180,94181,94183,94185,94187,94189],{"class":161,"line":2053},[159,94182,19648],{"class":1146},[159,94184,1486],{"class":165},[159,94186,1964],{"class":1146},[159,94188,1571],{"class":1142},[159,94190,1492],{"class":165},[159,94192,94193,94195,94197,94199,94201],{"class":161,"line":2070},[159,94194,1721],{"class":1146},[159,94196,1486],{"class":165},[159,94198,19665],{"class":1146},[159,94200,1571],{"class":1142},[159,94202,1492],{"class":165},[159,94204,94205,94207,94209,94211,94213,94215,94217,94219,94221,94223],{"class":161,"line":2095},[159,94206,1682],{"class":1146},[159,94208,1486],{"class":165},[159,94210,19421],{"class":1146},[159,94212,1159],{"class":165},[159,94214,19682],{"class":1146},[159,94216,1939],{"class":165},[159,94218,19687],{"class":1146},[159,94220,1939],{"class":165},[159,94222,19687],{"class":1146},[159,94224,1953],{"class":165},[159,94226,94227,94229,94231,94233],{"class":161,"line":2104},[159,94228,19698],{"class":1146},[159,94230,1486],{"class":165},[159,94232,7523],{"class":1146},[159,94234,1492],{"class":165},[159,94236,94237],{"class":161,"line":2120},[159,94238,1508],{"class":165},[159,94240,94241],{"class":161,"line":2134},[159,94242,590],{"emptyLinePlaceholder":589},[159,94244,94245,94247,94249],{"class":161,"line":2143},[159,94246,19576],{"class":185},[159,94248,19473],{"class":169},[159,94250,1478],{"class":165},[159,94252,94253,94255,94257,94259],{"class":161,"line":2165},[159,94254,4322],{"class":1146},[159,94256,1486],{"class":165},[159,94258,4327],{"class":1146},[159,94260,1492],{"class":165},[159,94262,94263],{"class":161,"line":2178},[159,94264,1508],{"class":165},[159,94266,94267],{"class":161,"line":2191},[159,94268,590],{"emptyLinePlaceholder":589},[159,94270,94271,94273],{"class":161,"line":2204},[159,94272,12081],{"class":169},[159,94274,1478],{"class":165},[159,94276,94277,94279,94281,94283,94285],{"class":161,"line":2217},[159,94278,1563],{"class":1146},[159,94280,1486],{"class":165},[159,94282,8662],{"class":1146},[159,94284,1571],{"class":1142},[159,94286,1492],{"class":165},[159,94288,94289,94291,94293,94295],{"class":161,"line":2230},[159,94290,1497],{"class":1146},[159,94292,1486],{"class":165},[159,94294,19765],{"class":1146},[159,94296,1492],{"class":165},[159,94298,94299,94301,94303,94305],{"class":161,"line":2243},[159,94300,12088],{"class":1146},[159,94302,1486],{"class":165},[159,94304,12093],{"class":1146},[159,94306,1492],{"class":165},[159,94308,94309],{"class":161,"line":2256},[159,94310,1508],{"class":165},[159,94312,94313],{"class":161,"line":2266},[159,94314,590],{"emptyLinePlaceholder":589},[159,94316,94317,94319],{"class":161,"line":2275},[159,94318,12173],{"class":169},[159,94320,1478],{"class":165},[159,94322,94323,94325,94327,94329,94331,94333,94335,94337,94339,94341],{"class":161,"line":2284},[159,94324,1682],{"class":1146},[159,94326,1486],{"class":165},[159,94328,19421],{"class":1146},[159,94330,1159],{"class":165},[159,94332,19682],{"class":1146},[159,94334,1939],{"class":165},[159,94336,19687],{"class":1146},[159,94338,1939],{"class":165},[159,94340,19687],{"class":1146},[159,94342,1953],{"class":165},[159,94344,94345],{"class":161,"line":2293},[159,94346,1508],{"class":165},[159,94348,94349],{"class":161,"line":2306},[159,94350,590],{"emptyLinePlaceholder":589},[159,94352,94353,94355],{"class":161,"line":2330},[159,94354,12173],{"class":169},[159,94356,17070],{"class":165},[159,94358,94359,94361],{"class":161,"line":2350},[159,94360,12239],{"class":169},[159,94362,1478],{"class":165},[159,94364,94365,94367,94369,94371,94373],{"class":161,"line":2370},[159,94366,1578],{"class":1146},[159,94368,1486],{"class":165},[159,94370,4397],{"class":1146},[159,94372,1571],{"class":1142},[159,94374,1492],{"class":165},[159,94376,94377,94379,94381,94383],{"class":161,"line":2390},[159,94378,4188],{"class":1146},[159,94380,1486],{"class":165},[159,94382,19854],{"class":1146},[159,94384,1492],{"class":165},[159,94386,94387,94389,94391,94393,94395],{"class":161,"line":2410},[159,94388,1721],{"class":1146},[159,94390,1486],{"class":165},[159,94392,7678],{"class":1146},[159,94394,1571],{"class":1142},[159,94396,1492],{"class":165},[159,94398,94399,94401,94403,94405,94407,94409,94411,94413,94415,94417,94419,94421,94423],{"class":161,"line":2430},[159,94400,9018],{"class":1146},[159,94402,1486],{"class":165},[159,94404,4932],{"class":1146},[159,94406,1571],{"class":1142},[159,94408,7709],{"class":1146},[159,94410,19357],{"class":1146},[159,94412,1159],{"class":165},[159,94414,19887],{"class":1146},[159,94416,1939],{"class":165},[159,94418,19892],{"class":1146},[159,94420,1939],{"class":165},[159,94422,19892],{"class":1146},[159,94424,1953],{"class":165},[159,94426,94427,94429,94431,94433,94435],{"class":161,"line":2450},[159,94428,19903],{"class":1146},[159,94430,1486],{"class":165},[159,94432,1753],{"class":1146},[159,94434,1571],{"class":1142},[159,94436,1492],{"class":165},[159,94438,94439,94441,94443,94445,94447,94449,94451],{"class":161,"line":2471},[159,94440,8898],{"class":1146},[159,94442,1486],{"class":165},[159,94444,8903],{"class":1146},[159,94446,19922],{"class":1146},[159,94448,8906],{"class":1146},[159,94450,8909],{"class":1142},[159,94452,1492],{"class":165},[159,94454,94455],{"class":161,"line":2477},[159,94456,1508],{"class":165},[159,94458,94459],{"class":161,"line":2498},[159,94460,590],{"emptyLinePlaceholder":589},[159,94462,94463,94465,94467,94469],{"class":161,"line":2518},[159,94464,19941],{"class":169},[159,94466,17228],{"class":169},[159,94468,7969],{"class":185},[159,94470,1478],{"class":165},[159,94472,94473,94475,94477,94479,94481,94483,94485,94487,94489,94491],{"class":161,"line":2539},[159,94474,1682],{"class":1146},[159,94476,1486],{"class":165},[159,94478,19421],{"class":1146},[159,94480,1159],{"class":165},[159,94482,19682],{"class":1146},[159,94484,1939],{"class":165},[159,94486,19687],{"class":1146},[159,94488,1939],{"class":165},[159,94490,19687],{"class":1146},[159,94492,1953],{"class":165},[159,94494,94495,94497,94499,94501],{"class":161,"line":2561},[159,94496,9067],{"class":1146},[159,94498,1486],{"class":165},[159,94500,9072],{"class":1146},[159,94502,1492],{"class":165},[159,94504,94505],{"class":161,"line":2573},[159,94506,1508],{"class":165},[159,94508,94509],{"class":161,"line":2591},[159,94510,590],{"emptyLinePlaceholder":589},[159,94512,94513,94515,94517,94519,94521],{"class":161,"line":2602},[159,94514,19941],{"class":169},[159,94516,17228],{"class":169},[159,94518,19996],{"class":169},[159,94520,7885],{"class":169},[159,94522,1478],{"class":165},[159,94524,94525,94527,94529,94531],{"class":161,"line":2613},[159,94526,1818],{"class":1146},[159,94528,1486],{"class":165},[159,94530,7896],{"class":1146},[159,94532,1492],{"class":165},[159,94534,94535,94537,94539,94541,94543],{"class":161,"line":2624},[159,94536,1563],{"class":1146},[159,94538,1486],{"class":165},[159,94540,10814],{"class":1146},[159,94542,1571],{"class":1142},[159,94544,1492],{"class":165},[159,94546,94547,94549,94551,94553,94555],{"class":161,"line":2630},[159,94548,1578],{"class":1146},[159,94550,1486],{"class":165},[159,94552,4255],{"class":1146},[159,94554,1571],{"class":1142},[159,94556,1492],{"class":165},[159,94558,94559,94561,94563,94565,94567],{"class":161,"line":2636},[159,94560,4264],{"class":1146},[159,94562,1486],{"class":165},[159,94564,4255],{"class":1146},[159,94566,1571],{"class":1142},[159,94568,1492],{"class":165},[159,94570,94571,94573,94575,94577,94579],{"class":161,"line":2642},[159,94572,9120],{"class":1146},[159,94574,1486],{"class":165},[159,94576,11034],{"class":1146},[159,94578,1571],{"class":1142},[159,94580,1492],{"class":165},[159,94582,94583,94585,94587,94589],{"class":161,"line":2648},[159,94584,4322],{"class":1146},[159,94586,1486],{"class":165},[159,94588,7868],{"class":1146},[159,94590,1492],{"class":165},[159,94592,94593,94595,94597,94599],{"class":161,"line":2674},[159,94594,4188],{"class":1146},[159,94596,1486],{"class":165},[159,94598,4193],{"class":1146},[159,94600,1492],{"class":165},[159,94602,94603,94605,94607,94609],{"class":161,"line":2689},[159,94604,11019],{"class":1146},[159,94606,1486],{"class":165},[159,94608,1529],{"class":1146},[159,94610,1492],{"class":165},[159,94612,94613,94615,94617,94619],{"class":161,"line":2694},[159,94614,1682],{"class":1146},[159,94616,1486],{"class":165},[159,94618,20097],{"class":1146},[159,94620,1492],{"class":165},[159,94622,94623,94625,94627,94629,94631],{"class":161,"line":2721},[159,94624,1959],{"class":1146},[159,94626,1486],{"class":165},[159,94628,20108],{"class":1146},[159,94630,1571],{"class":1142},[159,94632,1492],{"class":165},[159,94634,94635],{"class":161,"line":2726},[159,94636,1508],{"class":165},[159,94638,94639,94641,94643],{"class":161,"line":2735},[159,94640,254],{"class":165},[159,94642,1468],{"class":169},[159,94644,173],{"class":165},[159,94646,94647,94649,94651],{"class":161,"line":2744},[159,94648,264],{"class":165},[159,94650,949],{"class":169},[159,94652,173],{"class":165},[159,94654,94655],{"class":161,"line":2753},[159,94656,590],{"emptyLinePlaceholder":589},[159,94658,94659,94661,94663],{"class":161,"line":2758},[159,94660,166],{"class":165},[159,94662,170],{"class":169},[159,94664,173],{"class":165},[159,94666,94667,94669,94671,94673,94675],{"class":161,"line":3959},[159,94668,179],{"class":165},[159,94670,37],{"class":169},[159,94672,20153],{"class":165},[159,94674,37],{"class":169},[159,94676,173],{"class":165},[159,94678,94679,94681,94683,94685,94687,94689,94691,94693,94695],{"class":161,"line":3968},[159,94680,179],{"class":165},[159,94682,13694],{"class":169},[159,94684,186],{"class":185},[159,94686,189],{"class":165},[159,94688,9707],{"class":192},[159,94690,16143],{"class":185},[159,94692,189],{"class":165},[159,94694,16148],{"class":192},[159,94696,173],{"class":165},[159,94698,94699,94701,94703,94705,94707,94709,94711,94713,94715,94717,94719,94721,94723,94725,94727],{"class":161,"line":3977},[159,94700,2056],{"class":165},[159,94702,536],{"class":169},[159,94704,539],{"class":185},[159,94706,189],{"class":165},[159,94708,9742],{"class":192},[159,94710,547],{"class":185},[159,94712,189],{"class":165},[159,94714,16170],{"class":192},[159,94716,8050],{"class":185},[159,94718,189],{"class":165},[159,94720,20202],{"class":192},[159,94722,186],{"class":185},[159,94724,189],{"class":165},[159,94726,16170],{"class":192},[159,94728,173],{"class":165},[159,94730,94731,94733,94735,94737,94739,94741,94743,94745,94747,94749,94751,94753,94755,94757,94759],{"class":161,"line":3982},[159,94732,2056],{"class":165},[159,94734,536],{"class":169},[159,94736,539],{"class":185},[159,94738,189],{"class":165},[159,94740,9742],{"class":192},[159,94742,547],{"class":185},[159,94744,189],{"class":165},[159,94746,16198],{"class":192},[159,94748,8050],{"class":185},[159,94750,189],{"class":165},[159,94752,20235],{"class":192},[159,94754,186],{"class":185},[159,94756,189],{"class":165},[159,94758,16198],{"class":192},[159,94760,173],{"class":165},[159,94762,94763,94765,94767,94769,94771,94773,94775,94777,94779,94781,94783,94785,94787,94789,94791],{"class":161,"line":6843},[159,94764,2056],{"class":165},[159,94766,536],{"class":169},[159,94768,539],{"class":185},[159,94770,189],{"class":165},[159,94772,9742],{"class":192},[159,94774,547],{"class":185},[159,94776,189],{"class":165},[159,94778,16302],{"class":192},[159,94780,8050],{"class":185},[159,94782,189],{"class":165},[159,94784,20268],{"class":192},[159,94786,186],{"class":185},[159,94788,189],{"class":165},[159,94790,16302],{"class":192},[159,94792,173],{"class":165},[159,94794,94795,94797,94799,94801,94803,94805,94807,94809,94811,94813,94815,94817],{"class":161,"line":6849},[159,94796,2056],{"class":165},[159,94798,16218],{"class":169},[159,94800,547],{"class":185},[159,94802,189],{"class":165},[159,94804,16225],{"class":192},[159,94806,555],{"class":185},[159,94808,189],{"class":165},[159,94810,552],{"class":192},[159,94812,186],{"class":185},[159,94814,189],{"class":165},[159,94816,16225],{"class":192},[159,94818,173],{"class":165},[159,94820,94821,94823,94825,94827,94829,94831,94833,94835],{"class":161,"line":6855},[159,94822,2073],{"class":165},[159,94824,16240],{"class":169},[159,94826,13720],{"class":185},[159,94828,189],{"class":165},[159,94830,16247],{"class":192},[159,94832,16250],{"class":165},[159,94834,16240],{"class":169},[159,94836,173],{"class":165},[159,94838,94839,94841,94843,94845,94847,94849,94851,94853],{"class":161,"line":6861},[159,94840,2073],{"class":165},[159,94842,16240],{"class":169},[159,94844,13720],{"class":185},[159,94846,189],{"class":165},[159,94848,16267],{"class":192},[159,94850,16270],{"class":165},[159,94852,16240],{"class":169},[159,94854,173],{"class":165},[159,94856,94857,94859,94861],{"class":161,"line":6867},[159,94858,1084],{"class":165},[159,94860,16218],{"class":169},[159,94862,173],{"class":165},[159,94864,94865,94867,94869,94871,94873,94875,94877,94879,94881,94883,94885,94887],{"class":161,"line":6873},[159,94866,2056],{"class":165},[159,94868,16218],{"class":169},[159,94870,547],{"class":185},[159,94872,189],{"class":165},[159,94874,16324],{"class":192},[159,94876,555],{"class":185},[159,94878,189],{"class":165},[159,94880,552],{"class":192},[159,94882,186],{"class":185},[159,94884,189],{"class":165},[159,94886,16324],{"class":192},[159,94888,173],{"class":165},[159,94890,94891,94893,94895,94897,94899,94901,94903,94905],{"class":161,"line":6879},[159,94892,2073],{"class":165},[159,94894,16240],{"class":169},[159,94896,13720],{"class":185},[159,94898,189],{"class":165},[159,94900,16345],{"class":192},[159,94902,16348],{"class":165},[159,94904,16240],{"class":169},[159,94906,173],{"class":165},[159,94908,94909,94911,94913,94915,94917,94919,94921,94923],{"class":161,"line":6885},[159,94910,2073],{"class":165},[159,94912,16240],{"class":169},[159,94914,13720],{"class":185},[159,94916,189],{"class":165},[159,94918,16365],{"class":192},[159,94920,16368],{"class":165},[159,94922,16240],{"class":169},[159,94924,173],{"class":165},[159,94926,94927,94929,94931,94933,94935,94937,94939,94941],{"class":161,"line":6890},[159,94928,2073],{"class":165},[159,94930,16240],{"class":169},[159,94932,13720],{"class":185},[159,94934,189],{"class":165},[159,94936,16385],{"class":192},[159,94938,16388],{"class":165},[159,94940,16240],{"class":169},[159,94942,173],{"class":165},[159,94944,94945,94947,94949,94951,94953,94955,94957,94959],{"class":161,"line":6896},[159,94946,2073],{"class":165},[159,94948,16240],{"class":169},[159,94950,13720],{"class":185},[159,94952,189],{"class":165},[159,94954,16405],{"class":192},[159,94956,16408],{"class":165},[159,94958,16240],{"class":169},[159,94960,173],{"class":165},[159,94962,94963,94965,94967,94969,94971,94973,94975,94977],{"class":161,"line":6902},[159,94964,2073],{"class":165},[159,94966,16240],{"class":169},[159,94968,13720],{"class":185},[159,94970,189],{"class":165},[159,94972,16425],{"class":192},[159,94974,16428],{"class":165},[159,94976,16240],{"class":169},[159,94978,173],{"class":165},[159,94980,94981,94983,94985],{"class":161,"line":6908},[159,94982,1084],{"class":165},[159,94984,16218],{"class":169},[159,94986,173],{"class":165},[159,94988,94989,94991,94993],{"class":161,"line":6914},[159,94990,2056],{"class":165},[159,94992,608],{"class":169},[159,94994,173],{"class":165},[159,94996,94997,94999,95001,95003,95005,95007,95009],{"class":161,"line":6920},[159,94998,2073],{"class":165},[159,95000,159],{"class":169},[159,95002,20487],{"class":165},[159,95004,159],{"class":169},[159,95006,20492],{"class":165},[159,95008,608],{"class":169},[159,95010,173],{"class":165},[159,95012,95013,95015,95017],{"class":161,"line":6926},[159,95014,254],{"class":165},[159,95016,13694],{"class":169},[159,95018,173],{"class":165},[159,95020,95021,95023,95025,95027,95029,95031,95033,95035,95037,95039,95041,95043],{"class":161,"line":6932},[159,95022,179],{"class":165},[159,95024,182],{"class":169},[159,95026,186],{"class":185},[159,95028,189],{"class":165},[159,95030,9623],{"class":192},[159,95032,20519],{"class":165},[159,95034,159],{"class":169},[159,95036,20524],{"class":165},[159,95038,159],{"class":169},[159,95040,20529],{"class":165},[159,95042,182],{"class":169},[159,95044,173],{"class":165},[159,95046,95047,95049,95051],{"class":161,"line":6938},[159,95048,179],{"class":165},[159,95050,12347],{"class":169},[159,95052,173],{"class":165},[159,95054,95055,95057,95059],{"class":161,"line":6944},[159,95056,2056],{"class":165},[159,95058,16500],{"class":169},[159,95060,173],{"class":165},[159,95062,95063,95065,95067],{"class":161,"line":6949},[159,95064,2073],{"class":165},[159,95066,12356],{"class":169},[159,95068,173],{"class":165},[159,95070,95071,95073,95075,95077,95079],{"class":161,"line":6955},[159,95072,2146],{"class":165},[159,95074,12365],{"class":169},[159,95076,20566],{"class":165},[159,95078,12365],{"class":169},[159,95080,173],{"class":165},[159,95082,95083,95085,95087,95089,95091],{"class":161,"line":6961},[159,95084,2146],{"class":165},[159,95086,12365],{"class":169},[159,95088,16532],{"class":165},[159,95090,12365],{"class":169},[159,95092,173],{"class":165},[159,95094,95095,95097,95099,95101,95103],{"class":161,"line":6967},[159,95096,2146],{"class":165},[159,95098,12365],{"class":169},[159,95100,16545],{"class":165},[159,95102,12365],{"class":169},[159,95104,173],{"class":165},[159,95106,95107,95109,95111,95113,95115],{"class":161,"line":6973},[159,95108,2146],{"class":165},[159,95110,12365],{"class":169},[159,95112,16558],{"class":165},[159,95114,12365],{"class":169},[159,95116,173],{"class":165},[159,95118,95119,95121,95123,95125,95127],{"class":161,"line":6979},[159,95120,2146],{"class":165},[159,95122,12365],{"class":169},[159,95124,16571],{"class":165},[159,95126,12365],{"class":169},[159,95128,173],{"class":165},[159,95130,95131,95133,95135,95137,95139],{"class":161,"line":6985},[159,95132,2146],{"class":165},[159,95134,12365],{"class":169},[159,95136,16584],{"class":165},[159,95138,12365],{"class":169},[159,95140,173],{"class":165},[159,95142,95143,95145,95147,95149,95151],{"class":161,"line":6991},[159,95144,2146],{"class":165},[159,95146,12365],{"class":169},[159,95148,20639],{"class":165},[159,95150,12365],{"class":169},[159,95152,173],{"class":165},[159,95154,95155,95157,95159,95161,95163],{"class":161,"line":6997},[159,95156,2146],{"class":165},[159,95158,12365],{"class":169},[159,95160,16597],{"class":165},[159,95162,12365],{"class":169},[159,95164,173],{"class":165},[159,95166,95167,95169,95171],{"class":161,"line":7003},[159,95168,2259],{"class":165},[159,95170,12356],{"class":169},[159,95172,173],{"class":165},[159,95174,95175,95177,95179],{"class":161,"line":7009},[159,95176,1084],{"class":165},[159,95178,16500],{"class":169},[159,95180,173],{"class":165},[159,95182,95183,95185,95187],{"class":161,"line":7015},[159,95184,2056],{"class":165},[159,95186,16624],{"class":169},[159,95188,173],{"class":165},[159,95190,95191],{"class":161,"line":7021},[159,95192,20684],{"class":1135},[159,95194,95195],{"class":161,"line":7026},[159,95196,20689],{"class":1135},[159,95198,95199],{"class":161,"line":7031},[159,95200,20689],{"class":1135},[159,95202,95203],{"class":161,"line":7037},[159,95204,20689],{"class":1135},[159,95206,95207],{"class":161,"line":7043},[159,95208,20689],{"class":1135},[159,95210,95211],{"class":161,"line":7049},[159,95212,20689],{"class":1135},[159,95214,95215],{"class":161,"line":7054},[159,95216,20689],{"class":1135},[159,95218,95219],{"class":161,"line":7060},[159,95220,20689],{"class":1135},[159,95222,95223],{"class":161,"line":7066},[159,95224,20718],{"class":1135},[159,95226,95227],{"class":161,"line":7072},[159,95228,20723],{"class":1135},[159,95230,95231],{"class":161,"line":7078},[159,95232,20728],{"class":1135},[159,95234,95235],{"class":161,"line":7084},[159,95236,20733],{"class":1135},[159,95238,95239,95241,95243],{"class":161,"line":7089},[159,95240,1084],{"class":165},[159,95242,16624],{"class":169},[159,95244,173],{"class":165},[159,95246,95247,95249,95251],{"class":161,"line":7095},[159,95248,254],{"class":165},[159,95250,12347],{"class":169},[159,95252,173],{"class":165},[159,95254,95255,95257,95259],{"class":161,"line":7100},[159,95256,179],{"class":165},[159,95258,228],{"class":169},[159,95260,173],{"class":165},[159,95262,95263],{"class":161,"line":7105},[159,95264,20762],{"class":1135},[159,95266,95267],{"class":161,"line":7110},[159,95268,20767],{"class":1135},[159,95270,95271],{"class":161,"line":7115},[159,95272,20772],{"class":1135},[159,95274,95275],{"class":161,"line":7120},[159,95276,20777],{"class":1135},[159,95278,95279],{"class":161,"line":7125},[159,95280,20782],{"class":1135},[159,95282,95283],{"class":161,"line":7131},[159,95284,20787],{"class":1135},[159,95286,95287],{"class":161,"line":7137},[159,95288,20792],{"class":1135},[159,95290,95291],{"class":161,"line":7143},[159,95292,20797],{"class":1135},[159,95294,95295],{"class":161,"line":7149},[159,95296,20802],{"class":1135},[159,95298,95299],{"class":161,"line":7155},[159,95300,20807],{"class":1135},[159,95302,95303],{"class":161,"line":7161},[159,95304,20812],{"class":1135},[159,95306,95307],{"class":161,"line":7167},[159,95308,20817],{"class":1135},[159,95310,95311],{"class":161,"line":7173},[159,95312,20822],{"class":1135},[159,95314,95315],{"class":161,"line":7179},[159,95316,20827],{"class":1135},[159,95318,95319],{"class":161,"line":7184},[159,95320,590],{"emptyLinePlaceholder":589},[159,95322,95323],{"class":161,"line":7189},[159,95324,20836],{"class":1135},[159,95326,95327],{"class":161,"line":7195},[159,95328,20841],{"class":1135},[159,95330,95331,95333,95335,95337],{"class":161,"line":7201},[159,95332,1143],{"class":1142},[159,95334,4603],{"class":1146},[159,95336,1150],{"class":1142},[159,95338,16884],{"class":165},[159,95340,95341,95343,95345],{"class":161,"line":7207},[159,95342,20856],{"class":165},[159,95344,5166],{"class":185},[159,95346,20861],{"class":165},[159,95348,95349],{"class":161,"line":7213},[159,95350,590],{"emptyLinePlaceholder":589},[159,95352,95353],{"class":161,"line":7219},[159,95354,20870],{"class":1135},[159,95356,95357,95359,95361],{"class":161,"line":7224},[159,95358,17167],{"class":1142},[159,95360,20877],{"class":185},[159,95362,17173],{"class":165},[159,95364,95365,95367,95369,95371,95373,95375],{"class":161,"line":7230},[159,95366,5145],{"class":1142},[159,95368,20886],{"class":1146},[159,95370,1150],{"class":1142},[159,95372,20891],{"class":1142},[159,95374,20894],{"class":185},[159,95376,5158],{"class":165},[159,95378,95379,95381,95383,95385,95387,95389,95391,95393,95395,95397,95399,95401,95403,95405,95407,95409,95411,95413],{"class":161,"line":7236},[159,95380,5145],{"class":1142},[159,95382,20903],{"class":1146},[159,95384,1150],{"class":1142},[159,95386,20908],{"class":165},[159,95388,20911],{"class":185},[159,95390,4774],{"class":165},[159,95392,166],{"class":1142},[159,95394,7664],{"class":1146},[159,95396,20920],{"class":1142},[159,95398,20923],{"class":192},[159,95400,3925],{"class":1142},[159,95402,20908],{"class":165},[159,95404,20911],{"class":185},[159,95406,4774],{"class":165},[159,95408,20934],{"class":1142},[159,95410,20908],{"class":165},[159,95412,20911],{"class":185},[159,95414,5158],{"class":165},[159,95416,95417,95419,95421,95423,95425,95427,95429,95431,95433,95435,95437,95439,95441,95443,95445,95447,95449,95451],{"class":161,"line":7242},[159,95418,5145],{"class":1142},[159,95420,20947],{"class":1146},[159,95422,1150],{"class":1142},[159,95424,20908],{"class":165},[159,95426,20954],{"class":185},[159,95428,4774],{"class":165},[159,95430,166],{"class":1142},[159,95432,7664],{"class":1146},[159,95434,20920],{"class":1142},[159,95436,20923],{"class":192},[159,95438,3925],{"class":1142},[159,95440,20908],{"class":165},[159,95442,20954],{"class":185},[159,95444,4774],{"class":165},[159,95446,20934],{"class":1142},[159,95448,20908],{"class":165},[159,95450,20954],{"class":185},[159,95452,5158],{"class":165},[159,95454,95455,95457,95459,95461,95463,95465,95467,95469,95471,95473,95475,95477,95479,95481,95483,95485,95487,95489],{"class":161,"line":7248},[159,95456,5145],{"class":1142},[159,95458,20987],{"class":1146},[159,95460,1150],{"class":1142},[159,95462,20908],{"class":165},[159,95464,20994],{"class":185},[159,95466,4774],{"class":165},[159,95468,166],{"class":1142},[159,95470,7664],{"class":1146},[159,95472,20920],{"class":1142},[159,95474,20923],{"class":192},[159,95476,3925],{"class":1142},[159,95478,20908],{"class":165},[159,95480,20994],{"class":185},[159,95482,4774],{"class":165},[159,95484,20934],{"class":1142},[159,95486,20908],{"class":165},[159,95488,20994],{"class":185},[159,95490,5158],{"class":165},[159,95492,95493,95495,95497,95499,95501,95503,95505,95507,95509,95511,95513,95515,95517,95519,95521,95523,95525,95527,95529,95531,95533,95535,95537,95539,95541,95543,95545],{"class":161,"line":7254},[159,95494,5145],{"class":1142},[159,95496,21027],{"class":1146},[159,95498,1150],{"class":1142},[159,95500,9946],{"class":192},[159,95502,21034],{"class":165},[159,95504,9952],{"class":192},[159,95506,21039],{"class":185},[159,95508,21042],{"class":192},[159,95510,21045],{"class":192},[159,95512,21034],{"class":165},[159,95514,9952],{"class":192},[159,95516,21052],{"class":185},[159,95518,4774],{"class":192},[159,95520,2704],{"class":1142},[159,95522,2707],{"class":1146},[159,95524,21045],{"class":192},[159,95526,21034],{"class":165},[159,95528,9952],{"class":192},[159,95530,21067],{"class":185},[159,95532,21042],{"class":192},[159,95534,21072],{"class":192},[159,95536,21075],{"class":165},[159,95538,21078],{"class":192},[159,95540,21081],{"class":165},[159,95542,21078],{"class":192},[159,95544,8909],{"class":165},[159,95546,21088],{"class":192},[159,95548,95549,95551],{"class":161,"line":7260},[159,95550,21093],{"class":1142},[159,95552,21096],{"class":165},[159,95554,95555],{"class":161,"line":7265},[159,95556,1508],{"class":165},[159,95558,95559],{"class":161,"line":7270},[159,95560,21105],{"class":1135},[159,95562,95563,95565,95567,95569,95571,95573,95575,95577],{"class":161,"line":7276},[159,95564,1143],{"class":1142},[159,95566,16826],{"class":1146},[159,95568,1150],{"class":1142},[159,95570,1153],{"class":165},[159,95572,1156],{"class":185},[159,95574,1159],{"class":165},[159,95576,16837],{"class":192},[159,95578,1165],{"class":165},[159,95580,95581,95583,95585],{"class":161,"line":7281},[159,95582,17167],{"class":1142},[159,95584,17170],{"class":185},[159,95586,17173],{"class":165},[159,95588,95589],{"class":161,"line":7287},[159,95590,21136],{"class":1135},[159,95592,95593],{"class":161,"line":7292},[159,95594,21141],{"class":1135},[159,95596,95597,95599,95601,95603,95605,95607,95609,95611,95613,95615,95617,95619],{"class":161,"line":7298},[159,95598,5145],{"class":1142},[159,95600,21148],{"class":1146},[159,95602,1150],{"class":1142},[159,95604,4780],{"class":165},[159,95606,21155],{"class":185},[159,95608,1159],{"class":165},[159,95610,1215],{"class":1142},[159,95612,11680],{"class":165},[159,95614,21164],{"class":8765},[159,95616,1939],{"class":165},[159,95618,21169],{"class":8765},[159,95620,1262],{"class":165},[159,95622,95623,95625],{"class":161,"line":7304},[159,95624,21176],{"class":1142},[159,95626,17252],{"class":192},[159,95628,95629],{"class":161,"line":7310},[159,95630,21183],{"class":192},[159,95632,95633,95635,95637,95639,95641],{"class":161,"line":7316},[159,95634,17257],{"class":192},[159,95636,21164],{"class":165},[159,95638,9952],{"class":192},[159,95640,21194],{"class":165},[159,95642,17274],{"class":192},[159,95644,95645,95647,95649,95651,95653],{"class":161,"line":7322},[159,95646,17257],{"class":192},[159,95648,21164],{"class":165},[159,95650,9952],{"class":192},[159,95652,17290],{"class":165},[159,95654,17274],{"class":192},[159,95656,95657,95659,95661,95663,95665],{"class":161,"line":7328},[159,95658,17257],{"class":192},[159,95660,21164],{"class":165},[159,95662,9952],{"class":192},[159,95664,17307],{"class":165},[159,95666,17274],{"class":192},[159,95668,95669,95671,95673,95675,95677],{"class":161,"line":7333},[159,95670,17257],{"class":192},[159,95672,21164],{"class":165},[159,95674,9952],{"class":192},[159,95676,17324],{"class":165},[159,95678,17274],{"class":192},[159,95680,95681,95683,95685,95687,95689],{"class":161,"line":7342},[159,95682,17257],{"class":192},[159,95684,21164],{"class":165},[159,95686,9952],{"class":192},[159,95688,17341],{"class":165},[159,95690,17274],{"class":192},[159,95692,95693,95695,95697,95699,95701],{"class":161,"line":7351},[159,95694,17257],{"class":192},[159,95696,21164],{"class":165},[159,95698,9952],{"class":192},[159,95700,17358],{"class":165},[159,95702,17274],{"class":192},[159,95704,95705,95707,95709,95711,95713],{"class":161,"line":7356},[159,95706,17257],{"class":192},[159,95708,21164],{"class":165},[159,95710,9952],{"class":192},[159,95712,21267],{"class":165},[159,95714,17274],{"class":192},[159,95716,95717],{"class":161,"line":21272},[159,95718,20718],{"class":192},[159,95720,95721,95723,95725],{"class":161,"line":21277},[159,95722,21280],{"class":192},[159,95724,21169],{"class":165},[159,95726,21285],{"class":192},[159,95728,95729],{"class":161,"line":21288},[159,95730,20728],{"class":192},[159,95732,95733],{"class":161,"line":21293},[159,95734,21296],{"class":192},[159,95736,95737],{"class":161,"line":21299},[159,95738,21302],{"class":192},[159,95740,95741],{"class":161,"line":21305},[159,95742,11872],{"class":165},[159,95744,95745,95747,95749],{"class":161,"line":21310},[159,95746,5163],{"class":165},[159,95748,5166],{"class":185},[159,95750,21317],{"class":165},[159,95752,95753],{"class":161,"line":21320},[159,95754,590],{"emptyLinePlaceholder":589},[159,95756,95757],{"class":161,"line":21325},[159,95758,21328],{"class":1135},[159,95760,95761],{"class":161,"line":21331},[159,95762,21334],{"class":1135},[159,95764,95765,95767,95769,95771,95773,95775,95777],{"class":161,"line":21337},[159,95766,17183],{"class":165},[159,95768,189],{"class":1142},[159,95770,21344],{"class":165},[159,95772,21347],{"class":185},[159,95774,1159],{"class":165},[159,95776,21352],{"class":192},[159,95778,1165],{"class":165},[159,95780,95781],{"class":161,"line":21357},[159,95782,21360],{"class":1135},[159,95784,95785,95787,95789,95791,95793,95795,95797,95799],{"class":161,"line":21363},[159,95786,2651],{"class":165},[159,95788,1156],{"class":185},[159,95790,1159],{"class":165},[159,95792,21372],{"class":192},[159,95794,21375],{"class":165},[159,95796,189],{"class":1142},[159,95798,4780],{"class":165},[159,95800,2718],{"class":1146},[159,95802,95803],{"class":161,"line":21384},[159,95804,1508],{"class":165},[159,95806,95807],{"class":161,"line":21389},[159,95808,21392],{"class":1135},[159,95810,95811],{"class":161,"line":21395},[159,95812,590],{"emptyLinePlaceholder":589},[159,95814,95815],{"class":161,"line":21400},[159,95816,21403],{"class":1135},[159,95818,95819,95821,95823,95825,95827,95829,95831,95833],{"class":161,"line":21406},[159,95820,1143],{"class":1142},[159,95822,16901],{"class":1146},[159,95824,1150],{"class":1142},[159,95826,1153],{"class":165},[159,95828,1156],{"class":185},[159,95830,1159],{"class":165},[159,95832,16912],{"class":192},[159,95834,1165],{"class":165},[159,95836,95837,95839,95841,95843,95845,95847,95849,95851],{"class":161,"line":21425},[159,95838,1143],{"class":1142},[159,95840,16726],{"class":1146},[159,95842,1150],{"class":1142},[159,95844,1153],{"class":165},[159,95846,1156],{"class":185},[159,95848,1159],{"class":165},[159,95850,16737],{"class":192},[159,95852,1165],{"class":165},[159,95854,95855,95857,95859,95861,95863,95865,95867,95869],{"class":161,"line":21444},[159,95856,1143],{"class":1142},[159,95858,16746],{"class":1146},[159,95860,1150],{"class":1142},[159,95862,1153],{"class":165},[159,95864,1156],{"class":185},[159,95866,1159],{"class":165},[159,95868,16757],{"class":192},[159,95870,1165],{"class":165},[159,95872,95873,95875,95877,95879,95881,95883,95885,95887],{"class":161,"line":21463},[159,95874,1143],{"class":1142},[159,95876,16786],{"class":1146},[159,95878,1150],{"class":1142},[159,95880,1153],{"class":165},[159,95882,1156],{"class":185},[159,95884,1159],{"class":165},[159,95886,16797],{"class":192},[159,95888,1165],{"class":165},[159,95890,95891,95893,95895,95897,95899,95901,95903,95905],{"class":161,"line":21482},[159,95892,1143],{"class":1142},[159,95894,16766],{"class":1146},[159,95896,1150],{"class":1142},[159,95898,1153],{"class":165},[159,95900,1156],{"class":185},[159,95902,1159],{"class":165},[159,95904,16777],{"class":192},[159,95906,1165],{"class":165},[159,95908,95909,95911,95913,95915,95917,95919,95921,95923],{"class":161,"line":21501},[159,95910,1143],{"class":1142},[159,95912,16806],{"class":1146},[159,95914,1150],{"class":1142},[159,95916,1153],{"class":165},[159,95918,1156],{"class":185},[159,95920,1159],{"class":165},[159,95922,16817],{"class":192},[159,95924,1165],{"class":165},[159,95926,95927],{"class":161,"line":21520},[159,95928,590],{"emptyLinePlaceholder":589},[159,95930,95931],{"class":161,"line":21525},[159,95932,21528],{"class":1135},[159,95934,95935,95937,95939,95941,95943,95945,95947,95949,95951],{"class":161,"line":21531},[159,95936,16919],{"class":165},[159,95938,4724],{"class":185},[159,95940,1159],{"class":165},[159,95942,16926],{"class":192},[159,95944,1939],{"class":165},[159,95946,1215],{"class":1142},[159,95948,11680],{"class":165},[159,95950,14038],{"class":8765},[159,95952,1262],{"class":165},[159,95954,95955],{"class":161,"line":21552},[159,95956,21555],{"class":1135},[159,95958,95959,95961,95963],{"class":161,"line":21558},[159,95960,16946],{"class":165},[159,95962,16949],{"class":185},[159,95964,5158],{"class":165},[159,95966,95967],{"class":161,"line":21567},[159,95968,21570],{"class":1135},[159,95970,95971],{"class":161,"line":21573},[159,95972,21576],{"class":1135},[159,95974,95975],{"class":161,"line":21579},[159,95976,21582],{"class":1135},[159,95978,95979,95981,95983,95985,95987,95989,95991,95993,95995,95997],{"class":161,"line":21585},[159,95980,1250],{"class":1142},[159,95982,11680],{"class":165},[159,95984,18314],{"class":1142},[159,95986,21594],{"class":165},[159,95988,18451],{"class":1142},[159,95990,21599],{"class":1142},[159,95992,21602],{"class":165},[159,95994,18451],{"class":1142},[159,95996,21599],{"class":1142},[159,95998,21609],{"class":165},[159,96000,96001,96003,96005,96007,96009],{"class":161,"line":21612},[159,96002,21176],{"class":1142},[159,96004,17021],{"class":185},[159,96006,1159],{"class":165},[159,96008,17026],{"class":192},[159,96010,1165],{"class":165},[159,96012,96013],{"class":161,"line":21625},[159,96014,1308],{"class":165},[159,96016,96017,96019,96021],{"class":161,"line":21630},[159,96018,4923],{"class":165},[159,96020,17116],{"class":185},[159,96022,21637],{"class":165},[159,96024,96025],{"class":161,"line":21640},[159,96026,21643],{"class":1135},[159,96028,96029],{"class":161,"line":21646},[159,96030,21649],{"class":1135},[159,96032,96033],{"class":161,"line":21652},[159,96034,21655],{"class":1135},[159,96036,96037],{"class":161,"line":21658},[159,96038,21661],{"class":1135},[159,96040,96041],{"class":161,"line":21664},[159,96042,590],{"emptyLinePlaceholder":589},[159,96044,96045],{"class":161,"line":21669},[159,96046,21672],{"class":1135},[159,96048,96049],{"class":161,"line":21675},[159,96050,21678],{"class":1135},[159,96052,96053],{"class":161,"line":21681},[159,96054,21684],{"class":1135},[159,96056,96057],{"class":161,"line":21687},[159,96058,21690],{"class":1135},[159,96060,96061,96063,96065,96067,96069,96071,96073,96075,96077,96079,96081,96083,96085],{"class":161,"line":21693},[159,96062,21696],{"class":165},[159,96064,3828],{"class":1146},[159,96066,20920],{"class":1142},[159,96068,21703],{"class":165},[159,96070,3828],{"class":1146},[159,96072,21708],{"class":1142},[159,96074,2707],{"class":1146},[159,96076,21713],{"class":165},[159,96078,2704],{"class":1142},[159,96080,2707],{"class":1146},[159,96082,21720],{"class":1142},[159,96084,2707],{"class":1146},[159,96086,17070],{"class":165},[159,96088,96089],{"class":161,"line":21727},[159,96090,17075],{"class":165},[159,96092,96093],{"class":161,"line":21732},[159,96094,17080],{"class":165},[159,96096,96097],{"class":161,"line":21737},[159,96098,17090],{"class":165},[159,96100,96101],{"class":161,"line":21742},[159,96102,17085],{"class":165},[159,96104,96105],{"class":161,"line":21747},[159,96106,21750],{"class":165},[159,96108,96109],{"class":161,"line":21753},[159,96110,21756],{"class":1135},[159,96112,96113],{"class":161,"line":21759},[159,96114,21762],{"class":1135},[159,96116,96117,96119,96121],{"class":161,"line":21765},[159,96118,21768],{"class":165},[159,96120,21771],{"class":185},[159,96122,5158],{"class":165},[159,96124,96125],{"class":161,"line":21776},[159,96126,11872],{"class":165},[159,96128,96129],{"class":161,"line":21781},[159,96130,21784],{"class":1135},[159,96132,96133,96135],{"class":161,"line":21787},[159,96134,17151],{"class":185},[159,96136,5158],{"class":165},[159,96138,96139,96141,96143,96145,96147],{"class":161,"line":21794},[159,96140,17134],{"class":1146},[159,96142,9952],{"class":165},[159,96144,17139],{"class":185},[159,96146,4774],{"class":165},[159,96148,21805],{"class":1135},[159,96150,96151],{"class":161,"line":21808},[159,96152,21811],{"class":1135},[159,96154,96155,96157,96159,96161,96163,96165,96167,96169,96171],{"class":161,"line":21814},[159,96156,21817],{"class":165},[159,96158,18749],{"class":185},[159,96160,1159],{"class":165},[159,96162,21824],{"class":192},[159,96164,1939],{"class":165},[159,96166,18759],{"class":1146},[159,96168,9952],{"class":165},[159,96170,18764],{"class":185},[159,96172,21835],{"class":165},[159,96174,96175],{"class":161,"line":21838},[159,96176,4863],{"class":165},[159,96178,96179],{"class":161,"line":21843},[159,96180,590],{"emptyLinePlaceholder":589},[159,96182,96183],{"class":161,"line":21848},[159,96184,21851],{"class":1135},[159,96186,96187],{"class":161,"line":21854},[159,96188,21857],{"class":1135},[159,96190,96191,96193,96195,96197,96199,96201,96203,96205,96207],{"class":161,"line":21860},[159,96192,17427],{"class":165},[159,96194,4724],{"class":185},[159,96196,1159],{"class":165},[159,96198,4729],{"class":192},[159,96200,1939],{"class":165},[159,96202,1215],{"class":1142},[159,96204,11680],{"class":165},[159,96206,14038],{"class":8765},[159,96208,1262],{"class":165},[159,96210,96211],{"class":161,"line":21881},[159,96212,21884],{"class":1135},[159,96214,96215,96217,96219,96221,96223],{"class":161,"line":21887},[159,96216,1250],{"class":1142},[159,96218,14104],{"class":165},[159,96220,1256],{"class":1142},[159,96222,15326],{"class":192},[159,96224,1262],{"class":165},[159,96226,96227],{"class":161,"line":21900},[159,96228,21903],{"class":1135},[159,96230,96231],{"class":161,"line":21906},[159,96232,21909],{"class":1135},[159,96234,96235],{"class":161,"line":21912},[159,96236,21915],{"class":1135},[159,96238,96239],{"class":161,"line":21918},[159,96240,21921],{"class":1135},[159,96242,96243],{"class":161,"line":21924},[159,96244,590],{"emptyLinePlaceholder":589},[159,96246,96247],{"class":161,"line":21929},[159,96248,21932],{"class":1135},[159,96250,96251],{"class":161,"line":21935},[159,96252,21938],{"class":1135},[159,96254,96255],{"class":161,"line":21941},[159,96256,21944],{"class":1135},[159,96258,96259,96261,96263,96265,96267,96269],{"class":161,"line":21947},[159,96260,17003],{"class":1142},[159,96262,11680],{"class":165},[159,96264,21954],{"class":185},[159,96266,1159],{"class":165},[159,96268,21959],{"class":192},[159,96270,21962],{"class":165},[159,96272,96273,96275,96277,96279,96281],{"class":161,"line":21965},[159,96274,21968],{"class":165},[159,96276,4926],{"class":185},[159,96278,17480],{"class":165},[159,96280,4932],{"class":1146},[159,96282,1165],{"class":165},[159,96284,96285],{"class":161,"line":21979},[159,96286,21982],{"class":1135},[159,96288,96289,96291],{"class":161,"line":21985},[159,96290,21988],{"class":185},[159,96292,5158],{"class":165},[159,96294,96295],{"class":161,"line":21993},[159,96296,21996],{"class":1135},[159,96298,96299,96301,96303,96305,96307,96309,96311,96313,96315],{"class":161,"line":21999},[159,96300,22002],{"class":165},[159,96302,18749],{"class":185},[159,96304,1159],{"class":165},[159,96306,21824],{"class":192},[159,96308,1939],{"class":165},[159,96310,18759],{"class":1146},[159,96312,9952],{"class":165},[159,96314,18764],{"class":185},[159,96316,21835],{"class":165},[159,96318,96319],{"class":161,"line":22021},[159,96320,7530],{"class":165},[159,96322,96323],{"class":161,"line":22026},[159,96324,1308],{"class":165},[159,96326,96327],{"class":161,"line":22031},[159,96328,590],{"emptyLinePlaceholder":589},[159,96330,96331],{"class":161,"line":22036},[159,96332,4863],{"class":165},[159,96334,96335],{"class":161,"line":22041},[159,96336,590],{"emptyLinePlaceholder":589},[159,96338,96339,96341,96343],{"class":161,"line":22046},[159,96340,254],{"class":165},[159,96342,228],{"class":169},[159,96344,173],{"class":165},[159,96346,96347,96349,96351],{"class":161,"line":22055},[159,96348,264],{"class":165},[159,96350,170],{"class":169},[159,96352,173],{"class":165},[159,96354,96355],{"class":161,"line":22064},[159,96356,590],{"emptyLinePlaceholder":589},[159,96358,96359,96361,96363],{"class":161,"line":22069},[159,96360,264],{"class":165},[159,96362,522],{"class":169},[159,96364,173],{"class":165},[37,96366,22079],{"id":22078},[14,96368,22082],{},[14,96370,22085],{},[14,96372,22088],{},[103,96374,96375,96379,96383],{},[106,96376,22093,96377,22097],{},[61,96378,22096],{},[106,96380,22100,96381,22097],{},[61,96382,22103],{},[106,96384,22106,96385,22097],{},[61,96386,22109],{},[42,96388,22113],{"id":22112},[14,96390,22116],{},[134,96392,96393,96395],{},[106,96394,22121],{},[106,96396,22124],{},[14,96398,22127],{},[14,96400,96401],{},[23,96402],{"alt":25,"src":22132},[14,96404,22135],{},[14,96406,22138],{},[14,96408,96409],{},[23,96410],{"alt":25,"src":22143},[14,96412,96413],{},[23,96414],{"alt":25,"src":22148},[42,96416,22152],{"id":22151},[134,96418,96419,96421,96423,96425,96430],{},[106,96420,22157],{},[106,96422,22160],{},[106,96424,22163],{},[106,96426,22166,96427],{},[8085,96428,22169],{"href":22169,"rel":96429},[15923],[106,96431,22173],{},[326,96433,22177],{"id":22176},[14,96435,96436],{},[23,96437],{"alt":25,"src":22182},[14,96439,22185],{},[14,96441,22188],{},[14,96443,22191],{},[14,96445,22194],{},[326,96447,22198],{"id":22197},[14,96449,96450],{},[23,96451],{"alt":25,"src":22203},[14,96453,22206],{},[326,96455,22210],{"id":22209},[14,96457,96458],{},[23,96459],{"alt":25,"src":22215},[14,96461,22218],{},[14,96463,96464],{},[23,96465],{"alt":25,"src":22223},[14,96467,22226],{},[14,96469,96470],{},[23,96471],{"alt":25,"src":22231},[14,96473,22234],{},[14,96475,96476],{},[23,96477],{"alt":25,"src":22239},[151,96479,96480],{"className":520,"code":22242,"language":522,"meta":25,"style":25},[49,96481,96482,96492,96506,96510,96518,96532,96552,96564,96572,96576,96584,96592,96596,96622,96648,96674,96678,96682,96710,96740,96744,96748,96778,96808,96838,96842,96846,96876,96906,96936,96940,96944,96974,97004,97034,97064,97068,97072,97102,97106,97110,97140,97170,97174,97178,97208,97238,97268,97272,97276,97306,97336,97366,97392,97422,97452,97482,97512,97542,97572,97602,97610,97618,97622],{"__ignoreMap":25},[159,96483,96484,96486,96488,96490],{"class":161,"line":162},[159,96485,914],{"class":165},[159,96487,917],{"class":169},[159,96489,920],{"class":185},[159,96491,173],{"class":165},[159,96493,96494,96496,96498,96500,96502,96504],{"class":161,"line":176},[159,96495,166],{"class":165},[159,96497,522],{"class":169},[159,96499,931],{"class":185},[159,96501,189],{"class":165},[159,96503,936],{"class":192},[159,96505,173],{"class":165},[159,96507,96508],{"class":161,"line":203},[159,96509,590],{"emptyLinePlaceholder":589},[159,96511,96512,96514,96516],{"class":161,"line":223},[159,96513,166],{"class":165},[159,96515,949],{"class":169},[159,96517,173],{"class":165},[159,96519,96520,96522,96524,96526,96528,96530],{"class":161,"line":233},[159,96521,179],{"class":165},[159,96523,958],{"class":169},[159,96525,961],{"class":185},[159,96527,189],{"class":165},[159,96529,966],{"class":192},[159,96531,173],{"class":165},[159,96533,96534,96536,96538,96540,96542,96544,96546,96548,96550],{"class":161,"line":239},[159,96535,179],{"class":165},[159,96537,958],{"class":169},[159,96539,547],{"class":185},[159,96541,189],{"class":165},[159,96543,981],{"class":192},[159,96545,984],{"class":185},[159,96547,189],{"class":165},[159,96549,989],{"class":192},[159,96551,173],{"class":165},[159,96553,96554,96556,96558,96560,96562],{"class":161,"line":245},[159,96555,179],{"class":165},[159,96557,998],{"class":169},[159,96559,1001],{"class":165},[159,96561,998],{"class":169},[159,96563,173],{"class":165},[159,96565,96566,96568,96570],{"class":161,"line":251},[159,96567,264],{"class":165},[159,96569,949],{"class":169},[159,96571,173],{"class":165},[159,96573,96574],{"class":161,"line":261},[159,96575,590],{"emptyLinePlaceholder":589},[159,96577,96578,96580,96582],{"class":161,"line":603},[159,96579,166],{"class":165},[159,96581,170],{"class":169},[159,96583,173],{"class":165},[159,96585,96586,96588,96590],{"class":161,"line":621},[159,96587,179],{"class":165},[159,96589,228],{"class":169},[159,96591,173],{"class":165},[159,96593,96594],{"class":161,"line":634},[159,96595,22359],{"class":1135},[159,96597,96598,96600,96602,96604,96606,96608,96610,96612,96614,96616,96618,96620],{"class":161,"line":640},[159,96599,20856],{"class":165},[159,96601,5166],{"class":185},[159,96603,1159],{"class":165},[159,96605,13083],{"class":192},[159,96607,22372],{"class":18361},[159,96609,13083],{"class":192},[159,96611,9952],{"class":165},[159,96613,22379],{"class":185},[159,96615,1159],{"class":165},[159,96617,22384],{"class":192},[159,96619,22387],{"class":165},[159,96621,22390],{"class":1135},[159,96623,96624,96626,96628,96630,96632,96634,96636,96638,96640,96642,96644,96646],{"class":161,"line":1075},[159,96625,20856],{"class":165},[159,96627,5166],{"class":185},[159,96629,1159],{"class":165},[159,96631,13083],{"class":192},[159,96633,22372],{"class":18361},[159,96635,13083],{"class":192},[159,96637,9952],{"class":165},[159,96639,22379],{"class":185},[159,96641,1159],{"class":165},[159,96643,22413],{"class":192},[159,96645,22387],{"class":165},[159,96647,22390],{"class":1135},[159,96649,96650,96652,96654,96656,96658,96660,96662,96664,96666,96668,96670,96672],{"class":161,"line":1081},[159,96651,20856],{"class":165},[159,96653,5166],{"class":185},[159,96655,1159],{"class":165},[159,96657,13083],{"class":192},[159,96659,22372],{"class":18361},[159,96661,13083],{"class":192},[159,96663,9952],{"class":165},[159,96665,22379],{"class":185},[159,96667,1159],{"class":165},[159,96669,22440],{"class":192},[159,96671,22443],{"class":165},[159,96673,22390],{"class":1135},[159,96675,96676],{"class":161,"line":1091},[159,96677,590],{"emptyLinePlaceholder":589},[159,96679,96680],{"class":161,"line":1100},[159,96681,22454],{"class":1135},[159,96683,96684,96686,96688,96690,96692,96694,96696,96698,96700,96702,96704,96706,96708],{"class":161,"line":1123},[159,96685,20856],{"class":165},[159,96687,5166],{"class":185},[159,96689,1159],{"class":165},[159,96691,13083],{"class":192},[159,96693,22467],{"class":1142},[159,96695,22372],{"class":18361},[159,96697,13083],{"class":192},[159,96699,9952],{"class":165},[159,96701,22379],{"class":185},[159,96703,1159],{"class":165},[159,96705,22384],{"class":192},[159,96707,22387],{"class":165},[159,96709,22390],{"class":1135},[159,96711,96712,96714,96716,96718,96720,96722,96724,96726,96728,96730,96732,96734,96736,96738],{"class":161,"line":1132},[159,96713,20856],{"class":165},[159,96715,5166],{"class":185},[159,96717,1159],{"class":165},[159,96719,13083],{"class":192},[159,96721,22467],{"class":1142},[159,96723,22372],{"class":18361},[159,96725,22500],{"class":1142},[159,96727,13083],{"class":192},[159,96729,9952],{"class":165},[159,96731,22379],{"class":185},[159,96733,1159],{"class":165},[159,96735,22413],{"class":192},[159,96737,22387],{"class":165},[159,96739,22515],{"class":1135},[159,96741,96742],{"class":161,"line":1139},[159,96743,22520],{"class":1135},[159,96745,96746],{"class":161,"line":1168},[159,96747,22525],{"class":1135},[159,96749,96750,96752,96754,96756,96758,96760,96762,96764,96766,96768,96770,96772,96774,96776],{"class":161,"line":1174},[159,96751,20856],{"class":165},[159,96753,5166],{"class":185},[159,96755,1159],{"class":165},[159,96757,13083],{"class":192},[159,96759,22467],{"class":1142},[159,96761,22372],{"class":18361},[159,96763,22542],{"class":1142},[159,96765,13083],{"class":192},[159,96767,9952],{"class":165},[159,96769,22379],{"class":185},[159,96771,1159],{"class":165},[159,96773,22413],{"class":192},[159,96775,22387],{"class":165},[159,96777,22390],{"class":1135},[159,96779,96780,96782,96784,96786,96788,96790,96792,96794,96796,96798,96800,96802,96804,96806],{"class":161,"line":1180},[159,96781,20856],{"class":165},[159,96783,5166],{"class":185},[159,96785,1159],{"class":165},[159,96787,13083],{"class":192},[159,96789,22467],{"class":1142},[159,96791,22372],{"class":18361},[159,96793,22542],{"class":1142},[159,96795,13083],{"class":192},[159,96797,9952],{"class":165},[159,96799,22379],{"class":185},[159,96801,1159],{"class":165},[159,96803,22583],{"class":192},[159,96805,22387],{"class":165},[159,96807,22588],{"class":1135},[159,96809,96810,96812,96814,96816,96818,96820,96822,96824,96826,96828,96830,96832,96834,96836],{"class":161,"line":1194},[159,96811,20856],{"class":165},[159,96813,5166],{"class":185},[159,96815,1159],{"class":165},[159,96817,13083],{"class":192},[159,96819,22467],{"class":1142},[159,96821,22372],{"class":18361},[159,96823,22542],{"class":1142},[159,96825,13083],{"class":192},[159,96827,9952],{"class":165},[159,96829,22379],{"class":185},[159,96831,1159],{"class":165},[159,96833,22615],{"class":192},[159,96835,22443],{"class":165},[159,96837,22620],{"class":1135},[159,96839,96840],{"class":161,"line":1200},[159,96841,590],{"emptyLinePlaceholder":589},[159,96843,96844],{"class":161,"line":1221},[159,96845,22629],{"class":1135},[159,96847,96848,96850,96852,96854,96856,96858,96860,96862,96864,96866,96868,96870,96872,96874],{"class":161,"line":1230},[159,96849,20856],{"class":165},[159,96851,5166],{"class":185},[159,96853,1159],{"class":165},[159,96855,13083],{"class":192},[159,96857,22467],{"class":1142},[159,96859,22372],{"class":18361},[159,96861,22646],{"class":1142},[159,96863,13083],{"class":192},[159,96865,9952],{"class":165},[159,96867,22379],{"class":185},[159,96869,1159],{"class":165},[159,96871,22413],{"class":192},[159,96873,22387],{"class":165},[159,96875,22390],{"class":1135},[159,96877,96878,96880,96882,96884,96886,96888,96890,96892,96894,96896,96898,96900,96902,96904],{"class":161,"line":1247},[159,96879,20856],{"class":165},[159,96881,5166],{"class":185},[159,96883,1159],{"class":165},[159,96885,13083],{"class":192},[159,96887,22467],{"class":1142},[159,96889,22372],{"class":18361},[159,96891,22646],{"class":1142},[159,96893,13083],{"class":192},[159,96895,9952],{"class":165},[159,96897,22379],{"class":185},[159,96899,1159],{"class":165},[159,96901,22583],{"class":192},[159,96903,22387],{"class":165},[159,96905,22588],{"class":1135},[159,96907,96908,96910,96912,96914,96916,96918,96920,96922,96924,96926,96928,96930,96932,96934],{"class":161,"line":1265},[159,96909,20856],{"class":165},[159,96911,5166],{"class":185},[159,96913,1159],{"class":165},[159,96915,13083],{"class":192},[159,96917,22467],{"class":1142},[159,96919,22372],{"class":18361},[159,96921,22646],{"class":1142},[159,96923,13083],{"class":192},[159,96925,9952],{"class":165},[159,96927,22379],{"class":185},[159,96929,1159],{"class":165},[159,96931,22615],{"class":192},[159,96933,22443],{"class":165},[159,96935,22515],{"class":1135},[159,96937,96938],{"class":161,"line":1277},[159,96939,590],{"emptyLinePlaceholder":589},[159,96941,96942],{"class":161,"line":1283},[159,96943,22729],{"class":1135},[159,96945,96946,96948,96950,96952,96954,96956,96958,96960,96962,96964,96966,96968,96970,96972],{"class":161,"line":1294},[159,96947,20856],{"class":165},[159,96949,5166],{"class":185},[159,96951,1159],{"class":165},[159,96953,13083],{"class":192},[159,96955,22467],{"class":1142},[159,96957,22744],{"class":18361},[159,96959,22500],{"class":1142},[159,96961,13083],{"class":192},[159,96963,9952],{"class":165},[159,96965,22379],{"class":185},[159,96967,1159],{"class":165},[159,96969,21352],{"class":192},[159,96971,22443],{"class":165},[159,96973,22390],{"class":1135},[159,96975,96976,96978,96980,96982,96984,96986,96988,96990,96992,96994,96996,96998,97000,97002],{"class":161,"line":1305},[159,96977,20856],{"class":165},[159,96979,5166],{"class":185},[159,96981,1159],{"class":165},[159,96983,13083],{"class":192},[159,96985,22467],{"class":1142},[159,96987,22372],{"class":18361},[159,96989,22777],{"class":1142},[159,96991,13083],{"class":192},[159,96993,9952],{"class":165},[159,96995,22379],{"class":185},[159,96997,1159],{"class":165},[159,96999,22413],{"class":192},[159,97001,22387],{"class":165},[159,97003,22515],{"class":1135},[159,97005,97006,97008,97010,97012,97014,97016,97018,97020,97022,97024,97026,97028,97030,97032],{"class":161,"line":1311},[159,97007,20856],{"class":165},[159,97009,5166],{"class":185},[159,97011,1159],{"class":165},[159,97013,13083],{"class":192},[159,97015,22467],{"class":1142},[159,97017,22372],{"class":18361},[159,97019,22777],{"class":1142},[159,97021,13083],{"class":192},[159,97023,9952],{"class":165},[159,97025,22379],{"class":185},[159,97027,1159],{"class":165},[159,97029,22583],{"class":192},[159,97031,22387],{"class":165},[159,97033,22588],{"class":1135},[159,97035,97036,97038,97040,97042,97044,97046,97048,97050,97052,97054,97056,97058,97060,97062],{"class":161,"line":1322},[159,97037,20856],{"class":165},[159,97039,5166],{"class":185},[159,97041,1159],{"class":165},[159,97043,13083],{"class":192},[159,97045,22467],{"class":1142},[159,97047,22372],{"class":18361},[159,97049,22777],{"class":1142},[159,97051,13083],{"class":192},[159,97053,9952],{"class":165},[159,97055,22379],{"class":185},[159,97057,1159],{"class":165},[159,97059,22615],{"class":192},[159,97061,22387],{"class":165},[159,97063,22515],{"class":1135},[159,97065,97066],{"class":161,"line":1327},[159,97067,590],{"emptyLinePlaceholder":589},[159,97069,97070],{"class":161,"line":1336},[159,97071,22860],{"class":1135},[159,97073,97074,97076,97078,97080,97082,97084,97086,97088,97090,97092,97094,97096,97098,97100],{"class":161,"line":1345},[159,97075,20856],{"class":165},[159,97077,5166],{"class":185},[159,97079,1159],{"class":165},[159,97081,13083],{"class":192},[159,97083,22467],{"class":1142},[159,97085,22372],{"class":18361},[159,97087,22877],{"class":1142},[159,97089,13083],{"class":192},[159,97091,9952],{"class":165},[159,97093,22379],{"class":185},[159,97095,1159],{"class":165},[159,97097,22888],{"class":192},[159,97099,22891],{"class":165},[159,97101,22390],{"class":1135},[159,97103,97104],{"class":161,"line":1350},[159,97105,590],{"emptyLinePlaceholder":589},[159,97107,97108],{"class":161,"line":1764},[159,97109,22902],{"class":1135},[159,97111,97112,97114,97116,97118,97120,97122,97124,97126,97128,97130,97132,97134,97136,97138],{"class":161,"line":1769},[159,97113,20856],{"class":165},[159,97115,5166],{"class":185},[159,97117,1159],{"class":165},[159,97119,13083],{"class":192},[159,97121,22467],{"class":1142},[159,97123,22372],{"class":18361},[159,97125,22919],{"class":1142},[159,97127,13083],{"class":192},[159,97129,9952],{"class":165},[159,97131,22379],{"class":185},[159,97133,1159],{"class":165},[159,97135,22888],{"class":192},[159,97137,22891],{"class":165},[159,97139,22390],{"class":1135},[159,97141,97142,97144,97146,97148,97150,97152,97154,97156,97158,97160,97162,97164,97166,97168],{"class":161,"line":1777},[159,97143,20856],{"class":165},[159,97145,5166],{"class":185},[159,97147,1159],{"class":165},[159,97149,13083],{"class":192},[159,97151,22467],{"class":1142},[159,97153,22372],{"class":18361},[159,97155,22919],{"class":1142},[159,97157,13083],{"class":192},[159,97159,9952],{"class":165},[159,97161,22379],{"class":185},[159,97163,1159],{"class":165},[159,97165,22960],{"class":192},[159,97167,22891],{"class":165},[159,97169,22390],{"class":1135},[159,97171,97172],{"class":161,"line":1788},[159,97173,590],{"emptyLinePlaceholder":589},[159,97175,97176],{"class":161,"line":1802},[159,97177,22973],{"class":1135},[159,97179,97180,97182,97184,97186,97188,97190,97192,97194,97196,97198,97200,97202,97204,97206],{"class":161,"line":1815},[159,97181,20856],{"class":165},[159,97183,5166],{"class":185},[159,97185,1159],{"class":165},[159,97187,13083],{"class":192},[159,97189,22467],{"class":1142},[159,97191,22372],{"class":18361},[159,97193,22990],{"class":1142},[159,97195,13083],{"class":192},[159,97197,9952],{"class":165},[159,97199,22379],{"class":185},[159,97201,1159],{"class":165},[159,97203,22888],{"class":192},[159,97205,22891],{"class":165},[159,97207,22390],{"class":1135},[159,97209,97210,97212,97214,97216,97218,97220,97222,97224,97226,97228,97230,97232,97234,97236],{"class":161,"line":1828},[159,97211,20856],{"class":165},[159,97213,5166],{"class":185},[159,97215,1159],{"class":165},[159,97217,13083],{"class":192},[159,97219,22467],{"class":1142},[159,97221,22372],{"class":18361},[159,97223,22990],{"class":1142},[159,97225,13083],{"class":192},[159,97227,9952],{"class":165},[159,97229,22379],{"class":185},[159,97231,1159],{"class":165},[159,97233,22960],{"class":192},[159,97235,22891],{"class":165},[159,97237,22390],{"class":1135},[159,97239,97240,97242,97244,97246,97248,97250,97252,97254,97256,97258,97260,97262,97264,97266],{"class":161,"line":1841},[159,97241,20856],{"class":165},[159,97243,5166],{"class":185},[159,97245,1159],{"class":165},[159,97247,13083],{"class":192},[159,97249,22467],{"class":1142},[159,97251,22372],{"class":18361},[159,97253,22990],{"class":1142},[159,97255,13083],{"class":192},[159,97257,9952],{"class":165},[159,97259,22379],{"class":185},[159,97261,1159],{"class":165},[159,97263,23061],{"class":192},[159,97265,22891],{"class":165},[159,97267,22515],{"class":1135},[159,97269,97270],{"class":161,"line":1852},[159,97271,590],{"emptyLinePlaceholder":589},[159,97273,97274],{"class":161,"line":1866},[159,97275,23074],{"class":1135},[159,97277,97278,97280,97282,97284,97286,97288,97290,97292,97294,97296,97298,97300,97302,97304],{"class":161,"line":1879},[159,97279,20856],{"class":165},[159,97281,5166],{"class":185},[159,97283,1159],{"class":165},[159,97285,13083],{"class":192},[159,97287,22467],{"class":1142},[159,97289,23089],{"class":1146},[159,97291,22500],{"class":1142},[159,97293,13083],{"class":192},[159,97295,9952],{"class":165},[159,97297,22379],{"class":185},[159,97299,1159],{"class":165},[159,97301,23102],{"class":192},[159,97303,22387],{"class":165},[159,97305,22390],{"class":1135},[159,97307,97308,97310,97312,97314,97316,97318,97320,97322,97324,97326,97328,97330,97332,97334],{"class":161,"line":1884},[159,97309,20856],{"class":165},[159,97311,5166],{"class":185},[159,97313,1159],{"class":165},[159,97315,13083],{"class":192},[159,97317,22467],{"class":1142},[159,97319,23089],{"class":1146},[159,97321,22500],{"class":1142},[159,97323,13083],{"class":192},[159,97325,9952],{"class":165},[159,97327,22379],{"class":185},[159,97329,1159],{"class":165},[159,97331,23133],{"class":192},[159,97333,22387],{"class":165},[159,97335,22390],{"class":1135},[159,97337,97338,97340,97342,97344,97346,97348,97350,97352,97354,97356,97358,97360,97362,97364],{"class":161,"line":1889},[159,97339,20856],{"class":165},[159,97341,5166],{"class":185},[159,97343,1159],{"class":165},[159,97345,13083],{"class":192},[159,97347,22467],{"class":1142},[159,97349,23089],{"class":1146},[159,97351,22500],{"class":1142},[159,97353,13083],{"class":192},[159,97355,9952],{"class":165},[159,97357,22379],{"class":185},[159,97359,1159],{"class":165},[159,97361,23164],{"class":192},[159,97363,22387],{"class":165},[159,97365,22390],{"class":1135},[159,97367,97368,97370,97372,97374,97376,97378,97380,97382,97384,97386,97388,97390],{"class":161,"line":1899},[159,97369,20856],{"class":165},[159,97371,5166],{"class":185},[159,97373,1159],{"class":165},[159,97375,13083],{"class":192},[159,97377,23089],{"class":1146},[159,97379,13083],{"class":192},[159,97381,9952],{"class":165},[159,97383,22379],{"class":185},[159,97385,1159],{"class":165},[159,97387,23191],{"class":192},[159,97389,22387],{"class":165},[159,97391,22390],{"class":1135},[159,97393,97394,97396,97398,97400,97402,97404,97406,97408,97410,97412,97414,97416,97418,97420],{"class":161,"line":1912},[159,97395,20856],{"class":165},[159,97397,5166],{"class":185},[159,97399,1159],{"class":165},[159,97401,13083],{"class":192},[159,97403,22467],{"class":1142},[159,97405,23089],{"class":1146},[159,97407,22500],{"class":1142},[159,97409,13083],{"class":192},[159,97411,9952],{"class":165},[159,97413,22379],{"class":185},[159,97415,1159],{"class":165},[159,97417,23191],{"class":192},[159,97419,22387],{"class":165},[159,97421,23226],{"class":1135},[159,97423,97424,97426,97428,97430,97432,97434,97436,97438,97440,97442,97444,97446,97448,97450],{"class":161,"line":1925},[159,97425,20856],{"class":165},[159,97427,5166],{"class":185},[159,97429,1159],{"class":165},[159,97431,13083],{"class":192},[159,97433,22467],{"class":1142},[159,97435,23089],{"class":1146},[159,97437,23243],{"class":1142},[159,97439,13083],{"class":192},[159,97441,9952],{"class":165},[159,97443,22379],{"class":185},[159,97445,1159],{"class":165},[159,97447,23191],{"class":192},[159,97449,22387],{"class":165},[159,97451,23258],{"class":1135},[159,97453,97454,97456,97458,97460,97462,97464,97466,97468,97470,97472,97474,97476,97478,97480],{"class":161,"line":1956},[159,97455,20856],{"class":165},[159,97457,5166],{"class":185},[159,97459,1159],{"class":165},[159,97461,13083],{"class":192},[159,97463,22467],{"class":1142},[159,97465,23273],{"class":1146},[159,97467,22500],{"class":1142},[159,97469,13083],{"class":192},[159,97471,9952],{"class":165},[159,97473,22379],{"class":185},[159,97475,1159],{"class":165},[159,97477,23286],{"class":192},[159,97479,22443],{"class":165},[159,97481,23291],{"class":1135},[159,97483,97484,97486,97488,97490,97492,97494,97496,97498,97500,97502,97504,97506,97508,97510],{"class":161,"line":1971},[159,97485,20856],{"class":165},[159,97487,5166],{"class":185},[159,97489,1159],{"class":165},[159,97491,13083],{"class":192},[159,97493,22467],{"class":1142},[159,97495,23306],{"class":1146},[159,97497,22500],{"class":1142},[159,97499,13083],{"class":192},[159,97501,9952],{"class":165},[159,97503,22379],{"class":185},[159,97505,1159],{"class":165},[159,97507,23286],{"class":192},[159,97509,22443],{"class":165},[159,97511,22515],{"class":1135},[159,97513,97514,97516,97518,97520,97522,97524,97526,97528,97530,97532,97534,97536,97538,97540],{"class":161,"line":1976},[159,97515,20856],{"class":165},[159,97517,5166],{"class":185},[159,97519,1159],{"class":165},[159,97521,13083],{"class":192},[159,97523,22467],{"class":1142},[159,97525,23306],{"class":1146},[159,97527,22500],{"class":1142},[159,97529,13083],{"class":192},[159,97531,9952],{"class":165},[159,97533,22379],{"class":185},[159,97535,1159],{"class":165},[159,97537,23349],{"class":192},[159,97539,22443],{"class":165},[159,97541,22390],{"class":1135},[159,97543,97544,97546,97548,97550,97552,97554,97556,97558,97560,97562,97564,97566,97568,97570],{"class":161,"line":1981},[159,97545,20856],{"class":165},[159,97547,5166],{"class":185},[159,97549,1159],{"class":165},[159,97551,13083],{"class":192},[159,97553,22467],{"class":1142},[159,97555,23368],{"class":1146},[159,97557,22500],{"class":1142},[159,97559,13083],{"class":192},[159,97561,9952],{"class":165},[159,97563,22379],{"class":185},[159,97565,1159],{"class":165},[159,97567,23381],{"class":192},[159,97569,22443],{"class":165},[159,97571,22390],{"class":1135},[159,97573,97574,97576,97578,97580,97582,97584,97586,97588,97590,97592,97594,97596,97598,97600],{"class":161,"line":1989},[159,97575,20856],{"class":165},[159,97577,5166],{"class":185},[159,97579,1159],{"class":165},[159,97581,13083],{"class":192},[159,97583,22467],{"class":1142},[159,97585,23400],{"class":1146},[159,97587,22500],{"class":1142},[159,97589,13083],{"class":192},[159,97591,9952],{"class":165},[159,97593,22379],{"class":185},[159,97595,1159],{"class":165},[159,97597,23286],{"class":192},[159,97599,22387],{"class":165},[159,97601,22390],{"class":1135},[159,97603,97604,97606,97608],{"class":161,"line":2001},[159,97605,254],{"class":165},[159,97607,228],{"class":169},[159,97609,173],{"class":165},[159,97611,97612,97614,97616],{"class":161,"line":2006},[159,97613,264],{"class":165},[159,97615,170],{"class":169},[159,97617,173],{"class":165},[159,97619,97620],{"class":161,"line":2015},[159,97621,590],{"emptyLinePlaceholder":589},[159,97623,97624,97626,97628],{"class":161,"line":2024},[159,97625,264],{"class":165},[159,97627,522],{"class":169},[159,97629,173],{"class":165},[326,97631,23448],{"id":23447},[14,97633,97634],{},[23,97635],{"alt":25,"src":23453},[14,97637,23456],{},[14,97639,97640],{},[23,97641],{"alt":25,"src":23461},[151,97643,97644],{"className":520,"code":23464,"language":522,"meta":25,"style":25},[49,97645,97646,97656,97670,97678,97692,97712,97724,97732,97740,97748,97778,97808,97812,97844,97854,97882,97890,97898,97906],{"__ignoreMap":25},[159,97647,97648,97650,97652,97654],{"class":161,"line":162},[159,97649,914],{"class":165},[159,97651,917],{"class":169},[159,97653,920],{"class":185},[159,97655,173],{"class":165},[159,97657,97658,97660,97662,97664,97666,97668],{"class":161,"line":176},[159,97659,166],{"class":165},[159,97661,522],{"class":169},[159,97663,931],{"class":185},[159,97665,189],{"class":165},[159,97667,936],{"class":192},[159,97669,173],{"class":165},[159,97671,97672,97674,97676],{"class":161,"line":203},[159,97673,166],{"class":165},[159,97675,949],{"class":169},[159,97677,173],{"class":165},[159,97679,97680,97682,97684,97686,97688,97690],{"class":161,"line":223},[159,97681,179],{"class":165},[159,97683,958],{"class":169},[159,97685,961],{"class":185},[159,97687,189],{"class":165},[159,97689,966],{"class":192},[159,97691,173],{"class":165},[159,97693,97694,97696,97698,97700,97702,97704,97706,97708,97710],{"class":161,"line":233},[159,97695,179],{"class":165},[159,97697,958],{"class":169},[159,97699,547],{"class":185},[159,97701,189],{"class":165},[159,97703,981],{"class":192},[159,97705,984],{"class":185},[159,97707,189],{"class":165},[159,97709,989],{"class":192},[159,97711,173],{"class":165},[159,97713,97714,97716,97718,97720,97722],{"class":161,"line":239},[159,97715,179],{"class":165},[159,97717,998],{"class":169},[159,97719,1001],{"class":165},[159,97721,998],{"class":169},[159,97723,173],{"class":165},[159,97725,97726,97728,97730],{"class":161,"line":245},[159,97727,264],{"class":165},[159,97729,949],{"class":169},[159,97731,173],{"class":165},[159,97733,97734,97736,97738],{"class":161,"line":251},[159,97735,166],{"class":165},[159,97737,170],{"class":169},[159,97739,173],{"class":165},[159,97741,97742,97744,97746],{"class":161,"line":261},[159,97743,179],{"class":165},[159,97745,228],{"class":169},[159,97747,173],{"class":165},[159,97749,97750,97752,97754,97756,97758,97760,97762,97764,97766,97768,97770,97772,97774,97776],{"class":161,"line":603},[159,97751,20856],{"class":165},[159,97753,5166],{"class":185},[159,97755,1159],{"class":165},[159,97757,13083],{"class":192},[159,97759,22467],{"class":1142},[159,97761,23583],{"class":18361},[159,97763,22500],{"class":1142},[159,97765,13083],{"class":192},[159,97767,9952],{"class":165},[159,97769,22379],{"class":185},[159,97771,1159],{"class":165},[159,97773,23596],{"class":192},[159,97775,22891],{"class":165},[159,97777,22390],{"class":1135},[159,97779,97780,97782,97784,97786,97788,97790,97792,97794,97796,97798,97800,97802,97804,97806],{"class":161,"line":621},[159,97781,20856],{"class":165},[159,97783,5166],{"class":185},[159,97785,1159],{"class":165},[159,97787,13083],{"class":192},[159,97789,22467],{"class":1142},[159,97791,23583],{"class":18361},[159,97793,22500],{"class":1142},[159,97795,13083],{"class":192},[159,97797,9952],{"class":165},[159,97799,22379],{"class":185},[159,97801,1159],{"class":165},[159,97803,23627],{"class":192},[159,97805,22891],{"class":165},[159,97807,22515],{"class":1135},[159,97809,97810],{"class":161,"line":634},[159,97811,23636],{"class":1135},[159,97813,97814,97816,97818,97820,97822,97824,97826,97828,97830,97832,97834,97836,97838,97840,97842],{"class":161,"line":640},[159,97815,20856],{"class":165},[159,97817,5166],{"class":185},[159,97819,1159],{"class":165},[159,97821,13083],{"class":192},[159,97823,22467],{"class":1142},[159,97825,23583],{"class":18361},[159,97827,22500],{"class":1142},[159,97829,13083],{"class":192},[159,97831,1241],{"class":1142},[159,97833,9952],{"class":165},[159,97835,22379],{"class":185},[159,97837,1159],{"class":165},[159,97839,23627],{"class":192},[159,97841,22891],{"class":165},[159,97843,22390],{"class":1135},[159,97845,97846,97848,97850,97852],{"class":161,"line":1075},[159,97847,1143],{"class":1142},[159,97849,21027],{"class":1146},[159,97851,1150],{"class":1142},[159,97853,23679],{"class":192},[159,97855,97856,97858,97860,97862,97864,97866,97868,97870,97872,97874,97876,97878,97880],{"class":161,"line":1081},[159,97857,1143],{"class":1142},[159,97859,23686],{"class":1146},[159,97861,1150],{"class":1142},[159,97863,23691],{"class":165},[159,97865,23694],{"class":185},[159,97867,1159],{"class":165},[159,97869,13083],{"class":192},[159,97871,23583],{"class":18361},[159,97873,13083],{"class":192},[159,97875,23705],{"class":1142},[159,97877,1939],{"class":165},[159,97879,23710],{"class":192},[159,97881,1165],{"class":165},[159,97883,97884,97886,97888],{"class":161,"line":1091},[159,97885,20856],{"class":165},[159,97887,5166],{"class":185},[159,97889,23721],{"class":165},[159,97891,97892,97894,97896],{"class":161,"line":1100},[159,97893,254],{"class":165},[159,97895,228],{"class":169},[159,97897,173],{"class":165},[159,97899,97900,97902,97904],{"class":161,"line":1123},[159,97901,264],{"class":165},[159,97903,170],{"class":169},[159,97905,173],{"class":165},[159,97907,97908,97910,97912],{"class":161,"line":1132},[159,97909,264],{"class":165},[159,97911,522],{"class":169},[159,97913,173],{"class":165},[1468,97915,23748],{},{"title":25,"searchDepth":176,"depth":176,"links":97917},[97918,97928,97940,97957,97964,97972],{"id":39,"depth":176,"text":40,"children":97919},[97920,97921,97922,97923,97924,97925,97926,97927],{"id":44,"depth":203,"text":45},{"id":79,"depth":203,"text":80},{"id":120,"depth":203,"text":121},{"id":306,"depth":203,"text":307},{"id":355,"depth":203,"text":356},{"id":492,"depth":203,"text":493},{"id":830,"depth":203,"text":831},{"id":3991,"depth":203,"text":3992},{"id":4019,"depth":176,"text":4020,"children":97929},[97930,97931,97932,97933,97934,97935,97936,97937,97938,97939],{"id":4023,"depth":203,"text":4024},{"id":4046,"depth":203,"text":4047},{"id":4976,"depth":203,"text":4977},{"id":5669,"depth":203,"text":5670},{"id":5953,"depth":203,"text":5954},{"id":10237,"depth":203,"text":10238},{"id":10407,"depth":203,"text":10408},{"id":10535,"depth":203,"text":10536},{"id":10561,"depth":203,"text":10562},{"id":11962,"depth":203,"text":11963},{"id":13123,"depth":176,"text":13124,"children":97941},[97942,97943,97944,97945,97946,97947,97948,97949,97950,97951,97952,97953,97954,97955,97956],{"id":13127,"depth":203,"text":13128},{"id":13784,"depth":203,"text":13785},{"id":15481,"depth":203,"text":15482},{"id":15522,"depth":203,"text":15523},{"id":15564,"depth":203,"text":15565},{"id":15578,"depth":203,"text":15579},{"id":15627,"depth":203,"text":15628},{"id":15639,"depth":203,"text":15640},{"id":15654,"depth":203,"text":15655},{"id":15691,"depth":203,"text":15692},{"id":15772,"depth":203,"text":15773},{"id":15900,"depth":203,"text":15901},{"id":15912,"depth":203,"text":15913},{"id":15932,"depth":203,"text":15933},{"id":18057,"depth":203,"text":18058},{"id":18076,"depth":176,"text":18077,"children":97958},[97959,97960,97961,97962,97963],{"id":18097,"depth":203,"text":18098},{"id":18117,"depth":203,"text":18118},{"id":18166,"depth":203,"text":18167},{"id":18291,"depth":203,"text":18292},{"id":18479,"depth":203,"text":18480},{"id":18497,"depth":176,"text":18498,"children":97965},[97966,97967,97968,97969,97970,97971],{"id":18512,"depth":203,"text":18513},{"id":18571,"depth":203,"text":18572},{"id":18595,"depth":203,"text":18596},{"id":18917,"depth":203,"text":18918},{"id":18949,"depth":203,"text":18950},{"id":18972,"depth":203,"text":18973},{"id":22078,"depth":176,"text":22079,"children":97973},[97974,97975],{"id":22112,"depth":203,"text":22113},{"id":22151,"depth":203,"text":22152},{},{"title":5,"description":23809},{"id":97979,"title":97980,"body":97981,"description":23809,"extension":23810,"meta":114118,"navigation":589,"path":114119,"seo":114120,"stem":114121,"__hash__":114122},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":97982,"toc":114054},[97983,97986,97989,97993,97997,98002,98007,98018,98022,98027,98030,98034,98037,98042,98046,98050,98053,98058,98061,98065,98068,98076,98079,98083,98088,98093,98096,98100,98105,98110,98113,98117,98122,98125,98130,98133,98138,98141,98146,98151,98154,98157,98161,98166,98171,98174,98178,98182,98185,98188,98191,98195,98199,98204,98209,98212,98216,98221,98226,98229,98232,98235,98238,98241,98244,98247,98250,98253,98258,98262,98267,98272,98275,98278,98281,98284,98287,98290,98293,98296,98300,98304,98307,98310,98313,98318,98320,98323,98326,98329,98332,98335,98338,98341,98344,98347,98350,98353,98356,98359,98364,98369,98374,98377,98381,98384,98389,98393,98395,98406,98411,98512,98515,98518,98521,98524,98527,98530,98533,98536,98538,98541,98544,98547,98550,98553,98555,98558,98561,98564,98567,98570,98573,98575,98578,98580,98582,98585,98589,98593,98596,98599,98602,98605,98608,98611,98614,98617,98620,98625,98745,98748,98751,98756,98759,98762,98765,98768,98773,98776,98779,98782,98785,98790,98793,98893,98958,99032,99036,99039,99042,99046,99049,99063,99092,99095,99098,99101,99104,99107,99110,99113,99115,99118,99121,99124,99127,99131,99136,99140,99145,99220,99223,99406,99409,99412,99415,99418,99421,99423,99426,99429,99432,99435,99438,99441,99443,99447,99450,99455,99458,99461,99464,99467,99469,99474,99477,99480,99483,99486,99488,99493,99496,99499,99501,99503,99506,99510,99513,99516,99521,99524,99527,99530,99580,99585,99589,99594,99597,99666,99669,99678,99682,99687,99690,99693,99701,99704,99721,101523,101527,101531,101536,101539,101543,101549,101555,101707,101712,101717,101720,101723,101726,101729,101732,101735,101738,101741,101744,101747,101750,101753,101758,101762,101765,101776,101780,101785,101788,101791,101794,101797,101800,101802,101805,101808,101811,101814,101816,101833,101836,101840,101843,101848,101853,101856,101859,101863,101866,101869,101878,101881,101885,101888,101893,101898,101965,101969,101972,101975,101980,101985,102071,102076,102080,102083,102086,102101,102104,102109,102113,102118,102227,102230,102241,102391,102395,102400,102509,102513,102518,102523,102528,102531,102538,102558,102594,102758,102763,102766,102771,102778,102781,102784,102787,102846,102902,102958,102962,102967,103282,103285,103289,103292,103297,103406,103411,103415,103420,103424,103495,103499,103501,103504,103507,103545,103821,103825,103842,103908,103942,103946,103949,103954,103983,103990,103999,104004,104019,104024,104033,104036,104173,104177,104239,104243,104248,104493,104497,104502,104505,104508,104511,104514,104518,104523,106104,106108,106112,106118,106121,106126,106130,106133,106138,106141,106152,106156,106161,106165,106170,106175,106178,106183,106187,106191,106194,106199,106204,106207,106210,106213,106335,106340,106442,106445,106448,106452,106457,106629,106634,106638,106641,106646,106712,106717,106720,106851,106854,106859,106862,106865,106956,106961,106964,106967,106970,106973,106978,106983,106986,106991,106996,107001,107005,107008,107011,107016,107021,107026,107031,107085,107088,107091,107096,107099,107102,107107,107112,107117,107121,107126,107140,107145,107148,107153,107157,107162,107167,107172,107177,107182,107187,107192,107197,107200,107204,107209,107212,107215,107218,107223,107228,107231,107234,107238,107241,107244,107249,107254,107259,107264,107267,107272,107277,107338,107343,107346,107351,108592,108597,108601,108605,108610,108613,108618,108623,108626,108631,108633,108638,108642,108645,108648,108659,108663,108668,108673,108728,108733,108738,108743,108954,108959,108963,108968,108971,108973,108976,108979,109426,109431,109438,109444,109447,109450,109714,109719,109723,109988,109993,109997,110002,110007,110012,110017,110348,110351,110356,110361,110364,110368,110372,110377,110382,110387,110392,110397,110402,110406,110409,110414,110419,110422,110496,110501,110506,110511,110513,110516,110886,110891,110896,110901,110904,110907,111009,111014,111019,111122,111126,111131,111135,111139,111144,111149,111152,111157,111160,111163,111556,111561,111564,111567,111570,111573,112093,112097,112102,112107,112112,112115,112120,112123,112126,112508,112513,112515,112517,112520,112523,113035,113039,113100,113103,113106,113109,113113,113116,113121,113126,114051],[10,97984,97980],{"id":97985},"_4js进阶",[14,97987,97988],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[37,97990,97992],{"id":97991},"_41-作用域","4.1 作用域",[42,97994,97996],{"id":97995},"_411-局部作用域","4.1.1 局部作用域",[14,97998,97999],{},[23,98000],{"alt":25,"src":98001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,98003,98004],{},[23,98005],{"alt":25,"src":98006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[103,98008,98009,98012,98015],{},[106,98010,98011],{},"函数作用域在函数内部",[106,98013,98014],{},"块级作用域在{}",[106,98016,98017],{},"对象的那个{}不是作用域，不是块作用域",[42,98019,98021],{"id":98020},"_412-全局作用域","4.1.2 全局作用域",[14,98023,98024],{},[23,98025],{"alt":25,"src":98026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,98028,98029],{},"window.a=10不要这样写",[42,98031,98033],{"id":98032},"_413-作用域链","4.1.3 作用域链",[14,98035,98036],{},"变量查找机制",[14,98038,98039],{},[23,98040],{"alt":25,"src":98041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[37,98043,98045],{"id":98044},"_42-垃圾回收机制","4.2 垃圾回收机制",[42,98047,98049],{"id":98048},"_421-大体介绍","4.2.1 大体介绍",[14,98051,98052],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,98054,98055],{},[23,98056],{"alt":25,"src":98057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,98059,98060],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[42,98062,98064],{"id":98063},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,98066,98067],{},"堆栈空间分配区别：",[134,98069,98070,98073],{},[106,98071,98072],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[106,98074,98075],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,98077,98078],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[326,98080,98082],{"id":98081},"_4221-引用计数","4.2.2.1 引用计数",[14,98084,98085],{},[23,98086],{"alt":25,"src":98087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,98089,98090],{},[23,98091],{"alt":25,"src":98092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,98094,98095],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[326,98097,98099],{"id":98098},"_4222-标记清除法","4.2.2.2 标记清除法",[14,98101,98102],{},[23,98103],{"alt":25,"src":98104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,98106,98107],{},[23,98108],{"alt":25,"src":98109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,98111,98112],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[37,98114,98116],{"id":98115},"_43-闭包","4.3 闭包",[14,98118,98119],{},[23,98120],{"alt":25,"src":98121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,98123,98124],{},"闭包：内层函数+外层函数的变量",[14,98126,98127],{},[23,98128],{"alt":25,"src":98129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,98131,98132],{},"closure就是闭包",[14,98134,98135],{},[23,98136],{"alt":25,"src":98137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,98139,98140],{},"内层函数必须包含外层函数的变量才是闭包",[14,98142,98143],{},[23,98144],{"alt":25,"src":98145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,98147,98148],{},[23,98149],{"alt":25,"src":98150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,98152,98153],{},"闭包可能会引起内存泄漏",[14,98155,98156],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[37,98158,98160],{"id":98159},"_44-变量提升","4.4 变量提升",[14,98162,98163],{},[23,98164],{"alt":25,"src":98165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,98167,98168],{},[23,98169],{"alt":25,"src":98170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,98172,98173],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[37,98175,98177],{"id":98176},"_45-函数进阶","4.5 函数进阶",[42,98179,98181],{"id":98180},"_451-函数提升","4.5.1 函数提升",[14,98183,98184],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,98186,98187],{},"只提升函数声明，不提升函数调用",[228,98189,98190],{},"\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",[42,98192,98194],{"id":98193},"_452-函数参数","4.5.2 函数参数",[326,98196,98198],{"id":98197},"_4521-动态参数","4.5.2.1 动态参数",[14,98200,98201],{},[23,98202],{"alt":25,"src":98203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,98205,98206],{},[23,98207],{"alt":25,"src":98208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,98210,98211],{},"箭头函数里边没有arguments",[326,98213,98215],{"id":98214},"_4522-剩余参数","4.5.2.2 剩余参数",[14,98217,98218],{},[23,98219],{"alt":25,"src":98220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,98222,98223],{},[23,98224],{"alt":25,"src":98225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,98227,98228],{},"剩余参数使用的时候不需要写...",[14,98230,98231],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,98233,98234],{},"  function getSum(a,b,...arr) {",[14,98236,98237],{},"  console.log(11)",[14,98239,98240],{},"  }",[14,98242,98243],{},"  getSum(1,2,3,4)",[14,98245,98246],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,98248,98249],{},"  getSum(1,2)",[14,98251,98252],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,98254,98255],{},[23,98256],{"alt":25,"src":98257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[326,98259,98261],{"id":98260},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,98263,98264],{},[23,98265],{"alt":25,"src":98266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,98268,98269],{},[23,98270],{"alt":25,"src":98271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,98273,98274],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,98276,98277],{},"展开运算符可以用于数组之间的合并：",[14,98279,98280],{},"const arr1 = [1, 2, 3]",[14,98282,98283],{},"const arr2 = [3, 4, 5]",[14,98285,98286],{},"const arr = [...arr1, ...arr2]",[14,98288,98289],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,98291,98292],{},"剩余参数：函数参数使用，得到真数组",[14,98294,98295],{},"展开运算符：数组中使用，数组展开",[42,98297,98299],{"id":98298},"_453-箭头函数","4.5.3 箭头函数",[326,98301,98303],{"id":98302},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,98305,98306],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,98308,98309],{},"它不是万能的！！！",[14,98311,98312],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,98314,98315],{},[23,98316],{"alt":25,"src":98317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,98319,23910],{},[14,98321,98322],{},"① 只有一个形参的时候，可以省略小括号：",[14,98324,98325],{},"const fn=x=>{console.log(x)}",[14,98327,98328],{},"② 只有一行代码时可以省略大括号：",[14,98330,98331],{},"const fn=x=>console.log(11)",[14,98333,98334],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,98336,98337],{},"const fn=x=>x+x",[14,98339,98340],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,98342,98343],{},"⑤ 阻止表单默认提交：",[14,98345,98346],{},"const form = document.querySelector('form')",[14,98348,98349],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,98351,98352],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,98354,98355],{},"const fn=uname=>({uname:uname})",[14,98357,98358],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,98360,98361],{},[23,98362],{"alt":25,"src":98363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,98365,98366],{},[23,98367],{"alt":25,"src":98368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,98370,98371],{},[23,98372],{"alt":25,"src":98373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,98375,98376],{},"一定不要忘记用()，有()就理解为自带return",[326,98378,98380],{"id":98379},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,98382,98383],{},"箭头函数是没有动态参数的arguments",[14,98385,98386],{},[23,98387],{"alt":25,"src":98388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[326,98390,98392],{"id":98391},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,98394,10547],{},[134,98396,98397,98400,98403],{},[106,98398,98399],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[106,98401,98402],{},"事件回调函数使用箭头函数时，this 为全局的 window",[106,98404,98405],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,98407,98408],{},[23,98409],{"alt":25,"src":98410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[151,98412,98414],{"className":153,"code":98413,"language":155,"meta":25,"style":25},"  \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",[49,98415,98416,98424,98429,98434,98439,98444,98449,98453,98458,98462,98466,98471,98476,98481,98485,98489,98494,98499,98504],{"__ignoreMap":25},[159,98417,98418,98420,98422],{"class":161,"line":162},[159,98419,179],{"class":165},[159,98421,228],{"class":169},[159,98423,173],{"class":165},[159,98425,98426],{"class":161,"line":176},[159,98427,98428],{"class":165},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[159,98430,98431],{"class":161,"line":203},[159,98432,98433],{"class":165},"    console.log(this) \u002F\u002F指向window\n",[159,98435,98436],{"class":161,"line":223},[159,98437,98438],{"class":165},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[159,98440,98441],{"class":161,"line":233},[159,98442,98443],{"class":165},"    function fn() {\n",[159,98445,98446],{"class":161,"line":239},[159,98447,98448],{"class":165},"      console.log(this)  \u002F\u002F指向window\n",[159,98450,98451],{"class":161,"line":245},[159,98452,1508],{"class":165},[159,98454,98455],{"class":161,"line":251},[159,98456,98457],{"class":165},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[159,98459,98460],{"class":161,"line":261},[159,98461,590],{"emptyLinePlaceholder":589},[159,98463,98464],{"class":161,"line":603},[159,98465,18617],{"class":165},[159,98467,98468],{"class":161,"line":621},[159,98469,98470],{"class":165},"      name: 'andy',\n",[159,98472,98473],{"class":161,"line":634},[159,98474,98475],{"class":165},"      sayHai: function () {\n",[159,98477,98478],{"class":161,"line":640},[159,98479,98480],{"class":165},"        console.log(this)\n",[159,98482,98483],{"class":161,"line":1075},[159,98484,1308],{"class":165},[159,98486,98487],{"class":161,"line":1081},[159,98488,1508],{"class":165},[159,98490,98491],{"class":161,"line":1091},[159,98492,98493],{"class":165},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[159,98495,98496],{"class":161,"line":1100},[159,98497,98498],{"class":165},"    \u002F\u002F 2.箭头函数的this\n",[159,98500,98501],{"class":161,"line":1123},[159,98502,98503],{"class":165},"    const fn = () => console.log(this)\n",[159,98505,98506,98508,98510],{"class":161,"line":1132},[159,98507,254],{"class":165},[159,98509,228],{"class":169},[159,98511,173],{"class":165},[14,98513,98514],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,98516,98517],{},"const fn = () => console.log(this)",[14,98519,98520],{},"fn() \u002F\u002F指向window",[14,98522,98523],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,98525,98526],{},"①",[14,98528,98529],{},"const obj = {",[14,98531,98532],{},"uname: 'pink老师',",[14,98534,98535],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,98537,886],{},[14,98539,98540],{},"调用对象里边的函数",[14,98542,98543],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,98545,98546],{},"obj.sayHai()",[14,98548,98549],{},"②",[14,98551,98552],{},"const obj1 = {",[14,98554,98532],{},[14,98556,98557],{},"sayHai: function () {",[14,98559,98560],{},"let i = 10",[14,98562,98563],{},"const count = () => {",[14,98565,98566],{},"console.log(this)",[14,98568,98569],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,98571,98572],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,98574,886],{},[14,98576,98577],{},"count()",[14,98579,886],{},[14,98581,886],{},[14,98583,98584],{},"obj1.sayHai()",[37,98586,98588],{"id":98587},"_46-解构赋值","4.6 解构赋值",[42,98590,98592],{"id":98591},"_461-数组解构","4.6.1 数组解构",[14,98594,98595],{},"以前要是使用数组中的值的话：",[14,98597,98598],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,98600,98601],{},"const arr=[100,60,80]",[14,98603,98604],{},"const max=arr[0]",[14,98606,98607],{},"const min=arr[1]",[14,98609,98610],{},"const avg=arr[2]",[14,98612,98613],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,98615,98616],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,98618,98619],{},"这个写法就类似于上边的那种用很多const的方法",[14,98621,98622],{},[23,98623],{"alt":25,"src":98624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[151,98626,98628],{"className":520,"code":98627,"language":522,"meta":25,"style":25},"①变量之间交换值:\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",[49,98629,98630,98635,98640,98645,98650,98655,98659,98663,98668,98672,98677,98682,98686,98691,98696,98707,98717,98722,98727,98732,98736,98740],{"__ignoreMap":25},[159,98631,98632],{"class":161,"line":162},[159,98633,98634],{"class":165},"①变量之间交换值:\n",[159,98636,98637],{"class":161,"line":176},[159,98638,98639],{"class":165},"let a=1\n",[159,98641,98642],{"class":161,"line":203},[159,98643,98644],{"class":165},"let b=2;\n",[159,98646,98647],{"class":161,"line":223},[159,98648,98649],{"class":165},"必须加这行代码，不然就会报错\n",[159,98651,98652],{"class":161,"line":233},[159,98653,98654],{"class":165},"[b,a]=[a,b]\n",[159,98656,98657],{"class":161,"line":239},[159,98658,590],{"emptyLinePlaceholder":589},[159,98660,98661],{"class":161,"line":245},[159,98662,590],{"emptyLinePlaceholder":589},[159,98664,98665],{"class":161,"line":251},[159,98666,98667],{"class":165},"可以写成下面的方式：\n",[159,98669,98670],{"class":161,"line":261},[159,98671,98639],{"class":165},[159,98673,98674],{"class":161,"line":603},[159,98675,98676],{"class":165},"let b=2\n",[159,98678,98679],{"class":161,"line":621},[159,98680,98681],{"class":165},";[b,a]=[a,b]\n",[159,98683,98684],{"class":161,"line":634},[159,98685,590],{"emptyLinePlaceholder":589},[159,98687,98688],{"class":161,"line":640},[159,98689,98690],{"class":165},"②排序\n",[159,98692,98693],{"class":161,"line":1075},[159,98694,98695],{"class":165},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[159,98697,98698,98701,98704],{"class":161,"line":1081},[159,98699,98700],{"class":165},"for (let i = 0; i ",[159,98702,166],{"class":98703},"s7hpK",[159,98705,98706],{"class":165}," arr1.length; i++) {\n",[159,98708,98709,98712,98714],{"class":161,"line":1091},[159,98710,98711],{"class":165},"   for (let j = 0; j ",[159,98713,166],{"class":98703},[159,98715,98716],{"class":165}," arr1.length - 1; j++) {\n",[159,98718,98719],{"class":161,"line":1100},[159,98720,98721],{"class":165},"      if (arr1[j] > arr1[j + 1]) {\n",[159,98723,98724],{"class":161,"line":1123},[159,98725,98726],{"class":165},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[159,98728,98729],{"class":161,"line":1132},[159,98730,98731],{"class":165},"       }\n",[159,98733,98734],{"class":161,"line":1139},[159,98735,27927],{"class":165},[159,98737,98738],{"class":161,"line":1168},[159,98739,15685],{"class":165},[159,98741,98742],{"class":161,"line":1174},[159,98743,98744],{"class":165},"console.log(arr1)\n",[14,98746,98747],{},"数组解构的细节：",[14,98749,98750],{},"①变量多，单元值少",[14,98752,98753],{},[23,98754],{"alt":25,"src":98755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,98757,98758],{},"防止出现undefined的方法：",[14,98760,98761],{},"const [a=0,b=0] =[1]",[14,98763,98764],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,98766,98767],{},"②变量少，单元值多",[14,98769,98770],{},[23,98771],{"alt":25,"src":98772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,98774,98775],{},"此时可以使用剩余参数来接收多余的值",[14,98777,98778],{},"const [a,b,...c]=[1,2,3,4]",[14,98780,98781],{},"console.log(c) 输出[3,4]",[14,98783,98784],{},"③可以按需导入，忽略某些返回值",[14,98786,98787],{},[23,98788],{"alt":25,"src":98789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,98791,98792],{},"④支持多维数组的结构",[151,98794,98798],{"className":98795,"code":98796,"language":98797,"meta":25,"style":25},"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",[49,98799,98800,98828,98844,98859,98874],{"__ignoreMap":25},[159,98801,98802,98804,98806,98808,98810,98812,98814,98816,98819,98821,98823,98825],{"class":161,"line":162},[159,98803,18326],{"class":1142},[159,98805,75168],{"class":165},[159,98807,189],{"class":1142},[159,98809,4608],{"class":165},[159,98811,4932],{"class":1146},[159,98813,1939],{"class":165},[159,98815,11034],{"class":1146},[159,98817,98818],{"class":165},", [",[159,98820,23949],{"class":1146},[159,98822,1939],{"class":165},[159,98824,8866],{"class":1146},[159,98826,98827],{"class":165},"]]\n",[159,98829,98830,98833,98835,98837,98839,98841],{"class":161,"line":176},[159,98831,98832],{"class":165},"console.",[159,98834,5166],{"class":185},[159,98836,27475],{"class":165},[159,98838,1489],{"class":1146},[159,98840,27834],{"class":165},[159,98842,98843],{"class":1135},"  \u002F\u002F1\n",[159,98845,98846,98848,98850,98852,98854,98856],{"class":161,"line":203},[159,98847,98832],{"class":165},[159,98849,5166],{"class":185},[159,98851,27475],{"class":165},[159,98853,4932],{"class":1146},[159,98855,27834],{"class":165},[159,98857,98858],{"class":1135},"  \u002F\u002F2\n",[159,98860,98861,98863,98865,98867,98869,98871],{"class":161,"line":223},[159,98862,98832],{"class":165},[159,98864,5166],{"class":185},[159,98866,27475],{"class":165},[159,98868,11034],{"class":1146},[159,98870,27834],{"class":165},[159,98872,98873],{"class":1135},"  \u002F\u002F[3,4]\n",[159,98875,98876,98878,98880,98882,98884,98886,98888,98890],{"class":161,"line":233},[159,98877,98832],{"class":165},[159,98879,5166],{"class":185},[159,98881,27475],{"class":165},[159,98883,11034],{"class":1146},[159,98885,28519],{"class":165},[159,98887,1489],{"class":1146},[159,98889,27834],{"class":165},[159,98891,98892],{"class":1135},"  \u002F\u002F3\n",[151,98894,98896],{"className":98795,"code":98895,"language":98797,"meta":25,"style":25},"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",[49,98897,98898,98925,98936,98947],{"__ignoreMap":25},[159,98899,98900,98902,98905,98907,98909,98911,98913,98915,98917,98919,98921,98923],{"class":161,"line":162},[159,98901,18326],{"class":1142},[159,98903,98904],{"class":165}," [a, b, c] ",[159,98906,189],{"class":1142},[159,98908,4608],{"class":165},[159,98910,4932],{"class":1146},[159,98912,1939],{"class":165},[159,98914,11034],{"class":1146},[159,98916,98818],{"class":165},[159,98918,23949],{"class":1146},[159,98920,1939],{"class":165},[159,98922,8866],{"class":1146},[159,98924,98827],{"class":165},[159,98926,98927,98929,98931,98934],{"class":161,"line":176},[159,98928,98832],{"class":165},[159,98930,5166],{"class":185},[159,98932,98933],{"class":165},"(a)",[159,98935,98843],{"class":1135},[159,98937,98938,98940,98942,98945],{"class":161,"line":203},[159,98939,98832],{"class":165},[159,98941,5166],{"class":185},[159,98943,98944],{"class":165},"(b)",[159,98946,98858],{"class":1135},[159,98948,98949,98951,98953,98956],{"class":161,"line":223},[159,98950,98832],{"class":165},[159,98952,5166],{"class":185},[159,98954,98955],{"class":165},"(c)",[159,98957,98873],{"class":1135},[151,98959,98961],{"className":98795,"code":98960,"language":98797,"meta":25,"style":25},"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",[49,98962,98963,98990,99000,99010,99020],{"__ignoreMap":25},[159,98964,98965,98967,98970,98972,98974,98976,98978,98980,98982,98984,98986,98988],{"class":161,"line":162},[159,98966,18326],{"class":1142},[159,98968,98969],{"class":165}," [a, b, [c, d]] ",[159,98971,189],{"class":1142},[159,98973,4608],{"class":165},[159,98975,4932],{"class":1146},[159,98977,1939],{"class":165},[159,98979,11034],{"class":1146},[159,98981,98818],{"class":165},[159,98983,23949],{"class":1146},[159,98985,1939],{"class":165},[159,98987,8866],{"class":1146},[159,98989,98827],{"class":165},[159,98991,98992,98994,98996,98998],{"class":161,"line":176},[159,98993,98832],{"class":165},[159,98995,5166],{"class":185},[159,98997,98933],{"class":165},[159,98999,98843],{"class":1135},[159,99001,99002,99004,99006,99008],{"class":161,"line":203},[159,99003,98832],{"class":165},[159,99005,5166],{"class":185},[159,99007,98944],{"class":165},[159,99009,98858],{"class":1135},[159,99011,99012,99014,99016,99018],{"class":161,"line":223},[159,99013,98832],{"class":165},[159,99015,5166],{"class":185},[159,99017,98955],{"class":165},[159,99019,98892],{"class":1135},[159,99021,99022,99024,99026,99029],{"class":161,"line":233},[159,99023,98832],{"class":165},[159,99025,5166],{"class":185},[159,99027,99028],{"class":165},"(d)",[159,99030,99031],{"class":1135},"  \u002F\u002F4\n",[42,99033,99035],{"id":99034},"_462-对象解构","4.6.2 对象解构",[14,99037,99038],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,99040,99041],{},"用的非常非常多！！！！！！",[326,99043,99045],{"id":99044},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,99047,99048],{},"基本语法：",[134,99050,99051,99054,99057,99060],{},[106,99052,99053],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[106,99055,99056],{},"对象属性的值将被赋值给与属性名相同的变量",[106,99058,99059],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[106,99061,99062],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[151,99064,99066],{"className":520,"code":99065,"language":522,"meta":25,"style":25},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[49,99067,99068,99073,99078,99083,99087],{"__ignoreMap":25},[159,99069,99070],{"class":161,"line":162},[159,99071,99072],{"class":165},"const obj = {\n",[159,99074,99075],{"class":161,"line":176},[159,99076,99077],{"class":165},"   uname: 'pink老师',\n",[159,99079,99080],{"class":161,"line":203},[159,99081,99082],{"class":165},"   age: 18,\n",[159,99084,99085],{"class":161,"line":223},[159,99086,15685],{"class":165},[159,99088,99089],{"class":161,"line":233},[159,99090,99091],{"class":165},"const { uname, age } = obj\n",[14,99093,99094],{},"上方代码这样写等价于：",[14,99096,99097],{},"const uname等价于obj.uname",[14,99099,99100],{},"变量名可以重新改名：",[14,99102,99103],{},"const uname='red老师'",[14,99105,99106],{},"const user={",[14,99108,99109],{},"  uname:'pink老师',",[14,99111,99112],{},"  age:18",[14,99114,886],{},[14,99116,99117],{},"const {uname,age}=user",[14,99119,99120],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,99122,99123],{},"const {旧变量名：新变量名}=对象",[14,99125,99126],{},"const {uname:username,age}=user",[326,99128,99130],{"id":99129},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,99132,99133],{},[23,99134],{"alt":25,"src":99135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[326,99137,99139],{"id":99138},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,99141,99142],{},[23,99143],{"alt":25,"src":99144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[151,99146,99148],{"className":153,"code":99147,"language":155,"meta":25,"style":25},"  \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",[49,99149,99150,99158,99163,99168,99173,99178,99183,99188,99193,99198,99202,99207,99212],{"__ignoreMap":25},[159,99151,99152,99154,99156],{"class":161,"line":162},[159,99153,179],{"class":165},[159,99155,228],{"class":169},[159,99157,173],{"class":165},[159,99159,99160],{"class":161,"line":176},[159,99161,99162],{"class":165},"    const pig = {\n",[159,99164,99165],{"class":161,"line":203},[159,99166,99167],{"class":165},"      name: '佩奇',\n",[159,99169,99170],{"class":161,"line":223},[159,99171,99172],{"class":165},"      family: {\n",[159,99174,99175],{"class":161,"line":233},[159,99176,99177],{"class":165},"        mother: '猪妈妈',\n",[159,99179,99180],{"class":161,"line":239},[159,99181,99182],{"class":165},"        father: '猪爸爸',\n",[159,99184,99185],{"class":161,"line":245},[159,99186,99187],{"class":165},"        sister: '乔治'\n",[159,99189,99190],{"class":161,"line":251},[159,99191,99192],{"class":165},"      },\n",[159,99194,99195],{"class":161,"line":261},[159,99196,99197],{"class":165},"      age: 6\n",[159,99199,99200],{"class":161,"line":603},[159,99201,1508],{"class":165},[159,99203,99204],{"class":161,"line":621},[159,99205,99206],{"class":165},"    \u002F\u002F 多级对象解构\n",[159,99208,99209],{"class":161,"line":634},[159,99210,99211],{"class":165},"    const { name, family: { mother, father, sister }, age } = pig\n",[159,99213,99214,99216,99218],{"class":161,"line":640},[159,99215,254],{"class":165},[159,99217,228],{"class":169},[159,99219,173],{"class":165},[14,99221,99222],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[151,99224,99227],{"className":99225,"code":99226,"language":23583,"meta":25,"style":25},"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",[49,99228,99229,99234,99245,99257,99269,99278,99282,99293,99305,99315,99320,99324,99334,99345,99354,99358,99362,99373,99384,99393,99397,99402],{"__ignoreMap":25},[159,99230,99231],{"class":161,"line":162},[159,99232,99233],{"class":1135},"    \u002F\u002F 这是后台传递过来的数据\n",[159,99235,99236,99238,99241,99243],{"class":161,"line":176},[159,99237,1143],{"class":1142},[159,99239,99240],{"class":165}," msg ",[159,99242,189],{"class":1142},[159,99244,1478],{"class":165},[159,99246,99247,99250,99252,99255],{"class":161,"line":203},[159,99248,99249],{"class":192},"      \"code\"",[159,99251,20934],{"class":1142},[159,99253,99254],{"class":1146}," 200",[159,99256,17070],{"class":165},[159,99258,99259,99262,99264,99267],{"class":161,"line":223},[159,99260,99261],{"class":192},"      \"msg\"",[159,99263,20934],{"class":1142},[159,99265,99266],{"class":192}," \"获取新闻列表成功\"",[159,99268,17070],{"class":165},[159,99270,99271,99274,99276],{"class":161,"line":233},[159,99272,99273],{"class":192},"      \"data\"",[159,99275,20934],{"class":1142},[159,99277,2303],{"class":165},[159,99279,99280],{"class":161,"line":239},[159,99281,26153],{"class":165},[159,99283,99284,99287,99289,99291],{"class":161,"line":245},[159,99285,99286],{"class":192},"          \"id\"",[159,99288,20934],{"class":1142},[159,99290,2707],{"class":1146},[159,99292,17070],{"class":165},[159,99294,99295,99298,99300,99303],{"class":161,"line":251},[159,99296,99297],{"class":192},"          \"title\"",[159,99299,20934],{"class":1142},[159,99301,99302],{"class":192}," \"5G商用自己，三大运用商收入下降\"",[159,99304,17070],{"class":165},[159,99306,99307,99310,99312],{"class":161,"line":261},[159,99308,99309],{"class":192},"          \"count\"",[159,99311,20934],{"class":1142},[159,99313,99314],{"class":1146}," 58\n",[159,99316,99317],{"class":161,"line":603},[159,99318,99319],{"class":165},"        },\n",[159,99321,99322],{"class":161,"line":621},[159,99323,26153],{"class":165},[159,99325,99326,99328,99330,99332],{"class":161,"line":634},[159,99327,99286],{"class":192},[159,99329,20934],{"class":1142},[159,99331,38320],{"class":1146},[159,99333,17070],{"class":165},[159,99335,99336,99338,99340,99343],{"class":161,"line":640},[159,99337,99297],{"class":192},[159,99339,20934],{"class":1142},[159,99341,99342],{"class":192}," \"国际媒体头条速览\"",[159,99344,17070],{"class":165},[159,99346,99347,99349,99351],{"class":161,"line":1075},[159,99348,99309],{"class":192},[159,99350,20934],{"class":1142},[159,99352,99353],{"class":1146}," 56\n",[159,99355,99356],{"class":161,"line":1081},[159,99357,99319],{"class":165},[159,99359,99360],{"class":161,"line":1091},[159,99361,26153],{"class":165},[159,99363,99364,99366,99368,99371],{"class":161,"line":1100},[159,99365,99286],{"class":192},[159,99367,20934],{"class":1142},[159,99369,99370],{"class":1146}," 3",[159,99372,17070],{"class":165},[159,99374,99375,99377,99379,99382],{"class":161,"line":1123},[159,99376,99297],{"class":192},[159,99378,20934],{"class":1142},[159,99380,99381],{"class":192}," \"乌克兰和俄罗斯持续冲突\"",[159,99383,17070],{"class":165},[159,99385,99386,99388,99390],{"class":161,"line":1132},[159,99387,99309],{"class":192},[159,99389,20934],{"class":1142},[159,99391,99392],{"class":1146}," 1669\n",[159,99394,99395],{"class":161,"line":1139},[159,99396,99319],{"class":165},[159,99398,99399],{"class":161,"line":1168},[159,99400,99401],{"class":165},"      ]\n",[159,99403,99404],{"class":161,"line":1174},[159,99405,1508],{"class":165},[14,99407,99408],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,99410,99411],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,99413,99414],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,99416,99417],{},"function({data}) {",[14,99419,99420],{},"console.log(data)",[14,99422,886],{},[14,99424,99425],{},"render(msg)",[14,99427,99428],{},"实参传递给形参的时候解构了",[14,99430,99431],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,99433,99434],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,99436,99437],{},"function render({data:mydata}) {",[14,99439,99440],{},"  console.log(data)",[14,99442,886],{},[42,99444,99446],{"id":99445},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,99448,99449],{},"有两种情况：一个是数组结构，一个是立即执行函数",[134,99451,99452],{},[106,99453,99454],{},"如果对一个数组进行遍历，有两种方式：",[14,99456,99457],{},"①法1",[14,99459,99460],{},"const arr=[1,2,3]",[14,99462,99463],{},"arr.map(function(item,index) {",[14,99465,99466],{},"  console.log(item)",[14,99468,11956],{},[14,99470,99471],{},[23,99472],{"alt":25,"src":99473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,99475,99476],{},"②法2",[14,99478,99479],{},"const str='pink'",[14,99481,99482],{},"[1,2,3].map(function(item,index) {",[14,99484,99485],{},"console.log(item)",[14,99487,11956],{},[14,99489,99490],{},[23,99491],{"alt":25,"src":99492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,99494,99495],{},"此时会报错",[14,99497,99498],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,99500,99485],{},[14,99502,11956],{},[14,99504,99505],{},"内部会当成这样处理，所以我们用分号进行隔开",[37,99507,99509],{"id":99508},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,99511,99512],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,99514,99515],{},"可以理解为加强版的for循环",[14,99517,99518],{},[23,99519],{"alt":25,"src":99520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,99522,99523],{},"里边不写return，不返回数组，只遍历不返回",[14,99525,99526],{},"map是返回数组",[14,99528,99529],{},"forEach主要用于遍历数组对象",[151,99531,99533],{"className":153,"code":99532,"language":155,"meta":25,"style":25},"  \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",[49,99534,99535,99543,99548,99553,99558,99563,99567,99572],{"__ignoreMap":25},[159,99536,99537,99539,99541],{"class":161,"line":162},[159,99538,179],{"class":165},[159,99540,228],{"class":169},[159,99542,173],{"class":165},[159,99544,99545],{"class":161,"line":176},[159,99546,99547],{"class":165},"    const arr = ['red', 'green', 'pink']\n",[159,99549,99550],{"class":161,"line":203},[159,99551,99552],{"class":165},"    const result = arr.forEach(function (item, index) {\n",[159,99554,99555],{"class":161,"line":223},[159,99556,99557],{"class":165},"      console.log(item)\n",[159,99559,99560],{"class":161,"line":233},[159,99561,99562],{"class":165},"      console.log(index)\n",[159,99564,99565],{"class":161,"line":239},[159,99566,4863],{"class":165},[159,99568,99569],{"class":161,"line":245},[159,99570,99571],{"class":165},"    console.log(result)\n",[159,99573,99574,99576,99578],{"class":161,"line":251},[159,99575,254],{"class":165},[159,99577,228],{"class":169},[159,99579,173],{"class":165},[14,99581,99582],{},[23,99583],{"alt":25,"src":99584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[37,99586,99588],{"id":99587},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,99590,99591],{},[23,99592],{"alt":25,"src":99593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,99595,99596],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[151,99598,99600],{"className":153,"code":99599,"language":155,"meta":25,"style":25},"\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",[49,99601,99602,99610,99618,99623,99628,99632,99636,99641,99645,99650,99658],{"__ignoreMap":25},[159,99603,99604,99606,99608],{"class":161,"line":162},[159,99605,166],{"class":165},[159,99607,170],{"class":169},[159,99609,173],{"class":165},[159,99611,99612,99614,99616],{"class":161,"line":176},[159,99613,179],{"class":165},[159,99615,228],{"class":169},[159,99617,173],{"class":165},[159,99619,99620],{"class":161,"line":203},[159,99621,99622],{"class":165},"    const arr = [10, 20, 30]\n",[159,99624,99625],{"class":161,"line":223},[159,99626,99627],{"class":165},"    const newArr = arr.filter(function (item, index) {\n",[159,99629,99630],{"class":161,"line":233},[159,99631,99557],{"class":165},[159,99633,99634],{"class":161,"line":239},[159,99635,99562],{"class":165},[159,99637,99638],{"class":161,"line":245},[159,99639,99640],{"class":165},"      return item >= 20\n",[159,99642,99643],{"class":161,"line":251},[159,99644,4863],{"class":165},[159,99646,99647],{"class":161,"line":261},[159,99648,99649],{"class":165},"    console.log(newArr)\n",[159,99651,99652,99654,99656],{"class":161,"line":603},[159,99653,254],{"class":165},[159,99655,228],{"class":169},[159,99657,173],{"class":165},[159,99659,99660,99662,99664],{"class":161,"line":621},[159,99661,264],{"class":165},[159,99663,170],{"class":169},[159,99665,173],{"class":165},[14,99667,99668],{},"这个也可以写成箭头函数：",[151,99670,99672],{"className":520,"code":99671,"language":522,"meta":25,"style":25},"const newArr = arr.filter(item => item >= 20)\n",[49,99673,99674],{"__ignoreMap":25},[159,99675,99676],{"class":161,"line":162},[159,99677,99671],{"class":165},[37,99679,99681],{"id":99680},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,99683,99684],{},[23,99685],{"alt":25,"src":99686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,99688,99689],{},"步骤：",[14,99691,99692],{},"①：渲染页面模块",[103,99694,99695,99698],{},[106,99696,99697],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[106,99699,99700],{},"用forEach+字符串的形式",[14,99702,99703],{},"②：点击不同需求，显示不同页面内容",[103,99705,99706,99709,99712,99715,99718],{},[106,99707,99708],{},"点击采取事件委托方式 .filter",[106,99710,99711],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[106,99713,99714],{},"筛选条件是根据点击的 data-index 来判断",[106,99716,99717],{},"可以使用对象解构，把事件对象解构",[106,99719,99720],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[151,99722,99724],{"className":520,"code":99723,"language":522,"meta":25,"style":25},"\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",[49,99725,99726,99736,99750,99754,99762,99776,99796,99808,99816,99822,99832,99842,99852,99856,99860,99866,99879,99891,99901,99913,99917,99921,99928,99941,99953,99970,99988,100001,100005,100009,100021,100031,100035,100039,100046,100087,100114,100124,100128,100132,100140,100152,100156,100160,100168,100180,100192,100203,100207,100211,100220,100232,100243,100247,100251,100260,100272,100284,100288,100292,100299,100309,100321,100333,100348,100352,100356,100364,100380,100390,100400,100410,100422,100426,100430,100440,100451,100461,100465,100473,100481,100485,100493,100508,100534,100559,100584,100603,100611,100625,100630,100635,100640,100645,100650,100658,100666,100671,100682,100687,100697,100707,100717,100727,100731,100735,100744,100753,100762,100771,100775,100779,100788,100797,100806,100815,100819,100823,100832,100841,100850,100859,100863,100867,100876,100885,100894,100903,100907,100911,100920,100929,100938,100947,100951,100955,100964,100973,100982,100991,100995,100999,101008,101017,101025,101034,101038,101042,101046,101051,101063,101068,101080,101084,101101,101129,101138,101143,101153,101163,101172,101177,101182,101186,101191,101208,101212,101217,101225,101230,101257,101262,101282,101287,101299,101304,101309,101314,101325,101339,101376,101394,101427,101444,101468,101472,101477,101483,101487,101491,101495,101503,101511,101515],{"__ignoreMap":25},[159,99727,99728,99730,99732,99734],{"class":161,"line":162},[159,99729,914],{"class":165},[159,99731,917],{"class":169},[159,99733,920],{"class":185},[159,99735,173],{"class":165},[159,99737,99738,99740,99742,99744,99746,99748],{"class":161,"line":176},[159,99739,166],{"class":165},[159,99741,522],{"class":169},[159,99743,931],{"class":185},[159,99745,189],{"class":165},[159,99747,936],{"class":192},[159,99749,173],{"class":165},[159,99751,99752],{"class":161,"line":203},[159,99753,590],{"emptyLinePlaceholder":589},[159,99755,99756,99758,99760],{"class":161,"line":223},[159,99757,166],{"class":165},[159,99759,949],{"class":169},[159,99761,173],{"class":165},[159,99763,99764,99766,99768,99770,99772,99774],{"class":161,"line":233},[159,99765,179],{"class":165},[159,99767,958],{"class":169},[159,99769,961],{"class":185},[159,99771,189],{"class":165},[159,99773,966],{"class":192},[159,99775,173],{"class":165},[159,99777,99778,99780,99782,99784,99786,99788,99790,99792,99794],{"class":161,"line":239},[159,99779,179],{"class":165},[159,99781,958],{"class":169},[159,99783,547],{"class":185},[159,99785,189],{"class":165},[159,99787,981],{"class":192},[159,99789,984],{"class":185},[159,99791,189],{"class":165},[159,99793,989],{"class":192},[159,99795,173],{"class":165},[159,99797,99798,99800,99802,99804,99806],{"class":161,"line":245},[159,99799,179],{"class":165},[159,99801,998],{"class":169},[159,99803,1001],{"class":165},[159,99805,998],{"class":169},[159,99807,173],{"class":165},[159,99809,99810,99812,99814],{"class":161,"line":251},[159,99811,179],{"class":165},[159,99813,1468],{"class":169},[159,99815,173],{"class":165},[159,99817,99818,99820],{"class":161,"line":261},[159,99819,1475],{"class":169},[159,99821,1478],{"class":165},[159,99823,99824,99826,99828,99830],{"class":161,"line":603},[159,99825,1483],{"class":1146},[159,99827,1486],{"class":165},[159,99829,1489],{"class":1146},[159,99831,1492],{"class":165},[159,99833,99834,99836,99838,99840],{"class":161,"line":621},[159,99835,1497],{"class":1146},[159,99837,1486],{"class":165},[159,99839,1489],{"class":1146},[159,99841,1492],{"class":165},[159,99843,99844,99846,99848,99850],{"class":161,"line":634},[159,99845,19698],{"class":1146},[159,99847,1486],{"class":165},[159,99849,7523],{"class":1146},[159,99851,1492],{"class":165},[159,99853,99854],{"class":161,"line":640},[159,99855,1508],{"class":165},[159,99857,99858],{"class":161,"line":1075},[159,99859,590],{"emptyLinePlaceholder":589},[159,99861,99862,99864],{"class":161,"line":1081},[159,99863,9166],{"class":185},[159,99865,1478],{"class":165},[159,99867,99868,99870,99872,99875,99877],{"class":161,"line":1091},[159,99869,1563],{"class":1146},[159,99871,1486],{"class":165},[159,99873,99874],{"class":1146},"990",[159,99876,1571],{"class":1142},[159,99878,1492],{"class":165},[159,99880,99881,99883,99885,99887,99889],{"class":161,"line":1100},[159,99882,1497],{"class":1146},[159,99884,1486],{"class":165},[159,99886,1489],{"class":1146},[159,99888,1601],{"class":1146},[159,99890,1492],{"class":165},[159,99892,99893,99895,99897,99899],{"class":161,"line":1123},[159,99894,1818],{"class":1146},[159,99896,1486],{"class":165},[159,99898,1823],{"class":1146},[159,99900,1492],{"class":165},[159,99902,99903,99906,99908,99911],{"class":161,"line":1132},[159,99904,99905],{"class":1146},"      flex-wrap",[159,99907,1486],{"class":165},[159,99909,99910],{"class":1146},"wrap",[159,99912,1492],{"class":165},[159,99914,99915],{"class":161,"line":1139},[159,99916,1508],{"class":165},[159,99918,99919],{"class":161,"line":1168},[159,99920,590],{"emptyLinePlaceholder":589},[159,99922,99923,99926],{"class":161,"line":1174},[159,99924,99925],{"class":185},"    .item",[159,99927,1478],{"class":165},[159,99929,99930,99932,99934,99937,99939],{"class":161,"line":1180},[159,99931,1563],{"class":1146},[159,99933,1486],{"class":165},[159,99935,99936],{"class":1146},"240",[159,99938,1571],{"class":1142},[159,99940,1492],{"class":165},[159,99942,99943,99945,99947,99949,99951],{"class":161,"line":1194},[159,99944,9041],{"class":1146},[159,99946,1486],{"class":165},[159,99948,1964],{"class":1146},[159,99950,1571],{"class":1142},[159,99952,1492],{"class":165},[159,99954,99955,99957,99959,99961,99963,99966,99968],{"class":161,"line":1200},[159,99956,1483],{"class":1146},[159,99958,1486],{"class":165},[159,99960,1739],{"class":1146},[159,99962,1571],{"class":1142},[159,99964,99965],{"class":1146}," 30",[159,99967,1571],{"class":1142},[159,99969,1492],{"class":165},[159,99971,99972,99974,99976,99978,99981,99984,99986],{"class":161,"line":1221},[159,99973,8898],{"class":1146},[159,99975,1486],{"class":165},[159,99977,8903],{"class":1146},[159,99979,99980],{"class":1146}," ease",[159,99982,99983],{"class":1146}," .5",[159,99985,8909],{"class":1142},[159,99987,1492],{"class":165},[159,99989,99990,99993,99995,99997,99999],{"class":161,"line":1230},[159,99991,99992],{"class":1146},"      margin-bottom",[159,99994,1486],{"class":165},[159,99996,1739],{"class":1146},[159,99998,1571],{"class":1142},[159,100000,1492],{"class":165},[159,100002,100003],{"class":161,"line":1247},[159,100004,1508],{"class":165},[159,100006,100007],{"class":161,"line":1265},[159,100008,590],{"emptyLinePlaceholder":589},[159,100010,100011,100014,100016,100019],{"class":161,"line":1277},[159,100012,100013],{"class":185},"    .item:nth-child",[159,100015,1159],{"class":165},[159,100017,100018],{"class":1146},"4n",[159,100020,1262],{"class":165},[159,100022,100023,100025,100027,100029],{"class":161,"line":1283},[159,100024,9041],{"class":1146},[159,100026,1486],{"class":165},[159,100028,1489],{"class":1146},[159,100030,1492],{"class":165},[159,100032,100033],{"class":161,"line":1294},[159,100034,1508],{"class":165},[159,100036,100037],{"class":161,"line":1305},[159,100038,590],{"emptyLinePlaceholder":589},[159,100040,100041,100044],{"class":161,"line":1311},[159,100042,100043],{"class":185},"    .item:hover",[159,100045,1478],{"class":165},[159,100047,100048,100051,100053,100055,100057,100059,100061,100063,100065,100068,100070,100072,100074,100076,100078,100080,100082,100085],{"class":161,"line":1322},[159,100049,100050],{"class":1146},"      box-shadow",[159,100052,1486],{"class":165},[159,100054,1489],{"class":1146},[159,100056,1571],{"class":1142},[159,100058,1259],{"class":1146},[159,100060,1571],{"class":1142},[159,100062,25798],{"class":1146},[159,100064,1571],{"class":1142},[159,100066,100067],{"class":1146}," rgba",[159,100069,1159],{"class":165},[159,100071,1489],{"class":1146},[159,100073,1939],{"class":165},[159,100075,1489],{"class":1146},[159,100077,1939],{"class":165},[159,100079,1489],{"class":1146},[159,100081,1939],{"class":165},[159,100083,100084],{"class":1146},".2",[159,100086,1953],{"class":165},[159,100088,100089,100092,100094,100097,100099,100101,100103,100106,100108,100110,100112],{"class":161,"line":1327},[159,100090,100091],{"class":1146},"      transform",[159,100093,1486],{"class":165},[159,100095,100096],{"class":1146},"translate3d",[159,100098,1159],{"class":165},[159,100100,1489],{"class":1146},[159,100102,1939],{"class":165},[159,100104,100105],{"class":1146},"-4",[159,100107,1571],{"class":1142},[159,100109,1939],{"class":165},[159,100111,1489],{"class":1146},[159,100113,1953],{"class":165},[159,100115,100116,100118,100120,100122],{"class":161,"line":1336},[159,100117,9067],{"class":1146},[159,100119,1486],{"class":165},[159,100121,9072],{"class":1146},[159,100123,1492],{"class":165},[159,100125,100126],{"class":161,"line":1345},[159,100127,1508],{"class":165},[159,100129,100130],{"class":161,"line":1350},[159,100131,590],{"emptyLinePlaceholder":589},[159,100133,100134,100136,100138],{"class":161,"line":1764},[159,100135,99925],{"class":185},[159,100137,2482],{"class":169},[159,100139,1478],{"class":165},[159,100141,100142,100144,100146,100148,100150],{"class":161,"line":1769},[159,100143,1563],{"class":1146},[159,100145,1486],{"class":165},[159,100147,1596],{"class":1146},[159,100149,1662],{"class":1142},[159,100151,1492],{"class":165},[159,100153,100154],{"class":161,"line":1777},[159,100155,1508],{"class":165},[159,100157,100158],{"class":161,"line":1788},[159,100159,590],{"emptyLinePlaceholder":589},[159,100161,100162,100164,100166],{"class":161,"line":1802},[159,100163,99925],{"class":185},[159,100165,9347],{"class":185},[159,100167,1478],{"class":165},[159,100169,100170,100172,100174,100176,100178],{"class":161,"line":1815},[159,100171,1721],{"class":1146},[159,100173,1486],{"class":165},[159,100175,18723],{"class":1146},[159,100177,1571],{"class":1142},[159,100179,1492],{"class":165},[159,100181,100182,100184,100186,100188,100190],{"class":161,"line":1828},[159,100183,99992],{"class":1146},[159,100185,1486],{"class":165},[159,100187,1964],{"class":1146},[159,100189,1571],{"class":1142},[159,100191,1492],{"class":165},[159,100193,100194,100196,100198,100201],{"class":161,"line":1841},[159,100195,4322],{"class":1146},[159,100197,1486],{"class":165},[159,100199,100200],{"class":1146},"#666",[159,100202,1492],{"class":165},[159,100204,100205],{"class":161,"line":1852},[159,100206,1508],{"class":165},[159,100208,100209],{"class":161,"line":1866},[159,100210,590],{"emptyLinePlaceholder":589},[159,100212,100213,100215,100218],{"class":161,"line":1879},[159,100214,99925],{"class":185},[159,100216,100217],{"class":185}," .price",[159,100219,1478],{"class":165},[159,100221,100222,100224,100226,100228,100230],{"class":161,"line":1884},[159,100223,1721],{"class":1146},[159,100225,1486],{"class":165},[159,100227,5877],{"class":1146},[159,100229,1571],{"class":1142},[159,100231,1492],{"class":165},[159,100233,100234,100236,100238,100241],{"class":161,"line":1889},[159,100235,4322],{"class":1146},[159,100237,1486],{"class":165},[159,100239,100240],{"class":1146},"firebrick",[159,100242,1492],{"class":165},[159,100244,100245],{"class":161,"line":1899},[159,100246,1508],{"class":165},[159,100248,100249],{"class":161,"line":1912},[159,100250,590],{"emptyLinePlaceholder":589},[159,100252,100253,100255,100258],{"class":161,"line":1925},[159,100254,99925],{"class":185},[159,100256,100257],{"class":185}," .price::before",[159,100259,1478],{"class":165},[159,100261,100262,100265,100267,100270],{"class":161,"line":1956},[159,100263,100264],{"class":1146},"      content",[159,100266,1486],{"class":165},[159,100268,100269],{"class":192},"'￥'",[159,100271,1492],{"class":165},[159,100273,100274,100276,100278,100280,100282],{"class":161,"line":1971},[159,100275,1721],{"class":1146},[159,100277,1486],{"class":165},[159,100279,7678],{"class":1146},[159,100281,1571],{"class":1142},[159,100283,1492],{"class":165},[159,100285,100286],{"class":161,"line":1976},[159,100287,1508],{"class":165},[159,100289,100290],{"class":161,"line":1981},[159,100291,590],{"emptyLinePlaceholder":589},[159,100293,100294,100297],{"class":161,"line":1989},[159,100295,100296],{"class":185},"    .filter",[159,100298,1478],{"class":165},[159,100300,100301,100303,100305,100307],{"class":161,"line":2001},[159,100302,1818],{"class":1146},[159,100304,1486],{"class":165},[159,100306,1823],{"class":1146},[159,100308,1492],{"class":165},[159,100310,100311,100313,100315,100317,100319],{"class":161,"line":2006},[159,100312,1563],{"class":1146},[159,100314,1486],{"class":165},[159,100316,99874],{"class":1146},[159,100318,1571],{"class":1142},[159,100320,1492],{"class":165},[159,100322,100323,100325,100327,100329,100331],{"class":161,"line":2015},[159,100324,1497],{"class":1146},[159,100326,1486],{"class":165},[159,100328,1489],{"class":1146},[159,100330,1601],{"class":1146},[159,100332,1492],{"class":165},[159,100334,100335,100337,100339,100341,100343,100345],{"class":161,"line":2024},[159,100336,1483],{"class":1146},[159,100338,1486],{"class":165},[159,100340,4230],{"class":1146},[159,100342,1571],{"class":1142},[159,100344,99965],{"class":1146},[159,100346,100347],{"class":1142},"px\n",[159,100349,100350],{"class":161,"line":2029},[159,100351,1508],{"class":165},[159,100353,100354],{"class":161,"line":2038},[159,100355,590],{"emptyLinePlaceholder":589},[159,100357,100358,100360,100362],{"class":161,"line":2053},[159,100359,100296],{"class":185},[159,100361,7885],{"class":169},[159,100363,1478],{"class":165},[159,100365,100366,100368,100370,100372,100374,100376,100378],{"class":161,"line":2070},[159,100367,1483],{"class":1146},[159,100369,1486],{"class":165},[159,100371,1964],{"class":1146},[159,100373,1571],{"class":1142},[159,100375,10978],{"class":1146},[159,100377,1571],{"class":1142},[159,100379,1492],{"class":165},[159,100381,100382,100384,100386,100388],{"class":161,"line":2095},[159,100383,8755],{"class":1146},[159,100385,1486],{"class":165},[159,100387,8855],{"class":1146},[159,100389,1492],{"class":165},[159,100391,100392,100394,100396,100398],{"class":161,"line":2104},[159,100393,4322],{"class":1146},[159,100395,1486],{"class":165},[159,100397,100200],{"class":1146},[159,100399,1492],{"class":165},[159,100401,100402,100404,100406,100408],{"class":161,"line":2120},[159,100403,11019],{"class":1146},[159,100405,1486],{"class":165},[159,100407,1529],{"class":1146},[159,100409,1492],{"class":165},[159,100411,100412,100414,100416,100418,100420],{"class":161,"line":2134},[159,100413,8787],{"class":1146},[159,100415,1486],{"class":165},[159,100417,1739],{"class":1146},[159,100419,1571],{"class":1142},[159,100421,1492],{"class":165},[159,100423,100424],{"class":161,"line":2143},[159,100425,1508],{"class":165},[159,100427,100428],{"class":161,"line":2165},[159,100429,590],{"emptyLinePlaceholder":589},[159,100431,100432,100434,100436,100438],{"class":161,"line":2178},[159,100433,100296],{"class":185},[159,100435,7885],{"class":169},[159,100437,8941],{"class":185},[159,100439,1478],{"class":165},[159,100441,100442,100444,100446,100449],{"class":161,"line":2191},[159,100443,1682],{"class":1146},[159,100445,1486],{"class":165},[159,100447,100448],{"class":1146},"#05943c",[159,100450,1492],{"class":165},[159,100452,100453,100455,100457,100459],{"class":161,"line":2204},[159,100454,4322],{"class":1146},[159,100456,1486],{"class":165},[159,100458,7868],{"class":1146},[159,100460,1492],{"class":165},[159,100462,100463],{"class":161,"line":2217},[159,100464,1508],{"class":165},[159,100466,100467,100469,100471],{"class":161,"line":2230},[159,100468,254],{"class":165},[159,100470,1468],{"class":169},[159,100472,173],{"class":165},[159,100474,100475,100477,100479],{"class":161,"line":2243},[159,100476,264],{"class":165},[159,100478,949],{"class":169},[159,100480,173],{"class":165},[159,100482,100483],{"class":161,"line":2256},[159,100484,590],{"emptyLinePlaceholder":589},[159,100486,100487,100489,100491],{"class":161,"line":2266},[159,100488,166],{"class":165},[159,100490,170],{"class":169},[159,100492,173],{"class":165},[159,100494,100495,100497,100499,100501,100503,100506],{"class":161,"line":2275},[159,100496,179],{"class":165},[159,100498,182],{"class":169},[159,100500,186],{"class":185},[159,100502,189],{"class":165},[159,100504,100505],{"class":192},"\"filter\"",[159,100507,173],{"class":165},[159,100509,100510,100512,100514,100516,100518,100520,100523,100525,100527,100530,100532],{"class":161,"line":2284},[159,100511,2056],{"class":165},[159,100513,8085],{"class":169},[159,100515,8088],{"class":185},[159,100517,189],{"class":165},[159,100519,8093],{"class":192},[159,100521,100522],{"class":185}," data-index",[159,100524,189],{"class":165},[159,100526,680],{"class":192},[159,100528,100529],{"class":165},">0-100元\u003C\u002F",[159,100531,8085],{"class":169},[159,100533,173],{"class":165},[159,100535,100536,100538,100540,100542,100544,100546,100548,100550,100552,100555,100557],{"class":161,"line":2293},[159,100537,2056],{"class":165},[159,100539,8085],{"class":169},[159,100541,8088],{"class":185},[159,100543,189],{"class":165},[159,100545,8093],{"class":192},[159,100547,100522],{"class":185},[159,100549,189],{"class":165},[159,100551,708],{"class":192},[159,100553,100554],{"class":165},">100-300元\u003C\u002F",[159,100556,8085],{"class":169},[159,100558,173],{"class":165},[159,100560,100561,100563,100565,100567,100569,100571,100573,100575,100577,100580,100582],{"class":161,"line":2306},[159,100562,2056],{"class":165},[159,100564,8085],{"class":169},[159,100566,8088],{"class":185},[159,100568,189],{"class":165},[159,100570,8093],{"class":192},[159,100572,100522],{"class":185},[159,100574,189],{"class":165},[159,100576,728],{"class":192},[159,100578,100579],{"class":165},">300元以上\u003C\u002F",[159,100581,8085],{"class":169},[159,100583,173],{"class":165},[159,100585,100586,100588,100590,100592,100594,100596,100599,100601],{"class":161,"line":2330},[159,100587,2056],{"class":165},[159,100589,8085],{"class":169},[159,100591,8088],{"class":185},[159,100593,189],{"class":165},[159,100595,8093],{"class":192},[159,100597,100598],{"class":165},">全部区间\u003C\u002F",[159,100600,8085],{"class":169},[159,100602,173],{"class":165},[159,100604,100605,100607,100609],{"class":161,"line":2350},[159,100606,254],{"class":165},[159,100608,182],{"class":169},[159,100610,173],{"class":165},[159,100612,100613,100615,100617,100619,100621,100623],{"class":161,"line":2370},[159,100614,179],{"class":165},[159,100616,182],{"class":169},[159,100618,186],{"class":185},[159,100620,189],{"class":165},[159,100622,9651],{"class":192},[159,100624,173],{"class":165},[159,100626,100627],{"class":161,"line":2390},[159,100628,100629],{"class":1135},"    \u003C!-- \u003Cdiv class=\"item\">\n",[159,100631,100632],{"class":161,"line":2410},[159,100633,100634],{"class":1135},"      \u003Cimg src=\"\" alt=\"\">\n",[159,100636,100637],{"class":161,"line":2430},[159,100638,100639],{"class":1135},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[159,100641,100642],{"class":161,"line":2450},[159,100643,100644],{"class":1135},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[159,100646,100647],{"class":161,"line":2471},[159,100648,100649],{"class":1135},"    \u003C\u002Fdiv> -->\n",[159,100651,100652,100654,100656],{"class":161,"line":2477},[159,100653,254],{"class":165},[159,100655,182],{"class":169},[159,100657,173],{"class":165},[159,100659,100660,100662,100664],{"class":161,"line":2498},[159,100661,179],{"class":165},[159,100663,228],{"class":169},[159,100665,173],{"class":165},[159,100667,100668],{"class":161,"line":2518},[159,100669,100670],{"class":1135},"    \u002F\u002F 2. 初始化数据\n",[159,100672,100673,100675,100678,100680],{"class":161,"line":2539},[159,100674,1143],{"class":1142},[159,100676,100677],{"class":1146}," goodsList",[159,100679,1150],{"class":1142},[159,100681,2303],{"class":165},[159,100683,100684],{"class":161,"line":2561},[159,100685,100686],{"class":165},"      {\n",[159,100688,100689,100692,100695],{"class":161,"line":2573},[159,100690,100691],{"class":165},"        id: ",[159,100693,100694],{"class":192},"'4001172'",[159,100696,17070],{"class":165},[159,100698,100699,100702,100705],{"class":161,"line":2591},[159,100700,100701],{"class":165},"        name: ",[159,100703,100704],{"class":192},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[159,100706,17070],{"class":165},[159,100708,100709,100712,100715],{"class":161,"line":2602},[159,100710,100711],{"class":165},"        price: ",[159,100713,100714],{"class":192},"'289.00'",[159,100716,17070],{"class":165},[159,100718,100719,100722,100725],{"class":161,"line":2613},[159,100720,100721],{"class":165},"        picture: ",[159,100723,100724],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[159,100726,17070],{"class":165},[159,100728,100729],{"class":161,"line":2624},[159,100730,99192],{"class":165},[159,100732,100733],{"class":161,"line":2630},[159,100734,100686],{"class":165},[159,100736,100737,100739,100742],{"class":161,"line":2636},[159,100738,100691],{"class":165},[159,100740,100741],{"class":192},"'4001594'",[159,100743,17070],{"class":165},[159,100745,100746,100748,100751],{"class":161,"line":2642},[159,100747,100701],{"class":165},[159,100749,100750],{"class":192},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[159,100752,17070],{"class":165},[159,100754,100755,100757,100760],{"class":161,"line":2648},[159,100756,100711],{"class":165},[159,100758,100759],{"class":192},"'288.00'",[159,100761,17070],{"class":165},[159,100763,100764,100766,100769],{"class":161,"line":2674},[159,100765,100721],{"class":165},[159,100767,100768],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[159,100770,17070],{"class":165},[159,100772,100773],{"class":161,"line":2689},[159,100774,99192],{"class":165},[159,100776,100777],{"class":161,"line":2694},[159,100778,100686],{"class":165},[159,100780,100781,100783,100786],{"class":161,"line":2721},[159,100782,100691],{"class":165},[159,100784,100785],{"class":192},"'4001009'",[159,100787,17070],{"class":165},[159,100789,100790,100792,100795],{"class":161,"line":2726},[159,100791,100701],{"class":165},[159,100793,100794],{"class":192},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[159,100796,17070],{"class":165},[159,100798,100799,100801,100804],{"class":161,"line":2735},[159,100800,100711],{"class":165},[159,100802,100803],{"class":192},"'109.00'",[159,100805,17070],{"class":165},[159,100807,100808,100810,100813],{"class":161,"line":2744},[159,100809,100721],{"class":165},[159,100811,100812],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[159,100814,17070],{"class":165},[159,100816,100817],{"class":161,"line":2753},[159,100818,99192],{"class":165},[159,100820,100821],{"class":161,"line":2758},[159,100822,100686],{"class":165},[159,100824,100825,100827,100830],{"class":161,"line":3959},[159,100826,100691],{"class":165},[159,100828,100829],{"class":192},"'4001874'",[159,100831,17070],{"class":165},[159,100833,100834,100836,100839],{"class":161,"line":3968},[159,100835,100701],{"class":165},[159,100837,100838],{"class":192},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[159,100840,17070],{"class":165},[159,100842,100843,100845,100848],{"class":161,"line":3977},[159,100844,100711],{"class":165},[159,100846,100847],{"class":192},"'488.00'",[159,100849,17070],{"class":165},[159,100851,100852,100854,100857],{"class":161,"line":3982},[159,100853,100721],{"class":165},[159,100855,100856],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[159,100858,17070],{"class":165},[159,100860,100861],{"class":161,"line":6843},[159,100862,99192],{"class":165},[159,100864,100865],{"class":161,"line":6849},[159,100866,100686],{"class":165},[159,100868,100869,100871,100874],{"class":161,"line":6855},[159,100870,100691],{"class":165},[159,100872,100873],{"class":192},"'4001649'",[159,100875,17070],{"class":165},[159,100877,100878,100880,100883],{"class":161,"line":6861},[159,100879,100701],{"class":165},[159,100881,100882],{"class":192},"'大师监制龙泉青瓷茶叶罐'",[159,100884,17070],{"class":165},[159,100886,100887,100889,100892],{"class":161,"line":6867},[159,100888,100711],{"class":165},[159,100890,100891],{"class":192},"'139.00'",[159,100893,17070],{"class":165},[159,100895,100896,100898,100901],{"class":161,"line":6873},[159,100897,100721],{"class":165},[159,100899,100900],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[159,100902,17070],{"class":165},[159,100904,100905],{"class":161,"line":6879},[159,100906,99192],{"class":165},[159,100908,100909],{"class":161,"line":6885},[159,100910,100686],{"class":165},[159,100912,100913,100915,100918],{"class":161,"line":6890},[159,100914,100691],{"class":165},[159,100916,100917],{"class":192},"'3997185'",[159,100919,17070],{"class":165},[159,100921,100922,100924,100927],{"class":161,"line":6896},[159,100923,100701],{"class":165},[159,100925,100926],{"class":192},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[159,100928,17070],{"class":165},[159,100930,100931,100933,100936],{"class":161,"line":6902},[159,100932,100711],{"class":165},[159,100934,100935],{"class":192},"'108.00'",[159,100937,17070],{"class":165},[159,100939,100940,100942,100945],{"class":161,"line":6908},[159,100941,100721],{"class":165},[159,100943,100944],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[159,100946,17070],{"class":165},[159,100948,100949],{"class":161,"line":6914},[159,100950,99192],{"class":165},[159,100952,100953],{"class":161,"line":6920},[159,100954,100686],{"class":165},[159,100956,100957,100959,100962],{"class":161,"line":6926},[159,100958,100691],{"class":165},[159,100960,100961],{"class":192},"'3997403'",[159,100963,17070],{"class":165},[159,100965,100966,100968,100971],{"class":161,"line":6932},[159,100967,100701],{"class":165},[159,100969,100970],{"class":192},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[159,100972,17070],{"class":165},[159,100974,100975,100977,100980],{"class":161,"line":6938},[159,100976,100711],{"class":165},[159,100978,100979],{"class":192},"'100.00'",[159,100981,17070],{"class":165},[159,100983,100984,100986,100989],{"class":161,"line":6944},[159,100985,100721],{"class":165},[159,100987,100988],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[159,100990,17070],{"class":165},[159,100992,100993],{"class":161,"line":6949},[159,100994,99192],{"class":165},[159,100996,100997],{"class":161,"line":6955},[159,100998,100686],{"class":165},[159,101000,101001,101003,101006],{"class":161,"line":6961},[159,101002,100691],{"class":165},[159,101004,101005],{"class":192},"'3998274'",[159,101007,17070],{"class":165},[159,101009,101010,101012,101015],{"class":161,"line":6967},[159,101011,100701],{"class":165},[159,101013,101014],{"class":192},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[159,101016,17070],{"class":165},[159,101018,101019,101021,101023],{"class":161,"line":6973},[159,101020,100711],{"class":165},[159,101022,100891],{"class":192},[159,101024,17070],{"class":165},[159,101026,101027,101029,101032],{"class":161,"line":6979},[159,101028,100721],{"class":165},[159,101030,101031],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[159,101033,17070],{"class":165},[159,101035,101036],{"class":161,"line":6985},[159,101037,99192],{"class":165},[159,101039,101040],{"class":161,"line":6991},[159,101041,2474],{"class":165},[159,101043,101044],{"class":161,"line":6997},[159,101045,590],{"emptyLinePlaceholder":589},[159,101047,101048],{"class":161,"line":7003},[159,101049,101050],{"class":1135},"    \u002F\u002F 1.渲染函数\n",[159,101052,101053,101055,101057,101059,101061],{"class":161,"line":7009},[159,101054,17167],{"class":1142},[159,101056,17170],{"class":185},[159,101058,1159],{"class":165},[159,101060,17260],{"class":8765},[159,101062,1262],{"class":165},[159,101064,101065],{"class":161,"line":7015},[159,101066,101067],{"class":1135},"      \u002F\u002F 声明空字符串\n",[159,101069,101070,101073,101076,101078],{"class":161,"line":7021},[159,101071,101072],{"class":1142},"      let",[159,101074,101075],{"class":165}," str ",[159,101077,189],{"class":1142},[159,101079,17188],{"class":192},[159,101081,101082],{"class":161,"line":7026},[159,101083,17193],{"class":1135},[159,101085,101086,101088,101091,101093,101096,101099],{"class":161,"line":7031},[159,101087,4923],{"class":165},[159,101089,101090],{"class":185},"forEach",[159,101092,1159],{"class":165},[159,101094,101095],{"class":8765},"item",[159,101097,101098],{"class":1142}," =>",[159,101100,1478],{"class":165},[159,101102,101103,101105,101108,101111,101113,101116,101118,101121,101124,101126],{"class":161,"line":7037},[159,101104,8301],{"class":1142},[159,101106,101107],{"class":165}," { ",[159,101109,101110],{"class":1146},"name",[159,101112,1939],{"class":165},[159,101114,101115],{"class":1146},"price",[159,101117,1939],{"class":165},[159,101119,101120],{"class":1146},"picture",[159,101122,101123],{"class":165}," } ",[159,101125,189],{"class":1142},[159,101127,101128],{"class":165}," item\n",[159,101130,101131,101134,101136],{"class":161,"line":7043},[159,101132,101133],{"class":165},"        str ",[159,101135,33073],{"class":1142},[159,101137,17252],{"class":192},[159,101139,101140],{"class":161,"line":7049},[159,101141,101142],{"class":192},"          \u003Cdiv class=\"item\">\n",[159,101144,101145,101148,101150],{"class":161,"line":7054},[159,101146,101147],{"class":192},"            \u003Cimg src=\"${",[159,101149,101120],{"class":165},[159,101151,101152],{"class":192},"}\" alt=\"\">\n",[159,101154,101155,101158,101160],{"class":161,"line":7060},[159,101156,101157],{"class":192},"            \u003Cp class=\"name\">${",[159,101159,101110],{"class":165},[159,101161,101162],{"class":192},"}\u003C\u002Fp>\n",[159,101164,101165,101168,101170],{"class":161,"line":7066},[159,101166,101167],{"class":192},"            \u003Cp class=\"price\">${",[159,101169,101115],{"class":165},[159,101171,101162],{"class":192},[159,101173,101174],{"class":161,"line":7072},[159,101175,101176],{"class":192},"          \u003C\u002Fdiv>\n",[159,101178,101179],{"class":161,"line":7078},[159,101180,101181],{"class":192},"        `\n",[159,101183,101184],{"class":161,"line":7084},[159,101185,11872],{"class":165},[159,101187,101188],{"class":161,"line":7089},[159,101189,101190],{"class":1135},"      \u002F\u002F 追加给List\n",[159,101192,101193,101195,101197,101199,101202,101204,101206],{"class":161,"line":7095},[159,101194,2651],{"class":165},[159,101196,1156],{"class":185},[159,101198,1159],{"class":165},[159,101200,101201],{"class":192},"'.list'",[159,101203,21375],{"class":165},[159,101205,189],{"class":1142},[159,101207,21096],{"class":165},[159,101209,101210],{"class":161,"line":7100},[159,101211,1508],{"class":165},[159,101213,101214],{"class":161,"line":7105},[159,101215,101216],{"class":1135},"    \u002F\u002F 页面一打开就需要渲染\n",[159,101218,101219,101222],{"class":161,"line":7110},[159,101220,101221],{"class":185},"    render",[159,101223,101224],{"class":165},"(goodsList)\n",[159,101226,101227],{"class":161,"line":7115},[159,101228,101229],{"class":1135},"    \u002F\u002F 2.过滤筛选\n",[159,101231,101232,101234,101236,101238,101241,101243,101245,101247,101249,101251,101253,101255],{"class":161,"line":7120},[159,101233,13456],{"class":165},[159,101235,1156],{"class":185},[159,101237,1159],{"class":165},[159,101239,101240],{"class":192},"'.filter'",[159,101242,13019],{"class":165},[159,101244,4724],{"class":185},[159,101246,1159],{"class":165},[159,101248,4729],{"class":192},[159,101250,1939],{"class":165},[159,101252,14038],{"class":8765},[159,101254,101098],{"class":1142},[159,101256,1478],{"class":165},[159,101258,101259],{"class":161,"line":7125},[159,101260,101261],{"class":1135},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[159,101263,101264,101266,101268,101271,101273,101275,101277,101279],{"class":161,"line":7131},[159,101265,5145],{"class":1142},[159,101267,101107],{"class":165},[159,101269,101270],{"class":1146},"tagName",[159,101272,1939],{"class":165},[159,101274,55056],{"class":1146},[159,101276,101123],{"class":165},[159,101278,189],{"class":1142},[159,101280,101281],{"class":165}," e.target\n",[159,101283,101284],{"class":161,"line":7137},[159,101285,101286],{"class":1135},"      \u002F\u002F 判断\n",[159,101288,101289,101291,101293,101295,101297],{"class":161,"line":7143},[159,101290,1250],{"class":1142},[159,101292,14104],{"class":165},[159,101294,1256],{"class":1142},[159,101296,15326],{"class":192},[159,101298,1262],{"class":165},[159,101300,101301],{"class":161,"line":7149},[159,101302,101303],{"class":1135},"        \u002F\u002F console.log(11)\n",[159,101305,101306],{"class":161,"line":7155},[159,101307,101308],{"class":1135},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[159,101310,101311],{"class":161,"line":7161},[159,101312,101313],{"class":1135},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[159,101315,101316,101318,101320,101322],{"class":161,"line":7167},[159,101317,75165],{"class":1142},[159,101319,75168],{"class":165},[159,101321,189],{"class":1142},[159,101323,101324],{"class":165}," goodsList\n",[159,101326,101327,101329,101332,101334,101337],{"class":161,"line":7173},[159,101328,17003],{"class":1142},[159,101330,101331],{"class":165}," (dataset.index ",[159,101333,1256],{"class":1142},[159,101335,101336],{"class":192}," '1'",[159,101338,1262],{"class":165},[159,101340,101341,101344,101346,101349,101352,101354,101356,101358,101361,101363,101365,101368,101370,101372,101374],{"class":161,"line":7179},[159,101342,101343],{"class":165},"          arr ",[159,101345,189],{"class":1142},[159,101347,101348],{"class":165}," goodsList.",[159,101350,101351],{"class":185},"filter",[159,101353,1159],{"class":165},[159,101355,101095],{"class":8765},[159,101357,101098],{"class":1142},[159,101359,101360],{"class":165}," item.price ",[159,101362,3822],{"class":1142},[159,101364,1259],{"class":1146},[159,101366,101367],{"class":1142}," &&",[159,101369,101360],{"class":165},[159,101371,25263],{"class":1142},[159,101373,29369],{"class":1146},[159,101375,1165],{"class":165},[159,101377,101378,101381,101383,101385,101387,101389,101392],{"class":161,"line":7184},[159,101379,101380],{"class":165},"        } ",[159,101382,25364],{"class":1142},[159,101384,25367],{"class":1142},[159,101386,101331],{"class":165},[159,101388,1256],{"class":1142},[159,101390,101391],{"class":192}," '2'",[159,101393,1262],{"class":165},[159,101395,101396,101398,101400,101402,101404,101406,101408,101410,101412,101414,101416,101418,101420,101422,101425],{"class":161,"line":7189},[159,101397,101343],{"class":165},[159,101399,189],{"class":1142},[159,101401,101348],{"class":165},[159,101403,101351],{"class":185},[159,101405,1159],{"class":165},[159,101407,101095],{"class":8765},[159,101409,101098],{"class":1142},[159,101411,101360],{"class":165},[159,101413,3822],{"class":1142},[159,101415,29369],{"class":1146},[159,101417,101367],{"class":1142},[159,101419,101360],{"class":165},[159,101421,25263],{"class":1142},[159,101423,101424],{"class":1146}," 300",[159,101426,1165],{"class":165},[159,101428,101429,101431,101433,101435,101437,101439,101442],{"class":161,"line":7195},[159,101430,101380],{"class":165},[159,101432,25364],{"class":1142},[159,101434,25367],{"class":1142},[159,101436,101331],{"class":165},[159,101438,1256],{"class":1142},[159,101440,101441],{"class":192}," '3'",[159,101443,1262],{"class":165},[159,101445,101446,101448,101450,101452,101454,101456,101458,101460,101462,101464,101466],{"class":161,"line":7201},[159,101447,101343],{"class":165},[159,101449,189],{"class":1142},[159,101451,101348],{"class":165},[159,101453,101351],{"class":185},[159,101455,1159],{"class":165},[159,101457,101095],{"class":8765},[159,101459,101098],{"class":1142},[159,101461,101360],{"class":165},[159,101463,3822],{"class":1142},[159,101465,101424],{"class":1146},[159,101467,1165],{"class":165},[159,101469,101470],{"class":161,"line":7207},[159,101471,7530],{"class":165},[159,101473,101474],{"class":161,"line":7213},[159,101475,101476],{"class":1135},"        \u002F\u002F 渲染函数\n",[159,101478,101479,101481],{"class":161,"line":7219},[159,101480,17494],{"class":185},[159,101482,20861],{"class":165},[159,101484,101485],{"class":161,"line":7224},[159,101486,1308],{"class":165},[159,101488,101489],{"class":161,"line":7230},[159,101490,590],{"emptyLinePlaceholder":589},[159,101492,101493],{"class":161,"line":7236},[159,101494,4863],{"class":165},[159,101496,101497,101499,101501],{"class":161,"line":7242},[159,101498,254],{"class":165},[159,101500,228],{"class":169},[159,101502,173],{"class":165},[159,101504,101505,101507,101509],{"class":161,"line":7248},[159,101506,264],{"class":165},[159,101508,170],{"class":169},[159,101510,173],{"class":165},[159,101512,101513],{"class":161,"line":7254},[159,101514,590],{"emptyLinePlaceholder":589},[159,101516,101517,101519,101521],{"class":161,"line":7260},[159,101518,264],{"class":165},[159,101520,522],{"class":169},[159,101522,173],{"class":165},[37,101524,101526],{"id":101525},"_410-深入了解对象","4.10 深入了解对象",[42,101528,101530],{"id":101529},"_4101-创建对象","4.10.1 创建对象",[14,101532,101533],{},[23,101534],{"alt":25,"src":101535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,101537,101538],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[42,101540,101542],{"id":101541},"_4102-构造函数","4.10.2 构造函数",[14,101544,101545,101548],{},[61,101546,101547],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,101550,101551,101554],{},[61,101552,101553],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[151,101556,101558],{"className":520,"code":101557,"language":522,"meta":25,"style":25},"\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",[49,101559,101560,101568,101573,101594,101607,101619,101631,101635,101640,101667,101672,101699],{"__ignoreMap":25},[159,101561,101562,101564,101566],{"class":161,"line":162},[159,101563,166],{"class":165},[159,101565,228],{"class":169},[159,101567,173],{"class":165},[159,101569,101570],{"class":161,"line":176},[159,101571,101572],{"class":1135},"\u002F\u002F例：\n",[159,101574,101575,101577,101580,101582,101584,101586,101588,101590,101592],{"class":161,"line":203},[159,101576,1215],{"class":1142},[159,101578,101579],{"class":185}," Pig",[159,101581,1159],{"class":165},[159,101583,101110],{"class":8765},[159,101585,24233],{"class":165},[159,101587,17307],{"class":8765},[159,101589,24233],{"class":165},[159,101591,17324],{"class":8765},[159,101593,1262],{"class":165},[159,101595,101596,101599,101602,101604],{"class":161,"line":223},[159,101597,101598],{"class":1146},"    this",[159,101600,101601],{"class":165},".name",[159,101603,189],{"class":1142},[159,101605,101606],{"class":165},"name\n",[159,101608,101609,101611,101614,101616],{"class":161,"line":233},[159,101610,101598],{"class":1146},[159,101612,101613],{"class":165},".age",[159,101615,189],{"class":1142},[159,101617,101618],{"class":165},"age\n",[159,101620,101621,101623,101626,101628],{"class":161,"line":239},[159,101622,101598],{"class":1146},[159,101624,101625],{"class":165},".gender",[159,101627,189],{"class":1142},[159,101629,101630],{"class":165},"gender    \n",[159,101632,101633],{"class":161,"line":245},[159,101634,15685],{"class":165},[159,101636,101637],{"class":161,"line":251},[159,101638,101639],{"class":1135},"\u002F\u002F创建佩奇对象\n",[159,101641,101642,101644,101647,101649,101651,101653,101656,101658,101660,101662,101665],{"class":161,"line":261},[159,101643,18326],{"class":1142},[159,101645,101646],{"class":1146}," Peppa",[159,101648,35288],{"class":1142},[159,101650,101579],{"class":185},[159,101652,1159],{"class":165},[159,101654,101655],{"class":192},"'佩奇'",[159,101657,24233],{"class":165},[159,101659,7907],{"class":1146},[159,101661,24233],{"class":165},[159,101663,101664],{"class":192},"'女'",[159,101666,1165],{"class":165},[159,101668,101669],{"class":161,"line":603},[159,101670,101671],{"class":1135},"\u002F\u002F创建乔治对象\n",[159,101673,101674,101676,101679,101681,101683,101685,101688,101690,101692,101694,101697],{"class":161,"line":621},[159,101675,18326],{"class":1142},[159,101677,101678],{"class":1146}," George",[159,101680,35288],{"class":1142},[159,101682,101579],{"class":185},[159,101684,1159],{"class":165},[159,101686,101687],{"class":192},"'乔治'",[159,101689,24233],{"class":165},[159,101691,23949],{"class":1146},[159,101693,24233],{"class":165},[159,101695,101696],{"class":192},"'男'",[159,101698,1165],{"class":165},[159,101700,101701,101703,101705],{"class":161,"line":634},[159,101702,264],{"class":165},[159,101704,228],{"class":169},[159,101706,173],{"class":165},[14,101708,101709],{},[23,101710],{"alt":25,"src":101711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,101713,101714],{},[23,101715],{"alt":25,"src":101716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,101718,101719],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,101721,101722],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,101724,101725],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,101727,101728],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,101730,101731],{},"这里用等号是因为：对象.属性=值",[14,101733,101734],{},"①利用对象字面量创建对象",[14,101736,101737],{},"const o={",[14,101739,101740],{},"name:'pink'",[14,101742,101743],{},"} ②利用new Object创建对象",[14,101745,101746],{},"const o=new Object({name:'pink'})",[14,101748,101749],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,101751,101752],{},"构造函数创建对象的执行过程：",[14,101754,101755],{},[23,101756],{"alt":25,"src":101757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[42,101759,101761],{"id":101760},"_4103-实例成员","4.10.3 实例成员",[14,101763,101764],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[134,101766,101767,101770,101773],{},[106,101768,101769],{},"实例对象的属性和方法即为实例成员",[106,101771,101772],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[106,101774,101775],{},"构造函数创建的实例对象彼此独立互不影响",[42,101777,101779],{"id":101778},"_4104-静态成员","4.10.4 静态成员",[14,101781,101782],{},[23,101783],{"alt":25,"src":101784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,101786,101787],{},"静态成员有Date.now() Math.PI Math.random()",[14,101789,101790],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,101792,101793],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,101795,101796],{},"function Pig(name) n {",[14,101798,101799],{},"this.name=name",[14,101801,886],{},[14,101803,101804],{},"Pig.eyes=2",[14,101806,101807],{},"Pig.sayHai=function () { console.log(this) }",[14,101809,101810],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,101812,101813],{},"console.log(Pig.eyes) \u002F\u002F2",[14,101815,10547],{},[134,101817,101818,101821,101824,101827,101830],{},[106,101819,101820],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[106,101822,101823],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[106,101825,101826],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[106,101828,101829],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[106,101831,101832],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,101834,101835],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[42,101837,101839],{"id":101838},"_4105-内置构造函数","4.10.5 内置构造函数",[14,101841,101842],{},"内置构造函数包含：",[14,101844,101845],{},[23,101846],{"alt":25,"src":101847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,101849,101850],{},[23,101851],{"alt":25,"src":101852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,101854,101855],{},"这些基本数据类型，js对他们进行了包装",[228,101857,101858],{},"\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",[326,101860,101862],{"id":101861},"_41051-object","4.10.5.1 Object",[14,101864,101865],{},"Object 是内置的构造函数，用于创建普通对象",[14,101867,101868],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[151,101870,101872],{"className":520,"code":101871,"language":522,"meta":25,"style":25},"const user=new Object({name:'小明',age:15})\n",[49,101873,101874],{"__ignoreMap":25},[159,101875,101876],{"class":161,"line":162},[159,101877,101871],{"class":165},[14,101879,101880],{},"三个常用的静态方法：",[46436,101882,101884],{"id":101883},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,101886,101887],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,101889,101890],{},[23,101891],{"alt":25,"src":101892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,101894,101895],{},[23,101896],{"alt":25,"src":101897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[151,101899,101901],{"className":153,"code":101900,"language":155,"meta":25,"style":25},"\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",[49,101902,101903,101911,101919,101924,101929,101934,101939,101944,101949,101957],{"__ignoreMap":25},[159,101904,101905,101907,101909],{"class":161,"line":162},[159,101906,166],{"class":165},[159,101908,170],{"class":169},[159,101910,173],{"class":165},[159,101912,101913,101915,101917],{"class":161,"line":176},[159,101914,179],{"class":165},[159,101916,228],{"class":169},[159,101918,173],{"class":165},[159,101920,101921],{"class":161,"line":203},[159,101922,101923],{"class":165},"    const o = { name: 'pink', age: 6 }\n",[159,101925,101926],{"class":161,"line":223},[159,101927,101928],{"class":165},"    \u002F\u002F 获得所有属性名\n",[159,101930,101931],{"class":161,"line":233},[159,101932,101933],{"class":165},"    const arr = Object.keys(o)\n",[159,101935,101936],{"class":161,"line":239},[159,101937,101938],{"class":165},"    console.log(arr)\n",[159,101940,101941],{"class":161,"line":245},[159,101942,101943],{"class":165},"    \u002F\u002F 获得所有属性值\n",[159,101945,101946],{"class":161,"line":251},[159,101947,101948],{"class":165},"    console.log(Object.values(o))\n",[159,101950,101951,101953,101955],{"class":161,"line":261},[159,101952,254],{"class":165},[159,101954,228],{"class":169},[159,101956,173],{"class":165},[159,101958,101959,101961,101963],{"class":161,"line":603},[159,101960,264],{"class":165},[159,101962,170],{"class":169},[159,101964,173],{"class":165},[46436,101966,101968],{"id":101967},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,101970,101971],{},"Object.assign(oo,o)",[14,101973,101974],{},"后的东西添加给前 是追加",[14,101976,101977],{},[23,101978],{"alt":25,"src":101979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,101981,101982],{},[23,101983],{"alt":25,"src":101984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[151,101986,101988],{"className":153,"code":101987,"language":155,"meta":25,"style":25},"\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",[49,101989,101990,101998,102006,102010,102014,102018,102022,102026,102030,102035,102040,102045,102050,102055,102063],{"__ignoreMap":25},[159,101991,101992,101994,101996],{"class":161,"line":162},[159,101993,166],{"class":165},[159,101995,170],{"class":169},[159,101997,173],{"class":165},[159,101999,102000,102002,102004],{"class":161,"line":176},[159,102001,179],{"class":165},[159,102003,228],{"class":169},[159,102005,173],{"class":165},[159,102007,102008],{"class":161,"line":203},[159,102009,101923],{"class":165},[159,102011,102012],{"class":161,"line":223},[159,102013,101928],{"class":165},[159,102015,102016],{"class":161,"line":233},[159,102017,101933],{"class":165},[159,102019,102020],{"class":161,"line":239},[159,102021,101938],{"class":165},[159,102023,102024],{"class":161,"line":245},[159,102025,101943],{"class":165},[159,102027,102028],{"class":161,"line":251},[159,102029,101948],{"class":165},[159,102031,102032],{"class":161,"line":261},[159,102033,102034],{"class":165},"    const oo = {}\n",[159,102036,102037],{"class":161,"line":603},[159,102038,102039],{"class":165},"    Object.assign(oo, o)\n",[159,102041,102042],{"class":161,"line":621},[159,102043,102044],{"class":165},"    console.log(oo)\n",[159,102046,102047],{"class":161,"line":634},[159,102048,102049],{"class":165},"    Object.assign(o, { gender: '女' })\n",[159,102051,102052],{"class":161,"line":640},[159,102053,102054],{"class":165},"    console.log(o)\n",[159,102056,102057,102059,102061],{"class":161,"line":1075},[159,102058,254],{"class":165},[159,102060,228],{"class":169},[159,102062,173],{"class":165},[159,102064,102065,102067,102069],{"class":161,"line":1081},[159,102066,264],{"class":165},[159,102068,170],{"class":169},[159,102070,173],{"class":165},[14,102072,102073],{},[23,102074],{"alt":25,"src":102075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[326,102077,102079],{"id":102078},"_41052-array","4.10.5.2 Array",[14,102081,102082],{},"Array 是内置的构造函数，用于创建数组",[14,102084,102085],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[151,102087,102089],{"className":520,"code":102088,"language":522,"meta":25,"style":25},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[49,102090,102091,102096],{"__ignoreMap":25},[159,102092,102093],{"class":161,"line":162},[159,102094,102095],{"class":165},"const arr=new Array(3,5)\n",[159,102097,102098],{"class":161,"line":176},[159,102099,102100],{"class":165},"console.log(arr)  \u002F\u002F[3,5]\n",[14,102102,102103],{},"Array的实例方法，这个方法是实例成员",[14,102105,102106],{},[23,102107],{"alt":25,"src":102108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[46436,102110,102112],{"id":102111},"_410521-reduce","4.10.5.2.1 reduce",[14,102114,102115],{},[23,102116],{"alt":25,"src":102117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[151,102119,102121],{"className":153,"code":102120,"language":155,"meta":25,"style":25},"\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",[49,102122,102123,102131,102139,102144,102149,102154,102159,102163,102168,102173,102178,102182,102187,102192,102196,102201,102206,102211,102219],{"__ignoreMap":25},[159,102124,102125,102127,102129],{"class":161,"line":162},[159,102126,166],{"class":165},[159,102128,170],{"class":169},[159,102130,173],{"class":165},[159,102132,102133,102135,102137],{"class":161,"line":176},[159,102134,179],{"class":165},[159,102136,228],{"class":169},[159,102138,173],{"class":165},[159,102140,102141],{"class":161,"line":203},[159,102142,102143],{"class":165},"    const arr = [1, 5, 8]\n",[159,102145,102146],{"class":161,"line":223},[159,102147,102148],{"class":165},"    \u002F\u002F 1.没有初始值\n",[159,102150,102151],{"class":161,"line":233},[159,102152,102153],{"class":165},"    const total = arr.reduce(function (prev, current) {\n",[159,102155,102156],{"class":161,"line":239},[159,102157,102158],{"class":165},"      return prev + current\n",[159,102160,102161],{"class":161,"line":245},[159,102162,4863],{"class":165},[159,102164,102165],{"class":161,"line":251},[159,102166,102167],{"class":165},"    console.log(total)   \u002F\u002F14\n",[159,102169,102170],{"class":161,"line":261},[159,102171,102172],{"class":165},"    \u002F\u002F 2.有初始值\n",[159,102174,102175],{"class":161,"line":603},[159,102176,102177],{"class":165},"    const total1 = arr.reduce(function (prev, current) {\n",[159,102179,102180],{"class":161,"line":621},[159,102181,102158],{"class":165},[159,102183,102184],{"class":161,"line":634},[159,102185,102186],{"class":165},"    }, 10)\n",[159,102188,102189],{"class":161,"line":640},[159,102190,102191],{"class":165},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[159,102193,102194],{"class":161,"line":1075},[159,102195,590],{"emptyLinePlaceholder":589},[159,102197,102198],{"class":161,"line":1081},[159,102199,102200],{"class":165},"    \u002F\u002F 3.箭头函数写法\n",[159,102202,102203],{"class":161,"line":1091},[159,102204,102205],{"class":165},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[159,102207,102208],{"class":161,"line":1100},[159,102209,102210],{"class":165},"    console.log(total2)   \u002F\u002F24\n",[159,102212,102213,102215,102217],{"class":161,"line":1123},[159,102214,254],{"class":165},[159,102216,228],{"class":169},[159,102218,173],{"class":165},[159,102220,102221,102223,102225],{"class":161,"line":1132},[159,102222,264],{"class":165},[159,102224,170],{"class":169},[159,102226,173],{"class":165},[14,102228,102229],{},"执行过程：",[134,102231,102232,102235,102238],{},[106,102233,102234],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[106,102236,102237],{},"每一次循环，把返回值给作为下一次循环的上一次值",[106,102239,102240],{},"如果有起始值，则起始值作为上一次值",[151,102242,102244],{"className":153,"code":102243,"language":155,"meta":25,"style":25},"\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",[49,102245,102246,102254,102262,102266,102270,102274,102278,102282,102286,102291,102296,102301,102306,102311,102315,102319,102323,102327,102331,102335,102340,102344,102349,102353,102358,102363,102367,102371,102375,102383],{"__ignoreMap":25},[159,102247,102248,102250,102252],{"class":161,"line":162},[159,102249,166],{"class":165},[159,102251,170],{"class":169},[159,102253,173],{"class":165},[159,102255,102256,102258,102260],{"class":161,"line":176},[159,102257,179],{"class":165},[159,102259,228],{"class":169},[159,102261,173],{"class":165},[159,102263,102264],{"class":161,"line":203},[159,102265,102143],{"class":165},[159,102267,102268],{"class":161,"line":223},[159,102269,102148],{"class":165},[159,102271,102272],{"class":161,"line":233},[159,102273,102153],{"class":165},[159,102275,102276],{"class":161,"line":239},[159,102277,102158],{"class":165},[159,102279,102280],{"class":161,"line":245},[159,102281,4863],{"class":165},[159,102283,102284],{"class":161,"line":251},[159,102285,102167],{"class":165},[159,102287,102288],{"class":161,"line":261},[159,102289,102290],{"class":165},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[159,102292,102293],{"class":161,"line":603},[159,102294,102295],{"class":165},"    \u002F\u002F     1              5                    6\n",[159,102297,102298],{"class":161,"line":621},[159,102299,102300],{"class":165},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[159,102302,102303],{"class":161,"line":634},[159,102304,102305],{"class":165},"    \u002F\u002F     6              8                    14\n",[159,102307,102308],{"class":161,"line":640},[159,102309,102310],{"class":165},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[159,102312,102313],{"class":161,"line":1075},[159,102314,102172],{"class":165},[159,102316,102317],{"class":161,"line":1081},[159,102318,102177],{"class":165},[159,102320,102321],{"class":161,"line":1091},[159,102322,102158],{"class":165},[159,102324,102325],{"class":161,"line":1100},[159,102326,102186],{"class":165},[159,102328,102329],{"class":161,"line":1123},[159,102330,102191],{"class":165},[159,102332,102333],{"class":161,"line":1132},[159,102334,102290],{"class":165},[159,102336,102337],{"class":161,"line":1139},[159,102338,102339],{"class":165},"    \u002F\u002F     10             1                     11\n",[159,102341,102342],{"class":161,"line":1168},[159,102343,102300],{"class":165},[159,102345,102346],{"class":161,"line":1174},[159,102347,102348],{"class":165},"    \u002F\u002F     11             5                    16\n",[159,102350,102351],{"class":161,"line":1180},[159,102352,102300],{"class":165},[159,102354,102355],{"class":161,"line":1194},[159,102356,102357],{"class":165},"    \u002F\u002F     16             8                    24\n",[159,102359,102360],{"class":161,"line":1200},[159,102361,102362],{"class":165},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[159,102364,102365],{"class":161,"line":1221},[159,102366,102200],{"class":165},[159,102368,102369],{"class":161,"line":1230},[159,102370,102205],{"class":165},[159,102372,102373],{"class":161,"line":1247},[159,102374,102210],{"class":165},[159,102376,102377,102379,102381],{"class":161,"line":1265},[159,102378,254],{"class":165},[159,102380,228],{"class":169},[159,102382,173],{"class":165},[159,102384,102385,102387,102389],{"class":161,"line":1277},[159,102386,264],{"class":165},[159,102388,170],{"class":169},[159,102390,173],{"class":165},[46436,102392,102394],{"id":102393},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,102396,102397],{},[23,102398],{"alt":25,"src":102399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[151,102401,102403],{"className":153,"code":102402,"language":155,"meta":25,"style":25},"\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",[49,102404,102405,102413,102421,102426,102431,102436,102441,102445,102450,102455,102460,102465,102470,102475,102479,102484,102488,102493,102501],{"__ignoreMap":25},[159,102406,102407,102409,102411],{"class":161,"line":162},[159,102408,166],{"class":165},[159,102410,170],{"class":169},[159,102412,173],{"class":165},[159,102414,102415,102417,102419],{"class":161,"line":176},[159,102416,179],{"class":165},[159,102418,228],{"class":169},[159,102420,173],{"class":165},[159,102422,102423],{"class":161,"line":203},[159,102424,102425],{"class":165},"    const arr = [\n",[159,102427,102428],{"class":161,"line":223},[159,102429,102430],{"class":165},"      { name: '张三', salary: 10000 },\n",[159,102432,102433],{"class":161,"line":233},[159,102434,102435],{"class":165},"      { name: '李四', salary: 10000 },\n",[159,102437,102438],{"class":161,"line":239},[159,102439,102440],{"class":165},"      { name: '王五', salary: 10000 }\n",[159,102442,102443],{"class":161,"line":245},[159,102444,2474],{"class":165},[159,102446,102447],{"class":161,"line":251},[159,102448,102449],{"class":165},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[159,102451,102452],{"class":161,"line":261},[159,102453,102454],{"class":165},"    \u002F\u002F prev是累计值\n",[159,102456,102457],{"class":161,"line":603},[159,102458,102459],{"class":165},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[159,102461,102462],{"class":161,"line":621},[159,102463,102464],{"class":165},"    console.log(total)\n",[159,102466,102467],{"class":161,"line":634},[159,102468,102469],{"class":165},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[159,102471,102472],{"class":161,"line":640},[159,102473,102474],{"class":165},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[159,102476,102477],{"class":161,"line":1075},[159,102478,102469],{"class":165},[159,102480,102481],{"class":161,"line":1081},[159,102482,102483],{"class":165},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[159,102485,102486],{"class":161,"line":1091},[159,102487,102469],{"class":165},[159,102489,102490],{"class":161,"line":1100},[159,102491,102492],{"class":165},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[159,102494,102495,102497,102499],{"class":161,"line":1123},[159,102496,254],{"class":165},[159,102498,228],{"class":169},[159,102500,173],{"class":165},[159,102502,102503,102505,102507],{"class":161,"line":1132},[159,102504,264],{"class":165},[159,102506,170],{"class":169},[159,102508,173],{"class":165},[46436,102510,102512],{"id":102511},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,102514,102515],{},[23,102516],{"alt":25,"src":102517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,102519,102520],{},[23,102521],{"alt":25,"src":102522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[134,102524,102525],{},[106,102526,102527],{},"find()",[14,102529,102530],{},"循环查找，找到第一个就ok",[14,102532,102533],{},[8085,102534,102537],{"href":102535,"rel":102536},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[15923],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[151,102539,102541],{"className":520,"code":102540,"language":522,"meta":25,"style":25},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[49,102542,102543,102548,102553],{"__ignoreMap":25},[159,102544,102545],{"class":161,"line":162},[159,102546,102547],{"class":165},"const array1 = [5, 12, 8, 130, 44]\n",[159,102549,102550],{"class":161,"line":176},[159,102551,102552],{"class":165},"const found = array1.find((element) => element > 10)\n",[159,102554,102555],{"class":161,"line":203},[159,102556,102557],{"class":165},"console.log(found)  \u002F\u002F12\n",[14,102559,102560,102562,102563,102568,102569,102572,102573,102575,102576,102581,102582,102584,102585,102587,102588,102590,102591],{},[49,102561,102527],{}," 方法是一个",[8085,102564,102567],{"href":102565,"rel":102566},"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",[15923],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[49,102570,102571],{},"callbackFn"," 函数，直到 ",[49,102574,102571],{}," 返回一个",[8085,102577,102580],{"href":102578,"rel":102579},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[15923],"真值","。然后 ",[49,102583,102527],{}," 返回该元素并停止迭代数组。如果 ",[49,102586,102571],{}," 从未返回真值，则 ",[49,102589,102527],{}," 返回 ",[49,102592,102593],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[151,102595,102597],{"className":153,"code":102596,"language":155,"meta":25,"style":25},"\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",[49,102598,102599,102607,102615,102620,102625,102630,102634,102639,102644,102648,102653,102658,102662,102666,102671,102676,102680,102684,102689,102694,102699,102704,102709,102713,102718,102723,102728,102733,102737,102742,102750],{"__ignoreMap":25},[159,102600,102601,102603,102605],{"class":161,"line":162},[159,102602,166],{"class":165},[159,102604,170],{"class":169},[159,102606,173],{"class":165},[159,102608,102609,102611,102613],{"class":161,"line":176},[159,102610,179],{"class":165},[159,102612,228],{"class":169},[159,102614,173],{"class":165},[159,102616,102617],{"class":161,"line":203},[159,102618,102619],{"class":165},"    const arr = ['red', 'blue', 'green']\n",[159,102621,102622],{"class":161,"line":223},[159,102623,102624],{"class":165},"    const found = arr.find(item => item === 'pink')\n",[159,102626,102627],{"class":161,"line":233},[159,102628,102629],{"class":165},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[159,102631,102632],{"class":161,"line":239},[159,102633,590],{"emptyLinePlaceholder":589},[159,102635,102636],{"class":161,"line":245},[159,102637,102638],{"class":165},"    \u002F\u002F 使用场景，用于查找数据\n",[159,102640,102641],{"class":161,"line":251},[159,102642,102643],{"class":165},"    const arr1 = [\n",[159,102645,102646],{"class":161,"line":261},[159,102647,100686],{"class":165},[159,102649,102650],{"class":161,"line":603},[159,102651,102652],{"class":165},"        name: '小米',\n",[159,102654,102655],{"class":161,"line":621},[159,102656,102657],{"class":165},"        price: 1999\n",[159,102659,102660],{"class":161,"line":634},[159,102661,99192],{"class":165},[159,102663,102664],{"class":161,"line":640},[159,102665,100686],{"class":165},[159,102667,102668],{"class":161,"line":1075},[159,102669,102670],{"class":165},"        name: '华为',\n",[159,102672,102673],{"class":161,"line":1081},[159,102674,102675],{"class":165},"        price: 3999\n",[159,102677,102678],{"class":161,"line":1091},[159,102679,1308],{"class":165},[159,102681,102682],{"class":161,"line":1100},[159,102683,2474],{"class":165},[159,102685,102686],{"class":161,"line":1123},[159,102687,102688],{"class":165},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[159,102690,102691],{"class":161,"line":1132},[159,102692,102693],{"class":165},"    \u002F\u002F const found1 = arr1.find(item => {\n",[159,102695,102696],{"class":161,"line":1139},[159,102697,102698],{"class":165},"    \u002F\u002F   if (item.name === '小米') {\n",[159,102700,102701],{"class":161,"line":1168},[159,102702,102703],{"class":165},"    \u002F\u002F     return item\n",[159,102705,102706],{"class":161,"line":1174},[159,102707,102708],{"class":165},"    \u002F\u002F   }\n",[159,102710,102711],{"class":161,"line":1180},[159,102712,10335],{"class":165},[159,102714,102715],{"class":161,"line":1194},[159,102716,102717],{"class":165},"    \u002F\u002F 另一种写法\n",[159,102719,102720],{"class":161,"line":1200},[159,102721,102722],{"class":165},"    const found1 = arr1.find(item => {\n",[159,102724,102725],{"class":161,"line":1221},[159,102726,102727],{"class":165},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[159,102729,102730],{"class":161,"line":1230},[159,102731,102732],{"class":165},"      return item.name = '小米'\n",[159,102734,102735],{"class":161,"line":1247},[159,102736,4863],{"class":165},[159,102738,102739],{"class":161,"line":1265},[159,102740,102741],{"class":165},"    console.log(found1)\n",[159,102743,102744,102746,102748],{"class":161,"line":1277},[159,102745,254],{"class":165},[159,102747,228],{"class":169},[159,102749,173],{"class":165},[159,102751,102752,102754,102756],{"class":161,"line":1283},[159,102753,264],{"class":165},[159,102755,170],{"class":169},[159,102757,173],{"class":165},[14,102759,102760],{},[23,102761],{"alt":25,"src":102762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,102764,102765],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[134,102767,102768],{"start":176},[106,102769,102770],{},"every()返回的是布尔值",[14,102772,102773],{},[8085,102774,102777],{"href":102775,"rel":102776},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[15923],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,102779,102780],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,102782,102783],{},"some是只有有一个就没问题",[14,102785,102786],{},"every是必须全是才行",[151,102788,102792],{"className":102789,"code":102790,"language":102791,"meta":25,"style":25},"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",[49,102793,102794,102810,102824,102828,102837],{"__ignoreMap":25},[159,102795,102796,102798,102801,102803,102805,102808],{"class":161,"line":162},[159,102797,1215],{"class":1142},[159,102799,102800],{"class":165}," isBigEnough(element, ",[159,102802,21169],{"class":1142},[159,102804,1939],{"class":165},[159,102806,102807],{"class":1142},"array",[159,102809,1262],{"class":165},[159,102811,102812,102815,102818,102820,102822],{"class":161,"line":176},[159,102813,102814],{"class":1142},"  return",[159,102816,102817],{"class":165}," element ",[159,102819,3822],{"class":1142},[159,102821,7664],{"class":1146},[159,102823,1492],{"class":165},[159,102825,102826],{"class":161,"line":203},[159,102827,15685],{"class":165},[159,102829,102830,102833,102835],{"class":161,"line":223},[159,102831,102832],{"class":165},"[12, 5, 8, 130, 44].every(isBigEnough); ",[159,102834,56779],{"class":1142},[159,102836,1291],{"class":165},[159,102838,102839,102842,102844],{"class":161,"line":233},[159,102840,102841],{"class":165},"[12, 54, 18, 130, 44].every(isBigEnough); ",[159,102843,56779],{"class":1142},[159,102845,4854],{"class":165},[151,102847,102849],{"className":153,"code":102848,"language":155,"meta":25,"style":25},"\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",[49,102850,102851,102859,102867,102872,102876,102881,102886,102894],{"__ignoreMap":25},[159,102852,102853,102855,102857],{"class":161,"line":162},[159,102854,166],{"class":165},[159,102856,170],{"class":169},[159,102858,173],{"class":165},[159,102860,102861,102863,102865],{"class":161,"line":176},[159,102862,179],{"class":165},[159,102864,228],{"class":169},[159,102866,173],{"class":165},[159,102868,102869],{"class":161,"line":203},[159,102870,102871],{"class":165},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[159,102873,102874],{"class":161,"line":223},[159,102875,99622],{"class":165},[159,102877,102878],{"class":161,"line":233},[159,102879,102880],{"class":165},"    const flag = arr.every(item => item >= 10)\n",[159,102882,102883],{"class":161,"line":239},[159,102884,102885],{"class":165},"    console.log(flag)    \u002F\u002Ftrue\n",[159,102887,102888,102890,102892],{"class":161,"line":245},[159,102889,254],{"class":165},[159,102891,228],{"class":169},[159,102893,173],{"class":165},[159,102895,102896,102898,102900],{"class":161,"line":251},[159,102897,264],{"class":165},[159,102899,170],{"class":169},[159,102901,173],{"class":165},[151,102903,102905],{"className":153,"code":102904,"language":155,"meta":25,"style":25},"\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",[49,102906,102907,102915,102923,102927,102932,102937,102942,102950],{"__ignoreMap":25},[159,102908,102909,102911,102913],{"class":161,"line":162},[159,102910,166],{"class":165},[159,102912,170],{"class":169},[159,102914,173],{"class":165},[159,102916,102917,102919,102921],{"class":161,"line":176},[159,102918,179],{"class":165},[159,102920,228],{"class":169},[159,102922,173],{"class":165},[159,102924,102925],{"class":161,"line":203},[159,102926,102871],{"class":165},[159,102928,102929],{"class":161,"line":223},[159,102930,102931],{"class":165},"    const arr = [10, 0, 5]\n",[159,102933,102934],{"class":161,"line":233},[159,102935,102936],{"class":165},"    const flag = arr.some(item => item >= 10)\n",[159,102938,102939],{"class":161,"line":239},[159,102940,102941],{"class":165},"    console.log(flag)   \u002F\u002Ftrue\n",[159,102943,102944,102946,102948],{"class":161,"line":245},[159,102945,254],{"class":165},[159,102947,228],{"class":169},[159,102949,173],{"class":165},[159,102951,102952,102954,102956],{"class":161,"line":251},[159,102953,264],{"class":165},[159,102955,170],{"class":169},[159,102957,173],{"class":165},[46436,102959,102961],{"id":102960},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,102963,102964],{},[23,102965],{"alt":25,"src":102966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[151,102968,102970],{"className":520,"code":102969,"language":522,"meta":25,"style":25},"\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",[49,102971,102972,102982,102996,103000,103008,103022,103042,103054,103062,103069,103081,103093,103105,103117,103127,103137,103141,103149,103157,103161,103169,103181,103189,103211,103216,103221,103254,103262,103270,103274],{"__ignoreMap":25},[159,102973,102974,102976,102978,102980],{"class":161,"line":162},[159,102975,914],{"class":165},[159,102977,917],{"class":169},[159,102979,920],{"class":185},[159,102981,173],{"class":165},[159,102983,102984,102986,102988,102990,102992,102994],{"class":161,"line":176},[159,102985,166],{"class":165},[159,102987,522],{"class":169},[159,102989,931],{"class":185},[159,102991,189],{"class":165},[159,102993,936],{"class":192},[159,102995,173],{"class":165},[159,102997,102998],{"class":161,"line":203},[159,102999,590],{"emptyLinePlaceholder":589},[159,103001,103002,103004,103006],{"class":161,"line":223},[159,103003,166],{"class":165},[159,103005,949],{"class":169},[159,103007,173],{"class":165},[159,103009,103010,103012,103014,103016,103018,103020],{"class":161,"line":233},[159,103011,179],{"class":165},[159,103013,958],{"class":169},[159,103015,961],{"class":185},[159,103017,189],{"class":165},[159,103019,966],{"class":192},[159,103021,173],{"class":165},[159,103023,103024,103026,103028,103030,103032,103034,103036,103038,103040],{"class":161,"line":239},[159,103025,179],{"class":165},[159,103027,958],{"class":169},[159,103029,547],{"class":185},[159,103031,189],{"class":165},[159,103033,981],{"class":192},[159,103035,984],{"class":185},[159,103037,189],{"class":165},[159,103039,989],{"class":192},[159,103041,173],{"class":165},[159,103043,103044,103046,103048,103050,103052],{"class":161,"line":245},[159,103045,179],{"class":165},[159,103047,998],{"class":169},[159,103049,1001],{"class":165},[159,103051,998],{"class":169},[159,103053,173],{"class":165},[159,103055,103056,103058,103060],{"class":161,"line":251},[159,103057,179],{"class":165},[159,103059,1468],{"class":169},[159,103061,173],{"class":165},[159,103063,103064,103067],{"class":161,"line":261},[159,103065,103066],{"class":169},"    div",[159,103068,1478],{"class":165},[159,103070,103071,103073,103075,103077,103079],{"class":161,"line":603},[159,103072,1563],{"class":1146},[159,103074,1486],{"class":165},[159,103076,13303],{"class":1146},[159,103078,1571],{"class":1142},[159,103080,1492],{"class":165},[159,103082,103083,103085,103087,103089,103091],{"class":161,"line":621},[159,103084,1578],{"class":1146},[159,103086,1486],{"class":165},[159,103088,4269],{"class":1146},[159,103090,1571],{"class":1142},[159,103092,1492],{"class":165},[159,103094,103095,103097,103099,103101,103103],{"class":161,"line":634},[159,103096,4264],{"class":1146},[159,103098,1486],{"class":165},[159,103100,4269],{"class":1146},[159,103102,1571],{"class":1142},[159,103104,1492],{"class":165},[159,103106,103107,103109,103111,103113,103115],{"class":161,"line":640},[159,103108,12191],{"class":1146},[159,103110,1486],{"class":165},[159,103112,7925],{"class":1146},[159,103114,1571],{"class":1142},[159,103116,1492],{"class":165},[159,103118,103119,103121,103123,103125],{"class":161,"line":1075},[159,103120,4188],{"class":1146},[159,103122,1486],{"class":165},[159,103124,4193],{"class":1146},[159,103126,1492],{"class":165},[159,103128,103129,103131,103133,103135],{"class":161,"line":1081},[159,103130,1682],{"class":1146},[159,103132,1486],{"class":165},[159,103134,13277],{"class":1146},[159,103136,1492],{"class":165},[159,103138,103139],{"class":161,"line":1091},[159,103140,1508],{"class":165},[159,103142,103143,103145,103147],{"class":161,"line":1100},[159,103144,254],{"class":165},[159,103146,1468],{"class":169},[159,103148,173],{"class":165},[159,103150,103151,103153,103155],{"class":161,"line":1123},[159,103152,264],{"class":165},[159,103154,949],{"class":169},[159,103156,173],{"class":165},[159,103158,103159],{"class":161,"line":1132},[159,103160,590],{"emptyLinePlaceholder":589},[159,103162,103163,103165,103167],{"class":161,"line":1139},[159,103164,166],{"class":165},[159,103166,170],{"class":169},[159,103168,173],{"class":165},[159,103170,103171,103173,103175,103177,103179],{"class":161,"line":1168},[159,103172,179],{"class":165},[159,103174,182],{"class":169},[159,103176,2158],{"class":165},[159,103178,182],{"class":169},[159,103180,173],{"class":165},[159,103182,103183,103185,103187],{"class":161,"line":1174},[159,103184,179],{"class":165},[159,103186,228],{"class":169},[159,103188,173],{"class":165},[159,103190,103191,103193,103196,103198,103201,103204,103206,103209],{"class":161,"line":1180},[159,103192,1143],{"class":1142},[159,103194,103195],{"class":1146}," spec",[159,103197,1150],{"class":1142},[159,103199,103200],{"class":165}," { size: ",[159,103202,103203],{"class":192},"'40cm*40cm'",[159,103205,2321],{"class":165},[159,103207,103208],{"class":192},"'黑色'",[159,103210,2468],{"class":165},[159,103212,103213],{"class":161,"line":1194},[159,103214,103215],{"class":1135},"    \u002F\u002F const arr = Object.values(spec)\n",[159,103217,103218],{"class":161,"line":1200},[159,103219,103220],{"class":1135},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[159,103222,103223,103225,103227,103229,103232,103234,103236,103239,103242,103245,103247,103249,103252],{"class":161,"line":1221},[159,103224,13456],{"class":165},[159,103226,1156],{"class":185},[159,103228,1159],{"class":165},[159,103230,103231],{"class":192},"'div'",[159,103233,21375],{"class":165},[159,103235,189],{"class":1142},[159,103237,103238],{"class":165}," Object.",[159,103240,103241],{"class":185},"values",[159,103243,103244],{"class":165},"(spec).",[159,103246,21347],{"class":185},[159,103248,1159],{"class":165},[159,103250,103251],{"class":192},"'\u002F'",[159,103253,1165],{"class":165},[159,103255,103256,103258,103260],{"class":161,"line":1230},[159,103257,254],{"class":165},[159,103259,228],{"class":169},[159,103261,173],{"class":165},[159,103263,103264,103266,103268],{"class":161,"line":1247},[159,103265,264],{"class":165},[159,103267,170],{"class":169},[159,103269,173],{"class":165},[159,103271,103272],{"class":161,"line":1265},[159,103273,590],{"emptyLinePlaceholder":589},[159,103275,103276,103278,103280],{"class":161,"line":1277},[159,103277,264],{"class":165},[159,103279,522],{"class":169},[159,103281,173],{"class":165},[14,103283,103284],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[46436,103286,103288],{"id":103287},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,103290,103291],{},"静态方法，将伪数组转换为真数组",[14,103293,103294],{},[23,103295],{"alt":25,"src":103296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[151,103298,103300],{"className":153,"code":103299,"language":155,"meta":25,"style":25},"\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",[49,103301,103302,103310,103318,103330,103342,103354,103362,103370,103375,103380,103385,103390,103398],{"__ignoreMap":25},[159,103303,103304,103306,103308],{"class":161,"line":162},[159,103305,166],{"class":165},[159,103307,170],{"class":169},[159,103309,173],{"class":165},[159,103311,103312,103314,103316],{"class":161,"line":176},[159,103313,179],{"class":165},[159,103315,103],{"class":169},[159,103317,173],{"class":165},[159,103319,103320,103322,103324,103326,103328],{"class":161,"line":203},[159,103321,2056],{"class":165},[159,103323,106],{"class":169},[159,103325,2158],{"class":165},[159,103327,106],{"class":169},[159,103329,173],{"class":165},[159,103331,103332,103334,103336,103338,103340],{"class":161,"line":223},[159,103333,2056],{"class":165},[159,103335,106],{"class":169},[159,103337,2158],{"class":165},[159,103339,106],{"class":169},[159,103341,173],{"class":165},[159,103343,103344,103346,103348,103350,103352],{"class":161,"line":233},[159,103345,2056],{"class":165},[159,103347,106],{"class":169},[159,103349,2158],{"class":165},[159,103351,106],{"class":169},[159,103353,173],{"class":165},[159,103355,103356,103358,103360],{"class":161,"line":239},[159,103357,254],{"class":165},[159,103359,103],{"class":169},[159,103361,173],{"class":165},[159,103363,103364,103366,103368],{"class":161,"line":245},[159,103365,179],{"class":165},[159,103367,228],{"class":169},[159,103369,173],{"class":165},[159,103371,103372],{"class":161,"line":251},[159,103373,103374],{"class":165},"    const lis = document.querySelectorAll('li')\n",[159,103376,103377],{"class":161,"line":261},[159,103378,103379],{"class":165},"    const liss = Array.from(lis)\n",[159,103381,103382],{"class":161,"line":603},[159,103383,103384],{"class":165},"    liss.pop()\n",[159,103386,103387],{"class":161,"line":621},[159,103388,103389],{"class":165},"    console.log(liss)\n",[159,103391,103392,103394,103396],{"class":161,"line":634},[159,103393,254],{"class":165},[159,103395,228],{"class":169},[159,103397,173],{"class":165},[159,103399,103400,103402,103404],{"class":161,"line":640},[159,103401,264],{"class":165},[159,103403,170],{"class":169},[159,103405,173],{"class":165},[14,103407,103408],{},[23,103409],{"alt":25,"src":103410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[326,103412,103414],{"id":103413},"_41053-string","4.10.5.3 String",[14,103416,103417],{},[23,103418],{"alt":25,"src":103419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[46436,103421,103423],{"id":103422},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[151,103425,103427],{"className":153,"code":103426,"language":155,"meta":25,"style":25},"\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",[49,103428,103429,103437,103445,103450,103455,103460,103464,103469,103474,103479,103487],{"__ignoreMap":25},[159,103430,103431,103433,103435],{"class":161,"line":162},[159,103432,166],{"class":165},[159,103434,170],{"class":169},[159,103436,173],{"class":165},[159,103438,103439,103441,103443],{"class":161,"line":176},[159,103440,179],{"class":165},[159,103442,228],{"class":169},[159,103444,173],{"class":165},[159,103446,103447],{"class":161,"line":203},[159,103448,103449],{"class":165},"    \u002F\u002F 把字符串转化为数组\n",[159,103451,103452],{"class":161,"line":223},[159,103453,103454],{"class":165},"    const str = 'pink,red'\n",[159,103456,103457],{"class":161,"line":233},[159,103458,103459],{"class":165},"    const arr = str.split(',')\n",[159,103461,103462],{"class":161,"line":239},[159,103463,101938],{"class":165},[159,103465,103466],{"class":161,"line":245},[159,103467,103468],{"class":165},"    const str1 = '2025-8-25'\n",[159,103470,103471],{"class":161,"line":251},[159,103472,103473],{"class":165},"    const arr1 = str1.split('-')\n",[159,103475,103476],{"class":161,"line":261},[159,103477,103478],{"class":165},"    console.log(arr1)\n",[159,103480,103481,103483,103485],{"class":161,"line":603},[159,103482,254],{"class":165},[159,103484,228],{"class":169},[159,103486,173],{"class":165},[159,103488,103489,103491,103493],{"class":161,"line":621},[159,103490,264],{"class":165},[159,103492,170],{"class":169},[159,103494,173],{"class":165},[46436,103496,103498],{"id":103497},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,103500,28799],{},[14,103502,103503],{},"substring(indexStart)",[14,103505,103506],{},"substring(indexStart, indexEnd)",[103,103508,103509,103520,103532,103542],{},[106,103510,103511,103512,103515,103516,103519],{},"如果省略了 ",[49,103513,103514],{},"indexEnd","，则 ",[49,103517,103518],{},"substring()"," 提取字符直到字符串的末尾",[106,103521,103522,103523,103526,103527,103515,103529,103531],{},"如果 ",[49,103524,103525],{},"indexStart"," 等于 ",[49,103528,103514],{},[49,103530,103518],{}," 返回一个空字符串",[106,103533,103522,103534,103536,103537,103515,103539,103541],{},[49,103535,103525],{}," 大于 ",[49,103538,103514],{},[49,103540,103518],{}," 的效果就像交换了这两个参数一样",[106,103543,103544],{},"结束的索引号不包含想要截取的部分",[151,103546,103548],{"className":102789,"code":103547,"language":102791,"meta":25,"style":25},"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",[49,103549,103550,103562,103566,103600,103630,103634,103665,103669,103696,103726,103756,103760,103791],{"__ignoreMap":25},[159,103551,103552,103555,103557,103560],{"class":161,"line":162},[159,103553,103554],{"class":165},"const anyString ",[159,103556,189],{"class":1142},[159,103558,103559],{"class":192}," \"Mozilla\"",[159,103561,1492],{"class":165},[159,103563,103564],{"class":161,"line":176},[159,103565,590],{"emptyLinePlaceholder":589},[159,103567,103568,103571,103573,103575,103577,103580,103582,103585,103587,103589,103591,103593,103595,103597],{"class":161,"line":203},[159,103569,103570],{"class":1146},"console",[159,103572,9952],{"class":165},[159,103574,5166],{"class":1146},[159,103576,1159],{"class":165},[159,103578,103579],{"class":1146},"anyString",[159,103581,9952],{"class":165},[159,103583,103584],{"class":1146},"substring",[159,103586,1159],{"class":165},[159,103588,1489],{"class":1146},[159,103590,1939],{"class":165},[159,103592,4932],{"class":1146},[159,103594,22387],{"class":165},[159,103596,56779],{"class":1142},[159,103598,103599],{"class":192}," 'M'\n",[159,103601,103602,103604,103606,103608,103610,103612,103614,103616,103618,103620,103622,103624,103626,103628],{"class":161,"line":223},[159,103603,103570],{"class":1146},[159,103605,9952],{"class":165},[159,103607,5166],{"class":1146},[159,103609,1159],{"class":165},[159,103611,103579],{"class":1146},[159,103613,9952],{"class":165},[159,103615,103584],{"class":1146},[159,103617,1159],{"class":165},[159,103619,4932],{"class":1146},[159,103621,1939],{"class":165},[159,103623,1489],{"class":1146},[159,103625,22387],{"class":165},[159,103627,56779],{"class":1142},[159,103629,103599],{"class":192},[159,103631,103632],{"class":161,"line":233},[159,103633,590],{"emptyLinePlaceholder":589},[159,103635,103636,103638,103640,103642,103644,103646,103648,103650,103652,103654,103656,103658,103660,103662],{"class":161,"line":239},[159,103637,103570],{"class":1146},[159,103639,9952],{"class":165},[159,103641,5166],{"class":1146},[159,103643,1159],{"class":165},[159,103645,103579],{"class":1146},[159,103647,9952],{"class":165},[159,103649,103584],{"class":1146},[159,103651,1159],{"class":165},[159,103653,1489],{"class":1146},[159,103655,1939],{"class":165},[159,103657,7907],{"class":1146},[159,103659,22387],{"class":165},[159,103661,56779],{"class":1142},[159,103663,103664],{"class":192}," 'Mozill'\n",[159,103666,103667],{"class":161,"line":245},[159,103668,590],{"emptyLinePlaceholder":589},[159,103670,103671,103673,103675,103677,103679,103681,103683,103685,103687,103689,103691,103693],{"class":161,"line":251},[159,103672,103570],{"class":1146},[159,103674,9952],{"class":165},[159,103676,5166],{"class":1146},[159,103678,1159],{"class":165},[159,103680,103579],{"class":1146},[159,103682,9952],{"class":165},[159,103684,103584],{"class":1146},[159,103686,1159],{"class":165},[159,103688,8866],{"class":1146},[159,103690,22387],{"class":165},[159,103692,56779],{"class":1142},[159,103694,103695],{"class":192}," 'lla'\n",[159,103697,103698,103700,103702,103704,103706,103708,103710,103712,103714,103716,103718,103720,103722,103724],{"class":161,"line":261},[159,103699,103570],{"class":1146},[159,103701,9952],{"class":165},[159,103703,5166],{"class":1146},[159,103705,1159],{"class":165},[159,103707,103579],{"class":1146},[159,103709,9952],{"class":165},[159,103711,103584],{"class":1146},[159,103713,1159],{"class":165},[159,103715,8866],{"class":1146},[159,103717,1939],{"class":165},[159,103719,24224],{"class":1146},[159,103721,22443],{"class":165},[159,103723,56779],{"class":1142},[159,103725,103695],{"class":192},[159,103727,103728,103730,103732,103734,103736,103738,103740,103742,103744,103746,103748,103750,103752,103754],{"class":161,"line":603},[159,103729,103570],{"class":1146},[159,103731,9952],{"class":165},[159,103733,5166],{"class":1146},[159,103735,1159],{"class":165},[159,103737,103579],{"class":1146},[159,103739,9952],{"class":165},[159,103741,103584],{"class":1146},[159,103743,1159],{"class":165},[159,103745,24224],{"class":1146},[159,103747,1939],{"class":165},[159,103749,8866],{"class":1146},[159,103751,22387],{"class":165},[159,103753,56779],{"class":1142},[159,103755,103695],{"class":192},[159,103757,103758],{"class":161,"line":621},[159,103759,590],{"emptyLinePlaceholder":589},[159,103761,103762,103764,103766,103768,103770,103772,103774,103776,103778,103780,103782,103784,103786,103788],{"class":161,"line":634},[159,103763,103570],{"class":1146},[159,103765,9952],{"class":165},[159,103767,5166],{"class":1146},[159,103769,1159],{"class":165},[159,103771,103579],{"class":1146},[159,103773,9952],{"class":165},[159,103775,103584],{"class":1146},[159,103777,1159],{"class":165},[159,103779,1489],{"class":1146},[159,103781,1939],{"class":165},[159,103783,24224],{"class":1146},[159,103785,22387],{"class":165},[159,103787,56779],{"class":1142},[159,103789,103790],{"class":192}," 'Mozilla'\n",[159,103792,103793,103795,103797,103799,103801,103803,103805,103807,103809,103811,103813,103815,103817,103819],{"class":161,"line":640},[159,103794,103570],{"class":1146},[159,103796,9952],{"class":165},[159,103798,5166],{"class":1146},[159,103800,1159],{"class":165},[159,103802,103579],{"class":1146},[159,103804,9952],{"class":165},[159,103806,103584],{"class":1146},[159,103808,1159],{"class":165},[159,103810,1489],{"class":1146},[159,103812,1939],{"class":165},[159,103814,1964],{"class":1146},[159,103816,22387],{"class":165},[159,103818,56779],{"class":1142},[159,103820,103790],{"class":192},[46436,103822,103824],{"id":103823},"_410533-startswith","4.10.5.3.3 startsWith",[14,103826,103827,103830,103831,103836,103837,103839,103840],{},[49,103828,103829],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[61,103832,103833],{},[49,103834,103835],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[49,103838,13082],{}," 或 ",[49,103841,13086],{},[151,103843,103845],{"className":98795,"code":103844,"language":98797,"meta":25,"style":25},"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",[49,103846,103847,103859,103878,103883,103903],{"__ignoreMap":25},[159,103848,103849,103851,103854,103856],{"class":161,"line":162},[159,103850,18326],{"class":1142},[159,103852,103853],{"class":165}," str1 ",[159,103855,189],{"class":1142},[159,103857,103858],{"class":192}," \"Saturday night plans\"\n",[159,103860,103861,103863,103865,103868,103871,103873,103876],{"class":161,"line":176},[159,103862,98832],{"class":165},[159,103864,5166],{"class":185},[159,103866,103867],{"class":165},"(str1.",[159,103869,103870],{"class":185},"startsWith",[159,103872,1159],{"class":165},[159,103874,103875],{"class":192},"\"Sat\"",[159,103877,18787],{"class":165},[159,103879,103880],{"class":161,"line":203},[159,103881,103882],{"class":1135},"\u002F\u002F Expected output: true\n",[159,103884,103885,103887,103889,103891,103893,103895,103897,103899,103901],{"class":161,"line":223},[159,103886,98832],{"class":165},[159,103888,5166],{"class":185},[159,103890,103867],{"class":165},[159,103892,103870],{"class":185},[159,103894,1159],{"class":165},[159,103896,103875],{"class":192},[159,103898,1939],{"class":165},[159,103900,23949],{"class":1146},[159,103902,18787],{"class":165},[159,103904,103905],{"class":161,"line":233},[159,103906,103907],{"class":1135},"\u002F\u002F Expected output: false\n",[151,103909,103911],{"className":520,"code":103910,"language":522,"meta":25,"style":25},"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",[49,103912,103913,103918,103923,103927,103932,103937],{"__ignoreMap":25},[159,103914,103915],{"class":161,"line":162},[159,103916,103917],{"class":165},"startsWith(searchString)\n",[159,103919,103920],{"class":161,"line":176},[159,103921,103922],{"class":165},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[159,103924,103925],{"class":161,"line":203},[159,103926,590],{"emptyLinePlaceholder":589},[159,103928,103929],{"class":161,"line":223},[159,103930,103931],{"class":165},"const str3 = 'pink老师上课中'\n",[159,103933,103934],{"class":161,"line":233},[159,103935,103936],{"class":165},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[159,103938,103939],{"class":161,"line":239},[159,103940,103941],{"class":165},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[46436,103943,103945],{"id":103944},"_410534-includes","4.10.5.3.4 includes",[14,103947,103948],{},"includes(searchString) includes(searchString, position)",[134,103950,103951],{},[106,103952,103953],{},"searchString:",[14,103955,103956,103957,103959,103960,103965,103966,103971,103972,45027,103975,103978,103979,103982],{},"一个要在 ",[49,103958,24983],{}," 中查找的字符串。",[8085,103961,103964],{"href":103962,"rel":103963},"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",[15923],"不能是正则表达式","。所有非正则表达式的值都会被",[8085,103967,103970],{"href":103968,"rel":103969},"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",[15923],"强制转换为字符串","，因此如果该参数被省略或传入 ",[49,103973,103974],{},"undefined",[49,103976,103977],{},"includes()"," 方法会在字符串中搜索 ",[49,103980,103981],{},"\"undefined\"","，这通常不是你想要的",[134,103984,103985],{"start":176},[106,103986,103987,20934],{},[49,103988,103989],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,103991,103992,103993,103996,103997],{},"在字符串中开始搜索 ",[49,103994,103995],{},"searchString"," 的位置。默认值为 ",[49,103998,1489],{},[134,104000,104001],{"start":203},[106,104002,104003],{},"返回值：",[14,104005,104006,104007,104009,104010,104014,104015],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[49,104008,103995],{}," 为空字符串的情况），则返回 ",[61,104011,104012],{},[49,104013,13082],{}," ，否则返回 ",[61,104016,104017],{},[49,104018,13086],{},[134,104020,104021],{"start":223},[106,104022,104023],{},"异常：",[14,104025,103522,104026,37361,104028,104032],{},[49,104027,103995],{},[8085,104029,104031],{"href":103962,"rel":104030},[15923],"是一个正则表达式","，则会抛出",[14,104034,104035],{},"只要是有就是true，不需要非得以谁开头结尾",[151,104037,104039],{"className":98795,"code":104038,"language":98797,"meta":25,"style":25},"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",[49,104040,104041,104052,104075,104094,104114,104136,104155],{"__ignoreMap":25},[159,104042,104043,104045,104047,104049],{"class":161,"line":162},[159,104044,18326],{"class":1142},[159,104046,101075],{"class":165},[159,104048,189],{"class":1142},[159,104050,104051],{"class":192}," \"To be, or not to be, that is the question.\"\n",[159,104053,104054,104056,104058,104061,104064,104066,104069,104072],{"class":161,"line":176},[159,104055,98832],{"class":165},[159,104057,5166],{"class":185},[159,104059,104060],{"class":165},"(str.",[159,104062,104063],{"class":185},"includes",[159,104065,1159],{"class":165},[159,104067,104068],{"class":192},"\"To be\"",[159,104070,104071],{"class":165},"))",[159,104073,104074],{"class":1135},"  \u002F\u002F true\n",[159,104076,104077,104079,104081,104083,104085,104087,104090,104092],{"class":161,"line":203},[159,104078,98832],{"class":165},[159,104080,5166],{"class":185},[159,104082,104060],{"class":165},[159,104084,104063],{"class":185},[159,104086,1159],{"class":165},[159,104088,104089],{"class":192},"\"question\"",[159,104091,104071],{"class":165},[159,104093,104074],{"class":1135},[159,104095,104096,104098,104100,104102,104104,104106,104109,104111],{"class":161,"line":223},[159,104097,98832],{"class":165},[159,104099,5166],{"class":185},[159,104101,104060],{"class":165},[159,104103,104063],{"class":185},[159,104105,1159],{"class":165},[159,104107,104108],{"class":192},"\"nonexistent\"",[159,104110,104071],{"class":165},[159,104112,104113],{"class":1135},"  \u002F\u002F false\n",[159,104115,104116,104118,104120,104122,104124,104126,104128,104130,104132,104134],{"class":161,"line":233},[159,104117,98832],{"class":165},[159,104119,5166],{"class":185},[159,104121,104060],{"class":165},[159,104123,104063],{"class":185},[159,104125,1159],{"class":165},[159,104127,104068],{"class":192},[159,104129,1939],{"class":165},[159,104131,4932],{"class":1146},[159,104133,104071],{"class":165},[159,104135,104113],{"class":1135},[159,104137,104138,104140,104142,104144,104146,104148,104151,104153],{"class":161,"line":239},[159,104139,98832],{"class":165},[159,104141,5166],{"class":185},[159,104143,104060],{"class":165},[159,104145,104063],{"class":185},[159,104147,1159],{"class":165},[159,104149,104150],{"class":192},"\"TO BE\"",[159,104152,104071],{"class":165},[159,104154,104113],{"class":1135},[159,104156,104157,104159,104161,104163,104165,104167,104169,104171],{"class":161,"line":245},[159,104158,98832],{"class":165},[159,104160,5166],{"class":185},[159,104162,104060],{"class":165},[159,104164,104063],{"class":185},[159,104166,1159],{"class":165},[159,104168,552],{"class":192},[159,104170,104071],{"class":165},[159,104172,104074],{"class":1135},[46436,104174,104176],{"id":104175},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[151,104178,104180],{"className":153,"code":104179,"language":155,"meta":25,"style":25},"\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",[49,104181,104182,104190,104198,104203,104208,104213,104218,104223,104231],{"__ignoreMap":25},[159,104183,104184,104186,104188],{"class":161,"line":162},[159,104185,166],{"class":165},[159,104187,170],{"class":169},[159,104189,173],{"class":165},[159,104191,104192,104194,104196],{"class":161,"line":176},[159,104193,179],{"class":165},[159,104195,228],{"class":169},[159,104197,173],{"class":165},[159,104199,104200],{"class":161,"line":203},[159,104201,104202],{"class":165},"    const num = 10\n",[159,104204,104205],{"class":161,"line":223},[159,104206,104207],{"class":165},"    \u002F\u002F 强制转换\n",[159,104209,104210],{"class":161,"line":233},[159,104211,104212],{"class":165},"    console.log(String(num))\n",[159,104214,104215],{"class":161,"line":239},[159,104216,104217],{"class":165},"    \u002F\u002F toString()方法转换\n",[159,104219,104220],{"class":161,"line":245},[159,104221,104222],{"class":165},"    console.log(num.toString())\n",[159,104224,104225,104227,104229],{"class":161,"line":251},[159,104226,254],{"class":165},[159,104228,228],{"class":169},[159,104230,173],{"class":165},[159,104232,104233,104235,104237],{"class":161,"line":261},[159,104234,264],{"class":165},[159,104236,170],{"class":169},[159,104238,173],{"class":165},[46436,104240,104242],{"id":104241},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,104244,104245],{},[23,104246],{"alt":25,"src":104247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[151,104249,104251],{"className":520,"code":104250,"language":522,"meta":25,"style":25},"\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",[49,104252,104253,104263,104277,104281,104289,104303,104323,104335,104343,104347,104355,104367,104375,104387,104392,104397,104402,104449,104465,104473,104481,104485],{"__ignoreMap":25},[159,104254,104255,104257,104259,104261],{"class":161,"line":162},[159,104256,914],{"class":165},[159,104258,917],{"class":169},[159,104260,920],{"class":185},[159,104262,173],{"class":165},[159,104264,104265,104267,104269,104271,104273,104275],{"class":161,"line":176},[159,104266,166],{"class":165},[159,104268,522],{"class":169},[159,104270,931],{"class":185},[159,104272,189],{"class":165},[159,104274,936],{"class":192},[159,104276,173],{"class":165},[159,104278,104279],{"class":161,"line":203},[159,104280,590],{"emptyLinePlaceholder":589},[159,104282,104283,104285,104287],{"class":161,"line":223},[159,104284,166],{"class":165},[159,104286,949],{"class":169},[159,104288,173],{"class":165},[159,104290,104291,104293,104295,104297,104299,104301],{"class":161,"line":233},[159,104292,179],{"class":165},[159,104294,958],{"class":169},[159,104296,961],{"class":185},[159,104298,189],{"class":165},[159,104300,966],{"class":192},[159,104302,173],{"class":165},[159,104304,104305,104307,104309,104311,104313,104315,104317,104319,104321],{"class":161,"line":239},[159,104306,179],{"class":165},[159,104308,958],{"class":169},[159,104310,547],{"class":185},[159,104312,189],{"class":165},[159,104314,981],{"class":192},[159,104316,984],{"class":185},[159,104318,189],{"class":165},[159,104320,989],{"class":192},[159,104322,173],{"class":165},[159,104324,104325,104327,104329,104331,104333],{"class":161,"line":245},[159,104326,179],{"class":165},[159,104328,998],{"class":169},[159,104330,1001],{"class":165},[159,104332,998],{"class":169},[159,104334,173],{"class":165},[159,104336,104337,104339,104341],{"class":161,"line":251},[159,104338,264],{"class":165},[159,104340,949],{"class":169},[159,104342,173],{"class":165},[159,104344,104345],{"class":161,"line":261},[159,104346,590],{"emptyLinePlaceholder":589},[159,104348,104349,104351,104353],{"class":161,"line":603},[159,104350,166],{"class":165},[159,104352,170],{"class":169},[159,104354,173],{"class":165},[159,104356,104357,104359,104361,104363,104365],{"class":161,"line":621},[159,104358,179],{"class":165},[159,104360,182],{"class":169},[159,104362,2158],{"class":165},[159,104364,182],{"class":169},[159,104366,173],{"class":165},[159,104368,104369,104371,104373],{"class":161,"line":634},[159,104370,179],{"class":165},[159,104372,228],{"class":169},[159,104374,173],{"class":165},[159,104376,104377,104379,104382,104384],{"class":161,"line":640},[159,104378,1143],{"class":1142},[159,104380,104381],{"class":1146}," gift",[159,104383,1150],{"class":1142},[159,104385,104386],{"class":192}," '50g的茶叶，清洗球'\n",[159,104388,104389],{"class":161,"line":1075},[159,104390,104391],{"class":1135},"    \u002F\u002F 1.把字符串拆分为数组\n",[159,104393,104394],{"class":161,"line":1081},[159,104395,104396],{"class":1135},"    \u002F\u002F console.log(gift.split(','))\n",[159,104398,104399],{"class":161,"line":1091},[159,104400,104401],{"class":1135},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[159,104403,104404,104406,104408,104410,104413,104416,104418,104421,104423,104425,104427,104429,104431,104434,104436,104439,104441,104443,104445,104447],{"class":161,"line":1100},[159,104405,1143],{"class":1142},[159,104407,21027],{"class":1146},[159,104409,1150],{"class":1142},[159,104411,104412],{"class":165}," gift.",[159,104414,104415],{"class":185},"split",[159,104417,1159],{"class":165},[159,104419,104420],{"class":192},"'，'",[159,104422,13019],{"class":165},[159,104424,21155],{"class":185},[159,104426,1159],{"class":165},[159,104428,101095],{"class":8765},[159,104430,101098],{"class":1142},[159,104432,104433],{"class":192}," `\u003Cspan>【赠品】${",[159,104435,101095],{"class":165},[159,104437,104438],{"class":192},"}\u003C\u002Fspan>\u003Cbr>`",[159,104440,13019],{"class":165},[159,104442,21347],{"class":185},[159,104444,1159],{"class":165},[159,104446,21352],{"class":192},[159,104448,1165],{"class":165},[159,104450,104451,104453,104455,104457,104459,104461,104463],{"class":161,"line":1123},[159,104452,13456],{"class":165},[159,104454,1156],{"class":185},[159,104456,1159],{"class":165},[159,104458,103231],{"class":192},[159,104460,21375],{"class":165},[159,104462,189],{"class":1142},[159,104464,21096],{"class":165},[159,104466,104467,104469,104471],{"class":161,"line":1132},[159,104468,254],{"class":165},[159,104470,228],{"class":169},[159,104472,173],{"class":165},[159,104474,104475,104477,104479],{"class":161,"line":1139},[159,104476,264],{"class":165},[159,104478,170],{"class":169},[159,104480,173],{"class":165},[159,104482,104483],{"class":161,"line":1168},[159,104484,590],{"emptyLinePlaceholder":589},[159,104486,104487,104489,104491],{"class":161,"line":1174},[159,104488,264],{"class":165},[159,104490,522],{"class":169},[159,104492,173],{"class":165},[326,104494,104496],{"id":104495},"_41054-number","4.10.5.4 Number",[14,104498,104499],{},[23,104500],{"alt":25,"src":104501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,104503,104504],{},"整数也可以进行toFixed来保留小数",[14,104506,104507],{},"比如：",[14,104509,104510],{},"const price=10",[14,104512,104513],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[326,104515,104517],{"id":104516},"_41055-购物车展示","4.10.5.5 购物车展示",[14,104519,104520],{},[23,104521],{"alt":25,"src":104522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[151,104524,104526],{"className":520,"code":104525,"language":522,"meta":25,"style":25},"\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",[49,104527,104528,104538,104552,104556,104564,104578,104598,104610,104618,104624,104634,104644,104654,104658,104662,104668,104680,104694,104698,104702,104708,104720,104736,104746,104762,104766,104770,104776,104786,104796,104800,104804,104812,104824,104836,104848,104852,104856,104864,104876,104880,104884,104895,104905,104917,104929,104939,104943,104947,104955,104964,104976,104986,104996,105000,105004,105012,105021,105028,105038,105050,105054,105058,105067,105077,105088,105100,105112,105116,105120,105129,105139,105150,105154,105158,105164,105176,105188,105198,105208,105226,105238,105242,105246,105255,105267,105277,105287,105299,105303,105311,105319,105323,105331,105345,105353,105367,105395,105403,105411,105421,105425,105433,105441,105450,105458,105467,105477,105481,105485,105493,105501,105510,105518,105526,105539,105543,105547,105555,105563,105572,105580,105588,105603,105607,105611,105619,105627,105636,105644,105652,105666,105674,105678,105682,105687,105713,105718,105755,105760,105783,105788,105842,105847,105883,105887,105893,105898,105907,105921,105930,105949,105958,105968,105973,105978,105991,105996,106050,106076,106084,106092,106096],{"__ignoreMap":25},[159,104529,104530,104532,104534,104536],{"class":161,"line":162},[159,104531,914],{"class":165},[159,104533,917],{"class":169},[159,104535,920],{"class":185},[159,104537,173],{"class":165},[159,104539,104540,104542,104544,104546,104548,104550],{"class":161,"line":176},[159,104541,166],{"class":165},[159,104543,522],{"class":169},[159,104545,931],{"class":185},[159,104547,189],{"class":165},[159,104549,936],{"class":192},[159,104551,173],{"class":165},[159,104553,104554],{"class":161,"line":203},[159,104555,590],{"emptyLinePlaceholder":589},[159,104557,104558,104560,104562],{"class":161,"line":223},[159,104559,166],{"class":165},[159,104561,949],{"class":169},[159,104563,173],{"class":165},[159,104565,104566,104568,104570,104572,104574,104576],{"class":161,"line":233},[159,104567,179],{"class":165},[159,104569,958],{"class":169},[159,104571,961],{"class":185},[159,104573,189],{"class":165},[159,104575,966],{"class":192},[159,104577,173],{"class":165},[159,104579,104580,104582,104584,104586,104588,104590,104592,104594,104596],{"class":161,"line":239},[159,104581,179],{"class":165},[159,104583,958],{"class":169},[159,104585,547],{"class":185},[159,104587,189],{"class":165},[159,104589,981],{"class":192},[159,104591,984],{"class":185},[159,104593,189],{"class":165},[159,104595,989],{"class":192},[159,104597,173],{"class":165},[159,104599,104600,104602,104604,104606,104608],{"class":161,"line":245},[159,104601,179],{"class":165},[159,104603,998],{"class":169},[159,104605,1001],{"class":165},[159,104607,998],{"class":169},[159,104609,173],{"class":165},[159,104611,104612,104614,104616],{"class":161,"line":251},[159,104613,179],{"class":165},[159,104615,1468],{"class":169},[159,104617,173],{"class":165},[159,104619,104620,104622],{"class":161,"line":261},[159,104621,1475],{"class":169},[159,104623,1478],{"class":165},[159,104625,104626,104628,104630,104632],{"class":161,"line":603},[159,104627,1483],{"class":1146},[159,104629,1486],{"class":165},[159,104631,1489],{"class":1146},[159,104633,1492],{"class":165},[159,104635,104636,104638,104640,104642],{"class":161,"line":621},[159,104637,1497],{"class":1146},[159,104639,1486],{"class":165},[159,104641,1489],{"class":1146},[159,104643,1492],{"class":165},[159,104645,104646,104648,104650,104652],{"class":161,"line":634},[159,104647,19698],{"class":1146},[159,104649,1486],{"class":165},[159,104651,7523],{"class":1146},[159,104653,1492],{"class":165},[159,104655,104656],{"class":161,"line":640},[159,104657,1508],{"class":165},[159,104659,104660],{"class":161,"line":1075},[159,104661,590],{"emptyLinePlaceholder":589},[159,104663,104664,104666],{"class":161,"line":1081},[159,104665,9166],{"class":185},[159,104667,1478],{"class":165},[159,104669,104670,104672,104674,104676,104678],{"class":161,"line":1091},[159,104671,1563],{"class":1146},[159,104673,1486],{"class":165},[159,104675,99874],{"class":1146},[159,104677,1571],{"class":1142},[159,104679,1492],{"class":165},[159,104681,104682,104684,104686,104688,104690,104692],{"class":161,"line":1100},[159,104683,1497],{"class":1146},[159,104685,1486],{"class":165},[159,104687,1596],{"class":1146},[159,104689,1571],{"class":1142},[159,104691,1601],{"class":1146},[159,104693,1492],{"class":165},[159,104695,104696],{"class":161,"line":1123},[159,104697,1508],{"class":165},[159,104699,104700],{"class":161,"line":1132},[159,104701,590],{"emptyLinePlaceholder":589},[159,104703,104704,104706],{"class":161,"line":1139},[159,104705,99925],{"class":185},[159,104707,1478],{"class":165},[159,104709,104710,104712,104714,104716,104718],{"class":161,"line":1168},[159,104711,1483],{"class":1146},[159,104713,1486],{"class":165},[159,104715,1673],{"class":1146},[159,104717,1571],{"class":1142},[159,104719,1492],{"class":165},[159,104721,104722,104724,104726,104728,104730,104732,104734],{"class":161,"line":1174},[159,104723,8898],{"class":1146},[159,104725,1486],{"class":165},[159,104727,8903],{"class":1146},[159,104729,99980],{"class":1146},[159,104731,99983],{"class":1146},[159,104733,8909],{"class":1142},[159,104735,1492],{"class":165},[159,104737,104738,104740,104742,104744],{"class":161,"line":1180},[159,104739,1818],{"class":1146},[159,104741,1486],{"class":165},[159,104743,1823],{"class":1146},[159,104745,1492],{"class":165},[159,104747,104748,104750,104752,104754,104756,104758,104760],{"class":161,"line":1194},[159,104749,9018],{"class":1146},[159,104751,1486],{"class":165},[159,104753,4932],{"class":1146},[159,104755,1571],{"class":1142},[159,104757,7709],{"class":1146},[159,104759,9287],{"class":1146},[159,104761,1492],{"class":165},[159,104763,104764],{"class":161,"line":1200},[159,104765,1508],{"class":165},[159,104767,104768],{"class":161,"line":1221},[159,104769,590],{"emptyLinePlaceholder":589},[159,104771,104772,104774],{"class":161,"line":1230},[159,104773,100043],{"class":185},[159,104775,1478],{"class":165},[159,104777,104778,104780,104782,104784],{"class":161,"line":1247},[159,104779,9067],{"class":1146},[159,104781,1486],{"class":165},[159,104783,9072],{"class":1146},[159,104785,1492],{"class":165},[159,104787,104788,104790,104792,104794],{"class":161,"line":1265},[159,104789,1682],{"class":1146},[159,104791,1486],{"class":165},[159,104793,8855],{"class":1146},[159,104795,1492],{"class":165},[159,104797,104798],{"class":161,"line":1277},[159,104799,1508],{"class":165},[159,104801,104802],{"class":161,"line":1283},[159,104803,590],{"emptyLinePlaceholder":589},[159,104805,104806,104808,104810],{"class":161,"line":1294},[159,104807,99925],{"class":185},[159,104809,2482],{"class":169},[159,104811,1478],{"class":165},[159,104813,104814,104816,104818,104820,104822],{"class":161,"line":1305},[159,104815,1563],{"class":1146},[159,104817,1486],{"class":165},[159,104819,9100],{"class":1146},[159,104821,1571],{"class":1142},[159,104823,1492],{"class":165},[159,104825,104826,104828,104830,104832,104834],{"class":161,"line":1311},[159,104827,1578],{"class":1146},[159,104829,1486],{"class":165},[159,104831,9100],{"class":1146},[159,104833,1571],{"class":1142},[159,104835,1492],{"class":165},[159,104837,104838,104840,104842,104844,104846],{"class":161,"line":1322},[159,104839,8787],{"class":1146},[159,104841,1486],{"class":165},[159,104843,1753],{"class":1146},[159,104845,1571],{"class":1142},[159,104847,1492],{"class":165},[159,104849,104850],{"class":161,"line":1327},[159,104851,1508],{"class":165},[159,104853,104854],{"class":161,"line":1336},[159,104855,590],{"emptyLinePlaceholder":589},[159,104857,104858,104860,104862],{"class":161,"line":1345},[159,104859,99925],{"class":185},[159,104861,9347],{"class":185},[159,104863,1478],{"class":165},[159,104865,104866,104868,104870,104872,104874],{"class":161,"line":1350},[159,104867,1563],{"class":1146},[159,104869,1486],{"class":165},[159,104871,13303],{"class":1146},[159,104873,1571],{"class":1142},[159,104875,1492],{"class":165},[159,104877,104878],{"class":161,"line":1764},[159,104879,1508],{"class":165},[159,104881,104882],{"class":161,"line":1769},[159,104883,590],{"emptyLinePlaceholder":589},[159,104885,104886,104888,104890,104893],{"class":161,"line":1777},[159,104887,99925],{"class":185},[159,104889,9347],{"class":185},[159,104891,104892],{"class":185}," .tag",[159,104894,1478],{"class":165},[159,104896,104897,104899,104901,104903],{"class":161,"line":1788},[159,104898,1818],{"class":1146},[159,104900,1486],{"class":165},[159,104902,7896],{"class":1146},[159,104904,1492],{"class":165},[159,104906,104907,104909,104911,104913,104915],{"class":161,"line":1802},[159,104908,1483],{"class":1146},[159,104910,1486],{"class":165},[159,104912,11034],{"class":1146},[159,104914,1571],{"class":1142},[159,104916,1492],{"class":165},[159,104918,104919,104921,104923,104925,104927],{"class":161,"line":1815},[159,104920,1721],{"class":1146},[159,104922,1486],{"class":165},[159,104924,7925],{"class":1146},[159,104926,1571],{"class":1142},[159,104928,1492],{"class":165},[159,104930,104931,104933,104935,104937],{"class":161,"line":1828},[159,104932,4322],{"class":1146},[159,104934,1486],{"class":165},[159,104936,9113],{"class":1146},[159,104938,1492],{"class":165},[159,104940,104941],{"class":161,"line":1841},[159,104942,1508],{"class":165},[159,104944,104945],{"class":161,"line":1852},[159,104946,590],{"emptyLinePlaceholder":589},[159,104948,104949,104951,104953],{"class":161,"line":1866},[159,104950,99925],{"class":185},[159,104952,100217],{"class":185},[159,104954,17070],{"class":165},[159,104956,104957,104959,104962],{"class":161,"line":1879},[159,104958,99925],{"class":185},[159,104960,104961],{"class":185}," .sub-total",[159,104963,1478],{"class":165},[159,104965,104966,104968,104970,104972,104974],{"class":161,"line":1884},[159,104967,1721],{"class":1146},[159,104969,1486],{"class":165},[159,104971,18723],{"class":1146},[159,104973,1571],{"class":1142},[159,104975,1492],{"class":165},[159,104977,104978,104980,104982,104984],{"class":161,"line":1889},[159,104979,4322],{"class":1146},[159,104981,1486],{"class":165},[159,104983,100240],{"class":1146},[159,104985,1492],{"class":165},[159,104987,104988,104990,104992,104994],{"class":161,"line":1899},[159,104989,8875],{"class":1146},[159,104991,1486],{"class":165},[159,104993,4932],{"class":1146},[159,104995,1492],{"class":165},[159,104997,104998],{"class":161,"line":1912},[159,104999,1508],{"class":165},[159,105001,105002],{"class":161,"line":1925},[159,105003,590],{"emptyLinePlaceholder":589},[159,105005,105006,105008,105010],{"class":161,"line":1956},[159,105007,99925],{"class":185},[159,105009,100257],{"class":185},[159,105011,17070],{"class":165},[159,105013,105014,105016,105019],{"class":161,"line":1971},[159,105015,99925],{"class":185},[159,105017,105018],{"class":185}," .sub-total::before",[159,105020,17070],{"class":165},[159,105022,105023,105026],{"class":161,"line":1976},[159,105024,105025],{"class":185},"    .amount::before",[159,105027,1478],{"class":165},[159,105029,105030,105032,105034,105036],{"class":161,"line":1981},[159,105031,100264],{"class":1146},[159,105033,1486],{"class":165},[159,105035,100269],{"class":192},[159,105037,1492],{"class":165},[159,105039,105040,105042,105044,105046,105048],{"class":161,"line":1989},[159,105041,1721],{"class":1146},[159,105043,1486],{"class":165},[159,105045,7925],{"class":1146},[159,105047,1571],{"class":1142},[159,105049,1492],{"class":165},[159,105051,105052],{"class":161,"line":2001},[159,105053,1508],{"class":165},[159,105055,105056],{"class":161,"line":2006},[159,105057,590],{"emptyLinePlaceholder":589},[159,105059,105060,105062,105065],{"class":161,"line":2015},[159,105061,99925],{"class":185},[159,105063,105064],{"class":185}," .spec",[159,105066,1478],{"class":165},[159,105068,105069,105071,105073,105075],{"class":161,"line":2024},[159,105070,8875],{"class":1146},[159,105072,1486],{"class":165},[159,105074,11034],{"class":1146},[159,105076,1492],{"class":165},[159,105078,105079,105081,105083,105086],{"class":161,"line":2029},[159,105080,4322],{"class":1146},[159,105082,1486],{"class":165},[159,105084,105085],{"class":1146},"#888",[159,105087,1492],{"class":165},[159,105089,105090,105092,105094,105096,105098],{"class":161,"line":2038},[159,105091,1721],{"class":1146},[159,105093,1486],{"class":165},[159,105095,7678],{"class":1146},[159,105097,1571],{"class":1142},[159,105099,1492],{"class":165},[159,105101,105102,105104,105106,105108,105110],{"class":161,"line":2053},[159,105103,9041],{"class":1146},[159,105105,1486],{"class":165},[159,105107,1739],{"class":1146},[159,105109,1571],{"class":1142},[159,105111,1492],{"class":165},[159,105113,105114],{"class":161,"line":2070},[159,105115,1508],{"class":165},[159,105117,105118],{"class":161,"line":2095},[159,105119,590],{"emptyLinePlaceholder":589},[159,105121,105122,105124,105127],{"class":161,"line":2104},[159,105123,99925],{"class":185},[159,105125,105126],{"class":185}," .count",[159,105128,1478],{"class":165},[159,105130,105131,105133,105135,105137],{"class":161,"line":2120},[159,105132,8875],{"class":1146},[159,105134,1486],{"class":165},[159,105136,4932],{"class":1146},[159,105138,1492],{"class":165},[159,105140,105141,105143,105145,105148],{"class":161,"line":2134},[159,105142,4322],{"class":1146},[159,105144,1486],{"class":165},[159,105146,105147],{"class":1146},"#aaa",[159,105149,1492],{"class":165},[159,105151,105152],{"class":161,"line":2143},[159,105153,1508],{"class":165},[159,105155,105156],{"class":161,"line":2165},[159,105157,590],{"emptyLinePlaceholder":589},[159,105159,105160,105162],{"class":161,"line":2178},[159,105161,19576],{"class":185},[159,105163,1478],{"class":165},[159,105165,105166,105168,105170,105172,105174],{"class":161,"line":2191},[159,105167,1563],{"class":1146},[159,105169,1486],{"class":165},[159,105171,99874],{"class":1146},[159,105173,1571],{"class":1142},[159,105175,1492],{"class":165},[159,105177,105178,105180,105182,105184,105186],{"class":161,"line":2204},[159,105179,1497],{"class":1146},[159,105181,1486],{"class":165},[159,105183,1489],{"class":1146},[159,105185,1601],{"class":1146},[159,105187,1492],{"class":165},[159,105189,105190,105192,105194,105196],{"class":161,"line":2217},[159,105191,1818],{"class":1146},[159,105193,1486],{"class":165},[159,105195,1823],{"class":1146},[159,105197,1492],{"class":165},[159,105199,105200,105202,105204,105206],{"class":161,"line":2230},[159,105201,1831],{"class":1146},[159,105203,1486],{"class":165},[159,105205,8685],{"class":1146},[159,105207,1492],{"class":165},[159,105209,105210,105213,105215,105217,105219,105221,105224],{"class":161,"line":2243},[159,105211,105212],{"class":1146},"      border-top",[159,105214,1486],{"class":165},[159,105216,4932],{"class":1146},[159,105218,1571],{"class":1142},[159,105220,7709],{"class":1146},[159,105222,105223],{"class":1146}," #4e4e4e",[159,105225,1492],{"class":165},[159,105227,105228,105230,105232,105234,105236],{"class":161,"line":2256},[159,105229,1483],{"class":1146},[159,105231,1486],{"class":165},[159,105233,1739],{"class":1146},[159,105235,1571],{"class":1142},[159,105237,1492],{"class":165},[159,105239,105240],{"class":161,"line":2266},[159,105241,1508],{"class":165},[159,105243,105244],{"class":161,"line":2275},[159,105245,590],{"emptyLinePlaceholder":589},[159,105247,105248,105250,105253],{"class":161,"line":2284},[159,105249,19576],{"class":185},[159,105251,105252],{"class":185}," .amount",[159,105254,1478],{"class":165},[159,105256,105257,105259,105261,105263,105265],{"class":161,"line":2293},[159,105258,1721],{"class":1146},[159,105260,1486],{"class":165},[159,105262,18723],{"class":1146},[159,105264,1571],{"class":1142},[159,105266,1492],{"class":165},[159,105268,105269,105271,105273,105275],{"class":161,"line":2306},[159,105270,4322],{"class":1146},[159,105272,1486],{"class":165},[159,105274,100240],{"class":1146},[159,105276,1492],{"class":165},[159,105278,105279,105281,105283,105285],{"class":161,"line":2330},[159,105280,9377],{"class":1146},[159,105282,1486],{"class":165},[159,105284,19171],{"class":1146},[159,105286,1492],{"class":165},[159,105288,105289,105291,105293,105295,105297],{"class":161,"line":2350},[159,105290,8787],{"class":1146},[159,105292,1486],{"class":165},[159,105294,4230],{"class":1146},[159,105296,1571],{"class":1142},[159,105298,1492],{"class":165},[159,105300,105301],{"class":161,"line":2370},[159,105302,1508],{"class":165},[159,105304,105305,105307,105309],{"class":161,"line":2390},[159,105306,254],{"class":165},[159,105308,1468],{"class":169},[159,105310,173],{"class":165},[159,105312,105313,105315,105317],{"class":161,"line":2410},[159,105314,264],{"class":165},[159,105316,949],{"class":169},[159,105318,173],{"class":165},[159,105320,105321],{"class":161,"line":2430},[159,105322,590],{"emptyLinePlaceholder":589},[159,105324,105325,105327,105329],{"class":161,"line":2450},[159,105326,166],{"class":165},[159,105328,170],{"class":169},[159,105330,173],{"class":165},[159,105332,105333,105335,105337,105339,105341,105343],{"class":161,"line":2471},[159,105334,179],{"class":165},[159,105336,182],{"class":169},[159,105338,186],{"class":185},[159,105340,189],{"class":165},[159,105342,9651],{"class":192},[159,105344,173],{"class":165},[159,105346,105347,105349,105351],{"class":161,"line":2477},[159,105348,254],{"class":165},[159,105350,182],{"class":169},[159,105352,173],{"class":165},[159,105354,105355,105357,105359,105361,105363,105365],{"class":161,"line":2498},[159,105356,179],{"class":165},[159,105358,182],{"class":169},[159,105360,186],{"class":185},[159,105362,189],{"class":165},[159,105364,9623],{"class":192},[159,105366,173],{"class":165},[159,105368,105369,105371,105373,105376,105378,105380,105382,105385,105387,105389,105391,105393],{"class":161,"line":2518},[159,105370,2056],{"class":165},[159,105372,182],{"class":169},[159,105374,105375],{"class":165},">合计：\u003C",[159,105377,159],{"class":169},[159,105379,186],{"class":185},[159,105381,189],{"class":165},[159,105383,105384],{"class":192},"\"amount\"",[159,105386,2158],{"class":165},[159,105388,159],{"class":169},[159,105390,2158],{"class":165},[159,105392,182],{"class":169},[159,105394,173],{"class":165},[159,105396,105397,105399,105401],{"class":161,"line":2539},[159,105398,254],{"class":165},[159,105400,182],{"class":169},[159,105402,173],{"class":165},[159,105404,105405,105407,105409],{"class":161,"line":2561},[159,105406,179],{"class":165},[159,105408,228],{"class":169},[159,105410,173],{"class":165},[159,105412,105413,105415,105417,105419],{"class":161,"line":2573},[159,105414,1143],{"class":1142},[159,105416,100677],{"class":1146},[159,105418,1150],{"class":1142},[159,105420,2303],{"class":165},[159,105422,105423],{"class":161,"line":2591},[159,105424,100686],{"class":165},[159,105426,105427,105429,105431],{"class":161,"line":2602},[159,105428,100691],{"class":165},[159,105430,100694],{"class":192},[159,105432,17070],{"class":165},[159,105434,105435,105437,105439],{"class":161,"line":2613},[159,105436,100701],{"class":165},[159,105438,100704],{"class":192},[159,105440,17070],{"class":165},[159,105442,105443,105445,105448],{"class":161,"line":2624},[159,105444,100711],{"class":165},[159,105446,105447],{"class":1146},"289.9",[159,105449,17070],{"class":165},[159,105451,105452,105454,105456],{"class":161,"line":2630},[159,105453,100721],{"class":165},[159,105455,100724],{"class":192},[159,105457,17070],{"class":165},[159,105459,105460,105463,105465],{"class":161,"line":2636},[159,105461,105462],{"class":165},"        count: ",[159,105464,11034],{"class":1146},[159,105466,17070],{"class":165},[159,105468,105469,105472,105475],{"class":161,"line":2642},[159,105470,105471],{"class":165},"        spec: { color: ",[159,105473,105474],{"class":192},"'白色'",[159,105476,2468],{"class":165},[159,105478,105479],{"class":161,"line":2648},[159,105480,99192],{"class":165},[159,105482,105483],{"class":161,"line":2674},[159,105484,100686],{"class":165},[159,105486,105487,105489,105491],{"class":161,"line":2689},[159,105488,100691],{"class":165},[159,105490,100785],{"class":192},[159,105492,17070],{"class":165},[159,105494,105495,105497,105499],{"class":161,"line":2694},[159,105496,100701],{"class":165},[159,105498,100794],{"class":192},[159,105500,17070],{"class":165},[159,105502,105503,105505,105508],{"class":161,"line":2721},[159,105504,100711],{"class":165},[159,105506,105507],{"class":1146},"109.8",[159,105509,17070],{"class":165},[159,105511,105512,105514,105516],{"class":161,"line":2726},[159,105513,100721],{"class":165},[159,105515,100812],{"class":192},[159,105517,17070],{"class":165},[159,105519,105520,105522,105524],{"class":161,"line":2735},[159,105521,105462],{"class":165},[159,105523,23949],{"class":1146},[159,105525,17070],{"class":165},[159,105527,105528,105531,105533,105535,105537],{"class":161,"line":2744},[159,105529,105530],{"class":165},"        spec: { size: ",[159,105532,103203],{"class":192},[159,105534,2321],{"class":165},[159,105536,103208],{"class":192},[159,105538,2468],{"class":165},[159,105540,105541],{"class":161,"line":2753},[159,105542,99192],{"class":165},[159,105544,105545],{"class":161,"line":2758},[159,105546,100686],{"class":165},[159,105548,105549,105551,105553],{"class":161,"line":3959},[159,105550,100691],{"class":165},[159,105552,100829],{"class":192},[159,105554,17070],{"class":165},[159,105556,105557,105559,105561],{"class":161,"line":3968},[159,105558,100701],{"class":165},[159,105560,100838],{"class":192},[159,105562,17070],{"class":165},[159,105564,105565,105567,105570],{"class":161,"line":3977},[159,105566,100711],{"class":165},[159,105568,105569],{"class":1146},"488",[159,105571,17070],{"class":165},[159,105573,105574,105576,105578],{"class":161,"line":3982},[159,105575,100721],{"class":165},[159,105577,100856],{"class":192},[159,105579,17070],{"class":165},[159,105581,105582,105584,105586],{"class":161,"line":6843},[159,105583,105462],{"class":165},[159,105585,4932],{"class":1146},[159,105587,17070],{"class":165},[159,105589,105590,105592,105595,105598,105601],{"class":161,"line":6849},[159,105591,105471],{"class":165},[159,105593,105594],{"class":192},"'青色'",[159,105596,105597],{"class":165},", sum: ",[159,105599,105600],{"class":192},"'一大四小'",[159,105602,2468],{"class":165},[159,105604,105605],{"class":161,"line":6855},[159,105606,99192],{"class":165},[159,105608,105609],{"class":161,"line":6861},[159,105610,100686],{"class":165},[159,105612,105613,105615,105617],{"class":161,"line":6867},[159,105614,100691],{"class":165},[159,105616,100873],{"class":192},[159,105618,17070],{"class":165},[159,105620,105621,105623,105625],{"class":161,"line":6873},[159,105622,100701],{"class":165},[159,105624,100882],{"class":192},[159,105626,17070],{"class":165},[159,105628,105629,105631,105634],{"class":161,"line":6879},[159,105630,100711],{"class":165},[159,105632,105633],{"class":1146},"139",[159,105635,17070],{"class":165},[159,105637,105638,105640,105642],{"class":161,"line":6885},[159,105639,100721],{"class":165},[159,105641,100900],{"class":192},[159,105643,17070],{"class":165},[159,105645,105646,105648,105650],{"class":161,"line":6890},[159,105647,105462],{"class":165},[159,105649,4932],{"class":1146},[159,105651,17070],{"class":165},[159,105653,105654,105656,105659,105661,105664],{"class":161,"line":6896},[159,105655,105530],{"class":165},[159,105657,105658],{"class":192},"'小号'",[159,105660,2321],{"class":165},[159,105662,105663],{"class":192},"'紫色'",[159,105665,2327],{"class":165},[159,105667,105668,105671],{"class":161,"line":6902},[159,105669,105670],{"class":165},"        gift: ",[159,105672,105673],{"class":192},"'50g茶叶,清洗球'\n",[159,105675,105676],{"class":161,"line":6908},[159,105677,1308],{"class":165},[159,105679,105680],{"class":161,"line":6914},[159,105681,2474],{"class":165},[159,105683,105684],{"class":161,"line":6920},[159,105685,105686],{"class":1135},"    \u002F\u002F  1.根据数据渲染页面\n",[159,105688,105689,105691,105693,105695,105697,105699,105701,105703,105705,105707,105709,105711],{"class":161,"line":6926},[159,105690,13456],{"class":165},[159,105692,1156],{"class":185},[159,105694,1159],{"class":165},[159,105696,101201],{"class":192},[159,105698,21375],{"class":165},[159,105700,189],{"class":1142},[159,105702,101348],{"class":165},[159,105704,21155],{"class":185},[159,105706,1159],{"class":165},[159,105708,101095],{"class":8765},[159,105710,101098],{"class":1142},[159,105712,1478],{"class":165},[159,105714,105715],{"class":161,"line":6932},[159,105716,105717],{"class":1135},"      \u002F\u002F 对象解构\n",[159,105719,105720,105722,105724,105726,105728,105730,105732,105735,105737,105739,105741,105744,105746,105749,105751,105753],{"class":161,"line":6938},[159,105721,5145],{"class":1142},[159,105723,101107],{"class":165},[159,105725,101120],{"class":1146},[159,105727,1939],{"class":165},[159,105729,101110],{"class":1146},[159,105731,1939],{"class":165},[159,105733,105734],{"class":1146},"count",[159,105736,1939],{"class":165},[159,105738,101115],{"class":1146},[159,105740,1939],{"class":165},[159,105742,105743],{"class":1146},"spec",[159,105745,1939],{"class":165},[159,105747,105748],{"class":1146},"gift",[159,105750,101123],{"class":165},[159,105752,189],{"class":1142},[159,105754,101128],{"class":165},[159,105756,105757],{"class":161,"line":6944},[159,105758,105759],{"class":1135},"      \u002F\u002F 规格文字模块处理\n",[159,105761,105762,105764,105767,105769,105771,105773,105775,105777,105779,105781],{"class":161,"line":6949},[159,105763,5145],{"class":1142},[159,105765,105766],{"class":1146}," text",[159,105768,1150],{"class":1142},[159,105770,103238],{"class":165},[159,105772,103241],{"class":185},[159,105774,103244],{"class":165},[159,105776,21347],{"class":185},[159,105778,1159],{"class":165},[159,105780,103251],{"class":192},[159,105782,1165],{"class":165},[159,105784,105785],{"class":161,"line":6955},[159,105786,105787],{"class":1135},"      \u002F\u002F 处理赠品模块\n",[159,105789,105790,105792,105794,105796,105799,105801,105803,105805,105807,105810,105812,105814,105816,105818,105820,105823,105825,105828,105830,105832,105834,105836,105838,105840],{"class":161,"line":6961},[159,105791,5145],{"class":1142},[159,105793,21027],{"class":1146},[159,105795,1150],{"class":1142},[159,105797,105798],{"class":165}," gift ",[159,105800,18365],{"class":1142},[159,105802,104412],{"class":165},[159,105804,104415],{"class":185},[159,105806,1159],{"class":165},[159,105808,105809],{"class":192},"','",[159,105811,13019],{"class":165},[159,105813,21155],{"class":185},[159,105815,1159],{"class":165},[159,105817,101095],{"class":8765},[159,105819,101098],{"class":1142},[159,105821,105822],{"class":192}," `\u003Cspan class=\"tag\">【赠品】${",[159,105824,101095],{"class":165},[159,105826,105827],{"class":192},"}\u003C\u002Fspan>`",[159,105829,13019],{"class":165},[159,105831,21347],{"class":185},[159,105833,1159],{"class":165},[159,105835,21352],{"class":192},[159,105837,2710],{"class":165},[159,105839,20934],{"class":1142},[159,105841,17188],{"class":192},[159,105843,105844],{"class":161,"line":6967},[159,105845,105846],{"class":1135},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[159,105848,105849,105851,105854,105856,105859,105861,105863,105865,105868,105870,105872,105874,105877,105879,105881],{"class":161,"line":6973},[159,105850,5145],{"class":1142},[159,105852,105853],{"class":1146}," subtotal",[159,105855,1150],{"class":1142},[159,105857,105858],{"class":165}," ((price ",[159,105860,4777],{"class":1142},[159,105862,29369],{"class":1146},[159,105864,30131],{"class":1142},[159,105866,105867],{"class":165}," count) ",[159,105869,13083],{"class":1142},[159,105871,29369],{"class":1146},[159,105873,13019],{"class":165},[159,105875,105876],{"class":185},"toFixed",[159,105878,1159],{"class":165},[159,105880,11034],{"class":1146},[159,105882,1165],{"class":165},[159,105884,105885],{"class":161,"line":6979},[159,105886,590],{"emptyLinePlaceholder":589},[159,105888,105889,105891],{"class":161,"line":6985},[159,105890,21093],{"class":1142},[159,105892,17252],{"class":192},[159,105894,105895],{"class":161,"line":6991},[159,105896,105897],{"class":192},"        \u003Cdiv class=\"item\">\n",[159,105899,105900,105903,105905],{"class":161,"line":6997},[159,105901,105902],{"class":192},"          \u003Cimg src=\"${",[159,105904,101120],{"class":165},[159,105906,101152],{"class":192},[159,105908,105909,105912,105914,105917,105919],{"class":161,"line":7003},[159,105910,105911],{"class":192},"          \u003Cp class=\"name\">${",[159,105913,101110],{"class":165},[159,105915,105916],{"class":192},"}${",[159,105918,24983],{"class":165},[159,105920,101162],{"class":192},[159,105922,105923,105926,105928],{"class":161,"line":7009},[159,105924,105925],{"class":192},"          \u003Cp class=\"spec\">${",[159,105927,8507],{"class":165},[159,105929,101162],{"class":192},[159,105931,105932,105935,105937,105939,105941,105943,105945,105947],{"class":161,"line":7015},[159,105933,105934],{"class":192},"          \u003Cp class=\"price\">${",[159,105936,101115],{"class":165},[159,105938,9952],{"class":192},[159,105940,105876],{"class":185},[159,105942,1159],{"class":192},[159,105944,11034],{"class":1146},[159,105946,18387],{"class":192},[159,105948,101162],{"class":192},[159,105950,105951,105954,105956],{"class":161,"line":7021},[159,105952,105953],{"class":192},"          \u003Cp class=\"count\">x${",[159,105955,105734],{"class":165},[159,105957,101162],{"class":192},[159,105959,105960,105963,105966],{"class":161,"line":7026},[159,105961,105962],{"class":192},"          \u003Cp class=\"sub-total\">${",[159,105964,105965],{"class":165},"subtotal",[159,105967,101162],{"class":192},[159,105969,105970],{"class":161,"line":7031},[159,105971,105972],{"class":192},"        \u003C\u002Fdiv> \n",[159,105974,105975],{"class":161,"line":7037},[159,105976,105977],{"class":192},"             `\n",[159,105979,105980,105983,105985,105987,105989],{"class":161,"line":7043},[159,105981,105982],{"class":165},"    }).",[159,105984,21347],{"class":185},[159,105986,1159],{"class":165},[159,105988,21352],{"class":192},[159,105990,1165],{"class":165},[159,105992,105993],{"class":161,"line":7049},[159,105994,105995],{"class":1135},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[159,105997,105998,106000,106002,106004,106006,106009,106011,106014,106016,106018,106020,106023,106026,106028,106031,106033,106035,106037,106040,106042,106044,106046,106048],{"class":161,"line":7054},[159,105999,1143],{"class":1142},[159,106001,9828],{"class":1146},[159,106003,1150],{"class":1142},[159,106005,101348],{"class":165},[159,106007,106008],{"class":185},"reduce",[159,106010,26023],{"class":165},[159,106012,106013],{"class":8765},"prev",[159,106015,1939],{"class":165},[159,106017,101095],{"class":8765},[159,106019,2710],{"class":165},[159,106021,106022],{"class":1142},"=>",[159,106024,106025],{"class":165}," prev ",[159,106027,2704],{"class":1142},[159,106029,106030],{"class":165}," (item.price ",[159,106032,4777],{"class":1142},[159,106034,29369],{"class":1146},[159,106036,30131],{"class":1142},[159,106038,106039],{"class":165}," item.count) ",[159,106041,13083],{"class":1142},[159,106043,29369],{"class":1146},[159,106045,1939],{"class":165},[159,106047,1489],{"class":1146},[159,106049,1165],{"class":165},[159,106051,106052,106054,106056,106058,106061,106063,106065,106068,106070,106072,106074],{"class":161,"line":7060},[159,106053,13456],{"class":165},[159,106055,1156],{"class":185},[159,106057,1159],{"class":165},[159,106059,106060],{"class":192},"'.amount'",[159,106062,21375],{"class":165},[159,106064,189],{"class":1142},[159,106066,106067],{"class":165}," total.",[159,106069,105876],{"class":185},[159,106071,1159],{"class":165},[159,106073,11034],{"class":1146},[159,106075,1165],{"class":165},[159,106077,106078,106080,106082],{"class":161,"line":7066},[159,106079,254],{"class":165},[159,106081,228],{"class":169},[159,106083,173],{"class":165},[159,106085,106086,106088,106090],{"class":161,"line":7072},[159,106087,264],{"class":165},[159,106089,170],{"class":169},[159,106091,173],{"class":165},[159,106093,106094],{"class":161,"line":7078},[159,106095,590],{"emptyLinePlaceholder":589},[159,106097,106098,106100,106102],{"class":161,"line":7084},[159,106099,264],{"class":165},[159,106101,522],{"class":169},[159,106103,173],{"class":165},[37,106105,106107],{"id":106106},"_411-编程思想","4.11 编程思想",[42,106109,106111],{"id":106110},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,106113,106114,106117],{},[61,106115,106116],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,106119,106120],{},"调用就可以了",[14,106122,106123],{},[23,106124],{"alt":25,"src":106125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[42,106127,106129],{"id":106128},"_4112-面向对象","4.11.2 面向对象",[14,106131,106132],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,106134,106135],{},[23,106136],{"alt":25,"src":106137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,106139,106140],{},"面向对象的特性：",[103,106142,106143,106146,106149],{},[106,106144,106145],{},"封装性",[106,106147,106148],{},"继承性",[106,106150,106151],{},"多态性",[42,106153,106155],{"id":106154},"_4113-两者比较","4.11.3 两者比较",[14,106157,106158],{},[23,106159],{"alt":25,"src":106160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[37,106162,106164],{"id":106163},"_412-构造函数回顾","4.12 构造函数回顾",[14,106166,106167],{},[23,106168],{"alt":25,"src":106169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,106171,106172],{},[23,106173],{"alt":25,"src":106174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,106176,106177],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,106179,106180],{},[23,106181],{"alt":25,"src":106182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[37,106184,106186],{"id":106185},"_413-原型","4.13 原型",[42,106188,106190],{"id":106189},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,106192,106193],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,106195,106196],{},[23,106197],{"alt":25,"src":106198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,106200,106201],{},[23,106202],{"alt":25,"src":106203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,106205,106206],{},"原型是构造函数的属性，它也是一个对象",[14,106208,106209],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,106211,106212],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[151,106214,106216],{"className":153,"code":106215,"language":155,"meta":25,"style":25},"\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",[49,106217,106218,106226,106231,106239,106244,106249,106254,106259,106264,106268,106272,106276,106281,106286,106290,106295,106300,106305,106310,106315,106319,106327],{"__ignoreMap":25},[159,106219,106220,106222,106224],{"class":161,"line":162},[159,106221,166],{"class":165},[159,106223,170],{"class":169},[159,106225,173],{"class":165},[159,106227,106228],{"class":161,"line":176},[159,106229,106230],{"class":1135},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[159,106232,106233,106235,106237],{"class":161,"line":203},[159,106234,179],{"class":165},[159,106236,228],{"class":169},[159,106238,173],{"class":165},[159,106240,106241],{"class":161,"line":223},[159,106242,106243],{"class":165},"    function Star(uname, age) {\n",[159,106245,106246],{"class":161,"line":233},[159,106247,106248],{"class":165},"      this.uname = uname,\n",[159,106250,106251],{"class":161,"line":239},[159,106252,106253],{"class":165},"        this.age = age\n",[159,106255,106256],{"class":161,"line":245},[159,106257,106258],{"class":165},"      \u002F\u002F this.sing = function () {\n",[159,106260,106261],{"class":161,"line":251},[159,106262,106263],{"class":165},"      \u002F\u002F   console.log('唱歌')\n",[159,106265,106266],{"class":161,"line":261},[159,106267,590],{"emptyLinePlaceholder":589},[159,106269,106270],{"class":161,"line":603},[159,106271,6988],{"class":165},[159,106273,106274],{"class":161,"line":621},[159,106275,1508],{"class":165},[159,106277,106278],{"class":161,"line":634},[159,106279,106280],{"class":165},"    Star.prototype.sing = function () {\n",[159,106282,106283],{"class":161,"line":640},[159,106284,106285],{"class":165},"      console.log('唱歌')\n",[159,106287,106288],{"class":161,"line":1075},[159,106289,1508],{"class":165},[159,106291,106292],{"class":161,"line":1081},[159,106293,106294],{"class":165},"    \u002F\u002F console.dir(Star.prototype)\n",[159,106296,106297],{"class":161,"line":1091},[159,106298,106299],{"class":165},"    const pink = new Star('pink', 18)\n",[159,106301,106302],{"class":161,"line":1100},[159,106303,106304],{"class":165},"    const red = new Star('red', 20)\n",[159,106306,106307],{"class":161,"line":1123},[159,106308,106309],{"class":165},"    pink.sing()\n",[159,106311,106312],{"class":161,"line":1132},[159,106313,106314],{"class":165},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[159,106316,106317],{"class":161,"line":1139},[159,106318,590],{"emptyLinePlaceholder":589},[159,106320,106321,106323,106325],{"class":161,"line":1168},[159,106322,254],{"class":165},[159,106324,228],{"class":169},[159,106326,173],{"class":165},[159,106328,106329,106331,106333],{"class":161,"line":1174},[159,106330,264],{"class":165},[159,106332,170],{"class":169},[159,106334,173],{"class":165},[14,106336,106337],{},[23,106338],{"alt":25,"src":106339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[151,106341,106343],{"className":153,"code":106342,"language":155,"meta":25,"style":25},"\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",[49,106344,106345,106353,106361,106366,106371,106376,106381,106385,106390,106395,106400,106404,106409,106413,106417,106422,106426,106434],{"__ignoreMap":25},[159,106346,106347,106349,106351],{"class":161,"line":162},[159,106348,166],{"class":165},[159,106350,170],{"class":169},[159,106352,173],{"class":165},[159,106354,106355,106357,106359],{"class":161,"line":176},[159,106356,179],{"class":165},[159,106358,228],{"class":169},[159,106360,173],{"class":165},[159,106362,106363],{"class":161,"line":203},[159,106364,106365],{"class":165},"    let that\n",[159,106367,106368],{"class":161,"line":223},[159,106369,106370],{"class":165},"    function Star(uname) {\n",[159,106372,106373],{"class":161,"line":233},[159,106374,106375],{"class":165},"      this.uname = uname\n",[159,106377,106378],{"class":161,"line":239},[159,106379,106380],{"class":165},"      that = this\n",[159,106382,106383],{"class":161,"line":245},[159,106384,1508],{"class":165},[159,106386,106387],{"class":161,"line":251},[159,106388,106389],{"class":165},"    \u002F\u002F 实例对象是 ldh\n",[159,106391,106392],{"class":161,"line":261},[159,106393,106394],{"class":165},"    const ldh = new Star('刘德华')\n",[159,106396,106397],{"class":161,"line":603},[159,106398,106399],{"class":165},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[159,106401,106402],{"class":161,"line":621},[159,106403,590],{"emptyLinePlaceholder":589},[159,106405,106406],{"class":161,"line":634},[159,106407,106408],{"class":165},"    Star.sing = function () {\n",[159,106410,106411],{"class":161,"line":640},[159,106412,106285],{"class":165},[159,106414,106415],{"class":161,"line":1075},[159,106416,1508],{"class":165},[159,106418,106419],{"class":161,"line":1081},[159,106420,106421],{"class":165},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[159,106423,106424],{"class":161,"line":1091},[159,106425,590],{"emptyLinePlaceholder":589},[159,106427,106428,106430,106432],{"class":161,"line":1100},[159,106429,254],{"class":165},[159,106431,228],{"class":169},[159,106433,173],{"class":165},[159,106435,106436,106438,106440],{"class":161,"line":1123},[159,106437,264],{"class":165},[159,106439,170],{"class":169},[159,106441,173],{"class":165},[14,106443,106444],{},"构造函数的this指向的是实例对象；",[14,106446,106447],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[42,106449,106451],{"id":106450},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,106453,106454],{},[23,106455],{"alt":25,"src":106456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[151,106458,106460],{"className":153,"code":106459,"language":155,"meta":25,"style":25},"\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",[49,106461,106462,106470,106478,106483,106488,106493,106498,106503,106508,106513,106518,106523,106528,106532,106537,106542,106547,106552,106556,106561,106566,106571,106576,106580,106585,106590,106595,106600,106604,106609,106613,106621],{"__ignoreMap":25},[159,106463,106464,106466,106468],{"class":161,"line":162},[159,106465,166],{"class":165},[159,106467,170],{"class":169},[159,106469,173],{"class":165},[159,106471,106472,106474,106476],{"class":161,"line":176},[159,106473,179],{"class":165},[159,106475,228],{"class":169},[159,106477,173],{"class":165},[159,106479,106480],{"class":161,"line":203},[159,106481,106482],{"class":165},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[159,106484,106485],{"class":161,"line":223},[159,106486,106487],{"class":165},"    const arr = [1, 2, 3]\n",[159,106489,106490],{"class":161,"line":233},[159,106491,106492],{"class":165},"    \u002F\u002F 自己定义数组的扩展方法\n",[159,106494,106495],{"class":161,"line":239},[159,106496,106497],{"class":165},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[159,106499,106500],{"class":161,"line":245},[159,106501,106502],{"class":165},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[159,106504,106505],{"class":161,"line":251},[159,106506,106507],{"class":165},"    \u002F\u002F ①.最大值\n",[159,106509,106510],{"class":161,"line":261},[159,106511,106512],{"class":165},"    Array.prototype.max = function () {\n",[159,106514,106515],{"class":161,"line":603},[159,106516,106517],{"class":165},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[159,106519,106520],{"class":161,"line":621},[159,106521,106522],{"class":165},"      return Math.max(...this)\n",[159,106524,106525],{"class":161,"line":634},[159,106526,106527],{"class":165},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[159,106529,106530],{"class":161,"line":640},[159,106531,1508],{"class":165},[159,106533,106534],{"class":161,"line":1075},[159,106535,106536],{"class":165},"    console.log(arr.max())\n",[159,106538,106539],{"class":161,"line":1081},[159,106540,106541],{"class":165},"    \u002F\u002F ②最小值\n",[159,106543,106544],{"class":161,"line":1091},[159,106545,106546],{"class":165},"    Array.prototype.min = function () {\n",[159,106548,106549],{"class":161,"line":1100},[159,106550,106551],{"class":165},"      return Math.min(...this)\n",[159,106553,106554],{"class":161,"line":1123},[159,106555,1508],{"class":165},[159,106557,106558],{"class":161,"line":1132},[159,106559,106560],{"class":165},"    console.log(arr.min())\n",[159,106562,106563],{"class":161,"line":1139},[159,106564,106565],{"class":165},"    \u002F\u002F③求和\n",[159,106567,106568],{"class":161,"line":1168},[159,106569,106570],{"class":165},"    Array.prototype.sum = function () {\n",[159,106572,106573],{"class":161,"line":1174},[159,106574,106575],{"class":165},"      return this.reduce((prev, current) => prev + current, 0)\n",[159,106577,106578],{"class":161,"line":1180},[159,106579,1508],{"class":165},[159,106581,106582],{"class":161,"line":1194},[159,106583,106584],{"class":165},"    console.log(arr.sum())\n",[159,106586,106587],{"class":161,"line":1200},[159,106588,106589],{"class":165},"    \u002F\u002F ③排序\n",[159,106591,106592],{"class":161,"line":1221},[159,106593,106594],{"class":165},"    Array.prototype.rever = function () {\n",[159,106596,106597],{"class":161,"line":1230},[159,106598,106599],{"class":165},"      return this.reverse()\n",[159,106601,106602],{"class":161,"line":1247},[159,106603,1508],{"class":165},[159,106605,106606],{"class":161,"line":1265},[159,106607,106608],{"class":165},"    console.log(arr.rever())\n",[159,106610,106611],{"class":161,"line":1277},[159,106612,590],{"emptyLinePlaceholder":589},[159,106614,106615,106617,106619],{"class":161,"line":1283},[159,106616,254],{"class":165},[159,106618,228],{"class":169},[159,106620,173],{"class":165},[159,106622,106623,106625,106627],{"class":161,"line":1294},[159,106624,264],{"class":165},[159,106626,170],{"class":169},[159,106628,173],{"class":165},[14,106630,106631],{},[23,106632],{"alt":25,"src":106633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[42,106635,106637],{"id":106636},"_4133-constructor-属性","4.13.3 constructor 属性",[14,106639,106640],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,106642,106643],{},[23,106644],{"alt":25,"src":106645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[151,106647,106649],{"className":153,"code":106648,"language":155,"meta":25,"style":25},"\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",[49,106650,106651,106659,106667,106672,106677,106681,106686,106691,106696,106704],{"__ignoreMap":25},[159,106652,106653,106655,106657],{"class":161,"line":162},[159,106654,166],{"class":165},[159,106656,170],{"class":169},[159,106658,173],{"class":165},[159,106660,106661,106663,106665],{"class":161,"line":176},[159,106662,179],{"class":165},[159,106664,228],{"class":169},[159,106666,173],{"class":165},[159,106668,106669],{"class":161,"line":203},[159,106670,106671],{"class":165},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[159,106673,106674],{"class":161,"line":223},[159,106675,106676],{"class":165},"    function Star() {\n",[159,106678,106679],{"class":161,"line":233},[159,106680,1508],{"class":165},[159,106682,106683],{"class":161,"line":239},[159,106684,106685],{"class":165},"    const ldh = new Star()\n",[159,106687,106688],{"class":161,"line":245},[159,106689,106690],{"class":165},"    console.log(Star.prototype)\n",[159,106692,106693],{"class":161,"line":251},[159,106694,106695],{"class":165},"    console.log(Star.prototype.constructor === Star)\n",[159,106697,106698,106700,106702],{"class":161,"line":261},[159,106699,254],{"class":165},[159,106701,228],{"class":169},[159,106703,173],{"class":165},[159,106705,106706,106708,106710],{"class":161,"line":603},[159,106707,264],{"class":165},[159,106709,170],{"class":169},[159,106711,173],{"class":165},[14,106713,106714],{},[23,106715],{"alt":25,"src":106716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,106718,106719],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[151,106721,106723],{"className":153,"code":106722,"language":155,"meta":25,"style":25},"  \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",[49,106724,106725,106733,106737,106741,106745,106750,106755,106760,106764,106769,106774,106779,106784,106789,106794,106798,106802,106807,106812,106817,106821,106826,106831,106835,106839,106843],{"__ignoreMap":25},[159,106726,106727,106729,106731],{"class":161,"line":162},[159,106728,179],{"class":165},[159,106730,228],{"class":169},[159,106732,173],{"class":165},[159,106734,106735],{"class":161,"line":176},[159,106736,106671],{"class":165},[159,106738,106739],{"class":161,"line":203},[159,106740,106676],{"class":165},[159,106742,106743],{"class":161,"line":223},[159,106744,1508],{"class":165},[159,106746,106747],{"class":161,"line":233},[159,106748,106749],{"class":165},"    \u002F\u002F const ldh = new Star()\n",[159,106751,106752],{"class":161,"line":239},[159,106753,106754],{"class":165},"    \u002F\u002F console.log(Star.prototype)\n",[159,106756,106757],{"class":161,"line":245},[159,106758,106759],{"class":165},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[159,106761,106762],{"class":161,"line":251},[159,106763,590],{"emptyLinePlaceholder":589},[159,106765,106766],{"class":161,"line":261},[159,106767,106768],{"class":165},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[159,106770,106771],{"class":161,"line":603},[159,106772,106773],{"class":165},"    \u002F\u002F Star.prototype.sing = function () {\n",[159,106775,106776],{"class":161,"line":621},[159,106777,106778],{"class":165},"    \u002F\u002F   console.log('唱歌')\n",[159,106780,106781],{"class":161,"line":634},[159,106782,106783],{"class":165},"    \u002F\u002F }\n",[159,106785,106786],{"class":161,"line":640},[159,106787,106788],{"class":165},"    \u002F\u002F Star.prototype.dance = function () {\n",[159,106790,106791],{"class":161,"line":1075},[159,106792,106793],{"class":165},"    \u002F\u002F   console.log('跳舞')\n",[159,106795,106796],{"class":161,"line":1081},[159,106797,106783],{"class":165},[159,106799,106800],{"class":161,"line":1091},[159,106801,106690],{"class":165},[159,106803,106804],{"class":161,"line":1100},[159,106805,106806],{"class":165},"    Star.prototype = {\n",[159,106808,106809],{"class":161,"line":1123},[159,106810,106811],{"class":165},"      sing: function () {\n",[159,106813,106814],{"class":161,"line":1132},[159,106815,106816],{"class":165},"        console.log('唱歌')\n",[159,106818,106819],{"class":161,"line":1139},[159,106820,99192],{"class":165},[159,106822,106823],{"class":161,"line":1168},[159,106824,106825],{"class":165},"      dance: function () {\n",[159,106827,106828],{"class":161,"line":1174},[159,106829,106830],{"class":165},"        console.log('跳舞')\n",[159,106832,106833],{"class":161,"line":1180},[159,106834,1308],{"class":165},[159,106836,106837],{"class":161,"line":1194},[159,106838,1508],{"class":165},[159,106840,106841],{"class":161,"line":1200},[159,106842,106690],{"class":165},[159,106844,106845,106847,106849],{"class":161,"line":1221},[159,106846,254],{"class":165},[159,106848,228],{"class":169},[159,106850,173],{"class":165},[14,106852,106853],{},"进行输出结果后会发现：",[14,106855,106856],{},[23,106857],{"alt":25,"src":106858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,106860,106861],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,106863,106864],{},"所以，要重新指回创造这个原型对象的构造函数",[151,106866,106868],{"className":18300,"code":106867,"language":18302,"meta":25,"style":25},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[49,106869,106870,106884,106889,106894,106905,106918,106923,106934,106948,106952],{"__ignoreMap":25},[159,106871,106872,106875,106877,106880,106882],{"class":161,"line":162},[159,106873,106874],{"class":1146},"Star",[159,106876,9952],{"class":165},[159,106878,106879],{"class":1146},"prototype",[159,106881,1150],{"class":1142},[159,106883,1478],{"class":165},[159,106885,106886],{"class":161,"line":176},[159,106887,106888],{"class":1135},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[159,106890,106891],{"class":161,"line":203},[159,106892,106893],{"class":165},"  constructor: Star,\n",[159,106895,106896,106899,106901,106903],{"class":161,"line":223},[159,106897,106898],{"class":185},"  sing",[159,106900,1486],{"class":165},[159,106902,1215],{"class":1142},[159,106904,1218],{"class":165},[159,106906,106907,106909,106911,106913,106916],{"class":161,"line":233},[159,106908,20856],{"class":165},[159,106910,5166],{"class":185},[159,106912,1159],{"class":165},[159,106914,106915],{"class":192},"'唱歌'",[159,106917,1165],{"class":165},[159,106919,106920],{"class":161,"line":239},[159,106921,106922],{"class":165},"   },\n",[159,106924,106925,106928,106930,106932],{"class":161,"line":245},[159,106926,106927],{"class":185},"   dance",[159,106929,1486],{"class":165},[159,106931,1215],{"class":1142},[159,106933,1218],{"class":165},[159,106935,106936,106939,106941,106943,106946],{"class":161,"line":251},[159,106937,106938],{"class":165},"     console.",[159,106940,5166],{"class":185},[159,106942,1159],{"class":165},[159,106944,106945],{"class":192},"'跳舞'",[159,106947,1165],{"class":165},[159,106949,106950],{"class":161,"line":261},[159,106951,27927],{"class":165},[159,106953,106954],{"class":161,"line":603},[159,106955,15685],{"class":165},[14,106957,106958],{},[23,106959],{"alt":25,"src":106960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,106962,106963],{},"总结1：",[14,106965,106966],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,106968,106969],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,106971,106972],{},"constructor指的是他的来源",[14,106974,106975],{},[23,106976],{"alt":25,"src":106977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,106979,106980],{},[23,106981],{"alt":25,"src":106982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,106984,106985],{},"总结2：",[14,106987,106988],{},[23,106989],{"alt":25,"src":106990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,106992,106993],{},[23,106994],{"alt":25,"src":106995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,106997,106998],{},[23,106999],{"alt":25,"src":107000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[42,107002,107004],{"id":107003},"_4134-对象原型","4.13.4 对象原型",[14,107006,107007],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,107009,107010],{},"对象原型就是__proto__这个属性",[14,107012,107013],{},[23,107014],{"alt":25,"src":107015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,107017,107018],{},[23,107019],{"alt":25,"src":107020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,107022,107023],{},[23,107024],{"alt":25,"src":107025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,107027,107028],{},[23,107029],{"alt":25,"src":107030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[151,107032,107034],{"className":153,"code":107033,"language":155,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[49,107035,107036,107044,107052,107056,107060,107064,107069,107077],{"__ignoreMap":25},[159,107037,107038,107040,107042],{"class":161,"line":162},[159,107039,166],{"class":165},[159,107041,170],{"class":169},[159,107043,173],{"class":165},[159,107045,107046,107048,107050],{"class":161,"line":176},[159,107047,179],{"class":165},[159,107049,228],{"class":169},[159,107051,173],{"class":165},[159,107053,107054],{"class":161,"line":203},[159,107055,106676],{"class":165},[159,107057,107058],{"class":161,"line":223},[159,107059,1508],{"class":165},[159,107061,107062],{"class":161,"line":233},[159,107063,106685],{"class":165},[159,107065,107066],{"class":161,"line":239},[159,107067,107068],{"class":165},"    console.log(ldh)\n",[159,107070,107071,107073,107075],{"class":161,"line":245},[159,107072,254],{"class":165},[159,107074,228],{"class":169},[159,107076,173],{"class":165},[159,107078,107079,107081,107083],{"class":161,"line":251},[159,107080,264],{"class":165},[159,107082,170],{"class":169},[159,107084,173],{"class":165},[14,107086,107087],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,107089,107090],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,107092,107093],{},[23,107094],{"alt":25,"src":107095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,107097,107098],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,107100,107101],{},"对象原型指向原型对象",[14,107103,107104],{},[23,107105],{"alt":25,"src":107106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,107108,107109],{},[23,107110],{"alt":25,"src":107111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,107113,107114],{},[23,107115],{"alt":25,"src":107116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[42,107118,107120],{"id":107119},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,107122,107123],{},[23,107124],{"alt":25,"src":107125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[134,107127,107128,107131,107134,107137],{},[106,107129,107130],{},"构造函数通过new的形式实例化得到实例对象",[106,107132,107133],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[106,107135,107136],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[106,107138,107139],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,107141,107142],{},[23,107143],{"alt":25,"src":107144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,107146,107147],{},"题目梳理：",[14,107149,107150],{},[23,107151],{"alt":25,"src":107152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[42,107154,107156],{"id":107155},"_4136-原型继承","4.13.6 原型继承",[14,107158,107159],{},[23,107160],{"alt":25,"src":107161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,107163,107164],{},[23,107165],{"alt":25,"src":107166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,107168,107169],{},[23,107170],{"alt":25,"src":107171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,107173,107174],{},[23,107175],{"alt":25,"src":107176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,107178,107179],{},[23,107180],{"alt":25,"src":107181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,107183,107184],{},[23,107185],{"alt":25,"src":107186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,107188,107189],{},[23,107190],{"alt":25,"src":107191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,107193,107194],{},[23,107195],{"alt":25,"src":107196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,107198,107199],{},"回顾：构造函数每次new得到对象都是不同的",[42,107201,107203],{"id":107202},"_4137-原型链","4.13.7 原型链",[14,107205,107206],{},[23,107207],{"alt":25,"src":107208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,107210,107211],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,107213,107214],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,107216,107217],{},"大哥是Object",[14,107219,107220],{},[23,107221],{"alt":25,"src":107222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,107224,107225],{},[23,107226],{"alt":25,"src":107227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,107229,107230],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,107232,107233],{},"万物皆对象",[42,107235,107237],{"id":107236},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,107239,107240],{},"模态框",[14,107242,107243],{},"以后遇见这个效果直接使用这个就行",[14,107245,107246],{},[23,107247],{"alt":25,"src":107248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,107250,107251],{},[23,107252],{"alt":25,"src":107253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,107255,107256],{},[23,107257],{"alt":25,"src":107258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,107260,107261],{},[23,107262],{"alt":25,"src":107263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,107265,107266],{},"补充知识点：",[134,107268,107269],{},[106,107270,107271],{},"append()",[14,107273,107274],{},[23,107275],{"alt":25,"src":107276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[151,107278,107280],{"className":520,"code":107279,"language":522,"meta":25,"style":25},"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",[49,107281,107282,107287,107292,107297,107301,107305,107309,107314,107319,107324,107328],{"__ignoreMap":25},[159,107283,107284],{"class":161,"line":162},[159,107285,107286],{"class":165},"append(param1)\n",[159,107288,107289],{"class":161,"line":176},[159,107290,107291],{"class":165},"append(param1, param2)\n",[159,107293,107294],{"class":161,"line":203},[159,107295,107296],{"class":165},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[159,107298,107299],{"class":161,"line":223},[159,107300,590],{"emptyLinePlaceholder":589},[159,107302,107303],{"class":161,"line":233},[159,107304,590],{"emptyLinePlaceholder":589},[159,107306,107307],{"class":161,"line":239},[159,107308,590],{"emptyLinePlaceholder":589},[159,107310,107311],{"class":161,"line":245},[159,107312,107313],{"class":165},"let div = document.createElement(\"div\");\n",[159,107315,107316],{"class":161,"line":251},[159,107317,107318],{"class":165},"let p = document.createElement(\"p\");\n",[159,107320,107321],{"class":161,"line":261},[159,107322,107323],{"class":165},"div.append(p);\n",[159,107325,107326],{"class":161,"line":603},[159,107327,590],{"emptyLinePlaceholder":589},[159,107329,107330,107333,107335],{"class":161,"line":621},[159,107331,107332],{"class":165},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[159,107334,14],{"class":169},[159,107336,107337],{"class":165},"> ]\n",[134,107339,107340],{"start":176},[106,107341,107342],{},"remove()",[14,107344,107345],{},"自己删自己",[14,107347,107348],{},[23,107349],{"alt":25,"src":107350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[151,107352,107354],{"className":520,"code":107353,"language":522,"meta":25,"style":25},"\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",[49,107355,107356,107366,107380,107384,107392,107406,107426,107438,107446,107453,107465,107478,107513,107525,107536,107548,107560,107572,107599,107609,107613,107617,107626,107638,107652,107662,107674,107678,107682,107692,107703,107713,107723,107736,107749,107759,107763,107767,107776,107786,107798,107802,107806,107815,107825,107835,107847,107851,107855,107865,107881,107892,107902,107912,107924,107936,107948,107952,107956,107969,107980,107984,107992,108000,108004,108012,108032,108052,108060,108065,108091,108096,108101,108120,108125,108137,108142,108153,108163,108173,108178,108183,108187,108192,108197,108202,108222,108227,108247,108252,108266,108271,108276,108281,108297,108301,108306,108335,108340,108345,108350,108361,108365,108369,108373,108378,108403,108408,108433,108438,108447,108451,108456,108481,108485,108510,108514,108523,108527,108532,108550,108560,108564,108572,108580,108584],{"__ignoreMap":25},[159,107357,107358,107360,107362,107364],{"class":161,"line":162},[159,107359,914],{"class":165},[159,107361,917],{"class":169},[159,107363,920],{"class":185},[159,107365,173],{"class":165},[159,107367,107368,107370,107372,107374,107376,107378],{"class":161,"line":176},[159,107369,166],{"class":165},[159,107371,522],{"class":169},[159,107373,931],{"class":185},[159,107375,189],{"class":165},[159,107377,936],{"class":192},[159,107379,173],{"class":165},[159,107381,107382],{"class":161,"line":203},[159,107383,590],{"emptyLinePlaceholder":589},[159,107385,107386,107388,107390],{"class":161,"line":223},[159,107387,166],{"class":165},[159,107389,949],{"class":169},[159,107391,173],{"class":165},[159,107393,107394,107396,107398,107400,107402,107404],{"class":161,"line":233},[159,107395,179],{"class":165},[159,107397,958],{"class":169},[159,107399,961],{"class":185},[159,107401,189],{"class":165},[159,107403,966],{"class":192},[159,107405,173],{"class":165},[159,107407,107408,107410,107412,107414,107416,107418,107420,107422,107424],{"class":161,"line":239},[159,107409,179],{"class":165},[159,107411,958],{"class":169},[159,107413,547],{"class":185},[159,107415,189],{"class":165},[159,107417,981],{"class":192},[159,107419,984],{"class":185},[159,107421,189],{"class":165},[159,107423,989],{"class":192},[159,107425,173],{"class":165},[159,107427,107428,107430,107432,107434,107436],{"class":161,"line":245},[159,107429,179],{"class":165},[159,107431,998],{"class":169},[159,107433,1001],{"class":165},[159,107435,998],{"class":169},[159,107437,173],{"class":165},[159,107439,107440,107442,107444],{"class":161,"line":251},[159,107441,179],{"class":165},[159,107443,1468],{"class":169},[159,107445,173],{"class":165},[159,107447,107448,107451],{"class":161,"line":261},[159,107449,107450],{"class":185},"    .modal",[159,107452,1478],{"class":165},[159,107454,107455,107457,107459,107461,107463],{"class":161,"line":603},[159,107456,1563],{"class":1146},[159,107458,1486],{"class":165},[159,107460,27596],{"class":1146},[159,107462,1571],{"class":1142},[159,107464,1492],{"class":165},[159,107466,107467,107470,107472,107474,107476],{"class":161,"line":621},[159,107468,107469],{"class":1146},"      min-height",[159,107471,1486],{"class":165},[159,107473,1596],{"class":1146},[159,107475,1571],{"class":1142},[159,107477,1492],{"class":165},[159,107479,107480,107482,107484,107486,107488,107490,107492,107494,107496,107498,107500,107502,107504,107506,107508,107511],{"class":161,"line":634},[159,107481,100050],{"class":1146},[159,107483,1486],{"class":165},[159,107485,1489],{"class":1146},[159,107487,1259],{"class":1146},[159,107489,7664],{"class":1146},[159,107491,1571],{"class":1142},[159,107493,100067],{"class":1146},[159,107495,1159],{"class":165},[159,107497,1489],{"class":1146},[159,107499,1939],{"class":165},[159,107501,1489],{"class":1146},[159,107503,1939],{"class":165},[159,107505,1489],{"class":1146},[159,107507,1939],{"class":165},[159,107509,107510],{"class":1146},"0.1",[159,107512,1953],{"class":165},[159,107514,107515,107517,107519,107521,107523],{"class":161,"line":640},[159,107516,1959],{"class":1146},[159,107518,1486],{"class":165},[159,107520,8866],{"class":1146},[159,107522,1571],{"class":1142},[159,107524,1492],{"class":165},[159,107526,107527,107529,107531,107534],{"class":161,"line":1075},[159,107528,1551],{"class":1146},[159,107530,1486],{"class":165},[159,107532,107533],{"class":1146},"fixed",[159,107535,1492],{"class":165},[159,107537,107538,107541,107543,107546],{"class":161,"line":1081},[159,107539,107540],{"class":1146},"      z-index",[159,107542,1486],{"class":165},[159,107544,107545],{"class":1146},"999",[159,107547,1492],{"class":165},[159,107549,107550,107552,107554,107556,107558],{"class":161,"line":1091},[159,107551,1634],{"class":1146},[159,107553,1486],{"class":165},[159,107555,4230],{"class":1146},[159,107557,1662],{"class":1142},[159,107559,1492],{"class":165},[159,107561,107562,107564,107566,107568,107570],{"class":161,"line":1100},[159,107563,1748],{"class":1146},[159,107565,1486],{"class":165},[159,107567,4230],{"class":1146},[159,107569,1662],{"class":1142},[159,107571,1492],{"class":165},[159,107573,107574,107576,107578,107580,107582,107585,107587,107589,107591,107593,107595,107597],{"class":161,"line":1123},[159,107575,100091],{"class":1146},[159,107577,1486],{"class":165},[159,107579,100096],{"class":1146},[159,107581,1159],{"class":165},[159,107583,107584],{"class":1146},"-50",[159,107586,1662],{"class":1142},[159,107588,1939],{"class":165},[159,107590,107584],{"class":1146},[159,107592,1662],{"class":1142},[159,107594,1939],{"class":165},[159,107596,1489],{"class":1146},[159,107598,1953],{"class":165},[159,107600,107601,107603,107605,107607],{"class":161,"line":1132},[159,107602,1682],{"class":1146},[159,107604,1486],{"class":165},[159,107606,7868],{"class":1146},[159,107608,1492],{"class":165},[159,107610,107611],{"class":161,"line":1139},[159,107612,1508],{"class":165},[159,107614,107615],{"class":161,"line":1168},[159,107616,590],{"emptyLinePlaceholder":589},[159,107618,107619,107621,107624],{"class":161,"line":1174},[159,107620,107450],{"class":185},[159,107622,107623],{"class":185}," .header",[159,107625,1478],{"class":165},[159,107627,107628,107630,107632,107634,107636],{"class":161,"line":1180},[159,107629,4264],{"class":1146},[159,107631,1486],{"class":165},[159,107633,4269],{"class":1146},[159,107635,1571],{"class":1142},[159,107637,1492],{"class":165},[159,107639,107640,107642,107644,107646,107648,107650],{"class":161,"line":1194},[159,107641,1483],{"class":1146},[159,107643,1486],{"class":165},[159,107645,1489],{"class":1146},[159,107647,7664],{"class":1146},[159,107649,1571],{"class":1142},[159,107651,1492],{"class":165},[159,107653,107654,107656,107658,107660],{"class":161,"line":1200},[159,107655,1551],{"class":1146},[159,107657,1486],{"class":165},[159,107659,1556],{"class":1146},[159,107661,1492],{"class":165},[159,107663,107664,107666,107668,107670,107672],{"class":161,"line":1221},[159,107665,1721],{"class":1146},[159,107667,1486],{"class":165},[159,107669,1739],{"class":1146},[159,107671,1571],{"class":1142},[159,107673,1492],{"class":165},[159,107675,107676],{"class":161,"line":1230},[159,107677,1508],{"class":165},[159,107679,107680],{"class":161,"line":1247},[159,107681,590],{"emptyLinePlaceholder":589},[159,107683,107684,107686,107688,107690],{"class":161,"line":1265},[159,107685,107450],{"class":185},[159,107687,107623],{"class":185},[159,107689,15383],{"class":169},[159,107691,1478],{"class":165},[159,107693,107694,107697,107699,107701],{"class":161,"line":1277},[159,107695,107696],{"class":1146},"      font-style",[159,107698,1486],{"class":165},[159,107700,10889],{"class":1146},[159,107702,1492],{"class":165},[159,107704,107705,107707,107709,107711],{"class":161,"line":1283},[159,107706,4322],{"class":1146},[159,107708,1486],{"class":165},[159,107710,9113],{"class":1146},[159,107712,1492],{"class":165},[159,107714,107715,107717,107719,107721],{"class":161,"line":1294},[159,107716,1551],{"class":1146},[159,107718,1486],{"class":165},[159,107720,1627],{"class":1146},[159,107722,1492],{"class":165},[159,107724,107725,107728,107730,107732,107734],{"class":161,"line":1305},[159,107726,107727],{"class":1146},"      right",[159,107729,1486],{"class":165},[159,107731,1673],{"class":1146},[159,107733,1571],{"class":1142},[159,107735,1492],{"class":165},[159,107737,107738,107740,107742,107745,107747],{"class":161,"line":1311},[159,107739,1748],{"class":1146},[159,107741,1486],{"class":165},[159,107743,107744],{"class":1146},"-2",[159,107746,1571],{"class":1142},[159,107748,1492],{"class":165},[159,107750,107751,107753,107755,107757],{"class":161,"line":1322},[159,107752,9067],{"class":1146},[159,107754,1486],{"class":165},[159,107756,9072],{"class":1146},[159,107758,1492],{"class":165},[159,107760,107761],{"class":161,"line":1327},[159,107762,1508],{"class":165},[159,107764,107765],{"class":161,"line":1336},[159,107766,590],{"emptyLinePlaceholder":589},[159,107768,107769,107771,107774],{"class":161,"line":1345},[159,107770,107450],{"class":185},[159,107772,107773],{"class":185}," .body",[159,107775,1478],{"class":165},[159,107777,107778,107780,107782,107784],{"class":161,"line":1350},[159,107779,4188],{"class":1146},[159,107781,1486],{"class":165},[159,107783,4193],{"class":1146},[159,107785,1492],{"class":165},[159,107787,107788,107790,107792,107794,107796],{"class":161,"line":1764},[159,107789,1483],{"class":1146},[159,107791,1486],{"class":165},[159,107793,1964],{"class":1146},[159,107795,1571],{"class":1142},[159,107797,1492],{"class":165},[159,107799,107800],{"class":161,"line":1769},[159,107801,1508],{"class":165},[159,107803,107804],{"class":161,"line":1777},[159,107805,590],{"emptyLinePlaceholder":589},[159,107807,107808,107810,107813],{"class":161,"line":1788},[159,107809,107450],{"class":185},[159,107811,107812],{"class":185}," .footer",[159,107814,1478],{"class":165},[159,107816,107817,107819,107821,107823],{"class":161,"line":1802},[159,107818,1818],{"class":1146},[159,107820,1486],{"class":165},[159,107822,1823],{"class":1146},[159,107824,1492],{"class":165},[159,107826,107827,107829,107831,107833],{"class":161,"line":1815},[159,107828,1831],{"class":1146},[159,107830,1486],{"class":165},[159,107832,8685],{"class":1146},[159,107834,1492],{"class":165},[159,107836,107837,107839,107841,107843,107845],{"class":161,"line":1828},[159,107838,1483],{"class":1146},[159,107840,1486],{"class":165},[159,107842,1964],{"class":1146},[159,107844,1571],{"class":1142},[159,107846,1492],{"class":165},[159,107848,107849],{"class":161,"line":1841},[159,107850,1508],{"class":165},[159,107852,107853],{"class":161,"line":1852},[159,107854,590],{"emptyLinePlaceholder":589},[159,107856,107857,107859,107861,107863],{"class":161,"line":1866},[159,107858,107450],{"class":185},[159,107860,107812],{"class":185},[159,107862,7885],{"class":169},[159,107864,1478],{"class":165},[159,107866,107867,107869,107871,107873,107875,107877,107879],{"class":161,"line":1879},[159,107868,1483],{"class":1146},[159,107870,1486],{"class":165},[159,107872,23949],{"class":1146},[159,107874,1571],{"class":1142},[159,107876,25733],{"class":1146},[159,107878,1571],{"class":1142},[159,107880,1492],{"class":165},[159,107882,107883,107885,107887,107890],{"class":161,"line":1884},[159,107884,8755],{"class":1146},[159,107886,1486],{"class":165},[159,107888,107889],{"class":1146},"#ccc",[159,107891,1492],{"class":165},[159,107893,107894,107896,107898,107900],{"class":161,"line":1889},[159,107895,11019],{"class":1146},[159,107897,1486],{"class":165},[159,107899,1529],{"class":1146},[159,107901,1492],{"class":165},[159,107903,107904,107906,107908,107910],{"class":161,"line":1899},[159,107905,4322],{"class":1146},[159,107907,1486],{"class":165},[159,107909,7868],{"class":1146},[159,107911,1492],{"class":165},[159,107913,107914,107916,107918,107920,107922],{"class":161,"line":1912},[159,107915,1959],{"class":1146},[159,107917,1486],{"class":165},[159,107919,11034],{"class":1146},[159,107921,1571],{"class":1142},[159,107923,1492],{"class":165},[159,107925,107926,107928,107930,107932,107934],{"class":161,"line":1925},[159,107927,8787],{"class":1146},[159,107929,1486],{"class":165},[159,107931,1964],{"class":1146},[159,107933,1571],{"class":1142},[159,107935,1492],{"class":165},[159,107937,107938,107940,107942,107944,107946],{"class":161,"line":1956},[159,107939,1721],{"class":1146},[159,107941,1486],{"class":165},[159,107943,7678],{"class":1146},[159,107945,1571],{"class":1142},[159,107947,1492],{"class":165},[159,107949,107950],{"class":161,"line":1971},[159,107951,1508],{"class":165},[159,107953,107954],{"class":161,"line":1976},[159,107955,590],{"emptyLinePlaceholder":589},[159,107957,107958,107960,107962,107964,107967],{"class":161,"line":1981},[159,107959,107450],{"class":185},[159,107961,107812],{"class":185},[159,107963,7885],{"class":169},[159,107965,107966],{"class":185},".submit",[159,107968,1478],{"class":165},[159,107970,107971,107973,107975,107978],{"class":161,"line":1989},[159,107972,1682],{"class":1146},[159,107974,1486],{"class":165},[159,107976,107977],{"class":1146},"#369",[159,107979,1492],{"class":165},[159,107981,107982],{"class":161,"line":2001},[159,107983,1508],{"class":165},[159,107985,107986,107988,107990],{"class":161,"line":2006},[159,107987,254],{"class":165},[159,107989,1468],{"class":169},[159,107991,173],{"class":165},[159,107993,107994,107996,107998],{"class":161,"line":2015},[159,107995,264],{"class":165},[159,107997,949],{"class":169},[159,107999,173],{"class":165},[159,108001,108002],{"class":161,"line":2024},[159,108003,590],{"emptyLinePlaceholder":589},[159,108005,108006,108008,108010],{"class":161,"line":2029},[159,108007,166],{"class":165},[159,108009,170],{"class":169},[159,108011,173],{"class":165},[159,108013,108014,108016,108018,108020,108022,108025,108028,108030],{"class":161,"line":2038},[159,108015,179],{"class":165},[159,108017,608],{"class":169},[159,108019,555],{"class":185},[159,108021,189],{"class":165},[159,108023,108024],{"class":192},"\"delete\"",[159,108026,108027],{"class":165},">删除\u003C\u002F",[159,108029,608],{"class":169},[159,108031,173],{"class":165},[159,108033,108034,108036,108038,108040,108042,108045,108048,108050],{"class":161,"line":2053},[159,108035,179],{"class":165},[159,108037,608],{"class":169},[159,108039,555],{"class":185},[159,108041,189],{"class":165},[159,108043,108044],{"class":192},"\"login\"",[159,108046,108047],{"class":165},">登录\u003C\u002F",[159,108049,608],{"class":169},[159,108051,173],{"class":165},[159,108053,108054,108056,108058],{"class":161,"line":2070},[159,108055,179],{"class":165},[159,108057,228],{"class":169},[159,108059,173],{"class":165},[159,108061,108062],{"class":161,"line":2095},[159,108063,108064],{"class":1135},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[159,108066,108067,108069,108072,108074,108076,108078,108080,108082,108085,108087,108089],{"class":161,"line":2104},[159,108068,17167],{"class":1142},[159,108070,108071],{"class":185}," Modal",[159,108073,1159],{"class":165},[159,108075,998],{"class":8765},[159,108077,1150],{"class":1142},[159,108079,17011],{"class":192},[159,108081,1939],{"class":165},[159,108083,108084],{"class":8765},"message",[159,108086,1150],{"class":1142},[159,108088,17011],{"class":192},[159,108090,1262],{"class":165},[159,108092,108093],{"class":161,"line":2120},[159,108094,108095],{"class":1135},"      \u002F\u002F 创建Model 模态框盒子\n",[159,108097,108098],{"class":161,"line":2134},[159,108099,108100],{"class":1135},"      \u002F\u002F 1.1 创建div标签\n",[159,108102,108103,108105,108108,108110,108112,108114,108116,108118],{"class":161,"line":2143},[159,108104,17134],{"class":1146},[159,108106,108107],{"class":165},".modalBox ",[159,108109,189],{"class":1142},[159,108111,1153],{"class":165},[159,108113,17235],{"class":185},[159,108115,1159],{"class":165},[159,108117,103231],{"class":192},[159,108119,1165],{"class":165},[159,108121,108122],{"class":161,"line":2165},[159,108123,108124],{"class":1135},"      \u002F\u002F 1.2 给div 添加类名为model\n",[159,108126,108127,108129,108132,108134],{"class":161,"line":2178},[159,108128,17134],{"class":1146},[159,108130,108131],{"class":165},".modalBox.className ",[159,108133,189],{"class":1142},[159,108135,108136],{"class":192}," 'modal'\n",[159,108138,108139],{"class":161,"line":2191},[159,108140,108141],{"class":1135},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[159,108143,108144,108146,108149,108151],{"class":161,"line":2204},[159,108145,17134],{"class":1146},[159,108147,108148],{"class":165},".modalBox.innerHTML ",[159,108150,189],{"class":1142},[159,108152,17252],{"class":192},[159,108154,108155,108158,108160],{"class":161,"line":2217},[159,108156,108157],{"class":192},"        \u003Cdiv class=\"header\">${",[159,108159,998],{"class":165},[159,108161,108162],{"class":192},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[159,108164,108165,108168,108170],{"class":161,"line":2230},[159,108166,108167],{"class":192},"        \u003Cdiv class=\"body\">${",[159,108169,108084],{"class":165},[159,108171,108172],{"class":192},"}\u003C\u002Fdiv>\n",[159,108174,108175],{"class":161,"line":2243},[159,108176,108177],{"class":192},"      `\n",[159,108179,108180],{"class":161,"line":2256},[159,108181,108182],{"class":1135},"      \u002F\u002F console.log(this.modalBox)\n",[159,108184,108185],{"class":161,"line":2266},[159,108186,1508],{"class":165},[159,108188,108189],{"class":161,"line":2275},[159,108190,108191],{"class":1135},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[159,108193,108194],{"class":161,"line":2284},[159,108195,108196],{"class":1135},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[159,108198,108199],{"class":161,"line":2293},[159,108200,108201],{"class":1135},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[159,108203,108204,108207,108209,108211,108213,108216,108218,108220],{"class":161,"line":2306},[159,108205,108206],{"class":1146},"    Modal",[159,108208,9952],{"class":165},[159,108210,106879],{"class":1146},[159,108212,9952],{"class":165},[159,108214,108215],{"class":185},"open",[159,108217,1150],{"class":1142},[159,108219,5838],{"class":1142},[159,108221,1218],{"class":165},[159,108223,108224],{"class":161,"line":2330},[159,108225,108226],{"class":1135},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[159,108228,108229,108231,108234,108236,108238,108240,108242,108245],{"class":161,"line":2350},[159,108230,5145],{"class":1142},[159,108232,108233],{"class":1146}," box",[159,108235,1150],{"class":1142},[159,108237,1153],{"class":165},[159,108239,1156],{"class":185},[159,108241,1159],{"class":165},[159,108243,108244],{"class":192},"'.modal'",[159,108246,1165],{"class":165},[159,108248,108249],{"class":161,"line":2370},[159,108250,108251],{"class":1135},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[159,108253,108254,108257,108259,108262,108264],{"class":161,"line":2390},[159,108255,108256],{"class":165},"      box ",[159,108258,25377],{"class":1142},[159,108260,108261],{"class":165}," box.",[159,108263,3903],{"class":185},[159,108265,5158],{"class":165},[159,108267,108268],{"class":161,"line":2410},[159,108269,108270],{"class":1135},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[159,108272,108273],{"class":161,"line":2430},[159,108274,108275],{"class":1135},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[159,108277,108278],{"class":161,"line":2450},[159,108279,108280],{"class":1135},"      \u002F\u002F append可以增加对象\n",[159,108282,108283,108286,108289,108291,108294],{"class":161,"line":2471},[159,108284,108285],{"class":165},"      document.body.",[159,108287,108288],{"class":185},"append",[159,108290,1159],{"class":165},[159,108292,108293],{"class":1146},"this",[159,108295,108296],{"class":165},".modalBox)\n",[159,108298,108299],{"class":161,"line":2477},[159,108300,590],{"emptyLinePlaceholder":589},[159,108302,108303],{"class":161,"line":2498},[159,108304,108305],{"class":1135},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[159,108307,108308,108310,108313,108315,108317,108320,108322,108324,108326,108328,108331,108333],{"class":161,"line":2518},[159,108309,17134],{"class":1146},[159,108311,108312],{"class":165},".modalBox.",[159,108314,1156],{"class":185},[159,108316,1159],{"class":165},[159,108318,108319],{"class":192},"'i'",[159,108321,13019],{"class":165},[159,108323,4724],{"class":185},[159,108325,1159],{"class":165},[159,108327,4729],{"class":192},[159,108329,108330],{"class":165},", () ",[159,108332,106022],{"class":1142},[159,108334,1478],{"class":165},[159,108336,108337],{"class":161,"line":2539},[159,108338,108339],{"class":1135},"        \u002F\u002F 这个地方需要用到箭头函数\n",[159,108341,108342],{"class":161,"line":2561},[159,108343,108344],{"class":1135},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[159,108346,108347],{"class":161,"line":2573},[159,108348,108349],{"class":1135},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[159,108351,108352,108354,108356,108359],{"class":161,"line":2591},[159,108353,11783],{"class":1146},[159,108355,9952],{"class":165},[159,108357,108358],{"class":185},"close",[159,108360,5158],{"class":165},[159,108362,108363],{"class":161,"line":2602},[159,108364,11872],{"class":165},[159,108366,108367],{"class":161,"line":2613},[159,108368,1508],{"class":165},[159,108370,108371],{"class":161,"line":2624},[159,108372,590],{"emptyLinePlaceholder":589},[159,108374,108375],{"class":161,"line":2630},[159,108376,108377],{"class":1135},"    \u002F\u002F 测试一下 点击 删除按钮\n",[159,108379,108380,108382,108384,108386,108389,108391,108393,108395,108397,108399,108401],{"class":161,"line":2636},[159,108381,13456],{"class":165},[159,108383,1156],{"class":185},[159,108385,1159],{"class":165},[159,108387,108388],{"class":192},"'#delete'",[159,108390,13019],{"class":165},[159,108392,4724],{"class":185},[159,108394,1159],{"class":165},[159,108396,4729],{"class":192},[159,108398,108330],{"class":165},[159,108400,106022],{"class":1142},[159,108402,1478],{"class":165},[159,108404,108405],{"class":161,"line":2642},[159,108406,108407],{"class":1135},"      \u002F\u002F 先调用Model构造函数\n",[159,108409,108410,108412,108415,108417,108419,108421,108423,108426,108428,108431],{"class":161,"line":2648},[159,108411,5145],{"class":1142},[159,108413,108414],{"class":1146}," del",[159,108416,1150],{"class":1142},[159,108418,20891],{"class":1142},[159,108420,108071],{"class":185},[159,108422,1159],{"class":165},[159,108424,108425],{"class":192},"'温馨的提示'",[159,108427,1939],{"class":165},[159,108429,108430],{"class":192},"'您没有删除权限操作'",[159,108432,1165],{"class":165},[159,108434,108435],{"class":161,"line":2674},[159,108436,108437],{"class":1135},"      \u002F\u002F 实例对象调用open方法\n",[159,108439,108440,108443,108445],{"class":161,"line":2689},[159,108441,108442],{"class":165},"      del.",[159,108444,108215],{"class":185},[159,108446,5158],{"class":165},[159,108448,108449],{"class":161,"line":2694},[159,108450,4863],{"class":165},[159,108452,108453],{"class":161,"line":2721},[159,108454,108455],{"class":1135},"    \u002F\u002F 测试一下 点击 登录按钮\n",[159,108457,108458,108460,108462,108464,108467,108469,108471,108473,108475,108477,108479],{"class":161,"line":2726},[159,108459,13456],{"class":165},[159,108461,1156],{"class":185},[159,108463,1159],{"class":165},[159,108465,108466],{"class":192},"'#login'",[159,108468,13019],{"class":165},[159,108470,4724],{"class":185},[159,108472,1159],{"class":165},[159,108474,4729],{"class":192},[159,108476,108330],{"class":165},[159,108478,106022],{"class":1142},[159,108480,1478],{"class":165},[159,108482,108483],{"class":161,"line":2735},[159,108484,108407],{"class":1135},[159,108486,108487,108489,108492,108494,108496,108498,108500,108503,108505,108508],{"class":161,"line":2744},[159,108488,5145],{"class":1142},[159,108490,108491],{"class":1146}," log",[159,108493,1150],{"class":1142},[159,108495,20891],{"class":1142},[159,108497,108071],{"class":185},[159,108499,1159],{"class":165},[159,108501,108502],{"class":192},"'友情提示'",[159,108504,1939],{"class":165},[159,108506,108507],{"class":192},"'您还没有登录呢'",[159,108509,1165],{"class":165},[159,108511,108512],{"class":161,"line":2753},[159,108513,108437],{"class":1135},[159,108515,108516,108519,108521],{"class":161,"line":2758},[159,108517,108518],{"class":165},"      log.",[159,108520,108215],{"class":185},[159,108522,5158],{"class":165},[159,108524,108525],{"class":161,"line":3959},[159,108526,4863],{"class":165},[159,108528,108529],{"class":161,"line":3968},[159,108530,108531],{"class":1135},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[159,108533,108534,108536,108538,108540,108542,108544,108546,108548],{"class":161,"line":3977},[159,108535,108206],{"class":1146},[159,108537,9952],{"class":165},[159,108539,106879],{"class":1146},[159,108541,9952],{"class":165},[159,108543,108358],{"class":185},[159,108545,1150],{"class":1142},[159,108547,5838],{"class":1142},[159,108549,1218],{"class":165},[159,108551,108552,108554,108556,108558],{"class":161,"line":3982},[159,108553,17134],{"class":1146},[159,108555,108312],{"class":165},[159,108557,3903],{"class":185},[159,108559,5158],{"class":165},[159,108561,108562],{"class":161,"line":6843},[159,108563,1508],{"class":165},[159,108565,108566,108568,108570],{"class":161,"line":6849},[159,108567,254],{"class":165},[159,108569,228],{"class":169},[159,108571,173],{"class":165},[159,108573,108574,108576,108578],{"class":161,"line":6855},[159,108575,264],{"class":165},[159,108577,170],{"class":169},[159,108579,173],{"class":165},[159,108581,108582],{"class":161,"line":6861},[159,108583,590],{"emptyLinePlaceholder":589},[159,108585,108586,108588,108590],{"class":161,"line":6867},[159,108587,264],{"class":165},[159,108589,522],{"class":169},[159,108591,173],{"class":165},[14,108593,108594],{},[23,108595],{"alt":25,"src":108596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[37,108598,108600],{"id":108599},"_414-深浅拷贝","4.14 深浅拷贝",[42,108602,108604],{"id":108603},"_4141-浅拷贝","4.14.1 浅拷贝",[14,108606,108607],{},[23,108608],{"alt":25,"src":108609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,108611,108612],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,108614,108615],{},[23,108616],{"alt":25,"src":108617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,108619,108620],{},[23,108621],{"alt":25,"src":108622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,108624,108625],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,108627,108628],{},[23,108629],{"alt":25,"src":108630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,108632,10547],{},[14,108634,108635],{},[23,108636],{"alt":25,"src":108637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[42,108639,108641],{"id":108640},"_4142-深拷贝","4.14.2 深拷贝",[14,108643,108644],{},"深拷贝：拷贝的是对象，不是地址",[14,108646,108647],{},"常用的三种方法：",[134,108649,108650,108653,108656],{},[106,108651,108652],{},"通过递归实现深拷贝",[106,108654,108655],{},"lodash\u002FcloneDeep",[106,108657,108658],{},"通过JSON.stringify()实现",[326,108660,108662],{"id":108661},"_41421-递归函数","4.14.2.1 递归函数",[14,108664,108665],{},[23,108666],{"alt":25,"src":108667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[134,108669,108670],{},[106,108671,108672],{},"死递归占溢出：",[151,108674,108676],{"className":153,"code":108675,"language":155,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[49,108677,108678,108686,108694,108698,108703,108707,108712,108720],{"__ignoreMap":25},[159,108679,108680,108682,108684],{"class":161,"line":162},[159,108681,166],{"class":165},[159,108683,170],{"class":169},[159,108685,173],{"class":165},[159,108687,108688,108690,108692],{"class":161,"line":176},[159,108689,179],{"class":165},[159,108691,228],{"class":169},[159,108693,173],{"class":165},[159,108695,108696],{"class":161,"line":203},[159,108697,98443],{"class":165},[159,108699,108700],{"class":161,"line":223},[159,108701,108702],{"class":165},"      fn()\n",[159,108704,108705],{"class":161,"line":233},[159,108706,1508],{"class":165},[159,108708,108709],{"class":161,"line":239},[159,108710,108711],{"class":165},"    fn()\n",[159,108713,108714,108716,108718],{"class":161,"line":245},[159,108715,254],{"class":165},[159,108717,228],{"class":169},[159,108719,173],{"class":165},[159,108721,108722,108724,108726],{"class":161,"line":251},[159,108723,264],{"class":165},[159,108725,170],{"class":169},[159,108727,173],{"class":165},[134,108729,108730],{"start":176},[106,108731,108732],{},"递归函数要加判断条件：",[14,108734,108735],{},[23,108736],{"alt":25,"src":108737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[134,108739,108740],{"start":203},[106,108741,108742],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[151,108744,108746],{"className":520,"code":108745,"language":522,"meta":25,"style":25},"\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",[49,108747,108748,108758,108772,108776,108784,108798,108818,108830,108838,108842,108850,108862,108870,108878,108903,108915,108919,108926,108934,108942,108946],{"__ignoreMap":25},[159,108749,108750,108752,108754,108756],{"class":161,"line":162},[159,108751,914],{"class":165},[159,108753,917],{"class":169},[159,108755,920],{"class":185},[159,108757,173],{"class":165},[159,108759,108760,108762,108764,108766,108768,108770],{"class":161,"line":176},[159,108761,166],{"class":165},[159,108763,522],{"class":169},[159,108765,931],{"class":185},[159,108767,189],{"class":165},[159,108769,936],{"class":192},[159,108771,173],{"class":165},[159,108773,108774],{"class":161,"line":203},[159,108775,590],{"emptyLinePlaceholder":589},[159,108777,108778,108780,108782],{"class":161,"line":223},[159,108779,166],{"class":165},[159,108781,949],{"class":169},[159,108783,173],{"class":165},[159,108785,108786,108788,108790,108792,108794,108796],{"class":161,"line":233},[159,108787,179],{"class":165},[159,108789,958],{"class":169},[159,108791,961],{"class":185},[159,108793,189],{"class":165},[159,108795,966],{"class":192},[159,108797,173],{"class":165},[159,108799,108800,108802,108804,108806,108808,108810,108812,108814,108816],{"class":161,"line":239},[159,108801,179],{"class":165},[159,108803,958],{"class":169},[159,108805,547],{"class":185},[159,108807,189],{"class":165},[159,108809,981],{"class":192},[159,108811,984],{"class":185},[159,108813,189],{"class":165},[159,108815,989],{"class":192},[159,108817,173],{"class":165},[159,108819,108820,108822,108824,108826,108828],{"class":161,"line":245},[159,108821,179],{"class":165},[159,108823,998],{"class":169},[159,108825,1001],{"class":165},[159,108827,998],{"class":169},[159,108829,173],{"class":165},[159,108831,108832,108834,108836],{"class":161,"line":251},[159,108833,264],{"class":165},[159,108835,949],{"class":169},[159,108837,173],{"class":165},[159,108839,108840],{"class":161,"line":261},[159,108841,590],{"emptyLinePlaceholder":589},[159,108843,108844,108846,108848],{"class":161,"line":603},[159,108845,166],{"class":165},[159,108847,170],{"class":169},[159,108849,173],{"class":165},[159,108851,108852,108854,108856,108858,108860],{"class":161,"line":621},[159,108853,179],{"class":165},[159,108855,182],{"class":169},[159,108857,2158],{"class":165},[159,108859,182],{"class":169},[159,108861,173],{"class":165},[159,108863,108864,108866,108868],{"class":161,"line":634},[159,108865,179],{"class":165},[159,108867,228],{"class":169},[159,108869,173],{"class":165},[159,108871,108872,108874,108876],{"class":161,"line":640},[159,108873,17167],{"class":1142},[159,108875,20877],{"class":185},[159,108877,17173],{"class":165},[159,108879,108880,108882,108884,108886,108888,108890,108892,108894,108896,108898,108901],{"class":161,"line":1075},[159,108881,2651],{"class":165},[159,108883,1156],{"class":185},[159,108885,1159],{"class":165},[159,108887,103231],{"class":192},[159,108889,21375],{"class":165},[159,108891,189],{"class":1142},[159,108893,20891],{"class":1142},[159,108895,20894],{"class":185},[159,108897,40788],{"class":165},[159,108899,108900],{"class":185},"toLocaleString",[159,108902,5158],{"class":165},[159,108904,108905,108908,108911,108913],{"class":161,"line":1081},[159,108906,108907],{"class":185},"      setTimeout",[159,108909,108910],{"class":165},"(getTime, ",[159,108912,1317],{"class":1146},[159,108914,1165],{"class":165},[159,108916,108917],{"class":161,"line":1091},[159,108918,1508],{"class":165},[159,108920,108921,108924],{"class":161,"line":1100},[159,108922,108923],{"class":185},"    getTime",[159,108925,5158],{"class":165},[159,108927,108928,108930,108932],{"class":161,"line":1123},[159,108929,254],{"class":165},[159,108931,228],{"class":169},[159,108933,173],{"class":165},[159,108935,108936,108938,108940],{"class":161,"line":1132},[159,108937,264],{"class":165},[159,108939,170],{"class":169},[159,108941,173],{"class":165},[159,108943,108944],{"class":161,"line":1139},[159,108945,590],{"emptyLinePlaceholder":589},[159,108947,108948,108950,108952],{"class":161,"line":1168},[159,108949,264],{"class":165},[159,108951,522],{"class":169},[159,108953,173],{"class":165},[14,108955,108956],{},[23,108957],{"alt":25,"src":108958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[134,108960,108961],{"start":223},[106,108962,108652],{},[14,108964,108965],{},[23,108966],{"alt":25,"src":108967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,108969,108970],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,108972,62584],{},[14,108974,108975],{},"这个是简易版的递归函数深拷贝",[14,108977,108978],{},"一定要注意先数组再对象，因为万物皆可对象",[151,108980,108982],{"className":520,"code":108981,"language":522,"meta":25,"style":25},"\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",[49,108983,108984,108994,109008,109012,109020,109034,109054,109066,109074,109078,109086,109094,109104,109113,109121,109137,109141,109149,109153,109157,109169,109174,109193,109209,109214,109219,109224,109239,109244,109249,109258,109266,109283,109291,109297,109305,109310,109315,109324,109328,109332,109336,109347,109356,109366,109380,109390,109398,109406,109414,109418],{"__ignoreMap":25},[159,108985,108986,108988,108990,108992],{"class":161,"line":162},[159,108987,914],{"class":165},[159,108989,917],{"class":169},[159,108991,920],{"class":185},[159,108993,173],{"class":165},[159,108995,108996,108998,109000,109002,109004,109006],{"class":161,"line":176},[159,108997,166],{"class":165},[159,108999,522],{"class":169},[159,109001,931],{"class":185},[159,109003,189],{"class":165},[159,109005,936],{"class":192},[159,109007,173],{"class":165},[159,109009,109010],{"class":161,"line":203},[159,109011,590],{"emptyLinePlaceholder":589},[159,109013,109014,109016,109018],{"class":161,"line":223},[159,109015,166],{"class":165},[159,109017,949],{"class":169},[159,109019,173],{"class":165},[159,109021,109022,109024,109026,109028,109030,109032],{"class":161,"line":233},[159,109023,179],{"class":165},[159,109025,958],{"class":169},[159,109027,961],{"class":185},[159,109029,189],{"class":165},[159,109031,966],{"class":192},[159,109033,173],{"class":165},[159,109035,109036,109038,109040,109042,109044,109046,109048,109050,109052],{"class":161,"line":239},[159,109037,179],{"class":165},[159,109039,958],{"class":169},[159,109041,547],{"class":185},[159,109043,189],{"class":165},[159,109045,981],{"class":192},[159,109047,984],{"class":185},[159,109049,189],{"class":165},[159,109051,989],{"class":192},[159,109053,173],{"class":165},[159,109055,109056,109058,109060,109062,109064],{"class":161,"line":245},[159,109057,179],{"class":165},[159,109059,998],{"class":169},[159,109061,1001],{"class":165},[159,109063,998],{"class":169},[159,109065,173],{"class":165},[159,109067,109068,109070,109072],{"class":161,"line":251},[159,109069,264],{"class":165},[159,109071,949],{"class":169},[159,109073,173],{"class":165},[159,109075,109076],{"class":161,"line":261},[159,109077,590],{"emptyLinePlaceholder":589},[159,109079,109080,109082,109084],{"class":161,"line":603},[159,109081,166],{"class":165},[159,109083,170],{"class":169},[159,109085,173],{"class":165},[159,109087,109088,109090,109092],{"class":161,"line":621},[159,109089,179],{"class":165},[159,109091,228],{"class":169},[159,109093,173],{"class":165},[159,109095,109096,109098,109100,109102],{"class":161,"line":634},[159,109097,1143],{"class":1142},[159,109099,17052],{"class":1146},[159,109101,1150],{"class":1142},[159,109103,1478],{"class":165},[159,109105,109106,109108,109111],{"class":161,"line":640},[159,109107,18710],{"class":165},[159,109109,109110],{"class":192},"'pink'",[159,109112,17070],{"class":165},[159,109114,109115,109117,109119],{"class":161,"line":1075},[159,109116,18720],{"class":165},[159,109118,18723],{"class":1146},[159,109120,17070],{"class":165},[159,109122,109123,109126,109129,109131,109134],{"class":161,"line":1081},[159,109124,109125],{"class":165},"      hobby: [",[159,109127,109128],{"class":192},"'乒乓球'",[159,109130,1939],{"class":165},[159,109132,109133],{"class":192},"'足球'",[159,109135,109136],{"class":165},"],\n",[159,109138,109139],{"class":161,"line":1091},[159,109140,99172],{"class":165},[159,109142,109143,109146],{"class":161,"line":1100},[159,109144,109145],{"class":165},"        baby: ",[159,109147,109148],{"class":192},"'小pink'\n",[159,109150,109151],{"class":161,"line":1123},[159,109152,1308],{"class":165},[159,109154,109155],{"class":161,"line":1132},[159,109156,1508],{"class":165},[159,109158,109159,109161,109164,109166],{"class":161,"line":1139},[159,109160,1143],{"class":1142},[159,109162,109163],{"class":1146}," o",[159,109165,1150],{"class":1142},[159,109167,109168],{"class":165}," {}\n",[159,109170,109171],{"class":161,"line":1168},[159,109172,109173],{"class":1135},"    \u002F\u002F 拷贝函数\n",[159,109175,109176,109178,109181,109183,109186,109188,109191],{"class":161,"line":1174},[159,109177,17167],{"class":1142},[159,109179,109180],{"class":185}," deepCopy",[159,109182,1159],{"class":165},[159,109184,109185],{"class":8765},"newObj",[159,109187,1939],{"class":165},[159,109189,109190],{"class":8765},"oldObj",[159,109192,1262],{"class":165},[159,109194,109195,109197,109199,109201,109204,109206],{"class":161,"line":1180},[159,109196,12875],{"class":1142},[159,109198,11680],{"class":165},[159,109200,11683],{"class":1142},[159,109202,109203],{"class":165}," k ",[159,109205,49566],{"class":1142},[159,109207,109208],{"class":165}," oldObj) {\n",[159,109210,109211],{"class":161,"line":1194},[159,109212,109213],{"class":1135},"        \u002F\u002F 处理数组的问题\n",[159,109215,109216],{"class":161,"line":1200},[159,109217,109218],{"class":1135},"        \u002F\u002F 判断是否属于数组\n",[159,109220,109221],{"class":161,"line":1221},[159,109222,109223],{"class":1135},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[159,109225,109226,109228,109231,109234,109237],{"class":161,"line":1230},[159,109227,17003],{"class":1142},[159,109229,109230],{"class":165}," (oldObj[k] ",[159,109232,109233],{"class":1142},"instanceof",[159,109235,109236],{"class":185}," Array",[159,109238,1262],{"class":165},[159,109240,109241],{"class":161,"line":1247},[159,109242,109243],{"class":1135},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[159,109245,109246],{"class":161,"line":1265},[159,109247,109248],{"class":1135},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[159,109250,109251,109254,109256],{"class":161,"line":1277},[159,109252,109253],{"class":165},"          newObj[k] ",[159,109255,189],{"class":1142},[159,109257,16884],{"class":165},[159,109259,109260,109263],{"class":161,"line":1283},[159,109261,109262],{"class":185},"          deepCopy",[159,109264,109265],{"class":165},"(newObj[k], oldObj[k])\n",[159,109267,109268,109270,109272,109274,109276,109278,109281],{"class":161,"line":1294},[159,109269,101380],{"class":165},[159,109271,25364],{"class":1142},[159,109273,25367],{"class":1142},[159,109275,109230],{"class":165},[159,109277,109233],{"class":1142},[159,109279,109280],{"class":185}," Object",[159,109282,1262],{"class":165},[159,109284,109285,109287,109289],{"class":161,"line":1305},[159,109286,109253],{"class":165},[159,109288,189],{"class":1142},[159,109290,109168],{"class":165},[159,109292,109293,109295],{"class":161,"line":1311},[159,109294,109262],{"class":185},[159,109296,109265],{"class":165},[159,109298,109299,109301,109303],{"class":161,"line":1322},[159,109300,101380],{"class":165},[159,109302,25364],{"class":1142},[159,109304,1478],{"class":165},[159,109306,109307],{"class":161,"line":1327},[159,109308,109309],{"class":1135},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[159,109311,109312],{"class":161,"line":1336},[159,109313,109314],{"class":1135},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[159,109316,109317,109319,109321],{"class":161,"line":1345},[159,109318,109253],{"class":165},[159,109320,189],{"class":1142},[159,109322,109323],{"class":165}," oldObj[k]\n",[159,109325,109326],{"class":161,"line":1350},[159,109327,7530],{"class":165},[159,109329,109330],{"class":161,"line":1764},[159,109331,1308],{"class":165},[159,109333,109334],{"class":161,"line":1769},[159,109335,1508],{"class":165},[159,109337,109338,109341,109344],{"class":161,"line":1777},[159,109339,109340],{"class":185},"    deepCopy",[159,109342,109343],{"class":165},"(o, obj) ",[159,109345,109346],{"class":1135},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[159,109348,109349,109351,109353],{"class":161,"line":1788},[159,109350,20856],{"class":165},[159,109352,5166],{"class":185},[159,109354,109355],{"class":165},"(o)\n",[159,109357,109358,109361,109363],{"class":161,"line":1802},[159,109359,109360],{"class":165},"    o.age ",[159,109362,189],{"class":1142},[159,109364,109365],{"class":1146}," 20\n",[159,109367,109368,109371,109373,109375,109377],{"class":161,"line":1815},[159,109369,109370],{"class":165},"    o.hobby[",[159,109372,1489],{"class":1146},[159,109374,28061],{"class":165},[159,109376,189],{"class":1142},[159,109378,109379],{"class":192}," '篮球'\n",[159,109381,109382,109385,109387],{"class":161,"line":1828},[159,109383,109384],{"class":165},"    o.family ",[159,109386,189],{"class":1142},[159,109388,109389],{"class":192}," '老pink'\n",[159,109391,109392,109394,109396],{"class":161,"line":1841},[159,109393,20856],{"class":165},[159,109395,5166],{"class":185},[159,109397,17119],{"class":165},[159,109399,109400,109402,109404],{"class":161,"line":1852},[159,109401,254],{"class":165},[159,109403,228],{"class":169},[159,109405,173],{"class":165},[159,109407,109408,109410,109412],{"class":161,"line":1866},[159,109409,264],{"class":165},[159,109411,170],{"class":169},[159,109413,173],{"class":165},[159,109415,109416],{"class":161,"line":1879},[159,109417,590],{"emptyLinePlaceholder":589},[159,109419,109420,109422,109424],{"class":161,"line":1884},[159,109421,264],{"class":165},[159,109423,522],{"class":169},[159,109425,173],{"class":165},[14,109427,109428],{},[23,109429],{"alt":25,"src":109430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[326,109432,109434,109435],{"id":109433},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[61,109436,109437],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,109439,109440],{},[8085,109441,109442],{"href":109442,"rel":109443},"https:\u002F\u002Fwww.lodashjs.com\u002F",[15923],[14,109445,109446],{},"lodash里边的方法都要加上一个下划线_",[14,109448,109449],{},"_.cloneDeep()",[151,109451,109453],{"className":520,"code":109452,"language":522,"meta":25,"style":25},"\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",[49,109454,109455,109465,109479,109483,109491,109505,109525,109537,109545,109549,109557,109562,109581,109589,109599,109607,109615,109627,109631,109637,109641,109645,109661,109669,109678,109686,109694,109702,109706],{"__ignoreMap":25},[159,109456,109457,109459,109461,109463],{"class":161,"line":162},[159,109458,914],{"class":165},[159,109460,917],{"class":169},[159,109462,920],{"class":185},[159,109464,173],{"class":165},[159,109466,109467,109469,109471,109473,109475,109477],{"class":161,"line":176},[159,109468,166],{"class":165},[159,109470,522],{"class":169},[159,109472,931],{"class":185},[159,109474,189],{"class":165},[159,109476,936],{"class":192},[159,109478,173],{"class":165},[159,109480,109481],{"class":161,"line":203},[159,109482,590],{"emptyLinePlaceholder":589},[159,109484,109485,109487,109489],{"class":161,"line":223},[159,109486,166],{"class":165},[159,109488,949],{"class":169},[159,109490,173],{"class":165},[159,109492,109493,109495,109497,109499,109501,109503],{"class":161,"line":233},[159,109494,179],{"class":165},[159,109496,958],{"class":169},[159,109498,961],{"class":185},[159,109500,189],{"class":165},[159,109502,966],{"class":192},[159,109504,173],{"class":165},[159,109506,109507,109509,109511,109513,109515,109517,109519,109521,109523],{"class":161,"line":239},[159,109508,179],{"class":165},[159,109510,958],{"class":169},[159,109512,547],{"class":185},[159,109514,189],{"class":165},[159,109516,981],{"class":192},[159,109518,984],{"class":185},[159,109520,189],{"class":165},[159,109522,989],{"class":192},[159,109524,173],{"class":165},[159,109526,109527,109529,109531,109533,109535],{"class":161,"line":245},[159,109528,179],{"class":165},[159,109530,998],{"class":169},[159,109532,1001],{"class":165},[159,109534,998],{"class":169},[159,109536,173],{"class":165},[159,109538,109539,109541,109543],{"class":161,"line":251},[159,109540,264],{"class":165},[159,109542,949],{"class":169},[159,109544,173],{"class":165},[159,109546,109547],{"class":161,"line":261},[159,109548,590],{"emptyLinePlaceholder":589},[159,109550,109551,109553,109555],{"class":161,"line":603},[159,109552,166],{"class":165},[159,109554,170],{"class":169},[159,109556,173],{"class":165},[159,109558,109559],{"class":161,"line":621},[159,109560,109561],{"class":1135},"  \u003C!-- 先引用这个库 -->\n",[159,109563,109564,109566,109568,109570,109572,109575,109577,109579],{"class":161,"line":634},[159,109565,179],{"class":165},[159,109567,228],{"class":169},[159,109569,2078],{"class":185},[159,109571,189],{"class":165},[159,109573,109574],{"class":192},"\"lodash.min.js\"",[159,109576,2158],{"class":165},[159,109578,228],{"class":169},[159,109580,173],{"class":165},[159,109582,109583,109585,109587],{"class":161,"line":640},[159,109584,179],{"class":165},[159,109586,228],{"class":169},[159,109588,173],{"class":165},[159,109590,109591,109593,109595,109597],{"class":161,"line":1075},[159,109592,1143],{"class":1142},[159,109594,17052],{"class":1146},[159,109596,1150],{"class":1142},[159,109598,1478],{"class":165},[159,109600,109601,109603,109605],{"class":161,"line":1081},[159,109602,18710],{"class":165},[159,109604,109110],{"class":192},[159,109606,17070],{"class":165},[159,109608,109609,109611,109613],{"class":161,"line":1091},[159,109610,18720],{"class":165},[159,109612,18723],{"class":1146},[159,109614,17070],{"class":165},[159,109616,109617,109619,109621,109623,109625],{"class":161,"line":1100},[159,109618,109125],{"class":165},[159,109620,109128],{"class":192},[159,109622,1939],{"class":165},[159,109624,109133],{"class":192},[159,109626,109136],{"class":165},[159,109628,109629],{"class":161,"line":1123},[159,109630,99172],{"class":165},[159,109632,109633,109635],{"class":161,"line":1132},[159,109634,109145],{"class":165},[159,109636,109148],{"class":192},[159,109638,109639],{"class":161,"line":1139},[159,109640,1308],{"class":165},[159,109642,109643],{"class":161,"line":1168},[159,109644,1508],{"class":165},[159,109646,109647,109649,109651,109653,109656,109659],{"class":161,"line":1174},[159,109648,1143],{"class":1142},[159,109650,109163],{"class":1146},[159,109652,1150],{"class":1142},[159,109654,109655],{"class":165}," _.",[159,109657,109658],{"class":185},"cloneDeep",[159,109660,17119],{"class":165},[159,109662,109663,109665,109667],{"class":161,"line":1180},[159,109664,20856],{"class":165},[159,109666,5166],{"class":185},[159,109668,109355],{"class":165},[159,109670,109671,109674,109676],{"class":161,"line":1194},[159,109672,109673],{"class":165},"    o.family.baby ",[159,109675,189],{"class":1142},[159,109677,109389],{"class":192},[159,109679,109680,109682,109684],{"class":161,"line":1200},[159,109681,20856],{"class":165},[159,109683,5166],{"class":185},[159,109685,17119],{"class":165},[159,109687,109688,109690,109692],{"class":161,"line":1221},[159,109689,254],{"class":165},[159,109691,228],{"class":169},[159,109693,173],{"class":165},[159,109695,109696,109698,109700],{"class":161,"line":1230},[159,109697,264],{"class":165},[159,109699,170],{"class":169},[159,109701,173],{"class":165},[159,109703,109704],{"class":161,"line":1247},[159,109705,590],{"emptyLinePlaceholder":589},[159,109707,109708,109710,109712],{"class":161,"line":1265},[159,109709,264],{"class":165},[159,109711,522],{"class":169},[159,109713,173],{"class":165},[14,109715,109716],{},[23,109717],{"alt":25,"src":109718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[326,109720,109722],{"id":109721},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[151,109724,109726],{"className":520,"code":109725,"language":522,"meta":25,"style":25},"\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",[49,109727,109728,109738,109752,109756,109764,109778,109798,109810,109818,109822,109830,109838,109848,109856,109864,109876,109880,109886,109890,109894,109899,109904,109909,109935,109943,109952,109960,109968,109976,109980],{"__ignoreMap":25},[159,109729,109730,109732,109734,109736],{"class":161,"line":162},[159,109731,914],{"class":165},[159,109733,917],{"class":169},[159,109735,920],{"class":185},[159,109737,173],{"class":165},[159,109739,109740,109742,109744,109746,109748,109750],{"class":161,"line":176},[159,109741,166],{"class":165},[159,109743,522],{"class":169},[159,109745,931],{"class":185},[159,109747,189],{"class":165},[159,109749,936],{"class":192},[159,109751,173],{"class":165},[159,109753,109754],{"class":161,"line":203},[159,109755,590],{"emptyLinePlaceholder":589},[159,109757,109758,109760,109762],{"class":161,"line":223},[159,109759,166],{"class":165},[159,109761,949],{"class":169},[159,109763,173],{"class":165},[159,109765,109766,109768,109770,109772,109774,109776],{"class":161,"line":233},[159,109767,179],{"class":165},[159,109769,958],{"class":169},[159,109771,961],{"class":185},[159,109773,189],{"class":165},[159,109775,966],{"class":192},[159,109777,173],{"class":165},[159,109779,109780,109782,109784,109786,109788,109790,109792,109794,109796],{"class":161,"line":239},[159,109781,179],{"class":165},[159,109783,958],{"class":169},[159,109785,547],{"class":185},[159,109787,189],{"class":165},[159,109789,981],{"class":192},[159,109791,984],{"class":185},[159,109793,189],{"class":165},[159,109795,989],{"class":192},[159,109797,173],{"class":165},[159,109799,109800,109802,109804,109806,109808],{"class":161,"line":245},[159,109801,179],{"class":165},[159,109803,998],{"class":169},[159,109805,1001],{"class":165},[159,109807,998],{"class":169},[159,109809,173],{"class":165},[159,109811,109812,109814,109816],{"class":161,"line":251},[159,109813,264],{"class":165},[159,109815,949],{"class":169},[159,109817,173],{"class":165},[159,109819,109820],{"class":161,"line":261},[159,109821,590],{"emptyLinePlaceholder":589},[159,109823,109824,109826,109828],{"class":161,"line":603},[159,109825,166],{"class":165},[159,109827,170],{"class":169},[159,109829,173],{"class":165},[159,109831,109832,109834,109836],{"class":161,"line":621},[159,109833,179],{"class":165},[159,109835,228],{"class":169},[159,109837,173],{"class":165},[159,109839,109840,109842,109844,109846],{"class":161,"line":634},[159,109841,1143],{"class":1142},[159,109843,17052],{"class":1146},[159,109845,1150],{"class":1142},[159,109847,1478],{"class":165},[159,109849,109850,109852,109854],{"class":161,"line":640},[159,109851,18710],{"class":165},[159,109853,109110],{"class":192},[159,109855,17070],{"class":165},[159,109857,109858,109860,109862],{"class":161,"line":1075},[159,109859,18720],{"class":165},[159,109861,18723],{"class":1146},[159,109863,17070],{"class":165},[159,109865,109866,109868,109870,109872,109874],{"class":161,"line":1081},[159,109867,109125],{"class":165},[159,109869,109128],{"class":192},[159,109871,1939],{"class":165},[159,109873,109133],{"class":192},[159,109875,109136],{"class":165},[159,109877,109878],{"class":161,"line":1091},[159,109879,99172],{"class":165},[159,109881,109882,109884],{"class":161,"line":1100},[159,109883,109145],{"class":165},[159,109885,109148],{"class":192},[159,109887,109888],{"class":161,"line":1123},[159,109889,1308],{"class":165},[159,109891,109892],{"class":161,"line":1132},[159,109893,1508],{"class":165},[159,109895,109896],{"class":161,"line":1139},[159,109897,109898],{"class":1135},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[159,109900,109901],{"class":161,"line":1168},[159,109902,109903],{"class":1135},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[159,109905,109906],{"class":161,"line":1174},[159,109907,109908],{"class":1135},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[159,109910,109911,109913,109915,109917,109920,109922,109925,109927,109929,109931,109933],{"class":161,"line":1180},[159,109912,1143],{"class":1142},[159,109914,109163],{"class":1146},[159,109916,1150],{"class":1142},[159,109918,109919],{"class":1146}," JSON",[159,109921,9952],{"class":165},[159,109923,109924],{"class":185},"parse",[159,109926,1159],{"class":165},[159,109928,18759],{"class":1146},[159,109930,9952],{"class":165},[159,109932,18764],{"class":185},[159,109934,18767],{"class":165},[159,109936,109937,109939,109941],{"class":161,"line":1194},[159,109938,20856],{"class":165},[159,109940,5166],{"class":185},[159,109942,109355],{"class":165},[159,109944,109945,109947,109949],{"class":161,"line":1200},[159,109946,109673],{"class":165},[159,109948,189],{"class":1142},[159,109950,109951],{"class":192}," '123'\n",[159,109953,109954,109956,109958],{"class":161,"line":1221},[159,109955,20856],{"class":165},[159,109957,5166],{"class":185},[159,109959,17119],{"class":165},[159,109961,109962,109964,109966],{"class":161,"line":1230},[159,109963,254],{"class":165},[159,109965,228],{"class":169},[159,109967,173],{"class":165},[159,109969,109970,109972,109974],{"class":161,"line":1247},[159,109971,264],{"class":165},[159,109973,170],{"class":169},[159,109975,173],{"class":165},[159,109977,109978],{"class":161,"line":1265},[159,109979,590],{"emptyLinePlaceholder":589},[159,109981,109982,109984,109986],{"class":161,"line":1277},[159,109983,264],{"class":165},[159,109985,522],{"class":169},[159,109987,173],{"class":165},[14,109989,109990],{},[23,109991],{"alt":25,"src":109992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[37,109994,109996],{"id":109995},"_415-异常处理","4.15 异常处理",[134,109998,109999],{},[106,110000,110001],{},"throw抛异常",[14,110003,110004],{},[23,110005],{"alt":25,"src":110006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[134,110008,110009],{"start":176},[106,110010,110011],{},"try\u002Fcatch 捕获错误信息",[14,110013,110014],{},[23,110015],{"alt":25,"src":110016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[151,110018,110020],{"className":520,"code":110019,"language":522,"meta":25,"style":25},"\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",[49,110021,110022,110032,110046,110050,110058,110072,110092,110104,110112,110116,110124,110136,110144,110153,110160,110165,110184,110193,110204,110209,110219,110224,110229,110234,110251,110255,110260,110267,110279,110283,110295,110299,110303,110308,110313,110320,110328,110336,110340],{"__ignoreMap":25},[159,110023,110024,110026,110028,110030],{"class":161,"line":162},[159,110025,914],{"class":165},[159,110027,917],{"class":169},[159,110029,920],{"class":185},[159,110031,173],{"class":165},[159,110033,110034,110036,110038,110040,110042,110044],{"class":161,"line":176},[159,110035,166],{"class":165},[159,110037,522],{"class":169},[159,110039,931],{"class":185},[159,110041,189],{"class":165},[159,110043,936],{"class":192},[159,110045,173],{"class":165},[159,110047,110048],{"class":161,"line":203},[159,110049,590],{"emptyLinePlaceholder":589},[159,110051,110052,110054,110056],{"class":161,"line":223},[159,110053,166],{"class":165},[159,110055,949],{"class":169},[159,110057,173],{"class":165},[159,110059,110060,110062,110064,110066,110068,110070],{"class":161,"line":233},[159,110061,179],{"class":165},[159,110063,958],{"class":169},[159,110065,961],{"class":185},[159,110067,189],{"class":165},[159,110069,966],{"class":192},[159,110071,173],{"class":165},[159,110073,110074,110076,110078,110080,110082,110084,110086,110088,110090],{"class":161,"line":239},[159,110075,179],{"class":165},[159,110077,958],{"class":169},[159,110079,547],{"class":185},[159,110081,189],{"class":165},[159,110083,981],{"class":192},[159,110085,984],{"class":185},[159,110087,189],{"class":165},[159,110089,989],{"class":192},[159,110091,173],{"class":165},[159,110093,110094,110096,110098,110100,110102],{"class":161,"line":245},[159,110095,179],{"class":165},[159,110097,998],{"class":169},[159,110099,1001],{"class":165},[159,110101,998],{"class":169},[159,110103,173],{"class":165},[159,110105,110106,110108,110110],{"class":161,"line":251},[159,110107,264],{"class":165},[159,110109,949],{"class":169},[159,110111,173],{"class":165},[159,110113,110114],{"class":161,"line":261},[159,110115,590],{"emptyLinePlaceholder":589},[159,110117,110118,110120,110122],{"class":161,"line":603},[159,110119,166],{"class":165},[159,110121,170],{"class":169},[159,110123,173],{"class":165},[159,110125,110126,110128,110130,110132,110134],{"class":161,"line":621},[159,110127,179],{"class":165},[159,110129,14],{"class":169},[159,110131,196],{"class":165},[159,110133,14],{"class":169},[159,110135,173],{"class":165},[159,110137,110138,110140,110142],{"class":161,"line":634},[159,110139,179],{"class":165},[159,110141,228],{"class":169},[159,110143,173],{"class":165},[159,110145,110146,110148,110151],{"class":161,"line":640},[159,110147,17167],{"class":1142},[159,110149,110150],{"class":185}," fn",[159,110152,17173],{"class":165},[159,110154,110155,110158],{"class":161,"line":1075},[159,110156,110157],{"class":1142},"      try",[159,110159,1478],{"class":165},[159,110161,110162],{"class":161,"line":1081},[159,110163,110164],{"class":1135},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[159,110166,110167,110169,110171,110173,110175,110177,110179,110182],{"class":161,"line":1091},[159,110168,8301],{"class":1142},[159,110170,1704],{"class":1146},[159,110172,1150],{"class":1142},[159,110174,1153],{"class":165},[159,110176,1156],{"class":185},[159,110178,1159],{"class":165},[159,110180,110181],{"class":192},"'.p'",[159,110183,1165],{"class":165},[159,110185,110186,110189,110191],{"class":161,"line":1100},[159,110187,110188],{"class":165},"        p.style.color ",[159,110190,189],{"class":1142},[159,110192,14121],{"class":192},[159,110194,110195,110198,110201],{"class":161,"line":1123},[159,110196,110197],{"class":165},"      } ",[159,110199,110200],{"class":1142},"catch",[159,110202,110203],{"class":165}," (err) {\n",[159,110205,110206],{"class":161,"line":1132},[159,110207,110208],{"class":1135},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[159,110210,110211,110214,110216],{"class":161,"line":1139},[159,110212,110213],{"class":165},"        console.",[159,110215,5166],{"class":185},[159,110217,110218],{"class":165},"(err.message)\n",[159,110220,110221],{"class":161,"line":1168},[159,110222,110223],{"class":1135},"        \u002F\u002F 想要中断程序，需要加return\n",[159,110225,110226],{"class":161,"line":1174},[159,110227,110228],{"class":1135},"        \u002F\u002F return\n",[159,110230,110231],{"class":161,"line":1180},[159,110232,110233],{"class":1135},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[159,110235,110236,110239,110241,110244,110246,110249],{"class":161,"line":1194},[159,110237,110238],{"class":1142},"        throw",[159,110240,20891],{"class":1142},[159,110242,110243],{"class":185}," Error",[159,110245,1159],{"class":165},[159,110247,110248],{"class":192},"'你看看，选择器错误了吧'",[159,110250,1165],{"class":165},[159,110252,110253],{"class":161,"line":1200},[159,110254,1308],{"class":165},[159,110256,110257],{"class":161,"line":1221},[159,110258,110259],{"class":1135},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[159,110261,110262,110265],{"class":161,"line":1230},[159,110263,110264],{"class":1142},"      finally",[159,110266,1478],{"class":165},[159,110268,110269,110272,110274,110277],{"class":161,"line":1247},[159,110270,110271],{"class":185},"        alert",[159,110273,1159],{"class":165},[159,110275,110276],{"class":192},"'弹出对话框'",[159,110278,1165],{"class":165},[159,110280,110281],{"class":161,"line":1265},[159,110282,1308],{"class":165},[159,110284,110285,110287,110289,110291,110293],{"class":161,"line":1277},[159,110286,5163],{"class":165},[159,110288,5166],{"class":185},[159,110290,1159],{"class":165},[159,110292,5850],{"class":1146},[159,110294,1165],{"class":165},[159,110296,110297],{"class":161,"line":1283},[159,110298,590],{"emptyLinePlaceholder":589},[159,110300,110301],{"class":161,"line":1294},[159,110302,1508],{"class":165},[159,110304,110305],{"class":161,"line":1305},[159,110306,110307],{"class":1135},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[159,110309,110310],{"class":161,"line":1311},[159,110311,110312],{"class":1135},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[159,110314,110315,110318],{"class":161,"line":1322},[159,110316,110317],{"class":185},"    fn",[159,110319,5158],{"class":165},[159,110321,110322,110324,110326],{"class":161,"line":1327},[159,110323,254],{"class":165},[159,110325,228],{"class":169},[159,110327,173],{"class":165},[159,110329,110330,110332,110334],{"class":161,"line":1336},[159,110331,264],{"class":165},[159,110333,170],{"class":169},[159,110335,173],{"class":165},[159,110337,110338],{"class":161,"line":1345},[159,110339,590],{"emptyLinePlaceholder":589},[159,110341,110342,110344,110346],{"class":161,"line":1350},[159,110343,264],{"class":165},[159,110345,522],{"class":169},[159,110347,173],{"class":165},[14,110349,110350],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[134,110352,110353],{"start":203},[106,110354,110355],{},"debugger",[14,110357,110358],{},[23,110359],{"alt":25,"src":110360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,110362,110363],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[37,110365,110367],{"id":110366},"_416-处理this","4.16 处理this",[42,110369,110371],{"id":110370},"_4161-this的指向","4.16.1 this的指向",[134,110373,110374],{},[106,110375,110376],{},"普通函数的this",[14,110378,110379],{},[23,110380],{"alt":25,"src":110381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[134,110383,110384],{"start":176},[106,110385,110386],{},"箭头函数的this",[14,110388,110389],{},[23,110390],{"alt":25,"src":110391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,110393,110394],{},[23,110395],{"alt":25,"src":110396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,110398,110399],{},[23,110400],{"alt":25,"src":110401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[42,110403,110405],{"id":110404},"_4162-this的改变","4.16.2 this的改变",[14,110407,110408],{},"call() apply() bind()",[134,110410,110411],{},[106,110412,110413],{},"call()",[14,110415,110416],{},[23,110417],{"alt":25,"src":110418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,110420,110421],{},"两个作用：①调用函数；②改变this指向",[151,110423,110425],{"className":153,"code":110424,"language":155,"meta":25,"style":25},"\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",[49,110426,110427,110435,110443,110447,110452,110456,110461,110466,110471,110475,110480,110488],{"__ignoreMap":25},[159,110428,110429,110431,110433],{"class":161,"line":162},[159,110430,166],{"class":165},[159,110432,170],{"class":169},[159,110434,173],{"class":165},[159,110436,110437,110439,110441],{"class":161,"line":176},[159,110438,179],{"class":165},[159,110440,228],{"class":169},[159,110442,173],{"class":165},[159,110444,110445],{"class":161,"line":203},[159,110446,18617],{"class":165},[159,110448,110449],{"class":161,"line":223},[159,110450,110451],{"class":165},"      uname: 'pink'\n",[159,110453,110454],{"class":161,"line":233},[159,110455,1508],{"class":165},[159,110457,110458],{"class":161,"line":239},[159,110459,110460],{"class":165},"    function fn(x, y) {\n",[159,110462,110463],{"class":161,"line":245},[159,110464,110465],{"class":165},"      console.log(this)  \u002F\u002Fwindow\n",[159,110467,110468],{"class":161,"line":251},[159,110469,110470],{"class":165},"      console.log(x + y)\n",[159,110472,110473],{"class":161,"line":261},[159,110474,1508],{"class":165},[159,110476,110477],{"class":161,"line":603},[159,110478,110479],{"class":165},"    fn.call(obj, 1, 2)\n",[159,110481,110482,110484,110486],{"class":161,"line":621},[159,110483,254],{"class":165},[159,110485,228],{"class":169},[159,110487,173],{"class":165},[159,110489,110490,110492,110494],{"class":161,"line":634},[159,110491,264],{"class":165},[159,110493,170],{"class":169},[159,110495,173],{"class":165},[14,110497,110498],{},[23,110499],{"alt":25,"src":110500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[134,110502,110503],{"start":176},[106,110504,110505],{},"apply()",[14,110507,110508],{},[23,110509],{"alt":25,"src":110510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,110512,110421],{},[14,110514,110515],{},"call传递的是普通参数，而apply必须传递的是数组",[151,110517,110519],{"className":520,"code":110518,"language":522,"meta":25,"style":25},"\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",[49,110520,110521,110531,110545,110549,110557,110571,110591,110603,110611,110615,110623,110631,110641,110648,110652,110657,110673,110685,110699,110703,110708,110727,110732,110736,110741,110746,110754,110759,110781,110786,110802,110818,110830,110834,110839,110858,110866,110874,110878],{"__ignoreMap":25},[159,110522,110523,110525,110527,110529],{"class":161,"line":162},[159,110524,914],{"class":165},[159,110526,917],{"class":169},[159,110528,920],{"class":185},[159,110530,173],{"class":165},[159,110532,110533,110535,110537,110539,110541,110543],{"class":161,"line":176},[159,110534,166],{"class":165},[159,110536,522],{"class":169},[159,110538,931],{"class":185},[159,110540,189],{"class":165},[159,110542,936],{"class":192},[159,110544,173],{"class":165},[159,110546,110547],{"class":161,"line":203},[159,110548,590],{"emptyLinePlaceholder":589},[159,110550,110551,110553,110555],{"class":161,"line":223},[159,110552,166],{"class":165},[159,110554,949],{"class":169},[159,110556,173],{"class":165},[159,110558,110559,110561,110563,110565,110567,110569],{"class":161,"line":233},[159,110560,179],{"class":165},[159,110562,958],{"class":169},[159,110564,961],{"class":185},[159,110566,189],{"class":165},[159,110568,966],{"class":192},[159,110570,173],{"class":165},[159,110572,110573,110575,110577,110579,110581,110583,110585,110587,110589],{"class":161,"line":239},[159,110574,179],{"class":165},[159,110576,958],{"class":169},[159,110578,547],{"class":185},[159,110580,189],{"class":165},[159,110582,981],{"class":192},[159,110584,984],{"class":185},[159,110586,189],{"class":165},[159,110588,989],{"class":192},[159,110590,173],{"class":165},[159,110592,110593,110595,110597,110599,110601],{"class":161,"line":245},[159,110594,179],{"class":165},[159,110596,998],{"class":169},[159,110598,1001],{"class":165},[159,110600,998],{"class":169},[159,110602,173],{"class":165},[159,110604,110605,110607,110609],{"class":161,"line":251},[159,110606,264],{"class":165},[159,110608,949],{"class":169},[159,110610,173],{"class":165},[159,110612,110613],{"class":161,"line":261},[159,110614,590],{"emptyLinePlaceholder":589},[159,110616,110617,110619,110621],{"class":161,"line":603},[159,110618,166],{"class":165},[159,110620,170],{"class":169},[159,110622,173],{"class":165},[159,110624,110625,110627,110629],{"class":161,"line":621},[159,110626,179],{"class":165},[159,110628,228],{"class":169},[159,110630,173],{"class":165},[159,110632,110633,110635,110637,110639],{"class":161,"line":634},[159,110634,1143],{"class":1142},[159,110636,17052],{"class":1146},[159,110638,1150],{"class":1142},[159,110640,1478],{"class":165},[159,110642,110643,110645],{"class":161,"line":640},[159,110644,18720],{"class":165},[159,110646,110647],{"class":1146},"18\n",[159,110649,110650],{"class":161,"line":1075},[159,110651,1508],{"class":165},[159,110653,110654],{"class":161,"line":1081},[159,110655,110656],{"class":1135},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[159,110658,110659,110661,110663,110665,110667,110669,110671],{"class":161,"line":1091},[159,110660,17167],{"class":1142},[159,110662,110150],{"class":185},[159,110664,1159],{"class":165},[159,110666,24648],{"class":8765},[159,110668,1939],{"class":165},[159,110670,24672],{"class":8765},[159,110672,1262],{"class":165},[159,110674,110675,110677,110679,110681,110683],{"class":161,"line":1100},[159,110676,5163],{"class":165},[159,110678,5166],{"class":185},[159,110680,1159],{"class":165},[159,110682,108293],{"class":1146},[159,110684,1165],{"class":165},[159,110686,110687,110689,110691,110694,110696],{"class":161,"line":1123},[159,110688,5163],{"class":165},[159,110690,5166],{"class":185},[159,110692,110693],{"class":165},"(x ",[159,110695,2704],{"class":1142},[159,110697,110698],{"class":165}," y)\n",[159,110700,110701],{"class":161,"line":1132},[159,110702,1508],{"class":165},[159,110704,110705],{"class":161,"line":1139},[159,110706,110707],{"class":1135},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[159,110709,110710,110713,110716,110719,110721,110723,110725],{"class":161,"line":1168},[159,110711,110712],{"class":165},"    fn.",[159,110714,110715],{"class":185},"apply",[159,110717,110718],{"class":165},"(obj, [",[159,110720,4932],{"class":1146},[159,110722,1939],{"class":165},[159,110724,11034],{"class":1146},[159,110726,28275],{"class":165},[159,110728,110729],{"class":161,"line":1174},[159,110730,110731],{"class":1135},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[159,110733,110734],{"class":161,"line":1180},[159,110735,590],{"emptyLinePlaceholder":589},[159,110737,110738],{"class":161,"line":1194},[159,110739,110740],{"class":1135},"    \u002F\u002F 使用场景：求数组最大值\n",[159,110742,110743],{"class":161,"line":1200},[159,110744,110745],{"class":1135},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[159,110747,110748,110751],{"class":161,"line":1221},[159,110749,110750],{"class":1135},"    \u002F\u002F console.log(max)",[159,110752,110753],{"class":1135},"   \u002F\u002F3\n",[159,110755,110756],{"class":161,"line":1230},[159,110757,110758],{"class":1135},"    \u002F\u002F 指向空或者Math都是可以的\n",[159,110760,110761,110763,110765,110767,110769,110771,110773,110775,110777,110779],{"class":161,"line":1247},[159,110762,1143],{"class":1142},[159,110764,4603],{"class":1146},[159,110766,1150],{"class":1142},[159,110768,4608],{"class":165},[159,110770,1596],{"class":1146},[159,110772,1939],{"class":165},[159,110774,24349],{"class":1146},[159,110776,1939],{"class":165},[159,110778,24379],{"class":1146},[159,110780,4634],{"class":165},[159,110782,110783],{"class":161,"line":1265},[159,110784,110785],{"class":1135},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[159,110787,110788,110790,110792,110794,110797,110799],{"class":161,"line":1277},[159,110789,1143],{"class":1142},[159,110791,29566],{"class":1146},[159,110793,1150],{"class":1142},[159,110795,110796],{"class":165}," Math.max.",[159,110798,110715],{"class":185},[159,110800,110801],{"class":165},"(Math, arr)\n",[159,110803,110804,110806,110809,110811,110814,110816],{"class":161,"line":1283},[159,110805,1143],{"class":1142},[159,110807,110808],{"class":1146}," min",[159,110810,1150],{"class":1142},[159,110812,110813],{"class":165}," Math.min.",[159,110815,110715],{"class":185},[159,110817,110801],{"class":165},[159,110819,110820,110822,110824,110827],{"class":161,"line":1294},[159,110821,20856],{"class":165},[159,110823,5166],{"class":185},[159,110825,110826],{"class":165},"(max, min)     ",[159,110828,110829],{"class":1135},"\u002F\u002F100,4\n",[159,110831,110832],{"class":161,"line":1305},[159,110833,590],{"emptyLinePlaceholder":589},[159,110835,110836],{"class":161,"line":1311},[159,110837,110838],{"class":1135},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[159,110840,110841,110843,110845,110848,110850,110852,110855],{"class":161,"line":1322},[159,110842,20856],{"class":165},[159,110844,5166],{"class":185},[159,110846,110847],{"class":165},"(Max.",[159,110849,29630],{"class":185},[159,110851,1159],{"class":165},[159,110853,110854],{"class":1142},"...",[159,110856,110857],{"class":165},"arr))\n",[159,110859,110860,110862,110864],{"class":161,"line":1327},[159,110861,254],{"class":165},[159,110863,228],{"class":169},[159,110865,173],{"class":165},[159,110867,110868,110870,110872],{"class":161,"line":1336},[159,110869,264],{"class":165},[159,110871,170],{"class":169},[159,110873,173],{"class":165},[159,110875,110876],{"class":161,"line":1345},[159,110877,590],{"emptyLinePlaceholder":589},[159,110879,110880,110882,110884],{"class":161,"line":1350},[159,110881,264],{"class":165},[159,110883,522],{"class":169},[159,110885,173],{"class":165},[14,110887,110888],{},[23,110889],{"alt":25,"src":110890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[134,110892,110893],{"start":203},[106,110894,110895],{},"bind()",[14,110897,110898],{},[23,110899],{"alt":25,"src":110900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,110902,110903],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,110905,110906],{},"bind的语法跟call很相似",[151,110908,110910],{"className":153,"code":110909,"language":155,"meta":25,"style":25},"\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",[49,110911,110912,110920,110928,110932,110937,110941,110945,110950,110954,110959,110964,110969,110974,110979,110984,110989,110993,111001],{"__ignoreMap":25},[159,110913,110914,110916,110918],{"class":161,"line":162},[159,110915,166],{"class":165},[159,110917,170],{"class":169},[159,110919,173],{"class":165},[159,110921,110922,110924,110926],{"class":161,"line":176},[159,110923,179],{"class":165},[159,110925,228],{"class":169},[159,110927,173],{"class":165},[159,110929,110930],{"class":161,"line":203},[159,110931,18617],{"class":165},[159,110933,110934],{"class":161,"line":223},[159,110935,110936],{"class":165},"      age: 18\n",[159,110938,110939],{"class":161,"line":233},[159,110940,1508],{"class":165},[159,110942,110943],{"class":161,"line":239},[159,110944,98443],{"class":165},[159,110946,110947],{"class":161,"line":245},[159,110948,110949],{"class":165},"      console.log(this)\n",[159,110951,110952],{"class":161,"line":251},[159,110953,1508],{"class":165},[159,110955,110956],{"class":161,"line":261},[159,110957,110958],{"class":165},"    \u002F\u002F 1.bind 不会调用函数\n",[159,110960,110961],{"class":161,"line":603},[159,110962,110963],{"class":165},"    \u002F\u002F 2.bind能改变this的指向\n",[159,110965,110966],{"class":161,"line":621},[159,110967,110968],{"class":165},"    fn.bind()\n",[159,110970,110971],{"class":161,"line":634},[159,110972,110973],{"class":165},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[159,110975,110976],{"class":161,"line":640},[159,110977,110978],{"class":165},"    const fun = fn.bind(obj)\n",[159,110980,110981],{"class":161,"line":1075},[159,110982,110983],{"class":165},"    \u002F\u002F console.log(fun)\n",[159,110985,110986],{"class":161,"line":1081},[159,110987,110988],{"class":165},"    \u002F\u002F 调用,查看this的指向\n",[159,110990,110991],{"class":161,"line":1091},[159,110992,75970],{"class":165},[159,110994,110995,110997,110999],{"class":161,"line":1100},[159,110996,254],{"class":165},[159,110998,228],{"class":169},[159,111000,173],{"class":165},[159,111002,111003,111005,111007],{"class":161,"line":1123},[159,111004,264],{"class":165},[159,111006,170],{"class":169},[159,111008,173],{"class":165},[14,111010,111011],{},[23,111012],{"alt":25,"src":111013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[134,111015,111016],{"start":223},[106,111017,111018],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[151,111020,111022],{"className":153,"code":111021,"language":155,"meta":25,"style":25},"\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",[49,111023,111024,111032,111045,111053,111058,111062,111067,111072,111077,111082,111087,111092,111097,111102,111106,111114],{"__ignoreMap":25},[159,111025,111026,111028,111030],{"class":161,"line":162},[159,111027,166],{"class":165},[159,111029,170],{"class":169},[159,111031,173],{"class":165},[159,111033,111034,111036,111038,111041,111043],{"class":161,"line":176},[159,111035,179],{"class":165},[159,111037,608],{"class":169},[159,111039,111040],{"class":165},">禁用\u003C\u002F",[159,111042,608],{"class":169},[159,111044,173],{"class":165},[159,111046,111047,111049,111051],{"class":161,"line":203},[159,111048,179],{"class":165},[159,111050,228],{"class":169},[159,111052,173],{"class":165},[159,111054,111055],{"class":161,"line":223},[159,111056,111057],{"class":165},"    const btn = document.querySelector('button')\n",[159,111059,111060],{"class":161,"line":233},[159,111061,5938],{"class":165},[159,111063,111064],{"class":161,"line":239},[159,111065,111066],{"class":165},"      this.disabled = true\n",[159,111068,111069],{"class":161,"line":245},[159,111070,111071],{"class":165},"      \u002F\u002F 定时器是window进行调用的\n",[159,111073,111074],{"class":161,"line":251},[159,111075,111076],{"class":165},"      setTimeout(function () {\n",[159,111078,111079],{"class":161,"line":261},[159,111080,111081],{"class":165},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[159,111083,111084],{"class":161,"line":603},[159,111085,111086],{"class":165},"        this.disabled = false\n",[159,111088,111089],{"class":161,"line":621},[159,111090,111091],{"class":165},"      }.bind(this), 2000)\n",[159,111093,111094],{"class":161,"line":634},[159,111095,111096],{"class":165},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[159,111098,111099],{"class":161,"line":640},[159,111100,111101],{"class":165},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[159,111103,111104],{"class":161,"line":1075},[159,111105,4863],{"class":165},[159,111107,111108,111110,111112],{"class":161,"line":1081},[159,111109,254],{"class":165},[159,111111,228],{"class":169},[159,111113,173],{"class":165},[159,111115,111116,111118,111120],{"class":161,"line":1091},[159,111117,264],{"class":165},[159,111119,170],{"class":169},[159,111121,173],{"class":165},[134,111123,111124],{"start":233},[106,111125,45480],{},[14,111127,111128],{},[23,111129],{"alt":25,"src":111130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[37,111132,111134],{"id":111133},"_417-性能优化","4.17 性能优化",[42,111136,111138],{"id":111137},"_4171-防抖","4.17.1 防抖",[14,111140,111141],{},[23,111142],{"alt":25,"src":111143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,111145,111146],{},[61,111147,111148],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,111150,111151],{},"防抖实现方式：",[103,111153,111154],{},[106,111155,111156],{},"lodash 提供了防抖处理",[14,111158,111159],{},"_.debounce(func,[wait=0],[options={}])",[14,111161,111162],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[151,111164,111166],{"className":520,"code":111165,"language":522,"meta":25,"style":25},"\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",[49,111167,111168,111178,111192,111196,111204,111218,111238,111250,111258,111264,111274,111286,111298,111309,111321,111331,111341,111354,111358,111366,111374,111378,111386,111404,111422,111430,111449,111459,111468,111479,111484,111488,111493,111498,111503,111528,111536,111544,111548],{"__ignoreMap":25},[159,111169,111170,111172,111174,111176],{"class":161,"line":162},[159,111171,914],{"class":165},[159,111173,917],{"class":169},[159,111175,920],{"class":185},[159,111177,173],{"class":165},[159,111179,111180,111182,111184,111186,111188,111190],{"class":161,"line":176},[159,111181,166],{"class":165},[159,111183,522],{"class":169},[159,111185,931],{"class":185},[159,111187,189],{"class":165},[159,111189,936],{"class":192},[159,111191,173],{"class":165},[159,111193,111194],{"class":161,"line":203},[159,111195,590],{"emptyLinePlaceholder":589},[159,111197,111198,111200,111202],{"class":161,"line":223},[159,111199,166],{"class":165},[159,111201,949],{"class":169},[159,111203,173],{"class":165},[159,111205,111206,111208,111210,111212,111214,111216],{"class":161,"line":233},[159,111207,179],{"class":165},[159,111209,958],{"class":169},[159,111211,961],{"class":185},[159,111213,189],{"class":165},[159,111215,966],{"class":192},[159,111217,173],{"class":165},[159,111219,111220,111222,111224,111226,111228,111230,111232,111234,111236],{"class":161,"line":239},[159,111221,179],{"class":165},[159,111223,958],{"class":169},[159,111225,547],{"class":185},[159,111227,189],{"class":165},[159,111229,981],{"class":192},[159,111231,984],{"class":185},[159,111233,189],{"class":165},[159,111235,989],{"class":192},[159,111237,173],{"class":165},[159,111239,111240,111242,111244,111246,111248],{"class":161,"line":245},[159,111241,179],{"class":165},[159,111243,998],{"class":169},[159,111245,1001],{"class":165},[159,111247,998],{"class":169},[159,111249,173],{"class":165},[159,111251,111252,111254,111256],{"class":161,"line":251},[159,111253,179],{"class":165},[159,111255,1468],{"class":169},[159,111257,173],{"class":165},[159,111259,111260,111262],{"class":161,"line":261},[159,111261,1544],{"class":185},[159,111263,1478],{"class":165},[159,111265,111266,111268,111270,111272],{"class":161,"line":603},[159,111267,19698],{"class":1146},[159,111269,1486],{"class":165},[159,111271,7523],{"class":1146},[159,111273,1492],{"class":165},[159,111275,111276,111278,111280,111282,111284],{"class":161,"line":621},[159,111277,1563],{"class":1146},[159,111279,1486],{"class":165},[159,111281,13303],{"class":1146},[159,111283,1571],{"class":1142},[159,111285,1492],{"class":165},[159,111287,111288,111290,111292,111294,111296],{"class":161,"line":634},[159,111289,1578],{"class":1146},[159,111291,1486],{"class":165},[159,111293,13303],{"class":1146},[159,111295,1571],{"class":1142},[159,111297,1492],{"class":165},[159,111299,111300,111302,111304,111307],{"class":161,"line":640},[159,111301,1682],{"class":1146},[159,111303,1486],{"class":165},[159,111305,111306],{"class":1146},"gray",[159,111308,1492],{"class":165},[159,111310,111311,111313,111315,111317,111319],{"class":161,"line":1075},[159,111312,1721],{"class":1146},[159,111314,1486],{"class":165},[159,111316,4255],{"class":1146},[159,111318,1571],{"class":1142},[159,111320,1492],{"class":165},[159,111322,111323,111325,111327,111329],{"class":161,"line":1081},[159,111324,4322],{"class":1146},[159,111326,1486],{"class":165},[159,111328,7868],{"class":1146},[159,111330,1492],{"class":165},[159,111332,111333,111335,111337,111339],{"class":161,"line":1091},[159,111334,4188],{"class":1146},[159,111336,1486],{"class":165},[159,111338,4193],{"class":1146},[159,111340,1492],{"class":165},[159,111342,111343,111346,111348,111350,111352],{"class":161,"line":1100},[159,111344,111345],{"class":1146},"      padding-top",[159,111347,1486],{"class":165},[159,111349,1753],{"class":1146},[159,111351,1571],{"class":1142},[159,111353,1492],{"class":165},[159,111355,111356],{"class":161,"line":1123},[159,111357,1508],{"class":165},[159,111359,111360,111362,111364],{"class":161,"line":1132},[159,111361,254],{"class":165},[159,111363,1468],{"class":169},[159,111365,173],{"class":165},[159,111367,111368,111370,111372],{"class":161,"line":1139},[159,111369,264],{"class":165},[159,111371,949],{"class":169},[159,111373,173],{"class":165},[159,111375,111376],{"class":161,"line":1168},[159,111377,590],{"emptyLinePlaceholder":589},[159,111379,111380,111382,111384],{"class":161,"line":1174},[159,111381,166],{"class":165},[159,111383,170],{"class":169},[159,111385,173],{"class":165},[159,111387,111388,111390,111392,111394,111396,111398,111400,111402],{"class":161,"line":1180},[159,111389,179],{"class":165},[159,111391,182],{"class":169},[159,111393,186],{"class":185},[159,111395,189],{"class":165},[159,111397,193],{"class":192},[159,111399,2158],{"class":165},[159,111401,182],{"class":169},[159,111403,173],{"class":165},[159,111405,111406,111408,111410,111412,111414,111416,111418,111420],{"class":161,"line":1194},[159,111407,179],{"class":165},[159,111409,228],{"class":169},[159,111411,2078],{"class":185},[159,111413,189],{"class":165},[159,111415,109574],{"class":192},[159,111417,2158],{"class":165},[159,111419,228],{"class":169},[159,111421,173],{"class":165},[159,111423,111424,111426,111428],{"class":161,"line":1200},[159,111425,179],{"class":165},[159,111427,228],{"class":169},[159,111429,173],{"class":165},[159,111431,111432,111434,111436,111438,111440,111442,111444,111447],{"class":161,"line":1221},[159,111433,1143],{"class":1142},[159,111435,108233],{"class":1146},[159,111437,1150],{"class":1142},[159,111439,1153],{"class":165},[159,111441,1156],{"class":185},[159,111443,1159],{"class":165},[159,111445,111446],{"class":192},"'.box'",[159,111448,1165],{"class":165},[159,111450,111451,111453,111455,111457],{"class":161,"line":1230},[159,111452,1183],{"class":1142},[159,111454,1186],{"class":165},[159,111456,189],{"class":1142},[159,111458,3785],{"class":1146},[159,111460,111461,111463,111466],{"class":161,"line":1247},[159,111462,17167],{"class":1142},[159,111464,111465],{"class":185}," mouseMove",[159,111467,17173],{"class":165},[159,111469,111470,111473,111475,111477],{"class":161,"line":1265},[159,111471,111472],{"class":165},"      box.innerHTML ",[159,111474,189],{"class":1142},[159,111476,15383],{"class":165},[159,111478,3813],{"class":1142},[159,111480,111481],{"class":161,"line":1277},[159,111482,111483],{"class":1135},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[159,111485,111486],{"class":161,"line":1283},[159,111487,1508],{"class":165},[159,111489,111490],{"class":161,"line":1294},[159,111491,111492],{"class":1135},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[159,111494,111495],{"class":161,"line":1305},[159,111496,111497],{"class":1135},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[159,111499,111500],{"class":161,"line":1311},[159,111501,111502],{"class":1135},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[159,111504,111505,111508,111510,111512,111515,111518,111521,111524,111526],{"class":161,"line":1322},[159,111506,111507],{"class":165},"    box.",[159,111509,4724],{"class":185},[159,111511,1159],{"class":165},[159,111513,111514],{"class":192},"'mousemove'",[159,111516,111517],{"class":165},", _.",[159,111519,111520],{"class":185},"debounce",[159,111522,111523],{"class":165},"(mouseMove, ",[159,111525,12132],{"class":1146},[159,111527,18787],{"class":165},[159,111529,111530,111532,111534],{"class":161,"line":1327},[159,111531,254],{"class":165},[159,111533,228],{"class":169},[159,111535,173],{"class":165},[159,111537,111538,111540,111542],{"class":161,"line":1336},[159,111539,264],{"class":165},[159,111541,170],{"class":169},[159,111543,173],{"class":165},[159,111545,111546],{"class":161,"line":1345},[159,111547,590],{"emptyLinePlaceholder":589},[159,111549,111550,111552,111554],{"class":161,"line":1350},[159,111551,264],{"class":165},[159,111553,522],{"class":169},[159,111555,173],{"class":165},[103,111557,111558],{},[106,111559,111560],{},"手写一个防抖函数来处理",[14,111562,111563],{},"防抖的核心就是利用定时器来实现的：",[14,111565,111566],{},"①声明一个定时器变量",[14,111568,111569],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,111571,111572],{},"③如果没有定时器则开启定时器，记得存到变量里面",[151,111574,111576],{"className":520,"code":111575,"language":522,"meta":25,"style":25},"\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",[49,111577,111578,111588,111602,111606,111614,111628,111648,111660,111668,111674,111684,111696,111708,111718,111730,111740,111750,111762,111766,111774,111782,111786,111794,111812,111830,111838,111856,111866,111874,111884,111888,111892,111896,111901,111906,111911,111916,111921,111926,111944,111951,111956,111964,111969,111982,111998,112008,112013,112017,112021,112041,112045,112050,112055,112060,112065,112073,112081,112085],{"__ignoreMap":25},[159,111579,111580,111582,111584,111586],{"class":161,"line":162},[159,111581,914],{"class":165},[159,111583,917],{"class":169},[159,111585,920],{"class":185},[159,111587,173],{"class":165},[159,111589,111590,111592,111594,111596,111598,111600],{"class":161,"line":176},[159,111591,166],{"class":165},[159,111593,522],{"class":169},[159,111595,931],{"class":185},[159,111597,189],{"class":165},[159,111599,936],{"class":192},[159,111601,173],{"class":165},[159,111603,111604],{"class":161,"line":203},[159,111605,590],{"emptyLinePlaceholder":589},[159,111607,111608,111610,111612],{"class":161,"line":223},[159,111609,166],{"class":165},[159,111611,949],{"class":169},[159,111613,173],{"class":165},[159,111615,111616,111618,111620,111622,111624,111626],{"class":161,"line":233},[159,111617,179],{"class":165},[159,111619,958],{"class":169},[159,111621,961],{"class":185},[159,111623,189],{"class":165},[159,111625,966],{"class":192},[159,111627,173],{"class":165},[159,111629,111630,111632,111634,111636,111638,111640,111642,111644,111646],{"class":161,"line":239},[159,111631,179],{"class":165},[159,111633,958],{"class":169},[159,111635,547],{"class":185},[159,111637,189],{"class":165},[159,111639,981],{"class":192},[159,111641,984],{"class":185},[159,111643,189],{"class":165},[159,111645,989],{"class":192},[159,111647,173],{"class":165},[159,111649,111650,111652,111654,111656,111658],{"class":161,"line":245},[159,111651,179],{"class":165},[159,111653,998],{"class":169},[159,111655,1001],{"class":165},[159,111657,998],{"class":169},[159,111659,173],{"class":165},[159,111661,111662,111664,111666],{"class":161,"line":251},[159,111663,179],{"class":165},[159,111665,1468],{"class":169},[159,111667,173],{"class":165},[159,111669,111670,111672],{"class":161,"line":261},[159,111671,1544],{"class":185},[159,111673,1478],{"class":165},[159,111675,111676,111678,111680,111682],{"class":161,"line":603},[159,111677,19698],{"class":1146},[159,111679,1486],{"class":165},[159,111681,7523],{"class":1146},[159,111683,1492],{"class":165},[159,111685,111686,111688,111690,111692,111694],{"class":161,"line":621},[159,111687,1563],{"class":1146},[159,111689,1486],{"class":165},[159,111691,13303],{"class":1146},[159,111693,1571],{"class":1142},[159,111695,1492],{"class":165},[159,111697,111698,111700,111702,111704,111706],{"class":161,"line":634},[159,111699,1578],{"class":1146},[159,111701,1486],{"class":165},[159,111703,13303],{"class":1146},[159,111705,1571],{"class":1142},[159,111707,1492],{"class":165},[159,111709,111710,111712,111714,111716],{"class":161,"line":640},[159,111711,1682],{"class":1146},[159,111713,1486],{"class":165},[159,111715,111306],{"class":1146},[159,111717,1492],{"class":165},[159,111719,111720,111722,111724,111726,111728],{"class":161,"line":1075},[159,111721,1721],{"class":1146},[159,111723,1486],{"class":165},[159,111725,4255],{"class":1146},[159,111727,1571],{"class":1142},[159,111729,1492],{"class":165},[159,111731,111732,111734,111736,111738],{"class":161,"line":1081},[159,111733,4322],{"class":1146},[159,111735,1486],{"class":165},[159,111737,7868],{"class":1146},[159,111739,1492],{"class":165},[159,111741,111742,111744,111746,111748],{"class":161,"line":1091},[159,111743,4188],{"class":1146},[159,111745,1486],{"class":165},[159,111747,4193],{"class":1146},[159,111749,1492],{"class":165},[159,111751,111752,111754,111756,111758,111760],{"class":161,"line":1100},[159,111753,111345],{"class":1146},[159,111755,1486],{"class":165},[159,111757,1753],{"class":1146},[159,111759,1571],{"class":1142},[159,111761,1492],{"class":165},[159,111763,111764],{"class":161,"line":1123},[159,111765,1508],{"class":165},[159,111767,111768,111770,111772],{"class":161,"line":1132},[159,111769,254],{"class":165},[159,111771,1468],{"class":169},[159,111773,173],{"class":165},[159,111775,111776,111778,111780],{"class":161,"line":1139},[159,111777,264],{"class":165},[159,111779,949],{"class":169},[159,111781,173],{"class":165},[159,111783,111784],{"class":161,"line":1168},[159,111785,590],{"emptyLinePlaceholder":589},[159,111787,111788,111790,111792],{"class":161,"line":1174},[159,111789,166],{"class":165},[159,111791,170],{"class":169},[159,111793,173],{"class":165},[159,111795,111796,111798,111800,111802,111804,111806,111808,111810],{"class":161,"line":1180},[159,111797,179],{"class":165},[159,111799,182],{"class":169},[159,111801,186],{"class":185},[159,111803,189],{"class":165},[159,111805,193],{"class":192},[159,111807,2158],{"class":165},[159,111809,182],{"class":169},[159,111811,173],{"class":165},[159,111813,111814,111816,111818,111820,111822,111824,111826,111828],{"class":161,"line":1194},[159,111815,179],{"class":165},[159,111817,228],{"class":169},[159,111819,2078],{"class":185},[159,111821,189],{"class":165},[159,111823,109574],{"class":192},[159,111825,2158],{"class":165},[159,111827,228],{"class":169},[159,111829,173],{"class":165},[159,111831,111832,111834,111836],{"class":161,"line":1200},[159,111833,179],{"class":165},[159,111835,228],{"class":169},[159,111837,173],{"class":165},[159,111839,111840,111842,111844,111846,111848,111850,111852,111854],{"class":161,"line":1221},[159,111841,1143],{"class":1142},[159,111843,108233],{"class":1146},[159,111845,1150],{"class":1142},[159,111847,1153],{"class":165},[159,111849,1156],{"class":185},[159,111851,1159],{"class":165},[159,111853,111446],{"class":192},[159,111855,1165],{"class":165},[159,111857,111858,111860,111862,111864],{"class":161,"line":1230},[159,111859,1183],{"class":1142},[159,111861,1186],{"class":165},[159,111863,189],{"class":1142},[159,111865,3785],{"class":1146},[159,111867,111868,111870,111872],{"class":161,"line":1247},[159,111869,17167],{"class":1142},[159,111871,111465],{"class":185},[159,111873,17173],{"class":165},[159,111875,111876,111878,111880,111882],{"class":161,"line":1265},[159,111877,111472],{"class":165},[159,111879,189],{"class":1142},[159,111881,15383],{"class":165},[159,111883,3813],{"class":1142},[159,111885,111886],{"class":161,"line":1277},[159,111887,111483],{"class":1135},[159,111889,111890],{"class":161,"line":1283},[159,111891,1508],{"class":165},[159,111893,111894],{"class":161,"line":1294},[159,111895,111492],{"class":1135},[159,111897,111898],{"class":161,"line":1305},[159,111899,111900],{"class":1135},"    \u002F\u002F 手写防抖函数\n",[159,111902,111903],{"class":161,"line":1311},[159,111904,111905],{"class":1135},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[159,111907,111908],{"class":161,"line":1322},[159,111909,111910],{"class":1135},"    \u002F\u002F 1.声明定时器变量\n",[159,111912,111913],{"class":161,"line":1327},[159,111914,111915],{"class":1135},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[159,111917,111918],{"class":161,"line":1336},[159,111919,111920],{"class":1135},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[159,111922,111923],{"class":161,"line":1345},[159,111924,111925],{"class":1135},"    \u002F\u002F 4.定时器里面写函数调用\n",[159,111927,111928,111930,111933,111935,111938,111940,111942],{"class":161,"line":1350},[159,111929,17167],{"class":1142},[159,111931,111932],{"class":185}," debounce",[159,111934,1159],{"class":165},[159,111936,111937],{"class":8765},"fn",[159,111939,1939],{"class":165},[159,111941,24552],{"class":8765},[159,111943,1262],{"class":165},[159,111945,111946,111948],{"class":161,"line":1764},[159,111947,101072],{"class":1142},[159,111949,111950],{"class":165}," timer\n",[159,111952,111953],{"class":161,"line":1769},[159,111954,111955],{"class":1135},"      \u002F\u002F return 返回一个匿名函数\n",[159,111957,111958,111960,111962],{"class":161,"line":1777},[159,111959,21093],{"class":1142},[159,111961,5838],{"class":1142},[159,111963,1218],{"class":165},[159,111965,111966],{"class":161,"line":1788},[159,111967,111968],{"class":1135},"        \u002F\u002F 这里边写第二三四步\n",[159,111970,111971,111973,111976,111979],{"class":161,"line":1802},[159,111972,17003],{"class":1142},[159,111974,111975],{"class":165}," (timer) ",[159,111977,111978],{"class":185},"clearTimeout",[159,111980,111981],{"class":165},"(timer)\n",[159,111983,111984,111987,111989,111992,111994,111996],{"class":161,"line":1815},[159,111985,111986],{"class":165},"        timer ",[159,111988,189],{"class":1142},[159,111990,111991],{"class":185}," setTimeout",[159,111993,1159],{"class":165},[159,111995,1215],{"class":1142},[159,111997,1218],{"class":165},[159,111999,112000,112003,112005],{"class":161,"line":1828},[159,112001,112002],{"class":185},"          fn",[159,112004,4774],{"class":165},[159,112006,112007],{"class":1135},"\u002F\u002F加小括号调用fn }, t)\n",[159,112009,112010],{"class":161,"line":1841},[159,112011,112012],{"class":165},"        }, t)\n",[159,112014,112015],{"class":161,"line":1852},[159,112016,1308],{"class":165},[159,112018,112019],{"class":161,"line":1866},[159,112020,1508],{"class":165},[159,112022,112023,112025,112027,112029,112031,112033,112035,112037,112039],{"class":161,"line":1879},[159,112024,111507],{"class":165},[159,112026,4724],{"class":185},[159,112028,1159],{"class":165},[159,112030,111514],{"class":192},[159,112032,1939],{"class":165},[159,112034,111520],{"class":185},[159,112036,111523],{"class":165},[159,112038,12132],{"class":1146},[159,112040,18787],{"class":165},[159,112042,112043],{"class":161,"line":1884},[159,112044,590],{"emptyLinePlaceholder":589},[159,112046,112047],{"class":161,"line":1889},[159,112048,112049],{"class":1135},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[159,112051,112052],{"class":161,"line":1899},[159,112053,112054],{"class":1135},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[159,112056,112057],{"class":161,"line":1912},[159,112058,112059],{"class":1135},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[159,112061,112062],{"class":161,"line":1925},[159,112063,112064],{"class":1135},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[159,112066,112067,112069,112071],{"class":161,"line":1956},[159,112068,254],{"class":165},[159,112070,228],{"class":169},[159,112072,173],{"class":165},[159,112074,112075,112077,112079],{"class":161,"line":1971},[159,112076,264],{"class":165},[159,112078,170],{"class":169},[159,112080,173],{"class":165},[159,112082,112083],{"class":161,"line":1976},[159,112084,590],{"emptyLinePlaceholder":589},[159,112086,112087,112089,112091],{"class":161,"line":1981},[159,112088,264],{"class":165},[159,112090,522],{"class":169},[159,112092,173],{"class":165},[42,112094,112096],{"id":112095},"_4172-节流","4.17.2 节流",[14,112098,112099],{},[23,112100],{"alt":25,"src":112101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,112103,112104],{},[23,112105],{"alt":25,"src":112106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,112108,112109],{},[61,112110,112111],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,112113,112114],{},"实现方式：",[103,112116,112117],{},[106,112118,112119],{},"lodash 提供的节流函数来处理",[14,112121,112122],{},"_.throttle(func,[wait=0],[options=])",[14,112124,112125],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[151,112127,112129],{"className":520,"code":112128,"language":522,"meta":25,"style":25},"\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",[49,112130,112131,112141,112155,112159,112167,112181,112201,112213,112221,112227,112237,112249,112261,112271,112283,112293,112303,112315,112319,112327,112335,112339,112347,112365,112383,112391,112409,112419,112427,112437,112441,112445,112449,112454,112459,112480,112488,112496,112500],{"__ignoreMap":25},[159,112132,112133,112135,112137,112139],{"class":161,"line":162},[159,112134,914],{"class":165},[159,112136,917],{"class":169},[159,112138,920],{"class":185},[159,112140,173],{"class":165},[159,112142,112143,112145,112147,112149,112151,112153],{"class":161,"line":176},[159,112144,166],{"class":165},[159,112146,522],{"class":169},[159,112148,931],{"class":185},[159,112150,189],{"class":165},[159,112152,936],{"class":192},[159,112154,173],{"class":165},[159,112156,112157],{"class":161,"line":203},[159,112158,590],{"emptyLinePlaceholder":589},[159,112160,112161,112163,112165],{"class":161,"line":223},[159,112162,166],{"class":165},[159,112164,949],{"class":169},[159,112166,173],{"class":165},[159,112168,112169,112171,112173,112175,112177,112179],{"class":161,"line":233},[159,112170,179],{"class":165},[159,112172,958],{"class":169},[159,112174,961],{"class":185},[159,112176,189],{"class":165},[159,112178,966],{"class":192},[159,112180,173],{"class":165},[159,112182,112183,112185,112187,112189,112191,112193,112195,112197,112199],{"class":161,"line":239},[159,112184,179],{"class":165},[159,112186,958],{"class":169},[159,112188,547],{"class":185},[159,112190,189],{"class":165},[159,112192,981],{"class":192},[159,112194,984],{"class":185},[159,112196,189],{"class":165},[159,112198,989],{"class":192},[159,112200,173],{"class":165},[159,112202,112203,112205,112207,112209,112211],{"class":161,"line":245},[159,112204,179],{"class":165},[159,112206,998],{"class":169},[159,112208,1001],{"class":165},[159,112210,998],{"class":169},[159,112212,173],{"class":165},[159,112214,112215,112217,112219],{"class":161,"line":251},[159,112216,179],{"class":165},[159,112218,1468],{"class":169},[159,112220,173],{"class":165},[159,112222,112223,112225],{"class":161,"line":261},[159,112224,1544],{"class":185},[159,112226,1478],{"class":165},[159,112228,112229,112231,112233,112235],{"class":161,"line":603},[159,112230,19698],{"class":1146},[159,112232,1486],{"class":165},[159,112234,7523],{"class":1146},[159,112236,1492],{"class":165},[159,112238,112239,112241,112243,112245,112247],{"class":161,"line":621},[159,112240,1563],{"class":1146},[159,112242,1486],{"class":165},[159,112244,13303],{"class":1146},[159,112246,1571],{"class":1142},[159,112248,1492],{"class":165},[159,112250,112251,112253,112255,112257,112259],{"class":161,"line":634},[159,112252,1578],{"class":1146},[159,112254,1486],{"class":165},[159,112256,13303],{"class":1146},[159,112258,1571],{"class":1142},[159,112260,1492],{"class":165},[159,112262,112263,112265,112267,112269],{"class":161,"line":640},[159,112264,1682],{"class":1146},[159,112266,1486],{"class":165},[159,112268,111306],{"class":1146},[159,112270,1492],{"class":165},[159,112272,112273,112275,112277,112279,112281],{"class":161,"line":1075},[159,112274,1721],{"class":1146},[159,112276,1486],{"class":165},[159,112278,4255],{"class":1146},[159,112280,1571],{"class":1142},[159,112282,1492],{"class":165},[159,112284,112285,112287,112289,112291],{"class":161,"line":1081},[159,112286,4322],{"class":1146},[159,112288,1486],{"class":165},[159,112290,7868],{"class":1146},[159,112292,1492],{"class":165},[159,112294,112295,112297,112299,112301],{"class":161,"line":1091},[159,112296,4188],{"class":1146},[159,112298,1486],{"class":165},[159,112300,4193],{"class":1146},[159,112302,1492],{"class":165},[159,112304,112305,112307,112309,112311,112313],{"class":161,"line":1100},[159,112306,111345],{"class":1146},[159,112308,1486],{"class":165},[159,112310,1753],{"class":1146},[159,112312,1571],{"class":1142},[159,112314,1492],{"class":165},[159,112316,112317],{"class":161,"line":1123},[159,112318,1508],{"class":165},[159,112320,112321,112323,112325],{"class":161,"line":1132},[159,112322,254],{"class":165},[159,112324,1468],{"class":169},[159,112326,173],{"class":165},[159,112328,112329,112331,112333],{"class":161,"line":1139},[159,112330,264],{"class":165},[159,112332,949],{"class":169},[159,112334,173],{"class":165},[159,112336,112337],{"class":161,"line":1168},[159,112338,590],{"emptyLinePlaceholder":589},[159,112340,112341,112343,112345],{"class":161,"line":1174},[159,112342,166],{"class":165},[159,112344,170],{"class":169},[159,112346,173],{"class":165},[159,112348,112349,112351,112353,112355,112357,112359,112361,112363],{"class":161,"line":1180},[159,112350,179],{"class":165},[159,112352,182],{"class":169},[159,112354,186],{"class":185},[159,112356,189],{"class":165},[159,112358,193],{"class":192},[159,112360,2158],{"class":165},[159,112362,182],{"class":169},[159,112364,173],{"class":165},[159,112366,112367,112369,112371,112373,112375,112377,112379,112381],{"class":161,"line":1194},[159,112368,179],{"class":165},[159,112370,228],{"class":169},[159,112372,2078],{"class":185},[159,112374,189],{"class":165},[159,112376,109574],{"class":192},[159,112378,2158],{"class":165},[159,112380,228],{"class":169},[159,112382,173],{"class":165},[159,112384,112385,112387,112389],{"class":161,"line":1200},[159,112386,179],{"class":165},[159,112388,228],{"class":169},[159,112390,173],{"class":165},[159,112392,112393,112395,112397,112399,112401,112403,112405,112407],{"class":161,"line":1221},[159,112394,1143],{"class":1142},[159,112396,108233],{"class":1146},[159,112398,1150],{"class":1142},[159,112400,1153],{"class":165},[159,112402,1156],{"class":185},[159,112404,1159],{"class":165},[159,112406,111446],{"class":192},[159,112408,1165],{"class":165},[159,112410,112411,112413,112415,112417],{"class":161,"line":1230},[159,112412,1183],{"class":1142},[159,112414,1186],{"class":165},[159,112416,189],{"class":1142},[159,112418,3785],{"class":1146},[159,112420,112421,112423,112425],{"class":161,"line":1247},[159,112422,17167],{"class":1142},[159,112424,111465],{"class":185},[159,112426,17173],{"class":165},[159,112428,112429,112431,112433,112435],{"class":161,"line":1265},[159,112430,111472],{"class":165},[159,112432,189],{"class":1142},[159,112434,15383],{"class":165},[159,112436,3813],{"class":1142},[159,112438,112439],{"class":161,"line":1277},[159,112440,111483],{"class":1135},[159,112442,112443],{"class":161,"line":1283},[159,112444,1508],{"class":165},[159,112446,112447],{"class":161,"line":1294},[159,112448,111492],{"class":1135},[159,112450,112451],{"class":161,"line":1305},[159,112452,112453],{"class":1135},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[159,112455,112456],{"class":161,"line":1311},[159,112457,112458],{"class":1135},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[159,112460,112461,112463,112465,112467,112469,112471,112474,112476,112478],{"class":161,"line":1322},[159,112462,111507],{"class":165},[159,112464,4724],{"class":185},[159,112466,1159],{"class":165},[159,112468,111514],{"class":192},[159,112470,111517],{"class":165},[159,112472,112473],{"class":185},"throttle",[159,112475,111523],{"class":165},[159,112477,12132],{"class":1146},[159,112479,18787],{"class":165},[159,112481,112482,112484,112486],{"class":161,"line":1327},[159,112483,254],{"class":165},[159,112485,228],{"class":169},[159,112487,173],{"class":165},[159,112489,112490,112492,112494],{"class":161,"line":1336},[159,112491,264],{"class":165},[159,112493,170],{"class":169},[159,112495,173],{"class":165},[159,112497,112498],{"class":161,"line":1345},[159,112499,590],{"emptyLinePlaceholder":589},[159,112501,112502,112504,112506],{"class":161,"line":1350},[159,112503,264],{"class":165},[159,112505,522],{"class":169},[159,112507,173],{"class":165},[103,112509,112510],{},[106,112511,112512],{},"手写一个节流函数来处理",[14,112514,18039],{},[14,112516,111566],{},[14,112518,112519],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,112521,112522],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[151,112524,112526],{"className":520,"code":112525,"language":522,"meta":25,"style":25},"\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",[49,112527,112528,112538,112552,112556,112564,112578,112598,112610,112618,112624,112634,112646,112658,112668,112680,112690,112700,112712,112716,112724,112732,112736,112744,112762,112780,112788,112806,112816,112824,112834,112838,112842,112846,112851,112856,112861,112866,112871,112876,112893,112899,112907,112918,112933,112940,112945,112950,112960,112965,112970,112975,112979,112983,112987,113007,113015,113023,113027],{"__ignoreMap":25},[159,112529,112530,112532,112534,112536],{"class":161,"line":162},[159,112531,914],{"class":165},[159,112533,917],{"class":169},[159,112535,920],{"class":185},[159,112537,173],{"class":165},[159,112539,112540,112542,112544,112546,112548,112550],{"class":161,"line":176},[159,112541,166],{"class":165},[159,112543,522],{"class":169},[159,112545,931],{"class":185},[159,112547,189],{"class":165},[159,112549,936],{"class":192},[159,112551,173],{"class":165},[159,112553,112554],{"class":161,"line":203},[159,112555,590],{"emptyLinePlaceholder":589},[159,112557,112558,112560,112562],{"class":161,"line":223},[159,112559,166],{"class":165},[159,112561,949],{"class":169},[159,112563,173],{"class":165},[159,112565,112566,112568,112570,112572,112574,112576],{"class":161,"line":233},[159,112567,179],{"class":165},[159,112569,958],{"class":169},[159,112571,961],{"class":185},[159,112573,189],{"class":165},[159,112575,966],{"class":192},[159,112577,173],{"class":165},[159,112579,112580,112582,112584,112586,112588,112590,112592,112594,112596],{"class":161,"line":239},[159,112581,179],{"class":165},[159,112583,958],{"class":169},[159,112585,547],{"class":185},[159,112587,189],{"class":165},[159,112589,981],{"class":192},[159,112591,984],{"class":185},[159,112593,189],{"class":165},[159,112595,989],{"class":192},[159,112597,173],{"class":165},[159,112599,112600,112602,112604,112606,112608],{"class":161,"line":245},[159,112601,179],{"class":165},[159,112603,998],{"class":169},[159,112605,1001],{"class":165},[159,112607,998],{"class":169},[159,112609,173],{"class":165},[159,112611,112612,112614,112616],{"class":161,"line":251},[159,112613,179],{"class":165},[159,112615,1468],{"class":169},[159,112617,173],{"class":165},[159,112619,112620,112622],{"class":161,"line":261},[159,112621,1544],{"class":185},[159,112623,1478],{"class":165},[159,112625,112626,112628,112630,112632],{"class":161,"line":603},[159,112627,19698],{"class":1146},[159,112629,1486],{"class":165},[159,112631,7523],{"class":1146},[159,112633,1492],{"class":165},[159,112635,112636,112638,112640,112642,112644],{"class":161,"line":621},[159,112637,1563],{"class":1146},[159,112639,1486],{"class":165},[159,112641,13303],{"class":1146},[159,112643,1571],{"class":1142},[159,112645,1492],{"class":165},[159,112647,112648,112650,112652,112654,112656],{"class":161,"line":634},[159,112649,1578],{"class":1146},[159,112651,1486],{"class":165},[159,112653,13303],{"class":1146},[159,112655,1571],{"class":1142},[159,112657,1492],{"class":165},[159,112659,112660,112662,112664,112666],{"class":161,"line":640},[159,112661,1682],{"class":1146},[159,112663,1486],{"class":165},[159,112665,111306],{"class":1146},[159,112667,1492],{"class":165},[159,112669,112670,112672,112674,112676,112678],{"class":161,"line":1075},[159,112671,1721],{"class":1146},[159,112673,1486],{"class":165},[159,112675,4255],{"class":1146},[159,112677,1571],{"class":1142},[159,112679,1492],{"class":165},[159,112681,112682,112684,112686,112688],{"class":161,"line":1081},[159,112683,4322],{"class":1146},[159,112685,1486],{"class":165},[159,112687,7868],{"class":1146},[159,112689,1492],{"class":165},[159,112691,112692,112694,112696,112698],{"class":161,"line":1091},[159,112693,4188],{"class":1146},[159,112695,1486],{"class":165},[159,112697,4193],{"class":1146},[159,112699,1492],{"class":165},[159,112701,112702,112704,112706,112708,112710],{"class":161,"line":1100},[159,112703,111345],{"class":1146},[159,112705,1486],{"class":165},[159,112707,1753],{"class":1146},[159,112709,1571],{"class":1142},[159,112711,1492],{"class":165},[159,112713,112714],{"class":161,"line":1123},[159,112715,1508],{"class":165},[159,112717,112718,112720,112722],{"class":161,"line":1132},[159,112719,254],{"class":165},[159,112721,1468],{"class":169},[159,112723,173],{"class":165},[159,112725,112726,112728,112730],{"class":161,"line":1139},[159,112727,264],{"class":165},[159,112729,949],{"class":169},[159,112731,173],{"class":165},[159,112733,112734],{"class":161,"line":1168},[159,112735,590],{"emptyLinePlaceholder":589},[159,112737,112738,112740,112742],{"class":161,"line":1174},[159,112739,166],{"class":165},[159,112741,170],{"class":169},[159,112743,173],{"class":165},[159,112745,112746,112748,112750,112752,112754,112756,112758,112760],{"class":161,"line":1180},[159,112747,179],{"class":165},[159,112749,182],{"class":169},[159,112751,186],{"class":185},[159,112753,189],{"class":165},[159,112755,193],{"class":192},[159,112757,2158],{"class":165},[159,112759,182],{"class":169},[159,112761,173],{"class":165},[159,112763,112764,112766,112768,112770,112772,112774,112776,112778],{"class":161,"line":1194},[159,112765,179],{"class":165},[159,112767,228],{"class":169},[159,112769,2078],{"class":185},[159,112771,189],{"class":165},[159,112773,109574],{"class":192},[159,112775,2158],{"class":165},[159,112777,228],{"class":169},[159,112779,173],{"class":165},[159,112781,112782,112784,112786],{"class":161,"line":1200},[159,112783,179],{"class":165},[159,112785,228],{"class":169},[159,112787,173],{"class":165},[159,112789,112790,112792,112794,112796,112798,112800,112802,112804],{"class":161,"line":1221},[159,112791,1143],{"class":1142},[159,112793,108233],{"class":1146},[159,112795,1150],{"class":1142},[159,112797,1153],{"class":165},[159,112799,1156],{"class":185},[159,112801,1159],{"class":165},[159,112803,111446],{"class":192},[159,112805,1165],{"class":165},[159,112807,112808,112810,112812,112814],{"class":161,"line":1230},[159,112809,1183],{"class":1142},[159,112811,1186],{"class":165},[159,112813,189],{"class":1142},[159,112815,3785],{"class":1146},[159,112817,112818,112820,112822],{"class":161,"line":1247},[159,112819,17167],{"class":1142},[159,112821,111465],{"class":185},[159,112823,17173],{"class":165},[159,112825,112826,112828,112830,112832],{"class":161,"line":1265},[159,112827,111472],{"class":165},[159,112829,189],{"class":1142},[159,112831,15383],{"class":165},[159,112833,3813],{"class":1142},[159,112835,112836],{"class":161,"line":1277},[159,112837,111483],{"class":1135},[159,112839,112840],{"class":161,"line":1283},[159,112841,1508],{"class":165},[159,112843,112844],{"class":161,"line":1294},[159,112845,111492],{"class":1135},[159,112847,112848],{"class":161,"line":1305},[159,112849,112850],{"class":1135},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[159,112852,112853],{"class":161,"line":1311},[159,112854,112855],{"class":1135},"    \u002F\u002F 1.声明一个定时器变量\n",[159,112857,112858],{"class":161,"line":1322},[159,112859,112860],{"class":1135},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[159,112862,112863],{"class":161,"line":1327},[159,112864,112865],{"class":1135},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[159,112867,112868],{"class":161,"line":1336},[159,112869,112870],{"class":1135},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[159,112872,112873],{"class":161,"line":1345},[159,112874,112875],{"class":1135},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[159,112877,112878,112880,112883,112885,112887,112889,112891],{"class":161,"line":1350},[159,112879,17167],{"class":1142},[159,112881,112882],{"class":185}," throttle",[159,112884,1159],{"class":165},[159,112886,111937],{"class":8765},[159,112888,1939],{"class":165},[159,112890,24552],{"class":8765},[159,112892,1262],{"class":165},[159,112894,112895,112897],{"class":161,"line":1764},[159,112896,101072],{"class":1142},[159,112898,111950],{"class":165},[159,112900,112901,112903,112905],{"class":161,"line":1769},[159,112902,21093],{"class":1142},[159,112904,5838],{"class":1142},[159,112906,1218],{"class":165},[159,112908,112909,112911,112913,112915],{"class":161,"line":1777},[159,112910,17003],{"class":1142},[159,112912,11680],{"class":165},[159,112914,18314],{"class":1142},[159,112916,112917],{"class":165},"timer) {\n",[159,112919,112920,112923,112925,112927,112929,112931],{"class":161,"line":1788},[159,112921,112922],{"class":165},"          timer ",[159,112924,189],{"class":1142},[159,112926,111991],{"class":185},[159,112928,1159],{"class":165},[159,112930,1215],{"class":1142},[159,112932,1218],{"class":165},[159,112934,112935,112938],{"class":161,"line":1802},[159,112936,112937],{"class":185},"            fn",[159,112939,5158],{"class":165},[159,112941,112942],{"class":161,"line":1815},[159,112943,112944],{"class":1135},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[159,112946,112947],{"class":161,"line":1828},[159,112948,112949],{"class":1135},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[159,112951,112952,112955,112957],{"class":161,"line":1841},[159,112953,112954],{"class":165},"            timer ",[159,112956,189],{"class":1142},[159,112958,112959],{"class":1146}," null\n",[159,112961,112962],{"class":161,"line":1852},[159,112963,112964],{"class":1135},"            \u002F\u002F 不能用clearTimeout(timer)\n",[159,112966,112967],{"class":161,"line":1866},[159,112968,112969],{"class":1135},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[159,112971,112972],{"class":161,"line":1879},[159,112973,112974],{"class":165},"          }, t)\n",[159,112976,112977],{"class":161,"line":1884},[159,112978,7530],{"class":165},[159,112980,112981],{"class":161,"line":1889},[159,112982,1308],{"class":165},[159,112984,112985],{"class":161,"line":1899},[159,112986,1508],{"class":165},[159,112988,112989,112991,112993,112995,112997,112999,113001,113003,113005],{"class":161,"line":1912},[159,112990,111507],{"class":165},[159,112992,4724],{"class":185},[159,112994,1159],{"class":165},[159,112996,111514],{"class":192},[159,112998,1939],{"class":165},[159,113000,112473],{"class":185},[159,113002,111523],{"class":165},[159,113004,12132],{"class":1146},[159,113006,18787],{"class":165},[159,113008,113009,113011,113013],{"class":161,"line":1925},[159,113010,254],{"class":165},[159,113012,228],{"class":169},[159,113014,173],{"class":165},[159,113016,113017,113019,113021],{"class":161,"line":1956},[159,113018,264],{"class":165},[159,113020,170],{"class":169},[159,113022,173],{"class":165},[159,113024,113025],{"class":161,"line":1971},[159,113026,590],{"emptyLinePlaceholder":589},[159,113028,113029,113031,113033],{"class":161,"line":1976},[159,113030,264],{"class":165},[159,113032,522],{"class":169},[159,113034,173],{"class":165},[42,113036,113038],{"id":113037},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[151,113040,113042],{"className":153,"code":113041,"language":155,"meta":25,"style":25},"\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",[49,113043,113044,113052,113060,113065,113070,113075,113080,113084,113092],{"__ignoreMap":25},[159,113045,113046,113048,113050],{"class":161,"line":162},[159,113047,166],{"class":165},[159,113049,170],{"class":169},[159,113051,173],{"class":165},[159,113053,113054,113056,113058],{"class":161,"line":176},[159,113055,179],{"class":165},[159,113057,228],{"class":169},[159,113059,173],{"class":165},[159,113061,113062],{"class":161,"line":203},[159,113063,113064],{"class":165},"    let timer = null\n",[159,113066,113067],{"class":161,"line":223},[159,113068,113069],{"class":165},"    timer = setTimeout(() => {\n",[159,113071,113072],{"class":161,"line":233},[159,113073,113074],{"class":165},"      clearTimeout(timer)\n",[159,113076,113077],{"class":161,"line":239},[159,113078,113079],{"class":165},"      console.log(timer)\n",[159,113081,113082],{"class":161,"line":245},[159,113083,7216],{"class":165},[159,113085,113086,113088,113090],{"class":161,"line":251},[159,113087,254],{"class":165},[159,113089,228],{"class":169},[159,113091,173],{"class":165},[159,113093,113094,113096,113098],{"class":161,"line":261},[159,113095,264],{"class":165},[159,113097,170],{"class":169},[159,113099,173],{"class":165},[14,113101,113102],{},"输出为1",[14,113104,113105],{},"在开启的定时器里边写清除定时器",[14,113107,113108],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[42,113110,113112],{"id":113111},"_4174-节流综合案例","4.17.4 节流综合案例",[14,113114,113115],{},"页面打开，可以记录上一次的视频播放位置",[14,113117,113118],{},[23,113119],{"alt":25,"src":113120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,113122,113123],{},[23,113124],{"alt":25,"src":113125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[151,113127,113129],{"className":520,"code":113128,"language":522,"meta":25,"style":25},"\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",[49,113130,113131,113141,113155,113159,113167,113181,113201,113221,113243,113256,113264,113270,113280,113290,113300,113304,113308,113315,113328,113340,113344,113348,113358,113370,113384,113388,113392,113399,113409,113422,113434,113444,113454,113470,113482,113486,113490,113498,113508,113520,113530,113540,113550,113554,113558,113568,113579,113583,113591,113599,113603,113611,113626,113641,113656,113677,113685,113693,113708,113730,113738,113753,113779,113805,113831,113839,113847,113866,113874,113879,113898,113903,113921,113926,113931,113939,113944,113958,113966,113971,113988,113992,113997,114019,114023,114031,114039,114043],{"__ignoreMap":25},[159,113132,113133,113135,113137,113139],{"class":161,"line":162},[159,113134,914],{"class":165},[159,113136,917],{"class":169},[159,113138,920],{"class":185},[159,113140,173],{"class":165},[159,113142,113143,113145,113147,113149,113151,113153],{"class":161,"line":176},[159,113144,166],{"class":165},[159,113146,522],{"class":169},[159,113148,931],{"class":185},[159,113150,189],{"class":165},[159,113152,936],{"class":192},[159,113154,173],{"class":165},[159,113156,113157],{"class":161,"line":203},[159,113158,590],{"emptyLinePlaceholder":589},[159,113160,113161,113163,113165],{"class":161,"line":223},[159,113162,166],{"class":165},[159,113164,949],{"class":169},[159,113166,173],{"class":165},[159,113168,113169,113171,113173,113175,113177,113179],{"class":161,"line":233},[159,113170,179],{"class":165},[159,113172,958],{"class":169},[159,113174,961],{"class":185},[159,113176,189],{"class":165},[159,113178,966],{"class":192},[159,113180,6049],{"class":165},[159,113182,113183,113185,113187,113189,113191,113193,113195,113197,113199],{"class":161,"line":239},[159,113184,179],{"class":165},[159,113186,958],{"class":169},[159,113188,6058],{"class":185},[159,113190,189],{"class":165},[159,113192,6063],{"class":192},[159,113194,984],{"class":185},[159,113196,189],{"class":165},[159,113198,6070],{"class":192},[159,113200,6049],{"class":165},[159,113202,113203,113205,113207,113209,113211,113213,113215,113217,113219],{"class":161,"line":245},[159,113204,179],{"class":165},[159,113206,958],{"class":169},[159,113208,547],{"class":185},[159,113210,189],{"class":165},[159,113212,981],{"class":192},[159,113214,984],{"class":185},[159,113216,189],{"class":165},[159,113218,989],{"class":192},[159,113220,6049],{"class":165},[159,113222,113223,113225,113227,113229,113231,113234,113236,113238,113241],{"class":161,"line":251},[159,113224,179],{"class":165},[159,113226,958],{"class":169},[159,113228,547],{"class":185},[159,113230,189],{"class":165},[159,113232,113233],{"class":192},"\"referrer\"",[159,113235,984],{"class":185},[159,113237,189],{"class":165},[159,113239,113240],{"class":192},"\"never\"",[159,113242,6049],{"class":165},[159,113244,113245,113247,113249,113252,113254],{"class":161,"line":261},[159,113246,179],{"class":165},[159,113248,998],{"class":169},[159,113250,113251],{"class":165},">综合案例\u003C\u002F",[159,113253,998],{"class":169},[159,113255,173],{"class":165},[159,113257,113258,113260,113262],{"class":161,"line":603},[159,113259,179],{"class":165},[159,113261,1468],{"class":169},[159,113263,173],{"class":165},[159,113265,113266,113268],{"class":161,"line":621},[159,113267,1475],{"class":169},[159,113269,1478],{"class":165},[159,113271,113272,113274,113276,113278],{"class":161,"line":634},[159,113273,1483],{"class":1146},[159,113275,1486],{"class":165},[159,113277,1489],{"class":1146},[159,113279,1492],{"class":165},[159,113281,113282,113284,113286,113288],{"class":161,"line":640},[159,113283,1497],{"class":1146},[159,113285,1486],{"class":165},[159,113287,1489],{"class":1146},[159,113289,1492],{"class":165},[159,113291,113292,113294,113296,113298],{"class":161,"line":1075},[159,113293,19698],{"class":1146},[159,113295,1486],{"class":165},[159,113297,7523],{"class":1146},[159,113299,1492],{"class":165},[159,113301,113302],{"class":161,"line":1081},[159,113303,1508],{"class":165},[159,113305,113306],{"class":161,"line":1091},[159,113307,590],{"emptyLinePlaceholder":589},[159,113309,113310,113313],{"class":161,"line":1100},[159,113311,113312],{"class":185},"    .container",[159,113314,1478],{"class":165},[159,113316,113317,113319,113321,113324,113326],{"class":161,"line":1123},[159,113318,1563],{"class":1146},[159,113320,1486],{"class":165},[159,113322,113323],{"class":1146},"1200",[159,113325,1571],{"class":1142},[159,113327,1492],{"class":165},[159,113329,113330,113332,113334,113336,113338],{"class":161,"line":1132},[159,113331,1497],{"class":1146},[159,113333,1486],{"class":165},[159,113335,1489],{"class":1146},[159,113337,1601],{"class":1146},[159,113339,1492],{"class":165},[159,113341,113342],{"class":161,"line":1139},[159,113343,1508],{"class":165},[159,113345,113346],{"class":161,"line":1168},[159,113347,590],{"emptyLinePlaceholder":589},[159,113349,113350,113353,113356],{"class":161,"line":1174},[159,113351,113352],{"class":185},"    .video",[159,113354,113355],{"class":169}," video",[159,113357,1478],{"class":165},[159,113359,113360,113362,113364,113366,113368],{"class":161,"line":1180},[159,113361,1563],{"class":1146},[159,113363,1486],{"class":165},[159,113365,1596],{"class":1146},[159,113367,1662],{"class":1142},[159,113369,1492],{"class":165},[159,113371,113372,113374,113376,113378,113380,113382],{"class":161,"line":1194},[159,113373,1483],{"class":1146},[159,113375,1486],{"class":165},[159,113377,1739],{"class":1146},[159,113379,1571],{"class":1142},[159,113381,1259],{"class":1146},[159,113383,1492],{"class":165},[159,113385,113386],{"class":161,"line":1200},[159,113387,1508],{"class":165},[159,113389,113390],{"class":161,"line":1221},[159,113391,590],{"emptyLinePlaceholder":589},[159,113393,113394,113397],{"class":161,"line":1230},[159,113395,113396],{"class":185},"    .elevator",[159,113398,1478],{"class":165},[159,113400,113401,113403,113405,113407],{"class":161,"line":1247},[159,113402,1551],{"class":1146},[159,113404,1486],{"class":165},[159,113406,107533],{"class":1146},[159,113408,1492],{"class":165},[159,113410,113411,113413,113415,113418,113420],{"class":161,"line":1265},[159,113412,1748],{"class":1146},[159,113414,1486],{"class":165},[159,113416,113417],{"class":1146},"280",[159,113419,1571],{"class":1142},[159,113421,1492],{"class":165},[159,113423,113424,113426,113428,113430,113432],{"class":161,"line":1277},[159,113425,107727],{"class":1146},[159,113427,1486],{"class":165},[159,113429,1739],{"class":1146},[159,113431,1571],{"class":1142},[159,113433,1492],{"class":165},[159,113435,113436,113438,113440,113442],{"class":161,"line":1283},[159,113437,107540],{"class":1146},[159,113439,1486],{"class":165},[159,113441,107545],{"class":1146},[159,113443,1492],{"class":165},[159,113445,113446,113448,113450,113452],{"class":161,"line":1294},[159,113447,8755],{"class":1146},[159,113449,1486],{"class":165},[159,113451,7868],{"class":1146},[159,113453,1492],{"class":165},[159,113455,113456,113458,113460,113462,113464,113466,113468],{"class":161,"line":1305},[159,113457,9018],{"class":1146},[159,113459,1486],{"class":165},[159,113461,4932],{"class":1146},[159,113463,1571],{"class":1142},[159,113465,7709],{"class":1146},[159,113467,9287],{"class":1146},[159,113469,1492],{"class":165},[159,113471,113472,113474,113476,113478,113480],{"class":161,"line":1311},[159,113473,1563],{"class":1146},[159,113475,1486],{"class":165},[159,113477,10814],{"class":1146},[159,113479,1571],{"class":1142},[159,113481,1492],{"class":165},[159,113483,113484],{"class":161,"line":1322},[159,113485,1508],{"class":165},[159,113487,113488],{"class":161,"line":1327},[159,113489,590],{"emptyLinePlaceholder":589},[159,113491,113492,113494,113496],{"class":161,"line":1336},[159,113493,113396],{"class":185},[159,113495,7885],{"class":169},[159,113497,1478],{"class":165},[159,113499,113500,113502,113504,113506],{"class":161,"line":1345},[159,113501,1818],{"class":1146},[159,113503,1486],{"class":165},[159,113505,7896],{"class":1146},[159,113507,1492],{"class":165},[159,113509,113510,113512,113514,113516,113518],{"class":161,"line":1350},[159,113511,1483],{"class":1146},[159,113513,1486],{"class":165},[159,113515,1964],{"class":1146},[159,113517,1571],{"class":1142},[159,113519,1492],{"class":165},[159,113521,113522,113524,113526,113528],{"class":161,"line":1764},[159,113523,11019],{"class":1146},[159,113525,1486],{"class":165},[159,113527,1529],{"class":1146},[159,113529,1492],{"class":165},[159,113531,113532,113534,113536,113538],{"class":161,"line":1769},[159,113533,4188],{"class":1146},[159,113535,1486],{"class":165},[159,113537,4193],{"class":1146},[159,113539,1492],{"class":165},[159,113541,113542,113544,113546,113548],{"class":161,"line":1777},[159,113543,4322],{"class":1146},[159,113545,1486],{"class":165},[159,113547,9113],{"class":1146},[159,113549,1492],{"class":165},[159,113551,113552],{"class":161,"line":1788},[159,113553,1508],{"class":165},[159,113555,113556],{"class":161,"line":1802},[159,113557,590],{"emptyLinePlaceholder":589},[159,113559,113560,113562,113564,113566],{"class":161,"line":1815},[159,113561,113396],{"class":185},[159,113563,7885],{"class":169},[159,113565,11074],{"class":185},[159,113567,1478],{"class":165},[159,113569,113570,113572,113574,113577],{"class":161,"line":1828},[159,113571,4322],{"class":1146},[159,113573,1486],{"class":165},[159,113575,113576],{"class":1146},"#1286ff",[159,113578,1492],{"class":165},[159,113580,113581],{"class":161,"line":1841},[159,113582,1508],{"class":165},[159,113584,113585,113587,113589],{"class":161,"line":1852},[159,113586,254],{"class":165},[159,113588,1468],{"class":169},[159,113590,173],{"class":165},[159,113592,113593,113595,113597],{"class":161,"line":1866},[159,113594,264],{"class":165},[159,113596,949],{"class":169},[159,113598,173],{"class":165},[159,113600,113601],{"class":161,"line":1879},[159,113602,590],{"emptyLinePlaceholder":589},[159,113604,113605,113607,113609],{"class":161,"line":1884},[159,113606,166],{"class":165},[159,113608,170],{"class":169},[159,113610,173],{"class":165},[159,113612,113613,113615,113617,113619,113621,113624],{"class":161,"line":1889},[159,113614,179],{"class":165},[159,113616,182],{"class":169},[159,113618,186],{"class":185},[159,113620,189],{"class":165},[159,113622,113623],{"class":192},"\"container\"",[159,113625,173],{"class":165},[159,113627,113628,113630,113632,113634,113636,113639],{"class":161,"line":1899},[159,113629,2056],{"class":165},[159,113631,182],{"class":169},[159,113633,186],{"class":185},[159,113635,189],{"class":165},[159,113637,113638],{"class":192},"\"header\"",[159,113640,173],{"class":165},[159,113642,113643,113645,113647,113649,113651,113654],{"class":161,"line":1912},[159,113644,2073],{"class":165},[159,113646,8085],{"class":169},[159,113648,8088],{"class":185},[159,113650,189],{"class":165},[159,113652,113653],{"class":192},"\"http:\u002F\u002Fpip.itcast.cn\"",[159,113655,173],{"class":165},[159,113657,113658,113660,113662,113664,113666,113669,113671,113673,113675],{"class":161,"line":1925},[159,113659,2146],{"class":165},[159,113661,23],{"class":169},[159,113663,2078],{"class":185},[159,113665,189],{"class":165},[159,113667,113668],{"class":192},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[159,113670,2086],{"class":185},[159,113672,189],{"class":165},[159,113674,552],{"class":192},[159,113676,6049],{"class":165},[159,113678,113679,113681,113683],{"class":161,"line":1956},[159,113680,2259],{"class":165},[159,113682,8085],{"class":169},[159,113684,173],{"class":165},[159,113686,113687,113689,113691],{"class":161,"line":1971},[159,113688,1084],{"class":165},[159,113690,182],{"class":169},[159,113692,173],{"class":165},[159,113694,113695,113697,113699,113701,113703,113706],{"class":161,"line":1976},[159,113696,2056],{"class":165},[159,113698,182],{"class":169},[159,113700,186],{"class":185},[159,113702,189],{"class":165},[159,113704,113705],{"class":192},"\"video\"",[159,113707,173],{"class":165},[159,113709,113710,113712,113714,113716,113718,113721,113724,113726,113728],{"class":161,"line":1981},[159,113711,2073],{"class":165},[159,113713,51705],{"class":169},[159,113715,2078],{"class":185},[159,113717,189],{"class":165},[159,113719,113720],{"class":192},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[159,113722,113723],{"class":185}," controls",[159,113725,2158],{"class":165},[159,113727,51705],{"class":169},[159,113729,173],{"class":165},[159,113731,113732,113734,113736],{"class":161,"line":1989},[159,113733,1084],{"class":165},[159,113735,182],{"class":169},[159,113737,173],{"class":165},[159,113739,113740,113742,113744,113746,113748,113751],{"class":161,"line":2001},[159,113741,2056],{"class":165},[159,113743,182],{"class":169},[159,113745,186],{"class":185},[159,113747,189],{"class":165},[159,113749,113750],{"class":192},"\"elevator\"",[159,113752,173],{"class":165},[159,113754,113755,113757,113759,113761,113763,113765,113768,113770,113772,113775,113777],{"class":161,"line":2006},[159,113756,2073],{"class":165},[159,113758,8085],{"class":169},[159,113760,8088],{"class":185},[159,113762,189],{"class":165},[159,113764,11286],{"class":192},[159,113766,113767],{"class":185}," data-ref",[159,113769,189],{"class":165},[159,113771,113705],{"class":192},[159,113773,113774],{"class":165},">视频介绍\u003C\u002F",[159,113776,8085],{"class":169},[159,113778,173],{"class":165},[159,113780,113781,113783,113785,113787,113789,113791,113793,113795,113798,113801,113803],{"class":161,"line":2015},[159,113782,2073],{"class":165},[159,113784,8085],{"class":169},[159,113786,8088],{"class":185},[159,113788,189],{"class":165},[159,113790,11286],{"class":192},[159,113792,113767],{"class":185},[159,113794,189],{"class":165},[159,113796,113797],{"class":192},"\"intro\"",[159,113799,113800],{"class":165},">课程简介\u003C\u002F",[159,113802,8085],{"class":169},[159,113804,173],{"class":165},[159,113806,113807,113809,113811,113813,113815,113817,113819,113821,113824,113827,113829],{"class":161,"line":2024},[159,113808,2073],{"class":165},[159,113810,8085],{"class":169},[159,113812,8088],{"class":185},[159,113814,189],{"class":165},[159,113816,11286],{"class":192},[159,113818,113767],{"class":185},[159,113820,189],{"class":165},[159,113822,113823],{"class":192},"\"outline\"",[159,113825,113826],{"class":165},">评论列表\u003C\u002F",[159,113828,8085],{"class":169},[159,113830,173],{"class":165},[159,113832,113833,113835,113837],{"class":161,"line":2029},[159,113834,1084],{"class":165},[159,113836,182],{"class":169},[159,113838,173],{"class":165},[159,113840,113841,113843,113845],{"class":161,"line":2038},[159,113842,254],{"class":165},[159,113844,182],{"class":169},[159,113846,173],{"class":165},[159,113848,113849,113851,113853,113855,113857,113860,113862,113864],{"class":161,"line":2053},[159,113850,179],{"class":165},[159,113852,228],{"class":169},[159,113854,2078],{"class":185},[159,113856,189],{"class":165},[159,113858,113859],{"class":192},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[159,113861,2158],{"class":165},[159,113863,228],{"class":169},[159,113865,173],{"class":165},[159,113867,113868,113870,113872],{"class":161,"line":2070},[159,113869,179],{"class":165},[159,113871,228],{"class":169},[159,113873,173],{"class":165},[159,113875,113876],{"class":161,"line":2095},[159,113877,113878],{"class":1135},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[159,113880,113881,113883,113885,113887,113889,113891,113893,113896],{"class":161,"line":2104},[159,113882,1143],{"class":1142},[159,113884,113355],{"class":1146},[159,113886,1150],{"class":1142},[159,113888,1153],{"class":165},[159,113890,1156],{"class":185},[159,113892,1159],{"class":165},[159,113894,113895],{"class":192},"'video'",[159,113897,1165],{"class":165},[159,113899,113900],{"class":161,"line":2120},[159,113901,113902],{"class":1135},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[159,113904,113905,113908,113910,113912,113914,113917,113919],{"class":161,"line":2134},[159,113906,113907],{"class":165},"    video.ontimeupdate ",[159,113909,189],{"class":1142},[159,113911,109655],{"class":165},[159,113913,112473],{"class":185},[159,113915,113916],{"class":165},"(() ",[159,113918,106022],{"class":1142},[159,113920,1478],{"class":165},[159,113922,113923],{"class":161,"line":2143},[159,113924,113925],{"class":1135},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[159,113927,113928],{"class":161,"line":2165},[159,113929,113930],{"class":1135},"      \u002F\u002F 控制台输出当前的时间\n",[159,113932,113933,113936],{"class":161,"line":2178},[159,113934,113935],{"class":1135},"      \u002F\u002F console.log(video.currentTime)",[159,113937,113938],{"class":1135},"  \u002F\u002F获得当前的视频时间\n",[159,113940,113941],{"class":161,"line":2191},[159,113942,113943],{"class":1135},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[159,113945,113946,113948,113950,113952,113955],{"class":161,"line":2204},[159,113947,21817],{"class":165},[159,113949,18749],{"class":185},[159,113951,1159],{"class":165},[159,113953,113954],{"class":192},"'currentTime'",[159,113956,113957],{"class":165},", video.currentTime)\n",[159,113959,113960,113962,113964],{"class":161,"line":2217},[159,113961,1314],{"class":165},[159,113963,1317],{"class":1146},[159,113965,1165],{"class":165},[159,113967,113968],{"class":161,"line":2230},[159,113969,113970],{"class":1135},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[159,113972,113973,113976,113979,113981,113984,113986],{"class":161,"line":2243},[159,113974,113975],{"class":165},"    video.",[159,113977,113978],{"class":185},"onloadeddata",[159,113980,1150],{"class":1142},[159,113982,113983],{"class":165}," () ",[159,113985,106022],{"class":1142},[159,113987,1478],{"class":165},[159,113989,113990],{"class":161,"line":2256},[159,113991,6958],{"class":1135},[159,113993,113994],{"class":161,"line":2266},[159,113995,113996],{"class":1135},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[159,113998,113999,114002,114004,114007,114009,114011,114013,114015,114017],{"class":161,"line":2275},[159,114000,114001],{"class":165},"      video.currentTime ",[159,114003,189],{"class":1142},[159,114005,114006],{"class":165}," localStorage.",[159,114008,18780],{"class":185},[159,114010,1159],{"class":165},[159,114012,113954],{"class":192},[159,114014,2710],{"class":165},[159,114016,18451],{"class":1142},[159,114018,3785],{"class":1146},[159,114020,114021],{"class":161,"line":2284},[159,114022,1508],{"class":165},[159,114024,114025,114027,114029],{"class":161,"line":2293},[159,114026,254],{"class":165},[159,114028,228],{"class":169},[159,114030,173],{"class":165},[159,114032,114033,114035,114037],{"class":161,"line":2306},[159,114034,264],{"class":165},[159,114036,170],{"class":169},[159,114038,173],{"class":165},[159,114040,114041],{"class":161,"line":2330},[159,114042,590],{"emptyLinePlaceholder":589},[159,114044,114045,114047,114049],{"class":161,"line":2350},[159,114046,264],{"class":165},[159,114048,522],{"class":169},[159,114050,173],{"class":165},[1468,114052,114053],{},"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":25,"searchDepth":176,"depth":176,"links":114055},[114056,114061,114065,114066,114067,114072,114077,114078,114079,114080,114087,114092,114093,114103,114107,114108,114112],{"id":97991,"depth":176,"text":97992,"children":114057},[114058,114059,114060],{"id":97995,"depth":203,"text":97996},{"id":98020,"depth":203,"text":98021},{"id":98032,"depth":203,"text":98033},{"id":98044,"depth":176,"text":98045,"children":114062},[114063,114064],{"id":98048,"depth":203,"text":98049},{"id":98063,"depth":203,"text":98064},{"id":98115,"depth":176,"text":98116},{"id":98159,"depth":176,"text":98160},{"id":98176,"depth":176,"text":98177,"children":114068},[114069,114070,114071],{"id":98180,"depth":203,"text":98181},{"id":98193,"depth":203,"text":98194},{"id":98298,"depth":203,"text":98299},{"id":98587,"depth":176,"text":98588,"children":114073},[114074,114075,114076],{"id":98591,"depth":203,"text":98592},{"id":99034,"depth":203,"text":99035},{"id":99445,"depth":203,"text":99446},{"id":99508,"depth":176,"text":99509},{"id":99587,"depth":176,"text":99588},{"id":99680,"depth":176,"text":99681},{"id":101525,"depth":176,"text":101526,"children":114081},[114082,114083,114084,114085,114086],{"id":101529,"depth":203,"text":101530},{"id":101541,"depth":203,"text":101542},{"id":101760,"depth":203,"text":101761},{"id":101778,"depth":203,"text":101779},{"id":101838,"depth":203,"text":101839},{"id":106106,"depth":176,"text":106107,"children":114088},[114089,114090,114091],{"id":106110,"depth":203,"text":106111},{"id":106128,"depth":203,"text":106129},{"id":106154,"depth":203,"text":106155},{"id":106163,"depth":176,"text":106164},{"id":106185,"depth":176,"text":106186,"children":114094},[114095,114096,114097,114098,114099,114100,114101,114102],{"id":106189,"depth":203,"text":106190},{"id":106450,"depth":203,"text":106451},{"id":106636,"depth":203,"text":106637},{"id":107003,"depth":203,"text":107004},{"id":107119,"depth":203,"text":107120},{"id":107155,"depth":203,"text":107156},{"id":107202,"depth":203,"text":107203},{"id":107236,"depth":203,"text":107237},{"id":108599,"depth":176,"text":108600,"children":114104},[114105,114106],{"id":108603,"depth":203,"text":108604},{"id":108640,"depth":203,"text":108641},{"id":109995,"depth":176,"text":109996},{"id":110366,"depth":176,"text":110367,"children":114109},[114110,114111],{"id":110370,"depth":203,"text":110371},{"id":110404,"depth":203,"text":110405},{"id":111133,"depth":176,"text":111134,"children":114113},[114114,114115,114116,114117],{"id":111137,"depth":203,"text":111138},{"id":112095,"depth":203,"text":112096},{"id":113037,"depth":203,"text":113038},{"id":113111,"depth":203,"text":113112},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":97980,"description":23809},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":114124,"title":114125,"body":114126,"description":114137,"extension":23810,"meta":114138,"navigation":589,"path":114140,"seo":114141,"stem":114142,"__hash__":114143},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":114127,"toc":114135},[114128],[14,114129,114130,114131],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[8085,114132,114133],{"href":114133,"rel":114134},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[15923],{"title":25,"searchDepth":176,"depth":176,"links":114136},[],"三件套第三套学习",{"category":114139},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":114125,"description":114137},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":114145,"title":114146,"body":114147,"description":23809,"extension":23810,"meta":114252,"navigation":589,"path":114253,"seo":114254,"stem":114255,"__hash__":114256},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":114148,"toc":114247},[114149,114156,114159,114162,114165,114169,114178,114181,114184,114188,114197,114200,114204,114207,114227,114230,114244],[14,114150,114151],{},[8085,114152,114155],{"href":114153,"rel":114154},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[15923],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,114157,114146],{"id":114158},"_1安装",[14,114160,114161],{},"numpy是科学计算基础库,底层是C语言",[14,114163,114164],{},"三种方式：",[37,114166,114168],{"id":114167},"_11-通过pip安装","1.1 通过pip安装",[151,114170,114172],{"className":53900,"code":114171,"language":53902,"meta":25,"style":25},"pip install numpy\n",[49,114173,114174],{"__ignoreMap":25},[159,114175,114176],{"class":161,"line":162},[159,114177,114171],{"class":165},[14,114179,114180],{},"首选方式，自动处理依赖项",[14,114182,114183],{},"在提示系统命令符中使用cmd",[37,114185,114187],{"id":114186},"_12-通过anaconda安装","1.2 通过Anaconda安装",[151,114189,114191],{"className":53900,"code":114190,"language":53902,"meta":25,"style":25},"conda install numpy\n",[49,114192,114193],{"__ignoreMap":25},[159,114194,114195],{"class":161,"line":162},[159,114196,114190],{"class":165},[14,114198,114199],{},"自动解决环境依赖",[37,114201,114203],{"id":114202},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,114205,114206],{},"对于Debian\u002FUbuntu",[151,114208,114210],{"className":53900,"code":114209,"language":53902,"meta":25,"style":25},"sudo apt-get install python3-numpy\n",[49,114211,114212],{"__ignoreMap":25},[159,114213,114214,114217,114219,114222,114224],{"class":161,"line":162},[159,114215,114216],{"class":165},"sudo apt",[159,114218,24376],{"class":1142},[159,114220,114221],{"class":165},"get install python3",[159,114223,24376],{"class":1142},[159,114225,114226],{"class":165},"numpy\n",[14,114228,114229],{},"对于Fedora:",[151,114231,114233],{"className":53900,"code":114232,"language":53902,"meta":25,"style":25},"sudo dnf install python3-numpy\n",[49,114234,114235],{"__ignoreMap":25},[159,114236,114237,114240,114242],{"class":161,"line":162},[159,114238,114239],{"class":165},"sudo dnf install python3",[159,114241,24376],{"class":1142},[159,114243,114226],{"class":165},[1468,114245,114246],{},"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":25,"searchDepth":176,"depth":176,"links":114248},[114249,114250,114251],{"id":114167,"depth":176,"text":114168},{"id":114186,"depth":176,"text":114187},{"id":114202,"depth":176,"text":114203},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":114146,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":114258,"title":114259,"body":114260,"description":23809,"extension":23810,"meta":114373,"navigation":589,"path":114374,"seo":114375,"stem":114376,"__hash__":114377},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":114261,"toc":114371},[114262,114265,114268,114271,114274,114277,114280,114283,114286,114289,114365,114368],[10,114263,114259],{"id":114264},"_10算数函数",[14,114266,114267],{},"加减乘除运算跟python基础语法没区别",[14,114269,114270],{},"除了python那种方法外还可以使用函数",[14,114272,114273],{},"加：np.add(a,b)",[14,114275,114276],{},"减：np.subtract(a,b)",[14,114278,114279],{},"乘：np.multiply(a,b)",[14,114281,114282],{},"除：np.divide(a,b) == a\u002Fb",[14,114284,114285],{},"取余：np.mod(a,b) == a%b",[14,114287,114288],{},"必须会的用法：",[151,114290,114292],{"className":53900,"code":114291,"language":53902,"meta":25,"style":25},"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",[49,114293,114294,114316,114337,114347,114360],{"__ignoreMap":25},[159,114295,114296,114298,114300,114303,114305,114308,114310,114312,114314],{"class":161,"line":162},[159,114297,8085],{"class":165},[159,114299,189],{"class":1142},[159,114301,114302],{"class":165},"np.arange(",[159,114304,24273],{"class":1146},[159,114306,114307],{"class":165},").reshape(",[159,114309,23949],{"class":1146},[159,114311,24233],{"class":165},[159,114313,23949],{"class":1146},[159,114315,1165],{"class":165},[159,114317,114318,114320,114322,114325,114327,114329,114331,114333,114335],{"class":161,"line":176},[159,114319,24127],{"class":165},[159,114321,189],{"class":1142},[159,114323,114324],{"class":165},"np.array([",[159,114326,1964],{"class":1146},[159,114328,24233],{"class":165},[159,114330,1964],{"class":1146},[159,114332,24233],{"class":165},[159,114334,1964],{"class":1146},[159,114336,28275],{"class":165},[159,114338,114339,114342,114344],{"class":161,"line":203},[159,114340,114341],{"class":165},"result",[159,114343,189],{"class":1142},[159,114345,114346],{"class":165},"np.empty_like(a)\n",[159,114348,114349,114352,114355,114357],{"class":161,"line":223},[159,114350,114351],{"class":165},"np.add(a,b,",[159,114353,114354],{"class":8765},"out",[159,114356,189],{"class":1142},[159,114358,114359],{"class":165},"result)\n",[159,114361,114362],{"class":161,"line":233},[159,114363,114364],{"class":165},"result\n",[14,114366,114367],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1468,114369,114370],{},"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":25,"searchDepth":176,"depth":176,"links":114372},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":114259,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":114379,"title":114380,"body":114381,"description":23809,"extension":23810,"meta":115143,"navigation":589,"path":115144,"seo":115145,"stem":115146,"__hash__":115147},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":114382,"toc":115130},[114383,114386,114389,114392,114396,114435,114439,114483,114543,114547,114550,114589,114592,114637,114641,114677,114681,114750,114754,114818,114822,114825,114828,114831,114834,114870,114874,114914,114918,114990,114993,114997,115060,115064,115127],[10,114384,114380],{"id":114385},"_11统计函数",[14,114387,114388],{},"sum max min mean",[14,114390,114391],{},"这些有axis参数，可以指定方向",[37,114393,114395],{"id":114394},"_111-sum求和函数","11.1 sum()求和函数",[151,114397,114399],{"className":53900,"code":114398,"language":53902,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[49,114400,114401,114406,114427],{"__ignoreMap":25},[159,114402,114403],{"class":161,"line":162},[159,114404,114405],{"class":1135},"#创建一维数组\n",[159,114407,114408,114410,114412,114415,114417,114419,114421,114423,114425],{"class":161,"line":176},[159,114409,8085],{"class":165},[159,114411,189],{"class":1142},[159,114413,114414],{"class":165},"np.random.randint(",[159,114416,4932],{"class":1146},[159,114418,24233],{"class":165},[159,114420,1596],{"class":1146},[159,114422,24233],{"class":165},[159,114424,1739],{"class":1146},[159,114426,1165],{"class":165},[159,114428,114429,114432],{"class":161,"line":203},[159,114430,114431],{"class":165},"np.sum(a)",[159,114433,114434],{"class":1135},"#求和\n",[37,114436,114438],{"id":114437},"_112-max求最大值函数","11.2 max()求最大值函数",[151,114440,114442],{"className":53900,"code":114441,"language":53902,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[49,114443,114444,114448,114468,114473,114478],{"__ignoreMap":25},[159,114445,114446],{"class":161,"line":162},[159,114447,114405],{"class":1135},[159,114449,114450,114452,114454,114456,114458,114460,114462,114464,114466],{"class":161,"line":176},[159,114451,8085],{"class":165},[159,114453,189],{"class":1142},[159,114455,114414],{"class":165},[159,114457,4932],{"class":1146},[159,114459,24233],{"class":165},[159,114461,1596],{"class":1146},[159,114463,24233],{"class":165},[159,114465,1739],{"class":1146},[159,114467,1165],{"class":165},[159,114469,114470],{"class":161,"line":203},[159,114471,114472],{"class":165},"np.max(a)\n",[159,114474,114475],{"class":161,"line":223},[159,114476,114477],{"class":1135},"#最大索引(求最大元素的索引)arg\n",[159,114479,114480],{"class":161,"line":233},[159,114481,114482],{"class":165},"np.argmax(a)\n",[151,114484,114486],{"className":53900,"code":114485,"language":53902,"meta":25,"style":25},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[49,114487,114488,114509,114529,114533],{"__ignoreMap":25},[159,114489,114490,114492,114494,114497,114499,114501,114503,114505,114507],{"class":161,"line":162},[159,114491,34493],{"class":165},[159,114493,189],{"class":1142},[159,114495,114496],{"class":165}," np.array([",[159,114498,4932],{"class":1146},[159,114500,1939],{"class":165},[159,114502,1753],{"class":1146},[159,114504,1939],{"class":165},[159,114506,23949],{"class":1146},[159,114508,28275],{"class":165},[159,114510,114511,114513,114515,114517,114519,114521,114523,114525,114527],{"class":161,"line":176},[159,114512,34519],{"class":165},[159,114514,189],{"class":1142},[159,114516,114496],{"class":165},[159,114518,23949],{"class":1146},[159,114520,1939],{"class":165},[159,114522,11034],{"class":1146},[159,114524,1939],{"class":165},[159,114526,8866],{"class":1146},[159,114528,28275],{"class":165},[159,114530,114531],{"class":161,"line":203},[159,114532,590],{"emptyLinePlaceholder":589},[159,114534,114535,114537,114540],{"class":161,"line":223},[159,114536,53937],{"class":1146},[159,114538,114539],{"class":165},"(np.maximum(a, b))   ",[159,114541,114542],{"class":1135},"# [3 5 4]，每个位置上取较大值\n",[37,114544,114546],{"id":114545},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,114548,114549],{},"①一维数组：",[151,114551,114553],{"className":53900,"code":114552,"language":53902,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[49,114554,114555,114559,114579,114584],{"__ignoreMap":25},[159,114556,114557],{"class":161,"line":162},[159,114558,114405],{"class":1135},[159,114560,114561,114563,114565,114567,114569,114571,114573,114575,114577],{"class":161,"line":176},[159,114562,8085],{"class":165},[159,114564,189],{"class":1142},[159,114566,114414],{"class":165},[159,114568,4932],{"class":1146},[159,114570,24233],{"class":165},[159,114572,1596],{"class":1146},[159,114574,24233],{"class":165},[159,114576,1739],{"class":1146},[159,114578,1165],{"class":165},[159,114580,114581],{"class":161,"line":203},[159,114582,114583],{"class":1135},"#求平均值\n",[159,114585,114586],{"class":161,"line":223},[159,114587,114588],{"class":165},"np.mean(a)\n",[14,114590,114591],{},"②二维数组",[151,114593,114595],{"className":53900,"code":114594,"language":53902,"meta":25,"style":25},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[49,114596,114597,114602,114627,114632],{"__ignoreMap":25},[159,114598,114599],{"class":161,"line":162},[159,114600,114601],{"class":1135},"#二维数组\n",[159,114603,114604,114607,114609,114611,114613,114615,114617,114619,114621,114623,114625],{"class":161,"line":176},[159,114605,114606],{"class":165},"aa",[159,114608,189],{"class":1142},[159,114610,114302],{"class":165},[159,114612,4932],{"class":1146},[159,114614,24233],{"class":165},[159,114616,19665],{"class":1146},[159,114618,114307],{"class":165},[159,114620,23949],{"class":1146},[159,114622,24233],{"class":165},[159,114624,8866],{"class":1146},[159,114626,1165],{"class":165},[159,114628,114629],{"class":161,"line":203},[159,114630,114631],{"class":1135},"#对数组中的所有数求平均\n",[159,114633,114634],{"class":161,"line":223},[159,114635,114636],{"class":165},"np.mean(aa)\n",[37,114638,114640],{"id":114639},"_114-median求中位数函数","11.4 median()求中位数函数",[151,114642,114644],{"className":53900,"code":114643,"language":53902,"meta":25,"style":25},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[49,114645,114646,114651,114667,114672],{"__ignoreMap":25},[159,114647,114648],{"class":161,"line":162},[159,114649,114650],{"class":1135},"#求中位数\n",[159,114652,114653,114655,114657,114659,114661,114663,114665],{"class":161,"line":176},[159,114654,24127],{"class":165},[159,114656,189],{"class":1142},[159,114658,114302],{"class":165},[159,114660,4932],{"class":1146},[159,114662,24233],{"class":165},[159,114664,1964],{"class":1146},[159,114666,1165],{"class":165},[159,114668,114669],{"class":161,"line":203},[159,114670,114671],{"class":165},"np.median(b)\n",[159,114673,114674],{"class":161,"line":223},[159,114675,114676],{"class":1135},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[37,114678,114680],{"id":114679},"_115-power求幂运算函数","11.5 power()求幂运算函数",[151,114682,114684],{"className":53900,"code":114683,"language":53902,"meta":25,"style":25},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[49,114685,114686,114702,114707,114712,114721,114726,114735],{"__ignoreMap":25},[159,114687,114688,114690,114692,114694,114696,114698,114700],{"class":161,"line":162},[159,114689,24127],{"class":165},[159,114691,189],{"class":1142},[159,114693,114302],{"class":165},[159,114695,4932],{"class":1146},[159,114697,24233],{"class":165},[159,114699,1964],{"class":1146},[159,114701,1165],{"class":165},[159,114703,114704],{"class":161,"line":176},[159,114705,114706],{"class":1135},"#幂运算\n",[159,114708,114709],{"class":161,"line":203},[159,114710,114711],{"class":1135},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[159,114713,114714,114717,114719],{"class":161,"line":223},[159,114715,114716],{"class":165},"np.power(b,",[159,114718,11034],{"class":1146},[159,114720,1165],{"class":165},[159,114722,114723],{"class":161,"line":233},[159,114724,114725],{"class":1135},"#或者以下代码，将数据存储起来\n",[159,114727,114728,114730,114732],{"class":161,"line":239},[159,114729,24672],{"class":165},[159,114731,189],{"class":1142},[159,114733,114734],{"class":165},"np.empty_like(b)\n",[159,114736,114737,114739,114741,114743,114745,114747],{"class":161,"line":245},[159,114738,114716],{"class":165},[159,114740,11034],{"class":1146},[159,114742,24233],{"class":165},[159,114744,114354],{"class":8765},[159,114746,189],{"class":1142},[159,114748,114749],{"class":165},"y)\n",[37,114751,114753],{"id":114752},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[151,114755,114757],{"className":53900,"code":114756,"language":53902,"meta":25,"style":25},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[49,114758,114759,114775,114780,114785,114789,114807],{"__ignoreMap":25},[159,114760,114761,114763,114765,114767,114769,114771,114773],{"class":161,"line":162},[159,114762,24127],{"class":165},[159,114764,189],{"class":1142},[159,114766,114302],{"class":165},[159,114768,4932],{"class":1146},[159,114770,24233],{"class":165},[159,114772,1964],{"class":1146},[159,114774,1165],{"class":165},[159,114776,114777],{"class":161,"line":176},[159,114778,114779],{"class":1135},"#开方\n",[159,114781,114782],{"class":161,"line":203},[159,114783,114784],{"class":165},"np.sqrt(b)\n",[159,114786,114787],{"class":161,"line":223},[159,114788,114725],{"class":1135},[159,114790,114791,114793,114795,114798,114801,114803,114805],{"class":161,"line":233},[159,114792,24672],{"class":165},[159,114794,189],{"class":1142},[159,114796,114797],{"class":165},"np.empty_like(b,",[159,114799,114800],{"class":8765},"dtype",[159,114802,189],{"class":1142},[159,114804,23920],{"class":1146},[159,114806,1165],{"class":165},[159,114808,114809,114812,114814,114816],{"class":161,"line":239},[159,114810,114811],{"class":165},"np.sqrt(b,",[159,114813,114354],{"class":8765},[159,114815,189],{"class":1142},[159,114817,114749],{"class":165},[37,114819,114821],{"id":114820},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,114823,114824],{},"对数组中的元素累计求和，可指定轴",[14,114826,114827],{},"#累计求和的意思是：",[14,114829,114830],{},"a = np.array([1, 2, 3, 4])",[14,114832,114833],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[151,114835,114837],{"className":53900,"code":114836,"language":53902,"meta":25,"style":25},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[49,114838,114839,114855,114860,114865],{"__ignoreMap":25},[159,114840,114841,114843,114845,114847,114849,114851,114853],{"class":161,"line":162},[159,114842,24127],{"class":165},[159,114844,189],{"class":1142},[159,114846,114302],{"class":165},[159,114848,4932],{"class":1146},[159,114850,24233],{"class":165},[159,114852,1964],{"class":1146},[159,114854,1165],{"class":165},[159,114856,114857],{"class":161,"line":176},[159,114858,114859],{"class":165},"np.cumsum(b)\n",[159,114861,114862],{"class":161,"line":203},[159,114863,114864],{"class":1135},"#结果：\n",[159,114866,114867],{"class":161,"line":223},[159,114868,114869],{"class":1135},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[37,114871,114873],{"id":114872},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[151,114875,114877],{"className":53900,"code":114876,"language":53902,"meta":25,"style":25},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[49,114878,114879,114895,114900,114905,114909],{"__ignoreMap":25},[159,114880,114881,114883,114885,114887,114889,114891,114893],{"class":161,"line":162},[159,114882,24127],{"class":165},[159,114884,189],{"class":1142},[159,114886,114302],{"class":165},[159,114888,4932],{"class":1146},[159,114890,24233],{"class":165},[159,114892,1964],{"class":1146},[159,114894,1165],{"class":165},[159,114896,114897],{"class":161,"line":176},[159,114898,114899],{"class":1135},"#对数组中的元素累计求积，可指定轴\n",[159,114901,114902],{"class":161,"line":203},[159,114903,114904],{"class":165},"np.cumprod(b)\n",[159,114906,114907],{"class":161,"line":223},[159,114908,114864],{"class":1135},[159,114910,114911],{"class":161,"line":233},[159,114912,114913],{"class":1135},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[37,114915,114917],{"id":114916},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[151,114919,114921],{"className":53900,"code":114920,"language":53902,"meta":25,"style":25},"#删除数组中的重复数据，并对数据进行排序\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",[49,114922,114923,114928,114976,114981,114985],{"__ignoreMap":25},[159,114924,114925],{"class":161,"line":162},[159,114926,114927],{"class":1135},"#删除数组中的重复数据，并对数据进行排序\n",[159,114929,114930,114932,114934,114936,114938,114940,114942,114944,114946,114948,114950,114952,114954,114956,114958,114960,114962,114964,114966,114968,114970,114972,114974],{"class":161,"line":176},[159,114931,8085],{"class":165},[159,114933,189],{"class":1142},[159,114935,114324],{"class":165},[159,114937,4932],{"class":1146},[159,114939,24233],{"class":165},[159,114941,11034],{"class":1146},[159,114943,24233],{"class":165},[159,114945,23949],{"class":1146},[159,114947,24233],{"class":165},[159,114949,7925],{"class":1146},[159,114951,24233],{"class":165},[159,114953,23949],{"class":1146},[159,114955,24233],{"class":165},[159,114957,1964],{"class":1146},[159,114959,24233],{"class":165},[159,114961,24064],{"class":1146},[159,114963,24233],{"class":165},[159,114965,1489],{"class":1146},[159,114967,24233],{"class":165},[159,114969,24606],{"class":1146},[159,114971,24233],{"class":165},[159,114973,8866],{"class":1146},[159,114975,28275],{"class":165},[159,114977,114978],{"class":161,"line":203},[159,114979,114980],{"class":165},"np.unique(a)\n",[159,114982,114983],{"class":161,"line":223},[159,114984,114864],{"class":1135},[159,114986,114987],{"class":161,"line":233},[159,114988,114989],{"class":1135},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,114991,114992],{},"升序形式排序",[37,114994,114996],{"id":114995},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[151,114998,115000],{"className":53900,"code":114999,"language":53902,"meta":25,"style":25},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[49,115001,115002,115050,115055],{"__ignoreMap":25},[159,115003,115004,115006,115008,115010,115012,115014,115016,115018,115020,115022,115024,115026,115028,115030,115032,115034,115036,115038,115040,115042,115044,115046,115048],{"class":161,"line":162},[159,115005,8085],{"class":165},[159,115007,189],{"class":1142},[159,115009,114324],{"class":165},[159,115011,4932],{"class":1146},[159,115013,24233],{"class":165},[159,115015,11034],{"class":1146},[159,115017,24233],{"class":165},[159,115019,23949],{"class":1146},[159,115021,24233],{"class":165},[159,115023,7925],{"class":1146},[159,115025,24233],{"class":165},[159,115027,23949],{"class":1146},[159,115029,24233],{"class":165},[159,115031,1964],{"class":1146},[159,115033,24233],{"class":165},[159,115035,24064],{"class":1146},[159,115037,24233],{"class":165},[159,115039,1489],{"class":1146},[159,115041,24233],{"class":165},[159,115043,24606],{"class":1146},[159,115045,24233],{"class":165},[159,115047,8866],{"class":1146},[159,115049,28275],{"class":165},[159,115051,115052],{"class":161,"line":176},[159,115053,115054],{"class":1135},"#返回数组中非零元素的索引\n",[159,115056,115057],{"class":161,"line":203},[159,115058,115059],{"class":165},"np.nonzero(a)\n",[37,115061,115063],{"id":115062},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[151,115065,115067],{"className":53900,"code":115066,"language":53902,"meta":25,"style":25},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[49,115068,115069,115117,115122],{"__ignoreMap":25},[159,115070,115071,115073,115075,115077,115079,115081,115083,115085,115087,115089,115091,115093,115095,115097,115099,115101,115103,115105,115107,115109,115111,115113,115115],{"class":161,"line":162},[159,115072,8085],{"class":165},[159,115074,189],{"class":1142},[159,115076,114324],{"class":165},[159,115078,4932],{"class":1146},[159,115080,24233],{"class":165},[159,115082,11034],{"class":1146},[159,115084,24233],{"class":165},[159,115086,23949],{"class":1146},[159,115088,24233],{"class":165},[159,115090,7925],{"class":1146},[159,115092,24233],{"class":165},[159,115094,23949],{"class":1146},[159,115096,24233],{"class":165},[159,115098,1964],{"class":1146},[159,115100,24233],{"class":165},[159,115102,24064],{"class":1146},[159,115104,24233],{"class":165},[159,115106,1489],{"class":1146},[159,115108,24233],{"class":165},[159,115110,24606],{"class":1146},[159,115112,24233],{"class":165},[159,115114,8866],{"class":1146},[159,115116,28275],{"class":165},[159,115118,115119],{"class":161,"line":176},[159,115120,115121],{"class":1135},"#计算一组数中最大值与最小值的差，可指定轴\n",[159,115123,115124],{"class":161,"line":203},[159,115125,115126],{"class":165},"np.ptp(a)\n",[1468,115128,115129],{},"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":25,"searchDepth":176,"depth":176,"links":115131},[115132,115133,115134,115135,115136,115137,115138,115139,115140,115141,115142],{"id":114394,"depth":176,"text":114395},{"id":114437,"depth":176,"text":114438},{"id":114545,"depth":176,"text":114546},{"id":114639,"depth":176,"text":114640},{"id":114679,"depth":176,"text":114680},{"id":114752,"depth":176,"text":114753},{"id":114820,"depth":176,"text":114821},{"id":114872,"depth":176,"text":114873},{"id":114916,"depth":176,"text":114917},{"id":114995,"depth":176,"text":114996},{"id":115062,"depth":176,"text":115063},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":114380,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":115149,"title":115150,"body":115151,"description":23809,"extension":23810,"meta":115806,"navigation":589,"path":115807,"seo":115808,"stem":115809,"__hash__":115810},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":115152,"toc":115794},[115153,115156,115160,115163,115379,115383,115386,115595,115599,115665,115670,115674,115677,115680,115718,115722,115725,115730,115734,115737,115740,115745,115749,115752,115756,115759,115762,115767,115771,115774,115777,115782,115786,115791],[10,115154,115150],{"id":115155},"_12其他常用函数",[37,115157,115159],{"id":115158},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,115161,115162],{},"将数组的数据按照行列复制扩展",[151,115164,115166],{"className":53900,"code":115165,"language":53902,"meta":25,"style":25},"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",[49,115167,115168,115184,115193,115197,115202,115207,115220,115224,115229,115234,115239,115243,115248,115272,115284,115288,115292,115297,115302,115307,115312,115316,115329,115333,115337,115342,115347,115352,115357,115362,115366,115370,115375],{"__ignoreMap":25},[159,115169,115170,115172,115174,115176,115178,115180,115182],{"class":161,"line":162},[159,115171,8085],{"class":165},[159,115173,189],{"class":1142},[159,115175,114302],{"class":165},[159,115177,4932],{"class":1146},[159,115179,24233],{"class":165},[159,115181,1753],{"class":1146},[159,115183,1165],{"class":165},[159,115185,115186,115189,115191],{"class":161,"line":176},[159,115187,115188],{"class":165},"np.tile(a,",[159,115190,11034],{"class":1146},[159,115192,1165],{"class":165},[159,115194,115195],{"class":161,"line":203},[159,115196,114864],{"class":1135},[159,115198,115199],{"class":161,"line":223},[159,115200,115201],{"class":1135},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[159,115203,115204],{"class":161,"line":233},[159,115205,115206],{"class":1135},"#行复制两次，列复制三次\n",[159,115208,115209,115212,115214,115216,115218],{"class":161,"line":239},[159,115210,115211],{"class":165},"np.tile(a,(",[159,115213,11034],{"class":1146},[159,115215,24233],{"class":165},[159,115217,23949],{"class":1146},[159,115219,18787],{"class":165},[159,115221,115222],{"class":161,"line":245},[159,115223,114864],{"class":1135},[159,115225,115226],{"class":161,"line":251},[159,115227,115228],{"class":192},"'''\n",[159,115230,115231],{"class":161,"line":261},[159,115232,115233],{"class":192},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[159,115235,115236],{"class":161,"line":603},[159,115237,115238],{"class":192},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[159,115240,115241],{"class":161,"line":621},[159,115242,115228],{"class":192},[159,115244,115245],{"class":161,"line":634},[159,115246,115247],{"class":1135},"#创建二维数组\n",[159,115249,115250,115252,115254,115256,115258,115260,115262,115264,115266,115268,115270],{"class":161,"line":640},[159,115251,114606],{"class":165},[159,115253,189],{"class":1142},[159,115255,114302],{"class":165},[159,115257,4932],{"class":1146},[159,115259,24233],{"class":165},[159,115261,19665],{"class":1146},[159,115263,114307],{"class":165},[159,115265,8866],{"class":1146},[159,115267,24233],{"class":165},[159,115269,23949],{"class":1146},[159,115271,1165],{"class":165},[159,115273,115274,115277,115279,115281],{"class":161,"line":1075},[159,115275,115276],{"class":165},"np.tile(aa,",[159,115278,11034],{"class":1146},[159,115280,18387],{"class":165},[159,115282,115283],{"class":1135},"#一个数的时候就是行\n",[159,115285,115286],{"class":161,"line":1081},[159,115287,114864],{"class":1135},[159,115289,115290],{"class":161,"line":1091},[159,115291,115228],{"class":192},[159,115293,115294],{"class":161,"line":1100},[159,115295,115296],{"class":192},"array([[ 1,  2,  3,  1,  2,  3],\n",[159,115298,115299],{"class":161,"line":1123},[159,115300,115301],{"class":192},"       [ 4,  5,  6,  4,  5,  6],\n",[159,115303,115304],{"class":161,"line":1132},[159,115305,115306],{"class":192},"       [ 7,  8,  9,  7,  8,  9],\n",[159,115308,115309],{"class":161,"line":1139},[159,115310,115311],{"class":192},"       [10, 11, 12, 10, 11, 12]])\n",[159,115313,115314],{"class":161,"line":1168},[159,115315,115228],{"class":192},[159,115317,115318,115321,115323,115325,115327],{"class":161,"line":1174},[159,115319,115320],{"class":165},"np.tile(aa,(",[159,115322,11034],{"class":1146},[159,115324,24233],{"class":165},[159,115326,23949],{"class":1146},[159,115328,18787],{"class":165},[159,115330,115331],{"class":161,"line":1180},[159,115332,114864],{"class":1135},[159,115334,115335],{"class":161,"line":1194},[159,115336,115228],{"class":192},[159,115338,115339],{"class":161,"line":1200},[159,115340,115341],{"class":192},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[159,115343,115344],{"class":161,"line":1221},[159,115345,115346],{"class":192},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[159,115348,115349],{"class":161,"line":1230},[159,115350,115351],{"class":192},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[159,115353,115354],{"class":161,"line":1247},[159,115355,115356],{"class":192},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[159,115358,115359],{"class":161,"line":1265},[159,115360,115361],{"class":192},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[159,115363,115364],{"class":161,"line":1277},[159,115365,115346],{"class":192},[159,115367,115368],{"class":161,"line":1283},[159,115369,115351],{"class":192},[159,115371,115372],{"class":161,"line":1294},[159,115373,115374],{"class":192},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[159,115376,115377],{"class":161,"line":1305},[159,115378,115228],{"class":192},[37,115380,115382],{"id":115381},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,115384,115385],{},"repeat()将数组中的每个元素重复若干次",[151,115387,115389],{"className":53900,"code":115388,"language":53902,"meta":25,"style":25},"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",[49,115390,115391,115407,115416,115420,115425,115449,115454,115463,115467,115472,115476,115481,115497,115501,115505,115510,115515,115520,115524,115529,115533,115538,115543,115547,115563,115567,115571,115576,115581,115586,115591],{"__ignoreMap":25},[159,115392,115393,115395,115397,115399,115401,115403,115405],{"class":161,"line":162},[159,115394,8085],{"class":165},[159,115396,189],{"class":1142},[159,115398,114302],{"class":165},[159,115400,4932],{"class":1146},[159,115402,24233],{"class":165},[159,115404,1753],{"class":1146},[159,115406,1165],{"class":165},[159,115408,115409,115412,115414],{"class":161,"line":176},[159,115410,115411],{"class":165},"np.repeat(a,",[159,115413,23949],{"class":1146},[159,115415,1165],{"class":165},[159,115417,115418],{"class":161,"line":203},[159,115419,114864],{"class":1135},[159,115421,115422],{"class":161,"line":223},[159,115423,115424],{"class":1135},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[159,115426,115427,115429,115431,115433,115435,115437,115439,115441,115443,115445,115447],{"class":161,"line":233},[159,115428,114606],{"class":165},[159,115430,189],{"class":1142},[159,115432,114302],{"class":165},[159,115434,4932],{"class":1146},[159,115436,24233],{"class":165},[159,115438,19665],{"class":1146},[159,115440,114307],{"class":165},[159,115442,8866],{"class":1146},[159,115444,24233],{"class":165},[159,115446,23949],{"class":1146},[159,115448,1165],{"class":165},[159,115450,115451],{"class":161,"line":239},[159,115452,115453],{"class":1135},"#这个重复之后二维变成一维\n",[159,115455,115456,115459,115461],{"class":161,"line":245},[159,115457,115458],{"class":165},"np.repeat(aa,",[159,115460,11034],{"class":1146},[159,115462,1165],{"class":165},[159,115464,115465],{"class":161,"line":251},[159,115466,115228],{"class":192},[159,115468,115469],{"class":161,"line":261},[159,115470,115471],{"class":192},"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",[159,115473,115474],{"class":161,"line":603},[159,115475,115228],{"class":192},[159,115477,115478],{"class":161,"line":621},[159,115479,115480],{"class":1135},"#指定axis\n",[159,115482,115483,115485,115487,115489,115491,115493,115495],{"class":161,"line":634},[159,115484,115458],{"class":165},[159,115486,11034],{"class":1146},[159,115488,24233],{"class":165},[159,115490,70907],{"class":8765},[159,115492,189],{"class":1142},[159,115494,1489],{"class":1146},[159,115496,1165],{"class":165},[159,115498,115499],{"class":161,"line":640},[159,115500,114864],{"class":1135},[159,115502,115503],{"class":161,"line":1075},[159,115504,115228],{"class":192},[159,115506,115507],{"class":161,"line":1081},[159,115508,115509],{"class":192},"array([[ 1,  2,  3],\n",[159,115511,115512],{"class":161,"line":1091},[159,115513,115514],{"class":192},"       [ 1,  2,  3],\n",[159,115516,115517],{"class":161,"line":1100},[159,115518,115519],{"class":192},"       [ 4,  5,  6],\n",[159,115521,115522],{"class":161,"line":1123},[159,115523,115519],{"class":192},[159,115525,115526],{"class":161,"line":1132},[159,115527,115528],{"class":192},"       [ 7,  8,  9],\n",[159,115530,115531],{"class":161,"line":1139},[159,115532,115528],{"class":192},[159,115534,115535],{"class":161,"line":1168},[159,115536,115537],{"class":192},"       [10, 11, 12],\n",[159,115539,115540],{"class":161,"line":1174},[159,115541,115542],{"class":192},"       [10, 11, 12]])\n",[159,115544,115545],{"class":161,"line":1180},[159,115546,115228],{"class":192},[159,115548,115549,115551,115553,115555,115557,115559,115561],{"class":161,"line":1194},[159,115550,115458],{"class":165},[159,115552,11034],{"class":1146},[159,115554,24233],{"class":165},[159,115556,70907],{"class":8765},[159,115558,189],{"class":1142},[159,115560,4932],{"class":1146},[159,115562,1165],{"class":165},[159,115564,115565],{"class":161,"line":1200},[159,115566,114864],{"class":1135},[159,115568,115569],{"class":161,"line":1221},[159,115570,115228],{"class":192},[159,115572,115573],{"class":161,"line":1230},[159,115574,115575],{"class":192},"array([[ 1,  1,  2,  2,  3,  3],\n",[159,115577,115578],{"class":161,"line":1247},[159,115579,115580],{"class":192},"       [ 4,  4,  5,  5,  6,  6],\n",[159,115582,115583],{"class":161,"line":1265},[159,115584,115585],{"class":192},"       [ 7,  7,  8,  8,  9,  9],\n",[159,115587,115588],{"class":161,"line":1277},[159,115589,115590],{"class":192},"       [10, 10, 11, 11, 12, 12]])\n",[159,115592,115593],{"class":161,"line":1283},[159,115594,115228],{"class":192},[37,115596,115598],{"id":115597},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[151,115600,115602],{"className":53900,"code":115601,"language":53902,"meta":25,"style":25},"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",[49,115603,115604,115620,115625,115637,115641,115646,115656,115660],{"__ignoreMap":25},[159,115605,115606,115608,115610,115612,115614,115616,115618],{"class":161,"line":162},[159,115607,8085],{"class":165},[159,115609,189],{"class":1142},[159,115611,114302],{"class":165},[159,115613,4932],{"class":1146},[159,115615,24233],{"class":165},[159,115617,1753],{"class":1146},[159,115619,1165],{"class":165},[159,115621,115622],{"class":161,"line":176},[159,115623,115624],{"class":1135},"#array([，2，3，4])\n",[159,115626,115627,115630,115632,115634],{"class":161,"line":203},[159,115628,115629],{"class":165},"np.roll(a,",[159,115631,11034],{"class":1146},[159,115633,18387],{"class":165},[159,115635,115636],{"class":1135},"#传正数向后调多少位，传负数向前调多少位\n",[159,115638,115639],{"class":161,"line":223},[159,115640,114864],{"class":1135},[159,115642,115643],{"class":161,"line":233},[159,115644,115645],{"class":1135},"#array([3, 4, 1, 2])\n",[159,115647,115648,115650,115652,115654],{"class":161,"line":239},[159,115649,115629],{"class":165},[159,115651,24376],{"class":1142},[159,115653,4932],{"class":1146},[159,115655,1165],{"class":165},[159,115657,115658],{"class":161,"line":245},[159,115659,114864],{"class":1135},[159,115661,115662],{"class":161,"line":251},[159,115663,115664],{"class":1135},"#array([2, 3, 4, 1])\n",[14,115666,115667],{},[23,115668],{"alt":25,"src":115669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[37,115671,115673],{"id":115672},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,115675,115676],{},"resize()重新调整数组的大小",[14,115678,115679],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[151,115681,115683],{"className":53900,"code":115682,"language":53902,"meta":25,"style":25},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[49,115684,115685,115690,115703],{"__ignoreMap":25},[159,115686,115687],{"class":161,"line":162},[159,115688,115689],{"class":1135},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[159,115691,115692,115695,115697,115699,115701],{"class":161,"line":176},[159,115693,115694],{"class":165},"np.resize(aa,(",[159,115696,11034],{"class":1146},[159,115698,24233],{"class":165},[159,115700,7907],{"class":1146},[159,115702,18787],{"class":165},[159,115704,115705,115707,115709,115711,115713,115715],{"class":161,"line":203},[159,115706,115694],{"class":165},[159,115708,11034],{"class":1146},[159,115710,24233],{"class":165},[159,115712,24273],{"class":1146},[159,115714,104071],{"class":165},[159,115716,115717],{"class":1135},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[37,115719,115721],{"id":115720},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,115723,115724],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,115726,115727],{},[23,115728],{"alt":25,"src":115729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[37,115731,115733],{"id":115732},"_126-保存加载文件","12.6 保存加载文件",[14,115735,115736],{},"savetxt():将数据保存到txt文件中",[14,115738,115739],{},"loadtxt():从文件加载数据",[14,115741,115742],{},[23,115743],{"alt":25,"src":115744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[37,115746,115748],{"id":115747},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,115750,115751],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[37,115753,115755],{"id":115754},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,115757,115758],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,115760,115761],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,115763,115764],{},[23,115765],{"alt":25,"src":115766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[37,115768,115770],{"id":115769},"_129-where语句","12.9 where语句",[14,115772,115773],{},"np.where(条件,x,y)",[14,115775,115776],{},"如果条件为True,对应值为x,否则对应值为y",[14,115778,115779],{},[23,115780],{"alt":25,"src":115781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[37,115783,115785],{"id":115784},"_1210-dot矩阵","12.10 dot()矩阵",[14,115787,115788],{},[23,115789],{"alt":25,"src":115790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1468,115792,115793],{},"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":25,"searchDepth":176,"depth":176,"links":115795},[115796,115797,115798,115799,115800,115801,115802,115803,115804,115805],{"id":115158,"depth":176,"text":115159},{"id":115381,"depth":176,"text":115382},{"id":115597,"depth":176,"text":115598},{"id":115672,"depth":176,"text":115673},{"id":115720,"depth":176,"text":115721},{"id":115732,"depth":176,"text":115733},{"id":115747,"depth":176,"text":115748},{"id":115754,"depth":176,"text":115755},{"id":115769,"depth":176,"text":115770},{"id":115784,"depth":176,"text":115785},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":115150,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":115812,"title":115813,"body":115814,"description":23809,"extension":23810,"meta":116167,"navigation":589,"path":116168,"seo":116169,"stem":116170,"__hash__":116171},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":115815,"toc":116165},[115816,115819,115822,115825,115828,115831,115896,115898,116162],[10,115817,115813],{"id":115818},"_13数组排序",[14,115820,115821],{},"排序主要用到的方法是np.sort和np.argsort",[14,115823,115824],{},"其中np.sort()对数组直接排序",[14,115826,115827],{},"而np.argsort()是返回排序后的原始索引",[14,115829,115830],{},"①一维数组",[151,115832,115834],{"className":53900,"code":115833,"language":53902,"meta":25,"style":25},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[49,115835,115836,115840,115880,115888],{"__ignoreMap":25},[159,115837,115838],{"class":161,"line":162},[159,115839,114405],{"class":1135},[159,115841,115842,115844,115846,115848,115850,115852,115854,115856,115858,115860,115862,115864,115866,115868,115870,115872,115874,115876,115878],{"class":161,"line":176},[159,115843,8085],{"class":165},[159,115845,189],{"class":1142},[159,115847,114324],{"class":165},[159,115849,23949],{"class":1146},[159,115851,24233],{"class":165},[159,115853,7925],{"class":1146},[159,115855,24233],{"class":165},[159,115857,24250],{"class":1146},[159,115859,24233],{"class":165},[159,115861,24606],{"class":1146},[159,115863,24233],{"class":165},[159,115865,24142],{"class":1146},[159,115867,24233],{"class":165},[159,115869,24718],{"class":1146},[159,115871,24233],{"class":165},[159,115873,7907],{"class":1146},[159,115875,24233],{"class":165},[159,115877,1964],{"class":1146},[159,115879,28275],{"class":165},[159,115881,115882,115885],{"class":161,"line":203},[159,115883,115884],{"class":165},"np.sort(a)",[159,115886,115887],{"class":1135},"#升序排序\n",[159,115889,115890,115893],{"class":161,"line":223},[159,115891,115892],{"class":165},"np.argsort(a)",[159,115894,115895],{"class":1135},"#按照元素大小来索引排序\n",[14,115897,114591],{},[151,115899,115901],{"className":53900,"code":115900,"language":53902,"meta":25,"style":25},"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",[49,115902,115903,115915,115941,115946,115950,115955,115960,115965,115970,115974,115982,115986,115991,115996,116001,116006,116010,116015,116028,116032,116037,116042,116047,116052,116056,116061,116073,116077,116081,116085,116089,116093,116097,116102,116117,116122,116131,116136,116140,116144,116149,116153,116158],{"__ignoreMap":25},[159,115904,115905,115908,115910,115912],{"class":161,"line":162},[159,115906,115907],{"class":165},"np.random.seed(",[159,115909,1489],{"class":1146},[159,115911,18387],{"class":165},[159,115913,115914],{"class":1135},"#保证每次值一样\n",[159,115916,115917,115919,115921,115923,115925,115927,115929,115931,115933,115935,115937,115939],{"class":161,"line":176},[159,115918,114606],{"class":165},[159,115920,189],{"class":1142},[159,115922,114414],{"class":165},[159,115924,1596],{"class":1146},[159,115926,24233],{"class":165},[159,115928,55015],{"class":8765},[159,115930,189],{"class":1142},[159,115932,1159],{"class":165},[159,115934,8866],{"class":1146},[159,115936,24233],{"class":165},[159,115938,7907],{"class":1146},[159,115940,18787],{"class":165},[159,115942,115943],{"class":161,"line":203},[159,115944,115945],{"class":1135},"#原数组：\n",[159,115947,115948],{"class":161,"line":223},[159,115949,115228],{"class":192},[159,115951,115952],{"class":161,"line":233},[159,115953,115954],{"class":192},"array([[44, 47, 64, 67, 67,  9],\n",[159,115956,115957],{"class":161,"line":239},[159,115958,115959],{"class":192},"       [83, 21, 36, 87, 70, 88],\n",[159,115961,115962],{"class":161,"line":245},[159,115963,115964],{"class":192},"       [88, 12, 58, 65, 39, 87],\n",[159,115966,115967],{"class":161,"line":251},[159,115968,115969],{"class":192},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[159,115971,115972],{"class":161,"line":261},[159,115973,115228],{"class":192},[159,115975,115976,115979],{"class":161,"line":603},[159,115977,115978],{"class":165},"np.sort(aa)",[159,115980,115981],{"class":1135},"#每行进行了排序\n",[159,115983,115984],{"class":161,"line":621},[159,115985,115228],{"class":192},[159,115987,115988],{"class":161,"line":634},[159,115989,115990],{"class":192},"array([[ 9, 44, 47, 64, 67, 67],\n",[159,115992,115993],{"class":161,"line":640},[159,115994,115995],{"class":192},"       [21, 36, 70, 83, 87, 88],\n",[159,115997,115998],{"class":161,"line":1075},[159,115999,116000],{"class":192},"       [12, 39, 58, 65, 87, 88],\n",[159,116002,116003],{"class":161,"line":1081},[159,116004,116005],{"class":192},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[159,116007,116008],{"class":161,"line":1091},[159,116009,115228],{"class":192},[159,116011,116012],{"class":161,"line":1100},[159,116013,116014],{"class":1135},"#axis=0时\n",[159,116016,116017,116020,116022,116024,116026],{"class":161,"line":1123},[159,116018,116019],{"class":165},"np.sort(aa,",[159,116021,70907],{"class":8765},[159,116023,189],{"class":1142},[159,116025,1489],{"class":1146},[159,116027,1165],{"class":165},[159,116029,116030],{"class":161,"line":1132},[159,116031,115228],{"class":192},[159,116033,116034],{"class":161,"line":1139},[159,116035,116036],{"class":192},"array([[44, 12, 36, 37, 25,  9],\n",[159,116038,116039],{"class":161,"line":1168},[159,116040,116041],{"class":192},"       [46, 21, 58, 65, 39, 77],\n",[159,116043,116044],{"class":161,"line":1174},[159,116045,116046],{"class":192},"       [83, 47, 64, 67, 67, 87],\n",[159,116048,116049],{"class":161,"line":1180},[159,116050,116051],{"class":192},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[159,116053,116054],{"class":161,"line":1194},[159,116055,115228],{"class":192},[159,116057,116058],{"class":161,"line":1200},[159,116059,116060],{"class":1135},"#axis=1时,为默认值\n",[159,116062,116063,116065,116067,116069,116071],{"class":161,"line":1221},[159,116064,116019],{"class":165},[159,116066,70907],{"class":8765},[159,116068,189],{"class":1142},[159,116070,4932],{"class":1146},[159,116072,1165],{"class":165},[159,116074,116075],{"class":161,"line":1230},[159,116076,115228],{"class":192},[159,116078,116079],{"class":161,"line":1247},[159,116080,115990],{"class":192},[159,116082,116083],{"class":161,"line":1265},[159,116084,115995],{"class":192},[159,116086,116087],{"class":161,"line":1277},[159,116088,116000],{"class":192},[159,116090,116091],{"class":161,"line":1283},[159,116092,116005],{"class":192},[159,116094,116095],{"class":161,"line":1294},[159,116096,115228],{"class":192},[159,116098,116099],{"class":161,"line":1305},[159,116100,116101],{"class":1135},"#按最后一列排序\n",[159,116103,116104,116106,116108,116111,116113,116115],{"class":161,"line":1311},[159,116105,24127],{"class":165},[159,116107,189],{"class":1142},[159,116109,116110],{"class":165},"aa[:,",[159,116112,24376],{"class":1142},[159,116114,4932],{"class":1146},[159,116116,4634],{"class":165},[159,116118,116119],{"class":161,"line":1322},[159,116120,116121],{"class":1135},"#获取最后一列排好序的索引\n",[159,116123,116124,116126,116128],{"class":161,"line":1327},[159,116125,21169],{"class":165},[159,116127,189],{"class":1142},[159,116129,116130],{"class":165},"np.argsort(b)\n",[159,116132,116133],{"class":161,"line":1336},[159,116134,116135],{"class":165},"aa[index]\n",[159,116137,116138],{"class":161,"line":1345},[159,116139,115228],{"class":192},[159,116141,116142],{"class":161,"line":1350},[159,116143,115954],{"class":192},[159,116145,116146],{"class":161,"line":1764},[159,116147,116148],{"class":192},"       [46, 88, 81, 37, 25, 77],\n",[159,116150,116151],{"class":161,"line":1769},[159,116152,115964],{"class":192},[159,116154,116155],{"class":161,"line":1777},[159,116156,116157],{"class":192},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[159,116159,116160],{"class":161,"line":1788},[159,116161,115228],{"class":192},[1468,116163,116164],{},"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":25,"searchDepth":176,"depth":176,"links":116166},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":115813,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":116173,"title":116174,"body":116175,"description":23809,"extension":23810,"meta":116205,"navigation":589,"path":116206,"seo":116207,"stem":116208,"__hash__":116209},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":116176,"toc":116203},[116177,116180,116183,116186,116189,116192,116195,116198],[10,116178,116174],{"id":116179},"_14广播机制",[14,116181,116182],{},"广播的规则：",[14,116184,116185],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,116187,116188],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,116190,116191],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,116193,116194],{},"3.如果没有维度形状为1，则会引发异常",[14,116196,116197],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,116199,116200],{},[23,116201],{"alt":25,"src":116202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":25,"searchDepth":176,"depth":176,"links":116204},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":116174,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":116211,"title":116212,"body":116213,"description":23809,"extension":23810,"meta":116311,"navigation":589,"path":116312,"seo":116313,"stem":116314,"__hash__":116315},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":116214,"toc":116309},[116215,116218,116221,116306],[10,116216,116212],{"id":116217},"_15比较掩码",[14,116219,116220],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[151,116222,116224],{"className":53900,"code":116223,"language":53902,"meta":25,"style":25},"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",[49,116225,116226,116272,116283,116297,116301],{"__ignoreMap":25},[159,116227,116228,116230,116232,116235,116237,116239,116241,116243,116245,116247,116249,116251,116253,116255,116257,116259,116261,116263,116265,116267,116269],{"class":161,"line":162},[159,116229,8085],{"class":165},[159,116231,189],{"class":1142},[159,116233,116234],{"class":165},"np.array([[",[159,116236,4932],{"class":1146},[159,116238,24233],{"class":165},[159,116240,11034],{"class":1146},[159,116242,24233],{"class":165},[159,116244,23949],{"class":1146},[159,116246,71422],{"class":165},[159,116248,5850],{"class":1146},[159,116250,24233],{"class":165},[159,116252,7925],{"class":1146},[159,116254,24233],{"class":165},[159,116256,19665],{"class":1146},[159,116258,71422],{"class":165},[159,116260,24557],{"class":1146},[159,116262,24233],{"class":165},[159,116264,5877],{"class":1146},[159,116266,24233],{"class":165},[159,116268,24606],{"class":1146},[159,116270,116271],{"class":165},"]])\n",[159,116273,116274,116276,116278,116280],{"class":161,"line":176},[159,116275,8085],{"class":165},[159,116277,166],{"class":1142},[159,116279,1739],{"class":1146},[159,116281,116282],{"class":1135},"#结果是一个由True,False组成的数组\n",[159,116284,116285,116288,116290,116292,116294],{"class":161,"line":203},[159,116286,116287],{"class":165},"a[a",[159,116289,166],{"class":1142},[159,116291,1739],{"class":1146},[159,116293,18375],{"class":165},[159,116295,116296],{"class":1135},"#小于20的元素会存到这个数组中\n",[159,116298,116299],{"class":161,"line":223},[159,116300,114864],{"class":1135},[159,116302,116303],{"class":161,"line":233},[159,116304,116305],{"class":1135},"#array([ 1,  2,  3, 11, 12, 13])\n",[1468,116307,116308],{},"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":25,"searchDepth":176,"depth":176,"links":116310},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":116212,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":116317,"title":116318,"body":116319,"description":23809,"extension":23810,"meta":116411,"navigation":589,"path":116412,"seo":116413,"stem":116414,"__hash__":116415},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":116320,"toc":116409},[116321,116324,116327,116330,116333,116336,116401,116406],[10,116322,116318],{"id":116323},"_16魔法命令time",[14,116325,116326],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,116328,116329],{},"%:行模式",[14,116331,116332],{},"%%:单元格模式",[14,116334,116335],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[151,116337,116339],{"className":53900,"code":116338,"language":53902,"meta":25,"style":25},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[49,116340,116341,116346,116353,116358,116367,116380,116384,116392],{"__ignoreMap":25},[159,116342,116343],{"class":161,"line":162},[159,116344,116345],{"class":1135},"#程序执行时间\n",[159,116347,116348,116350],{"class":161,"line":176},[159,116349,53914],{"class":1142},[159,116351,116352],{"class":165}," time \n",[159,116354,116355],{"class":161,"line":203},[159,116356,116357],{"class":1135},"#获取时间\n",[159,116359,116360,116363,116365],{"class":161,"line":223},[159,116361,116362],{"class":165},"start",[159,116364,189],{"class":1142},[159,116366,55936],{"class":165},[159,116368,116369,116372,116375,116377],{"class":161,"line":233},[159,116370,116371],{"class":165},"time.sleep(",[159,116373,116374],{"class":1146},"0.4",[159,116376,18387],{"class":165},[159,116378,116379],{"class":1135},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[159,116381,116382],{"class":161,"line":239},[159,116383,116357],{"class":1135},[159,116385,116386,116388,116390],{"class":161,"line":245},[159,116387,69195],{"class":165},[159,116389,189],{"class":1142},[159,116391,55936],{"class":165},[159,116393,116394,116396,116398],{"class":161,"line":251},[159,116395,69195],{"class":165},[159,116397,24376],{"class":1142},[159,116399,116400],{"class":165},"start\n",[14,116402,116403],{},[23,116404],{"alt":25,"src":116405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1468,116407,116408],{},"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":25,"searchDepth":176,"depth":176,"links":116410},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":116318,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":116417,"title":116418,"body":116419,"description":23809,"extension":23810,"meta":116454,"navigation":589,"path":116455,"seo":116456,"stem":116457,"__hash__":116458},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":116420,"toc":116452},[116421,116424,116427,116430,116433,116436,116439,116442,116447],[10,116422,116418],{"id":116423},"_17魔法命令timeit",[14,116425,116426],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,116428,116429],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,116431,116432],{},"单元格模式：",[14,116434,116435],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,116437,116438],{},"初始化语句执行次数由轮数来决定",[14,116440,116441],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,116443,116444],{},[23,116445],{"alt":25,"src":116446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,116448,116449],{},[23,116450],{"alt":25,"src":116451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":25,"searchDepth":176,"depth":176,"links":116453},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":116418,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":116460,"title":116461,"body":116462,"description":23809,"extension":23810,"meta":116480,"navigation":589,"path":116481,"seo":116482,"stem":116483,"__hash__":116484},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":116463,"toc":116478},[116464,116467,116470,116473],[10,116465,116461],{"id":116466},"_18魔法命令writefile和run",[14,116468,116469],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,116471,116472],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,116474,116475],{},[23,116476],{"alt":25,"src":116477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":25,"searchDepth":176,"depth":176,"links":116479},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":116461,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":116486,"title":116487,"body":116488,"description":23809,"extension":23810,"meta":116541,"navigation":589,"path":116542,"seo":116543,"stem":116544,"__hash__":116545},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":116489,"toc":116539},[116490,116493,116496,116498,116501,116504,116509,116512,116515,116518,116521,116524,116527,116530,116533,116536],[10,116491,116487],{"id":116492},"_19魔法命令memit",[14,116494,116495],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,116497,48124],{},[14,116499,116500],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,116502,116503],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,116505,116506],{},[23,116507],{"alt":25,"src":116508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,116510,116511],{},"补充：",[14,116513,116514],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,116516,116517],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,116519,116520],{},"解决方法：",[14,116522,116523],{},"1.cmd",[14,116525,116526],{},"2.依次输入以下代码：",[14,116528,116529],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,116531,116532],{},"pip install --upgrade ipython",[14,116534,116535],{},"#升级 memory_profiler 和 setuptools",[14,116537,116538],{},"pip install --upgrade memory_profiler setuptools",{"title":25,"searchDepth":176,"depth":176,"links":116540},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":116487,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":116547,"title":116548,"body":116549,"description":23809,"extension":23810,"meta":118195,"navigation":589,"path":118196,"seo":118197,"stem":118198,"__hash__":118199},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":116550,"toc":118165},[116551,116554,116558,116562,116623,116626,116631,116635,116640,116645,116650,116655,116658,116663,116667,116671,116704,116707,116710,116713,116765,116768,116804,116807,116849,116853,116874,116876,116913,116915,116920,116922,116927,116931,116934,116962,116966,116970,117023,117027,117119,117123,117127,117130,117135,117139,117164,117169,117173,117176,117179,117182,117185,117188,117191,117194,117206,117210,117214,117217,117249,117252,117275,117278,117304,117307,117333,117336,117370,117373,117435,117439,117442,117446,117449,117475,117478,117481,117486,117489,117558,117560,117565,117626,117629,117640,117646,117651,117655,117658,117671,117675,117690,117692,117715,117717,117743,117746,117749,117752,117800,117802,117807,117811,117815,117842,117846,117873,117876,117881,117886,117976,117980,118038,118043,118046,118049,118091,118095,118151,118156,118159,118162],[10,116552,116548],{"id":116553},"_2创建数组",[37,116555,116557],{"id":116556},"_21-array函数创建数组","2.1 array()函数创建数组",[42,116559,116561],{"id":116560},"_221-函数语句","2.2.1 函数语句",[151,116563,116565],{"className":53900,"code":116564,"language":53902,"meta":25,"style":25},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[49,116566,116567],{"__ignoreMap":25},[159,116568,116569,116572,116575,116577,116579,116581,116583,116585,116588,116590,116593,116595,116598,116600,116602,116604,116607,116609,116612,116614,116617,116619,116621],{"class":161,"line":162},[159,116570,116571],{"class":165},"numpy.array(",[159,116573,116574],{"class":1146},"object",[159,116576,1939],{"class":165},[159,116578,114800],{"class":8765},[159,116580,1150],{"class":1142},[159,116582,62328],{"class":1146},[159,116584,1939],{"class":165},[159,116586,116587],{"class":8765},"copy",[159,116589,1150],{"class":1142},[159,116591,116592],{"class":1146}," True",[159,116594,1939],{"class":165},[159,116596,116597],{"class":8765},"order",[159,116599,1150],{"class":1142},[159,116601,62328],{"class":1146},[159,116603,1939],{"class":165},[159,116605,116606],{"class":8765},"subok",[159,116608,1150],{"class":1142},[159,116610,116611],{"class":1146}," False",[159,116613,1939],{"class":165},[159,116615,116616],{"class":8765},"ndmin",[159,116618,1150],{"class":1142},[159,116620,1259],{"class":1146},[159,116622,1165],{"class":165},[14,116624,116625],{},"参数：",[14,116627,116628],{},[23,116629],{"alt":25,"src":116630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[42,116632,116634],{"id":116633},"_222-实例","2.2.2 实例",[14,116636,116637],{},[23,116638],{"alt":25,"src":116639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,116641,116642],{},[23,116643],{"alt":25,"src":116644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,116646,116647],{},[23,116648],{"alt":25,"src":116649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,116651,116652],{},[23,116653],{"alt":25,"src":116654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,116656,116657],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,116659,116660],{},[23,116661],{"alt":25,"src":116662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[37,116664,116666],{"id":116665},"_22-随机数创建数组","2.2 随机数创建数组",[42,116668,116670],{"id":116669},"_221-random语句","2.2.1 random语句",[151,116672,116674],{"className":53900,"code":116673,"language":53902,"meta":25,"style":25},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[49,116675,116676,116681,116686,116694,116699],{"__ignoreMap":25},[159,116677,116678],{"class":161,"line":162},[159,116679,116680],{"class":1135},"#random.random()\n",[159,116682,116683],{"class":161,"line":176},[159,116684,116685],{"class":1135},"#确定随机种子,就是每次运行结果是相同的\n",[159,116687,116688,116690,116692],{"class":161,"line":203},[159,116689,115907],{"class":165},[159,116691,1489],{"class":1146},[159,116693,1165],{"class":165},[159,116695,116696],{"class":161,"line":223},[159,116697,116698],{"class":165},"np.random.random()\n",[159,116700,116701],{"class":161,"line":233},[159,116702,116703],{"class":1135},"#生成一个随机的数目\n",[14,116705,116706],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,116708,116709],{},"可以指定数组形状 size",[14,116711,116712],{},"①生成一维数组",[151,116714,116716],{"className":53900,"code":116715,"language":53902,"meta":25,"style":25},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[49,116717,116718,116723,116736,116741,116757],{"__ignoreMap":25},[159,116719,116720],{"class":161,"line":162},[159,116721,116722],{"class":1135},"#random.random(size())\n",[159,116724,116725,116728,116730,116732,116734],{"class":161,"line":176},[159,116726,116727],{"class":165},"np.random.random(",[159,116729,55015],{"class":8765},[159,116731,189],{"class":1142},[159,116733,1753],{"class":1146},[159,116735,1165],{"class":165},[159,116737,116738],{"class":161,"line":203},[159,116739,116740],{"class":1135},"#生成一位的五个元素\n",[159,116742,116743,116745,116747,116749,116751,116753,116755],{"class":161,"line":223},[159,116744,8085],{"class":165},[159,116746,189],{"class":1142},[159,116748,116727],{"class":165},[159,116750,55015],{"class":8765},[159,116752,189],{"class":1142},[159,116754,8866],{"class":1146},[159,116756,1165],{"class":165},[159,116758,116759,116762],{"class":161,"line":233},[159,116760,116761],{"class":165},"a.shape ",[159,116763,116764],{"class":1135},"#输出数组形状\n",[14,116766,116767],{},"②生成二维数组",[151,116769,116771],{"className":53900,"code":116770,"language":53902,"meta":25,"style":25},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[49,116772,116773,116777,116799],{"__ignoreMap":25},[159,116774,116775],{"class":161,"line":162},[159,116776,114601],{"class":1135},[159,116778,116779,116781,116783,116785,116787,116789,116791,116793,116795,116797],{"class":161,"line":176},[159,116780,114606],{"class":165},[159,116782,189],{"class":1142},[159,116784,116727],{"class":165},[159,116786,55015],{"class":8765},[159,116788,189],{"class":1142},[159,116790,1159],{"class":165},[159,116792,8866],{"class":1146},[159,116794,24233],{"class":165},[159,116796,1753],{"class":1146},[159,116798,18787],{"class":165},[159,116800,116801],{"class":161,"line":203},[159,116802,116803],{"class":1135},"#生成四行五列的数组\n",[14,116805,116806],{},"③生成三维数组",[151,116808,116810],{"className":53900,"code":116809,"language":53902,"meta":25,"style":25},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[49,116811,116812,116817,116844],{"__ignoreMap":25},[159,116813,116814],{"class":161,"line":162},[159,116815,116816],{"class":1135},"#三维数组\n",[159,116818,116819,116822,116824,116826,116828,116830,116832,116834,116836,116838,116840,116842],{"class":161,"line":176},[159,116820,116821],{"class":165},"aaa",[159,116823,189],{"class":1142},[159,116825,116727],{"class":165},[159,116827,55015],{"class":8765},[159,116829,189],{"class":1142},[159,116831,1159],{"class":165},[159,116833,11034],{"class":1146},[159,116835,24233],{"class":165},[159,116837,23949],{"class":1146},[159,116839,24233],{"class":165},[159,116841,8866],{"class":1146},[159,116843,18787],{"class":165},[159,116845,116846],{"class":161,"line":203},[159,116847,116848],{"class":165},"aaa.shape\n",[42,116850,116852],{"id":116851},"_222-randint语句","2.2.2 randint语句",[151,116854,116856],{"className":53900,"code":116855,"language":53902,"meta":25,"style":25},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[49,116857,116858,116863],{"__ignoreMap":25},[159,116859,116860],{"class":161,"line":162},[159,116861,116862],{"class":1135},"#生成随机的整数 random.randint(low,high,size)\n",[159,116864,116865,116867,116869,116871],{"class":161,"line":176},[159,116866,114414],{"class":165},[159,116868,1753],{"class":1146},[159,116870,2710],{"class":165},[159,116872,116873],{"class":1135},"#0~5中的随机一个数\n",[14,116875,116712],{},[151,116877,116879],{"className":53900,"code":116878,"language":53902,"meta":25,"style":25},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[49,116880,116881,116886,116908],{"__ignoreMap":25},[159,116882,116883],{"class":161,"line":162},[159,116884,116885],{"class":1135},"#一维\n",[159,116887,116888,116890,116892,116894,116896,116898,116900,116902,116904,116906],{"class":161,"line":176},[159,116889,114414],{"class":165},[159,116891,4932],{"class":1146},[159,116893,24233],{"class":165},[159,116895,5850],{"class":1146},[159,116897,24233],{"class":165},[159,116899,55015],{"class":8765},[159,116901,189],{"class":1142},[159,116903,1159],{"class":165},[159,116905,1964],{"class":1146},[159,116907,18787],{"class":165},[159,116909,116910],{"class":161,"line":203},[159,116911,116912],{"class":1135},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,116914,116767],{},[14,116916,116917],{},[23,116918],{"alt":25,"src":116919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,116921,116806],{},[14,116923,116924],{},[23,116925],{"alt":25,"src":116926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[42,116928,116930],{"id":116929},"_222-rand语句","2.2.2 rand语句",[14,116932,116933],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[151,116935,116937],{"className":53900,"code":116936,"language":53902,"meta":25,"style":25},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[49,116938,116939,116952,116957],{"__ignoreMap":25},[159,116940,116941,116944,116946,116948,116950],{"class":161,"line":162},[159,116942,116943],{"class":165},"np.random.rand(",[159,116945,1596],{"class":1146},[159,116947,24233],{"class":165},[159,116949,1964],{"class":1146},[159,116951,1165],{"class":165},[159,116953,116954],{"class":161,"line":176},[159,116955,116956],{"class":1135},"#第一个参数100：行数，表示有100个样本\n",[159,116958,116959],{"class":161,"line":203},[159,116960,116961],{"class":1135},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[37,116963,116965],{"id":116964},"_23-arange创建数组","2.3 arange()创建数组",[42,116967,116969],{"id":116968},"_231-函数语句","2.3.1 函数语句",[151,116971,116973],{"className":53900,"code":116972,"language":53902,"meta":25,"style":25},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[49,116974,116975,116989,116994,116999,117004,117009,117014,117019],{"__ignoreMap":25},[159,116976,116977,116980,116982,116984,116987],{"class":161,"line":162},[159,116978,116979],{"class":165},"numpy.arange([start,] stop[, step], ",[159,116981,114800],{"class":8765},[159,116983,189],{"class":1142},[159,116985,116986],{"class":1146},"None",[159,116988,1165],{"class":165},[159,116990,116991],{"class":161,"line":176},[159,116992,116993],{"class":1135},"#参数\n",[159,116995,116996],{"class":161,"line":203},[159,116997,116998],{"class":192},"\"\"\"\n",[159,117000,117001],{"class":161,"line":223},[159,117002,117003],{"class":192},"start:起始值，可选，默认从 0 开始。\n",[159,117005,117006],{"class":161,"line":233},[159,117007,117008],{"class":192},"stop:结束值（不包含该值）。\n",[159,117010,117011],{"class":161,"line":239},[159,117012,117013],{"class":192},"step:步长，可选，默认是 1。可以为浮点数。\n",[159,117015,117016],{"class":161,"line":245},[159,117017,117018],{"class":192},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[159,117020,117021],{"class":161,"line":251},[159,117022,116998],{"class":192},[42,117024,117026],{"id":117025},"_232-实例","2.3.2 实例",[151,117028,117030],{"className":53900,"code":117029,"language":53902,"meta":25,"style":25},"#创建一维数组\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",[49,117031,117032,117036,117060,117065,117070,117074,117097,117101,117105,117110,117115],{"__ignoreMap":25},[159,117033,117034],{"class":161,"line":162},[159,117035,114405],{"class":1135},[159,117037,117038,117040,117042,117044,117046,117048,117050,117052,117054,117056,117058],{"class":161,"line":176},[159,117039,114302],{"class":165},[159,117041,4932],{"class":1146},[159,117043,24233],{"class":165},[159,117045,24557],{"class":1146},[159,117047,24233],{"class":165},[159,117049,4932],{"class":1146},[159,117051,24233],{"class":165},[159,117053,114800],{"class":8765},[159,117055,189],{"class":1142},[159,117057,23886],{"class":1146},[159,117059,1165],{"class":165},[159,117061,117062],{"class":161,"line":203},[159,117063,117064],{"class":1135},"#输出结果：\n",[159,117066,117067],{"class":161,"line":223},[159,117068,117069],{"class":1135},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[159,117071,117072],{"class":161,"line":233},[159,117073,115247],{"class":1135},[159,117075,117076,117079,117081,117083,117085,117088,117090,117092,117094],{"class":161,"line":239},[159,117077,117078],{"class":165},"np.array([np.arange(",[159,117080,4932],{"class":1146},[159,117082,24233],{"class":165},[159,117084,8866],{"class":1146},[159,117086,117087],{"class":165},"),np.arange(",[159,117089,8866],{"class":1146},[159,117091,24233],{"class":165},[159,117093,24224],{"class":1146},[159,117095,117096],{"class":165},")])\n",[159,117098,117099],{"class":161,"line":245},[159,117100,114864],{"class":1135},[159,117102,117103],{"class":161,"line":251},[159,117104,116998],{"class":192},[159,117106,117107],{"class":161,"line":261},[159,117108,117109],{"class":192},"array([[1, 2, 3],\n",[159,117111,117112],{"class":161,"line":603},[159,117113,117114],{"class":192},"       [4, 5, 6]])\n",[159,117116,117117],{"class":161,"line":621},[159,117118,116998],{"class":192},[37,117120,117122],{"id":117121},"_24-生态分布","2.4 生态分布",[42,117124,117126],{"id":117125},"_241-标准正态分布","2.4.1 标准正态分布",[14,117128,117129],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,117131,117132],{},[23,117133],{"alt":25,"src":117134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[42,117136,117138],{"id":117137},"_242-常规正态分布","2.4.2 常规正态分布",[151,117140,117142],{"className":53900,"code":117141,"language":53902,"meta":25,"style":25},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[49,117143,117144,117149,117154,117159],{"__ignoreMap":25},[159,117145,117146],{"class":161,"line":162},[159,117147,117148],{"class":165},"random.normal(loc,scale,size)也可以生成正态分布\n",[159,117150,117151],{"class":161,"line":176},[159,117152,117153],{"class":1135},"#loc:期望\n",[159,117155,117156],{"class":161,"line":203},[159,117157,117158],{"class":1135},"#scale:方差\n",[159,117160,117161],{"class":161,"line":223},[159,117162,117163],{"class":1135},"#size:用于确定是几维的数列\n",[14,117165,117166],{},[23,117167],{"alt":25,"src":117168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[37,117170,117172],{"id":117171},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,117174,117175],{},"ndim:秩，维度个数",[14,117177,117178],{},"size:数组元素的个数",[14,117180,117181],{},"shape:数组的形状",[14,117183,117184],{},"dtype:数组元素的类型",[14,117186,117187],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,117189,117190],{},"他们都是属性，通过数组.属性的形式来确定",[14,117192,117193],{},"如果需要输出多个可以通过以下方式：",[151,117195,117197],{"className":53900,"code":117196,"language":53902,"meta":25,"style":25},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[49,117198,117199],{"__ignoreMap":25},[159,117200,117201,117203],{"class":161,"line":162},[159,117202,53937],{"class":1146},[159,117204,117205],{"class":165},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[37,117207,117209],{"id":117208},"_26-其他方式创建数组","2.6 其他方式创建数组",[42,117211,117213],{"id":117212},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,117215,117216],{},"①创建一维数组",[151,117218,117220],{"className":53900,"code":117219,"language":53902,"meta":25,"style":25},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[49,117221,117222,117231,117235,117240,117245],{"__ignoreMap":25},[159,117223,117224,117227,117229],{"class":161,"line":162},[159,117225,117226],{"class":165},"np.zeros(",[159,117228,1964],{"class":1146},[159,117230,1165],{"class":165},[159,117232,117233],{"class":161,"line":176},[159,117234,116998],{"class":192},[159,117236,117237],{"class":161,"line":203},[159,117238,117239],{"class":192},"输出结果：\n",[159,117241,117242],{"class":161,"line":223},[159,117243,117244],{"class":192},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[159,117246,117247],{"class":161,"line":233},[159,117248,116998],{"class":192},[14,117250,117251],{},"上方代码等价于：",[151,117253,117255],{"className":53900,"code":117254,"language":53902,"meta":25,"style":25},"np.zeros(shape=(10))#创建10个元素的0数组\n",[49,117256,117257],{"__ignoreMap":25},[159,117258,117259,117261,117264,117266,117268,117270,117272],{"class":161,"line":162},[159,117260,117226],{"class":165},[159,117262,117263],{"class":8765},"shape",[159,117265,189],{"class":1142},[159,117267,1159],{"class":165},[159,117269,1964],{"class":1146},[159,117271,104071],{"class":165},[159,117273,117274],{"class":1135},"#创建10个元素的0数组\n",[14,117276,117277],{},"也可以指定类型",[151,117279,117281],{"className":53900,"code":117280,"language":53902,"meta":25,"style":25},"#指定类型\nnp.zeros(5,dtype=int)\n",[49,117282,117283,117288],{"__ignoreMap":25},[159,117284,117285],{"class":161,"line":162},[159,117286,117287],{"class":1135},"#指定类型\n",[159,117289,117290,117292,117294,117296,117298,117300,117302],{"class":161,"line":176},[159,117291,117226],{"class":165},[159,117293,1753],{"class":1146},[159,117295,24233],{"class":165},[159,117297,114800],{"class":8765},[159,117299,189],{"class":1142},[159,117301,23886],{"class":1146},[159,117303,1165],{"class":165},[14,117305,117306],{},"②创建二维数组",[151,117308,117310],{"className":53900,"code":117309,"language":53902,"meta":25,"style":25},"np.zeros((3,4),dtype=int)\n",[49,117311,117312],{"__ignoreMap":25},[159,117313,117314,117317,117319,117321,117323,117325,117327,117329,117331],{"class":161,"line":162},[159,117315,117316],{"class":165},"np.zeros((",[159,117318,23949],{"class":1146},[159,117320,24233],{"class":165},[159,117322,8866],{"class":1146},[159,117324,65651],{"class":165},[159,117326,114800],{"class":8765},[159,117328,189],{"class":1142},[159,117330,23886],{"class":1146},[159,117332,1165],{"class":165},[14,117334,117335],{},"③创建三维数组",[151,117337,117339],{"className":53900,"code":117338,"language":53902,"meta":25,"style":25},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[49,117340,117341,117346],{"__ignoreMap":25},[159,117342,117343],{"class":161,"line":162},[159,117344,117345],{"class":1135},"#创建三维数组\n",[159,117347,117348,117350,117352,117354,117356,117358,117360,117362,117364,117366,117368],{"class":161,"line":176},[159,117349,117316],{"class":165},[159,117351,23949],{"class":1146},[159,117353,24233],{"class":165},[159,117355,8866],{"class":1146},[159,117357,24233],{"class":165},[159,117359,1753],{"class":1146},[159,117361,65651],{"class":165},[159,117363,114800],{"class":8765},[159,117365,189],{"class":1142},[159,117367,23886],{"class":1146},[159,117369,1165],{"class":165},[14,117371,117372],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[151,117374,117376],{"className":53900,"code":117375,"language":53902,"meta":25,"style":25},"#使用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",[49,117377,117378,117383,117398,117403,117408,117430],{"__ignoreMap":25},[159,117379,117380],{"class":161,"line":162},[159,117381,117382],{"class":1135},"#使用zeros_like将创建的一维数组变成全0的数组\n",[159,117384,117385,117387,117389,117391,117393,117395],{"class":161,"line":176},[159,117386,8085],{"class":165},[159,117388,189],{"class":1142},[159,117390,114302],{"class":165},[159,117392,8866],{"class":1146},[159,117394,18387],{"class":165},[159,117396,117397],{"class":1135},"#这个得到的结果：一维数组0，1，2，3\n",[159,117399,117400],{"class":161,"line":203},[159,117401,117402],{"class":165},"np.zeros_like(a)\n",[159,117404,117405],{"class":161,"line":223},[159,117406,117407],{"class":1135},"#使用zeros_like将创建的二维数组变成全0的数组\n",[159,117409,117410,117412,117414,117416,117418,117420,117422,117424,117426,117428],{"class":161,"line":233},[159,117411,114606],{"class":165},[159,117413,189],{"class":1142},[159,117415,116727],{"class":165},[159,117417,55015],{"class":8765},[159,117419,189],{"class":1142},[159,117421,1159],{"class":165},[159,117423,8866],{"class":1146},[159,117425,24233],{"class":165},[159,117427,1753],{"class":1146},[159,117429,18787],{"class":165},[159,117431,117432],{"class":161,"line":239},[159,117433,117434],{"class":165},"np.zeros_like(aa)\n",[42,117436,117438],{"id":117437},"_262-ones创建数组","2.6.2 ones()创建数组",[14,117440,117441],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[42,117443,117445],{"id":117444},"_263-empty创建数组","2.6.3 empty()创建数组",[14,117447,117448],{},"①empty()用法",[151,117450,117452],{"className":53900,"code":117451,"language":53902,"meta":25,"style":25},"numpy.empty(shape,dtype=float,order='c')\n",[49,117453,117454],{"__ignoreMap":25},[159,117455,117456,117459,117461,117463,117465,117467,117469,117471,117473],{"class":161,"line":162},[159,117457,117458],{"class":165},"numpy.empty(shape,",[159,117460,114800],{"class":8765},[159,117462,189],{"class":1142},[159,117464,23920],{"class":1146},[159,117466,24233],{"class":165},[159,117468,116597],{"class":8765},[159,117470,189],{"class":1142},[159,117472,23164],{"class":192},[159,117474,1165],{"class":165},[14,117476,117477],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,117479,117480],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,117482,117483],{},[23,117484],{"alt":25,"src":117485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,117487,117488],{},"②empty()用法",[151,117490,117492],{"className":53900,"code":117491,"language":53902,"meta":25,"style":25},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[49,117493,117494,117515,117527,117548,117553],{"__ignoreMap":25},[159,117495,117496,117498,117500,117503,117505,117507,117509,117511,117513],{"class":161,"line":162},[159,117497,24672],{"class":165},[159,117499,189],{"class":1142},[159,117501,117502],{"class":165},"np.empty(",[159,117504,1964],{"class":1146},[159,117506,24233],{"class":165},[159,117508,114800],{"class":8765},[159,117510,189],{"class":1142},[159,117512,23886],{"class":1146},[159,117514,1165],{"class":165},[159,117516,117517,117519,117521,117523,117525],{"class":161,"line":176},[159,117518,24648],{"class":165},[159,117520,189],{"class":1142},[159,117522,114302],{"class":165},[159,117524,1753],{"class":1146},[159,117526,1165],{"class":165},[159,117528,117529,117532,117534,117537,117539,117541,117544,117546],{"class":161,"line":203},[159,117530,117531],{"class":165},"np.add(",[159,117533,11034],{"class":1146},[159,117535,117536],{"class":165},",x,",[159,117538,114354],{"class":8765},[159,117540,189],{"class":1142},[159,117542,117543],{"class":165},"y[:",[159,117545,1753],{"class":1146},[159,117547,28275],{"class":165},[159,117549,117550],{"class":161,"line":223},[159,117551,117552],{"class":1135},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[159,117554,117555],{"class":161,"line":233},[159,117556,117557],{"class":165},"y\n",[14,117559,35086],{},[14,117561,117562],{},[23,117563],{"alt":25,"src":117564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[151,117566,117568],{"className":53900,"code":117567,"language":53902,"meta":25,"style":25},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[49,117569,117570,117586,117606,117621],{"__ignoreMap":25},[159,117571,117572,117574,117576,117578,117580,117582,117584],{"class":161,"line":162},[159,117573,24648],{"class":165},[159,117575,189],{"class":1142},[159,117577,114302],{"class":165},[159,117579,4932],{"class":1146},[159,117581,24233],{"class":165},[159,117583,7907],{"class":1146},[159,117585,1165],{"class":165},[159,117587,117588,117590,117592,117594,117596,117598,117600,117602,117604],{"class":161,"line":176},[159,117589,24672],{"class":165},[159,117591,189],{"class":1142},[159,117593,117502],{"class":165},[159,117595,1753],{"class":1146},[159,117597,24233],{"class":165},[159,117599,114800],{"class":8765},[159,117601,189],{"class":1142},[159,117603,23886],{"class":1146},[159,117605,1165],{"class":165},[159,117607,117608,117611,117613,117615,117617,117619],{"class":161,"line":203},[159,117609,117610],{"class":165},"np.add(x,",[159,117612,11034],{"class":1146},[159,117614,24233],{"class":165},[159,117616,114354],{"class":8765},[159,117618,189],{"class":1142},[159,117620,114749],{"class":165},[159,117622,117623],{"class":161,"line":223},[159,117624,117625],{"class":1135},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,117627,117628],{},"③empty_like()",[14,117630,117631],{},[61,117632,117633,117634,117639],{},"创建一个",[61,117635,117636],{},[61,117637,117638],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,117641,117642,117645],{},[49,117643,117644],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,117647,117648],{},[23,117649],{"alt":25,"src":117650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[42,117652,117654],{"id":117653},"_264-用法","2.6.4 ？？用法",[14,117656,117657],{},"当想查看一个函数的参数时，可以通过？？来实现",[151,117659,117661],{"className":53900,"code":117660,"language":53902,"meta":25,"style":25},"np.full??\n",[49,117662,117663],{"__ignoreMap":25},[159,117664,117665,117668],{"class":161,"line":162},[159,117666,117667],{"class":165},"np.full",[159,117669,117670],{"class":98703},"??\n",[42,117672,117674],{"id":117673},"_265-full创建数组","2.6.5 full()创建数组",[151,117676,117678],{"className":53900,"code":117677,"language":53902,"meta":25,"style":25},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[49,117679,117680,117685],{"__ignoreMap":25},[159,117681,117682],{"class":161,"line":162},[159,117683,117684],{"class":165},"full(shape,fill_value)\n",[159,117686,117687],{"class":161,"line":176},[159,117688,117689],{"class":165},"创建全为某个指定值的数组\n",[14,117691,115830],{},[151,117693,117695],{"className":53900,"code":117694,"language":53902,"meta":25,"style":25},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[49,117696,117697,117702],{"__ignoreMap":25},[159,117698,117699],{"class":161,"line":162},[159,117700,117701],{"class":1135},"#创建一个一维数组,以20进行填充\n",[159,117703,117704,117707,117709,117711,117713],{"class":161,"line":176},[159,117705,117706],{"class":165},"np.full(",[159,117708,1964],{"class":1146},[159,117710,24233],{"class":165},[159,117712,1739],{"class":1146},[159,117714,1165],{"class":165},[14,117716,114591],{},[151,117718,117720],{"className":53900,"code":117719,"language":53902,"meta":25,"style":25},"#创建二维数组\nnp.full((3,5),11)\n",[49,117721,117722,117726],{"__ignoreMap":25},[159,117723,117724],{"class":161,"line":162},[159,117725,115247],{"class":1135},[159,117727,117728,117731,117733,117735,117737,117739,117741],{"class":161,"line":176},[159,117729,117730],{"class":165},"np.full((",[159,117732,23949],{"class":1146},[159,117734,24233],{"class":165},[159,117736,1753],{"class":1146},[159,117738,65651],{"class":165},[159,117740,5850],{"class":1146},[159,117742,1165],{"class":165},[14,117744,117745],{},"③full_like用法",[14,117747,117748],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,117750,117751],{},"这里是指定填充而已",[151,117753,117755],{"className":53900,"code":117754,"language":53902,"meta":25,"style":25},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[49,117756,117757,117762,117786,117791],{"__ignoreMap":25},[159,117758,117759],{"class":161,"line":162},[159,117760,117761],{"class":1135},"#创建一个指定形状数组\n",[159,117763,117764,117766,117768,117770,117772,117774,117776,117778,117780,117782,117784],{"class":161,"line":176},[159,117765,8085],{"class":165},[159,117767,189],{"class":1142},[159,117769,114302],{"class":165},[159,117771,4932],{"class":1146},[159,117773,24233],{"class":165},[159,117775,24183],{"class":1146},[159,117777,114307],{"class":165},[159,117779,8866],{"class":1146},[159,117781,24233],{"class":165},[159,117783,24273],{"class":1146},[159,117785,1165],{"class":165},[159,117787,117788],{"class":161,"line":203},[159,117789,117790],{"class":1135},"#进行指定填充\n",[159,117792,117793,117796,117798],{"class":161,"line":223},[159,117794,117795],{"class":165},"np.full_like(a,",[159,117797,1964],{"class":1146},[159,117799,1165],{"class":165},[14,117801,35086],{},[14,117803,117804],{},[23,117805],{"alt":25,"src":117806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[42,117808,117810],{"id":117809},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[326,117812,117814],{"id":117813},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[151,117816,117818],{"className":53900,"code":117817,"language":53902,"meta":25,"style":25},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[49,117819,117820,117837],{"__ignoreMap":25},[159,117821,117822,117825,117827,117829,117831,117833,117835],{"class":161,"line":162},[159,117823,117824],{"class":165},"np.eye(",[159,117826,8866],{"class":1146},[159,117828,24233],{"class":165},[159,117830,114800],{"class":8765},[159,117832,189],{"class":1142},[159,117834,23886],{"class":1146},[159,117836,1165],{"class":165},[159,117838,117839],{"class":161,"line":176},[159,117840,117841],{"class":1135},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[326,117843,117845],{"id":117844},"_2662-法2identity","2.6.6.2 法2：identity()",[151,117847,117849],{"className":53900,"code":117848,"language":53902,"meta":25,"style":25},"#identity()\nnp.identity(5,dtype=int)\n",[49,117850,117851,117856],{"__ignoreMap":25},[159,117852,117853],{"class":161,"line":162},[159,117854,117855],{"class":1135},"#identity()\n",[159,117857,117858,117861,117863,117865,117867,117869,117871],{"class":161,"line":176},[159,117859,117860],{"class":165},"np.identity(",[159,117862,1753],{"class":1146},[159,117864,24233],{"class":165},[159,117866,114800],{"class":8765},[159,117868,189],{"class":1142},[159,117870,23886],{"class":1146},[159,117872,1165],{"class":165},[14,117874,117875],{},"两个函数是有区别的",[14,117877,117878],{},[23,117879],{"alt":25,"src":117880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,117882,117883],{},[23,117884],{"alt":25,"src":117885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[151,117887,117889],{"className":53900,"code":117888,"language":53902,"meta":25,"style":25},"# 创建一个 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",[49,117890,117891,117896,117908,117913,117918,117923,117928,117932,117937,117957,117961,117966,117971],{"__ignoreMap":25},[159,117892,117893],{"class":161,"line":162},[159,117894,117895],{"class":1135},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[159,117897,117898,117900,117902,117904,117906],{"class":161,"line":176},[159,117899,117824],{"class":165},[159,117901,23949],{"class":1146},[159,117903,1939],{"class":165},[159,117905,8866],{"class":1146},[159,117907,1165],{"class":165},[159,117909,117910],{"class":161,"line":203},[159,117911,117912],{"class":1135},"# 输出:\n",[159,117914,117915],{"class":161,"line":223},[159,117916,117917],{"class":1135},"# [[1. 0. 0. 0.]\n",[159,117919,117920],{"class":161,"line":233},[159,117921,117922],{"class":1135},"#  [0. 1. 0. 0.]\n",[159,117924,117925],{"class":161,"line":239},[159,117926,117927],{"class":1135},"#  [0. 0. 1. 0.]]\n",[159,117929,117930],{"class":161,"line":245},[159,117931,590],{"emptyLinePlaceholder":589},[159,117933,117934],{"class":161,"line":251},[159,117935,117936],{"class":1135},"# 对角线向上偏移1\n",[159,117938,117939,117941,117943,117945,117947,117949,117951,117953,117955],{"class":161,"line":261},[159,117940,117824],{"class":165},[159,117942,23949],{"class":1146},[159,117944,1939],{"class":165},[159,117946,8866],{"class":1146},[159,117948,1939],{"class":165},[159,117950,24339],{"class":8765},[159,117952,189],{"class":1142},[159,117954,4932],{"class":1146},[159,117956,1165],{"class":165},[159,117958,117959],{"class":161,"line":603},[159,117960,117912],{"class":1135},[159,117962,117963],{"class":161,"line":621},[159,117964,117965],{"class":1135},"# [[0. 1. 0. 0.]\n",[159,117967,117968],{"class":161,"line":634},[159,117969,117970],{"class":1135},"#  [0. 0. 1. 0.]\n",[159,117972,117973],{"class":161,"line":640},[159,117974,117975],{"class":1135},"#  [0. 0. 0. 1.]]\n",[42,117977,117979],{"id":117978},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[151,117981,117983],{"className":53900,"code":117982,"language":53902,"meta":25,"style":25},"#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",[49,117984,117985,117990,117994,117999,118004,118009,118014,118019,118024,118029,118034],{"__ignoreMap":25},[159,117986,117987],{"class":161,"line":162},[159,117988,117989],{"class":1135},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[159,117991,117992],{"class":161,"line":176},[159,117993,116998],{"class":192},[159,117995,117996],{"class":161,"line":203},[159,117997,117998],{"class":192},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[159,118000,118001],{"class":161,"line":223},[159,118002,118003],{"class":192},"参数介绍：\n",[159,118005,118006],{"class":161,"line":233},[159,118007,118008],{"class":192},"start：序列的起始值\n",[159,118010,118011],{"class":161,"line":239},[159,118012,118013],{"class":192},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[159,118015,118016],{"class":161,"line":245},[159,118017,118018],{"class":192},"num：要生长的等步长的样本数量，默认为50\n",[159,118020,118021],{"class":161,"line":251},[159,118022,118023],{"class":192},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[159,118025,118026],{"class":161,"line":261},[159,118027,118028],{"class":192},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[159,118030,118031],{"class":161,"line":603},[159,118032,118033],{"class":192},"dtype：ndarry的数据类型\n",[159,118035,118036],{"class":161,"line":621},[159,118037,116998],{"class":192},[14,118039,118040],{},[23,118041],{"alt":25,"src":118042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,118044,118045],{},"这里num=是可以省略的",[14,118047,118048],{},"也就是下方两行代码结果是一模一样的",[151,118050,118052],{"className":53900,"code":118051,"language":53902,"meta":25,"style":25},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[49,118053,118054,118071],{"__ignoreMap":25},[159,118055,118056,118059,118061,118063,118065,118067,118069],{"class":161,"line":162},[159,118057,118058],{"class":165},"np.linspace(",[159,118060,4932],{"class":1146},[159,118062,24233],{"class":165},[159,118064,1753],{"class":1146},[159,118066,24233],{"class":165},[159,118068,1753],{"class":1146},[159,118070,1165],{"class":165},[159,118072,118073,118075,118077,118079,118081,118083,118085,118087,118089],{"class":161,"line":176},[159,118074,118058],{"class":165},[159,118076,4932],{"class":1146},[159,118078,24233],{"class":165},[159,118080,1753],{"class":1146},[159,118082,24233],{"class":165},[159,118084,25332],{"class":8765},[159,118086,189],{"class":1142},[159,118088,1753],{"class":1146},[159,118090,1165],{"class":165},[42,118092,118094],{"id":118093},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[151,118096,118098],{"className":53900,"code":118097,"language":53902,"meta":25,"style":25},"#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",[49,118099,118100,118105,118109,118114,118119,118124,118129,118133,118138,118143,118147],{"__ignoreMap":25},[159,118101,118102],{"class":161,"line":162},[159,118103,118104],{"class":1135},"#logspace函数用于创建一个等比数列，格式如下：\n",[159,118106,118107],{"class":161,"line":176},[159,118108,116998],{"class":192},[159,118110,118111],{"class":161,"line":203},[159,118112,118113],{"class":192},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[159,118115,118116],{"class":161,"line":223},[159,118117,118118],{"class":192},"参数为：\n",[159,118120,118121],{"class":161,"line":233},[159,118122,118123],{"class":192},"start:序列的起始位置为：base**start\n",[159,118125,118126],{"class":161,"line":239},[159,118127,118128],{"class":192},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[159,118130,118131],{"class":161,"line":245},[159,118132,118018],{"class":192},[159,118134,118135],{"class":161,"line":251},[159,118136,118137],{"class":192},"endpoint：是否包含 stop 这个值，默认是 True\n",[159,118139,118140],{"class":161,"line":261},[159,118141,118142],{"class":192},"base：对数的底数，默认是 10（常见对数）\n",[159,118144,118145],{"class":161,"line":603},[159,118146,118033],{"class":192},[159,118148,118149],{"class":161,"line":621},[159,118150,116998],{"class":192},[14,118152,118153],{},[23,118154],{"alt":25,"src":118155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,118157,118158],{},"logspace()函数中的num参数也是可以不写num=的",[14,118160,118161],{},"endpoint是不可以省略的",[1468,118163,118164],{},"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":25,"searchDepth":176,"depth":176,"links":118166},[118167,118171,118176,118180,118184,118185],{"id":116556,"depth":176,"text":116557,"children":118168},[118169,118170],{"id":116560,"depth":203,"text":116561},{"id":116633,"depth":203,"text":116634},{"id":116665,"depth":176,"text":116666,"children":118172},[118173,118174,118175],{"id":116669,"depth":203,"text":116670},{"id":116851,"depth":203,"text":116852},{"id":116929,"depth":203,"text":116930},{"id":116964,"depth":176,"text":116965,"children":118177},[118178,118179],{"id":116968,"depth":203,"text":116969},{"id":117025,"depth":203,"text":117026},{"id":117121,"depth":176,"text":117122,"children":118181},[118182,118183],{"id":117125,"depth":203,"text":117126},{"id":117137,"depth":203,"text":117138},{"id":117171,"depth":176,"text":117172},{"id":117208,"depth":176,"text":117209,"children":118186},[118187,118188,118189,118190,118191,118192,118193,118194],{"id":117212,"depth":203,"text":117213},{"id":117437,"depth":203,"text":117438},{"id":117444,"depth":203,"text":117445},{"id":117653,"depth":203,"text":117654},{"id":117673,"depth":203,"text":117674},{"id":117809,"depth":203,"text":117810},{"id":117978,"depth":203,"text":117979},{"id":118093,"depth":203,"text":118094},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":116548,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":118201,"title":118202,"body":118203,"description":23809,"extension":23810,"meta":118296,"navigation":589,"path":118297,"seo":118298,"stem":118299,"__hash__":118300},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":118204,"toc":118294},[118205,118208,118211,118214,118217,118220,118223,118226,118229,118232,118235,118238,118240,118243,118246,118251,118254,118257,118291],[10,118206,118202],{"id":118207},"_20魔法命令mprun",[14,118209,118210],{},"逐行分析数据内存的使用情况",[14,118212,118213],{},"语法格式：",[14,118215,118216],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,118218,118219],{},"分析结果列如下：",[14,118221,118222],{},"Line行号",[14,118224,118225],{},"Mem usage内存使用大小",[14,118227,118228],{},"increment内存增量",[14,118230,118231],{},"Line content代码内容",[14,118233,118234],{},"补充说明：",[14,118236,118237],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,118239,116503],{},[14,118241,118242],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,118244,118245],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,118247,118248],{},[23,118249],{"alt":25,"src":118250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,118252,118253],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,118255,118256],{},"这时候需要重新加载模块",[151,118258,118260],{"className":53900,"code":118259,"language":53902,"meta":25,"style":25},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[49,118261,118262,118267,118274,118279],{"__ignoreMap":25},[159,118263,118264],{"class":161,"line":162},[159,118265,118266],{"class":1135},"#重新加载模块\n",[159,118268,118269,118271],{"class":161,"line":176},[159,118270,53914],{"class":1142},[159,118272,118273],{"class":165}," importlib\n",[159,118275,118276],{"class":161,"line":203},[159,118277,118278],{"class":165},"importlib.reload(mprun_test)\n",[159,118280,118281,118283,118286,118288],{"class":161,"line":223},[159,118282,1662],{"class":1142},[159,118284,118285],{"class":165},"mprun ",[159,118287,24376],{"class":1142},[159,118289,118290],{"class":165},"f mprun_test.fun_test mprun_test.fun_test()\n",[1468,118292,118293],{},"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":25,"searchDepth":176,"depth":176,"links":118295},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":118202,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":118302,"title":118303,"body":118304,"description":23809,"extension":23810,"meta":118321,"navigation":589,"path":118322,"seo":118323,"stem":118324,"__hash__":118325},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":118305,"toc":118319},[118306,118309,118314],[10,118307,118303],{"id":118308},"_3一维数组的索引和切片",[14,118310,118311],{},[23,118312],{"alt":25,"src":118313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,118315,118316],{},[23,118317],{"alt":25,"src":118318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":25,"searchDepth":176,"depth":176,"links":118320},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":118303,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":118327,"title":118328,"body":118329,"description":23809,"extension":23810,"meta":118812,"navigation":589,"path":118813,"seo":118814,"stem":118815,"__hash__":118816},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":118330,"toc":118810},[118331,118334,118337,118342,118375,118378,118416,118419,118453,118456,118561,118564,118601,118604,118705,118708,118759,118762,118804,118807],[10,118332,118328],{"id":118333},"_4二维数组的索引与切片",[14,118335,118336],{},"①获取指定单个元素",[14,118338,118339],{},[23,118340],{"alt":25,"src":118341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[151,118343,118345],{"className":53900,"code":118344,"language":53902,"meta":25,"style":25},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[49,118346,118347,118352,118357,118362],{"__ignoreMap":25},[159,118348,118349],{"class":161,"line":162},[159,118350,118351],{"class":1135},"#获取元素9\n",[159,118353,118354],{"class":161,"line":176},[159,118355,118356],{"class":1135},"#先获取所在行，再获取所在列\n",[159,118358,118359],{"class":161,"line":203},[159,118360,118361],{"class":1135},"#数组[行索引号，列索引号]\n",[159,118363,118364,118367,118369,118371,118373],{"class":161,"line":223},[159,118365,118366],{"class":165},"a[",[159,118368,4932],{"class":1146},[159,118370,24233],{"class":165},[159,118372,11034],{"class":1146},[159,118374,4634],{"class":165},[14,118376,118377],{},"②获取整行元素",[151,118379,118381],{"className":53900,"code":118380,"language":53902,"meta":25,"style":25},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[49,118382,118383,118388,118393,118401,118406],{"__ignoreMap":25},[159,118384,118385],{"class":161,"line":162},[159,118386,118387],{"class":1135},"#获取整行 数组[行索引号]\n",[159,118389,118390],{"class":161,"line":176},[159,118391,118392],{"class":1135},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[159,118394,118395,118397,118399],{"class":161,"line":203},[159,118396,118366],{"class":165},[159,118398,11034],{"class":1146},[159,118400,4634],{"class":165},[159,118402,118403],{"class":161,"line":223},[159,118404,118405],{"class":1135},"#也可以负索引获取一行\n",[159,118407,118408,118410,118412,118414],{"class":161,"line":233},[159,118409,118366],{"class":165},[159,118411,24376],{"class":1142},[159,118413,4932],{"class":1146},[159,118415,4634],{"class":165},[14,118417,118418],{},"③获取整列元素",[151,118420,118422],{"className":53900,"code":118421,"language":53902,"meta":25,"style":25},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[49,118423,118424,118429,118438,118443],{"__ignoreMap":25},[159,118425,118426],{"class":161,"line":162},[159,118427,118428],{"class":1135},"#获取整列 数组名[:,列索引]\n",[159,118430,118431,118434,118436],{"class":161,"line":176},[159,118432,118433],{"class":165},"a[:,",[159,118435,11034],{"class":1146},[159,118437,4634],{"class":165},[159,118439,118440],{"class":161,"line":203},[159,118441,118442],{"class":1135},"#也可以负索引获取一列\n",[159,118444,118445,118447,118449,118451],{"class":161,"line":223},[159,118446,118433],{"class":165},[159,118448,24376],{"class":1142},[159,118450,4932],{"class":1146},[159,118452,4634],{"class":165},[14,118454,118455],{},"④部分行部分列的元素",[151,118457,118459],{"className":53900,"code":118458,"language":53902,"meta":25,"style":25},"#部分行部分列 数组名[行切片，列切片]\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",[49,118460,118461,118466,118476,118480,118484,118489,118494,118498,118510,118514,118518,118523,118528,118533,118538,118542,118547],{"__ignoreMap":25},[159,118462,118463],{"class":161,"line":162},[159,118464,118465],{"class":1135},"#部分行部分列 数组名[行切片，列切片]\n",[159,118467,118468,118471,118473],{"class":161,"line":176},[159,118469,118470],{"class":165},"a[:",[159,118472,11034],{"class":1146},[159,118474,118475],{"class":165},",:]\n",[159,118477,118478],{"class":161,"line":203},[159,118479,114864],{"class":1135},[159,118481,118482],{"class":161,"line":223},[159,118483,115228],{"class":192},[159,118485,118486],{"class":161,"line":233},[159,118487,118488],{"class":192},"array([[ 1,  2,  3,  4,  5,  6],\n",[159,118490,118491],{"class":161,"line":239},[159,118492,118493],{"class":192},"       [ 7,  8,  9, 10, 11, 12]])\n",[159,118495,118496],{"class":161,"line":245},[159,118497,115228],{"class":192},[159,118499,118500,118502,118504,118506,118508],{"class":161,"line":251},[159,118501,118433],{"class":165},[159,118503,4932],{"class":1146},[159,118505,20934],{"class":165},[159,118507,8866],{"class":1146},[159,118509,4634],{"class":165},[159,118511,118512],{"class":161,"line":261},[159,118513,114864],{"class":1135},[159,118515,118516],{"class":161,"line":603},[159,118517,115228],{"class":192},[159,118519,118520],{"class":161,"line":621},[159,118521,118522],{"class":192},"array([[ 2,  3,  4],\n",[159,118524,118525],{"class":161,"line":634},[159,118526,118527],{"class":192},"       [ 8,  9, 10],\n",[159,118529,118530],{"class":161,"line":640},[159,118531,118532],{"class":192},"       [14, 15, 16],\n",[159,118534,118535],{"class":161,"line":1075},[159,118536,118537],{"class":192},"       [20, 21, 22]])\n",[159,118539,118540],{"class":161,"line":1081},[159,118541,115228],{"class":192},[159,118543,118544],{"class":161,"line":1091},[159,118545,118546],{"class":1135},"#对列行同时进行切片，使用了step参数\n",[159,118548,118549,118552,118554,118557,118559],{"class":161,"line":1100},[159,118550,118551],{"class":165},"a[::",[159,118553,11034],{"class":1146},[159,118555,118556],{"class":165},",::",[159,118558,11034],{"class":1146},[159,118560,4634],{"class":165},[14,118562,118563],{},"⑤同时获取两个元素",[151,118565,118567],{"className":53900,"code":118566,"language":53902,"meta":25,"style":25},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[49,118568,118569,118574,118579],{"__ignoreMap":25},[159,118570,118571],{"class":161,"line":162},[159,118572,118573],{"class":1135},"#同时获取第三行第二列，第四行第一列\n",[159,118575,118576],{"class":161,"line":176},[159,118577,118578],{"class":1135},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[159,118580,118581,118584,118586,118588,118590,118592,118594,118596,118598],{"class":161,"line":203},[159,118582,118583],{"class":165},"a[(",[159,118585,11034],{"class":1146},[159,118587,24233],{"class":165},[159,118589,23949],{"class":1146},[159,118591,65642],{"class":165},[159,118593,4932],{"class":1146},[159,118595,24233],{"class":165},[159,118597,1489],{"class":1146},[159,118599,118600],{"class":165},")]\n",[14,118602,118603],{},"⑥切片，对行进行反向获取",[151,118605,118607],{"className":53900,"code":118606,"language":53902,"meta":25,"style":25},"#切片 对所有行进行反向获取\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",[49,118608,118609,118614,118624,118628,118632,118637,118642,118647,118652,118656,118661,118677,118681,118686,118691,118696,118701],{"__ignoreMap":25},[159,118610,118611],{"class":161,"line":162},[159,118612,118613],{"class":1135},"#切片 对所有行进行反向获取\n",[159,118615,118616,118618,118620,118622],{"class":161,"line":176},[159,118617,118551],{"class":165},[159,118619,24376],{"class":1142},[159,118621,4932],{"class":1146},[159,118623,4634],{"class":165},[159,118625,118626],{"class":161,"line":203},[159,118627,114864],{"class":1135},[159,118629,118630],{"class":161,"line":223},[159,118631,115228],{"class":192},[159,118633,118634],{"class":161,"line":233},[159,118635,118636],{"class":192},"array([[19, 20, 21, 22, 23, 24],\n",[159,118638,118639],{"class":161,"line":239},[159,118640,118641],{"class":192},"       [13, 14, 15, 16, 17, 18],\n",[159,118643,118644],{"class":161,"line":245},[159,118645,118646],{"class":192},"       [ 7,  8,  9, 10, 11, 12],\n",[159,118648,118649],{"class":161,"line":251},[159,118650,118651],{"class":192},"       [ 1,  2,  3,  4,  5,  6]])\n",[159,118653,118654],{"class":161,"line":261},[159,118655,115228],{"class":192},[159,118657,118658],{"class":161,"line":603},[159,118659,118660],{"class":1135},"#对行列都进行反向切片获取\n",[159,118662,118663,118665,118667,118669,118671,118673,118675],{"class":161,"line":621},[159,118664,118551],{"class":165},[159,118666,24376],{"class":1142},[159,118668,4932],{"class":1146},[159,118670,118556],{"class":165},[159,118672,24376],{"class":1142},[159,118674,4932],{"class":1146},[159,118676,4634],{"class":165},[159,118678,118679],{"class":161,"line":634},[159,118680,115228],{"class":192},[159,118682,118683],{"class":161,"line":640},[159,118684,118685],{"class":192},"array([[24, 23, 22, 21, 20, 19],\n",[159,118687,118688],{"class":161,"line":1075},[159,118689,118690],{"class":192},"       [18, 17, 16, 15, 14, 13],\n",[159,118692,118693],{"class":161,"line":1081},[159,118694,118695],{"class":192},"       [12, 11, 10,  9,  8,  7],\n",[159,118697,118698],{"class":161,"line":1091},[159,118699,118700],{"class":192},"       [ 6,  5,  4,  3,  2,  1]])\n",[159,118702,118703],{"class":161,"line":1100},[159,118704,115228],{"class":192},[14,118706,118707],{},"⑦修改元素",[151,118709,118711],{"className":53900,"code":118710,"language":53902,"meta":25,"style":25},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[49,118712,118713,118718,118736,118741],{"__ignoreMap":25},[159,118714,118715],{"class":161,"line":162},[159,118716,118717],{"class":1135},"#获取前两行和前两列\n",[159,118719,118720,118723,118725,118727,118729,118732,118734],{"class":161,"line":176},[159,118721,118722],{"class":165},"sub_a",[159,118724,189],{"class":1142},[159,118726,118470],{"class":165},[159,118728,11034],{"class":1146},[159,118730,118731],{"class":165},",:",[159,118733,11034],{"class":1146},[159,118735,4634],{"class":165},[159,118737,118738],{"class":161,"line":203},[159,118739,118740],{"class":1135},"#修改sub_a第一个元素的值\n",[159,118742,118743,118746,118748,118750,118752,118754,118756],{"class":161,"line":223},[159,118744,118745],{"class":165},"sub_a[",[159,118747,1489],{"class":1146},[159,118749,24233],{"class":165},[159,118751,1489],{"class":1146},[159,118753,18375],{"class":165},[159,118755,189],{"class":1142},[159,118757,118758],{"class":1146},"100\n",[14,118760,118761],{},"⑧数组复制copy()",[151,118763,118765],{"className":53900,"code":118764,"language":53902,"meta":25,"style":25},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[49,118766,118767,118772,118782,118787],{"__ignoreMap":25},[159,118768,118769],{"class":161,"line":162},[159,118770,118771],{"class":1135},"#数组复制\n",[159,118773,118774,118777,118779],{"class":161,"line":176},[159,118775,118776],{"class":165},"copy_a",[159,118778,189],{"class":1142},[159,118780,118781],{"class":165},"np.copy(sub_a)\n",[159,118783,118784],{"class":161,"line":203},[159,118785,118786],{"class":1135},"#修改copy_a后不影响原数组\n",[159,118788,118789,118792,118794,118796,118798,118800,118802],{"class":161,"line":223},[159,118790,118791],{"class":165},"copy_a[",[159,118793,1489],{"class":1146},[159,118795,24233],{"class":165},[159,118797,1489],{"class":1146},[159,118799,18375],{"class":165},[159,118801,189],{"class":1142},[159,118803,118758],{"class":1146},[14,118805,118806],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1468,118808,118809],{},"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":25,"searchDepth":176,"depth":176,"links":118811},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":118328,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":118818,"title":118819,"body":118820,"description":23809,"extension":23810,"meta":119312,"navigation":589,"path":119313,"seo":119314,"stem":119315,"__hash__":119316},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":118821,"toc":119304},[118822,118825,118829,118832,118835,118888,118891,118916,118919,118938,118958,118961,118977,118981,119027,119031,119073,119077,119080,119083,119086,119089,119092,119154,119214,119218,119221,119278,119282,119287,119296,119301],[10,118823,118819],{"id":118824},"_5改变数组的维度",[37,118826,118828],{"id":118827},"_51-使用reshape","5.1 使用reshape()",[14,118830,118831],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,118833,118834],{},"①一维数组转换为二维数组",[151,118836,118838],{"className":53900,"code":118837,"language":53902,"meta":25,"style":25},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[49,118839,118840,118856,118861,118866,118871],{"__ignoreMap":25},[159,118841,118842,118844,118846,118848,118850,118852,118854],{"class":161,"line":162},[159,118843,8085],{"class":165},[159,118845,189],{"class":1142},[159,118847,114302],{"class":165},[159,118849,4932],{"class":1146},[159,118851,24233],{"class":165},[159,118853,19665],{"class":1146},[159,118855,1165],{"class":165},[159,118857,118858],{"class":161,"line":176},[159,118859,118860],{"class":1135},"#将一维数组进行转换\n",[159,118862,118863],{"class":161,"line":203},[159,118864,118865],{"class":1135},"#注意点：元素个数不可以变\n",[159,118867,118868],{"class":161,"line":223},[159,118869,118870],{"class":1135},"#转换维度要保持一致，不一致就异常！！！\n",[159,118872,118873,118875,118877,118880,118882,118884,118886],{"class":161,"line":233},[159,118874,114606],{"class":165},[159,118876,189],{"class":1142},[159,118878,118879],{"class":165},"a.reshape(",[159,118881,11034],{"class":1146},[159,118883,24233],{"class":165},[159,118885,7907],{"class":1146},[159,118887,1165],{"class":165},[14,118889,118890],{},"②一维数组转换为三维数组",[151,118892,118894],{"className":53900,"code":118893,"language":53902,"meta":25,"style":25},"aaa=a.reshape(2,3,2)\n",[49,118895,118896],{"__ignoreMap":25},[159,118897,118898,118900,118902,118904,118906,118908,118910,118912,118914],{"class":161,"line":162},[159,118899,116821],{"class":165},[159,118901,189],{"class":1142},[159,118903,118879],{"class":165},[159,118905,11034],{"class":1146},[159,118907,24233],{"class":165},[159,118909,23949],{"class":1146},[159,118911,24233],{"class":165},[159,118913,11034],{"class":1146},[159,118915,1165],{"class":165},[14,118917,118918],{},"③二维数组转化为一维数组",[151,118920,118922],{"className":53900,"code":118921,"language":53902,"meta":25,"style":25},"#知道元素个数：\naa.reshape(12)\n",[49,118923,118924,118929],{"__ignoreMap":25},[159,118925,118926],{"class":161,"line":162},[159,118927,118928],{"class":1135},"#知道元素个数：\n",[159,118930,118931,118934,118936],{"class":161,"line":176},[159,118932,118933],{"class":165},"aa.reshape(",[159,118935,7925],{"class":1146},[159,118937,1165],{"class":165},[151,118939,118941],{"className":53900,"code":118940,"language":53902,"meta":25,"style":25},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[49,118942,118943,118948],{"__ignoreMap":25},[159,118944,118945],{"class":161,"line":162},[159,118946,118947],{"class":1135},"#不知道元素个数，参数传递-1\n",[159,118949,118950,118952,118954,118956],{"class":161,"line":176},[159,118951,118933],{"class":165},[159,118953,24376],{"class":1142},[159,118955,4932],{"class":1146},[159,118957,1165],{"class":165},[14,118959,118960],{},"④三维数组转换为一维数组",[151,118962,118964],{"className":53900,"code":118963,"language":53902,"meta":25,"style":25},"aaa.reshape(-1)\n",[49,118965,118966],{"__ignoreMap":25},[159,118967,118968,118971,118973,118975],{"class":161,"line":162},[159,118969,118970],{"class":165},"aaa.reshape(",[159,118972,24376],{"class":1142},[159,118974,4932],{"class":1146},[159,118976,1165],{"class":165},[37,118978,118980],{"id":118979},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[151,118982,118984],{"className":53900,"code":118983,"language":53902,"meta":25,"style":25},"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",[49,118985,118986,119013,119018,119022],{"__ignoreMap":25},[159,118987,118988,118990,118992,118994,118996,118998,119000,119002,119004,119006,119008,119010],{"class":161,"line":162},[159,118989,114606],{"class":165},[159,118991,189],{"class":1142},[159,118993,114302],{"class":165},[159,118995,4932],{"class":1146},[159,118997,24233],{"class":165},[159,118999,19665],{"class":1146},[159,119001,114307],{"class":165},[159,119003,11034],{"class":1146},[159,119005,24233],{"class":165},[159,119007,7907],{"class":1146},[159,119009,18387],{"class":165},[159,119011,119012],{"class":1135},"#转换为2行6列的数组\n",[159,119014,119015],{"class":161,"line":176},[159,119016,119017],{"class":165},"aa.revel()\n",[159,119019,119020],{"class":161,"line":203},[159,119021,114864],{"class":1135},[159,119023,119024],{"class":161,"line":223},[159,119025,119026],{"class":1135},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[37,119028,119030],{"id":119029},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[151,119032,119034],{"className":53900,"code":119033,"language":53902,"meta":25,"style":25},"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",[49,119035,119036,119060,119065,119069],{"__ignoreMap":25},[159,119037,119038,119040,119042,119044,119046,119048,119050,119052,119054,119056,119058],{"class":161,"line":162},[159,119039,114606],{"class":165},[159,119041,189],{"class":1142},[159,119043,114302],{"class":165},[159,119045,4932],{"class":1146},[159,119047,24233],{"class":165},[159,119049,19665],{"class":1146},[159,119051,114307],{"class":165},[159,119053,11034],{"class":1146},[159,119055,24233],{"class":165},[159,119057,7907],{"class":1146},[159,119059,1165],{"class":165},[159,119061,119062],{"class":161,"line":176},[159,119063,119064],{"class":165},"aa.flatten()\n",[159,119066,119067],{"class":161,"line":203},[159,119068,114864],{"class":1135},[159,119070,119071],{"class":161,"line":223},[159,119072,119026],{"class":1135},[37,119074,119076],{"id":119075},"_54-使用resize","5.4 使用resize()",[14,119078,119079],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,119081,119082],{},"通过resize方法可以改变数组的维度",[14,119084,119085],{},"#resize修改数组维度",[14,119087,119088],{},"#以元组的形式指定形状",[14,119090,119091],{},"#改变的是原数组",[151,119093,119095],{"className":53900,"code":119094,"language":53902,"meta":25,"style":25},"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",[49,119096,119097,119113,119133,119146,119150],{"__ignoreMap":25},[159,119098,119099,119101,119103,119105,119107,119109,119111],{"class":161,"line":162},[159,119100,8085],{"class":165},[159,119102,189],{"class":1142},[159,119104,114302],{"class":165},[159,119106,4932],{"class":1146},[159,119108,24233],{"class":165},[159,119110,19665],{"class":1146},[159,119112,1165],{"class":165},[159,119114,119115,119118,119120,119122,119124,119126,119128,119130],{"class":161,"line":176},[159,119116,119117],{"class":165},"a.shape",[159,119119,189],{"class":1142},[159,119121,1159],{"class":165},[159,119123,11034],{"class":1146},[159,119125,24233],{"class":165},[159,119127,7907],{"class":1146},[159,119129,18387],{"class":165},[159,119131,119132],{"class":1135},"#改变了原数组\n",[159,119134,119135,119137,119139,119142,119144],{"class":161,"line":203},[159,119136,8085],{"class":165},[159,119138,189],{"class":1142},[159,119140,119141],{"class":165},"resize((",[159,119143,7925],{"class":1146},[159,119145,18787],{"class":165},[159,119147,119148],{"class":161,"line":223},[159,119149,114864],{"class":1135},[159,119151,119152],{"class":161,"line":233},[159,119153,119026],{"class":1135},[151,119155,119157],{"className":53900,"code":119156,"language":53902,"meta":25,"style":25},"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",[49,119158,119159,119172,119176,119180,119185,119190,119195,119200,119205,119210],{"__ignoreMap":25},[159,119160,119161,119164,119166,119168,119170],{"class":161,"line":162},[159,119162,119163],{"class":165},"a.resize((",[159,119165,7907],{"class":1146},[159,119167,24233],{"class":165},[159,119169,11034],{"class":1146},[159,119171,18787],{"class":165},[159,119173,119174],{"class":161,"line":176},[159,119175,114864],{"class":1135},[159,119177,119178],{"class":161,"line":203},[159,119179,115228],{"class":192},[159,119181,119182],{"class":161,"line":223},[159,119183,119184],{"class":192},"array([[ 1,  2],\n",[159,119186,119187],{"class":161,"line":233},[159,119188,119189],{"class":192},"       [ 3,  4],\n",[159,119191,119192],{"class":161,"line":239},[159,119193,119194],{"class":192},"       [ 5,  6],\n",[159,119196,119197],{"class":161,"line":245},[159,119198,119199],{"class":192},"       [ 7,  8],\n",[159,119201,119202],{"class":161,"line":251},[159,119203,119204],{"class":192},"       [ 9, 10],\n",[159,119206,119207],{"class":161,"line":261},[159,119208,119209],{"class":192},"       [11, 12]])\n",[159,119211,119212],{"class":161,"line":603},[159,119213,115228],{"class":192},[37,119215,119217],{"id":119216},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,119219,119220],{},"改变了原数组",[151,119222,119224],{"className":53900,"code":119223,"language":53902,"meta":25,"style":25},"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",[49,119225,119226,119242,119258,119262,119266,119270,119274],{"__ignoreMap":25},[159,119227,119228,119230,119232,119234,119236,119238,119240],{"class":161,"line":162},[159,119229,8085],{"class":165},[159,119231,189],{"class":1142},[159,119233,114302],{"class":165},[159,119235,4932],{"class":1146},[159,119237,24233],{"class":165},[159,119239,19665],{"class":1146},[159,119241,1165],{"class":165},[159,119243,119244,119246,119248,119250,119252,119254,119256],{"class":161,"line":176},[159,119245,119117],{"class":165},[159,119247,189],{"class":1142},[159,119249,1159],{"class":165},[159,119251,11034],{"class":1146},[159,119253,24233],{"class":165},[159,119255,7907],{"class":1146},[159,119257,1165],{"class":165},[159,119259,119260],{"class":161,"line":203},[159,119261,114864],{"class":1135},[159,119263,119264],{"class":161,"line":223},[159,119265,115228],{"class":192},[159,119267,119268],{"class":161,"line":233},[159,119269,118488],{"class":192},[159,119271,119272],{"class":161,"line":239},[159,119273,118493],{"class":192},[159,119275,119276],{"class":161,"line":245},[159,119277,115228],{"class":192},[37,119279,119281],{"id":119280},"_56-重要比较","5.6 重要比较：",[14,119283,119284],{},[23,119285],{"alt":25,"src":119286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,119288,119289,119290,119292,119293,119295],{},"口诀：NumPy 函数要么用 ",[49,119291,117263],{},"，要么用 ",[49,119294,55015],{},"，创建结构用 shape，造数据用 size",[14,119297,119298],{},[23,119299],{"alt":25,"src":119300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1468,119302,119303],{},"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":25,"searchDepth":176,"depth":176,"links":119305},[119306,119307,119308,119309,119310,119311],{"id":118827,"depth":176,"text":118828},{"id":118979,"depth":176,"text":118980},{"id":119029,"depth":176,"text":119030},{"id":119075,"depth":176,"text":119076},{"id":119216,"depth":176,"text":119217},{"id":119280,"depth":176,"text":119281},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":118819,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":119318,"title":119319,"body":119320,"description":23809,"extension":23810,"meta":120392,"navigation":589,"path":120393,"seo":120394,"stem":120395,"__hash__":120396},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":119321,"toc":120386},[119322,119325,119329,119332,119335,119338,119403,119406,119446,119449,119531,119534,119539,119561,119563,119568,119573,119576,119579,119734,119737,119939,119943,119946,119949,120017,120019,120024,120027,120030,120110,120114,120117,120119,120192,120194,120199,120201,120281,120285,120288,120291,120294,120297,120300,120303,120383],[10,119323,119319],{"id":119324},"_6数组的拼接",[37,119326,119328],{"id":119327},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,119330,119331],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,119333,119334],{},"函数内部传两个数列构成的数列或者元组",[14,119336,119337],{},"①一维数组的拼接",[151,119339,119341],{"className":53900,"code":119340,"language":53902,"meta":25,"style":25},"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",[49,119342,119343,119363,119383,119388,119393,119398],{"__ignoreMap":25},[159,119344,119345,119347,119349,119351,119353,119355,119357,119359,119361],{"class":161,"line":162},[159,119346,8085],{"class":165},[159,119348,189],{"class":1142},[159,119350,114324],{"class":165},[159,119352,4932],{"class":1146},[159,119354,24233],{"class":165},[159,119356,11034],{"class":1146},[159,119358,24233],{"class":165},[159,119360,23949],{"class":1146},[159,119362,28275],{"class":165},[159,119364,119365,119367,119369,119371,119373,119375,119377,119379,119381],{"class":161,"line":176},[159,119366,24127],{"class":165},[159,119368,189],{"class":1142},[159,119370,114324],{"class":165},[159,119372,8866],{"class":1146},[159,119374,24233],{"class":165},[159,119376,1753],{"class":1146},[159,119378,24233],{"class":165},[159,119380,7907],{"class":1146},[159,119382,28275],{"class":165},[159,119384,119385],{"class":161,"line":203},[159,119386,119387],{"class":1135},"#调用concatenate进行数组拼接\n",[159,119389,119390],{"class":161,"line":223},[159,119391,119392],{"class":165},"np.concatenate((a,b))\n",[159,119394,119395],{"class":161,"line":233},[159,119396,119397],{"class":1135},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[159,119399,119400],{"class":161,"line":239},[159,119401,119402],{"class":1135},"#np.concatenate([a,b])\n",[14,119404,119405],{},"②一维多个数组拼接",[151,119407,119409],{"className":53900,"code":119408,"language":53902,"meta":25,"style":25},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[49,119410,119411,119416,119436,119441],{"__ignoreMap":25},[159,119412,119413],{"class":161,"line":162},[159,119414,119415],{"class":1135},"#也可以多个数组进行拼接\n",[159,119417,119418,119420,119422,119424,119426,119428,119430,119432,119434],{"class":161,"line":176},[159,119419,24151],{"class":165},[159,119421,189],{"class":1142},[159,119423,114324],{"class":165},[159,119425,1964],{"class":1146},[159,119427,24233],{"class":165},[159,119429,5850],{"class":1146},[159,119431,24233],{"class":165},[159,119433,19665],{"class":1146},[159,119435,28275],{"class":165},[159,119437,119438],{"class":161,"line":203},[159,119439,119440],{"class":165},"c\n",[159,119442,119443],{"class":161,"line":223},[159,119444,119445],{"class":165},"np.concatenate((a,b,c))\n",[14,119447,119448],{},"③二维数组拼接",[151,119450,119452],{"className":53900,"code":119451,"language":53902,"meta":25,"style":25},"#二维数组使用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",[49,119453,119454,119459,119483,119508,119513,119518],{"__ignoreMap":25},[159,119455,119456],{"class":161,"line":162},[159,119457,119458],{"class":1135},"#二维数组使用concatenate进行拼接\n",[159,119460,119461,119463,119465,119467,119469,119471,119473,119475,119477,119479,119481],{"class":161,"line":176},[159,119462,114606],{"class":165},[159,119464,189],{"class":1142},[159,119466,114302],{"class":165},[159,119468,4932],{"class":1146},[159,119470,24233],{"class":165},[159,119472,19665],{"class":1146},[159,119474,114307],{"class":165},[159,119476,23949],{"class":1146},[159,119478,24233],{"class":165},[159,119480,8866],{"class":1146},[159,119482,1165],{"class":165},[159,119484,119485,119488,119490,119492,119494,119496,119498,119500,119502,119504,119506],{"class":161,"line":203},[159,119486,119487],{"class":165},"bb",[159,119489,189],{"class":1142},[159,119491,114302],{"class":165},[159,119493,24194],{"class":1146},[159,119495,24233],{"class":165},[159,119497,24478],{"class":1146},[159,119499,114307],{"class":165},[159,119501,23949],{"class":1146},[159,119503,24233],{"class":165},[159,119505,8866],{"class":1146},[159,119507,1165],{"class":165},[159,119509,119510],{"class":161,"line":223},[159,119511,119512],{"class":1135},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[159,119514,119515],{"class":161,"line":233},[159,119516,119517],{"class":1135},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[159,119519,119520,119523,119525,119527,119529],{"class":161,"line":239},[159,119521,119522],{"class":165},"np.concatenate((aa,bb),",[159,119524,70907],{"class":8765},[159,119526,189],{"class":1142},[159,119528,1489],{"class":1146},[159,119530,1165],{"class":165},[14,119532,119533],{},"结果：",[14,119535,119536],{},[23,119537],{"alt":25,"src":119538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[151,119540,119542],{"className":53900,"code":119541,"language":53902,"meta":25,"style":25},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[49,119543,119544,119549],{"__ignoreMap":25},[159,119545,119546],{"class":161,"line":162},[159,119547,119548],{"class":1135},"#指定axis为1进行拼接\n",[159,119550,119551,119553,119555,119557,119559],{"class":161,"line":176},[159,119552,119522],{"class":165},[159,119554,70907],{"class":8765},[159,119556,189],{"class":1142},[159,119558,4932],{"class":1146},[159,119560,1165],{"class":165},[14,119562,119533],{},[14,119564,119565],{},[23,119566],{"alt":25,"src":119567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,119569,119570],{},[61,119571,119572],{},"二维数组总结：0竖着方向，1横着方向",[14,119574,119575],{},"④三维数组拼接",[14,119577,119578],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[151,119580,119582],{"className":53900,"code":119581,"language":53902,"meta":25,"style":25},"#两个三行六列\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",[49,119583,119584,119589,119617,119647,119652,119669,119674,119679,119684,119701,119706,119711,119716,119729],{"__ignoreMap":25},[159,119585,119586],{"class":161,"line":162},[159,119587,119588],{"class":1135},"#两个三行六列\n",[159,119590,119591,119593,119595,119597,119599,119601,119603,119605,119607,119609,119611,119613,119615],{"class":161,"line":176},[159,119592,116821],{"class":165},[159,119594,189],{"class":1142},[159,119596,114302],{"class":165},[159,119598,4932],{"class":1146},[159,119600,24233],{"class":165},[159,119602,24183],{"class":1146},[159,119604,114307],{"class":165},[159,119606,11034],{"class":1146},[159,119608,24233],{"class":165},[159,119610,23949],{"class":1146},[159,119612,24233],{"class":165},[159,119614,7907],{"class":1146},[159,119616,1165],{"class":165},[159,119618,119619,119622,119624,119626,119628,119630,119633,119635,119637,119639,119641,119643,119645],{"class":161,"line":203},[159,119620,119621],{"class":165},"bbb",[159,119623,189],{"class":1142},[159,119625,114302],{"class":165},[159,119627,24194],{"class":1146},[159,119629,24233],{"class":165},[159,119631,119632],{"class":1146},"137",[159,119634,114307],{"class":165},[159,119636,11034],{"class":1146},[159,119638,24233],{"class":165},[159,119640,23949],{"class":1146},[159,119642,24233],{"class":165},[159,119644,7907],{"class":1146},[159,119646,1165],{"class":165},[159,119648,119649],{"class":161,"line":223},[159,119650,119651],{"class":1135},"#axis=0\n",[159,119653,119654,119656,119658,119661,119663,119665,119667],{"class":161,"line":233},[159,119655,8909],{"class":165},[159,119657,189],{"class":1142},[159,119659,119660],{"class":165},"np.concatenate((aaa,bbb),",[159,119662,70907],{"class":8765},[159,119664,189],{"class":1142},[159,119666,1489],{"class":1146},[159,119668,1165],{"class":165},[159,119670,119671],{"class":161,"line":239},[159,119672,119673],{"class":165},"s.shape\n",[159,119675,119676],{"class":161,"line":245},[159,119677,119678],{"class":1135},"#输出：(4,3,6)\n",[159,119680,119681],{"class":161,"line":251},[159,119682,119683],{"class":1135},"#axis=1\n",[159,119685,119686,119689,119691,119693,119695,119697,119699],{"class":161,"line":261},[159,119687,119688],{"class":165},"ss",[159,119690,189],{"class":1142},[159,119692,119660],{"class":165},[159,119694,70907],{"class":8765},[159,119696,189],{"class":1142},[159,119698,4932],{"class":1146},[159,119700,1165],{"class":165},[159,119702,119703],{"class":161,"line":603},[159,119704,119705],{"class":165},"ss.shape\n",[159,119707,119708],{"class":161,"line":621},[159,119709,119710],{"class":1135},"#输出：(2,6,6)\n",[159,119712,119713],{"class":161,"line":634},[159,119714,119715],{"class":1135},"#axis=2\n",[159,119717,119718,119720,119722,119724,119726],{"class":161,"line":640},[159,119719,119660],{"class":165},[159,119721,70907],{"class":8765},[159,119723,189],{"class":1142},[159,119725,11034],{"class":1146},[159,119727,119728],{"class":165},").shape\n",[159,119730,119731],{"class":161,"line":1075},[159,119732,119733],{"class":1135},"#输出：（2，3，12）\n",[14,119735,119736],{},"⑤四维数组拼接",[151,119738,119740],{"className":53900,"code":119739,"language":53902,"meta":25,"style":25},"#两个三行六列\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",[49,119741,119742,119746,119774,119802,119827,119853,119857,119870,119875,119879,119891,119896,119900,119912,119917,119922,119934],{"__ignoreMap":25},[159,119743,119744],{"class":161,"line":162},[159,119745,119588],{"class":1135},[159,119747,119748,119750,119752,119754,119756,119758,119760,119762,119764,119766,119768,119770,119772],{"class":161,"line":176},[159,119749,116821],{"class":165},[159,119751,189],{"class":1142},[159,119753,114302],{"class":165},[159,119755,4932],{"class":1146},[159,119757,24233],{"class":165},[159,119759,24183],{"class":1146},[159,119761,114307],{"class":165},[159,119763,11034],{"class":1146},[159,119765,24233],{"class":165},[159,119767,23949],{"class":1146},[159,119769,24233],{"class":165},[159,119771,7907],{"class":1146},[159,119773,1165],{"class":165},[159,119775,119776,119778,119780,119782,119784,119786,119788,119790,119792,119794,119796,119798,119800],{"class":161,"line":203},[159,119777,119621],{"class":165},[159,119779,189],{"class":1142},[159,119781,114302],{"class":165},[159,119783,24194],{"class":1146},[159,119785,24233],{"class":165},[159,119787,119632],{"class":1146},[159,119789,114307],{"class":165},[159,119791,11034],{"class":1146},[159,119793,24233],{"class":165},[159,119795,23949],{"class":1146},[159,119797,24233],{"class":165},[159,119799,7907],{"class":1146},[159,119801,1165],{"class":165},[159,119803,119804,119807,119809,119811,119813,119815,119817,119819,119821,119823,119825],{"class":161,"line":223},[159,119805,119806],{"class":165},"aaaa",[159,119808,189],{"class":1142},[159,119810,118970],{"class":165},[159,119812,11034],{"class":1146},[159,119814,24233],{"class":165},[159,119816,23949],{"class":1146},[159,119818,24233],{"class":165},[159,119820,23949],{"class":1146},[159,119822,24233],{"class":165},[159,119824,11034],{"class":1146},[159,119826,1165],{"class":165},[159,119828,119829,119832,119834,119837,119839,119841,119843,119845,119847,119849,119851],{"class":161,"line":233},[159,119830,119831],{"class":165},"bbbb",[159,119833,189],{"class":1142},[159,119835,119836],{"class":165},"bbb.reshape(",[159,119838,11034],{"class":1146},[159,119840,24233],{"class":165},[159,119842,23949],{"class":1146},[159,119844,24233],{"class":165},[159,119846,23949],{"class":1146},[159,119848,24233],{"class":165},[159,119850,11034],{"class":1146},[159,119852,1165],{"class":165},[159,119854,119855],{"class":161,"line":239},[159,119856,119651],{"class":1135},[159,119858,119859,119862,119864,119866,119868],{"class":161,"line":245},[159,119860,119861],{"class":165},"np.concatenate((aaaa,bbbb),",[159,119863,70907],{"class":8765},[159,119865,189],{"class":1142},[159,119867,1489],{"class":1146},[159,119869,119728],{"class":165},[159,119871,119872],{"class":161,"line":251},[159,119873,119874],{"class":1135},"#结果：（4，3，3，2）\n",[159,119876,119877],{"class":161,"line":261},[159,119878,119683],{"class":1135},[159,119880,119881,119883,119885,119887,119889],{"class":161,"line":603},[159,119882,119861],{"class":165},[159,119884,70907],{"class":8765},[159,119886,189],{"class":1142},[159,119888,4932],{"class":1146},[159,119890,119728],{"class":165},[159,119892,119893],{"class":161,"line":621},[159,119894,119895],{"class":1135},"#结果：（2，6，3，2）\n",[159,119897,119898],{"class":161,"line":634},[159,119899,119715],{"class":1135},[159,119901,119902,119904,119906,119908,119910],{"class":161,"line":640},[159,119903,119861],{"class":165},[159,119905,70907],{"class":8765},[159,119907,189],{"class":1142},[159,119909,11034],{"class":1146},[159,119911,119728],{"class":165},[159,119913,119914],{"class":161,"line":1075},[159,119915,119916],{"class":1135},"#结果：（2，3，6，2）\n",[159,119918,119919],{"class":161,"line":1081},[159,119920,119921],{"class":1135},"#axis=3\n",[159,119923,119924,119926,119928,119930,119932],{"class":161,"line":1091},[159,119925,119861],{"class":165},[159,119927,70907],{"class":8765},[159,119929,189],{"class":1142},[159,119931,23949],{"class":1146},[159,119933,119728],{"class":165},[159,119935,119936],{"class":161,"line":1100},[159,119937,119938],{"class":1135},"#结果：（2，3，3，4）\n",[37,119940,119942],{"id":119941},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,119944,119945],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,119947,119948],{},"①二维数组",[151,119950,119952],{"className":53900,"code":119951,"language":53902,"meta":25,"style":25},"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",[49,119953,119954,119978,120002,120007,120012],{"__ignoreMap":25},[159,119955,119956,119958,119960,119962,119964,119966,119968,119970,119972,119974,119976],{"class":161,"line":162},[159,119957,114606],{"class":165},[159,119959,189],{"class":1142},[159,119961,114302],{"class":165},[159,119963,4932],{"class":1146},[159,119965,24233],{"class":165},[159,119967,19665],{"class":1146},[159,119969,114307],{"class":165},[159,119971,23949],{"class":1146},[159,119973,24233],{"class":165},[159,119975,8866],{"class":1146},[159,119977,1165],{"class":165},[159,119979,119980,119982,119984,119986,119988,119990,119992,119994,119996,119998,120000],{"class":161,"line":176},[159,119981,119487],{"class":165},[159,119983,189],{"class":1142},[159,119985,114302],{"class":165},[159,119987,24194],{"class":1146},[159,119989,24233],{"class":165},[159,119991,24478],{"class":1146},[159,119993,114307],{"class":165},[159,119995,23949],{"class":1146},[159,119997,24233],{"class":165},[159,119999,8866],{"class":1146},[159,120001,1165],{"class":165},[159,120003,120004],{"class":161,"line":203},[159,120005,120006],{"class":165},"np.hstack((aa,bb))\n",[159,120008,120009],{"class":161,"line":223},[159,120010,120011],{"class":1135},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[159,120013,120014],{"class":161,"line":233},[159,120015,120016],{"class":1135},"#np.hstack([aa,bb])\n",[14,120018,119533],{},[14,120020,120021],{},[23,120022],{"alt":25,"src":120023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,120025,120026],{},"等效于concatenate()函数中axis=1时的情况",[14,120028,120029],{},"②三维数组",[151,120031,120033],{"className":53900,"code":120032,"language":53902,"meta":25,"style":25},"#两个三行六列\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",[49,120034,120035,120039,120067,120095,120100,120105],{"__ignoreMap":25},[159,120036,120037],{"class":161,"line":162},[159,120038,119588],{"class":1135},[159,120040,120041,120043,120045,120047,120049,120051,120053,120055,120057,120059,120061,120063,120065],{"class":161,"line":176},[159,120042,116821],{"class":165},[159,120044,189],{"class":1142},[159,120046,114302],{"class":165},[159,120048,4932],{"class":1146},[159,120050,24233],{"class":165},[159,120052,24183],{"class":1146},[159,120054,114307],{"class":165},[159,120056,11034],{"class":1146},[159,120058,24233],{"class":165},[159,120060,23949],{"class":1146},[159,120062,24233],{"class":165},[159,120064,7907],{"class":1146},[159,120066,1165],{"class":165},[159,120068,120069,120071,120073,120075,120077,120079,120081,120083,120085,120087,120089,120091,120093],{"class":161,"line":203},[159,120070,119621],{"class":165},[159,120072,189],{"class":1142},[159,120074,114302],{"class":165},[159,120076,24194],{"class":1146},[159,120078,24233],{"class":165},[159,120080,119632],{"class":1146},[159,120082,114307],{"class":165},[159,120084,11034],{"class":1146},[159,120086,24233],{"class":165},[159,120088,23949],{"class":1146},[159,120090,24233],{"class":165},[159,120092,7907],{"class":1146},[159,120094,1165],{"class":165},[159,120096,120097],{"class":161,"line":223},[159,120098,120099],{"class":1135},"#使用hstack\n",[159,120101,120102],{"class":161,"line":233},[159,120103,120104],{"class":165},"np.hstack((aaa,bbb)).shape\n",[159,120106,120107],{"class":161,"line":239},[159,120108,120109],{"class":1135},"#输出：（2，6，6）\n",[37,120111,120113],{"id":120112},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,120115,120116],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,120118,119948],{},[151,120120,120122],{"className":53900,"code":120121,"language":53902,"meta":25,"style":25},"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",[49,120123,120124,120148,120172,120177,120182,120187],{"__ignoreMap":25},[159,120125,120126,120128,120130,120132,120134,120136,120138,120140,120142,120144,120146],{"class":161,"line":162},[159,120127,114606],{"class":165},[159,120129,189],{"class":1142},[159,120131,114302],{"class":165},[159,120133,4932],{"class":1146},[159,120135,24233],{"class":165},[159,120137,19665],{"class":1146},[159,120139,114307],{"class":165},[159,120141,23949],{"class":1146},[159,120143,24233],{"class":165},[159,120145,8866],{"class":1146},[159,120147,1165],{"class":165},[159,120149,120150,120152,120154,120156,120158,120160,120162,120164,120166,120168,120170],{"class":161,"line":176},[159,120151,119487],{"class":165},[159,120153,189],{"class":1142},[159,120155,114302],{"class":165},[159,120157,24194],{"class":1146},[159,120159,24233],{"class":165},[159,120161,24478],{"class":1146},[159,120163,114307],{"class":165},[159,120165,23949],{"class":1146},[159,120167,24233],{"class":165},[159,120169,8866],{"class":1146},[159,120171,1165],{"class":165},[159,120173,120174],{"class":161,"line":203},[159,120175,120176],{"class":1135},"#vstack 垂直方向进行堆叠\n",[159,120178,120179],{"class":161,"line":223},[159,120180,120181],{"class":165},"np.vstack((aa,bb))\n",[159,120183,120184],{"class":161,"line":233},[159,120185,120186],{"class":1135},"#与hstack传的参数类似，等价于：\n",[159,120188,120189],{"class":161,"line":239},[159,120190,120191],{"class":165},"np.vstack([aa,bb])\n",[14,120193,119533],{},[14,120195,120196],{},[23,120197],{"alt":25,"src":120198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,120200,120029],{},[151,120202,120204],{"className":53900,"code":120203,"language":53902,"meta":25,"style":25},"#两个三行六列\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",[49,120205,120206,120210,120238,120266,120271,120276],{"__ignoreMap":25},[159,120207,120208],{"class":161,"line":162},[159,120209,119588],{"class":1135},[159,120211,120212,120214,120216,120218,120220,120222,120224,120226,120228,120230,120232,120234,120236],{"class":161,"line":176},[159,120213,116821],{"class":165},[159,120215,189],{"class":1142},[159,120217,114302],{"class":165},[159,120219,4932],{"class":1146},[159,120221,24233],{"class":165},[159,120223,24183],{"class":1146},[159,120225,114307],{"class":165},[159,120227,11034],{"class":1146},[159,120229,24233],{"class":165},[159,120231,23949],{"class":1146},[159,120233,24233],{"class":165},[159,120235,7907],{"class":1146},[159,120237,1165],{"class":165},[159,120239,120240,120242,120244,120246,120248,120250,120252,120254,120256,120258,120260,120262,120264],{"class":161,"line":203},[159,120241,119621],{"class":165},[159,120243,189],{"class":1142},[159,120245,114302],{"class":165},[159,120247,24194],{"class":1146},[159,120249,24233],{"class":165},[159,120251,119632],{"class":1146},[159,120253,114307],{"class":165},[159,120255,11034],{"class":1146},[159,120257,24233],{"class":165},[159,120259,23949],{"class":1146},[159,120261,24233],{"class":165},[159,120263,7907],{"class":1146},[159,120265,1165],{"class":165},[159,120267,120268],{"class":161,"line":223},[159,120269,120270],{"class":1135},"#使用vstack\n",[159,120272,120273],{"class":161,"line":233},[159,120274,120275],{"class":165},"np.vstack((aaa,bbb)).shape\n",[159,120277,120278],{"class":161,"line":239},[159,120279,120280],{"class":1135},"#输出：（4，3，6）\n",[37,120282,120284],{"id":120283},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,120286,120287],{},"该方法是三维数组特有的方法",[14,120289,120290],{},"也就是说",[14,120292,120293],{},"一维数组拼接方法用：concatenate()",[14,120295,120296],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,120298,120299],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,120301,120302],{},"四维数组及多维数组只能用concatenate进行拼接",[151,120304,120306],{"className":53900,"code":120305,"language":53902,"meta":25,"style":25},"#两个三行六列\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",[49,120307,120308,120312,120340,120368,120373,120378],{"__ignoreMap":25},[159,120309,120310],{"class":161,"line":162},[159,120311,119588],{"class":1135},[159,120313,120314,120316,120318,120320,120322,120324,120326,120328,120330,120332,120334,120336,120338],{"class":161,"line":176},[159,120315,116821],{"class":165},[159,120317,189],{"class":1142},[159,120319,114302],{"class":165},[159,120321,4932],{"class":1146},[159,120323,24233],{"class":165},[159,120325,24183],{"class":1146},[159,120327,114307],{"class":165},[159,120329,11034],{"class":1146},[159,120331,24233],{"class":165},[159,120333,23949],{"class":1146},[159,120335,24233],{"class":165},[159,120337,7907],{"class":1146},[159,120339,1165],{"class":165},[159,120341,120342,120344,120346,120348,120350,120352,120354,120356,120358,120360,120362,120364,120366],{"class":161,"line":203},[159,120343,119621],{"class":165},[159,120345,189],{"class":1142},[159,120347,114302],{"class":165},[159,120349,24194],{"class":1146},[159,120351,24233],{"class":165},[159,120353,119632],{"class":1146},[159,120355,114307],{"class":165},[159,120357,11034],{"class":1146},[159,120359,24233],{"class":165},[159,120361,23949],{"class":1146},[159,120363,24233],{"class":165},[159,120365,7907],{"class":1146},[159,120367,1165],{"class":165},[159,120369,120370],{"class":161,"line":223},[159,120371,120372],{"class":1135},"#使用dstack\n",[159,120374,120375],{"class":161,"line":233},[159,120376,120377],{"class":165},"np.dstack((aaa,bbb)).shape\n",[159,120379,120380],{"class":161,"line":239},[159,120381,120382],{"class":1135},"#结果：（2，3，12）\n",[1468,120384,120385],{},"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":25,"searchDepth":176,"depth":176,"links":120387},[120388,120389,120390,120391],{"id":119327,"depth":176,"text":119328},{"id":119941,"depth":176,"text":119942},{"id":120112,"depth":176,"text":120113},{"id":120283,"depth":176,"text":120284},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":119319,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":120398,"title":120399,"body":120400,"description":23809,"extension":23810,"meta":120675,"navigation":589,"path":120676,"seo":120677,"stem":120678,"__hash__":120679},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":120401,"toc":120673},[120402,120405,120408,120502,120505,120508,120511,120514,120517,120520,120523,120526,120670],[10,120403,120399],{"id":120404},"_7数组转置",[14,120406,120407],{},"使用transpose()函数",[151,120409,120411],{"className":53900,"code":120410,"language":53902,"meta":25,"style":25},"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",[49,120412,120413,120423,120447,120452,120457,120462,120467,120475,120479,120483,120488,120493,120498],{"__ignoreMap":25},[159,120414,120415,120417,120419,120421],{"class":161,"line":162},[159,120416,53914],{"class":1142},[159,120418,54900],{"class":165},[159,120420,54903],{"class":1142},[159,120422,54906],{"class":165},[159,120424,120425,120427,120429,120431,120433,120435,120437,120439,120441,120443,120445],{"class":161,"line":176},[159,120426,8085],{"class":165},[159,120428,189],{"class":1142},[159,120430,55236],{"class":165},[159,120432,4932],{"class":1146},[159,120434,24233],{"class":165},[159,120436,19665],{"class":1146},[159,120438,114307],{"class":165},[159,120440,8866],{"class":1146},[159,120442,24233],{"class":165},[159,120444,23949],{"class":1146},[159,120446,1165],{"class":165},[159,120448,120449],{"class":161,"line":203},[159,120450,120451],{"class":1135},"#二维数组转置\n",[159,120453,120454],{"class":161,"line":223},[159,120455,120456],{"class":1135},"#调用transpose()函数\n",[159,120458,120459],{"class":161,"line":233},[159,120460,120461],{"class":165},"a.transpose()\n",[159,120463,120464],{"class":161,"line":239},[159,120465,120466],{"class":1135},"#对于二维数组也可以采用.T来实现\n",[159,120468,120469,120472],{"class":161,"line":245},[159,120470,120471],{"class":165},"a.T",[159,120473,120474],{"class":1135},"#与上述代码一样\n",[159,120476,120477],{"class":161,"line":251},[159,120478,114864],{"class":1135},[159,120480,120481],{"class":161,"line":261},[159,120482,115228],{"class":192},[159,120484,120485],{"class":161,"line":603},[159,120486,120487],{"class":192},"array([[ 1,  4,  7, 10],\n",[159,120489,120490],{"class":161,"line":621},[159,120491,120492],{"class":192},"       [ 2,  5,  8, 11],\n",[159,120494,120495],{"class":161,"line":634},[159,120496,120497],{"class":192},"       [ 3,  6,  9, 12]])\n",[159,120499,120500],{"class":161,"line":640},[159,120501,115228],{"class":192},[14,120503,120504],{},"也可以使用np.transpose()的形式",[14,120506,120507],{},"#多维数组进行转置 np.transpose()",[14,120509,120510],{},"#对二维数组也可以使用np.transpose()进行转置",[14,120512,120513],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,120515,120516],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,120518,120519],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,120521,120522],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,120524,120525],{},"四维及以上的数组也是一样的道理",[151,120527,120529],{"className":53900,"code":120528,"language":53902,"meta":25,"style":25},"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",[49,120530,120531,120559,120564,120569,120574,120592,120597,120629,120634,120639,120644,120665],{"__ignoreMap":25},[159,120532,120533,120535,120537,120539,120541,120543,120545,120547,120549,120551,120553,120555,120557],{"class":161,"line":162},[159,120534,24648],{"class":165},[159,120536,189],{"class":1142},[159,120538,114302],{"class":165},[159,120540,4932],{"class":1146},[159,120542,24233],{"class":165},[159,120544,24183],{"class":1146},[159,120546,114307],{"class":165},[159,120548,23949],{"class":1146},[159,120550,24233],{"class":165},[159,120552,7907],{"class":1146},[159,120554,24233],{"class":165},[159,120556,11034],{"class":1146},[159,120558,1165],{"class":165},[159,120560,120561],{"class":161,"line":176},[159,120562,120563],{"class":165},"x.shape\n",[159,120565,120566],{"class":161,"line":203},[159,120567,120568],{"class":1135},"#结果：（3,6,2）\n",[159,120570,120571],{"class":161,"line":223},[159,120572,120573],{"class":1135},"#使用np.transpose()进行转置 变为(2,6,3)\n",[159,120575,120576,120579,120581,120583,120585,120587,120589],{"class":161,"line":233},[159,120577,120578],{"class":165},"np.transpose(x,(",[159,120580,11034],{"class":1146},[159,120582,24233],{"class":165},[159,120584,4932],{"class":1146},[159,120586,24233],{"class":165},[159,120588,1489],{"class":1146},[159,120590,120591],{"class":165},")).shape\n",[159,120593,120594],{"class":161,"line":239},[159,120595,120596],{"class":1135},"#结果：(2,6,3)\n",[159,120598,120599,120601,120603,120605,120607,120609,120611,120613,120615,120617,120619,120621,120623,120625,120627],{"class":161,"line":245},[159,120600,119806],{"class":165},[159,120602,189],{"class":1142},[159,120604,114302],{"class":165},[159,120606,4932],{"class":1146},[159,120608,24233],{"class":165},[159,120610,24183],{"class":1146},[159,120612,114307],{"class":165},[159,120614,23949],{"class":1146},[159,120616,24233],{"class":165},[159,120618,11034],{"class":1146},[159,120620,24233],{"class":165},[159,120622,4932],{"class":1146},[159,120624,24233],{"class":165},[159,120626,7907],{"class":1146},[159,120628,1165],{"class":165},[159,120630,120631],{"class":161,"line":251},[159,120632,120633],{"class":165},"aaaa.shape\n",[159,120635,120636],{"class":161,"line":261},[159,120637,120638],{"class":1135},"#结果：（3，2，1，6）\n",[159,120640,120641],{"class":161,"line":603},[159,120642,120643],{"class":1135},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[159,120645,120646,120649,120651,120653,120655,120657,120659,120661,120663],{"class":161,"line":621},[159,120647,120648],{"class":165},"np.transpose(aaaa,(",[159,120650,4932],{"class":1146},[159,120652,24233],{"class":165},[159,120654,11034],{"class":1146},[159,120656,24233],{"class":165},[159,120658,1489],{"class":1146},[159,120660,24233],{"class":165},[159,120662,23949],{"class":1146},[159,120664,120591],{"class":165},[159,120666,120667],{"class":161,"line":634},[159,120668,120669],{"class":1135},"#结果：(2,1,3,6)\n",[1468,120671,120672],{},"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":25,"searchDepth":176,"depth":176,"links":120674},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":120399,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":120681,"title":120682,"body":120683,"description":23809,"extension":23810,"meta":121417,"navigation":589,"path":121418,"seo":121419,"stem":121420,"__hash__":121421},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":120684,"toc":121415},[120685,120688,120691,120694,120697,120700,120703,120706,120709,120818,120821,120824,121412],[10,120686,120682],{"id":120687},"_8数组分割",[14,120689,120690],{},"split分割",[14,120692,120693],{},"numpy.split(ary,indics_or_sections,axis)",[14,120695,120696],{},"解释：",[14,120698,120699],{},"ary:被分割的数组",[14,120701,120702],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,120704,120705],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,120707,120708],{},"①一维数组的分割",[151,120710,120712],{"className":53900,"code":120711,"language":53902,"meta":25,"style":25},"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",[49,120713,120714,120730,120735,120744,120748,120753,120761,120765,120770,120775,120788,120792,120797,120809,120813],{"__ignoreMap":25},[159,120715,120716,120718,120720,120722,120724,120726,120728],{"class":161,"line":162},[159,120717,8085],{"class":165},[159,120719,189],{"class":1142},[159,120721,114302],{"class":165},[159,120723,4932],{"class":1146},[159,120725,24233],{"class":165},[159,120727,24273],{"class":1146},[159,120729,1165],{"class":165},[159,120731,120732],{"class":161,"line":176},[159,120733,120734],{"class":1135},"#如果传入整数，必须能够平分，否则会报错\n",[159,120736,120737,120740,120742],{"class":161,"line":203},[159,120738,120739],{"class":165},"np.split(a,",[159,120741,11034],{"class":1146},[159,120743,1165],{"class":165},[159,120745,120746],{"class":161,"line":223},[159,120747,114864],{"class":1135},[159,120749,120750],{"class":161,"line":233},[159,120751,120752],{"class":1135},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[159,120754,120755,120757,120759],{"class":161,"line":239},[159,120756,120739],{"class":165},[159,120758,8866],{"class":1146},[159,120760,1165],{"class":165},[159,120762,120763],{"class":161,"line":245},[159,120764,114864],{"class":1135},[159,120766,120767],{"class":161,"line":251},[159,120768,120769],{"class":1135},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[159,120771,120772],{"class":161,"line":261},[159,120773,120774],{"class":1135},"#传入数组\n",[159,120776,120777,120780,120782,120784,120786],{"class":161,"line":603},[159,120778,120779],{"class":165},"np.split(a,[",[159,120781,23949],{"class":1146},[159,120783,24233],{"class":165},[159,120785,1753],{"class":1146},[159,120787,28275],{"class":165},[159,120789,120790],{"class":161,"line":621},[159,120791,114864],{"class":1135},[159,120793,120794],{"class":161,"line":634},[159,120795,120796],{"class":1135},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[159,120798,120799,120801,120803,120805,120807],{"class":161,"line":640},[159,120800,120779],{"class":165},[159,120802,1753],{"class":1146},[159,120804,24233],{"class":165},[159,120806,24224],{"class":1146},[159,120808,28275],{"class":165},[159,120810,120811],{"class":161,"line":1075},[159,120812,114864],{"class":1135},[159,120814,120815],{"class":161,"line":1081},[159,120816,120817],{"class":1135},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,120819,120820],{},"②二维数组的分割",[14,120822,120823],{},"使用split()",[151,120825,120827],{"className":53900,"code":120826,"language":53902,"meta":25,"style":25},"#二维数组分割\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",[49,120828,120829,120834,120858,120863,120872,120876,120880,120885,120890,120895,120900,120905,120910,120915,120919,120932,120936,120940,120944,120948,120952,120957,120962,120967,120971,120976,120992,120996,121000,121005,121010,121015,121020,121025,121030,121035,121040,121045,121050,121055,121060,121065,121070,121075,121080,121085,121090,121094,121098,121118,121122,121126,121131,121136,121141,121146,121151,121156,121161,121166,121171,121176,121181,121186,121191,121196,121201,121206,121211,121216,121220,121225,121234,121238,121242,121246,121250,121254,121258,121262,121266,121270,121279,121283,121287,121291,121295,121299,121303,121307,121311,121315,121319,121323,121327,121331,121335,121339,121343,121347,121351,121355,121359,121363,121376,121380,121384,121388,121392,121396,121400,121404,121408],{"__ignoreMap":25},[159,120830,120831],{"class":161,"line":162},[159,120832,120833],{"class":1135},"#二维数组分割\n",[159,120835,120836,120838,120840,120842,120844,120846,120848,120850,120852,120854,120856],{"class":161,"line":176},[159,120837,114606],{"class":165},[159,120839,189],{"class":1142},[159,120841,114302],{"class":165},[159,120843,4932],{"class":1146},[159,120845,24233],{"class":165},[159,120847,24183],{"class":1146},[159,120849,114307],{"class":165},[159,120851,7907],{"class":1146},[159,120853,24233],{"class":165},[159,120855,7907],{"class":1146},[159,120857,1165],{"class":165},[159,120859,120860],{"class":161,"line":203},[159,120861,120862],{"class":1135},"#默认axis=0  传入整数平均分,按行来的\n",[159,120864,120865,120868,120870],{"class":161,"line":223},[159,120866,120867],{"class":165},"np.split(aa,",[159,120869,23949],{"class":1146},[159,120871,1165],{"class":165},[159,120873,120874],{"class":161,"line":233},[159,120875,117064],{"class":1135},[159,120877,120878],{"class":161,"line":239},[159,120879,115228],{"class":192},[159,120881,120882],{"class":161,"line":245},[159,120883,120884],{"class":192},"[array([[ 1,  2,  3,  4,  5,  6],\n",[159,120886,120887],{"class":161,"line":251},[159,120888,120889],{"class":192},"        [ 7,  8,  9, 10, 11, 12]]),\n",[159,120891,120892],{"class":161,"line":261},[159,120893,120894],{"class":192}," array([[13, 14, 15, 16, 17, 18],\n",[159,120896,120897],{"class":161,"line":603},[159,120898,120899],{"class":192},"        [19, 20, 21, 22, 23, 24]]),\n",[159,120901,120902],{"class":161,"line":621},[159,120903,120904],{"class":192}," array([[25, 26, 27, 28, 29, 30],\n",[159,120906,120907],{"class":161,"line":634},[159,120908,120909],{"class":192},"        [31, 32, 33, 34, 35, 36]])]\n",[159,120911,120912],{"class":161,"line":640},[159,120913,120914],{"class":192}," '''\n",[159,120916,120917],{"class":161,"line":1075},[159,120918,120774],{"class":1135},[159,120920,120921,120924,120926,120928,120930],{"class":161,"line":1081},[159,120922,120923],{"class":165},"np.split(aa,[",[159,120925,11034],{"class":1146},[159,120927,24233],{"class":165},[159,120929,1753],{"class":1146},[159,120931,28275],{"class":165},[159,120933,120934],{"class":161,"line":1091},[159,120935,117064],{"class":1135},[159,120937,120938],{"class":161,"line":1100},[159,120939,115228],{"class":192},[159,120941,120942],{"class":161,"line":1123},[159,120943,120884],{"class":192},[159,120945,120946],{"class":161,"line":1132},[159,120947,120889],{"class":192},[159,120949,120950],{"class":161,"line":1139},[159,120951,120894],{"class":192},[159,120953,120954],{"class":161,"line":1168},[159,120955,120956],{"class":192},"        [19, 20, 21, 22, 23, 24],\n",[159,120958,120959],{"class":161,"line":1174},[159,120960,120961],{"class":192},"        [25, 26, 27, 28, 29, 30]]),\n",[159,120963,120964],{"class":161,"line":1180},[159,120965,120966],{"class":192}," array([[31, 32, 33, 34, 35, 36]])]\n",[159,120968,120969],{"class":161,"line":1194},[159,120970,115228],{"class":192},[159,120972,120973],{"class":161,"line":1200},[159,120974,120975],{"class":1135},"#axis=1 按照列来分\n",[159,120977,120978,120980,120982,120984,120986,120988,120990],{"class":161,"line":1221},[159,120979,120867],{"class":165},[159,120981,23949],{"class":1146},[159,120983,24233],{"class":165},[159,120985,70907],{"class":8765},[159,120987,189],{"class":1142},[159,120989,4932],{"class":1146},[159,120991,1165],{"class":165},[159,120993,120994],{"class":161,"line":1230},[159,120995,117064],{"class":1135},[159,120997,120998],{"class":161,"line":1247},[159,120999,115228],{"class":192},[159,121001,121002],{"class":161,"line":1265},[159,121003,121004],{"class":192},"[array([[ 1,  2],\n",[159,121006,121007],{"class":161,"line":1277},[159,121008,121009],{"class":192},"        [ 7,  8],\n",[159,121011,121012],{"class":161,"line":1283},[159,121013,121014],{"class":192},"        [13, 14],\n",[159,121016,121017],{"class":161,"line":1294},[159,121018,121019],{"class":192},"        [19, 20],\n",[159,121021,121022],{"class":161,"line":1305},[159,121023,121024],{"class":192},"        [25, 26],\n",[159,121026,121027],{"class":161,"line":1311},[159,121028,121029],{"class":192},"        [31, 32]]),\n",[159,121031,121032],{"class":161,"line":1322},[159,121033,121034],{"class":192}," array([[ 3,  4],\n",[159,121036,121037],{"class":161,"line":1327},[159,121038,121039],{"class":192},"        [ 9, 10],\n",[159,121041,121042],{"class":161,"line":1336},[159,121043,121044],{"class":192},"        [15, 16],\n",[159,121046,121047],{"class":161,"line":1345},[159,121048,121049],{"class":192},"        [21, 22],\n",[159,121051,121052],{"class":161,"line":1350},[159,121053,121054],{"class":192},"        [27, 28],\n",[159,121056,121057],{"class":161,"line":1764},[159,121058,121059],{"class":192},"        [33, 34]]),\n",[159,121061,121062],{"class":161,"line":1769},[159,121063,121064],{"class":192}," array([[ 5,  6],\n",[159,121066,121067],{"class":161,"line":1777},[159,121068,121069],{"class":192},"        [11, 12],\n",[159,121071,121072],{"class":161,"line":1788},[159,121073,121074],{"class":192},"        [17, 18],\n",[159,121076,121077],{"class":161,"line":1802},[159,121078,121079],{"class":192},"        [23, 24],\n",[159,121081,121082],{"class":161,"line":1815},[159,121083,121084],{"class":192},"        [29, 30],\n",[159,121086,121087],{"class":161,"line":1828},[159,121088,121089],{"class":192},"        [35, 36]])]\n",[159,121091,121092],{"class":161,"line":1841},[159,121093,120914],{"class":192},[159,121095,121096],{"class":161,"line":1852},[159,121097,120774],{"class":1135},[159,121099,121100,121102,121104,121106,121108,121110,121112,121114,121116],{"class":161,"line":1866},[159,121101,120923],{"class":165},[159,121103,4932],{"class":1146},[159,121105,24233],{"class":165},[159,121107,11034],{"class":1146},[159,121109,65004],{"class":165},[159,121111,70907],{"class":8765},[159,121113,189],{"class":1142},[159,121115,4932],{"class":1146},[159,121117,1165],{"class":165},[159,121119,121120],{"class":161,"line":1879},[159,121121,114864],{"class":1135},[159,121123,121124],{"class":161,"line":1884},[159,121125,115228],{"class":192},[159,121127,121128],{"class":161,"line":1889},[159,121129,121130],{"class":192},"[array([[ 1],\n",[159,121132,121133],{"class":161,"line":1899},[159,121134,121135],{"class":192},"        [ 7],\n",[159,121137,121138],{"class":161,"line":1912},[159,121139,121140],{"class":192},"        [13],\n",[159,121142,121143],{"class":161,"line":1925},[159,121144,121145],{"class":192},"        [19],\n",[159,121147,121148],{"class":161,"line":1956},[159,121149,121150],{"class":192},"        [25],\n",[159,121152,121153],{"class":161,"line":1971},[159,121154,121155],{"class":192},"        [31]]),\n",[159,121157,121158],{"class":161,"line":1976},[159,121159,121160],{"class":192}," array([[ 2],\n",[159,121162,121163],{"class":161,"line":1981},[159,121164,121165],{"class":192},"        [ 8],\n",[159,121167,121168],{"class":161,"line":1989},[159,121169,121170],{"class":192},"        [14],\n",[159,121172,121173],{"class":161,"line":2001},[159,121174,121175],{"class":192},"        [20],\n",[159,121177,121178],{"class":161,"line":2006},[159,121179,121180],{"class":192},"        [26],\n",[159,121182,121183],{"class":161,"line":2015},[159,121184,121185],{"class":192},"        [32]]),\n",[159,121187,121188],{"class":161,"line":2024},[159,121189,121190],{"class":192}," array([[ 3,  4,  5,  6],\n",[159,121192,121193],{"class":161,"line":2029},[159,121194,121195],{"class":192},"        [ 9, 10, 11, 12],\n",[159,121197,121198],{"class":161,"line":2038},[159,121199,121200],{"class":192},"        [15, 16, 17, 18],\n",[159,121202,121203],{"class":161,"line":2053},[159,121204,121205],{"class":192},"        [21, 22, 23, 24],\n",[159,121207,121208],{"class":161,"line":2070},[159,121209,121210],{"class":192},"        [27, 28, 29, 30],\n",[159,121212,121213],{"class":161,"line":2095},[159,121214,121215],{"class":192},"        [33, 34, 35, 36]])]\n",[159,121217,121218],{"class":161,"line":2104},[159,121219,115228],{"class":192},[159,121221,121222],{"class":161,"line":2120},[159,121223,121224],{"class":1135},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[159,121226,121227,121230,121232],{"class":161,"line":2134},[159,121228,121229],{"class":165},"np.vsplit(aa,",[159,121231,23949],{"class":1146},[159,121233,1165],{"class":165},[159,121235,121236],{"class":161,"line":2143},[159,121237,114864],{"class":1135},[159,121239,121240],{"class":161,"line":2165},[159,121241,115228],{"class":192},[159,121243,121244],{"class":161,"line":2178},[159,121245,120884],{"class":192},[159,121247,121248],{"class":161,"line":2191},[159,121249,120889],{"class":192},[159,121251,121252],{"class":161,"line":2204},[159,121253,120894],{"class":192},[159,121255,121256],{"class":161,"line":2217},[159,121257,120899],{"class":192},[159,121259,121260],{"class":161,"line":2230},[159,121261,120904],{"class":192},[159,121263,121264],{"class":161,"line":2243},[159,121265,120909],{"class":192},[159,121267,121268],{"class":161,"line":2256},[159,121269,115228],{"class":192},[159,121271,121272,121275,121277],{"class":161,"line":2266},[159,121273,121274],{"class":165},"np.hsplit(aa,",[159,121276,23949],{"class":1146},[159,121278,1165],{"class":165},[159,121280,121281],{"class":161,"line":2275},[159,121282,114864],{"class":1135},[159,121284,121285],{"class":161,"line":2284},[159,121286,115228],{"class":192},[159,121288,121289],{"class":161,"line":2293},[159,121290,121004],{"class":192},[159,121292,121293],{"class":161,"line":2306},[159,121294,121009],{"class":192},[159,121296,121297],{"class":161,"line":2330},[159,121298,121014],{"class":192},[159,121300,121301],{"class":161,"line":2350},[159,121302,121019],{"class":192},[159,121304,121305],{"class":161,"line":2370},[159,121306,121024],{"class":192},[159,121308,121309],{"class":161,"line":2390},[159,121310,121029],{"class":192},[159,121312,121313],{"class":161,"line":2410},[159,121314,121034],{"class":192},[159,121316,121317],{"class":161,"line":2430},[159,121318,121039],{"class":192},[159,121320,121321],{"class":161,"line":2450},[159,121322,121044],{"class":192},[159,121324,121325],{"class":161,"line":2471},[159,121326,121049],{"class":192},[159,121328,121329],{"class":161,"line":2477},[159,121330,121054],{"class":192},[159,121332,121333],{"class":161,"line":2498},[159,121334,121059],{"class":192},[159,121336,121337],{"class":161,"line":2518},[159,121338,121064],{"class":192},[159,121340,121341],{"class":161,"line":2539},[159,121342,121069],{"class":192},[159,121344,121345],{"class":161,"line":2561},[159,121346,121074],{"class":192},[159,121348,121349],{"class":161,"line":2573},[159,121350,121079],{"class":192},[159,121352,121353],{"class":161,"line":2591},[159,121354,121084],{"class":192},[159,121356,121357],{"class":161,"line":2602},[159,121358,121089],{"class":192},[159,121360,121361],{"class":161,"line":2613},[159,121362,115228],{"class":192},[159,121364,121365,121368,121370,121372,121374],{"class":161,"line":2624},[159,121366,121367],{"class":165},"np.vsplit(aa,[",[159,121369,11034],{"class":1146},[159,121371,24233],{"class":165},[159,121373,1753],{"class":1146},[159,121375,28275],{"class":165},[159,121377,121378],{"class":161,"line":2630},[159,121379,114864],{"class":1135},[159,121381,121382],{"class":161,"line":2636},[159,121383,115228],{"class":192},[159,121385,121386],{"class":161,"line":2642},[159,121387,120884],{"class":192},[159,121389,121390],{"class":161,"line":2648},[159,121391,120889],{"class":192},[159,121393,121394],{"class":161,"line":2674},[159,121395,120894],{"class":192},[159,121397,121398],{"class":161,"line":2689},[159,121399,120956],{"class":192},[159,121401,121402],{"class":161,"line":2694},[159,121403,120961],{"class":192},[159,121405,121406],{"class":161,"line":2721},[159,121407,120966],{"class":192},[159,121409,121410],{"class":161,"line":2726},[159,121411,120914],{"class":192},[1468,121413,121414],{},"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":25,"searchDepth":176,"depth":176,"links":121416},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":120682,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":121423,"title":121424,"body":121425,"description":23809,"extension":23810,"meta":121919,"navigation":589,"path":121920,"seo":121921,"stem":121922,"__hash__":121923},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":121426,"toc":121910},[121427,121430,121433,121458,121462,121521,121573,121577,121579,121615,121669,121671,121709,121780,121784,121789,121793,121796,121829,121832,121836,121839,121842,121845,121848,121853,121857,121860,121863,121866,121869,121874,121878,121883,121886,121907],[10,121428,121424],{"id":121429},"_9数学函数",[14,121431,121432],{},"补充回顾：python的列表推导式",[151,121434,121436],{"className":53900,"code":121435,"language":53902,"meta":25,"style":25},"[1\u002Fi for i in a]\n",[49,121437,121438],{"__ignoreMap":25},[159,121439,121440,121442,121444,121446,121449,121451,121453,121455],{"class":161,"line":162},[159,121441,17263],{"class":165},[159,121443,4932],{"class":1146},[159,121445,13083],{"class":1142},[159,121447,121448],{"class":165},"i ",[159,121450,26657],{"class":1142},[159,121452,1186],{"class":165},[159,121454,49566],{"class":1142},[159,121456,121457],{"class":165}," a]\n",[37,121459,121461],{"id":121460},"_91-求倒数","9.1 求倒数",[151,121463,121465],{"className":53900,"code":121464,"language":53902,"meta":25,"style":25},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[49,121466,121467,121472,121500,121512],{"__ignoreMap":25},[159,121468,121469],{"class":161,"line":162},[159,121470,121471],{"class":1135},"#数组求倒数\n",[159,121473,121474,121476,121478,121480,121482,121484,121486,121488,121490,121492,121494,121496,121498],{"class":161,"line":176},[159,121475,8085],{"class":165},[159,121477,189],{"class":1142},[159,121479,17263],{"class":165},[159,121481,4932],{"class":1146},[159,121483,24233],{"class":165},[159,121485,11034],{"class":1146},[159,121487,24233],{"class":165},[159,121489,23949],{"class":1146},[159,121491,24233],{"class":165},[159,121493,8866],{"class":1146},[159,121495,24233],{"class":165},[159,121497,1753],{"class":1146},[159,121499,4634],{"class":165},[159,121501,121502,121504,121506,121509],{"class":161,"line":203},[159,121503,24127],{"class":165},[159,121505,189],{"class":1142},[159,121507,121508],{"class":165},"np.array(a)",[159,121510,121511],{"class":1135},"#将列表转换为数组\n",[159,121513,121514,121516,121518],{"class":161,"line":223},[159,121515,4932],{"class":1146},[159,121517,13083],{"class":1142},[159,121519,121520],{"class":165},"b\n",[151,121522,121524],{"className":53900,"code":121523,"language":53902,"meta":25,"style":25},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[49,121525,121526,121554,121563,121568],{"__ignoreMap":25},[159,121527,121528,121530,121532,121534,121536,121538,121540,121542,121544,121546,121548,121550,121552],{"class":161,"line":162},[159,121529,8085],{"class":165},[159,121531,189],{"class":1142},[159,121533,17263],{"class":165},[159,121535,4932],{"class":1146},[159,121537,24233],{"class":165},[159,121539,11034],{"class":1146},[159,121541,24233],{"class":165},[159,121543,23949],{"class":1146},[159,121545,24233],{"class":165},[159,121547,8866],{"class":1146},[159,121549,24233],{"class":165},[159,121551,1753],{"class":1146},[159,121553,4634],{"class":165},[159,121555,121556,121558,121560],{"class":161,"line":176},[159,121557,24127],{"class":165},[159,121559,189],{"class":1142},[159,121561,121562],{"class":165},"np.array(a)\n",[159,121564,121565],{"class":161,"line":203},[159,121566,121567],{"class":1135},"#调用numpy中的函数reciprocal()\n",[159,121569,121570],{"class":161,"line":223},[159,121571,121572],{"class":165},"np.reciprocal(b)\n",[37,121574,121576],{"id":121575},"_92-求平方","9.2 求平方",[14,121578,115830],{},[151,121580,121582],{"className":53900,"code":121581,"language":53902,"meta":25,"style":25},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[49,121583,121584,121589,121594,121610],{"__ignoreMap":25},[159,121585,121586],{"class":161,"line":162},[159,121587,121588],{"class":1135},"#square()，求平方\n",[159,121590,121591],{"class":161,"line":176},[159,121592,121593],{"class":1135},"#一维数组\n",[159,121595,121596,121598,121600,121602,121604,121606,121608],{"class":161,"line":203},[159,121597,8085],{"class":165},[159,121599,189],{"class":1142},[159,121601,114302],{"class":165},[159,121603,4932],{"class":1146},[159,121605,24233],{"class":165},[159,121607,1964],{"class":1146},[159,121609,1165],{"class":165},[159,121611,121612],{"class":161,"line":223},[159,121613,121614],{"class":165},"np.square(a)\n",[151,121616,121618],{"className":53900,"code":121617,"language":53902,"meta":25,"style":25},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[49,121619,121620,121625,121630,121651],{"__ignoreMap":25},[159,121621,121622],{"class":161,"line":162},[159,121623,121624],{"class":1135},"#或者通过循环遍历的形式来计算\n",[159,121626,121627],{"class":161,"line":176},[159,121628,121629],{"class":1135},"#这是一个列表\n",[159,121631,121632,121635,121637,121639,121641,121643,121645,121648],{"class":161,"line":203},[159,121633,121634],{"class":165},"[i",[159,121636,4777],{"class":1142},[159,121638,121448],{"class":165},[159,121640,26657],{"class":1142},[159,121642,1186],{"class":165},[159,121644,49566],{"class":1142},[159,121646,121647],{"class":165}," a]",[159,121649,121650],{"class":1135},"#这个求完之后在数列当中\n",[159,121652,121653,121656,121658,121660,121662,121664,121666],{"class":161,"line":223},[159,121654,121655],{"class":165},"np.array([i",[159,121657,4777],{"class":1142},[159,121659,121448],{"class":165},[159,121661,26657],{"class":1142},[159,121663,1186],{"class":165},[159,121665,49566],{"class":1142},[159,121667,121668],{"class":165}," a])\n",[14,121670,114591],{},[151,121672,121674],{"className":53900,"code":121673,"language":53902,"meta":25,"style":25},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[49,121675,121676,121680,121704],{"__ignoreMap":25},[159,121677,121678],{"class":161,"line":162},[159,121679,114601],{"class":1135},[159,121681,121682,121684,121686,121688,121690,121692,121694,121696,121698,121700,121702],{"class":161,"line":176},[159,121683,114606],{"class":165},[159,121685,189],{"class":1142},[159,121687,114302],{"class":165},[159,121689,4932],{"class":1146},[159,121691,24233],{"class":165},[159,121693,19665],{"class":1146},[159,121695,114307],{"class":165},[159,121697,8866],{"class":1146},[159,121699,24233],{"class":165},[159,121701,23949],{"class":1146},[159,121703,1165],{"class":165},[159,121705,121706],{"class":161,"line":203},[159,121707,121708],{"class":165},"np.square(aa)\n",[151,121710,121712],{"className":53900,"code":121711,"language":53902,"meta":25,"style":25},"#传统的方式\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",[49,121713,121714,121719,121728,121744,121760,121775],{"__ignoreMap":25},[159,121715,121716],{"class":161,"line":162},[159,121717,121718],{"class":1135},"#传统的方式\n",[159,121720,121721,121723,121725],{"class":161,"line":176},[159,121722,119487],{"class":165},[159,121724,189],{"class":1142},[159,121726,121727],{"class":165},"np.empty_like(aa)\n",[159,121729,121730,121732,121734,121736,121738,121740,121742],{"class":161,"line":203},[159,121731,26657],{"class":1142},[159,121733,1186],{"class":165},[159,121735,49566],{"class":1142},[159,121737,55961],{"class":1146},[159,121739,1159],{"class":165},[159,121741,8866],{"class":1146},[159,121743,54307],{"class":165},[159,121745,121746,121748,121750,121752,121754,121756,121758],{"class":161,"line":223},[159,121747,11677],{"class":1142},[159,121749,33096],{"class":165},[159,121751,49566],{"class":1142},[159,121753,55961],{"class":1146},[159,121755,1159],{"class":165},[159,121757,23949],{"class":1146},[159,121759,54307],{"class":165},[159,121761,121762,121765,121767,121770,121772],{"class":161,"line":233},[159,121763,121764],{"class":165},"        bb[i,j]",[159,121766,189],{"class":1142},[159,121768,121769],{"class":165},"aa[i,j]",[159,121771,4777],{"class":1142},[159,121773,121774],{"class":165},"aa[i,j]\n",[159,121776,121777],{"class":161,"line":239},[159,121778,121779],{"class":165},"bb\n",[37,121781,121783],{"id":121782},"_93-求各元素的符号","9.3 求各元素的符号",[14,121785,121786],{},[23,121787],{"alt":25,"src":121788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[37,121790,121792],{"id":121791},"_94-modf函数","9.4 modf函数",[14,121794,121795],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[151,121797,121799],{"className":53900,"code":121798,"language":53902,"meta":25,"style":25},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[49,121800,121801,121824],{"__ignoreMap":25},[159,121802,121803,121805,121807,121809,121811,121813,121815,121817,121819,121822],{"class":161,"line":162},[159,121804,8085],{"class":165},[159,121806,189],{"class":1142},[159,121808,114302],{"class":165},[159,121810,24376],{"class":1142},[159,121812,1964],{"class":1146},[159,121814,24233],{"class":165},[159,121816,1964],{"class":1146},[159,121818,24233],{"class":165},[159,121820,121821],{"class":1146},"0.3",[159,121823,1165],{"class":165},[159,121825,121826],{"class":161,"line":176},[159,121827,121828],{"class":165},"np.modf(a)\n",[14,121830,121831],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[37,121833,121835],{"id":121834},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,121837,121838],{},"np.cell()",[14,121840,121841],{},"np.floor()",[14,121843,121844],{},"np.rint()",[14,121846,121847],{},"对各元素分别向上取整、向下取整、四舍五入",[14,121849,121850],{},[23,121851],{"alt":25,"src":121852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[37,121854,121856],{"id":121855},"_96-around函数","9.6 around()函数",[14,121858,121859],{},"around()函数也可以实现对数的小数位数进行操作",[14,121861,121862],{},"其中的参数：",[14,121864,121865],{},"1.要传的数组",[14,121867,121868],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,121870,121871],{},[23,121872],{"alt":25,"src":121873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[37,121875,121877],{"id":121876},"_97-三角函数","9.7 三角函数",[14,121879,121880],{},[23,121881],{"alt":25,"src":121882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,121884,121885],{},"引入图像模块非常重要",[151,121887,121889],{"className":53900,"code":121888,"language":53902,"meta":25,"style":25},"from matplotlib import pyplot as plt\n",[49,121890,121891],{"__ignoreMap":25},[159,121892,121893,121895,121898,121900,121903,121905],{"class":161,"line":162},[159,121894,54258],{"class":1142},[159,121896,121897],{"class":165}," matplotlib ",[159,121899,53914],{"class":1142},[159,121901,121902],{"class":165}," pyplot ",[159,121904,54903],{"class":1142},[159,121906,54957],{"class":165},[1468,121908,121909],{},"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":25,"searchDepth":176,"depth":176,"links":121911},[121912,121913,121914,121915,121916,121917,121918],{"id":121460,"depth":176,"text":121461},{"id":121575,"depth":176,"text":121576},{"id":121782,"depth":176,"text":121783},{"id":121791,"depth":176,"text":121792},{"id":121834,"depth":176,"text":121835},{"id":121855,"depth":176,"text":121856},{"id":121876,"depth":176,"text":121877},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":121424,"description":23809},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":121925,"title":121926,"body":121927,"description":23809,"extension":23810,"meta":121931,"navigation":589,"path":121932,"seo":121933,"stem":121934,"__hash__":121935},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":121928,"toc":121929},[],{"title":25,"searchDepth":176,"depth":176,"links":121930},[],{"category":73800},"\u002Fwiki\u002F2025-08-14-numpy",{"title":121926,"description":23809},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":121937,"title":121938,"body":121939,"description":25,"extension":23810,"meta":123947,"navigation":589,"path":123948,"seo":123949,"stem":123950,"__hash__":123951},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":121940,"toc":123923},[121941,121944,121948,121951,121954,121960,121963,121986,121989,122023,122026,122067,122071,122074,122167,122170,122214,122217,122234,122237,122251,122254,122257,122302,122305,122342,122346,122349,122355,122360,122380,122384,122387,122453,122456,122474,122478,122481,122510,122520,122526,122530,122533,122539,122550,122554,122557,122587,122590,122870,122873,122876,122887,122890,122893,122915,122922,122925,122943,122946,122949,122963,122971,122974,123000,123006,123009,123012,123022,123034,123054,123063,123083,123093,123117,123130,123144,123149,123190,123207,123232,123244,123264,123270,123315,123334,123351,123364,123380,123387,123399,123408,123443,123464,123489,123502,123526,123541,123566,123569,123590,123599,123602,123613,123617,123620,123626,123638,123645,123649,123652,123664,123667,123681,123684,123694,123704,123707,123747,123750,123754,123760,123763,123777,123781,123784,123817,123821,123824,123847,123855,123858,123864,123870,123873,123876,123904,123908,123911,123917,123920],[10,121942,121938],{"id":121943},"_1环境安装与第一个-mujoco-程序",[37,121945,121947],{"id":121946},"_1目标说明","1.目标说明",[14,121949,121950],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,121952,121953],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[151,121955,121958],{"className":121956,"code":121957,"language":8507,"meta":25},[28803],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[49,121959,121957],{"__ignoreMap":25},[14,121961,121962],{},"需要掌握:",[134,121964,121965,121968,121971,121976,121981],{},[106,121966,121967],{},"Fedora 44 下 MuJoCo 的系统依赖",[106,121969,121970],{},"Python 虚拟环境创建",[106,121972,121973],{},[49,121974,121975],{},"mujoco.MjModel",[106,121977,121978],{},[49,121979,121980],{},"mujoco.MjData",[106,121982,121983],{},[49,121984,121985],{},"mujoco.mj_step(model, data)",[14,121987,121988],{},"MuJoCo 中最重要的两个对象:",[12347,121990,121991,122001],{},[16500,121992,121993],{},[12356,121994,121995,121998],{},[12365,121996,121997],{"align":19854},"对象",[12365,121999,122000],{"align":19854},"含义",[16624,122002,122003,122013],{},[12356,122004,122005,122010],{},[12488,122006,122007],{"align":19854},[49,122008,122009],{},"MjModel",[12488,122011,122012],{"align":19854},"模型结构，来自 XML，基本不随时间变化",[12356,122014,122015,122020],{},[12488,122016,122017],{"align":19854},[49,122018,122019],{},"MjData",[12488,122021,122022],{"align":19854},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,122024,122025],{},"可以先用一个类比理解：",[12347,122027,122028,122038],{},[16500,122029,122030],{},[12356,122031,122032,122035],{},[12365,122033,122034],{"align":19854},"类比",[12365,122036,122037],{"align":19854},"MuJoCo 对象",[16624,122039,122040,122049,122058],{},[12356,122041,122042,122045],{},[12488,122043,122044],{"align":19854},"游戏地图和角色配置",[12488,122046,122047],{"align":19854},[49,122048,122009],{},[12356,122050,122051,122054],{},[12488,122052,122053],{"align":19854},"游戏运行到当前帧的状态",[12488,122055,122056],{"align":19854},[49,122057,122019],{},[12356,122059,122060,122063],{},[12488,122061,122062],{"align":19854},"前进一帧",[12488,122064,122065],{"align":19854},[49,122066,121985],{},[37,122068,122070],{"id":122069},"_2环境与依赖安装","2.环境与依赖安装",[14,122072,122073],{},"Fedora 44 系统依赖:",[151,122075,122077],{"className":47347,"code":122076,"language":47349,"meta":25,"style":25},"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",[49,122078,122079,122091,122104,122117,122127,122137,122156],{"__ignoreMap":25},[159,122080,122081,122083,122085,122087,122089],{"class":161,"line":162},[159,122082,48101],{"class":185},[159,122084,49838],{"class":192},[159,122086,47359],{"class":192},[159,122088,49923],{"class":1146},[159,122090,48203],{"class":1146},[159,122092,122093,122096,122099,122102],{"class":161,"line":176},[159,122094,122095],{"class":192},"  python3",[159,122097,122098],{"class":192}," python3-pip",[159,122100,122101],{"class":192}," python3-virtualenv",[159,122103,48203],{"class":1146},[159,122105,122106,122109,122112,122115],{"class":161,"line":203},[159,122107,122108],{"class":192},"  mesa-libGL",[159,122110,122111],{"class":192}," mesa-libGLU",[159,122113,122114],{"class":192}," mesa-dri-drivers",[159,122116,48203],{"class":1146},[159,122118,122119,122122,122125],{"class":161,"line":223},[159,122120,122121],{"class":192},"  libglvnd-glx",[159,122123,122124],{"class":192}," libglvnd-opengl",[159,122126,48203],{"class":1146},[159,122128,122129,122132,122135],{"class":161,"line":233},[159,122130,122131],{"class":192},"  glfw",[159,122133,122134],{"class":192}," glfw-devel",[159,122136,48203],{"class":1146},[159,122138,122139,122142,122145,122148,122151,122154],{"class":161,"line":239},[159,122140,122141],{"class":192},"  libX11",[159,122143,122144],{"class":192}," libXcursor",[159,122146,122147],{"class":192}," libXi",[159,122149,122150],{"class":192}," libXinerama",[159,122152,122153],{"class":192}," libXrandr",[159,122155,48203],{"class":1146},[159,122157,122158,122161,122164],{"class":161,"line":245},[159,122159,122160],{"class":192},"  gcc",[159,122162,122163],{"class":192}," gcc-c++",[159,122165,122166],{"class":192}," make\n",[14,122168,122169],{},"创建 Python 环境:",[151,122171,122173],{"className":47347,"code":122172,"language":47349,"meta":25,"style":25},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[49,122174,122175,122189,122197],{"__ignoreMap":25},[159,122176,122177,122180,122183,122186],{"class":161,"line":162},[159,122178,122179],{"class":185},"python3",[159,122181,122182],{"class":1146}," -m",[159,122184,122185],{"class":192}," venv",[159,122187,122188],{"class":192}," .venv\n",[159,122190,122191,122194],{"class":161,"line":176},[159,122192,122193],{"class":1146},"source",[159,122195,122196],{"class":192}," .venv\u002Fbin\u002Factivate\n",[159,122198,122199,122201,122203,122206,122208,122211],{"class":161,"line":203},[159,122200,53902],{"class":185},[159,122202,122182],{"class":1146},[159,122204,122205],{"class":192}," pip",[159,122207,47359],{"class":192},[159,122209,122210],{"class":1146}," --upgrade",[159,122212,122213],{"class":192}," pip\n",[14,122215,122216],{},"pip 安装:",[151,122218,122220],{"className":47347,"code":122219,"language":47349,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy\n",[49,122221,122222],{"__ignoreMap":25},[159,122223,122224,122226,122228,122231],{"class":161,"line":162},[159,122225,47356],{"class":185},[159,122227,47359],{"class":192},[159,122229,122230],{"class":192}," \"mujoco>=2.3\"",[159,122232,122233],{"class":192}," numpy\n",[14,122235,122236],{},"安装完成后，先做最小检查：",[151,122238,122240],{"className":47347,"code":122239,"language":47349,"meta":25,"style":25},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[49,122241,122242],{"__ignoreMap":25},[159,122243,122244,122246,122248],{"class":161,"line":162},[159,122245,53902],{"class":185},[159,122247,53880],{"class":1146},[159,122249,122250],{"class":192}," \"import mujoco; print(mujoco.__version__)\"\n",[14,122252,122253],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,122255,122256],{},"conda 安装:",[151,122258,122260],{"className":47347,"code":122259,"language":47349,"meta":25,"style":25},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[49,122261,122262,122282,122292],{"__ignoreMap":25},[159,122263,122264,122266,122268,122270,122273,122276,122279],{"class":161,"line":162},[159,122265,53852],{"class":185},[159,122267,52698],{"class":192},[159,122269,48639],{"class":1146},[159,122271,122272],{"class":192}," mujoco-study",[159,122274,122275],{"class":192}," python=",[159,122277,122278],{"class":1146},"3.10",[159,122280,122281],{"class":1146}," -y\n",[159,122283,122284,122286,122289],{"class":161,"line":176},[159,122285,53852],{"class":185},[159,122287,122288],{"class":192}," activate",[159,122290,122291],{"class":192}," mujoco-study\n",[159,122293,122294,122296,122298,122300],{"class":161,"line":203},[159,122295,47356],{"class":185},[159,122297,47359],{"class":192},[159,122299,122230],{"class":192},[159,122301,122233],{"class":192},[14,122303,122304],{},"版本冲突说明:",[134,122306,122307,122313,122323,122332],{},[106,122308,122309,122310,51907],{},"不要安装 ",[49,122311,122312],{},"mujoco-py",[106,122314,122315,122316,122318,122319,122322],{},"如果旧项目里同时安装了 ",[49,122317,122312],{}," 和 ",[49,122320,122321],{},"mujoco","，建议新建干净虚拟环境。",[106,122324,122325,122328,122329,51907],{},[49,122326,122327],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[49,122330,122331],{},"~\u002F.mujoco\u002Fmujoco210",[106,122333,122334,122335,103839,122338,122341],{},"离屏渲染可能涉及 OpenGL 后端，",[49,122336,122337],{},"MUJOCO_GL=egl",[49,122339,122340],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[37,122343,122345],{"id":122344},"_3核心概念解释","3.核心概念解释",[14,122347,122348],{},"MuJoCo 的基本执行流程:",[151,122350,122353],{"className":122351,"code":122352,"language":8507,"meta":25},[28803],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[49,122354,122352],{"__ignoreMap":25},[14,122356,122357,122359],{},[49,122358,122009],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,122361,122362,122364,122365,24079,122368,24079,122371,24079,122374,24079,122377,51907],{},[49,122363,122019],{}," 存放仿真运行时状态，例如 ",[49,122366,122367],{},"data.time",[49,122369,122370],{},"data.qpos",[49,122372,122373],{},"data.qvel",[49,122375,122376],{},"data.ctrl",[49,122378,122379],{},"data.xpos",[42,122381,122383],{"id":122382},"xml-是什么","XML 是什么",[14,122385,122386],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[151,122388,122390],{"className":153,"code":122389,"language":155,"meta":25,"style":25},"\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",[49,122391,122392,122414,122445],{"__ignoreMap":25},[159,122393,122394,122396,122398,122400,122402,122404,122407,122409,122412],{"class":161,"line":162},[159,122395,166],{"class":165},[159,122397,170],{"class":169},[159,122399,547],{"class":185},[159,122401,189],{"class":165},[159,122403,193],{"class":192},[159,122405,122406],{"class":185}," pos",[159,122408,189],{"class":165},[159,122410,122411],{"class":192},"\"0 0 1\"",[159,122413,173],{"class":165},[159,122415,122416,122418,122421,122423,122425,122428,122430,122432,122434,122437,122439,122442],{"class":161,"line":176},[159,122417,179],{"class":165},[159,122419,122420],{"class":169},"geom",[159,122422,547],{"class":185},[159,122424,189],{"class":165},[159,122426,122427],{"class":192},"\"box_geom\"",[159,122429,539],{"class":185},[159,122431,189],{"class":165},[159,122433,193],{"class":192},[159,122435,122436],{"class":185}," size",[159,122438,189],{"class":165},[159,122440,122441],{"class":192},"\"0.1 0.1 0.1\"",[159,122443,122444],{"class":165},"\u002F>\n",[159,122446,122447,122449,122451],{"class":161,"line":203},[159,122448,264],{"class":165},[159,122450,170],{"class":169},[159,122452,173],{"class":165},[14,122454,122455],{},"这段意思是：",[134,122457,122458,122464,122471],{},[106,122459,122460,122461,122463],{},"创建一个叫 ",[49,122462,427],{}," 的刚体。",[106,122465,122466,122467,122470],{},"它初始放在 ",[49,122468,122469],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[106,122472,122473],{},"它里面有一个盒子形状的几何体。",[42,122475,122477],{"id":122476},"timestep-是什么","timestep 是什么",[14,122479,122480],{},"XML 里的：",[151,122482,122484],{"className":153,"code":122483,"language":155,"meta":25,"style":25},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[49,122485,122486],{"__ignoreMap":25},[159,122487,122488,122490,122492,122495,122497,122500,122503,122505,122508],{"class":161,"line":162},[159,122489,166],{"class":165},[159,122491,16240],{"class":169},[159,122493,122494],{"class":185}," timestep",[159,122496,189],{"class":165},[159,122498,122499],{"class":192},"\"0.01\"",[159,122501,122502],{"class":185}," gravity",[159,122504,189],{"class":165},[159,122506,122507],{"class":192},"\"0 0 -9.81\"",[159,122509,122444],{"class":165},[14,122511,122512,122513,122516,122517,122519],{},"表示每调用一次 ",[49,122514,122515],{},"mj_step","，仿真时间前进 ",[49,122518,62381],{}," 秒。循环 100 次，大约就是 1 秒：",[151,122521,122524],{"className":122522,"code":122523,"language":8507,"meta":25},[28803],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[49,122525,122523],{"__ignoreMap":25},[42,122527,122529],{"id":122528},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,122531,122532],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[151,122534,122537],{"className":122535,"code":122536,"language":8507,"meta":25},[28803],"x y z qw qx qy qz\n",[49,122538,122536],{"__ignoreMap":25},[14,122540,122541,122542,122545,122546,122549],{},"表示一个自由刚体的位置和姿态。其中 ",[49,122543,122544],{},"x y z"," 是位置，",[49,122547,122548],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[37,122551,122553],{"id":122552},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,122555,122556],{},"新建文件:",[151,122558,122560],{"className":47347,"code":122559,"language":47349,"meta":25,"style":25},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[49,122561,122562,122572,122579],{"__ignoreMap":25},[159,122563,122564,122567,122569],{"class":161,"line":162},[159,122565,122566],{"class":185},"mkdir",[159,122568,52738],{"class":1146},[159,122570,122571],{"class":192}," mujoco_tutorial\n",[159,122573,122574,122577],{"class":161,"line":176},[159,122575,122576],{"class":1146},"cd",[159,122578,122571],{"class":192},[159,122580,122581,122584],{"class":161,"line":203},[159,122582,122583],{"class":185},"touch",[159,122585,122586],{"class":192}," ch1_first_sim.py\n",[14,122588,122589],{},"写入:",[151,122591,122593],{"className":53900,"code":122592,"language":53902,"meta":25,"style":25},"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",[49,122594,122595,122602,122606,122610,122620,122625,122630,122634,122639,122644,122648,122653,122658,122663,122668,122673,122678,122682,122686,122690,122703,122717,122727,122731,122743,122755,122767,122779,122791,122795,122812,122817,122821,122832,122843,122847,122851,122865],{"__ignoreMap":25},[159,122596,122597,122599],{"class":161,"line":162},[159,122598,53914],{"class":1142},[159,122600,122601],{"class":165}," mujoco\n",[159,122603,122604],{"class":161,"line":176},[159,122605,590],{"emptyLinePlaceholder":589},[159,122607,122608],{"class":161,"line":203},[159,122609,590],{"emptyLinePlaceholder":589},[159,122611,122612,122615,122617],{"class":161,"line":223},[159,122613,122614],{"class":1146},"XML",[159,122616,1150],{"class":1142},[159,122618,122619],{"class":192}," \"\"\"\n",[159,122621,122622],{"class":161,"line":233},[159,122623,122624],{"class":192},"\u003Cmujoco model=\"first_sim\">\n",[159,122626,122627],{"class":161,"line":239},[159,122628,122629],{"class":192},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[159,122631,122632],{"class":161,"line":245},[159,122633,590],{"emptyLinePlaceholder":589},[159,122635,122636],{"class":161,"line":251},[159,122637,122638],{"class":192},"  \u003Cworldbody>\n",[159,122640,122641],{"class":161,"line":261},[159,122642,122643],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[159,122645,122646],{"class":161,"line":603},[159,122647,590],{"emptyLinePlaceholder":589},[159,122649,122650],{"class":161,"line":621},[159,122651,122652],{"class":192},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[159,122654,122655],{"class":161,"line":634},[159,122656,122657],{"class":192},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[159,122659,122660],{"class":161,"line":640},[159,122661,122662],{"class":192},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[159,122664,122665],{"class":161,"line":1075},[159,122666,122667],{"class":192},"    \u003C\u002Fbody>\n",[159,122669,122670],{"class":161,"line":1081},[159,122671,122672],{"class":192},"  \u003C\u002Fworldbody>\n",[159,122674,122675],{"class":161,"line":1091},[159,122676,122677],{"class":192},"\u003C\u002Fmujoco>\n",[159,122679,122680],{"class":161,"line":1100},[159,122681,116998],{"class":192},[159,122683,122684],{"class":161,"line":1123},[159,122685,590],{"emptyLinePlaceholder":589},[159,122687,122688],{"class":161,"line":1132},[159,122689,590],{"emptyLinePlaceholder":589},[159,122691,122692,122694,122696,122699,122701],{"class":161,"line":1139},[159,122693,55465],{"class":1142},[159,122695,25625],{"class":185},[159,122697,122698],{"class":165},"() -> ",[159,122700,116986],{"class":1146},[159,122702,27364],{"class":165},[159,122704,122705,122708,122710,122713,122715],{"class":161,"line":1168},[159,122706,122707],{"class":165},"    model ",[159,122709,189],{"class":1142},[159,122711,122712],{"class":165}," mujoco.MjModel.from_xml_string(",[159,122714,122614],{"class":1146},[159,122716,1165],{"class":165},[159,122718,122719,122722,122724],{"class":161,"line":1174},[159,122720,122721],{"class":165},"    data ",[159,122723,189],{"class":1142},[159,122725,122726],{"class":165}," mujoco.MjData(model)\n",[159,122728,122729],{"class":161,"line":1180},[159,122730,590],{"emptyLinePlaceholder":589},[159,122732,122733,122735,122737,122740],{"class":161,"line":1194},[159,122734,54819],{"class":1146},[159,122736,1159],{"class":165},[159,122738,122739],{"class":192},"\"nq:\"",[159,122741,122742],{"class":165},", model.nq)\n",[159,122744,122745,122747,122749,122752],{"class":161,"line":1200},[159,122746,54819],{"class":1146},[159,122748,1159],{"class":165},[159,122750,122751],{"class":192},"\"nv:\"",[159,122753,122754],{"class":165},", model.nv)\n",[159,122756,122757,122759,122761,122764],{"class":161,"line":1221},[159,122758,54819],{"class":1146},[159,122760,1159],{"class":165},[159,122762,122763],{"class":192},"\"nu:\"",[159,122765,122766],{"class":165},", model.nu)\n",[159,122768,122769,122771,122773,122776],{"class":161,"line":1230},[159,122770,54819],{"class":1146},[159,122772,1159],{"class":165},[159,122774,122775],{"class":192},"\"initial time:\"",[159,122777,122778],{"class":165},", data.time)\n",[159,122780,122781,122783,122785,122788],{"class":161,"line":1247},[159,122782,54819],{"class":1146},[159,122784,1159],{"class":165},[159,122786,122787],{"class":192},"\"initial qpos:\"",[159,122789,122790],{"class":165},", data.qpos.copy())\n",[159,122792,122793],{"class":161,"line":1265},[159,122794,590],{"emptyLinePlaceholder":589},[159,122796,122797,122799,122802,122804,122806,122808,122810],{"class":161,"line":1277},[159,122798,11677],{"class":1142},[159,122800,122801],{"class":165}," _ ",[159,122803,49566],{"class":1142},[159,122805,55961],{"class":1146},[159,122807,1159],{"class":165},[159,122809,1596],{"class":1146},[159,122811,54307],{"class":165},[159,122813,122814],{"class":161,"line":1283},[159,122815,122816],{"class":165},"        mujoco.mj_step(model, data)\n",[159,122818,122819],{"class":161,"line":1294},[159,122820,590],{"emptyLinePlaceholder":589},[159,122822,122823,122825,122827,122830],{"class":161,"line":1305},[159,122824,54819],{"class":1146},[159,122826,1159],{"class":165},[159,122828,122829],{"class":192},"\"final time:\"",[159,122831,122778],{"class":165},[159,122833,122834,122836,122838,122841],{"class":161,"line":1311},[159,122835,54819],{"class":1146},[159,122837,1159],{"class":165},[159,122839,122840],{"class":192},"\"final qpos:\"",[159,122842,122790],{"class":165},[159,122844,122845],{"class":161,"line":1322},[159,122846,590],{"emptyLinePlaceholder":589},[159,122848,122849],{"class":161,"line":1327},[159,122850,590],{"emptyLinePlaceholder":589},[159,122852,122853,122855,122857,122860,122863],{"class":161,"line":1336},[159,122854,18445],{"class":1142},[159,122856,54740],{"class":1146},[159,122858,122859],{"class":1142}," ==",[159,122861,122862],{"class":192}," \"__main__\"",[159,122864,27364],{"class":165},[159,122866,122867],{"class":161,"line":1345},[159,122868,122869],{"class":165},"    main()\n",[42,122871,122872],{"id":122872},"代码逐段解释",[14,122874,122875],{},"导入库：",[151,122877,122879],{"className":53900,"code":122878,"language":53902,"meta":25,"style":25},"import mujoco\n",[49,122880,122881],{"__ignoreMap":25},[159,122882,122883,122885],{"class":161,"line":162},[159,122884,53914],{"class":1142},[159,122886,122601],{"class":165},[14,122888,122889],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,122891,122892],{},"定义 XML：",[151,122894,122896],{"className":53900,"code":122895,"language":53902,"meta":25,"style":25},"XML = \"\"\"\n...\n\"\"\"\n",[49,122897,122898,122906,122911],{"__ignoreMap":25},[159,122899,122900,122902,122904],{"class":161,"line":162},[159,122901,122614],{"class":1146},[159,122903,1150],{"class":1142},[159,122905,122619],{"class":192},[159,122907,122908],{"class":161,"line":176},[159,122909,122910],{"class":192},"...\n",[159,122912,122913],{"class":161,"line":203},[159,122914,116998],{"class":192},[14,122916,122917,122918,122921],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[49,122919,122920],{},"freejoint"," 的方块。",[14,122923,122924],{},"编译模型：",[151,122926,122928],{"className":53900,"code":122927,"language":53902,"meta":25,"style":25},"model = mujoco.MjModel.from_xml_string(XML)\n",[49,122929,122930],{"__ignoreMap":25},[159,122931,122932,122935,122937,122939,122941],{"class":161,"line":162},[159,122933,122934],{"class":165},"model ",[159,122936,189],{"class":1142},[159,122938,122712],{"class":165},[159,122940,122614],{"class":1146},[159,122942,1165],{"class":165},[14,122944,122945],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,122947,122948],{},"创建数据：",[151,122950,122952],{"className":53900,"code":122951,"language":53902,"meta":25,"style":25},"data = mujoco.MjData(model)\n",[49,122953,122954],{"__ignoreMap":25},[159,122955,122956,122959,122961],{"class":161,"line":162},[159,122957,122958],{"class":165},"data ",[159,122960,189],{"class":1142},[159,122962,122726],{"class":165},[14,122964,122965,122967,122968,122970],{},[49,122966,56843],{}," 会保存仿真当前状态。刚创建时，时间是 ",[49,122969,1489],{},"，方块还在初始位置。",[14,122972,122973],{},"推进仿真：",[151,122975,122977],{"className":53900,"code":122976,"language":53902,"meta":25,"style":25},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[49,122978,122979,122995],{"__ignoreMap":25},[159,122980,122981,122983,122985,122987,122989,122991,122993],{"class":161,"line":162},[159,122982,26657],{"class":1142},[159,122984,122801],{"class":165},[159,122986,49566],{"class":1142},[159,122988,55961],{"class":1146},[159,122990,1159],{"class":165},[159,122992,1596],{"class":1146},[159,122994,54307],{"class":165},[159,122996,122997],{"class":161,"line":176},[159,122998,122999],{"class":165},"    mujoco.mj_step(model, data)\n",[14,123001,123002,123003,123005],{},"每次 ",[49,123004,122515],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[42,123007,123008],{"id":123008},"代码逐行细讲",[14,123010,123011],{},"下面把完整代码按新手视角拆开讲。",[151,123013,123014],{"className":53900,"code":122878,"language":53902,"meta":25,"style":25},[49,123015,123016],{"__ignoreMap":25},[159,123017,123018,123020],{"class":161,"line":162},[159,123019,53914],{"class":1142},[159,123021,122601],{"class":165},[14,123023,123024,123026,123027,24079,123029,24079,123031,51907],{},[49,123025,53914],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[49,123028,121975],{},[49,123030,121980],{},[49,123032,123033],{},"mujoco.mj_step",[151,123035,123036],{"className":53900,"code":122895,"language":53902,"meta":25,"style":25},[49,123037,123038,123046,123050],{"__ignoreMap":25},[159,123039,123040,123042,123044],{"class":161,"line":162},[159,123041,122614],{"class":1146},[159,123043,1150],{"class":1142},[159,123045,122619],{"class":192},[159,123047,123048],{"class":161,"line":176},[159,123049,122910],{"class":192},[159,123051,123052],{"class":161,"line":203},[159,123053,116998],{"class":192},[14,123055,123056,123058,123059,123062],{},[49,123057,122614],{}," 是一个变量名。右边的三引号 ",[49,123060,123061],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[151,123064,123065],{"className":153,"code":122624,"language":155,"meta":25,"style":25},[49,123066,123067],{"__ignoreMap":25},[159,123068,123069,123071,123073,123076,123078,123081],{"class":161,"line":162},[159,123070,166],{"class":165},[159,123072,122321],{"class":169},[159,123074,123075],{"class":185}," model",[159,123077,189],{"class":165},[159,123079,123080],{"class":192},"\"first_sim\"",[159,123082,173],{"class":165},[14,123084,123085,123086,123089,123090,51907],{},"这是 XML 的根标签。",[49,123087,123088],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[49,123091,123092],{},"first_sim",[151,123094,123095],{"className":153,"code":122483,"language":155,"meta":25,"style":25},[49,123096,123097],{"__ignoreMap":25},[159,123098,123099,123101,123103,123105,123107,123109,123111,123113,123115],{"class":161,"line":162},[159,123100,166],{"class":165},[159,123102,16240],{"class":169},[159,123104,122494],{"class":185},[159,123106,189],{"class":165},[159,123108,122499],{"class":192},[159,123110,122502],{"class":185},[159,123112,189],{"class":165},[159,123114,122507],{"class":192},[159,123116,122444],{"class":165},[14,123118,123119,123121,123122,123125,123126,123129],{},[49,123120,16240],{}," 用来设置仿真参数。",[49,123123,123124],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[49,123127,123128],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[151,123131,123133],{"className":153,"code":123132,"language":155,"meta":25,"style":25},"\u003Cworldbody>\n",[49,123134,123135],{"__ignoreMap":25},[159,123136,123137,123139,123142],{"class":161,"line":162},[159,123138,166],{"class":165},[159,123140,123141],{"class":169},"worldbody",[159,123143,173],{"class":165},[14,123145,123146,123148],{},[49,123147,123141],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[151,123150,123152],{"className":153,"code":123151,"language":155,"meta":25,"style":25},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,123153,123154],{"__ignoreMap":25},[159,123155,123156,123158,123160,123162,123164,123167,123169,123171,123174,123176,123178,123181,123183,123185,123188],{"class":161,"line":162},[159,123157,166],{"class":165},[159,123159,122420],{"class":169},[159,123161,547],{"class":185},[159,123163,189],{"class":165},[159,123165,123166],{"class":192},"\"floor\"",[159,123168,539],{"class":185},[159,123170,189],{"class":165},[159,123172,123173],{"class":192},"\"plane\"",[159,123175,122436],{"class":185},[159,123177,189],{"class":165},[159,123179,123180],{"class":192},"\"2 2 0.1\"",[159,123182,100067],{"class":185},[159,123184,189],{"class":165},[159,123186,123187],{"class":192},"\"0.8 0.8 0.8 1\"",[159,123189,122444],{"class":165},[14,123191,123192,123193,123195,123196,123199,123200,123203,123204,123206],{},"这行创建地面。",[49,123194,122420],{}," 是几何体。",[49,123197,123198],{},"name=\"floor\""," 是名字。",[49,123201,123202],{},"type=\"plane\""," 表示平面。",[49,123205,1932],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[151,123208,123210],{"className":153,"code":123209,"language":155,"meta":25,"style":25},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[49,123211,123212],{"__ignoreMap":25},[159,123213,123214,123216,123218,123220,123222,123224,123226,123228,123230],{"class":161,"line":162},[159,123215,166],{"class":165},[159,123217,170],{"class":169},[159,123219,547],{"class":185},[159,123221,189],{"class":165},[159,123223,193],{"class":192},[159,123225,122406],{"class":185},[159,123227,189],{"class":165},[159,123229,122411],{"class":192},[159,123231,173],{"class":165},[14,123233,123234,123235,51907,123237,123240,123241,123243],{},"这行创建一个刚体，名字叫 ",[49,123236,427],{},[49,123238,123239],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[49,123242,122469],{},"，也就是离地面 1 米高。",[151,123245,123247],{"className":153,"code":123246,"language":155,"meta":25,"style":25},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[49,123248,123249],{"__ignoreMap":25},[159,123250,123251,123253,123255,123257,123259,123262],{"class":161,"line":162},[159,123252,166],{"class":165},[159,123254,122920],{"class":169},[159,123256,547],{"class":185},[159,123258,189],{"class":165},[159,123260,123261],{"class":192},"\"box_free\"",[159,123263,122444],{"class":165},[14,123265,123266,123267,123269],{},"这行很重要。",[49,123268,122920],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[151,123271,123273],{"className":153,"code":123272,"language":155,"meta":25,"style":25},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,123274,123275],{"__ignoreMap":25},[159,123276,123277,123279,123281,123283,123285,123287,123289,123291,123293,123295,123297,123299,123302,123304,123306,123308,123310,123313],{"class":161,"line":162},[159,123278,166],{"class":165},[159,123280,122420],{"class":169},[159,123282,547],{"class":185},[159,123284,189],{"class":165},[159,123286,122427],{"class":192},[159,123288,539],{"class":185},[159,123290,189],{"class":165},[159,123292,193],{"class":192},[159,123294,122436],{"class":185},[159,123296,189],{"class":165},[159,123298,122441],{"class":192},[159,123300,123301],{"class":185}," mass",[159,123303,189],{"class":165},[159,123305,680],{"class":192},[159,123307,100067],{"class":185},[159,123309,189],{"class":165},[159,123311,123312],{"class":192},"\"1 0 0 1\"",[159,123314,122444],{"class":165},[14,123316,123317,123318,123321,123322,123325,123326,123329,123330,123333],{},"这行给 box body 添加一个盒子形状。",[49,123319,123320],{},"type=\"box\""," 表示形状是盒子。",[49,123323,123324],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[49,123327,123328],{},"mass=\"1\""," 表示质量是 1。",[49,123331,123332],{},"rgba=\"1 0 0 1\""," 表示红色。",[151,123335,123337],{"className":53900,"code":123336,"language":53902,"meta":25,"style":25},"def main() -> None:\n",[49,123338,123339],{"__ignoreMap":25},[159,123340,123341,123343,123345,123347,123349],{"class":161,"line":162},[159,123342,55465],{"class":1142},[159,123344,25625],{"class":185},[159,123346,122698],{"class":165},[159,123348,116986],{"class":1146},[159,123350,27364],{"class":165},[14,123352,123353,123355,123356,123359,123360,123363],{},[49,123354,55465],{}," 用来定义函数。这里定义了一个叫 ",[49,123357,123358],{},"main"," 的函数。",[49,123361,123362],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[151,123365,123366],{"className":53900,"code":122927,"language":53902,"meta":25,"style":25},[49,123367,123368],{"__ignoreMap":25},[159,123369,123370,123372,123374,123376,123378],{"class":161,"line":162},[159,123371,122934],{"class":165},[159,123373,189],{"class":1142},[159,123375,122712],{"class":165},[159,123377,122614],{"class":1146},[159,123379,1165],{"class":165},[14,123381,123382,123383,123386],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[49,123384,123385],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[151,123388,123389],{"className":53900,"code":122951,"language":53902,"meta":25,"style":25},[49,123390,123391],{"__ignoreMap":25},[159,123392,123393,123395,123397],{"class":161,"line":162},[159,123394,122958],{"class":165},[159,123396,189],{"class":1142},[159,123398,122726],{"class":165},[14,123400,123401,123402,123404,123405,123407],{},"这行创建仿真数据。",[49,123403,56843],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[49,123406,56843],{}," 都会变化。",[151,123409,123411],{"className":53900,"code":123410,"language":53902,"meta":25,"style":25},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[49,123412,123413,123423,123433],{"__ignoreMap":25},[159,123414,123415,123417,123419,123421],{"class":161,"line":162},[159,123416,53937],{"class":1146},[159,123418,1159],{"class":165},[159,123420,122739],{"class":192},[159,123422,122742],{"class":165},[159,123424,123425,123427,123429,123431],{"class":161,"line":176},[159,123426,53937],{"class":1146},[159,123428,1159],{"class":165},[159,123430,122751],{"class":192},[159,123432,122754],{"class":165},[159,123434,123435,123437,123439,123441],{"class":161,"line":203},[159,123436,53937],{"class":1146},[159,123438,1159],{"class":165},[159,123440,122763],{"class":192},[159,123442,122766],{"class":165},[14,123444,123445,123447,123448,123451,123452,123455,123456,123459,123460,123463],{},[49,123446,53937],{}," 用来输出信息。",[49,123449,123450],{},"model.nq"," 是位置变量数量，",[49,123453,123454],{},"model.nv"," 是速度变量数量，",[49,123457,123458],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[49,123461,123462],{},"nu"," 是 0。",[151,123465,123467],{"className":53900,"code":123466,"language":53902,"meta":25,"style":25},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[49,123468,123469,123479],{"__ignoreMap":25},[159,123470,123471,123473,123475,123477],{"class":161,"line":162},[159,123472,53937],{"class":1146},[159,123474,1159],{"class":165},[159,123476,122775],{"class":192},[159,123478,122778],{"class":165},[159,123480,123481,123483,123485,123487],{"class":161,"line":176},[159,123482,53937],{"class":1146},[159,123484,1159],{"class":165},[159,123486,122787],{"class":192},[159,123488,122790],{"class":165},[14,123490,123491,123492,123494,123495,123497,123498,123501],{},"这里打印初始时间和初始位置。",[49,123493,122367],{}," 一开始是 0。",[49,123496,122370],{}," 是位置数组。",[49,123499,123500],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[151,123503,123504],{"className":53900,"code":122976,"language":53902,"meta":25,"style":25},[49,123505,123506,123522],{"__ignoreMap":25},[159,123507,123508,123510,123512,123514,123516,123518,123520],{"class":161,"line":162},[159,123509,26657],{"class":1142},[159,123511,122801],{"class":165},[159,123513,49566],{"class":1142},[159,123515,55961],{"class":1146},[159,123517,1159],{"class":165},[159,123519,1596],{"class":1146},[159,123521,54307],{"class":165},[159,123523,123524],{"class":161,"line":176},[159,123525,122999],{"class":165},[14,123527,123528,123530,123531,123534,123535,123537,123538,123540],{},[49,123529,26657],{}," 是循环。",[49,123532,123533],{},"range(100)"," 表示循环 100 次。",[49,123536,24807],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[49,123539,122515],{},"，仿真就前进一步。",[151,123542,123544],{"className":53900,"code":123543,"language":53902,"meta":25,"style":25},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[49,123545,123546,123556],{"__ignoreMap":25},[159,123547,123548,123550,123552,123554],{"class":161,"line":162},[159,123549,53937],{"class":1146},[159,123551,1159],{"class":165},[159,123553,122829],{"class":192},[159,123555,122778],{"class":165},[159,123557,123558,123560,123562,123564],{"class":161,"line":176},[159,123559,53937],{"class":1146},[159,123561,1159],{"class":165},[159,123563,122840],{"class":192},[159,123565,122790],{"class":165},[14,123567,123568],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[151,123570,123572],{"className":53900,"code":123571,"language":53902,"meta":25,"style":25},"if __name__ == \"__main__\":\n    main()\n",[49,123573,123574,123586],{"__ignoreMap":25},[159,123575,123576,123578,123580,123582,123584],{"class":161,"line":162},[159,123577,18445],{"class":1142},[159,123579,54740],{"class":1146},[159,123581,122859],{"class":1142},[159,123583,122862],{"class":192},[159,123585,27364],{"class":165},[159,123587,123588],{"class":161,"line":176},[159,123589,122869],{"class":165},[14,123591,123592,123593,123596,123597,51907],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[49,123594,123595],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[49,123598,123595],{},[14,123600,123601],{},"运行:",[151,123603,123605],{"className":47347,"code":123604,"language":47349,"meta":25,"style":25},"python ch1_first_sim.py\n",[49,123606,123607],{"__ignoreMap":25},[159,123608,123609,123611],{"class":161,"line":162},[159,123610,53902],{"class":185},[159,123612,122586],{"class":192},[37,123614,123616],{"id":123615},"_5运行结果说明","5.运行结果说明",[14,123618,123619],{},"你应该看到类似输出:",[151,123621,123624],{"className":123622,"code":123623,"language":8507,"meta":25},[28803],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[49,123625,123623],{"__ignoreMap":25},[14,123627,123628,123630,123631,123634,123635,51907],{},[49,123629,122920],{}," 有 7 个位置变量: ",[49,123632,123633],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[49,123636,123637],{},"vx vy vz wx wy wz",[14,123639,123640,123641,123644],{},"你还会看到 ",[49,123642,123643],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[37,123646,123648],{"id":123647},"_6验证步骤","6.验证步骤",[14,123650,123651],{},"确认版本:",[151,123653,123654],{"className":47347,"code":122239,"language":47349,"meta":25,"style":25},[49,123655,123656],{"__ignoreMap":25},[159,123657,123658,123660,123662],{"class":161,"line":162},[159,123659,53902],{"class":185},[159,123661,53880],{"class":1146},[159,123663,122250],{"class":192},[14,123665,123666],{},"确认导入的是官方 bindings:",[151,123668,123670],{"className":47347,"code":123669,"language":47349,"meta":25,"style":25},"python -c \"import mujoco; print(mujoco)\"\n",[49,123671,123672],{"__ignoreMap":25},[159,123673,123674,123676,123678],{"class":161,"line":162},[159,123675,53902],{"class":185},[159,123677,53880],{"class":1146},[159,123679,123680],{"class":192}," \"import mujoco; print(mujoco)\"\n",[14,123682,123683],{},"运行程序:",[151,123685,123686],{"className":47347,"code":123604,"language":47349,"meta":25,"style":25},[49,123687,123688],{"__ignoreMap":25},[159,123689,123690,123692],{"class":161,"line":162},[159,123691,53902],{"class":185},[159,123693,122586],{"class":192},[14,123695,123696,123697,123700,123701,51907],{},"检查 ",[49,123698,123699],{},"final time"," 是否约等于 ",[49,123702,123703],{},"1.0",[14,123705,123706],{},"再做几个小实验：",[134,123708,123709,123719,123727,123740],{},[106,123710,123711,123712,123714,123715,123718],{},"把 ",[49,123713,123239],{}," 改成 ",[49,123716,123717],{},"pos=\"0 0 2\"","，观察初始高度变化。",[106,123720,123711,123721,123714,123723,123726],{},[49,123722,123128],{},[49,123724,123725],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[106,123728,123711,123729,123714,123731,123734,123735,123737,123738,51907],{},[49,123730,123124],{},[49,123732,123733],{},"timestep=\"0.005\"","，观察 100 步后的 ",[49,123736,123699],{}," 是否变成约 ",[49,123739,58724],{},[106,123741,123742,123743,123746],{},"删除 ",[49,123744,123745],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,123748,123749],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[37,123751,123753],{"id":123752},"_7常见错误与解决方案","7.常见错误与解决方案",[42,123755,123757],{"id":123756},"modulenotfounderror-no-module-named-mujoco",[49,123758,123759],{},"ModuleNotFoundError: No module named 'mujoco'",[14,123761,123762],{},"解决:",[151,123764,123766],{"className":47347,"code":123765,"language":47349,"meta":25,"style":25},"pip install \"mujoco>=2.3\"\n",[49,123767,123768],{"__ignoreMap":25},[159,123769,123770,123772,123774],{"class":161,"line":162},[159,123771,47356],{"class":185},[159,123773,47359],{"class":192},[159,123775,123776],{"class":192}," \"mujoco>=2.3\"\n",[42,123778,123780],{"id":123779},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,123782,123783],{},"先安装系统依赖:",[151,123785,123787],{"className":47347,"code":123786,"language":47349,"meta":25,"style":25},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[49,123788,123789],{"__ignoreMap":25},[159,123790,123791,123793,123795,123797,123799,123802,123804,123807,123809,123812,123814],{"class":161,"line":162},[159,123792,48101],{"class":185},[159,123794,49838],{"class":192},[159,123796,47359],{"class":192},[159,123798,49923],{"class":1146},[159,123800,123801],{"class":192}," mesa-libGL",[159,123803,122114],{"class":192},[159,123805,123806],{"class":192}," glfw",[159,123808,122134],{"class":192},[159,123810,123811],{"class":192}," libX11",[159,123813,122147],{"class":192},[159,123815,123816],{"class":192}," libXrandr\n",[42,123818,123820],{"id":123819},"xml-解析失败","XML 解析失败",[14,123822,123823],{},"检查:",[134,123825,123826,123829,123832,123838],{},[106,123827,123828],{},"标签是否闭合",[106,123830,123831],{},"属性是否带引号",[106,123833,123834,123835],{},"根节点是否是 ",[49,123836,123837],{},"\u003Cmujoco>",[106,123839,123840,123842,123843,123846],{},[49,123841,170],{}," 是否放在 ",[49,123844,123845],{},"\u003Cworldbody>"," 内部",[42,123848,123850,123852,123853],{"id":123849},"final-time-不是严格等于-10",[49,123851,123699],{}," 不是严格等于 ",[49,123854,123703],{},[14,123856,123857],{},"这通常不是错误。浮点数计算可能得到：",[151,123859,123862],{"className":123860,"code":123861,"language":8507,"meta":25},[28803],"1.0000000000000007\n",[49,123863,123861],{"__ignoreMap":25},[14,123865,123866,123867,123869],{},"只要接近 ",[49,123868,123703],{}," 就正常。",[42,123871,123872],{"id":123872},"方块没有掉下来",[14,123874,123875],{},"检查：",[134,123877,123878,123884,123890,123895],{},[106,123879,123880,123881],{},"方块 body 里是否有 ",[49,123882,123883],{},"\u003Cfreejoint\u002F>",[106,123885,123886,123887],{},"重力是否是 ",[49,123888,123889],{},"0 0 -9.81",[106,123891,123892,123893],{},"是否真的调用了 ",[49,123894,121985],{},[106,123896,123897,123898,123900,123901],{},"你看的是否是 ",[49,123899,123643],{},"，不是 ",[49,123902,123903],{},"initial qpos",[37,123905,123907],{"id":123906},"_8本章小结","8.本章小结",[14,123909,123910],{},"本章你已经完成了 MuJoCo 的最小闭环：",[151,123912,123915],{"className":123913,"code":123914,"language":8507,"meta":25},[28803],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[49,123916,123914],{"__ignoreMap":25},[14,123918,123919],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1468,123921,123922],{},"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":25,"searchDepth":176,"depth":176,"links":123924},[123925,123926,123927,123932,123936,123937,123938,123946],{"id":121946,"depth":176,"text":121947},{"id":122069,"depth":176,"text":122070},{"id":122344,"depth":176,"text":122345,"children":123928},[123929,123930,123931],{"id":122382,"depth":203,"text":122383},{"id":122476,"depth":203,"text":122477},{"id":122528,"depth":203,"text":122529},{"id":122552,"depth":176,"text":122553,"children":123933},[123934,123935],{"id":122872,"depth":203,"text":122872},{"id":123008,"depth":203,"text":123008},{"id":123615,"depth":176,"text":123616},{"id":123647,"depth":176,"text":123648},{"id":123752,"depth":176,"text":123753,"children":123939},[123940,123941,123942,123943,123945],{"id":123756,"depth":203,"text":123759},{"id":123779,"depth":203,"text":123780},{"id":123819,"depth":203,"text":123820},{"id":123849,"depth":203,"text":123944},"final time 不是严格等于 1.0",{"id":123872,"depth":203,"text":123872},{"id":123906,"depth":176,"text":123907},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":121938,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":123953,"title":123954,"body":123955,"description":25,"extension":23810,"meta":125611,"navigation":589,"path":125612,"seo":125613,"stem":125614,"__hash__":125615},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":123956,"toc":125587},[123957,123960,123962,123965,123968,123985,124080,124083,124089,124091,124093,124117,124120,124134,124137,124178,124180,124193,124195,124198,124246,124258,124261,124264,124270,124283,124350,124353,124372,124375,124378,124384,124386,124395,124398,124402,124411,124493,124502,124506,124512,124526,124536,124538,124868,124871,124883,124885,124896,124898,124901,124919,124922,124925,124943,124954,124957,124972,124982,124984,125005,125022,125042,125048,125088,125104,125120,125126,125129,125153,125169,125174,125204,125221,125246,125249,125264,125273,125288,125297,125312,125319,125321,125331,125344,125351,125354,125393,125400,125402,125454,125456,125462,125465,125472,125479,125482,125484,125502,125505,125508,125542,125554,125556,125559,125581,125584],[10,123958,123954],{"id":123959},"_2xml-与-mjcf-物理建模基础",[37,123961,121947],{"id":121946},[14,123963,123964],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,123966,123967],{},"本章结束后，你应该能看懂一个简单模型里：",[134,123969,123970,123973,123976,123979,123982],{},[106,123971,123972],{},"地面在哪里。",[106,123974,123975],{},"物体初始位置在哪里。",[106,123977,123978],{},"几何体是什么形状。",[106,123980,123981],{},"哪些 body 可以自由运动。",[106,123983,123984],{},"如何用名字在 Python 里找到 XML 中的对象。",[12347,123986,123987,123997],{},[16500,123988,123989],{},[12356,123990,123991,123994],{},[12365,123992,123993],{"align":19854},"标签",[12365,123995,123996],{"align":19854},"作用",[16624,123998,123999,124008,124018,124027,124037,124047,124060,124070],{},[12356,124000,124001,124005],{},[12488,124002,124003],{"align":19854},[49,124004,123837],{},[12488,124006,124007],{"align":19854},"根节点",[12356,124009,124010,124015],{},[12488,124011,124012],{"align":19854},[49,124013,124014],{},"\u003Coption>",[12488,124016,124017],{"align":19854},"仿真参数",[12356,124019,124020,124024],{},[12488,124021,124022],{"align":19854},[49,124023,123845],{},[12488,124025,124026],{"align":19854},"世界中的物体",[12356,124028,124029,124034],{},[12488,124030,124031],{"align":19854},[49,124032,124033],{},"\u003Cbody>",[12488,124035,124036],{"align":19854},"刚体",[12356,124038,124039,124044],{},[12488,124040,124041],{"align":19854},[49,124042,124043],{},"\u003Cgeom>",[12488,124045,124046],{"align":19854},"几何体、碰撞体、可视体",[12356,124048,124049,124057],{},[12488,124050,124051,8777,124054],{"align":19854},[49,124052,124053],{},"\u003Cjoint>",[49,124055,124056],{},"\u003Cfreejoint>",[12488,124058,124059],{"align":19854},"关节",[12356,124061,124062,124067],{},[12488,124063,124064],{"align":19854},[49,124065,124066],{},"\u003Csite>",[12488,124068,124069],{"align":19854},"标记点",[12356,124071,124072,124077],{},[12488,124073,124074],{"align":19854},[49,124075,124076],{},"\u003Cactuator>",[12488,124078,124079],{"align":19854},"控制器",[14,124081,124082],{},"初学时可以先记住：",[151,124084,124087],{"className":124085,"code":124086,"language":8507,"meta":25},[28803],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[49,124088,124086],{"__ignoreMap":25},[37,124090,122070],{"id":122069},[14,124092,122073],{},[151,124094,124096],{"className":47347,"code":124095,"language":47349,"meta":25,"style":25},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[49,124097,124098],{"__ignoreMap":25},[159,124099,124100,124102,124104,124106,124108,124110,124112,124114],{"class":161,"line":162},[159,124101,48101],{"class":185},[159,124103,49838],{"class":192},[159,124105,47359],{"class":192},[159,124107,49923],{"class":1146},[159,124109,123801],{"class":192},[159,124111,122114],{"class":192},[159,124113,123806],{"class":192},[159,124115,124116],{"class":192}," glfw-devel\n",[14,124118,124119],{},"pip:",[151,124121,124122],{"className":47347,"code":122219,"language":47349,"meta":25,"style":25},[49,124123,124124],{"__ignoreMap":25},[159,124125,124126,124128,124130,124132],{"class":161,"line":162},[159,124127,47356],{"class":185},[159,124129,47359],{"class":192},[159,124131,122230],{"class":192},[159,124133,122233],{"class":192},[14,124135,124136],{},"conda:",[151,124138,124140],{"className":47347,"code":124139,"language":47349,"meta":25,"style":25},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[49,124141,124142,124159,124168],{"__ignoreMap":25},[159,124143,124144,124146,124148,124150,124153,124155,124157],{"class":161,"line":162},[159,124145,53852],{"class":185},[159,124147,52698],{"class":192},[159,124149,48639],{"class":1146},[159,124151,124152],{"class":192}," mujoco-xml",[159,124154,122275],{"class":192},[159,124156,122278],{"class":1146},[159,124158,122281],{"class":1146},[159,124160,124161,124163,124165],{"class":161,"line":176},[159,124162,53852],{"class":185},[159,124164,122288],{"class":192},[159,124166,124167],{"class":192}," mujoco-xml\n",[159,124169,124170,124172,124174,124176],{"class":161,"line":203},[159,124171,47356],{"class":185},[159,124173,47359],{"class":192},[159,124175,122230],{"class":192},[159,124177,122233],{"class":192},[14,124179,122304],{},[134,124181,124182,124185,124190],{},[106,124183,124184],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[106,124186,124187,124188,51907],{},"本章使用基础标签，适用于 ",[49,124189,122327],{},[106,124191,124192],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[37,124194,122345],{"id":122344},[14,124196,124197],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[151,124199,124201],{"className":153,"code":124200,"language":155,"meta":25,"style":25},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[49,124202,124203,124217,124225,124230,124238],{"__ignoreMap":25},[159,124204,124205,124207,124209,124211,124213,124215],{"class":161,"line":162},[159,124206,166],{"class":165},[159,124208,122321],{"class":169},[159,124210,123075],{"class":185},[159,124212,189],{"class":165},[159,124214,9722],{"class":192},[159,124216,173],{"class":165},[159,124218,124219,124221,124223],{"class":161,"line":176},[159,124220,179],{"class":165},[159,124222,123141],{"class":169},[159,124224,173],{"class":165},[159,124226,124227],{"class":161,"line":203},[159,124228,124229],{"class":165},"    ...\n",[159,124231,124232,124234,124236],{"class":161,"line":223},[159,124233,254],{"class":165},[159,124235,123141],{"class":169},[159,124237,173],{"class":165},[159,124239,124240,124242,124244],{"class":161,"line":233},[159,124241,264],{"class":165},[159,124243,122321],{"class":169},[159,124245,173],{"class":165},[14,124247,124248,124250,124251,124253,124254,124257],{},[49,124249,170],{}," 表示刚体。",[49,124252,122420],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[49,124255,124256],{},"joint"," 表示刚体相对父刚体如何运动。",[42,124259,124260],{"id":124260},"层级结构非常重要",[14,124262,124263],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[151,124265,124268],{"className":124266,"code":124267,"language":8507,"meta":25},[28803],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[49,124269,124267],{"__ignoreMap":25},[14,124271,124272,122318,124275,124278,124279,124282],{},[49,124273,124274],{},"red_box_geom",[49,124276,124277],{},"box_center"," 都属于 ",[49,124280,124281],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[151,124284,124286],{"className":153,"code":124285,"language":155,"meta":25,"style":25},"\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",[49,124287,124288,124308,124322,124342],{"__ignoreMap":25},[159,124289,124290,124292,124294,124296,124298,124300,124302,124304,124306],{"class":161,"line":162},[159,124291,166],{"class":165},[159,124293,170],{"class":169},[159,124295,547],{"class":185},[159,124297,189],{"class":165},[159,124299,193],{"class":192},[159,124301,122406],{"class":185},[159,124303,189],{"class":165},[159,124305,122411],{"class":192},[159,124307,173],{"class":165},[159,124309,124310,124312,124314,124316,124318,124320],{"class":161,"line":176},[159,124311,179],{"class":165},[159,124313,122920],{"class":169},[159,124315,547],{"class":185},[159,124317,189],{"class":165},[159,124319,123261],{"class":192},[159,124321,122444],{"class":165},[159,124323,124324,124326,124328,124330,124332,124334,124336,124338,124340],{"class":161,"line":203},[159,124325,179],{"class":165},[159,124327,122420],{"class":169},[159,124329,539],{"class":185},[159,124331,189],{"class":165},[159,124333,193],{"class":192},[159,124335,122436],{"class":185},[159,124337,189],{"class":165},[159,124339,122441],{"class":192},[159,124341,122444],{"class":165},[159,124343,124344,124346,124348],{"class":161,"line":223},[159,124345,264],{"class":165},[159,124347,170],{"class":169},[159,124349,173],{"class":165},[14,124351,124352],{},"含义:",[134,124354,124355,124361,124366,124369],{},[106,124356,124357,124358,124360],{},"创建名为 ",[49,124359,427],{}," 的刚体",[106,124362,124363,124364],{},"初始位置在世界坐标 ",[49,124365,122469],{},[106,124367,124368],{},"它有一个自由关节",[106,124370,124371],{},"它有一个盒子几何体",[42,124373,124374],{"id":124374},"坐标怎么理解",[14,124376,124377],{},"MuJoCo 默认使用三维坐标：",[151,124379,124382],{"className":124380,"code":124381,"language":8507,"meta":25},[28803],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[49,124383,124381],{"__ignoreMap":25},[14,124385,38199],{},[151,124387,124389],{"className":153,"code":124388,"language":155,"meta":25,"style":25},"pos=\"0 0 1\"\n",[49,124390,124391],{"__ignoreMap":25},[159,124392,124393],{"class":161,"line":162},[159,124394,124388],{"class":165},[14,124396,124397],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[42,124399,124401],{"id":124400},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,124403,124404,124405,103830,124408,124410],{},"不同 ",[49,124406,124407],{},"type",[49,124409,55015],{}," 含义不同：",[12347,124412,124413,124428],{},[16500,124414,124415],{},[12356,124416,124417,124421,124426],{},[12365,124418,124419],{"align":19854},[49,124420,124407],{},[12365,124422,124423,124425],{"align":19854},[49,124424,55015],{}," 示例",[12365,124427,122000],{"align":19854},[16624,124429,124430,124444,124459,124478],{},[12356,124431,124432,124436,124441],{},[12488,124433,124434],{"align":19854},[49,124435,427],{},[12488,124437,124438],{"align":19854},[49,124439,124440],{},"size=\"0.1 0.2 0.3\"",[12488,124442,124443],{"align":19854},"x\u002Fy\u002Fz 半边长，不是完整长度",[12356,124445,124446,124451,124456],{},[12488,124447,124448],{"align":19854},[49,124449,124450],{},"sphere",[12488,124452,124453],{"align":19854},[49,124454,124455],{},"size=\"0.1\"",[12488,124457,124458],{"align":19854},"球半径",[12356,124460,124461,124466,124471],{},[12488,124462,124463],{"align":19854},[49,124464,124465],{},"capsule",[12488,124467,124468],{"align":19854},[49,124469,124470],{},"size=\"0.03\"",[12488,124472,124473,124474,124477],{"align":19854},"胶囊半径，长度常用 ",[49,124475,124476],{},"fromto"," 指定",[12356,124479,124480,124485,124490],{},[12488,124481,124482],{"align":19854},[49,124483,124484],{},"plane",[12488,124486,124487],{"align":19854},[49,124488,124489],{},"size=\"3 3 0.1\"",[12488,124491,124492],{"align":19854},"可视平面大小，通常当地面",[14,124494,124495,124496,124498,124499,124501],{},"最容易踩坑的是 box：",[49,124497,123324],{}," 表示边长大约是 ",[49,124500,55555],{},"，因为 MuJoCo 用的是半边长。",[42,124503,124505],{"id":124504},"site-是什么","site 是什么",[14,124507,124508,124511],{},[49,124509,124510],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[134,124513,124514,124517,124520,124523],{},[106,124515,124516],{},"标记机械臂末端。",[106,124518,124519],{},"标记目标位置。",[106,124521,124522],{},"放传感器或相机参考点。",[106,124524,124525],{},"在 Python 中读取某个关键点的世界坐标。",[14,124527,124528,124529,122318,124532,124535],{},"在后面的 Reacher 任务中，",[49,124530,124531],{},"tip",[49,124533,124534],{},"target"," 就会用 site 表示。",[37,124537,122553],{"id":122552},[151,124539,124541],{"className":53900,"code":124540,"language":53902,"meta":25,"style":25},"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",[49,124542,124543,124549,124559,124563,124567,124575,124580,124584,124588,124592,124597,124601,124606,124611,124616,124621,124625,124629,124633,124637,124641,124645,124657,124669,124677,124681,124696,124711,124715,124728,124743,124756,124769,124773,124789,124793,124797,124808,124820,124832,124844,124848,124852,124864],{"__ignoreMap":25},[159,124544,124545,124547],{"class":161,"line":162},[159,124546,53914],{"class":1142},[159,124548,122601],{"class":165},[159,124550,124551,124553,124555,124557],{"class":161,"line":176},[159,124552,53914],{"class":1142},[159,124554,54900],{"class":165},[159,124556,54903],{"class":1142},[159,124558,54906],{"class":165},[159,124560,124561],{"class":161,"line":203},[159,124562,590],{"emptyLinePlaceholder":589},[159,124564,124565],{"class":161,"line":223},[159,124566,590],{"emptyLinePlaceholder":589},[159,124568,124569,124571,124573],{"class":161,"line":233},[159,124570,122614],{"class":1146},[159,124572,1150],{"class":1142},[159,124574,122619],{"class":192},[159,124576,124577],{"class":161,"line":239},[159,124578,124579],{"class":192},"\u003Cmujoco model=\"xml_basic\">\n",[159,124581,124582],{"class":161,"line":245},[159,124583,122629],{"class":192},[159,124585,124586],{"class":161,"line":251},[159,124587,590],{"emptyLinePlaceholder":589},[159,124589,124590],{"class":161,"line":261},[159,124591,122638],{"class":192},[159,124593,124594],{"class":161,"line":603},[159,124595,124596],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[159,124598,124599],{"class":161,"line":621},[159,124600,590],{"emptyLinePlaceholder":589},[159,124602,124603],{"class":161,"line":634},[159,124604,124605],{"class":192},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[159,124607,124608],{"class":161,"line":640},[159,124609,124610],{"class":192},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[159,124612,124613],{"class":161,"line":1075},[159,124614,124615],{"class":192},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[159,124617,124618],{"class":161,"line":1081},[159,124619,124620],{"class":192},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[159,124622,124623],{"class":161,"line":1091},[159,124624,122667],{"class":192},[159,124626,124627],{"class":161,"line":1100},[159,124628,122672],{"class":192},[159,124630,124631],{"class":161,"line":1123},[159,124632,122677],{"class":192},[159,124634,124635],{"class":161,"line":1132},[159,124636,116998],{"class":192},[159,124638,124639],{"class":161,"line":1139},[159,124640,590],{"emptyLinePlaceholder":589},[159,124642,124643],{"class":161,"line":1168},[159,124644,590],{"emptyLinePlaceholder":589},[159,124646,124647,124649,124651,124653,124655],{"class":161,"line":1174},[159,124648,55465],{"class":1142},[159,124650,25625],{"class":185},[159,124652,122698],{"class":165},[159,124654,116986],{"class":1146},[159,124656,27364],{"class":165},[159,124658,124659,124661,124663,124665,124667],{"class":161,"line":1180},[159,124660,122707],{"class":165},[159,124662,189],{"class":1142},[159,124664,122712],{"class":165},[159,124666,122614],{"class":1146},[159,124668,1165],{"class":165},[159,124670,124671,124673,124675],{"class":161,"line":1194},[159,124672,122721],{"class":165},[159,124674,189],{"class":1142},[159,124676,122726],{"class":165},[159,124678,124679],{"class":161,"line":1200},[159,124680,590],{"emptyLinePlaceholder":589},[159,124682,124683,124686,124688,124691,124694],{"class":161,"line":1221},[159,124684,124685],{"class":165},"    box_body_id ",[159,124687,189],{"class":1142},[159,124689,124690],{"class":165}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[159,124692,124693],{"class":192},"\"red_box\"",[159,124695,1165],{"class":165},[159,124697,124698,124701,124703,124706,124709],{"class":161,"line":1230},[159,124699,124700],{"class":165},"    site_id ",[159,124702,189],{"class":1142},[159,124704,124705],{"class":165}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[159,124707,124708],{"class":192},"\"box_center\"",[159,124710,1165],{"class":165},[159,124712,124713],{"class":161,"line":1247},[159,124714,590],{"emptyLinePlaceholder":589},[159,124716,124717,124719,124722,124724,124726],{"class":161,"line":1265},[159,124718,26732],{"class":1142},[159,124720,124721],{"class":165}," box_body_id ",[159,124723,166],{"class":1142},[159,124725,1259],{"class":1146},[159,124727,27364],{"class":165},[159,124729,124730,124733,124736,124738,124741],{"class":161,"line":1277},[159,124731,124732],{"class":1142},"        raise",[159,124734,124735],{"class":1146}," RuntimeError",[159,124737,1159],{"class":165},[159,124739,124740],{"class":192},"\"body red_box not found\"",[159,124742,1165],{"class":165},[159,124744,124745,124747,124750,124752,124754],{"class":161,"line":1283},[159,124746,26732],{"class":1142},[159,124748,124749],{"class":165}," site_id ",[159,124751,166],{"class":1142},[159,124753,1259],{"class":1146},[159,124755,27364],{"class":165},[159,124757,124758,124760,124762,124764,124767],{"class":161,"line":1294},[159,124759,124732],{"class":1142},[159,124761,124735],{"class":1146},[159,124763,1159],{"class":165},[159,124765,124766],{"class":192},"\"site box_center not found\"",[159,124768,1165],{"class":165},[159,124770,124771],{"class":161,"line":1305},[159,124772,590],{"emptyLinePlaceholder":589},[159,124774,124775,124777,124779,124781,124783,124785,124787],{"class":161,"line":1311},[159,124776,11677],{"class":1142},[159,124778,122801],{"class":165},[159,124780,49566],{"class":1142},[159,124782,55961],{"class":1146},[159,124784,1159],{"class":165},[159,124786,13303],{"class":1146},[159,124788,54307],{"class":165},[159,124790,124791],{"class":161,"line":1322},[159,124792,122816],{"class":165},[159,124794,124795],{"class":161,"line":1327},[159,124796,590],{"emptyLinePlaceholder":589},[159,124798,124799,124801,124803,124806],{"class":161,"line":1336},[159,124800,54819],{"class":1146},[159,124802,1159],{"class":165},[159,124804,124805],{"class":192},"\"simulation time:\"",[159,124807,122778],{"class":165},[159,124809,124810,124812,124814,124817],{"class":161,"line":1345},[159,124811,54819],{"class":1146},[159,124813,1159],{"class":165},[159,124815,124816],{"class":192},"\"box body position:\"",[159,124818,124819],{"class":165},", data.xpos[box_body_id].copy())\n",[159,124821,124822,124824,124826,124829],{"class":161,"line":1350},[159,124823,54819],{"class":1146},[159,124825,1159],{"class":165},[159,124827,124828],{"class":192},"\"site position:\"",[159,124830,124831],{"class":165},", data.site_xpos[site_id].copy())\n",[159,124833,124834,124836,124838,124841],{"class":161,"line":1764},[159,124835,54819],{"class":1146},[159,124837,1159],{"class":165},[159,124839,124840],{"class":192},"\"box qpos:\"",[159,124842,124843],{"class":165},", np.array(data.qpos))\n",[159,124845,124846],{"class":161,"line":1769},[159,124847,590],{"emptyLinePlaceholder":589},[159,124849,124850],{"class":161,"line":1777},[159,124851,590],{"emptyLinePlaceholder":589},[159,124853,124854,124856,124858,124860,124862],{"class":161,"line":1788},[159,124855,18445],{"class":1142},[159,124857,54740],{"class":1146},[159,124859,122859],{"class":1142},[159,124861,122862],{"class":192},[159,124863,27364],{"class":165},[159,124865,124866],{"class":161,"line":1802},[159,124867,122869],{"class":165},[14,124869,124870],{},"保存为：",[151,124872,124874],{"className":47347,"code":124873,"language":47349,"meta":25,"style":25},"touch ch2_xml_basic.py\n",[49,124875,124876],{"__ignoreMap":25},[159,124877,124878,124880],{"class":161,"line":162},[159,124879,122583],{"class":185},[159,124881,124882],{"class":192}," ch2_xml_basic.py\n",[14,124884,123601],{},[151,124886,124888],{"className":47347,"code":124887,"language":47349,"meta":25,"style":25},"python ch2_xml_basic.py\n",[49,124889,124890],{"__ignoreMap":25},[159,124891,124892,124894],{"class":161,"line":162},[159,124893,53902],{"class":185},[159,124895,124882],{"class":192},[42,124897,122872],{"id":122872},[14,124899,124900],{},"用名字查找 body：",[151,124902,124904],{"className":53900,"code":124903,"language":53902,"meta":25,"style":25},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[49,124905,124906],{"__ignoreMap":25},[159,124907,124908,124911,124913,124915,124917],{"class":161,"line":162},[159,124909,124910],{"class":165},"box_body_id ",[159,124912,189],{"class":1142},[159,124914,124690],{"class":165},[159,124916,124693],{"class":192},[159,124918,1165],{"class":165},[14,124920,124921],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,124923,124924],{},"用名字查找 site：",[151,124926,124928],{"className":53900,"code":124927,"language":53902,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[49,124929,124930],{"__ignoreMap":25},[159,124931,124932,124935,124937,124939,124941],{"class":161,"line":162},[159,124933,124934],{"class":165},"site_id ",[159,124936,189],{"class":1142},[159,124938,124705],{"class":165},[159,124940,124708],{"class":192},[159,124942,1165],{"class":165},[14,124944,124945,124946,124949,124950,124953],{},"注意第二个参数是对象类型。查 body 就用 ",[49,124947,124948],{},"mjOBJ_BODY","，查 site 就用 ",[49,124951,124952],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,124955,124956],{},"读取世界坐标：",[151,124958,124960],{"className":53900,"code":124959,"language":53902,"meta":25,"style":25},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[49,124961,124962,124967],{"__ignoreMap":25},[159,124963,124964],{"class":161,"line":162},[159,124965,124966],{"class":165},"data.xpos[box_body_id]\n",[159,124968,124969],{"class":161,"line":176},[159,124970,124971],{"class":165},"data.site_xpos[site_id]\n",[14,124973,124974,124977,124978,124981],{},[49,124975,124976],{},"xpos"," 是 body 的世界坐标，",[49,124979,124980],{},"site_xpos"," 是 site 的世界坐标。",[42,124983,123008],{"id":123008},[151,124985,124987],{"className":53900,"code":124986,"language":53902,"meta":25,"style":25},"import mujoco\nimport numpy as np\n",[49,124988,124989,124995],{"__ignoreMap":25},[159,124990,124991,124993],{"class":161,"line":162},[159,124992,53914],{"class":1142},[159,124994,122601],{"class":165},[159,124996,124997,124999,125001,125003],{"class":161,"line":176},[159,124998,53914],{"class":1142},[159,125000,54900],{"class":165},[159,125002,54903],{"class":1142},[159,125004,54906],{"class":165},[14,125006,125007,125008,125011,125012,125015,125016,24079,125019,51907],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[49,125009,125010],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[49,125013,125014],{},"as np"," 是习惯写法，后面就可以写 ",[49,125017,125018],{},"np.array(...)",[49,125020,125021],{},"np.round(...)",[151,125023,125024],{"className":53900,"code":122895,"language":53902,"meta":25,"style":25},[49,125025,125026,125034,125038],{"__ignoreMap":25},[159,125027,125028,125030,125032],{"class":161,"line":162},[159,125029,122614],{"class":1146},[159,125031,1150],{"class":1142},[159,125033,122619],{"class":192},[159,125035,125036],{"class":161,"line":176},[159,125037,122910],{"class":192},[159,125039,125040],{"class":161,"line":203},[159,125041,116998],{"class":192},[14,125043,125044,125045,51907],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[49,125046,125047],{},"mujoco.MjModel.from_xml_string(XML)",[151,125049,125051],{"className":153,"code":125050,"language":155,"meta":25,"style":25},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[49,125052,125053],{"__ignoreMap":25},[159,125054,125055,125057,125059,125061,125063,125065,125067,125069,125072,125074,125076,125079,125081,125083,125086],{"class":161,"line":162},[159,125056,166],{"class":165},[159,125058,124510],{"class":169},[159,125060,547],{"class":185},[159,125062,189],{"class":165},[159,125064,124708],{"class":192},[159,125066,122406],{"class":185},[159,125068,189],{"class":165},[159,125070,125071],{"class":192},"\"0 0 0\"",[159,125073,122436],{"class":185},[159,125075,189],{"class":165},[159,125077,125078],{"class":192},"\"0.03\"",[159,125080,100067],{"class":185},[159,125082,189],{"class":165},[159,125084,125085],{"class":192},"\"0 1 0 1\"",[159,125087,122444],{"class":165},[14,125089,125090,125092,125093,125096,125097,125099,125100,125103],{},[49,125091,124510],{}," 是标记点。",[49,125094,125095],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[49,125098,124470],{}," 表示显示出来的小球大小。",[49,125101,125102],{},"rgba=\"0 1 0 1\""," 表示绿色。",[151,125105,125106],{"className":53900,"code":124903,"language":53902,"meta":25,"style":25},[49,125107,125108],{"__ignoreMap":25},[159,125109,125110,125112,125114,125116,125118],{"class":161,"line":162},[159,125111,124910],{"class":165},[159,125113,189],{"class":1142},[159,125115,124690],{"class":165},[159,125117,124693],{"class":192},[159,125119,1165],{"class":165},[14,125121,125122,125123,125125],{},"这行的作用是：根据名字 ",[49,125124,124693],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,125127,125128],{},"拆开看：",[134,125130,125131,125137,125142,125148],{},[106,125132,125133,125136],{},[49,125134,125135],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[106,125138,125139,125141],{},[49,125140,123385],{}," 是被查询的模型。",[106,125143,125144,125147],{},[49,125145,125146],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[106,125149,125150,125152],{},[49,125151,124693],{}," 是 XML 里写的名字。",[151,125154,125155],{"className":53900,"code":124927,"language":53902,"meta":25,"style":25},[49,125156,125157],{"__ignoreMap":25},[159,125158,125159,125161,125163,125165,125167],{"class":161,"line":162},[159,125160,124934],{"class":165},[159,125162,189],{"class":1142},[159,125164,124705],{"class":165},[159,125166,124708],{"class":192},[159,125168,1165],{"class":165},[14,125170,125171,125172,51907],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[49,125173,124708],{},[151,125175,125177],{"className":53900,"code":125176,"language":53902,"meta":25,"style":25},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[49,125178,125179,125191],{"__ignoreMap":25},[159,125180,125181,125183,125185,125187,125189],{"class":161,"line":162},[159,125182,18445],{"class":1142},[159,125184,124721],{"class":165},[159,125186,166],{"class":1142},[159,125188,1259],{"class":1146},[159,125190,27364],{"class":165},[159,125192,125193,125196,125198,125200,125202],{"class":161,"line":176},[159,125194,125195],{"class":1142},"    raise",[159,125197,124735],{"class":1146},[159,125199,1159],{"class":165},[159,125201,124740],{"class":192},[159,125203,1165],{"class":165},[14,125205,125206,125208,125209,125212,125213,125216,125217,125220],{},[49,125207,18445],{}," 是条件判断。",[49,125210,125211],{},"mj_name2id"," 找不到对象时会返回 ",[49,125214,125215],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[49,125218,125219],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[151,125222,125224],{"className":53900,"code":125223,"language":53902,"meta":25,"style":25},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[49,125225,125226,125242],{"__ignoreMap":25},[159,125227,125228,125230,125232,125234,125236,125238,125240],{"class":161,"line":162},[159,125229,26657],{"class":1142},[159,125231,122801],{"class":165},[159,125233,49566],{"class":1142},[159,125235,55961],{"class":1146},[159,125237,1159],{"class":165},[159,125239,13303],{"class":1146},[159,125241,54307],{"class":165},[159,125243,125244],{"class":161,"line":176},[159,125245,122999],{"class":165},[14,125247,125248],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[151,125250,125252],{"className":53900,"code":125251,"language":53902,"meta":25,"style":25},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[49,125253,125254],{"__ignoreMap":25},[159,125255,125256,125258,125260,125262],{"class":161,"line":162},[159,125257,53937],{"class":1146},[159,125259,1159],{"class":165},[159,125261,124816],{"class":192},[159,125263,124819],{"class":165},[14,125265,125266,125268,125269,125272],{},[49,125267,122379],{}," 保存所有 body 的世界坐标。",[49,125270,125271],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[151,125274,125276],{"className":53900,"code":125275,"language":53902,"meta":25,"style":25},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[49,125277,125278],{"__ignoreMap":25},[159,125279,125280,125282,125284,125286],{"class":161,"line":162},[159,125281,53937],{"class":1146},[159,125283,1159],{"class":165},[159,125285,124828],{"class":192},[159,125287,124831],{"class":165},[14,125289,125290,125293,125294,125296],{},[49,125291,125292],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[49,125295,124277],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[151,125298,125300],{"className":53900,"code":125299,"language":53902,"meta":25,"style":25},"print(\"box qpos:\", np.array(data.qpos))\n",[49,125301,125302],{"__ignoreMap":25},[159,125303,125304,125306,125308,125310],{"class":161,"line":162},[159,125305,53937],{"class":1146},[159,125307,1159],{"class":165},[159,125309,124840],{"class":192},[159,125311,124843],{"class":165},[14,125313,125314,125315,125318],{},"这里打印广义位置数组。",[49,125316,125317],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[37,125320,123616],{"id":123615},[14,125322,125323,125324,125327,125328,51907],{},"程序会输出 ",[49,125325,125326],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[49,125329,125330],{},"qpos",[14,125332,125333,125335,125336,125339,125340,125343],{},[49,125334,125271],{}," 是 body 的世界坐标位置。",[49,125337,125338],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[49,125341,125342],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,125345,103522,125346,103830,125348,125350],{},[49,125347,124277],{},[49,125349,125095],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,125352,125353],{},"如果你把 site 改成：",[151,125355,125357],{"className":153,"code":125356,"language":155,"meta":25,"style":25},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[49,125358,125359],{"__ignoreMap":25},[159,125360,125361,125363,125365,125367,125369,125372,125374,125376,125379,125381,125383,125385,125387,125389,125391],{"class":161,"line":162},[159,125362,166],{"class":165},[159,125364,124510],{"class":169},[159,125366,547],{"class":185},[159,125368,189],{"class":165},[159,125370,125371],{"class":192},"\"box_top\"",[159,125373,122406],{"class":185},[159,125375,189],{"class":165},[159,125377,125378],{"class":192},"\"0 0 0.15\"",[159,125380,122436],{"class":185},[159,125382,189],{"class":165},[159,125384,125078],{"class":192},[159,125386,100067],{"class":185},[159,125388,189],{"class":165},[159,125390,125085],{"class":192},[159,125392,122444],{"class":165},[14,125394,125395,125396,125399],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[49,125397,125398],{},"site position"," 就会比 body position 的 z 坐标更高。",[37,125401,123648],{"id":123647},[134,125403,125404,125413,125416,125423,125429,125440],{},[106,125405,123711,125406,125408,125409,123714,125411,51907],{},[49,125407,124281],{}," 的初始高度从 ",[49,125410,4932],{},[49,125412,11034],{},[106,125414,125415],{},"重新运行程序。",[106,125417,125418,125419,125422],{},"观察 ",[49,125420,125421],{},"box qpos"," 和最终位置是否变化。",[106,125424,125425,125426,125428],{},"故意把 ",[49,125427,124510],{}," 名称改错，确认程序能报错。",[106,125430,123711,125431,125433,125434,123714,125436,125439],{},[49,125432,122420],{}," 的颜色 ",[49,125435,123332],{},[49,125437,125438],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[106,125441,123711,125442,103830,125444,123714,125447,125450,125451,125453],{},[49,125443,124277],{},[49,125445,125446],{},"pos",[49,125448,125449],{},"0 0 0.2","，观察 ",[49,125452,125398],{}," 如何变化。",[37,125455,123753],{"id":123752},[42,125457,125459],{"id":125458},"xml-error-schema-violation",[49,125460,125461],{},"XML Error: Schema violation",[14,125463,125464],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[42,125466,125468,102590,125470],{"id":125467},"mj_name2id-返回-1",[49,125469,125211],{},[49,125471,125215],{},[14,125473,125474,125475,125478],{},"说明名字没有找到。检查 XML 中 ",[49,125476,125477],{},"name=\"...\"","，并确认对象类型正确。",[42,125480,125481],{"id":125481},"物体不下落",[14,125483,123823],{},[134,125485,125486,125491,125496],{},[106,125487,125488,125489],{},"body 是否有 ",[49,125490,122920],{},[106,125492,125493,125494],{},"gravity 是否为 ",[49,125495,123889],{},[106,125497,125498,125499,125501],{},"body 是否被固定在 ",[49,125500,123141],{}," 中",[42,125503,125504],{"id":125504},"坐标看起来不符合预期",[14,125506,125507],{},"先区分两种坐标：",[12347,125509,125510,125519],{},[16500,125511,125512],{},[12356,125513,125514,125517],{},[12365,125515,125516],{"align":19854},"坐标",[12365,125518,122000],{"align":19854},[16624,125520,125521,125531],{},[12356,125522,125523,125528],{},[12488,125524,125525,125526],{"align":19854},"XML 里的 ",[49,125527,125446],{},[12488,125529,125530],{"align":19854},"相对父 body 的局部坐标",[12356,125532,125533,125539],{},[12488,125534,125535,8777,125537],{"align":19854},[49,125536,122379],{},[49,125538,125292],{},[12488,125540,125541],{"align":19854},"仿真更新后的世界坐标",[14,125543,125544,125545,125547,125548,103839,125551,125553],{},"如果你修改了 ",[49,125546,122370],{},"，但还没调用 ",[49,125549,125550],{},"mj_forward",[49,125552,122515],{},"，世界坐标可能还没有更新。",[37,125555,123907],{"id":123906},[14,125557,125558],{},"MJCF 建模先掌握四件事：",[134,125560,125561,125566,125571,125576],{},[106,125562,125563,125565],{},[49,125564,170],{}," 表示刚体层级。",[106,125567,125568,125570],{},[49,125569,122420],{}," 表示形状、碰撞和质量。",[106,125572,125573,125575],{},[49,125574,124256],{}," 决定 body 能不能动、怎么动。",[106,125577,125578,125580],{},[49,125579,124510],{}," 用来标记关键点，方便 Python 读取位置。",[14,125582,125583],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1468,125585,125586],{},"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":25,"searchDepth":176,"depth":176,"links":125588},[125589,125590,125591,125597,125601,125602,125603,125610],{"id":121946,"depth":176,"text":121947},{"id":122069,"depth":176,"text":122070},{"id":122344,"depth":176,"text":122345,"children":125592},[125593,125594,125595,125596],{"id":124260,"depth":203,"text":124260},{"id":124374,"depth":203,"text":124374},{"id":124400,"depth":203,"text":124401},{"id":124504,"depth":203,"text":124505},{"id":122552,"depth":176,"text":122553,"children":125598},[125599,125600],{"id":122872,"depth":203,"text":122872},{"id":123008,"depth":203,"text":123008},{"id":123615,"depth":176,"text":123616},{"id":123647,"depth":176,"text":123648},{"id":123752,"depth":176,"text":123753,"children":125604},[125605,125606,125608,125609],{"id":125458,"depth":203,"text":125461},{"id":125467,"depth":203,"text":125607},"mj_name2id 返回 -1",{"id":125481,"depth":203,"text":125481},{"id":125504,"depth":203,"text":125504},{"id":123906,"depth":176,"text":123907},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":123954,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":125617,"title":125618,"body":125619,"description":25,"extension":23810,"meta":127114,"navigation":589,"path":127115,"seo":127116,"stem":127117,"__hash__":127118},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":125620,"toc":127086},[125621,125624,125626,125629,125632,125670,125673,125679,125682,125684,125686,125713,125715,125729,125731,125772,125774,125798,125800,125803,125812,125821,125824,125833,125841,125850,125853,125863,125866,125918,125925,125931,125939,125987,125990,126009,126012,126020,126024,126033,126066,126068,126416,126418,126430,126432,126443,126445,126448,126469,126475,126478,126503,126513,126516,126524,126527,126530,126551,126562,126564,126584,126587,126608,126617,126636,126642,126667,126670,126684,126691,126715,126718,126726,126735,126751,126763,126771,126780,126782,126785,126809,126814,126817,126839,126841,126880,126882,126889,126891,126899,126902,126905,126917,126958,126965,126976,126983,126986,127035,127038,127041,127047,127049,127054,127080,127083],[10,125622,125618],{"id":125623},"_3python-控制接口读取状态与推进仿真",[37,125625,121947],{"id":121946},[14,125627,125628],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,125630,125631],{},"你将学习:",[134,125633,125634,125639,125644,125648,125653,125664],{},[106,125635,125636],{},[49,125637,125638],{},"MjModel.from_xml_string",[106,125640,125641],{},[49,125642,125643],{},"MjData(model)",[106,125645,125646],{},[49,125647,122515],{},[106,125649,125650],{},[49,125651,125652],{},"mj_resetData",[106,125654,125655,125656,24079,125658,24079,125661],{},"读取 ",[49,125657,125330],{},[49,125659,125660],{},"qvel",[49,125662,125663],{},"ctrl",[106,125665,125666,125667],{},"使用 ",[49,125668,125669],{},"model.opt.timestep",[14,125671,125672],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[151,125674,125677],{"className":125675,"code":125676,"language":8507,"meta":25},[28803],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[49,125678,125676],{"__ignoreMap":25},[14,125680,125681],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[37,125683,122070],{"id":122069},[14,125685,122073],{},[151,125687,125689],{"className":47347,"code":125688,"language":47349,"meta":25,"style":25},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[49,125690,125691],{"__ignoreMap":25},[159,125692,125693,125695,125697,125699,125701,125704,125706,125708,125710],{"class":161,"line":162},[159,125694,48101],{"class":185},[159,125696,49838],{"class":192},[159,125698,47359],{"class":192},[159,125700,49923],{"class":1146},[159,125702,125703],{"class":192}," python3",[159,125705,122098],{"class":192},[159,125707,123801],{"class":192},[159,125709,122114],{"class":192},[159,125711,125712],{"class":192}," glfw\n",[14,125714,124119],{},[151,125716,125717],{"className":47347,"code":122219,"language":47349,"meta":25,"style":25},[49,125718,125719],{"__ignoreMap":25},[159,125720,125721,125723,125725,125727],{"class":161,"line":162},[159,125722,47356],{"class":185},[159,125724,47359],{"class":192},[159,125726,122230],{"class":192},[159,125728,122233],{"class":192},[14,125730,124136],{},[151,125732,125734],{"className":47347,"code":125733,"language":47349,"meta":25,"style":25},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[49,125735,125736,125753,125762],{"__ignoreMap":25},[159,125737,125738,125740,125742,125744,125747,125749,125751],{"class":161,"line":162},[159,125739,53852],{"class":185},[159,125741,52698],{"class":192},[159,125743,48639],{"class":1146},[159,125745,125746],{"class":192}," mujoco-python-api",[159,125748,122275],{"class":192},[159,125750,122278],{"class":1146},[159,125752,122281],{"class":1146},[159,125754,125755,125757,125759],{"class":161,"line":176},[159,125756,53852],{"class":185},[159,125758,122288],{"class":192},[159,125760,125761],{"class":192}," mujoco-python-api\n",[159,125763,125764,125766,125768,125770],{"class":161,"line":203},[159,125765,47356],{"class":185},[159,125767,47359],{"class":192},[159,125769,122230],{"class":192},[159,125771,122233],{"class":192},[14,125773,122304],{},[134,125775,125776,125783,125792],{},[106,125777,125778,122318,125780,125782],{},[49,125779,121975],{},[49,125781,121980],{}," 是官方 Python bindings 的类名。",[106,125784,125785,125786,125789,125790,51907],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[49,125787,125788],{},"mjModel"," 在 Python 中是 ",[49,125791,122009],{},[106,125793,125794,125795,51907],{},"不要使用 ",[49,125796,125797],{},"sim = mujoco_py.MjSim(...)",[37,125799,122345],{"id":122344},[14,125801,125802],{},"仿真推进核心代码:",[151,125804,125806],{"className":53900,"code":125805,"language":53902,"meta":25,"style":25},"mujoco.mj_step(model, data)\n",[49,125807,125808],{"__ignoreMap":25},[159,125809,125810],{"class":161,"line":162},[159,125811,125805],{"class":165},[14,125813,125814,125815,24079,125817,24079,125819,51907],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[49,125816,122370],{},[49,125818,122373],{},[49,125820,122367],{},[14,125822,125823],{},"重置仿真:",[151,125825,125827],{"className":53900,"code":125826,"language":53902,"meta":25,"style":25},"mujoco.mj_resetData(model, data)\n",[49,125828,125829],{"__ignoreMap":25},[159,125830,125831],{"class":161,"line":162},[159,125832,125826],{"class":165},[14,125834,125835,125836,103839,125838,125840],{},"如果手动修改了 ",[49,125837,122370],{},[49,125839,122373],{},"，通常应调用:",[151,125842,125844],{"className":53900,"code":125843,"language":53902,"meta":25,"style":25},"mujoco.mj_forward(model, data)\n",[49,125845,125846],{"__ignoreMap":25},[159,125847,125848],{"class":161,"line":162},[159,125849,125843],{"class":165},[14,125851,125852],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[42,125854,125856,24079,125858,24079,125860,125862],{"id":125855},"qposqvelctrl-是什么",[49,125857,125330],{},[49,125859,125660],{},[49,125861,125663],{}," 是什么",[14,125864,125865],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[12347,125867,125868,125880],{},[16500,125869,125870],{},[12356,125871,125872,125875,125877],{},[12365,125873,125874],{"align":19854},"字段",[12365,125876,122000],{"align":19854},[12365,125878,125879],{"align":19854},"谁来修改",[16624,125881,125882,125894,125906],{},[12356,125883,125884,125888,125891],{},[12488,125885,125886],{"align":19854},[49,125887,122370],{},[12488,125889,125890],{"align":19854},"广义位置，例如小车位置、关节角、自由物体位置姿态",[12488,125892,125893],{"align":19854},"MuJoCo 更新，也可以手动设置初始状态",[12356,125895,125896,125900,125903],{},[12488,125897,125898],{"align":19854},[49,125899,122373],{},[12488,125901,125902],{"align":19854},"广义速度，例如小车速度、关节角速度",[12488,125904,125905],{"align":19854},"MuJoCo 更新，也可以手动清零",[12356,125907,125908,125912,125915],{},[12488,125909,125910],{"align":19854},[49,125911,122376],{},[12488,125913,125914],{"align":19854},"actuator 的控制输入",[12488,125916,125917],{"align":19854},"主要由你的控制代码写入",[14,125919,32623,125920,122318,125922,125924],{},[49,125921,125330],{},[49,125923,125660],{}," 不一定同维。自由刚体就是典型例子：",[151,125926,125929],{"className":125927,"code":125928,"language":8507,"meta":25},[28803],"freejoint: qpos 7 维，qvel 6 维\n",[49,125930,125928],{"__ignoreMap":25},[42,125932,125934,122318,125936,125938],{"id":125933},"mj_step-和-mj_forward-的区别",[49,125935,122515],{},[49,125937,125550],{}," 的区别",[12347,125940,125941,125954],{},[16500,125942,125943],{},[12356,125944,125945,125948,125951],{},[12365,125946,125947],{"align":19854},"函数",[12365,125949,125950],{"align":19854},"是否推进时间",[12365,125952,125953],{"align":19854},"什么时候用",[16624,125955,125956,125969],{},[12356,125957,125958,125963,125966],{},[12488,125959,125960],{"align":19854},[49,125961,125962],{},"mj_step(model, data)",[12488,125964,125965],{"align":19854},"是",[12488,125967,125968],{"align":19854},"正常仿真循环，每调用一次前进一步",[12356,125970,125971,125976,125979],{},[12488,125972,125973],{"align":19854},[49,125974,125975],{},"mj_forward(model, data)",[12488,125977,125978],{"align":19854},"否",[12488,125980,125981,125982,24079,125984,125986],{"align":19854},"手动改了 ",[49,125983,125330],{},[49,125985,125660],{}," 后，刷新派生量",[14,125988,125989],{},"例如你写：",[151,125991,125993],{"className":53900,"code":125992,"language":53902,"meta":25,"style":25},"data.qpos[2] = 2.0\n",[49,125994,125995],{"__ignoreMap":25},[159,125996,125997,126000,126002,126004,126006],{"class":161,"line":162},[159,125998,125999],{"class":165},"data.qpos[",[159,126001,11034],{"class":1146},[159,126003,28061],{"class":165},[159,126005,189],{"class":1142},[159,126007,126008],{"class":1146}," 2.0\n",[14,126010,126011],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[151,126013,126014],{"className":53900,"code":125843,"language":53902,"meta":25,"style":25},[49,126015,126016],{"__ignoreMap":25},[159,126017,126018],{"class":161,"line":162},[159,126019,125843],{"class":165},[42,126021,126023],{"id":126022},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,126025,126026,126029,126030,126032],{},[49,126027,126028],{},"mujoco.mj_resetData(model, data)"," 会把 ",[49,126031,56843],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[151,126034,126036],{"className":53900,"code":126035,"language":53902,"meta":25,"style":25},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[49,126037,126038,126042,126052,126062],{"__ignoreMap":25},[159,126039,126040],{"class":161,"line":162},[159,126041,125826],{"class":165},[159,126043,126044,126047,126049],{"class":161,"line":176},[159,126045,126046],{"class":165},"data.qpos[:] ",[159,126048,189],{"class":1142},[159,126050,126051],{"class":165}," random_qpos\n",[159,126053,126054,126057,126059],{"class":161,"line":203},[159,126055,126056],{"class":165},"data.qvel[:] ",[159,126058,189],{"class":1142},[159,126060,126061],{"class":1146}," 0.0\n",[159,126063,126064],{"class":161,"line":223},[159,126065,125843],{"class":165},[37,126067,122553],{"id":122552},[151,126069,126071],{"className":53900,"code":126070,"language":53902,"meta":25,"style":25},"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",[49,126072,126073,126079,126089,126093,126097,126105,126110,126114,126118,126122,126127,126131,126136,126141,126146,126150,126154,126158,126162,126166,126170,126189,126196,126208,126219,126235,126251,126255,126259,126271,126283,126291,126295,126306,126310,126326,126330,126334,126343,126347,126352,126361,126365,126378,126383,126392,126396,126400,126412],{"__ignoreMap":25},[159,126074,126075,126077],{"class":161,"line":162},[159,126076,53914],{"class":1142},[159,126078,122601],{"class":165},[159,126080,126081,126083,126085,126087],{"class":161,"line":176},[159,126082,53914],{"class":1142},[159,126084,54900],{"class":165},[159,126086,54903],{"class":1142},[159,126088,54906],{"class":165},[159,126090,126091],{"class":161,"line":203},[159,126092,590],{"emptyLinePlaceholder":589},[159,126094,126095],{"class":161,"line":223},[159,126096,590],{"emptyLinePlaceholder":589},[159,126098,126099,126101,126103],{"class":161,"line":233},[159,126100,122614],{"class":1146},[159,126102,1150],{"class":1142},[159,126104,122619],{"class":192},[159,126106,126107],{"class":161,"line":239},[159,126108,126109],{"class":192},"\u003Cmujoco model=\"state_api\">\n",[159,126111,126112],{"class":161,"line":245},[159,126113,122629],{"class":192},[159,126115,126116],{"class":161,"line":251},[159,126117,590],{"emptyLinePlaceholder":589},[159,126119,126120],{"class":161,"line":261},[159,126121,122638],{"class":192},[159,126123,126124],{"class":161,"line":603},[159,126125,126126],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[159,126128,126129],{"class":161,"line":621},[159,126130,590],{"emptyLinePlaceholder":589},[159,126132,126133],{"class":161,"line":634},[159,126134,126135],{"class":192},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[159,126137,126138],{"class":161,"line":640},[159,126139,126140],{"class":192},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[159,126142,126143],{"class":161,"line":1075},[159,126144,126145],{"class":192},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[159,126147,126148],{"class":161,"line":1081},[159,126149,122667],{"class":192},[159,126151,126152],{"class":161,"line":1091},[159,126153,122672],{"class":192},[159,126155,126156],{"class":161,"line":1100},[159,126157,122677],{"class":192},[159,126159,126160],{"class":161,"line":1123},[159,126161,116998],{"class":192},[159,126163,126164],{"class":161,"line":1132},[159,126165,590],{"emptyLinePlaceholder":589},[159,126167,126168],{"class":161,"line":1139},[159,126169,590],{"emptyLinePlaceholder":589},[159,126171,126172,126174,126177,126180,126182,126185,126187],{"class":161,"line":1168},[159,126173,55465],{"class":1142},[159,126175,126176],{"class":185}," print_state",[159,126178,126179],{"class":165},"(prefix: ",[159,126181,24983],{"class":1146},[159,126183,126184],{"class":165},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[159,126186,116986],{"class":1146},[159,126188,27364],{"class":165},[159,126190,126191,126193],{"class":161,"line":1174},[159,126192,54819],{"class":1146},[159,126194,126195],{"class":165},"(prefix)\n",[159,126197,126198,126200,126202,126205],{"class":161,"line":1180},[159,126199,54819],{"class":1146},[159,126201,1159],{"class":165},[159,126203,126204],{"class":192},"\"  timestep:\"",[159,126206,126207],{"class":165},", model.opt.timestep)\n",[159,126209,126210,126212,126214,126217],{"class":161,"line":1194},[159,126211,54819],{"class":1146},[159,126213,1159],{"class":165},[159,126215,126216],{"class":192},"\"  time:\"",[159,126218,122778],{"class":165},[159,126220,126221,126223,126225,126228,126231,126233],{"class":161,"line":1200},[159,126222,54819],{"class":1146},[159,126224,1159],{"class":165},[159,126226,126227],{"class":192},"\"  qpos:\"",[159,126229,126230],{"class":165},", np.round(data.qpos.copy(), ",[159,126232,8866],{"class":1146},[159,126234,18787],{"class":165},[159,126236,126237,126239,126241,126244,126247,126249],{"class":161,"line":1221},[159,126238,54819],{"class":1146},[159,126240,1159],{"class":165},[159,126242,126243],{"class":192},"\"  qvel:\"",[159,126245,126246],{"class":165},", np.round(data.qvel.copy(), ",[159,126248,8866],{"class":1146},[159,126250,18787],{"class":165},[159,126252,126253],{"class":161,"line":1230},[159,126254,590],{"emptyLinePlaceholder":589},[159,126256,126257],{"class":161,"line":1247},[159,126258,590],{"emptyLinePlaceholder":589},[159,126260,126261,126263,126265,126267,126269],{"class":161,"line":1265},[159,126262,55465],{"class":1142},[159,126264,25625],{"class":185},[159,126266,122698],{"class":165},[159,126268,116986],{"class":1146},[159,126270,27364],{"class":165},[159,126272,126273,126275,126277,126279,126281],{"class":161,"line":1277},[159,126274,122707],{"class":165},[159,126276,189],{"class":1142},[159,126278,122712],{"class":165},[159,126280,122614],{"class":1146},[159,126282,1165],{"class":165},[159,126284,126285,126287,126289],{"class":161,"line":1283},[159,126286,122721],{"class":165},[159,126288,189],{"class":1142},[159,126290,122726],{"class":165},[159,126292,126293],{"class":161,"line":1294},[159,126294,590],{"emptyLinePlaceholder":589},[159,126296,126297,126300,126303],{"class":161,"line":1305},[159,126298,126299],{"class":165},"    print_state(",[159,126301,126302],{"class":192},"\"initial\"",[159,126304,126305],{"class":165},", model, data)\n",[159,126307,126308],{"class":161,"line":1311},[159,126309,590],{"emptyLinePlaceholder":589},[159,126311,126312,126314,126316,126318,126320,126322,126324],{"class":161,"line":1322},[159,126313,11677],{"class":1142},[159,126315,122801],{"class":165},[159,126317,49566],{"class":1142},[159,126319,55961],{"class":1146},[159,126321,1159],{"class":165},[159,126323,4230],{"class":1146},[159,126325,54307],{"class":165},[159,126327,126328],{"class":161,"line":1327},[159,126329,122816],{"class":165},[159,126331,126332],{"class":161,"line":1336},[159,126333,590],{"emptyLinePlaceholder":589},[159,126335,126336,126338,126341],{"class":161,"line":1345},[159,126337,126299],{"class":165},[159,126339,126340],{"class":192},"\"after 50 steps\"",[159,126342,126305],{"class":165},[159,126344,126345],{"class":161,"line":1350},[159,126346,590],{"emptyLinePlaceholder":589},[159,126348,126349],{"class":161,"line":1764},[159,126350,126351],{"class":165},"    mujoco.mj_resetData(model, data)\n",[159,126353,126354,126356,126359],{"class":161,"line":1769},[159,126355,126299],{"class":165},[159,126357,126358],{"class":192},"\"after reset\"",[159,126360,126305],{"class":165},[159,126362,126363],{"class":161,"line":1777},[159,126364,590],{"emptyLinePlaceholder":589},[159,126366,126367,126370,126372,126374,126376],{"class":161,"line":1788},[159,126368,126369],{"class":165},"    data.qpos[",[159,126371,11034],{"class":1146},[159,126373,28061],{"class":165},[159,126375,189],{"class":1142},[159,126377,126008],{"class":1146},[159,126379,126380],{"class":161,"line":1802},[159,126381,126382],{"class":165},"    mujoco.mj_forward(model, data)\n",[159,126384,126385,126387,126390],{"class":161,"line":1815},[159,126386,126299],{"class":165},[159,126388,126389],{"class":192},"\"after manual qpos edit\"",[159,126391,126305],{"class":165},[159,126393,126394],{"class":161,"line":1828},[159,126395,590],{"emptyLinePlaceholder":589},[159,126397,126398],{"class":161,"line":1841},[159,126399,590],{"emptyLinePlaceholder":589},[159,126401,126402,126404,126406,126408,126410],{"class":161,"line":1852},[159,126403,18445],{"class":1142},[159,126405,54740],{"class":1146},[159,126407,122859],{"class":1142},[159,126409,122862],{"class":192},[159,126411,27364],{"class":165},[159,126413,126414],{"class":161,"line":1866},[159,126415,122869],{"class":165},[14,126417,124870],{},[151,126419,126421],{"className":47347,"code":126420,"language":47349,"meta":25,"style":25},"touch ch3_python_state.py\n",[49,126422,126423],{"__ignoreMap":25},[159,126424,126425,126427],{"class":161,"line":162},[159,126426,122583],{"class":185},[159,126428,126429],{"class":192}," ch3_python_state.py\n",[14,126431,123601],{},[151,126433,126435],{"className":47347,"code":126434,"language":47349,"meta":25,"style":25},"python ch3_python_state.py\n",[49,126436,126437],{"__ignoreMap":25},[159,126438,126439,126441],{"class":161,"line":162},[159,126440,53902],{"class":185},[159,126442,126429],{"class":192},[42,126444,122872],{"id":122872},[14,126446,126447],{},"打印状态的函数：",[151,126449,126451],{"className":53900,"code":126450,"language":53902,"meta":25,"style":25},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[49,126452,126453],{"__ignoreMap":25},[159,126454,126455,126457,126459,126461,126463,126465,126467],{"class":161,"line":162},[159,126456,55465],{"class":1142},[159,126458,126176],{"class":185},[159,126460,126179],{"class":165},[159,126462,24983],{"class":1146},[159,126464,126184],{"class":165},[159,126466,116986],{"class":1146},[159,126468,27364],{"class":165},[14,126470,126471,126472,126474],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[49,126473,56843],{}," 里发生了什么。",[14,126476,126477],{},"推进 50 步：",[151,126479,126481],{"className":53900,"code":126480,"language":53902,"meta":25,"style":25},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[49,126482,126483,126499],{"__ignoreMap":25},[159,126484,126485,126487,126489,126491,126493,126495,126497],{"class":161,"line":162},[159,126486,26657],{"class":1142},[159,126488,122801],{"class":165},[159,126490,49566],{"class":1142},[159,126492,55961],{"class":1146},[159,126494,1159],{"class":165},[159,126496,4230],{"class":1146},[159,126498,54307],{"class":165},[159,126500,126501],{"class":161,"line":176},[159,126502,122999],{"class":165},[14,126504,126505,126506,126509,126510,126512],{},"由于 ",[49,126507,126508],{},"timestep=0.01","，所以 50 步后时间约为 ",[49,126511,58724],{}," 秒。",[14,126514,126515],{},"重置：",[151,126517,126518],{"className":53900,"code":125826,"language":53902,"meta":25,"style":25},[49,126519,126520],{"__ignoreMap":25},[159,126521,126522],{"class":161,"line":162},[159,126523,125826],{"class":165},[14,126525,126526],{},"这会把时间、位置、速度恢复到初始状态。",[14,126528,126529],{},"手动改高度：",[151,126531,126533],{"className":53900,"code":126532,"language":53902,"meta":25,"style":25},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[49,126534,126535,126547],{"__ignoreMap":25},[159,126536,126537,126539,126541,126543,126545],{"class":161,"line":162},[159,126538,125999],{"class":165},[159,126540,11034],{"class":1146},[159,126542,28061],{"class":165},[159,126544,189],{"class":1142},[159,126546,126008],{"class":1146},[159,126548,126549],{"class":161,"line":176},[159,126550,125843],{"class":165},[14,126552,126553,126554,126557,126558,126561],{},"这个例子里 ",[49,126555,126556],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[49,126559,126560],{},"2.0"," 表示把小球放到更高的位置。",[42,126563,123008],{"id":123008},[151,126565,126566],{"className":53900,"code":126450,"language":53902,"meta":25,"style":25},[49,126567,126568],{"__ignoreMap":25},[159,126569,126570,126572,126574,126576,126578,126580,126582],{"class":161,"line":162},[159,126571,55465],{"class":1142},[159,126573,126176],{"class":185},[159,126575,126179],{"class":165},[159,126577,24983],{"class":1146},[159,126579,126184],{"class":165},[159,126581,116986],{"class":1146},[159,126583,27364],{"class":165},[14,126585,126586],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[134,126588,126589,126598,126603],{},[106,126590,126591,126594,126595,126597],{},[49,126592,126593],{},"prefix","：一段文字，比如 ",[49,126596,126302],{},"，用来说明现在打印的是哪个阶段。",[106,126599,126600,126602],{},[49,126601,123385],{},"：MuJoCo 模型。",[106,126604,126605,126607],{},[49,126606,56843],{},"：MuJoCo 当前状态。",[14,126609,126610,24079,126613,126616],{},[49,126611,126612],{},"prefix: str",[49,126614,126615],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[151,126618,126620],{"className":53900,"code":126619,"language":53902,"meta":25,"style":25},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[49,126621,126622],{"__ignoreMap":25},[159,126623,126624,126626,126628,126630,126632,126634],{"class":161,"line":162},[159,126625,53937],{"class":1146},[159,126627,1159],{"class":165},[159,126629,126227],{"class":192},[159,126631,126230],{"class":165},[159,126633,8866],{"class":1146},[159,126635,18787],{"class":165},[14,126637,126638,126641],{},[49,126639,126640],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[151,126643,126645],{"className":53900,"code":126644,"language":53902,"meta":25,"style":25},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[49,126646,126647,126659],{"__ignoreMap":25},[159,126648,126649,126651,126653,126655,126657],{"class":161,"line":162},[159,126650,122934],{"class":165},[159,126652,189],{"class":1142},[159,126654,122712],{"class":165},[159,126656,122614],{"class":1146},[159,126658,1165],{"class":165},[159,126660,126661,126663,126665],{"class":161,"line":176},[159,126662,122958],{"class":165},[159,126664,189],{"class":1142},[159,126666,122726],{"class":165},[14,126668,126669],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[151,126671,126673],{"className":53900,"code":126672,"language":53902,"meta":25,"style":25},"print_state(\"initial\", model, data)\n",[49,126674,126675],{"__ignoreMap":25},[159,126676,126677,126680,126682],{"class":161,"line":162},[159,126678,126679],{"class":165},"print_state(",[159,126681,126302],{"class":192},[159,126683,126305],{"class":165},[14,126685,126686,126687,126690],{},"调用刚才定义的 ",[49,126688,126689],{},"print_state"," 函数，打印初始状态。",[151,126692,126693],{"className":53900,"code":126480,"language":53902,"meta":25,"style":25},[49,126694,126695,126711],{"__ignoreMap":25},[159,126696,126697,126699,126701,126703,126705,126707,126709],{"class":161,"line":162},[159,126698,26657],{"class":1142},[159,126700,122801],{"class":165},[159,126702,49566],{"class":1142},[159,126704,55961],{"class":1146},[159,126706,1159],{"class":165},[159,126708,4230],{"class":1146},[159,126710,54307],{"class":165},[159,126712,126713],{"class":161,"line":176},[159,126714,122999],{"class":165},[14,126716,126717],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[151,126719,126720],{"className":53900,"code":125826,"language":53902,"meta":25,"style":25},[49,126721,126722],{"__ignoreMap":25},[159,126723,126724],{"class":161,"line":162},[159,126725,125826],{"class":165},[14,126727,126728,126729,126731,126732,126734],{},"重置 ",[49,126730,56843],{},"。注意它不会重新创建 ",[49,126733,123385],{},"，因为模型结构没有变，只是状态回到初始值。",[151,126736,126737],{"className":53900,"code":125992,"language":53902,"meta":25,"style":25},[49,126738,126739],{"__ignoreMap":25},[159,126740,126741,126743,126745,126747,126749],{"class":161,"line":162},[159,126742,125999],{"class":165},[159,126744,11034],{"class":1146},[159,126746,28061],{"class":165},[159,126748,189],{"class":1142},[159,126750,126008],{"class":1146},[14,126752,126753,126754,24079,126757,24079,126760,126762],{},"这行是“手动改状态”。在 freejoint 中，",[49,126755,126756],{},"qpos[0]",[49,126758,126759],{},"qpos[1]",[49,126761,126556],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[151,126764,126765],{"className":53900,"code":125843,"language":53902,"meta":25,"style":25},[49,126766,126767],{"__ignoreMap":25},[159,126768,126769],{"class":161,"line":162},[159,126770,125843],{"class":165},[14,126772,126773,126774,126776,126777,126779],{},"手动改完 ",[49,126775,125330],{}," 后，调用 ",[49,126778,125550],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[37,126781,123616],{"id":123615},[14,126783,126784],{},"你会看到:",[134,126786,126787,126792,126797,126800],{},[106,126788,126789,126790],{},"初始时间为 ",[49,126791,1489],{},[106,126793,126794,126795],{},"50 步后时间约为 ",[49,126796,58724],{},[106,126798,126799],{},"reset 后状态恢复",[106,126801,126802,126803,126806,126807],{},"手动修改 ",[49,126804,126805],{},"data.qpos[2]"," 后，小球高度变为 ",[49,126808,126560],{},[14,126810,126811,126813],{},[49,126812,126556],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,126815,126816],{},"输出里可以重点看三件事：",[134,126818,126819,126827,126832],{},[106,126820,126821,126823,126824,126826],{},[49,126822,21267],{}," 是否随着 ",[49,126825,122515],{}," 增加。",[106,126828,126829,126831],{},[49,126830,125330],{}," 的 z 坐标是否因为下落而变化。",[106,126833,126834,126836,126837,51907],{},[49,126835,125652],{}," 后时间是否回到 ",[49,126838,1489],{},[37,126840,123648],{"id":123647},[134,126842,126843,126849,126855,126861,126864,126873],{},[106,126844,126845,126846,51907],{},"修改 timestep 为 ",[49,126847,126848],{},"0.005",[106,126850,126851,126852,51907],{},"重新运行，检查 50 步后时间是否约为 ",[49,126853,126854],{},"0.25",[106,126856,126857,126858,51907],{},"修改重力为 ",[49,126859,126860],{},"0 0 -1.0",[106,126862,126863],{},"观察小球下降速度是否变慢。",[106,126865,123711,126866,123714,126869,126872],{},[49,126867,126868],{},"data.qpos[2] = 2.0",[49,126870,126871],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[106,126874,126875,126876,126879],{},"注释掉 ",[49,126877,126878],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[37,126881,123753],{"id":123752},[42,126883,126885,126886,126888],{"id":126884},"修改-dataqpos-后位置没有更新","修改 ",[49,126887,122370],{}," 后位置没有更新",[14,126890,123762],{},[151,126892,126893],{"className":53900,"code":125843,"language":53902,"meta":25,"style":25},[49,126894,126895],{"__ignoreMap":25},[159,126896,126897],{"class":161,"line":162},[159,126898,125843],{"class":165},[42,126900,126901],{"id":126901},"数组维度看不懂",[14,126903,126904],{},"打印模型维度:",[151,126906,126908],{"className":53900,"code":126907,"language":53902,"meta":25,"style":25},"print(model.nq, model.nv, model.nu)\n",[49,126909,126910],{"__ignoreMap":25},[159,126911,126912,126914],{"class":161,"line":162},[159,126913,53937],{"class":1146},[159,126915,126916],{"class":165},"(model.nq, model.nv, model.nu)\n",[12347,126918,126919,126927],{},[16500,126920,126921],{},[12356,126922,126923,126925],{},[12365,126924,125874],{"align":19854},[12365,126926,122000],{"align":19854},[16624,126928,126929,126939,126949],{},[12356,126930,126931,126936],{},[12488,126932,126933],{"align":19854},[49,126934,126935],{},"nq",[12488,126937,126938],{"align":19854},"位置变量数量",[12356,126940,126941,126946],{},[12488,126942,126943],{"align":19854},[49,126944,126945],{},"nv",[12488,126947,126948],{"align":19854},"速度变量数量",[12356,126950,126951,126955],{},[12488,126952,126953],{"align":19854},[49,126954,123462],{},[12488,126956,126957],{"align":19854},"控制输入数量",[42,126959,126961,126962,126964],{"id":126960},"误以为-qpos-一定等于关节数","误以为 ",[49,126963,125330],{}," 一定等于关节数",[14,126966,126967,126968,103830,126970,126972,126973,126975],{},"不是。例如 ",[49,126969,122920],{},[49,126971,125330],{}," 是 7 维，但 ",[49,126974,125660],{}," 是 6 维。",[42,126977,126979,126980,126982],{"id":126978},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[49,126981,125330],{}," 的第几位",[14,126984,126985],{},"初学时可以先打印：",[151,126987,126989],{"className":53900,"code":126988,"language":53902,"meta":25,"style":25},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[49,126990,126991,127001,127011,127023],{"__ignoreMap":25},[159,126992,126993,126995,126997,126999],{"class":161,"line":162},[159,126994,53937],{"class":1146},[159,126996,1159],{"class":165},[159,126998,122739],{"class":192},[159,127000,122742],{"class":165},[159,127002,127003,127005,127007,127009],{"class":161,"line":176},[159,127004,53937],{"class":1146},[159,127006,1159],{"class":165},[159,127008,122751],{"class":192},[159,127010,122754],{"class":165},[159,127012,127013,127015,127017,127020],{"class":161,"line":203},[159,127014,53937],{"class":1146},[159,127016,1159],{"class":165},[159,127018,127019],{"class":192},"\"qpos:\"",[159,127021,127022],{"class":165},", data.qpos)\n",[159,127024,127025,127027,127029,127032],{"class":161,"line":223},[159,127026,53937],{"class":1146},[159,127028,1159],{"class":165},[159,127030,127031],{"class":192},"\"qvel:\"",[159,127033,127034],{"class":165},", data.qvel)\n",[14,127036,127037],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[42,127039,127040],{"id":127040},"仿真结果每次都一样",[14,127042,127043,127044,127046],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[49,127045,125330],{},"、目标点或控制输入。",[37,127048,123907],{"id":123906},[14,127050,127051,127052,48143],{},"Python 控制 MuJoCo 的核心就是读写 ",[49,127053,56843],{},[134,127055,127056,127064,127069,127074],{},[106,127057,127058,127059,122318,127061,127063],{},"用 ",[49,127060,122370],{},[49,127062,122373],{}," 读取状态。",[106,127065,127058,127066,127068],{},[49,127067,122376],{}," 写入控制。",[106,127070,127058,127071,127073],{},[49,127072,122515],{}," 推进时间。",[106,127075,127076,127077,127079],{},"手动改状态后用 ",[49,127078,125550],{}," 刷新派生量。",[14,127081,127082],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1468,127084,127085],{},"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":25,"searchDepth":176,"depth":176,"links":127087},[127088,127089,127090,127097,127101,127102,127103,127113],{"id":121946,"depth":176,"text":121947},{"id":122069,"depth":176,"text":122070},{"id":122344,"depth":176,"text":122345,"children":127091},[127092,127094,127096],{"id":125855,"depth":203,"text":127093},"qpos、qvel、ctrl 是什么",{"id":125933,"depth":203,"text":127095},"mj_step 和 mj_forward 的区别",{"id":126022,"depth":203,"text":126023},{"id":122552,"depth":176,"text":122553,"children":127098},[127099,127100],{"id":122872,"depth":203,"text":122872},{"id":123008,"depth":203,"text":123008},{"id":123615,"depth":176,"text":123616},{"id":123647,"depth":176,"text":123648},{"id":123752,"depth":176,"text":123753,"children":127104},[127105,127107,127108,127110,127112],{"id":126884,"depth":203,"text":127106},"修改 data.qpos 后位置没有更新",{"id":126901,"depth":203,"text":126901},{"id":126960,"depth":203,"text":127109},"误以为 qpos 一定等于关节数",{"id":126978,"depth":203,"text":127111},"不知道某个元素在 qpos 的第几位",{"id":127040,"depth":203,"text":127040},{"id":123906,"depth":176,"text":123907},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":125618,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":127120,"title":127121,"body":127122,"description":25,"extension":23810,"meta":128812,"navigation":589,"path":128813,"seo":128814,"stem":128815,"__hash__":128816},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":127123,"toc":128788},[127124,127127,127129,127132,127134,127159,127162,127181,127184,127186,127188,127212,127214,127228,127230,127271,127273,127297,127299,127302,127336,127338,127351,127354,127422,127431,127435,127438,127472,127478,127481,127485,127524,127527,127547,127551,127594,127596,127625,127628,127634,127637,127639,128033,128035,128047,128049,128060,128062,128065,128094,128102,128105,128140,128143,128145,128153,128156,128158,128169,128179,128199,128202,128238,128250,128298,128317,128359,128372,128400,128405,128426,128436,128454,128457,128491,128494,128514,128517,128536,128542,128544,128547,128553,128559,128569,128572,128578,128587,128589,128635,128637,128643,128649,128652,128655,128675,128678,128684,128690,128692,128715,128718,128721,128730,128733,128771,128773,128776,128782,128785],[10,127125,127121],{"id":127126},"_4关节actuator-与力控制",[37,127128,121947],{"id":121946},[14,127130,127131],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,127133,125631],{},[134,127135,127136,127142,127147,127151,127156],{},[106,127137,127138,127141],{},[49,127139,127140],{},"hinge"," 关节",[106,127143,127144],{},[49,127145,127146],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[106,127148,127149],{},[49,127150,122376],{},[106,127152,127153],{},[49,127154,127155],{},"ctrlrange",[106,127157,127158],{},"读取关节角和角速度",[14,127160,127161],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[151,127163,127165],{"className":53900,"code":127164,"language":53902,"meta":25,"style":25},"data.ctrl[0] = ...\n",[49,127166,127167],{"__ignoreMap":25},[159,127168,127169,127172,127174,127176,127178],{"class":161,"line":162},[159,127170,127171],{"class":165},"data.ctrl[",[159,127173,1489],{"class":1146},[159,127175,28061],{"class":165},[159,127177,189],{"class":1142},[159,127179,127180],{"class":1146}," ...\n",[14,127182,127183],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[37,127185,122070],{"id":122069},[14,127187,122073],{},[151,127189,127190],{"className":47347,"code":125688,"language":47349,"meta":25,"style":25},[49,127191,127192],{"__ignoreMap":25},[159,127193,127194,127196,127198,127200,127202,127204,127206,127208,127210],{"class":161,"line":162},[159,127195,48101],{"class":185},[159,127197,49838],{"class":192},[159,127199,47359],{"class":192},[159,127201,49923],{"class":1146},[159,127203,125703],{"class":192},[159,127205,122098],{"class":192},[159,127207,123801],{"class":192},[159,127209,122114],{"class":192},[159,127211,125712],{"class":192},[14,127213,124119],{},[151,127215,127216],{"className":47347,"code":122219,"language":47349,"meta":25,"style":25},[49,127217,127218],{"__ignoreMap":25},[159,127219,127220,127222,127224,127226],{"class":161,"line":162},[159,127221,47356],{"class":185},[159,127223,47359],{"class":192},[159,127225,122230],{"class":192},[159,127227,122233],{"class":192},[14,127229,124136],{},[151,127231,127233],{"className":47347,"code":127232,"language":47349,"meta":25,"style":25},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[49,127234,127235,127252,127261],{"__ignoreMap":25},[159,127236,127237,127239,127241,127243,127246,127248,127250],{"class":161,"line":162},[159,127238,53852],{"class":185},[159,127240,52698],{"class":192},[159,127242,48639],{"class":1146},[159,127244,127245],{"class":192}," mujoco-control",[159,127247,122275],{"class":192},[159,127249,122278],{"class":1146},[159,127251,122281],{"class":1146},[159,127253,127254,127256,127258],{"class":161,"line":176},[159,127255,53852],{"class":185},[159,127257,122288],{"class":192},[159,127259,127260],{"class":192}," mujoco-control\n",[159,127262,127263,127265,127267,127269],{"class":161,"line":203},[159,127264,47356],{"class":185},[159,127266,47359],{"class":192},[159,127268,122230],{"class":192},[159,127270,122233],{"class":192},[14,127272,122304],{},[134,127274,127275,127281,127288,127294],{},[106,127276,127277,127280],{},[49,127278,127279],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[106,127282,127283,127285,127286,51907],{},[49,127284,122376],{}," 长度等于 ",[49,127287,123458],{},[106,127289,103522,127290,127293],{},[49,127291,127292],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[106,127295,127296],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[37,127298,122345],{"id":122344},[14,127300,127301],{},"关节决定 body 如何运动:",[151,127303,127305],{"className":153,"code":127304,"language":155,"meta":25,"style":25},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[49,127306,127307],{"__ignoreMap":25},[159,127308,127309,127311,127313,127315,127317,127320,127322,127324,127326,127329,127331,127334],{"class":161,"line":162},[159,127310,166],{"class":165},[159,127312,124256],{"class":169},[159,127314,547],{"class":185},[159,127316,189],{"class":165},[159,127318,127319],{"class":192},"\"hinge\"",[159,127321,539],{"class":185},[159,127323,189],{"class":165},[159,127325,127319],{"class":192},[159,127327,127328],{"class":185}," axis",[159,127330,189],{"class":165},[159,127332,127333],{"class":192},"\"0 1 0\"",[159,127335,122444],{"class":165},[14,127337,124352],{},[134,127339,127340,127345,127348],{},[106,127341,127342,127343],{},"名字是 ",[49,127344,127140],{},[106,127346,127347],{},"类型是旋转关节",[106,127349,127350],{},"绕 y 轴旋转",[14,127352,127353],{},"actuator 决定如何施加控制:",[151,127355,127357],{"className":153,"code":127356,"language":155,"meta":25,"style":25},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[49,127358,127359,127368,127414],{"__ignoreMap":25},[159,127360,127361,127363,127366],{"class":161,"line":162},[159,127362,166],{"class":165},[159,127364,127365],{"class":169},"actuator",[159,127367,173],{"class":165},[159,127369,127370,127372,127375,127377,127379,127382,127385,127387,127389,127392,127394,127396,127399,127401,127404,127407,127409,127412],{"class":161,"line":176},[159,127371,179],{"class":165},[159,127373,127374],{"class":169},"motor",[159,127376,547],{"class":185},[159,127378,189],{"class":165},[159,127380,127381],{"class":192},"\"hinge_motor\"",[159,127383,127384],{"class":185}," joint",[159,127386,189],{"class":165},[159,127388,127319],{"class":192},[159,127390,127391],{"class":185}," gear",[159,127393,189],{"class":165},[159,127395,680],{"class":192},[159,127397,127398],{"class":185}," ctrlrange",[159,127400,189],{"class":165},[159,127402,127403],{"class":192},"\"-2 2\"",[159,127405,127406],{"class":185}," ctrllimited",[159,127408,189],{"class":165},[159,127410,127411],{"class":192},"\"true\"",[159,127413,122444],{"class":165},[159,127415,127416,127418,127420],{"class":161,"line":203},[159,127417,264],{"class":165},[159,127419,127365],{"class":169},[159,127421,173],{"class":165},[14,127423,127424,127427,127428,51907],{},[49,127425,127426],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[49,127429,127430],{},"[-2, 2]",[42,127432,127434],{"id":127433},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,127436,127437],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[12347,127439,127440,127450],{},[16500,127441,127442],{},[12356,127443,127444,127446,127448],{},[12365,127445,49276],{"align":19854},[12365,127447,123996],{"align":19854},[12365,127449,122034],{"align":19854},[16624,127451,127452,127462],{},[12356,127453,127454,127456,127459],{},[12488,127455,124256],{"align":19854},[12488,127457,127458],{"align":19854},"定义能怎么动",[12488,127460,127461],{"align":19854},"门轴允许门旋转",[12356,127463,127464,127466,127469],{},[12488,127465,127365],{"align":19854},[12488,127467,127468],{"align":19854},"定义怎么施力或控制",[12488,127470,127471],{"align":19854},"人推门、马达带动门",[14,127473,127474,127475,127477],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[49,127476,122376],{}," 主动控制它。",[14,127479,127480],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[42,127482,127484],{"id":127483},"hinge-joint","hinge joint",[151,127486,127488],{"className":153,"code":127487,"language":155,"meta":25,"style":25},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,127489,127490],{"__ignoreMap":25},[159,127491,127492,127494,127496,127498,127500,127502,127504,127506,127508,127510,127512,127514,127517,127519,127522],{"class":161,"line":162},[159,127493,166],{"class":165},[159,127495,124256],{"class":169},[159,127497,547],{"class":185},[159,127499,189],{"class":165},[159,127501,127319],{"class":192},[159,127503,539],{"class":185},[159,127505,189],{"class":165},[159,127507,127319],{"class":192},[159,127509,127328],{"class":185},[159,127511,189],{"class":165},[159,127513,127333],{"class":192},[159,127515,127516],{"class":185}," damping",[159,127518,189],{"class":165},[159,127520,127521],{"class":192},"\"0.1\"",[159,127523,122444],{"class":165},[14,127525,127526],{},"含义：",[134,127528,127529,127535,127541],{},[106,127530,127531,127534],{},[49,127532,127533],{},"type=\"hinge\"","：只能绕一个轴旋转。",[106,127536,127537,127540],{},[49,127538,127539],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[106,127542,127543,127546],{},[49,127544,127545],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[42,127548,127550],{"id":127549},"motor-actuator","motor actuator",[151,127552,127554],{"className":153,"code":127553,"language":155,"meta":25,"style":25},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[49,127555,127556],{"__ignoreMap":25},[159,127557,127558,127560,127562,127564,127566,127568,127570,127572,127574,127576,127578,127580,127582,127584,127586,127588,127590,127592],{"class":161,"line":162},[159,127559,166],{"class":165},[159,127561,127374],{"class":169},[159,127563,547],{"class":185},[159,127565,189],{"class":165},[159,127567,127381],{"class":192},[159,127569,127384],{"class":185},[159,127571,189],{"class":165},[159,127573,127319],{"class":192},[159,127575,127391],{"class":185},[159,127577,189],{"class":165},[159,127579,680],{"class":192},[159,127581,127398],{"class":185},[159,127583,189],{"class":165},[159,127585,127403],{"class":192},[159,127587,127406],{"class":185},[159,127589,189],{"class":165},[159,127591,127411],{"class":192},[159,127593,122444],{"class":165},[14,127595,127526],{},[134,127597,127598,127607,127613,127619],{},[106,127599,127600,127603,127604,127606],{},[49,127601,127602],{},"joint=\"hinge\"","：这个电机作用在名为 ",[49,127605,127140],{}," 的关节上。",[106,127608,127609,127612],{},[49,127610,127611],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[106,127614,127615,127618],{},[49,127616,127617],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[106,127620,127621,127624],{},[49,127622,127623],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,127626,127627],{},"简单理解：",[151,127629,127632],{"className":127630,"code":127631,"language":8507,"meta":25},[28803],"实际施加效果 ≈ data.ctrl[0] * gear\n",[49,127633,127631],{"__ignoreMap":25},[14,127635,127636],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[37,127638,122553],{"id":122552},[151,127640,127642],{"className":53900,"code":127641,"language":53902,"meta":25,"style":25},"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",[49,127643,127644,127651,127655,127661,127671,127675,127679,127687,127692,127697,127701,127705,127710,127715,127719,127724,127729,127734,127739,127743,127747,127751,127756,127761,127766,127770,127774,127778,127782,127794,127806,127814,127818,127828,127838,127848,127852,127865,127878,127882,127899,127913,127948,127952,127956,127967,127982,127997,128009,128013,128017,128029],{"__ignoreMap":25},[159,127645,127646,127648],{"class":161,"line":162},[159,127647,53914],{"class":1142},[159,127649,127650],{"class":165}," math\n",[159,127652,127653],{"class":161,"line":176},[159,127654,590],{"emptyLinePlaceholder":589},[159,127656,127657,127659],{"class":161,"line":203},[159,127658,53914],{"class":1142},[159,127660,122601],{"class":165},[159,127662,127663,127665,127667,127669],{"class":161,"line":223},[159,127664,53914],{"class":1142},[159,127666,54900],{"class":165},[159,127668,54903],{"class":1142},[159,127670,54906],{"class":165},[159,127672,127673],{"class":161,"line":233},[159,127674,590],{"emptyLinePlaceholder":589},[159,127676,127677],{"class":161,"line":239},[159,127678,590],{"emptyLinePlaceholder":589},[159,127680,127681,127683,127685],{"class":161,"line":245},[159,127682,122614],{"class":1146},[159,127684,1150],{"class":1142},[159,127686,122619],{"class":192},[159,127688,127689],{"class":161,"line":251},[159,127690,127691],{"class":192},"\u003Cmujoco model=\"one_link_motor\">\n",[159,127693,127694],{"class":161,"line":261},[159,127695,127696],{"class":192},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[159,127698,127699],{"class":161,"line":603},[159,127700,590],{"emptyLinePlaceholder":589},[159,127702,127703],{"class":161,"line":621},[159,127704,122638],{"class":192},[159,127706,127707],{"class":161,"line":634},[159,127708,127709],{"class":192},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[159,127711,127712],{"class":161,"line":640},[159,127713,127714],{"class":192},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[159,127716,127717],{"class":161,"line":1075},[159,127718,590],{"emptyLinePlaceholder":589},[159,127720,127721],{"class":161,"line":1081},[159,127722,127723],{"class":192},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[159,127725,127726],{"class":161,"line":1091},[159,127727,127728],{"class":192},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[159,127730,127731],{"class":161,"line":1100},[159,127732,127733],{"class":192},"        \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",[159,127735,127736],{"class":161,"line":1123},[159,127737,127738],{"class":192},"      \u003C\u002Fbody>\n",[159,127740,127741],{"class":161,"line":1132},[159,127742,122667],{"class":192},[159,127744,127745],{"class":161,"line":1139},[159,127746,122672],{"class":192},[159,127748,127749],{"class":161,"line":1168},[159,127750,590],{"emptyLinePlaceholder":589},[159,127752,127753],{"class":161,"line":1174},[159,127754,127755],{"class":192},"  \u003Cactuator>\n",[159,127757,127758],{"class":161,"line":1180},[159,127759,127760],{"class":192},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[159,127762,127763],{"class":161,"line":1194},[159,127764,127765],{"class":192},"  \u003C\u002Factuator>\n",[159,127767,127768],{"class":161,"line":1200},[159,127769,122677],{"class":192},[159,127771,127772],{"class":161,"line":1221},[159,127773,116998],{"class":192},[159,127775,127776],{"class":161,"line":1230},[159,127777,590],{"emptyLinePlaceholder":589},[159,127779,127780],{"class":161,"line":1247},[159,127781,590],{"emptyLinePlaceholder":589},[159,127783,127784,127786,127788,127790,127792],{"class":161,"line":1265},[159,127785,55465],{"class":1142},[159,127787,25625],{"class":185},[159,127789,122698],{"class":165},[159,127791,116986],{"class":1146},[159,127793,27364],{"class":165},[159,127795,127796,127798,127800,127802,127804],{"class":161,"line":1277},[159,127797,122707],{"class":165},[159,127799,189],{"class":1142},[159,127801,122712],{"class":165},[159,127803,122614],{"class":1146},[159,127805,1165],{"class":165},[159,127807,127808,127810,127812],{"class":161,"line":1283},[159,127809,122721],{"class":165},[159,127811,189],{"class":1142},[159,127813,122726],{"class":165},[159,127815,127816],{"class":161,"line":1294},[159,127817,590],{"emptyLinePlaceholder":589},[159,127819,127820,127822,127824,127826],{"class":161,"line":1305},[159,127821,54819],{"class":1146},[159,127823,1159],{"class":165},[159,127825,122739],{"class":192},[159,127827,122742],{"class":165},[159,127829,127830,127832,127834,127836],{"class":161,"line":1311},[159,127831,54819],{"class":1146},[159,127833,1159],{"class":165},[159,127835,122751],{"class":192},[159,127837,122754],{"class":165},[159,127839,127840,127842,127844,127846],{"class":161,"line":1322},[159,127841,54819],{"class":1146},[159,127843,1159],{"class":165},[159,127845,122763],{"class":192},[159,127847,122766],{"class":165},[159,127849,127850],{"class":161,"line":1327},[159,127851,590],{"emptyLinePlaceholder":589},[159,127853,127854,127856,127859,127861,127863],{"class":161,"line":1336},[159,127855,26732],{"class":1142},[159,127857,127858],{"class":165}," model.nu ",[159,127860,44475],{"class":1142},[159,127862,2707],{"class":1146},[159,127864,27364],{"class":165},[159,127866,127867,127869,127871,127873,127876],{"class":161,"line":1345},[159,127868,124732],{"class":1142},[159,127870,124735],{"class":1146},[159,127872,1159],{"class":165},[159,127874,127875],{"class":192},"\"expected exactly one actuator\"",[159,127877,1165],{"class":165},[159,127879,127880],{"class":161,"line":1350},[159,127881,590],{"emptyLinePlaceholder":589},[159,127883,127884,127886,127888,127890,127892,127894,127897],{"class":161,"line":1764},[159,127885,11677],{"class":1142},[159,127887,55135],{"class":165},[159,127889,49566],{"class":1142},[159,127891,55961],{"class":1146},[159,127893,1159],{"class":165},[159,127895,127896],{"class":1146},"2000",[159,127898,54307],{"class":165},[159,127900,127901,127904,127906,127908,127910],{"class":161,"line":1769},[159,127902,127903],{"class":165},"        t ",[159,127905,189],{"class":1142},[159,127907,55135],{"class":165},[159,127909,4777],{"class":1142},[159,127911,127912],{"class":165}," model.opt.timestep\n",[159,127914,127915,127918,127920,127922,127924,127927,127929,127932,127934,127936,127939,127941,127943,127945],{"class":161,"line":1777},[159,127916,127917],{"class":165},"        data.ctrl[",[159,127919,1489],{"class":1146},[159,127921,28061],{"class":165},[159,127923,189],{"class":1142},[159,127925,127926],{"class":1146}," 1.5",[159,127928,30131],{"class":1142},[159,127930,127931],{"class":165}," math.sin(",[159,127933,126560],{"class":1146},[159,127935,30131],{"class":1142},[159,127937,127938],{"class":165}," math.pi ",[159,127940,4777],{"class":1142},[159,127942,8906],{"class":1146},[159,127944,30131],{"class":1142},[159,127946,127947],{"class":165}," t)\n",[159,127949,127950],{"class":161,"line":1788},[159,127951,122816],{"class":165},[159,127953,127954],{"class":161,"line":1802},[159,127955,590],{"emptyLinePlaceholder":589},[159,127957,127958,127960,127962,127965],{"class":161,"line":1815},[159,127959,54819],{"class":1146},[159,127961,1159],{"class":165},[159,127963,127964],{"class":192},"\"time:\"",[159,127966,122778],{"class":165},[159,127968,127969,127971,127973,127976,127978,127980],{"class":161,"line":1828},[159,127970,54819],{"class":1146},[159,127972,1159],{"class":165},[159,127974,127975],{"class":192},"\"joint qpos:\"",[159,127977,126230],{"class":165},[159,127979,8866],{"class":1146},[159,127981,18787],{"class":165},[159,127983,127984,127986,127988,127991,127993,127995],{"class":161,"line":1841},[159,127985,54819],{"class":1146},[159,127987,1159],{"class":165},[159,127989,127990],{"class":192},"\"joint qvel:\"",[159,127992,126246],{"class":165},[159,127994,8866],{"class":1146},[159,127996,18787],{"class":165},[159,127998,127999,128001,128003,128006],{"class":161,"line":1852},[159,128000,54819],{"class":1146},[159,128002,1159],{"class":165},[159,128004,128005],{"class":192},"\"last ctrl:\"",[159,128007,128008],{"class":165},", data.ctrl.copy())\n",[159,128010,128011],{"class":161,"line":1866},[159,128012,590],{"emptyLinePlaceholder":589},[159,128014,128015],{"class":161,"line":1879},[159,128016,590],{"emptyLinePlaceholder":589},[159,128018,128019,128021,128023,128025,128027],{"class":161,"line":1884},[159,128020,18445],{"class":1142},[159,128022,54740],{"class":1146},[159,128024,122859],{"class":1142},[159,128026,122862],{"class":192},[159,128028,27364],{"class":165},[159,128030,128031],{"class":161,"line":1889},[159,128032,122869],{"class":165},[14,128034,124870],{},[151,128036,128038],{"className":47347,"code":128037,"language":47349,"meta":25,"style":25},"touch ch4_joint_motor.py\n",[49,128039,128040],{"__ignoreMap":25},[159,128041,128042,128044],{"class":161,"line":162},[159,128043,122583],{"class":185},[159,128045,128046],{"class":192}," ch4_joint_motor.py\n",[14,128048,123601],{},[151,128050,128052],{"className":47347,"code":128051,"language":47349,"meta":25,"style":25},"python ch4_joint_motor.py\n",[49,128053,128054],{"__ignoreMap":25},[159,128055,128056,128058],{"class":161,"line":162},[159,128057,53902],{"class":185},[159,128059,128046],{"class":192},[42,128061,122872],{"id":122872},[14,128063,128064],{},"检查 actuator 数量：",[151,128066,128068],{"className":53900,"code":128067,"language":53902,"meta":25,"style":25},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[49,128069,128070,128082],{"__ignoreMap":25},[159,128071,128072,128074,128076,128078,128080],{"class":161,"line":162},[159,128073,18445],{"class":1142},[159,128075,127858],{"class":165},[159,128077,44475],{"class":1142},[159,128079,2707],{"class":1146},[159,128081,27364],{"class":165},[159,128083,128084,128086,128088,128090,128092],{"class":161,"line":176},[159,128085,125195],{"class":1142},[159,128087,124735],{"class":1146},[159,128089,1159],{"class":165},[159,128091,127875],{"class":192},[159,128093,1165],{"class":165},[14,128095,128096,128098,128099,128101],{},[49,128097,123458],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[49,128100,122376],{}," 长度应该是 1。",[14,128103,128104],{},"产生正弦控制信号：",[151,128106,128108],{"className":53900,"code":128107,"language":53902,"meta":25,"style":25},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[49,128109,128110],{"__ignoreMap":25},[159,128111,128112,128114,128116,128118,128120,128122,128124,128126,128128,128130,128132,128134,128136,128138],{"class":161,"line":162},[159,128113,127171],{"class":165},[159,128115,1489],{"class":1146},[159,128117,28061],{"class":165},[159,128119,189],{"class":1142},[159,128121,127926],{"class":1146},[159,128123,30131],{"class":1142},[159,128125,127931],{"class":165},[159,128127,126560],{"class":1146},[159,128129,30131],{"class":1142},[159,128131,127938],{"class":165},[159,128133,4777],{"class":1142},[159,128135,8906],{"class":1146},[159,128137,30131],{"class":1142},[159,128139,127947],{"class":165},[14,128141,128142],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,128144,122973],{},[151,128146,128147],{"className":53900,"code":125805,"language":53902,"meta":25,"style":25},[49,128148,128149],{"__ignoreMap":25},[159,128150,128151],{"class":161,"line":162},[159,128152,125805],{"class":165},[14,128154,128155],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[42,128157,123008],{"id":123008},[151,128159,128161],{"className":53900,"code":128160,"language":53902,"meta":25,"style":25},"import math\n",[49,128162,128163],{"__ignoreMap":25},[159,128164,128165,128167],{"class":161,"line":162},[159,128166,53914],{"class":1142},[159,128168,127650],{"class":165},[14,128170,128171,128172,122318,128175,128178],{},"导入 Python 标准库里的数学模块。后面要用 ",[49,128173,128174],{},"math.sin",[49,128176,128177],{},"math.pi"," 生成周期变化的控制信号。",[151,128180,128181],{"className":53900,"code":124986,"language":53902,"meta":25,"style":25},[49,128182,128183,128189],{"__ignoreMap":25},[159,128184,128185,128187],{"class":161,"line":162},[159,128186,53914],{"class":1142},[159,128188,122601],{"class":165},[159,128190,128191,128193,128195,128197],{"class":161,"line":176},[159,128192,53914],{"class":1142},[159,128194,54900],{"class":165},[159,128196,54903],{"class":1142},[159,128198,54906],{"class":165},[14,128200,128201],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[151,128203,128204],{"className":153,"code":127487,"language":155,"meta":25,"style":25},[49,128205,128206],{"__ignoreMap":25},[159,128207,128208,128210,128212,128214,128216,128218,128220,128222,128224,128226,128228,128230,128232,128234,128236],{"class":161,"line":162},[159,128209,166],{"class":165},[159,128211,124256],{"class":169},[159,128213,547],{"class":185},[159,128215,189],{"class":165},[159,128217,127319],{"class":192},[159,128219,539],{"class":185},[159,128221,189],{"class":165},[159,128223,127319],{"class":192},[159,128225,127328],{"class":185},[159,128227,189],{"class":165},[159,128229,127333],{"class":192},[159,128231,127516],{"class":185},[159,128233,189],{"class":165},[159,128235,127521],{"class":192},[159,128237,122444],{"class":165},[14,128239,128240,128241,128243,128244,128246,128247,128249],{},"这行定义关节。",[49,128242,127140],{}," 表示旋转关节。",[49,128245,127539],{}," 表示绕 y 轴旋转。",[49,128248,127545],{}," 表示有一点阻尼，运动不会完全无损耗。",[151,128251,128253],{"className":153,"code":128252,"language":155,"meta":25,"style":25},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[49,128254,128255],{"__ignoreMap":25},[159,128256,128257,128259,128261,128263,128265,128268,128270,128272,128275,128278,128280,128283,128285,128287,128289,128291,128293,128296],{"class":161,"line":162},[159,128258,166],{"class":165},[159,128260,122420],{"class":169},[159,128262,547],{"class":185},[159,128264,189],{"class":165},[159,128266,128267],{"class":192},"\"link_geom\"",[159,128269,539],{"class":185},[159,128271,189],{"class":165},[159,128273,128274],{"class":192},"\"capsule\"",[159,128276,128277],{"class":185}," fromto",[159,128279,189],{"class":165},[159,128281,128282],{"class":192},"\"0 0 0 0 0 0.5\"",[159,128284,122436],{"class":185},[159,128286,189],{"class":165},[159,128288,125078],{"class":192},[159,128290,123301],{"class":185},[159,128292,189],{"class":165},[159,128294,128295],{"class":192},"\"0.5\"",[159,128297,122444],{"class":165},[14,128299,128300,128301,128303,128304,128306,128307,128310,128311,51907,128314,128316],{},"这行定义摆杆的形状。",[49,128302,124465],{}," 是胶囊体，适合表示杆子。",[49,128305,124476],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[49,128308,128309],{},"(0,0,0)"," 延伸到 ",[49,128312,128313],{},"(0,0,0.5)",[49,128315,124470],{}," 是半径。",[151,128318,128319],{"className":153,"code":127553,"language":155,"meta":25,"style":25},[49,128320,128321],{"__ignoreMap":25},[159,128322,128323,128325,128327,128329,128331,128333,128335,128337,128339,128341,128343,128345,128347,128349,128351,128353,128355,128357],{"class":161,"line":162},[159,128324,166],{"class":165},[159,128326,127374],{"class":169},[159,128328,547],{"class":185},[159,128330,189],{"class":165},[159,128332,127381],{"class":192},[159,128334,127384],{"class":185},[159,128336,189],{"class":165},[159,128338,127319],{"class":192},[159,128340,127391],{"class":185},[159,128342,189],{"class":165},[159,128344,680],{"class":192},[159,128346,127398],{"class":185},[159,128348,189],{"class":165},[159,128350,127403],{"class":192},[159,128352,127406],{"class":185},[159,128354,189],{"class":165},[159,128356,127411],{"class":192},[159,128358,122444],{"class":165},[14,128360,128361,128362,128364,128365,128368,128369,128371],{},"这行定义电机。它作用在 ",[49,128363,127140],{}," 关节上。",[49,128366,128367],{},"gear"," 可以理解成放大倍数。",[49,128370,127155],{}," 限制控制输入范围。",[151,128373,128374],{"className":53900,"code":128067,"language":53902,"meta":25,"style":25},[49,128375,128376,128388],{"__ignoreMap":25},[159,128377,128378,128380,128382,128384,128386],{"class":161,"line":162},[159,128379,18445],{"class":1142},[159,128381,127858],{"class":165},[159,128383,44475],{"class":1142},[159,128385,2707],{"class":1146},[159,128387,27364],{"class":165},[159,128389,128390,128392,128394,128396,128398],{"class":161,"line":176},[159,128391,125195],{"class":1142},[159,128393,124735],{"class":1146},[159,128395,1159],{"class":165},[159,128397,127875],{"class":192},[159,128399,1165],{"class":165},[14,128401,128402,128404],{},[49,128403,123458],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[151,128406,128408],{"className":53900,"code":128407,"language":53902,"meta":25,"style":25},"for step in range(2000):\n",[49,128409,128410],{"__ignoreMap":25},[159,128411,128412,128414,128416,128418,128420,128422,128424],{"class":161,"line":162},[159,128413,26657],{"class":1142},[159,128415,55135],{"class":165},[159,128417,49566],{"class":1142},[159,128419,55961],{"class":1146},[159,128421,1159],{"class":165},[159,128423,127896],{"class":1146},[159,128425,54307],{"class":165},[14,128427,128428,128429,128431,128432,128435],{},"循环 2000 步。这里没有用 ",[49,128430,24807],{},"，而是用 ",[49,128433,128434],{},"step","，因为后面要用当前步数计算时间。",[151,128437,128439],{"className":53900,"code":128438,"language":53902,"meta":25,"style":25},"t = step * model.opt.timestep\n",[49,128440,128441],{"__ignoreMap":25},[159,128442,128443,128446,128448,128450,128452],{"class":161,"line":162},[159,128444,128445],{"class":165},"t ",[159,128447,189],{"class":1142},[159,128449,55135],{"class":165},[159,128451,4777],{"class":1142},[159,128453,127912],{"class":165},[14,128455,128456],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[151,128458,128459],{"className":53900,"code":128107,"language":53902,"meta":25,"style":25},[49,128460,128461],{"__ignoreMap":25},[159,128462,128463,128465,128467,128469,128471,128473,128475,128477,128479,128481,128483,128485,128487,128489],{"class":161,"line":162},[159,128464,127171],{"class":165},[159,128466,1489],{"class":1146},[159,128468,28061],{"class":165},[159,128470,189],{"class":1142},[159,128472,127926],{"class":1146},[159,128474,30131],{"class":1142},[159,128476,127931],{"class":165},[159,128478,126560],{"class":1146},[159,128480,30131],{"class":1142},[159,128482,127938],{"class":165},[159,128484,4777],{"class":1142},[159,128486,8906],{"class":1146},[159,128488,30131],{"class":1142},[159,128490,127947],{"class":165},[14,128492,128493],{},"这行给电机输入一个正弦波。拆开看：",[134,128495,128496,128502,128508],{},[106,128497,128498,128501],{},[49,128499,128500],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[106,128503,128504,128507],{},[49,128505,128506],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[106,128509,128510,128513],{},[49,128511,128512],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,128515,128516],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[151,128518,128520],{"className":53900,"code":128519,"language":53902,"meta":25,"style":25},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[49,128521,128522],{"__ignoreMap":25},[159,128523,128524,128526,128528,128530,128532,128534],{"class":161,"line":162},[159,128525,53937],{"class":1146},[159,128527,1159],{"class":165},[159,128529,127975],{"class":192},[159,128531,126230],{"class":165},[159,128533,8866],{"class":1146},[159,128535,18787],{"class":165},[14,128537,128538,128539,128541],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[49,128540,122370],{}," 只有一个数。",[37,128543,123616],{"id":123615},[14,128545,128546],{},"输出类似:",[151,128548,128551],{"className":128549,"code":128550,"language":8507,"meta":25},[28803],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[49,128552,128550],{"__ignoreMap":25},[14,128554,128555,128556,128558],{},"这里 ",[49,128557,127426],{}," 是电机输入。",[14,128560,128561,128564,128565,128568],{},[49,128562,128563],{},"joint qpos"," 是关节角度，单位通常是弧度。",[49,128566,128567],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,128570,128571],{},"角度单位提示：",[151,128573,128576],{"className":128574,"code":128575,"language":8507,"meta":25},[28803],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[49,128577,128575],{"__ignoreMap":25},[14,128579,128580,128581,128583,128584,128586],{},"如果你看到 ",[49,128582,125330],{}," 是 ",[49,128585,58724],{},"，大约就是 28.6 度。",[37,128588,123648],{"id":123647},[134,128590,128591,128598,128601,128608,128611,128619,128627],{},[106,128592,123711,128593,123714,128595,51907],{},[49,128594,127611],{},[49,128596,128597],{},"gear=\"5\"",[106,128599,128600],{},"重新运行，观察关节运动是否更剧烈。",[106,128602,123711,128603,123714,128605,51907],{},[49,128604,127155],{},[49,128606,128607],{},"-0.2 0.2",[106,128609,128610],{},"重新运行，观察控制能力是否变弱。",[106,128612,128613,128614,128616,128617,51907],{},"去掉 actuator，确认 ",[49,128615,123458],{}," 变成 ",[49,128618,1489],{},[106,128620,123711,128621,123714,128623,128626],{},[49,128622,127545],{},[49,128624,128625],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[106,128628,123711,128629,123714,128631,128634],{},[49,128630,127539],{},[49,128632,128633],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[37,128636,123753],{"id":123752},[42,128638,128640],{"id":128639},"indexerror-index-0-is-out-of-bounds",[49,128641,128642],{},"IndexError: index 0 is out of bounds",[14,128644,128645,128646,128648],{},"原因是 ",[49,128647,127292],{},"，没有 actuator。",[42,128650,128651],{"id":128651},"关节几乎不动",[14,128653,128654],{},"可能原因:",[134,128656,128657,128662,128666,128672],{},[106,128658,128659,128661],{},[49,128660,128367],{}," 太小",[106,128663,128664,128661],{},[49,128665,127155],{},[106,128667,128668,128671],{},[49,128669,128670],{},"damping"," 太大",[106,128673,128674],{},"重力方向导致运动不明显",[42,128676,128677],{"id":128677},"模型编译失败",[14,128679,128680,128681,128683],{},"检查 actuator 引用的 ",[49,128682,127602],{}," 是否存在，joint 名称是否拼写一致。",[42,128685,128687,128689],{"id":128686},"datactrl0-写了但没有效果",[49,128688,127426],{}," 写了但没有效果",[14,128691,123875],{},[134,128693,128694,128699,128702,128707,128712],{},[106,128695,128696,128698],{},[49,128697,123458],{}," 是否大于 0。",[106,128700,128701],{},"motor 是否引用了正确 joint。",[106,128703,128704,128706],{},[49,128705,128367],{}," 是否太小。",[106,128708,128709,128711],{},[49,128710,127155],{}," 是否把输入限制得太小。",[106,128713,128714],{},"body 是否真的有可动 joint。",[42,128716,128717],{"id":128717},"控制输入超过范围会怎样",[14,128719,128720],{},"如果设置了：",[151,128722,128724],{"className":153,"code":128723,"language":155,"meta":25,"style":25},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[49,128725,128726],{"__ignoreMap":25},[159,128727,128728],{"class":161,"line":162},[159,128729,128723],{"class":165},[14,128731,128732],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[151,128734,128736],{"className":53900,"code":128735,"language":53902,"meta":25,"style":25},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[49,128737,128738,128758],{"__ignoreMap":25},[159,128739,128740,128743,128745,128748,128750,128752,128754,128756],{"class":161,"line":162},[159,128741,128742],{"class":165},"action ",[159,128744,189],{"class":1142},[159,128746,128747],{"class":165}," np.clip(action, ",[159,128749,24376],{"class":1142},[159,128751,126560],{"class":1146},[159,128753,1939],{"class":165},[159,128755,126560],{"class":1146},[159,128757,1165],{"class":165},[159,128759,128760,128762,128764,128766,128768],{"class":161,"line":176},[159,128761,127171],{"class":165},[159,128763,1489],{"class":1146},[159,128765,28061],{"class":165},[159,128767,189],{"class":1142},[159,128769,128770],{"class":165}," action\n",[37,128772,123907],{"id":123906},[14,128774,128775],{},"这一章建立了控制任务的基本形式：",[151,128777,128780],{"className":128778,"code":128779,"language":8507,"meta":25},[28803],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[49,128781,128779],{"__ignoreMap":25},[14,128783,128784],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1468,128786,128787],{},"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":25,"searchDepth":176,"depth":176,"links":128789},[128790,128791,128792,128797,128801,128802,128803,128811],{"id":121946,"depth":176,"text":121947},{"id":122069,"depth":176,"text":122070},{"id":122344,"depth":176,"text":122345,"children":128793},[128794,128795,128796],{"id":127433,"depth":203,"text":127434},{"id":127483,"depth":203,"text":127484},{"id":127549,"depth":203,"text":127550},{"id":122552,"depth":176,"text":122553,"children":128798},[128799,128800],{"id":122872,"depth":203,"text":122872},{"id":123008,"depth":203,"text":123008},{"id":123615,"depth":176,"text":123616},{"id":123647,"depth":176,"text":123648},{"id":123752,"depth":176,"text":123753,"children":128804},[128805,128806,128807,128808,128810],{"id":128639,"depth":203,"text":128642},{"id":128651,"depth":203,"text":128651},{"id":128677,"depth":203,"text":128677},{"id":128686,"depth":203,"text":128809},"data.ctrl[0] 写了但没有效果",{"id":128717,"depth":203,"text":128717},{"id":123906,"depth":176,"text":123907},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":127121,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":128818,"title":128819,"body":128820,"description":25,"extension":23810,"meta":130729,"navigation":589,"path":130730,"seo":130731,"stem":130732,"__hash__":130733},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":128821,"toc":130705},[128822,128825,128827,128830,128838,128841,128858,128861,128886,128889,128935,128937,128939,128994,128996,129015,129017,129060,129063,129080,129083,129099,129109,129116,129118,129121,129124,129158,129161,129209,129213,129216,129230,129239,129243,129246,129271,129274,129278,129291,129294,129300,129303,129318,129320,129323,129583,129585,129597,129600,129912,129914,129926,129928,129931,129946,129951,129954,129976,129979,129982,130016,130019,130023,130034,130037,130054,130057,130071,130078,130098,130105,130119,130122,130134,130149,130169,130172,130194,130197,130201,130216,130227,130242,130245,130275,130291,130320,130328,130352,130355,130373,130383,130395,130402,130411,130417,130426,130429,130431,130440,130443,130458,130460,130463,130474,130477,130488,130491,130509,130511,130528,130531,130559,130561,130565,130568,130598,130604,130607,130611,130619,130622,130624,130645,130648,130651,130667,130670,130686,130688,130691,130702],[10,128823,128819],{"id":128824},"_5viewer-可视化与-renderer-离屏渲染",[37,128826,121947],{"id":121946},[14,128828,128829],{},"本章掌握两类可视化方式:",[134,128831,128832,128835],{},[106,128833,128834],{},"交互式 viewer: 适合人工观察仿真",[106,128836,128837],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,128839,128840],{},"使用官方接口:",[151,128842,128844],{"className":53900,"code":128843,"language":53902,"meta":25,"style":25},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[49,128845,128846,128853],{"__ignoreMap":25},[159,128847,128848,128850],{"class":161,"line":162},[159,128849,53914],{"class":1142},[159,128851,128852],{"class":165}," mujoco.viewer\n",[159,128854,128855],{"class":161,"line":176},[159,128856,128857],{"class":165},"mujoco.viewer.launch_passive(model, data)\n",[14,128859,128860],{},"以及:",[151,128862,128864],{"className":53900,"code":128863,"language":53902,"meta":25,"style":25},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[49,128865,128866,128876],{"__ignoreMap":25},[159,128867,128868,128871,128873],{"class":161,"line":162},[159,128869,128870],{"class":165},"renderer ",[159,128872,189],{"class":1142},[159,128874,128875],{"class":165}," mujoco.Renderer(model)\n",[159,128877,128878,128881,128883],{"class":161,"line":176},[159,128879,128880],{"class":165},"image ",[159,128882,189],{"class":1142},[159,128884,128885],{"class":165}," renderer.render()\n",[14,128887,128888],{},"新手建议先理解二者区别：",[12347,128890,128891,128907],{},[16500,128892,128893],{},[12356,128894,128895,128898,128901,128904],{},[12365,128896,128897],{"align":19854},"工具",[12365,128899,128900],{"align":19854},"用途",[12365,128902,128903],{"align":19854},"是否打开窗口",[12365,128905,128906],{"align":19854},"常见场景",[16624,128908,128909,128922],{},[12356,128910,128911,128914,128917,128919],{},[12488,128912,128913],{"align":19854},"Viewer",[12488,128915,128916],{"align":19854},"人眼实时观察仿真",[12488,128918,125965],{"align":19854},[12488,128920,128921],{"align":19854},"调试模型、看控制效果",[12356,128923,128924,128927,128930,128932],{},[12488,128925,128926],{"align":19854},"Renderer",[12488,128928,128929],{"align":19854},"生成图像数组",[12488,128931,125978],{"align":19854},[12488,128933,128934],{"align":19854},"保存图片、训练视觉策略、服务器批量采集",[37,128936,122070],{"id":122069},[14,128938,122073],{},[151,128940,128942],{"className":47347,"code":128941,"language":47349,"meta":25,"style":25},"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",[49,128943,128944,128956,128966,128974,128982],{"__ignoreMap":25},[159,128945,128946,128948,128950,128952,128954],{"class":161,"line":162},[159,128947,48101],{"class":185},[159,128949,49838],{"class":192},[159,128951,47359],{"class":192},[159,128953,49923],{"class":1146},[159,128955,48203],{"class":1146},[159,128957,128958,128960,128962,128964],{"class":161,"line":176},[159,128959,122108],{"class":192},[159,128961,122111],{"class":192},[159,128963,122114],{"class":192},[159,128965,48203],{"class":1146},[159,128967,128968,128970,128972],{"class":161,"line":203},[159,128969,122121],{"class":192},[159,128971,122124],{"class":192},[159,128973,48203],{"class":1146},[159,128975,128976,128978,128980],{"class":161,"line":223},[159,128977,122131],{"class":192},[159,128979,122134],{"class":192},[159,128981,48203],{"class":1146},[159,128983,128984,128986,128988,128990,128992],{"class":161,"line":233},[159,128985,122141],{"class":192},[159,128987,122144],{"class":192},[159,128989,122147],{"class":192},[159,128991,122150],{"class":192},[159,128993,123816],{"class":192},[14,128995,124119],{},[151,128997,128999],{"className":47347,"code":128998,"language":47349,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy pillow\n",[49,129000,129001],{"__ignoreMap":25},[159,129002,129003,129005,129007,129009,129012],{"class":161,"line":162},[159,129004,47356],{"class":185},[159,129006,47359],{"class":192},[159,129008,122230],{"class":192},[159,129010,129011],{"class":192}," numpy",[159,129013,129014],{"class":192}," pillow\n",[14,129016,124136],{},[151,129018,129020],{"className":47347,"code":129019,"language":47349,"meta":25,"style":25},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[49,129021,129022,129039,129048],{"__ignoreMap":25},[159,129023,129024,129026,129028,129030,129033,129035,129037],{"class":161,"line":162},[159,129025,53852],{"class":185},[159,129027,52698],{"class":192},[159,129029,48639],{"class":1146},[159,129031,129032],{"class":192}," mujoco-render",[159,129034,122275],{"class":192},[159,129036,122278],{"class":1146},[159,129038,122281],{"class":1146},[159,129040,129041,129043,129045],{"class":161,"line":176},[159,129042,53852],{"class":185},[159,129044,122288],{"class":192},[159,129046,129047],{"class":192}," mujoco-render\n",[159,129049,129050,129052,129054,129056,129058],{"class":161,"line":203},[159,129051,47356],{"class":185},[159,129053,47359],{"class":192},[159,129055,122230],{"class":192},[159,129057,129011],{"class":192},[159,129059,129014],{"class":192},[14,129061,129062],{},"离屏渲染后端:",[151,129064,129066],{"className":47347,"code":129065,"language":47349,"meta":25,"style":25},"export MUJOCO_GL=egl\n",[49,129067,129068],{"__ignoreMap":25},[159,129069,129070,129072,129075,129077],{"class":161,"line":162},[159,129071,48566],{"class":1142},[159,129073,129074],{"class":165}," MUJOCO_GL",[159,129076,189],{"class":1142},[159,129078,129079],{"class":165},"egl\n",[14,129081,129082],{},"或:",[151,129084,129086],{"className":47347,"code":129085,"language":47349,"meta":25,"style":25},"export MUJOCO_GL=osmesa\n",[49,129087,129088],{"__ignoreMap":25},[159,129089,129090,129092,129094,129096],{"class":161,"line":162},[159,129091,48566],{"class":1142},[159,129093,129074],{"class":165},[159,129095,189],{"class":1142},[159,129097,129098],{"class":165},"osmesa\n",[14,129100,129101,129102,129105,129106,51907],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[49,129103,129104],{},"egl"," 失败，再尝试 ",[49,129107,129108],{},"osmesa",[14,129110,129111,129112,129115],{},"如果你在本机桌面环境运行，通常先不要设置 ",[49,129113,129114],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[37,129117,122345],{"id":122344},[14,129119,129120],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,129122,129123],{},"典型 viewer 流程:",[151,129125,129127],{"className":53900,"code":129126,"language":53902,"meta":25,"style":25},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[49,129128,129129,129142,129149,129153],{"__ignoreMap":25},[159,129130,129131,129134,129137,129139],{"class":161,"line":162},[159,129132,129133],{"class":1142},"with",[159,129135,129136],{"class":165}," mujoco.viewer.launch_passive(model, data) ",[159,129138,54903],{"class":1142},[159,129140,129141],{"class":165}," viewer:\n",[159,129143,129144,129146],{"class":161,"line":176},[159,129145,25899],{"class":1142},[159,129147,129148],{"class":165}," viewer.is_running():\n",[159,129150,129151],{"class":161,"line":203},[159,129152,122816],{"class":165},[159,129154,129155],{"class":161,"line":223},[159,129156,129157],{"class":165},"        viewer.sync()\n",[14,129159,129160],{},"典型 renderer 流程:",[151,129162,129164],{"className":53900,"code":129163,"language":53902,"meta":25,"style":25},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[49,129165,129166,129192,129196,129201],{"__ignoreMap":25},[159,129167,129168,129170,129172,129175,129177,129179,129181,129183,129185,129187,129190],{"class":161,"line":162},[159,129169,128870],{"class":165},[159,129171,189],{"class":1142},[159,129173,129174],{"class":165}," mujoco.Renderer(model, ",[159,129176,48505],{"class":8765},[159,129178,189],{"class":1142},[159,129180,65737],{"class":1146},[159,129182,1939],{"class":165},[159,129184,48502],{"class":8765},[159,129186,189],{"class":1142},[159,129188,129189],{"class":1146},"640",[159,129191,1165],{"class":165},[159,129193,129194],{"class":161,"line":176},[159,129195,125805],{"class":165},[159,129197,129198],{"class":161,"line":203},[159,129199,129200],{"class":165},"renderer.update_scene(data)\n",[159,129202,129203,129205,129207],{"class":161,"line":223},[159,129204,128880],{"class":165},[159,129206,189],{"class":1142},[159,129208,128885],{"class":165},[42,129210,129212],{"id":129211},"viewer-的同步逻辑","viewer 的同步逻辑",[14,129214,129215],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[151,129217,129219],{"className":53900,"code":129218,"language":53902,"meta":25,"style":25},"mujoco.mj_step(model, data)\nviewer.sync()\n",[49,129220,129221,129225],{"__ignoreMap":25},[159,129222,129223],{"class":161,"line":162},[159,129224,125805],{"class":165},[159,129226,129227],{"class":161,"line":176},[159,129228,129229],{"class":165},"viewer.sync()\n",[14,129231,129232,129234,129235,129238],{},[49,129233,122515],{}," 负责算物理，",[49,129236,129237],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[42,129240,129242],{"id":129241},"为什么要-sleep","为什么要 sleep",[14,129244,129245],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[151,129247,129249],{"className":53900,"code":129248,"language":53902,"meta":25,"style":25},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[49,129250,129251],{"__ignoreMap":25},[159,129252,129253,129256,129258,129261,129263,129266,129268],{"class":161,"line":162},[159,129254,129255],{"class":165},"sleep_time ",[159,129257,189],{"class":1142},[159,129259,129260],{"class":165}," model.opt.timestep ",[159,129262,24376],{"class":1142},[159,129264,129265],{"class":165}," (time.time() ",[159,129267,24376],{"class":1142},[159,129269,129270],{"class":165}," step_start)\n",[14,129272,129273],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[42,129275,129277],{"id":129276},"renderer-输出是什么","renderer 输出是什么",[151,129279,129281],{"className":53900,"code":129280,"language":53902,"meta":25,"style":25},"image = renderer.render()\n",[49,129282,129283],{"__ignoreMap":25},[159,129284,129285,129287,129289],{"class":161,"line":162},[159,129286,128880],{"class":165},[159,129288,189],{"class":1142},[159,129290,128885],{"class":165},[14,129292,129293],{},"得到的是 NumPy 数组，形状通常是：",[151,129295,129298],{"className":129296,"code":129297,"language":8507,"meta":25},[28803],"(height, width, 3)\n",[49,129299,129297],{"__ignoreMap":25},[14,129301,129302],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[151,129304,129306],{"className":53900,"code":129305,"language":53902,"meta":25,"style":25},"Image.fromarray(image).save(\"render_output.png\")\n",[49,129307,129308],{"__ignoreMap":25},[159,129309,129310,129313,129316],{"class":161,"line":162},[159,129311,129312],{"class":165},"Image.fromarray(image).save(",[159,129314,129315],{"class":192},"\"render_output.png\"",[159,129317,1165],{"class":165},[37,129319,122553],{"id":122552},[14,129321,129322],{},"交互式 Viewer:",[151,129324,129326],{"className":53900,"code":129325,"language":53902,"meta":25,"style":25},"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",[49,129327,129328,129334,129338,129344,129350,129354,129358,129366,129371,129375,129379,129383,129388,129393,129397,129401,129405,129410,129414,129418,129422,129426,129430,129434,129446,129458,129466,129470,129480,129500,129510,129515,129520,129524,129541,129554,129559,129563,129567,129579],{"__ignoreMap":25},[159,129329,129330,129332],{"class":161,"line":162},[159,129331,53914],{"class":1142},[159,129333,55347],{"class":165},[159,129335,129336],{"class":161,"line":176},[159,129337,590],{"emptyLinePlaceholder":589},[159,129339,129340,129342],{"class":161,"line":203},[159,129341,53914],{"class":1142},[159,129343,122601],{"class":165},[159,129345,129346,129348],{"class":161,"line":223},[159,129347,53914],{"class":1142},[159,129349,128852],{"class":165},[159,129351,129352],{"class":161,"line":233},[159,129353,590],{"emptyLinePlaceholder":589},[159,129355,129356],{"class":161,"line":239},[159,129357,590],{"emptyLinePlaceholder":589},[159,129359,129360,129362,129364],{"class":161,"line":245},[159,129361,122614],{"class":1146},[159,129363,1150],{"class":1142},[159,129365,122619],{"class":192},[159,129367,129368],{"class":161,"line":251},[159,129369,129370],{"class":192},"\u003Cmujoco model=\"viewer_demo\">\n",[159,129372,129373],{"class":161,"line":261},[159,129374,122629],{"class":192},[159,129376,129377],{"class":161,"line":603},[159,129378,590],{"emptyLinePlaceholder":589},[159,129380,129381],{"class":161,"line":621},[159,129382,122638],{"class":192},[159,129384,129385],{"class":161,"line":634},[159,129386,129387],{"class":192},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[159,129389,129390],{"class":161,"line":640},[159,129391,129392],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[159,129394,129395],{"class":161,"line":1075},[159,129396,590],{"emptyLinePlaceholder":589},[159,129398,129399],{"class":161,"line":1081},[159,129400,122652],{"class":192},[159,129402,129403],{"class":161,"line":1091},[159,129404,122657],{"class":192},[159,129406,129407],{"class":161,"line":1100},[159,129408,129409],{"class":192},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[159,129411,129412],{"class":161,"line":1123},[159,129413,122667],{"class":192},[159,129415,129416],{"class":161,"line":1132},[159,129417,122672],{"class":192},[159,129419,129420],{"class":161,"line":1139},[159,129421,122677],{"class":192},[159,129423,129424],{"class":161,"line":1168},[159,129425,116998],{"class":192},[159,129427,129428],{"class":161,"line":1174},[159,129429,590],{"emptyLinePlaceholder":589},[159,129431,129432],{"class":161,"line":1180},[159,129433,590],{"emptyLinePlaceholder":589},[159,129435,129436,129438,129440,129442,129444],{"class":161,"line":1194},[159,129437,55465],{"class":1142},[159,129439,25625],{"class":185},[159,129441,122698],{"class":165},[159,129443,116986],{"class":1146},[159,129445,27364],{"class":165},[159,129447,129448,129450,129452,129454,129456],{"class":161,"line":1200},[159,129449,122707],{"class":165},[159,129451,189],{"class":1142},[159,129453,122712],{"class":165},[159,129455,122614],{"class":1146},[159,129457,1165],{"class":165},[159,129459,129460,129462,129464],{"class":161,"line":1221},[159,129461,122721],{"class":165},[159,129463,189],{"class":1142},[159,129465,122726],{"class":165},[159,129467,129468],{"class":161,"line":1230},[159,129469,590],{"emptyLinePlaceholder":589},[159,129471,129472,129474,129476,129478],{"class":161,"line":1247},[159,129473,57573],{"class":1142},[159,129475,129136],{"class":165},[159,129477,54903],{"class":1142},[159,129479,129141],{"class":165},[159,129481,129482,129485,129488,129490,129493,129495,129498],{"class":161,"line":1265},[159,129483,129484],{"class":1142},"        while",[159,129486,129487],{"class":165}," viewer.is_running() ",[159,129489,53984],{"class":1142},[159,129491,129492],{"class":165}," data.time ",[159,129494,166],{"class":1142},[159,129496,129497],{"class":1146}," 5.0",[159,129499,27364],{"class":165},[159,129501,129502,129505,129507],{"class":161,"line":1277},[159,129503,129504],{"class":165},"            step_start ",[159,129506,189],{"class":1142},[159,129508,129509],{"class":165}," time.time()\n",[159,129511,129512],{"class":161,"line":1283},[159,129513,129514],{"class":165},"            mujoco.mj_step(model, data)\n",[159,129516,129517],{"class":161,"line":1294},[159,129518,129519],{"class":165},"            viewer.sync()\n",[159,129521,129522],{"class":161,"line":1305},[159,129523,590],{"emptyLinePlaceholder":589},[159,129525,129526,129529,129531,129533,129535,129537,129539],{"class":161,"line":1311},[159,129527,129528],{"class":165},"            sleep_time ",[159,129530,189],{"class":1142},[159,129532,129260],{"class":165},[159,129534,24376],{"class":1142},[159,129536,129265],{"class":165},[159,129538,24376],{"class":1142},[159,129540,129270],{"class":165},[159,129542,129543,129545,129548,129550,129552],{"class":161,"line":1322},[159,129544,28260],{"class":1142},[159,129546,129547],{"class":165}," sleep_time ",[159,129549,6760],{"class":1142},[159,129551,1259],{"class":1146},[159,129553,27364],{"class":165},[159,129555,129556],{"class":161,"line":1327},[159,129557,129558],{"class":165},"                time.sleep(sleep_time)\n",[159,129560,129561],{"class":161,"line":1336},[159,129562,590],{"emptyLinePlaceholder":589},[159,129564,129565],{"class":161,"line":1345},[159,129566,590],{"emptyLinePlaceholder":589},[159,129568,129569,129571,129573,129575,129577],{"class":161,"line":1350},[159,129570,18445],{"class":1142},[159,129572,54740],{"class":1146},[159,129574,122859],{"class":1142},[159,129576,122862],{"class":192},[159,129578,27364],{"class":165},[159,129580,129581],{"class":161,"line":1764},[159,129582,122869],{"class":165},[14,129584,124870],{},[151,129586,129588],{"className":47347,"code":129587,"language":47349,"meta":25,"style":25},"touch ch5_viewer.py\n",[49,129589,129590],{"__ignoreMap":25},[159,129591,129592,129594],{"class":161,"line":162},[159,129593,122583],{"class":185},[159,129595,129596],{"class":192}," ch5_viewer.py\n",[14,129598,129599],{},"离屏 Renderer 保存图片:",[151,129601,129603],{"className":53900,"code":129602,"language":53902,"meta":25,"style":25},"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",[49,129604,129605,129617,129621,129627,129637,129641,129645,129653,129658,129662,129666,129670,129674,129679,129683,129687,129691,129695,129699,129703,129707,129711,129715,129719,129723,129735,129747,129755,129780,129784,129800,129804,129808,129823,129832,129836,129850,129855,129860,129864,129876,129888,129892,129896,129908],{"__ignoreMap":25},[159,129606,129607,129609,129612,129614],{"class":161,"line":162},[159,129608,54258],{"class":1142},[159,129610,129611],{"class":165}," pathlib ",[159,129613,53914],{"class":1142},[159,129615,129616],{"class":165}," Path\n",[159,129618,129619],{"class":161,"line":176},[159,129620,590],{"emptyLinePlaceholder":589},[159,129622,129623,129625],{"class":161,"line":203},[159,129624,53914],{"class":1142},[159,129626,122601],{"class":165},[159,129628,129629,129631,129633,129635],{"class":161,"line":223},[159,129630,54258],{"class":1142},[159,129632,70657],{"class":1146},[159,129634,70660],{"class":1142},[159,129636,70663],{"class":165},[159,129638,129639],{"class":161,"line":233},[159,129640,590],{"emptyLinePlaceholder":589},[159,129642,129643],{"class":161,"line":239},[159,129644,590],{"emptyLinePlaceholder":589},[159,129646,129647,129649,129651],{"class":161,"line":245},[159,129648,122614],{"class":1146},[159,129650,1150],{"class":1142},[159,129652,122619],{"class":192},[159,129654,129655],{"class":161,"line":251},[159,129656,129657],{"class":192},"\u003Cmujoco model=\"renderer_demo\">\n",[159,129659,129660],{"class":161,"line":261},[159,129661,122629],{"class":192},[159,129663,129664],{"class":161,"line":603},[159,129665,590],{"emptyLinePlaceholder":589},[159,129667,129668],{"class":161,"line":621},[159,129669,122638],{"class":192},[159,129671,129672],{"class":161,"line":634},[159,129673,129387],{"class":192},[159,129675,129676],{"class":161,"line":640},[159,129677,129678],{"class":192},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[159,129680,129681],{"class":161,"line":1075},[159,129682,129392],{"class":192},[159,129684,129685],{"class":161,"line":1081},[159,129686,590],{"emptyLinePlaceholder":589},[159,129688,129689],{"class":161,"line":1091},[159,129690,122652],{"class":192},[159,129692,129693],{"class":161,"line":1100},[159,129694,122657],{"class":192},[159,129696,129697],{"class":161,"line":1123},[159,129698,129409],{"class":192},[159,129700,129701],{"class":161,"line":1132},[159,129702,122667],{"class":192},[159,129704,129705],{"class":161,"line":1139},[159,129706,122672],{"class":192},[159,129708,129709],{"class":161,"line":1168},[159,129710,122677],{"class":192},[159,129712,129713],{"class":161,"line":1174},[159,129714,116998],{"class":192},[159,129716,129717],{"class":161,"line":1180},[159,129718,590],{"emptyLinePlaceholder":589},[159,129720,129721],{"class":161,"line":1194},[159,129722,590],{"emptyLinePlaceholder":589},[159,129724,129725,129727,129729,129731,129733],{"class":161,"line":1200},[159,129726,55465],{"class":1142},[159,129728,25625],{"class":185},[159,129730,122698],{"class":165},[159,129732,116986],{"class":1146},[159,129734,27364],{"class":165},[159,129736,129737,129739,129741,129743,129745],{"class":161,"line":1221},[159,129738,122707],{"class":165},[159,129740,189],{"class":1142},[159,129742,122712],{"class":165},[159,129744,122614],{"class":1146},[159,129746,1165],{"class":165},[159,129748,129749,129751,129753],{"class":161,"line":1230},[159,129750,122721],{"class":165},[159,129752,189],{"class":1142},[159,129754,122726],{"class":165},[159,129756,129757,129760,129762,129764,129766,129768,129770,129772,129774,129776,129778],{"class":161,"line":1247},[159,129758,129759],{"class":165},"    renderer ",[159,129761,189],{"class":1142},[159,129763,129174],{"class":165},[159,129765,48505],{"class":8765},[159,129767,189],{"class":1142},[159,129769,65737],{"class":1146},[159,129771,1939],{"class":165},[159,129773,48502],{"class":8765},[159,129775,189],{"class":1142},[159,129777,129189],{"class":1146},[159,129779,1165],{"class":165},[159,129781,129782],{"class":161,"line":1265},[159,129783,590],{"emptyLinePlaceholder":589},[159,129785,129786,129788,129790,129792,129794,129796,129798],{"class":161,"line":1277},[159,129787,11677],{"class":1142},[159,129789,122801],{"class":165},[159,129791,49566],{"class":1142},[159,129793,55961],{"class":1146},[159,129795,1159],{"class":165},[159,129797,1596],{"class":1146},[159,129799,54307],{"class":165},[159,129801,129802],{"class":161,"line":1283},[159,129803,122816],{"class":165},[159,129805,129806],{"class":161,"line":1294},[159,129807,590],{"emptyLinePlaceholder":589},[159,129809,129810,129813,129816,129818,129821],{"class":161,"line":1305},[159,129811,129812],{"class":165},"    renderer.update_scene(data, ",[159,129814,129815],{"class":8765},"camera",[159,129817,189],{"class":1142},[159,129819,129820],{"class":192},"\"fixed_camera\"",[159,129822,1165],{"class":165},[159,129824,129825,129828,129830],{"class":161,"line":1311},[159,129826,129827],{"class":165},"    image ",[159,129829,189],{"class":1142},[159,129831,128885],{"class":165},[159,129833,129834],{"class":161,"line":1322},[159,129835,590],{"emptyLinePlaceholder":589},[159,129837,129838,129841,129843,129846,129848],{"class":161,"line":1327},[159,129839,129840],{"class":165},"    output_path ",[159,129842,189],{"class":1142},[159,129844,129845],{"class":165}," Path(",[159,129847,129315],{"class":192},[159,129849,1165],{"class":165},[159,129851,129852],{"class":161,"line":1336},[159,129853,129854],{"class":165},"    Image.fromarray(image).save(output_path)\n",[159,129856,129857],{"class":161,"line":1345},[159,129858,129859],{"class":165},"    renderer.close()\n",[159,129861,129862],{"class":161,"line":1350},[159,129863,590],{"emptyLinePlaceholder":589},[159,129865,129866,129868,129870,129873],{"class":161,"line":1764},[159,129867,54819],{"class":1146},[159,129869,1159],{"class":165},[159,129871,129872],{"class":192},"\"saved:\"",[159,129874,129875],{"class":165},", output_path.resolve())\n",[159,129877,129878,129880,129882,129885],{"class":161,"line":1769},[159,129879,54819],{"class":1146},[159,129881,1159],{"class":165},[159,129883,129884],{"class":192},"\"image shape:\"",[159,129886,129887],{"class":165},", image.shape)\n",[159,129889,129890],{"class":161,"line":1777},[159,129891,590],{"emptyLinePlaceholder":589},[159,129893,129894],{"class":161,"line":1788},[159,129895,590],{"emptyLinePlaceholder":589},[159,129897,129898,129900,129902,129904,129906],{"class":161,"line":1802},[159,129899,18445],{"class":1142},[159,129901,54740],{"class":1146},[159,129903,122859],{"class":1142},[159,129905,122862],{"class":192},[159,129907,27364],{"class":165},[159,129909,129910],{"class":161,"line":1815},[159,129911,122869],{"class":165},[14,129913,124870],{},[151,129915,129917],{"className":47347,"code":129916,"language":47349,"meta":25,"style":25},"touch ch5_renderer.py\n",[49,129918,129919],{"__ignoreMap":25},[159,129920,129921,129923],{"class":161,"line":162},[159,129922,122583],{"class":185},[159,129924,129925],{"class":192}," ch5_renderer.py\n",[42,129927,122872],{"id":122872},[14,129929,129930],{},"viewer 上下文：",[151,129932,129934],{"className":53900,"code":129933,"language":53902,"meta":25,"style":25},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[49,129935,129936],{"__ignoreMap":25},[159,129937,129938,129940,129942,129944],{"class":161,"line":162},[159,129939,129133],{"class":1142},[159,129941,129136],{"class":165},[159,129943,54903],{"class":1142},[159,129945,129141],{"class":165},[14,129947,129948,129950],{},[49,129949,129133],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,129952,129953],{},"窗口循环：",[151,129955,129957],{"className":53900,"code":129956,"language":53902,"meta":25,"style":25},"while viewer.is_running() and data.time \u003C 5.0:\n",[49,129958,129959],{"__ignoreMap":25},[159,129960,129961,129964,129966,129968,129970,129972,129974],{"class":161,"line":162},[159,129962,129963],{"class":1142},"while",[159,129965,129487],{"class":165},[159,129967,53984],{"class":1142},[159,129969,129492],{"class":165},[159,129971,166],{"class":1142},[159,129973,129497],{"class":1146},[159,129975,27364],{"class":165},[14,129977,129978],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,129980,129981],{},"固定相机：",[151,129983,129985],{"className":153,"code":129984,"language":155,"meta":25,"style":25},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[49,129986,129987],{"__ignoreMap":25},[159,129988,129989,129991,129993,129995,129997,129999,130001,130003,130006,130009,130011,130014],{"class":161,"line":162},[159,129990,166],{"class":165},[159,129992,129815],{"class":169},[159,129994,547],{"class":185},[159,129996,189],{"class":165},[159,129998,129820],{"class":192},[159,130000,122406],{"class":185},[159,130002,189],{"class":165},[159,130004,130005],{"class":192},"\"1.5 -2.0 1.2\"",[159,130007,130008],{"class":185}," xyaxes",[159,130010,189],{"class":165},[159,130012,130013],{"class":192},"\"1 0.75 0 0 0 1\"",[159,130015,122444],{"class":165},[14,130017,130018],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[42,130020,130022],{"id":130021},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[151,130024,130026],{"className":53900,"code":130025,"language":53902,"meta":25,"style":25},"import time\n",[49,130027,130028],{"__ignoreMap":25},[159,130029,130030,130032],{"class":161,"line":162},[159,130031,53914],{"class":1142},[159,130033,55347],{"class":165},[14,130035,130036],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[151,130038,130040],{"className":53900,"code":130039,"language":53902,"meta":25,"style":25},"import mujoco\nimport mujoco.viewer\n",[49,130041,130042,130048],{"__ignoreMap":25},[159,130043,130044,130046],{"class":161,"line":162},[159,130045,53914],{"class":1142},[159,130047,122601],{"class":165},[159,130049,130050,130052],{"class":161,"line":176},[159,130051,53914],{"class":1142},[159,130053,128852],{"class":165},[14,130055,130056],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[151,130058,130059],{"className":53900,"code":129933,"language":53902,"meta":25,"style":25},[49,130060,130061],{"__ignoreMap":25},[159,130062,130063,130065,130067,130069],{"class":161,"line":162},[159,130064,129133],{"class":1142},[159,130066,129136],{"class":165},[159,130068,54903],{"class":1142},[159,130070,129141],{"class":165},[14,130072,130073,130074,130077],{},"打开一个 viewer 窗口。",[49,130075,130076],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[151,130079,130080],{"className":53900,"code":129956,"language":53902,"meta":25,"style":25},[49,130081,130082],{"__ignoreMap":25},[159,130083,130084,130086,130088,130090,130092,130094,130096],{"class":161,"line":162},[159,130085,129963],{"class":1142},[159,130087,129487],{"class":165},[159,130089,53984],{"class":1142},[159,130091,129492],{"class":165},[159,130093,166],{"class":1142},[159,130095,129497],{"class":1146},[159,130097,27364],{"class":165},[14,130099,130100,130101,130104],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[49,130102,130103],{},"viewer.is_running()"," 会变成 false，循环结束。",[151,130106,130108],{"className":53900,"code":130107,"language":53902,"meta":25,"style":25},"step_start = time.time()\n",[49,130109,130110],{"__ignoreMap":25},[159,130111,130112,130115,130117],{"class":161,"line":162},[159,130113,130114],{"class":165},"step_start ",[159,130116,189],{"class":1142},[159,130118,129509],{"class":165},[14,130120,130121],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[151,130123,130124],{"className":53900,"code":129218,"language":53902,"meta":25,"style":25},[49,130125,130126,130130],{"__ignoreMap":25},[159,130127,130128],{"class":161,"line":162},[159,130129,125805],{"class":165},[159,130131,130132],{"class":161,"line":176},[159,130133,129229],{"class":165},[14,130135,130136,130138,130139,130141,130142,130144,130145,130148],{},[49,130137,122515],{}," 推进物理仿真。",[49,130140,129237],{}," 把最新的 ",[49,130143,56843],{}," 同步到窗口里显示。没有 ",[49,130146,130147],{},"sync()","，窗口可能看不到最新状态。",[151,130150,130151],{"className":53900,"code":129248,"language":53902,"meta":25,"style":25},[49,130152,130153],{"__ignoreMap":25},[159,130154,130155,130157,130159,130161,130163,130165,130167],{"class":161,"line":162},[159,130156,129255],{"class":165},[159,130158,189],{"class":1142},[159,130160,129260],{"class":165},[159,130162,24376],{"class":1142},[159,130164,129265],{"class":165},[159,130166,24376],{"class":1142},[159,130168,129270],{"class":165},[14,130170,130171],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[151,130173,130175],{"className":53900,"code":130174,"language":53902,"meta":25,"style":25},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[49,130176,130177,130189],{"__ignoreMap":25},[159,130178,130179,130181,130183,130185,130187],{"class":161,"line":162},[159,130180,18445],{"class":1142},[159,130182,129547],{"class":165},[159,130184,6760],{"class":1142},[159,130186,1259],{"class":1146},[159,130188,27364],{"class":165},[159,130190,130191],{"class":161,"line":176},[159,130192,130193],{"class":165},"    time.sleep(sleep_time)\n",[14,130195,130196],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[42,130198,130200],{"id":130199},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[151,130202,130204],{"className":53900,"code":130203,"language":53902,"meta":25,"style":25},"from pathlib import Path\n",[49,130205,130206],{"__ignoreMap":25},[159,130207,130208,130210,130212,130214],{"class":161,"line":162},[159,130209,54258],{"class":1142},[159,130211,129611],{"class":165},[159,130213,53914],{"class":1142},[159,130215,129616],{"class":165},[14,130217,130218,130219,130222,130223,130226],{},"导入 ",[49,130220,130221],{},"Path","，用来处理文件路径。相比直接写字符串，",[49,130224,130225],{},"Path(\"render_output.png\")"," 更清晰。",[151,130228,130230],{"className":53900,"code":130229,"language":53902,"meta":25,"style":25},"from PIL import Image\n",[49,130231,130232],{"__ignoreMap":25},[159,130233,130234,130236,130238,130240],{"class":161,"line":162},[159,130235,54258],{"class":1142},[159,130237,70657],{"class":1146},[159,130239,70660],{"class":1142},[159,130241,70663],{"class":165},[14,130243,130244],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[151,130246,130247],{"className":153,"code":129984,"language":155,"meta":25,"style":25},[49,130248,130249],{"__ignoreMap":25},[159,130250,130251,130253,130255,130257,130259,130261,130263,130265,130267,130269,130271,130273],{"class":161,"line":162},[159,130252,166],{"class":165},[159,130254,129815],{"class":169},[159,130256,547],{"class":185},[159,130258,189],{"class":165},[159,130260,129820],{"class":192},[159,130262,122406],{"class":185},[159,130264,189],{"class":165},[159,130266,130005],{"class":192},[159,130268,130008],{"class":185},[159,130270,189],{"class":165},[159,130272,130013],{"class":192},[159,130274,122444],{"class":165},[14,130276,130277,130278,130280,130281,130283,130284,130287,130288,130290],{},"定义一个相机。",[49,130279,101110],{}," 是相机名字。",[49,130282,125446],{}," 是相机在世界里的位置。",[49,130285,130286],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[49,130289,125446],{}," 来调视角。",[151,130292,130294],{"className":53900,"code":130293,"language":53902,"meta":25,"style":25},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[49,130295,130296],{"__ignoreMap":25},[159,130297,130298,130300,130302,130304,130306,130308,130310,130312,130314,130316,130318],{"class":161,"line":162},[159,130299,128870],{"class":165},[159,130301,189],{"class":1142},[159,130303,129174],{"class":165},[159,130305,48505],{"class":8765},[159,130307,189],{"class":1142},[159,130309,65737],{"class":1146},[159,130311,1939],{"class":165},[159,130313,48502],{"class":8765},[159,130315,189],{"class":1142},[159,130317,129189],{"class":1146},[159,130319,1165],{"class":165},[14,130321,130322,130323,122318,130325,130327],{},"创建离屏渲染器。",[49,130324,48505],{},[49,130326,48502],{}," 决定输出图片大小。",[151,130329,130330],{"className":53900,"code":122976,"language":53902,"meta":25,"style":25},[49,130331,130332,130348],{"__ignoreMap":25},[159,130333,130334,130336,130338,130340,130342,130344,130346],{"class":161,"line":162},[159,130335,26657],{"class":1142},[159,130337,122801],{"class":165},[159,130339,49566],{"class":1142},[159,130341,55961],{"class":1146},[159,130343,1159],{"class":165},[159,130345,1596],{"class":1146},[159,130347,54307],{"class":165},[159,130349,130350],{"class":161,"line":176},[159,130351,122999],{"class":165},[14,130353,130354],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[151,130356,130358],{"className":53900,"code":130357,"language":53902,"meta":25,"style":25},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[49,130359,130360],{"__ignoreMap":25},[159,130361,130362,130365,130367,130369,130371],{"class":161,"line":162},[159,130363,130364],{"class":165},"renderer.update_scene(data, ",[159,130366,129815],{"class":8765},[159,130368,189],{"class":1142},[159,130370,129820],{"class":192},[159,130372,1165],{"class":165},[14,130374,130375,130376,130378,130379,130382],{},"告诉 renderer：用当前 ",[49,130377,56843],{}," 的状态更新画面，并使用名为 ",[49,130380,130381],{},"fixed_camera"," 的相机视角。",[151,130384,130385],{"className":53900,"code":129280,"language":53902,"meta":25,"style":25},[49,130386,130387],{"__ignoreMap":25},[159,130388,130389,130391,130393],{"class":161,"line":162},[159,130390,128880],{"class":165},[159,130392,189],{"class":1142},[159,130394,128885],{"class":165},[14,130396,130397,130398,130401],{},"真正渲染出图像。",[49,130399,130400],{},"image"," 是一个 NumPy 数组，不是文件。",[151,130403,130405],{"className":53900,"code":130404,"language":53902,"meta":25,"style":25},"Image.fromarray(image).save(output_path)\n",[49,130406,130407],{"__ignoreMap":25},[159,130408,130409],{"class":161,"line":162},[159,130410,130404],{"class":165},[14,130412,130413,130414,51907],{},"把数组转换成图片，并保存到 ",[49,130415,130416],{},"render_output.png",[151,130418,130420],{"className":53900,"code":130419,"language":53902,"meta":25,"style":25},"renderer.close()\n",[49,130421,130422],{"__ignoreMap":25},[159,130423,130424],{"class":161,"line":162},[159,130425,130419],{"class":165},[14,130427,130428],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[37,130430,123616],{"id":123615},[14,130432,130433,130434,130436,130437,51907],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[49,130435,130416],{},"，并输出图像数组形状，例如 ",[49,130438,130439],{},"(480, 640, 3)",[14,130441,130442],{},"如果图片里看不到方块，先检查：",[134,130444,130445,130448,130451],{},[106,130446,130447],{},"方块是否掉到相机视野外。",[106,130449,130450],{},"camera 位置是否合理。",[106,130452,130453,130454,130457],{},"是否在 ",[49,130455,130456],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[37,130459,123648],{"id":123647},[14,130461,130462],{},"运行 viewer:",[151,130464,130466],{"className":47347,"code":130465,"language":47349,"meta":25,"style":25},"python ch5_viewer.py\n",[49,130467,130468],{"__ignoreMap":25},[159,130469,130470,130472],{"class":161,"line":162},[159,130471,53902],{"class":185},[159,130473,129596],{"class":192},[14,130475,130476],{},"运行 renderer:",[151,130478,130480],{"className":47347,"code":130479,"language":47349,"meta":25,"style":25},"python ch5_renderer.py\n",[49,130481,130482],{"__ignoreMap":25},[159,130483,130484,130486],{"class":161,"line":162},[159,130485,53902],{"class":185},[159,130487,129925],{"class":192},[14,130489,130490],{},"如果在服务器上运行:",[151,130492,130494],{"className":47347,"code":130493,"language":47349,"meta":25,"style":25},"MUJOCO_GL=egl python ch5_renderer.py\n",[49,130495,130496],{"__ignoreMap":25},[159,130497,130498,130500,130502,130504,130507],{"class":161,"line":162},[159,130499,129114],{"class":165},[159,130501,189],{"class":1142},[159,130503,129104],{"class":192},[159,130505,130506],{"class":185}," python",[159,130508,129925],{"class":192},[14,130510,129082],{},[151,130512,130514],{"className":47347,"code":130513,"language":47349,"meta":25,"style":25},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[49,130515,130516],{"__ignoreMap":25},[159,130517,130518,130520,130522,130524,130526],{"class":161,"line":162},[159,130519,129114],{"class":165},[159,130521,189],{"class":1142},[159,130523,129108],{"class":192},[159,130525,130506],{"class":185},[159,130527,129925],{"class":192},[14,130529,130530],{},"再做几个练习：",[134,130532,130533,130540,130543,130549],{},[106,130534,130535,130536,130539],{},"把 renderer 分辨率改成 ",[49,130537,130538],{},"height=240, width=320","，观察输出 shape。",[106,130541,130542],{},"把方块颜色改成蓝色，重新保存图片。",[106,130544,130545,130546,130548],{},"把相机 ",[49,130547,125446],{}," 改远一点，观察画面中物体是否变小。",[106,130550,130551,130552,123714,130555,130558],{},"把 viewer 示例中的 ",[49,130553,130554],{},"data.time \u003C 5.0",[49,130556,130557],{},"data.time \u003C 20.0","，观察更长时间。",[37,130560,123753],{"id":123752},[42,130562,130564],{"id":130563},"viewer-窗口打不开","viewer 窗口打不开",[14,130566,130567],{},"安装:",[151,130569,130571],{"className":47347,"code":130570,"language":47349,"meta":25,"style":25},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[49,130572,130573],{"__ignoreMap":25},[159,130574,130575,130577,130579,130581,130583,130585,130587,130589,130591,130593,130595],{"class":161,"line":162},[159,130576,48101],{"class":185},[159,130578,49838],{"class":192},[159,130580,47359],{"class":192},[159,130582,49923],{"class":1146},[159,130584,123806],{"class":192},[159,130586,122134],{"class":192},[159,130588,123811],{"class":192},[159,130590,122147],{"class":192},[159,130592,122153],{"class":192},[159,130594,122144],{"class":192},[159,130596,130597],{"class":192}," libXinerama\n",[42,130599,130601],{"id":130600},"glfwerror",[49,130602,130603],{},"GLFWError",[14,130605,130606],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[42,130608,130610],{"id":130609},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,130612,130613,130614,103839,130616,130618],{},"尝试 ",[49,130615,122337],{},[49,130617,122340],{},"。可能存在版本差异。",[42,130620,130621],{"id":130621},"保存图片是黑的",[14,130623,123875],{},[134,130625,130626,130629,130632,130642],{},[106,130627,130628],{},"XML 里是否有 light。",[106,130630,130631],{},"相机是否对着模型。",[106,130633,130634,130635,130638,130639,51907],{},"是否先 ",[49,130636,130637],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[49,130640,130641],{},"renderer.render()",[106,130643,130644],{},"物体是否已经掉出视野。",[42,130646,130647],{"id":130647},"远程服务器没有显示器",[14,130649,130650],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[151,130652,130653],{"className":47347,"code":130493,"language":47349,"meta":25,"style":25},[49,130654,130655],{"__ignoreMap":25},[159,130656,130657,130659,130661,130663,130665],{"class":161,"line":162},[159,130658,129114],{"class":165},[159,130660,189],{"class":1142},[159,130662,129104],{"class":192},[159,130664,130506],{"class":185},[159,130666,129925],{"class":192},[14,130668,130669],{},"如果 EGL 不可用，再尝试：",[151,130671,130672],{"className":47347,"code":130513,"language":47349,"meta":25,"style":25},[49,130673,130674],{"__ignoreMap":25},[159,130675,130676,130678,130680,130682,130684],{"class":161,"line":162},[159,130677,129114],{"class":165},[159,130679,189],{"class":1142},[159,130681,129108],{"class":192},[159,130683,130506],{"class":185},[159,130685,129925],{"class":192},[37,130687,123907],{"id":123906},[14,130689,130690],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[134,130692,130693,130696,130699],{},[106,130694,130695],{},"先用 viewer 看模型和控制是否正常。",[106,130697,130698],{},"再用 renderer 保存图片或构造视觉观测。",[106,130700,130701],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1468,130703,130704],{},"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":25,"searchDepth":176,"depth":176,"links":130706},[130707,130708,130709,130714,130719,130720,130721,130728],{"id":121946,"depth":176,"text":121947},{"id":122069,"depth":176,"text":122070},{"id":122344,"depth":176,"text":122345,"children":130710},[130711,130712,130713],{"id":129211,"depth":203,"text":129212},{"id":129241,"depth":203,"text":129242},{"id":129276,"depth":203,"text":129277},{"id":122552,"depth":176,"text":122553,"children":130715},[130716,130717,130718],{"id":122872,"depth":203,"text":122872},{"id":130021,"depth":203,"text":130022},{"id":130199,"depth":203,"text":130200},{"id":123615,"depth":176,"text":123616},{"id":123647,"depth":176,"text":123648},{"id":123752,"depth":176,"text":123753,"children":130722},[130723,130724,130725,130726,130727],{"id":130563,"depth":203,"text":130564},{"id":130600,"depth":203,"text":130603},{"id":130609,"depth":203,"text":130610},{"id":130621,"depth":203,"text":130621},{"id":130647,"depth":203,"text":130647},{"id":123906,"depth":176,"text":123907},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":128819,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":130735,"title":130736,"body":130737,"description":25,"extension":23810,"meta":132648,"navigation":589,"path":132649,"seo":132650,"stem":132651,"__hash__":132652},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":130738,"toc":132624},[130739,130742,130744,130747,130749,130768,130771,130777,130780,130782,130784,130808,130810,130824,130826,130867,130869,130880,130882,130885,130891,130894,130928,130931,130963,130966,130998,131002,131005,131045,131048,131054,131057,131063,131067,131070,131076,131079,131083,131086,131126,131128,131141,131144,131146,131728,131730,131742,131745,131756,131758,131761,131780,131792,131795,131816,131819,131822,131865,131868,131871,131891,131898,131900,131918,131933,131936,131942,131945,131951,131968,131975,132006,132017,132051,132062,132079,132088,132096,132101,132115,132118,132139,132145,132159,132164,132194,132204,132229,132237,132260,132263,132279,132282,132290,132296,132318,132331,132352,132361,132400,132411,132413,132416,132422,132425,132428,132434,132437,132457,132460,132462,132501,132503,132506,132514,132517,132520,132547,132550,132560,132566,132569,132575,132577,132583,132587,132590,132592,132595,132619,132622],[10,130740,130736],{"id":130741},"_6控制任务cartpole",[37,130743,121947],{"id":121946},[14,130745,130746],{},"本章搭建一个最小 Cartpole 控制任务。",[14,130748,125631],{},[134,130750,130751,130754,130756,130759,130762,130765],{},[106,130752,130753],{},"slide joint",[106,130755,127484],{},[106,130757,130758],{},"cart force actuator",[106,130760,130761],{},"状态观测",[106,130763,130764],{},"简单控制循环",[106,130766,130767],{},"reward 设计雏形",[14,130769,130770],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[151,130772,130775],{"className":130773,"code":130774,"language":8507,"meta":25},[28803],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[49,130776,130774],{"__ignoreMap":25},[14,130778,130779],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[37,130781,122070],{"id":122069},[14,130783,122073],{},[151,130785,130786],{"className":47347,"code":125688,"language":47349,"meta":25,"style":25},[49,130787,130788],{"__ignoreMap":25},[159,130789,130790,130792,130794,130796,130798,130800,130802,130804,130806],{"class":161,"line":162},[159,130791,48101],{"class":185},[159,130793,49838],{"class":192},[159,130795,47359],{"class":192},[159,130797,49923],{"class":1146},[159,130799,125703],{"class":192},[159,130801,122098],{"class":192},[159,130803,123801],{"class":192},[159,130805,122114],{"class":192},[159,130807,125712],{"class":192},[14,130809,124119],{},[151,130811,130812],{"className":47347,"code":122219,"language":47349,"meta":25,"style":25},[49,130813,130814],{"__ignoreMap":25},[159,130815,130816,130818,130820,130822],{"class":161,"line":162},[159,130817,47356],{"class":185},[159,130819,47359],{"class":192},[159,130821,122230],{"class":192},[159,130823,122233],{"class":192},[14,130825,124136],{},[151,130827,130829],{"className":47347,"code":130828,"language":47349,"meta":25,"style":25},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[49,130830,130831,130848,130857],{"__ignoreMap":25},[159,130832,130833,130835,130837,130839,130842,130844,130846],{"class":161,"line":162},[159,130834,53852],{"class":185},[159,130836,52698],{"class":192},[159,130838,48639],{"class":1146},[159,130840,130841],{"class":192}," mujoco-cartpole",[159,130843,122275],{"class":192},[159,130845,122278],{"class":1146},[159,130847,122281],{"class":1146},[159,130849,130850,130852,130854],{"class":161,"line":176},[159,130851,53852],{"class":185},[159,130853,122288],{"class":192},[159,130855,130856],{"class":192}," mujoco-cartpole\n",[159,130858,130859,130861,130863,130865],{"class":161,"line":203},[159,130860,47356],{"class":185},[159,130862,47359],{"class":192},[159,130864,122230],{"class":192},[159,130866,122233],{"class":192},[14,130868,122304],{},[134,130870,130871,130874,130877],{},[106,130872,130873],{},"本章不依赖 Gymnasium。",[106,130875,130876],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[106,130878,130879],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[37,130881,122345],{"id":122344},[14,130883,130884],{},"Cartpole 的模型结构:",[151,130886,130889],{"className":130887,"code":130888,"language":8507,"meta":25},[28803],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[49,130890,130888],{"__ignoreMap":25},[14,130892,130893],{},"小车通过 slide joint 左右移动:",[151,130895,130897],{"className":153,"code":130896,"language":155,"meta":25,"style":25},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[49,130898,130899],{"__ignoreMap":25},[159,130900,130901,130903,130905,130907,130909,130912,130914,130916,130919,130921,130923,130926],{"class":161,"line":162},[159,130902,166],{"class":165},[159,130904,124256],{"class":169},[159,130906,547],{"class":185},[159,130908,189],{"class":165},[159,130910,130911],{"class":192},"\"cart_x\"",[159,130913,539],{"class":185},[159,130915,189],{"class":165},[159,130917,130918],{"class":192},"\"slide\"",[159,130920,127328],{"class":185},[159,130922,189],{"class":165},[159,130924,130925],{"class":192},"\"1 0 0\"",[159,130927,122444],{"class":165},[14,130929,130930],{},"杆子通过 hinge joint 旋转:",[151,130932,130934],{"className":153,"code":130933,"language":155,"meta":25,"style":25},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[49,130935,130936],{"__ignoreMap":25},[159,130937,130938,130940,130942,130944,130946,130949,130951,130953,130955,130957,130959,130961],{"class":161,"line":162},[159,130939,166],{"class":165},[159,130941,124256],{"class":169},[159,130943,547],{"class":185},[159,130945,189],{"class":165},[159,130947,130948],{"class":192},"\"pole_hinge\"",[159,130950,539],{"class":185},[159,130952,189],{"class":165},[159,130954,127319],{"class":192},[159,130956,127328],{"class":185},[159,130958,189],{"class":165},[159,130960,127333],{"class":192},[159,130962,122444],{"class":165},[14,130964,130965],{},"控制力作用在小车 slide joint 上:",[151,130967,130969],{"className":153,"code":130968,"language":155,"meta":25,"style":25},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[49,130970,130971],{"__ignoreMap":25},[159,130972,130973,130975,130977,130979,130981,130984,130986,130988,130990,130992,130994,130996],{"class":161,"line":162},[159,130974,166],{"class":165},[159,130976,127374],{"class":169},[159,130978,547],{"class":185},[159,130980,189],{"class":165},[159,130982,130983],{"class":192},"\"cart_motor\"",[159,130985,127384],{"class":185},[159,130987,189],{"class":165},[159,130989,130911],{"class":192},[159,130991,127391],{"class":185},[159,130993,189],{"class":165},[159,130995,1060],{"class":192},[159,130997,122444],{"class":165},[42,130999,131001],{"id":131000},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,131003,131004],{},"这个简化模型有两个关节：",[12347,131006,131007,131018],{},[16500,131008,131009],{},[12356,131010,131011,131013,131015],{},[12365,131012,124059],{"align":19854},[12365,131014,47262],{"align":19854},[12365,131016,131017],{"align":19854},"对应状态",[16624,131019,131020,131033],{},[12356,131021,131022,131027,131030],{},[12488,131023,131024],{"align":19854},[49,131025,131026],{},"cart_x",[12488,131028,131029],{"align":19854},"slide",[12488,131031,131032],{"align":19854},"小车 x 位置",[12356,131034,131035,131040,131042],{},[12488,131036,131037],{"align":19854},[49,131038,131039],{},"pole_hinge",[12488,131041,127140],{"align":19854},[12488,131043,131044],{"align":19854},"杆子角度",[14,131046,131047],{},"所以：",[151,131049,131052],{"className":131050,"code":131051,"language":8507,"meta":25},[28803],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[49,131053,131051],{"__ignoreMap":25},[14,131055,131056],{},"把它们拼起来就是观测：",[151,131058,131061],{"className":131059,"code":131060,"language":8507,"meta":25},[28803],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[49,131062,131060],{"__ignoreMap":25},[42,131064,131066],{"id":131065},"action-是什么","action 是什么",[14,131068,131069],{},"本章只有一个 actuator：",[151,131071,131074],{"className":131072,"code":131073,"language":8507,"meta":25},[28803],"data.ctrl[0] = action\n",[49,131075,131073],{"__ignoreMap":25},[14,131077,131078],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[42,131080,131082],{"id":131081},"reward-是什么","reward 是什么",[14,131084,131085],{},"奖励函数：",[151,131087,131089],{"className":53900,"code":131088,"language":53902,"meta":25,"style":25},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[49,131090,131091],{"__ignoreMap":25},[159,131092,131093,131095,131098,131100,131102,131104,131107,131109,131112,131114,131116,131118,131121,131123],{"class":161,"line":162},[159,131094,40574],{"class":1142},[159,131096,131097],{"class":1146}," float",[159,131099,1159],{"class":165},[159,131101,123703],{"class":1146},[159,131103,21708],{"class":1142},[159,131105,131106],{"class":1146}," 0.1",[159,131108,30131],{"class":1142},[159,131110,131111],{"class":165}," cart_x ",[159,131113,4777],{"class":1142},[159,131115,131111],{"class":165},[159,131117,24376],{"class":1142},[159,131119,131120],{"class":165}," pole_angle ",[159,131122,4777],{"class":1142},[159,131124,131125],{"class":165}," pole_angle)\n",[14,131127,127526],{},[134,131129,131130,131135,131138],{},[106,131131,131132,131133,51907],{},"基础奖励是 ",[49,131134,123703],{},[106,131136,131137],{},"小车离中心越远，扣分越多。",[106,131139,131140],{},"杆子角度越大，扣分越多。",[14,131142,131143],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[37,131145,122553],{"id":122552},[151,131147,131149],{"className":53900,"code":131148,"language":53902,"meta":25,"style":25},"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",[49,131150,131151,131157,131167,131171,131175,131183,131188,131192,131196,131200,131205,131209,131214,131219,131224,131228,131233,131238,131243,131247,131251,131255,131259,131263,131268,131272,131276,131280,131284,131288,131298,131305,131309,131313,131327,131341,131354,131384,131388,131392,131404,131416,131424,131428,131441,131445,131449,131458,131462,131478,131488,131501,131514,131518,131541,131559,131563,131575,131579,131583,131593,131603,131607,131623,131664,131668,131688,131704,131708,131712,131724],{"__ignoreMap":25},[159,131152,131153,131155],{"class":161,"line":162},[159,131154,53914],{"class":1142},[159,131156,122601],{"class":165},[159,131158,131159,131161,131163,131165],{"class":161,"line":176},[159,131160,53914],{"class":1142},[159,131162,54900],{"class":165},[159,131164,54903],{"class":1142},[159,131166,54906],{"class":165},[159,131168,131169],{"class":161,"line":203},[159,131170,590],{"emptyLinePlaceholder":589},[159,131172,131173],{"class":161,"line":223},[159,131174,590],{"emptyLinePlaceholder":589},[159,131176,131177,131179,131181],{"class":161,"line":233},[159,131178,122614],{"class":1146},[159,131180,1150],{"class":1142},[159,131182,122619],{"class":192},[159,131184,131185],{"class":161,"line":239},[159,131186,131187],{"class":192},"\u003Cmujoco model=\"cartpole\">\n",[159,131189,131190],{"class":161,"line":245},[159,131191,122629],{"class":192},[159,131193,131194],{"class":161,"line":251},[159,131195,590],{"emptyLinePlaceholder":589},[159,131197,131198],{"class":161,"line":261},[159,131199,122638],{"class":192},[159,131201,131202],{"class":161,"line":603},[159,131203,131204],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[159,131206,131207],{"class":161,"line":621},[159,131208,590],{"emptyLinePlaceholder":589},[159,131210,131211],{"class":161,"line":634},[159,131212,131213],{"class":192},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[159,131215,131216],{"class":161,"line":640},[159,131217,131218],{"class":192},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[159,131220,131221],{"class":161,"line":1075},[159,131222,131223],{"class":192},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[159,131225,131226],{"class":161,"line":1081},[159,131227,590],{"emptyLinePlaceholder":589},[159,131229,131230],{"class":161,"line":1091},[159,131231,131232],{"class":192},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[159,131234,131235],{"class":161,"line":1100},[159,131236,131237],{"class":192},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[159,131239,131240],{"class":161,"line":1123},[159,131241,131242],{"class":192},"        \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",[159,131244,131245],{"class":161,"line":1132},[159,131246,127738],{"class":192},[159,131248,131249],{"class":161,"line":1139},[159,131250,122667],{"class":192},[159,131252,131253],{"class":161,"line":1168},[159,131254,122672],{"class":192},[159,131256,131257],{"class":161,"line":1174},[159,131258,590],{"emptyLinePlaceholder":589},[159,131260,131261],{"class":161,"line":1180},[159,131262,127755],{"class":192},[159,131264,131265],{"class":161,"line":1194},[159,131266,131267],{"class":192},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[159,131269,131270],{"class":161,"line":1200},[159,131271,127765],{"class":192},[159,131273,131274],{"class":161,"line":1221},[159,131275,122677],{"class":192},[159,131277,131278],{"class":161,"line":1230},[159,131279,116998],{"class":192},[159,131281,131282],{"class":161,"line":1247},[159,131283,590],{"emptyLinePlaceholder":589},[159,131285,131286],{"class":161,"line":1265},[159,131287,590],{"emptyLinePlaceholder":589},[159,131289,131290,131292,131295],{"class":161,"line":1277},[159,131291,55465],{"class":1142},[159,131293,131294],{"class":185}," get_observation",[159,131296,131297],{"class":165},"(data: mujoco.MjData) -> np.ndarray:\n",[159,131299,131300,131302],{"class":161,"line":1283},[159,131301,27711],{"class":1142},[159,131303,131304],{"class":165}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[159,131306,131307],{"class":161,"line":1294},[159,131308,590],{"emptyLinePlaceholder":589},[159,131310,131311],{"class":161,"line":1305},[159,131312,590],{"emptyLinePlaceholder":589},[159,131314,131315,131317,131320,131323,131325],{"class":161,"line":1311},[159,131316,55465],{"class":1142},[159,131318,131319],{"class":185}," compute_reward",[159,131321,131322],{"class":165},"(obs: np.ndarray) -> ",[159,131324,23920],{"class":1146},[159,131326,27364],{"class":165},[159,131328,131329,131332,131334,131337,131339],{"class":161,"line":1322},[159,131330,131331],{"class":165},"    cart_x ",[159,131333,189],{"class":1142},[159,131335,131336],{"class":165}," obs[",[159,131338,1489],{"class":1146},[159,131340,4634],{"class":165},[159,131342,131343,131346,131348,131350,131352],{"class":161,"line":1327},[159,131344,131345],{"class":165},"    pole_angle ",[159,131347,189],{"class":1142},[159,131349,131336],{"class":165},[159,131351,4932],{"class":1146},[159,131353,4634],{"class":165},[159,131355,131356,131358,131360,131362,131364,131366,131368,131370,131372,131374,131376,131378,131380,131382],{"class":161,"line":1336},[159,131357,27711],{"class":1142},[159,131359,131097],{"class":1146},[159,131361,1159],{"class":165},[159,131363,123703],{"class":1146},[159,131365,21708],{"class":1142},[159,131367,131106],{"class":1146},[159,131369,30131],{"class":1142},[159,131371,131111],{"class":165},[159,131373,4777],{"class":1142},[159,131375,131111],{"class":165},[159,131377,24376],{"class":1142},[159,131379,131120],{"class":165},[159,131381,4777],{"class":1142},[159,131383,131125],{"class":165},[159,131385,131386],{"class":161,"line":1345},[159,131387,590],{"emptyLinePlaceholder":589},[159,131389,131390],{"class":161,"line":1350},[159,131391,590],{"emptyLinePlaceholder":589},[159,131393,131394,131396,131398,131400,131402],{"class":161,"line":1764},[159,131395,55465],{"class":1142},[159,131397,25625],{"class":185},[159,131399,122698],{"class":165},[159,131401,116986],{"class":1146},[159,131403,27364],{"class":165},[159,131405,131406,131408,131410,131412,131414],{"class":161,"line":1769},[159,131407,122707],{"class":165},[159,131409,189],{"class":1142},[159,131411,122712],{"class":165},[159,131413,122614],{"class":1146},[159,131415,1165],{"class":165},[159,131417,131418,131420,131422],{"class":161,"line":1777},[159,131419,122721],{"class":165},[159,131421,189],{"class":1142},[159,131423,122726],{"class":165},[159,131425,131426],{"class":161,"line":1788},[159,131427,590],{"emptyLinePlaceholder":589},[159,131429,131430,131432,131434,131436,131438],{"class":161,"line":1802},[159,131431,126369],{"class":165},[159,131433,4932],{"class":1146},[159,131435,28061],{"class":165},[159,131437,189],{"class":1142},[159,131439,131440],{"class":1146}," 0.1\n",[159,131442,131443],{"class":161,"line":1815},[159,131444,126382],{"class":165},[159,131446,131447],{"class":161,"line":1828},[159,131448,590],{"emptyLinePlaceholder":589},[159,131450,131451,131454,131456],{"class":161,"line":1841},[159,131452,131453],{"class":165},"    total_reward ",[159,131455,189],{"class":1142},[159,131457,126061],{"class":1146},[159,131459,131460],{"class":161,"line":1852},[159,131461,590],{"emptyLinePlaceholder":589},[159,131463,131464,131466,131468,131470,131472,131474,131476],{"class":161,"line":1866},[159,131465,11677],{"class":1142},[159,131467,55135],{"class":165},[159,131469,49566],{"class":1142},[159,131471,55961],{"class":1146},[159,131473,1159],{"class":165},[159,131475,1317],{"class":1146},[159,131477,54307],{"class":165},[159,131479,131480,131483,131485],{"class":161,"line":1879},[159,131481,131482],{"class":165},"        obs ",[159,131484,189],{"class":1142},[159,131486,131487],{"class":165}," get_observation(data)\n",[159,131489,131490,131493,131495,131497,131499],{"class":161,"line":1884},[159,131491,131492],{"class":165},"        pole_angle ",[159,131494,189],{"class":1142},[159,131496,131336],{"class":165},[159,131498,4932],{"class":1146},[159,131500,4634],{"class":165},[159,131502,131503,131506,131508,131510,131512],{"class":161,"line":1889},[159,131504,131505],{"class":165},"        pole_angular_velocity ",[159,131507,189],{"class":1142},[159,131509,131336],{"class":165},[159,131511,23949],{"class":1146},[159,131513,4634],{"class":165},[159,131515,131516],{"class":161,"line":1899},[159,131517,590],{"emptyLinePlaceholder":589},[159,131519,131520,131523,131525,131528,131530,131532,131534,131536,131538],{"class":161,"line":1912},[159,131521,131522],{"class":165},"        action ",[159,131524,189],{"class":1142},[159,131526,131527],{"class":1146}," 2.0",[159,131529,30131],{"class":1142},[159,131531,131120],{"class":165},[159,131533,2704],{"class":1142},[159,131535,8906],{"class":1146},[159,131537,30131],{"class":1142},[159,131539,131540],{"class":165}," pole_angular_velocity\n",[159,131542,131543,131545,131547,131549,131551,131553,131555,131557],{"class":161,"line":1925},[159,131544,131522],{"class":165},[159,131546,189],{"class":1142},[159,131548,128747],{"class":165},[159,131550,24376],{"class":1142},[159,131552,123703],{"class":1146},[159,131554,1939],{"class":165},[159,131556,123703],{"class":1146},[159,131558,1165],{"class":165},[159,131560,131561],{"class":161,"line":1956},[159,131562,590],{"emptyLinePlaceholder":589},[159,131564,131565,131567,131569,131571,131573],{"class":161,"line":1971},[159,131566,127917],{"class":165},[159,131568,1489],{"class":1146},[159,131570,28061],{"class":165},[159,131572,189],{"class":1142},[159,131574,128770],{"class":165},[159,131576,131577],{"class":161,"line":1976},[159,131578,122816],{"class":165},[159,131580,131581],{"class":161,"line":1981},[159,131582,590],{"emptyLinePlaceholder":589},[159,131584,131585,131588,131590],{"class":161,"line":1989},[159,131586,131587],{"class":165},"        reward ",[159,131589,189],{"class":1142},[159,131591,131592],{"class":165}," compute_reward(get_observation(data))\n",[159,131594,131595,131598,131600],{"class":161,"line":2001},[159,131596,131597],{"class":165},"        total_reward ",[159,131599,33073],{"class":1142},[159,131601,131602],{"class":165}," reward\n",[159,131604,131605],{"class":161,"line":2006},[159,131606,590],{"emptyLinePlaceholder":589},[159,131608,131609,131611,131613,131615,131617,131619,131621],{"class":161,"line":2015},[159,131610,17003],{"class":1142},[159,131612,55135],{"class":165},[159,131614,1662],{"class":1142},[159,131616,29369],{"class":1146},[159,131618,122859],{"class":1142},[159,131620,1259],{"class":1146},[159,131622,27364],{"class":165},[159,131624,131625,131627,131629,131632,131635,131638,131641,131643,131646,131649,131651,131653,131655,131657,131660,131662],{"class":161,"line":2024},[159,131626,58045],{"class":1146},[159,131628,1159],{"class":165},[159,131630,131631],{"class":192},"\"step:\"",[159,131633,131634],{"class":165},", step, ",[159,131636,131637],{"class":192},"\"obs:\"",[159,131639,131640],{"class":165},", np.round(obs, ",[159,131642,23949],{"class":1146},[159,131644,131645],{"class":165},"), ",[159,131647,131648],{"class":192},"\"action:\"",[159,131650,1939],{"class":165},[159,131652,55536],{"class":1146},[159,131654,1159],{"class":165},[159,131656,23920],{"class":1146},[159,131658,131659],{"class":165},"(action), ",[159,131661,23949],{"class":1146},[159,131663,18787],{"class":165},[159,131665,131666],{"class":161,"line":2029},[159,131667,590],{"emptyLinePlaceholder":589},[159,131669,131670,131672,131674,131677,131679,131681,131684,131686],{"class":161,"line":2038},[159,131671,54819],{"class":1146},[159,131673,1159],{"class":165},[159,131675,131676],{"class":192},"\"total_reward:\"",[159,131678,1939],{"class":165},[159,131680,55536],{"class":1146},[159,131682,131683],{"class":165},"(total_reward, ",[159,131685,23949],{"class":1146},[159,131687,18787],{"class":165},[159,131689,131690,131692,131694,131697,131700,131702],{"class":161,"line":2053},[159,131691,54819],{"class":1146},[159,131693,1159],{"class":165},[159,131695,131696],{"class":192},"\"final obs:\"",[159,131698,131699],{"class":165},", np.round(get_observation(data), ",[159,131701,23949],{"class":1146},[159,131703,18787],{"class":165},[159,131705,131706],{"class":161,"line":2070},[159,131707,590],{"emptyLinePlaceholder":589},[159,131709,131710],{"class":161,"line":2095},[159,131711,590],{"emptyLinePlaceholder":589},[159,131713,131714,131716,131718,131720,131722],{"class":161,"line":2104},[159,131715,18445],{"class":1142},[159,131717,54740],{"class":1146},[159,131719,122859],{"class":1142},[159,131721,122862],{"class":192},[159,131723,27364],{"class":165},[159,131725,131726],{"class":161,"line":2120},[159,131727,122869],{"class":165},[14,131729,124870],{},[151,131731,131733],{"className":47347,"code":131732,"language":47349,"meta":25,"style":25},"touch ch6_cartpole.py\n",[49,131734,131735],{"__ignoreMap":25},[159,131736,131737,131739],{"class":161,"line":162},[159,131738,122583],{"class":185},[159,131740,131741],{"class":192}," ch6_cartpole.py\n",[14,131743,131744],{},"运行：",[151,131746,131748],{"className":47347,"code":131747,"language":47349,"meta":25,"style":25},"python ch6_cartpole.py\n",[49,131749,131750],{"__ignoreMap":25},[159,131751,131752,131754],{"class":161,"line":162},[159,131753,53902],{"class":185},[159,131755,131741],{"class":192},[42,131757,122872],{"id":122872},[14,131759,131760],{},"构造观测：",[151,131762,131764],{"className":53900,"code":131763,"language":53902,"meta":25,"style":25},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[49,131765,131766,131774],{"__ignoreMap":25},[159,131767,131768,131770,131772],{"class":161,"line":162},[159,131769,55465],{"class":1142},[159,131771,131294],{"class":185},[159,131773,131297],{"class":165},[159,131775,131776,131778],{"class":161,"line":176},[159,131777,27711],{"class":1142},[159,131779,131304],{"class":165},[14,131781,131782,131785,131786,131788,131789,131791],{},[49,131783,131784],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[49,131787,125330],{}," 2 维，",[49,131790,125660],{}," 2 维，所以 obs 是 4 维。",[14,131793,131794],{},"设置初始角度：",[151,131796,131798],{"className":53900,"code":131797,"language":53902,"meta":25,"style":25},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[49,131799,131800,131812],{"__ignoreMap":25},[159,131801,131802,131804,131806,131808,131810],{"class":161,"line":162},[159,131803,125999],{"class":165},[159,131805,4932],{"class":1146},[159,131807,28061],{"class":165},[159,131809,189],{"class":1142},[159,131811,131440],{"class":1146},[159,131813,131814],{"class":161,"line":176},[159,131815,125843],{"class":165},[14,131817,131818],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,131820,131821],{},"简单反馈控制：",[151,131823,131825],{"className":53900,"code":131824,"language":53902,"meta":25,"style":25},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[49,131826,131827,131847],{"__ignoreMap":25},[159,131828,131829,131831,131833,131835,131837,131839,131841,131843,131845],{"class":161,"line":162},[159,131830,128742],{"class":165},[159,131832,189],{"class":1142},[159,131834,131527],{"class":1146},[159,131836,30131],{"class":1142},[159,131838,131120],{"class":165},[159,131840,2704],{"class":1142},[159,131842,8906],{"class":1146},[159,131844,30131],{"class":1142},[159,131846,131540],{"class":165},[159,131848,131849,131851,131853,131855,131857,131859,131861,131863],{"class":161,"line":176},[159,131850,128742],{"class":165},[159,131852,189],{"class":1142},[159,131854,128747],{"class":165},[159,131856,24376],{"class":1142},[159,131858,123703],{"class":1146},[159,131860,1939],{"class":165},[159,131862,123703],{"class":1146},[159,131864,1165],{"class":165},[14,131866,131867],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,131869,131870],{},"限制动作：",[151,131872,131874],{"className":53900,"code":131873,"language":53902,"meta":25,"style":25},"np.clip(action, -1.0, 1.0)\n",[49,131875,131876],{"__ignoreMap":25},[159,131877,131878,131881,131883,131885,131887,131889],{"class":161,"line":162},[159,131879,131880],{"class":165},"np.clip(action, ",[159,131882,24376],{"class":1142},[159,131884,123703],{"class":1146},[159,131886,1939],{"class":165},[159,131888,123703],{"class":1146},[159,131890,1165],{"class":165},[14,131892,131893,131894,131897],{},"因为 XML 里 ",[49,131895,131896],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[42,131899,123008],{"id":123008},[151,131901,131902],{"className":53900,"code":131763,"language":53902,"meta":25,"style":25},[49,131903,131904,131912],{"__ignoreMap":25},[159,131905,131906,131908,131910],{"class":161,"line":162},[159,131907,55465],{"class":1142},[159,131909,131294],{"class":185},[159,131911,131297],{"class":165},[159,131913,131914,131916],{"class":161,"line":176},[159,131915,27711],{"class":1142},[159,131917,131304],{"class":165},[14,131919,131920,131921,131924,131925,131928,131929,131932],{},"这段定义了一个函数，用来获取当前观测。",[49,131922,131923],{},"data.qpos.copy()"," 是位置数组副本，",[49,131926,131927],{},"data.qvel.copy()"," 是速度数组副本。",[49,131930,131931],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,131934,131935],{},"在本章模型里：",[151,131937,131940],{"className":131938,"code":131939,"language":8507,"meta":25},[28803],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[49,131941,131939],{"__ignoreMap":25},[14,131943,131944],{},"所以返回的 obs 是：",[151,131946,131949],{"className":131947,"code":131948,"language":8507,"meta":25},[28803],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[49,131950,131948],{"__ignoreMap":25},[151,131952,131954],{"className":53900,"code":131953,"language":53902,"meta":25,"style":25},"def compute_reward(obs: np.ndarray) -> float:\n",[49,131955,131956],{"__ignoreMap":25},[159,131957,131958,131960,131962,131964,131966],{"class":161,"line":162},[159,131959,55465],{"class":1142},[159,131961,131319],{"class":185},[159,131963,131322],{"class":165},[159,131965,23920],{"class":1146},[159,131967,27364],{"class":165},[14,131969,131970,131971,131974],{},"这行定义奖励函数。输入是观测 ",[49,131972,131973],{},"obs","，输出是一个浮点数奖励。",[151,131976,131978],{"className":53900,"code":131977,"language":53902,"meta":25,"style":25},"cart_x = obs[0]\npole_angle = obs[1]\n",[49,131979,131980,131993],{"__ignoreMap":25},[159,131981,131982,131985,131987,131989,131991],{"class":161,"line":162},[159,131983,131984],{"class":165},"cart_x ",[159,131986,189],{"class":1142},[159,131988,131336],{"class":165},[159,131990,1489],{"class":1146},[159,131992,4634],{"class":165},[159,131994,131995,131998,132000,132002,132004],{"class":161,"line":176},[159,131996,131997],{"class":165},"pole_angle ",[159,131999,189],{"class":1142},[159,132001,131336],{"class":165},[159,132003,4932],{"class":1146},[159,132005,4634],{"class":165},[14,132007,132008,132009,132012,132013,132016],{},"数组索引从 0 开始。",[49,132010,132011],{},"obs[0]"," 是第一个元素，也就是小车位置。",[49,132014,132015],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[151,132018,132019],{"className":53900,"code":131088,"language":53902,"meta":25,"style":25},[49,132020,132021],{"__ignoreMap":25},[159,132022,132023,132025,132027,132029,132031,132033,132035,132037,132039,132041,132043,132045,132047,132049],{"class":161,"line":162},[159,132024,40574],{"class":1142},[159,132026,131097],{"class":1146},[159,132028,1159],{"class":165},[159,132030,123703],{"class":1146},[159,132032,21708],{"class":1142},[159,132034,131106],{"class":1146},[159,132036,30131],{"class":1142},[159,132038,131111],{"class":165},[159,132040,4777],{"class":1142},[159,132042,131111],{"class":165},[159,132044,24376],{"class":1142},[159,132046,131120],{"class":165},[159,132048,4777],{"class":1142},[159,132050,131125],{"class":165},[14,132052,132053,132054,132057,132058,132061],{},"这行计算奖励。",[49,132055,132056],{},"cart_x * cart_x"," 是小车位置的平方，",[49,132059,132060],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[151,132063,132065],{"className":53900,"code":132064,"language":53902,"meta":25,"style":25},"data.qpos[1] = 0.1\n",[49,132066,132067],{"__ignoreMap":25},[159,132068,132069,132071,132073,132075,132077],{"class":161,"line":162},[159,132070,125999],{"class":165},[159,132072,4932],{"class":1146},[159,132074,28061],{"class":165},[159,132076,189],{"class":1142},[159,132078,131440],{"class":1146},[14,132080,132081,132082,132084,132085,132087],{},"手动设置杆子的初始角度。因为 ",[49,132083,126756],{}," 是小车位置，",[49,132086,126759],{}," 是杆子角度，所以这里改的是杆子。",[151,132089,132090],{"className":53900,"code":125843,"language":53902,"meta":25,"style":25},[49,132091,132092],{"__ignoreMap":25},[159,132093,132094],{"class":161,"line":162},[159,132095,125843],{"class":165},[14,132097,126802,132098,132100],{},[49,132099,125330],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[151,132102,132104],{"className":53900,"code":132103,"language":53902,"meta":25,"style":25},"total_reward = 0.0\n",[49,132105,132106],{"__ignoreMap":25},[159,132107,132108,132111,132113],{"class":161,"line":162},[159,132109,132110],{"class":165},"total_reward ",[159,132112,189],{"class":1142},[159,132114,126061],{"class":1146},[14,132116,132117],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[151,132119,132121],{"className":53900,"code":132120,"language":53902,"meta":25,"style":25},"for step in range(1000):\n",[49,132122,132123],{"__ignoreMap":25},[159,132124,132125,132127,132129,132131,132133,132135,132137],{"class":161,"line":162},[159,132126,26657],{"class":1142},[159,132128,55135],{"class":165},[159,132130,49566],{"class":1142},[159,132132,55961],{"class":1146},[159,132134,1159],{"class":165},[159,132136,1317],{"class":1146},[159,132138,54307],{"class":165},[14,132140,132141,132142,132144],{},"循环 1000 步。",[49,132143,128434],{}," 是当前步数，从 0 到 999。",[151,132146,132148],{"className":53900,"code":132147,"language":53902,"meta":25,"style":25},"obs = get_observation(data)\n",[49,132149,132150],{"__ignoreMap":25},[159,132151,132152,132155,132157],{"class":161,"line":162},[159,132153,132154],{"class":165},"obs ",[159,132156,189],{"class":1142},[159,132158,131487],{"class":165},[14,132160,132161,132162,51907],{},"读取当前状态，保存到 ",[49,132163,131973],{},[151,132165,132167],{"className":53900,"code":132166,"language":53902,"meta":25,"style":25},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[49,132168,132169,132181],{"__ignoreMap":25},[159,132170,132171,132173,132175,132177,132179],{"class":161,"line":162},[159,132172,131997],{"class":165},[159,132174,189],{"class":1142},[159,132176,131336],{"class":165},[159,132178,4932],{"class":1146},[159,132180,4634],{"class":165},[159,132182,132183,132186,132188,132190,132192],{"class":161,"line":176},[159,132184,132185],{"class":165},"pole_angular_velocity ",[159,132187,189],{"class":1142},[159,132189,131336],{"class":165},[159,132191,23949],{"class":1146},[159,132193,4634],{"class":165},[14,132195,132196,132197,132200,132201,51907],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[49,132198,132199],{},"obs[3]","？因为 obs 的顺序是 ",[49,132202,132203],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[151,132205,132207],{"className":53900,"code":132206,"language":53902,"meta":25,"style":25},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[49,132208,132209],{"__ignoreMap":25},[159,132210,132211,132213,132215,132217,132219,132221,132223,132225,132227],{"class":161,"line":162},[159,132212,128742],{"class":165},[159,132214,189],{"class":1142},[159,132216,131527],{"class":1146},[159,132218,30131],{"class":1142},[159,132220,131120],{"class":165},[159,132222,2704],{"class":1142},[159,132224,8906],{"class":1146},[159,132226,30131],{"class":1142},[159,132228,131540],{"class":165},[14,132230,132231,132232,122318,132234,132236],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[49,132233,126560],{},[49,132235,58724],{}," 是人为设置的系数，不是固定公式。",[151,132238,132240],{"className":53900,"code":132239,"language":53902,"meta":25,"style":25},"action = np.clip(action, -1.0, 1.0)\n",[49,132241,132242],{"__ignoreMap":25},[159,132243,132244,132246,132248,132250,132252,132254,132256,132258],{"class":161,"line":162},[159,132245,128742],{"class":165},[159,132247,189],{"class":1142},[159,132249,128747],{"class":165},[159,132251,24376],{"class":1142},[159,132253,123703],{"class":1146},[159,132255,1939],{"class":165},[159,132257,123703],{"class":1146},[159,132259,1165],{"class":165},[14,132261,132262],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[151,132264,132265],{"className":53900,"code":131073,"language":53902,"meta":25,"style":25},[49,132266,132267],{"__ignoreMap":25},[159,132268,132269,132271,132273,132275,132277],{"class":161,"line":162},[159,132270,127171],{"class":165},[159,132272,1489],{"class":1146},[159,132274,28061],{"class":165},[159,132276,189],{"class":1142},[159,132278,128770],{"class":165},[14,132280,132281],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[151,132283,132284],{"className":53900,"code":125805,"language":53902,"meta":25,"style":25},[49,132285,132286],{"__ignoreMap":25},[159,132287,132288],{"class":161,"line":162},[159,132289,125805],{"class":165},[14,132291,132292,132293,132295],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[49,132294,127426],{}," 计算小车和杆子的下一刻状态。",[151,132297,132299],{"className":53900,"code":132298,"language":53902,"meta":25,"style":25},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[49,132300,132301,132310],{"__ignoreMap":25},[159,132302,132303,132306,132308],{"class":161,"line":162},[159,132304,132305],{"class":165},"reward ",[159,132307,189],{"class":1142},[159,132309,131592],{"class":165},[159,132311,132312,132314,132316],{"class":161,"line":176},[159,132313,132110],{"class":165},[159,132315,33073],{"class":1142},[159,132317,131602],{"class":165},[14,132319,132320,132321,132323,132324,132327,132328,51907],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[49,132322,33073],{}," 是简写，",[49,132325,132326],{},"total_reward += reward"," 等价于 ",[49,132329,132330],{},"total_reward = total_reward + reward",[151,132332,132334],{"className":53900,"code":132333,"language":53902,"meta":25,"style":25},"if step % 100 == 0:\n",[49,132335,132336],{"__ignoreMap":25},[159,132337,132338,132340,132342,132344,132346,132348,132350],{"class":161,"line":162},[159,132339,18445],{"class":1142},[159,132341,55135],{"class":165},[159,132343,1662],{"class":1142},[159,132345,29369],{"class":1146},[159,132347,122859],{"class":1142},[159,132349,1259],{"class":1146},[159,132351,27364],{"class":165},[14,132353,132354,132356,132357,132360],{},[49,132355,1662],{}," 是取余数。",[49,132358,132359],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[151,132362,132364],{"className":53900,"code":132363,"language":53902,"meta":25,"style":25},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[49,132365,132366],{"__ignoreMap":25},[159,132367,132368,132370,132372,132374,132376,132378,132380,132382,132384,132386,132388,132390,132392,132394,132396,132398],{"class":161,"line":162},[159,132369,53937],{"class":1146},[159,132371,1159],{"class":165},[159,132373,131631],{"class":192},[159,132375,131634],{"class":165},[159,132377,131637],{"class":192},[159,132379,131640],{"class":165},[159,132381,23949],{"class":1146},[159,132383,131645],{"class":165},[159,132385,131648],{"class":192},[159,132387,1939],{"class":165},[159,132389,55536],{"class":1146},[159,132391,1159],{"class":165},[159,132393,23920],{"class":1146},[159,132395,131659],{"class":165},[159,132397,23949],{"class":1146},[159,132399,18787],{"class":165},[14,132401,132402,132403,132406,132407,132410],{},"打印当前步数、观测和动作。",[49,132404,132405],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[49,132408,132409],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[37,132412,123616],{"id":123615},[14,132414,132415],{},"观测向量:",[151,132417,132420],{"className":132418,"code":132419,"language":8507,"meta":25},[28803],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[49,132421,132419],{"__ignoreMap":25},[14,132423,132424],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,132426,132427],{},"每隔 100 步会打印一次：",[151,132429,132432],{"className":132430,"code":132431,"language":8507,"meta":25},[28803],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[49,132433,132431],{"__ignoreMap":25},[14,132435,132436],{},"重点观察：",[134,132438,132439,132445,132450],{},[106,132440,132441,132444],{},[49,132442,132443],{},"pole_angle"," 是否越来越大。",[106,132446,132447,132449],{},[49,132448,131026],{}," 是否跑得太远。",[106,132451,132452,132453,103839,132455,51907],{},"action 是否经常被 clip 到 ",[49,132454,125215],{},[49,132456,4932],{},[14,132458,132459],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[37,132461,123648],{"id":123647},[134,132463,132464,132470,132473,132479,132489,132495,132498],{},[106,132465,132466,132467,51907],{},"把初始角度改为 ",[49,132468,132469],{},"data.qpos[1] = 0.3",[106,132471,132472],{},"重新运行，观察控制是否变差。",[106,132474,132475,132476,132478],{},"把 actuator ",[49,132477,128367],{}," 改小。",[106,132480,132481,132482,132485,132486,51907],{},"打印 ",[49,132483,132484],{},"model.nq, model.nv, model.nu","，应为 ",[49,132487,132488],{},"2 2 1",[106,132490,132491,132492,132494],{},"把 reward 里的 ",[49,132493,132060],{}," 系数改大，观察总奖励变化。",[106,132496,132497],{},"把控制器改成反号，观察杆子是否更容易倒。",[106,132499,132500],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[37,132502,123753],{"id":123752},[42,132504,132505],{"id":132505},"杆子方向和预期不一致",[14,132507,123696,132508,132510,132511,132513],{},[49,132509,127539],{}," 和 capsule 的 ",[49,132512,124476],{},"，必要时用 viewer 可视化确认。",[42,132515,132516],{"id":132516},"控制器越控越倒",[14,132518,132519],{},"说明反馈符号可能反了，尝试:",[151,132521,132523],{"className":53900,"code":132522,"language":53902,"meta":25,"style":25},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[49,132524,132525],{"__ignoreMap":25},[159,132526,132527,132529,132531,132533,132535,132537,132539,132541,132543,132545],{"class":161,"line":162},[159,132528,128742],{"class":165},[159,132530,189],{"class":1142},[159,132532,21708],{"class":1142},[159,132534,126560],{"class":1146},[159,132536,30131],{"class":1142},[159,132538,131120],{"class":165},[159,132540,24376],{"class":1142},[159,132542,8906],{"class":1146},[159,132544,30131],{"class":1142},[159,132546,131540],{"class":165},[42,132548,132549],{"id":132549},"小车飞走",[14,132551,132552,132553,132555,132556,132559],{},"降低 ",[49,132554,128367],{}," 或缩小 ",[49,132557,132558],{},"action"," 的 clip 范围。",[42,132561,132563,132565],{"id":132562},"obs3-为什么是杆子角速度",[49,132564,132199],{}," 为什么是杆子角速度",[14,132567,132568],{},"因为这个模型里：",[151,132570,132573],{"className":132571,"code":132572,"language":8507,"meta":25},[28803],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[49,132574,132572],{"__ignoreMap":25},[14,132576,131047],{},[151,132578,132581],{"className":132579,"code":132580,"language":8507,"meta":25},[28803],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[49,132582,132580],{"__ignoreMap":25},[42,132584,132586],{"id":132585},"reward-变成负数是否错误","reward 变成负数是否错误",[14,132588,132589],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[37,132591,123907],{"id":123906},[14,132593,132594],{},"一个控制任务通常包含：",[134,132596,132597,132600,132608,132613,132616],{},[106,132598,132599],{},"模型：Cartpole 的 body、joint、actuator。",[106,132601,132602,132603,24079,132605,132607],{},"观测：从 ",[49,132604,125330],{},[49,132606,125660],{}," 里取状态。",[106,132609,132610,132611,51907],{},"动作：写入 ",[49,132612,122376],{},[106,132614,132615],{},"奖励：根据任务目标打分。",[106,132617,132618],{},"循环：obs -> action -> step -> reward。",[14,132620,132621],{},"这就是后面 Gymnasium 环境的基本骨架。",[1468,132623,125586],{},{"title":25,"searchDepth":176,"depth":176,"links":132625},[132626,132627,132628,132633,132637,132638,132639,132647],{"id":121946,"depth":176,"text":121947},{"id":122069,"depth":176,"text":122070},{"id":122344,"depth":176,"text":122345,"children":132629},[132630,132631,132632],{"id":131000,"depth":203,"text":131001},{"id":131065,"depth":203,"text":131066},{"id":131081,"depth":203,"text":131082},{"id":122552,"depth":176,"text":122553,"children":132634},[132635,132636],{"id":122872,"depth":203,"text":122872},{"id":123008,"depth":203,"text":123008},{"id":123615,"depth":176,"text":123616},{"id":123647,"depth":176,"text":123648},{"id":123752,"depth":176,"text":123753,"children":132640},[132641,132642,132643,132644,132646],{"id":132505,"depth":203,"text":132505},{"id":132516,"depth":203,"text":132516},{"id":132549,"depth":203,"text":132549},{"id":132562,"depth":203,"text":132645},"obs[3] 为什么是杆子角速度",{"id":132585,"depth":203,"text":132586},{"id":123906,"depth":176,"text":123907},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":130736,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":132654,"title":132655,"body":132656,"description":25,"extension":23810,"meta":134670,"navigation":589,"path":134671,"seo":134672,"stem":134673,"__hash__":134674},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":132657,"toc":134646},[132658,132661,132663,132666,132668,132685,132688,132691,132697,132700,132702,132704,132728,132730,132744,132746,132787,132789,132807,132809,132812,132818,132821,132849,132853,132859,132884,132887,132918,132925,132928,132931,132937,132940,132946,132949,132955,132959,132962,132987,132990,132992,133752,133754,133766,133768,133779,133781,133784,133801,133804,133806,133817,133820,133822,133868,133871,133884,133887,133969,133972,133974,133990,134000,134013,134016,134055,134065,134076,134086,134099,134102,134131,134134,134144,134147,134153,134170,134181,134183,134189,134206,134217,134238,134241,134253,134256,134277,134280,134288,134296,134313,134316,134385,134392,134400,134403,134416,134423,134425,134428,134434,134437,134440,134446,134452,134454,134494,134496,134502,134511,134514,134516,134536,134539,134542,134548,134552,134554,134581,134584,134587,134614,134620,134623,134626,134628,134631,134634,134640,134643],[10,132659,132655],{"id":132660},"_7控制任务reacher-机械臂到达目标",[37,132662,121947],{"id":121946},[14,132664,132665],{},"本章搭建一个二维两关节 reacher 任务。",[14,132667,125631],{},[134,132669,132670,132673,132676,132679,132682],{},[106,132671,132672],{},"两个 hinge joint",[106,132674,132675],{},"两个 motor actuator",[106,132677,132678],{},"site 作为末端点和目标点",[106,132680,132681],{},"根据末端和目标距离设计 reward",[106,132683,132684],{},"构造机械臂任务的基本形式",[14,132686,132687],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,132689,132690],{},"Reacher 任务可以理解为：",[151,132692,132695],{"className":132693,"code":132694,"language":8507,"meta":25},[28803],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[49,132696,132694],{"__ignoreMap":25},[14,132698,132699],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[37,132701,122070],{"id":122069},[14,132703,122073],{},[151,132705,132706],{"className":47347,"code":125688,"language":47349,"meta":25,"style":25},[49,132707,132708],{"__ignoreMap":25},[159,132709,132710,132712,132714,132716,132718,132720,132722,132724,132726],{"class":161,"line":162},[159,132711,48101],{"class":185},[159,132713,49838],{"class":192},[159,132715,47359],{"class":192},[159,132717,49923],{"class":1146},[159,132719,125703],{"class":192},[159,132721,122098],{"class":192},[159,132723,123801],{"class":192},[159,132725,122114],{"class":192},[159,132727,125712],{"class":192},[14,132729,124119],{},[151,132731,132732],{"className":47347,"code":122219,"language":47349,"meta":25,"style":25},[49,132733,132734],{"__ignoreMap":25},[159,132735,132736,132738,132740,132742],{"class":161,"line":162},[159,132737,47356],{"class":185},[159,132739,47359],{"class":192},[159,132741,122230],{"class":192},[159,132743,122233],{"class":192},[14,132745,124136],{},[151,132747,132749],{"className":47347,"code":132748,"language":47349,"meta":25,"style":25},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[49,132750,132751,132768,132777],{"__ignoreMap":25},[159,132752,132753,132755,132757,132759,132762,132764,132766],{"class":161,"line":162},[159,132754,53852],{"class":185},[159,132756,52698],{"class":192},[159,132758,48639],{"class":1146},[159,132760,132761],{"class":192}," mujoco-reacher",[159,132763,122275],{"class":192},[159,132765,122278],{"class":1146},[159,132767,122281],{"class":1146},[159,132769,132770,132772,132774],{"class":161,"line":176},[159,132771,53852],{"class":185},[159,132773,122288],{"class":192},[159,132775,132776],{"class":192}," mujoco-reacher\n",[159,132778,132779,132781,132783,132785],{"class":161,"line":203},[159,132780,47356],{"class":185},[159,132782,47359],{"class":192},[159,132784,122230],{"class":192},[159,132786,122233],{"class":192},[14,132788,122304],{},[134,132790,132791,132794,132797],{},[106,132792,132793],{},"本章使用低维状态，不使用图像输入。",[106,132795,132796],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[106,132798,132799,132800,24079,132802,24079,132804,132806],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[49,132801,125330],{},[49,132803,125660],{},[49,132805,124980],{}," 的方法一致。",[37,132808,122345],{"id":122344},[14,132810,132811],{},"Reacher 任务核心:",[151,132813,132816],{"className":132814,"code":132815,"language":8507,"meta":25},[28803],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[49,132817,132815],{"__ignoreMap":25},[14,132819,132820],{},"读取 site 世界坐标:",[151,132822,132824],{"className":53900,"code":132823,"language":53902,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[49,132825,132826,132839],{"__ignoreMap":25},[159,132827,132828,132830,132832,132834,132837],{"class":161,"line":162},[159,132829,124934],{"class":165},[159,132831,189],{"class":1142},[159,132833,124705],{"class":165},[159,132835,132836],{"class":192},"\"tip\"",[159,132838,1165],{"class":165},[159,132840,132841,132844,132846],{"class":161,"line":176},[159,132842,132843],{"class":165},"tip_pos ",[159,132845,189],{"class":1142},[159,132847,132848],{"class":165}," data.site_xpos[site_id]\n",[42,132850,132852],{"id":132851},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,132854,132855,132856,132858],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[49,132857,125330],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[151,132860,132862],{"className":53900,"code":132861,"language":53902,"meta":25,"style":25},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[49,132863,132864,132874],{"__ignoreMap":25},[159,132865,132866,132869,132871],{"class":161,"line":162},[159,132867,132868],{"class":165},"tip ",[159,132870,189],{"class":1142},[159,132872,132873],{"class":165}," data.site_xpos[tip_site_id]\n",[159,132875,132876,132879,132881],{"class":161,"line":176},[159,132877,132878],{"class":165},"target ",[159,132880,189],{"class":1142},[159,132882,132883],{"class":165}," data.site_xpos[target_site_id]\n",[14,132885,132886],{},"这样 reward 就很容易写：",[151,132888,132890],{"className":53900,"code":132889,"language":53902,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[49,132891,132892,132907],{"__ignoreMap":25},[159,132893,132894,132897,132899,132902,132904],{"class":161,"line":162},[159,132895,132896],{"class":165},"dist ",[159,132898,189],{"class":1142},[159,132900,132901],{"class":165}," np.linalg.norm(tip ",[159,132903,24376],{"class":1142},[159,132905,132906],{"class":165}," target)\n",[159,132908,132909,132911,132913,132915],{"class":161,"line":176},[159,132910,132305],{"class":165},[159,132912,189],{"class":1142},[159,132914,21708],{"class":1142},[159,132916,132917],{"class":165},"dist\n",[14,132919,132920,132921,132924],{},"距离越小，",[49,132922,132923],{},"-dist"," 越接近 0，奖励越高。",[42,132926,132927],{"id":132927},"两关节机械臂的状态",[14,132929,132930],{},"这个模型有两个 hinge joint：",[151,132932,132935],{"className":132933,"code":132934,"language":8507,"meta":25},[28803],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[49,132936,132934],{"__ignoreMap":25},[14,132938,132939],{},"再加上末端和目标位置：",[151,132941,132944],{"className":132942,"code":132943,"language":8507,"meta":25},[28803],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[49,132945,132943],{"__ignoreMap":25},[14,132947,132948],{},"总维度：",[151,132950,132953],{"className":132951,"code":132952,"language":8507,"meta":25},[28803],"2 + 2 + 3 + 3 = 10\n",[49,132954,132952],{"__ignoreMap":25},[42,132956,132958],{"id":132957},"为什么-gravity-是-0","为什么 gravity 是 0",[14,132960,132961],{},"本章把重力设为：",[151,132963,132965],{"className":153,"code":132964,"language":155,"meta":25,"style":25},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[49,132966,132967],{"__ignoreMap":25},[159,132968,132969,132971,132973,132975,132977,132979,132981,132983,132985],{"class":161,"line":162},[159,132970,166],{"class":165},[159,132972,16240],{"class":169},[159,132974,122494],{"class":185},[159,132976,189],{"class":165},[159,132978,122499],{"class":192},[159,132980,122502],{"class":185},[159,132982,189],{"class":165},[159,132984,125071],{"class":192},[159,132986,122444],{"class":165},[14,132988,132989],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[37,132991,122553],{"id":122552},[151,132993,132995],{"className":53900,"code":132994,"language":53902,"meta":25,"style":25},"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",[49,132996,132997,133003,133013,133017,133021,133029,133034,133039,133043,133047,133052,133057,133061,133066,133071,133076,133080,133085,133090,133095,133100,133104,133108,133112,133116,133120,133125,133130,133134,133138,133142,133146,133150,133165,133174,133186,133209,133216,133220,133224,133234,133248,133262,133269,133273,133277,133291,133303,133315,133328,133343,133360,133364,133368,133380,133392,133400,133408,133412,133428,133433,133446,133459,133474,133478,133513,133545,133549,133553,133562,133566,133582,133592,133603,133619,133635,133651,133667,133671,133689,133709,133728,133732,133736,133748],{"__ignoreMap":25},[159,132998,132999,133001],{"class":161,"line":162},[159,133000,53914],{"class":1142},[159,133002,122601],{"class":165},[159,133004,133005,133007,133009,133011],{"class":161,"line":176},[159,133006,53914],{"class":1142},[159,133008,54900],{"class":165},[159,133010,54903],{"class":1142},[159,133012,54906],{"class":165},[159,133014,133015],{"class":161,"line":203},[159,133016,590],{"emptyLinePlaceholder":589},[159,133018,133019],{"class":161,"line":223},[159,133020,590],{"emptyLinePlaceholder":589},[159,133022,133023,133025,133027],{"class":161,"line":233},[159,133024,122614],{"class":1146},[159,133026,1150],{"class":1142},[159,133028,122619],{"class":192},[159,133030,133031],{"class":161,"line":239},[159,133032,133033],{"class":192},"\u003Cmujoco model=\"two_link_reacher\">\n",[159,133035,133036],{"class":161,"line":245},[159,133037,133038],{"class":192},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[159,133040,133041],{"class":161,"line":251},[159,133042,590],{"emptyLinePlaceholder":589},[159,133044,133045],{"class":161,"line":261},[159,133046,122638],{"class":192},[159,133048,133049],{"class":161,"line":603},[159,133050,133051],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[159,133053,133054],{"class":161,"line":621},[159,133055,133056],{"class":192},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[159,133058,133059],{"class":161,"line":634},[159,133060,590],{"emptyLinePlaceholder":589},[159,133062,133063],{"class":161,"line":640},[159,133064,133065],{"class":192},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[159,133067,133068],{"class":161,"line":1075},[159,133069,133070],{"class":192},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[159,133072,133073],{"class":161,"line":1081},[159,133074,133075],{"class":192},"      \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",[159,133077,133078],{"class":161,"line":1091},[159,133079,590],{"emptyLinePlaceholder":589},[159,133081,133082],{"class":161,"line":1100},[159,133083,133084],{"class":192},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[159,133086,133087],{"class":161,"line":1123},[159,133088,133089],{"class":192},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[159,133091,133092],{"class":161,"line":1132},[159,133093,133094],{"class":192},"        \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",[159,133096,133097],{"class":161,"line":1139},[159,133098,133099],{"class":192},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[159,133101,133102],{"class":161,"line":1168},[159,133103,127738],{"class":192},[159,133105,133106],{"class":161,"line":1174},[159,133107,122667],{"class":192},[159,133109,133110],{"class":161,"line":1180},[159,133111,122672],{"class":192},[159,133113,133114],{"class":161,"line":1194},[159,133115,590],{"emptyLinePlaceholder":589},[159,133117,133118],{"class":161,"line":1200},[159,133119,127755],{"class":192},[159,133121,133122],{"class":161,"line":1221},[159,133123,133124],{"class":192},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[159,133126,133127],{"class":161,"line":1230},[159,133128,133129],{"class":192},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[159,133131,133132],{"class":161,"line":1247},[159,133133,127765],{"class":192},[159,133135,133136],{"class":161,"line":1265},[159,133137,122677],{"class":192},[159,133139,133140],{"class":161,"line":1277},[159,133141,116998],{"class":192},[159,133143,133144],{"class":161,"line":1283},[159,133145,590],{"emptyLinePlaceholder":589},[159,133147,133148],{"class":161,"line":1294},[159,133149,590],{"emptyLinePlaceholder":589},[159,133151,133152,133154,133157,133160,133162],{"class":161,"line":1305},[159,133153,55465],{"class":1142},[159,133155,133156],{"class":185}," site_position",[159,133158,133159],{"class":165},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[159,133161,24983],{"class":1146},[159,133163,133164],{"class":165},") -> np.ndarray:\n",[159,133166,133167,133169,133171],{"class":161,"line":1311},[159,133168,124700],{"class":165},[159,133170,189],{"class":1142},[159,133172,133173],{"class":165}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[159,133175,133176,133178,133180,133182,133184],{"class":161,"line":1322},[159,133177,26732],{"class":1142},[159,133179,124749],{"class":165},[159,133181,166],{"class":1142},[159,133183,1259],{"class":1146},[159,133185,27364],{"class":165},[159,133187,133188,133190,133192,133194,133196,133199,133201,133203,133205,133207],{"class":161,"line":1327},[159,133189,124732],{"class":1142},[159,133191,124735],{"class":1146},[159,133193,1159],{"class":165},[159,133195,23931],{"class":1142},[159,133197,133198],{"class":192},"\"site not found: ",[159,133200,24721],{"class":1146},[159,133202,101110],{"class":165},[159,133204,886],{"class":1146},[159,133206,24115],{"class":192},[159,133208,1165],{"class":165},[159,133210,133211,133213],{"class":161,"line":1336},[159,133212,27711],{"class":1142},[159,133214,133215],{"class":165}," data.site_xpos[site_id].copy()\n",[159,133217,133218],{"class":161,"line":1345},[159,133219,590],{"emptyLinePlaceholder":589},[159,133221,133222],{"class":161,"line":1350},[159,133223,590],{"emptyLinePlaceholder":589},[159,133225,133226,133228,133231],{"class":161,"line":1764},[159,133227,55465],{"class":1142},[159,133229,133230],{"class":185}," get_obs",[159,133232,133233],{"class":165},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[159,133235,133236,133239,133241,133244,133246],{"class":161,"line":1769},[159,133237,133238],{"class":165},"    tip ",[159,133240,189],{"class":1142},[159,133242,133243],{"class":165}," site_position(model, data, ",[159,133245,132836],{"class":192},[159,133247,1165],{"class":165},[159,133249,133250,133253,133255,133257,133260],{"class":161,"line":1777},[159,133251,133252],{"class":165},"    target ",[159,133254,189],{"class":1142},[159,133256,133243],{"class":165},[159,133258,133259],{"class":192},"\"target\"",[159,133261,1165],{"class":165},[159,133263,133264,133266],{"class":161,"line":1788},[159,133265,27711],{"class":1142},[159,133267,133268],{"class":165}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[159,133270,133271],{"class":161,"line":1802},[159,133272,590],{"emptyLinePlaceholder":589},[159,133274,133275],{"class":161,"line":1815},[159,133276,590],{"emptyLinePlaceholder":589},[159,133278,133279,133281,133284,133287,133289],{"class":161,"line":1828},[159,133280,55465],{"class":1142},[159,133282,133283],{"class":185}," reward",[159,133285,133286],{"class":165},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[159,133288,23920],{"class":1146},[159,133290,27364],{"class":165},[159,133292,133293,133295,133297,133299,133301],{"class":161,"line":1841},[159,133294,133238],{"class":165},[159,133296,189],{"class":1142},[159,133298,133243],{"class":165},[159,133300,132836],{"class":192},[159,133302,1165],{"class":165},[159,133304,133305,133307,133309,133311,133313],{"class":161,"line":1852},[159,133306,133252],{"class":165},[159,133308,189],{"class":1142},[159,133310,133243],{"class":165},[159,133312,133259],{"class":192},[159,133314,1165],{"class":165},[159,133316,133317,133320,133322,133324,133326],{"class":161,"line":1866},[159,133318,133319],{"class":165},"    dist ",[159,133321,189],{"class":1142},[159,133323,132901],{"class":165},[159,133325,24376],{"class":1142},[159,133327,132906],{"class":165},[159,133329,133330,133333,133335,133338,133340],{"class":161,"line":1879},[159,133331,133332],{"class":165},"    control_cost ",[159,133334,189],{"class":1142},[159,133336,133337],{"class":1146}," 0.01",[159,133339,30131],{"class":1142},[159,133341,133342],{"class":165}," np.sum(np.square(data.ctrl))\n",[159,133344,133345,133347,133349,133351,133353,133355,133357],{"class":161,"line":1884},[159,133346,27711],{"class":1142},[159,133348,131097],{"class":1146},[159,133350,1159],{"class":165},[159,133352,24376],{"class":1142},[159,133354,132896],{"class":165},[159,133356,24376],{"class":1142},[159,133358,133359],{"class":165}," control_cost)\n",[159,133361,133362],{"class":161,"line":1889},[159,133363,590],{"emptyLinePlaceholder":589},[159,133365,133366],{"class":161,"line":1899},[159,133367,590],{"emptyLinePlaceholder":589},[159,133369,133370,133372,133374,133376,133378],{"class":161,"line":1912},[159,133371,55465],{"class":1142},[159,133373,25625],{"class":185},[159,133375,122698],{"class":165},[159,133377,116986],{"class":1146},[159,133379,27364],{"class":165},[159,133381,133382,133384,133386,133388,133390],{"class":161,"line":1925},[159,133383,122707],{"class":165},[159,133385,189],{"class":1142},[159,133387,122712],{"class":165},[159,133389,122614],{"class":1146},[159,133391,1165],{"class":165},[159,133393,133394,133396,133398],{"class":161,"line":1956},[159,133395,122721],{"class":165},[159,133397,189],{"class":1142},[159,133399,122726],{"class":165},[159,133401,133402,133404,133406],{"class":161,"line":1971},[159,133403,131453],{"class":165},[159,133405,189],{"class":1142},[159,133407,126061],{"class":1146},[159,133409,133410],{"class":161,"line":1976},[159,133411,590],{"emptyLinePlaceholder":589},[159,133413,133414,133416,133418,133420,133422,133424,133426],{"class":161,"line":1981},[159,133415,11677],{"class":1142},[159,133417,55135],{"class":165},[159,133419,49566],{"class":1142},[159,133421,55961],{"class":1146},[159,133423,1159],{"class":165},[159,133425,12132],{"class":1146},[159,133427,54307],{"class":165},[159,133429,133430],{"class":161,"line":1989},[159,133431,133432],{"class":165},"        mujoco.mj_forward(model, data)\n",[159,133434,133435,133438,133440,133442,133444],{"class":161,"line":2001},[159,133436,133437],{"class":165},"        tip ",[159,133439,189],{"class":1142},[159,133441,133243],{"class":165},[159,133443,132836],{"class":192},[159,133445,1165],{"class":165},[159,133447,133448,133451,133453,133455,133457],{"class":161,"line":2006},[159,133449,133450],{"class":165},"        target ",[159,133452,189],{"class":1142},[159,133454,133243],{"class":165},[159,133456,133259],{"class":192},[159,133458,1165],{"class":165},[159,133460,133461,133464,133466,133469,133471],{"class":161,"line":2015},[159,133462,133463],{"class":165},"        error ",[159,133465,189],{"class":1142},[159,133467,133468],{"class":165}," target ",[159,133470,24376],{"class":1142},[159,133472,133473],{"class":165}," tip\n",[159,133475,133476],{"class":161,"line":2024},[159,133477,590],{"emptyLinePlaceholder":589},[159,133479,133480,133482,133484,133486,133488,133491,133493,133495,133498,133500,133503,133505,133507,133509,133511],{"class":161,"line":2029},[159,133481,127917],{"class":165},[159,133483,1489],{"class":1146},[159,133485,28061],{"class":165},[159,133487,189],{"class":1142},[159,133489,133490],{"class":165}," np.clip(",[159,133492,126560],{"class":1146},[159,133494,30131],{"class":1142},[159,133496,133497],{"class":165}," error[",[159,133499,11034],{"class":1146},[159,133501,133502],{"class":165},"], ",[159,133504,24376],{"class":1142},[159,133506,123703],{"class":1146},[159,133508,1939],{"class":165},[159,133510,123703],{"class":1146},[159,133512,1165],{"class":165},[159,133514,133515,133517,133519,133521,133523,133525,133527,133529,133531,133533,133535,133537,133539,133541,133543],{"class":161,"line":2038},[159,133516,127917],{"class":165},[159,133518,4932],{"class":1146},[159,133520,28061],{"class":165},[159,133522,189],{"class":1142},[159,133524,133490],{"class":165},[159,133526,126560],{"class":1146},[159,133528,30131],{"class":1142},[159,133530,133497],{"class":165},[159,133532,1489],{"class":1146},[159,133534,133502],{"class":165},[159,133536,24376],{"class":1142},[159,133538,123703],{"class":1146},[159,133540,1939],{"class":165},[159,133542,123703],{"class":1146},[159,133544,1165],{"class":165},[159,133546,133547],{"class":161,"line":2053},[159,133548,590],{"emptyLinePlaceholder":589},[159,133550,133551],{"class":161,"line":2070},[159,133552,122816],{"class":165},[159,133554,133555,133557,133559],{"class":161,"line":2095},[159,133556,131597],{"class":165},[159,133558,33073],{"class":1142},[159,133560,133561],{"class":165}," reward(model, data)\n",[159,133563,133564],{"class":161,"line":2104},[159,133565,590],{"emptyLinePlaceholder":589},[159,133567,133568,133570,133572,133574,133576,133578,133580],{"class":161,"line":2120},[159,133569,17003],{"class":1142},[159,133571,55135],{"class":165},[159,133573,1662],{"class":1142},[159,133575,29369],{"class":1146},[159,133577,122859],{"class":1142},[159,133579,1259],{"class":1146},[159,133581,27364],{"class":165},[159,133583,133584,133587,133589],{"class":161,"line":2134},[159,133585,133586],{"class":165},"            obs ",[159,133588,189],{"class":1142},[159,133590,133591],{"class":165}," get_obs(model, data)\n",[159,133593,133594,133596,133598,133600],{"class":161,"line":2143},[159,133595,58045],{"class":1146},[159,133597,1159],{"class":165},[159,133599,131631],{"class":192},[159,133601,133602],{"class":165},", step)\n",[159,133604,133605,133607,133609,133612,133615,133617],{"class":161,"line":2165},[159,133606,58045],{"class":1146},[159,133608,1159],{"class":165},[159,133610,133611],{"class":192},"\"  tip:\"",[159,133613,133614],{"class":165},", np.round(tip, ",[159,133616,23949],{"class":1146},[159,133618,18787],{"class":165},[159,133620,133621,133623,133625,133628,133631,133633],{"class":161,"line":2178},[159,133622,58045],{"class":1146},[159,133624,1159],{"class":165},[159,133626,133627],{"class":192},"\"  target:\"",[159,133629,133630],{"class":165},", np.round(target, ",[159,133632,23949],{"class":1146},[159,133634,18787],{"class":165},[159,133636,133637,133639,133641,133644,133647,133649],{"class":161,"line":2191},[159,133638,58045],{"class":1146},[159,133640,1159],{"class":165},[159,133642,133643],{"class":192},"\"  ctrl:\"",[159,133645,133646],{"class":165},", np.round(data.ctrl.copy(), ",[159,133648,23949],{"class":1146},[159,133650,18787],{"class":165},[159,133652,133653,133655,133657,133660,133663,133665],{"class":161,"line":2204},[159,133654,58045],{"class":1146},[159,133656,1159],{"class":165},[159,133658,133659],{"class":192},"\"  obs_dim:\"",[159,133661,133662],{"class":165},", obs.shape[",[159,133664,1489],{"class":1146},[159,133666,28275],{"class":165},[159,133668,133669],{"class":161,"line":2217},[159,133670,590],{"emptyLinePlaceholder":589},[159,133672,133673,133675,133677,133679,133681,133683,133685,133687],{"class":161,"line":2230},[159,133674,54819],{"class":1146},[159,133676,1159],{"class":165},[159,133678,131676],{"class":192},[159,133680,1939],{"class":165},[159,133682,55536],{"class":1146},[159,133684,131683],{"class":165},[159,133686,23949],{"class":1146},[159,133688,18787],{"class":165},[159,133690,133691,133693,133695,133698,133701,133703,133705,133707],{"class":161,"line":2243},[159,133692,54819],{"class":1146},[159,133694,1159],{"class":165},[159,133696,133697],{"class":192},"\"final tip:\"",[159,133699,133700],{"class":165},", np.round(site_position(model, data, ",[159,133702,132836],{"class":192},[159,133704,131645],{"class":165},[159,133706,23949],{"class":1146},[159,133708,18787],{"class":165},[159,133710,133711,133713,133715,133718,133720,133722,133724,133726],{"class":161,"line":2256},[159,133712,54819],{"class":1146},[159,133714,1159],{"class":165},[159,133716,133717],{"class":192},"\"target:\"",[159,133719,133700],{"class":165},[159,133721,133259],{"class":192},[159,133723,131645],{"class":165},[159,133725,23949],{"class":1146},[159,133727,18787],{"class":165},[159,133729,133730],{"class":161,"line":2266},[159,133731,590],{"emptyLinePlaceholder":589},[159,133733,133734],{"class":161,"line":2275},[159,133735,590],{"emptyLinePlaceholder":589},[159,133737,133738,133740,133742,133744,133746],{"class":161,"line":2284},[159,133739,18445],{"class":1142},[159,133741,54740],{"class":1146},[159,133743,122859],{"class":1142},[159,133745,122862],{"class":192},[159,133747,27364],{"class":165},[159,133749,133750],{"class":161,"line":2293},[159,133751,122869],{"class":165},[14,133753,124870],{},[151,133755,133757],{"className":47347,"code":133756,"language":47349,"meta":25,"style":25},"touch ch7_reacher.py\n",[49,133758,133759],{"__ignoreMap":25},[159,133760,133761,133763],{"class":161,"line":162},[159,133762,122583],{"class":185},[159,133764,133765],{"class":192}," ch7_reacher.py\n",[14,133767,131744],{},[151,133769,133771],{"className":47347,"code":133770,"language":47349,"meta":25,"style":25},"python ch7_reacher.py\n",[49,133772,133773],{"__ignoreMap":25},[159,133774,133775,133777],{"class":161,"line":162},[159,133776,53902],{"class":185},[159,133778,133765],{"class":192},[42,133780,122872],{"id":122872},[14,133782,133783],{},"读取 site 坐标：",[151,133785,133787],{"className":53900,"code":133786,"language":53902,"meta":25,"style":25},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[49,133788,133789],{"__ignoreMap":25},[159,133790,133791,133793,133795,133797,133799],{"class":161,"line":162},[159,133792,55465],{"class":1142},[159,133794,133156],{"class":185},[159,133796,133159],{"class":165},[159,133798,24983],{"class":1146},[159,133800,133164],{"class":165},[14,133802,133803],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,133805,131760],{},[151,133807,133809],{"className":53900,"code":133808,"language":53902,"meta":25,"style":25},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[49,133810,133811],{"__ignoreMap":25},[159,133812,133813,133815],{"class":161,"line":162},[159,133814,40574],{"class":1142},[159,133816,133268],{"class":165},[14,133818,133819],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,133821,131085],{},[151,133823,133825],{"className":53900,"code":133824,"language":53902,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[49,133826,133827,133839,133852],{"__ignoreMap":25},[159,133828,133829,133831,133833,133835,133837],{"class":161,"line":162},[159,133830,132896],{"class":165},[159,133832,189],{"class":1142},[159,133834,132901],{"class":165},[159,133836,24376],{"class":1142},[159,133838,132906],{"class":165},[159,133840,133841,133844,133846,133848,133850],{"class":161,"line":176},[159,133842,133843],{"class":165},"control_cost ",[159,133845,189],{"class":1142},[159,133847,133337],{"class":1146},[159,133849,30131],{"class":1142},[159,133851,133342],{"class":165},[159,133853,133854,133856,133858,133860,133862,133864,133866],{"class":161,"line":203},[159,133855,40574],{"class":1142},[159,133857,131097],{"class":1146},[159,133859,1159],{"class":165},[159,133861,24376],{"class":1142},[159,133863,132896],{"class":165},[159,133865,24376],{"class":1142},[159,133867,133359],{"class":165},[14,133869,133870],{},"奖励由两部分组成：",[134,133872,133873,133878],{},[106,133874,133875,133877],{},[49,133876,132923],{},"：末端离目标越远，奖励越低。",[106,133879,133880,133883],{},[49,133881,133882],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,133885,133886],{},"简单控制器：",[151,133888,133890],{"className":53900,"code":133889,"language":53902,"meta":25,"style":25},"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",[49,133891,133892,133905,133937],{"__ignoreMap":25},[159,133893,133894,133897,133899,133901,133903],{"class":161,"line":162},[159,133895,133896],{"class":165},"error ",[159,133898,189],{"class":1142},[159,133900,133468],{"class":165},[159,133902,24376],{"class":1142},[159,133904,133473],{"class":165},[159,133906,133907,133909,133911,133913,133915,133917,133919,133921,133923,133925,133927,133929,133931,133933,133935],{"class":161,"line":176},[159,133908,127171],{"class":165},[159,133910,1489],{"class":1146},[159,133912,28061],{"class":165},[159,133914,189],{"class":1142},[159,133916,133490],{"class":165},[159,133918,126560],{"class":1146},[159,133920,30131],{"class":1142},[159,133922,133497],{"class":165},[159,133924,11034],{"class":1146},[159,133926,133502],{"class":165},[159,133928,24376],{"class":1142},[159,133930,123703],{"class":1146},[159,133932,1939],{"class":165},[159,133934,123703],{"class":1146},[159,133936,1165],{"class":165},[159,133938,133939,133941,133943,133945,133947,133949,133951,133953,133955,133957,133959,133961,133963,133965,133967],{"class":161,"line":203},[159,133940,127171],{"class":165},[159,133942,4932],{"class":1146},[159,133944,28061],{"class":165},[159,133946,189],{"class":1142},[159,133948,133490],{"class":165},[159,133950,126560],{"class":1146},[159,133952,30131],{"class":1142},[159,133954,133497],{"class":165},[159,133956,1489],{"class":1146},[159,133958,133502],{"class":165},[159,133960,24376],{"class":1142},[159,133962,123703],{"class":1146},[159,133964,1939],{"class":165},[159,133966,123703],{"class":1146},[159,133968,1165],{"class":165},[14,133970,133971],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[42,133973,123008],{"id":123008},[151,133975,133976],{"className":53900,"code":133786,"language":53902,"meta":25,"style":25},[49,133977,133978],{"__ignoreMap":25},[159,133979,133980,133982,133984,133986,133988],{"class":161,"line":162},[159,133981,55465],{"class":1142},[159,133983,133156],{"class":185},[159,133985,133159],{"class":165},[159,133987,24983],{"class":1146},[159,133989,133164],{"class":165},[14,133991,133992,133993,133995,133996,103839,133998,51907],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[49,133994,101110],{}," 是 site 的名字，比如 ",[49,133997,132836],{},[49,133999,133259],{},[151,134001,134003],{"className":53900,"code":134002,"language":53902,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[49,134004,134005],{"__ignoreMap":25},[159,134006,134007,134009,134011],{"class":161,"line":162},[159,134008,124934],{"class":165},[159,134010,189],{"class":1142},[159,134012,133173],{"class":165},[14,134014,134015],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[151,134017,134019],{"className":53900,"code":134018,"language":53902,"meta":25,"style":25},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[49,134020,134021,134033],{"__ignoreMap":25},[159,134022,134023,134025,134027,134029,134031],{"class":161,"line":162},[159,134024,18445],{"class":1142},[159,134026,124749],{"class":165},[159,134028,166],{"class":1142},[159,134030,1259],{"class":1146},[159,134032,27364],{"class":165},[159,134034,134035,134037,134039,134041,134043,134045,134047,134049,134051,134053],{"class":161,"line":176},[159,134036,125195],{"class":1142},[159,134038,124735],{"class":1146},[159,134040,1159],{"class":165},[159,134042,23931],{"class":1142},[159,134044,133198],{"class":192},[159,134046,24721],{"class":1146},[159,134048,101110],{"class":165},[159,134050,886],{"class":1146},[159,134052,24115],{"class":192},[159,134054,1165],{"class":165},[14,134056,134057,134058,134061,134062,134064],{},"如果 site 没找到，就主动报错。",[49,134059,134060],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[49,134063,101110],{}," 的值放进字符串里。",[151,134066,134068],{"className":53900,"code":134067,"language":53902,"meta":25,"style":25},"return data.site_xpos[site_id].copy()\n",[49,134069,134070],{"__ignoreMap":25},[159,134071,134072,134074],{"class":161,"line":162},[159,134073,40574],{"class":1142},[159,134075,133215],{"class":165},[14,134077,134078,134079,134081,134082,134085],{},"返回这个 site 的世界坐标。",[49,134080,124980],{}," 里的每一行都是一个 site 的 ",[49,134083,134084],{},"(x, y, z)"," 坐标。",[151,134087,134089],{"className":53900,"code":134088,"language":53902,"meta":25,"style":25},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[49,134090,134091],{"__ignoreMap":25},[159,134092,134093,134095,134097],{"class":161,"line":162},[159,134094,55465],{"class":1142},[159,134096,133230],{"class":185},[159,134098,133233],{"class":165},[14,134100,134101],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[151,134103,134105],{"className":53900,"code":134104,"language":53902,"meta":25,"style":25},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[49,134106,134107,134119],{"__ignoreMap":25},[159,134108,134109,134111,134113,134115,134117],{"class":161,"line":162},[159,134110,132868],{"class":165},[159,134112,189],{"class":1142},[159,134114,133243],{"class":165},[159,134116,132836],{"class":192},[159,134118,1165],{"class":165},[159,134120,134121,134123,134125,134127,134129],{"class":161,"line":176},[159,134122,132878],{"class":165},[159,134124,189],{"class":1142},[159,134126,133243],{"class":165},[159,134128,133259],{"class":192},[159,134130,1165],{"class":165},[14,134132,134133],{},"分别读取末端点和目标点的世界坐标。",[151,134135,134136],{"className":53900,"code":133808,"language":53902,"meta":25,"style":25},[49,134137,134138],{"__ignoreMap":25},[159,134139,134140,134142],{"class":161,"line":162},[159,134141,40574],{"class":1142},[159,134143,133268],{"class":165},[14,134145,134146],{},"把四部分拼成一个观测数组：",[151,134148,134151],{"className":134149,"code":134150,"language":8507,"meta":25},[28803],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[49,134152,134150],{"__ignoreMap":25},[151,134154,134156],{"className":53900,"code":134155,"language":53902,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\n",[49,134157,134158],{"__ignoreMap":25},[159,134159,134160,134162,134164,134166,134168],{"class":161,"line":162},[159,134161,132896],{"class":165},[159,134163,189],{"class":1142},[159,134165,132901],{"class":165},[159,134167,24376],{"class":1142},[159,134169,132906],{"class":165},[14,134171,134172,134173,134176,134177,134180],{},"计算 tip 到 target 的距离。",[49,134174,134175],{},"tip - target"," 得到一个三维向量，",[49,134178,134179],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,134182,38199],{},[151,134184,134187],{"className":134185,"code":134186,"language":8507,"meta":25},[28803],"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",[49,134188,134186],{"__ignoreMap":25},[151,134190,134192],{"className":53900,"code":134191,"language":53902,"meta":25,"style":25},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[49,134193,134194],{"__ignoreMap":25},[159,134195,134196,134198,134200,134202,134204],{"class":161,"line":162},[159,134197,133843],{"class":165},[159,134199,189],{"class":1142},[159,134201,133337],{"class":1146},[159,134203,30131],{"class":1142},[159,134205,133342],{"class":165},[14,134207,134208,134209,134212,134213,134216],{},"计算动作惩罚。",[49,134210,134211],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[49,134214,134215],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[151,134218,134220],{"className":53900,"code":134219,"language":53902,"meta":25,"style":25},"return float(-dist - control_cost)\n",[49,134221,134222],{"__ignoreMap":25},[159,134223,134224,134226,134228,134230,134232,134234,134236],{"class":161,"line":162},[159,134225,40574],{"class":1142},[159,134227,131097],{"class":1146},[159,134229,1159],{"class":165},[159,134231,24376],{"class":1142},[159,134233,132896],{"class":165},[159,134235,24376],{"class":1142},[159,134237,133359],{"class":165},[14,134239,134240],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[151,134242,134243],{"className":53900,"code":132103,"language":53902,"meta":25,"style":25},[49,134244,134245],{"__ignoreMap":25},[159,134246,134247,134249,134251],{"class":161,"line":162},[159,134248,132110],{"class":165},[159,134250,189],{"class":1142},[159,134252,126061],{"class":1146},[14,134254,134255],{},"累计奖励变量，记录整个运行过程的总分。",[151,134257,134259],{"className":53900,"code":134258,"language":53902,"meta":25,"style":25},"for step in range(500):\n",[49,134260,134261],{"__ignoreMap":25},[159,134262,134263,134265,134267,134269,134271,134273,134275],{"class":161,"line":162},[159,134264,26657],{"class":1142},[159,134266,55135],{"class":165},[159,134268,49566],{"class":1142},[159,134270,55961],{"class":1146},[159,134272,1159],{"class":165},[159,134274,12132],{"class":1146},[159,134276,54307],{"class":165},[14,134278,134279],{},"运行 500 个控制步。",[151,134281,134282],{"className":53900,"code":125843,"language":53902,"meta":25,"style":25},[49,134283,134284],{"__ignoreMap":25},[159,134285,134286],{"class":161,"line":162},[159,134287,125843],{"class":165},[14,134289,134290,134291,122318,134293,134295],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[49,134292,124531],{},[49,134294,124534],{}," 是当前状态下的坐标。",[151,134297,134299],{"className":53900,"code":134298,"language":53902,"meta":25,"style":25},"error = target - tip\n",[49,134300,134301],{"__ignoreMap":25},[159,134302,134303,134305,134307,134309,134311],{"class":161,"line":162},[159,134304,133896],{"class":165},[159,134306,189],{"class":1142},[159,134308,133468],{"class":165},[159,134310,24376],{"class":1142},[159,134312,133473],{"class":165},[14,134314,134315],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[151,134317,134319],{"className":53900,"code":134318,"language":53902,"meta":25,"style":25},"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",[49,134320,134321,134353],{"__ignoreMap":25},[159,134322,134323,134325,134327,134329,134331,134333,134335,134337,134339,134341,134343,134345,134347,134349,134351],{"class":161,"line":162},[159,134324,127171],{"class":165},[159,134326,1489],{"class":1146},[159,134328,28061],{"class":165},[159,134330,189],{"class":1142},[159,134332,133490],{"class":165},[159,134334,126560],{"class":1146},[159,134336,30131],{"class":1142},[159,134338,133497],{"class":165},[159,134340,11034],{"class":1146},[159,134342,133502],{"class":165},[159,134344,24376],{"class":1142},[159,134346,123703],{"class":1146},[159,134348,1939],{"class":165},[159,134350,123703],{"class":1146},[159,134352,1165],{"class":165},[159,134354,134355,134357,134359,134361,134363,134365,134367,134369,134371,134373,134375,134377,134379,134381,134383],{"class":161,"line":176},[159,134356,127171],{"class":165},[159,134358,4932],{"class":1146},[159,134360,28061],{"class":165},[159,134362,189],{"class":1142},[159,134364,133490],{"class":165},[159,134366,126560],{"class":1146},[159,134368,30131],{"class":1142},[159,134370,133497],{"class":165},[159,134372,1489],{"class":1146},[159,134374,133502],{"class":165},[159,134376,24376],{"class":1142},[159,134378,123703],{"class":1146},[159,134380,1939],{"class":165},[159,134382,123703],{"class":1146},[159,134384,1165],{"class":165},[14,134386,134387,134388,134391],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[49,134389,134390],{},"error -> ctrl -> step"," 的流程。",[151,134393,134394],{"className":53900,"code":125805,"language":53902,"meta":25,"style":25},[49,134395,134396],{"__ignoreMap":25},[159,134397,134398],{"class":161,"line":162},[159,134399,125805],{"class":165},[14,134401,134402],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[151,134404,134406],{"className":53900,"code":134405,"language":53902,"meta":25,"style":25},"obs = get_obs(model, data)\n",[49,134407,134408],{"__ignoreMap":25},[159,134409,134410,134412,134414],{"class":161,"line":162},[159,134411,132154],{"class":165},[159,134413,189],{"class":1142},[159,134415,133591],{"class":165},[14,134417,134418,134419,134422],{},"读取最新观测。后面打印 ",[49,134420,134421],{},"obs.shape[0]","，用来确认观测维度是 10。",[37,134424,123616],{"id":123615},[14,134426,134427],{},"观测维度为:",[151,134429,134432],{"className":134430,"code":134431,"language":8507,"meta":25},[28803],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[49,134433,134431],{"__ignoreMap":25},[14,134435,134436],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,134438,134439],{},"程序每 100 步打印：",[151,134441,134444],{"className":134442,"code":134443,"language":8507,"meta":25},[28803],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[49,134445,134443],{"__ignoreMap":25},[14,134447,134448,134449,134451],{},"如果控制有效，你应该看到最终 ",[49,134450,124531],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[37,134453,123648],{"id":123647},[134,134455,134456,134459,134462,134468,134474,134481,134491],{},[106,134457,134458],{},"修改目标点位置。",[106,134460,134461],{},"重新运行，观察最终 tip 是否变化。",[106,134463,134464,134465,134467],{},"把 gravity 改成 ",[49,134466,123889],{},"，观察控制是否变差。",[106,134469,132481,134470,132485,134472,51907],{},[49,134471,123458],{},[49,134473,11034],{},[106,134475,123711,134476,123714,134478,134480],{},[49,134477,131896],{},[49,134479,128607],{},"，观察机械臂是否更难移动。",[106,134482,123711,134483,103830,134485,123714,134487,134490],{},[49,134484,124534],{},[49,134486,125446],{},[49,134488,134489],{},"0.2 0 0.6","，观察 reward 和 final tip。",[106,134492,134493],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[37,134495,123753],{"id":123752},[42,134497,134499],{"id":134498},"site-not-found",[49,134500,134501],{},"site not found",[14,134503,134504,134505,122318,134508,51907],{},"检查 XML 中是否有 ",[49,134506,134507],{},"site name=\"tip\"",[49,134509,134510],{},"site name=\"target\"",[42,134512,134513],{"id":134513},"机械臂完全不动",[14,134515,123823],{},[134,134517,134518,134523,134526,134531],{},[106,134519,134520,134522],{},[49,134521,123458],{}," 是否为 2",[106,134524,134525],{},"actuator 是否引用正确 joint",[106,134527,134528,134530],{},[49,134529,122376],{}," 是否被赋值",[106,134532,134533,134534],{},"是否执行了 ",[49,134535,121985],{},[42,134537,134538],{"id":134538},"控制效果不好",[14,134540,134541],{},"正常。本章重点不是控制器最优，而是任务结构:",[151,134543,134546],{"className":134544,"code":134545,"language":8507,"meta":25},[28803],"obs → action → mj_step → reward → next_obs\n",[49,134547,134545],{"__ignoreMap":25},[42,134549,134551],{"id":134550},"tip-坐标不变化","tip 坐标不变化",[14,134553,123875],{},[134,134555,134556,134561,134569,134578],{},[106,134557,134558,134559,51907],{},"是否每步调用了 ",[49,134560,121985],{},[106,134562,134563,134564,122318,134566,51907],{},"是否写入了 ",[49,134565,127426],{},[49,134567,134568],{},"data.ctrl[1]",[106,134570,134571,134572,24079,134575,51907],{},"actuator 是否正确引用 ",[49,134573,134574],{},"joint1",[49,134576,134577],{},"joint2",[106,134579,134580],{},"控制输入是否太小。",[42,134582,134583],{"id":134583},"目标点不会动",[14,134585,134586],{},"本章的 target 是固定 site：",[151,134588,134590],{"className":153,"code":134589,"language":155,"meta":25,"style":25},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[49,134591,134592],{"__ignoreMap":25},[159,134593,134594,134596,134598,134600,134602,134604,134606,134608,134611],{"class":161,"line":162},[159,134595,166],{"class":165},[159,134597,124510],{"class":169},[159,134599,547],{"class":185},[159,134601,189],{"class":165},[159,134603,133259],{"class":192},[159,134605,122406],{"class":185},[159,134607,189],{"class":165},[159,134609,134610],{"class":192},"\"0.5 0 0.4\"",[159,134612,134613],{"class":165}," ...\u002F>\n",[14,134615,134616,134617,134619],{},"它直接挂在 ",[49,134618,123141],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[42,134621,134622],{"id":134622},"机械臂不像真实机械臂",[14,134624,134625],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[37,134627,123907],{"id":123906},[14,134629,134630],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,134632,134633],{},"核心公式：",[151,134635,134638],{"className":134636,"code":134637,"language":8507,"meta":25},[28803],"distance = ||tip - target||\nreward = -distance - action_cost\n",[49,134639,134637],{"__ignoreMap":25},[14,134641,134642],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1468,134644,134645],{},"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":25,"searchDepth":176,"depth":176,"links":134647},[134648,134649,134650,134655,134659,134660,134661,134669],{"id":121946,"depth":176,"text":121947},{"id":122069,"depth":176,"text":122070},{"id":122344,"depth":176,"text":122345,"children":134651},[134652,134653,134654],{"id":132851,"depth":203,"text":132852},{"id":132927,"depth":203,"text":132927},{"id":132957,"depth":203,"text":132958},{"id":122552,"depth":176,"text":122553,"children":134656},[134657,134658],{"id":122872,"depth":203,"text":122872},{"id":123008,"depth":203,"text":123008},{"id":123615,"depth":176,"text":123616},{"id":123647,"depth":176,"text":123648},{"id":123752,"depth":176,"text":123753,"children":134662},[134663,134664,134665,134666,134667,134668],{"id":134498,"depth":203,"text":134501},{"id":134513,"depth":203,"text":134513},{"id":134538,"depth":203,"text":134538},{"id":134550,"depth":203,"text":134551},{"id":134583,"depth":203,"text":134583},{"id":134622,"depth":203,"text":134622},{"id":123906,"depth":176,"text":123907},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":132655,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":134676,"title":134677,"body":134678,"description":25,"extension":23810,"meta":138140,"navigation":589,"path":138141,"seo":138142,"stem":138143,"__hash__":138144},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":134679,"toc":138111},[134680,134683,134685,134688,134691,134716,134719,134725,134728,134734,134736,134738,134762,134764,134782,134784,134827,134829,134856,134858,134861,134913,134916,134922,134931,134934,134972,134975,135014,135017,135025,135032,135035,135041,135043,135097,135104,135149,135152,135156,135172,135182,135184,136445,136447,136459,136461,136472,136474,136477,136498,136501,136504,136537,136543,136546,136579,136582,136585,136626,136631,136645,136648,136661,136666,136689,136691,136706,136716,136731,136738,136758,136773,136791,136794,136811,136819,136835,136841,136873,136886,136918,136928,136963,136977,137023,137037,137079,137090,137103,137109,137142,137145,137172,137182,137222,137232,137249,137256,137274,137277,137318,137331,137346,137349,137372,137375,137387,137390,137409,137414,137435,137438,137453,137456,137490,137502,137517,137520,137545,137548,137567,137570,137602,137605,137629,137635,137665,137672,137685,137688,137690,137692,137698,137701,137704,137716,137719,137721,137775,137777,137781,137787,137796,137799,137806,137808,137831,137834,137838,137840,137858,137864,137866,137899,137902,137908,137912,137915,137935,137940,137944,137951,137971,137976,137980,137983,138003,138006,138092,138096,138099,138105,138108],[10,134681,134677],{"id":134682},"_8gymnasium-风格强化学习接口基础",[37,134684,121947],{"id":121946},[14,134686,134687],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,134689,134690],{},"你将实现:",[151,134692,134694],{"className":53900,"code":134693,"language":53902,"meta":25,"style":25},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[49,134695,134696,134706],{"__ignoreMap":25},[159,134697,134698,134701,134703],{"class":161,"line":162},[159,134699,134700],{"class":165},"obs, info ",[159,134702,189],{"class":1142},[159,134704,134705],{"class":165}," env.reset()\n",[159,134707,134708,134711,134713],{"class":161,"line":176},[159,134709,134710],{"class":165},"obs, reward, terminated, truncated, info ",[159,134712,189],{"class":1142},[159,134714,134715],{"class":165}," env.step(action)\n",[14,134717,134718],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,134720,134721,134722,134724],{},"前面章节的代码都是“脚本式”的：在 ",[49,134723,123595],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,134726,134727],{},"可以先记住 Gymnasium 环境的核心交互：",[151,134729,134732],{"className":134730,"code":134731,"language":8507,"meta":25},[28803],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[49,134733,134731],{"__ignoreMap":25},[37,134735,122070],{"id":122069},[14,134737,122073],{},[151,134739,134740],{"className":47347,"code":125688,"language":47349,"meta":25,"style":25},[49,134741,134742],{"__ignoreMap":25},[159,134743,134744,134746,134748,134750,134752,134754,134756,134758,134760],{"class":161,"line":162},[159,134745,48101],{"class":185},[159,134747,49838],{"class":192},[159,134749,47359],{"class":192},[159,134751,49923],{"class":1146},[159,134753,125703],{"class":192},[159,134755,122098],{"class":192},[159,134757,123801],{"class":192},[159,134759,122114],{"class":192},[159,134761,125712],{"class":192},[14,134763,124119],{},[151,134765,134767],{"className":47347,"code":134766,"language":47349,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[49,134768,134769],{"__ignoreMap":25},[159,134770,134771,134773,134775,134777,134779],{"class":161,"line":162},[159,134772,47356],{"class":185},[159,134774,47359],{"class":192},[159,134776,122230],{"class":192},[159,134778,129011],{"class":192},[159,134780,134781],{"class":192}," gymnasium\n",[14,134783,124136],{},[151,134785,134787],{"className":47347,"code":134786,"language":47349,"meta":25,"style":25},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[49,134788,134789,134806,134815],{"__ignoreMap":25},[159,134790,134791,134793,134795,134797,134800,134802,134804],{"class":161,"line":162},[159,134792,53852],{"class":185},[159,134794,52698],{"class":192},[159,134796,48639],{"class":1146},[159,134798,134799],{"class":192}," mujoco-gym-api",[159,134801,122275],{"class":192},[159,134803,122278],{"class":1146},[159,134805,122281],{"class":1146},[159,134807,134808,134810,134812],{"class":161,"line":176},[159,134809,53852],{"class":185},[159,134811,122288],{"class":192},[159,134813,134814],{"class":192}," mujoco-gym-api\n",[159,134816,134817,134819,134821,134823,134825],{"class":161,"line":203},[159,134818,47356],{"class":185},[159,134820,47359],{"class":192},[159,134822,122230],{"class":192},[159,134824,129011],{"class":192},[159,134826,134781],{"class":192},[14,134828,122304],{},[134,134830,134831,134841,134844,134850],{},[106,134832,134833,134834,134837,134838,51907],{},"本章使用 ",[49,134835,134836],{},"gymnasium","，不是旧版 ",[49,134839,134840],{},"gym",[106,134842,134843],{},"Gymnasium API 与旧 Gym API 有差异。",[106,134845,134846,134847,51907],{},"旧 Gym 常见返回值是 4 个: ",[49,134848,134849],{},"obs, reward, done, info",[106,134851,134852,134853,51907],{},"Gymnasium 返回值是 5 个: ",[49,134854,134855],{},"obs, reward, terminated, truncated, info",[37,134857,122345],{"id":122344},[14,134859,134860],{},"强化学习环境接口包含:",[12347,134862,134863,134872],{},[16500,134864,134865],{},[12356,134866,134867,134870],{},[12365,134868,134869],{"align":19854},"方法",[12365,134871,123996],{"align":19854},[16624,134873,134874,134884,134894,134904],{},[12356,134875,134876,134881],{},[12488,134877,134878],{"align":19854},[49,134879,134880],{},"reset()",[12488,134882,134883],{"align":19854},"重置环境",[12356,134885,134886,134891],{},[12488,134887,134888],{"align":19854},[49,134889,134890],{},"step(action)",[12488,134892,134893],{"align":19854},"执行动作",[12356,134895,134896,134901],{},[12488,134897,134898],{"align":19854},[49,134899,134900],{},"observation_space",[12488,134902,134903],{"align":19854},"观测空间",[12356,134905,134906,134911],{},[12488,134907,134908],{"align":19854},[49,134909,134910],{},"action_space",[12488,134912,47180],{"align":19854},[14,134914,134915],{},"一个最小环境需要完成:",[151,134917,134920],{"className":134918,"code":134919,"language":8507,"meta":25},[28803],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[49,134921,134919],{"__ignoreMap":25},[42,134923,134925,122318,134928,125938],{"id":134924},"terminated-和-truncated-的区别",[49,134926,134927],{},"terminated",[49,134929,134930],{},"truncated",[14,134932,134933],{},"Gymnasium 把“结束”拆成两个概念：",[12347,134935,134936,134946],{},[16500,134937,134938],{},[12356,134939,134940,134942,134944],{},[12365,134941,125874],{"align":19854},[12365,134943,122000],{"align":19854},[12365,134945,44714],{"align":19854},[16624,134947,134948,134960],{},[12356,134949,134950,134954,134957],{},[12488,134951,134952],{"align":19854},[49,134953,134927],{},[12488,134955,134956],{"align":19854},"任务自然结束",[12488,134958,134959],{"align":19854},"机械臂到达目标、机器人摔倒",[12356,134961,134962,134966,134969],{},[12488,134963,134964],{"align":19854},[49,134965,134930],{},[12488,134967,134968],{"align":19854},"因外部限制截断",[12488,134970,134971],{"align":19854},"达到最大步数、时间限制",[14,134973,134974],{},"本章中：",[151,134976,134978],{"className":53900,"code":134977,"language":53902,"meta":25,"style":25},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[49,134979,134980,134995],{"__ignoreMap":25},[159,134981,134982,134985,134987,134990,134992],{"class":161,"line":162},[159,134983,134984],{"class":165},"terminated ",[159,134986,189],{"class":1142},[159,134988,134989],{"class":165}," dist ",[159,134991,166],{"class":1142},[159,134993,134994],{"class":1146}," 0.05\n",[159,134996,134997,135000,135002,135004,135007,135009,135011],{"class":161,"line":176},[159,134998,134999],{"class":165},"truncated ",[159,135001,189],{"class":1142},[159,135003,62268],{"class":1146},[159,135005,135006],{"class":165},".steps ",[159,135008,3822],{"class":1142},[159,135010,62268],{"class":1146},[159,135012,135013],{"class":165},".max_steps\n",[14,135015,135016],{},"也就是：",[134,135018,135019,135022],{},[106,135020,135021],{},"末端距离目标小于 0.05，任务成功结束。",[106,135023,135024],{},"步数超过上限，episode 被截断。",[42,135026,135028,122318,135030],{"id":135027},"observation_space-和-action_space",[49,135029,134900],{},[49,135031,134910],{},[14,135033,135034],{},"这两个对象告诉算法：",[151,135036,135039],{"className":135037,"code":135038,"language":8507,"meta":25},[28803],"观测长什么样\n动作允许多大\n",[49,135040,135038],{"__ignoreMap":25},[14,135042,38199],{},[151,135044,135046],{"className":53900,"code":135045,"language":53902,"meta":25,"style":25},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[49,135047,135048],{"__ignoreMap":25},[159,135049,135050,135052,135055,135057,135060,135063,135066,135068,135070,135073,135075,135077,135079,135081,135083,135085,135087,135090,135092,135094],{"class":161,"line":162},[159,135051,54344],{"class":1146},[159,135053,135054],{"class":165},".action_space ",[159,135056,189],{"class":1142},[159,135058,135059],{"class":165}," spaces.Box(",[159,135061,135062],{"class":8765},"low",[159,135064,135065],{"class":1142},"=-",[159,135067,123703],{"class":1146},[159,135069,1939],{"class":165},[159,135071,135072],{"class":8765},"high",[159,135074,189],{"class":1142},[159,135076,123703],{"class":1146},[159,135078,1939],{"class":165},[159,135080,117263],{"class":8765},[159,135082,189],{"class":1142},[159,135084,1159],{"class":165},[159,135086,11034],{"class":1146},[159,135088,135089],{"class":165},",), ",[159,135091,114800],{"class":8765},[159,135093,189],{"class":1142},[159,135095,135096],{"class":165},"np.float32)\n",[14,135098,135099,135100,135103],{},"表示动作是 2 维数组，每个值都在 ",[49,135101,135102],{},"[-1, 1]"," 范围内。",[151,135105,135107],{"className":53900,"code":135106,"language":53902,"meta":25,"style":25},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[49,135108,135109],{"__ignoreMap":25},[159,135110,135111,135113,135116,135118,135120,135122,135124,135127,135129,135131,135133,135135,135137,135139,135141,135143,135145,135147],{"class":161,"line":162},[159,135112,54344],{"class":1146},[159,135114,135115],{"class":165},".observation_space ",[159,135117,189],{"class":1142},[159,135119,135059],{"class":165},[159,135121,135062],{"class":8765},[159,135123,135065],{"class":1142},[159,135125,135126],{"class":165},"np.inf, ",[159,135128,135072],{"class":8765},[159,135130,189],{"class":1142},[159,135132,135126],{"class":165},[159,135134,117263],{"class":8765},[159,135136,189],{"class":1142},[159,135138,1159],{"class":165},[159,135140,1964],{"class":1146},[159,135142,135089],{"class":165},[159,135144,114800],{"class":8765},[159,135146,189],{"class":1142},[159,135148,135096],{"class":165},[14,135150,135151],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[42,135153,135155],{"id":135154},"frame_skip-是什么","frame_skip 是什么",[151,135157,135159],{"className":53900,"code":135158,"language":53902,"meta":25,"style":25},"self.frame_skip = 5\n",[49,135160,135161],{"__ignoreMap":25},[159,135162,135163,135165,135168,135170],{"class":161,"line":162},[159,135164,54344],{"class":1146},[159,135166,135167],{"class":165},".frame_skip ",[159,135169,189],{"class":1142},[159,135171,1191],{"class":1146},[14,135173,135174,135175,135178,135179,135181],{},"表示外部调用一次 ",[49,135176,135177],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[49,135180,122515],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[37,135183,122553],{"id":122552},[151,135185,135187],{"className":53900,"code":135186,"language":53902,"meta":25,"style":25},"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",[49,135188,135189,135201,135207,135217,135228,135232,135236,135244,135249,135253,135257,135261,135265,135269,135273,135277,135282,135286,135290,135294,135299,135303,135307,135311,135315,135319,135323,135327,135331,135335,135339,135343,135347,135351,135369,135384,135388,135401,135411,135426,135443,135447,135468,135487,135512,135526,135530,135540,135552,135562,135566,135608,135646,135650,135660,135676,135691,135710,135717,135721,135734,135749,135764,135777,135796,135812,135816,135857,135872,135887,135891,135930,135941,135954,135958,135968,135977,135981,135991,136006,136024,136028,136039,136056,136069,136073,136083,136087,136098,136109,136113,136127,136141,136157,136161,136174,136191,136206,136213,136217,136221,136233,136243,136261,136273,136285,136289,136297,136313,136322,136331,136339,136381,136394,136399,136403,136421,136425,136429,136441],{"__ignoreMap":25},[159,135190,135191,135193,135196,135198],{"class":161,"line":162},[159,135192,53914],{"class":1142},[159,135194,135195],{"class":165}," gymnasium ",[159,135197,54903],{"class":1142},[159,135199,135200],{"class":165}," gym\n",[159,135202,135203,135205],{"class":161,"line":176},[159,135204,53914],{"class":1142},[159,135206,122601],{"class":165},[159,135208,135209,135211,135213,135215],{"class":161,"line":203},[159,135210,53914],{"class":1142},[159,135212,54900],{"class":165},[159,135214,54903],{"class":1142},[159,135216,54906],{"class":165},[159,135218,135219,135221,135223,135225],{"class":161,"line":223},[159,135220,54258],{"class":1142},[159,135222,135195],{"class":165},[159,135224,53914],{"class":1142},[159,135226,135227],{"class":165}," spaces\n",[159,135229,135230],{"class":161,"line":233},[159,135231,590],{"emptyLinePlaceholder":589},[159,135233,135234],{"class":161,"line":239},[159,135235,590],{"emptyLinePlaceholder":589},[159,135237,135238,135240,135242],{"class":161,"line":245},[159,135239,122614],{"class":1146},[159,135241,1150],{"class":1142},[159,135243,122619],{"class":192},[159,135245,135246],{"class":161,"line":251},[159,135247,135248],{"class":192},"\u003Cmujoco model=\"gym_reacher\">\n",[159,135250,135251],{"class":161,"line":261},[159,135252,133038],{"class":192},[159,135254,135255],{"class":161,"line":603},[159,135256,590],{"emptyLinePlaceholder":589},[159,135258,135259],{"class":161,"line":621},[159,135260,122638],{"class":192},[159,135262,135263],{"class":161,"line":634},[159,135264,133056],{"class":192},[159,135266,135267],{"class":161,"line":640},[159,135268,590],{"emptyLinePlaceholder":589},[159,135270,135271],{"class":161,"line":1075},[159,135272,133065],{"class":192},[159,135274,135275],{"class":161,"line":1081},[159,135276,133070],{"class":192},[159,135278,135279],{"class":161,"line":1091},[159,135280,135281],{"class":192},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[159,135283,135284],{"class":161,"line":1100},[159,135285,590],{"emptyLinePlaceholder":589},[159,135287,135288],{"class":161,"line":1123},[159,135289,133084],{"class":192},[159,135291,135292],{"class":161,"line":1132},[159,135293,133089],{"class":192},[159,135295,135296],{"class":161,"line":1139},[159,135297,135298],{"class":192},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[159,135300,135301],{"class":161,"line":1168},[159,135302,133099],{"class":192},[159,135304,135305],{"class":161,"line":1174},[159,135306,127738],{"class":192},[159,135308,135309],{"class":161,"line":1180},[159,135310,122667],{"class":192},[159,135312,135313],{"class":161,"line":1194},[159,135314,122672],{"class":192},[159,135316,135317],{"class":161,"line":1200},[159,135318,590],{"emptyLinePlaceholder":589},[159,135320,135321],{"class":161,"line":1221},[159,135322,127755],{"class":192},[159,135324,135325],{"class":161,"line":1230},[159,135326,133124],{"class":192},[159,135328,135329],{"class":161,"line":1247},[159,135330,133129],{"class":192},[159,135332,135333],{"class":161,"line":1265},[159,135334,127765],{"class":192},[159,135336,135337],{"class":161,"line":1277},[159,135338,122677],{"class":192},[159,135340,135341],{"class":161,"line":1283},[159,135342,116998],{"class":192},[159,135344,135345],{"class":161,"line":1294},[159,135346,590],{"emptyLinePlaceholder":589},[159,135348,135349],{"class":161,"line":1305},[159,135350,590],{"emptyLinePlaceholder":589},[159,135352,135353,135355,135358,135360,135362,135364,135367],{"class":161,"line":1311},[159,135354,38260],{"class":1142},[159,135356,135357],{"class":185}," ReacherEnv",[159,135359,1159],{"class":165},[159,135361,134840],{"class":185},[159,135363,9952],{"class":165},[159,135365,135366],{"class":185},"Env",[159,135368,54307],{"class":165},[159,135370,135371,135374,135376,135378,135381],{"class":161,"line":1322},[159,135372,135373],{"class":165},"    metadata ",[159,135375,189],{"class":1142},[159,135377,28066],{"class":165},[159,135379,135380],{"class":192},"\"render_modes\"",[159,135382,135383],{"class":165},": []}\n",[159,135385,135386],{"class":161,"line":1327},[159,135387,590],{"emptyLinePlaceholder":589},[159,135389,135390,135392,135394,135397,135399],{"class":161,"line":1336},[159,135391,54322],{"class":1142},[159,135393,54325],{"class":1146},[159,135395,135396],{"class":165},"(self) -> ",[159,135398,116986],{"class":1146},[159,135400,27364],{"class":165},[159,135402,135403,135405,135407,135409],{"class":161,"line":1345},[159,135404,54338],{"class":1146},[159,135406,40788],{"class":165},[159,135408,54349],{"class":1146},[159,135410,5158],{"class":165},[159,135412,135413,135415,135418,135420,135422,135424],{"class":161,"line":1350},[159,135414,54365],{"class":1146},[159,135416,135417],{"class":165},".model ",[159,135419,189],{"class":1142},[159,135421,122712],{"class":165},[159,135423,122614],{"class":1146},[159,135425,1165],{"class":165},[159,135427,135428,135430,135433,135435,135438,135440],{"class":161,"line":1764},[159,135429,54365],{"class":1146},[159,135431,135432],{"class":165},".data ",[159,135434,189],{"class":1142},[159,135436,135437],{"class":165}," mujoco.MjData(",[159,135439,54344],{"class":1146},[159,135441,135442],{"class":165},".model)\n",[159,135444,135445],{"class":161,"line":1769},[159,135446,590],{"emptyLinePlaceholder":589},[159,135448,135449,135451,135454,135456,135459,135461,135464,135466],{"class":161,"line":1777},[159,135450,54365],{"class":1146},[159,135452,135453],{"class":165},".tip_site_id ",[159,135455,189],{"class":1142},[159,135457,135458],{"class":165}," mujoco.mj_name2id(",[159,135460,54344],{"class":1146},[159,135462,135463],{"class":165},".model, mujoco.mjtObj.mjOBJ_SITE, ",[159,135465,132836],{"class":192},[159,135467,1165],{"class":165},[159,135469,135470,135472,135475,135477,135479,135481,135483,135485],{"class":161,"line":1788},[159,135471,54365],{"class":1146},[159,135473,135474],{"class":165},".target_site_id ",[159,135476,189],{"class":1142},[159,135478,135458],{"class":165},[159,135480,54344],{"class":1146},[159,135482,135463],{"class":165},[159,135484,133259],{"class":192},[159,135486,1165],{"class":165},[159,135488,135489,135491,135493,135495,135497,135499,135502,135504,135506,135508,135510],{"class":161,"line":1802},[159,135490,17003],{"class":1142},[159,135492,62268],{"class":1146},[159,135494,135453],{"class":165},[159,135496,166],{"class":1142},[159,135498,1259],{"class":1146},[159,135500,135501],{"class":1142}," or",[159,135503,62268],{"class":1146},[159,135505,135474],{"class":165},[159,135507,166],{"class":1142},[159,135509,1259],{"class":1146},[159,135511,27364],{"class":165},[159,135513,135514,135517,135519,135521,135524],{"class":161,"line":1815},[159,135515,135516],{"class":1142},"            raise",[159,135518,124735],{"class":1146},[159,135520,1159],{"class":165},[159,135522,135523],{"class":192},"\"required sites not found\"",[159,135525,1165],{"class":165},[159,135527,135528],{"class":161,"line":1828},[159,135529,590],{"emptyLinePlaceholder":589},[159,135531,135532,135534,135536,135538],{"class":161,"line":1841},[159,135533,54365],{"class":1146},[159,135535,135167],{"class":165},[159,135537,189],{"class":1142},[159,135539,1191],{"class":1146},[159,135541,135542,135544,135547,135549],{"class":161,"line":1852},[159,135543,54365],{"class":1146},[159,135545,135546],{"class":165},".max_steps ",[159,135548,189],{"class":1142},[159,135550,135551],{"class":1146}," 200\n",[159,135553,135554,135556,135558,135560],{"class":161,"line":1866},[159,135555,54365],{"class":1146},[159,135557,135006],{"class":165},[159,135559,189],{"class":1142},[159,135561,3785],{"class":1146},[159,135563,135564],{"class":161,"line":1879},[159,135565,590],{"emptyLinePlaceholder":589},[159,135567,135568,135570,135572,135574,135576,135578,135580,135582,135584,135586,135588,135590,135592,135594,135596,135598,135600,135602,135604,135606],{"class":161,"line":1884},[159,135569,54365],{"class":1146},[159,135571,135054],{"class":165},[159,135573,189],{"class":1142},[159,135575,135059],{"class":165},[159,135577,135062],{"class":8765},[159,135579,135065],{"class":1142},[159,135581,123703],{"class":1146},[159,135583,1939],{"class":165},[159,135585,135072],{"class":8765},[159,135587,189],{"class":1142},[159,135589,123703],{"class":1146},[159,135591,1939],{"class":165},[159,135593,117263],{"class":8765},[159,135595,189],{"class":1142},[159,135597,1159],{"class":165},[159,135599,11034],{"class":1146},[159,135601,135089],{"class":165},[159,135603,114800],{"class":8765},[159,135605,189],{"class":1142},[159,135607,135096],{"class":165},[159,135609,135610,135612,135614,135616,135618,135620,135622,135624,135626,135628,135630,135632,135634,135636,135638,135640,135642,135644],{"class":161,"line":1889},[159,135611,54365],{"class":1146},[159,135613,135115],{"class":165},[159,135615,189],{"class":1142},[159,135617,135059],{"class":165},[159,135619,135062],{"class":8765},[159,135621,135065],{"class":1142},[159,135623,135126],{"class":165},[159,135625,135072],{"class":8765},[159,135627,189],{"class":1142},[159,135629,135126],{"class":165},[159,135631,117263],{"class":8765},[159,135633,189],{"class":1142},[159,135635,1159],{"class":165},[159,135637,1964],{"class":1146},[159,135639,135089],{"class":165},[159,135641,114800],{"class":8765},[159,135643,189],{"class":1142},[159,135645,135096],{"class":165},[159,135647,135648],{"class":161,"line":1899},[159,135649,590],{"emptyLinePlaceholder":589},[159,135651,135652,135654,135657],{"class":161,"line":1912},[159,135653,54322],{"class":1142},[159,135655,135656],{"class":185}," _get_obs",[159,135658,135659],{"class":165},"(self) -> np.ndarray:\n",[159,135661,135662,135664,135666,135668,135671,135673],{"class":161,"line":1925},[159,135663,133437],{"class":165},[159,135665,189],{"class":1142},[159,135667,62268],{"class":1146},[159,135669,135670],{"class":165},".data.site_xpos[",[159,135672,54344],{"class":1146},[159,135674,135675],{"class":165},".tip_site_id].copy()\n",[159,135677,135678,135680,135682,135684,135686,135688],{"class":161,"line":1956},[159,135679,133450],{"class":165},[159,135681,189],{"class":1142},[159,135683,62268],{"class":1146},[159,135685,135670],{"class":165},[159,135687,54344],{"class":1146},[159,135689,135690],{"class":165},".target_site_id].copy()\n",[159,135692,135693,135695,135697,135700,135702,135705,135707],{"class":161,"line":1971},[159,135694,131482],{"class":165},[159,135696,189],{"class":1142},[159,135698,135699],{"class":165}," np.concatenate([",[159,135701,54344],{"class":1146},[159,135703,135704],{"class":165},".data.qpos.copy(), ",[159,135706,54344],{"class":1146},[159,135708,135709],{"class":165},".data.qvel.copy(), tip, target])\n",[159,135711,135712,135714],{"class":161,"line":1976},[159,135713,21176],{"class":1142},[159,135715,135716],{"class":165}," obs.astype(np.float32)\n",[159,135718,135719],{"class":161,"line":1981},[159,135720,590],{"emptyLinePlaceholder":589},[159,135722,135723,135725,135728,135730,135732],{"class":161,"line":1989},[159,135724,54322],{"class":1142},[159,135726,135727],{"class":185}," _get_reward",[159,135729,135396],{"class":165},[159,135731,23920],{"class":1146},[159,135733,27364],{"class":165},[159,135735,135736,135738,135740,135742,135744,135746],{"class":161,"line":2001},[159,135737,133437],{"class":165},[159,135739,189],{"class":1142},[159,135741,62268],{"class":1146},[159,135743,135670],{"class":165},[159,135745,54344],{"class":1146},[159,135747,135748],{"class":165},".tip_site_id]\n",[159,135750,135751,135753,135755,135757,135759,135761],{"class":161,"line":2006},[159,135752,133450],{"class":165},[159,135754,189],{"class":1142},[159,135756,62268],{"class":1146},[159,135758,135670],{"class":165},[159,135760,54344],{"class":1146},[159,135762,135763],{"class":165},".target_site_id]\n",[159,135765,135766,135769,135771,135773,135775],{"class":161,"line":2015},[159,135767,135768],{"class":165},"        dist ",[159,135770,189],{"class":1142},[159,135772,132901],{"class":165},[159,135774,24376],{"class":1142},[159,135776,132906],{"class":165},[159,135778,135779,135782,135784,135786,135788,135791,135793],{"class":161,"line":2024},[159,135780,135781],{"class":165},"        control_cost ",[159,135783,189],{"class":1142},[159,135785,133337],{"class":1146},[159,135787,30131],{"class":1142},[159,135789,135790],{"class":165}," np.sum(np.square(",[159,135792,54344],{"class":1146},[159,135794,135795],{"class":165},".data.ctrl))\n",[159,135797,135798,135800,135802,135804,135806,135808,135810],{"class":161,"line":2029},[159,135799,21176],{"class":1142},[159,135801,131097],{"class":1146},[159,135803,1159],{"class":165},[159,135805,24376],{"class":1142},[159,135807,132896],{"class":165},[159,135809,24376],{"class":1142},[159,135811,133359],{"class":165},[159,135813,135814],{"class":161,"line":2038},[159,135815,590],{"emptyLinePlaceholder":589},[159,135817,135818,135820,135823,135826,135828,135831,135833,135835,135837,135839,135841,135844,135847,135849,135851,135853,135855],{"class":161,"line":2053},[159,135819,54322],{"class":1142},[159,135821,135822],{"class":185}," reset",[159,135824,135825],{"class":165},"(self, ",[159,135827,4777],{"class":1142},[159,135829,135830],{"class":165},", seed: ",[159,135832,23886],{"class":1146},[159,135834,48633],{"class":1142},[159,135836,62328],{"class":1146},[159,135838,1150],{"class":1142},[159,135840,62328],{"class":1146},[159,135842,135843],{"class":165},", options: ",[159,135845,135846],{"class":1146},"dict",[159,135848,48633],{"class":1142},[159,135850,62328],{"class":1146},[159,135852,1150],{"class":1142},[159,135854,62328],{"class":1146},[159,135856,54307],{"class":165},[159,135858,135859,135861,135864,135867,135869],{"class":161,"line":2070},[159,135860,54338],{"class":1146},[159,135862,135863],{"class":165},"().reset(",[159,135865,135866],{"class":8765},"seed",[159,135868,189],{"class":1142},[159,135870,135871],{"class":165},"seed)\n",[159,135873,135874,135877,135879,135882,135884],{"class":161,"line":2095},[159,135875,135876],{"class":165},"        mujoco.mj_resetData(",[159,135878,54344],{"class":1146},[159,135880,135881],{"class":165},".model, ",[159,135883,54344],{"class":1146},[159,135885,135886],{"class":165},".data)\n",[159,135888,135889],{"class":161,"line":2104},[159,135890,590],{"emptyLinePlaceholder":589},[159,135892,135893,135895,135898,135900,135902,135905,135907,135909,135911,135913,135915,135917,135919,135921,135923,135925,135927],{"class":161,"line":2120},[159,135894,54365],{"class":1146},[159,135896,135897],{"class":165},".data.qpos[:] ",[159,135899,189],{"class":1142},[159,135901,62268],{"class":1146},[159,135903,135904],{"class":165},".np_random.uniform(",[159,135906,135062],{"class":8765},[159,135908,135065],{"class":1142},[159,135910,107510],{"class":1146},[159,135912,1939],{"class":165},[159,135914,135072],{"class":8765},[159,135916,189],{"class":1142},[159,135918,107510],{"class":1146},[159,135920,1939],{"class":165},[159,135922,55015],{"class":8765},[159,135924,189],{"class":1142},[159,135926,54344],{"class":1146},[159,135928,135929],{"class":165},".model.nq)\n",[159,135931,135932,135934,135937,135939],{"class":161,"line":2134},[159,135933,54365],{"class":1146},[159,135935,135936],{"class":165},".data.qvel[:] ",[159,135938,189],{"class":1142},[159,135940,126061],{"class":1146},[159,135942,135943,135946,135948,135950,135952],{"class":161,"line":2143},[159,135944,135945],{"class":165},"        mujoco.mj_forward(",[159,135947,54344],{"class":1146},[159,135949,135881],{"class":165},[159,135951,54344],{"class":1146},[159,135953,135886],{"class":165},[159,135955,135956],{"class":161,"line":2165},[159,135957,590],{"emptyLinePlaceholder":589},[159,135959,135960,135962,135964,135966],{"class":161,"line":2178},[159,135961,54365],{"class":1146},[159,135963,135006],{"class":165},[159,135965,189],{"class":1142},[159,135967,3785],{"class":1146},[159,135969,135970,135972,135974],{"class":161,"line":2191},[159,135971,21176],{"class":1142},[159,135973,62268],{"class":1146},[159,135975,135976],{"class":165},"._get_obs(), {}\n",[159,135978,135979],{"class":161,"line":2204},[159,135980,590],{"emptyLinePlaceholder":589},[159,135982,135983,135985,135988],{"class":161,"line":2217},[159,135984,54322],{"class":1142},[159,135986,135987],{"class":185}," step",[159,135989,135990],{"class":165},"(self, action):\n",[159,135992,135993,135995,135997,136000,136002,136004],{"class":161,"line":2230},[159,135994,131522],{"class":165},[159,135996,189],{"class":1142},[159,135998,135999],{"class":165}," np.asarray(action, ",[159,136001,114800],{"class":8765},[159,136003,189],{"class":1142},[159,136005,135096],{"class":165},[159,136007,136008,136010,136012,136014,136016,136019,136021],{"class":161,"line":2243},[159,136009,131522],{"class":165},[159,136011,189],{"class":1142},[159,136013,128747],{"class":165},[159,136015,54344],{"class":1146},[159,136017,136018],{"class":165},".action_space.low, ",[159,136020,54344],{"class":1146},[159,136022,136023],{"class":165},".action_space.high)\n",[159,136025,136026],{"class":161,"line":2256},[159,136027,590],{"emptyLinePlaceholder":589},[159,136029,136030,136032,136035,136037],{"class":161,"line":2266},[159,136031,54365],{"class":1146},[159,136033,136034],{"class":165},".data.ctrl[:] ",[159,136036,189],{"class":1142},[159,136038,128770],{"class":165},[159,136040,136041,136043,136045,136047,136049,136051,136053],{"class":161,"line":2275},[159,136042,27032],{"class":1142},[159,136044,122801],{"class":165},[159,136046,49566],{"class":1142},[159,136048,55961],{"class":1146},[159,136050,1159],{"class":165},[159,136052,54344],{"class":1146},[159,136054,136055],{"class":165},".frame_skip):\n",[159,136057,136058,136061,136063,136065,136067],{"class":161,"line":2284},[159,136059,136060],{"class":165},"            mujoco.mj_step(",[159,136062,54344],{"class":1146},[159,136064,135881],{"class":165},[159,136066,54344],{"class":1146},[159,136068,135886],{"class":165},[159,136070,136071],{"class":161,"line":2293},[159,136072,590],{"emptyLinePlaceholder":589},[159,136074,136075,136077,136079,136081],{"class":161,"line":2306},[159,136076,54365],{"class":1146},[159,136078,135006],{"class":165},[159,136080,33073],{"class":1142},[159,136082,2570],{"class":1146},[159,136084,136085],{"class":161,"line":2330},[159,136086,590],{"emptyLinePlaceholder":589},[159,136088,136089,136091,136093,136095],{"class":161,"line":2350},[159,136090,131482],{"class":165},[159,136092,189],{"class":1142},[159,136094,62268],{"class":1146},[159,136096,136097],{"class":165},"._get_obs()\n",[159,136099,136100,136102,136104,136106],{"class":161,"line":2370},[159,136101,131587],{"class":165},[159,136103,189],{"class":1142},[159,136105,62268],{"class":1146},[159,136107,136108],{"class":165},"._get_reward()\n",[159,136110,136111],{"class":161,"line":2390},[159,136112,590],{"emptyLinePlaceholder":589},[159,136114,136115,136117,136119,136121,136123,136125],{"class":161,"line":2410},[159,136116,133437],{"class":165},[159,136118,189],{"class":1142},[159,136120,62268],{"class":1146},[159,136122,135670],{"class":165},[159,136124,54344],{"class":1146},[159,136126,135748],{"class":165},[159,136128,136129,136131,136133,136135,136137,136139],{"class":161,"line":2430},[159,136130,133450],{"class":165},[159,136132,189],{"class":1142},[159,136134,62268],{"class":1146},[159,136136,135670],{"class":165},[159,136138,54344],{"class":1146},[159,136140,135763],{"class":165},[159,136142,136143,136145,136147,136149,136152,136154],{"class":161,"line":2450},[159,136144,135768],{"class":165},[159,136146,189],{"class":1142},[159,136148,131097],{"class":1146},[159,136150,136151],{"class":165},"(np.linalg.norm(tip ",[159,136153,24376],{"class":1142},[159,136155,136156],{"class":165}," target))\n",[159,136158,136159],{"class":161,"line":2471},[159,136160,590],{"emptyLinePlaceholder":589},[159,136162,136163,136166,136168,136170,136172],{"class":161,"line":2477},[159,136164,136165],{"class":165},"        terminated ",[159,136167,189],{"class":1142},[159,136169,134989],{"class":165},[159,136171,166],{"class":1142},[159,136173,134994],{"class":1146},[159,136175,136176,136179,136181,136183,136185,136187,136189],{"class":161,"line":2498},[159,136177,136178],{"class":165},"        truncated ",[159,136180,189],{"class":1142},[159,136182,62268],{"class":1146},[159,136184,135006],{"class":165},[159,136186,3822],{"class":1142},[159,136188,62268],{"class":1146},[159,136190,135013],{"class":165},[159,136192,136193,136196,136198,136200,136203],{"class":161,"line":2518},[159,136194,136195],{"class":165},"        info ",[159,136197,189],{"class":1142},[159,136199,28066],{"class":165},[159,136201,136202],{"class":192},"\"distance\"",[159,136204,136205],{"class":165},": dist}\n",[159,136207,136208,136210],{"class":161,"line":2539},[159,136209,21176],{"class":1142},[159,136211,136212],{"class":165}," obs, reward, terminated, truncated, info\n",[159,136214,136215],{"class":161,"line":2561},[159,136216,590],{"emptyLinePlaceholder":589},[159,136218,136219],{"class":161,"line":2573},[159,136220,590],{"emptyLinePlaceholder":589},[159,136222,136223,136225,136227,136229,136231],{"class":161,"line":2591},[159,136224,55465],{"class":1142},[159,136226,25625],{"class":185},[159,136228,122698],{"class":165},[159,136230,116986],{"class":1146},[159,136232,27364],{"class":165},[159,136234,136235,136238,136240],{"class":161,"line":2602},[159,136236,136237],{"class":165},"    env ",[159,136239,189],{"class":1142},[159,136241,136242],{"class":165}," ReacherEnv()\n",[159,136244,136245,136248,136250,136253,136255,136257,136259],{"class":161,"line":2613},[159,136246,136247],{"class":165},"    obs, info ",[159,136249,189],{"class":1142},[159,136251,136252],{"class":165}," env.reset(",[159,136254,135866],{"class":8765},[159,136256,189],{"class":1142},[159,136258,1489],{"class":1146},[159,136260,1165],{"class":165},[159,136262,136263,136265,136267,136270],{"class":161,"line":2624},[159,136264,54819],{"class":1146},[159,136266,1159],{"class":165},[159,136268,136269],{"class":192},"\"initial obs shape:\"",[159,136271,136272],{"class":165},", obs.shape)\n",[159,136274,136275,136277,136279,136282],{"class":161,"line":2630},[159,136276,54819],{"class":1146},[159,136278,1159],{"class":165},[159,136280,136281],{"class":192},"\"initial info:\"",[159,136283,136284],{"class":165},", info)\n",[159,136286,136287],{"class":161,"line":2636},[159,136288,590],{"emptyLinePlaceholder":589},[159,136290,136291,136293,136295],{"class":161,"line":2642},[159,136292,131453],{"class":165},[159,136294,189],{"class":1142},[159,136296,126061],{"class":1146},[159,136298,136299,136301,136303,136305,136307,136309,136311],{"class":161,"line":2648},[159,136300,11677],{"class":1142},[159,136302,55135],{"class":165},[159,136304,49566],{"class":1142},[159,136306,55961],{"class":1146},[159,136308,1159],{"class":165},[159,136310,1739],{"class":1146},[159,136312,54307],{"class":165},[159,136314,136315,136317,136319],{"class":161,"line":2674},[159,136316,131522],{"class":165},[159,136318,189],{"class":1142},[159,136320,136321],{"class":165}," env.action_space.sample()\n",[159,136323,136324,136327,136329],{"class":161,"line":2689},[159,136325,136326],{"class":165},"        obs, reward, terminated, truncated, info ",[159,136328,189],{"class":1142},[159,136330,134715],{"class":165},[159,136332,136333,136335,136337],{"class":161,"line":2694},[159,136334,131597],{"class":165},[159,136336,33073],{"class":1142},[159,136338,131602],{"class":165},[159,136340,136341,136343,136345,136347,136349,136352,136354,136356,136359,136361,136363,136366,136368,136370,136373,136375,136377,136379],{"class":161,"line":2721},[159,136342,55969],{"class":1146},[159,136344,1159],{"class":165},[159,136346,131631],{"class":192},[159,136348,131634],{"class":165},[159,136350,136351],{"class":192},"\"reward:\"",[159,136353,1939],{"class":165},[159,136355,55536],{"class":1146},[159,136357,136358],{"class":165},"(reward, ",[159,136360,23949],{"class":1146},[159,136362,131645],{"class":165},[159,136364,136365],{"class":192},"\"distance:\"",[159,136367,1939],{"class":165},[159,136369,55536],{"class":1146},[159,136371,136372],{"class":165},"(info[",[159,136374,136202],{"class":192},[159,136376,133502],{"class":165},[159,136378,23949],{"class":1146},[159,136380,18787],{"class":165},[159,136382,136383,136385,136388,136391],{"class":161,"line":2726},[159,136384,17003],{"class":1142},[159,136386,136387],{"class":165}," terminated ",[159,136389,136390],{"class":1142},"or",[159,136392,136393],{"class":165}," truncated:\n",[159,136395,136396],{"class":161,"line":2735},[159,136397,136398],{"class":1142},"            break\n",[159,136400,136401],{"class":161,"line":2744},[159,136402,590],{"emptyLinePlaceholder":589},[159,136404,136405,136407,136409,136411,136413,136415,136417,136419],{"class":161,"line":2753},[159,136406,54819],{"class":1146},[159,136408,1159],{"class":165},[159,136410,131676],{"class":192},[159,136412,1939],{"class":165},[159,136414,55536],{"class":1146},[159,136416,131683],{"class":165},[159,136418,23949],{"class":1146},[159,136420,18787],{"class":165},[159,136422,136423],{"class":161,"line":2758},[159,136424,590],{"emptyLinePlaceholder":589},[159,136426,136427],{"class":161,"line":3959},[159,136428,590],{"emptyLinePlaceholder":589},[159,136430,136431,136433,136435,136437,136439],{"class":161,"line":3968},[159,136432,18445],{"class":1142},[159,136434,54740],{"class":1146},[159,136436,122859],{"class":1142},[159,136438,122862],{"class":192},[159,136440,27364],{"class":165},[159,136442,136443],{"class":161,"line":3977},[159,136444,122869],{"class":165},[14,136446,124870],{},[151,136448,136450],{"className":47347,"code":136449,"language":47349,"meta":25,"style":25},"touch ch8_gym_env.py\n",[49,136451,136452],{"__ignoreMap":25},[159,136453,136454,136456],{"class":161,"line":162},[159,136455,122583],{"class":185},[159,136457,136458],{"class":192}," ch8_gym_env.py\n",[14,136460,131744],{},[151,136462,136464],{"className":47347,"code":136463,"language":47349,"meta":25,"style":25},"python ch8_gym_env.py\n",[49,136465,136466],{"__ignoreMap":25},[159,136467,136468,136470],{"class":161,"line":162},[159,136469,53902],{"class":185},[159,136471,136458],{"class":192},[42,136473,122872],{"id":122872},[14,136475,136476],{},"继承 Gymnasium 环境：",[151,136478,136480],{"className":53900,"code":136479,"language":53902,"meta":25,"style":25},"class ReacherEnv(gym.Env):\n",[49,136481,136482],{"__ignoreMap":25},[159,136483,136484,136486,136488,136490,136492,136494,136496],{"class":161,"line":162},[159,136485,38260],{"class":1142},[159,136487,135357],{"class":185},[159,136489,1159],{"class":165},[159,136491,134840],{"class":185},[159,136493,9952],{"class":165},[159,136495,135366],{"class":185},[159,136497,54307],{"class":165},[14,136499,136500],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,136502,136503],{},"初始化模型：",[151,136505,136507],{"className":53900,"code":136506,"language":53902,"meta":25,"style":25},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[49,136508,136509,136523],{"__ignoreMap":25},[159,136510,136511,136513,136515,136517,136519,136521],{"class":161,"line":162},[159,136512,54344],{"class":1146},[159,136514,135417],{"class":165},[159,136516,189],{"class":1142},[159,136518,122712],{"class":165},[159,136520,122614],{"class":1146},[159,136522,1165],{"class":165},[159,136524,136525,136527,136529,136531,136533,136535],{"class":161,"line":176},[159,136526,54344],{"class":1146},[159,136528,135432],{"class":165},[159,136530,189],{"class":1142},[159,136532,135437],{"class":165},[159,136534,54344],{"class":1146},[159,136536,135442],{"class":165},[14,136538,136539,136540,136542],{},"这和前面章节一样，只是现在放到了类的 ",[49,136541,54349],{}," 里。",[14,136544,136545],{},"缓存 site ID：",[151,136547,136549],{"className":53900,"code":136548,"language":53902,"meta":25,"style":25},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[49,136550,136551,136565],{"__ignoreMap":25},[159,136552,136553,136555,136557,136559,136561,136563],{"class":161,"line":162},[159,136554,54344],{"class":1146},[159,136556,135453],{"class":165},[159,136558,189],{"class":1142},[159,136560,135458],{"class":165},[159,136562,110854],{"class":1146},[159,136564,1165],{"class":165},[159,136566,136567,136569,136571,136573,136575,136577],{"class":161,"line":176},[159,136568,54344],{"class":1146},[159,136570,135474],{"class":165},[159,136572,189],{"class":1142},[159,136574,135458],{"class":165},[159,136576,110854],{"class":1146},[159,136578,1165],{"class":165},[14,136580,136581],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,136583,136584],{},"reset：",[151,136586,136588],{"className":53900,"code":136587,"language":53902,"meta":25,"style":25},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[49,136589,136590],{"__ignoreMap":25},[159,136591,136592,136594,136596,136598,136600,136602,136604,136606,136608,136610,136612,136614,136616,136618,136620,136622,136624],{"class":161,"line":162},[159,136593,55465],{"class":1142},[159,136595,135822],{"class":185},[159,136597,135825],{"class":165},[159,136599,4777],{"class":1142},[159,136601,135830],{"class":165},[159,136603,23886],{"class":1146},[159,136605,48633],{"class":1142},[159,136607,62328],{"class":1146},[159,136609,1150],{"class":1142},[159,136611,62328],{"class":1146},[159,136613,135843],{"class":165},[159,136615,135846],{"class":1146},[159,136617,48633],{"class":1142},[159,136619,62328],{"class":1146},[159,136621,1150],{"class":1142},[159,136623,62328],{"class":1146},[159,136625,54307],{"class":165},[14,136627,136628,136630],{},[49,136629,17139],{}," 做四件事：",[134,136632,136633,136636,136639,136642],{},[106,136634,136635],{},"设置随机种子。",[106,136637,136638],{},"重置 MuJoCo data。",[106,136640,136641],{},"随机初始化关节角。",[106,136643,136644],{},"返回初始观测和 info。",[14,136646,136647],{},"step：",[151,136649,136651],{"className":53900,"code":136650,"language":53902,"meta":25,"style":25},"def step(self, action):\n",[49,136652,136653],{"__ignoreMap":25},[159,136654,136655,136657,136659],{"class":161,"line":162},[159,136656,55465],{"class":1142},[159,136658,135987],{"class":185},[159,136660,135990],{"class":165},[14,136662,136663,136665],{},[49,136664,128434],{}," 做六件事：",[134,136667,136668,136671,136677,136680,136683,136686],{},[106,136669,136670],{},"检查并裁剪 action。",[106,136672,136673,136674,51907],{},"写入 ",[49,136675,136676],{},"self.data.ctrl",[106,136678,136679],{},"连续推进若干个 MuJoCo 物理步。",[106,136681,136682],{},"计算新观测。",[106,136684,136685],{},"计算奖励和结束条件。",[106,136687,136688],{},"返回 Gymnasium 标准五元组。",[42,136690,123008],{"id":123008},[151,136692,136694],{"className":53900,"code":136693,"language":53902,"meta":25,"style":25},"import gymnasium as gym\n",[49,136695,136696],{"__ignoreMap":25},[159,136697,136698,136700,136702,136704],{"class":161,"line":162},[159,136699,53914],{"class":1142},[159,136701,135195],{"class":165},[159,136703,54903],{"class":1142},[159,136705,135200],{"class":165},[14,136707,136708,136709,136711,136712,136715],{},"导入 Gymnasium，并起别名 ",[49,136710,134840],{},"。后面写 ",[49,136713,136714],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[151,136717,136719],{"className":53900,"code":136718,"language":53902,"meta":25,"style":25},"from gymnasium import spaces\n",[49,136720,136721],{"__ignoreMap":25},[159,136722,136723,136725,136727,136729],{"class":161,"line":162},[159,136724,54258],{"class":1142},[159,136726,135195],{"class":165},[159,136728,53914],{"class":1142},[159,136730,135227],{"class":165},[14,136732,136733,136734,136737],{},"导入空间定义工具。",[49,136735,136736],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[151,136739,136740],{"className":53900,"code":136479,"language":53902,"meta":25,"style":25},[49,136741,136742],{"__ignoreMap":25},[159,136743,136744,136746,136748,136750,136752,136754,136756],{"class":161,"line":162},[159,136745,38260],{"class":1142},[159,136747,135357],{"class":185},[159,136749,1159],{"class":165},[159,136751,134840],{"class":185},[159,136753,9952],{"class":165},[159,136755,135366],{"class":185},[159,136757,54307],{"class":165},[14,136759,136760,136761,136764,136765,136767,136768,122318,136770,136772],{},"定义一个类，名字叫 ",[49,136762,136763],{},"ReacherEnv","。括号里的 ",[49,136766,136714],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[49,136769,17139],{},[49,136771,128434],{}," 这两个核心方法。",[151,136774,136776],{"className":53900,"code":136775,"language":53902,"meta":25,"style":25},"metadata = {\"render_modes\": []}\n",[49,136777,136778],{"__ignoreMap":25},[159,136779,136780,136783,136785,136787,136789],{"class":161,"line":162},[159,136781,136782],{"class":165},"metadata ",[159,136784,189],{"class":1142},[159,136786,28066],{"class":165},[159,136788,135380],{"class":192},[159,136790,135383],{"class":165},[14,136792,136793],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[151,136795,136797],{"className":53900,"code":136796,"language":53902,"meta":25,"style":25},"def __init__(self) -> None:\n",[49,136798,136799],{"__ignoreMap":25},[159,136800,136801,136803,136805,136807,136809],{"class":161,"line":162},[159,136802,55465],{"class":1142},[159,136804,54325],{"class":1146},[159,136806,135396],{"class":165},[159,136808,116986],{"class":1146},[159,136810,27364],{"class":165},[14,136812,136813,136815,136816,51907],{},[49,136814,54349],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[49,136817,136818],{},"env = ReacherEnv()",[151,136820,136822],{"className":53900,"code":136821,"language":53902,"meta":25,"style":25},"super().__init__()\n",[49,136823,136824],{"__ignoreMap":25},[159,136825,136826,136829,136831,136833],{"class":161,"line":162},[159,136827,136828],{"class":1146},"super",[159,136830,40788],{"class":165},[159,136832,54349],{"class":1146},[159,136834,5158],{"class":165},[14,136836,136837,136838,136840],{},"调用父类 ",[49,136839,136714],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[151,136842,136843],{"className":53900,"code":136506,"language":53902,"meta":25,"style":25},[49,136844,136845,136859],{"__ignoreMap":25},[159,136846,136847,136849,136851,136853,136855,136857],{"class":161,"line":162},[159,136848,54344],{"class":1146},[159,136850,135417],{"class":165},[159,136852,189],{"class":1142},[159,136854,122712],{"class":165},[159,136856,122614],{"class":1146},[159,136858,1165],{"class":165},[159,136860,136861,136863,136865,136867,136869,136871],{"class":161,"line":176},[159,136862,54344],{"class":1146},[159,136864,135432],{"class":165},[159,136866,189],{"class":1142},[159,136868,135437],{"class":165},[159,136870,54344],{"class":1146},[159,136872,135442],{"class":165},[14,136874,136875,136876,136878,136879,122318,136882,136885],{},"把 MuJoCo 模型和状态保存到 ",[49,136877,54344],{}," 上。",[49,136880,136881],{},"self.model",[49,136883,136884],{},"self.data"," 表示这个环境对象自己的模型和状态。",[151,136887,136888],{"className":53900,"code":136548,"language":53902,"meta":25,"style":25},[49,136889,136890,136904],{"__ignoreMap":25},[159,136891,136892,136894,136896,136898,136900,136902],{"class":161,"line":162},[159,136893,54344],{"class":1146},[159,136895,135453],{"class":165},[159,136897,189],{"class":1142},[159,136899,135458],{"class":165},[159,136901,110854],{"class":1146},[159,136903,1165],{"class":165},[159,136905,136906,136908,136910,136912,136914,136916],{"class":161,"line":176},[159,136907,54344],{"class":1146},[159,136909,135474],{"class":165},[159,136911,189],{"class":1142},[159,136913,135458],{"class":165},[159,136915,110854],{"class":1146},[159,136917,1165],{"class":165},[14,136919,136920,136921,122318,136924,136927],{},"提前查好 tip 和 target 的 site ID。这样 ",[49,136922,136923],{},"_get_obs",[49,136925,136926],{},"_get_reward"," 里就不用每次按名字查找。",[151,136929,136931],{"className":53900,"code":136930,"language":53902,"meta":25,"style":25},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[49,136932,136933,136943,136953],{"__ignoreMap":25},[159,136934,136935,136937,136939,136941],{"class":161,"line":162},[159,136936,54344],{"class":1146},[159,136938,135167],{"class":165},[159,136940,189],{"class":1142},[159,136942,1191],{"class":1146},[159,136944,136945,136947,136949,136951],{"class":161,"line":176},[159,136946,54344],{"class":1146},[159,136948,135546],{"class":165},[159,136950,189],{"class":1142},[159,136952,135551],{"class":1146},[159,136954,136955,136957,136959,136961],{"class":161,"line":203},[159,136956,54344],{"class":1146},[159,136958,135006],{"class":165},[159,136960,189],{"class":1142},[159,136962,3785],{"class":1146},[14,136964,136965,136968,136969,136972,136973,136976],{},[49,136966,136967],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[49,136970,136971],{},"max_steps"," 是一个 episode 最多运行多少步。",[49,136974,136975],{},"steps"," 记录当前 episode 已经走了多少步。",[151,136978,136979],{"className":53900,"code":135045,"language":53902,"meta":25,"style":25},[49,136980,136981],{"__ignoreMap":25},[159,136982,136983,136985,136987,136989,136991,136993,136995,136997,136999,137001,137003,137005,137007,137009,137011,137013,137015,137017,137019,137021],{"class":161,"line":162},[159,136984,54344],{"class":1146},[159,136986,135054],{"class":165},[159,136988,189],{"class":1142},[159,136990,135059],{"class":165},[159,136992,135062],{"class":8765},[159,136994,135065],{"class":1142},[159,136996,123703],{"class":1146},[159,136998,1939],{"class":165},[159,137000,135072],{"class":8765},[159,137002,189],{"class":1142},[159,137004,123703],{"class":1146},[159,137006,1939],{"class":165},[159,137008,117263],{"class":8765},[159,137010,189],{"class":1142},[159,137012,1159],{"class":165},[159,137014,11034],{"class":1146},[159,137016,135089],{"class":165},[159,137018,114800],{"class":8765},[159,137020,189],{"class":1142},[159,137022,135096],{"class":165},[14,137024,137025,137026,137029,137030,122318,137033,137036],{},"定义动作空间。",[49,137027,137028],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[49,137031,137032],{},"low=-1.0",[49,137034,137035],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[151,137038,137039],{"className":53900,"code":135106,"language":53902,"meta":25,"style":25},[49,137040,137041],{"__ignoreMap":25},[159,137042,137043,137045,137047,137049,137051,137053,137055,137057,137059,137061,137063,137065,137067,137069,137071,137073,137075,137077],{"class":161,"line":162},[159,137044,54344],{"class":1146},[159,137046,135115],{"class":165},[159,137048,189],{"class":1142},[159,137050,135059],{"class":165},[159,137052,135062],{"class":8765},[159,137054,135065],{"class":1142},[159,137056,135126],{"class":165},[159,137058,135072],{"class":8765},[159,137060,189],{"class":1142},[159,137062,135126],{"class":165},[159,137064,117263],{"class":8765},[159,137066,189],{"class":1142},[159,137068,1159],{"class":165},[159,137070,1964],{"class":1146},[159,137072,135089],{"class":165},[159,137074,114800],{"class":8765},[159,137076,189],{"class":1142},[159,137078,135096],{"class":165},[14,137080,137081,137082,137085,137086,137089],{},"定义观测空间。",[49,137083,137084],{},"shape=(10,)"," 表示观测是 10 个数。",[49,137087,137088],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[151,137091,137093],{"className":53900,"code":137092,"language":53902,"meta":25,"style":25},"def _get_obs(self) -> np.ndarray:\n",[49,137094,137095],{"__ignoreMap":25},[159,137096,137097,137099,137101],{"class":161,"line":162},[159,137098,55465],{"class":1142},[159,137100,135656],{"class":185},[159,137102,135659],{"class":165},[14,137104,137105,137106,137108],{},"定义内部函数，用来生成观测。函数名前面的 ",[49,137107,24807],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[151,137110,137112],{"className":53900,"code":137111,"language":53902,"meta":25,"style":25},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[49,137113,137114,137128],{"__ignoreMap":25},[159,137115,137116,137118,137120,137122,137124,137126],{"class":161,"line":162},[159,137117,132868],{"class":165},[159,137119,189],{"class":1142},[159,137121,62268],{"class":1146},[159,137123,135670],{"class":165},[159,137125,54344],{"class":1146},[159,137127,135675],{"class":165},[159,137129,137130,137132,137134,137136,137138,137140],{"class":161,"line":176},[159,137131,132878],{"class":165},[159,137133,189],{"class":1142},[159,137135,62268],{"class":1146},[159,137137,135670],{"class":165},[159,137139,54344],{"class":1146},[159,137141,135690],{"class":165},[14,137143,137144],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[151,137146,137148],{"className":53900,"code":137147,"language":53902,"meta":25,"style":25},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[49,137149,137150,137166],{"__ignoreMap":25},[159,137151,137152,137154,137156,137158,137160,137162,137164],{"class":161,"line":162},[159,137153,132154],{"class":165},[159,137155,189],{"class":1142},[159,137157,135699],{"class":165},[159,137159,54344],{"class":1146},[159,137161,135704],{"class":165},[159,137163,54344],{"class":1146},[159,137165,135709],{"class":165},[159,137167,137168,137170],{"class":161,"line":176},[159,137169,40574],{"class":1142},[159,137171,135716],{"class":165},[14,137173,137174,137175,137178,137179,137181],{},"拼接观测，并转换成 ",[49,137176,137177],{},"float32","。很多强化学习库默认使用 ",[49,137180,137177],{},"，所以这里主动转换。",[151,137183,137184],{"className":53900,"code":136587,"language":53902,"meta":25,"style":25},[49,137185,137186],{"__ignoreMap":25},[159,137187,137188,137190,137192,137194,137196,137198,137200,137202,137204,137206,137208,137210,137212,137214,137216,137218,137220],{"class":161,"line":162},[159,137189,55465],{"class":1142},[159,137191,135822],{"class":185},[159,137193,135825],{"class":165},[159,137195,4777],{"class":1142},[159,137197,135830],{"class":165},[159,137199,23886],{"class":1146},[159,137201,48633],{"class":1142},[159,137203,62328],{"class":1146},[159,137205,1150],{"class":1142},[159,137207,62328],{"class":1146},[159,137209,135843],{"class":165},[159,137211,135846],{"class":1146},[159,137213,48633],{"class":1142},[159,137215,62328],{"class":1146},[159,137217,1150],{"class":1142},[159,137219,62328],{"class":1146},[159,137221,54307],{"class":165},[14,137223,137224,137225,137227,137228,137231],{},"定义 reset。",[49,137226,135866],{}," 用来控制随机数，保证实验可以复现。",[49,137229,137230],{},"options"," 用来接收额外配置，本章暂时不用。",[151,137233,137235],{"className":53900,"code":137234,"language":53902,"meta":25,"style":25},"super().reset(seed=seed)\n",[49,137236,137237],{"__ignoreMap":25},[159,137238,137239,137241,137243,137245,137247],{"class":161,"line":162},[159,137240,136828],{"class":1146},[159,137242,135863],{"class":165},[159,137244,135866],{"class":8765},[159,137246,189],{"class":1142},[159,137248,135871],{"class":165},[14,137250,137251,137252,137255],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[49,137253,137254],{},"self.np_random"," 生成可复现的随机数。",[151,137257,137259],{"className":53900,"code":137258,"language":53902,"meta":25,"style":25},"mujoco.mj_resetData(self.model, self.data)\n",[49,137260,137261],{"__ignoreMap":25},[159,137262,137263,137266,137268,137270,137272],{"class":161,"line":162},[159,137264,137265],{"class":165},"mujoco.mj_resetData(",[159,137267,54344],{"class":1146},[159,137269,135881],{"class":165},[159,137271,54344],{"class":1146},[159,137273,135886],{"class":165},[14,137275,137276],{},"把 MuJoCo 状态重置到默认状态。",[151,137278,137280],{"className":53900,"code":137279,"language":53902,"meta":25,"style":25},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[49,137281,137282],{"__ignoreMap":25},[159,137283,137284,137286,137288,137290,137292,137294,137296,137298,137300,137302,137304,137306,137308,137310,137312,137314,137316],{"class":161,"line":162},[159,137285,54344],{"class":1146},[159,137287,135897],{"class":165},[159,137289,189],{"class":1142},[159,137291,62268],{"class":1146},[159,137293,135904],{"class":165},[159,137295,135062],{"class":8765},[159,137297,135065],{"class":1142},[159,137299,107510],{"class":1146},[159,137301,1939],{"class":165},[159,137303,135072],{"class":8765},[159,137305,189],{"class":1142},[159,137307,107510],{"class":1146},[159,137309,1939],{"class":165},[159,137311,55015],{"class":8765},[159,137313,189],{"class":1142},[159,137315,54344],{"class":1146},[159,137317,135929],{"class":165},[14,137319,136641,137320,137323,137324,137327,137328,137330],{},[49,137321,137322],{},"[:]"," 表示修改整个数组。",[49,137325,137326],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[49,137329,123450],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[151,137332,137334],{"className":53900,"code":137333,"language":53902,"meta":25,"style":25},"self.data.qvel[:] = 0.0\n",[49,137335,137336],{"__ignoreMap":25},[159,137337,137338,137340,137342,137344],{"class":161,"line":162},[159,137339,54344],{"class":1146},[159,137341,135936],{"class":165},[159,137343,189],{"class":1142},[159,137345,126061],{"class":1146},[14,137347,137348],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[151,137350,137352],{"className":53900,"code":137351,"language":53902,"meta":25,"style":25},"self.steps = 0\nreturn self._get_obs(), {}\n",[49,137353,137354,137364],{"__ignoreMap":25},[159,137355,137356,137358,137360,137362],{"class":161,"line":162},[159,137357,54344],{"class":1146},[159,137359,135006],{"class":165},[159,137361,189],{"class":1142},[159,137363,3785],{"class":1146},[159,137365,137366,137368,137370],{"class":161,"line":176},[159,137367,40574],{"class":1142},[159,137369,62268],{"class":1146},[159,137371,135976],{"class":165},[14,137373,137374],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[151,137376,137377],{"className":53900,"code":136650,"language":53902,"meta":25,"style":25},[49,137378,137379],{"__ignoreMap":25},[159,137380,137381,137383,137385],{"class":161,"line":162},[159,137382,55465],{"class":1142},[159,137384,135987],{"class":185},[159,137386,135990],{"class":165},[14,137388,137389],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[151,137391,137393],{"className":53900,"code":137392,"language":53902,"meta":25,"style":25},"action = np.asarray(action, dtype=np.float32)\n",[49,137394,137395],{"__ignoreMap":25},[159,137396,137397,137399,137401,137403,137405,137407],{"class":161,"line":162},[159,137398,128742],{"class":165},[159,137400,189],{"class":1142},[159,137402,135999],{"class":165},[159,137404,114800],{"class":8765},[159,137406,189],{"class":1142},[159,137408,135096],{"class":165},[14,137410,137411,137412,51907],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[49,137413,137177],{},[151,137415,137417],{"className":53900,"code":137416,"language":53902,"meta":25,"style":25},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[49,137418,137419],{"__ignoreMap":25},[159,137420,137421,137423,137425,137427,137429,137431,137433],{"class":161,"line":162},[159,137422,128742],{"class":165},[159,137424,189],{"class":1142},[159,137426,128747],{"class":165},[159,137428,54344],{"class":1146},[159,137430,136018],{"class":165},[159,137432,54344],{"class":1146},[159,137434,136023],{"class":165},[14,137436,137437],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[151,137439,137441],{"className":53900,"code":137440,"language":53902,"meta":25,"style":25},"self.data.ctrl[:] = action\n",[49,137442,137443],{"__ignoreMap":25},[159,137444,137445,137447,137449,137451],{"class":161,"line":162},[159,137446,54344],{"class":1146},[159,137448,136034],{"class":165},[159,137450,189],{"class":1142},[159,137452,128770],{"class":165},[14,137454,137455],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[151,137457,137459],{"className":53900,"code":137458,"language":53902,"meta":25,"style":25},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[49,137460,137461,137477],{"__ignoreMap":25},[159,137462,137463,137465,137467,137469,137471,137473,137475],{"class":161,"line":162},[159,137464,26657],{"class":1142},[159,137466,122801],{"class":165},[159,137468,49566],{"class":1142},[159,137470,55961],{"class":1146},[159,137472,1159],{"class":165},[159,137474,54344],{"class":1146},[159,137476,136055],{"class":165},[159,137478,137479,137482,137484,137486,137488],{"class":161,"line":176},[159,137480,137481],{"class":165},"    mujoco.mj_step(",[159,137483,54344],{"class":1146},[159,137485,135881],{"class":165},[159,137487,54344],{"class":1146},[159,137489,135886],{"class":165},[14,137491,137492,137493,137496,137497,137499,137500,51907],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[49,137494,137495],{},"frame_skip=5","，所以外部调用一次 ",[49,137498,135177],{},"，内部实际执行 5 次 ",[49,137501,122515],{},[151,137503,137505],{"className":53900,"code":137504,"language":53902,"meta":25,"style":25},"self.steps += 1\n",[49,137506,137507],{"__ignoreMap":25},[159,137508,137509,137511,137513,137515],{"class":161,"line":162},[159,137510,54344],{"class":1146},[159,137512,135006],{"class":165},[159,137514,33073],{"class":1142},[159,137516,2570],{"class":1146},[14,137518,137519],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[151,137521,137523],{"className":53900,"code":137522,"language":53902,"meta":25,"style":25},"obs = self._get_obs()\nreward = self._get_reward()\n",[49,137524,137525,137535],{"__ignoreMap":25},[159,137526,137527,137529,137531,137533],{"class":161,"line":162},[159,137528,132154],{"class":165},[159,137530,189],{"class":1142},[159,137532,62268],{"class":1146},[159,137534,136097],{"class":165},[159,137536,137537,137539,137541,137543],{"class":161,"line":176},[159,137538,132305],{"class":165},[159,137540,189],{"class":1142},[159,137542,62268],{"class":1146},[159,137544,136108],{"class":165},[14,137546,137547],{},"计算新的观测和奖励。",[151,137549,137551],{"className":53900,"code":137550,"language":53902,"meta":25,"style":25},"dist = float(np.linalg.norm(tip - target))\n",[49,137552,137553],{"__ignoreMap":25},[159,137554,137555,137557,137559,137561,137563,137565],{"class":161,"line":162},[159,137556,132896],{"class":165},[159,137558,189],{"class":1142},[159,137560,131097],{"class":1146},[159,137562,136151],{"class":165},[159,137564,24376],{"class":1142},[159,137566,136156],{"class":165},[14,137568,137569],{},"计算末端到目标的距离，并转换成 Python float。",[151,137571,137572],{"className":53900,"code":134977,"language":53902,"meta":25,"style":25},[49,137573,137574,137586],{"__ignoreMap":25},[159,137575,137576,137578,137580,137582,137584],{"class":161,"line":162},[159,137577,134984],{"class":165},[159,137579,189],{"class":1142},[159,137581,134989],{"class":165},[159,137583,166],{"class":1142},[159,137585,134994],{"class":1146},[159,137587,137588,137590,137592,137594,137596,137598,137600],{"class":161,"line":176},[159,137589,134999],{"class":165},[159,137591,189],{"class":1142},[159,137593,62268],{"class":1146},[159,137595,135006],{"class":165},[159,137597,3822],{"class":1142},[159,137599,62268],{"class":1146},[159,137601,135013],{"class":165},[14,137603,137604],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[151,137606,137608],{"className":53900,"code":137607,"language":53902,"meta":25,"style":25},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[49,137609,137610,137623],{"__ignoreMap":25},[159,137611,137612,137615,137617,137619,137621],{"class":161,"line":162},[159,137613,137614],{"class":165},"info ",[159,137616,189],{"class":1142},[159,137618,28066],{"class":165},[159,137620,136202],{"class":192},[159,137622,136205],{"class":165},[159,137624,137625,137627],{"class":161,"line":176},[159,137626,40574],{"class":1142},[159,137628,136212],{"class":165},[14,137630,137631,137634],{},[49,137632,137633],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[151,137636,137638],{"className":53900,"code":137637,"language":53902,"meta":25,"style":25},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[49,137639,137640,137649],{"__ignoreMap":25},[159,137641,137642,137645,137647],{"class":161,"line":162},[159,137643,137644],{"class":165},"env ",[159,137646,189],{"class":1142},[159,137648,136242],{"class":165},[159,137650,137651,137653,137655,137657,137659,137661,137663],{"class":161,"line":176},[159,137652,134700],{"class":165},[159,137654,189],{"class":1142},[159,137656,136252],{"class":165},[159,137658,135866],{"class":8765},[159,137660,189],{"class":1142},[159,137662,1489],{"class":1146},[159,137664,1165],{"class":165},[14,137666,137667,137668,137671],{},"创建环境并重置。",[49,137669,137670],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[151,137673,137675],{"className":53900,"code":137674,"language":53902,"meta":25,"style":25},"action = env.action_space.sample()\n",[49,137676,137677],{"__ignoreMap":25},[159,137678,137679,137681,137683],{"class":161,"line":162},[159,137680,128742],{"class":165},[159,137682,189],{"class":1142},[159,137684,136321],{"class":165},[14,137686,137687],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[37,137689,123616],{"id":123615},[14,137691,126784],{},[151,137693,137696],{"className":137694,"code":137695,"language":8507,"meta":25},[28803],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[49,137697,137695],{"__ignoreMap":25},[14,137699,137700],{},"这个环境已经具备强化学习环境的基本结构。",[14,137702,137703],{},"主函数里使用随机动作：",[151,137705,137706],{"className":53900,"code":137674,"language":53902,"meta":25,"style":25},[49,137707,137708],{"__ignoreMap":25},[159,137709,137710,137712,137714],{"class":161,"line":162},[159,137711,128742],{"class":165},[159,137713,189],{"class":1142},[159,137715,136321],{"class":165},[14,137717,137718],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[37,137720,123648],{"id":123647},[134,137722,137723,137726,137732,137741,137750,137759,137765],{},[106,137724,137725],{},"运行程序。",[106,137727,137728,137729,51907],{},"确认 ",[49,137730,137731],{},"obs.shape == (10,)",[106,137733,132481,137734,137737,137738,51907],{},[49,137735,137736],{},"env.action_space","，应类似 ",[49,137739,137740],{},"Box(-1.0, 1.0, (2,), float32)",[106,137742,126885,137743,137746,137747,51907],{},[49,137744,137745],{},"self.max_steps = 10","，确认环境会更快 ",[49,137748,137749],{},"truncated=True",[106,137751,123711,137752,123714,137755,137758],{},[49,137753,137754],{},"terminated = dist \u003C 0.05",[49,137756,137757],{},"dist \u003C 0.2","，观察是否更容易结束。",[106,137760,123711,137761,137764],{},[49,137762,137763],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[106,137766,137767,137768,137770,137771,137774],{},"在 ",[49,137769,137633],{}," 里加入 ",[49,137772,137773],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[37,137776,123753],{"id":123752},[42,137778,137780],{"id":137779},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,137782,137783,137784,137786],{},"Gymnasium 的 ",[49,137785,128434],{}," 返回 5 个值:",[151,137788,137790],{"className":53900,"code":137789,"language":53902,"meta":25,"style":25},"obs, reward, terminated, truncated, info\n",[49,137791,137792],{"__ignoreMap":25},[159,137793,137794],{"class":161,"line":162},[159,137795,137789],{"class":165},[14,137797,137798],{},"不是旧 Gym 的 4 个值。",[42,137800,137802,137805],{"id":137801},"datactrl-action-维度错误",[49,137803,137804],{},"data.ctrl[:] = action"," 维度错误",[14,137807,123823],{},[151,137809,137811],{"className":53900,"code":137810,"language":53902,"meta":25,"style":25},"print(self.model.nu)\nprint(action.shape)\n",[49,137812,137813,137824],{"__ignoreMap":25},[159,137814,137815,137817,137819,137821],{"class":161,"line":162},[159,137816,53937],{"class":1146},[159,137818,1159],{"class":165},[159,137820,54344],{"class":1146},[159,137822,137823],{"class":165},".model.nu)\n",[159,137825,137826,137828],{"class":161,"line":176},[159,137827,53937],{"class":1146},[159,137829,137830],{"class":165},"(action.shape)\n",[14,137832,137833],{},"两者必须匹配。",[42,137835,137837],{"id":137836},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,137839,123762],{},[151,137841,137843],{"className":53900,"code":137842,"language":53902,"meta":25,"style":25},"mujoco.mj_forward(self.model, self.data)\n",[49,137844,137845],{"__ignoreMap":25},[159,137846,137847,137850,137852,137854,137856],{"class":161,"line":162},[159,137848,137849],{"class":165},"mujoco.mj_forward(",[159,137851,54344],{"class":1146},[159,137853,135881],{"class":165},[159,137855,54344],{"class":1146},[159,137857,135886],{"class":165},[42,137859,137861,137863],{"id":137860},"observation_space-维度和-obs-不一致",[49,137862,134900],{}," 维度和 obs 不一致",[14,137865,123875],{},[151,137867,137869],{"className":53900,"code":137868,"language":53902,"meta":25,"style":25},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[49,137870,137871,137881,137888],{"__ignoreMap":25},[159,137872,137873,137875,137877,137879],{"class":161,"line":162},[159,137874,132154],{"class":165},[159,137876,189],{"class":1142},[159,137878,62268],{"class":1146},[159,137880,136097],{"class":165},[159,137882,137883,137885],{"class":161,"line":176},[159,137884,53937],{"class":1146},[159,137886,137887],{"class":165},"(obs.shape)\n",[159,137889,137890,137892,137894,137896],{"class":161,"line":203},[159,137891,53937],{"class":1146},[159,137893,1159],{"class":165},[159,137895,54344],{"class":1146},[159,137897,137898],{"class":165},".observation_space.shape)\n",[14,137900,137901],{},"两者必须一致。本章观测是：",[151,137903,137906],{"className":137904,"code":137905,"language":8507,"meta":25},[28803],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[49,137907,137905],{"__ignoreMap":25},[42,137909,137911],{"id":137910},"action-超过范围","action 超过范围",[14,137913,137914],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[151,137916,137917],{"className":53900,"code":137416,"language":53902,"meta":25,"style":25},[49,137918,137919],{"__ignoreMap":25},[159,137920,137921,137923,137925,137927,137929,137931,137933],{"class":161,"line":162},[159,137922,128742],{"class":165},[159,137924,189],{"class":1142},[159,137926,128747],{"class":165},[159,137928,54344],{"class":1146},[159,137930,136018],{"class":165},[159,137932,54344],{"class":1146},[159,137934,136023],{"class":165},[14,137936,137937,137938,51907],{},"这能避免无效动作直接写入 ",[49,137939,122376],{},[42,137941,137943],{"id":137942},"忘记返回-info","忘记返回 info",[14,137945,137783,137946,122318,137948,137950],{},[49,137947,17139],{},[49,137949,128434],{}," 都会返回 info：",[151,137952,137953],{"className":53900,"code":134693,"language":53902,"meta":25,"style":25},[49,137954,137955,137963],{"__ignoreMap":25},[159,137956,137957,137959,137961],{"class":161,"line":162},[159,137958,134700],{"class":165},[159,137960,189],{"class":1142},[159,137962,134705],{"class":165},[159,137964,137965,137967,137969],{"class":161,"line":176},[159,137966,134710],{"class":165},[159,137968,189],{"class":1142},[159,137970,134715],{"class":165},[14,137972,137973,137974,51907],{},"即使暂时没有额外信息，也返回 ",[49,137975,55977],{},[37,137977,137979],{"id":137978},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,137981,137982],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[134,137984,137985,137988,137991,137994,137997,138000],{},[106,137986,137987],{},"更稳定的 reward。",[106,137989,137990],{},"合理的 episode 长度。",[106,137992,137993],{},"可重复的随机目标采样。",[106,137995,137996],{},"render 接口。",[106,137998,137999],{},"环境注册代码。",[106,138001,138002],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,138004,138005],{},"如果只是自己写训练循环，最小形式是：",[151,138007,138009],{"className":53900,"code":138008,"language":53902,"meta":25,"style":25},"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",[49,138010,138011,138019,138035,138039,138055,138064,138073,138083],{"__ignoreMap":25},[159,138012,138013,138015,138017],{"class":161,"line":162},[159,138014,137644],{"class":165},[159,138016,189],{"class":1142},[159,138018,136242],{"class":165},[159,138020,138021,138023,138025,138027,138029,138031,138033],{"class":161,"line":176},[159,138022,134700],{"class":165},[159,138024,189],{"class":1142},[159,138026,136252],{"class":165},[159,138028,135866],{"class":8765},[159,138030,189],{"class":1142},[159,138032,1489],{"class":1146},[159,138034,1165],{"class":165},[159,138036,138037],{"class":161,"line":203},[159,138038,590],{"emptyLinePlaceholder":589},[159,138040,138041,138043,138045,138047,138049,138051,138053],{"class":161,"line":223},[159,138042,26657],{"class":1142},[159,138044,122801],{"class":165},[159,138046,49566],{"class":1142},[159,138048,55961],{"class":1146},[159,138050,1159],{"class":165},[159,138052,1317],{"class":1146},[159,138054,54307],{"class":165},[159,138056,138057,138060,138062],{"class":161,"line":233},[159,138058,138059],{"class":165},"    action ",[159,138061,189],{"class":1142},[159,138063,136321],{"class":165},[159,138065,138066,138069,138071],{"class":161,"line":239},[159,138067,138068],{"class":165},"    obs, reward, terminated, truncated, info ",[159,138070,189],{"class":1142},[159,138072,134715],{"class":165},[159,138074,138075,138077,138079,138081],{"class":161,"line":245},[159,138076,26732],{"class":1142},[159,138078,136387],{"class":165},[159,138080,136390],{"class":1142},[159,138082,136393],{"class":165},[159,138084,138085,138088,138090],{"class":161,"line":251},[159,138086,138087],{"class":165},"        obs, info ",[159,138089,189],{"class":1142},[159,138091,134705],{"class":165},[37,138093,138095],{"id":138094},"_9本章小结","9.本章小结",[14,138097,138098],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[151,138100,138103],{"className":138101,"code":138102,"language":8507,"meta":25},[28803],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[49,138104,138102],{"__ignoreMap":25},[14,138106,138107],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1468,138109,138110],{},"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":25,"searchDepth":176,"depth":176,"links":138112},[138113,138114,138115,138122,138126,138127,138128,138138,138139],{"id":121946,"depth":176,"text":121947},{"id":122069,"depth":176,"text":122070},{"id":122344,"depth":176,"text":122345,"children":138116},[138117,138119,138121],{"id":134924,"depth":203,"text":138118},"terminated 和 truncated 的区别",{"id":135027,"depth":203,"text":138120},"observation_space 和 action_space",{"id":135154,"depth":203,"text":135155},{"id":122552,"depth":176,"text":122553,"children":138123},[138124,138125],{"id":122872,"depth":203,"text":122872},{"id":123008,"depth":203,"text":123008},{"id":123615,"depth":176,"text":123616},{"id":123647,"depth":176,"text":123648},{"id":123752,"depth":176,"text":123753,"children":138129},[138130,138131,138133,138134,138136,138137],{"id":137779,"depth":203,"text":137780},{"id":137801,"depth":203,"text":138132},"data.ctrl[:] = action 维度错误",{"id":137836,"depth":203,"text":137837},{"id":137860,"depth":203,"text":138135},"observation_space 维度和 obs 不一致",{"id":137910,"depth":203,"text":137911},{"id":137942,"depth":203,"text":137943},{"id":137978,"depth":176,"text":137979},{"id":138094,"depth":176,"text":138095},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":134677,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":138146,"title":138147,"body":138148,"description":138571,"extension":23810,"meta":138572,"navigation":589,"path":138573,"seo":138574,"stem":138575,"__hash__":138576},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":138149,"toc":138561},[138150,138154,138157,138160,138180,138186,138192,138202,138205,138208,138228,138231,138235,138238,138244,138247,138261,138264,138267,138341,138344,138350,138353,138376,138379,138429,138432,138438,138441,138444,138447,138466,138469,138475,138478,138481,138484,138504,138507,138510,138513,138558],[10,138151,138153],{"id":138152},"mujoco-学习","MuJoCo 学习",[14,138155,138156],{},"初版",[14,138158,138159],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[134,138161,138162,138165,138168,138177],{},[106,138163,138164],{},"MuJoCo 模型文件在描述什么。",[106,138166,138167],{},"Python 代码怎样读取和推进仿真。",[106,138169,138170,24079,138172,24079,138174,138176],{},[49,138171,125330],{},[49,138173,125660],{},[49,138175,125663],{}," 这些数组为什么重要。",[106,138178,138179],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,138181,138182,138183,138185],{},"默认环境为 Fedora 44、Python >= 3.10、",[49,138184,122327],{}," 官方 Python bindings。",[14,138187,138188,138189,138191],{},"注意：本文禁止使用 ",[49,138190,122312],{},"。所有示例均使用：",[151,138193,138194],{"className":53900,"code":122878,"language":53902,"meta":25,"style":25},[49,138195,138196],{"__ignoreMap":25},[159,138197,138198,138200],{"class":161,"line":162},[159,138199,53914],{"class":1142},[159,138201,122601],{"class":165},[37,138203,138204],{"id":138204},"适合谁阅读",[14,138206,138207],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[134,138209,138210,138213,138216,138219],{},[106,138211,138212],{},"没学过 MuJoCo，只会一点 Python。",[106,138214,138215],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[106,138217,138218],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[106,138220,138221,138222,138224,138225,138227],{},"以前接触过 ",[49,138223,122312],{},"，现在想迁移到官方 ",[49,138226,122321],{}," Python bindings。",[14,138229,138230],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[37,138232,138234],{"id":138233},"mujoco-到底是什么","MuJoCo 到底是什么",[14,138236,138237],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[151,138239,138242],{"className":138240,"code":138241,"language":8507,"meta":25},[28803],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[49,138243,138241],{"__ignoreMap":25},[14,138245,138246],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[134,138248,138249,138252,138255,138258],{},[106,138250,138251],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[106,138253,138254],{},"快速测试控制算法，不必一开始就上真实机器人。",[106,138256,138257],{},"生成强化学习环境。",[106,138259,138260],{},"采集状态、动作、图像、奖励等训练数据。",[37,138262,138263],{"id":138263},"学习前的心智模型",[14,138265,138266],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[12347,138268,138269,138281],{},[16500,138270,138271],{},[12356,138272,138273,138276,138279],{},[12365,138274,138275],{"align":19854},"部分",[12365,138277,138278],{"align":19854},"负责什么",[12365,138280,44714],{"align":19854},[16624,138282,138283,138294,138306,138318,138330],{},[12356,138284,138285,138288,138291],{},[12488,138286,138287],{"align":19854},"MJCF XML",[12488,138289,138290],{"align":19854},"定义世界和机器人结构",[12488,138292,138293],{"align":19854},"地面、盒子、关节、电机、摄像头",[12356,138295,138296,138300,138303],{},[12488,138297,138298],{"align":19854},[49,138299,122009],{},[12488,138301,138302],{"align":19854},"编译后的静态模型",[12488,138304,138305],{"align":19854},"有几个关节、有几个电机、时间步长是多少",[12356,138307,138308,138312,138315],{},[12488,138309,138310],{"align":19854},[49,138311,122019],{},[12488,138313,138314],{"align":19854},"运行中的动态状态",[12488,138316,138317],{"align":19854},"当前时间、位置、速度、电机输入",[12356,138319,138320,138324,138327],{},[12488,138321,138322],{"align":19854},[49,138323,122515],{},[12488,138325,138326],{"align":19854},"推进一步物理仿真",[12488,138328,138329],{"align":19854},"根据重力、力、碰撞更新状态",[12356,138331,138332,138335,138338],{},[12488,138333,138334],{"align":19854},"Viewer \u002F Renderer",[12488,138336,138337],{"align":19854},"把仿真显示出来",[12488,138339,138340],{"align":19854},"打开窗口或保存图片",[14,138342,138343],{},"一句话总结：",[151,138345,138348],{"className":138346,"code":138347,"language":8507,"meta":25},[28803],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[49,138349,138347],{"__ignoreMap":25},[14,138351,138352],{},"参考来源：",[103,138354,138355,138362,138369],{},[106,138356,138357,138358],{},"MuJoCo Python 官方文档：",[8085,138359,138360],{"href":138360,"rel":138361},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[15923],[106,138363,138364,138365],{},"MuJoCo XML Reference：",[8085,138366,138367],{"href":138367,"rel":138368},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[15923],[106,138370,138371,138372],{},"MuJoCo Overview：",[8085,138373,138374],{"href":138374,"rel":138375},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[15923],[37,138377,138378],{"id":138378},"章节目录",[134,138380,138381,138387,138393,138399,138405,138411,138417,138423],{},[106,138382,138383],{},[8085,138384,138386],{"href":138385},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[106,138388,138389],{},[8085,138390,138392],{"href":138391},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[106,138394,138395],{},[8085,138396,138398],{"href":138397},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[106,138400,138401],{},[8085,138402,138404],{"href":138403},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[106,138406,138407],{},[8085,138408,138410],{"href":138409},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[106,138412,138413],{},[8085,138414,138416],{"href":138415},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[106,138418,138419],{},[8085,138420,138422],{"href":138421},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[106,138424,138425],{},[8085,138426,138428],{"href":138427},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[37,138430,138431],{"id":138431},"推荐学习路线",[151,138433,138436],{"className":138434,"code":138435,"language":8507,"meta":25},[28803],"环境安装\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",[49,138437,138435],{"__ignoreMap":25},[14,138439,138440],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[37,138442,138443],{"id":138443},"建议的目录结构",[14,138445,138446],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[151,138448,138450],{"className":47347,"code":138449,"language":47349,"meta":25,"style":25},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[49,138451,138452,138460],{"__ignoreMap":25},[159,138453,138454,138456,138458],{"class":161,"line":162},[159,138455,122566],{"class":185},[159,138457,52738],{"class":1146},[159,138459,122571],{"class":192},[159,138461,138462,138464],{"class":161,"line":176},[159,138463,122576],{"class":1146},[159,138465,122571],{"class":192},[14,138467,138468],{},"每一章的代码都单独保存：",[151,138470,138473],{"className":138471,"code":138472,"language":8507,"meta":25},[28803],"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",[49,138474,138472],{"__ignoreMap":25},[14,138476,138477],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[37,138479,138480],{"id":138480},"学习方法",[14,138482,138483],{},"每章建议按这个顺序操作：",[134,138485,138486,138489,138492,138495,138498,138501],{},[106,138487,138488],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[106,138490,138491],{},"复制最小可运行代码，保存成指定文件。",[106,138493,138494],{},"运行代码，确认没有报错。",[106,138496,138497],{},"对照“运行结果说明”理解输出。",[106,138499,138500],{},"做“验证步骤”，主动改一两个参数。",[106,138502,138503],{},"遇到报错先看“常见错误与解决方案”。",[14,138505,138506],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[37,138508,138509],{"id":138509},"全局排错顺序",[14,138511,138512],{},"遇到问题时，按下面顺序查：",[134,138514,138515,138521,138527,138532,138535,138538,138545,138555],{},[106,138516,138517,138518],{},"Python 环境是否激活：",[49,138519,138520],{},"which python",[106,138522,138523,138524],{},"MuJoCo 是否能导入：",[49,138525,138526],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[106,138528,138529,138530],{},"是否误装了 ",[49,138531,122312],{},[106,138533,138534],{},"XML 标签是否闭合、属性是否拼写正确",[106,138536,138537],{},"actuator 引用的 joint 名字是否存在",[106,138539,138540,138542,138543],{},[49,138541,122376],{}," 的长度是否等于 ",[49,138544,123458],{},[106,138546,126885,138547,103839,138549,138551,138552],{},[49,138548,125330],{},[49,138550,125660],{}," 后是否调用了 ",[49,138553,138554],{},"mujoco.mj_forward",[106,138556,138557],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1468,138559,138560],{},"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":25,"searchDepth":176,"depth":176,"links":138562},[138563,138564,138565,138566,138567,138568,138569,138570],{"id":138204,"depth":176,"text":138204},{"id":138233,"depth":176,"text":138234},{"id":138263,"depth":176,"text":138263},{"id":138378,"depth":176,"text":138378},{"id":138431,"depth":176,"text":138431},{"id":138443,"depth":176,"text":138443},{"id":138480,"depth":176,"text":138480},{"id":138509,"depth":176,"text":138509},"仿真搭建。",{"category":46904},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":138147,"description":138571},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":138578,"title":138579,"body":138580,"description":23809,"extension":23810,"meta":139035,"navigation":589,"path":139036,"seo":139037,"stem":139038,"__hash__":139039},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":138581,"toc":139033},[138582,138585,138588,138594,139030],[10,138583,138579],{"id":138584},"_1-最常用的基本操作更新",[14,138586,138587],{},"装linux系统教程：",[14,138589,138590],{},[8085,138591,138592],{"href":138592,"rel":138593},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[15923],[151,138595,138599],{"className":138596,"code":138597,"language":138598,"meta":25,"style":25},"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",[49,138600,138601,138606,138611,138620,138625,138634,138639,138659,138664,138675,138680,138689,138694,138722,138727,138746,138751,138770,138774,138779,138795,138799,138804,138834,138838,138843,138859,138863,138868,138883,138887,138892,138908,138912,138917,138929,138941,138945,138950,138967,138971,138976,138994,138998,139003,139012,139016,139021],{"__ignoreMap":25},[159,138602,138603],{"class":161,"line":162},[159,138604,138605],{"class":1135},"#更新相关的知识\n",[159,138607,138608],{"class":161,"line":176},[159,138609,138610],{"class":1135},"# 更新软件包列表（从服务器获取最新软件信息）\n",[159,138612,138613,138615,138618],{"class":161,"line":203},[159,138614,48101],{"class":185},[159,138616,138617],{"class":192}," apt",[159,138619,49765],{"class":192},[159,138621,138622],{"class":161,"line":223},[159,138623,138624],{"class":1135},"# 升级所有可更新的软件包（不删除旧包）\n",[159,138626,138627,138629,138631],{"class":161,"line":233},[159,138628,48101],{"class":185},[159,138630,138617],{"class":192},[159,138632,138633],{"class":192}," upgrade\n",[159,138635,138636],{"class":161,"line":239},[159,138637,138638],{"class":1135},"#更新和升级软件包\n",[159,138640,138641,138643,138645,138648,138650,138652,138654,138657],{"class":161,"line":245},[159,138642,48101],{"class":185},[159,138644,138617],{"class":192},[159,138646,138647],{"class":192}," update",[159,138649,49713],{"class":165},[159,138651,48101],{"class":185},[159,138653,138617],{"class":192},[159,138655,138656],{"class":192}," upgrade",[159,138658,122281],{"class":1146},[159,138660,138661],{"class":161,"line":251},[159,138662,138663],{"class":1135},"#列出可更新的软件包及版本信息\n",[159,138665,138666,138669,138672],{"class":161,"line":261},[159,138667,138668],{"class":185},"apt",[159,138670,138671],{"class":192}," list",[159,138673,138674],{"class":1146}," --upgradable\n",[159,138676,138677],{"class":161,"line":603},[159,138678,138679],{"class":1135},"#彻底升级（处理依赖关系，可能删除旧包）\n",[159,138681,138682,138684,138686],{"class":161,"line":621},[159,138683,48101],{"class":185},[159,138685,138617],{"class":192},[159,138687,138688],{"class":192}," full-upgrade\n",[159,138690,138691],{"class":161,"line":634},[159,138692,138693],{"class":1135},"#设置指定版本\n",[159,138695,138696,138698,138700,138702,138704,138707,138709,138711,138713,138715,138718,138720],{"class":161,"line":640},[159,138697,48101],{"class":185},[159,138699,138617],{"class":192},[159,138701,47359],{"class":192},[159,138703,52424],{"class":1142},[159,138705,138706],{"class":192},"package_nam",[159,138708,14038],{"class":165},[159,138710,6760],{"class":1142},[159,138712,189],{"class":192},[159,138714,166],{"class":1142},[159,138716,138717],{"class":192},"version_numbe",[159,138719,24504],{"class":165},[159,138721,173],{"class":1142},[159,138723,138724],{"class":161,"line":1075},[159,138725,138726],{"class":1135},"#只安装软件包不升级\n",[159,138728,138729,138731,138733,138735,138737,138739,138741,138743],{"class":161,"line":1081},[159,138730,48101],{"class":185},[159,138732,138617],{"class":192},[159,138734,47359],{"class":192},[159,138736,52424],{"class":1142},[159,138738,138706],{"class":192},[159,138740,14038],{"class":165},[159,138742,6760],{"class":1142},[159,138744,138745],{"class":1146}," --no-upgrade\n",[159,138747,138748],{"class":161,"line":1091},[159,138749,138750],{"class":1135},"#只升级，不存在就不安装\n",[159,138752,138753,138755,138757,138759,138761,138763,138765,138767],{"class":161,"line":1100},[159,138754,48101],{"class":185},[159,138756,138617],{"class":192},[159,138758,47359],{"class":192},[159,138760,52424],{"class":1142},[159,138762,138706],{"class":192},[159,138764,14038],{"class":165},[159,138766,6760],{"class":1142},[159,138768,138769],{"class":1146}," --only-upgrade\n",[159,138771,138772],{"class":161,"line":1123},[159,138773,590],{"emptyLinePlaceholder":589},[159,138775,138776],{"class":161,"line":1132},[159,138777,138778],{"class":1135},"#安装指定的软件命令\n",[159,138780,138781,138783,138785,138787,138789,138791,138793],{"class":161,"line":1139},[159,138782,48101],{"class":185},[159,138784,138617],{"class":192},[159,138786,47359],{"class":192},[159,138788,52424],{"class":1142},[159,138790,138706],{"class":192},[159,138792,14038],{"class":165},[159,138794,173],{"class":1142},[159,138796,138797],{"class":161,"line":1168},[159,138798,590],{"emptyLinePlaceholder":589},[159,138800,138801],{"class":161,"line":1174},[159,138802,138803],{"class":1135},"#安装多个软件包\n",[159,138805,138806,138808,138810,138812,138814,138817,138820,138822,138824,138827,138829,138831],{"class":161,"line":1180},[159,138807,48101],{"class":185},[159,138809,138617],{"class":192},[159,138811,47359],{"class":192},[159,138813,52424],{"class":1142},[159,138815,138816],{"class":192},"package_",[159,138818,138819],{"class":1142},"1>",[159,138821,52424],{"class":1142},[159,138823,138816],{"class":192},[159,138825,138826],{"class":1142},"2>",[159,138828,52424],{"class":1142},[159,138830,138816],{"class":192},[159,138832,138833],{"class":1142},"3>\n",[159,138835,138836],{"class":161,"line":1194},[159,138837,590],{"emptyLinePlaceholder":589},[159,138839,138840],{"class":161,"line":1200},[159,138841,138842],{"class":1135},"#更新指定的软件命令\n",[159,138844,138845,138847,138849,138851,138853,138855,138857],{"class":161,"line":1221},[159,138846,48101],{"class":185},[159,138848,138617],{"class":192},[159,138850,138647],{"class":192},[159,138852,52424],{"class":1142},[159,138854,138706],{"class":192},[159,138856,14038],{"class":165},[159,138858,173],{"class":1142},[159,138860,138861],{"class":161,"line":1230},[159,138862,590],{"emptyLinePlaceholder":589},[159,138864,138865],{"class":161,"line":1247},[159,138866,138867],{"class":1135},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[159,138869,138870,138872,138875,138877,138879,138881],{"class":161,"line":1265},[159,138871,138668],{"class":185},[159,138873,138874],{"class":192}," show",[159,138876,52424],{"class":1142},[159,138878,138706],{"class":192},[159,138880,14038],{"class":165},[159,138882,173],{"class":1142},[159,138884,138885],{"class":161,"line":1277},[159,138886,590],{"emptyLinePlaceholder":589},[159,138888,138889],{"class":161,"line":1283},[159,138890,138891],{"class":1135},"#删除软件包命令\n",[159,138893,138894,138896,138898,138900,138902,138904,138906],{"class":161,"line":1294},[159,138895,48101],{"class":185},[159,138897,138617],{"class":192},[159,138899,49602],{"class":192},[159,138901,52424],{"class":1142},[159,138903,138706],{"class":192},[159,138905,14038],{"class":165},[159,138907,173],{"class":1142},[159,138909,138910],{"class":161,"line":1305},[159,138911,590],{"emptyLinePlaceholder":589},[159,138913,138914],{"class":161,"line":1311},[159,138915,138916],{"class":1135},"# 清理旧版本和缓存（释放磁盘空间）\n",[159,138918,138919,138921,138923,138926],{"class":161,"line":1322},[159,138920,48101],{"class":185},[159,138922,138617],{"class":192},[159,138924,138925],{"class":192}," autoremove",[159,138927,138928],{"class":1135},"  # 删除不再需要的依赖和库文件\n",[159,138930,138931,138933,138935,138938],{"class":161,"line":1327},[159,138932,48101],{"class":185},[159,138934,138617],{"class":192},[159,138936,138937],{"class":192}," clean",[159,138939,138940],{"class":1135},"       # 清理下载的缓存包\n",[159,138942,138943],{"class":161,"line":1336},[159,138944,590],{"emptyLinePlaceholder":589},[159,138946,138947],{"class":161,"line":1345},[159,138948,138949],{"class":1135},"#移除软件包及配置文件\n",[159,138951,138952,138954,138956,138959,138961,138963,138965],{"class":161,"line":1350},[159,138953,48101],{"class":185},[159,138955,138617],{"class":192},[159,138957,138958],{"class":192}," purge",[159,138960,52424],{"class":1142},[159,138962,138706],{"class":192},[159,138964,14038],{"class":165},[159,138966,173],{"class":1142},[159,138968,138969],{"class":161,"line":1764},[159,138970,590],{"emptyLinePlaceholder":589},[159,138972,138973],{"class":161,"line":1769},[159,138974,138975],{"class":1135},"#查找软件包命令\n",[159,138977,138978,138980,138982,138985,138987,138990,138992],{"class":161,"line":1777},[159,138979,48101],{"class":185},[159,138981,138617],{"class":192},[159,138983,138984],{"class":192}," search",[159,138986,52424],{"class":1142},[159,138988,138989],{"class":192},"keywor",[159,138991,24173],{"class":165},[159,138993,173],{"class":1142},[159,138995,138996],{"class":161,"line":1788},[159,138997,590],{"emptyLinePlaceholder":589},[159,138999,139000],{"class":161,"line":1802},[159,139001,139002],{"class":1135},"#列出所有已安装的包\n",[159,139004,139005,139007,139009],{"class":161,"line":1815},[159,139006,138668],{"class":185},[159,139008,138671],{"class":192},[159,139010,139011],{"class":1146}," --installed\n",[159,139013,139014],{"class":161,"line":1828},[159,139015,590],{"emptyLinePlaceholder":589},[159,139017,139018],{"class":161,"line":1841},[159,139019,139020],{"class":1135},"#列出所有已安装的包的版本信息\n",[159,139022,139023,139025,139027],{"class":161,"line":1852},[159,139024,138668],{"class":185},[159,139026,138671],{"class":192},[159,139028,139029],{"class":1146}," --all-versions\n",[1468,139031,139032],{},"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":25,"searchDepth":176,"depth":176,"links":139034},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":138579,"description":23809},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":139041,"title":139042,"body":139043,"description":23809,"extension":23810,"meta":139784,"navigation":589,"path":139785,"seo":139786,"stem":139787,"__hash__":139788},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":139044,"toc":139771},[139045,139048,139052,139055,139061,139065,139069,139075,139080,139085,139090,139095,139100,139103,139106,139109,139112,139116,139119,139124,139127,139132,139135,139140,139147,139150,139153,139156,139159,139162,139173,139177,139181,139186,139191,139195,139200,139204,139209,139213,139217,139222,139225,139270,139275,139279,139283,139288,139294,139299,139309,139314,139324,139329,139334,139361,139365,139368,139373,139376,139401,139405,139410,139413,139418,139423,139443,139448,139451,139466,139470,139523,139526,139531,139535,139538,139553,139556,139559,139564,139568,139572,139575,139579,139583,139586,139591,139596,139600,139607,139615,139618,139625,139630,139635,139638,139643,139650,139655,139662,139666,139668,139673,139677,139680,139683,139688,139691,139696,139699,139704,139709,139714,139718,139723,139727,139768],[10,139046,139042],{"id":139047},"_2-linux装机教程",[37,139049,139051],{"id":139050},"_21-实体机","2.1 实体机",[14,139053,139054],{},"使用清华源：（Ubuntu24.04）",[14,139056,139057],{},[8085,139058,139059],{"href":139059,"rel":139060},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[15923],[37,139062,139064],{"id":139063},"_22-普通虚拟机","2.2 普通虚拟机",[42,139066,139068],{"id":139067},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,139070,139071],{},[8085,139072,139073],{"href":139073,"rel":139074},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[15923],[14,139076,139077],{},[23,139078],{"alt":25,"src":139079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,139081,139082],{},[23,139083],{"alt":25,"src":139084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,139086,139087],{},[23,139088],{"alt":25,"src":139089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,139091,139092],{},[23,139093],{"alt":25,"src":139094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,139096,139097],{},[23,139098],{"alt":25,"src":139099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,139101,139102],{},"内存4G（4096MB）；",[14,139104,139105],{},"CPU给4个核；",[14,139107,139108],{},"硬盘动态分配60G；",[14,139110,139111],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[42,139113,139115],{"id":139114},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,139117,139118],{},"按照1.1的步骤下载Ubuntu",[14,139120,139121],{},[23,139122],{"alt":25,"src":139123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,139125,139126],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,139128,139129],{},[23,139130],{"alt":25,"src":139131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,139133,139134],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,139136,139137],{},[23,139138],{"alt":25,"src":139139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,139141,139142,139143,139146],{},"选择“正常安装”(找不到都用Alt+F7)， ",[61,139144,139145],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,139148,139149],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,139151,139152],{},"将改动写入磁盘吗 继续",[14,139154,139155],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,139157,139158],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,139160,139161],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,139163,139164,139165,139168,139169,139172],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[61,139166,139167],{},"除了"," 选不发送系统信息与不升级之外， ",[61,139170,139171],{},"其它"," 都跳过或前进）",[42,139174,139176],{"id":139175},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[326,139178,139180],{"id":139179},"_2231-全屏","2.2.3.1 全屏",[14,139182,139183],{},[23,139184],{"alt":25,"src":139185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,139187,139188],{},[23,139189],{"alt":25,"src":139190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[326,139192,139194],{"id":139193},"_2232-文件交换","2.2.3.2 文件交换",[14,139196,139197],{},[23,139198],{"alt":25,"src":139199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[326,139201,139203],{"id":139202},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,139205,139206],{},[23,139207],{"alt":25,"src":139208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[37,139210,139212],{"id":139211},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[42,139214,139216],{"id":139215},"_231-简介与优缺点","2.3.1 简介与优缺点",[134,139218,139219],{},[106,139220,139221],{},"什么情况下推荐？",[14,139223,139224],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[134,139226,139227],{"start":176},[106,139228,139229,139230],{},"优缺点：",[134,139231,139232,139262],{},[106,139233,139234,139235],{},"优点：",[134,139236,139237,139240,139247,139250,139253,139256,139259],{},[106,139238,139239],{},"WSL2是最好的Linux发行版;(bushi)",[106,139241,139242,139243,139246],{},"性能损耗极低。且比在Windows上跑深度性能 ",[61,139244,139245],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[106,139248,139249],{},"非常方便调用USB设备，可以USB直通;",[106,139251,139252],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[106,139254,139255],{},"非常方便Win与WSL2互相传文件等协同操作;",[106,139257,139258],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[106,139260,139261],{},"非常方便使用Windows的VScode远程开发;",[106,139263,139264,139265],{},"缺点：",[134,139266,139267],{},[106,139268,139269],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,139271,139272],{},[23,139273],{"alt":25,"src":139274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[42,139276,139278],{"id":139277},"_232-安装教程","2.3.2 安装教程",[326,139280,139282],{"id":139281},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[134,139284,139285],{},[106,139286,139287],{},"方法一(图形界面)",[14,139289,139290,139291,48143],{},"用Win+R输入",[49,139292,139293],{},"appwiz.cpl",[14,139295,139296],{},[23,139297],{"alt":25,"src":139298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,139300,139301,139302,139305,139306,49996],{},"点击OK进入 ",[61,139303,139304],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[61,139307,139308],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,139310,139311],{},[23,139312],{"alt":25,"src":139313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,139315,139316,139317,122318,139320,139323],{},"选择 ",[61,139318,139319],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[61,139321,139322],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,139325,139326],{},[23,139327],{"alt":25,"src":139328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[134,139330,139331],{"start":176},[106,139332,139333],{},"方法二(命令行)",[151,139335,139339],{"className":139336,"code":139337,"language":139338,"meta":25,"style":25},"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",[49,139340,139341,139346,139351,139356],{"__ignoreMap":25},[159,139342,139343],{"class":161,"line":162},[159,139344,139345],{},"# 开启 Linux 子系统\n",[159,139347,139348],{"class":161,"line":176},[159,139349,139350],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[159,139352,139353],{"class":161,"line":203},[159,139354,139355],{},"# 开启虚拟机平台\n",[159,139357,139358],{"class":161,"line":223},[159,139359,139360],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[326,139362,139364],{"id":139363},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,139366,139367],{},"用管理员权限打开powershell",[14,139369,139370],{},[23,139371],{"alt":25,"src":139372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,139374,139375],{},"升级WSL并设置默认版本为WSL2",[151,139377,139379],{"className":139336,"code":139378,"language":139338,"meta":25,"style":25},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[49,139380,139381,139386,139391,139396],{"__ignoreMap":25},[159,139382,139383],{"class":161,"line":162},[159,139384,139385],{},"# 更新 wsl\n",[159,139387,139388],{"class":161,"line":176},[159,139389,139390],{},"wsl --update\n",[159,139392,139393],{"class":161,"line":203},[159,139394,139395],{},"# 将 wsl 版本设置为 wsl2\n",[159,139397,139398],{"class":161,"line":223},[159,139399,139400],{},"wsl --set-default-version 2\n",[326,139402,139404],{"id":139403},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[134,139406,139407],{},[106,139408,139409],{},"方式一(商店下载)",[14,139411,139412],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,139414,139415],{},[23,139416],{"alt":25,"src":139417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[134,139419,139420],{"start":176},[106,139421,139422],{},"方式二(命令行安装)",[151,139424,139426],{"className":139336,"code":139425,"language":139338,"meta":25,"style":25},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[49,139427,139428,139433,139438],{"__ignoreMap":25},[159,139429,139430],{"class":161,"line":162},[159,139431,139432],{},"# 列出可安装的 Linux 版本\n",[159,139434,139435],{"class":161,"line":176},[159,139436,139437],{},"#（需要科学手段）\n",[159,139439,139440],{"class":161,"line":203},[159,139441,139442],{},"wsl --list --online\n",[14,139444,139445],{},[23,139446],{"alt":25,"src":139447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,139449,139450],{},"选择对应发行版并安装",[151,139452,139454],{"className":139336,"code":139453,"language":139338,"meta":25,"style":25},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[49,139455,139456,139461],{"__ignoreMap":25},[159,139457,139458],{"class":161,"line":162},[159,139459,139460],{},"# Ubuntu安装完毕后需要重启系统\n",[159,139462,139463],{"class":161,"line":176},[159,139464,139465],{},"wsl --install -d Ubuntu-24.04\n",[326,139467,139469],{"id":139468},"_2324-查看系统状态","2.3.2.4 查看系统状态",[151,139471,139473],{"className":139336,"code":139472,"language":139338,"meta":25,"style":25},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[49,139474,139475,139480,139485,139490,139495,139499,139503,139508,139513,139518],{"__ignoreMap":25},[159,139476,139477],{"class":161,"line":162},[159,139478,139479],{},"# 查看 wsl\n",[159,139481,139482],{"class":161,"line":176},[159,139483,139484],{},"wsl -l\n",[159,139486,139487],{"class":161,"line":203},[159,139488,139489],{},"# 查看 wsl 运行版本或模式\n",[159,139491,139492],{"class":161,"line":223},[159,139493,139494],{},"wsl -l -v\n",[159,139496,139497],{"class":161,"line":233},[159,139498,590],{"emptyLinePlaceholder":589},[159,139500,139501],{"class":161,"line":239},[159,139502,590],{"emptyLinePlaceholder":589},[159,139504,139505],{"class":161,"line":245},[159,139506,139507],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[159,139509,139510],{"class":161,"line":251},[159,139511,139512],{},"wsl --set-version \u003Cdistro> 2\n",[159,139514,139515],{"class":161,"line":261},[159,139516,139517],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[159,139519,139520],{"class":161,"line":603},[159,139521,139522],{},"wsl --unregister \u003Cdistro>\n",[14,139524,139525],{},"输出Version为2即正常",[14,139527,139528],{},[23,139529],{"alt":25,"src":139530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[326,139532,139534],{"id":139533},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,139536,139537],{},"直接在Powershell里输入wsl命令进入子系统",[151,139539,139541],{"className":139336,"code":139540,"language":139338,"meta":25,"style":25},"# 进入子系统\nwsl\n",[49,139542,139543,139548],{"__ignoreMap":25},[159,139544,139545],{"class":161,"line":162},[159,139546,139547],{},"# 进入子系统\n",[159,139549,139550],{"class":161,"line":176},[159,139551,139552],{},"wsl\n",[14,139554,139555],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,139557,139558],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,139560,139561],{},[23,139562],{"alt":25,"src":139563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[42,139565,139567],{"id":139566},"_233-配置各种环境","2.3.3 配置各种环境",[326,139569,139571],{"id":139570},"_2331-换源","2.3.3.1 换源",[14,139573,139574],{},"(同实体机LINUX，往下找教程)",[326,139576,139578],{"id":139577},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[46436,139580,139582],{"id":139581},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,139584,139585],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,139587,139588],{},[23,139589],{"alt":25,"src":139590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,139592,139593],{},[23,139594],{"alt":25,"src":139595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[46436,139597,139599],{"id":139598},"_23322-cuda","2.3.3.2.2 CUDA",[14,139601,139602,139603],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[8085,139604,139605],{"href":139605,"rel":139606},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[15923],[14,139608,139609,139612],{},[23,139610],{"alt":25,"src":139611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[23,139613],{"alt":25,"src":139614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,139616,139617],{},"在下方的网站，选择合适的版本。",[14,139619,139620,139621],{},"WSL2 专属 CUDA 指南：",[8085,139622,139623],{"href":139623,"rel":139624},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[15923],[14,139626,139627],{},[61,139628,139629],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,139631,139632],{},[23,139633],{"alt":25,"src":139634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,139636,139637],{},"挨行敲一遍",[14,139639,139640],{},[23,139641],{"alt":25,"src":139642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,139644,139645,139646,139649],{},"敲完后，输入",[49,139647,139648],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,139651,139652],{},[23,139653],{"alt":25,"src":139654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,139656,139657,139658,139661],{},"（请详看下方教程的",[61,139659,139660],{},"安装CUDA的配置环境来看","如何配置环境）",[46436,139663,139665],{"id":139664},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,139667,139574],{},[14,139669,139670],{},[23,139671],{"alt":25,"src":139672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[326,139674,139676],{"id":139675},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,139678,139679],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,139681,139682],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,139684,139685],{},[23,139686],{"alt":25,"src":139687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,139689,139690],{},"连接WSL2",[14,139692,139693],{},[23,139694],{"alt":25,"src":139695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,139697,139698],{},"远程开发成功。",[14,139700,139701],{},[23,139702],{"alt":25,"src":139703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,139705,139706],{},[23,139707],{"alt":25,"src":139708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,139710,139711],{},[23,139712],{"alt":25,"src":139713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[326,139715,139717],{"id":139716},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,139719,139720],{},[23,139721],{"alt":25,"src":139722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[326,139724,139726],{"id":139725},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[151,139728,139730],{"className":138596,"code":139729,"language":138598,"meta":25,"style":25},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[49,139731,139732,139740,139748,139759,139763],{"__ignoreMap":25},[159,139733,139734,139736,139738],{"class":161,"line":162},[159,139735,48101],{"class":185},[159,139737,138617],{"class":192},[159,139739,49765],{"class":192},[159,139741,139742,139744,139746],{"class":161,"line":176},[159,139743,48101],{"class":185},[159,139745,138617],{"class":192},[159,139747,138633],{"class":192},[159,139749,139750,139752,139754,139756],{"class":161,"line":203},[159,139751,48101],{"class":185},[159,139753,138617],{"class":192},[159,139755,47359],{"class":192},[159,139757,139758],{"class":192}," mesa-utils\n",[159,139760,139761],{"class":161,"line":223},[159,139762,590],{"emptyLinePlaceholder":589},[159,139764,139765],{"class":161,"line":233},[159,139766,139767],{"class":1135},"#然后重启wsl2即可\n",[1468,139769,139770],{},"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":25,"searchDepth":176,"depth":176,"links":139772},[139773,139774,139779],{"id":139050,"depth":176,"text":139051},{"id":139063,"depth":176,"text":139064,"children":139775},[139776,139777,139778],{"id":139067,"depth":203,"text":139068},{"id":139114,"depth":203,"text":139115},{"id":139175,"depth":203,"text":139176},{"id":139211,"depth":176,"text":139212,"children":139780},[139781,139782,139783],{"id":139215,"depth":203,"text":139216},{"id":139277,"depth":203,"text":139278},{"id":139566,"depth":203,"text":139567},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":139042,"description":23809},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":139790,"title":139791,"body":139792,"description":23809,"extension":23810,"meta":142728,"navigation":589,"path":142729,"seo":142730,"stem":142731,"__hash__":142732},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":139793,"toc":142700},[139794,139797,139801,139807,139811,139817,139821,140009,140012,140017,140021,140025,140028,140031,140037,140042,140045,140048,140053,140086,140091,140095,140172,140175,140180,140184,140187,140226,140229,140238,140256,140261,140268,140385,140390,140393,140420,140425,140429,140438,140488,140495,140499,140502,140516,140523,140557,140562,140566,140589,140592,140597,140601,140604,140607,140610,140652,140656,140659,140662,140703,140707,140711,140714,140719,140724,140727,140750,140753,140761,140766,140769,140774,140779,140782,140787,140791,140796,140819,140824,140886,140894,140899,140904,140907,140912,140915,140920,140925,140943,140948,140954,140959,140973,140977,140980,140983,140986,141029,141032,141037,141138,141141,141146,141150,141154,141191,141195,141199,141203,141249,141253,141298,141302,141309,141317,141372,141375,141452,141455,141478,141482,141485,141490,141495,141503,141506,141511,141516,141521,141524,141529,141538,141541,141546,141549,141620,141625,141628,141633,141636,141641,141644,141649,141652,141657,141662,141665,141740,141743,141756,141761,141764,141778,141781,141810,141815,141844,141847,141852,141856,141861,141870,141873,141878,141881,141886,141889,141892,141897,141900,141905,141910,141913,141918,141921,142046,142051,142081,142084,142089,142094,142111,142114,142157,142160,142187,142192,142205,142348,142352,142357,142371,142374,142425,142428,142458,142461,142477,142482,142496,142499,142566,142571,142580,142585,142588,142600,142605,142612,142636,142639,142644,142647,142666,142671,142678,142690,142697],[10,139795,139791],{"id":139796},"_3-安装必备配置",[37,139798,139800],{"id":139799},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[151,139802,139805],{"className":139803,"code":139804,"language":8507},[28803],"  打开下方网站（注意，该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",[49,139806,139804],{"__ignoreMap":25},[42,139808,139810],{"id":139809},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[151,139812,139815],{"className":139813,"code":139814,"language":8507},[28803],"  输入以下命令\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",[49,139816,139814],{"__ignoreMap":25},[42,139818,139820],{"id":139819},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[151,139822,139826],{"className":139823,"code":139824,"language":139825,"meta":25,"style":25},"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",[49,139827,139828,139836,139847,139859,139873,139877,139887,139892,139896,139900,139905,139909,139921,139925,139930,139934,139945,139949,139965,139969,139980,139984,139989,139993,140001],{"__ignoreMap":25},[159,139829,139830,139832,139834],{"class":161,"line":162},[159,139831,48101],{"class":185},[159,139833,138617],{"class":192},[159,139835,49765],{"class":192},[159,139837,139838,139840,139842,139844],{"class":161,"line":176},[159,139839,48101],{"class":185},[159,139841,138617],{"class":192},[159,139843,47359],{"class":192},[159,139845,139846],{"class":192}," vim\n",[159,139848,139849,139851,139854,139856],{"class":161,"line":203},[159,139850,48101],{"class":185},[159,139852,139853],{"class":192}," rm",[159,139855,48848],{"class":1146},[159,139857,139858],{"class":192}," \u002Fetc\u002Fapt\u002Fsources.list\n",[159,139860,139861,139863,139865,139867,139870],{"class":161,"line":223},[159,139862,48101],{"class":185},[159,139864,139853],{"class":192},[159,139866,48848],{"class":1146},[159,139868,139869],{"class":192}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[159,139871,139872],{"class":1146},"**\n",[159,139874,139875],{"class":161,"line":233},[159,139876,590],{"emptyLinePlaceholder":589},[159,139878,139879,139881,139884],{"class":161,"line":239},[159,139880,48101],{"class":185},[159,139882,139883],{"class":192}," vim",[159,139885,139886],{"class":192}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[159,139888,139889],{"class":161,"line":245},[159,139890,139891],{"class":192},"```\n",[159,139893,139894],{"class":161,"line":251},[159,139895,590],{"emptyLinePlaceholder":589},[159,139897,139898],{"class":161,"line":261},[159,139899,590],{"emptyLinePlaceholder":589},[159,139901,139902],{"class":161,"line":603},[159,139903,139904],{"class":185},"选择好Ubuntu版本后，复制下方的内容。\n",[159,139906,139907],{"class":161,"line":621},[159,139908,590],{"emptyLinePlaceholder":589},[159,139910,139911,139913,139916,139919],{"class":161,"line":634},[159,139912,18314],{"class":1142},[159,139914,139915],{"class":192},"[](",[159,139917,139918],{"class":185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[159,139920,1165],{"class":192},[159,139922,139923],{"class":161,"line":640},[159,139924,590],{"emptyLinePlaceholder":589},[159,139926,139927],{"class":161,"line":1075},[159,139928,139929],{"class":185},"粘贴进去\n",[159,139931,139932],{"class":161,"line":1081},[159,139933,590],{"emptyLinePlaceholder":589},[159,139935,139936,139938,139940,139943],{"class":161,"line":1091},[159,139937,18314],{"class":1142},[159,139939,139915],{"class":192},[159,139941,139942],{"class":185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[159,139944,1165],{"class":192},[159,139946,139947],{"class":161,"line":1100},[159,139948,590],{"emptyLinePlaceholder":589},[159,139950,139951,139954,139957,139960,139962],{"class":161,"line":1123},[159,139952,139953],{"class":185},"按一下ESC，然后英文冒号，输入",[159,139955,139956],{"class":192}," `",[159,139958,139959],{"class":185},":wq!",[159,139961,24788],{"class":192},[159,139963,139964],{"class":185},"然后回车\n",[159,139966,139967],{"class":161,"line":1132},[159,139968,590],{"emptyLinePlaceholder":589},[159,139970,139971,139973,139975,139978],{"class":161,"line":1139},[159,139972,18314],{"class":1142},[159,139974,139915],{"class":192},[159,139976,139977],{"class":185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[159,139979,1165],{"class":192},[159,139981,139982],{"class":161,"line":1168},[159,139983,590],{"emptyLinePlaceholder":589},[159,139985,139986],{"class":161,"line":1174},[159,139987,139988],{"class":185},"输入以下命令\n",[159,139990,139991],{"class":161,"line":1180},[159,139992,590],{"emptyLinePlaceholder":589},[159,139994,139995,139998],{"class":161,"line":1194},[159,139996,139997],{"class":192},"```",[159,139999,140000],{"class":185},"Bash\n",[159,140002,140003,140005,140007],{"class":161,"line":1200},[159,140004,48101],{"class":185},[159,140006,138617],{"class":192},[159,140008,49765],{"class":192},[14,140010,140011],{},"这里被替换成对应学校则成功",[14,140013,140014],{},[23,140015],{"alt":25,"src":140016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[37,140018,140020],{"id":140019},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[42,140022,140024],{"id":140023},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,140026,140027],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,140029,140030],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,140032,140033],{},[8085,140034,140035],{"href":140035,"rel":140036},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[15923],[14,140038,140039],{},[23,140040],{"alt":25,"src":140041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,140043,140044],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,140046,140047],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,140049,140050],{},[23,140051],{"alt":25,"src":140052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[151,140054,140056],{"className":138596,"code":140055,"language":138598,"meta":25,"style":25},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[49,140057,140058,140063,140070,140075],{"__ignoreMap":25},[159,140059,140060],{"class":161,"line":162},[159,140061,140062],{"class":1135},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[159,140064,140065,140067],{"class":161,"line":176},[159,140066,122576],{"class":1146},[159,140068,140069],{"class":192}," ~\u002FDownloads\n",[159,140071,140072],{"class":161,"line":203},[159,140073,140074],{"class":1135},"#下方chrome安装包名不一定是这个，根据名字来看\n",[159,140076,140077,140079,140081,140083],{"class":161,"line":223},[159,140078,48101],{"class":185},[159,140080,138617],{"class":192},[159,140082,47359],{"class":192},[159,140084,140085],{"class":192}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,140087,140088],{},[23,140089],{"alt":25,"src":140090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[42,140092,140094],{"id":140093},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[151,140096,140098],{"className":138596,"code":140097,"language":138598,"meta":25,"style":25},"# 老版\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",[49,140099,140100,140105,140113,140124,140129,140133,140138,140148,140156,140167],{"__ignoreMap":25},[159,140101,140102],{"class":161,"line":162},[159,140103,140104],{"class":1135},"# 老版\n",[159,140106,140107,140109,140111],{"class":161,"line":176},[159,140108,48101],{"class":185},[159,140110,138617],{"class":192},[159,140112,49765],{"class":192},[159,140114,140115,140117,140119,140121],{"class":161,"line":203},[159,140116,48101],{"class":185},[159,140118,138617],{"class":192},[159,140120,47359],{"class":192},[159,140122,140123],{"class":192}," neofetch\n",[159,140125,140126],{"class":161,"line":223},[159,140127,140128],{"class":185},"neofetch\n",[159,140130,140131],{"class":161,"line":233},[159,140132,590],{"emptyLinePlaceholder":589},[159,140134,140135],{"class":161,"line":239},[159,140136,140137],{"class":1135},"# 新版\n",[159,140139,140140,140142,140145],{"class":161,"line":245},[159,140141,48101],{"class":185},[159,140143,140144],{"class":192}," add-apt-repository",[159,140146,140147],{"class":192}," ppa:zhangsongcui3371\u002Ffastfetch\n",[159,140149,140150,140152,140154],{"class":161,"line":251},[159,140151,48101],{"class":185},[159,140153,138617],{"class":192},[159,140155,49765],{"class":192},[159,140157,140158,140160,140162,140164],{"class":161,"line":261},[159,140159,48101],{"class":185},[159,140161,138617],{"class":192},[159,140163,47359],{"class":192},[159,140165,140166],{"class":192}," fastfetch\n",[159,140168,140169],{"class":161,"line":603},[159,140170,140171],{"class":185},"fastfetch\n",[14,140173,140174],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,140176,140177],{},[23,140178],{"alt":25,"src":140179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[42,140181,140183],{"id":140182},"_323-移除snap应用","3.2.3 移除snap应用",[14,140185,140186],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[151,140188,140190],{"className":138596,"code":140189,"language":138598,"meta":25,"style":25},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[49,140191,140192,140204,140215],{"__ignoreMap":25},[159,140193,140194,140196,140198,140201],{"class":161,"line":162},[159,140195,48101],{"class":185},[159,140197,50036],{"class":192},[159,140199,140200],{"class":192}," disable",[159,140202,140203],{"class":192}," snapd.service\n",[159,140205,140206,140208,140210,140212],{"class":161,"line":176},[159,140207,48101],{"class":185},[159,140209,50036],{"class":192},[159,140211,140200],{"class":192},[159,140213,140214],{"class":192}," snapd.socket\n",[159,140216,140217,140219,140221,140223],{"class":161,"line":203},[159,140218,48101],{"class":185},[159,140220,50036],{"class":192},[159,140222,140200],{"class":192},[159,140224,140225],{"class":192}," snapd.seeded.service\n",[14,140227,140228],{},"然后查看snap应用列表",[14,140230,140231,140232,140237],{},"根据你安装的选择不同（最小安装或普通安装），有",[8085,140233,140236],{"href":140234,"rel":140235},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[15923],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[151,140239,140241],{"className":138596,"code":140240,"language":138598,"meta":25,"style":25},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[49,140242,140243,140248],{"__ignoreMap":25},[159,140244,140245],{"class":161,"line":162},[159,140246,140247],{"class":1135},"# 查询当前系统上snap安装了哪些app\n",[159,140249,140250,140253],{"class":161,"line":176},[159,140251,140252],{"class":185},"snap",[159,140254,140255],{"class":192}," list\n",[14,140257,140258],{},[23,140259],{"alt":25,"src":140260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,140262,140263,140264,140267],{},"卸载掉图中所有应用，按照 ",[61,140265,140266],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[151,140269,140271],{"className":138596,"code":140270,"language":138598,"meta":25,"style":25},"#移除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",[49,140272,140273,140278,140290,140295,140306,140311,140322,140327,140338,140343,140347,140352,140363,140374],{"__ignoreMap":25},[159,140274,140275],{"class":161,"line":162},[159,140276,140277],{"class":1135},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[159,140279,140280,140282,140285,140287],{"class":161,"line":176},[159,140281,48101],{"class":185},[159,140283,140284],{"class":192}," snap",[159,140286,49602],{"class":192},[159,140288,140289],{"class":192}," snap-store\n",[159,140291,140292],{"class":161,"line":203},[159,140293,140294],{"class":1135},"#移除firefox浏览器\n",[159,140296,140297,140299,140301,140303],{"class":161,"line":223},[159,140298,48101],{"class":185},[159,140300,140284],{"class":192},[159,140302,49602],{"class":192},[159,140304,140305],{"class":192}," firefox\n",[159,140307,140308],{"class":161,"line":233},[159,140309,140310],{"class":1135},"#移除gnome-42-2204\n",[159,140312,140313,140315,140317,140319],{"class":161,"line":239},[159,140314,48101],{"class":185},[159,140316,140284],{"class":192},[159,140318,49602],{"class":192},[159,140320,140321],{"class":192}," gnome-42-2204\n",[159,140323,140324],{"class":161,"line":245},[159,140325,140326],{"class":1135},"#移除gtk-common-themes\n",[159,140328,140329,140331,140333,140335],{"class":161,"line":251},[159,140330,48101],{"class":185},[159,140332,140284],{"class":192},[159,140334,49602],{"class":192},[159,140336,140337],{"class":192}," gtk-common-themes\n",[159,140339,140340],{"class":161,"line":261},[159,140341,140342],{"class":1135},"#移除其它...\n",[159,140344,140345],{"class":161,"line":603},[159,140346,17636],{"class":165},[159,140348,140349],{"class":161,"line":621},[159,140350,140351],{"class":1135},"#移除core22,bare以及snapd\n",[159,140353,140354,140356,140358,140360],{"class":161,"line":634},[159,140355,48101],{"class":185},[159,140357,140284],{"class":192},[159,140359,49602],{"class":192},[159,140361,140362],{"class":192}," core22\n",[159,140364,140365,140367,140369,140371],{"class":161,"line":640},[159,140366,48101],{"class":185},[159,140368,140284],{"class":192},[159,140370,49602],{"class":192},[159,140372,140373],{"class":192}," bare\n",[159,140375,140376,140378,140380,140382],{"class":161,"line":1075},[159,140377,48101],{"class":185},[159,140379,140284],{"class":192},[159,140381,49602],{"class":192},[159,140383,140384],{"class":192}," snapd\n",[14,140386,140387],{},[23,140388],{"alt":25,"src":140389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,140391,140392],{},"输入以下命令查看是否还有snap包",[151,140394,140396],{"className":138596,"code":140395,"language":138598,"meta":25,"style":25},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[49,140397,140398,140404,140408,140412,140416],{"__ignoreMap":25},[159,140399,140400,140402],{"class":161,"line":162},[159,140401,140252],{"class":185},[159,140403,140255],{"class":192},[159,140405,140406],{"class":161,"line":176},[159,140407,140104],{"class":1135},[159,140409,140410],{"class":161,"line":203},[159,140411,140128],{"class":185},[159,140413,140414],{"class":161,"line":223},[159,140415,140137],{"class":1135},[159,140417,140418],{"class":161,"line":233},[159,140419,140171],{"class":185},[14,140421,140422],{},[23,140423],{"alt":25,"src":140424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[42,140426,140428],{"id":140427},"_324-移除snap","3.2.4 移除snap",[14,140430,140431,140432,140437],{},"在删除掉",[8085,140433,140436],{"href":140434,"rel":140435},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[15923],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[151,140439,140441],{"className":138596,"code":140440,"language":138598,"meta":25,"style":25}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[49,140442,140443,140448,140461,140466,140477],{"__ignoreMap":25},[159,140444,140445],{"class":161,"line":162},[159,140446,140447],{"class":1135}," #使用apt移除掉snap\n",[159,140449,140450,140452,140454,140456,140459],{"class":161,"line":176},[159,140451,48101],{"class":185},[159,140453,138617],{"class":192},[159,140455,138925],{"class":192},[159,140457,140458],{"class":1146}," --purge",[159,140460,140384],{"class":192},[159,140462,140463],{"class":161,"line":203},[159,140464,140465],{"class":1135},"#移除snapd的一些目录\n",[159,140467,140468,140470,140472,140474],{"class":161,"line":223},[159,140469,48101],{"class":185},[159,140471,139853],{"class":192},[159,140473,48848],{"class":1146},[159,140475,140476],{"class":192}," \u002Fvar\u002Fcache\u002Fsnapd\n",[159,140478,140479,140481,140483,140485],{"class":161,"line":233},[159,140480,48101],{"class":185},[159,140482,139853],{"class":192},[159,140484,48848],{"class":1146},[159,140486,140487],{"class":192}," ~\u002Fsnap\n",[14,140489,140490,140491,140494],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[49,140492,140493],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[42,140496,140498],{"id":140497},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,140500,140501],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[151,140503,140505],{"className":138596,"code":140504,"language":138598,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[49,140506,140507],{"__ignoreMap":25},[159,140508,140509,140511,140513],{"class":161,"line":162},[159,140510,48101],{"class":185},[159,140512,139883],{"class":192},[159,140514,140515],{"class":192}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,140517,140518,140519,140522],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[49,140520,140521],{},":wq"," 回车",[151,140524,140526],{"className":138596,"code":140525,"language":138598,"meta":25,"style":25},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[49,140527,140528,140535,140549],{"__ignoreMap":25},[159,140529,140530,140533],{"class":161,"line":162},[159,140531,140532],{"class":185},"Package:",[159,140534,140384],{"class":192},[159,140536,140537,140540,140543,140546],{"class":161,"line":176},[159,140538,140539],{"class":185},"Pin:",[159,140541,140542],{"class":192}," release",[159,140544,140545],{"class":192}," a=",[159,140547,140548],{"class":1146},"*\n",[159,140550,140551,140554],{"class":161,"line":203},[159,140552,140553],{"class":185},"Pin-Priority:",[159,140555,140556],{"class":1146}," -10\n",[14,140558,140559],{},[23,140560],{"alt":25,"src":140561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[42,140563,140565],{"id":140564},"_326-测试是否成功","3.2.6 测试是否成功",[151,140567,140569],{"className":138596,"code":140568,"language":138598,"meta":25,"style":25},"sudo apt update\nsudo apt install firefox\n",[49,140570,140571,140579],{"__ignoreMap":25},[159,140572,140573,140575,140577],{"class":161,"line":162},[159,140574,48101],{"class":185},[159,140576,138617],{"class":192},[159,140578,49765],{"class":192},[159,140580,140581,140583,140585,140587],{"class":161,"line":176},[159,140582,48101],{"class":185},[159,140584,138617],{"class":192},[159,140586,47359],{"class":192},[159,140588,140305],{"class":192},[14,140590,140591],{},"这里提示snapd无法被安装，就证明成功了",[14,140593,140594],{},[23,140595],{"alt":25,"src":140596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[42,140598,140600],{"id":140599},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,140602,140603],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,140605,140606],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,140608,140609],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[151,140611,140613],{"className":138596,"code":140612,"language":138598,"meta":25,"style":25},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[49,140614,140615,140620,140629,140634,140642],{"__ignoreMap":25},[159,140616,140617],{"class":161,"line":162},[159,140618,140619],{"class":1135},"# 添加Mozilla提供的源\n",[159,140621,140622,140624,140626],{"class":161,"line":176},[159,140623,48101],{"class":185},[159,140625,140144],{"class":192},[159,140627,140628],{"class":192}," ppa:mozillateam\u002Fppa\n",[159,140630,140631],{"class":161,"line":203},[159,140632,140633],{"class":1135},"# 安装Firefox\n",[159,140635,140636,140638,140640],{"class":161,"line":223},[159,140637,48101],{"class":185},[159,140639,138617],{"class":192},[159,140641,49765],{"class":192},[159,140643,140644,140646,140648,140650],{"class":161,"line":233},[159,140645,48101],{"class":185},[159,140647,138617],{"class":192},[159,140649,47359],{"class":192},[159,140651,140305],{"class":192},[42,140653,140655],{"id":140654},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,140657,140658],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,140660,140661],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[151,140663,140665],{"className":138596,"code":140664,"language":138598,"meta":25,"style":25},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[49,140666,140667,140672,140682,140690,140694],{"__ignoreMap":25},[159,140668,140669],{"class":161,"line":162},[159,140670,140671],{"class":1135},"#删掉禁止安装snap的配置文件\n",[159,140673,140674,140676,140678,140680],{"class":161,"line":176},[159,140675,48101],{"class":185},[159,140677,139853],{"class":192},[159,140679,48848],{"class":1146},[159,140681,140515],{"class":192},[159,140683,140684,140686,140688],{"class":161,"line":203},[159,140685,48101],{"class":185},[159,140687,138617],{"class":192},[159,140689,49765],{"class":192},[159,140691,140692],{"class":161,"line":223},[159,140693,590],{"emptyLinePlaceholder":589},[159,140695,140696,140698,140700],{"class":161,"line":233},[159,140697,48101],{"class":185},[159,140699,138617],{"class":192},[159,140701,140702],{"class":192}," dist-update\n",[37,140704,140706],{"id":140705},"_33-中文输入法","3.3 中文输入法",[42,140708,140710],{"id":140709},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,140712,140713],{},"官网下载搜狗输入法",[14,140715,140716],{},[23,140717],{"alt":25,"src":140718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,140720,140721],{},[23,140722],{"alt":25,"src":140723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,140725,140726],{},"打开终端输入如下",[151,140728,140730],{"className":138596,"code":140729,"language":138598,"meta":25,"style":25},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[49,140731,140732,140739],{"__ignoreMap":25},[159,140733,140734,140736],{"class":161,"line":162},[159,140735,122576],{"class":1146},[159,140737,140738],{"class":192}," ~\u002FDownloads\u002F\n",[159,140740,140741,140743,140745,140747],{"class":161,"line":176},[159,140742,48101],{"class":185},[159,140744,138617],{"class":192},[159,140746,47359],{"class":192},[159,140748,140749],{"class":192}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,140751,140752],{},"打开Fcitx",[14,140754,140755,140758],{},[23,140756],{"alt":25,"src":140757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[23,140759],{"alt":25,"src":140760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,140762,140763],{},[23,140764],{"alt":25,"src":140765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,140767,140768],{},"添加搜狗输入法",[14,140770,140771],{},[23,140772],{"alt":25,"src":140773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,140775,140776],{},[23,140777],{"alt":25,"src":140778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,140780,140781],{},"将搜狗输入法设置为唯一输入法",[14,140783,140784],{},[23,140785],{"alt":25,"src":140786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[42,140788,140790],{"id":140789},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[134,140792,140793],{},[106,140794,140795],{},"卸载旧输入法",[151,140797,140799],{"className":139823,"code":140798,"language":139825,"meta":25,"style":25},"sudo apt purge fcitx* ibus*\n",[49,140800,140801],{"__ignoreMap":25},[159,140802,140803,140805,140807,140809,140812,140814,140817],{"class":161,"line":162},[159,140804,48101],{"class":185},[159,140806,138617],{"class":192},[159,140808,138958],{"class":192},[159,140810,140811],{"class":192}," fcitx",[159,140813,4777],{"class":1146},[159,140815,140816],{"class":192}," ibus",[159,140818,140548],{"class":1146},[134,140820,140821],{"start":176},[106,140822,140823],{},"安装Fcitx5",[151,140825,140827],{"className":138596,"code":140826,"language":138598,"meta":25,"style":25},"# 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",[49,140828,140829,140834,140848,140852,140857,140866,140874],{"__ignoreMap":25},[159,140830,140831],{"class":161,"line":162},[159,140832,140833],{"class":1135},"# Ubuntu22.04及以上、Debian12及以上\n",[159,140835,140836,140838,140840,140842,140845],{"class":161,"line":176},[159,140837,48101],{"class":185},[159,140839,138617],{"class":192},[159,140841,47359],{"class":192},[159,140843,140844],{"class":192}," fcitx5",[159,140846,140847],{"class":192}," fcitx5-chinese-addons\n",[159,140849,140850],{"class":161,"line":203},[159,140851,590],{"emptyLinePlaceholder":589},[159,140853,140854],{"class":161,"line":223},[159,140855,140856],{"class":1135},"# Ubuntu20.04\n",[159,140858,140859,140861,140863],{"class":161,"line":233},[159,140860,48101],{"class":185},[159,140862,140144],{"class":192},[159,140864,140865],{"class":192}," ppa:zhsj\u002Ffcitx5\n",[159,140867,140868,140870,140872],{"class":161,"line":239},[159,140869,48101],{"class":185},[159,140871,138617],{"class":192},[159,140873,49765],{"class":192},[159,140875,140876,140878,140880,140882,140884],{"class":161,"line":245},[159,140877,48101],{"class":185},[159,140879,138617],{"class":192},[159,140881,47359],{"class":192},[159,140883,140844],{"class":192},[159,140885,140847],{"class":192},[134,140887,140888,140891],{"start":203},[106,140889,140890],{},"Reboot System",[106,140892,140893],{},"启动Fcitx5",[14,140895,140896],{},[23,140897],{"alt":25,"src":140898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[134,140900,140901],{"start":233},[106,140902,140903],{},"修改一些设置",[14,140905,140906],{},"将Pinyin和Keyboard - English US加入到左边。",[14,140908,140909],{},[23,140910],{"alt":25,"src":140911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,140913,140914],{},"添加快捷键以便于更好切换中英文",[14,140916,140917],{},[23,140918],{"alt":25,"src":140919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[134,140921,140922],{"start":239},[106,140923,140924],{},"重启",[151,140926,140928],{"className":139823,"code":140927,"language":139825,"meta":25,"style":25},"sudo shutdown -r now\n",[49,140929,140930],{"__ignoreMap":25},[159,140931,140932,140934,140937,140940],{"class":161,"line":162},[159,140933,48101],{"class":185},[159,140935,140936],{"class":192}," shutdown",[159,140938,140939],{"class":1146}," -r",[159,140941,140942],{"class":192}," now\n",[134,140944,140945],{"start":245},[106,140946,140947],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,140949,140950],{},[8085,140951,140952],{"href":140952,"rel":140953},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[15923],[134,140955,140956],{"start":251},[106,140957,140958],{},"再重启",[151,140960,140961],{"className":139823,"code":140927,"language":139825,"meta":25,"style":25},[49,140962,140963],{"__ignoreMap":25},[159,140964,140965,140967,140969,140971],{"class":161,"line":162},[159,140966,48101],{"class":185},[159,140968,140936],{"class":192},[159,140970,140939],{"class":1146},[159,140972,140942],{"class":192},[37,140974,140976],{"id":140975},"_34-pip3源替换","3.4 pip3源替换",[14,140978,140979],{},"非Debian系发行版需要做。",[14,140981,140982],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,140984,140985],{},"使用dnf的系统也可能不用做。",[151,140987,140989],{"className":138596,"code":140988,"language":138598,"meta":25,"style":25},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[49,140990,140991,140996,141003,141008,141013],{"__ignoreMap":25},[159,140992,140993],{"class":161,"line":162},[159,140994,140995],{"class":1135},"# 检查是否已安装 pip\n",[159,140997,140998,141001],{"class":161,"line":176},[159,140999,141000],{"class":185},"pip3",[159,141002,49816],{"class":1146},[159,141004,141005],{"class":161,"line":203},[159,141006,141007],{"class":1135},"# 如果未安装，先安装 pip3（见下方）\n",[159,141009,141010],{"class":161,"line":223},[159,141011,141012],{"class":1135},"# 配置 pip 使用清华源\n",[159,141014,141015,141017,141020,141023,141026],{"class":161,"line":233},[159,141016,141000],{"class":185},[159,141018,141019],{"class":192}," config",[159,141021,141022],{"class":192}," set",[159,141024,141025],{"class":192}," global.index-url",[159,141027,141028],{"class":192}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,141030,141031],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,141033,141034],{},[23,141035],{"alt":25,"src":141036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[151,141038,141040],{"className":138596,"code":141039,"language":138598,"meta":25,"style":25},"#安装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",[49,141041,141042,141047,141055,141066,141070,141075,141094,141098,141103,141115,141119,141124],{"__ignoreMap":25},[159,141043,141044],{"class":161,"line":162},[159,141045,141046],{"class":1135},"#安装pip3\n",[159,141048,141049,141051,141053],{"class":161,"line":176},[159,141050,48101],{"class":185},[159,141052,138617],{"class":192},[159,141054,49765],{"class":192},[159,141056,141057,141059,141061,141063],{"class":161,"line":203},[159,141058,48101],{"class":185},[159,141060,49599],{"class":192},[159,141062,47359],{"class":192},[159,141064,141065],{"class":192}," python3-pip\n",[159,141067,141068],{"class":161,"line":223},[159,141069,590],{"emptyLinePlaceholder":589},[159,141071,141072],{"class":161,"line":233},[159,141073,141074],{"class":1135},"#更新pip3\n",[159,141076,141077,141079,141081,141083,141085,141087,141090,141092],{"class":161,"line":239},[159,141078,122179],{"class":185},[159,141080,122182],{"class":1146},[159,141082,122205],{"class":192},[159,141084,47359],{"class":192},[159,141086,49953],{"class":1146},[159,141088,141089],{"class":192}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[159,141091,122210],{"class":1146},[159,141093,122213],{"class":192},[159,141095,141096],{"class":161,"line":245},[159,141097,590],{"emptyLinePlaceholder":589},[159,141099,141100],{"class":161,"line":251},[159,141101,141102],{"class":1135},"#设置pip源为清华源\n",[159,141104,141105,141107,141109,141111,141113],{"class":161,"line":261},[159,141106,141000],{"class":185},[159,141108,141019],{"class":192},[159,141110,141022],{"class":192},[159,141112,141025],{"class":192},[159,141114,141028],{"class":192},[159,141116,141117],{"class":161,"line":603},[159,141118,590],{"emptyLinePlaceholder":589},[159,141120,141121],{"class":161,"line":621},[159,141122,141123],{"class":1135},"#测试\n",[159,141125,141126,141128,141130,141132,141134,141136],{"class":161,"line":634},[159,141127,122179],{"class":185},[159,141129,122182],{"class":1146},[159,141131,122205],{"class":192},[159,141133,47359],{"class":192},[159,141135,122210],{"class":1146},[159,141137,122213],{"class":192},[14,141139,141140],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,141142,141143],{},[23,141144],{"alt":25,"src":141145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[37,141147,141149],{"id":141148},"_35-显卡驱动安装","3.5 显卡驱动安装",[42,141151,141153],{"id":141152},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[151,141155,141157],{"className":139823,"code":141156,"language":139825,"meta":25,"style":25},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[49,141158,141159,141164,141179,141184],{"__ignoreMap":25},[159,141160,141161],{"class":161,"line":162},[159,141162,141163],{"class":1135},"# 如果是使用apt安装的驱动\n",[159,141165,141166,141168,141170,141172,141174,141177],{"class":161,"line":176},[159,141167,48101],{"class":185},[159,141169,49599],{"class":192},[159,141171,49602],{"class":192},[159,141173,140458],{"class":1146},[159,141175,141176],{"class":192}," nvidia",[159,141178,140548],{"class":1146},[159,141180,141181],{"class":161,"line":203},[159,141182,141183],{"class":1135},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[159,141185,141186,141188],{"class":161,"line":223},[159,141187,48101],{"class":185},[159,141189,141190],{"class":192}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[42,141192,141194],{"id":141193},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[326,141196,141198],{"id":141197},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[46436,141200,141202],{"id":141201},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[151,141204,141206],{"className":139823,"code":141205,"language":139825,"meta":25,"style":25},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[49,141207,141208,141213,141224,141229,141239,141244],{"__ignoreMap":25},[159,141209,141210],{"class":161,"line":162},[159,141211,141212],{"class":1135},"# 安装英伟达驱动\n",[159,141214,141215,141217,141219,141221],{"class":161,"line":176},[159,141216,48101],{"class":185},[159,141218,138617],{"class":192},[159,141220,47359],{"class":192},[159,141222,141223],{"class":192}," nvidia-driver-版本号\n",[159,141225,141226],{"class":161,"line":203},[159,141227,141228],{"class":1135},"# 重启 \n",[159,141230,141231,141233,141235,141237],{"class":161,"line":223},[159,141232,48101],{"class":185},[159,141234,140936],{"class":192},[159,141236,140939],{"class":1146},[159,141238,140942],{"class":192},[159,141240,141241],{"class":161,"line":233},[159,141242,141243],{"class":1135},"# 检查驱动是否安装成功\n",[159,141245,141246],{"class":161,"line":239},[159,141247,141248],{"class":185},"nvidia-smi\n",[46436,141250,141252],{"id":141251},"_35212-debian","3.5.2.1.2 Debian",[151,141254,141256],{"className":139823,"code":141255,"language":139825,"meta":25,"style":25},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[49,141257,141258,141262,141276,141280,141290,141294],{"__ignoreMap":25},[159,141259,141260],{"class":161,"line":162},[159,141261,141212],{"class":1135},[159,141263,141264,141266,141268,141270,141273],{"class":161,"line":176},[159,141265,48101],{"class":185},[159,141267,138617],{"class":192},[159,141269,47359],{"class":192},[159,141271,141272],{"class":192}," nvidia-driver",[159,141274,141275],{"class":192}," nvidia-settings\n",[159,141277,141278],{"class":161,"line":203},[159,141279,141228],{"class":1135},[159,141281,141282,141284,141286,141288],{"class":161,"line":223},[159,141283,48101],{"class":185},[159,141285,140936],{"class":192},[159,141287,140939],{"class":1146},[159,141289,140942],{"class":192},[159,141291,141292],{"class":161,"line":233},[159,141293,141243],{"class":1135},[159,141295,141296],{"class":161,"line":239},[159,141297,141248],{"class":185},[326,141299,141301],{"id":141300},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,141303,141304,141305,141308],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[61,141306,141307],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,141310,141311,141312],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[47079,141313,141314],{},[61,141315,141316],{},"（也可以不禁用桌面环境，直接进行下一步。）",[151,141318,141320],{"className":139823,"code":141319,"language":139825,"meta":25,"style":25},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[49,141321,141322,141327,141337,141342,141355,141360],{"__ignoreMap":25},[159,141323,141324],{"class":161,"line":162},[159,141325,141326],{"class":1135},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[159,141328,141329,141331,141334],{"class":161,"line":176},[159,141330,48101],{"class":185},[159,141332,141333],{"class":192}," telinit",[159,141335,141336],{"class":1146}," 3\n",[159,141338,141339],{"class":161,"line":203},[159,141340,141341],{"class":1135},"# ubuntu 使用下方命令\n",[159,141343,141344,141346,141349,141352],{"class":161,"line":223},[159,141345,48101],{"class":185},[159,141347,141348],{"class":192}," service",[159,141350,141351],{"class":192}," lightdm",[159,141353,141354],{"class":192}," stop\n",[159,141356,141357],{"class":161,"line":233},[159,141358,141359],{"class":1135},"# Fedora 使用下方命令\n",[159,141361,141362,141364,141366,141369],{"class":161,"line":239},[159,141363,48101],{"class":185},[159,141365,50036],{"class":192},[159,141367,141368],{"class":192}," isolate",[159,141370,141371],{"class":192}," multi-user.target\n",[14,141373,141374],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[151,141376,141378],{"className":139823,"code":141377,"language":139825,"meta":25,"style":25},"# 编译环境+准备工作\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",[49,141379,141380,141385,141396,141401,141408,141413,141425,141430,141437,141442],{"__ignoreMap":25},[159,141381,141382],{"class":161,"line":162},[159,141383,141384],{"class":1135},"# 编译环境+准备工作\n",[159,141386,141387,141389,141391,141393],{"class":161,"line":176},[159,141388,48101],{"class":185},[159,141390,138617],{"class":192},[159,141392,47359],{"class":192},[159,141394,141395],{"class":192}," build-essential\n",[159,141397,141398],{"class":161,"line":203},[159,141399,141400],{"class":1135},"# 进入到.run目录中\n",[159,141402,141403,141405],{"class":161,"line":223},[159,141404,122576],{"class":1146},[159,141406,141407],{"class":192}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[159,141409,141410],{"class":161,"line":233},[159,141411,141412],{"class":1135},"# 给驱动文件增加可执行权限：\n",[159,141414,141415,141417,141419,141422],{"class":161,"line":239},[159,141416,48101],{"class":185},[159,141418,48104],{"class":192},[159,141420,141421],{"class":192}," a+x",[159,141423,141424],{"class":192}," NVIDIA-Linux-x86_64-550.107.02.run\n",[159,141426,141427],{"class":161,"line":245},[159,141428,141429],{"class":1135},"# 然后执行安装：\n",[159,141431,141432,141434],{"class":161,"line":251},[159,141433,48101],{"class":185},[159,141435,141436],{"class":192}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[159,141438,141439],{"class":161,"line":261},[159,141440,141441],{"class":1135},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[159,141443,141444,141446,141449],{"class":161,"line":603},[159,141445,48101],{"class":185},[159,141447,141448],{"class":192}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[159,141450,141451],{"class":1146},"  --no-opengl-files\n",[14,141453,141454],{},"安装完毕重启即可",[151,141456,141458],{"className":139823,"code":141457,"language":139825,"meta":25,"style":25},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[49,141459,141460,141464,141470,141474],{"__ignoreMap":25},[159,141461,141462],{"class":161,"line":162},[159,141463,141228],{"class":1135},[159,141465,141466,141468],{"class":161,"line":176},[159,141467,48101],{"class":185},[159,141469,50170],{"class":192},[159,141471,141472],{"class":161,"line":203},[159,141473,141243],{"class":1135},[159,141475,141476],{"class":161,"line":223},[159,141477,141248],{"class":185},[42,141479,141481],{"id":141480},"_353-安装cuda","3.5.3 安装CUDA",[14,141483,141484],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,141486,141487],{},[23,141488],{"alt":25,"src":141489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[134,141491,141492],{},[106,141493,141494],{},"先查看显卡驱动所支持的最高CUDA版本",[151,141496,141497],{"className":139823,"code":141248,"language":139825,"meta":25,"style":25},[49,141498,141499],{"__ignoreMap":25},[159,141500,141501],{"class":161,"line":162},[159,141502,141248],{"class":185},[14,141504,141505],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,141507,141508],{},[23,141509],{"alt":25,"src":141510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[134,141512,141513],{"start":176},[106,141514,141515],{},"下载CUDA并安装CUDA",[14,141517,139602,141518],{},[8085,141519,139605],{"href":139605,"rel":141520},[15923],[14,141522,141523],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,141525,141526],{},[23,141527],{"alt":25,"src":141528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,141530,141531,141532,141537],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[8085,141533,141536],{"href":141534,"rel":141535},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[15923],"Vinci机器人队单片机教程","）",[14,141539,141540],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,141542,141543],{},[23,141544],{"alt":25,"src":141545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,141547,141548],{},"将最下方框框里的命令敲入终端",[151,141550,141552],{"className":139823,"code":141551,"language":139825,"meta":25,"style":25},"# 在当前文件夹下创建一个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",[49,141553,141554,141559,141568,141573,141580,141585,141593,141598,141609,141614],{"__ignoreMap":25},[159,141555,141556],{"class":161,"line":162},[159,141557,141558],{"class":1135},"# 在当前文件夹下创建一个ttt的子文件夹\n",[159,141560,141561,141563,141565],{"class":161,"line":176},[159,141562,122566],{"class":185},[159,141564,52738],{"class":1146},[159,141566,141567],{"class":192}," .\u002Fttt\n",[159,141569,141570],{"class":161,"line":203},[159,141571,141572],{"class":1135},"# 进入ttt文件夹\n",[159,141574,141575,141577],{"class":161,"line":223},[159,141576,122576],{"class":1146},[159,141578,141579],{"class":192}," ttt\n",[159,141581,141582],{"class":161,"line":233},[159,141583,141584],{"class":1135},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[159,141586,141587,141590],{"class":161,"line":239},[159,141588,141589],{"class":185},"wget",[159,141591,141592],{"class":192}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[159,141594,141595],{"class":161,"line":245},[159,141596,141597],{"class":1135},"# 给予权限\n",[159,141599,141600,141602,141604,141606],{"class":161,"line":251},[159,141601,48101],{"class":185},[159,141603,48104],{"class":192},[159,141605,141421],{"class":192},[159,141607,141608],{"class":192}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[159,141610,141611],{"class":161,"line":261},[159,141612,141613],{"class":1135},"# 运行脚本\n",[159,141615,141616,141618],{"class":161,"line":603},[159,141617,48101],{"class":185},[159,141619,141608],{"class":192},[14,141621,141622],{},[23,141623],{"alt":25,"src":141624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,141626,141627],{},"正在安装中：",[14,141629,141630],{},[23,141631],{"alt":25,"src":141632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,141634,141635],{},"输入accept接受即可",[14,141637,141638],{},[23,141639],{"alt":25,"src":141640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,141642,141643],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,141645,141646],{},[23,141647],{"alt":25,"src":141648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,141650,141651],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,141653,141654],{},[23,141655],{"alt":25,"src":141656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[134,141658,141659],{"start":203},[106,141660,141661],{},"配置环境",[14,141663,141664],{},"根据上方确认一下路径，比如我上面红色框起来的为",[151,141666,141668],{"className":139823,"code":141667,"language":139825,"meta":25,"style":25},"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",[49,141669,141670,141686,141701],{"__ignoreMap":25},[159,141671,141672,141675,141678,141681,141684],{"class":161,"line":162},[159,141673,141674],{"class":185},"Please",[159,141676,141677],{"class":192}," make",[159,141679,141680],{"class":192}," sure",[159,141682,141683],{"class":192}," that",[159,141685,17636],{"class":165},[159,141687,141688,141690,141693,141696,141699],{"class":161,"line":176},[159,141689,21708],{"class":185},[159,141691,141692],{"class":192},"   PATH",[159,141694,141695],{"class":192}," includes",[159,141697,141698],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[159,141700,17636],{"class":165},[159,141702,141703,141705,141708,141710,141713,141716,141718,141721,141724,141727,141730,141732,141735,141737],{"class":161,"line":203},[159,141704,21708],{"class":185},[159,141706,141707],{"class":192},"   LD_LIBRARY_PATH",[159,141709,141695],{"class":192},[159,141711,141712],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[159,141714,141715],{"class":192}," or,",[159,141717,28826],{"class":192},[159,141719,141720],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[159,141722,141723],{"class":192}," to",[159,141725,141726],{"class":192}," \u002Fetc\u002Fld.so.conf",[159,141728,141729],{"class":192}," and",[159,141731,50753],{"class":192},[159,141733,141734],{"class":192}," ldconfig",[159,141736,11654],{"class":192},[159,141738,141739],{"class":192}," root\n",[14,141741,141742],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[151,141744,141746],{"className":139823,"code":141745,"language":139825,"meta":25,"style":25},"which nvcc\n",[49,141747,141748],{"__ignoreMap":25},[159,141749,141750,141753],{"class":161,"line":162},[159,141751,141752],{"class":1146},"which",[159,141754,141755],{"class":192}," nvcc\n",[14,141757,141758],{},[23,141759],{"alt":25,"src":141760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,141762,141763],{},"所以我进行以下操作：",[151,141765,141767],{"className":139823,"code":141766,"language":139825,"meta":25,"style":25},"sudo vim ~\u002F.bashrc\n",[49,141768,141769],{"__ignoreMap":25},[159,141770,141771,141773,141775],{"class":161,"line":162},[159,141772,48101],{"class":185},[159,141774,139883],{"class":192},[159,141776,141777],{"class":192}," ~\u002F.bashrc\n",[14,141779,141780],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[151,141782,141784],{"className":139823,"code":141783,"language":139825,"meta":25,"style":25},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[49,141785,141786,141798],{"__ignoreMap":25},[159,141787,141788,141790,141793,141795],{"class":161,"line":162},[159,141789,48566],{"class":1142},[159,141791,141792],{"class":165}," PATH",[159,141794,189],{"class":1142},[159,141796,141797],{"class":165},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[159,141799,141800,141802,141805,141807],{"class":161,"line":176},[159,141801,48566],{"class":1142},[159,141803,141804],{"class":165}," LD_LIBRARY_PATH",[159,141806,189],{"class":1142},[159,141808,141809],{"class":165},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,141811,141812],{},[23,141813],{"alt":25,"src":141814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[151,141816,141818],{"className":139823,"code":141817,"language":139825,"meta":25,"style":25},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[49,141819,141820,141825,141831,141836],{"__ignoreMap":25},[159,141821,141822],{"class":161,"line":162},[159,141823,141824],{"class":1135},"# 刷新当前终端的环境变量\n",[159,141826,141827,141829],{"class":161,"line":176},[159,141828,122193],{"class":1146},[159,141830,141777],{"class":192},[159,141832,141833],{"class":161,"line":203},[159,141834,141835],{"class":1135},"# 验证CUDA是否安装成功\n",[159,141837,141838,141841],{"class":161,"line":223},[159,141839,141840],{"class":185},"nvcc",[159,141842,141843],{"class":1146}," -V\n",[14,141845,141846],{},"出现下图这种则安装成功。",[14,141848,141849],{},[23,141850],{"alt":25,"src":141851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[42,141853,141855],{"id":141854},"_354-安装cudnn","3.5.4 安装cuDNN",[134,141857,141858],{},[106,141859,141860],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,141862,141863,141864,141869],{},"前往 NVIDIA cuDNN 下载页面：",[8085,141865,141868],{"href":141866,"rel":141867},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[15923],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,141871,141872],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,141874,141875],{},[23,141876],{"alt":25,"src":141877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,141879,141880],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,141882,141883],{},[23,141884],{"alt":25,"src":141885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,141887,141888],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,141890,141891],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,141893,141894],{},[61,141895,141896],{},"我这里选择所有Linux X86_64最通用的办法：",[14,141898,141899],{},"下载好的：",[14,141901,141902],{},[23,141903],{"alt":25,"src":141904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[134,141906,141907],{"start":176},[106,141908,141909],{},"安装cuDNN",[14,141911,141912],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,141914,141915],{},[23,141916],{"alt":25,"src":141917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,141919,141920],{},"解压文件，并复制到对应位置完成安装",[151,141922,141924],{"className":139823,"code":141923,"language":139825,"meta":25,"style":25},"# 解压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",[49,141925,141926,141931,141942,141947,141954,141959,141975,141989,141994,142005,142014,142018,142034],{"__ignoreMap":25},[159,141927,141928],{"class":161,"line":162},[159,141929,141930],{"class":1135},"# 解压cuDNN文件\n",[159,141932,141933,141936,141939],{"class":161,"line":176},[159,141934,141935],{"class":185},"tar",[159,141937,141938],{"class":1146}," -xvf",[159,141940,141941],{"class":192}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[159,141943,141944],{"class":161,"line":203},[159,141945,141946],{"class":1135},"# cd进文件夹\n",[159,141948,141949,141951],{"class":161,"line":223},[159,141950,122576],{"class":1146},[159,141952,141953],{"class":192}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[159,141955,141956],{"class":161,"line":233},[159,141957,141958],{"class":1135},"# 复制cuDNN文件到CUDA目录\n",[159,141960,141961,141963,141965,141968,141970,141973],{"class":161,"line":239},[159,141962,48101],{"class":185},[159,141964,51384],{"class":192},[159,141966,141967],{"class":192}," include\u002Fcudnn",[159,141969,4777],{"class":1146},[159,141971,141972],{"class":192},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[159,141974,17636],{"class":165},[159,141976,141977,141979,141981,141984,141986],{"class":161,"line":245},[159,141978,48101],{"class":185},[159,141980,51384],{"class":192},[159,141982,141983],{"class":192}," lib\u002Flibcudnn",[159,141985,4777],{"class":1146},[159,141987,141988],{"class":192},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[159,141990,141991],{"class":161,"line":251},[159,141992,141993],{"class":1135},"# 对比一下有没有缺文件\n",[159,141995,141996,141998,142001,142003],{"class":161,"line":261},[159,141997,50284],{"class":185},[159,141999,142000],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[159,142002,4777],{"class":1146},[159,142004,17636],{"class":165},[159,142006,142007,142009,142012],{"class":161,"line":603},[159,142008,50284],{"class":185},[159,142010,142011],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[159,142013,140548],{"class":1146},[159,142015,142016],{"class":161,"line":621},[159,142017,141597],{"class":1135},[159,142019,142020,142022,142024,142027,142029,142031],{"class":161,"line":634},[159,142021,48101],{"class":185},[159,142023,48104],{"class":192},[159,142025,142026],{"class":192}," a+r",[159,142028,142000],{"class":192},[159,142030,4777],{"class":1146},[159,142032,142033],{"class":165},"   \n",[159,142035,142036,142038,142040,142042,142044],{"class":161,"line":640},[159,142037,48101],{"class":185},[159,142039,48104],{"class":192},[159,142041,142026],{"class":192},[159,142043,142011],{"class":192},[159,142045,140548],{"class":1146},[134,142047,142048],{"start":203},[106,142049,142050],{},"检查是否安装成功",[151,142052,142054],{"className":139823,"code":142053,"language":139825,"meta":25,"style":25},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[49,142055,142056,142061],{"__ignoreMap":25},[159,142057,142058],{"class":161,"line":162},[159,142059,142060],{"class":1135},"# 检查cuDNN版本命令\n",[159,142062,142063,142066,142069,142071,142073,142076,142079],{"class":161,"line":176},[159,142064,142065],{"class":185},"cat",[159,142067,142068],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[159,142070,48633],{"class":1142},[159,142072,53758],{"class":185},[159,142074,142075],{"class":192}," CUDNN_MAJOR",[159,142077,142078],{"class":1146}," -A",[159,142080,71116],{"class":1146},[14,142082,142083],{},"出现下图这样的就是安装成功了",[14,142085,142086],{},[23,142087],{"alt":25,"src":142088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[134,142090,142091],{"start":223},[106,142092,142093],{},"软链接(一般不需要)",[151,142095,142097],{"className":139823,"code":142096,"language":139825,"meta":25,"style":25},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[49,142098,142099,142104],{"__ignoreMap":25},[159,142100,142101],{"class":161,"line":162},[159,142102,142103],{"class":1135},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[159,142105,142106,142108],{"class":161,"line":176},[159,142107,48101],{"class":185},[159,142109,142110],{"class":192}," ldconfig\n",[14,142112,142113],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[151,142115,142120],{"className":142116,"code":142117,"language":142118,"meta":142119,"style":25},"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",[49,142121,142122,142127,142132,142137,142142,142147,142152],{"__ignoreMap":25},[159,142123,142124],{"class":161,"line":162},[159,142125,142126],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[159,142128,142129],{"class":161,"line":176},[159,142130,142131],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[159,142133,142134],{"class":161,"line":203},[159,142135,142136],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[159,142138,142139],{"class":161,"line":223},[159,142140,142141],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[159,142143,142144],{"class":161,"line":233},[159,142145,142146],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[159,142148,142149],{"class":161,"line":239},[159,142150,142151],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[159,142153,142154],{"class":161,"line":245},[159,142155,142156],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,142158,142159],{},"运行下方的命令",[151,142161,142163],{"className":139823,"code":142162,"language":139825,"meta":25,"style":25},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[49,142164,142165,142170,142177,142182],{"__ignoreMap":25},[159,142166,142167],{"class":161,"line":162},[159,142168,142169],{"class":1135},"# cd进入CUDA路径\n",[159,142171,142172,142174],{"class":161,"line":176},[159,142173,122576],{"class":1146},[159,142175,142176],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[159,142178,142179],{"class":161,"line":203},[159,142180,142181],{"class":1135}," # 查看本路径下的需要软链接的文件名\n",[159,142183,142184],{"class":161,"line":223},[159,142185,142186],{"class":185}," ls\n",[14,142188,142189],{},[23,142190],{"alt":25,"src":142191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,142193,142194,142195,41937,142198,41937,142201,142204],{},"如上图，我需要将",[49,142196,142197],{},"libcudnn_xxx_xxxxx.so.8.9.7",[49,142199,142200],{},"libcudnn_xxx_xxxxx.so.8",[49,142202,142203],{},"libcudnn_xxx_xxxxx.so","软链接",[151,142206,142208],{"className":139823,"code":142207,"language":139825,"meta":25,"style":25},"# 创建符号链接。对于每个 .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",[49,142209,142210,142215,142231,142245,142259,142273,142287,142301,142315,142320,142326,142331],{"__ignoreMap":25},[159,142211,142212],{"class":161,"line":162},[159,142213,142214],{"class":1135},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[159,142216,142217,142219,142222,142225,142228],{"class":161,"line":176},[159,142218,48101],{"class":185},[159,142220,142221],{"class":192}," ln",[159,142223,142224],{"class":1146}," -sf",[159,142226,142227],{"class":192}," libcudnn_cnn_train.so.8.9.7",[159,142229,142230],{"class":192}," libcudnn_cnn_train.so.8\n",[159,142232,142233,142235,142237,142239,142242],{"class":161,"line":203},[159,142234,48101],{"class":185},[159,142236,142221],{"class":192},[159,142238,142224],{"class":1146},[159,142240,142241],{"class":192}," libcudnn_adv_infer.so.8.9.7",[159,142243,142244],{"class":192}," libcudnn_adv_infer.so.8\n",[159,142246,142247,142249,142251,142253,142256],{"class":161,"line":223},[159,142248,48101],{"class":185},[159,142250,142221],{"class":192},[159,142252,142224],{"class":1146},[159,142254,142255],{"class":192}," libcudnn_adv_train.so.8.9.7",[159,142257,142258],{"class":192}," libcudnn_adv_train.so.8\n",[159,142260,142261,142263,142265,142267,142270],{"class":161,"line":233},[159,142262,48101],{"class":185},[159,142264,142221],{"class":192},[159,142266,142224],{"class":1146},[159,142268,142269],{"class":192}," libcudnn_cnn_infer.so.8.9.7",[159,142271,142272],{"class":192}," libcudnn_cnn_infer.so.8\n",[159,142274,142275,142277,142279,142281,142284],{"class":161,"line":239},[159,142276,48101],{"class":185},[159,142278,142221],{"class":192},[159,142280,142224],{"class":1146},[159,142282,142283],{"class":192}," libcudnn.so.8.9.7",[159,142285,142286],{"class":192}," libcudnn.so.8\n",[159,142288,142289,142291,142293,142295,142298],{"class":161,"line":245},[159,142290,48101],{"class":185},[159,142292,142221],{"class":192},[159,142294,142224],{"class":1146},[159,142296,142297],{"class":192}," libcudnn_ops_infer.so.8.9.7",[159,142299,142300],{"class":192}," libcudnn_ops_infer.so.8\n",[159,142302,142303,142305,142307,142309,142312],{"class":161,"line":251},[159,142304,48101],{"class":185},[159,142306,142221],{"class":192},[159,142308,142224],{"class":1146},[159,142310,142311],{"class":192}," libcudnn_ops_train.so.8.9.7",[159,142313,142314],{"class":192}," libcudnn_ops_train.so.8\n",[159,142316,142317],{"class":161,"line":261},[159,142318,142319],{"class":1135},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[159,142321,142322,142324],{"class":161,"line":603},[159,142323,48101],{"class":185},[159,142325,142110],{"class":192},[159,142327,142328],{"class":161,"line":621},[159,142329,142330],{"class":1135},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[159,142332,142333,142335,142338,142341,142343,142346],{"class":161,"line":634},[159,142334,50284],{"class":185},[159,142336,142337],{"class":1146}," -l",[159,142339,142340],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[159,142342,4777],{"class":1146},[159,142344,142345],{"class":192},".so",[159,142347,140548],{"class":1146},[42,142349,142351],{"id":142350},"_355-常见问题","3.5.5 常见问题",[134,142353,142354],{},[106,142355,142356],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[151,142358,142360],{"className":139823,"code":142359,"language":139825,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[49,142361,142362],{"__ignoreMap":25},[159,142363,142364,142366,142368],{"class":161,"line":162},[159,142365,48101],{"class":185},[159,142367,139883],{"class":192},[159,142369,142370],{"class":192}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,142372,142373],{},"blacklist-nouveau.conf文件内容如下：",[151,142375,142377],{"className":139823,"code":142376,"language":139825,"meta":25,"style":25},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[49,142378,142379,142387,142394,142406,142416],{"__ignoreMap":25},[159,142380,142381,142384],{"class":161,"line":162},[159,142382,142383],{"class":185},"blacklist",[159,142385,142386],{"class":192}," nouveau\n",[159,142388,142389,142391],{"class":161,"line":176},[159,142390,142383],{"class":185},[159,142392,142393],{"class":192}," lbm-nouveau\n",[159,142395,142396,142398,142401,142404],{"class":161,"line":203},[159,142397,137230],{"class":185},[159,142399,142400],{"class":192}," nouveau",[159,142402,142403],{"class":192}," modeset=",[159,142405,26716],{"class":1146},[159,142407,142408,142411,142413],{"class":161,"line":223},[159,142409,142410],{"class":1146},"alias",[159,142412,142400],{"class":192},[159,142414,142415],{"class":192}," off\n",[159,142417,142418,142420,142423],{"class":161,"line":233},[159,142419,142410],{"class":1146},[159,142421,142422],{"class":192}," lbm-nouveau",[159,142424,142415],{"class":192},[14,142426,142427],{},"接着运行下方命令",[151,142429,142431],{"className":139823,"code":142430,"language":139825,"meta":25,"style":25},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[49,142432,142433,142443,142448],{"__ignoreMap":25},[159,142434,142435,142437,142440],{"class":161,"line":162},[159,142436,48101],{"class":185},[159,142438,142439],{"class":192}," update-initramfs",[159,142441,142442],{"class":1146}," -u\n",[159,142444,142445],{"class":161,"line":176},[159,142446,142447],{"class":185},"或者\n",[159,142449,142450,142452,142455],{"class":161,"line":203},[159,142451,48101],{"class":185},[159,142453,142454],{"class":192}," dracut",[159,142456,142457],{"class":1146}," --force\n",[14,142459,142460],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[151,142462,142464],{"className":139823,"code":142463,"language":139825,"meta":25,"style":25},"lsmod | grep nouveau\n",[49,142465,142466],{"__ignoreMap":25},[159,142467,142468,142471,142473,142475],{"class":161,"line":162},[159,142469,142470],{"class":185},"lsmod",[159,142472,48633],{"class":1142},[159,142474,53758],{"class":185},[159,142476,142386],{"class":192},[134,142478,142479],{"start":176},[106,142480,142481],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[151,142483,142485],{"className":139823,"code":142484,"language":139825,"meta":25,"style":25},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[49,142486,142487],{"__ignoreMap":25},[159,142488,142489,142491,142493],{"class":161,"line":162},[159,142490,48101],{"class":185},[159,142492,139883],{"class":192},[159,142494,142495],{"class":192}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,142497,142498],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[151,142500,142502],{"className":139823,"code":142501,"language":139825,"meta":25,"style":25},"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",[49,142503,142504,142512,142520,142528,142535,142543,142553,142561],{"__ignoreMap":25},[159,142505,142506,142509],{"class":161,"line":162},[159,142507,142508],{"class":185},"Section",[159,142510,142511],{"class":192}," \"OutputClass\"\n",[159,142513,142514,142517],{"class":161,"line":176},[159,142515,142516],{"class":185},"   Identifier",[159,142518,142519],{"class":192}," \"nvidia\"\n",[159,142521,142522,142525],{"class":161,"line":203},[159,142523,142524],{"class":185},"   MatchDriver",[159,142526,142527],{"class":192}," \"nvidia-drm\"\n",[159,142529,142530,142533],{"class":161,"line":223},[159,142531,142532],{"class":185},"   Driver",[159,142534,142519],{"class":192},[159,142536,142537,142540],{"class":161,"line":233},[159,142538,142539],{"class":185},"   Option",[159,142541,142542],{"class":192}," \"AllowEmptyInitialConfiguration\"\n",[159,142544,142545,142547,142550],{"class":161,"line":239},[159,142546,142539],{"class":185},[159,142548,142549],{"class":192}," \"PrimaryGPU\"",[159,142551,142552],{"class":192}," \"yes\"\n",[159,142554,142555,142558],{"class":161,"line":245},[159,142556,142557],{"class":185},"   ModulePath",[159,142559,142560],{"class":192}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[159,142562,142563],{"class":161,"line":251},[159,142564,142565],{"class":185},"EndSection\n",[134,142567,142568],{"start":203},[106,142569,142570],{},"安装N卡驱动提示错误",[151,142572,142574],{"className":142116,"code":142573,"language":142118,"meta":142119,"style":25},"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",[49,142575,142576],{"__ignoreMap":25},[159,142577,142578],{"class":161,"line":162},[159,142579,142573],{},[134,142581,142582],{},[106,142583,142584],{},"检查当前运行的内核版本：",[14,142586,142587],{},"运行以下命令以查看你当前正在使用的内核版本：",[151,142589,142591],{"className":138596,"code":142590,"language":138598,"meta":25,"style":25},"uname -r\n",[49,142592,142593],{"__ignoreMap":25},[159,142594,142595,142597],{"class":161,"line":162},[159,142596,17290],{"class":185},[159,142598,142599],{"class":1146}," -r\n",[134,142601,142602],{"start":176},[106,142603,142604],{},"安装内核开发文件：",[14,142606,142607,142608,142611],{},"确保你已经安装了与当前内核版本相匹配的 ",[49,142609,142610],{},"kernel-devel"," 包。运行以下命令来安装：",[151,142613,142615],{"className":138596,"code":142614,"language":138598,"meta":25,"style":25},"sudo dnf install kernel-devel-$(uname -r)\n",[49,142616,142617],{"__ignoreMap":25},[159,142618,142619,142621,142623,142625,142628,142630,142632,142634],{"class":161,"line":162},[159,142620,48101],{"class":185},[159,142622,49838],{"class":192},[159,142624,47359],{"class":192},[159,142626,142627],{"class":192}," kernel-devel-",[159,142629,48623],{"class":165},[159,142631,17290],{"class":185},[159,142633,140939],{"class":1146},[159,142635,1165],{"class":165},[14,142637,142638],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[134,142640,142641],{"start":203},[106,142642,142643],{},"安装内核源代码（如果需要）：",[14,142645,142646],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[151,142648,142650],{"className":138596,"code":142649,"language":138598,"meta":25,"style":25},"sudo dnf install kernel-headers kernel-source\n",[49,142651,142652],{"__ignoreMap":25},[159,142653,142654,142656,142658,142660,142663],{"class":161,"line":162},[159,142655,48101],{"class":185},[159,142657,49838],{"class":192},[159,142659,47359],{"class":192},[159,142661,142662],{"class":192}," kernel-headers",[159,142664,142665],{"class":192}," kernel-source\n",[134,142667,142668],{"start":223},[106,142669,142670],{},"检查安装：",[14,142672,142673,142674,142677],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[49,142675,142676],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[151,142679,142681],{"className":138596,"code":142680,"language":138598,"meta":25,"style":25},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[49,142682,142683],{"__ignoreMap":25},[159,142684,142685,142687],{"class":161,"line":162},[159,142686,50284],{"class":185},[159,142688,142689],{"class":192}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,142691,142692,142693,142696],{},"如果仍然遇到问题，可以通过 ",[49,142694,142695],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1468,142698,142699],{},"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":25,"searchDepth":176,"depth":176,"links":142701},[142702,142706,142716,142720,142721],{"id":139799,"depth":176,"text":139800,"children":142703},[142704,142705],{"id":139809,"depth":203,"text":139810},{"id":139819,"depth":203,"text":139820},{"id":140019,"depth":176,"text":140020,"children":142707},[142708,142709,142710,142711,142712,142713,142714,142715],{"id":140023,"depth":203,"text":140024},{"id":140093,"depth":203,"text":140094},{"id":140182,"depth":203,"text":140183},{"id":140427,"depth":203,"text":140428},{"id":140497,"depth":203,"text":140498},{"id":140564,"depth":203,"text":140565},{"id":140599,"depth":203,"text":140600},{"id":140654,"depth":203,"text":140655},{"id":140705,"depth":176,"text":140706,"children":142717},[142718,142719],{"id":140709,"depth":203,"text":140710},{"id":140789,"depth":203,"text":140790},{"id":140975,"depth":176,"text":140976},{"id":141148,"depth":176,"text":141149,"children":142722},[142723,142724,142725,142726,142727],{"id":141152,"depth":203,"text":141153},{"id":141193,"depth":203,"text":141194},{"id":141480,"depth":203,"text":141481},{"id":141854,"depth":203,"text":141855},{"id":142350,"depth":203,"text":142351},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":139791,"description":23809},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":142734,"title":142735,"body":142736,"description":23809,"extension":23810,"meta":143076,"navigation":589,"path":143077,"seo":143078,"stem":143079,"__hash__":143080},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":142737,"toc":143074},[142738,142741,142746,142749,142995,143000,143003,143039,143042,143071],[10,142739,142735],{"id":142740},"_4-命令教程长期积累",[134,142742,142743],{},[106,142744,142745],{},"大多数命令",[14,142747,142748],{},"常用 Linux 命令速查：",[151,142750,142752],{"className":138596,"code":142751,"language":138598,"meta":25,"style":25},"# 文件与目录\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",[49,142753,142754,142759,142766,142773,142781,142788,142795,142803,142811,142818,142825,142833,142837,142842,142849,142857,142864,142868,142873,142880,142888,142896,142904,142912,142916,142921,142929,142936,142943,142951,142959,142963,142968,142977,142986],{"__ignoreMap":25},[159,142755,142756],{"class":161,"line":162},[159,142757,142758],{"class":1135},"# 文件与目录\n",[159,142760,142761,142763],{"class":161,"line":176},[159,142762,50284],{"class":185},[159,142764,142765],{"class":1135},"        # 列出目录内容\n",[159,142767,142768,142770],{"class":161,"line":203},[159,142769,122576],{"class":1146},[159,142771,142772],{"class":1135},"        # 切换目录\n",[159,142774,142775,142778],{"class":161,"line":223},[159,142776,142777],{"class":1146},"pwd",[159,142779,142780],{"class":1135},"       # 显示当前路径\n",[159,142782,142783,142785],{"class":161,"line":233},[159,142784,122566],{"class":185},[159,142786,142787],{"class":1135},"     # 创建目录\n",[159,142789,142790,142792],{"class":161,"line":239},[159,142791,48845],{"class":185},[159,142793,142794],{"class":1135},"        # 删除文件或目录\n",[159,142796,142797,142800],{"class":161,"line":245},[159,142798,142799],{"class":185},"cp",[159,142801,142802],{"class":1135},"        # 复制文件或目录\n",[159,142804,142805,142808],{"class":161,"line":251},[159,142806,142807],{"class":185},"mv",[159,142809,142810],{"class":1135},"        # 移动\u002F重命名文件或目录\n",[159,142812,142813,142815],{"class":161,"line":261},[159,142814,122583],{"class":185},[159,142816,142817],{"class":1135},"     # 创建空文件\n",[159,142819,142820,142822],{"class":161,"line":603},[159,142821,142065],{"class":185},[159,142823,142824],{"class":1135},"       # 查看文件内容\n",[159,142826,142827,142830],{"class":161,"line":621},[159,142828,142829],{"class":185},"head\u002Ftail",[159,142831,142832],{"class":1135}," # 查看文件头部\u002F尾部\n",[159,142834,142835],{"class":161,"line":634},[159,142836,590],{"emptyLinePlaceholder":589},[159,142838,142839],{"class":161,"line":640},[159,142840,142841],{"class":1135},"# 权限管理\n",[159,142843,142844,142846],{"class":161,"line":1075},[159,142845,48136],{"class":185},[159,142847,142848],{"class":1135},"     # 修改文件权限\n",[159,142850,142851,142854],{"class":161,"line":1081},[159,142852,142853],{"class":185},"chown",[159,142855,142856],{"class":1135},"     # 修改文件所有者\n",[159,142858,142859,142861],{"class":161,"line":1091},[159,142860,48101],{"class":185},[159,142862,142863],{"class":1135},"      # 以管理员身份执行\n",[159,142865,142866],{"class":161,"line":1100},[159,142867,590],{"emptyLinePlaceholder":589},[159,142869,142870],{"class":161,"line":1123},[159,142871,142872],{"class":1135},"# 系统信息\n",[159,142874,142875,142877],{"class":161,"line":1132},[159,142876,17290],{"class":185},[159,142878,142879],{"class":1135},"     # 系统信息\n",[159,142881,142882,142885],{"class":161,"line":1139},[159,142883,142884],{"class":185},"df",[159,142886,142887],{"class":1135},"        # 磁盘使用情况\n",[159,142889,142890,142893],{"class":161,"line":1168},[159,142891,142892],{"class":185},"free",[159,142894,142895],{"class":1135},"      # 内存使用情况\n",[159,142897,142898,142901],{"class":161,"line":1174},[159,142899,142900],{"class":185},"top\u002Fhtop",[159,142902,142903],{"class":1135},"  # 进程监控\n",[159,142905,142906,142909],{"class":161,"line":1180},[159,142907,142908],{"class":185},"ps",[159,142910,142911],{"class":1135},"        # 查看进程\n",[159,142913,142914],{"class":161,"line":1194},[159,142915,590],{"emptyLinePlaceholder":589},[159,142917,142918],{"class":161,"line":1200},[159,142919,142920],{"class":1135},"# 网络\n",[159,142922,142923,142926],{"class":161,"line":1221},[159,142924,142925],{"class":185},"ping",[159,142927,142928],{"class":1135},"      # 测试网络连通性\n",[159,142930,142931,142933],{"class":161,"line":1230},[159,142932,50372],{"class":185},[159,142934,142935],{"class":1135},"      # 发送 HTTP 请求\n",[159,142937,142938,142940],{"class":161,"line":1247},[159,142939,141589],{"class":185},[159,142941,142942],{"class":1135},"      # 下载文件\n",[159,142944,142945,142948],{"class":161,"line":1265},[159,142946,142947],{"class":185},"ssh",[159,142949,142950],{"class":1135},"       # 远程登录\n",[159,142952,142953,142956],{"class":161,"line":1277},[159,142954,142955],{"class":185},"scp",[159,142957,142958],{"class":1135},"       # 远程文件传输\n",[159,142960,142961],{"class":161,"line":1283},[159,142962,590],{"emptyLinePlaceholder":589},[159,142964,142965],{"class":161,"line":1294},[159,142966,142967],{"class":1135},"# 包管理（Debian\u002FUbuntu）\n",[159,142969,142970,142972,142974],{"class":161,"line":1305},[159,142971,138668],{"class":185},[159,142973,138647],{"class":192},[159,142975,142976],{"class":1135},"   # 更新软件源\n",[159,142978,142979,142981,142983],{"class":161,"line":1311},[159,142980,138668],{"class":185},[159,142982,47359],{"class":192},[159,142984,142985],{"class":1135},"  # 安装软件包\n",[159,142987,142988,142990,142992],{"class":161,"line":1322},[159,142989,138668],{"class":185},[159,142991,49602],{"class":192},[159,142993,142994],{"class":1135},"   # 卸载软件包\n",[134,142996,142997],{"start":176},[106,142998,142999],{},"KDE Dolphin 以root打开",[14,143001,143002],{},"kde5",[151,143004,143006],{"className":138596,"code":143005,"language":138598,"meta":25,"style":25},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[49,143007,143008],{"__ignoreMap":25},[159,143009,143010,143013,143016,143019,143021,143023,143026,143029,143031,143034,143036],{"class":161,"line":162},[159,143011,143012],{"class":185},"pkexec",[159,143014,143015],{"class":192}," env",[159,143017,143018],{"class":192}," DISPLAY=",[159,143020,51665],{"class":165},[159,143022,51723],{"class":192},[159,143024,143025],{"class":165},"$XAUTHORITY ",[159,143027,143028],{"class":192},"KDE_SESSION_VERSION=",[159,143030,1753],{"class":1146},[159,143032,143033],{"class":192}," KDE_FULL_SESSION=",[159,143035,13082],{"class":1146},[159,143037,143038],{"class":192}," dolphin\n",[14,143040,143041],{},"kde6",[151,143043,143045],{"className":138596,"code":143044,"language":138598,"meta":25,"style":25},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[49,143046,143047],{"__ignoreMap":25},[159,143048,143049,143051,143053,143055,143057,143059,143061,143063,143065,143067,143069],{"class":161,"line":162},[159,143050,143012],{"class":185},[159,143052,143015],{"class":192},[159,143054,143018],{"class":192},[159,143056,51665],{"class":165},[159,143058,51723],{"class":192},[159,143060,143025],{"class":165},[159,143062,143028],{"class":192},[159,143064,7907],{"class":1146},[159,143066,143033],{"class":192},[159,143068,13082],{"class":1146},[159,143070,143038],{"class":192},[1468,143072,143073],{},"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":25,"searchDepth":176,"depth":176,"links":143075},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":142735,"description":23809},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":143082,"title":143083,"body":143084,"description":23809,"extension":23810,"meta":143098,"navigation":589,"path":143099,"seo":143100,"stem":143101,"__hash__":143102},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":143085,"toc":143096},[143086,143089],[10,143087,143083],{"id":143088},"_5-各种环境配置",[14,143090,143091],{},[8085,143092,143095],{"href":143093,"rel":143094},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[15923],"电控组环境搭建大全",{"title":25,"searchDepth":176,"depth":176,"links":143097},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":143083,"description":23809},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":143104,"title":143105,"body":143106,"description":23809,"extension":23810,"meta":143454,"navigation":589,"path":143455,"seo":143456,"stem":143457,"__hash__":143458},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":143107,"toc":143446},[143108,143111,143115,143119,143123,143128,143135,143139,143432,143436,143443],[10,143109,143105],{"id":143110},"_6-拓展功能",[37,143112,143114],{"id":143113},"_61-wine","6.1 Wine",[37,143116,143118],{"id":143117},"_62-android","6.2 Android",[42,143120,143122],{"id":143121},"_621-i卡a卡","6.2.1 I卡、A卡",[134,143124,143125],{},[106,143126,143127],{},"Wayland-Waydroid(体验超级好)",[14,143129,143130,143131],{},"Waydroid 官网与安装指南：",[8085,143132,143133],{"href":143133,"rel":143134},"https:\u002F\u002Fwaydro.id\u002F",[15923],[42,143136,143138],{"id":143137},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[134,143140,143141],{},[106,143142,143143,143144,143146,143147,143151,143153,143156,143161,143358],{},"QEMU-KVM虚拟机 + BlissOS-X86",[429,143145],{},"BlissOS 官网下载：",[8085,143148,143149],{"href":143149,"rel":143150},"https:\u002F\u002Fblissos.org\u002F",[15923],[429,143152],{},[23,143154],{"alt":25,"src":143155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[134,143157,143158],{"start":203},[106,143159,143160],{},"比较推荐的配置",[151,143162,143164],{"className":138596,"code":143163,"language":138598,"meta":25,"style":25},"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",[49,143165,143166,143173,143183,143193,143203,143215,143225,143232,143242,143251,143260,143270,143280,143289,143299,143309,143321,143331,143340,143350],{"__ignoreMap":25},[159,143167,143168,143171],{"class":161,"line":162},[159,143169,143170],{"class":185},"qemu-system-x86_64",[159,143172,48203],{"class":1146},[159,143174,143175,143178,143181],{"class":161,"line":176},[159,143176,143177],{"class":1146},"        -M",[159,143179,143180],{"class":192}," q35,vmport=off",[159,143182,48203],{"class":1146},[159,143184,143185,143188,143191],{"class":161,"line":203},[159,143186,143187],{"class":1146},"        -accel",[159,143189,143190],{"class":192}," kvm",[159,143192,48203],{"class":1146},[159,143194,143195,143198,143201],{"class":161,"line":223},[159,143196,143197],{"class":1146},"        -cpu",[159,143199,143200],{"class":192}," qemu64,+sse3,+sse4.2",[159,143202,48203],{"class":1146},[159,143204,143205,143208,143211,143213],{"class":161,"line":233},[159,143206,143207],{"class":1146},"        -smp",[159,143209,143210],{"class":192}," 8,cores=",[159,143212,8866],{"class":1146},[159,143214,48203],{"class":1146},[159,143216,143217,143220,143223],{"class":161,"line":239},[159,143218,143219],{"class":1146},"        -m",[159,143221,143222],{"class":192}," 6G",[159,143224,48203],{"class":1146},[159,143226,143227,143230],{"class":161,"line":245},[159,143228,143229],{"class":1146},"        -usb",[159,143231,48203],{"class":1146},[159,143233,143234,143237,143240],{"class":161,"line":251},[159,143235,143236],{"class":1146},"        -device",[159,143238,143239],{"class":192}," virtio-tablet",[159,143241,48203],{"class":1146},[159,143243,143244,143246,143249],{"class":161,"line":261},[159,143245,143236],{"class":1146},[159,143247,143248],{"class":192}," virtio-keyboard",[159,143250,48203],{"class":1146},[159,143252,143253,143255,143258],{"class":161,"line":603},[159,143254,143236],{"class":1146},[159,143256,143257],{"class":192}," usb-tablet",[159,143259,48203],{"class":1146},[159,143261,143262,143265,143268],{"class":161,"line":621},[159,143263,143264],{"class":1146},"        -bios",[159,143266,143267],{"class":192}," OVMF-pure-efi64.fd",[159,143269,48203],{"class":1146},[159,143271,143272,143275,143278],{"class":161,"line":634},[159,143273,143274],{"class":1146},"        -net",[159,143276,143277],{"class":192}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[159,143279,48203],{"class":1146},[159,143281,143282,143284,143287],{"class":161,"line":640},[159,143283,143274],{"class":1146},[159,143285,143286],{"class":192}," nic,model=virtio",[159,143288,48203],{"class":1146},[159,143290,143291,143294,143297],{"class":161,"line":1075},[159,143292,143293],{"class":1146},"        -audio",[159,143295,143296],{"class":192}," sdl,model=hda",[159,143298,48203],{"class":1146},[159,143300,143301,143304,143307],{"class":161,"line":1081},[159,143302,143303],{"class":1146},"        -display",[159,143305,143306],{"class":192}," sdl,gl=on,show-cursor=on",[159,143308,48203],{"class":1146},[159,143310,143311,143313,143316,143319],{"class":161,"line":1091},[159,143312,143236],{"class":1146},[159,143314,143315],{"class":192}," virtio-vga-gl,xres=1920,yres=",[159,143317,143318],{"class":1146},"1080",[159,143320,48203],{"class":1146},[159,143322,143323,143326,143329],{"class":161,"line":1100},[159,143324,143325],{"class":1146},"        -drive",[159,143327,143328],{"class":192}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[159,143330,48203],{"class":1146},[159,143332,143333,143335,143338],{"class":161,"line":1123},[159,143334,143325],{"class":1146},[159,143336,143337],{"class":192}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[159,143339,48203],{"class":1146},[159,143341,143342,143345,143348],{"class":161,"line":1132},[159,143343,143344],{"class":1146},"        -monitor",[159,143346,143347],{"class":192}," stdio",[159,143349,48203],{"class":1146},[159,143351,143352,143355],{"class":161,"line":1139},[159,143353,143354],{"class":1146},"        -serial",[159,143356,143357],{"class":192}," none\n",[134,143359,143360],{"start":233},[106,143361,143362,143363],{},"常用操作：",[134,143364,143365,143368,143424],{},[106,143366,143367],{},"全屏：Ctrl+Alt+F",[106,143369,143370,143371,143376],{},"adb调试",[134,143372,143373],{},[106,143374,143375],{},"使Linux与Android用ADB连接。",[151,143377,143379],{"className":138596,"code":143378,"language":138598,"meta":25,"style":25},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[49,143380,143381,143386,143397,143402,143414,143419],{"__ignoreMap":25},[159,143382,143383],{"class":161,"line":162},[159,143384,143385],{"class":1135},"# 连接安卓\n",[159,143387,143388,143391,143394],{"class":161,"line":176},[159,143389,143390],{"class":185},"adb",[159,143392,143393],{"class":192}," connect",[159,143395,143396],{"class":1146}," 127.0.0.1\n",[159,143398,143399],{"class":161,"line":203},[159,143400,143401],{"class":1135},"# 打开shell\n",[159,143403,143404,143406,143408,143411],{"class":161,"line":223},[159,143405,143390],{"class":185},[159,143407,50406],{"class":1146},[159,143409,143410],{"class":192}," 127.0.0.1:5555",[159,143412,143413],{"class":192}," shell\n",[159,143415,143416],{"class":161,"line":233},[159,143417,143418],{"class":1135},"# 使用root权限\n",[159,143420,143421],{"class":161,"line":239},[159,143422,143423],{"class":185},"su\n",[106,143425,143426,143427],{},"中文输入法",[134,143428,143429],{},[106,143430,143431],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[37,143433,143435],{"id":143434},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,143437,143438,143439],{},"rEFInd 官网与文档：",[8085,143440,143441],{"href":143441,"rel":143442},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[15923],[1468,143444,143445],{},"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":25,"searchDepth":176,"depth":176,"links":143447},[143448,143449,143453],{"id":143113,"depth":176,"text":143114},{"id":143117,"depth":176,"text":143118,"children":143450},[143451,143452],{"id":143121,"depth":203,"text":143122},{"id":143137,"depth":203,"text":143138},{"id":143434,"depth":176,"text":143435},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":143105,"description":23809},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":143460,"title":143461,"body":143462,"description":23809,"extension":23810,"meta":146761,"navigation":589,"path":146762,"seo":146763,"stem":146764,"__hash__":146765},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":143463,"toc":146735},[143464,143467,143471,143474,143481,143731,143734,143806,143809,143813,143817,143822,143825,143828,143831,143836,143839,143842,143845,143850,143853,143858,143861,143864,143869,143872,143877,143880,143884,143888,143891,143896,143899,143913,143916,143919,143928,143931,143940,143943,143946,143955,143958,143967,143970,143973,143982,143985,143988,144003,144006,144009,144018,144023,144026,144029,144038,144041,144050,144053,144062,144065,144074,144079,144082,144090,144095,144098,144107,144110,144118,144123,144126,144135,144138,144141,144145,144148,144153,144156,144161,144175,144180,144185,144196,144201,144207,144212,144227,144232,144235,144240,144245,144250,144258,144263,144270,144275,144286,144291,144294,144298,144301,144304,144309,144312,144331,144336,144339,144348,144353,144356,144378,144381,144411,144414,144419,144422,144436,144441,144460,144463,144466,144471,144483,144488,144493,144496,144501,144504,144519,144522,144527,144532,144536,144541,144581,144584,144588,144594,144600,144605,144608,144615,144620,144627,144630,144633,144640,144654,144657,144717,144720,144734,144746,144749,144752,144755,144819,144822,144825,144828,144848,144851,144856,144863,144867,144870,144874,144879,144884,144888,144891,144894,144936,144941,144944,144966,144981,144983,144988,145000,145060,145062,145064,145118,145120,145122,145128,145133,145136,145141,145145,145148,145210,145215,145218,145220,145224,145236,145318,145320,145322,145376,145382,145384,145388,145393,145395,145400,145404,145424,145459,145463,145466,145469,145472,145479,145482,145494,145497,145512,145515,145534,145582,145585,145602,145605,145619,145624,145627,145636,145651,145663,145701,145706,145715,145720,145725,145751,145760,145764,145768,145773,145776,145780,145784,145789,145792,145797,145800,145805,145808,145813,145816,145820,145825,145828,145833,145836,145840,145845,145848,145853,145856,145861,145864,145868,145873,145876,145881,145884,145889,145892,145896,145901,145904,145909,145912,145917,145920,145925,145928,145933,145936,145941,145944,145948,145953,145956,145961,145968,145972,145977,145980,145985,145988,145992,145997,146000,146003,146006,146009,146012,146016,146019,146029,146034,146039,146061,146066,146071,146078,146082,146087,146090,146093,146098,146101,146104,146107,146110,146113,146116,146119,146122,146125,146128,146131,146134,146139,146144,146149,146154,146159,146164,146169,146172,146176,146179,146183,146188,146193,146198,146203,146207,146213,146221,146226,146229,146234,146249,146252,146257,146291,146306,146309,146364,146390,146402,146405,146414,146417,146432,146437,146440,146446,146451,146454,146459,146462,146467,146472,146479,146482,146497,146500,146535,146540,146548,146586,146589,146592,146597,146600,146605,146616,146650,146655,146658,146667,146672,146678,146681,146686,146695,146700,146703,146706,146711,146719,146722,146727,146732],[10,143465,143461],{"id":143466},"_7-其他操作",[37,143468,143470],{"id":143469},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,143472,143473],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,143475,143476,143477,143480],{},"进入工控机的硬盘目录，进入",[49,143478,143479],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[151,143482,143486],{"className":143483,"code":143484,"language":143485,"meta":25,"style":25},"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",[49,143487,143488,143496,143507,143514,143521,143533,143540,143552,143563,143574,143581,143588,143595,143607,143619,143626,143638,143650,143657,143669,143681,143693,143704,143711,143722],{"__ignoreMap":25},[159,143489,143490,143493],{"class":161,"line":162},[159,143491,143492],{"class":169},"network",[159,143494,143495],{"class":165},": \n",[159,143497,143498,143501,143503,143505],{"class":161,"line":176},[159,143499,143500],{"class":169},"  version",[159,143502,1486],{"class":165},[159,143504,11034],{"class":1146},[159,143506,17636],{"class":165},[159,143508,143509,143512],{"class":161,"line":203},[159,143510,143511],{"class":169},"  wifis",[159,143513,143495],{"class":165},[159,143515,143516,143519],{"class":161,"line":223},[159,143517,143518],{"class":169},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[159,143520,143495],{"class":165},[159,143522,143523,143526,143528,143531],{"class":161,"line":233},[159,143524,143525],{"class":169},"      renderer",[159,143527,1486],{"class":165},[159,143529,143530],{"class":192},"NetworkManager",[159,143532,17636],{"class":165},[159,143534,143535,143538],{"class":161,"line":239},[159,143536,143537],{"class":169},"      match",[159,143539,143495],{"class":165},[159,143541,143542,143545,143547,143550],{"class":161,"line":245},[159,143543,143544],{"class":169},"        name",[159,143546,1486],{"class":165},[159,143548,143549],{"class":192},"\"wlan0\"",[159,143551,17636],{"class":165},[159,143553,143554,143557,143559,143561],{"class":161,"line":251},[159,143555,143556],{"class":169},"      dhcp4",[159,143558,1486],{"class":165},[159,143560,13082],{"class":1146},[159,143562,17636],{"class":165},[159,143564,143565,143568,143570,143572],{"class":161,"line":261},[159,143566,143567],{"class":169},"      dhcp6",[159,143569,1486],{"class":165},[159,143571,13082],{"class":1146},[159,143573,17636],{"class":165},[159,143575,143576,143579],{"class":161,"line":603},[159,143577,143578],{"class":169},"      access-points",[159,143580,143495],{"class":165},[159,143582,143583,143586],{"class":161,"line":621},[159,143584,143585],{"class":192},"        \"EMIS_Vinci_Robocon_5G\"",[159,143587,143495],{"class":165},[159,143589,143590,143593],{"class":161,"line":634},[159,143591,143592],{"class":169},"          auth",[159,143594,143495],{"class":165},[159,143596,143597,143600,143602,143605],{"class":161,"line":640},[159,143598,143599],{"class":169},"            key-management",[159,143601,1486],{"class":165},[159,143603,143604],{"class":192},"\"psk\"",[159,143606,17636],{"class":165},[159,143608,143609,143612,143614,143617],{"class":161,"line":1075},[159,143610,143611],{"class":169},"            password",[159,143613,1486],{"class":165},[159,143615,143616],{"class":192},"\"vinci666\"",[159,143618,17636],{"class":165},[159,143620,143621,143624],{"class":161,"line":1081},[159,143622,143623],{"class":169},"          networkmanager",[159,143625,143495],{"class":165},[159,143627,143628,143631,143633,143636],{"class":161,"line":1091},[159,143629,143630],{"class":169},"            uuid",[159,143632,1486],{"class":165},[159,143634,143635],{"class":192},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[159,143637,17636],{"class":165},[159,143639,143640,143643,143645,143648],{"class":161,"line":1100},[159,143641,143642],{"class":169},"            name",[159,143644,1486],{"class":165},[159,143646,143647],{"class":192},"\"EMIS_Vinci_Robocon_5G\"",[159,143649,17636],{"class":165},[159,143651,143652,143655],{"class":161,"line":1123},[159,143653,143654],{"class":169},"            passthrough",[159,143656,143495],{"class":165},[159,143658,143659,143662,143664,143667],{"class":161,"line":1132},[159,143660,143661],{"class":169},"              wifi-security.auth-alg",[159,143663,1486],{"class":165},[159,143665,143666],{"class":192},"\"open\"",[159,143668,17636],{"class":165},[159,143670,143671,143674,143676,143679],{"class":161,"line":1139},[159,143672,143673],{"class":169},"              ipv6.addr-gen-mode",[159,143675,1486],{"class":165},[159,143677,143678],{"class":192},"\"default\"",[159,143680,17636],{"class":165},[159,143682,143683,143686,143688,143691],{"class":161,"line":1168},[159,143684,143685],{"class":169},"              ipv6.ip6-privacy",[159,143687,1486],{"class":165},[159,143689,143690],{"class":192},"\"-1\"",[159,143692,17636],{"class":165},[159,143694,143695,143698,143700,143702],{"class":161,"line":1174},[159,143696,143697],{"class":169},"              proxy._",[159,143699,1486],{"class":165},[159,143701,552],{"class":192},[159,143703,17636],{"class":165},[159,143705,143706,143709],{"class":161,"line":1180},[159,143707,143708],{"class":169},"      networkmanager",[159,143710,143495],{"class":165},[159,143712,143713,143716,143718,143720],{"class":161,"line":1194},[159,143714,143715],{"class":169},"        uuid",[159,143717,1486],{"class":165},[159,143719,143635],{"class":192},[159,143721,17636],{"class":165},[159,143723,143724,143726,143728],{"class":161,"line":1200},[159,143725,143544],{"class":169},[159,143727,1486],{"class":165},[159,143729,143730],{"class":192},"\"EMIS_Vinci_Robocon_5G\"\n",[14,143732,143733],{},"将其改为新wifi的名和密码：",[151,143735,143737],{"className":143483,"code":143736,"language":143485,"meta":25,"style":25},"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",[49,143738,143739,143745,143754,143760,143767,143776,143784,143790,143796],{"__ignoreMap":25},[159,143740,143741,143743],{"class":161,"line":162},[159,143742,143492],{"class":169},[159,143744,27364],{"class":165},[159,143746,143747,143749,143751],{"class":161,"line":176},[159,143748,143500],{"class":169},[159,143750,1486],{"class":165},[159,143752,143753],{"class":1146},"2\n",[159,143755,143756,143758],{"class":161,"line":203},[159,143757,143511],{"class":169},[159,143759,27364],{"class":165},[159,143761,143762,143765],{"class":161,"line":223},[159,143763,143764],{"class":169},"    wlan0",[159,143766,27364],{"class":165},[159,143768,143769,143771,143773],{"class":161,"line":233},[159,143770,143556],{"class":169},[159,143772,1486],{"class":165},[159,143774,143775],{"class":1146},"true\n",[159,143777,143778,143780,143782],{"class":161,"line":239},[159,143779,143567],{"class":169},[159,143781,1486],{"class":165},[159,143783,143775],{"class":1146},[159,143785,143786,143788],{"class":161,"line":245},[159,143787,143578],{"class":169},[159,143789,27364],{"class":165},[159,143791,143792,143794],{"class":161,"line":251},[159,143793,143585],{"class":192},[159,143795,27364],{"class":165},[159,143797,143798,143801,143803],{"class":161,"line":261},[159,143799,143800],{"class":169},"          password",[159,143802,1486],{"class":165},[159,143804,143805],{"class":192},"\"vinci666\"\n",[14,143807,143808],{},"工控机开机即可连上网。",[37,143810,143812],{"id":143811},"_72-ssh远程开发","7.2 SSH远程开发",[42,143814,143816],{"id":143815},"_721-环境准备","7.2.1 环境准备",[14,143818,143819],{},[61,143820,143821],{},"1.硬件准备",[14,143823,143824],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,143826,143827],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,143829,143830],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,143832,143833],{},[61,143834,143835],{},"2.设置固定IP",[14,143837,143838],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,143840,143841],{},"1.进入设置界面",[14,143843,143844],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,143846,143847],{},[23,143848],{"alt":25,"src":143849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,143851,143852],{},"2.配置所连接的网络",[14,143854,143855],{},[23,143856],{"alt":25,"src":143857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,143859,143860],{},"3.设置固定IP",[14,143862,143863],{},"查看当前IP地址。",[14,143865,143866],{},[23,143867],{"alt":25,"src":143868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,143870,143871],{},"设置固定IP。",[14,143873,143874],{},[23,143875],{"alt":25,"src":143876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,143878,143879],{},"至此，IP配置完毕。",[42,143881,143883],{"id":143882},"_722-环境搭建","7.2.2 环境搭建",[14,143885,143886],{},[61,143887,49276],{},[14,143889,143890],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,143892,143893],{},[61,143894,143895],{},"实现",[14,143897,143898],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[134,143900,143901,143904,143907,143910],{},[106,143902,143903],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[106,143905,143906],{},"远程主机启动SSH服务；",[106,143908,143909],{},"本地主机登陆远程主机；",[106,143911,143912],{},"实现数据传输。",[14,143914,143915],{},"1.安装SSH客户端与服务端",[14,143917,143918],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[151,143920,143922],{"className":142116,"code":143921,"language":142118,"meta":142119,"style":25}," sudo apt install openssh-server\n",[49,143923,143924],{"__ignoreMap":25},[159,143925,143926],{"class":161,"line":162},[159,143927,143921],{},[14,143929,143930],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[151,143932,143934],{"className":142116,"code":143933,"language":142118,"meta":142119,"style":25},"sudo apt install openssh-client\n",[49,143935,143936],{"__ignoreMap":25},[159,143937,143938],{"class":161,"line":162},[159,143939,143933],{},[14,143941,143942],{},"2.远程主机启动SSH服务",[14,143944,143945],{},"远程主机启动 ssh 服务命令如下：",[151,143947,143949],{"className":142116,"code":143948,"language":142118,"meta":142119,"style":25},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[49,143950,143951],{"__ignoreMap":25},[159,143952,143953],{"class":161,"line":162},[159,143954,143948],{},[14,143956,143957],{},"启动后可使用如下命令查看服务是否正常运行：",[151,143959,143961],{"className":142116,"code":143960,"language":142118,"meta":142119,"style":25},"ps -e | grep ssh\n",[49,143962,143963],{"__ignoreMap":25},[159,143964,143965],{"class":161,"line":162},[159,143966,143960],{},[14,143968,143969],{},"如果启动成功，会包含 sshd 程序。",[14,143971,143972],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[151,143974,143976],{"className":142116,"code":143975,"language":142118,"meta":142119,"style":25},"sudo systemctl enable ssh\n",[49,143977,143978],{"__ignoreMap":25},[159,143979,143980],{"class":161,"line":162},[159,143981,143975],{},[14,143983,143984],{},"3.本地远程登录",[14,143986,143987],{},"登录远程主机可以调用如下命令:",[151,143989,143991],{"className":138596,"code":143990,"language":138598,"meta":25,"style":25},"ssh -X 用户名@ip地址\n",[49,143992,143993],{"__ignoreMap":25},[159,143994,143995,143997,144000],{"class":161,"line":162},[159,143996,142947],{"class":185},[159,143998,143999],{"class":1146}," -X",[159,144001,144002],{"class":192}," 用户名@ip地址\n",[14,144004,144005],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,144007,144008],{},"如果退出，可以调用exit命令：",[151,144010,144012],{"className":142116,"code":144011,"language":142118,"meta":142119,"style":25},"exit\n",[49,144013,144014],{"__ignoreMap":25},[159,144015,144016],{"class":161,"line":162},[159,144017,144011],{},[14,144019,144020],{},[61,144021,144022],{},"4.实现数据传输",[14,144024,144025],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,144027,144028],{},"上传文件指令格式如下：",[151,144030,144032],{"className":142116,"code":144031,"language":142118,"meta":142119,"style":25},"scp 本地文件路径 账号@ip:路径\n",[49,144033,144034],{"__ignoreMap":25},[159,144035,144036],{"class":161,"line":162},[159,144037,144031],{},[14,144039,144040],{},"上传文件夹指令格式如下：",[151,144042,144044],{"className":142116,"code":144043,"language":142118,"meta":142119,"style":25},"scp -r 本地文件夹路径 账号@ip:路径\n",[49,144045,144046],{"__ignoreMap":25},[159,144047,144048],{"class":161,"line":162},[159,144049,144043],{},[14,144051,144052],{},"下载文件指令格式如下：",[151,144054,144056],{"className":142116,"code":144055,"language":142118,"meta":142119,"style":25},"scp 账号@ip:路径 本地文件夹路径\n",[49,144057,144058],{"__ignoreMap":25},[159,144059,144060],{"class":161,"line":162},[159,144061,144055],{},[14,144063,144064],{},"下载文件夹指令格式如下：",[151,144066,144068],{"className":142116,"code":144067,"language":142118,"meta":142119,"style":25},"scp -r 账号@ip:路径 本地文件夹路径\n",[49,144069,144070],{"__ignoreMap":25},[159,144071,144072],{"class":161,"line":162},[159,144073,144067],{},[14,144075,144076],{},[61,144077,144078],{},"优化",[14,144080,144081],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[134,144083,144084,144087],{},[106,144085,144086],{},"本地生成密钥对；",[106,144088,144089],{},"将公钥上传至远程主机。",[14,144091,144092],{},[61,144093,144094],{},"1.生成密钥对",[14,144096,144097],{},"本地客户端生成公私钥：（一路回车默认即可）",[151,144099,144101],{"className":142116,"code":144100,"language":142118,"meta":142119,"style":25},"ssh-keygen\n",[49,144102,144103],{"__ignoreMap":25},[159,144104,144105],{"class":161,"line":162},[159,144106,144100],{},[14,144108,144109],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[134,144111,144112,144115],{},[106,144113,144114],{},"id_rsa （私钥）；",[106,144116,144117],{},"id_rsa.pub (公钥)。",[14,144119,144120],{},[61,144121,144122],{},"2.公钥上传",[14,144124,144125],{},"上传指令如下：",[151,144127,144129],{"className":142116,"code":144128,"language":142118,"meta":142119,"style":25},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[49,144130,144131],{"__ignoreMap":25},[159,144132,144133],{"class":161,"line":162},[159,144134,144128],{},[14,144136,144137],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,144139,144140],{},"以后再远程登录就无需录入密码了。",[42,144142,144144],{"id":144143},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,144146,144147],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,144149,144150],{},[61,144151,144152],{},"1.准备工作",[14,144154,144155],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,144157,144158],{},[61,144159,144160],{},"2.为VScode安装远程开发插件",[14,144162,144163,144164,144167,144168,144171,144172,51907],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[49,144165,144166],{},"扩展：商店","的搜索栏输入",[49,144169,144170],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[49,144173,144174],{},"安装",[14,144176,144177],{},[23,144178],{"alt":25,"src":144179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,144181,144182],{},[61,144183,144184],{},"3.配置远程连接",[14,144186,144187,144188,144191,144192,144195],{},"步骤1：使用快捷键",[49,144189,144190],{},"ctrl + shift + p","打开命令输入窗口，并输入",[49,144193,144194],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,144197,144198],{},[23,144199],{"alt":25,"src":144200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,144202,144203,144204,51907],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[49,144205,144206],{},"Add New SSH Host",[14,144208,144209],{},[23,144210],{"alt":25,"src":144211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,144213,144214,144215,144218,144219,144222,144223,144226],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[49,144216,144217],{},"ssh +X ubuntu@192.168.43.164","，其中，",[49,144220,144221],{},"ubuntu","需要替换为你的登录用户名，",[49,144224,144225],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,144228,144229],{},[23,144230],{"alt":25,"src":144231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,144233,144234],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,144236,144237],{},[23,144238],{"alt":25,"src":144239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,144241,144242],{},[23,144243],{"alt":25,"src":144244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,144246,144247],{},[61,144248,144249],{},"4.使用",[14,144251,144252,144253,144191,144255,144257],{},"步骤1：继续使用快捷键",[49,144254,144190],{},[49,144256,144194],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,144259,144260],{},[23,144261],{"alt":25,"src":144262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,144264,144265,144266,144269],{},"或者，也可以点击侧边栏的",[49,144267,144268],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,144271,144272],{},[23,144273],{"alt":25,"src":144274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,144276,144277,144278,144281,144282,144285],{},"步骤2：选择菜单栏的",[49,144279,144280],{},"文件","下的",[49,144283,144284],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,144287,144288],{},[23,144289],{"alt":25,"src":144290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,144292,144293],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[37,144295,144297],{"id":144296},"_73-远程桌面","7.3 远程桌面",[14,144299,144300],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,144302,144303],{},"我们选择使用VNC来看。",[134,144305,144306],{},[106,144307,144308],{},"安装VNC服务器：",[14,144310,144311],{},"这里以TigerVNC为例进行安装：",[151,144313,144315],{"className":138596,"code":144314,"language":138598,"meta":25,"style":25},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[49,144316,144317],{"__ignoreMap":25},[159,144318,144319,144321,144323,144325,144328],{"class":161,"line":162},[159,144320,48101],{"class":185},[159,144322,138617],{"class":192},[159,144324,47359],{"class":192},[159,144326,144327],{"class":192}," tigervnc-standalone-server",[159,144329,144330],{"class":192}," tigervnc-common\n",[134,144332,144333],{"start":176},[106,144334,144335],{},"设置VNC密码：",[14,144337,144338],{},"为VNC用户设置密码，运行以下命令：",[151,144340,144342],{"className":138596,"code":144341,"language":138598,"meta":25,"style":25},"vncpasswd\n",[49,144343,144344],{"__ignoreMap":25},[159,144345,144346],{"class":161,"line":162},[159,144347,144341],{"class":185},[134,144349,144350],{"start":203},[106,144351,144352],{},"配置VNC启动脚本:",[14,144354,144355],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[151,144357,144359],{"className":138596,"code":144358,"language":138598,"meta":25,"style":25},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[49,144360,144361,144370],{"__ignoreMap":25},[159,144362,144363,144365,144367],{"class":161,"line":162},[159,144364,122566],{"class":185},[159,144366,52738],{"class":1146},[159,144368,144369],{"class":192}," ~\u002F.vnc\n",[159,144371,144372,144375],{"class":161,"line":176},[159,144373,144374],{"class":185},"nano",[159,144376,144377],{"class":192}," ~\u002F.vnc\u002Fxstartup\n",[14,144379,144380],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[151,144382,144384],{"className":138596,"code":144383,"language":138598,"meta":25,"style":25},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[49,144385,144386,144391,144399,144406],{"__ignoreMap":25},[159,144387,144388],{"class":161,"line":162},[159,144389,144390],{"class":1135},"#!\u002Fbin\u002Fsh\n",[159,144392,144393,144396],{"class":161,"line":176},[159,144394,144395],{"class":1146},"unset",[159,144397,144398],{"class":192}," SESSION_MANAGER\n",[159,144400,144401,144403],{"class":161,"line":203},[159,144402,144395],{"class":1146},[159,144404,144405],{"class":192}," DBUS_SESSION_BUS_ADDRESS\n",[159,144407,144408],{"class":161,"line":223},[159,144409,144410],{"class":185},"gnome-session\n",[14,144412,144413],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[134,144415,144416],{"start":223},[106,144417,144418],{},"给予执行权限：",[14,144420,144421],{},"为xstartup文件设置执行权限：",[151,144423,144425],{"className":138596,"code":144424,"language":138598,"meta":25,"style":25},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[49,144426,144427],{"__ignoreMap":25},[159,144428,144429,144431,144434],{"class":161,"line":162},[159,144430,48136],{"class":185},[159,144432,144433],{"class":192}," +x",[159,144435,144377],{"class":192},[134,144437,144438],{"start":233},[106,144439,144440],{},"启动VNC服务器：",[151,144442,144444],{"className":138596,"code":144443,"language":138598,"meta":25,"style":25},"vncserver -geometry 1920x1080 -localhost=0\n",[49,144445,144446],{"__ignoreMap":25},[159,144447,144448,144451,144454,144457],{"class":161,"line":162},[159,144449,144450],{"class":185},"vncserver",[159,144452,144453],{"class":1146}," -geometry",[159,144455,144456],{"class":192}," 1920x1080",[159,144458,144459],{"class":1146}," -localhost=0\n",[14,144461,144462],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,144464,144465],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[134,144467,144468],{"start":239},[106,144469,144470],{},"查看已开启的VNC服务器：",[151,144472,144474],{"className":138596,"code":144473,"language":138598,"meta":25,"style":25},"vncserver -list\n",[49,144475,144476],{"__ignoreMap":25},[159,144477,144478,144480],{"class":161,"line":162},[159,144479,144450],{"class":185},[159,144481,144482],{"class":1146}," -list\n",[14,144484,144485],{},[23,144486],{"alt":25,"src":144487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[134,144489,144490],{"start":245},[106,144491,144492],{},"连接到VNC服务器：",[14,144494,144495],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[134,144497,144498],{"start":251},[106,144499,144500],{},"停止VNC服务器：",[14,144502,144503],{},"如果需要停止VNC服务器，可以使用以下命令：",[151,144505,144507],{"className":138596,"code":144506,"language":138598,"meta":25,"style":25},"vncserver -kill :1\n",[49,144508,144509],{"__ignoreMap":25},[159,144510,144511,144513,144516],{"class":161,"line":162},[159,144512,144450],{"class":185},[159,144514,144515],{"class":1146}," -kill",[159,144517,144518],{"class":192}," :1\n",[14,144520,144521],{},"将:1替换为你实际使用的显示编号。",[14,144523,144524],{},[23,144525],{"alt":25,"src":144526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,144528,144529],{},[23,144530],{"alt":25,"src":144531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[37,144533,144535],{"id":144534},"_74-usb端口设置","7.4 USB端口设置",[14,144537,144538],{},[61,144539,144540],{},"首先先配置好权限",[151,144542,144544],{"className":138596,"code":144543,"language":138598,"meta":25,"style":25},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[49,144545,144546,144551,144564,144571,144576],{"__ignoreMap":25},[159,144547,144548],{"class":161,"line":162},[159,144549,144550],{"class":1135},"# 将用户权限提高\n",[159,144552,144553,144555,144557,144559,144562],{"class":161,"line":176},[159,144554,48101],{"class":185},[159,144556,50097],{"class":192},[159,144558,50100],{"class":1146},[159,144560,144561],{"class":192}," dialout",[159,144563,50105],{"class":165},[159,144565,144566,144568],{"class":161,"line":203},[159,144567,50124],{"class":185},[159,144569,144570],{"class":192}," dialout\n",[159,144572,144573],{"class":161,"line":223},[159,144574,144575],{"class":1135},"# 查看下面命令是否输出dialout（若输出才正常）\n",[159,144577,144578],{"class":161,"line":233},[159,144579,144580],{"class":185},"groups\n",[14,144582,144583],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[42,144585,144587],{"id":144586},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,144589,144590,144593],{},[61,144591,144592],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,144595,144596,144599],{},[61,144597,144598],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,144601,144602],{},[61,144603,144604],{},"流程如下：",[14,144606,144607],{},"（1）.查找设备idVendor和idProduct",[14,144609,144610,144611,144614],{},"接入两个USB设备，在终端调用指令",[49,144612,144613],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,144616,144617],{},[23,144618],{"alt":25,"src":144619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,144621,144622,144623,144626],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[49,144624,144625],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,144628,144629],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,144631,144632],{},"（2）.编写映射规则",[14,144634,144635,144636,144639],{},"在",[49,144637,144638],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[151,144641,144643],{"className":138596,"code":144642,"language":138598,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[49,144644,144645],{"__ignoreMap":25},[159,144646,144647,144649,144651],{"class":161,"line":162},[159,144648,48101],{"class":185},[159,144650,139883],{"class":192},[159,144652,144653],{"class":192}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,144655,144656],{},"输入如下内容：",[151,144658,144660],{"className":138596,"code":144659,"language":138598,"meta":25,"style":25},"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",[49,144661,144662,144692],{"__ignoreMap":25},[159,144663,144664,144667,144669,144672,144675,144678,144681,144683,144686,144689],{"class":161,"line":162},[159,144665,144666],{"class":165},"KERNEL",[159,144668,189],{"class":1142},[159,144670,144671],{"class":192},"=\"ttyUSB*\",",[159,144673,144674],{"class":185}," ATTRS",[159,144676,144677],{"class":192},"{idVendor}==",[159,144679,144680],{"class":185},"\"10c4\"",[159,144682,24233],{"class":185},[159,144684,144685],{"class":192}," ATTRS{idProduct}==\"ea60\",",[159,144687,144688],{"class":192}," MODE:=\"0777\",",[159,144690,144691],{"class":192}," SYMLINK+=\"mylidar\"\n",[159,144693,144694,144696,144698,144700,144702,144704,144707,144709,144712,144714],{"class":161,"line":176},[159,144695,144666],{"class":165},[159,144697,189],{"class":1142},[159,144699,144671],{"class":192},[159,144701,144674],{"class":185},[159,144703,144677],{"class":192},[159,144705,144706],{"class":185},"\"1a86\"",[159,144708,24233],{"class":185},[159,144710,144711],{"class":192}," ATTRS{idProduct}==\"7523\",",[159,144713,144688],{"class":192},[159,144715,144716],{"class":192}," SYMLINK+=\"mycar\"\n",[14,144718,144719],{},"代码解释：",[103,144721,144722,144725,144728,144731],{},[106,144723,144724],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[106,144726,144727],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[106,144729,144730],{},"SYMLINK是符号连接，即绑定的别名；",[106,144732,144733],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,144735,144736,144737,144740,144743],{},"***小提示：***",[47079,144738,144739],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[49,144741,144742],{},"\u002Fetc\u002Fudev\u002Frule.d",[47079,144744,144745],{},"目录即可。",[14,144747,144748],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,144750,144751],{},"（3）.使规则生效",[14,144753,144754],{},"在终端下输入如下指令：",[151,144756,144758],{"className":138596,"code":144757,"language":138598,"meta":25,"style":25},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[49,144759,144760,144765,144777,144788,144792,144797,144810],{"__ignoreMap":25},[159,144761,144762],{"class":161,"line":162},[159,144763,144764],{"class":1135},"# Ubuntu用下方命令\n",[159,144766,144767,144769,144771,144774],{"class":161,"line":176},[159,144768,48101],{"class":185},[159,144770,141348],{"class":192},[159,144772,144773],{"class":192}," udev",[159,144775,144776],{"class":192}," reload\n",[159,144778,144779,144781,144783,144785],{"class":161,"line":203},[159,144780,48101],{"class":185},[159,144782,141348],{"class":192},[159,144784,144773],{"class":192},[159,144786,144787],{"class":192}," restart\n",[159,144789,144790],{"class":161,"line":223},[159,144791,590],{"emptyLinePlaceholder":589},[159,144793,144794],{"class":161,"line":233},[159,144795,144796],{"class":1135},"#Fedora用下方命令\n",[159,144798,144799,144801,144804,144807],{"class":161,"line":239},[159,144800,48101],{"class":185},[159,144802,144803],{"class":192}," udevadm",[159,144805,144806],{"class":192}," control",[159,144808,144809],{"class":1146}," --reload\n",[159,144811,144812,144814,144816],{"class":161,"line":245},[159,144813,48101],{"class":185},[159,144815,144803],{"class":192},[159,144817,144818],{"class":192}," trigger\n",[14,144820,144821],{},"再重新插拔设备即可。",[14,144823,144824],{},"（4）.测试",[14,144826,144827],{},"终端下输入如下指令",[151,144829,144831],{"className":138596,"code":144830,"language":138598,"meta":25,"style":25},"ll \u002Fdev | grep ttyUSB\n",[49,144832,144833],{"__ignoreMap":25},[159,144834,144835,144838,144841,144843,144845],{"class":161,"line":162},[159,144836,144837],{"class":185},"ll",[159,144839,144840],{"class":192}," \u002Fdev",[159,144842,48633],{"class":1142},[159,144844,53758],{"class":185},[159,144846,144847],{"class":192}," ttyUSB\n",[14,144849,144850],{},"运行结果如下：",[14,144852,144853],{},[23,144854],{"alt":25,"src":144855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,144857,144858,144859,144862],{},"也可以多次插拔USB设备，会发现设备端口",[49,144860,144861],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,144864,144865],{},[61,144866,139264],{},[14,144868,144869],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[42,144871,144873],{"id":144872},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,144875,144876,144878],{},[61,144877,144592],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,144880,144881,144883],{},[61,144882,144598],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,144885,144886],{},[61,144887,144604],{},[14,144889,144890],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,144892,144893],{},"调用如下指令查看第一台雷达的USB信息：",[151,144895,144897],{"className":138596,"code":144896,"language":138598,"meta":25,"style":25},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[49,144898,144899,144919],{"__ignoreMap":25},[159,144900,144901,144904,144906,144909,144912,144914,144916],{"class":161,"line":162},[159,144902,144903],{"class":185},"udevadm",[159,144905,16901],{"class":192},[159,144907,144908],{"class":1146}," --attribute-walk",[159,144910,144911],{"class":1146}," --name=\u002Fdev\u002FttyUSB0",[159,144913,48633],{"class":1142},[159,144915,53758],{"class":185},[159,144917,144918],{"class":192}," KERNELS\n",[159,144920,144921,144923,144925,144927,144930,144932,144934],{"class":161,"line":176},[159,144922,144903],{"class":185},[159,144924,16901],{"class":192},[159,144926,144908],{"class":1146},[159,144928,144929],{"class":1146}," --name=\u002Fdev\u002FttyACM0",[159,144931,48633],{"class":1142},[159,144933,53758],{"class":185},[159,144935,144918],{"class":192},[14,144937,144938],{},[23,144939],{"alt":25,"src":144940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,144942,144943],{},"调用如下指令查看第二台雷达的USB信息：",[151,144945,144947],{"className":138596,"code":144946,"language":138598,"meta":25,"style":25},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[49,144948,144949],{"__ignoreMap":25},[159,144950,144951,144953,144955,144957,144960,144962,144964],{"class":161,"line":162},[159,144952,144903],{"class":185},[159,144954,16901],{"class":192},[159,144956,144908],{"class":1146},[159,144958,144959],{"class":1146}," --name=\u002Fdev\u002FttyUSB1",[159,144961,48633],{"class":1142},[159,144963,53758],{"class":185},[159,144965,144918],{"class":192},[14,144967,144968,144969,144972,144973,144976,144977,144980],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[49,144970,144971],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[49,144974,144975],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[61,144978,144979],{},"唯一性标识","”。",[14,144982,144632],{},[14,144984,144635,144985,144987],{},[49,144986,144638],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[151,144989,144990],{"className":138596,"code":144642,"language":138598,"meta":25,"style":25},[49,144991,144992],{"__ignoreMap":25},[159,144993,144994,144996,144998],{"class":161,"line":162},[159,144995,48101],{"class":185},[159,144997,139883],{"class":192},[159,144999,144653],{"class":192},[151,145001,145003],{"className":138596,"code":145002,"language":138598,"meta":25,"style":25},"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",[49,145004,145005,145034],{"__ignoreMap":25},[159,145006,145007,145009,145011,145013,145016,145018,145021,145024,145026,145029,145031],{"class":161,"line":162},[159,145008,144666],{"class":165},[159,145010,189],{"class":1142},[159,145012,144671],{"class":192},[159,145014,145015],{"class":165}," KERNELS",[159,145017,189],{"class":1142},[159,145019,145020],{"class":192},"=\"1-1.3:1.0\",",[159,145022,145023],{"class":185}," MODE:",[159,145025,189],{"class":192},[159,145027,145028],{"class":185},"\"0777\"",[159,145030,24233],{"class":185},[159,145032,145033],{"class":192}," SYMLINK+=\"rplidar_front\"\n",[159,145035,145036,145038,145040,145042,145044,145046,145049,145051,145053,145055,145057],{"class":161,"line":176},[159,145037,144666],{"class":165},[159,145039,189],{"class":1142},[159,145041,144671],{"class":192},[159,145043,145015],{"class":165},[159,145045,189],{"class":1142},[159,145047,145048],{"class":192},"=\"1-1.4:1.0\",",[159,145050,145023],{"class":185},[159,145052,189],{"class":192},[159,145054,145028],{"class":185},[159,145056,24233],{"class":185},[159,145058,145059],{"class":192}," SYMLINK+=\"rplidar_back\"\n",[14,145061,144751],{},[14,145063,144754],{},[151,145065,145066],{"className":138596,"code":144757,"language":138598,"meta":25,"style":25},[49,145067,145068,145072,145082,145092,145096,145100,145110],{"__ignoreMap":25},[159,145069,145070],{"class":161,"line":162},[159,145071,144764],{"class":1135},[159,145073,145074,145076,145078,145080],{"class":161,"line":176},[159,145075,48101],{"class":185},[159,145077,141348],{"class":192},[159,145079,144773],{"class":192},[159,145081,144776],{"class":192},[159,145083,145084,145086,145088,145090],{"class":161,"line":203},[159,145085,48101],{"class":185},[159,145087,141348],{"class":192},[159,145089,144773],{"class":192},[159,145091,144787],{"class":192},[159,145093,145094],{"class":161,"line":223},[159,145095,590],{"emptyLinePlaceholder":589},[159,145097,145098],{"class":161,"line":233},[159,145099,144796],{"class":1135},[159,145101,145102,145104,145106,145108],{"class":161,"line":239},[159,145103,48101],{"class":185},[159,145105,144803],{"class":192},[159,145107,144806],{"class":192},[159,145109,144809],{"class":1146},[159,145111,145112,145114,145116],{"class":161,"line":245},[159,145113,48101],{"class":185},[159,145115,144803],{"class":192},[159,145117,144818],{"class":192},[14,145119,144821],{},[14,145121,144824],{},[14,145123,144827,145124,145127],{},[49,145125,145126],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,145129,145130],{},[23,145131],{"alt":25,"src":145132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,145134,145135],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,145137,145138,145140],{},[61,145139,139264],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[42,145142,145144],{"id":145143},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,145146,145147],{},"（1）.查看所连接的主机USB接口的信息",[151,145149,145151],{"className":138596,"code":145150,"language":138598,"meta":25,"style":25},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[49,145152,145153,145183],{"__ignoreMap":25},[159,145154,145155,145157,145159,145162,145164,145166,145168,145170,145173,145176,145178,145181],{"class":161,"line":162},[159,145156,144903],{"class":185},[159,145158,16901],{"class":192},[159,145160,145161],{"class":1146}," -a",[159,145163,52738],{"class":1146},[159,145165,51944],{"class":165},[159,145167,144903],{"class":185},[159,145169,16901],{"class":192},[159,145171,145172],{"class":1146}," -q",[159,145174,145175],{"class":192}," path",[159,145177,48639],{"class":1146},[159,145179,145180],{"class":192}," \u002Fdev\u002FttyACM0",[159,145182,1165],{"class":165},[159,145184,145185,145187,145189,145191,145193,145195,145197,145199,145201,145203,145205,145208],{"class":161,"line":176},[159,145186,144903],{"class":185},[159,145188,16901],{"class":192},[159,145190,145161],{"class":1146},[159,145192,52738],{"class":1146},[159,145194,51944],{"class":165},[159,145196,144903],{"class":185},[159,145198,16901],{"class":192},[159,145200,145172],{"class":1146},[159,145202,145175],{"class":192},[159,145204,48639],{"class":1146},[159,145206,145207],{"class":192}," \u002Fdev\u002FttyUSB0",[159,145209,1165],{"class":165},[14,145211,145212],{},[23,145213],{"alt":25,"src":145214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,145216,145217],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,145219,144632],{},[14,145221,144635,145222,144987],{},[49,145223,144638],{},[151,145225,145226],{"className":138596,"code":144642,"language":138598,"meta":25,"style":25},[49,145227,145228],{"__ignoreMap":25},[159,145229,145230,145232,145234],{"class":161,"line":162},[159,145231,48101],{"class":185},[159,145233,139883],{"class":192},[159,145235,144653],{"class":192},[151,145237,145239],{"className":138596,"code":145238,"language":138598,"meta":25,"style":25},"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",[49,145240,145241,145269,145295],{"__ignoreMap":25},[159,145242,145243,145245,145247,145250,145252,145254,145256,145258,145261,145264,145266],{"class":161,"line":162},[159,145244,144666],{"class":165},[159,145246,189],{"class":1142},[159,145248,145249],{"class":192},"=\"ttyACM*\",",[159,145251,144674],{"class":185},[159,145253,144677],{"class":192},[159,145255,144706],{"class":185},[159,145257,24233],{"class":185},[159,145259,145260],{"class":192}," ATTRS{idProduct}==\"55d4\",",[159,145262,145263],{"class":192}," ATTRS{serial}==\"0001\",",[159,145265,144688],{"class":192},[159,145267,145268],{"class":192}," SYMLINK+=\"ttyACM_MCU\"\n",[159,145270,145271,145273,145275,145277,145279,145281,145283,145285,145287,145290,145292],{"class":161,"line":176},[159,145272,144666],{"class":165},[159,145274,189],{"class":1142},[159,145276,145249],{"class":192},[159,145278,144674],{"class":185},[159,145280,144677],{"class":192},[159,145282,144706],{"class":185},[159,145284,24233],{"class":185},[159,145286,145260],{"class":192},[159,145288,145289],{"class":192}," ATTRS{serial}==\"0002\",",[159,145291,144688],{"class":192},[159,145293,145294],{"class":192}," SYMLINK+=\"ttyACM_Lidar\"\n",[159,145296,145297,145299,145301,145303,145305,145307,145309,145311,145313,145315],{"class":161,"line":203},[159,145298,144666],{"class":165},[159,145300,189],{"class":1142},[159,145302,144671],{"class":192},[159,145304,144674],{"class":185},[159,145306,144677],{"class":192},[159,145308,144706],{"class":185},[159,145310,24233],{"class":185},[159,145312,144711],{"class":192},[159,145314,144688],{"class":192},[159,145316,145317],{"class":192}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,145319,144751],{},[14,145321,144754],{},[151,145323,145324],{"className":138596,"code":144757,"language":138598,"meta":25,"style":25},[49,145325,145326,145330,145340,145350,145354,145358,145368],{"__ignoreMap":25},[159,145327,145328],{"class":161,"line":162},[159,145329,144764],{"class":1135},[159,145331,145332,145334,145336,145338],{"class":161,"line":176},[159,145333,48101],{"class":185},[159,145335,141348],{"class":192},[159,145337,144773],{"class":192},[159,145339,144776],{"class":192},[159,145341,145342,145344,145346,145348],{"class":161,"line":203},[159,145343,48101],{"class":185},[159,145345,141348],{"class":192},[159,145347,144773],{"class":192},[159,145349,144787],{"class":192},[159,145351,145352],{"class":161,"line":223},[159,145353,590],{"emptyLinePlaceholder":589},[159,145355,145356],{"class":161,"line":233},[159,145357,144796],{"class":1135},[159,145359,145360,145362,145364,145366],{"class":161,"line":239},[159,145361,48101],{"class":185},[159,145363,144803],{"class":192},[159,145365,144806],{"class":192},[159,145367,144809],{"class":1146},[159,145369,145370,145372,145374],{"class":161,"line":245},[159,145371,48101],{"class":185},[159,145373,144803],{"class":192},[159,145375,144818],{"class":192},[14,145377,145378,145379],{},"再重新插拔设备即可，或者 ",[61,145380,145381],{},"直接重启系统。",[14,145383,144824],{},[14,145385,144827,145386,145127],{},[49,145387,145126],{},[14,145389,145390],{},[23,145391],{"alt":25,"src":145392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,145394,145135],{},[14,145396,145397,145399],{},[61,145398,139264],{}," 一些设备可能没有串口号等。",[42,145401,145403],{"id":145402},"_744-其他注意事项","7.4.4 其他注意事项",[14,145405,145406,145407,145409,145410,145413,145414,41937,145417,145420,145421,145423],{},"并非所有的USB设备端口号都是",[49,145408,144861],{},"的格式，比如Arduino的端口号可能是",[49,145411,145412],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[49,145415,145416],{},"videon",[49,145418,145419],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[49,145422,145416],{},"端口，绑定时需要关联的也是该接口。",[14,145425,145426,145427,145430,145431,145434,145435,145437,145438,145441,145442,145445,145446,145449,145450,145449,145453,145449,145456,51907],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[49,145428,145429],{},"KERNEL==\"ttyUSB*\"","修改为",[49,145432,145433],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[49,145436,145429],{},"修改为类似于",[49,145439,145440],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[49,145443,145444],{},"video[0,2,4,6]","表示可以绑定的端口为",[49,145447,145448],{},"video0","或",[49,145451,145452],{},"video2",[49,145454,145455],{},"video4",[49,145457,145458],{},"video6",[37,145460,145462],{"id":145461},"_75-挂载内网网页","7.5 挂载内网网页",[14,145464,145465],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,145467,145468],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,145470,145471],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,145473,145474,145475],{},"Termux 下载地址（F-Droid）：",[8085,145476,145477],{"href":145477,"rel":145478},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[15923],[14,145480,145481],{},"首先打开app后，先更新软件缓存：",[151,145483,145485],{"className":138596,"code":145484,"language":138598,"meta":25,"style":25},"pkg update\n",[49,145486,145487],{"__ignoreMap":25},[159,145488,145489,145492],{"class":161,"line":162},[159,145490,145491],{"class":185},"pkg",[159,145493,49765],{"class":192},[14,145495,145496],{},"然后换源",[151,145498,145500],{"className":138596,"code":145499,"language":138598,"meta":25,"style":25},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[49,145501,145502],{"__ignoreMap":25},[159,145503,145504,145506,145509],{"class":161,"line":162},[159,145505,144374],{"class":185},[159,145507,145508],{"class":165}," $PREFIX",[159,145510,145511],{"class":192},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,145513,145514],{},"将该文件内容替换为下面：",[151,145516,145518],{"className":138596,"code":145517,"language":138598,"meta":25,"style":25},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[49,145519,145520],{"__ignoreMap":25},[159,145521,145522,145525,145528,145531],{"class":161,"line":162},[159,145523,145524],{"class":185},"deb",[159,145526,145527],{"class":192}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[159,145529,145530],{"class":192}," stable",[159,145532,145533],{"class":192}," main\n",[103,145535,145536,145563],{},[106,145537,145538,145539,145541,145542],{},"如果你使用的是",[49,145540,144374],{},"编辑器：",[103,145543,145544,145551,145557],{},[106,145545,145546,145547,145550],{},"按 ",[49,145548,145549],{},"Ctrl+O"," 保存文件。",[106,145552,145546,145553,145556],{},[49,145554,145555],{},"Enter"," 确认文件名。",[106,145558,145546,145559,145562],{},[49,145560,145561],{},"Ctrl+X"," 退出编辑器。",[106,145564,145538,145565,145541,145568],{},[49,145566,145567],{},"vim",[103,145569,145570,145576],{},[106,145571,145546,145572,145575],{},[49,145573,145574],{},"Esc"," 退出编辑模式。",[106,145577,145578,145579,145581],{},"输入 ",[49,145580,140521],{}," 保存并退出。",[14,145583,145584],{},"接下来重新更新软件源：",[151,145586,145588],{"className":138596,"code":145587,"language":138598,"meta":25,"style":25},"pkg update && pkg upgrade\n",[49,145589,145590],{"__ignoreMap":25},[159,145591,145592,145594,145596,145598,145600],{"class":161,"line":162},[159,145593,145491],{"class":185},[159,145595,138647],{"class":192},[159,145597,49713],{"class":165},[159,145599,145491],{"class":185},[159,145601,138633],{"class":192},[14,145603,145604],{},"安装python：",[151,145606,145608],{"className":138596,"code":145607,"language":138598,"meta":25,"style":25},"pkg install python\n",[49,145609,145610],{"__ignoreMap":25},[159,145611,145612,145614,145616],{"class":161,"line":162},[159,145613,145491],{"class":185},[159,145615,47359],{"class":192},[159,145617,145618],{"class":192}," python\n",[14,145620,145621,49996],{},[61,145622,145623],{},"通过Termux访问设备存储",[14,145625,145626],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[151,145628,145630],{"className":138596,"code":145629,"language":138598,"meta":25,"style":25},"termux-setup-storage\n",[49,145631,145632],{"__ignoreMap":25},[159,145633,145634],{"class":161,"line":162},[159,145635,145629],{"class":185},[134,145637,145638],{},[106,145639,145640,49996,145643],{},[61,145641,145642],{},"进入HTML文件所在的目录",[134,145644,145645],{},[106,145646,145647,145648,145650],{},"使用",[49,145649,122576],{},"命令进入HTML文件所在的目录：",[151,145652,145654],{"className":138596,"code":145653,"language":138598,"meta":25,"style":25},"cd ~\u002Fyour_html_folder\n",[49,145655,145656],{"__ignoreMap":25},[159,145657,145658,145660],{"class":161,"line":162},[159,145659,122576],{"class":1146},[159,145661,145662],{"class":192}," ~\u002Fyour_html_folder\n",[134,145664,145665],{"start":176},[106,145666,145667,49996,145670,145675,145692],{},[61,145668,145669],{},"启动Python HTTP服务器",[134,145671,145672],{},[106,145673,145674],{},"运行以下命令启动一个简单的HTTP服务器：",[151,145676,145678],{"className":138596,"code":145677,"language":138598,"meta":25,"style":25},"python -m http.server 8000\n",[49,145679,145680],{"__ignoreMap":25},[159,145681,145682,145684,145686,145689],{"class":161,"line":162},[159,145683,53902],{"class":185},[159,145685,122182],{"class":1146},[159,145687,145688],{"class":192}," http.server",[159,145690,145691],{"class":1146}," 8000\n",[134,145693,145694],{"start":203},[106,145695,145696,145697,145700],{},"这会在端口",[49,145698,145699],{},"8000","上启动一个Web服务器。",[103,145702,145703],{},[106,145704,145705],{},"启动服务器后，Termux会显示日志信息，例如：",[151,145707,145709],{"className":142116,"code":145708,"language":142118,"meta":142119,"style":25},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[49,145710,145711],{"__ignoreMap":25},[159,145712,145713],{"class":161,"line":162},[159,145714,145708],{},[103,145716,145717],{},[106,145718,145719],{},"这表示服务器已成功启动。",[14,145721,145722],{},[61,145723,145724],{},"在浏览器中访问HTML文件",[134,145726,145727],{},[106,145728,145729,49996,145732,145737],{},[61,145730,145731],{},"在同一设备上访问",[134,145733,145734],{},[106,145735,145736],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[151,145738,145741],{"className":145739,"code":145740,"language":18759,"meta":25,"style":25},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[49,145742,145743],{"__ignoreMap":25},[159,145744,145745,145748],{"class":161,"line":162},[159,145746,145747],{"class":165},"http:",[159,145749,145750],{"class":1135},"\u002F\u002Flocalhost:8000\n",[103,145752,145753],{},[106,145754,145755,145756,145759],{},"如果HTML文件中有",[49,145757,145758],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[37,145761,145763],{"id":145762},"_76-linux重点知识","7.6 Linux重点知识",[42,145765,145767],{"id":145766},"_761-关于点的说明","7.6.1 关于点的说明",[14,145769,145770],{},[23,145771],{"alt":25,"src":145772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,145774,145775],{},"一点本目录，两点上目录",[42,145777,145779],{"id":145778},"_762-目录","7.6.2 目录",[326,145781,145783],{"id":145782},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,145785,145786],{},[61,145787,145788],{},"\u002Fboot:",[14,145790,145791],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,145793,145794],{},[61,145795,145796],{},"\u002Fetc:",[14,145798,145799],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,145801,145802],{},[61,145803,145804],{},"\u002Flib：",[14,145806,145807],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,145809,145810],{},[61,145811,145812],{},"\u002Fsys:",[14,145814,145815],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[326,145817,145819],{"id":145818},"_7622-指令集合","7.6.2.2 指令集合",[14,145821,145822],{},[61,145823,145824],{},"\u002Fbin:",[14,145826,145827],{},"为二进制文件的缩写，存放最经常使用的命令",[14,145829,145830],{},[61,145831,145832],{},"\u002Fsbin:",[14,145834,145835],{},"只有系统管理员才能使用的程序和指令",[326,145837,145839],{"id":145838},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,145841,145842],{},[61,145843,145844],{},"\u002Fdev:",[14,145846,145847],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,145849,145850],{},[61,145851,145852],{},"\u002Fmedia:",[14,145854,145855],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,145857,145858],{},[61,145859,145860],{},"\u002Fmnt:",[14,145862,145863],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[326,145865,145867],{"id":145866},"_7624-临时文件","7.6.2.4 临时文件",[14,145869,145870],{},[61,145871,145872],{},"\u002Frun:",[14,145874,145875],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,145877,145878],{},[61,145879,145880],{},"\u002Flost+found:",[14,145882,145883],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,145885,145886],{},[61,145887,145888],{},"\u002Ftmp:",[14,145890,145891],{},"这个目录是用来存放一些临时文件的",[326,145893,145895],{"id":145894},"_7625-账户","7.6.2.5 账户",[14,145897,145898],{},[61,145899,145900],{},"\u002Froot：",[14,145902,145903],{},"系统管理员的用户主目录",[14,145905,145906,49996],{},[61,145907,145908],{},"\u002Fhome",[14,145910,145911],{},"用户的主目录，以用户的账号命名的",[14,145913,145914,49996],{},[61,145915,145916],{},"\u002Fusr",[14,145918,145919],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,145921,145922],{},[61,145923,145924],{},"\u002Fusr\u002Fbin：",[14,145926,145927],{},"系统用户使用的应用程序与指令",[14,145929,145930],{},[61,145931,145932],{},"\u002Fusr\u002Fsbin：",[14,145934,145935],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,145937,145938],{},[61,145939,145940],{},"\u002Fusr\u002Fsrc：",[14,145942,145943],{},"内核源代码默认的放置目录",[326,145945,145947],{"id":145946},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,145949,145950],{},[61,145951,145952],{},"\u002Fvar：",[14,145954,145955],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,145957,145958],{},[61,145959,145960],{},"\u002Fproc:",[14,145962,145963,145964,145967],{},"管理 ",[61,145965,145966],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[326,145969,145971],{"id":145970},"_7627-扩展用的","7.6.2.7 扩展用的",[14,145973,145974],{},[61,145975,145976],{},"\u002Fopt:",[14,145978,145979],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,145981,145982],{},[61,145983,145984],{},"\u002Fsrv:",[14,145986,145987],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[42,145989,145991],{"id":145990},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,145993,145994],{},[23,145995],{"alt":25,"src":145996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,145998,145999],{},"windows-->linux:",[14,146001,146002],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,146004,146005],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,146007,146008],{},"linux传输文件到windows",[14,146010,146011],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[42,146013,146015],{"id":146014},"_764-易忘知识","7.6.4 易忘知识",[14,146017,146018],{},"操作系统内核查看",[151,146020,146021],{"className":138596,"code":142590,"language":138598,"meta":25,"style":25},[49,146022,146023],{"__ignoreMap":25},[159,146024,146025,146027],{"class":161,"line":162},[159,146026,17290],{"class":185},[159,146028,142599],{"class":1146},[14,146030,146031],{},[23,146032],{"alt":25,"src":146033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,146035,146036],{},[23,146037],{"alt":25,"src":146038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[151,146040,146042],{"className":138596,"code":146041,"language":138598,"meta":25,"style":25},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[49,146043,146044,146056],{"__ignoreMap":25},[159,146045,146046,146048,146051,146054],{"class":161,"line":162},[159,146047,142807],{"class":185},[159,146049,146050],{"class":192}," mvtest",[159,146052,146053],{"class":192}," mvtest2",[159,146055,17636],{"class":165},[159,146057,146058],{"class":161,"line":176},[159,146059,146060],{"class":185},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,146062,146063],{},[23,146064],{"alt":25,"src":146065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,146067,146068],{},[23,146069],{"alt":25,"src":146070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,146072,146073,146074,146077],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[49,146075,146076],{},"du -a"," 可以快速查看磁盘使用细节。",[42,146079,146081],{"id":146080},"_765-vim","7.6.5 Vim",[14,146083,146084],{},[23,146085],{"alt":25,"src":146086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,146088,146089],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,146091,146092],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,146094,146095],{},[61,146096,146097],{},"1.命令模式：",[14,146099,146100],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,146102,146103],{},"x 删除当前光标所在处的字符",[14,146105,146106],{},"：切换到底线命令模式，以在最底一行输入命令",[14,146108,146109],{},"a 进行插入模式，在光标下一个位置输入文本",[14,146111,146112],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,146114,146115],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,146117,146118],{},"dd 剪切当前行",[14,146120,146121],{},"yy 复制当前行",[14,146123,146124],{},"p 粘贴剪贴板内容到光标下方",[14,146126,146127],{},"P 粘贴剪贴板内容到光标上方",[14,146129,146130],{},"u 撤销上一次操作",[14,146132,146133],{},"ctrl+r 重做上一次操作",[14,146135,146136,146138],{},[24625,146137],{}," 保存文件",[14,146140,146141,146143],{},[24481,146142],{}," 退出Vim编辑器",[14,146145,146146,146148],{},[24481,146147],{},"! 强制退出Vim编辑器，不保存修改",[14,146150,146151],{},[61,146152,146153],{},"2.输入模式：",[14,146155,146156],{},[23,146157],{"alt":25,"src":146158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,146160,146161],{},[61,146162,146163],{},"3.底线命令模式：",[14,146165,146166],{},[23,146167],{"alt":25,"src":146168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,146170,146171],{},"按下esc可以退出底线命令模式",[42,146173,146175],{"id":146174},"_766-apt","7.6.6 apt",[14,146177,146178],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[42,146180,146182],{"id":146181},"_767-home与root的区别","7.6.7 home与root的区别",[14,146184,146185],{},[23,146186],{"alt":25,"src":146187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,146189,146190],{},[23,146191],{"alt":25,"src":146192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,146194,146195],{},[23,146196],{"alt":25,"src":146197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,146199,146200],{},[23,146201],{"alt":25,"src":146202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[42,146204,146206],{"id":146205},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,146208,146209],{},[8085,146210,146211],{"href":146211,"rel":146212},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[15923],[134,146214,146215,146218],{},[106,146216,146217],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[106,146219,146220],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,146222,146223],{},[23,146224],{"alt":25,"src":146225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,146227,146228],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,146230,146231],{},[23,146232],{"alt":25,"src":146233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[151,146235,146237],{"className":142116,"code":146236,"language":142118,"meta":142119,"style":25},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[49,146238,146239,146244],{"__ignoreMap":25},[159,146240,146241],{"class":161,"line":162},[159,146242,146243],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[159,146245,146246],{"class":161,"line":176},[159,146247,146248],{},".\u002Fpycharm.sh\n",[14,146250,146251],{},"3️⃣创建.desktop文件",[14,146253,146254],{},[61,146255,146256],{},"原理：",[103,146258,146259,146269],{},[106,146260,146261,146262,146268],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[61,146263,146264,146267],{},[49,146265,146266],{},".desktop"," 文件"," 来识别应用。",[106,146270,146271,146273,146274],{},[49,146272,146266],{}," 文件相当于一个“应用注册表”，告诉系统：",[103,146275,146276,146279,146282,146285,146288],{},[106,146277,146278],{},"应用名字（Name）",[106,146280,146281],{},"图标（Icon）",[106,146283,146284],{},"执行命令（Exec）",[106,146286,146287],{},"分类（Categories）",[106,146289,146290],{},"是否需要终端（Terminal）",[151,146292,146294],{"className":142116,"code":146293,"language":142118,"meta":142119,"style":25},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[49,146295,146296,146301],{"__ignoreMap":25},[159,146297,146298],{"class":161,"line":162},[159,146299,146300],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[159,146302,146303],{"class":161,"line":176},[159,146304,146305],{},"nano pycharm.desktop\n",[14,146307,146308],{},"nano是一个命令行下的编辑器，也可以使用vim",[151,146310,146312],{"className":142116,"code":146311,"language":142118,"meta":142119,"style":25},"[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",[49,146313,146314,146319,146324,146329,146334,146339,146344,146349,146354,146359],{"__ignoreMap":25},[159,146315,146316],{"class":161,"line":162},[159,146317,146318],{},"[Desktop Entry]\n",[159,146320,146321],{"class":161,"line":176},[159,146322,146323],{},"Version=1.0\n",[159,146325,146326],{"class":161,"line":203},[159,146327,146328],{},"Type=Application\n",[159,146330,146331],{"class":161,"line":223},[159,146332,146333],{},"Name=PyCharm\n",[159,146335,146336],{"class":161,"line":233},[159,146337,146338],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[159,146340,146341],{"class":161,"line":239},[159,146342,146343],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[159,146345,146346],{"class":161,"line":245},[159,146347,146348],{},"Comment=JetBrains PyCharm IDE\n",[159,146350,146351],{"class":161,"line":251},[159,146352,146353],{},"Categories=Development;IDE;\n",[159,146355,146356],{"class":161,"line":261},[159,146357,146358],{},"Terminal=false\n",[159,146360,146361],{"class":161,"line":603},[159,146362,146363],{},"StartupWMClass=jetbrains-pycharm\n",[103,146365,146366,146372,146378,146384],{},[106,146367,146368,146371],{},[49,146369,146370],{},"Exec"," → 点击图标时执行的命令",[106,146373,146374,146377],{},[49,146375,146376],{},"Icon"," → 显示在菜单和桌面上的图标",[106,146379,146380,146383],{},[49,146381,146382],{},"Terminal=false"," → 不打开终端",[106,146385,146386,146389],{},[49,146387,146388],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[146391,146392,146393],"blockquote",{},[14,146394,146395,146396,146398,146399],{},"可以理解成 ",[49,146397,146266],{}," 文件是 Linux 的 ",[61,146400,146401],{},"快捷方式配置文件",[14,146403,146404],{},"4️⃣设置可执行权限",[151,146406,146408],{"className":142116,"code":146407,"language":142118,"meta":142119,"style":25},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[49,146409,146410],{"__ignoreMap":25},[159,146411,146412],{"class":161,"line":162},[159,146413,146407],{},[14,146415,146416],{},"5️⃣桌面图标启动的话如下：",[151,146418,146420],{"className":142116,"code":146419,"language":142118,"meta":142119,"style":25},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[49,146421,146422,146427],{"__ignoreMap":25},[159,146423,146424],{"class":161,"line":162},[159,146425,146426],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[159,146428,146429],{"class":161,"line":176},[159,146430,146431],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[134,146433,146434],{"start":203},[106,146435,146436],{},"下载Appimage文件实现软件的安装",[14,146438,146439],{},"1️⃣先下载appimage",[14,146441,146442],{},[8085,146443,146444],{"href":146444,"rel":146445},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[15923],[14,146447,146448],{},[23,146449],{"alt":25,"src":146450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,146452,146453],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,146455,146456],{},[23,146457],{"alt":25,"src":146458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,146460,146461],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,146463,146464],{},[23,146465],{"alt":25,"src":146466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,146468,146469],{},[23,146470],{"alt":25,"src":146471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,146473,146474,146475,146478],{},"3️⃣给他们放在",[49,146476,146477],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,146480,146481],{},"4️⃣给软件执行权限",[151,146483,146485],{"className":142116,"code":146484,"language":142118,"meta":142119,"style":25},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[49,146486,146487,146492],{"__ignoreMap":25},[159,146488,146489],{"class":161,"line":162},[159,146490,146491],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[159,146493,146494],{"class":161,"line":176},[159,146495,146496],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,146498,146499],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[151,146501,146503],{"className":138596,"code":146502,"language":138598,"meta":25,"style":25},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[49,146504,146505,146512,146519,146525],{"__ignoreMap":25},[159,146506,146507,146509],{"class":161,"line":162},[159,146508,122576],{"class":1146},[159,146510,146511],{"class":192}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[159,146513,146514,146516],{"class":161,"line":176},[159,146515,122583],{"class":185},[159,146517,146518],{"class":192}," .\u002Fqqmusic.desktop\n",[159,146520,146521,146523],{"class":161,"line":203},[159,146522,145567],{"class":185},[159,146524,146518],{"class":192},[159,146526,146527,146529,146531,146533],{"class":161,"line":223},[159,146528,48101],{"class":185},[159,146530,48104],{"class":192},[159,146532,144433],{"class":192},[159,146534,146518],{"class":192},[14,146536,146537,146539],{},[49,146538,122583],{},"：一个 Linux 命令，主要功能是：",[103,146541,146542,146545],{},[106,146543,146544],{},"如果文件不存在，就创建一个新的空文件",[106,146546,146547],{},"如果文件已存在，就更新该文件的最后修改时间",[151,146549,146551],{"className":142116,"code":146550,"language":142118,"meta":142119,"style":25},"[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",[49,146552,146553,146557,146562,146567,146572,146576,146581],{"__ignoreMap":25},[159,146554,146555],{"class":161,"line":162},[159,146556,146318],{},[159,146558,146559],{"class":161,"line":176},[159,146560,146561],{},"Name=QQ音乐\n",[159,146563,146564],{"class":161,"line":203},[159,146565,146566],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[159,146568,146569],{"class":161,"line":223},[159,146570,146571],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[159,146573,146574],{"class":161,"line":233},[159,146575,146328],{},[159,146577,146578],{"class":161,"line":239},[159,146579,146580],{},"Categories=Audio;Music;Player;\n",[159,146582,146583],{"class":161,"line":245},[159,146584,146585],{},"Comment=QQ Music Client for Linux\n",[14,146587,146588],{},"将文件复制进去",[14,146590,146591],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,146593,146594],{},[23,146595],{"alt":25,"src":146596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,146598,146599],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,146601,146602],{},[23,146603],{"alt":25,"src":146604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,146606,146607,146608,146611,146612,146615],{},"如果你用的不是KDE，那么也可以直接修改",[49,146609,146610],{},"qqmuic.desktop","：在exec的末尾加上",[49,146613,146614],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[151,146617,146619],{"className":142116,"code":146618,"language":142118,"meta":142119,"style":25},"[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",[49,146620,146621,146625,146629,146634,146638,146642,146646],{"__ignoreMap":25},[159,146622,146623],{"class":161,"line":162},[159,146624,146318],{},[159,146626,146627],{"class":161,"line":176},[159,146628,146561],{},[159,146630,146631],{"class":161,"line":203},[159,146632,146633],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[159,146635,146636],{"class":161,"line":223},[159,146637,146571],{},[159,146639,146640],{"class":161,"line":233},[159,146641,146328],{},[159,146643,146644],{"class":161,"line":239},[159,146645,146580],{},[159,146647,146648],{"class":161,"line":245},[159,146649,146585],{},[14,146651,146652],{},[23,146653],{"alt":25,"src":146654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,146656,146657],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[151,146659,146661],{"className":142116,"code":146660,"language":142118,"meta":142119,"style":25},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[49,146662,146663],{"__ignoreMap":25},[159,146664,146665],{"class":161,"line":162},[159,146666,146660],{},[134,146668,146669],{"start":223},[106,146670,146671],{},"去Flathub上安装软件",[14,146673,146674],{},[8085,146675,146676],{"href":146676,"rel":146677},"https:\u002F\u002Fflathub.org\u002F",[15923],[14,146679,146680],{},"1️⃣去上面的官网搜索软件+下载软件",[14,146682,146683],{},[23,146684],{"alt":25,"src":146685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[151,146687,146689],{"className":142116,"code":146688,"language":142118,"meta":142119,"style":25},"flatpak install flathub com.obsproject.Studio\n",[49,146690,146691],{"__ignoreMap":25},[159,146692,146693],{"class":161,"line":162},[159,146694,146688],{},[14,146696,146697],{},[23,146698],{"alt":25,"src":146699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,146701,146702],{},"2️⃣运行软件",[14,146704,146705],{},"a.官方方式：",[14,146707,146708],{},[23,146709],{"alt":25,"src":146710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[151,146712,146713],{"className":142116,"code":146688,"language":142118,"meta":142119,"style":25},[49,146714,146715],{"__ignoreMap":25},[159,146716,146717],{"class":161,"line":162},[159,146718,146688],{},[14,146720,146721],{},"b.当普通软件运行：",[14,146723,146724],{},[23,146725],{"alt":25,"src":146726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,146728,146729],{},[23,146730],{"alt":25,"src":146731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1468,146733,146734],{},"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":25,"searchDepth":176,"depth":176,"links":146736},[146737,146738,146743,146744,146750,146751],{"id":143469,"depth":176,"text":143470},{"id":143811,"depth":176,"text":143812,"children":146739},[146740,146741,146742],{"id":143815,"depth":203,"text":143816},{"id":143882,"depth":203,"text":143883},{"id":144143,"depth":203,"text":144144},{"id":144296,"depth":176,"text":144297},{"id":144534,"depth":176,"text":144535,"children":146745},[146746,146747,146748,146749],{"id":144586,"depth":203,"text":144587},{"id":144872,"depth":203,"text":144873},{"id":145143,"depth":203,"text":145144},{"id":145402,"depth":203,"text":145403},{"id":145461,"depth":176,"text":145462},{"id":145762,"depth":176,"text":145763,"children":146752},[146753,146754,146755,146756,146757,146758,146759,146760],{"id":145766,"depth":203,"text":145767},{"id":145778,"depth":203,"text":145779},{"id":145990,"depth":203,"text":145991},{"id":146014,"depth":203,"text":146015},{"id":146080,"depth":203,"text":146081},{"id":146174,"depth":203,"text":146175},{"id":146181,"depth":203,"text":146182},{"id":146205,"depth":203,"text":146206},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":143461,"description":23809},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":146767,"title":146768,"body":146769,"description":23809,"extension":23810,"meta":146773,"navigation":589,"path":146774,"seo":146775,"stem":146776,"__hash__":146777},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":146770,"toc":146771},[],{"title":25,"searchDepth":176,"depth":176,"links":146772},[],{"category":53785},"\u002Fwiki\u002F2025-01-27-linux",{"title":146768,"description":23809},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":146779,"title":146780,"body":146781,"description":146785,"extension":23810,"meta":147176,"navigation":589,"path":147177,"seo":147178,"stem":147179,"__hash__":147180},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":146782,"toc":147174},[146783,146786,146790,146807,146810,146863,146867,146869,146909,146918,146922,146925,147166,147171],[14,146784,146785],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,146787,146789],{"id":146788},"_1ubuntu环境配置","1.Ubuntu环境配置",[134,146791,146792,146795,146798,146801,146804],{},[106,146793,146794],{},"ubuntu环境换源",[106,146796,146797],{},"安装cuda",[106,146799,146800],{},"安装miniconda",[106,146802,146803],{},"安装pytorch",[106,146805,146806],{},"安装genesis",[14,146808,146809],{},"参考链接：",[151,146811,146813],{"className":47347,"code":146812,"language":47349,"meta":25,"style":25},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[49,146814,146815],{"__ignoreMap":25},[159,146816,146817,146820,146823,146826,146828,146831,146834,146836,146839,146842,146844,146847,146850,146852,146855,146858,146860],{"class":161,"line":162},[159,146818,146819],{"class":185},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[159,146821,146822],{"class":192},"=blogdetail",[159,146824,146825],{"class":165},"&sharetype",[159,146827,189],{"class":1142},[159,146829,146830],{"class":192},"blogdetail",[159,146832,146833],{"class":165},"&sharerId",[159,146835,189],{"class":1142},[159,146837,146838],{"class":192},"144728092",[159,146840,146841],{"class":165},"&sharerefer",[159,146843,189],{"class":1142},[159,146845,146846],{"class":192},"PC",[159,146848,146849],{"class":165},"&sharesource",[159,146851,189],{"class":1142},[159,146853,146854],{"class":192},"qq_69379513",[159,146856,146857],{"class":165},"&sharefrom",[159,146859,189],{"class":1142},[159,146861,146862],{"class":192},"from_link\n",[10,146864,146866],{"id":146865},"_2genesis-报错issue","2.Genesis 报错issue",[14,146868,146809],{},[151,146870,146871],{"className":47347,"code":146812,"language":47349,"meta":25,"style":25},[49,146872,146873],{"__ignoreMap":25},[159,146874,146875,146877,146879,146881,146883,146885,146887,146889,146891,146893,146895,146897,146899,146901,146903,146905,146907],{"class":161,"line":162},[159,146876,146819],{"class":185},[159,146878,146822],{"class":192},[159,146880,146825],{"class":165},[159,146882,189],{"class":1142},[159,146884,146830],{"class":192},[159,146886,146833],{"class":165},[159,146888,189],{"class":1142},[159,146890,146838],{"class":192},[159,146892,146841],{"class":165},[159,146894,189],{"class":1142},[159,146896,146846],{"class":192},[159,146898,146849],{"class":165},[159,146900,189],{"class":1142},[159,146902,146854],{"class":192},[159,146904,146857],{"class":165},[159,146906,189],{"class":1142},[159,146908,146862],{"class":192},[151,146910,146912],{"className":47347,"code":146911,"language":47349,"meta":25,"style":25},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[49,146913,146914],{"__ignoreMap":25},[159,146915,146916],{"class":161,"line":162},[159,146917,146911],{"class":185},[10,146919,146921],{"id":146920},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,146923,146924],{},"hello_robot.py",[151,146926,146928],{"className":53900,"code":146927,"language":53902,"meta":25,"style":25},"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",[49,146929,146930,146936,146951,146955,146967,146979,146983,146996,147000,147019,147029,147039,147053,147057,147061,147066,147070,147080,147087,147101,147108,147118,147123,147127,147145,147150,147154,147161],{"__ignoreMap":25},[159,146931,146932,146934],{"class":161,"line":162},[159,146933,53914],{"class":1142},[159,146935,68700],{"class":165},[159,146937,146938,146941,146944,146946,146948],{"class":161,"line":176},[159,146939,146940],{"class":165},"os.environ[",[159,146942,146943],{"class":192},"'PYOPENGL_PLATFORM'",[159,146945,28061],{"class":165},[159,146947,189],{"class":1142},[159,146949,146950],{"class":192}," 'glx'\n",[159,146952,146953],{"class":161,"line":203},[159,146954,590],{"emptyLinePlaceholder":589},[159,146956,146957,146959,146962,146964],{"class":161,"line":223},[159,146958,53914],{"class":1142},[159,146960,146961],{"class":165}," genesis ",[159,146963,54903],{"class":1142},[159,146965,146966],{"class":165}," gs\n",[159,146968,146969,146971,146974,146976],{"class":161,"line":233},[159,146970,54258],{"class":1142},[159,146972,146973],{"class":165}," pynput ",[159,146975,53914],{"class":1142},[159,146977,146978],{"class":165}," keyboard\n",[159,146980,146981],{"class":161,"line":239},[159,146982,590],{"emptyLinePlaceholder":589},[159,146984,146985,146988,146991,146993],{"class":161,"line":245},[159,146986,146987],{"class":165},"gs.init(",[159,146989,146990],{"class":8765},"backend",[159,146992,189],{"class":1142},[159,146994,146995],{"class":165},"gs.gpu)\n",[159,146997,146998],{"class":161,"line":251},[159,146999,590],{"emptyLinePlaceholder":589},[159,147001,147002,147005,147007,147010,147013,147015,147017],{"class":161,"line":261},[159,147003,147004],{"class":165},"scene ",[159,147006,189],{"class":1142},[159,147008,147009],{"class":165}," gs.Scene(",[159,147011,147012],{"class":8765},"show_viewer",[159,147014,189],{"class":1142},[159,147016,54995],{"class":1146},[159,147018,1165],{"class":165},[159,147020,147021,147024,147026],{"class":161,"line":603},[159,147022,147023],{"class":165},"plane ",[159,147025,189],{"class":1142},[159,147027,147028],{"class":165}," scene.add_entity(gs.morphs.Plane())\n",[159,147030,147031,147034,147036],{"class":161,"line":621},[159,147032,147033],{"class":165},"franka ",[159,147035,189],{"class":1142},[159,147037,147038],{"class":165}," scene.add_entity(\n",[159,147040,147041,147044,147046,147048,147051],{"class":161,"line":634},[159,147042,147043],{"class":165},"    gs.morphs.MJCF(",[159,147045,68749],{"class":8765},[159,147047,189],{"class":1142},[159,147049,147050],{"class":192},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[159,147052,61442],{"class":165},[159,147054,147055],{"class":161,"line":640},[159,147056,1165],{"class":165},[159,147058,147059],{"class":161,"line":1075},[159,147060,590],{"emptyLinePlaceholder":589},[159,147062,147063],{"class":161,"line":1081},[159,147064,147065],{"class":165},"scene.build()\n",[159,147067,147068],{"class":161,"line":1091},[159,147069,590],{"emptyLinePlaceholder":589},[159,147071,147072,147074,147077],{"class":161,"line":1100},[159,147073,55465],{"class":1142},[159,147075,147076],{"class":185}," on_press",[159,147078,147079],{"class":165},"(key):\n",[159,147081,147082,147085],{"class":161,"line":1123},[159,147083,147084],{"class":1142},"    try",[159,147086,27364],{"class":165},[159,147088,147089,147091,147094,147096,147099],{"class":161,"line":1132},[159,147090,17003],{"class":1142},[159,147092,147093],{"class":165}," key.char ",[159,147095,26581],{"class":1142},[159,147097,147098],{"class":192}," 'q'",[159,147100,27364],{"class":165},[159,147102,147103,147105],{"class":161,"line":1139},[159,147104,39293],{"class":1142},[159,147106,147107],{"class":1146}," False\n",[159,147109,147110,147113,147116],{"class":161,"line":1168},[159,147111,147112],{"class":1142},"    except",[159,147114,147115],{"class":1146}," AttributeError",[159,147117,27364],{"class":165},[159,147119,147120],{"class":161,"line":1174},[159,147121,147122],{"class":1142},"        pass\n",[159,147124,147125],{"class":161,"line":1180},[159,147126,590],{"emptyLinePlaceholder":589},[159,147128,147129,147132,147134,147137,147140,147142],{"class":161,"line":1194},[159,147130,147131],{"class":165},"listener ",[159,147133,189],{"class":1142},[159,147135,147136],{"class":165}," keyboard.Listener(",[159,147138,147139],{"class":8765},"on_press",[159,147141,189],{"class":1142},[159,147143,147144],{"class":165},"on_press)\n",[159,147146,147147],{"class":161,"line":1200},[159,147148,147149],{"class":165},"listener.start()\n",[159,147151,147152],{"class":161,"line":1221},[159,147153,590],{"emptyLinePlaceholder":589},[159,147155,147156,147158],{"class":161,"line":1230},[159,147157,129963],{"class":1142},[159,147159,147160],{"class":165}," listener.running:\n",[159,147162,147163],{"class":161,"line":1247},[159,147164,147165],{"class":165},"    scene.step()\n",[14,147167,147168],{},[23,147169],{"alt":25,"src":147170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1468,147172,147173],{},"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":25,"searchDepth":176,"depth":176,"links":147175},[],{"category":46904},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":146780,"description":146785},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":147182,"title":147183,"body":147184,"description":23809,"extension":23810,"meta":147199,"navigation":589,"path":147200,"seo":147201,"stem":147202,"__hash__":147203},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":147185,"toc":147196},[147186,147189,147193],[10,147187,147183],{"id":147188},"_1-基础知识",[37,147190,147192],{"id":147191},"_11-js的组成","1.1 js的组成",[14,147194,147195],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":25,"searchDepth":176,"depth":176,"links":147197},[147198],{"id":147191,"depth":176,"text":147192},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":147183,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":147205,"title":147206,"body":147207,"description":23809,"extension":23810,"meta":147346,"navigation":589,"path":147347,"seo":147348,"stem":147349,"__hash__":147350},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":147208,"toc":147334},[147209,147212,147216,147219,147223,147233,147237,147240,147243,147246,147250,147257,147263,147267,147273,147284,147288,147291,147295,147298,147302,147305,147309,147312,147316,147319,147322,147325,147328,147331],[10,147210,147206],{"id":147211},"_2-vscode必备内容",[37,147213,147215],{"id":147214},"_21-标签分类","2.1 标签分类",[14,147217,147218],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[37,147220,147222],{"id":147221},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,147224,147225,147226,147228,147229,147232],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[49,147227,18314],{}," 然后按 ",[49,147230,147231],{},"Tab","，快速自动生成基本结构。",[37,147234,147236],{"id":147235},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,147238,147239],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,147241,147242],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,147244,147245],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[37,147247,147249],{"id":147248},"_24-视图缩放","2.4 视图缩放",[14,147251,147252,147253,147256],{},"缩放视图 ",[49,147254,147255],{},"ctrl+"," 可实现代码增大。",[14,147258,147259,147262],{},[49,147260,147261],{},"ctrl-"," 可实现代码减小。",[37,147264,147266],{"id":147265},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,147268,147269,147270,51907],{},"VSCode 新建文件快捷键为 ",[49,147271,147272],{},"ctrl+N",[14,147274,147275,147276,147279,147280,147283],{},"保存快捷键为 ",[49,147277,147278],{},"ctrl+S","，将文本保存为 ",[49,147281,147282],{},".html"," 文件。",[37,147285,147287],{"id":147286},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,147289,147290],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[37,147292,147294],{"id":147293},"_27-vscode-icons","2.7 vscode-icons",[14,147296,147297],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[37,147299,147301],{"id":147300},"_28-easy-less","2.8 Easy LESS",[14,147303,147304],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[37,147306,147308],{"id":147307},"_29-会了吧插件","2.9 会了吧插件",[14,147310,147311],{},"会了吧插件可以展示代码中英语单词的意思。",[37,147313,147315],{"id":147314},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,147317,147318],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,147320,147321],{},"②选定多个相同的单词:ctrl+D",[14,147323,147324],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,147326,147327],{},"④全局替换某些单词:ctrl+h",[14,147329,147330],{},"⑤快速定位到某一行:ctrl+g",[14,147332,147333],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":25,"searchDepth":176,"depth":176,"links":147335},[147336,147337,147338,147339,147340,147341,147342,147343,147344,147345],{"id":147214,"depth":176,"text":147215},{"id":147221,"depth":176,"text":147222},{"id":147235,"depth":176,"text":147236},{"id":147248,"depth":176,"text":147249},{"id":147265,"depth":176,"text":147266},{"id":147286,"depth":176,"text":147287},{"id":147293,"depth":176,"text":147294},{"id":147300,"depth":176,"text":147301},{"id":147307,"depth":176,"text":147308},{"id":147314,"depth":176,"text":147315},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":147206,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":147352,"title":147353,"body":147354,"description":23809,"extension":23810,"meta":147513,"navigation":589,"path":147514,"seo":147515,"stem":147516,"__hash__":147517},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":147355,"toc":147505},[147356,147359,147363,147373,147379,147385,147389,147398,147402,147407,147410,147413,147417,147420,147430,147439,147448,147457,147467,147474,147479,147484,147497],[10,147357,147353],{"id":147358},"_3-html文本与容器标签",[37,147360,147362],{"id":147361},"_31-标题标签","3.1 标题标签",[14,147364,147365,147368,147369,147372],{},[49,147366,147367],{},"\u003Ch1>","我是一级标签",[49,147370,147371],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,147374,147375,147368,147377],{},[49,147376,147367],{},[49,147378,147371],{},[14,147380,144635,147381,147384],{},[49,147382,147383],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[37,147386,147388],{"id":147387},"_32-段落标签","3.2 段落标签",[14,147390,147391,147394,147395],{},[49,147392,147393],{},"\u003Cp>","....",[49,147396,147397],{},"\u003C\u002Fp>",[37,147399,147401],{"id":147400},"_33-换行标签","3.3 换行标签",[14,147403,147404],{},[49,147405,147406],{},"\u003Cbr \u002F>",[14,147408,147409],{},"具有强制换行的作用",[14,147411,147412],{},"单标签",[37,147414,147416],{"id":147415},"_34-文本格式化标签","3.4 文本格式化标签",[14,147418,147419],{},"提供粗体、斜体和下划线等效果",[14,147421,147422,147423,103839,147426,147429],{},"加粗：",[49,147424,147425],{},"\u003Cstrong>...\u003C\u002Fstrong>",[49,147427,147428],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,147431,147432,147433,103839,147436,147429],{},"斜体：",[49,147434,147435],{},"\u003Cem>...\u003C\u002Fem>",[49,147437,147438],{},"\u003Ci>...\u003C\u002Fi>",[14,147440,147441,147442,103839,147445,147429],{},"删除线：",[49,147443,147444],{},"\u003Cdel>...\u003C\u002Fdel>",[49,147446,147447],{},"\u003Cs>...\u003C\u002Fs>",[14,147449,147450,147451,103839,147454,147429],{},"下划线：",[49,147452,147453],{},"\u003Cins>...\u003C\u002Fins>",[49,147455,147456],{},"\u003Cu>...\u003C\u002Fu>",[37,147458,147460,147461,41937,147464,123993],{"id":147459},"_35-div和span标签","3.5 ",[49,147462,147463],{},"\u003Cdiv>",[49,147465,147466],{},"\u003Cspan>",[14,147468,147469,122318,147471,147473],{},[49,147470,147463],{},[49,147472,147466],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,147475,147476],{},[49,147477,147478],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,147480,147481],{},[49,147482,147483],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,147485,147486,147487,147489,147490,147492,147493,147496],{},"两者特点：①",[49,147488,147463],{}," 标签用来布局，但一行通常只放一个 ",[49,147491,147463],{},"。可以理解为一个大盒子，独占一行，在 ",[49,147494,147495],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,147498,98549,147499,147501,147502,147504],{},[49,147500,147466],{}," 标签也可用于布局，一行可以放多个 ",[49,147503,147466],{},"，可理解为小盒子。",{"title":25,"searchDepth":176,"depth":176,"links":147506},[147507,147508,147509,147510,147511],{"id":147361,"depth":176,"text":147362},{"id":147387,"depth":176,"text":147388},{"id":147400,"depth":176,"text":147401},{"id":147415,"depth":176,"text":147416},{"id":147459,"depth":176,"text":147512},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":147353,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":147519,"title":147520,"body":147521,"description":23809,"extension":23810,"meta":147718,"navigation":589,"path":147719,"seo":147720,"stem":147721,"__hash__":147722},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":147522,"toc":147710},[147523,147526,147530,147533,147539,147546,147552,147558,147561,147564,147567,147570,147573,147576,147579,147583,147586,147589,147592,147598,147604,147610,147617,147621,147627,147633,147636,147639,147645,147651,147657,147660,147663,147667,147670,147680,147686,147690,147699,147703,147706],[10,147524,147520],{"id":147525},"_4-html图像与链接",[37,147527,147529],{"id":147528},"_41-图像标签","4.1 图像标签",[14,147531,147532],{},"（1）标签",[14,147534,147535,147538],{},[49,147536,147537],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,147540,147541,147542,147545],{},"src是",[49,147543,147544],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,147547,147548,147549],{},"alt:文本，替换文本。图像不能显示的文字 ",[49,147550,147551],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,147553,147554,147555],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[49,147556,147557],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,147559,147560],{},"width:像素，设置图像的宽度",[14,147562,147563],{},"height:像素，设置图像的高度",[14,147565,147566],{},"border：像素，设置图像的边框粗细",[14,147568,147569],{},"（2）图像标签属性的注意点：",[14,147571,147572],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,147574,147575],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,147577,147578],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[37,147580,147582],{"id":147581},"_42-路径注意要点","4.2 路径注意要点：",[14,147584,147585],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,147587,147588],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,147590,147591],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,147593,147594,147595],{},"①同一级路径：图像文件位于HTML文件同一级，如",[49,147596,147597],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,147599,147600,147601],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[49,147602,147603],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,147605,147606,147607],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[49,147608,147609],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,147611,147612,147613,24115],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[8085,147614,147615],{"href":147615,"rel":147616},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[15923],[37,147618,147620],{"id":147619},"_43-超链接标签","4.3 超链接标签",[14,147622,147623,147626],{},[49,147624,147625],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,147628,147629,147630],{},"①语法格式：",[49,147631,147632],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,147634,147635],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,147637,147638],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,147640,147641,147642],{},"③链接分类：外部链接：",[49,147643,147644],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,147646,147647,147648],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[49,147649,147650],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,147652,147653,147654],{},"空链接：如果当时没有确定链接目标时，",[49,147655,147656],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,147658,147659],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,147661,147662],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[37,147664,147666],{"id":147665},"_44-锚点链接","4.4 锚点链接",[14,147668,147669],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,147671,147672,147673,147676,147677],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[49,147674,147675],{},"\u003Ca href=\"#two\">","第二级",[49,147678,147679],{},"\u003C\u002Fa>",[14,147681,147682,147683],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[49,147684,147685],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[37,147687,147689],{"id":147688},"_45-注释标签","4.5 注释标签",[14,147691,147692,147695,147696],{},[49,147693,147694],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[49,147697,147698],{},"ctrl+\u002F",[37,147700,147702],{"id":147701},"_46-特殊字符","4.6 特殊字符",[14,147704,147705],{},"可以实现添加多个空格",[23,147707],{"style":147708,"src":147709},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":25,"searchDepth":176,"depth":176,"links":147711},[147712,147713,147714,147715,147716,147717],{"id":147528,"depth":176,"text":147529},{"id":147581,"depth":176,"text":147582},{"id":147619,"depth":176,"text":147620},{"id":147665,"depth":176,"text":147666},{"id":147688,"depth":176,"text":147689},{"id":147701,"depth":176,"text":147702},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":147520,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":147724,"title":147725,"body":147726,"description":23809,"extension":23810,"meta":148019,"navigation":589,"path":148020,"seo":148021,"stem":148022,"__hash__":148023},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":147727,"toc":148010},[147728,147731,147735,147738,147741,147744,147747,147750,147753,147756,147759,147762,147782,147788,147792,147795,147798,147801,147804,147807,147810,147814,147817,147820,147823,147826,147839,147844,147847,147850,147865,147868,147871,147874,147877,147880,147884,147887,147894,147897,147900,147903,147906,147909,147915,147918,147921,147927,147930,147933,147936,147942,147945,147948,147962,147969,147972,147975,147982,147991,147994,147997,148000,148004,148007],[10,147729,147725],{"id":147730},"_5-html表格列表与表单",[37,147732,147734],{"id":147733},"_51-表格标签","5.1 表格标签",[14,147736,147737],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,147739,147740],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,147742,147743],{},"②表格基本语法：",[23,147745],{"style":147708,"src":147746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,147748,147749],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[23,147751],{"style":147708,"src":147752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,147754,147755],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[23,147757],{"style":147708,"src":147758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,147760,147761],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,147763,147764,147767,147768,147770,147771,147774,147775,147777,147778,147781],{},[49,147765,147766],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[49,147769,147766],{},"内部必须拥有",[49,147772,147773],{},"\u003Ctr>","标签，一般位于第一行，",[49,147776,147766],{},"比",[49,147779,147780],{},"\u003Cth>","范围广",[14,147783,147784,147787],{},[49,147785,147786],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[37,147789,147791],{"id":147790},"_52-合并单元格","5.2 合并单元格",[14,147793,147794],{},"（1）合并单元格方式：",[14,147796,147797],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,147799,147800],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,147802,147803],{},"（2）目标单元格：",[14,147805,147806],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,147808,147809],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[37,147811,147813],{"id":147812},"_53-列表标签","5.3 列表标签",[14,147815,147816],{},"（1）分类：无序列表、有序列表、自定义列表",[14,147818,147819],{},"①无序列表：",[23,147821],{"style":147708,"src":147822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,147824,147825],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,147827,147828,147831,147832,147835,147836,147838],{},[49,147829,147830],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[49,147833,147834],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[49,147837,147830],{},"中输入其他标签或文字是不对的",[14,147840,147841,147843],{},[49,147842,147834],{},"之间相当于一个容器，可以容纳所有元素",[14,147845,147846],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,147848,147849],{},"在css中去除前边的小圆点采用如下代码:",[151,147851,147855],{"className":147852,"code":147853,"language":147854,"meta":25,"style":25},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[49,147856,147857],{"__ignoreMap":25},[159,147858,147859,147862],{"class":161,"line":162},[159,147860,147861],{"class":169},"list-style",[159,147863,147864],{"class":165},": none;\n",[14,147866,147867],{},"②有序列表：",[23,147869],{"style":147708,"src":147870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,147872,147873],{},"③自定义列表：",[23,147875],{"style":147708,"src":147876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[23,147878],{"style":147708,"src":147879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[37,147881,147883],{"id":147882},"_54-表单标签","5.4 表单标签",[14,147885,147886],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,147888,147889,147890,147893],{},"（1）表单域：包含单元素的区域，",[49,147891,147892],{},"\u003Cform>","标签可以实现信息的收集和传递。",[23,147895],{"style":147708,"src":147896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,147898,147899],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,147901,147902],{},"表单元素提交必须有name属性",[14,147904,147905],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,147907,147908],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,147910,98526,147911,147914],{},[49,147912,147913],{},"\u003Cinput>","输入表单元素",[23,147916],{"style":147708,"src":147917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[23,147919],{"style":147708,"src":147920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,147922,147923,147924],{},"单选按钮：",[49,147925,147926],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[23,147928],{"style":147708,"src":147929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,147931,147932],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[23,147934],{"style":147708,"src":147935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,147937,147938,147941],{},[61,147939,147940],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,147943,147944],{},"②select下拉表单元素：可以节约页面控件",[23,147946],{"style":147708,"src":147947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,147949,147950,37361,147952,147955,147956,147958,147959,147961],{},[61,147951,23910],{},[49,147953,147954],{},"\u003Cselect>","中至少包含一对",[49,147957,124014],{},"；在",[49,147960,124014],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,147963,147964,147965,147968],{},"③",[49,147966,147967],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[23,147970],{"style":147708,"src":147971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,147973,147974],{},"3行20列",[37,147976,147978,147979,123993],{"id":147977},"_55-lable标签","5.5 ",[49,147980,147981],{},"\u003Clable>",[14,147983,147984,147985,147987,147988,147990],{},"它不是表单标签，但常常与表单标签搭配使用，",[49,147986,147981],{},"标签用于绑定一个表单标签，当点击",[49,147989,147981],{},"标签内的文本",[14,147992,147993],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[23,147995],{"style":147708,"src":147996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[23,147998],{"style":147708,"src":147999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[37,148001,148003],{"id":148002},"_56-实例","5.6 实例",[23,148005],{"style":147708,"src":148006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1468,148008,148009],{},"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":25,"searchDepth":176,"depth":176,"links":148011},[148012,148013,148014,148015,148016,148018],{"id":147733,"depth":176,"text":147734},{"id":147790,"depth":176,"text":147791},{"id":147812,"depth":176,"text":147813},{"id":147882,"depth":176,"text":147883},{"id":147977,"depth":176,"text":148017},"5.5 \u003Clable>标签",{"id":148002,"depth":176,"text":148003},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":147725,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":148025,"title":148026,"body":148027,"description":23809,"extension":23810,"meta":148576,"navigation":589,"path":148577,"seo":148578,"stem":148579,"__hash__":148580},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":148028,"toc":148551},[148029,148032,148036,148039,148042,148046,148049,148052,148055,148058,148061,148064,148067,148071,148074,148078,148081,148084,148087,148091,148094,148097,148100,148106,148109,148112,148115,148118,148121,148124,148127,148160,148164,148167,148170,148173,148177,148180,148183,148186,148189,148192,148196,148199,148202,148205,148209,148212,148216,148219,148223,148226,148231,148235,148238,148242,148245,148248,148251,148254,148281,148284,148288,148291,148294,148299,148302,148305,148309,148312,148317,148320,148323,148326,148330,148333,148336,148339,148343,148346,148349,148352,148356,148360,148363,148403,148406,148410,148417,148420,148424,148427,148473,148477,148480,148483,148486,148514,148518,148521,148548],[10,148030,148026],{"id":148031},"_6-css语法与文本样式",[37,148033,148035],{"id":148034},"_61-css语法规范","6.1 css语法规范",[14,148037,148038],{},"由两部分组成，选择器及一条或多条声明",[23,148040],{"style":147708,"src":148041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,148043,148044],{},[61,148045,23910],{},[14,148047,148048],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,148050,148051],{},"②属性与属性值以“键值对”的形式出现",[14,148053,148054],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,148056,148057],{},"④属性和属性值之间用英文“;”分开",[23,148059],{"style":147708,"src":148060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[23,148062],{"style":147708,"src":148063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[23,148065],{"style":147708,"src":148066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[37,148068,148070],{"id":148069},"_62-css选择器","6.2 css选择器",[14,148072,148073],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[42,148075,148077],{"id":148076},"_621-标签选择器","6.2.1 标签选择器",[14,148079,148080],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,148082,148083],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[23,148085],{"style":147708,"src":148086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[42,148088,148090],{"id":148089},"_622-类选择器","6.2.2 类选择器",[14,148092,148093],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,148095,148096],{},"②样例",[23,148098],{"style":147708,"src":148099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,148101,148102,148103,148105],{},"③ ",[61,148104,147940],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,148107,148108],{},"可以理解为给这个标签起了个名字，来表示；",[14,148110,148111],{},"长名称或词组可以使用横线来为选择器命名；",[14,148113,148114],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,148116,148117],{},"命名要有意义；",[23,148119],{"style":147708,"src":148120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,148122,148123],{},"类选择器也可以指定特殊的元素p.center{}",[14,148125,148126],{},"p.center和.center都对",[151,148128,148130],{"className":147852,"code":148129,"language":147854,"meta":25,"style":25},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[49,148131,148132,148137,148146,148156],{"__ignoreMap":25},[159,148133,148134],{"class":161,"line":162},[159,148135,148136],{"class":1135},"\u002F* 类选择器指定特殊元素 *\u002F\n",[159,148138,148139,148141,148144],{"class":161,"line":176},[159,148140,14],{"class":169},[159,148142,148143],{"class":185},".center",[159,148145,1478],{"class":165},[159,148147,148148,148150,148152,148154],{"class":161,"line":203},[159,148149,17612],{"class":1146},[159,148151,1486],{"class":165},[159,148153,4193],{"class":1146},[159,148155,1492],{"class":165},[159,148157,148158],{"class":161,"line":223},[159,148159,15685],{"class":165},[42,148161,148163],{"id":148162},"_623-多类名使用","6.2.3 多类名使用",[14,148165,148166],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[23,148168],{"style":147708,"src":148169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,148171,148172],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[42,148174,148176],{"id":148175},"_624-id选择器","6.2.4 id选择器",[14,148178,148179],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,148181,148182],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[23,148184],{"style":147708,"src":148185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,148187,148188],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,148190,148191],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[42,148193,148195],{"id":148194},"_625-通配符选择器","6.2.5 通配符选择器",[14,148197,148198],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,148200,148201],{},"* {",[14,148203,148204],{},"color=\"red\"}",[42,148206,148208],{"id":148207},"_626-总结","6.2.6 总结",[23,148210],{"style":147708,"src":148211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[37,148213,148215],{"id":148214},"_63-css字体属性","6.3 css字体属性",[14,148217,148218],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[42,148220,148222],{"id":148221},"_631-字体系列","6.3.1 字体系列",[14,148224,148225],{},"font-family: '宋体';",[14,148227,148228,148230],{},[61,148229,23910],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[42,148232,148234],{"id":148233},"_632-字体大小","6.3.2 字体大小",[14,148236,148237],{},"font-size: 20px",[14,148239,148240,49996],{},[61,148241,147940],{},[14,148243,148244],{},"①px（像素）大小是网页的最常用单位",[14,148246,148247],{},"②谷歌浏览器默认为16px",[14,148249,148250],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,148252,148253],{},"④可以给body指定整个页面的大小：会自动引用",[151,148255,148257],{"className":147852,"code":148256,"language":147854,"meta":25,"style":25},"body {\n  font-size: 16px;\n}\n",[49,148258,148259,148265,148277],{"__ignoreMap":25},[159,148260,148261,148263],{"class":161,"line":162},[159,148262,170],{"class":169},[159,148264,1478],{"class":165},[159,148266,148267,148269,148271,148273,148275],{"class":161,"line":176},[159,148268,17713],{"class":1146},[159,148270,1486],{"class":165},[159,148272,24439],{"class":1146},[159,148274,1571],{"class":1142},[159,148276,1492],{"class":165},[159,148278,148279],{"class":161,"line":203},[159,148280,15685],{"class":165},[14,148282,148283],{},"⑤标题标签比较特殊，需要单独指定大小",[42,148285,148287],{"id":148286},"_633-字体粗细","6.3.3 字体粗细",[14,148289,148290],{},"font-weight: bold;",[14,148292,148293],{},"font-weight: 100；",[14,148295,148296,148298],{},[61,148297,23910],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,148300,148301],{},"font-weight= 400;",[14,148303,148304],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[42,148306,148308],{"id":148307},"_634-文字样式","6.3.4 文字样式",[14,148310,148311],{},"font-style: normal；",[14,148313,148314,49996],{},[61,148315,148316],{},"属性值",[14,148318,148319],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,148321,148322],{},"②italic：浏览器会显示斜体的字体样式",[23,148324],{"style":147708,"src":148325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[42,148327,148329],{"id":148328},"_635-字体符合属性","6.3.5 字体符合属性",[23,148331],{"style":147708,"src":148332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[23,148334],{"style":147708,"src":148335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,148337,148338],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,148340,148341,49996],{},[61,148342,147940],{},[14,148344,148345],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,148347,148348],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,148350,148351],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[37,148353,148355],{"id":148354},"_64-css-test文本属性","6.4 css test文本属性",[42,148357,148359],{"id":148358},"_641-文本颜色","6.4.1 文本颜色",[14,148361,148362],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[151,148364,148366],{"className":147852,"code":148365,"language":147854,"meta":25,"style":25},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[49,148367,148368,148373,148379,148389,148394,148399],{"__ignoreMap":25},[159,148369,148370],{"class":161,"line":162},[159,148371,148372],{"class":1135},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[159,148374,148375,148377],{"class":161,"line":176},[159,148376,14],{"class":169},[159,148378,1478],{"class":165},[159,148380,148381,148383,148385,148387],{"class":161,"line":203},[159,148382,17992],{"class":1146},[159,148384,1486],{"class":165},[159,148386,4327],{"class":1146},[159,148388,1492],{"class":165},[159,148390,148391],{"class":161,"line":223},[159,148392,148393],{"class":1135},"  \u002F* color: #ff0000; *\u002F\n",[159,148395,148396],{"class":161,"line":233},[159,148397,148398],{"class":1135},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[159,148400,148401],{"class":161,"line":239},[159,148402,15685],{"class":165},[23,148404],{"style":147708,"src":148405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[42,148407,148409],{"id":148408},"_642-对齐文本","6.4.2 对齐文本",[14,148411,148412,148413,148416],{},"text-align属于用于设置元素内文本内容的 ",[61,148414,148415],{},"水平对齐"," 方式",[14,148418,148419],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[42,148421,148423],{"id":148422},"_643-装饰文本","6.4.3 装饰文本",[14,148425,148426],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[151,148428,148430],{"className":147852,"code":148429,"language":147854,"meta":25,"style":25},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[49,148431,148432,148438,148448,148452,148458,148469],{"__ignoreMap":25},[159,148433,148434,148436],{"class":161,"line":162},[159,148435,8085],{"class":169},[159,148437,1478],{"class":165},[159,148439,148440,148442,148444,148446],{"class":161,"line":176},[159,148441,17588],{"class":1146},[159,148443,1486],{"class":165},[159,148445,1529],{"class":1146},[159,148447,1492],{"class":165},[159,148449,148450],{"class":161,"line":203},[159,148451,15685],{"class":165},[159,148453,148454,148456],{"class":161,"line":223},[159,148455,14],{"class":169},[159,148457,1478],{"class":165},[159,148459,148460,148462,148464,148467],{"class":161,"line":233},[159,148461,17588],{"class":1146},[159,148463,1486],{"class":165},[159,148465,148466],{"class":1146},"underline",[159,148468,1492],{"class":165},[159,148470,148471],{"class":161,"line":239},[159,148472,15685],{"class":165},[42,148474,148476],{"id":148475},"_644-文本缩进","6.4.4 文本缩进",[14,148478,148479],{},"实现文本的第一行首行缩进自己指定的距离",[14,148481,148482],{},"20px往右边走；-20px往左边走",[14,148484,148485],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[151,148487,148489],{"className":147852,"code":148488,"language":147854,"meta":25,"style":25},"p {\n  text-indent: 2em;\n}\n",[49,148490,148491,148497,148510],{"__ignoreMap":25},[159,148492,148493,148495],{"class":161,"line":162},[159,148494,14],{"class":169},[159,148496,1478],{"class":165},[159,148498,148499,148502,148504,148506,148508],{"class":161,"line":176},[159,148500,148501],{"class":1146},"  text-indent",[159,148503,1486],{"class":165},[159,148505,11034],{"class":1146},[159,148507,47079],{"class":1142},[159,148509,1492],{"class":165},[159,148511,148512],{"class":161,"line":203},[159,148513,15685],{"class":165},[42,148515,148517],{"id":148516},"_645-行间距","6.4.5 行间距",[14,148519,148520],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[151,148522,148524],{"className":147852,"code":148523,"language":147854,"meta":25,"style":25},"p {\n  line-height: 1.6;\n}\n",[49,148525,148526,148532,148544],{"__ignoreMap":25},[159,148527,148528,148530],{"class":161,"line":162},[159,148529,14],{"class":169},[159,148531,1478],{"class":165},[159,148533,148534,148537,148539,148542],{"class":161,"line":176},[159,148535,148536],{"class":1146},"  line-height",[159,148538,1486],{"class":165},[159,148540,148541],{"class":1146},"1.6",[159,148543,1492],{"class":165},[159,148545,148546],{"class":161,"line":203},[159,148547,15685],{"class":165},[1468,148549,148550],{},"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":25,"searchDepth":176,"depth":176,"links":148552},[148553,148554,148562,148569],{"id":148034,"depth":176,"text":148035},{"id":148069,"depth":176,"text":148070,"children":148555},[148556,148557,148558,148559,148560,148561],{"id":148076,"depth":203,"text":148077},{"id":148089,"depth":203,"text":148090},{"id":148162,"depth":203,"text":148163},{"id":148175,"depth":203,"text":148176},{"id":148194,"depth":203,"text":148195},{"id":148207,"depth":203,"text":148208},{"id":148214,"depth":176,"text":148215,"children":148563},[148564,148565,148566,148567,148568],{"id":148221,"depth":203,"text":148222},{"id":148233,"depth":203,"text":148234},{"id":148286,"depth":203,"text":148287},{"id":148307,"depth":203,"text":148308},{"id":148328,"depth":203,"text":148329},{"id":148354,"depth":176,"text":148355,"children":148570},[148571,148572,148573,148574,148575],{"id":148358,"depth":203,"text":148359},{"id":148408,"depth":203,"text":148409},{"id":148422,"depth":203,"text":148423},{"id":148475,"depth":203,"text":148476},{"id":148516,"depth":203,"text":148517},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":148026,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":148582,"title":148583,"body":148584,"description":23809,"extension":23810,"meta":149233,"navigation":589,"path":149234,"seo":149235,"stem":149236,"__hash__":149237},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":148585,"toc":149214},[148586,148589,148593,148597,148657,148661,148671,148674,148677,148681,148706,148710,148713,148716,148719,148722,148725,148729,148732,148735,148777,148780,148806,148812,148815,148819,148823,148829,148832,148835,148838,148841,148844,148847,148892,148896,148899,148902,148906,148910,148939,148942,148947,148950,148953,148956,148959,148963,148967,148970,148972,148975,148979,148982,148986,148989,148992,148995,148999,149003,149009,149019,149022,149025,149028,149031,149034,149157,149165,149173,149211],[10,148587,148583],{"id":148588},"_7-css引入方式与选择器进阶",[37,148590,148592],{"id":148591},"_71-css引入方式","7.1 css引入方式",[42,148594,148596],{"id":148595},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[151,148598,148602],{"className":148599,"code":148600,"language":148601,"meta":25,"style":25},"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",[49,148603,148604,148612,148619,148631,148644,148649],{"__ignoreMap":25},[159,148605,148606,148608,148610],{"class":161,"line":162},[159,148607,166],{"class":165},[159,148609,1468],{"class":169},[159,148611,173],{"class":165},[159,148613,148614,148617],{"class":161,"line":176},[159,148615,148616],{"class":169},"  h1",[159,148618,1478],{"class":165},[159,148620,148621,148624,148626,148629],{"class":161,"line":203},[159,148622,148623],{"class":1146},"    color",[159,148625,1486],{"class":165},[159,148627,148628],{"class":1146},"blue",[159,148630,1492],{"class":165},[159,148632,148633,148636,148638,148640,148642],{"class":161,"line":223},[159,148634,148635],{"class":1146},"    font-size",[159,148637,1486],{"class":165},[159,148639,10876],{"class":1146},[159,148641,1571],{"class":1142},[159,148643,1492],{"class":165},[159,148645,148646],{"class":161,"line":233},[159,148647,148648],{"class":165},"  }\n",[159,148650,148651,148653,148655],{"class":161,"line":239},[159,148652,264],{"class":165},[159,148654,1468],{"class":169},[159,148656,173],{"class":165},[14,148658,148659,49996],{},[61,148660,147940],{},[14,148662,98526,148663,148666,148667,148670],{},[49,148664,148665],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[49,148668,148669],{},"\u003Chead>","标签中",[14,148672,148673],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,148675,148676],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[42,148678,148680],{"id":148679},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[151,148682,148684],{"className":148599,"code":148683,"language":148601,"meta":25,"style":25},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[49,148685,148686],{"__ignoreMap":25},[159,148687,148688,148690,148692,148694,148696,148699,148702,148704],{"class":161,"line":162},[159,148689,166],{"class":165},[159,148691,14],{"class":169},[159,148693,9669],{"class":185},[159,148695,189],{"class":165},[159,148697,148698],{"class":192},"\"color: red; font-size: 16px;\"",[159,148700,148701],{"class":165},">这是一个段落\u003C\u002F",[159,148703,14],{"class":169},[159,148705,173],{"class":165},[14,148707,148708,49996],{},[61,148709,147940],{},[14,148711,148712],{},"①style其实就是标签的属性",[14,148714,148715],{},"②在双引号中间，写法要符合css规范",[14,148717,148718],{},"③可以控制当前的标签设置样式",[14,148720,148721],{},"④书写繁琐，简单时才用",[14,148723,148724],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[42,148726,148728],{"id":148727},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,148730,148731],{},"使用最多，单独建一个css文件，然后html引用",[14,148733,148734],{},"①css文件部分： style.css",[151,148736,148738],{"className":147852,"code":148737,"language":147854,"meta":25,"style":25},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[49,148739,148740,148745,148751,148761,148773],{"__ignoreMap":25},[159,148741,148742],{"class":161,"line":162},[159,148743,148744],{"class":1135},"\u002F* style.css *\u002F\n",[159,148746,148747,148749],{"class":161,"line":176},[159,148748,10],{"class":169},[159,148750,1478],{"class":165},[159,148752,148753,148755,148757,148759],{"class":161,"line":203},[159,148754,17992],{"class":1146},[159,148756,1486],{"class":165},[159,148758,148628],{"class":1146},[159,148760,1492],{"class":165},[159,148762,148763,148765,148767,148769,148771],{"class":161,"line":223},[159,148764,17713],{"class":1146},[159,148766,1486],{"class":165},[159,148768,10876],{"class":1146},[159,148770,1571],{"class":1142},[159,148772,1492],{"class":165},[159,148774,148775],{"class":161,"line":233},[159,148776,15685],{"class":165},[14,148778,148779],{},"②html部分",[151,148781,148783],{"className":148599,"code":148782,"language":148601,"meta":25,"style":25},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[49,148784,148785],{"__ignoreMap":25},[159,148786,148787,148789,148791,148793,148795,148797,148799,148801,148804],{"class":161,"line":162},[159,148788,166],{"class":165},[159,148790,16078],{"class":169},[159,148792,16081],{"class":185},[159,148794,189],{"class":165},[159,148796,16086],{"class":192},[159,148798,8088],{"class":185},[159,148800,189],{"class":165},[159,148802,148803],{"class":192},"\"style.css\"",[159,148805,173],{"class":165},[14,148807,148808,148811],{},[49,148809,148810],{},"\u003Chr>","水平线标签（但是不常用！）",[14,148813,148814],{},"ctrl+0回到页面原来大小",[37,148816,148818],{"id":148817},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[42,148820,148822],{"id":148821},"_721-快速生成html","7.2.1 快速生成html",[14,148824,148825,148826],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[49,148827,148828],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,148830,148831],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,148833,148834],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,148836,148837],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,148839,148840],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,148842,148843],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,148845,148846],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[151,148848,148850],{"className":148599,"code":148849,"language":148601,"meta":25,"style":25},"\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",[49,148851,148852,148857,148862,148867,148872,148877,148882,148887],{"__ignoreMap":25},[159,148853,148854],{"class":161,"line":162},[159,148855,148856],{"class":1135},"\u003C!-- Emmet 语法示例 -->\n",[159,148858,148859],{"class":161,"line":176},[159,148860,148861],{"class":1135},"\u003C!-- div*3        → 生成3个div -->\n",[159,148863,148864],{"class":161,"line":203},[159,148865,148866],{"class":1135},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[159,148868,148869],{"class":161,"line":223},[159,148870,148871],{"class":1135},"\u003C!-- div+p        → 兄弟div和p -->\n",[159,148873,148874],{"class":161,"line":233},[159,148875,148876],{"class":1135},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[159,148878,148879],{"class":161,"line":239},[159,148880,148881],{"class":1135},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[159,148883,148884],{"class":161,"line":245},[159,148885,148886],{"class":1135},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[159,148888,148889],{"class":161,"line":251},[159,148890,148891],{"class":1135},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[42,148893,148895],{"id":148894},"_722-快速生成css","7.2.2 快速生成css",[14,148897,148898],{},"简写开头",[14,148900,148901],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[37,148903,148905],{"id":148904},"_73-css复合选择器","7.3 css复合选择器",[42,148907,148909],{"id":148908},"_731-后代选择器","7.3.1 后代选择器",[151,148911,148913],{"className":147852,"code":148912,"language":147854,"meta":25,"style":25},".parent .child {\n  color: blue;\n}\n",[49,148914,148915,148925,148935],{"__ignoreMap":25},[159,148916,148917,148920,148923],{"class":161,"line":162},[159,148918,148919],{"class":185},".parent",[159,148921,148922],{"class":185}," .child",[159,148924,1478],{"class":165},[159,148926,148927,148929,148931,148933],{"class":161,"line":176},[159,148928,17992],{"class":1146},[159,148930,1486],{"class":165},[159,148932,148628],{"class":1146},[159,148934,1492],{"class":165},[159,148936,148937],{"class":161,"line":203},[159,148938,15685],{"class":165},[14,148940,148941],{},"元素1 元素2 {样式声明}",[14,148943,148944],{},[61,148945,148946],{},"注意点:",[14,148948,148949],{},"①元素1和元素2中间用空格隔开",[14,148951,148952],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,148954,148955],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,148957,148958],{},"④元素1和元素2可以是任意基础选择器",[42,148960,148962],{"id":148961},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,148964,148965],{},[61,148966,148946],{},[14,148968,148969],{},"①元素1和元素2中间用大于号隔开",[14,148971,148952],{},[14,148973,148974],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[42,148976,148978],{"id":148977},"_733-并集选择器","7.3.3 并集选择器",[14,148980,148981],{},"元素1，元素2 {样式声明}",[14,148983,148984],{},[61,148985,148946],{},[14,148987,148988],{},"①元素1和元素2中间用逗号隔开",[14,148990,148991],{},"②逗号可以理解为和的意思",[14,148993,148994],{},"③并集选择器通常用于集体声明",[42,148996,148998],{"id":148997},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,149000,149001],{},[61,149002,148946],{},[14,149004,149005,149006,149008],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[16078,149007],{},"－:visited－:hover－:active。",[14,149010,149011,149012,149015,149016,49263],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[149013,149014],"hover",{}," 、 ",[149017,149018],"first-child",{},[14,149020,149021],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,149023,149024],{},"link对没访问的进行设置",[14,149026,149027],{},"vistied对已访问的进行改变",[14,149029,149030],{},"hover鼠标经过就会变",[14,149032,149033],{},"active常按(点)就会变",[151,149035,149037],{"className":147852,"code":149036,"language":147854,"meta":25,"style":25},"\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",[49,149038,149039,149044,149053,149063,149073,149077,149086,149097,149101,149109,149119,149129,149133,149142,149153],{"__ignoreMap":25},[159,149040,149041],{"class":161,"line":162},[159,149042,149043],{"class":1135},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[159,149045,149046,149048,149051],{"class":161,"line":176},[159,149047,8085],{"class":169},[159,149049,149050],{"class":185},":link",[159,149052,1478],{"class":165},[159,149054,149055,149057,149059,149061],{"class":161,"line":203},[159,149056,17992],{"class":1146},[159,149058,1486],{"class":165},[159,149060,9412],{"class":1146},[159,149062,1492],{"class":165},[159,149064,149065,149067,149069,149071],{"class":161,"line":223},[159,149066,17588],{"class":1146},[159,149068,1486],{"class":165},[159,149070,1529],{"class":1146},[159,149072,1492],{"class":165},[159,149074,149075],{"class":161,"line":233},[159,149076,15685],{"class":165},[159,149078,149079,149081,149084],{"class":161,"line":239},[159,149080,8085],{"class":169},[159,149082,149083],{"class":185},":visited",[159,149085,1478],{"class":165},[159,149087,149088,149090,149092,149095],{"class":161,"line":245},[159,149089,17992],{"class":1146},[159,149091,1486],{"class":165},[159,149093,149094],{"class":1146},"purple",[159,149096,1492],{"class":165},[159,149098,149099],{"class":161,"line":251},[159,149100,15685],{"class":165},[159,149102,149103,149105,149107],{"class":161,"line":261},[159,149104,8085],{"class":169},[159,149106,7969],{"class":185},[159,149108,1478],{"class":165},[159,149110,149111,149113,149115,149117],{"class":161,"line":603},[159,149112,17992],{"class":1146},[159,149114,1486],{"class":165},[159,149116,1687],{"class":1146},[159,149118,1492],{"class":165},[159,149120,149121,149123,149125,149127],{"class":161,"line":621},[159,149122,17588],{"class":1146},[159,149124,1486],{"class":165},[159,149126,148466],{"class":1146},[159,149128,1492],{"class":165},[159,149130,149131],{"class":161,"line":634},[159,149132,15685],{"class":165},[159,149134,149135,149137,149140],{"class":161,"line":640},[159,149136,8085],{"class":169},[159,149138,149139],{"class":185},":active",[159,149141,1478],{"class":165},[159,149143,149144,149146,149148,149151],{"class":161,"line":1075},[159,149145,17992],{"class":1146},[159,149147,1486],{"class":165},[159,149149,149150],{"class":1146},"green",[159,149152,1492],{"class":165},[159,149154,149155],{"class":161,"line":1081},[159,149156,15685],{"class":165},[42,149158,149160,149161,149164],{"id":149159},"_735-伪类选择器","7.3.5 ",[149162,149163],"focus",{},"伪类选择器",[14,149166,149167,149169,149170,149172],{},[149162,149168],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[49,149171,147913],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[151,149174,149176],{"className":147852,"code":149175,"language":147854,"meta":25,"style":25},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[49,149177,149178,149186,149197,149207],{"__ignoreMap":25},[159,149179,149180,149182,149184],{"class":161,"line":162},[159,149181,536],{"class":169},[159,149183,8941],{"class":185},[159,149185,1478],{"class":165},[159,149187,149188,149191,149193,149195],{"class":161,"line":176},[159,149189,149190],{"class":1146},"  border-color",[159,149192,1486],{"class":165},[159,149194,1687],{"class":1146},[159,149196,1492],{"class":165},[159,149198,149199,149201,149203,149205],{"class":161,"line":203},[159,149200,17885],{"class":1146},[159,149202,1486],{"class":165},[159,149204,1529],{"class":1146},[159,149206,1492],{"class":165},[159,149208,149209],{"class":161,"line":223},[159,149210,15685],{"class":165},[1468,149212,149213],{},"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":25,"searchDepth":176,"depth":176,"links":149215},[149216,149221,149225],{"id":148591,"depth":176,"text":148592,"children":149217},[149218,149219,149220],{"id":148595,"depth":203,"text":148596},{"id":148679,"depth":203,"text":148680},{"id":148727,"depth":203,"text":148728},{"id":148817,"depth":176,"text":148818,"children":149222},[149223,149224],{"id":148821,"depth":203,"text":148822},{"id":148894,"depth":203,"text":148895},{"id":148904,"depth":176,"text":148905,"children":149226},[149227,149228,149229,149230,149231],{"id":148908,"depth":203,"text":148909},{"id":148961,"depth":203,"text":148962},{"id":148977,"depth":203,"text":148978},{"id":148997,"depth":203,"text":148998},{"id":149159,"depth":203,"text":149232},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":148583,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":149239,"title":149240,"body":149241,"description":23809,"extension":23810,"meta":151164,"navigation":589,"path":151165,"seo":151166,"stem":151167,"__hash__":151168},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":149242,"toc":151138},[149243,149246,149250,149259,149263,149289,149294,149297,149300,149303,149306,149310,149313,149323,149331,149335,149370,149375,149378,149381,149384,149387,149391,149394,149403,149407,149420,149425,149428,149431,149434,149438,149441,149445,149448,149503,149506,149537,149540,149594,149598,149601,149767,149890,149893,149896,149899,149902,149906,149909,149913,149916,149919,149923,149926,149957,149984,150012,150015,150019,150045,150088,150092,150186,150189,150216,150219,150222,150225,150228,150231,150234,150237,150240,150243,150247,150304,150331,150335,150383,150387,150428,150430,150433,150436,150439,150442,150446,150538,150541,150544,150547,150551,150674,150875,150879,150883,150886,150889,150892,150896,150899,150902,150927,150930,150933,150936,150939,150942,150946,150954,151016,151019,151077,151080,151083,151086,151089,151092,151095,151098,151135],[10,149244,149240],{"id":149245},"_8-css显示模式与背景特性",[37,149247,149249],{"id":149248},"_81-css元素显示模式","8.1 css元素显示模式",[14,149251,149252,149253,149255,149256,149258],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[49,149254,147463],{},"自己占一行，比如一行可以放多个",[49,149257,147466],{},"，HTML 元素一般分为块元素和行内元素两种类型",[42,149260,149262],{"id":149261},"_811-块元素","8.1.1 块元素",[14,149264,149265,149266,149268,149269,24079,149272,24079,149274,24079,149276,24079,149279,24079,149282,149285,149286,149288],{},"常见的块元素有",[49,149267,147367],{},"~",[49,149270,149271],{},"\u003Ch6>",[49,149273,147393],{},[49,149275,147463],{},[49,149277,149278],{},"\u003Cul>",[49,149280,149281],{},"\u003Col>",[49,149283,149284],{},"\u003Cli>","等，其中 ",[49,149287,147463],{}," 标签是最典型的块元素",[14,149290,149291],{},[61,149292,149293],{},"块级元素的特点：",[14,149295,149296],{},"① 比较霸道，自己独占一行。",[14,149298,149299],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,149301,149302],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,149304,149305],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,149307,149308],{},[61,149309,23910],{},[14,149311,149312],{},"①文字类的元素内不能使用块级元素",[14,149314,98549,149315,149317,149318,149320,149321],{},[49,149316,147393],{}," 标签主要用于存放文字，因此 ",[49,149319,147393],{}," 里面不能放块级元素，特别是不能放",[49,149322,147463],{},[14,149324,149325,149326,149268,149328,149330],{},"⑥同理， ",[49,149327,147367],{},[49,149329,149271],{},"等都是文字类块级标签，里面也不能放其他块级元素",[42,149332,149334],{"id":149333},"_812-行内元素","8.1.2 行内元素",[14,149336,149337,149338,24079,149340,24079,149343,24079,149346,24079,149349,24079,149352,24079,149355,24079,149358,24079,149361,24079,149364,149366,149367,149369],{},"常见的行内元素有 ",[49,149339,147625],{},[49,149341,149342],{},"\u003Cstrong>",[49,149344,149345],{},"\u003Cb>",[49,149347,149348],{},"\u003Cem>",[49,149350,149351],{},"\u003Ci>",[49,149353,149354],{},"\u003Cdel>",[49,149356,149357],{},"\u003Cs>",[49,149359,149360],{},"\u003Cins>",[49,149362,149363],{},"\u003Cu>",[49,149365,147466],{}," 等，其中 ",[49,149368,147466],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,149371,149372],{},[61,149373,149374],{},"特点：",[14,149376,149377],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,149379,149380],{},"② 高、宽直接设置是无效的。",[14,149382,149383],{},"③ 默认宽度就是它本身内容的宽度。",[14,149385,149386],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,149388,149389],{},[61,149390,23910],{},[14,149392,149393],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,149395,149396,149397,149399,149400,149402],{},"②特殊情况链接 ",[49,149398,147625],{}," 里面可以放块级元素，但是给 ",[49,149401,147625],{}," 转换一下块级模式最安全",[42,149404,149406],{"id":149405},"_813-行内块元素","8.1.3 行内块元素",[14,149408,149409,149410,24079,149413,24079,149416,149419],{},"在行内元素中有几个特殊的标签 —— ",[49,149411,149412],{},"\u003Cimg \u002F>",[49,149414,149415],{},"\u003Cinput \u002F>",[49,149417,149418],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,149421,149422],{},[61,149423,149424],{},"行内块元素的特点：",[14,149426,149427],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,149429,149430],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,149432,149433],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[42,149435,149437],{"id":149436},"_814-总结","8.1.4 总结",[23,149439],{"style":147708,"src":149440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[42,149442,149444],{"id":149443},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,149446,149447],{},"①转换为块元素：display:block;",[151,149449,149451],{"className":147852,"code":149450,"language":147854,"meta":25,"style":25},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[49,149452,149453,149458,149464,149475,149487,149499],{"__ignoreMap":25},[159,149454,149455],{"class":161,"line":162},[159,149456,149457],{"class":1135},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[159,149459,149460,149462],{"class":161,"line":176},[159,149461,8085],{"class":169},[159,149463,1478],{"class":165},[159,149465,149466,149469,149471,149473],{"class":161,"line":203},[159,149467,149468],{"class":1146},"  display",[159,149470,1486],{"class":165},[159,149472,7896],{"class":1146},[159,149474,1492],{"class":165},[159,149476,149477,149479,149481,149483,149485],{"class":161,"line":223},[159,149478,17655],{"class":1146},[159,149480,1486],{"class":165},[159,149482,1596],{"class":1146},[159,149484,1571],{"class":1142},[159,149486,1492],{"class":165},[159,149488,149489,149491,149493,149495,149497],{"class":161,"line":233},[159,149490,17875],{"class":1146},[159,149492,1486],{"class":165},[159,149494,4269],{"class":1146},[159,149496,1571],{"class":1142},[159,149498,1492],{"class":165},[159,149500,149501],{"class":161,"line":239},[159,149502,15685],{"class":165},[14,149504,149505],{},"②转换为行内元素：display:inline;",[151,149507,149509],{"className":147852,"code":149508,"language":147854,"meta":25,"style":25},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[49,149510,149511,149516,149522,149533],{"__ignoreMap":25},[159,149512,149513],{"class":161,"line":162},[159,149514,149515],{"class":1135},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[159,149517,149518,149520],{"class":161,"line":176},[159,149519,182],{"class":169},[159,149521,1478],{"class":165},[159,149523,149524,149526,149528,149531],{"class":161,"line":203},[159,149525,149468],{"class":1146},[159,149527,1486],{"class":165},[159,149529,149530],{"class":1146},"inline",[159,149532,1492],{"class":165},[159,149534,149535],{"class":161,"line":223},[159,149536,15685],{"class":165},[14,149538,149539],{},"③转换为行内块：display:inline-block;",[151,149541,149543],{"className":147852,"code":149542,"language":147854,"meta":25,"style":25},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[49,149544,149545,149550,149556,149566,149578,149590],{"__ignoreMap":25},[159,149546,149547],{"class":161,"line":162},[159,149548,149549],{"class":1135},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[159,149551,149552,149554],{"class":161,"line":176},[159,149553,159],{"class":169},[159,149555,1478],{"class":165},[159,149557,149558,149560,149562,149564],{"class":161,"line":203},[159,149559,149468],{"class":1146},[159,149561,1486],{"class":165},[159,149563,19484],{"class":1146},[159,149565,1492],{"class":165},[159,149567,149568,149570,149572,149574,149576],{"class":161,"line":223},[159,149569,17655],{"class":1146},[159,149571,1486],{"class":165},[159,149573,9100],{"class":1146},[159,149575,1571],{"class":1142},[159,149577,1492],{"class":165},[159,149579,149580,149582,149584,149586,149588],{"class":161,"line":233},[159,149581,17875],{"class":1146},[159,149583,1486],{"class":165},[159,149585,8920],{"class":1146},[159,149587,1571],{"class":1142},[159,149589,1492],{"class":165},[159,149591,149592],{"class":161,"line":239},[159,149593,15685],{"class":165},[42,149595,149597],{"id":149596},"_816-小米侧边栏","8.1.6 小米侧边栏",[23,149599],{"style":147708,"src":149600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[151,149602,149604],{"className":148599,"code":149603,"language":148601,"meta":25,"style":25},"\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",[49,149605,149606,149611,149626,149645,149664,149683,149702,149721,149740,149759],{"__ignoreMap":25},[159,149607,149608],{"class":161,"line":162},[159,149609,149610],{"class":1135},"\u003C!-- 小米侧边栏案例 -->\n",[159,149612,149613,149615,149617,149619,149621,149624],{"class":161,"line":176},[159,149614,166],{"class":165},[159,149616,182],{"class":169},[159,149618,186],{"class":185},[159,149620,189],{"class":165},[159,149622,149623],{"class":192},"\"sidebar\"",[159,149625,173],{"class":165},[159,149627,149628,149630,149632,149634,149636,149638,149641,149643],{"class":161,"line":203},[159,149629,179],{"class":165},[159,149631,8085],{"class":169},[159,149633,8088],{"class":185},[159,149635,189],{"class":165},[159,149637,8093],{"class":192},[159,149639,149640],{"class":165},">手机 电话卡\u003C\u002F",[159,149642,8085],{"class":169},[159,149644,173],{"class":165},[159,149646,149647,149649,149651,149653,149655,149657,149660,149662],{"class":161,"line":223},[159,149648,179],{"class":165},[159,149650,8085],{"class":169},[159,149652,8088],{"class":185},[159,149654,189],{"class":165},[159,149656,8093],{"class":192},[159,149658,149659],{"class":165},">电视 盒子\u003C\u002F",[159,149661,8085],{"class":169},[159,149663,173],{"class":165},[159,149665,149666,149668,149670,149672,149674,149676,149679,149681],{"class":161,"line":233},[159,149667,179],{"class":165},[159,149669,8085],{"class":169},[159,149671,8088],{"class":185},[159,149673,189],{"class":165},[159,149675,8093],{"class":192},[159,149677,149678],{"class":165},">笔记本 平板\u003C\u002F",[159,149680,8085],{"class":169},[159,149682,173],{"class":165},[159,149684,149685,149687,149689,149691,149693,149695,149698,149700],{"class":161,"line":239},[159,149686,179],{"class":165},[159,149688,8085],{"class":169},[159,149690,8088],{"class":185},[159,149692,189],{"class":165},[159,149694,8093],{"class":192},[159,149696,149697],{"class":165},">出行 穿戴\u003C\u002F",[159,149699,8085],{"class":169},[159,149701,173],{"class":165},[159,149703,149704,149706,149708,149710,149712,149714,149717,149719],{"class":161,"line":245},[159,149705,179],{"class":165},[159,149707,8085],{"class":169},[159,149709,8088],{"class":185},[159,149711,189],{"class":165},[159,149713,8093],{"class":192},[159,149715,149716],{"class":165},">智能 路由器\u003C\u002F",[159,149718,8085],{"class":169},[159,149720,173],{"class":165},[159,149722,149723,149725,149727,149729,149731,149733,149736,149738],{"class":161,"line":251},[159,149724,179],{"class":165},[159,149726,8085],{"class":169},[159,149728,8088],{"class":185},[159,149730,189],{"class":165},[159,149732,8093],{"class":192},[159,149734,149735],{"class":165},">健康 儿童\u003C\u002F",[159,149737,8085],{"class":169},[159,149739,173],{"class":165},[159,149741,149742,149744,149746,149748,149750,149752,149755,149757],{"class":161,"line":261},[159,149743,179],{"class":165},[159,149745,8085],{"class":169},[159,149747,8088],{"class":185},[159,149749,189],{"class":165},[159,149751,8093],{"class":192},[159,149753,149754],{"class":165},">耳机 音响\u003C\u002F",[159,149756,8085],{"class":169},[159,149758,173],{"class":165},[159,149760,149761,149763,149765],{"class":161,"line":603},[159,149762,264],{"class":165},[159,149764,182],{"class":169},[159,149766,173],{"class":165},[151,149768,149770],{"className":147852,"code":149769,"language":147854,"meta":25,"style":25},".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",[49,149771,149772,149781,149791,149804,149816,149828,149840,149850,149861,149865,149875,149886],{"__ignoreMap":25},[159,149773,149774,149777,149779],{"class":161,"line":162},[159,149775,149776],{"class":185},".sidebar",[159,149778,7885],{"class":169},[159,149780,1478],{"class":165},[159,149782,149783,149785,149787,149789],{"class":161,"line":176},[159,149784,149468],{"class":1146},[159,149786,1486],{"class":165},[159,149788,7896],{"class":1146},[159,149790,1492],{"class":165},[159,149792,149793,149795,149797,149800,149802],{"class":161,"line":203},[159,149794,17655],{"class":1146},[159,149796,1486],{"class":165},[159,149798,149799],{"class":1146},"234",[159,149801,1571],{"class":1142},[159,149803,1492],{"class":165},[159,149805,149806,149808,149810,149812,149814],{"class":161,"line":223},[159,149807,17875],{"class":1146},[159,149809,1486],{"class":165},[159,149811,24302],{"class":1146},[159,149813,1571],{"class":1142},[159,149815,1492],{"class":165},[159,149817,149818,149820,149822,149824,149826],{"class":161,"line":233},[159,149819,148536],{"class":1146},[159,149821,1486],{"class":165},[159,149823,24302],{"class":1146},[159,149825,1571],{"class":1142},[159,149827,1492],{"class":165},[159,149829,149830,149832,149834,149836,149838],{"class":161,"line":239},[159,149831,17910],{"class":1146},[159,149833,1486],{"class":165},[159,149835,8920],{"class":1146},[159,149837,1571],{"class":1142},[159,149839,1492],{"class":165},[159,149841,149842,149844,149846,149848],{"class":161,"line":245},[159,149843,17992],{"class":1146},[159,149845,1486],{"class":165},[159,149847,7868],{"class":1146},[159,149849,1492],{"class":165},[159,149851,149852,149854,149856,149859],{"class":161,"line":251},[159,149853,17965],{"class":1146},[159,149855,1486],{"class":165},[159,149857,149858],{"class":1146},"#55585a",[159,149860,1492],{"class":165},[159,149862,149863],{"class":161,"line":261},[159,149864,15685],{"class":165},[159,149866,149867,149869,149871,149873],{"class":161,"line":603},[159,149868,149776],{"class":185},[159,149870,7885],{"class":169},[159,149872,7969],{"class":185},[159,149874,1478],{"class":165},[159,149876,149877,149879,149881,149884],{"class":161,"line":621},[159,149878,17965],{"class":1146},[159,149880,1486],{"class":165},[159,149882,149883],{"class":1146},"#ff6700",[159,149885,1492],{"class":165},[159,149887,149888],{"class":161,"line":634},[159,149889,15685],{"class":165},[23,149891],{"style":147708,"src":149892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,149894,149895],{},"行高=盒子高度：实现文字的垂直居中",[14,149897,149898],{},"原理讲解：",[23,149900],{"style":147708,"src":149901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[37,149903,149905],{"id":149904},"_82-css背景","8.2 css背景",[14,149907,149908],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[42,149910,149912],{"id":149911},"_821-背景颜色","8.2.1 背景颜色",[14,149914,149915],{},"background-color:颜色值;",[14,149917,149918],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[42,149920,149922],{"id":149921},"_822-背景图片","8.2.2 背景图片",[14,149924,149925],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[151,149927,149929],{"className":147852,"code":149928,"language":147854,"meta":25,"style":25},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[49,149930,149931,149937,149953],{"__ignoreMap":25},[159,149932,149933,149935],{"class":161,"line":162},[159,149934,182],{"class":169},[159,149936,1478],{"class":165},[159,149938,149939,149942,149944,149946,149948,149951],{"class":161,"line":176},[159,149940,149941],{"class":1146},"  background-image",[159,149943,1486],{"class":165},[159,149945,8760],{"class":1146},[159,149947,1159],{"class":165},[159,149949,149950],{"class":8765},"images\u002Fbg.png",[159,149952,1953],{"class":165},[159,149954,149955],{"class":161,"line":203},[159,149956,15685],{"class":165},[12347,149958,149959,149968],{},[16500,149960,149961],{},[12356,149962,149963,149966],{},[12365,149964,149965],{"align":19854},"参数值",[12365,149967,123996],{"align":19854},[16624,149969,149970,149977],{},[12356,149971,149972,149974],{},[12488,149973,1529],{"align":19854},[12488,149975,149976],{"align":19854},"无背景图（默认的）",[12356,149978,149979,149981],{},[12488,149980,8760],{"align":19854},[12488,149982,149983],{"align":19854},"使用绝对或相对地址指定背景图像",[151,149985,149986],{"className":147852,"code":149928,"language":147854,"meta":25,"style":25},[49,149987,149988,149994,150008],{"__ignoreMap":25},[159,149989,149990,149992],{"class":161,"line":162},[159,149991,182],{"class":169},[159,149993,1478],{"class":165},[159,149995,149996,149998,150000,150002,150004,150006],{"class":161,"line":176},[159,149997,149941],{"class":1146},[159,149999,1486],{"class":165},[159,150001,8760],{"class":1146},[159,150003,1159],{"class":165},[159,150005,149950],{"class":8765},[159,150007,1953],{"class":165},[159,150009,150010],{"class":161,"line":203},[159,150011,15685],{"class":165},[14,150013,150014],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[42,150016,150018],{"id":150017},"_823-背景平铺","8.2.3 背景平铺",[151,150020,150022],{"className":147852,"code":150021,"language":147854,"meta":25,"style":25},"div {\n  background-repeat: no-repeat;\n}\n",[49,150023,150024,150030,150041],{"__ignoreMap":25},[159,150025,150026,150028],{"class":161,"line":162},[159,150027,182],{"class":169},[159,150029,1478],{"class":165},[159,150031,150032,150035,150037,150039],{"class":161,"line":176},[159,150033,150034],{"class":1146},"  background-repeat",[159,150036,1486],{"class":165},[159,150038,8771],{"class":1146},[159,150040,1492],{"class":165},[159,150042,150043],{"class":161,"line":203},[159,150044,15685],{"class":165},[12347,150046,150047,150055],{},[16500,150048,150049],{},[12356,150050,150051,150053],{},[12365,150052,149965],{"align":19854},[12365,150054,123996],{"align":19854},[16624,150056,150057,150065,150072,150080],{},[12356,150058,150059,150062],{},[12488,150060,150061],{"align":19854},"repeat",[12488,150063,150064],{"align":19854},"背景图像在纵向和横向上平铺（默认的）",[12356,150066,150067,150069],{},[12488,150068,8771],{"align":19854},[12488,150070,150071],{"align":19854},"背景图像不平铺",[12356,150073,150074,150077],{},[12488,150075,150076],{"align":19854},"repeat-x",[12488,150078,150079],{"align":19854},"背景图像在横向上平铺",[12356,150081,150082,150085],{},[12488,150083,150084],{"align":19854},"repeat-y",[12488,150086,150087],{"align":19854},"背景图像在纵向平铺",[42,150089,150091],{"id":150090},"_824-背景图片位置","8.2.4 背景图片位置",[151,150093,150095],{"className":147852,"code":150094,"language":147854,"meta":25,"style":25},"\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",[49,150096,150097,150102,150108,150122,150126,150131,150137,150153,150157,150162,150168,150182],{"__ignoreMap":25},[159,150098,150099],{"class":161,"line":162},[159,150100,150101],{"class":1135},"\u002F* 方位名词 *\u002F\n",[159,150103,150104,150106],{"class":161,"line":176},[159,150105,182],{"class":169},[159,150107,1478],{"class":165},[159,150109,150110,150113,150115,150117,150120],{"class":161,"line":203},[159,150111,150112],{"class":1146},"  background-position",[159,150114,1486],{"class":165},[159,150116,4193],{"class":1146},[159,150118,150119],{"class":1146}," top",[159,150121,1492],{"class":165},[159,150123,150124],{"class":161,"line":223},[159,150125,15685],{"class":165},[159,150127,150128],{"class":161,"line":233},[159,150129,150130],{"class":1135},"\u002F* 精确单位 *\u002F\n",[159,150132,150133,150135],{"class":161,"line":239},[159,150134,182],{"class":169},[159,150136,1478],{"class":165},[159,150138,150139,150141,150143,150145,150147,150149,150151],{"class":161,"line":245},[159,150140,150112],{"class":1146},[159,150142,1486],{"class":165},[159,150144,1739],{"class":1146},[159,150146,1571],{"class":1142},[159,150148,4412],{"class":1146},[159,150150,1571],{"class":1142},[159,150152,1492],{"class":165},[159,150154,150155],{"class":161,"line":251},[159,150156,15685],{"class":165},[159,150158,150159],{"class":161,"line":261},[159,150160,150161],{"class":1135},"\u002F* 混合单位 *\u002F\n",[159,150163,150164,150166],{"class":161,"line":603},[159,150165,182],{"class":169},[159,150167,1478],{"class":165},[159,150169,150170,150172,150174,150176,150178,150180],{"class":161,"line":621},[159,150171,150112],{"class":1146},[159,150173,1486],{"class":165},[159,150175,1739],{"class":1146},[159,150177,1571],{"class":1142},[159,150179,8774],{"class":1146},[159,150181,1492],{"class":165},[159,150183,150184],{"class":161,"line":634},[159,150185,15685],{"class":165},[14,150187,150188],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[12347,150190,150191,150199],{},[16500,150192,150193],{},[12356,150194,150195,150197],{},[12365,150196,149965],{"align":19854},[12365,150198,49392],{"align":19854},[16624,150200,150201,150208],{},[12356,150202,150203,150205],{},[12488,150204,3828],{"align":19854},[12488,150206,150207],{"align":19854},"百分数|由浮点数和单位标识符组成的长度值",[12356,150209,150210,150213],{},[12488,150211,150212],{"align":19854},"position",[12488,150214,150215],{"align":19854},"top|center|bottom|left|center|right 方位名词",[14,150217,150218],{},"其他说明：",[14,150220,150221],{},"①参数是方位名词",[14,150223,150224],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,150226,150227],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,150229,150230],{},"②参数是精确单位",[14,150232,150233],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,150235,150236],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,150238,150239],{},"③参数是混合单位",[14,150241,150242],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[42,150244,150246],{"id":150245},"_825-背景图片固定","8.2.5 背景图片固定",[151,150248,150250],{"className":147852,"code":150249,"language":147854,"meta":25,"style":25},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[49,150251,150252,150257,150263,150275,150279,150284,150290,150300],{"__ignoreMap":25},[159,150253,150254],{"class":161,"line":162},[159,150255,150256],{"class":1135},"\u002F* 背景滚动（默认） *\u002F\n",[159,150258,150259,150261],{"class":161,"line":176},[159,150260,182],{"class":169},[159,150262,1478],{"class":165},[159,150264,150265,150268,150270,150273],{"class":161,"line":203},[159,150266,150267],{"class":1146},"  background-attachment",[159,150269,1486],{"class":165},[159,150271,150272],{"class":1146},"scroll",[159,150274,1492],{"class":165},[159,150276,150277],{"class":161,"line":223},[159,150278,15685],{"class":165},[159,150280,150281],{"class":161,"line":233},[159,150282,150283],{"class":1135},"\u002F* 背景固定 *\u002F\n",[159,150285,150286,150288],{"class":161,"line":239},[159,150287,182],{"class":169},[159,150289,1478],{"class":165},[159,150291,150292,150294,150296,150298],{"class":161,"line":245},[159,150293,150267],{"class":1146},[159,150295,1486],{"class":165},[159,150297,107533],{"class":1146},[159,150299,1492],{"class":165},[159,150301,150302],{"class":161,"line":251},[159,150303,15685],{"class":165},[12347,150305,150306,150315],{},[16500,150307,150308],{},[12356,150309,150310,150313],{},[12365,150311,150312],{"align":19854},"参数",[12365,150314,123996],{"align":19854},[16624,150316,150317,150324],{},[12356,150318,150319,150321],{},[12488,150320,150272],{"align":19854},[12488,150322,150323],{"align":19854},"背景图像是随对象内容滚动",[12356,150325,150326,150328],{},[12488,150327,107533],{"align":19854},[12488,150329,150330],{"align":19854},"背景图像固定",[42,150332,150334],{"id":150333},"_826-背景样式合写","8.2.6 背景样式合写",[151,150336,150338],{"className":147852,"code":150337,"language":147854,"meta":25,"style":25},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[49,150339,150340,150345,150351,150379],{"__ignoreMap":25},[159,150341,150342],{"class":161,"line":162},[159,150343,150344],{"class":1135},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[159,150346,150347,150349],{"class":161,"line":176},[159,150348,182],{"class":169},[159,150350,1478],{"class":165},[159,150352,150353,150355,150357,150359,150362,150364,150366,150368,150370,150373,150375,150377],{"class":161,"line":203},[159,150354,17698],{"class":1146},[159,150356,1486],{"class":165},[159,150358,7868],{"class":1146},[159,150360,150361],{"class":1146}," url",[159,150363,1159],{"class":165},[159,150365,149950],{"class":8765},[159,150367,2710],{"class":165},[159,150369,8771],{"class":1146},[159,150371,150372],{"class":1146}," fixed",[159,150374,8774],{"class":1146},[159,150376,150119],{"class":1146},[159,150378,1492],{"class":165},[159,150380,150381],{"class":161,"line":223},[159,150382,15685],{"class":165},[42,150384,150386],{"id":150385},"_827-背景色半透明","8.2.7 背景色半透明",[151,150388,150390],{"className":147852,"code":150389,"language":147854,"meta":25,"style":25},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[49,150391,150392,150398,150424],{"__ignoreMap":25},[159,150393,150394,150396],{"class":161,"line":162},[159,150395,182],{"class":169},[159,150397,1478],{"class":165},[159,150399,150400,150402,150404,150406,150408,150410,150412,150414,150416,150418,150420,150422],{"class":161,"line":176},[159,150401,17698],{"class":1146},[159,150403,1486],{"class":165},[159,150405,1932],{"class":1146},[159,150407,1159],{"class":165},[159,150409,1489],{"class":1146},[159,150411,1939],{"class":165},[159,150413,1489],{"class":1146},[159,150415,1939],{"class":165},[159,150417,1489],{"class":1146},[159,150419,1939],{"class":165},[159,150421,121821],{"class":1146},[159,150423,1953],{"class":165},[159,150425,150426],{"class":161,"line":203},[159,150427,15685],{"class":165},[14,150429,120696],{},[14,150431,150432],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,150434,150435],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,150437,150438],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,150440,150441],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[42,150443,150445],{"id":150444},"_828-总结","8.2.8 总结",[12347,150447,150448,150459],{},[16500,150449,150450],{},[12356,150451,150452,150455,150457],{},[12365,150453,150454],{"align":19854},"属性",[12365,150456,123996],{"align":19854},[12365,150458,24022],{"align":19854},[16624,150460,150461,150472,150483,150494,150505,150516,150527],{},[12356,150462,150463,150466,150469],{},[12488,150464,150465],{"align":19854},"background-color",[12488,150467,150468],{"align":19854},"背景颜色",[12488,150470,150471],{"align":19854},"预定义的颜色值\u002F十六进制\u002FRGB代码",[12356,150473,150474,150477,150480],{},[12488,150475,150476],{"align":19854},"background-image",[12488,150478,150479],{"align":19854},"背景图片",[12488,150481,150482],{"align":19854},"url(图片路径)",[12356,150484,150485,150488,150491],{},[12488,150486,150487],{"align":19854},"background-repeat",[12488,150489,150490],{"align":19854},"是否平铺",[12488,150492,150493],{"align":19854},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[12356,150495,150496,150499,150502],{},[12488,150497,150498],{"align":19854},"background-position",[12488,150500,150501],{"align":19854},"背景位置",[12488,150503,150504],{"align":19854},"length\u002Fposition 分别是x和y坐标",[12356,150506,150507,150510,150513],{},[12488,150508,150509],{"align":19854},"background-attachment",[12488,150511,150512],{"align":19854},"背景附着",[12488,150514,150515],{"align":19854},"scroll(背景滚动) \u002Ffixed (背景固定)",[12356,150517,150518,150521,150524],{},[12488,150519,150520],{"align":19854},"背景简写",[12488,150522,150523],{"align":19854},"书写更简单",[12488,150525,150526],{"align":19854},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[12356,150528,150529,150532,150535],{},[12488,150530,150531],{"align":19854},"背景半透明",[12488,150533,150534],{"align":19854},"背景颜色半透明",[12488,150536,150537],{"align":19854},"background: rgba(0,0,0.3); 后面必须是4个值",[14,150539,150540],{},"颜色渐变：",[23,150542],{"style":147708,"src":150543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[23,150545],{"style":147708,"src":150546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[42,150548,150550],{"id":150549},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[151,150552,150554],{"className":148599,"code":150553,"language":148601,"meta":25,"style":25},"\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",[49,150555,150556,150571,150590,150609,150628,150647,150666],{"__ignoreMap":25},[159,150557,150558,150560,150562,150564,150566,150569],{"class":161,"line":162},[159,150559,166],{"class":165},[159,150561,182],{"class":169},[159,150563,186],{"class":185},[159,150565,189],{"class":165},[159,150567,150568],{"class":192},"\"nav\"",[159,150570,173],{"class":165},[159,150572,150573,150575,150577,150579,150581,150583,150586,150588],{"class":161,"line":176},[159,150574,179],{"class":165},[159,150576,8085],{"class":169},[159,150578,8088],{"class":185},[159,150580,189],{"class":165},[159,150582,8093],{"class":192},[159,150584,150585],{"class":165},">五彩导航1\u003C\u002F",[159,150587,8085],{"class":169},[159,150589,173],{"class":165},[159,150591,150592,150594,150596,150598,150600,150602,150605,150607],{"class":161,"line":203},[159,150593,179],{"class":165},[159,150595,8085],{"class":169},[159,150597,8088],{"class":185},[159,150599,189],{"class":165},[159,150601,8093],{"class":192},[159,150603,150604],{"class":165},">五彩导航2\u003C\u002F",[159,150606,8085],{"class":169},[159,150608,173],{"class":165},[159,150610,150611,150613,150615,150617,150619,150621,150624,150626],{"class":161,"line":223},[159,150612,179],{"class":165},[159,150614,8085],{"class":169},[159,150616,8088],{"class":185},[159,150618,189],{"class":165},[159,150620,8093],{"class":192},[159,150622,150623],{"class":165},">五彩导航3\u003C\u002F",[159,150625,8085],{"class":169},[159,150627,173],{"class":165},[159,150629,150630,150632,150634,150636,150638,150640,150643,150645],{"class":161,"line":233},[159,150631,179],{"class":165},[159,150633,8085],{"class":169},[159,150635,8088],{"class":185},[159,150637,189],{"class":165},[159,150639,8093],{"class":192},[159,150641,150642],{"class":165},">五彩导航4\u003C\u002F",[159,150644,8085],{"class":169},[159,150646,173],{"class":165},[159,150648,150649,150651,150653,150655,150657,150659,150662,150664],{"class":161,"line":239},[159,150650,179],{"class":165},[159,150652,8085],{"class":169},[159,150654,8088],{"class":185},[159,150656,189],{"class":165},[159,150658,8093],{"class":192},[159,150660,150661],{"class":165},">五彩导航5\u003C\u002F",[159,150663,8085],{"class":169},[159,150665,173],{"class":165},[159,150667,150668,150670,150672],{"class":161,"line":245},[159,150669,264],{"class":165},[159,150671,182],{"class":169},[159,150673,173],{"class":165},[151,150675,150677],{"className":147852,"code":150676,"language":147854,"meta":25,"style":25},".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",[49,150678,150679,150688,150698,150710,150722,150732,150744,150754,150758,150783,150806,150829,150852],{"__ignoreMap":25},[159,150680,150681,150684,150686],{"class":161,"line":162},[159,150682,150683],{"class":185},".nav",[159,150685,7885],{"class":169},[159,150687,1478],{"class":165},[159,150689,150690,150692,150694,150696],{"class":161,"line":176},[159,150691,149468],{"class":1146},[159,150693,1486],{"class":165},[159,150695,19484],{"class":1146},[159,150697,1492],{"class":165},[159,150699,150700,150702,150704,150706,150708],{"class":161,"line":203},[159,150701,17655],{"class":1146},[159,150703,1486],{"class":165},[159,150705,4384],{"class":1146},[159,150707,1571],{"class":1142},[159,150709,1492],{"class":165},[159,150711,150712,150714,150716,150718,150720],{"class":161,"line":223},[159,150713,17875],{"class":1146},[159,150715,1486],{"class":165},[159,150717,24683],{"class":1146},[159,150719,1571],{"class":1142},[159,150721,1492],{"class":165},[159,150723,150724,150726,150728,150730],{"class":161,"line":233},[159,150725,17612],{"class":1146},[159,150727,1486],{"class":165},[159,150729,4193],{"class":1146},[159,150731,1492],{"class":165},[159,150733,150734,150736,150738,150740,150742],{"class":161,"line":239},[159,150735,148536],{"class":1146},[159,150737,1486],{"class":165},[159,150739,24683],{"class":1146},[159,150741,1571],{"class":1142},[159,150743,1492],{"class":165},[159,150745,150746,150748,150750,150752],{"class":161,"line":245},[159,150747,17992],{"class":1146},[159,150749,1486],{"class":165},[159,150751,7868],{"class":1146},[159,150753,1492],{"class":165},[159,150755,150756],{"class":161,"line":251},[159,150757,15685],{"class":165},[159,150759,150760,150762,150764,150767,150769,150771,150774,150776,150778,150780],{"class":161,"line":261},[159,150761,150683],{"class":185},[159,150763,7885],{"class":169},[159,150765,150766],{"class":185},":nth-child",[159,150768,1159],{"class":165},[159,150770,4932],{"class":1146},[159,150772,150773],{"class":165},") { ",[159,150775,150465],{"class":1146},[159,150777,1486],{"class":165},[159,150779,149883],{"class":1146},[159,150781,150782],{"class":165},"; }\n",[159,150784,150785,150787,150789,150791,150793,150795,150797,150799,150801,150804],{"class":161,"line":603},[159,150786,150683],{"class":185},[159,150788,7885],{"class":169},[159,150790,150766],{"class":185},[159,150792,1159],{"class":165},[159,150794,11034],{"class":1146},[159,150796,150773],{"class":165},[159,150798,150465],{"class":1146},[159,150800,1486],{"class":165},[159,150802,150803],{"class":1146},"#ff0000",[159,150805,150782],{"class":165},[159,150807,150808,150810,150812,150814,150816,150818,150820,150822,150824,150827],{"class":161,"line":621},[159,150809,150683],{"class":185},[159,150811,7885],{"class":169},[159,150813,150766],{"class":185},[159,150815,1159],{"class":165},[159,150817,23949],{"class":1146},[159,150819,150773],{"class":165},[159,150821,150465],{"class":1146},[159,150823,1486],{"class":165},[159,150825,150826],{"class":1146},"#00a4ff",[159,150828,150782],{"class":165},[159,150830,150831,150833,150835,150837,150839,150841,150843,150845,150847,150850],{"class":161,"line":634},[159,150832,150683],{"class":185},[159,150834,7885],{"class":169},[159,150836,150766],{"class":185},[159,150838,1159],{"class":165},[159,150840,8866],{"class":1146},[159,150842,150773],{"class":165},[159,150844,150465],{"class":1146},[159,150846,1486],{"class":165},[159,150848,150849],{"class":1146},"#ff00ff",[159,150851,150782],{"class":165},[159,150853,150854,150856,150858,150860,150862,150864,150866,150868,150870,150873],{"class":161,"line":640},[159,150855,150683],{"class":185},[159,150857,7885],{"class":169},[159,150859,150766],{"class":185},[159,150861,1159],{"class":165},[159,150863,1753],{"class":1146},[159,150865,150773],{"class":165},[159,150867,150465],{"class":1146},[159,150869,1486],{"class":165},[159,150871,150872],{"class":1146},"#00ff00",[159,150874,150782],{"class":165},[37,150876,150878],{"id":150877},"_83-css三大特性","8.3 css三大特性",[42,150880,150882],{"id":150881},"_831-层叠性","8.3.1 层叠性",[14,150884,150885],{},"为了解决样式冲突问题",[14,150887,150888],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,150890,150891],{},"   ②样式不冲突，不会层叠",[42,150893,150895],{"id":150894},"_832-继承性","8.3.2 继承性",[14,150897,150898],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,150900,150901],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[151,150903,150905],{"className":147852,"code":150904,"language":147854,"meta":25,"style":25},"p {\n  color: #333;\n}\n",[49,150906,150907,150913,150923],{"__ignoreMap":25},[159,150908,150909,150911],{"class":161,"line":162},[159,150910,14],{"class":169},[159,150912,1478],{"class":165},[159,150914,150915,150917,150919,150921],{"class":161,"line":176},[159,150916,17992],{"class":1146},[159,150918,1486],{"class":165},[159,150920,9412],{"class":1146},[159,150922,1492],{"class":165},[159,150924,150925],{"class":161,"line":203},[159,150926,15685],{"class":165},[23,150928],{"style":147708,"src":150929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,150931,150932],{},"解释：①行高可以跟单位也可以不跟单位",[14,150934,150935],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,150937,150938],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,150940,150941],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[42,150943,150945],{"id":150944},"_833-优先级","8.3.3 优先级",[134,150947,150948,150951],{},[106,150949,150950],{},"选择器相同，则执行层叠性",[106,150952,150953],{},"选择器不同，则根据选择器权重执行",[12347,150955,150956,150966],{},[16500,150957,150958],{},[12356,150959,150960,150963],{},[12365,150961,150962],{"align":19854},"选择器",[12365,150964,150965],{"align":19854},"选择器权重",[16624,150967,150968,150976,150984,150992,151000,151008],{},[12356,150969,150970,150973],{},[12488,150971,150972],{"align":19854},"继承 或者*",[12488,150974,150975],{"align":19854},"0，0，0，0",[12356,150977,150978,150981],{},[12488,150979,150980],{"align":19854},"标签选择器",[12488,150982,150983],{"align":19854},"0，0，0，1",[12356,150985,150986,150989],{},[12488,150987,150988],{"align":19854},"类选择器，伪类选择器",[12488,150990,150991],{"align":19854},"0，0，1，0",[12356,150993,150994,150997],{},[12488,150995,150996],{"align":19854},"ID选择器",[12488,150998,150999],{"align":19854},"0，1，0，0",[12356,151001,151002,151005],{},[12488,151003,151004],{"align":19854},"行内样式",[12488,151006,151007],{"align":19854},"1，0，0，0",[12356,151009,151010,151013],{},[12488,151011,151012],{"align":19854},"！important",[12488,151014,151015],{"align":19854},"无穷大",[14,151017,151018],{},"! important用法：",[151,151020,151022],{"className":147852,"code":151021,"language":147854,"meta":25,"style":25},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[49,151023,151024,151029,151035,151048,151052,151057,151063,151073],{"__ignoreMap":25},[159,151025,151026],{"class":161,"line":162},[159,151027,151028],{"class":1135},"\u002F* !important 拥有最高优先级 *\u002F\n",[159,151030,151031,151033],{"class":161,"line":176},[159,151032,182],{"class":169},[159,151034,1478],{"class":165},[159,151036,151037,151039,151041,151043,151046],{"class":161,"line":203},[159,151038,17992],{"class":1146},[159,151040,1486],{"class":165},[159,151042,13277],{"class":1146},[159,151044,151045],{"class":1142}," !important",[159,151047,1492],{"class":165},[159,151049,151050],{"class":161,"line":223},[159,151051,15685],{"class":165},[159,151053,151054],{"class":161,"line":233},[159,151055,151056],{"class":1135},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[159,151058,151059,151061],{"class":161,"line":239},[159,151060,182],{"class":169},[159,151062,1478],{"class":165},[159,151064,151065,151067,151069,151071],{"class":161,"line":245},[159,151066,17992],{"class":1146},[159,151068,1486],{"class":165},[159,151070,4327],{"class":1146},[159,151072,1492],{"class":165},[159,151074,151075],{"class":161,"line":251},[159,151076,15685],{"class":165},[14,151078,151079],{},"优先级注意点：",[14,151081,151082],{},"①权重是有4组数字组成,但是不会有进位",[14,151084,151085],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,151087,151088],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,151090,151091],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,151093,151094],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,151096,151097],{},"⑥复合选择器",[12347,151099,151100,151110],{},[16500,151101,151102],{},[12356,151103,151104,151107],{},[12365,151105,151106],{"align":19854},"div ul li",[12365,151108,151109],{"align":19854},"0,0,0,3",[16624,151111,151112,151120,151128],{},[12356,151113,151114,151117],{},[12488,151115,151116],{"align":19854},".nav ul li",[12488,151118,151119],{"align":19854},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[12356,151121,151122,151125],{},[12488,151123,151124],{"align":19854},"a:hover",[12488,151126,151127],{"align":19854},"0,0,1,1",[12356,151129,151130,151133],{},[12488,151131,151132],{"align":19854},".nav a",[12488,151134,151127],{"align":19854},[1468,151136,151137],{},"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":25,"searchDepth":176,"depth":176,"links":151139},[151140,151148,151159],{"id":149248,"depth":176,"text":149249,"children":151141},[151142,151143,151144,151145,151146,151147],{"id":149261,"depth":203,"text":149262},{"id":149333,"depth":203,"text":149334},{"id":149405,"depth":203,"text":149406},{"id":149436,"depth":203,"text":149437},{"id":149443,"depth":203,"text":149444},{"id":149596,"depth":203,"text":149597},{"id":149904,"depth":176,"text":149905,"children":151149},[151150,151151,151152,151153,151154,151155,151156,151157,151158],{"id":149911,"depth":203,"text":149912},{"id":149921,"depth":203,"text":149922},{"id":150017,"depth":203,"text":150018},{"id":150090,"depth":203,"text":150091},{"id":150245,"depth":203,"text":150246},{"id":150333,"depth":203,"text":150334},{"id":150385,"depth":203,"text":150386},{"id":150444,"depth":203,"text":150445},{"id":150549,"depth":203,"text":150550},{"id":150877,"depth":176,"text":150878,"children":151160},[151161,151162,151163],{"id":150881,"depth":203,"text":150882},{"id":150894,"depth":203,"text":150895},{"id":150944,"depth":203,"text":150945},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":149240,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":151170,"title":151171,"body":151172,"description":23809,"extension":23810,"meta":152762,"navigation":589,"path":152763,"seo":152764,"stem":152765,"__hash__":152766},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":151173,"toc":152741},[151174,151177,151181,151184,151187,151190,151193,151196,151199,151202,151206,151214,151251,151287,151290,151304,151309,151343,151346,151439,151444,151447,151477,151480,151485,151493,151497,151504,151550,151594,151599,151602,151605,151608,151611,151614,151617,151619,151622,151626,151631,151675,151680,151683,151686,151723,151728,151731,151734,151737,151740,151772,151775,151778,151781,151813,151816,151819,151822,151826,151829,151861,151864,151868,151888,151891,151899,151902,151906,151911,151914,151946,151951,151954,151992,151996,152001,152004,152007,152038,152041,152058,152063,152115,152175,152180,152234,152272,152276,152280,152283,152287,152295,152298,152300,152311,152316,152364,152398,152401,152404,152407,152410,152454,152457,152460,152463,152466,152469,152472,152516,152519,152522,152525,152528,152531,152534,152540,152543,152587,152590,152593,152596,152599,152602,152646,152649,152651,152654,152658,152662,152700,152704,152707,152710,152714,152722,152726,152729,152732,152735,152738],[10,151175,151171],{"id":151176},"_9-css盒模型浮动与切图",[37,151178,151180],{"id":151179},"_91-盒子模型","9.1 盒子模型",[14,151182,151183],{},"利用盒子来设计网页",[14,151185,151186],{},"盒子包含：边框、外边距、内边距、实际内容",[14,151188,151189],{},"网页布局设置：",[14,151191,151192],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,151194,151195],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,151197,151198],{},"③往盒子里装内容",[23,151200],{"style":147708,"src":151201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[42,151203,151205],{"id":151204},"_911-边框border","9.1.1 边框（border）",[134,151207,151208,151211],{},[106,151209,151210],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[106,151212,151213],{},"语法",[151,151215,151217],{"className":147852,"code":151216,"language":147854,"meta":25,"style":25},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[49,151218,151219,151224,151230,151247],{"__ignoreMap":25},[159,151220,151221],{"class":161,"line":162},[159,151222,151223],{"class":1135},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[159,151225,151226,151228],{"class":161,"line":176},[159,151227,182],{"class":169},[159,151229,1478],{"class":165},[159,151231,151232,151234,151236,151238,151240,151242,151245],{"class":161,"line":203},[159,151233,17983],{"class":1146},[159,151235,1486],{"class":165},[159,151237,4932],{"class":1146},[159,151239,1571],{"class":1142},[159,151241,7709],{"class":1146},[159,151243,151244],{"class":1146}," #ccc",[159,151246,1492],{"class":165},[159,151248,151249],{"class":161,"line":223},[159,151250,15685],{"class":165},[12347,151252,151253,151261],{},[16500,151254,151255],{},[12356,151256,151257,151259],{},[12365,151258,150454],{"align":19854},[12365,151260,123996],{"align":19854},[16624,151262,151263,151271,151279],{},[12356,151264,151265,151268],{},[12488,151266,151267],{"align":19854},"border-width",[12488,151269,151270],{"align":19854},"定义边框粗细，单位是px",[12356,151272,151273,151276],{},[12488,151274,151275],{"align":19854},"border-style",[12488,151277,151278],{"align":19854},"边框的样式",[12356,151280,151281,151284],{},[12488,151282,151283],{"align":19854},"border-color",[12488,151285,151286],{"align":19854},"边框的颜色",[14,151288,151289],{},"边框样式 border-style 可以设置如下值：",[103,151291,151292,151295,151298,151301],{},[106,151293,151294],{},"none：没有边框即忽略所有边框的宽度（默认值）",[106,151296,151297],{},"solid：边框为单实线(最为常用的)",[106,151299,151300],{},"dashed：边框为虚线",[106,151302,151303],{},"dotted：边框为点线",[134,151305,151306],{"start":203},[106,151307,151308],{},"边框的合写分写",[151,151310,151311],{"className":147852,"code":151216,"language":147854,"meta":25,"style":25},[49,151312,151313,151317,151323,151339],{"__ignoreMap":25},[159,151314,151315],{"class":161,"line":162},[159,151316,151223],{"class":1135},[159,151318,151319,151321],{"class":161,"line":176},[159,151320,182],{"class":169},[159,151322,1478],{"class":165},[159,151324,151325,151327,151329,151331,151333,151335,151337],{"class":161,"line":203},[159,151326,17983],{"class":1146},[159,151328,1486],{"class":165},[159,151330,4932],{"class":1146},[159,151332,1571],{"class":1142},[159,151334,7709],{"class":1146},[159,151336,151244],{"class":1146},[159,151338,1492],{"class":165},[159,151340,151341],{"class":161,"line":223},[159,151342,15685],{"class":165},[14,151344,151345],{},"边框分开写法：",[151,151347,151349],{"className":147852,"code":151348,"language":147854,"meta":25,"style":25},"\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",[49,151350,151351,151356,151362,151380,151398,151417,151435],{"__ignoreMap":25},[159,151352,151353],{"class":161,"line":162},[159,151354,151355],{"class":1135},"\u002F* 边框分开写法 *\u002F\n",[159,151357,151358,151360],{"class":161,"line":176},[159,151359,182],{"class":169},[159,151361,1478],{"class":165},[159,151363,151364,151367,151369,151371,151373,151375,151378],{"class":161,"line":203},[159,151365,151366],{"class":1146},"  border-top",[159,151368,1486],{"class":165},[159,151370,4932],{"class":1146},[159,151372,1571],{"class":1142},[159,151374,7709],{"class":1146},[159,151376,151377],{"class":1146}," #000",[159,151379,1492],{"class":165},[159,151381,151382,151385,151387,151389,151391,151393,151396],{"class":161,"line":223},[159,151383,151384],{"class":1146},"  border-right",[159,151386,1486],{"class":165},[159,151388,11034],{"class":1146},[159,151390,1571],{"class":1142},[159,151392,9284],{"class":1146},[159,151394,151395],{"class":1146}," #333",[159,151397,1492],{"class":165},[159,151399,151400,151403,151405,151407,151409,151412,151415],{"class":161,"line":233},[159,151401,151402],{"class":1146},"  border-bottom",[159,151404,1486],{"class":165},[159,151406,23949],{"class":1146},[159,151408,1571],{"class":1142},[159,151410,151411],{"class":1146}," dotted",[159,151413,151414],{"class":1146}," #666",[159,151416,1492],{"class":165},[159,151418,151419,151422,151424,151426,151428,151430,151433],{"class":161,"line":239},[159,151420,151421],{"class":1146},"  border-left",[159,151423,1486],{"class":165},[159,151425,4932],{"class":1146},[159,151427,1571],{"class":1142},[159,151429,7709],{"class":1146},[159,151431,151432],{"class":1146}," #999",[159,151434,1492],{"class":165},[159,151436,151437],{"class":161,"line":245},[159,151438,15685],{"class":165},[134,151440,151441],{"start":223},[106,151442,151443],{},"表格的细线边框",[14,151445,151446],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[151,151448,151450],{"className":147852,"code":151449,"language":147854,"meta":25,"style":25},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[49,151451,151452,151457,151463,151473],{"__ignoreMap":25},[159,151453,151454],{"class":161,"line":162},[159,151455,151456],{"class":1135},"\u002F* 表格细线边框合并 *\u002F\n",[159,151458,151459,151461],{"class":161,"line":176},[159,151460,12347],{"class":169},[159,151462,1478],{"class":165},[159,151464,151465,151467,151469,151471],{"class":161,"line":203},[159,151466,17665],{"class":1146},[159,151468,1486],{"class":165},[159,151470,12093],{"class":1146},[159,151472,1492],{"class":165},[159,151474,151475],{"class":161,"line":223},[159,151476,15685],{"class":165},[14,151478,151479],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[134,151481,151482],{"start":233},[106,151483,151484],{},"解决边框额外增加盒子的实际大小的方法：",[103,151486,151487,151490],{},[106,151488,151489],{},"测量盒子大小的时候,不量边框",[106,151491,151492],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[42,151494,151496],{"id":151495},"_912-内边距","9.1.2 内边距",[134,151498,151499,151502],{},[106,151500,151501],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[106,151503,151213],{},[12347,151505,151506,151516],{},[16500,151507,151508],{},[12356,151509,151510,151513],{},[12365,151511,151512],{"align":19854},"值的个数",[12365,151514,151515],{"align":19854},"表达意思",[16624,151517,151518,151526,151534,151542],{},[12356,151519,151520,151523],{},[12488,151521,151522],{"align":19854},"padding: 5px;",[12488,151524,151525],{"align":19854},"1个值，代表上下左右都有5个元素",[12356,151527,151528,151531],{},[12488,151529,151530],{"align":19854},"padding: 5px 10px;",[12488,151532,151533],{"align":19854},"2个值，代表上下内边距为5像素，左右内边距为10像素",[12356,151535,151536,151539],{},[12488,151537,151538],{"align":19854},"padding: 5px 10px 20px;",[12488,151540,151541],{"align":19854},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[12356,151543,151544,151547],{},[12488,151545,151546],{"align":19854},"padding: 5px 10px 20px 30px;",[12488,151548,151549],{"align":19854},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[12347,151551,151552,151560],{},[16500,151553,151554],{},[12356,151555,151556,151558],{},[12365,151557,150454],{"align":19854},[12365,151559,123996],{"align":19854},[16624,151561,151562,151570,151578,151586],{},[12356,151563,151564,151567],{},[12488,151565,151566],{"align":19854},"padding-left",[12488,151568,151569],{"align":19854},"左内边距",[12356,151571,151572,151575],{},[12488,151573,151574],{"align":19854},"padding-right",[12488,151576,151577],{"align":19854},"右内边距",[12356,151579,151580,151583],{},[12488,151581,151582],{"align":19854},"padding-top",[12488,151584,151585],{"align":19854},"上内边距",[12356,151587,151588,151591],{},[12488,151589,151590],{"align":19854},"padding-bottom",[12488,151592,151593],{"align":19854},"下内边距",[134,151595,151596],{"start":203},[106,151597,151598],{},"内边距会影响盒子的实际大小",[14,151600,151601],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,151603,151604],{},"①内容和边框有了距离，添加了内边距",[14,151606,151607],{},"②padding影响了盒子实际大小",[14,151609,151610],{},"内边距对盒子大小的影响：",[14,151612,151613],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,151615,151616],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,151618,116520],{},[14,151620,151621],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[42,151623,151625],{"id":151624},"_913-外边距","9.1.3 外边距",[134,151627,151628],{},[106,151629,151630],{},"控制盒子与盒子之间的距离",[12347,151632,151633,151641],{},[16500,151634,151635],{},[12356,151636,151637,151639],{},[12365,151638,150454],{"align":19854},[12365,151640,123996],{"align":19854},[16624,151642,151643,151651,151659,151667],{},[12356,151644,151645,151648],{},[12488,151646,151647],{"align":19854},"margin-left",[12488,151649,151650],{"align":19854},"左外边距",[12356,151652,151653,151656],{},[12488,151654,151655],{"align":19854},"margin-right",[12488,151657,151658],{"align":19854},"右外边距",[12356,151660,151661,151664],{},[12488,151662,151663],{"align":19854},"margin-top",[12488,151665,151666],{"align":19854},"上外边距",[12356,151668,151669,151672],{},[12488,151670,151671],{"align":19854},"margin-bottom",[12488,151673,151674],{"align":19854},"下外边距",[134,151676,151677],{"start":176},[106,151678,151679],{},"外边距可以让块级盒子水平居中的两个条件：",[14,151681,151682],{},"①盒子必须指定了宽度（width）",[14,151684,151685],{},"②盒子左右的外边距都设置为 auto",[151,151687,151689],{"className":147852,"code":151688,"language":147854,"meta":25,"style":25},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[49,151690,151691,151696,151703,151719],{"__ignoreMap":25},[159,151692,151693],{"class":161,"line":162},[159,151694,151695],{"class":1135},"\u002F* margin 复合写法（同上） *\u002F\n",[159,151697,151698,151701],{"class":161,"line":176},[159,151699,151700],{"class":185},".box",[159,151702,1478],{"class":165},[159,151704,151705,151707,151709,151711,151713,151716],{"class":161,"line":203},[159,151706,17556],{"class":1146},[159,151708,1486],{"class":165},[159,151710,1489],{"class":1146},[159,151712,1601],{"class":1146},[159,151714,151715],{"class":165},";  ",[159,151717,151718],{"class":1135},"\u002F* 块级盒子水平居中 *\u002F\n",[159,151720,151721],{"class":161,"line":223},[159,151722,15685],{"class":165},[134,151724,151725],{"start":203},[106,151726,151727],{},"外边距塌陷问题",[14,151729,151730],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[23,151732],{"style":147708,"src":151733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,151735,151736],{},"解决方案：",[14,151738,151739],{},"①可以为父亲元素定义上边距",[151,151741,151742],{"className":147852,"code":151688,"language":147854,"meta":25,"style":25},[49,151743,151744,151748,151754,151768],{"__ignoreMap":25},[159,151745,151746],{"class":161,"line":162},[159,151747,151695],{"class":1135},[159,151749,151750,151752],{"class":161,"line":176},[159,151751,151700],{"class":185},[159,151753,1478],{"class":165},[159,151755,151756,151758,151760,151762,151764,151766],{"class":161,"line":203},[159,151757,17556],{"class":1146},[159,151759,1486],{"class":165},[159,151761,1489],{"class":1146},[159,151763,1601],{"class":1146},[159,151765,151715],{"class":165},[159,151767,151718],{"class":1135},[159,151769,151770],{"class":161,"line":223},[159,151771,15685],{"class":165},[14,151773,151774],{},"②可以为父亲元素定义上内边距",[14,151776,151777],{},"③可以为父亲元素添加overflow:hidden",[23,151779],{"style":147708,"src":151780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[151,151782,151783],{"className":147852,"code":151688,"language":147854,"meta":25,"style":25},[49,151784,151785,151789,151795,151809],{"__ignoreMap":25},[159,151786,151787],{"class":161,"line":162},[159,151788,151695],{"class":1135},[159,151790,151791,151793],{"class":161,"line":176},[159,151792,151700],{"class":185},[159,151794,1478],{"class":165},[159,151796,151797,151799,151801,151803,151805,151807],{"class":161,"line":203},[159,151798,17556],{"class":1146},[159,151800,1486],{"class":165},[159,151802,1489],{"class":1146},[159,151804,1601],{"class":1146},[159,151806,151715],{"class":165},[159,151808,151718],{"class":1135},[159,151810,151811],{"class":161,"line":223},[159,151812,15685],{"class":165},[23,151814],{"style":147708,"src":151815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,151817,151818],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,151820,151821],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[42,151823,151825],{"id":151824},"_914-清除内外边距","9.1.4 清除内外边距",[14,151827,151828],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[151,151830,151831],{"className":147852,"code":151688,"language":147854,"meta":25,"style":25},[49,151832,151833,151837,151843,151857],{"__ignoreMap":25},[159,151834,151835],{"class":161,"line":162},[159,151836,151695],{"class":1135},[159,151838,151839,151841],{"class":161,"line":176},[159,151840,151700],{"class":185},[159,151842,1478],{"class":165},[159,151844,151845,151847,151849,151851,151853,151855],{"class":161,"line":203},[159,151846,17556],{"class":1146},[159,151848,1486],{"class":165},[159,151850,1489],{"class":1146},[159,151852,1601],{"class":1146},[159,151854,151715],{"class":165},[159,151856,151718],{"class":1135},[159,151858,151859],{"class":161,"line":223},[159,151860,15685],{"class":165},[14,151862,151863],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[42,151865,151867],{"id":151866},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[103,151869,151870,151873,151876,151879,151882,151885],{},[106,151871,151872],{},"文件→打开 ：可以打开我们要测量的图片",[106,151874,151875],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[106,151877,151878],{},"右击标尺，把里面的单位改为像素",[106,151880,151881],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[106,151883,151884],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[106,151886,151887],{},"用选区拖动 可以测量大小",[23,151889],{"style":147708,"src":151890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[103,151892,151893,151896],{},[106,151894,151895],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[106,151897,151898],{},"吸管取色工具",[23,151900],{"style":147708,"src":151901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[42,151903,151905],{"id":151904},"_916-案例","9.1.6 案例",[134,151907,151908],{},[106,151909,151910],{},"小米商品",[23,151912],{"style":147708,"src":151913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[151,151915,151916],{"className":147852,"code":151688,"language":147854,"meta":25,"style":25},[49,151917,151918,151922,151928,151942],{"__ignoreMap":25},[159,151919,151920],{"class":161,"line":162},[159,151921,151695],{"class":1135},[159,151923,151924,151926],{"class":161,"line":176},[159,151925,151700],{"class":185},[159,151927,1478],{"class":165},[159,151929,151930,151932,151934,151936,151938,151940],{"class":161,"line":203},[159,151931,17556],{"class":1146},[159,151933,1486],{"class":165},[159,151935,1489],{"class":1146},[159,151937,1601],{"class":1146},[159,151939,151715],{"class":165},[159,151941,151718],{"class":1135},[159,151943,151944],{"class":161,"line":223},[159,151945,15685],{"class":165},[134,151947,151948],{"start":176},[106,151949,151950],{},"快报模块",[23,151952],{"style":147708,"src":151953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[151,151955,151957],{"className":148599,"code":151956,"language":148601,"meta":25,"style":25},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[49,151958,151959,151964,151979,151984],{"__ignoreMap":25},[159,151960,151961],{"class":161,"line":162},[159,151962,151963],{"class":1135},"\u003C!-- HTML 代码示例 -->\n",[159,151965,151966,151968,151970,151972,151974,151977],{"class":161,"line":176},[159,151967,166],{"class":165},[159,151969,182],{"class":169},[159,151971,186],{"class":185},[159,151973,189],{"class":165},[159,151975,151976],{"class":192},"\"example\"",[159,151978,173],{"class":165},[159,151980,151981],{"class":161,"line":203},[159,151982,151983],{"class":165},"  示例内容\n",[159,151985,151986,151988,151990],{"class":161,"line":223},[159,151987,264],{"class":165},[159,151989,182],{"class":169},[159,151991,173],{"class":165},[42,151993,151995],{"id":151994},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[134,151997,151998],{},[106,151999,152000],{},"圆角边框",[14,152002,152003],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[23,152005],{"style":147708,"src":152006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[151,152008,152010],{"className":147852,"code":152009,"language":147854,"meta":25,"style":25},"div {\n  border: 1px solid #ccc;\n}\n",[49,152011,152012,152018,152034],{"__ignoreMap":25},[159,152013,152014,152016],{"class":161,"line":162},[159,152015,182],{"class":169},[159,152017,1478],{"class":165},[159,152019,152020,152022,152024,152026,152028,152030,152032],{"class":161,"line":176},[159,152021,17983],{"class":1146},[159,152023,1486],{"class":165},[159,152025,4932],{"class":1146},[159,152027,1571],{"class":1142},[159,152029,7709],{"class":1146},[159,152031,151244],{"class":1146},[159,152033,1492],{"class":165},[159,152035,152036],{"class":161,"line":203},[159,152037,15685],{"class":165},[14,152039,152040],{},"解释:",[103,152042,152043,152046,152049,152052,152055],{},[106,152044,152045],{},"参数值可以为数值或百分比的形式",[106,152047,152048],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[106,152050,152051],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[106,152053,152054],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[106,152056,152057],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[134,152059,152060],{"start":176},[106,152061,152062],{},"盒子阴影",[151,152064,152066],{"className":147852,"code":152065,"language":147854,"meta":25,"style":25},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[49,152067,152068,152074,152111],{"__ignoreMap":25},[159,152069,152070,152072],{"class":161,"line":162},[159,152071,182],{"class":169},[159,152073,1478],{"class":165},[159,152075,152076,152079,152081,152083,152085,152087,152089,152091,152093,152095,152097,152099,152101,152103,152105,152107,152109],{"class":161,"line":176},[159,152077,152078],{"class":1146},"  box-shadow",[159,152080,1486],{"class":165},[159,152082,1489],{"class":1146},[159,152084,38320],{"class":1146},[159,152086,1571],{"class":1142},[159,152088,7664],{"class":1146},[159,152090,1571],{"class":1142},[159,152092,100067],{"class":1146},[159,152094,1159],{"class":165},[159,152096,1489],{"class":1146},[159,152098,1939],{"class":165},[159,152100,1489],{"class":1146},[159,152102,1939],{"class":165},[159,152104,1489],{"class":1146},[159,152106,1939],{"class":165},[159,152108,107510],{"class":1146},[159,152110,1953],{"class":165},[159,152112,152113],{"class":161,"line":203},[159,152114,15685],{"class":165},[12347,152116,152117,152125],{},[16500,152118,152119],{},[12356,152120,152121,152123],{},[12365,152122,24022],{"align":19854},[12365,152124,51012],{"align":19854},[16624,152126,152127,152135,152143,152151,152159,152167],{},[12356,152128,152129,152132],{},[12488,152130,152131],{"align":19854},"h-shadow",[12488,152133,152134],{"align":19854},"必需,水平阴影的位置,允许负值",[12356,152136,152137,152140],{},[12488,152138,152139],{"align":19854},"v-shadow",[12488,152141,152142],{"align":19854},"必需,垂直阴影的位置,允许负值",[12356,152144,152145,152148],{},[12488,152146,152147],{"align":19854},"blur",[12488,152149,152150],{"align":19854},"可选,模糊距离,就是影子的虚实",[12356,152152,152153,152156],{},[12488,152154,152155],{"align":19854},"spread",[12488,152157,152158],{"align":19854},"可选,阴影尺寸",[12356,152160,152161,152164],{},[12488,152162,152163],{"align":19854},"color",[12488,152165,152166],{"align":19854},"可选,阴影的颜色",[12356,152168,152169,152172],{},[12488,152170,152171],{"align":19854},"inset",[12488,152173,152174],{"align":19854},"可选,将外部阴影(outset)改为内部阴影",[134,152176,152177],{"start":203},[106,152178,152179],{},"文字阴影",[151,152181,152183],{"className":147852,"code":152182,"language":147854,"meta":25,"style":25},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[49,152184,152185,152191,152230],{"__ignoreMap":25},[159,152186,152187,152189],{"class":161,"line":162},[159,152188,14],{"class":169},[159,152190,1478],{"class":165},[159,152192,152193,152196,152198,152200,152202,152204,152206,152208,152210,152212,152214,152216,152218,152220,152222,152224,152226,152228],{"class":161,"line":176},[159,152194,152195],{"class":1146},"  text-shadow",[159,152197,1486],{"class":165},[159,152199,4932],{"class":1146},[159,152201,1571],{"class":1142},[159,152203,2707],{"class":1146},[159,152205,1571],{"class":1142},[159,152207,38320],{"class":1146},[159,152209,1571],{"class":1142},[159,152211,100067],{"class":1146},[159,152213,1159],{"class":165},[159,152215,1489],{"class":1146},[159,152217,1939],{"class":165},[159,152219,1489],{"class":1146},[159,152221,1939],{"class":165},[159,152223,1489],{"class":1146},[159,152225,1939],{"class":165},[159,152227,121821],{"class":1146},[159,152229,1953],{"class":165},[159,152231,152232],{"class":161,"line":203},[159,152233,15685],{"class":165},[12347,152235,152236,152244],{},[16500,152237,152238],{},[12356,152239,152240,152242],{},[12365,152241,24022],{"align":19854},[12365,152243,51012],{"align":19854},[16624,152245,152246,152252,152259,152266],{},[12356,152247,152248,152250],{},[12488,152249,152131],{"align":19854},[12488,152251,152134],{"align":19854},[12356,152253,152254,152256],{},[12488,152255,152139],{"align":19854},[12488,152257,152258],{"align":19854},"必需,垂直阴影位置,允许负值",[12356,152260,152261,152263],{},[12488,152262,152147],{"align":19854},[12488,152264,152265],{"align":19854},"可选,模糊的距离",[12356,152267,152268,152270],{},[12488,152269,152163],{"align":19854},[12488,152271,152166],{"align":19854},[37,152273,152275],{"id":152274},"_92-浮动","9.2 浮动",[42,152277,152279],{"id":152278},"_921-浮动介绍","9.2.1 浮动介绍",[14,152281,152282],{},"在16.2中详细介绍",[42,152284,152286],{"id":152285},"_922-清除浮动","9.2.2 清除浮动",[134,152288,152289,152292],{},[106,152290,152291],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[106,152293,152294],{},"清除浮动的本质",[14,152296,152297],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,152299,32623],{},[103,152301,152302,152305,152308],{},[106,152303,152304],{},"如果父盒子本身有高度，则不需要清除浮动",[106,152306,152307],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[106,152309,152310],{},"父级有了高度，就不会影响下面的标准流了",[134,152312,152313],{"start":203},[106,152314,152315],{},"清除浮动样式",[151,152317,152319],{"className":147852,"code":152318,"language":147854,"meta":25,"style":25},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[49,152320,152321,152328,152339,152343,152350,152360],{"__ignoreMap":25},[159,152322,152323,152326],{"class":161,"line":162},[159,152324,152325],{"class":185},".left",[159,152327,1478],{"class":165},[159,152329,152330,152333,152335,152337],{"class":161,"line":176},[159,152331,152332],{"class":1146},"  float",[159,152334,1486],{"class":165},[159,152336,19854],{"class":1146},[159,152338,1492],{"class":165},[159,152340,152341],{"class":161,"line":203},[159,152342,15685],{"class":165},[159,152344,152345,152348],{"class":161,"line":223},[159,152346,152347],{"class":185},".right",[159,152349,1478],{"class":165},[159,152351,152352,152354,152356,152358],{"class":161,"line":233},[159,152353,152332],{"class":1146},[159,152355,1486],{"class":165},[159,152357,19623],{"class":1146},[159,152359,1492],{"class":165},[159,152361,152362],{"class":161,"line":239},[159,152363,15685],{"class":165},[12347,152365,152366,152374],{},[16500,152367,152368],{},[12356,152369,152370,152372],{},[12365,152371,148316],{"align":19854},[12365,152373,51012],{"align":19854},[16624,152375,152376,152383,152390],{},[12356,152377,152378,152380],{},[12488,152379,19854],{"align":19854},[12488,152381,152382],{"align":19854},"不允许左侧有浮动元素（清除左侧浮动的影响）",[12356,152384,152385,152387],{},[12488,152386,19623],{"align":19854},[12488,152388,152389],{"align":19854},"不允许右侧有浮动元素（清除右侧浮动的影响）",[12356,152391,152392,152395],{},[12488,152393,152394],{"align":19854},"both",[12488,152396,152397],{"align":19854},"同时清除左右侧浮动的影响",[14,152399,152400],{},"法一",[14,152402,152403],{},"额外标签法也称为隔墙法",[14,152405,152406],{},"使用方式：",[14,152408,152409],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[151,152411,152412],{"className":147852,"code":152318,"language":147854,"meta":25,"style":25},[49,152413,152414,152420,152430,152434,152440,152450],{"__ignoreMap":25},[159,152415,152416,152418],{"class":161,"line":162},[159,152417,152325],{"class":185},[159,152419,1478],{"class":165},[159,152421,152422,152424,152426,152428],{"class":161,"line":176},[159,152423,152332],{"class":1146},[159,152425,1486],{"class":165},[159,152427,19854],{"class":1146},[159,152429,1492],{"class":165},[159,152431,152432],{"class":161,"line":203},[159,152433,15685],{"class":165},[159,152435,152436,152438],{"class":161,"line":223},[159,152437,152347],{"class":185},[159,152439,1478],{"class":165},[159,152441,152442,152444,152446,152448],{"class":161,"line":233},[159,152443,152332],{"class":1146},[159,152445,1486],{"class":165},[159,152447,19623],{"class":1146},[159,152449,1492],{"class":165},[159,152451,152452],{"class":161,"line":239},[159,152453,15685],{"class":165},[14,152455,152456],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,152458,152459],{},"优点： 通俗易懂，书写方便",[14,152461,152462],{},"缺点： 添加许多无意义的标签，结构化较差",[14,152464,152465],{},"注意： 要求这个新的空标签必须是块级元素。",[14,152467,152468],{},"法二",[14,152470,152471],{},"父级添加overflow属性",[151,152473,152474],{"className":147852,"code":152318,"language":147854,"meta":25,"style":25},[49,152475,152476,152482,152492,152496,152502,152512],{"__ignoreMap":25},[159,152477,152478,152480],{"class":161,"line":162},[159,152479,152325],{"class":185},[159,152481,1478],{"class":165},[159,152483,152484,152486,152488,152490],{"class":161,"line":176},[159,152485,152332],{"class":1146},[159,152487,1486],{"class":165},[159,152489,19854],{"class":1146},[159,152491,1492],{"class":165},[159,152493,152494],{"class":161,"line":203},[159,152495,15685],{"class":165},[159,152497,152498,152500],{"class":161,"line":223},[159,152499,152347],{"class":185},[159,152501,1478],{"class":165},[159,152503,152504,152506,152508,152510],{"class":161,"line":233},[159,152505,152332],{"class":1146},[159,152507,1486],{"class":165},[159,152509,19623],{"class":1146},[159,152511,1492],{"class":165},[159,152513,152514],{"class":161,"line":239},[159,152515,15685],{"class":165},[14,152517,152518],{},"overflow: hidden;",[14,152520,152521],{},"优点：代码简洁",[14,152523,152524],{},"缺点：无法显示溢出的部分",[14,152526,152527],{},"注意：是给父元素添加代码",[14,152529,152530],{},"法三",[14,152532,152533],{},"父级添加after伪元素",[14,152535,152536,152539],{},[152537,152538],"after",{}," 方式是额外标签法的升级版",[14,152541,152542],{},"使用的时候复制就可以",[151,152544,152545],{"className":147852,"code":152318,"language":147854,"meta":25,"style":25},[49,152546,152547,152553,152563,152567,152573,152583],{"__ignoreMap":25},[159,152548,152549,152551],{"class":161,"line":162},[159,152550,152325],{"class":185},[159,152552,1478],{"class":165},[159,152554,152555,152557,152559,152561],{"class":161,"line":176},[159,152556,152332],{"class":1146},[159,152558,1486],{"class":165},[159,152560,19854],{"class":1146},[159,152562,1492],{"class":165},[159,152564,152565],{"class":161,"line":203},[159,152566,15685],{"class":165},[159,152568,152569,152571],{"class":161,"line":223},[159,152570,152347],{"class":185},[159,152572,1478],{"class":165},[159,152574,152575,152577,152579,152581],{"class":161,"line":233},[159,152576,152332],{"class":1146},[159,152578,1486],{"class":165},[159,152580,19623],{"class":1146},[159,152582,1492],{"class":165},[159,152584,152585],{"class":161,"line":239},[159,152586,15685],{"class":165},[14,152588,152589],{},"优点：没有增加标签，结构更简单",[14,152591,152592],{},"缺点：照顾低版本浏览器",[14,152594,152595],{},"代表网站： 百度、淘宝网、网易等",[14,152597,152598],{},"法四",[14,152600,152601],{},"父级添加双伪元素",[151,152603,152604],{"className":147852,"code":152318,"language":147854,"meta":25,"style":25},[49,152605,152606,152612,152622,152626,152632,152642],{"__ignoreMap":25},[159,152607,152608,152610],{"class":161,"line":162},[159,152609,152325],{"class":185},[159,152611,1478],{"class":165},[159,152613,152614,152616,152618,152620],{"class":161,"line":176},[159,152615,152332],{"class":1146},[159,152617,1486],{"class":165},[159,152619,19854],{"class":1146},[159,152621,1492],{"class":165},[159,152623,152624],{"class":161,"line":203},[159,152625,15685],{"class":165},[159,152627,152628,152630],{"class":161,"line":223},[159,152629,152347],{"class":185},[159,152631,1478],{"class":165},[159,152633,152634,152636,152638,152640],{"class":161,"line":233},[159,152635,152332],{"class":1146},[159,152637,1486],{"class":165},[159,152639,19623],{"class":1146},[159,152641,1492],{"class":165},[159,152643,152644],{"class":161,"line":239},[159,152645,15685],{"class":165},[14,152647,152648],{},"优点：代码更简洁",[14,152650,152592],{},[14,152652,152653],{},"代表网站：小米、腾讯等",[37,152655,152657],{"id":152656},"_93-ps切图","9.3 PS切图",[42,152659,152661],{"id":152660},"_931-常见图片格式","9.3.1 常见图片格式",[12347,152663,152664,152674],{},[16500,152665,152666],{},[12356,152667,152668,152671],{},[12365,152669,152670],{"align":19854},"jpg图像格式",[12365,152672,152673],{"align":19854},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[16624,152675,152676,152684,152692],{},[12356,152677,152678,152681],{},[12488,152679,152680],{"align":19854},"gif图像格式",[12488,152682,152683],{"align":19854},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[12356,152685,152686,152689],{},[12488,152687,152688],{"align":19854},"png图像格式",[12488,152690,152691],{"align":19854},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[12356,152693,152694,152697],{},[12488,152695,152696],{"align":19854},"PSD图像格式",[12488,152698,152699],{"align":19854},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[42,152701,152703],{"id":152702},"_932-图层切图","9.3.2 图层切图",[14,152705,152706],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,152708,152709],{},"按住shift选中两个图层->图层菜单->合并图层",[42,152711,152713],{"id":152712},"_933-切片切图","9.3.3 切片切图",[103,152715,152716,152719],{},[106,152717,152718],{},"利用切片工具手动划出",[106,152720,152721],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[42,152723,152725],{"id":152724},"_934-切图步骤","9.3.4 切图步骤",[14,152727,152728],{},"用切片工具选中：",[23,152730],{"style":147708,"src":152731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,152733,152734],{},"文件 -> 导出",[23,152736],{"style":147708,"src":152737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1468,152739,152740],{},"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":25,"searchDepth":176,"depth":176,"links":152742},[152743,152752,152756],{"id":151179,"depth":176,"text":151180,"children":152744},[152745,152746,152747,152748,152749,152750,152751],{"id":151204,"depth":203,"text":151205},{"id":151495,"depth":203,"text":151496},{"id":151624,"depth":203,"text":151625},{"id":151824,"depth":203,"text":151825},{"id":151866,"depth":203,"text":151867},{"id":151904,"depth":203,"text":151905},{"id":151994,"depth":203,"text":151995},{"id":152274,"depth":176,"text":152275,"children":152753},[152754,152755],{"id":152278,"depth":203,"text":152279},{"id":152285,"depth":203,"text":152286},{"id":152656,"depth":176,"text":152657,"children":152757},[152758,152759,152760,152761],{"id":152660,"depth":203,"text":152661},{"id":152702,"depth":203,"text":152703},{"id":152712,"depth":203,"text":152713},{"id":152724,"depth":203,"text":152725},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":151171,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":152768,"title":152769,"body":152770,"description":23809,"extension":23810,"meta":153411,"navigation":589,"path":153412,"seo":153413,"stem":153414,"__hash__":153415},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":152771,"toc":153399},[152772,152775,152779,152805,152839,152843,152847,152850,152892,152899,152909,152917,152919,152922,152925,152928,152935,152949,152953,152956,152985,152989,152992,153006,153010,153013,153041,153045,153048,153074,153078,153083,153116,153121,153149,153153,153170,153216,153221,153265,153282,153389,153397],[10,152773,152769],{"id":152774},"_10-css规范与学成在线案例",[37,152776,152778],{"id":152777},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[134,152780,152781,152787,152793,152799],{},[106,152782,152783,152786],{},[61,152784,152785],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[106,152788,152789,152792],{},[61,152790,152791],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[106,152794,152795,152798],{},[61,152796,152797],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[106,152800,152801,152804],{},[61,152802,152803],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[151,152806,152807],{"className":147852,"code":151216,"language":147854,"meta":25,"style":25},[49,152808,152809,152813,152819,152835],{"__ignoreMap":25},[159,152810,152811],{"class":161,"line":162},[159,152812,151223],{"class":1135},[159,152814,152815,152817],{"class":161,"line":176},[159,152816,182],{"class":169},[159,152818,1478],{"class":165},[159,152820,152821,152823,152825,152827,152829,152831,152833],{"class":161,"line":203},[159,152822,17983],{"class":1146},[159,152824,1486],{"class":165},[159,152826,4932],{"class":1146},[159,152828,1571],{"class":1142},[159,152830,7709],{"class":1146},[159,152832,151244],{"class":1146},[159,152834,1492],{"class":165},[159,152836,152837],{"class":161,"line":223},[159,152838,15685],{"class":165},[37,152840,152842],{"id":152841},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[42,152844,152846],{"id":152845},"_1021-header头部制作","10.2.1 header头部制作",[23,152848],{"style":147708,"src":152849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[103,152851,152852,152859,152866,152872,152879,152886],{},[106,152853,152854,152855,152858],{},"1号是版心盒子 ",[61,152856,152857],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[106,152860,152861,152862,152865],{},"版心盒子 里面包含 2号盒子 ",[61,152863,152864],{},"logo"," 图标",[106,152867,152868,152869,152871],{},"版心盒子 里面包含 3号盒子 ",[61,152870,426],{}," 导航栏",[106,152873,152874,152875,152878],{},"版心盒子 里面包含 4号盒子 ",[61,152876,152877],{},"search"," 搜索框",[106,152880,152881,152882,152885],{},"版心盒子 里面包含 5号盒子 ",[61,152883,152884],{},"user"," 个人信息",[106,152887,152888,152889],{},"注意，要求里面的 ",[61,152890,152891],{},"4个子盒子 必须都浮动",[134,152893,152894],{},[106,152895,152896],{},[61,152897,152898],{},"导航栏注意点:",[14,152900,152901,152902,152905,152906],{},"实际开发中， ",[61,152903,152904],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[61,152907,152908],{},"用 li 包含链接(li+a)的做法",[103,152910,152911,152914],{},[106,152912,152913],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[106,152915,152916],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,152918,32623],{},[14,152920,152921],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,152923,152924],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,152926,152927],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[134,152929,152930],{"start":176},[106,152931,152932],{},[61,152933,152934],{},"4号盒子search的细节：",[103,152936,152937,152940,152943],{},[106,152938,152939],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[106,152941,152942],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[106,152944,152945,152948],{},[49,152946,152947],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[42,152950,152952],{"id":152951},"_1022-banner制作","10.2.2 banner制作",[23,152954],{"style":147708,"src":152955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[103,152957,152958,152965,152971,152978],{},[106,152959,152960,152961,152964],{},"1号盒子是通栏的大盒子 ",[61,152962,152963],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[106,152966,152967,152968,152970],{},"2号盒子是版心 ",[61,152969,24625],{}," ， 要水平居中对齐",[106,152972,152973,152974,152977],{},"3号盒子版心内，左对齐 ",[61,152975,152976],{},"subnav"," 侧导航栏",[106,152979,152980,152981,152984],{},"4号盒子版心内，右对齐 ",[61,152982,152983],{},"course"," 课程",[42,152986,152988],{"id":152987},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[23,152990],{"style":147708,"src":152991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[103,152993,152994,152997,153000,153003],{},[106,152995,152996],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[106,152998,152999],{},"1号盒子是标题 H3 左侧浮动",[106,153001,153002],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[106,153004,153005],{},"3号盒子 右浮动 mod 修改",[42,153007,153009],{"id":153008},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[23,153011],{"style":147708,"src":153012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[103,153014,153015,153021,153028,153035,153038],{},[106,153016,153017,153018,153020],{},"1号盒子为最大的盒子 ",[61,153019,427],{}," 版心水平居中对齐",[106,153022,153023,153024,153027],{},"2号盒子为上面部分 ",[61,153025,153026],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[106,153029,153030,153031,153034],{},"3号盒子为底下部分 ",[61,153032,153033],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[106,153036,153037],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[106,153039,153040],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[42,153042,153044],{"id":153043},"_1025-底部模块制作","10.2.5 底部模块制作",[23,153046],{"style":147708,"src":153047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[103,153049,153050,153057,153060,153067],{},[106,153051,153052,153053,153056],{},"1号盒子通栏大盒子 底部 ",[61,153054,153055],{},"footer"," 给高度 底色是白色",[106,153058,153059],{},"2号盒子版心水平居中",[106,153061,153062,153063,153066],{},"3号盒子版权 ",[61,153064,153065],{},"copyright"," 左对齐",[106,153068,153069,153070,153073],{},"4号盒子 链接组 ",[61,153071,153072],{},"links"," 右对齐",[42,153075,153077],{"id":153076},"_1026-代码模块","10.2.6 代码模块",[134,153079,153080],{},[106,153081,153082],{},"html部分",[151,153084,153086],{"className":148599,"code":153085,"language":148601,"meta":25,"style":25},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[49,153087,153088],{"__ignoreMap":25},[159,153089,153090,153092,153094,153096,153098,153101,153104,153106,153109,153112,153114],{"class":161,"line":162},[159,153091,166],{"class":165},[159,153093,8085],{"class":169},[159,153095,8088],{"class":185},[159,153097,189],{"class":165},[159,153099,153100],{"class":192},"\"https:\u002F\u002Fexample.com\"",[159,153102,153103],{"class":185}," target",[159,153105,189],{"class":165},[159,153107,153108],{"class":192},"\"_blank\"",[159,153110,153111],{"class":165},">链接文字\u003C\u002F",[159,153113,8085],{"class":169},[159,153115,173],{"class":165},[134,153117,153118],{"start":176},[106,153119,153120],{},"css部分",[151,153122,153123],{"className":148599,"code":153085,"language":148601,"meta":25,"style":25},[49,153124,153125],{"__ignoreMap":25},[159,153126,153127,153129,153131,153133,153135,153137,153139,153141,153143,153145,153147],{"class":161,"line":162},[159,153128,166],{"class":165},[159,153130,8085],{"class":169},[159,153132,8088],{"class":185},[159,153134,189],{"class":165},[159,153136,153100],{"class":192},[159,153138,153103],{"class":185},[159,153140,189],{"class":165},[159,153142,153108],{"class":192},[159,153144,153111],{"class":165},[159,153146,8085],{"class":169},[159,153148,173],{"class":165},[42,153150,153152],{"id":153151},"_1027-收获","10.2.7 收获",[134,153154,153155,153158,153161,153164,153167],{},[106,153156,153157],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[106,153159,153160],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[106,153162,153163],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[106,153165,153166],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[106,153168,153169],{},"遗忘代码",[151,153171,153173],{"className":147852,"code":153172,"language":147854,"meta":25,"style":25},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[49,153174,153175,153197,153202,153212],{"__ignoreMap":25},[159,153176,153177,153179,153181,153183,153185,153187,153189,153191,153193,153195],{"class":161,"line":162},[159,153178,182],{"class":169},[159,153180,1939],{"class":165},[159,153182,14],{"class":169},[159,153184,1939],{"class":165},[159,153186,10],{"class":169},[159,153188,1939],{"class":165},[159,153190,103],{"class":169},[159,153192,1939],{"class":165},[159,153194,106],{"class":169},[159,153196,1478],{"class":165},[159,153198,153199],{"class":161,"line":176},[159,153200,153201],{"class":1135},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[159,153203,153204,153206,153208,153210],{"class":161,"line":203},[159,153205,149468],{"class":1146},[159,153207,1486],{"class":165},[159,153209,7896],{"class":1146},[159,153211,1492],{"class":165},[159,153213,153214],{"class":161,"line":223},[159,153215,15685],{"class":165},[134,153217,153218],{"start":239},[106,153219,153220],{},"html引css的程序",[151,153222,153223],{"className":147852,"code":153172,"language":147854,"meta":25,"style":25},[49,153224,153225,153247,153251,153261],{"__ignoreMap":25},[159,153226,153227,153229,153231,153233,153235,153237,153239,153241,153243,153245],{"class":161,"line":162},[159,153228,182],{"class":169},[159,153230,1939],{"class":165},[159,153232,14],{"class":169},[159,153234,1939],{"class":165},[159,153236,10],{"class":169},[159,153238,1939],{"class":165},[159,153240,103],{"class":169},[159,153242,1939],{"class":165},[159,153244,106],{"class":169},[159,153246,1478],{"class":165},[159,153248,153249],{"class":161,"line":176},[159,153250,153201],{"class":1135},[159,153252,153253,153255,153257,153259],{"class":161,"line":203},[159,153254,149468],{"class":1146},[159,153256,1486],{"class":165},[159,153258,7896],{"class":1146},[159,153260,1492],{"class":165},[159,153262,153263],{"class":161,"line":223},[159,153264,15685],{"class":165},[134,153266,153267,153270,153273,153276,153279],{"start":245},[106,153268,153269],{},"浮动的盒子不会有外边距合并问题",[106,153271,153272],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[106,153274,153275],{},"ctrl+g快速定位行；shift+alt多个光标",[106,153277,153278],{},"学习上方各个模块的选择器起名方法，以后就这样用",[106,153280,153281],{},"在写选择器时尽量写全一些，例如",[151,153283,153285],{"className":147852,"code":153284,"language":147854,"meta":25,"style":25},"\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",[49,153286,153287,153292,153308,153313,153328,153333,153348,153353,153368,153373],{"__ignoreMap":25},[159,153288,153289],{"class":161,"line":162},[159,153290,153291],{"class":1135},"\u002F* 静态定位（默认） *\u002F\n",[159,153293,153294,153297,153299,153301,153303,153306],{"class":161,"line":176},[159,153295,153296],{"class":185},".static",[159,153298,101107],{"class":165},[159,153300,150212],{"class":1146},[159,153302,1486],{"class":165},[159,153304,153305],{"class":1146},"static",[159,153307,150782],{"class":165},[159,153309,153310],{"class":161,"line":203},[159,153311,153312],{"class":1135},"\u002F* 相对定位 *\u002F\n",[159,153314,153315,153318,153320,153322,153324,153326],{"class":161,"line":223},[159,153316,153317],{"class":185},".relative",[159,153319,101107],{"class":165},[159,153321,150212],{"class":1146},[159,153323,1486],{"class":165},[159,153325,1556],{"class":1146},[159,153327,150782],{"class":165},[159,153329,153330],{"class":161,"line":233},[159,153331,153332],{"class":1135},"\u002F* 绝对定位 *\u002F\n",[159,153334,153335,153338,153340,153342,153344,153346],{"class":161,"line":239},[159,153336,153337],{"class":185},".absolute",[159,153339,101107],{"class":165},[159,153341,150212],{"class":1146},[159,153343,1486],{"class":165},[159,153345,1627],{"class":1146},[159,153347,150782],{"class":165},[159,153349,153350],{"class":161,"line":245},[159,153351,153352],{"class":1135},"\u002F* 固定定位 *\u002F\n",[159,153354,153355,153358,153360,153362,153364,153366],{"class":161,"line":251},[159,153356,153357],{"class":185},".fixed",[159,153359,101107],{"class":165},[159,153361,150212],{"class":1146},[159,153363,1486],{"class":165},[159,153365,107533],{"class":1146},[159,153367,150782],{"class":165},[159,153369,153370],{"class":161,"line":261},[159,153371,153372],{"class":1135},"\u002F* 粘性定位 *\u002F\n",[159,153374,153375,153378,153380,153382,153384,153387],{"class":161,"line":603},[159,153376,153377],{"class":185},".sticky",[159,153379,101107],{"class":165},[159,153381,150212],{"class":1146},[159,153383,1486],{"class":165},[159,153385,153386],{"class":1146},"sticky",[159,153388,150782],{"class":165},[134,153390,153391,153394],{"start":634},[106,153392,153393],{},"一定要用好注释",[106,153395,153396],{},"浮动的盒子不会有外边距合并的问题",[1468,153398,152740],{},{"title":25,"searchDepth":176,"depth":176,"links":153400},[153401,153402],{"id":152777,"depth":176,"text":152778},{"id":152841,"depth":176,"text":152842,"children":153403},[153404,153405,153406,153407,153408,153409,153410],{"id":152845,"depth":203,"text":152846},{"id":152951,"depth":203,"text":152952},{"id":152987,"depth":203,"text":152988},{"id":153008,"depth":203,"text":153009},{"id":153043,"depth":203,"text":153044},{"id":153076,"depth":203,"text":153077},{"id":153151,"depth":203,"text":153152},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":152769,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":153417,"title":153418,"body":153419,"description":23809,"extension":23810,"meta":154905,"navigation":589,"path":154906,"seo":154907,"stem":154908,"__hash__":154909},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":153420,"toc":154897},[153421,153424,153428,153432,153443,153447,153464,153508,153541,153544,153561,153564,153567,153611,153615,153619,153622,153625,153629,153632,153643,153706,153747,153750,153765,153819,153827,153830,153841,153895,153921,153924,153937,153991,154023,154077,154100,154154,154157,154160,154167,154221,154242,154296,154299,154302,154387,154395,154452,154475,154479,154482,154500,154504,154523,154577,154615,154619,154622,154625,154647,154651,154659,154662,154667,154678,154681,154685,154699,154743,154746,154750,154753,154758,154784,154789,154866,154869,154873,154876,154879,154882,154885,154888,154891,154894],[10,153422,153418],{"id":153423},"_11-传统布局与定位体系",[37,153425,153427],{"id":153426},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[42,153429,153431],{"id":153430},"_1111-普通流标准流","11.1.1 普通流（标准流）",[103,153433,153434,153437,153440],{},[106,153435,153436],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[106,153438,153439],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[106,153441,153442],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[42,153444,153446],{"id":153445},"_1112-浮动","11.1.2 浮动",[103,153448,153449,153452,153455,153458,153461],{},[106,153450,153451],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[106,153453,153454],{},"浮动可以改变元素标签默认的排列方式",[106,153456,153457],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[106,153459,153460],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[106,153462,153463],{},"在使用行内块转换时盒子之间是有空隙的",[151,153465,153466],{"className":147852,"code":152318,"language":147854,"meta":25,"style":25},[49,153467,153468,153474,153484,153488,153494,153504],{"__ignoreMap":25},[159,153469,153470,153472],{"class":161,"line":162},[159,153471,152325],{"class":185},[159,153473,1478],{"class":165},[159,153475,153476,153478,153480,153482],{"class":161,"line":176},[159,153477,152332],{"class":1146},[159,153479,1486],{"class":165},[159,153481,19854],{"class":1146},[159,153483,1492],{"class":165},[159,153485,153486],{"class":161,"line":203},[159,153487,15685],{"class":165},[159,153489,153490,153492],{"class":161,"line":223},[159,153491,152347],{"class":185},[159,153493,1478],{"class":165},[159,153495,153496,153498,153500,153502],{"class":161,"line":233},[159,153497,152332],{"class":1146},[159,153499,1486],{"class":165},[159,153501,19623],{"class":1146},[159,153503,1492],{"class":165},[159,153505,153506],{"class":161,"line":239},[159,153507,15685],{"class":165},[12347,153509,153510,153518],{},[16500,153511,153512],{},[12356,153513,153514,153516],{},[12365,153515,148316],{"align":19854},[12365,153517,51012],{"align":19854},[16624,153519,153520,153527,153534],{},[12356,153521,153522,153524],{},[12488,153523,1529],{"align":19854},[12488,153525,153526],{"align":19854},"元素不浮动（默认值）",[12356,153528,153529,153531],{},[12488,153530,19854],{"align":19854},[12488,153532,153533],{"align":19854},"元素向左浮动",[12356,153535,153536,153538],{},[12488,153537,19623],{"align":19854},[12488,153539,153540],{"align":19854},"元素向右浮动",[14,153542,153543],{},"浮动重点：",[103,153545,153546,153549,153552,153555,153558],{},[106,153547,153548],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[106,153550,153551],{},"浮动的元素会一行内显示并且元素顶部对齐",[106,153553,153554],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[106,153556,153557],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[106,153559,153560],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,153562,153563],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,153565,153566],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[151,153568,153569],{"className":147852,"code":152318,"language":147854,"meta":25,"style":25},[49,153570,153571,153577,153587,153591,153597,153607],{"__ignoreMap":25},[159,153572,153573,153575],{"class":161,"line":162},[159,153574,152325],{"class":185},[159,153576,1478],{"class":165},[159,153578,153579,153581,153583,153585],{"class":161,"line":176},[159,153580,152332],{"class":1146},[159,153582,1486],{"class":165},[159,153584,19854],{"class":1146},[159,153586,1492],{"class":165},[159,153588,153589],{"class":161,"line":203},[159,153590,15685],{"class":165},[159,153592,153593,153595],{"class":161,"line":223},[159,153594,152347],{"class":185},[159,153596,1478],{"class":165},[159,153598,153599,153601,153603,153605],{"class":161,"line":233},[159,153600,152332],{"class":1146},[159,153602,1486],{"class":165},[159,153604,19623],{"class":1146},[159,153606,1492],{"class":165},[159,153608,153609],{"class":161,"line":239},[159,153610,15685],{"class":165},[42,153612,153614],{"id":153613},"_1113-定位","11.1.3 定位",[326,153616,153618],{"id":153617},"_11131-使用场景","11.1.3.1 使用场景",[14,153620,153621],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,153623,153624],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[326,153626,153628],{"id":153627},"_11132-定位组成","11.1.3.2 定位组成",[14,153630,153631],{},"定位 = 定位模式 + 边偏移",[134,153633,153634],{},[106,153635,153636,153639,153640],{},[61,153637,153638],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[61,153641,153642],{},"定位模式",[151,153644,153646],{"className":147852,"code":153645,"language":147854,"meta":25,"style":25},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[49,153647,153648,153654,153668,153685,153702],{"__ignoreMap":25},[159,153649,153650,153652],{"class":161,"line":162},[159,153651,151700],{"class":185},[159,153653,1478],{"class":165},[159,153655,153656,153659,153661,153663,153665],{"class":161,"line":176},[159,153657,153658],{"class":1146},"  position",[159,153660,1486],{"class":165},[159,153662,1556],{"class":1146},[159,153664,151715],{"class":165},[159,153666,153667],{"class":1135},"\u002F* 定位模式 *\u002F\n",[159,153669,153670,153673,153675,153677,153679,153682],{"class":161,"line":203},[159,153671,153672],{"class":1146},"  top",[159,153674,1486],{"class":165},[159,153676,1964],{"class":1146},[159,153678,1571],{"class":1142},[159,153680,153681],{"class":165},";           ",[159,153683,153684],{"class":1135},"\u002F* 边偏移：上 *\u002F\n",[159,153686,153687,153690,153692,153694,153696,153699],{"class":161,"line":223},[159,153688,153689],{"class":1146},"  left",[159,153691,1486],{"class":165},[159,153693,1739],{"class":1146},[159,153695,1571],{"class":1142},[159,153697,153698],{"class":165},";          ",[159,153700,153701],{"class":1135},"\u002F* 边偏移：左 *\u002F\n",[159,153703,153704],{"class":161,"line":233},[159,153705,15685],{"class":165},[12347,153707,153708,153717],{},[16500,153709,153710],{},[12356,153711,153712,153714],{},[12365,153713,24022],{"align":19854},[12365,153715,153716],{"align":19854},"语义",[16624,153718,153719,153726,153733,153740],{},[12356,153720,153721,153723],{},[12488,153722,153305],{"align":19854},[12488,153724,153725],{"align":19854},"静态定位",[12356,153727,153728,153730],{},[12488,153729,1556],{"align":19854},[12488,153731,153732],{"align":19854},"相对定位",[12356,153734,153735,153737],{},[12488,153736,1627],{"align":19854},[12488,153738,153739],{"align":19854},"绝对定位",[12356,153741,153742,153744],{},[12488,153743,107533],{"align":19854},[12488,153745,153746],{"align":19854},"固定定位",[14,153748,153749],{},"（1）静态定位：",[103,153751,153752,153763],{},[106,153753,153754,153755,153758,153759,153762],{},"静态定位是元素的 ",[61,153756,153757],{},"默认定位方式"," ， ",[61,153760,153761],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[106,153764,28799],{},[151,153766,153767],{"className":147852,"code":153645,"language":147854,"meta":25,"style":25},[49,153768,153769,153775,153787,153801,153815],{"__ignoreMap":25},[159,153770,153771,153773],{"class":161,"line":162},[159,153772,151700],{"class":185},[159,153774,1478],{"class":165},[159,153776,153777,153779,153781,153783,153785],{"class":161,"line":176},[159,153778,153658],{"class":1146},[159,153780,1486],{"class":165},[159,153782,1556],{"class":1146},[159,153784,151715],{"class":165},[159,153786,153667],{"class":1135},[159,153788,153789,153791,153793,153795,153797,153799],{"class":161,"line":203},[159,153790,153672],{"class":1146},[159,153792,1486],{"class":165},[159,153794,1964],{"class":1146},[159,153796,1571],{"class":1142},[159,153798,153681],{"class":165},[159,153800,153684],{"class":1135},[159,153802,153803,153805,153807,153809,153811,153813],{"class":161,"line":223},[159,153804,153689],{"class":1146},[159,153806,1486],{"class":165},[159,153808,1739],{"class":1146},[159,153810,1571],{"class":1142},[159,153812,153698],{"class":165},[159,153814,153701],{"class":1135},[159,153816,153817],{"class":161,"line":233},[159,153818,15685],{"class":165},[103,153820,153821,153824],{},[106,153822,153823],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[106,153825,153826],{},"静态定位在布局时我们几乎不用的",[14,153828,153829],{},"（2）相对定位",[103,153831,153832,153839],{},[106,153833,153834,153835,153838],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[61,153836,153837],{},"原来的位置"," 来说的（自恋型）",[106,153840,28799],{},[151,153842,153843],{"className":147852,"code":153645,"language":147854,"meta":25,"style":25},[49,153844,153845,153851,153863,153877,153891],{"__ignoreMap":25},[159,153846,153847,153849],{"class":161,"line":162},[159,153848,151700],{"class":185},[159,153850,1478],{"class":165},[159,153852,153853,153855,153857,153859,153861],{"class":161,"line":176},[159,153854,153658],{"class":1146},[159,153856,1486],{"class":165},[159,153858,1556],{"class":1146},[159,153860,151715],{"class":165},[159,153862,153667],{"class":1135},[159,153864,153865,153867,153869,153871,153873,153875],{"class":161,"line":203},[159,153866,153672],{"class":1146},[159,153868,1486],{"class":165},[159,153870,1964],{"class":1146},[159,153872,1571],{"class":1142},[159,153874,153681],{"class":165},[159,153876,153684],{"class":1135},[159,153878,153879,153881,153883,153885,153887,153889],{"class":161,"line":223},[159,153880,153689],{"class":1146},[159,153882,1486],{"class":165},[159,153884,1739],{"class":1146},[159,153886,1571],{"class":1142},[159,153888,153698],{"class":165},[159,153890,153701],{"class":1135},[159,153892,153893],{"class":161,"line":233},[159,153894,15685],{"class":165},[103,153896,153897],{},[106,153898,153899,153900,153902,153903,153905,153906,153909,153910,153913,153914,153916,153917,153920],{},"相对定位的特点：",[429,153901],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[429,153904],{},"  ② ",[61,153907,153908],{},"原来"," 在标准流的 ",[61,153911,153912],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[429,153915],{},"  ③因此， ",[61,153918,153919],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,153922,153923],{},"（3）绝对定位",[103,153925,153926,153935],{},[106,153927,153928,153930,153931,153934],{},[61,153929,153739],{}," 是元素在移动位置的时候，是相对于它 ",[61,153932,153933],{},"祖先元素"," 来说的（拼爹型）",[106,153936,28799],{},[151,153938,153939],{"className":147852,"code":153645,"language":147854,"meta":25,"style":25},[49,153940,153941,153947,153959,153973,153987],{"__ignoreMap":25},[159,153942,153943,153945],{"class":161,"line":162},[159,153944,151700],{"class":185},[159,153946,1478],{"class":165},[159,153948,153949,153951,153953,153955,153957],{"class":161,"line":176},[159,153950,153658],{"class":1146},[159,153952,1486],{"class":165},[159,153954,1556],{"class":1146},[159,153956,151715],{"class":165},[159,153958,153667],{"class":1135},[159,153960,153961,153963,153965,153967,153969,153971],{"class":161,"line":203},[159,153962,153672],{"class":1146},[159,153964,1486],{"class":165},[159,153966,1964],{"class":1146},[159,153968,1571],{"class":1142},[159,153970,153681],{"class":165},[159,153972,153684],{"class":1135},[159,153974,153975,153977,153979,153981,153983,153985],{"class":161,"line":223},[159,153976,153689],{"class":1146},[159,153978,1486],{"class":165},[159,153980,1739],{"class":1146},[159,153982,1571],{"class":1142},[159,153984,153698],{"class":165},[159,153986,153701],{"class":1135},[159,153988,153989],{"class":161,"line":233},[159,153990,15685],{"class":165},[103,153992,153993,154008,154017,154020],{},[106,153994,153995,153996,153998,153999,154001,154002,154004,154005,154007],{},"绝对定位的特点：",[429,153997],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[429,154000],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[429,154003],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[429,154006],{},"  (4)固定定位",[106,154009,154010,154012,154013,154016],{},[61,154011,153746],{}," 是元素 ",[61,154014,154015],{},"固定于浏览器可视区的位置"," 。（认死理型）",[106,154018,154019],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[106,154021,154022],{},"语法:",[151,154024,154025],{"className":147852,"code":153645,"language":147854,"meta":25,"style":25},[49,154026,154027,154033,154045,154059,154073],{"__ignoreMap":25},[159,154028,154029,154031],{"class":161,"line":162},[159,154030,151700],{"class":185},[159,154032,1478],{"class":165},[159,154034,154035,154037,154039,154041,154043],{"class":161,"line":176},[159,154036,153658],{"class":1146},[159,154038,1486],{"class":165},[159,154040,1556],{"class":1146},[159,154042,151715],{"class":165},[159,154044,153667],{"class":1135},[159,154046,154047,154049,154051,154053,154055,154057],{"class":161,"line":203},[159,154048,153672],{"class":1146},[159,154050,1486],{"class":165},[159,154052,1964],{"class":1146},[159,154054,1571],{"class":1142},[159,154056,153681],{"class":165},[159,154058,153684],{"class":1135},[159,154060,154061,154063,154065,154067,154069,154071],{"class":161,"line":223},[159,154062,153689],{"class":1146},[159,154064,1486],{"class":165},[159,154066,1739],{"class":1146},[159,154068,1571],{"class":1142},[159,154070,153698],{"class":165},[159,154072,153701],{"class":1135},[159,154074,154075],{"class":161,"line":233},[159,154076,15685],{"class":165},[103,154078,154079,154088],{},[106,154080,154081,154082,154084,154085,154087],{},"特点:",[429,154083],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[429,154086],{},"  ②固定定位不再占有原先的位置,完全脱标",[106,154089,154090,154091,154093,154094,154096,154097,154099],{},"固定在版心位置的方法:",[429,154092],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[429,154095],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[429,154098],{},"  实例：",[151,154101,154102],{"className":147852,"code":153645,"language":147854,"meta":25,"style":25},[49,154103,154104,154110,154122,154136,154150],{"__ignoreMap":25},[159,154105,154106,154108],{"class":161,"line":162},[159,154107,151700],{"class":185},[159,154109,1478],{"class":165},[159,154111,154112,154114,154116,154118,154120],{"class":161,"line":176},[159,154113,153658],{"class":1146},[159,154115,1486],{"class":165},[159,154117,1556],{"class":1146},[159,154119,151715],{"class":165},[159,154121,153667],{"class":1135},[159,154123,154124,154126,154128,154130,154132,154134],{"class":161,"line":203},[159,154125,153672],{"class":1146},[159,154127,1486],{"class":165},[159,154129,1964],{"class":1146},[159,154131,1571],{"class":1142},[159,154133,153681],{"class":165},[159,154135,153684],{"class":1135},[159,154137,154138,154140,154142,154144,154146,154148],{"class":161,"line":223},[159,154139,153689],{"class":1146},[159,154141,1486],{"class":165},[159,154143,1739],{"class":1146},[159,154145,1571],{"class":1142},[159,154147,153698],{"class":165},[159,154149,153701],{"class":1135},[159,154151,154152],{"class":161,"line":233},[159,154153,15685],{"class":165},[23,154155],{"style":147708,"src":154156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,154158,154159],{},"(5)粘性定位",[103,154161,154162,154165],{},[106,154163,154164],{},"粘性定位可以被认为是相对定位和固定定位的混合",[106,154166,28799],{},[151,154168,154169],{"className":147852,"code":153645,"language":147854,"meta":25,"style":25},[49,154170,154171,154177,154189,154203,154217],{"__ignoreMap":25},[159,154172,154173,154175],{"class":161,"line":162},[159,154174,151700],{"class":185},[159,154176,1478],{"class":165},[159,154178,154179,154181,154183,154185,154187],{"class":161,"line":176},[159,154180,153658],{"class":1146},[159,154182,1486],{"class":165},[159,154184,1556],{"class":1146},[159,154186,151715],{"class":165},[159,154188,153667],{"class":1135},[159,154190,154191,154193,154195,154197,154199,154201],{"class":161,"line":203},[159,154192,153672],{"class":1146},[159,154194,1486],{"class":165},[159,154196,1964],{"class":1146},[159,154198,1571],{"class":1142},[159,154200,153681],{"class":165},[159,154202,153684],{"class":1135},[159,154204,154205,154207,154209,154211,154213,154215],{"class":161,"line":223},[159,154206,153689],{"class":1146},[159,154208,1486],{"class":165},[159,154210,1739],{"class":1146},[159,154212,1571],{"class":1142},[159,154214,153698],{"class":165},[159,154216,153701],{"class":1135},[159,154218,154219],{"class":161,"line":233},[159,154220,15685],{"class":165},[103,154222,154223],{},[106,154224,154225,154226,154228,154229,154231,154232,154234,154235,154238,154239,154241],{},"粘性定位的特点：",[429,154227],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[429,154230],{},"  ②粘性定位占有原先的位置（相对定位特点）",[429,154233],{},"  ③必须添加 top 、left、right、bottom ",[61,154236,154237],{},"其中一个"," 才有效",[429,154240],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[151,154243,154244],{"className":147852,"code":153645,"language":147854,"meta":25,"style":25},[49,154245,154246,154252,154264,154278,154292],{"__ignoreMap":25},[159,154247,154248,154250],{"class":161,"line":162},[159,154249,151700],{"class":185},[159,154251,1478],{"class":165},[159,154253,154254,154256,154258,154260,154262],{"class":161,"line":176},[159,154255,153658],{"class":1146},[159,154257,1486],{"class":165},[159,154259,1556],{"class":1146},[159,154261,151715],{"class":165},[159,154263,153667],{"class":1135},[159,154265,154266,154268,154270,154272,154274,154276],{"class":161,"line":203},[159,154267,153672],{"class":1146},[159,154269,1486],{"class":165},[159,154271,1964],{"class":1146},[159,154273,1571],{"class":1142},[159,154275,153681],{"class":165},[159,154277,153684],{"class":1135},[159,154279,154280,154282,154284,154286,154288,154290],{"class":161,"line":223},[159,154281,153689],{"class":1146},[159,154283,1486],{"class":165},[159,154285,1739],{"class":1146},[159,154287,1571],{"class":1142},[159,154289,153698],{"class":165},[159,154291,153701],{"class":1135},[159,154293,154294],{"class":161,"line":233},[159,154295,15685],{"class":165},[23,154297],{"style":147708,"src":154298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,154300,154301],{},"(6)总结",[12347,154303,154304,154319],{},[16500,154305,154306],{},[12356,154307,154308,154310,154313,154316],{},[12365,154309,153642],{"align":19854},[12365,154311,154312],{"align":19854},"是否脱标",[12365,154314,154315],{"align":19854},"移动位置",[12365,154317,154318],{"align":19854},"是否常用",[16624,154320,154321,154334,154348,154362,154375],{},[12356,154322,154323,154326,154328,154331],{},[12488,154324,154325],{"align":19854},"Static 静态定位",[12488,154327,125978],{"align":19854},[12488,154329,154330],{"align":19854},"不能使用边偏移",[12488,154332,154333],{"align":19854},"很少",[12356,154335,154336,154339,154342,154345],{},[12488,154337,154338],{"align":19854},"Relative 相对定位",[12488,154340,154341],{"align":19854},"否(占有位置)",[12488,154343,154344],{"align":19854},"相对于自身位置移动",[12488,154346,154347],{"align":19854},"基本单独使用",[12356,154349,154350,154353,154356,154359],{},[12488,154351,154352],{"align":19854},"Absolute 绝对定位",[12488,154354,154355],{"align":19854},"是(不占有位置)",[12488,154357,154358],{"align":19854},"带有定位的父级",[12488,154360,154361],{"align":19854},"要和定位父级元素搭配使用",[12356,154363,154364,154367,154369,154372],{},[12488,154365,154366],{"align":19854},"Fixed 固定定位",[12488,154368,154355],{"align":19854},[12488,154370,154371],{"align":19854},"浏览器可视区",[12488,154373,154374],{"align":19854},"单独使用,不需要父级",[12356,154376,154377,154380,154382,154384],{},[12488,154378,154379],{"align":19854},"Sticky 粘性定位",[12488,154381,154341],{"align":19854},[12488,154383,154371],{"align":19854},[12488,154385,154386],{"align":19854},"当前阶段少",[134,154388,154389],{"start":176},[106,154390,154391,154394],{},[61,154392,154393],{},"边偏移"," 则决定了该元素的最终位置",[12347,154396,154397,154408],{},[16500,154398,154399],{},[12356,154400,154401,154404,154406],{},[12365,154402,154403],{"align":19854},"边偏移属性",[12365,154405,51015],{"align":19854},[12365,154407,51012],{"align":19854},[16624,154409,154410,154421,154432,154442],{},[12356,154411,154412,154415,154418],{},[12488,154413,154414],{"align":19854},"top",[12488,154416,154417],{"align":19854},"top: 80px;",[12488,154419,154420],{"align":19854},"顶端偏移量，定义元素相对于父元素上边线的距离",[12356,154422,154423,154426,154429],{},[12488,154424,154425],{"align":19854},"bottom",[12488,154427,154428],{"align":19854},"bottom: 80px ;",[12488,154430,154431],{"align":19854},"底部偏移量，定义元素相对于其父元素下边线的距离",[12356,154433,154434,154436,154439],{},[12488,154435,19854],{"align":19854},[12488,154437,154438],{"align":19854},"left: 80px ;",[12488,154440,154441],{"align":19854},"左侧偏移量，定义元素相对于其父元素左边线的距离",[12356,154443,154444,154446,154449],{},[12488,154445,19623],{"align":19854},[12488,154447,154448],{"align":19854},"right: 80px ;",[12488,154450,154451],{"align":19854},"右侧偏移量，定义元素相对于其父元素右边线的距离",[103,154453,154454],{},[106,154455,32623,154456,154458,154459,154461,154462,154464,154465,154468,154469,154471,154472,154474],{},[429,154457],{},"  ① ",[61,154460,154393],{}," 需要和 ",[61,154463,153642],{}," 联合使用， ",[61,154466,154467],{},"单独使用无效"," ；",[429,154470],{},"  ②top和bottom不要同时使用",[429,154473],{},"  ③left和right不要同时使用",[326,154476,154478],{"id":154477},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,154480,154481],{},"子级是绝对定位的话，父级要用相对定位",[103,154483,154484,154487,154490,154493],{},[106,154485,154486],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[106,154488,154489],{},"父盒子需要加定位限制子盒子在父盒子内显示",[106,154491,154492],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[106,154494,154495,154496,154499],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[61,154497,154498],{},"子绝父绝"," 也会遇到",[326,154501,154503],{"id":154502},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[103,154505,154506,154521],{},[106,154507,154508,154509,154512,154513,154516,154517,154520],{},"在使用 ",[61,154510,154511],{},"定位"," 布局时，可能会 ",[61,154514,154515],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[61,154518,154519],{},"z-index"," 来控制盒子的前后次序 (z轴)",[106,154522,28799],{},[151,154524,154525],{"className":147852,"code":153645,"language":147854,"meta":25,"style":25},[49,154526,154527,154533,154545,154559,154573],{"__ignoreMap":25},[159,154528,154529,154531],{"class":161,"line":162},[159,154530,151700],{"class":185},[159,154532,1478],{"class":165},[159,154534,154535,154537,154539,154541,154543],{"class":161,"line":176},[159,154536,153658],{"class":1146},[159,154538,1486],{"class":165},[159,154540,1556],{"class":1146},[159,154542,151715],{"class":165},[159,154544,153667],{"class":1135},[159,154546,154547,154549,154551,154553,154555,154557],{"class":161,"line":203},[159,154548,153672],{"class":1146},[159,154550,1486],{"class":165},[159,154552,1964],{"class":1146},[159,154554,1571],{"class":1142},[159,154556,153681],{"class":165},[159,154558,153684],{"class":1135},[159,154560,154561,154563,154565,154567,154569,154571],{"class":161,"line":223},[159,154562,153689],{"class":1146},[159,154564,1486],{"class":165},[159,154566,1739],{"class":1146},[159,154568,1571],{"class":1142},[159,154570,153698],{"class":165},[159,154572,153701],{"class":1135},[159,154574,154575],{"class":161,"line":233},[159,154576,15685],{"class":165},[103,154578,154579],{},[106,154580,154581,154582,154458,154584,154586,154587,149015,154590,103839,154593,154595,154596,154598,154599,154602,154603,154468,154606,154608,154609,154612,154614],{},"z-index的特性",[429,154583],{},[61,154585,148316],{}," ： ",[61,154588,154589],{},"正整数",[61,154591,154592],{},"负整数",[61,154594,1489],{}," ，默认值是 0，数值越大，盒子越靠上；",[429,154597],{},"  ②如果 ",[61,154600,154601],{},"属性值相同"," ，则按照书写顺序， ",[61,154604,154605],{},"后来居上",[429,154607],{},"  ③数字后面 ",[61,154610,154611],{},"不能加单位",[429,154613],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[326,154616,154618],{"id":154617},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,154620,154621],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,154623,154624],{},"方法:",[103,154626,154627,154637],{},[106,154628,154629,154630,154633,154634],{},"left: 50%; 让 ",[61,154631,154632],{},"盒子的左侧"," 移动到 ",[61,154635,154636],{},"父级元素的水平中心位置",[106,154638,154639,154640,154643,154644],{},"margin-left: -100px; 让盒子 ",[61,154641,154642],{},"向左"," 移动 ",[61,154645,154646],{},"自身宽度的一半",[326,154648,154650],{"id":154649},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[134,154652,154653,154656],{},[106,154654,154655],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[106,154657,154658],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,154660,154661],{},"也就是说绝对定位和固定定位和浮动类似",[134,154663,154664],{"start":203},[106,154665,154666],{},"display 是显示模式， 可以改变显示模式有以下方式:",[103,154668,154669,154672,154675],{},[106,154670,154671],{},"可以用inline-block 转换为行内块",[106,154673,154674],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[106,154676,154677],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,154679,154680],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[326,154682,154684],{"id":154683},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[134,154686,154687,154690,154693,154696],{},[106,154688,154689],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[106,154691,154692],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[106,154694,154695],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[106,154697,154698],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[151,154700,154701],{"className":147852,"code":152318,"language":147854,"meta":25,"style":25},[49,154702,154703,154709,154719,154723,154729,154739],{"__ignoreMap":25},[159,154704,154705,154707],{"class":161,"line":162},[159,154706,152325],{"class":185},[159,154708,1478],{"class":165},[159,154710,154711,154713,154715,154717],{"class":161,"line":176},[159,154712,152332],{"class":1146},[159,154714,1486],{"class":165},[159,154716,19854],{"class":1146},[159,154718,1492],{"class":165},[159,154720,154721],{"class":161,"line":203},[159,154722,15685],{"class":165},[159,154724,154725,154727],{"class":161,"line":223},[159,154726,152347],{"class":185},[159,154728,1478],{"class":165},[159,154730,154731,154733,154735,154737],{"class":161,"line":233},[159,154732,152332],{"class":1146},[159,154734,1486],{"class":165},[159,154736,19623],{"class":1146},[159,154738,1492],{"class":165},[159,154740,154741],{"class":161,"line":239},[159,154742,15685],{"class":165},[23,154744],{"style":147708,"src":154745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[326,154747,154749],{"id":154748},"_11138-轮播图","11.1.3.8 轮播图",[23,154751],{"style":147708,"src":154752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[134,154754,154755],{},[106,154756,154757],{},"制作顺序:",[103,154759,154760,154763,154766,154775],{},[106,154761,154762],{},"大盒子我们类名为： tb-promo 淘宝广告",[106,154764,154765],{},"里面先放一张图片",[106,154767,154768,154769,154771,154772,154774],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[429,154770],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[429,154773],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[106,154776,154777,154778,154780,154781,154783],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[429,154779],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[429,154782],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[134,154785,154786],{"start":176},[106,154787,154788],{},"代码模块",[151,154790,154792],{"className":147852,"code":154791,"language":147854,"meta":25,"style":25},"\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",[49,154793,154794,154799,154806,154816,154826,154836,154840,154845,154852,154862],{"__ignoreMap":25},[159,154795,154796],{"class":161,"line":162},[159,154797,154798],{"class":1135},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[159,154800,154801,154804],{"class":161,"line":176},[159,154802,154803],{"class":185},".son",[159,154805,1478],{"class":165},[159,154807,154808,154810,154812,154814],{"class":161,"line":203},[159,154809,153658],{"class":1146},[159,154811,1486],{"class":165},[159,154813,1627],{"class":1146},[159,154815,1492],{"class":165},[159,154817,154818,154820,154822,154824],{"class":161,"line":223},[159,154819,153672],{"class":1146},[159,154821,1486],{"class":165},[159,154823,1489],{"class":1146},[159,154825,1492],{"class":165},[159,154827,154828,154830,154832,154834],{"class":161,"line":233},[159,154829,153689],{"class":1146},[159,154831,1486],{"class":165},[159,154833,1489],{"class":1146},[159,154835,1492],{"class":165},[159,154837,154838],{"class":161,"line":239},[159,154839,15685],{"class":165},[159,154841,154842],{"class":161,"line":245},[159,154843,154844],{"class":1135},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[159,154846,154847,154850],{"class":161,"line":251},[159,154848,154849],{"class":185},".father",[159,154851,1478],{"class":165},[159,154853,154854,154856,154858,154860],{"class":161,"line":261},[159,154855,153658],{"class":1146},[159,154857,1486],{"class":165},[159,154859,1556],{"class":1146},[159,154861,1492],{"class":165},[159,154863,154864],{"class":161,"line":603},[159,154865,15685],{"class":165},[14,154867,154868],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[42,154870,154872],{"id":154871},"_1114-定位数值的移动","11.1.4 定位数值的移动",[23,154874],{"style":147708,"src":154875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,154877,154878],{},"✨ 黄金口诀：",[14,154880,154881],{},"\"TOP正下负上，LEFT正右负左\"",[14,154883,154884],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,154886,154887],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,154889,154890],{},"✨ 简单记：",[14,154892,154893],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1468,154895,154896],{},"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":25,"searchDepth":176,"depth":176,"links":154898},[154899],{"id":153426,"depth":176,"text":153427,"children":154900},[154901,154902,154903,154904],{"id":153430,"depth":203,"text":153431},{"id":153445,"depth":203,"text":153446},{"id":153613,"depth":203,"text":153614},{"id":154871,"depth":203,"text":154872},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":153418,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":154911,"title":154912,"body":154913,"description":23809,"extension":23810,"meta":156336,"navigation":589,"path":156337,"seo":156338,"stem":156339,"__hash__":156340},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":154914,"toc":156315},[154915,154918,154922,154930,154934,154939,154947,154959,154963,154968,154976,154987,154991,154996,155037,155045,155049,155052,155055,155058,155152,155155,155249,155252,155346,155349,155352,155387,155390,155393,155423,155426,155429,155432,155435,155438,155441,155444,155514,155517,155521,155525,155566,155570,155576,155579,155582,155586,155589,155592,155595,155676,155679,155682,155686,155690,155693,155696,155699,155702,155705,155711,155720,155724,155743,155747,155757,155760,155763,155766,155769,155772,155775,155778,155781,155790,155794,155803,155806,155811,155864,155869,156035,156038,156041,156046,156049,156052,156055,156058,156063,156211,156214,156217,156222,156225,156230,156264,156267,156270,156274,156277,156284,156287,156290,156293,156296,156299,156302,156305,156309,156312],[10,154916,154912],{"id":154917},"_12-显示隐藏与图形资源",[37,154919,154921],{"id":154920},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[103,154923,154924,154927],{},[106,154925,154926],{},"目的:让一个元素在页面中消失或者显示出来",[106,154928,154929],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[42,154931,154933],{"id":154932},"_1211-display-显示","12.1.1 display 显示",[134,154935,154936],{},[106,154937,154938],{},"display 设置或检索对象是否及如何显示",[103,154940,154941,154944],{},[106,154942,154943],{},"display: none;隐藏对象",[106,154945,154946],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[134,154948,154949,154956],{"start":176},[106,154950,154951,154952,154955],{},"特点： display 隐藏元素后， ",[61,154953,154954],{},"不再占"," 有原来的位置",[106,154957,154958],{},"在js中使用非常的广泛",[42,154960,154962],{"id":154961},"_1212-visibility可见性","12.1.2 visibility可见性",[134,154964,154965],{},[106,154966,154967],{},"visibility 属性用于指定一个元素应可见还是隐藏",[103,154969,154970,154973],{},[106,154971,154972],{},"visibility： visible；元素可见",[106,154974,154975],{},"visibility：hidden；元素隐藏",[134,154977,154978,154981,154984],{"start":176},[106,154979,154980],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[106,154982,154983],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[106,154985,154986],{},"隐藏后继续占有原有位置",[42,154988,154990],{"id":154989},"_1213-overflow溢出","12.1.3 overflow溢出",[103,154992,154993],{},[106,154994,154995],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[12347,154997,154998,155006],{},[16500,154999,155000],{},[12356,155001,155002,155004],{},[12365,155003,148316],{"align":19854},[12365,155005,51012],{"align":19854},[16624,155007,155008,155016,155023,155030],{},[12356,155009,155010,155013],{},[12488,155011,155012],{"align":19854},"visible",[12488,155014,155015],{"align":19854},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[12356,155017,155018,155020],{},[12488,155019,8748],{"align":19854},[12488,155021,155022],{"align":19854},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[12356,155024,155025,155027],{},[12488,155026,150272],{"align":19854},[12488,155028,155029],{"align":19854},"不管超出内容否，总是显示滚动条",[12356,155031,155032,155034],{},[12488,155033,19765],{"align":19854},[12488,155035,155036],{"align":19854},"超出自动显示滚动条，不超出不显示滚动条",[103,155038,155039,155042],{},[106,155040,155041],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[106,155043,155044],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[42,155046,155048],{"id":155047},"_1214-案例收获","12.1.4 案例收获",[23,155050],{"style":147708,"src":155051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,155053,155054],{},"问题：没做出来动态效果，使用hover没实现",[14,155056,155057],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[151,155059,155060],{"className":147852,"code":153284,"language":147854,"meta":25,"style":25},[49,155061,155062,155066,155080,155084,155098,155102,155116,155120,155134,155138],{"__ignoreMap":25},[159,155063,155064],{"class":161,"line":162},[159,155065,153291],{"class":1135},[159,155067,155068,155070,155072,155074,155076,155078],{"class":161,"line":176},[159,155069,153296],{"class":185},[159,155071,101107],{"class":165},[159,155073,150212],{"class":1146},[159,155075,1486],{"class":165},[159,155077,153305],{"class":1146},[159,155079,150782],{"class":165},[159,155081,155082],{"class":161,"line":203},[159,155083,153312],{"class":1135},[159,155085,155086,155088,155090,155092,155094,155096],{"class":161,"line":223},[159,155087,153317],{"class":185},[159,155089,101107],{"class":165},[159,155091,150212],{"class":1146},[159,155093,1486],{"class":165},[159,155095,1556],{"class":1146},[159,155097,150782],{"class":165},[159,155099,155100],{"class":161,"line":233},[159,155101,153332],{"class":1135},[159,155103,155104,155106,155108,155110,155112,155114],{"class":161,"line":239},[159,155105,153337],{"class":185},[159,155107,101107],{"class":165},[159,155109,150212],{"class":1146},[159,155111,1486],{"class":165},[159,155113,1627],{"class":1146},[159,155115,150782],{"class":165},[159,155117,155118],{"class":161,"line":245},[159,155119,153352],{"class":1135},[159,155121,155122,155124,155126,155128,155130,155132],{"class":161,"line":251},[159,155123,153357],{"class":185},[159,155125,101107],{"class":165},[159,155127,150212],{"class":1146},[159,155129,1486],{"class":165},[159,155131,107533],{"class":1146},[159,155133,150782],{"class":165},[159,155135,155136],{"class":161,"line":261},[159,155137,153372],{"class":1135},[159,155139,155140,155142,155144,155146,155148,155150],{"class":161,"line":603},[159,155141,153377],{"class":185},[159,155143,101107],{"class":165},[159,155145,150212],{"class":1146},[159,155147,1486],{"class":165},[159,155149,153386],{"class":1146},[159,155151,150782],{"class":165},[14,155153,155154],{},"完整代码：",[151,155156,155157],{"className":147852,"code":153284,"language":147854,"meta":25,"style":25},[49,155158,155159,155163,155177,155181,155195,155199,155213,155217,155231,155235],{"__ignoreMap":25},[159,155160,155161],{"class":161,"line":162},[159,155162,153291],{"class":1135},[159,155164,155165,155167,155169,155171,155173,155175],{"class":161,"line":176},[159,155166,153296],{"class":185},[159,155168,101107],{"class":165},[159,155170,150212],{"class":1146},[159,155172,1486],{"class":165},[159,155174,153305],{"class":1146},[159,155176,150782],{"class":165},[159,155178,155179],{"class":161,"line":203},[159,155180,153312],{"class":1135},[159,155182,155183,155185,155187,155189,155191,155193],{"class":161,"line":223},[159,155184,153317],{"class":185},[159,155186,101107],{"class":165},[159,155188,150212],{"class":1146},[159,155190,1486],{"class":165},[159,155192,1556],{"class":1146},[159,155194,150782],{"class":165},[159,155196,155197],{"class":161,"line":233},[159,155198,153332],{"class":1135},[159,155200,155201,155203,155205,155207,155209,155211],{"class":161,"line":239},[159,155202,153337],{"class":185},[159,155204,101107],{"class":165},[159,155206,150212],{"class":1146},[159,155208,1486],{"class":165},[159,155210,1627],{"class":1146},[159,155212,150782],{"class":165},[159,155214,155215],{"class":161,"line":245},[159,155216,153352],{"class":1135},[159,155218,155219,155221,155223,155225,155227,155229],{"class":161,"line":251},[159,155220,153357],{"class":185},[159,155222,101107],{"class":165},[159,155224,150212],{"class":1146},[159,155226,1486],{"class":165},[159,155228,107533],{"class":1146},[159,155230,150782],{"class":165},[159,155232,155233],{"class":161,"line":261},[159,155234,153372],{"class":1135},[159,155236,155237,155239,155241,155243,155245,155247],{"class":161,"line":603},[159,155238,153377],{"class":185},[159,155240,101107],{"class":165},[159,155242,150212],{"class":1146},[159,155244,1486],{"class":165},[159,155246,153386],{"class":1146},[159,155248,150782],{"class":165},[14,155250,155251],{},"分布思路重点详解：",[151,155253,155254],{"className":147852,"code":153284,"language":147854,"meta":25,"style":25},[49,155255,155256,155260,155274,155278,155292,155296,155310,155314,155328,155332],{"__ignoreMap":25},[159,155257,155258],{"class":161,"line":162},[159,155259,153291],{"class":1135},[159,155261,155262,155264,155266,155268,155270,155272],{"class":161,"line":176},[159,155263,153296],{"class":185},[159,155265,101107],{"class":165},[159,155267,150212],{"class":1146},[159,155269,1486],{"class":165},[159,155271,153305],{"class":1146},[159,155273,150782],{"class":165},[159,155275,155276],{"class":161,"line":203},[159,155277,153312],{"class":1135},[159,155279,155280,155282,155284,155286,155288,155290],{"class":161,"line":223},[159,155281,153317],{"class":185},[159,155283,101107],{"class":165},[159,155285,150212],{"class":1146},[159,155287,1486],{"class":165},[159,155289,1556],{"class":1146},[159,155291,150782],{"class":165},[159,155293,155294],{"class":161,"line":233},[159,155295,153332],{"class":1135},[159,155297,155298,155300,155302,155304,155306,155308],{"class":161,"line":239},[159,155299,153337],{"class":185},[159,155301,101107],{"class":165},[159,155303,150212],{"class":1146},[159,155305,1486],{"class":165},[159,155307,1627],{"class":1146},[159,155309,150782],{"class":165},[159,155311,155312],{"class":161,"line":245},[159,155313,153352],{"class":1135},[159,155315,155316,155318,155320,155322,155324,155326],{"class":161,"line":251},[159,155317,153357],{"class":185},[159,155319,101107],{"class":165},[159,155321,150212],{"class":1146},[159,155323,1486],{"class":165},[159,155325,107533],{"class":1146},[159,155327,150782],{"class":165},[159,155329,155330],{"class":161,"line":261},[159,155331,153372],{"class":1135},[159,155333,155334,155336,155338,155340,155342,155344],{"class":161,"line":603},[159,155335,153377],{"class":185},[159,155337,101107],{"class":165},[159,155339,150212],{"class":1146},[159,155341,1486],{"class":165},[159,155343,153386],{"class":1146},[159,155345,150782],{"class":165},[23,155347],{"style":147708,"src":155348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,155350,155351],{},"图片太大，盒子太小，此时需要修改图片的大小",[151,155353,155355],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[49,155356,155357],{"__ignoreMap":25},[159,155358,155359,155361,155363,155365,155367,155370,155372,155374,155377,155380,155382,155385],{"class":161,"line":162},[159,155360,166],{"class":165},[159,155362,23],{"class":169},[159,155364,2078],{"class":185},[159,155366,189],{"class":165},[159,155368,155369],{"class":192},"\"images\u002Fpic.jpg\"",[159,155371,2086],{"class":185},[159,155373,189],{"class":165},[159,155375,155376],{"class":192},"\"描述文字\"",[159,155378,155379],{"class":185}," title",[159,155381,189],{"class":165},[159,155383,155384],{"class":192},"\"悬停提示\"",[159,155386,173],{"class":165},[23,155388],{"style":147708,"src":155389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,155391,155392],{},"制造遮罩层",[151,155394,155395],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,155396,155397],{"__ignoreMap":25},[159,155398,155399,155401,155403,155405,155407,155409,155411,155413,155415,155417,155419,155421],{"class":161,"line":162},[159,155400,166],{"class":165},[159,155402,23],{"class":169},[159,155404,2078],{"class":185},[159,155406,189],{"class":165},[159,155408,155369],{"class":192},[159,155410,2086],{"class":185},[159,155412,189],{"class":165},[159,155414,155376],{"class":192},[159,155416,155379],{"class":185},[159,155418,189],{"class":165},[159,155420,155384],{"class":192},[159,155422,173],{"class":165},[14,155424,155425],{},"此时是这样的为标准流",[23,155427],{"style":147708,"src":155428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,155430,155431],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,155433,155434],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,155436,155437],{},"让他在中间，用center(background-position)",[14,155439,155440],{},"将需要变的尽可能放到一个盒子中",[14,155442,155443],{},"放大盒子上内部盒子发生变化",[151,155445,155447],{"className":147852,"code":155446,"language":147854,"meta":25,"style":25},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[49,155448,155449,155455,155465,155469,155476,155486,155498,155510],{"__ignoreMap":25},[159,155450,155451,155453],{"class":161,"line":162},[159,155452,148919],{"class":185},[159,155454,1478],{"class":165},[159,155456,155457,155459,155461,155463],{"class":161,"line":176},[159,155458,153658],{"class":1146},[159,155460,1486],{"class":165},[159,155462,1556],{"class":1146},[159,155464,1492],{"class":165},[159,155466,155467],{"class":161,"line":203},[159,155468,15685],{"class":165},[159,155470,155471,155474],{"class":161,"line":223},[159,155472,155473],{"class":185},".child",[159,155475,1478],{"class":165},[159,155477,155478,155480,155482,155484],{"class":161,"line":233},[159,155479,153658],{"class":1146},[159,155481,1486],{"class":165},[159,155483,1627],{"class":1146},[159,155485,1492],{"class":165},[159,155487,155488,155490,155492,155494,155496],{"class":161,"line":239},[159,155489,153672],{"class":1146},[159,155491,1486],{"class":165},[159,155493,4230],{"class":1146},[159,155495,1662],{"class":1142},[159,155497,1492],{"class":165},[159,155499,155500,155502,155504,155506,155508],{"class":161,"line":245},[159,155501,153689],{"class":1146},[159,155503,1486],{"class":165},[159,155505,4230],{"class":1146},[159,155507,1662],{"class":1142},[159,155509,1492],{"class":165},[159,155511,155512],{"class":161,"line":251},[159,155513,15685],{"class":165},[14,155515,155516],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[37,155518,155520],{"id":155519},"_122-精灵图","12.2 精灵图",[42,155522,155524],{"id":155523},"_1221-理解","12.2.1 理解",[134,155526,155527,155545],{},[106,155528,155529,155530,153758,155533,155536,155537,155540,155541,155544],{},"目的： ",[61,155531,155532],{},"为了有效地减少服务器接收和发送请求的次数",[61,155534,155535],{},"提高"," 页面的 ",[61,155538,155539],{},"加载速度"," ，出现了 ",[61,155542,155543],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[106,155546,155547,155548,155550,155551,155553,155554,155556,155557,155559,155560,155562,155563,155565],{},"使用精灵图核心：",[429,155549],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[429,155552],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[429,155555],{},"  ③移动背景图片位置， 此时可以使用 background-position",[429,155558],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[429,155561],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[429,155564],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[42,155567,155569],{"id":155568},"_1222-扒图","12.2.2 扒图",[151,155571,155574],{"className":155572,"code":155573,"language":8507},[28803],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[49,155575,155573],{"__ignoreMap":25},[23,155577],{"style":147708,"src":155578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[23,155580],{"style":147708,"src":155581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[42,155583,155585],{"id":155584},"_1223-精灵图的实现","12.2.3 精灵图的实现",[23,155587],{"style":147708,"src":155588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,155590,155591],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[23,155593],{"style":147708,"src":155594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[151,155596,155598],{"className":147852,"code":155597,"language":147854,"meta":25,"style":25},"\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",[49,155599,155600,155605,155612,155624,155636,155655,155672],{"__ignoreMap":25},[159,155601,155602],{"class":161,"line":162},[159,155603,155604],{"class":1135},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[159,155606,155607,155610],{"class":161,"line":176},[159,155608,155609],{"class":185},".icon",[159,155611,1478],{"class":165},[159,155613,155614,155616,155618,155620,155622],{"class":161,"line":203},[159,155615,17655],{"class":1146},[159,155617,1486],{"class":165},[159,155619,1739],{"class":1146},[159,155621,1571],{"class":1142},[159,155623,1492],{"class":165},[159,155625,155626,155628,155630,155632,155634],{"class":161,"line":223},[159,155627,17875],{"class":1146},[159,155629,1486],{"class":165},[159,155631,1739],{"class":1146},[159,155633,1571],{"class":1142},[159,155635,1492],{"class":165},[159,155637,155638,155640,155642,155644,155646,155649,155651,155653],{"class":161,"line":233},[159,155639,17698],{"class":1146},[159,155641,1486],{"class":165},[159,155643,8760],{"class":1146},[159,155645,1159],{"class":165},[159,155647,155648],{"class":8765},"sprites.png",[159,155650,2710],{"class":165},[159,155652,8771],{"class":1146},[159,155654,1492],{"class":165},[159,155656,155657,155659,155661,155663,155665,155668,155670],{"class":161,"line":239},[159,155658,150112],{"class":1146},[159,155660,1486],{"class":165},[159,155662,75102],{"class":1146},[159,155664,1571],{"class":1142},[159,155666,155667],{"class":1146}," -20",[159,155669,1571],{"class":1142},[159,155671,1492],{"class":165},[159,155673,155674],{"class":161,"line":245},[159,155675,15685],{"class":165},[23,155677],{"style":147708,"src":155678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,155680,155681],{},"在前端中坐标轴的正方向是右和下",[37,155683,155685],{"id":155684},"_123-字体图标","12.3 字体图标",[42,155687,155689],{"id":155688},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,155691,155692],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,155694,155695],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,155697,155698],{},"1.图片文件还是比较大的。",[14,155700,155701],{},"2.图片本身放大和缩小会失真。",[14,155703,155704],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,155706,155707,155708,49263],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[61,155709,155710],{},"字体图标 iconfont",[14,155712,155713,155716,155717,51907],{},[61,155714,155715],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[61,155718,155719],{},"展示的是图标，本质属于字体",[42,155721,155723],{"id":155722},"_1232-字体图标的优点","12.3.2 字体图标的优点",[103,155725,155726,155731,155734,155737,155740],{},[106,155727,155728,155730],{},[61,155729,49399],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[106,155732,155733],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[106,155735,155736],{},"兼容性：几乎支持所有的浏览器，请放心使用",[106,155738,155739],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[106,155741,155742],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[42,155744,155746],{"id":155745},"_1233-字体库下载网站","12.3.3 字体库下载网站",[103,155748,155749],{},[106,155750,155751,155752],{},"icomoon字体库：",[8085,155753,155756],{"href":155754,"rel":155755},"http:\u002F\u002Ficomoon.io\u002F",[15923],"http:\u002F\u002Ficomoon.io",[14,155758,155759],{},"进去之后点icomoon app",[23,155761],{"style":147708,"src":155762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,155764,155765],{},"可以对其编辑：",[23,155767],{"style":147708,"src":155768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,155770,155771],{},"生成字体：",[23,155773],{"style":147708,"src":155774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,155776,155777],{},"下载：",[23,155779],{"style":147708,"src":155780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[103,155782,155783],{},[106,155784,155785,155786],{},"阿里iconfont字体库： ",[8085,155787,155788],{"href":155788,"rel":155789},"http:\u002F\u002Fwww.iconfont.cn\u002F",[15923],[42,155791,155793],{"id":155792},"_1234-字体图标的引入","12.3.4 字体图标的引入",[134,155795,155796],{},[106,155797,155798,155799,155802],{},"把下载包里面的 ",[61,155800,155801],{},"fonts"," 文件夹放入页面根目录下",[23,155804],{"style":147708,"src":155805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[134,155807,155808],{"start":176},[106,155809,155810],{},"字体文件格式",[12347,155812,155813,155822],{},[16500,155814,155815],{},[12356,155816,155817,155820],{},[12365,155818,155819],{"align":19854},"格式",[12365,155821,47265],{"align":19854},[16624,155823,155824,155834,155844,155854],{},[12356,155825,155826,155831],{},[12488,155827,155828],{"align":19854},[61,155829,155830],{},".ttf",[12488,155832,155833],{"align":19854},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[12356,155835,155836,155841],{},[12488,155837,155838],{"align":19854},[61,155839,155840],{},".woff",[12488,155842,155843],{"align":19854},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[12356,155845,155846,155851],{},[12488,155847,155848],{"align":19854},[61,155849,155850],{},".eot",[12488,155852,155853],{"align":19854},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[12356,155855,155856,155861],{},[12488,155857,155858],{"align":19854},[61,155859,155860],{},"svg",[12488,155862,155863],{"align":19854},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[134,155865,155866],{"start":203},[106,155867,155868],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[151,155870,155872],{"className":147852,"code":155871,"language":147854,"meta":25,"style":25},"\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",[49,155873,155874,155879,155886,155898,155914,155939,155960,155980,156000,156004,156010,156020,156031],{"__ignoreMap":25},[159,155875,155876],{"class":161,"line":162},[159,155877,155878],{"class":1135},"\u002F* 引入字体图标 *\u002F\n",[159,155880,155881,155884],{"class":161,"line":176},[159,155882,155883],{"class":1142},"@font-face",[159,155885,1478],{"class":165},[159,155887,155888,155891,155893,155896],{"class":161,"line":203},[159,155889,155890],{"class":1146},"  font-family",[159,155892,1486],{"class":165},[159,155894,155895],{"class":192},"'icomoon'",[159,155897,1492],{"class":165},[159,155899,155900,155903,155905,155907,155909,155912],{"class":161,"line":223},[159,155901,155902],{"class":1146},"  src",[159,155904,1486],{"class":165},[159,155906,8760],{"class":1146},[159,155908,1159],{"class":165},[159,155910,155911],{"class":192},"'fonts\u002Ficomoon.eot'",[159,155913,1953],{"class":165},[159,155915,155916,155918,155920,155922,155924,155927,155929,155932,155934,155937],{"class":161,"line":233},[159,155917,155902],{"class":1146},[159,155919,1486],{"class":165},[159,155921,8760],{"class":1146},[159,155923,1159],{"class":165},[159,155925,155926],{"class":192},"'fonts\u002Ficomoon.eot?#iefix'",[159,155928,2710],{"class":165},[159,155930,155931],{"class":1146},"format",[159,155933,1159],{"class":165},[159,155935,155936],{"class":192},"'embedded-opentype'",[159,155938,61442],{"class":165},[159,155940,155941,155944,155946,155949,155951,155953,155955,155958],{"class":161,"line":239},[159,155942,155943],{"class":1146},"       url",[159,155945,1159],{"class":165},[159,155947,155948],{"class":192},"'fonts\u002Ficomoon.woff'",[159,155950,2710],{"class":165},[159,155952,155931],{"class":1146},[159,155954,1159],{"class":165},[159,155956,155957],{"class":192},"'woff'",[159,155959,61442],{"class":165},[159,155961,155962,155964,155966,155969,155971,155973,155975,155978],{"class":161,"line":245},[159,155963,155943],{"class":1146},[159,155965,1159],{"class":165},[159,155967,155968],{"class":192},"'fonts\u002Ficomoon.ttf'",[159,155970,2710],{"class":165},[159,155972,155931],{"class":1146},[159,155974,1159],{"class":165},[159,155976,155977],{"class":192},"'truetype'",[159,155979,61442],{"class":165},[159,155981,155982,155984,155986,155989,155991,155993,155995,155998],{"class":161,"line":251},[159,155983,155943],{"class":1146},[159,155985,1159],{"class":165},[159,155987,155988],{"class":192},"'fonts\u002Ficomoon.svg#icomoon'",[159,155990,2710],{"class":165},[159,155992,155931],{"class":1146},[159,155994,1159],{"class":165},[159,155996,155997],{"class":192},"'svg'",[159,155999,1953],{"class":165},[159,156001,156002],{"class":161,"line":261},[159,156003,15685],{"class":165},[159,156005,156006,156008],{"class":161,"line":603},[159,156007,155609],{"class":185},[159,156009,1478],{"class":165},[159,156011,156012,156014,156016,156018],{"class":161,"line":621},[159,156013,155890],{"class":1146},[159,156015,1486],{"class":165},[159,156017,155895],{"class":192},[159,156019,1492],{"class":165},[159,156021,156022,156025,156027,156029],{"class":161,"line":634},[159,156023,156024],{"class":1146},"  font-style",[159,156026,1486],{"class":165},[159,156028,10889],{"class":1146},[159,156030,1492],{"class":165},[159,156032,156033],{"class":161,"line":640},[159,156034,15685],{"class":165},[14,156036,156037],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[23,156039],{"style":147708,"src":156040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[134,156042,156043],{"start":223},[106,156044,156045],{},"添加字体",[23,156047],{"style":147708,"src":156048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,156050,156051],{},"复制：",[23,156053],{"style":147708,"src":156054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,156056,156057],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[134,156059,156060],{"start":233},[106,156061,156062],{},"代码展示：",[151,156064,156065],{"className":147852,"code":155871,"language":147854,"meta":25,"style":25},[49,156066,156067,156071,156077,156087,156101,156123,156141,156159,156177,156181,156187,156197,156207],{"__ignoreMap":25},[159,156068,156069],{"class":161,"line":162},[159,156070,155878],{"class":1135},[159,156072,156073,156075],{"class":161,"line":176},[159,156074,155883],{"class":1142},[159,156076,1478],{"class":165},[159,156078,156079,156081,156083,156085],{"class":161,"line":203},[159,156080,155890],{"class":1146},[159,156082,1486],{"class":165},[159,156084,155895],{"class":192},[159,156086,1492],{"class":165},[159,156088,156089,156091,156093,156095,156097,156099],{"class":161,"line":223},[159,156090,155902],{"class":1146},[159,156092,1486],{"class":165},[159,156094,8760],{"class":1146},[159,156096,1159],{"class":165},[159,156098,155911],{"class":192},[159,156100,1953],{"class":165},[159,156102,156103,156105,156107,156109,156111,156113,156115,156117,156119,156121],{"class":161,"line":233},[159,156104,155902],{"class":1146},[159,156106,1486],{"class":165},[159,156108,8760],{"class":1146},[159,156110,1159],{"class":165},[159,156112,155926],{"class":192},[159,156114,2710],{"class":165},[159,156116,155931],{"class":1146},[159,156118,1159],{"class":165},[159,156120,155936],{"class":192},[159,156122,61442],{"class":165},[159,156124,156125,156127,156129,156131,156133,156135,156137,156139],{"class":161,"line":239},[159,156126,155943],{"class":1146},[159,156128,1159],{"class":165},[159,156130,155948],{"class":192},[159,156132,2710],{"class":165},[159,156134,155931],{"class":1146},[159,156136,1159],{"class":165},[159,156138,155957],{"class":192},[159,156140,61442],{"class":165},[159,156142,156143,156145,156147,156149,156151,156153,156155,156157],{"class":161,"line":245},[159,156144,155943],{"class":1146},[159,156146,1159],{"class":165},[159,156148,155968],{"class":192},[159,156150,2710],{"class":165},[159,156152,155931],{"class":1146},[159,156154,1159],{"class":165},[159,156156,155977],{"class":192},[159,156158,61442],{"class":165},[159,156160,156161,156163,156165,156167,156169,156171,156173,156175],{"class":161,"line":251},[159,156162,155943],{"class":1146},[159,156164,1159],{"class":165},[159,156166,155988],{"class":192},[159,156168,2710],{"class":165},[159,156170,155931],{"class":1146},[159,156172,1159],{"class":165},[159,156174,155997],{"class":192},[159,156176,1953],{"class":165},[159,156178,156179],{"class":161,"line":261},[159,156180,15685],{"class":165},[159,156182,156183,156185],{"class":161,"line":603},[159,156184,155609],{"class":185},[159,156186,1478],{"class":165},[159,156188,156189,156191,156193,156195],{"class":161,"line":621},[159,156190,155890],{"class":1146},[159,156192,1486],{"class":165},[159,156194,155895],{"class":192},[159,156196,1492],{"class":165},[159,156198,156199,156201,156203,156205],{"class":161,"line":634},[159,156200,156024],{"class":1146},[159,156202,1486],{"class":165},[159,156204,10889],{"class":1146},[159,156206,1492],{"class":165},[159,156208,156209],{"class":161,"line":640},[159,156210,15685],{"class":165},[23,156212],{"style":147708,"src":156213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,156215,156216],{},"更加细节展示：",[134,156218,156219],{},[106,156220,156221],{},"html 标签内添加小图标",[23,156223],{"style":147708,"src":156224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[134,156226,156227],{"start":176},[106,156228,156229],{},"给标签定义字体",[151,156231,156232],{"className":148599,"code":151956,"language":148601,"meta":25,"style":25},[49,156233,156234,156238,156252,156256],{"__ignoreMap":25},[159,156235,156236],{"class":161,"line":162},[159,156237,151963],{"class":1135},[159,156239,156240,156242,156244,156246,156248,156250],{"class":161,"line":176},[159,156241,166],{"class":165},[159,156243,182],{"class":169},[159,156245,186],{"class":185},[159,156247,189],{"class":165},[159,156249,151976],{"class":192},[159,156251,173],{"class":165},[159,156253,156254],{"class":161,"line":203},[159,156255,151983],{"class":165},[159,156257,156258,156260,156262],{"class":161,"line":223},[159,156259,264],{"class":165},[159,156261,182],{"class":169},[159,156263,173],{"class":165},[14,156265,156266],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[23,156268],{"style":147708,"src":156269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[42,156271,156273],{"id":156272},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,156275,156276],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,156278,156279,156280,156283],{},"把压缩包里面的 ",[61,156281,156282],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,156285,156286],{},"打开网站，点下方：",[23,156288],{"style":147708,"src":156289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[23,156291],{"style":147708,"src":156292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[23,156294],{"style":147708,"src":156295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,156297,156298],{},"点yes重新加载",[14,156300,156301],{},"然后重复之前的操作就可以实现了",[14,156303,156304],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[42,156306,156308],{"id":156307},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[23,156310],{"style":147708,"src":156311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1468,156313,156314],{},"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":25,"searchDepth":176,"depth":176,"links":156316},[156317,156323,156328],{"id":154920,"depth":176,"text":154921,"children":156318},[156319,156320,156321,156322],{"id":154932,"depth":203,"text":154933},{"id":154961,"depth":203,"text":154962},{"id":154989,"depth":203,"text":154990},{"id":155047,"depth":203,"text":155048},{"id":155519,"depth":176,"text":155520,"children":156324},[156325,156326,156327],{"id":155523,"depth":203,"text":155524},{"id":155568,"depth":203,"text":155569},{"id":155584,"depth":203,"text":155585},{"id":155684,"depth":176,"text":155685,"children":156329},[156330,156331,156332,156333,156334,156335],{"id":155688,"depth":203,"text":155689},{"id":155722,"depth":203,"text":155723},{"id":155745,"depth":203,"text":155746},{"id":155792,"depth":203,"text":155793},{"id":156272,"depth":203,"text":156273},{"id":156307,"depth":203,"text":156308},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":154912,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":156342,"title":156343,"body":156344,"description":23809,"extension":23810,"meta":157571,"navigation":589,"path":157572,"seo":157573,"stem":157574,"__hash__":157575},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":156345,"toc":157552},[156346,156349,156353,156356,156370,156438,156468,156471,156475,156479,156581,156628,156632,156635,156638,156672,156675,156678,156681,156684,156687,156690,156693,156695,156698,156701,156704,156707,156710,156713,156716,156744,156747,156751,156754,156761,156764,156767,156793,156796,156800,156803,156806,156813,156817,156820,156822,156854,156857,156860,156872,156878,156881,156884,156887,156889,156893,156896,156899,156902,156947,156951,156953,156956,156963,157005,157008,157012,157017,157031,157035,157038,157041,157044,157047,157050,157084,157087,157090,157144,157147,157150,157153,157156,157208,157211,157214,157263,157267,157269,157272,157275,157278,157281,157284,157342,157345,157351,157354,157357,157389,157392,157396,157400,157403,157435,157439,157442,157486,157490,157493,157496,157499,157502,157505,157508,157511,157513,157516,157518,157521,157524,157527,157530,157535,157538,157540,157543,157546,157549],[10,156347,156343],{"id":156348},"_13-界面样式与布局技巧",[37,156350,156352],{"id":156351},"_131-css三角","13.1 css三角",[14,156354,156355],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[103,156357,156358,156361,156364,156367],{},[106,156359,156360],{},"用css 边框可以模拟三角效果",[106,156362,156363],{},"宽度高度为0",[106,156365,156366],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[106,156368,156369],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[151,156371,156373],{"className":147852,"code":156372,"language":147854,"meta":25,"style":25},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[49,156374,156375,156380,156387,156397,156407,156423,156434],{"__ignoreMap":25},[159,156376,156377],{"class":161,"line":162},[159,156378,156379],{"class":1135},"\u002F* CSS 实现三角形 *\u002F\n",[159,156381,156382,156385],{"class":161,"line":176},[159,156383,156384],{"class":185},".triangle",[159,156386,1478],{"class":165},[159,156388,156389,156391,156393,156395],{"class":161,"line":203},[159,156390,17655],{"class":1146},[159,156392,1486],{"class":165},[159,156394,1489],{"class":1146},[159,156396,1492],{"class":165},[159,156398,156399,156401,156403,156405],{"class":161,"line":223},[159,156400,17875],{"class":1146},[159,156402,1486],{"class":165},[159,156404,1489],{"class":1146},[159,156406,1492],{"class":165},[159,156408,156409,156411,156413,156415,156417,156419,156421],{"class":161,"line":233},[159,156410,17983],{"class":1146},[159,156412,1486],{"class":165},[159,156414,1964],{"class":1146},[159,156416,1571],{"class":1142},[159,156418,7709],{"class":1146},[159,156420,11041],{"class":1146},[159,156422,1492],{"class":165},[159,156424,156425,156428,156430,156432],{"class":161,"line":239},[159,156426,156427],{"class":1146},"  border-bottom-color",[159,156429,1486],{"class":165},[159,156431,9412],{"class":1146},[159,156433,1492],{"class":165},[159,156435,156436],{"class":161,"line":245},[159,156437,15685],{"class":165},[151,156439,156440],{"className":147852,"code":152009,"language":147854,"meta":25,"style":25},[49,156441,156442,156448,156464],{"__ignoreMap":25},[159,156443,156444,156446],{"class":161,"line":162},[159,156445,182],{"class":169},[159,156447,1478],{"class":165},[159,156449,156450,156452,156454,156456,156458,156460,156462],{"class":161,"line":176},[159,156451,17983],{"class":1146},[159,156453,1486],{"class":165},[159,156455,4932],{"class":1146},[159,156457,1571],{"class":1142},[159,156459,7709],{"class":1146},[159,156461,151244],{"class":1146},[159,156463,1492],{"class":165},[159,156465,156466],{"class":161,"line":203},[159,156467,15685],{"class":165},[23,156469],{"style":147708,"src":156470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[37,156472,156474],{"id":156473},"_132-css用户界面样式","13.2 css用户界面样式",[42,156476,156478],{"id":156477},"_1321-鼠标样式","13.2.1 鼠标样式",[151,156480,156482],{"className":147852,"code":156481,"language":147854,"meta":25,"style":25},"\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",[49,156483,156484,156489,156508,156526,156545,156562],{"__ignoreMap":25},[159,156485,156486],{"class":161,"line":162},[159,156487,156488],{"class":1135},"\u002F* 鼠标样式 *\u002F\n",[159,156490,156491,156493,156495,156498,156500,156502,156505],{"class":161,"line":176},[159,156492,182],{"class":169},[159,156494,101107],{"class":165},[159,156496,156497],{"class":1146},"cursor",[159,156499,1486],{"class":165},[159,156501,9072],{"class":1146},[159,156503,156504],{"class":165},"; }   ",[159,156506,156507],{"class":1135},"\u002F* 手型 *\u002F\n",[159,156509,156510,156512,156514,156516,156518,156521,156523],{"class":161,"line":203},[159,156511,182],{"class":169},[159,156513,101107],{"class":165},[159,156515,156497],{"class":1146},[159,156517,1486],{"class":165},[159,156519,156520],{"class":1146},"default",[159,156522,156504],{"class":165},[159,156524,156525],{"class":1135},"\u002F* 默认 *\u002F\n",[159,156527,156528,156530,156532,156534,156536,156539,156542],{"class":161,"line":223},[159,156529,182],{"class":169},[159,156531,101107],{"class":165},[159,156533,156497],{"class":1146},[159,156535,1486],{"class":165},[159,156537,156538],{"class":1146},"move",[159,156540,156541],{"class":165},"; }      ",[159,156543,156544],{"class":1135},"\u002F* 移动 *\u002F\n",[159,156546,156547,156549,156551,156553,156555,156557,156559],{"class":161,"line":233},[159,156548,182],{"class":169},[159,156550,101107],{"class":165},[159,156552,156497],{"class":1146},[159,156554,1486],{"class":165},[159,156556,8507],{"class":1146},[159,156558,156541],{"class":165},[159,156560,156561],{"class":1135},"\u002F* 文本 *\u002F\n",[159,156563,156564,156566,156568,156570,156572,156575,156578],{"class":161,"line":239},[159,156565,182],{"class":169},[159,156567,101107],{"class":165},[159,156569,156497],{"class":1146},[159,156571,1486],{"class":165},[159,156573,156574],{"class":1146},"not-allowed",[159,156576,156577],{"class":165},"; } ",[159,156579,156580],{"class":1135},"\u002F* 禁止 *\u002F\n",[12347,156582,156583,156591],{},[16500,156584,156585],{},[12356,156586,156587,156589],{},[12365,156588,148316],{"align":19854},[12365,156590,51012],{"align":19854},[16624,156592,156593,156600,156607,156614,156621],{},[12356,156594,156595,156597],{},[12488,156596,156520],{"align":19854},[12488,156598,156599],{"align":19854},"小白 默认",[12356,156601,156602,156604],{},[12488,156603,9072],{"align":19854},[12488,156605,156606],{"align":19854},"小手",[12356,156608,156609,156611],{},[12488,156610,156538],{"align":19854},[12488,156612,156613],{"align":19854},"移动",[12356,156615,156616,156618],{},[12488,156617,8507],{"align":19854},[12488,156619,156620],{"align":19854},"文本",[12356,156622,156623,156625],{},[12488,156624,156574],{"align":19854},[12488,156626,156627],{"align":19854},"禁止",[42,156629,156631],{"id":156630},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,156633,156634],{},"去除表单轮廓线",[14,156636,156637],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[151,156639,156640],{"className":147852,"code":151216,"language":147854,"meta":25,"style":25},[49,156641,156642,156646,156652,156668],{"__ignoreMap":25},[159,156643,156644],{"class":161,"line":162},[159,156645,151223],{"class":1135},[159,156647,156648,156650],{"class":161,"line":176},[159,156649,182],{"class":169},[159,156651,1478],{"class":165},[159,156653,156654,156656,156658,156660,156662,156664,156666],{"class":161,"line":203},[159,156655,17983],{"class":1146},[159,156657,1486],{"class":165},[159,156659,4932],{"class":1146},[159,156661,1571],{"class":1142},[159,156663,7709],{"class":1146},[159,156665,151244],{"class":1146},[159,156667,1492],{"class":165},[159,156669,156670],{"class":161,"line":223},[159,156671,15685],{"class":165},[14,156673,156674],{},"文本域：",[23,156676],{"style":147708,"src":156677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,156679,156680],{},"此时会有一个空白区域",[23,156682],{"style":147708,"src":156683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,156685,156686],{},"写在同一行就不会出现这个问题",[23,156688],{"style":147708,"src":156689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,156691,156692],{},"文本域是行内块元素，一定记住！！！",[14,156694,119533],{},[23,156696],{"style":147708,"src":156697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,156699,156700],{},"文本域尽量放在一行",[14,156702,156703],{},"知识回顾：cols是列，rols是行",[23,156705],{"style":147708,"src":156706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,156708,156709],{},"它可以进行拖动，显然这是我们不愿意看到的",[23,156711],{"style":147708,"src":156712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,156714,156715],{},"使用resize进行解决",[151,156717,156719],{"className":147852,"code":156718,"language":147854,"meta":25,"style":25},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[49,156720,156721,156727,156740],{"__ignoreMap":25},[159,156722,156723,156725],{"class":161,"line":162},[159,156724,536],{"class":169},[159,156726,1478],{"class":165},[159,156728,156729,156731,156733,156735,156737],{"class":161,"line":176},[159,156730,17885],{"class":1146},[159,156732,1486],{"class":165},[159,156734,1529],{"class":1146},[159,156736,151715],{"class":165},[159,156738,156739],{"class":1135},"\u002F* 取消表单轮廓线 *\u002F\n",[159,156741,156742],{"class":161,"line":203},[159,156743,15685],{"class":165},[14,156745,156746],{},"此时就无法通过右下方实现拖动了",[42,156748,156750],{"id":156749},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,156752,156753],{},"实现一个盒子中的文字和图片对齐",[14,156755,156756,156757,156760],{},"用于设置一个元素的 ",[61,156758,156759],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,156762,156763],{},"图片和文字默认是基线对齐",[23,156765],{"style":147708,"src":156766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[151,156768,156769],{"className":147852,"code":156718,"language":147854,"meta":25,"style":25},[49,156770,156771,156777,156789],{"__ignoreMap":25},[159,156772,156773,156775],{"class":161,"line":162},[159,156774,536],{"class":169},[159,156776,1478],{"class":165},[159,156778,156779,156781,156783,156785,156787],{"class":161,"line":176},[159,156780,17885],{"class":1146},[159,156782,1486],{"class":165},[159,156784,1529],{"class":1146},[159,156786,151715],{"class":165},[159,156788,156739],{"class":1135},[159,156790,156791],{"class":161,"line":203},[159,156792,15685],{"class":165},[23,156794],{"style":147708,"src":156795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[326,156797,156799],{"id":156798},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,156801,156802],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[23,156804],{"style":147708,"src":156805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,156807,156808,156809,156812],{},"此时可以给图片、表单这些行内块元素的 ",[61,156810,156811],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[326,156814,156816],{"id":156815},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,156818,156819],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,156821,38199],{},[151,156823,156825],{"className":147852,"code":156824,"language":147854,"meta":25,"style":25},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[49,156826,156827,156832,156838,156850],{"__ignoreMap":25},[159,156828,156829],{"class":161,"line":162},[159,156830,156831],{"class":1135},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[159,156833,156834,156836],{"class":161,"line":176},[159,156835,23],{"class":169},[159,156837,1478],{"class":165},[159,156839,156840,156843,156845,156848],{"class":161,"line":203},[159,156841,156842],{"class":1146},"  vertical-align",[159,156844,1486],{"class":165},[159,156846,156847],{"class":1146},"middle",[159,156849,1492],{"class":165},[159,156851,156852],{"class":161,"line":223},[159,156853,15685],{"class":165},[23,156855],{"style":147708,"src":156856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,156858,156859],{},"主要解决方法有两种：",[134,156861,156862],{},[106,156863,156864,156867,156868,156871],{},[61,156865,156866],{},"给图片"," 添加 ",[61,156869,156870],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,156873,156874,156875],{},"2.把图片转换为块级元素 ",[61,156876,156877],{},"display: block",[14,156879,156880],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,156882,156883],{},"img {",[14,156885,156886],{},"vertical-align:middle;",[14,156888,886],{},[42,156890,156892],{"id":156891},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,156894,156895],{},"效果：",[23,156897],{"style":147708,"src":156898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,156900,156901],{},"单行文本溢出显示省略号--必须满足三个条件：",[151,156903,156905],{"className":147852,"code":156904,"language":147854,"meta":25,"style":25},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[49,156906,156907,156912,156918,156928,156933,156943],{"__ignoreMap":25},[159,156908,156909],{"class":161,"line":162},[159,156910,156911],{"class":1135},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[159,156913,156914,156916],{"class":161,"line":176},[159,156915,23],{"class":169},[159,156917,1478],{"class":165},[159,156919,156920,156922,156924,156926],{"class":161,"line":203},[159,156921,156842],{"class":1146},[159,156923,1486],{"class":165},[159,156925,156847],{"class":1146},[159,156927,1492],{"class":165},[159,156929,156930],{"class":161,"line":223},[159,156931,156932],{"class":1135},"  \u002F* 或 *\u002F\n",[159,156934,156935,156937,156939,156941],{"class":161,"line":233},[159,156936,149468],{"class":1146},[159,156938,1486],{"class":165},[159,156940,7896],{"class":1146},[159,156942,1492],{"class":165},[159,156944,156945],{"class":161,"line":239},[159,156946,15685],{"class":165},[42,156948,156950],{"id":156949},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,156952,156895],{},[23,156954],{"style":147708,"src":156955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,156957,156958,156959,156962],{},"多行文本溢出显示省略号， ",[61,156960,156961],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[151,156964,156965],{"className":147852,"code":156904,"language":147854,"meta":25,"style":25},[49,156966,156967,156971,156977,156987,156991,157001],{"__ignoreMap":25},[159,156968,156969],{"class":161,"line":162},[159,156970,156911],{"class":1135},[159,156972,156973,156975],{"class":161,"line":176},[159,156974,23],{"class":169},[159,156976,1478],{"class":165},[159,156978,156979,156981,156983,156985],{"class":161,"line":203},[159,156980,156842],{"class":1146},[159,156982,1486],{"class":165},[159,156984,156847],{"class":1146},[159,156986,1492],{"class":165},[159,156988,156989],{"class":161,"line":223},[159,156990,156932],{"class":1135},[159,156992,156993,156995,156997,156999],{"class":161,"line":233},[159,156994,149468],{"class":1146},[159,156996,1486],{"class":165},[159,156998,7896],{"class":1146},[159,157000,1492],{"class":165},[159,157002,157003],{"class":161,"line":239},[159,157004,15685],{"class":165},[14,157006,157007],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[37,157009,157011],{"id":157010},"_133-常见布局技巧","13.3 常见布局技巧",[14,157013,157014],{},[61,157015,157016],{},"巧妙利用一个技术更快更好的布局：",[134,157018,157019,157022,157025,157028],{},[106,157020,157021],{},"margin负值的运用",[106,157023,157024],{},"文字围绕浮动元素",[106,157026,157027],{},"行内块的巧妙运用",[106,157029,157030],{},"CSS三角强化",[42,157032,157034],{"id":157033},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,157036,157037],{},"应用场景：",[23,157039],{"style":147708,"src":157040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[23,157042],{"style":147708,"src":157043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,157045,157046],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,157048,157049],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[151,157051,157052],{"className":147852,"code":151216,"language":147854,"meta":25,"style":25},[49,157053,157054,157058,157064,157080],{"__ignoreMap":25},[159,157055,157056],{"class":161,"line":162},[159,157057,151223],{"class":1135},[159,157059,157060,157062],{"class":161,"line":176},[159,157061,182],{"class":169},[159,157063,1478],{"class":165},[159,157065,157066,157068,157070,157072,157074,157076,157078],{"class":161,"line":203},[159,157067,17983],{"class":1146},[159,157069,1486],{"class":165},[159,157071,4932],{"class":1146},[159,157073,1571],{"class":1142},[159,157075,7709],{"class":1146},[159,157077,151244],{"class":1146},[159,157079,1492],{"class":165},[159,157081,157082],{"class":161,"line":223},[159,157083,15685],{"class":165},[23,157085],{"style":147708,"src":157086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,157088,157089],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[151,157091,157093],{"className":147852,"code":157092,"language":147854,"meta":25,"style":25},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[49,157094,157095,157100,157106,157116,157128,157140],{"__ignoreMap":25},[159,157096,157097],{"class":161,"line":162},[159,157098,157099],{"class":1135},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[159,157101,157102,157104],{"class":161,"line":176},[159,157103,151700],{"class":185},[159,157105,1478],{"class":165},[159,157107,157108,157110,157112,157114],{"class":161,"line":203},[159,157109,153658],{"class":1146},[159,157111,1486],{"class":165},[159,157113,1556],{"class":1146},[159,157115,1492],{"class":165},[159,157117,157118,157120,157122,157124,157126],{"class":161,"line":223},[159,157119,153672],{"class":1146},[159,157121,1486],{"class":165},[159,157123,1964],{"class":1146},[159,157125,1571],{"class":1142},[159,157127,1492],{"class":165},[159,157129,157130,157132,157134,157136,157138],{"class":161,"line":233},[159,157131,153689],{"class":1146},[159,157133,1486],{"class":165},[159,157135,1739],{"class":1146},[159,157137,1571],{"class":1142},[159,157139,1492],{"class":165},[159,157141,157142],{"class":161,"line":239},[159,157143,15685],{"class":165},[14,157145,157146],{},"加上上述代码会发现：",[23,157148],{"style":147708,"src":157149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,157151,157152],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,157154,157155],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[151,157157,157158],{"className":147852,"code":157092,"language":147854,"meta":25,"style":25},[49,157159,157160,157164,157170,157180,157192,157204],{"__ignoreMap":25},[159,157161,157162],{"class":161,"line":162},[159,157163,157099],{"class":1135},[159,157165,157166,157168],{"class":161,"line":176},[159,157167,151700],{"class":185},[159,157169,1478],{"class":165},[159,157171,157172,157174,157176,157178],{"class":161,"line":203},[159,157173,153658],{"class":1146},[159,157175,1486],{"class":165},[159,157177,1556],{"class":1146},[159,157179,1492],{"class":165},[159,157181,157182,157184,157186,157188,157190],{"class":161,"line":223},[159,157183,153672],{"class":1146},[159,157185,1486],{"class":165},[159,157187,1964],{"class":1146},[159,157189,1571],{"class":1142},[159,157191,1492],{"class":165},[159,157193,157194,157196,157198,157200,157202],{"class":161,"line":233},[159,157195,153689],{"class":1146},[159,157197,1486],{"class":165},[159,157199,1739],{"class":1146},[159,157201,1571],{"class":1142},[159,157203,1492],{"class":165},[159,157205,157206],{"class":161,"line":239},[159,157207,15685],{"class":165},[14,157209,157210],{},"解决方式2：",[14,157212,157213],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[151,157215,157217],{"className":147852,"code":157216,"language":147854,"meta":25,"style":25},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[49,157218,157219,157225,157235,157247,157259],{"__ignoreMap":25},[159,157220,157221,157223],{"class":161,"line":162},[159,157222,182],{"class":169},[159,157224,1478],{"class":165},[159,157226,157227,157229,157231,157233],{"class":161,"line":176},[159,157228,153658],{"class":1146},[159,157230,1486],{"class":165},[159,157232,1556],{"class":1146},[159,157234,1492],{"class":165},[159,157236,157237,157239,157241,157243,157245],{"class":161,"line":203},[159,157238,153672],{"class":1146},[159,157240,1486],{"class":165},[159,157242,1964],{"class":1146},[159,157244,1571],{"class":1142},[159,157246,1492],{"class":165},[159,157248,157249,157251,157253,157255,157257],{"class":161,"line":223},[159,157250,153689],{"class":1146},[159,157252,1486],{"class":165},[159,157254,1739],{"class":1146},[159,157256,1571],{"class":1142},[159,157258,1492],{"class":165},[159,157260,157261],{"class":161,"line":233},[159,157262,15685],{"class":165},[42,157264,157266],{"id":157265},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,157268,157037],{},[23,157270],{"style":147708,"src":157271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,157273,157274],{},"实现结构图：",[23,157276],{"style":147708,"src":157277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,157279,157280],{},"巧妙运用浮动元素不会压住文字的特性",[14,157282,157283],{},"代码显示：",[151,157285,157287],{"className":147852,"code":157286,"language":147854,"meta":25,"style":25},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[49,157288,157289,157295,157305,157309,157314,157318,157324,157338],{"__ignoreMap":25},[159,157290,157291,157293],{"class":161,"line":162},[159,157292,151700],{"class":185},[159,157294,1478],{"class":165},[159,157296,157297,157299,157301,157303],{"class":161,"line":176},[159,157298,152332],{"class":1146},[159,157300,1486],{"class":165},[159,157302,19854],{"class":1146},[159,157304,1492],{"class":165},[159,157306,157307],{"class":161,"line":203},[159,157308,15685],{"class":165},[159,157310,157311],{"class":161,"line":223},[159,157312,157313],{"class":165},"```Css\n",[159,157315,157316],{"class":161,"line":233},[159,157317,151695],{"class":1135},[159,157319,157320,157322],{"class":161,"line":239},[159,157321,151700],{"class":185},[159,157323,1478],{"class":165},[159,157325,157326,157328,157330,157332,157334,157336],{"class":161,"line":245},[159,157327,17556],{"class":1146},[159,157329,1486],{"class":165},[159,157331,1489],{"class":1146},[159,157333,1601],{"class":1146},[159,157335,151715],{"class":165},[159,157337,151718],{"class":1135},[159,157339,157340],{"class":161,"line":251},[159,157341,15685],{"class":165},[14,157343,157344],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[151,157346,157349],{"className":157347,"code":157348,"language":8507},[28803],"\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",[49,157350,157348],{"__ignoreMap":25},[23,157352],{"style":147708,"src":157353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,157355,157356],{},"最终展示结果：",[151,157358,157359],{"className":147852,"code":151688,"language":147854,"meta":25,"style":25},[49,157360,157361,157365,157371,157385],{"__ignoreMap":25},[159,157362,157363],{"class":161,"line":162},[159,157364,151695],{"class":1135},[159,157366,157367,157369],{"class":161,"line":176},[159,157368,151700],{"class":185},[159,157370,1478],{"class":165},[159,157372,157373,157375,157377,157379,157381,157383],{"class":161,"line":203},[159,157374,17556],{"class":1146},[159,157376,1486],{"class":165},[159,157378,1489],{"class":1146},[159,157380,1601],{"class":1146},[159,157382,151715],{"class":165},[159,157384,151718],{"class":1135},[159,157386,157387],{"class":161,"line":223},[159,157388,15685],{"class":165},[23,157390],{"style":147708,"src":157391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[37,157393,157395],{"id":157394},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[42,157397,157399],{"id":157398},"_1341-原理","13.4.1 原理",[23,157401],{"style":147708,"src":157402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[151,157404,157405],{"className":147852,"code":151688,"language":147854,"meta":25,"style":25},[49,157406,157407,157411,157417,157431],{"__ignoreMap":25},[159,157408,157409],{"class":161,"line":162},[159,157410,151695],{"class":1135},[159,157412,157413,157415],{"class":161,"line":176},[159,157414,151700],{"class":185},[159,157416,1478],{"class":165},[159,157418,157419,157421,157423,157425,157427,157429],{"class":161,"line":203},[159,157420,17556],{"class":1146},[159,157422,1486],{"class":165},[159,157424,1489],{"class":1146},[159,157426,1601],{"class":1146},[159,157428,151715],{"class":165},[159,157430,151718],{"class":1135},[159,157432,157433],{"class":161,"line":223},[159,157434,15685],{"class":165},[42,157436,157438],{"id":157437},"_1342-实例","13.4.2 实例",[23,157440],{"style":147708,"src":157441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[151,157443,157444],{"className":147852,"code":152318,"language":147854,"meta":25,"style":25},[49,157445,157446,157452,157462,157466,157472,157482],{"__ignoreMap":25},[159,157447,157448,157450],{"class":161,"line":162},[159,157449,152325],{"class":185},[159,157451,1478],{"class":165},[159,157453,157454,157456,157458,157460],{"class":161,"line":176},[159,157455,152332],{"class":1146},[159,157457,1486],{"class":165},[159,157459,19854],{"class":1146},[159,157461,1492],{"class":165},[159,157463,157464],{"class":161,"line":203},[159,157465,15685],{"class":165},[159,157467,157468,157470],{"class":161,"line":223},[159,157469,152347],{"class":185},[159,157471,1478],{"class":165},[159,157473,157474,157476,157478,157480],{"class":161,"line":233},[159,157475,152332],{"class":1146},[159,157477,1486],{"class":165},[159,157479,19623],{"class":1146},[159,157481,1492],{"class":165},[159,157483,157484],{"class":161,"line":239},[159,157485,15685],{"class":165},[37,157487,157489],{"id":157488},"_135-css的初始化","13.5 css的初始化",[14,157491,157492],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,157494,157495],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,157497,157498],{},"每个网页都必须首先进行 CSS初始化。",[14,157500,157501],{},"这里我们以 京东CSS初始化代码为例。",[14,157503,157504],{},"在网页右键查看网页源代码",[14,157506,157507],{},"找到css的link引入语句",[14,157509,157510],{},"然后ctrl+f 输入body",[14,157512,98526],{},[23,157514],{"style":147708,"src":157515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,157517,98549],{},[23,157519],{"style":147708,"src":157520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,157522,157523],{},"③打开了网页上传压缩的代码",[23,157525],{"style":147708,"src":157526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,157528,157529],{},"④从body前可以查看这个网页的初始化代码",[14,157531,157532],{},[61,157533,157534],{},"Unicode编码字体：",[14,157536,157537],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,157539,104507],{},[14,157541,157542],{},"黑体 \\9ED1\\4F53",[14,157544,157545],{},"宋体 \\5B8B\\4F53",[14,157547,157548],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1468,157550,157551],{},"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":25,"searchDepth":176,"depth":176,"links":157553},[157554,157555,157562,157566,157570],{"id":156351,"depth":176,"text":156352},{"id":156473,"depth":176,"text":156474,"children":157556},[157557,157558,157559,157560,157561],{"id":156477,"depth":203,"text":156478},{"id":156630,"depth":203,"text":156631},{"id":156749,"depth":203,"text":156750},{"id":156891,"depth":203,"text":156892},{"id":156949,"depth":203,"text":156950},{"id":157010,"depth":176,"text":157011,"children":157563},[157564,157565],{"id":157033,"depth":203,"text":157034},{"id":157265,"depth":203,"text":157266},{"id":157394,"depth":176,"text":157395,"children":157567},[157568,157569],{"id":157398,"depth":203,"text":157399},{"id":157437,"depth":203,"text":157438},{"id":157488,"depth":176,"text":157489},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":156343,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":157577,"title":157578,"body":157579,"description":23809,"extension":23810,"meta":159265,"navigation":589,"path":159266,"seo":159267,"stem":159268,"__hash__":159269},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":157580,"toc":159254},[157581,157584,157588,157592,157595,157602,157605,157608,157646,157649,157651,157665,157669,157678,157682,157687,157690,157693,157696,157731,157736,157739,157769,157772,157777,157780,157783,157813,157816,157870,157873,157877,157882,157894,157897,157901,157931,157934,157939,157942,157972,157975,157979,157996,158000,158004,158007,158040,158043,158047,158050,158053,158056,158059,158062,158173,158176,158179,158182,158284,158287,158291,158295,158299,158302,158342,158345,158347,158363,158367,158370,158375,158456,158459,158462,158588,158593,158596,158604,158607,158612,158697,158700,158704,158707,158710,158714,158734,158739,158823,158826,158831,158834,158837,158915,158918,158921,158924,158927,158930,158935,158938,158941,159013,159016,159021,159024,159121,159124,159130,159133,159136,159139,159142,159145,159148,159151,159154,159158,159163,159166,159199,159204,159207,159248,159251],[10,157582,157578],{"id":157583},"_14-html5与css3新特性",[37,157585,157587],{"id":157586},"_141-html5的新特性","14.1 HTML5的新特性",[42,157589,157591],{"id":157590},"_1411-基本标签","14.1.1 基本标签",[14,157593,157594],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,157596,157597,157598,157601],{},"这些新特性都有兼容性问题，基本是 ",[61,157599,157600],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,157603,157604],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,157606,157607],{},"现在使用的是新特性：",[103,157609,157610,157616,157622,157628,157634,157640],{},[106,157611,157612,157615],{},[49,157613,157614],{},"\u003Cheader>"," 头部标签",[106,157617,157618,157621],{},[49,157619,157620],{},"\u003Cnav>"," 导航标签",[106,157623,157624,157627],{},[49,157625,157626],{},"\u003Carticle>"," 内容标签",[106,157629,157630,157633],{},[49,157631,157632],{},"\u003Csection>"," 定义文档某个区域",[106,157635,157636,157639],{},[49,157637,157638],{},"\u003Caside>"," 侧边栏标签",[106,157641,157642,157645],{},[49,157643,157644],{},"\u003Cfooter>"," 尾部标签",[23,157647],{"style":147708,"src":157648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,157650,23910],{},[103,157652,157653,157656,157659,157662],{},[106,157654,157655],{},"这种语义化标准主要是针对搜索引擎的",[106,157657,157658],{},"这些标签页面中可以经常使用",[106,157660,157661],{},"在IE9中，需要把这些元素转换为块级元素",[106,157663,157664],{},"移动端更喜欢使用这些标签",[42,157666,157668],{"id":157667},"_1412-多媒体标签","14.1.2 多媒体标签",[14,157670,157671,157672,157674,157675,157677],{},"音频 ",[61,157673,51696],{}," 和视频 ",[61,157676,51705],{}," 两个标签",[326,157679,157681],{"id":157680},"_14121-视频标签-video","14.1.2.1 视频标签- video",[134,157683,157684],{},[106,157685,157686],{},"支持格式：",[23,157688],{"style":147708,"src":157689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,157691,157692],{},"尽量使用MP4，兼容性好",[14,157694,157695],{},"用MP4就可以",[151,157697,157699],{"className":148599,"code":157698,"language":148601,"meta":25,"style":25},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[49,157700,157701],{"__ignoreMap":25},[159,157702,157703,157705,157707,157709,157711,157714,157716,157719,157722,157725,157727,157729],{"class":161,"line":162},[159,157704,166],{"class":165},[159,157706,51705],{"class":169},[159,157708,2078],{"class":185},[159,157710,189],{"class":165},[159,157712,157713],{"class":192},"\"movie.mp4\"",[159,157715,113723],{"class":185},[159,157717,157718],{"class":185}," autoplay",[159,157720,157721],{"class":185}," muted",[159,157723,157724],{"class":185}," loop",[159,157726,2158],{"class":165},[159,157728,51705],{"class":169},[159,157730,173],{"class":165},[134,157732,157733],{"start":176},[106,157734,157735],{},"兼容写法",[14,157737,157738],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[151,157740,157741],{"className":148599,"code":157698,"language":148601,"meta":25,"style":25},[49,157742,157743],{"__ignoreMap":25},[159,157744,157745,157747,157749,157751,157753,157755,157757,157759,157761,157763,157765,157767],{"class":161,"line":162},[159,157746,166],{"class":165},[159,157748,51705],{"class":169},[159,157750,2078],{"class":185},[159,157752,189],{"class":165},[159,157754,157713],{"class":192},[159,157756,113723],{"class":185},[159,157758,157718],{"class":185},[159,157760,157721],{"class":185},[159,157762,157724],{"class":185},[159,157764,2158],{"class":165},[159,157766,51705],{"class":169},[159,157768,173],{"class":165},[14,157770,157771],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[134,157773,157774],{"start":203},[106,157775,157776],{},"video常用属性",[23,157778],{"style":147708,"src":157779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,157781,157782],{},"poster属性后面是跟的等待加载图片的地址",[151,157784,157785],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,157786,157787],{"__ignoreMap":25},[159,157788,157789,157791,157793,157795,157797,157799,157801,157803,157805,157807,157809,157811],{"class":161,"line":162},[159,157790,166],{"class":165},[159,157792,23],{"class":169},[159,157794,2078],{"class":185},[159,157796,189],{"class":165},[159,157798,155369],{"class":192},[159,157800,2086],{"class":185},[159,157802,189],{"class":165},[159,157804,155376],{"class":192},[159,157806,155379],{"class":185},[159,157808,189],{"class":165},[159,157810,155384],{"class":192},[159,157812,173],{"class":165},[14,157814,157815],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[151,157817,157819],{"className":147852,"code":157818,"language":147854,"meta":25,"style":25},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[49,157820,157821,157826,157832,157856,157861,157866],{"__ignoreMap":25},[159,157822,157823],{"class":161,"line":162},[159,157824,157825],{"class":1135},"\u002F* 2D 位移 *\u002F\n",[159,157827,157828,157830],{"class":161,"line":176},[159,157829,182],{"class":169},[159,157831,1478],{"class":165},[159,157833,157834,157837,157839,157842,157844,157846,157848,157850,157852,157854],{"class":161,"line":203},[159,157835,157836],{"class":1146},"  transform",[159,157838,1486],{"class":165},[159,157840,157841],{"class":1146},"translate",[159,157843,1159],{"class":165},[159,157845,1596],{"class":1146},[159,157847,1571],{"class":1142},[159,157849,1939],{"class":165},[159,157851,4230],{"class":1146},[159,157853,1571],{"class":1142},[159,157855,1953],{"class":165},[159,157857,157858],{"class":161,"line":223},[159,157859,157860],{"class":1135},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[159,157862,157863],{"class":161,"line":233},[159,157864,157865],{"class":1135},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[159,157867,157868],{"class":161,"line":239},[159,157869,15685],{"class":165},[14,157871,157872],{},"muted:自动静音属性",[326,157874,157876],{"id":157875},"_14122-音频标签audio","14.1.2.2 音频标签audio",[134,157878,157879],{},[106,157880,157881],{},"基本使用",[14,157883,157884,157885,157890,157891],{},"当前 ",[61,157886,157887],{},[49,157888,157889],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[61,157892,157893],{},"mp3格式",[23,157895],{"style":147708,"src":157896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[134,157898,157899],{"start":176},[106,157900,157735],{},[151,157902,157903],{"className":148599,"code":157698,"language":148601,"meta":25,"style":25},[49,157904,157905],{"__ignoreMap":25},[159,157906,157907,157909,157911,157913,157915,157917,157919,157921,157923,157925,157927,157929],{"class":161,"line":162},[159,157908,166],{"class":165},[159,157910,51705],{"class":169},[159,157912,2078],{"class":185},[159,157914,189],{"class":165},[159,157916,157713],{"class":192},[159,157918,113723],{"class":185},[159,157920,157718],{"class":185},[159,157922,157721],{"class":185},[159,157924,157724],{"class":185},[159,157926,2158],{"class":165},[159,157928,51705],{"class":169},[159,157930,173],{"class":165},[14,157932,157933],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[134,157935,157936],{"start":203},[106,157937,157938],{},"常用属性",[23,157940],{"style":147708,"src":157941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[151,157943,157944],{"className":148599,"code":157698,"language":148601,"meta":25,"style":25},[49,157945,157946],{"__ignoreMap":25},[159,157947,157948,157950,157952,157954,157956,157958,157960,157962,157964,157966,157968,157970],{"class":161,"line":162},[159,157949,166],{"class":165},[159,157951,51705],{"class":169},[159,157953,2078],{"class":185},[159,157955,189],{"class":165},[159,157957,157713],{"class":192},[159,157959,113723],{"class":185},[159,157961,157718],{"class":185},[159,157963,157721],{"class":185},[159,157965,157724],{"class":185},[159,157967,2158],{"class":165},[159,157969,51705],{"class":169},[159,157971,173],{"class":165},[14,157973,157974],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[326,157976,157978],{"id":157977},"_14123-总结","14.1.2.3 总结",[103,157980,157981,157984,157987,157990,157993],{},[106,157982,157983],{},"音频标签和视频标签使用方式基本一致",[106,157985,157986],{},"浏览器支持情况不同",[106,157988,157989],{},"谷歌浏览器把音频和视频自动播放禁止了",[106,157991,157992],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[106,157994,157995],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[42,157997,157999],{"id":157998},"_1413-表单元素","14.1.3 表单元素",[326,158001,158003],{"id":158002},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[23,158005],{"style":147708,"src":158006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[151,158008,158010],{"className":148599,"code":158009,"language":148601,"meta":25,"style":25},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[49,158011,158012],{"__ignoreMap":25},[159,158013,158014,158016,158018,158020,158022,158024,158026,158028,158031,158033,158035,158038],{"class":161,"line":162},[159,158015,166],{"class":165},[159,158017,536],{"class":169},[159,158019,539],{"class":185},[159,158021,189],{"class":165},[159,158023,9742],{"class":192},[159,158025,547],{"class":185},[159,158027,189],{"class":165},[159,158029,158030],{"class":192},"\"username\"",[159,158032,8050],{"class":185},[159,158034,189],{"class":165},[159,158036,158037],{"class":192},"\"请输入用户名\"",[159,158039,173],{"class":165},[23,158041],{"style":147708,"src":158042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[326,158044,158046],{"id":158045},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[23,158048],{"style":147708,"src":158049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,158051,158052],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,158054,158055],{},"快捷操作：",[23,158057],{"style":147708,"src":158058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,158060,158061],{},"例子1：",[151,158063,158065],{"className":148599,"code":158064,"language":148601,"meta":25,"style":25},"\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",[49,158066,158067,158090,158117,158146,158165],{"__ignoreMap":25},[159,158068,158069,158071,158073,158075,158077,158080,158083,158085,158088],{"class":161,"line":162},[159,158070,166],{"class":165},[159,158072,13694],{"class":169},[159,158074,13697],{"class":185},[159,158076,189],{"class":165},[159,158078,158079],{"class":192},"\"\u002Fsubmit\"",[159,158081,158082],{"class":185}," method",[159,158084,189],{"class":165},[159,158086,158087],{"class":192},"\"post\"",[159,158089,173],{"class":165},[159,158091,158092,158094,158096,158098,158100,158102,158104,158106,158108,158110,158112,158115],{"class":161,"line":176},[159,158093,179],{"class":165},[159,158095,536],{"class":169},[159,158097,539],{"class":185},[159,158099,189],{"class":165},[159,158101,9742],{"class":192},[159,158103,547],{"class":185},[159,158105,189],{"class":165},[159,158107,158030],{"class":192},[159,158109,8050],{"class":185},[159,158111,189],{"class":165},[159,158113,158114],{"class":192},"\"用户名\"",[159,158116,173],{"class":165},[159,158118,158119,158121,158123,158125,158127,158130,158132,158134,158137,158139,158141,158144],{"class":161,"line":203},[159,158120,179],{"class":165},[159,158122,536],{"class":169},[159,158124,539],{"class":185},[159,158126,189],{"class":165},[159,158128,158129],{"class":192},"\"password\"",[159,158131,547],{"class":185},[159,158133,189],{"class":165},[159,158135,158136],{"class":192},"\"pwd\"",[159,158138,8050],{"class":185},[159,158140,189],{"class":165},[159,158142,158143],{"class":192},"\"密码\"",[159,158145,173],{"class":165},[159,158147,158148,158150,158152,158154,158156,158158,158161,158163],{"class":161,"line":223},[159,158149,179],{"class":165},[159,158151,608],{"class":169},[159,158153,539],{"class":185},[159,158155,189],{"class":165},[159,158157,13717],{"class":192},[159,158159,158160],{"class":165},">提交\u003C\u002F",[159,158162,608],{"class":169},[159,158164,173],{"class":165},[159,158166,158167,158169,158171],{"class":161,"line":233},[159,158168,264],{"class":165},[159,158170,13694],{"class":169},[159,158172,173],{"class":165},[23,158174],{"style":147708,"src":158175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,158177,158178],{},"value是表单域的内容",[14,158180,158181],{},"例子2：",[151,158183,158184],{"className":148599,"code":158064,"language":148601,"meta":25,"style":25},[49,158185,158186,158206,158232,158258,158276],{"__ignoreMap":25},[159,158187,158188,158190,158192,158194,158196,158198,158200,158202,158204],{"class":161,"line":162},[159,158189,166],{"class":165},[159,158191,13694],{"class":169},[159,158193,13697],{"class":185},[159,158195,189],{"class":165},[159,158197,158079],{"class":192},[159,158199,158082],{"class":185},[159,158201,189],{"class":165},[159,158203,158087],{"class":192},[159,158205,173],{"class":165},[159,158207,158208,158210,158212,158214,158216,158218,158220,158222,158224,158226,158228,158230],{"class":161,"line":176},[159,158209,179],{"class":165},[159,158211,536],{"class":169},[159,158213,539],{"class":185},[159,158215,189],{"class":165},[159,158217,9742],{"class":192},[159,158219,547],{"class":185},[159,158221,189],{"class":165},[159,158223,158030],{"class":192},[159,158225,8050],{"class":185},[159,158227,189],{"class":165},[159,158229,158114],{"class":192},[159,158231,173],{"class":165},[159,158233,158234,158236,158238,158240,158242,158244,158246,158248,158250,158252,158254,158256],{"class":161,"line":203},[159,158235,179],{"class":165},[159,158237,536],{"class":169},[159,158239,539],{"class":185},[159,158241,189],{"class":165},[159,158243,158129],{"class":192},[159,158245,547],{"class":185},[159,158247,189],{"class":165},[159,158249,158136],{"class":192},[159,158251,8050],{"class":185},[159,158253,189],{"class":165},[159,158255,158143],{"class":192},[159,158257,173],{"class":165},[159,158259,158260,158262,158264,158266,158268,158270,158272,158274],{"class":161,"line":223},[159,158261,179],{"class":165},[159,158263,608],{"class":169},[159,158265,539],{"class":185},[159,158267,189],{"class":165},[159,158269,13717],{"class":192},[159,158271,158160],{"class":165},[159,158273,608],{"class":169},[159,158275,173],{"class":165},[159,158277,158278,158280,158282],{"class":161,"line":233},[159,158279,264],{"class":165},[159,158281,13694],{"class":169},[159,158283,173],{"class":165},[23,158285],{"style":147708,"src":158286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[37,158288,158290],{"id":158289},"_142-css新特性","14.2 CSS新特性",[42,158292,158294],{"id":158293},"_1421-新增选择器","14.2.1 新增选择器",[326,158296,158298],{"id":158297},"_14211-属性选择器","14.2.1.1 属性选择器",[23,158300],{"style":147708,"src":158301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[151,158303,158305],{"className":147852,"code":158304,"language":147854,"meta":25,"style":25},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[49,158306,158307,158322,158338],{"__ignoreMap":25},[159,158308,158309,158311,158313,158315,158317,158319],{"class":161,"line":162},[159,158310,536],{"class":169},[159,158312,17263],{"class":165},[159,158314,124407],{"class":185},[159,158316,189],{"class":1142},[159,158318,9742],{"class":192},[159,158320,158321],{"class":165},"] {\n",[159,158323,158324,158326,158328,158330,158332,158334,158336],{"class":161,"line":176},[159,158325,17983],{"class":1146},[159,158327,1486],{"class":165},[159,158329,4932],{"class":1146},[159,158331,1571],{"class":1142},[159,158333,7709],{"class":1146},[159,158335,151432],{"class":1146},[159,158337,1492],{"class":165},[159,158339,158340],{"class":161,"line":203},[159,158341,15685],{"class":165},[23,158343],{"style":147708,"src":158344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,158346,23910],{},[103,158348,158349,158352,158355,158358],{},[106,158350,158351],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[106,158353,158354],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[106,158356,158357],{},"属性选择器也可以选择出来自定义的属性",[106,158359,158360,158362],{},[61,158361,32623],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[326,158364,158366],{"id":158365},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[23,158368],{"style":147708,"src":158369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[134,158371,158372],{},[106,158373,158374],{},"fist-child",[151,158376,158378],{"className":147852,"code":158377,"language":147854,"meta":25,"style":25},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[49,158379,158380,158385,158400,158420,158438],{"__ignoreMap":25},[159,158381,158382],{"class":161,"line":162},[159,158383,158384],{"class":1135},"\u002F* 属性选择器 *\u002F\n",[159,158386,158387,158389,158391,158393,158395,158397],{"class":161,"line":176},[159,158388,536],{"class":169},[159,158390,17263],{"class":165},[159,158392,124407],{"class":185},[159,158394,189],{"class":1142},[159,158396,9742],{"class":192},[159,158398,158399],{"class":165},"] { }\n",[159,158401,158402,158404,158406,158408,158411,158414,158417],{"class":161,"line":203},[159,158403,536],{"class":169},[159,158405,17263],{"class":165},[159,158407,38260],{"class":185},[159,158409,158410],{"class":1142},"^=",[159,158412,158413],{"class":192},"\"icon\"",[159,158415,158416],{"class":165},"] { }  ",[159,158418,158419],{"class":1135},"\u002F* 以 icon 开头 *\u002F\n",[159,158421,158422,158424,158426,158428,158431,158433,158435],{"class":161,"line":223},[159,158423,536],{"class":169},[159,158425,17263],{"class":165},[159,158427,38260],{"class":185},[159,158429,158430],{"class":1142},"$=",[159,158432,158413],{"class":192},[159,158434,158416],{"class":165},[159,158436,158437],{"class":1135},"\u002F* 以 icon 结尾 *\u002F\n",[159,158439,158440,158442,158444,158446,158449,158451,158453],{"class":161,"line":233},[159,158441,536],{"class":169},[159,158443,17263],{"class":165},[159,158445,38260],{"class":185},[159,158447,158448],{"class":1142},"*=",[159,158450,158413],{"class":192},[159,158452,158416],{"class":165},[159,158454,158455],{"class":1135},"\u002F* 包含 icon *\u002F\n",[14,158457,158458],{},"ul的第一个儿子文本为红色",[14,158460,158461],{},"一定要在冒号前加空格，不然就是选中所有的了",[151,158463,158465],{"className":147852,"code":158464,"language":147854,"meta":25,"style":25},".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",[49,158466,158467,158473,158483,158487,158491,158496,158509,158522,158538,158555,158572],{"__ignoreMap":25},[159,158468,158469,158471],{"class":161,"line":162},[159,158470,148143],{"class":185},[159,158472,1478],{"class":165},[159,158474,158475,158477,158479,158481],{"class":161,"line":176},[159,158476,17992],{"class":1146},[159,158478,1486],{"class":165},[159,158480,4327],{"class":1146},[159,158482,1492],{"class":165},[159,158484,158485],{"class":161,"line":203},[159,158486,15685],{"class":165},[159,158488,158489],{"class":161,"line":223},[159,158490,157313],{"class":165},[159,158492,158493],{"class":161,"line":233},[159,158494,158495],{"class":1135},"\u002F* 结构伪类选择器 *\u002F\n",[159,158497,158498,158500,158503,158506],{"class":161,"line":239},[159,158499,106],{"class":169},[159,158501,158502],{"class":185},":first-child",[159,158504,158505],{"class":165}," { }           ",[159,158507,158508],{"class":1135},"\u002F* 第一个 *\u002F\n",[159,158510,158511,158513,158516,158519],{"class":161,"line":245},[159,158512,106],{"class":169},[159,158514,158515],{"class":185},":last-child",[159,158517,158518],{"class":165}," { }            ",[159,158520,158521],{"class":1135},"\u002F* 最后一个 *\u002F\n",[159,158523,158524,158526,158528,158530,158532,158535],{"class":161,"line":251},[159,158525,106],{"class":169},[159,158527,150766],{"class":185},[159,158529,1159],{"class":165},[159,158531,11034],{"class":1146},[159,158533,158534],{"class":165},") { }          ",[159,158536,158537],{"class":1135},"\u002F* 第2个 *\u002F\n",[159,158539,158540,158542,158544,158546,158549,158552],{"class":161,"line":261},[159,158541,106],{"class":169},[159,158543,150766],{"class":185},[159,158545,1159],{"class":165},[159,158547,158548],{"class":1146},"2n",[159,158550,158551],{"class":165},") { }         ",[159,158553,158554],{"class":1135},"\u002F* 偶数 *\u002F\n",[159,158556,158557,158559,158561,158563,158566,158569],{"class":161,"line":603},[159,158558,106],{"class":169},[159,158560,150766],{"class":185},[159,158562,1159],{"class":165},[159,158564,158565],{"class":1146},"2n+1",[159,158567,158568],{"class":165},") { }       ",[159,158570,158571],{"class":1135},"\u002F* 奇数 *\u002F\n",[159,158573,158574,158576,158578,158580,158583,158585],{"class":161,"line":621},[159,158575,106],{"class":169},[159,158577,150766],{"class":185},[159,158579,1159],{"class":165},[159,158581,158582],{"class":1146},"-n+3",[159,158584,158568],{"class":165},[159,158586,158587],{"class":1135},"\u002F* 前3个 *\u002F\n",[182,158589,158592],{"className":158590},[158591],"example","\n  示例内容\n",[14,158594,158595],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[103,158597,158598],{},[106,158599,158600,158603],{},[49,158601,158602],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,158605,158606],{},"也就是说它选择的是熊大",[134,158608,158609],{"start":239},[106,158610,158611],{},"权重",[151,158613,158615],{"className":147852,"code":158614,"language":147854,"meta":25,"style":25},"\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",[49,158616,158617,158621,158631,158641,158655,158669,158683],{"__ignoreMap":25},[159,158618,158619],{"class":161,"line":162},[159,158620,158495],{"class":1135},[159,158622,158623,158625,158627,158629],{"class":161,"line":176},[159,158624,106],{"class":169},[159,158626,158502],{"class":185},[159,158628,158505],{"class":165},[159,158630,158508],{"class":1135},[159,158632,158633,158635,158637,158639],{"class":161,"line":203},[159,158634,106],{"class":169},[159,158636,158515],{"class":185},[159,158638,158518],{"class":165},[159,158640,158521],{"class":1135},[159,158642,158643,158645,158647,158649,158651,158653],{"class":161,"line":223},[159,158644,106],{"class":169},[159,158646,150766],{"class":185},[159,158648,1159],{"class":165},[159,158650,11034],{"class":1146},[159,158652,158534],{"class":165},[159,158654,158537],{"class":1135},[159,158656,158657,158659,158661,158663,158665,158667],{"class":161,"line":233},[159,158658,106],{"class":169},[159,158660,150766],{"class":185},[159,158662,1159],{"class":165},[159,158664,158548],{"class":1146},[159,158666,158551],{"class":165},[159,158668,158554],{"class":1135},[159,158670,158671,158673,158675,158677,158679,158681],{"class":161,"line":239},[159,158672,106],{"class":169},[159,158674,150766],{"class":185},[159,158676,1159],{"class":165},[159,158678,158565],{"class":1146},[159,158680,158568],{"class":165},[159,158682,158571],{"class":1135},[159,158684,158685,158687,158689,158691,158693,158695],{"class":161,"line":245},[159,158686,106],{"class":169},[159,158688,150766],{"class":185},[159,158690,1159],{"class":165},[159,158692,158582],{"class":1146},[159,158694,158568],{"class":165},[159,158696,158587],{"class":1135},[14,158698,158699],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[326,158701,158703],{"id":158702},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,158705,158706],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[23,158708],{"style":147708,"src":158709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[134,158711,158712],{},[106,158713,23910],{},[103,158715,158716,158719,158722,158725,158728,158731],{},[106,158717,158718],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[106,158720,158721],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[106,158723,158724],{},"语法： element::before {}",[106,158726,158727],{},"before 和 after 必须有 content 属性",[106,158729,158730],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[106,158732,158733],{},"伪元素选择器和标签选择器一样，权重为 1",[134,158735,158736],{"start":176},[106,158737,158738],{},"实例",[151,158740,158741],{"className":147852,"code":158614,"language":147854,"meta":25,"style":25},[49,158742,158743,158747,158757,158767,158781,158795,158809],{"__ignoreMap":25},[159,158744,158745],{"class":161,"line":162},[159,158746,158495],{"class":1135},[159,158748,158749,158751,158753,158755],{"class":161,"line":176},[159,158750,106],{"class":169},[159,158752,158502],{"class":185},[159,158754,158505],{"class":165},[159,158756,158508],{"class":1135},[159,158758,158759,158761,158763,158765],{"class":161,"line":203},[159,158760,106],{"class":169},[159,158762,158515],{"class":185},[159,158764,158518],{"class":165},[159,158766,158521],{"class":1135},[159,158768,158769,158771,158773,158775,158777,158779],{"class":161,"line":223},[159,158770,106],{"class":169},[159,158772,150766],{"class":185},[159,158774,1159],{"class":165},[159,158776,11034],{"class":1146},[159,158778,158534],{"class":165},[159,158780,158537],{"class":1135},[159,158782,158783,158785,158787,158789,158791,158793],{"class":161,"line":233},[159,158784,106],{"class":169},[159,158786,150766],{"class":185},[159,158788,1159],{"class":165},[159,158790,158548],{"class":1146},[159,158792,158551],{"class":165},[159,158794,158554],{"class":1135},[159,158796,158797,158799,158801,158803,158805,158807],{"class":161,"line":239},[159,158798,106],{"class":169},[159,158800,150766],{"class":185},[159,158802,1159],{"class":165},[159,158804,158565],{"class":1146},[159,158806,158568],{"class":165},[159,158808,158571],{"class":1135},[159,158810,158811,158813,158815,158817,158819,158821],{"class":161,"line":245},[159,158812,106],{"class":169},[159,158814,150766],{"class":185},[159,158816,1159],{"class":165},[159,158818,158582],{"class":1146},[159,158820,158568],{"class":165},[159,158822,158587],{"class":1135},[23,158824],{"style":147708,"src":158825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[134,158827,158828],{"start":203},[106,158829,158830],{},"使用场景1",[23,158832],{"style":147708,"src":158833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,158835,158836],{},"不需要再加盒子来整红色那部分了",[151,158838,158840],{"className":147852,"code":158839,"language":147854,"meta":25,"style":25},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[49,158841,158842,158847,158856,158867,158877,158881,158890,158901,158911],{"__ignoreMap":25},[159,158843,158844],{"class":161,"line":162},[159,158845,158846],{"class":1135},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[159,158848,158849,158851,158854],{"class":161,"line":176},[159,158850,182],{"class":169},[159,158852,158853],{"class":185},"::before",[159,158855,1478],{"class":165},[159,158857,158858,158861,158863,158865],{"class":161,"line":203},[159,158859,158860],{"class":1146},"  content",[159,158862,1486],{"class":165},[159,158864,552],{"class":192},[159,158866,1492],{"class":165},[159,158868,158869,158871,158873,158875],{"class":161,"line":223},[159,158870,149468],{"class":1146},[159,158872,1486],{"class":165},[159,158874,7896],{"class":1146},[159,158876,1492],{"class":165},[159,158878,158879],{"class":161,"line":233},[159,158880,15685],{"class":165},[159,158882,158883,158885,158888],{"class":161,"line":239},[159,158884,182],{"class":169},[159,158886,158887],{"class":185},"::after",[159,158889,1478],{"class":165},[159,158891,158892,158894,158896,158899],{"class":161,"line":245},[159,158893,158860],{"class":1146},[159,158895,1486],{"class":165},[159,158897,158898],{"class":192},"\"→\"",[159,158900,1492],{"class":165},[159,158902,158903,158905,158907,158909],{"class":161,"line":251},[159,158904,17992],{"class":1146},[159,158906,1486],{"class":165},[159,158908,9113],{"class":1146},[159,158910,1492],{"class":165},[159,158912,158913],{"class":161,"line":261},[159,158914,15685],{"class":165},[23,158916],{"style":147708,"src":158917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,158919,158920],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[23,158922],{"style":147708,"src":158923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,158925,158926],{},"但是在引用时需要先转义一下",[14,158928,158929],{},"content='\\e930'",[134,158931,158932],{"start":223},[106,158933,158934],{},"使用场景2",[14,158936,158937],{},"仿土豆效果",[14,158939,158940],{},"通过使用伪元素选择器可以减少body中盒子的数量",[151,158942,158943],{"className":147852,"code":158839,"language":147854,"meta":25,"style":25},[49,158944,158945,158949,158957,158967,158977,158981,158989,158999,159009],{"__ignoreMap":25},[159,158946,158947],{"class":161,"line":162},[159,158948,158846],{"class":1135},[159,158950,158951,158953,158955],{"class":161,"line":176},[159,158952,182],{"class":169},[159,158954,158853],{"class":185},[159,158956,1478],{"class":165},[159,158958,158959,158961,158963,158965],{"class":161,"line":203},[159,158960,158860],{"class":1146},[159,158962,1486],{"class":165},[159,158964,552],{"class":192},[159,158966,1492],{"class":165},[159,158968,158969,158971,158973,158975],{"class":161,"line":223},[159,158970,149468],{"class":1146},[159,158972,1486],{"class":165},[159,158974,7896],{"class":1146},[159,158976,1492],{"class":165},[159,158978,158979],{"class":161,"line":233},[159,158980,15685],{"class":165},[159,158982,158983,158985,158987],{"class":161,"line":239},[159,158984,182],{"class":169},[159,158986,158887],{"class":185},[159,158988,1478],{"class":165},[159,158990,158991,158993,158995,158997],{"class":161,"line":245},[159,158992,158860],{"class":1146},[159,158994,1486],{"class":165},[159,158996,158898],{"class":192},[159,158998,1492],{"class":165},[159,159000,159001,159003,159005,159007],{"class":161,"line":251},[159,159002,17992],{"class":1146},[159,159004,1486],{"class":165},[159,159006,9113],{"class":1146},[159,159008,1492],{"class":165},[159,159010,159011],{"class":161,"line":261},[159,159012,15685],{"class":165},[23,159014],{"style":147708,"src":159015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[134,159017,159018],{"start":233},[106,159019,159020],{},"使用场景3",[14,159022,159023],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[151,159025,159027],{"className":147852,"code":159026,"language":147854,"meta":25,"style":25},".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",[49,159028,159029,159035,159045,159049,159053,159057,159065,159075,159085,159089,159097,159107,159117],{"__ignoreMap":25},[159,159030,159031,159033],{"class":161,"line":162},[159,159032,151700],{"class":185},[159,159034,1478],{"class":165},[159,159036,159037,159039,159041,159043],{"class":161,"line":176},[159,159038,152332],{"class":1146},[159,159040,1486],{"class":165},[159,159042,19854],{"class":1146},[159,159044,1492],{"class":165},[159,159046,159047],{"class":161,"line":203},[159,159048,15685],{"class":165},[159,159050,159051],{"class":161,"line":223},[159,159052,157313],{"class":165},[159,159054,159055],{"class":161,"line":233},[159,159056,158846],{"class":1135},[159,159058,159059,159061,159063],{"class":161,"line":239},[159,159060,182],{"class":169},[159,159062,158853],{"class":185},[159,159064,1478],{"class":165},[159,159066,159067,159069,159071,159073],{"class":161,"line":245},[159,159068,158860],{"class":1146},[159,159070,1486],{"class":165},[159,159072,552],{"class":192},[159,159074,1492],{"class":165},[159,159076,159077,159079,159081,159083],{"class":161,"line":251},[159,159078,149468],{"class":1146},[159,159080,1486],{"class":165},[159,159082,7896],{"class":1146},[159,159084,1492],{"class":165},[159,159086,159087],{"class":161,"line":261},[159,159088,15685],{"class":165},[159,159090,159091,159093,159095],{"class":161,"line":603},[159,159092,182],{"class":169},[159,159094,158887],{"class":185},[159,159096,1478],{"class":165},[159,159098,159099,159101,159103,159105],{"class":161,"line":621},[159,159100,158860],{"class":1146},[159,159102,1486],{"class":165},[159,159104,158898],{"class":192},[159,159106,1492],{"class":165},[159,159108,159109,159111,159113,159115],{"class":161,"line":634},[159,159110,17992],{"class":1146},[159,159112,1486],{"class":165},[159,159114,9113],{"class":1146},[159,159116,1492],{"class":165},[159,159118,159119],{"class":161,"line":640},[159,159120,15685],{"class":165},[14,159122,159123],{},"div {\nmargin: 0 auto;\n}",[151,159125,159128],{"className":159126,"code":159127,"language":8507},[28803],"\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",[49,159129,159127],{"__ignoreMap":25},[14,159131,159132],{},"如果想让多个元素都发生变化",[14,159134,159135],{},"不能如下操作：",[14,159137,159138],{},"transition: width 2s ease 0.5s;",[14,159140,159141],{},"transition: height 2s ease 0.5s;不对！！！",[14,159143,159144],{},"上方会样式冲突，导致不显示任何过渡效果",[14,159146,159147],{},"使用如下：加逗号隔开",[14,159149,159150],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,159152,159153],{},"transition all 2s ease;",[42,159155,159157],{"id":159156},"_1426-过渡练习","14.2.6 过渡练习",[134,159159,159160],{},[106,159161,159162],{},"进度条",[23,159164],{"style":147708,"src":159165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[151,159167,159169],{"className":147852,"code":159168,"language":147854,"meta":25,"style":25},"div {\n  transition: all 0.3s ease;\n}\n",[49,159170,159171,159177,159195],{"__ignoreMap":25},[159,159172,159173,159175],{"class":161,"line":162},[159,159174,182],{"class":169},[159,159176,1478],{"class":165},[159,159178,159179,159182,159184,159186,159189,159191,159193],{"class":161,"line":176},[159,159180,159181],{"class":1146},"  transition",[159,159183,1486],{"class":165},[159,159185,8903],{"class":1146},[159,159187,159188],{"class":1146}," 0.3",[159,159190,8909],{"class":1142},[159,159192,99980],{"class":1146},[159,159194,1492],{"class":165},[159,159196,159197],{"class":161,"line":203},[159,159198,15685],{"class":165},[134,159200,159201],{"start":176},[106,159202,159203],{},"小米logo",[14,159205,159206],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[151,159208,159210],{"className":147852,"code":159209,"language":147854,"meta":25,"style":25},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[49,159211,159212,159217,159223,159239,159244],{"__ignoreMap":25},[159,159213,159214],{"class":161,"line":162},[159,159215,159216],{"class":1135},"\u002F* CSS3 过渡 *\u002F\n",[159,159218,159219,159221],{"class":161,"line":176},[159,159220,182],{"class":169},[159,159222,1478],{"class":165},[159,159224,159225,159227,159229,159231,159233,159235,159237],{"class":161,"line":203},[159,159226,159181],{"class":1146},[159,159228,1486],{"class":165},[159,159230,8903],{"class":1146},[159,159232,159188],{"class":1146},[159,159234,8909],{"class":1142},[159,159236,99980],{"class":1146},[159,159238,1492],{"class":165},[159,159240,159241],{"class":161,"line":223},[159,159242,159243],{"class":1135},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[159,159245,159246],{"class":161,"line":233},[159,159247,15685],{"class":165},[14,159249,159250],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1468,159252,159253],{},"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":25,"searchDepth":176,"depth":176,"links":159255},[159256,159261],{"id":157586,"depth":176,"text":157587,"children":159257},[159258,159259,159260],{"id":157590,"depth":203,"text":157591},{"id":157667,"depth":203,"text":157668},{"id":157998,"depth":203,"text":157999},{"id":158289,"depth":176,"text":158290,"children":159262},[159263,159264],{"id":158293,"depth":203,"text":158294},{"id":159156,"depth":203,"text":159157},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":157578,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":159271,"title":159272,"body":159273,"description":23809,"extension":23810,"meta":161017,"navigation":589,"path":161018,"seo":161019,"stem":161020,"__hash__":161021},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":159274,"toc":160998},[159275,159278,159282,159285,159291,159297,159301,159303,159306,159309,159312,159315,159318,159321,159324,159328,159332,159335,159338,159341,159345,159348,159351,159356,159359,159362,159365,159369,159372,159381,159384,159387,159391,159394,159397,159402,159409,159423,159431,159438,159443,159446,159449,159452,159459,159463,159469,159475,159478,159481,159486,159492,159494,159502,159507,159510,159516,159518,159523,159528,159531,159533,159538,159541,159546,159551,159585,159589,159593,159596,159600,159603,159689,159692,159729,159732,159768,159772,159777,159790,159844,159846,159874,159876,159904,159910,159924,159926,159970,159972,160016,160019,160026,160037,160039,160066,160068,160094,160101,160117,160119,160213,160215,160309,160316,160319,160324,160330,160404,160407,160409,160445,160447,160483,160486,160493,160512,160515,160518,160520,160545,160547,160571,160574,160577,160607,160611,160614,160677,160679,160745,160747,160811,160814,160846,160848,160874,160876,160902,160905,160936,160938,160964,160966,160992,160995],[10,159276,159272],{"id":159277},"_15-品优购项目上篇-搭建与公共模块",[37,159279,159281],{"id":159280},"_151-项目规划","15.1 项目规划",[23,159283],{"style":147708,"src":159284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,159286,159287,159290],{},[61,159288,159289],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,159292,159293,159296],{},[61,159294,159295],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[37,159298,159300],{"id":159299},"_152-项目介绍","15.2 项目介绍",[14,159302,159289],{},[23,159304],{"style":147708,"src":159305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,159307,159308],{},"主页：",[23,159310],{"style":147708,"src":159311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,159313,159314],{},"列表页：",[23,159316],{"style":147708,"src":159317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,159319,159320],{},"注册页：",[23,159322],{"style":147708,"src":159323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[37,159325,159327],{"id":159326},"_153-项目搭建工作","15.3 项目搭建工作",[42,159329,159331],{"id":159330},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[23,159333],{"style":147708,"src":159334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,159336,159337],{},"经常更换的图片要放到upload文件夹中",[14,159339,159340],{},"不经常换的放到images文件夹中",[42,159342,159344],{"id":159343},"_1532-创建文件如下","15.3.2 创建文件如下",[23,159346],{"style":147708,"src":159347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[23,159349],{"style":147708,"src":159350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,159352,159353],{},[61,159354,159355],{},"初始化样式：",[14,159357,159358],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,159360,159361],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,159363,159364],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[42,159366,159368],{"id":159367},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,159370,159371],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,159373,159374,159375,159380],{},"这里最典型的应用就是 ",[61,159376,159377],{},[49,159378,159379],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[23,159382],{"style":147708,"src":159383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,159385,159386],{},"通过link方法来引入",[42,159388,159390],{"id":159389},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[23,159392],{"style":147708,"src":159393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,159395,159396],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[134,159398,159399],{},[106,159400,159401],{},"制作favicon图标",[14,159403,159404,159405,159408],{},"①把品优购图标切成 ",[49,159406,159407],{},"png"," 图片",[14,159410,159411,159412,159414,159415,159418,159419],{},"②把 ",[49,159413,159407],{}," 图片转换为 ",[49,159416,159417],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[8085,159420,159421],{"href":159421,"rel":159422},"http:\u002F\u002Fwww.bitbug.net\u002F",[15923],[134,159424,159425,159428],{"start":176},[106,159426,159427],{},"favicon图标放到网站根目录下",[106,159429,159430],{},"HTML页面引入favicon",[14,159432,159433,159434,159437],{},"在html 页面里面的 ",[49,159435,159436],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,159439,159440],{},[49,159441,159442],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,159444,159445],{},"复制这行代码或者在生成这个的网站进行复制",[23,159447],{"style":147708,"src":159448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,159450,159451],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,159453,159454,159455],{},"例如:",[8085,159456,159457],{"href":159457,"rel":159458},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[15923],[42,159460,159462],{"id":159461},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,159464,159465,159468],{},[61,159466,159467],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,159470,159471,159474],{},[61,159472,159473],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,159476,159477],{},"页面必须有三个标签用来符合 SEO 优化",[23,159479],{"style":147708,"src":159480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[134,159482,159483],{},[106,159484,159485],{},"title网站标题",[14,159487,159488,159491],{},[61,159489,159490],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,159493,15862],{},[103,159495,159496,159499],{},[106,159497,159498],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[106,159500,159501],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[134,159503,159504],{"start":176},[106,159505,159506],{},"description网站描述",[14,159508,159509],{},"简要说明我们网站主要是做什么的",[14,159511,159512,159515],{},[61,159513,159514],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,159517,15862],{},[14,159519,159520],{},[49,159521,159522],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[134,159524,159525],{"start":203},[106,159526,159527],{},"keywords关键词",[14,159529,159530],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,159532,15862],{},[14,159534,159535],{},[49,159536,159537],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,159539,159540],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,159542,159543],{},[61,159544,159545],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[134,159547,159548],{"start":223},[106,159549,159550],{},"代码总结",[151,159552,159553],{"className":148599,"code":151956,"language":148601,"meta":25,"style":25},[49,159554,159555,159559,159573,159577],{"__ignoreMap":25},[159,159556,159557],{"class":161,"line":162},[159,159558,151963],{"class":1135},[159,159560,159561,159563,159565,159567,159569,159571],{"class":161,"line":176},[159,159562,166],{"class":165},[159,159564,182],{"class":169},[159,159566,186],{"class":185},[159,159568,189],{"class":165},[159,159570,151976],{"class":192},[159,159572,173],{"class":165},[159,159574,159575],{"class":161,"line":203},[159,159576,151983],{"class":165},[159,159578,159579,159581,159583],{"class":161,"line":223},[159,159580,264],{"class":165},[159,159582,182],{"class":169},[159,159584,173],{"class":165},[37,159586,159588],{"id":159587},"_154-项目公共部分制作","15.4 项目公共部分制作",[42,159590,159592],{"id":159591},"_1541-常用模块类命名","15.4.1 常用模块类命名",[23,159594],{"style":147708,"src":159595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[42,159597,159599],{"id":159598},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,159601,159602],{},"布局思路：",[103,159604,159605,159608,159611,159633,159666],{},[106,159606,159607],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[106,159609,159610],{},"里面包含版心的盒子",[106,159612,159613,159614],{},"版心盒子里面包含 1 号左侧盒子左浮动",[103,159615,159616,159624,159630],{},[106,159617,159618,159619,45027,159621,159623],{},"1 号盒子 里面包含一个",[49,159620,103],{},[49,159622,103],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[106,159625,159626,159627,159629],{},"里面的内容是水平排列，所以需要给",[49,159628,106],{},"设置浮动",[106,159631,159632],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[106,159634,159635,159636],{},"版心盒子里面包含 2 号右侧盒子右浮动",[103,159637,159638,159652,159657],{},[106,159639,159640,159641,45027,159643,159645,159646,159648,159649,159651],{},"2 号盒子 里面包含一个",[49,159642,103],{},[49,159644,103],{},"包裹",[49,159647,106],{},"，中间的",[49,159650,24743],{},"可以用样式去设置，也可以用字符 |",[106,159653,159654,159655,159629],{},"里面内容水平排列，给",[49,159656,106],{},[106,159658,159659,159660,159662,159663,159665],{},"找到里面所有偶数的 ",[49,159661,106],{}," 设置样式（偶数的 ",[49,159664,106],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[106,159667,159668,159669],{},"需要用到字体图标",[103,159670,159671,159677,159680,159683,159686],{},[106,159672,159673,159674],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[49,159675,159676],{},"arrow-icon",[106,159678,159679],{},"先要引入字体图片的资源",[106,159681,159682],{},"在样式里面利用 font-face 来进行声明",[106,159684,159685],{},"在伪元素的 content属性设置 图标的编码",[106,159687,159688],{},"给伪元素设置font-family属性",[14,159690,159691],{},"结构实例代码：",[151,159693,159695],{"className":147852,"code":159694,"language":147854,"meta":25,"style":25},"div::before {\n  content: \"\";\n  display: block;\n}\n",[49,159696,159697,159705,159715,159725],{"__ignoreMap":25},[159,159698,159699,159701,159703],{"class":161,"line":162},[159,159700,182],{"class":169},[159,159702,158853],{"class":185},[159,159704,1478],{"class":165},[159,159706,159707,159709,159711,159713],{"class":161,"line":176},[159,159708,158860],{"class":1146},[159,159710,1486],{"class":165},[159,159712,552],{"class":192},[159,159714,1492],{"class":165},[159,159716,159717,159719,159721,159723],{"class":161,"line":203},[159,159718,149468],{"class":1146},[159,159720,1486],{"class":165},[159,159722,7896],{"class":1146},[159,159724,1492],{"class":165},[159,159726,159727],{"class":161,"line":223},[159,159728,15685],{"class":165},[14,159730,159731],{},"样式实例代码：",[151,159733,159734],{"className":147852,"code":159694,"language":147854,"meta":25,"style":25},[49,159735,159736,159744,159754,159764],{"__ignoreMap":25},[159,159737,159738,159740,159742],{"class":161,"line":162},[159,159739,182],{"class":169},[159,159741,158853],{"class":185},[159,159743,1478],{"class":165},[159,159745,159746,159748,159750,159752],{"class":161,"line":176},[159,159747,158860],{"class":1146},[159,159749,1486],{"class":165},[159,159751,552],{"class":192},[159,159753,1492],{"class":165},[159,159755,159756,159758,159760,159762],{"class":161,"line":203},[159,159757,149468],{"class":1146},[159,159759,1486],{"class":165},[159,159761,7896],{"class":1146},[159,159763,1492],{"class":165},[159,159765,159766],{"class":161,"line":223},[159,159767,15685],{"class":165},[42,159769,159771],{"id":159770},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[103,159773,159774],{},[106,159775,159776],{},"header 盒子必须要有高度",[14,159778,159779,159780,159782,159783],{},"1 号盒子是 ",[49,159781,152864],{}," 标志定位，在正常开发过程中， ",[61,159784,159785,159786,159789],{},"logo的布局其实是有讲究的，需要进行 ",[49,159787,159788],{},"logoSEO","的优化 （★★★）",[103,159791,159792,159800,159808,159835],{},[106,159793,159794,159796,159797,159799],{},[49,159795,152864],{}," 里面首先放一个 ",[49,159798,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[106,159801,159802,159804,159805,159807],{},[49,159803,10],{}," 里面再放一个链接，可以返回首页的，把 ",[49,159806,152864],{}," 的背景图片给链接即可",[106,159809,159810,159811],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[103,159812,159813,159828],{},[106,159814,159815,159816,159819,159820,159823,159824,159827],{},"方法1：",[49,159817,159818],{},"text-indent"," 移到盒子外面（",[49,159821,159822],{},"text-indent: -9999px",") ，然后 ",[49,159825,159826],{},"overflow:hidden"," ，淘宝的做法",[106,159829,159830,159831,159834],{},"方法2：直接给 ",[49,159832,159833],{},"font-size: 0;"," 就看不到文字了，京东的做法",[106,159836,159837,159838,159840,159841,159843],{},"最后给链接一个 ",[49,159839,998],{}," 属性，这样鼠标放到 ",[49,159842,152864],{}," 上就可以看到提示文字了",[14,159845,159691],{},[151,159847,159848],{"className":148599,"code":153085,"language":148601,"meta":25,"style":25},[49,159849,159850],{"__ignoreMap":25},[159,159851,159852,159854,159856,159858,159860,159862,159864,159866,159868,159870,159872],{"class":161,"line":162},[159,159853,166],{"class":165},[159,159855,8085],{"class":169},[159,159857,8088],{"class":185},[159,159859,189],{"class":165},[159,159861,153100],{"class":192},[159,159863,153103],{"class":185},[159,159865,189],{"class":165},[159,159867,153108],{"class":192},[159,159869,153111],{"class":165},[159,159871,8085],{"class":169},[159,159873,173],{"class":165},[14,159875,159731],{},[151,159877,159878],{"className":148599,"code":153085,"language":148601,"meta":25,"style":25},[49,159879,159880],{"__ignoreMap":25},[159,159881,159882,159884,159886,159888,159890,159892,159894,159896,159898,159900,159902],{"class":161,"line":162},[159,159883,166],{"class":165},[159,159885,8085],{"class":169},[159,159887,8088],{"class":185},[159,159889,189],{"class":165},[159,159891,153100],{"class":192},[159,159893,153103],{"class":185},[159,159895,189],{"class":165},[159,159897,153108],{"class":192},[159,159899,153111],{"class":165},[159,159901,8085],{"class":169},[159,159903,173],{"class":165},[14,159905,159906,159907,159909],{},"2 号盒子是 ",[49,159908,152877],{}," 搜索模块定位",[103,159911,159912,159915,159918,159921],{},[106,159913,159914],{},"search盒子利用定位的方式放在对应的位置",[106,159916,159917],{},"search盒子设置绝对定位，header盒子设置相对定位",[106,159919,159920],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[106,159922,159923],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,159925,159691],{},[151,159927,159928],{"className":147852,"code":153172,"language":147854,"meta":25,"style":25},[49,159929,159930,159952,159956,159966],{"__ignoreMap":25},[159,159931,159932,159934,159936,159938,159940,159942,159944,159946,159948,159950],{"class":161,"line":162},[159,159933,182],{"class":169},[159,159935,1939],{"class":165},[159,159937,14],{"class":169},[159,159939,1939],{"class":165},[159,159941,10],{"class":169},[159,159943,1939],{"class":165},[159,159945,103],{"class":169},[159,159947,1939],{"class":165},[159,159949,106],{"class":169},[159,159951,1478],{"class":165},[159,159953,159954],{"class":161,"line":176},[159,159955,153201],{"class":1135},[159,159957,159958,159960,159962,159964],{"class":161,"line":203},[159,159959,149468],{"class":1146},[159,159961,1486],{"class":165},[159,159963,7896],{"class":1146},[159,159965,1492],{"class":165},[159,159967,159968],{"class":161,"line":223},[159,159969,15685],{"class":165},[14,159971,159731],{},[151,159973,159974],{"className":147852,"code":153172,"language":147854,"meta":25,"style":25},[49,159975,159976,159998,160002,160012],{"__ignoreMap":25},[159,159977,159978,159980,159982,159984,159986,159988,159990,159992,159994,159996],{"class":161,"line":162},[159,159979,182],{"class":169},[159,159981,1939],{"class":165},[159,159983,14],{"class":169},[159,159985,1939],{"class":165},[159,159987,10],{"class":169},[159,159989,1939],{"class":165},[159,159991,103],{"class":169},[159,159993,1939],{"class":165},[159,159995,106],{"class":169},[159,159997,1478],{"class":165},[159,159999,160000],{"class":161,"line":176},[159,160001,153201],{"class":1135},[159,160003,160004,160006,160008,160010],{"class":161,"line":203},[159,160005,149468],{"class":1146},[159,160007,1486],{"class":165},[159,160009,7896],{"class":1146},[159,160011,1492],{"class":165},[159,160013,160014],{"class":161,"line":223},[159,160015,15685],{"class":165},[14,160017,160018],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,160020,160021,160022,160025],{},"3 号盒子是 ",[49,160023,160024],{},"hotwords"," 热词模块定位",[103,160027,160028,160031,160034],{},[106,160029,160030],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[106,160032,160033],{},"给里面所有的a标签设置 左右10px的外边距",[106,160035,160036],{},"给第一个a标签设置文字变红色（#c81623）",[14,160038,159691],{},[151,160040,160042],{"className":147852,"code":160041,"language":147854,"meta":25,"style":25},"div {\n  margin: 0 auto;\n}\n",[49,160043,160044,160050,160062],{"__ignoreMap":25},[159,160045,160046,160048],{"class":161,"line":162},[159,160047,182],{"class":169},[159,160049,1478],{"class":165},[159,160051,160052,160054,160056,160058,160060],{"class":161,"line":176},[159,160053,17556],{"class":1146},[159,160055,1486],{"class":165},[159,160057,1489],{"class":1146},[159,160059,1601],{"class":1146},[159,160061,1492],{"class":165},[159,160063,160064],{"class":161,"line":203},[159,160065,15685],{"class":165},[14,160067,159731],{},[151,160069,160070],{"className":147852,"code":160041,"language":147854,"meta":25,"style":25},[49,160071,160072,160078,160090],{"__ignoreMap":25},[159,160073,160074,160076],{"class":161,"line":162},[159,160075,182],{"class":169},[159,160077,1478],{"class":165},[159,160079,160080,160082,160084,160086,160088],{"class":161,"line":176},[159,160081,17556],{"class":1146},[159,160083,1486],{"class":165},[159,160085,1489],{"class":1146},[159,160087,1601],{"class":1146},[159,160089,1492],{"class":165},[159,160091,160092],{"class":161,"line":203},[159,160093,15685],{"class":165},[14,160095,160096,160097,160100],{},"4 号盒子是 ",[49,160098,160099],{},"shopcar"," 购物车模块",[103,160102,160103,160108,160111,160114],{},[106,160104,144635,160105,160107],{},[49,160106,160099],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[106,160109,160110],{},"count 统计部分用绝对定位做",[106,160112,160113],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[106,160115,160116],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,160118,159691],{},[151,160120,160121],{"className":147852,"code":153284,"language":147854,"meta":25,"style":25},[49,160122,160123,160127,160141,160145,160159,160163,160177,160181,160195,160199],{"__ignoreMap":25},[159,160124,160125],{"class":161,"line":162},[159,160126,153291],{"class":1135},[159,160128,160129,160131,160133,160135,160137,160139],{"class":161,"line":176},[159,160130,153296],{"class":185},[159,160132,101107],{"class":165},[159,160134,150212],{"class":1146},[159,160136,1486],{"class":165},[159,160138,153305],{"class":1146},[159,160140,150782],{"class":165},[159,160142,160143],{"class":161,"line":203},[159,160144,153312],{"class":1135},[159,160146,160147,160149,160151,160153,160155,160157],{"class":161,"line":223},[159,160148,153317],{"class":185},[159,160150,101107],{"class":165},[159,160152,150212],{"class":1146},[159,160154,1486],{"class":165},[159,160156,1556],{"class":1146},[159,160158,150782],{"class":165},[159,160160,160161],{"class":161,"line":233},[159,160162,153332],{"class":1135},[159,160164,160165,160167,160169,160171,160173,160175],{"class":161,"line":239},[159,160166,153337],{"class":185},[159,160168,101107],{"class":165},[159,160170,150212],{"class":1146},[159,160172,1486],{"class":165},[159,160174,1627],{"class":1146},[159,160176,150782],{"class":165},[159,160178,160179],{"class":161,"line":245},[159,160180,153352],{"class":1135},[159,160182,160183,160185,160187,160189,160191,160193],{"class":161,"line":251},[159,160184,153357],{"class":185},[159,160186,101107],{"class":165},[159,160188,150212],{"class":1146},[159,160190,1486],{"class":165},[159,160192,107533],{"class":1146},[159,160194,150782],{"class":165},[159,160196,160197],{"class":161,"line":261},[159,160198,153372],{"class":1135},[159,160200,160201,160203,160205,160207,160209,160211],{"class":161,"line":603},[159,160202,153377],{"class":185},[159,160204,101107],{"class":165},[159,160206,150212],{"class":1146},[159,160208,1486],{"class":165},[159,160210,153386],{"class":1146},[159,160212,150782],{"class":165},[14,160214,159731],{},[151,160216,160217],{"className":147852,"code":153284,"language":147854,"meta":25,"style":25},[49,160218,160219,160223,160237,160241,160255,160259,160273,160277,160291,160295],{"__ignoreMap":25},[159,160220,160221],{"class":161,"line":162},[159,160222,153291],{"class":1135},[159,160224,160225,160227,160229,160231,160233,160235],{"class":161,"line":176},[159,160226,153296],{"class":185},[159,160228,101107],{"class":165},[159,160230,150212],{"class":1146},[159,160232,1486],{"class":165},[159,160234,153305],{"class":1146},[159,160236,150782],{"class":165},[159,160238,160239],{"class":161,"line":203},[159,160240,153312],{"class":1135},[159,160242,160243,160245,160247,160249,160251,160253],{"class":161,"line":223},[159,160244,153317],{"class":185},[159,160246,101107],{"class":165},[159,160248,150212],{"class":1146},[159,160250,1486],{"class":165},[159,160252,1556],{"class":1146},[159,160254,150782],{"class":165},[159,160256,160257],{"class":161,"line":233},[159,160258,153332],{"class":1135},[159,160260,160261,160263,160265,160267,160269,160271],{"class":161,"line":239},[159,160262,153337],{"class":185},[159,160264,101107],{"class":165},[159,160266,150212],{"class":1146},[159,160268,1486],{"class":165},[159,160270,1627],{"class":1146},[159,160272,150782],{"class":165},[159,160274,160275],{"class":161,"line":245},[159,160276,153352],{"class":1135},[159,160278,160279,160281,160283,160285,160287,160289],{"class":161,"line":251},[159,160280,153357],{"class":185},[159,160282,101107],{"class":165},[159,160284,150212],{"class":1146},[159,160286,1486],{"class":165},[159,160288,107533],{"class":1146},[159,160290,150782],{"class":165},[159,160292,160293],{"class":161,"line":261},[159,160294,153372],{"class":1135},[159,160296,160297,160299,160301,160303,160305,160307],{"class":161,"line":603},[159,160298,153377],{"class":185},[159,160300,101107],{"class":165},[159,160302,150212],{"class":1146},[159,160304,1486],{"class":165},[159,160306,153386],{"class":1146},[159,160308,150782],{"class":165},[42,160310,160312,160313,160315],{"id":160311},"_1544-nav导航模块制作","15.4.4 ",[49,160314,426],{},"导航模块制作",[23,160317],{"style":147708,"src":160318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,160320,160321,160323],{},[49,160322,426],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,160325,160326,160327],{},"1 号盒子左侧浮动，",[49,160328,160329],{},"dropdown",[103,160331,160332,160342,160350,160356,160364,160374,160382,160393],{},[106,160333,160334,160335,122318,160338,160341],{},"1号盒子有讲究，根据相关性 里面包含 ",[49,160336,160337],{},".dt",[49,160339,160340],{},".dd"," 两个盒子",[106,160343,160344,160346,160347,160349],{},[49,160345,160337],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[49,160348,160340],{}," 挤到下面去了",[106,160351,160352,160353,160355],{},"给 ",[49,160354,160340],{}," 盒子设置宽度 和 高度，以及背景颜色",[106,160357,160352,160358,160360,160361,141537],{},[49,160359,160340],{}," 盒子里面定义 无序列表 （",[49,160362,160363],{},"ul > li > a",[106,160365,160366,160367,160369,160370,160373],{},"每个 ",[49,160368,106],{}," 都有一个高度（",[49,160371,160372],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[106,160375,160352,160376,160378,160379,141537],{},[49,160377,106],{}," 里面的a设置文字大小（",[49,160380,160381],{},"14px",[106,160383,160352,160384,160386,160387,160389,160390,160392],{},[49,160385,106],{}," 设置 ",[49,160388,149013],{},"，当鼠标移入的时候，让",[49,160391,106],{},"的背景变成白色，让里面的文字变成红色",[106,160394,160395,160397,160398,160400,160401,160403],{},[49,160396,106],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[49,160399,106],{},"的右侧，那么给",[49,160402,106],{},"设置相对定位",[14,160405,160406],{},"一定要注意相关性",[14,160408,159691],{},[151,160410,160411],{"className":147852,"code":159694,"language":147854,"meta":25,"style":25},[49,160412,160413,160421,160431,160441],{"__ignoreMap":25},[159,160414,160415,160417,160419],{"class":161,"line":162},[159,160416,182],{"class":169},[159,160418,158853],{"class":185},[159,160420,1478],{"class":165},[159,160422,160423,160425,160427,160429],{"class":161,"line":176},[159,160424,158860],{"class":1146},[159,160426,1486],{"class":165},[159,160428,552],{"class":192},[159,160430,1492],{"class":165},[159,160432,160433,160435,160437,160439],{"class":161,"line":203},[159,160434,149468],{"class":1146},[159,160436,1486],{"class":165},[159,160438,7896],{"class":1146},[159,160440,1492],{"class":165},[159,160442,160443],{"class":161,"line":223},[159,160444,15685],{"class":165},[14,160446,159731],{},[151,160448,160449],{"className":147852,"code":159694,"language":147854,"meta":25,"style":25},[49,160450,160451,160459,160469,160479],{"__ignoreMap":25},[159,160452,160453,160455,160457],{"class":161,"line":162},[159,160454,182],{"class":169},[159,160456,158853],{"class":185},[159,160458,1478],{"class":165},[159,160460,160461,160463,160465,160467],{"class":161,"line":176},[159,160462,158860],{"class":1146},[159,160464,1486],{"class":165},[159,160466,552],{"class":192},[159,160468,1492],{"class":165},[159,160470,160471,160473,160475,160477],{"class":161,"line":203},[159,160472,149468],{"class":1146},[159,160474,1486],{"class":165},[159,160476,7896],{"class":1146},[159,160478,1492],{"class":165},[159,160480,160481],{"class":161,"line":223},[159,160482,15685],{"class":165},[14,160484,160485],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,160487,160488,160489,160492],{},"2 号盒子左侧浮动，",[49,160490,160491],{},"navitems"," 导航栏组",[103,160494,160495,160500,160509],{},[106,160496,160497,160498],{},"里面结构是 ",[49,160499,160363],{},[106,160501,160502,160503,160505,160506,160508],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[49,160504,8085],{},"左右的",[49,160507,54403],{},"把两侧撑开",[106,160510,160511],{},"让文字垂直居中（行高等于高度）",[23,160513],{"style":147708,"src":160514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,160516,160517],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,160519,159691],{},[151,160521,160523],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},".box {\n  float: left;\n}\n",[49,160524,160525,160531,160541],{"__ignoreMap":25},[159,160526,160527,160529],{"class":161,"line":162},[159,160528,151700],{"class":185},[159,160530,1478],{"class":165},[159,160532,160533,160535,160537,160539],{"class":161,"line":176},[159,160534,152332],{"class":1146},[159,160536,1486],{"class":165},[159,160538,19854],{"class":1146},[159,160540,1492],{"class":165},[159,160542,160543],{"class":161,"line":203},[159,160544,15685],{"class":165},[14,160546,159731],{},[151,160548,160549],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,160550,160551,160557,160567],{"__ignoreMap":25},[159,160552,160553,160555],{"class":161,"line":162},[159,160554,151700],{"class":185},[159,160556,1478],{"class":165},[159,160558,160559,160561,160563,160565],{"class":161,"line":176},[159,160560,152332],{"class":1146},[159,160562,1486],{"class":165},[159,160564,19854],{"class":1146},[159,160566,1492],{"class":165},[159,160568,160569],{"class":161,"line":203},[159,160570,15685],{"class":165},[14,160572,160573],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[23,160575],{"style":147708,"src":160576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[151,160578,160579],{"className":147852,"code":152009,"language":147854,"meta":25,"style":25},[49,160580,160581,160587,160603],{"__ignoreMap":25},[159,160582,160583,160585],{"class":161,"line":162},[159,160584,182],{"class":169},[159,160586,1478],{"class":165},[159,160588,160589,160591,160593,160595,160597,160599,160601],{"class":161,"line":176},[159,160590,17983],{"class":1146},[159,160592,1486],{"class":165},[159,160594,4932],{"class":1146},[159,160596,1571],{"class":1142},[159,160598,7709],{"class":1146},[159,160600,151244],{"class":1146},[159,160602,1492],{"class":165},[159,160604,160605],{"class":161,"line":203},[159,160606,15685],{"class":165},[42,160608,160610],{"id":160609},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[23,160612],{"style":147708,"src":160613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[103,160615,160616,160621,160626],{},[106,160617,160618,160620],{},[49,160619,153055],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[106,160622,160623,160625],{},[49,160624,153055],{}," 里面有一个大的版心",[106,160627,160628,160629,160632,160633],{},"版心里面包含 1 号盒子，",[49,160630,160631],{},"mod_service"," 是服务模块，mod 是模块的意思",[103,160634,160635,160640,160653,160669,160674],{},[106,160636,160352,160637,160639],{},[49,160638,160631],{}," 设置高度（80px）和下边框",[106,160641,160642,160643,160646,160647,160649,160650,160652],{},"在里面定义 ",[49,160644,160645],{},"ul > li"," ,每个",[49,160648,106],{}," 宽度是300px 高度是 50px，给每个",[49,160651,106],{},"设置35px的左内边距",[106,160654,160655,160656,160658,160659,160661,160662,160664,160665,41937,160667,141537],{},"在每个",[49,160657,106],{},"里面，放一个 ",[49,160660,46436],{},"（里面放图标），一个",[49,160663,182],{},"（里面放",[49,160666,182],{},[49,160668,14],{},[106,160670,160352,160671,160673],{},[49,160672,46436],{},"设置浮动，让h5与这个div左右排列",[106,160675,160676],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,160678,159691],{},[151,160680,160682],{"className":147852,"code":160681,"language":147854,"meta":25,"style":25},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[49,160683,160684,160690,160702,160714,160741],{"__ignoreMap":25},[159,160685,160686,160688],{"class":161,"line":162},[159,160687,155609],{"class":185},[159,160689,1478],{"class":165},[159,160691,160692,160694,160696,160698,160700],{"class":161,"line":176},[159,160693,17655],{"class":1146},[159,160695,1486],{"class":165},[159,160697,1739],{"class":1146},[159,160699,1571],{"class":1142},[159,160701,1492],{"class":165},[159,160703,160704,160706,160708,160710,160712],{"class":161,"line":203},[159,160705,17875],{"class":1146},[159,160707,1486],{"class":165},[159,160709,1739],{"class":1146},[159,160711,1571],{"class":1142},[159,160713,1492],{"class":165},[159,160715,160716,160718,160720,160722,160724,160726,160728,160730,160733,160735,160737,160739],{"class":161,"line":223},[159,160717,17698],{"class":1146},[159,160719,1486],{"class":165},[159,160721,8760],{"class":1146},[159,160723,1159],{"class":165},[159,160725,155648],{"class":8765},[159,160727,2710],{"class":165},[159,160729,8771],{"class":1146},[159,160731,160732],{"class":1146}," -10",[159,160734,1571],{"class":1142},[159,160736,155667],{"class":1146},[159,160738,1571],{"class":1142},[159,160740,1492],{"class":165},[159,160742,160743],{"class":161,"line":233},[159,160744,15685],{"class":165},[14,160746,159731],{},[151,160748,160749],{"className":147852,"code":160681,"language":147854,"meta":25,"style":25},[49,160750,160751,160757,160769,160781,160807],{"__ignoreMap":25},[159,160752,160753,160755],{"class":161,"line":162},[159,160754,155609],{"class":185},[159,160756,1478],{"class":165},[159,160758,160759,160761,160763,160765,160767],{"class":161,"line":176},[159,160760,17655],{"class":1146},[159,160762,1486],{"class":165},[159,160764,1739],{"class":1146},[159,160766,1571],{"class":1142},[159,160768,1492],{"class":165},[159,160770,160771,160773,160775,160777,160779],{"class":161,"line":203},[159,160772,17875],{"class":1146},[159,160774,1486],{"class":165},[159,160776,1739],{"class":1146},[159,160778,1571],{"class":1142},[159,160780,1492],{"class":165},[159,160782,160783,160785,160787,160789,160791,160793,160795,160797,160799,160801,160803,160805],{"class":161,"line":223},[159,160784,17698],{"class":1146},[159,160786,1486],{"class":165},[159,160788,8760],{"class":1146},[159,160790,1159],{"class":165},[159,160792,155648],{"class":8765},[159,160794,2710],{"class":165},[159,160796,8771],{"class":1146},[159,160798,160732],{"class":1146},[159,160800,1571],{"class":1142},[159,160802,155667],{"class":1146},[159,160804,1571],{"class":1142},[159,160806,1492],{"class":165},[159,160808,160809],{"class":161,"line":233},[159,160810,15685],{"class":165},[14,160812,160813],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[103,160815,160816,160819,160825,160831,160843],{},[106,160817,160818],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[106,160820,160821,160822,141537],{},"里面的布局利用 自定义列表来实现（",[49,160823,160824],{},"dl > dt + dd",[106,160826,160352,160827,160830],{},[49,160828,160829],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[106,160832,160352,160833,160836,160837,41937,160839,160842],{},[49,160834,160835],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[49,160838,160835],{},[49,160840,160841],{},"dd","之间有些距离",[106,160844,160845],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,160847,159691],{},[151,160849,160850],{"className":147852,"code":160041,"language":147854,"meta":25,"style":25},[49,160851,160852,160858,160870],{"__ignoreMap":25},[159,160853,160854,160856],{"class":161,"line":162},[159,160855,182],{"class":169},[159,160857,1478],{"class":165},[159,160859,160860,160862,160864,160866,160868],{"class":161,"line":176},[159,160861,17556],{"class":1146},[159,160863,1486],{"class":165},[159,160865,1489],{"class":1146},[159,160867,1601],{"class":1146},[159,160869,1492],{"class":165},[159,160871,160872],{"class":161,"line":203},[159,160873,15685],{"class":165},[14,160875,159731],{},[151,160877,160878],{"className":147852,"code":160041,"language":147854,"meta":25,"style":25},[49,160879,160880,160886,160898],{"__ignoreMap":25},[159,160881,160882,160884],{"class":161,"line":162},[159,160883,182],{"class":169},[159,160885,1478],{"class":165},[159,160887,160888,160890,160892,160894,160896],{"class":161,"line":176},[159,160889,17556],{"class":1146},[159,160891,1486],{"class":165},[159,160893,1489],{"class":1146},[159,160895,1601],{"class":1146},[159,160897,1492],{"class":165},[159,160899,160900],{"class":161,"line":203},[159,160901,15685],{"class":165},[14,160903,160904],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[103,160906,160907,160916,160919,160930],{},[106,160908,160909,160910,160912,160913,160915],{},"分为上下两块，上面是 ",[49,160911,153072],{}," 友情链接，下面是 ",[49,160914,153065],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[106,160917,160918],{},"把内容分别复制到相应模块中",[106,160920,160352,160921,160923,160924,160926,160927,160929],{},[49,160922,153072],{}," 设置 15px 的下外边距，给",[49,160925,153072],{}," 里面 的 ",[49,160928,8085],{}," 标签设置 左右 3px 的外边距",[106,160931,160932,160933,160935],{},"给",[49,160934,153065],{}," 设置 20px 的行高",[14,160937,159691],{},[151,160939,160940],{"className":147852,"code":160041,"language":147854,"meta":25,"style":25},[49,160941,160942,160948,160960],{"__ignoreMap":25},[159,160943,160944,160946],{"class":161,"line":162},[159,160945,182],{"class":169},[159,160947,1478],{"class":165},[159,160949,160950,160952,160954,160956,160958],{"class":161,"line":176},[159,160951,17556],{"class":1146},[159,160953,1486],{"class":165},[159,160955,1489],{"class":1146},[159,160957,1601],{"class":1146},[159,160959,1492],{"class":165},[159,160961,160962],{"class":161,"line":203},[159,160963,15685],{"class":165},[14,160965,159731],{},[151,160967,160968],{"className":147852,"code":160041,"language":147854,"meta":25,"style":25},[49,160969,160970,160976,160988],{"__ignoreMap":25},[159,160971,160972,160974],{"class":161,"line":162},[159,160973,182],{"class":169},[159,160975,1478],{"class":165},[159,160977,160978,160980,160982,160984,160986],{"class":161,"line":176},[159,160979,17556],{"class":1146},[159,160981,1486],{"class":165},[159,160983,1489],{"class":1146},[159,160985,1601],{"class":1146},[159,160987,1492],{"class":165},[159,160989,160990],{"class":161,"line":203},[159,160991,15685],{"class":165},[14,160993,160994],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1468,160996,160997],{},"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":25,"searchDepth":176,"depth":176,"links":160999},[161000,161001,161002,161009],{"id":159280,"depth":176,"text":159281},{"id":159299,"depth":176,"text":159300},{"id":159326,"depth":176,"text":159327,"children":161003},[161004,161005,161006,161007,161008],{"id":159330,"depth":203,"text":159331},{"id":159343,"depth":203,"text":159344},{"id":159367,"depth":203,"text":159368},{"id":159389,"depth":203,"text":159390},{"id":159461,"depth":203,"text":159462},{"id":159587,"depth":176,"text":159588,"children":161010},[161011,161012,161013,161014,161016],{"id":159591,"depth":203,"text":159592},{"id":159598,"depth":203,"text":159599},{"id":159770,"depth":203,"text":159771},{"id":160311,"depth":203,"text":161015},"15.4.4 nav导航模块制作",{"id":160609,"depth":203,"text":160610},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":159272,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":161023,"title":161024,"body":161025,"description":23809,"extension":23810,"meta":163427,"navigation":589,"path":163428,"seo":163429,"stem":163430,"__hash__":163431},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":161026,"toc":163404},[161027,161030,161034,161038,161050,161053,161056,161059,161070,161072,161096,161098,161122,161127,161130,161132,161168,161170,161206,161209,161214,161217,161220,161223,161253,161260,161263,161273,161275,161309,161312,161346,161352,161369,161371,161407,161409,161445,161450,161475,161477,161503,161505,161529,161536,161539,161603,161605,161647,161649,161689,161696,161701,161703,161733,161735,161765,161769,161772,161779,161791,161793,161819,161821,161845,161848,161850,161874,161880,161890,161892,161922,161924,161954,161961,162002,162004,162040,162042,162078,162082,162085,162088,162091,162097,162102,162105,162128,162131,162155,162158,162182,162187,162190,162193,162196,162199,162202,162276,162278,162308,162310,162340,162343,162346,162378,162382,162386,162400,162409,162412,162417,162419,162513,162515,162609,162632,162634,162658,162660,162684,162691,162694,162704,162706,162730,162735,162743,162745,162775,162780,162820,162822,162848,162850,162876,162880,162883,162888,162891,162895,162903,162910,162918,162920,162950,162952,162982,162990,162993,162996,162998,163028,163030,163060,163063,163068,163070,163094,163096,163120,163123,163208,163210,163234,163236,163260,163264,163266,163290,163292,163326,163330,163344,163347,163352,163355,163360,163363,163393,163401],[10,161028,161024],{"id":161029},"_16-品优购项目下篇-主体与页面开发",[37,161031,161033],{"id":161032},"_161-项目主体模块制作","16.1 项目主体模块制作",[42,161035,161037],{"id":161036},"_1611-首页制作","16.1.1 首页制作",[14,161039,161040,161042,161043,161045,161046,161049],{},[61,161041,123358],{}," 主体模块是 ",[61,161044,21169],{}," 里面专有的，注意需要新的样式文件 ",[61,161047,161048],{},"index.css，"," 就不要写在common.css中了",[23,161051],{"style":147708,"src":161052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[23,161054],{"style":147708,"src":161055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,161057,161058],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[103,161060,161061,161064,161067],{},[106,161062,161063],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[106,161065,161066],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[106,161068,161069],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,161071,159691],{},[151,161073,161074],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,161075,161076,161082,161092],{"__ignoreMap":25},[159,161077,161078,161080],{"class":161,"line":162},[159,161079,151700],{"class":185},[159,161081,1478],{"class":165},[159,161083,161084,161086,161088,161090],{"class":161,"line":176},[159,161085,152332],{"class":1146},[159,161087,1486],{"class":165},[159,161089,19854],{"class":1146},[159,161091,1492],{"class":165},[159,161093,161094],{"class":161,"line":203},[159,161095,15685],{"class":165},[14,161097,159731],{},[151,161099,161100],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,161101,161102,161108,161118],{"__ignoreMap":25},[159,161103,161104,161106],{"class":161,"line":162},[159,161105,151700],{"class":185},[159,161107,1478],{"class":165},[159,161109,161110,161112,161114,161116],{"class":161,"line":176},[159,161111,152332],{"class":1146},[159,161113,1486],{"class":165},[159,161115,19854],{"class":1146},[159,161117,1492],{"class":165},[159,161119,161120],{"class":161,"line":203},[159,161121,15685],{"class":165},[134,161123,161124],{},[106,161125,161126],{},"左侧focus模块制作",[23,161128],{"style":147708,"src":161129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,161131,159691],{},[151,161133,161134],{"className":147852,"code":149175,"language":147854,"meta":25,"style":25},[49,161135,161136,161144,161154,161164],{"__ignoreMap":25},[159,161137,161138,161140,161142],{"class":161,"line":162},[159,161139,536],{"class":169},[159,161141,8941],{"class":185},[159,161143,1478],{"class":165},[159,161145,161146,161148,161150,161152],{"class":161,"line":176},[159,161147,149190],{"class":1146},[159,161149,1486],{"class":165},[159,161151,1687],{"class":1146},[159,161153,1492],{"class":165},[159,161155,161156,161158,161160,161162],{"class":161,"line":203},[159,161157,17885],{"class":1146},[159,161159,1486],{"class":165},[159,161161,1529],{"class":1146},[159,161163,1492],{"class":165},[159,161165,161166],{"class":161,"line":223},[159,161167,15685],{"class":165},[14,161169,159731],{},[151,161171,161172],{"className":147852,"code":149175,"language":147854,"meta":25,"style":25},[49,161173,161174,161182,161192,161202],{"__ignoreMap":25},[159,161175,161176,161178,161180],{"class":161,"line":162},[159,161177,536],{"class":169},[159,161179,8941],{"class":185},[159,161181,1478],{"class":165},[159,161183,161184,161186,161188,161190],{"class":161,"line":176},[159,161185,149190],{"class":1146},[159,161187,1486],{"class":165},[159,161189,1687],{"class":1146},[159,161191,1492],{"class":165},[159,161193,161194,161196,161198,161200],{"class":161,"line":203},[159,161195,17885],{"class":1146},[159,161197,1486],{"class":165},[159,161199,1529],{"class":1146},[159,161201,1492],{"class":165},[159,161203,161204],{"class":161,"line":223},[159,161205,15685],{"class":165},[14,161207,161208],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[134,161210,161211],{"start":176},[106,161212,161213],{},"右侧newsflash模块制作",[23,161215],{"style":147708,"src":161216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,161218,161219],{},"右侧的模块 分为上中下三个盒子",[14,161221,161222],{},"结构代码：",[151,161224,161225],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,161226,161227],{"__ignoreMap":25},[159,161228,161229,161231,161233,161235,161237,161239,161241,161243,161245,161247,161249,161251],{"class":161,"line":162},[159,161230,166],{"class":165},[159,161232,23],{"class":169},[159,161234,2078],{"class":185},[159,161236,189],{"class":165},[159,161238,155369],{"class":192},[159,161240,2086],{"class":185},[159,161242,189],{"class":165},[159,161244,155376],{"class":192},[159,161246,155379],{"class":185},[159,161248,189],{"class":165},[159,161250,155384],{"class":192},[159,161252,173],{"class":165},[14,161254,161255,161256,161259],{},"1 号盒子为 ",[49,161257,161258],{},"news"," 新闻模块 高度为 165px",[23,161261],{"style":147708,"src":161262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,161264,161265,161266,161269,161270],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[49,161267,161268],{},"news-hd","，下面是 ",[49,161271,161272],{},"news-bd",[14,161274,161222],{},[151,161276,161277],{"className":148599,"code":151956,"language":148601,"meta":25,"style":25},[49,161278,161279,161283,161297,161301],{"__ignoreMap":25},[159,161280,161281],{"class":161,"line":162},[159,161282,151963],{"class":1135},[159,161284,161285,161287,161289,161291,161293,161295],{"class":161,"line":176},[159,161286,166],{"class":165},[159,161288,182],{"class":169},[159,161290,186],{"class":185},[159,161292,189],{"class":165},[159,161294,151976],{"class":192},[159,161296,173],{"class":165},[159,161298,161299],{"class":161,"line":203},[159,161300,151983],{"class":165},[159,161302,161303,161305,161307],{"class":161,"line":223},[159,161304,264],{"class":165},[159,161306,182],{"class":169},[159,161308,173],{"class":165},[14,161310,161311],{},"样式代码：",[151,161313,161314],{"className":148599,"code":151956,"language":148601,"meta":25,"style":25},[49,161315,161316,161320,161334,161338],{"__ignoreMap":25},[159,161317,161318],{"class":161,"line":162},[159,161319,151963],{"class":1135},[159,161321,161322,161324,161326,161328,161330,161332],{"class":161,"line":176},[159,161323,166],{"class":165},[159,161325,182],{"class":169},[159,161327,186],{"class":185},[159,161329,189],{"class":165},[159,161331,151976],{"class":192},[159,161333,173],{"class":165},[159,161335,161336],{"class":161,"line":203},[159,161337,151983],{"class":165},[159,161339,161340,161342,161344],{"class":161,"line":223},[159,161341,264],{"class":165},[159,161343,182],{"class":169},[159,161345,173],{"class":165},[14,161347,161348,161349,161351],{},"上面是",[49,161350,161268],{},"，设置高度是 33px，设置下边框",[103,161353,161354,161360],{},[106,161355,161356,161357,161359],{},"里面放一个",[49,161358,46436],{}," 标题",[106,161361,161362,161363,161365,161366,161368],{},"放一个a",[49,161364,123993],{},"，内容是 更多，然后让 ",[49,161367,8085],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,161370,161222],{},[151,161372,161373],{"className":147852,"code":159694,"language":147854,"meta":25,"style":25},[49,161374,161375,161383,161393,161403],{"__ignoreMap":25},[159,161376,161377,161379,161381],{"class":161,"line":162},[159,161378,182],{"class":169},[159,161380,158853],{"class":185},[159,161382,1478],{"class":165},[159,161384,161385,161387,161389,161391],{"class":161,"line":176},[159,161386,158860],{"class":1146},[159,161388,1486],{"class":165},[159,161390,552],{"class":192},[159,161392,1492],{"class":165},[159,161394,161395,161397,161399,161401],{"class":161,"line":203},[159,161396,149468],{"class":1146},[159,161398,1486],{"class":165},[159,161400,7896],{"class":1146},[159,161402,1492],{"class":165},[159,161404,161405],{"class":161,"line":223},[159,161406,15685],{"class":165},[14,161408,161311],{},[151,161410,161411],{"className":147852,"code":159694,"language":147854,"meta":25,"style":25},[49,161412,161413,161421,161431,161441],{"__ignoreMap":25},[159,161414,161415,161417,161419],{"class":161,"line":162},[159,161416,182],{"class":169},[159,161418,158853],{"class":185},[159,161420,1478],{"class":165},[159,161422,161423,161425,161427,161429],{"class":161,"line":176},[159,161424,158860],{"class":1146},[159,161426,1486],{"class":165},[159,161428,552],{"class":192},[159,161430,1492],{"class":165},[159,161432,161433,161435,161437,161439],{"class":161,"line":203},[159,161434,149468],{"class":1146},[159,161436,1486],{"class":165},[159,161438,7896],{"class":1146},[159,161440,1492],{"class":165},[159,161442,161443],{"class":161,"line":223},[159,161444,15685],{"class":165},[14,161446,161447,161448],{},"下面是",[49,161449,161272],{},[103,161451,161452,161460],{},[106,161453,161454,161455,122318,161457,161459],{},"里面包含 ",[49,161456,103],{},[49,161458,106],{}," 还有链接",[106,161461,160932,161462,161464,161465,161467,161468,161471,161472],{},[49,161463,106],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[49,161466,152518],{}," 2.设置 ",[49,161469,161470],{},"white-space: nowrap;"," 3. 设置 ",[49,161473,161474],{},"text-overflow: ellipsis;",[14,161476,161222],{},[151,161478,161480],{"className":147852,"code":161479,"language":147854,"meta":25,"style":25},"div {\n  overflow: hidden;\n}\n",[49,161481,161482,161488,161499],{"__ignoreMap":25},[159,161483,161484,161486],{"class":161,"line":162},[159,161485,182],{"class":169},[159,161487,1478],{"class":165},[159,161489,161490,161493,161495,161497],{"class":161,"line":176},[159,161491,161492],{"class":1146},"  overflow",[159,161494,1486],{"class":165},[159,161496,8748],{"class":1146},[159,161498,1492],{"class":165},[159,161500,161501],{"class":161,"line":203},[159,161502,15685],{"class":165},[14,161504,161311],{},[151,161506,161507],{"className":147852,"code":161479,"language":147854,"meta":25,"style":25},[49,161508,161509,161515,161525],{"__ignoreMap":25},[159,161510,161511,161513],{"class":161,"line":162},[159,161512,182],{"class":169},[159,161514,1478],{"class":165},[159,161516,161517,161519,161521,161523],{"class":161,"line":176},[159,161518,161492],{"class":1146},[159,161520,1486],{"class":165},[159,161522,8748],{"class":1146},[159,161524,1492],{"class":165},[159,161526,161527],{"class":161,"line":203},[159,161528,15685],{"class":165},[14,161530,161531,161532,161535],{},"2 号盒子为 ",[49,161533,161534],{},"lifeservice"," 生活服务模块 高度为 209px",[23,161537],{"style":147708,"src":161538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[103,161540,161541,161544,161554,161578,161589],{},[106,161542,161543],{},"设置边框（左右下边框）",[106,161545,161546,161547,161550,161551,161553],{},"里面的内容 是 ",[49,161548,161549],{},"ul > 12*li","，给",[49,161552,106],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[106,161555,161556,161557],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[103,161558,161559,161564,161573],{},[106,161560,161561,161563],{},[49,161562,161534],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[106,161565,161566,161567,161569,161570,161572],{},"可以让 ",[49,161568,161534],{}," 里面的 ",[49,161571,103],{}," 宽度为 252，就可以装的下 4 个 小 li",[106,161574,161575,161577],{},[49,161576,161534],{}," 盒子 overflow 隐藏多余的部分就可以了",[106,161579,137767,161580,161582,161583,161585,161586,161588],{},[49,161581,106],{}," 里面放一个 ",[49,161584,1241],{},"（里面放图标），下面的文本用 ",[49,161587,14],{}," 标签包裹",[106,161590,160352,161591,161593,161594,161596,161597,160386,161599,161602],{},[49,161592,1241],{}," 设置 24px宽和28px的高（注意 ",[49,161595,1241],{}," 是行内元素， 转成行内块），给 ",[49,161598,106],{},[49,161600,161601],{},"text-align:center"," 让里面内容居中显示",[14,161604,161222],{},[151,161606,161608],{"className":147852,"code":161607,"language":147854,"meta":25,"style":25},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[49,161609,161610,161628,161633,161643],{"__ignoreMap":25},[159,161611,161612,161614,161616,161618,161620,161622,161624,161626],{"class":161,"line":162},[159,161613,159],{"class":169},[159,161615,1939],{"class":165},[159,161617,8085],{"class":169},[159,161619,1939],{"class":165},[159,161621,47079],{"class":169},[159,161623,1939],{"class":165},[159,161625,61],{"class":169},[159,161627,1478],{"class":165},[159,161629,161630],{"class":161,"line":176},[159,161631,161632],{"class":1135},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[159,161634,161635,161637,161639,161641],{"class":161,"line":203},[159,161636,149468],{"class":1146},[159,161638,1486],{"class":165},[159,161640,149530],{"class":1146},[159,161642,1492],{"class":165},[159,161644,161645],{"class":161,"line":223},[159,161646,15685],{"class":165},[14,161648,161311],{},[151,161650,161651],{"className":147852,"code":161607,"language":147854,"meta":25,"style":25},[49,161652,161653,161671,161675,161685],{"__ignoreMap":25},[159,161654,161655,161657,161659,161661,161663,161665,161667,161669],{"class":161,"line":162},[159,161656,159],{"class":169},[159,161658,1939],{"class":165},[159,161660,8085],{"class":169},[159,161662,1939],{"class":165},[159,161664,47079],{"class":169},[159,161666,1939],{"class":165},[159,161668,61],{"class":169},[159,161670,1478],{"class":165},[159,161672,161673],{"class":161,"line":176},[159,161674,161632],{"class":1135},[159,161676,161677,161679,161681,161683],{"class":161,"line":203},[159,161678,149468],{"class":1146},[159,161680,1486],{"class":165},[159,161682,149530],{"class":1146},[159,161684,1492],{"class":165},[159,161686,161687],{"class":161,"line":223},[159,161688,15685],{"class":165},[14,161690,161691,161692,161695],{},"3 号盒子为 ",[49,161693,161694],{},"bargain"," 特价商品",[103,161697,161698],{},[106,161699,161700],{},"这个比较简单，直接插入一张图片即可",[14,161702,161222],{},[151,161704,161705],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,161706,161707],{"__ignoreMap":25},[159,161708,161709,161711,161713,161715,161717,161719,161721,161723,161725,161727,161729,161731],{"class":161,"line":162},[159,161710,166],{"class":165},[159,161712,23],{"class":169},[159,161714,2078],{"class":185},[159,161716,189],{"class":165},[159,161718,155369],{"class":192},[159,161720,2086],{"class":185},[159,161722,189],{"class":165},[159,161724,155376],{"class":192},[159,161726,155379],{"class":185},[159,161728,189],{"class":165},[159,161730,155384],{"class":192},[159,161732,173],{"class":165},[14,161734,161311],{},[151,161736,161737],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,161738,161739],{"__ignoreMap":25},[159,161740,161741,161743,161745,161747,161749,161751,161753,161755,161757,161759,161761,161763],{"class":161,"line":162},[159,161742,166],{"class":165},[159,161744,23],{"class":169},[159,161746,2078],{"class":185},[159,161748,189],{"class":165},[159,161750,155369],{"class":192},[159,161752,2086],{"class":185},[159,161754,189],{"class":165},[159,161756,155376],{"class":192},[159,161758,155379],{"class":185},[159,161760,189],{"class":165},[159,161762,155384],{"class":192},[159,161764,173],{"class":165},[42,161766,161768],{"id":161767},"_1612-推荐模块制作","16.1.2 推荐模块制作",[23,161770],{"style":147708,"src":161771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,161773,161774,161775,161778],{},"大盒子 ",[49,161776,161777],{},"recom"," 推荐模块 recommend",[103,161780,161781],{},[106,161782,161783,161784,161786,161787,161790],{},"给这个 ",[49,161785,161777],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[49,161788,161789],{},"#ebebeb","），设置距离上边 12px",[14,161792,161222],{},[151,161794,161796],{"className":147852,"code":161795,"language":147854,"meta":25,"style":25},"div {\n  background-color: #f0f0f0;\n}\n",[49,161797,161798,161804,161815],{"__ignoreMap":25},[159,161799,161800,161802],{"class":161,"line":162},[159,161801,182],{"class":169},[159,161803,1478],{"class":165},[159,161805,161806,161808,161810,161813],{"class":161,"line":176},[159,161807,17965],{"class":1146},[159,161809,1486],{"class":165},[159,161811,161812],{"class":1146},"#f0f0f0",[159,161814,1492],{"class":165},[159,161816,161817],{"class":161,"line":203},[159,161818,15685],{"class":165},[14,161820,161311],{},[151,161822,161823],{"className":147852,"code":161795,"language":147854,"meta":25,"style":25},[49,161824,161825,161831,161841],{"__ignoreMap":25},[159,161826,161827,161829],{"class":161,"line":162},[159,161828,182],{"class":169},[159,161830,1478],{"class":165},[159,161832,161833,161835,161837,161839],{"class":161,"line":176},[159,161834,17965],{"class":1146},[159,161836,1486],{"class":165},[159,161838,161812],{"class":1146},[159,161840,1492],{"class":165},[159,161842,161843],{"class":161,"line":203},[159,161844,15685],{"class":165},[14,161846,161847],{},"里面包含 2 个盒子， 浮动即可",[14,161849,161222],{},[151,161851,161852],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,161853,161854,161860,161870],{"__ignoreMap":25},[159,161855,161856,161858],{"class":161,"line":162},[159,161857,151700],{"class":185},[159,161859,1478],{"class":165},[159,161861,161862,161864,161866,161868],{"class":161,"line":176},[159,161863,152332],{"class":1146},[159,161865,1486],{"class":165},[159,161867,19854],{"class":1146},[159,161869,1492],{"class":165},[159,161871,161872],{"class":161,"line":203},[159,161873,15685],{"class":165},[14,161875,161876,161877],{},"1 号盒子 ",[49,161878,161879],{},"recom_hd",[103,161881,161882,161885],{},[106,161883,161884],{},"设置宽度205px，高度163px",[106,161886,161356,161887,161889],{},[49,161888,23],{},"标签，插入图片即可",[14,161891,161222],{},[151,161893,161894],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,161895,161896],{"__ignoreMap":25},[159,161897,161898,161900,161902,161904,161906,161908,161910,161912,161914,161916,161918,161920],{"class":161,"line":162},[159,161899,166],{"class":165},[159,161901,23],{"class":169},[159,161903,2078],{"class":185},[159,161905,189],{"class":165},[159,161907,155369],{"class":192},[159,161909,2086],{"class":185},[159,161911,189],{"class":165},[159,161913,155376],{"class":192},[159,161915,155379],{"class":185},[159,161917,189],{"class":165},[159,161919,155384],{"class":192},[159,161921,173],{"class":165},[14,161923,161311],{},[151,161925,161926],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,161927,161928],{"__ignoreMap":25},[159,161929,161930,161932,161934,161936,161938,161940,161942,161944,161946,161948,161950,161952],{"class":161,"line":162},[159,161931,166],{"class":165},[159,161933,23],{"class":169},[159,161935,2078],{"class":185},[159,161937,189],{"class":165},[159,161939,155369],{"class":192},[159,161941,2086],{"class":185},[159,161943,189],{"class":165},[159,161945,155376],{"class":192},[159,161947,155379],{"class":185},[159,161949,189],{"class":165},[159,161951,155384],{"class":192},[159,161953,173],{"class":165},[14,161955,161956,161957,161960],{},"2 号盒子 ",[49,161958,161959],{},"recom_bd"," ，注意里面的小竖线",[103,161962,161963,161974,161977,161982,161987],{},[106,161964,161965,161966,161968,161969,161971,161972],{},"右侧结构里面放 ",[49,161967,103],{}," 包含 4个 ",[49,161970,106],{},"，每个li里面包含一个",[49,161973,23],{},[106,161975,161976],{},"直接利用切片工具把里面的内容当成一张图片",[106,161978,160352,161979,161981],{},[49,161980,106],{}," 设置浮动",[106,161983,160352,161984,161986],{},[49,161985,23],{}," 设置宽高，宽度 248px，高度 163px",[106,161988,161989,161990,161550,161993,161995,161996,161998,161999],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[49,161991,161992],{},"top 10px",[49,161994,106],{},"设置相对定位（注意，最后一个",[49,161997,106],{},"不用设置伪元素），可以利用 ",[49,162000,162001],{},"nth-child(-n+3){...}",[14,162003,161222],{},[151,162005,162006],{"className":147852,"code":159694,"language":147854,"meta":25,"style":25},[49,162007,162008,162016,162026,162036],{"__ignoreMap":25},[159,162009,162010,162012,162014],{"class":161,"line":162},[159,162011,182],{"class":169},[159,162013,158853],{"class":185},[159,162015,1478],{"class":165},[159,162017,162018,162020,162022,162024],{"class":161,"line":176},[159,162019,158860],{"class":1146},[159,162021,1486],{"class":165},[159,162023,552],{"class":192},[159,162025,1492],{"class":165},[159,162027,162028,162030,162032,162034],{"class":161,"line":203},[159,162029,149468],{"class":1146},[159,162031,1486],{"class":165},[159,162033,7896],{"class":1146},[159,162035,1492],{"class":165},[159,162037,162038],{"class":161,"line":223},[159,162039,15685],{"class":165},[14,162041,161311],{},[151,162043,162044],{"className":147852,"code":159694,"language":147854,"meta":25,"style":25},[49,162045,162046,162054,162064,162074],{"__ignoreMap":25},[159,162047,162048,162050,162052],{"class":161,"line":162},[159,162049,182],{"class":169},[159,162051,158853],{"class":185},[159,162053,1478],{"class":165},[159,162055,162056,162058,162060,162062],{"class":161,"line":176},[159,162057,158860],{"class":1146},[159,162059,1486],{"class":165},[159,162061,552],{"class":192},[159,162063,1492],{"class":165},[159,162065,162066,162068,162070,162072],{"class":161,"line":203},[159,162067,149468],{"class":1146},[159,162069,1486],{"class":165},[159,162071,7896],{"class":1146},[159,162073,1492],{"class":165},[159,162075,162076],{"class":161,"line":223},[159,162077,15685],{"class":165},[42,162079,162081],{"id":162080},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[23,162083],{"style":147708,"src":162084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,162086,162087],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,162089,162090],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,162092,162093,162096],{},[49,162094,162095],{},"box_hd"," 制作",[14,162098,161876,162099,162101],{},[49,162100,162095],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[23,162103],{"style":147708,"src":162104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[103,162106,162107,162112,162117,162120],{},[106,162108,162109,162111],{},[49,162110,162095],{}," 给 30px 的高度，2个像素的下边框",[106,162113,162114,162115],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[49,162116,160363],{},[106,162118,162119],{},"左侧盒左浮动，右侧盒子右浮动",[106,162121,162122,162124,162125,162127],{},[49,162123,8085],{},"标签之间的距离用左右的",[49,162126,54403],{},"撑开即可",[14,162129,162130],{},"结构代码",[151,162132,162133],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,162134,162135,162141,162151],{"__ignoreMap":25},[159,162136,162137,162139],{"class":161,"line":162},[159,162138,151700],{"class":185},[159,162140,1478],{"class":165},[159,162142,162143,162145,162147,162149],{"class":161,"line":176},[159,162144,152332],{"class":1146},[159,162146,1486],{"class":165},[159,162148,19854],{"class":1146},[159,162150,1492],{"class":165},[159,162152,162153],{"class":161,"line":203},[159,162154,15685],{"class":165},[14,162156,162157],{},"样式代码",[151,162159,162160],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,162161,162162,162168,162178],{"__ignoreMap":25},[159,162163,162164,162166],{"class":161,"line":162},[159,162165,151700],{"class":185},[159,162167,1478],{"class":165},[159,162169,162170,162172,162174,162176],{"class":161,"line":176},[159,162171,152332],{"class":1146},[159,162173,1486],{"class":165},[159,162175,19854],{"class":1146},[159,162177,1492],{"class":165},[159,162179,162180],{"class":161,"line":203},[159,162181,15685],{"class":165},[14,162183,162184,162096],{},[49,162185,162186],{},"box_bd",[14,162188,162189],{},"2 号盒子 box_bd，不要给高度",[23,162191],{"style":147708,"src":162192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,162194,162195],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,162197,162198],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,162200,162201],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[103,162203,162204,162216,162232],{},[106,162205,162206,162208,162209,162212,162213,162215],{},[49,162207,162186],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[49,162210,162211],{},"tab_content","，在",[49,162214,162211],{}," 里面包裹tab选项卡对应的内容",[106,162217,162218,162219,162222,162223,162225,162226,162228,162229,162231],{},"内容被一个大盒子包裹（",[49,162220,162221],{},"tab_list_item","），里面是 ",[49,162224,103],{}," 包裹 5个 ",[49,162227,106],{},"，每个",[49,162230,106],{},"设置对应的宽度，然后设置浮动",[106,162233,162234,162235,162237,162238,162240,162241],{},"而这5个",[49,162236,106],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[49,162239,106],{},"设置",[103,162242,162243,162261,162264],{},[106,162244,162245,162246,162248,162249,162251,162252,162254,162255,162257,162258,162260],{},"第一个小 ",[49,162247,106],{}," 分为上下结构，上面是 ",[49,162250,103],{}," 包裹 ",[49,162253,106],{}," ，",[49,162256,106],{},"里面包裹 ",[49,162259,8085],{},"，下面插入一张图片",[106,162262,162263],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[106,162265,162266,162267,162269,162270,162272,162273,162275],{},"后面的小 ",[49,162268,106],{}," 里面先放一个",[49,162271,8085],{},"标签，然后在",[49,162274,8085],{},"标签里面插入图片即可",[14,162277,162130],{},[151,162279,162280],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,162281,162282],{"__ignoreMap":25},[159,162283,162284,162286,162288,162290,162292,162294,162296,162298,162300,162302,162304,162306],{"class":161,"line":162},[159,162285,166],{"class":165},[159,162287,23],{"class":169},[159,162289,2078],{"class":185},[159,162291,189],{"class":165},[159,162293,155369],{"class":192},[159,162295,2086],{"class":185},[159,162297,189],{"class":165},[159,162299,155376],{"class":192},[159,162301,155379],{"class":185},[159,162303,189],{"class":165},[159,162305,155384],{"class":192},[159,162307,173],{"class":165},[14,162309,162157],{},[151,162311,162312],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,162313,162314],{"__ignoreMap":25},[159,162315,162316,162318,162320,162322,162324,162326,162328,162330,162332,162334,162336,162338],{"class":161,"line":162},[159,162317,166],{"class":165},[159,162319,23],{"class":169},[159,162321,2078],{"class":185},[159,162323,189],{"class":165},[159,162325,155369],{"class":192},[159,162327,2086],{"class":185},[159,162329,189],{"class":165},[159,162331,155376],{"class":192},[159,162333,155379],{"class":185},[159,162335,189],{"class":165},[159,162337,155384],{"class":192},[159,162339,173],{"class":165},[14,162341,162342],{},"tab栏切换需求！！！！！！介绍：",[23,162344],{"style":147708,"src":162345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[103,162347,162348,162356,162362,162365],{},[106,162349,162350,162353,162354],{},[49,162351,162352],{},"tab","栏的布局是 ",[49,162355,160363],{},[106,162357,162358,162359,162361],{},"有多少个",[49,162360,162352],{},"选项卡，那么对应就有多少个内容",[106,162363,162364],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[106,162366,162367,162368,162371,162372,162374,162375,162377],{},"等后面我们学习了",[49,162369,162370],{},"js","之后，我们就会配合",[49,162373,162370],{},"来实现，",[49,162376,162352],{},"栏的切换",[37,162379,162381],{"id":162380},"_162-列表制作","16.2 列表制作",[42,162383,162385],{"id":162384},"_1621-准备工作","16.2.1 准备工作",[103,162387,162388,162391,162394,162397],{},[106,162389,162390],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[106,162392,162393],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[106,162395,162396],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[106,162398,162399],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[42,162401,162403,162404,122318,162406,162408],{"id":162402},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[49,162405,152857],{},[49,162407,426],{}," 修改",[23,162410],{"style":147708,"src":162411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[103,162413,162414],{},[106,162415,162416],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,162418,161222],{},[151,162420,162421],{"className":147852,"code":153284,"language":147854,"meta":25,"style":25},[49,162422,162423,162427,162441,162445,162459,162463,162477,162481,162495,162499],{"__ignoreMap":25},[159,162424,162425],{"class":161,"line":162},[159,162426,153291],{"class":1135},[159,162428,162429,162431,162433,162435,162437,162439],{"class":161,"line":176},[159,162430,153296],{"class":185},[159,162432,101107],{"class":165},[159,162434,150212],{"class":1146},[159,162436,1486],{"class":165},[159,162438,153305],{"class":1146},[159,162440,150782],{"class":165},[159,162442,162443],{"class":161,"line":203},[159,162444,153312],{"class":1135},[159,162446,162447,162449,162451,162453,162455,162457],{"class":161,"line":223},[159,162448,153317],{"class":185},[159,162450,101107],{"class":165},[159,162452,150212],{"class":1146},[159,162454,1486],{"class":165},[159,162456,1556],{"class":1146},[159,162458,150782],{"class":165},[159,162460,162461],{"class":161,"line":233},[159,162462,153332],{"class":1135},[159,162464,162465,162467,162469,162471,162473,162475],{"class":161,"line":239},[159,162466,153337],{"class":185},[159,162468,101107],{"class":165},[159,162470,150212],{"class":1146},[159,162472,1486],{"class":165},[159,162474,1627],{"class":1146},[159,162476,150782],{"class":165},[159,162478,162479],{"class":161,"line":245},[159,162480,153352],{"class":1135},[159,162482,162483,162485,162487,162489,162491,162493],{"class":161,"line":251},[159,162484,153357],{"class":185},[159,162486,101107],{"class":165},[159,162488,150212],{"class":1146},[159,162490,1486],{"class":165},[159,162492,107533],{"class":1146},[159,162494,150782],{"class":165},[159,162496,162497],{"class":161,"line":261},[159,162498,153372],{"class":1135},[159,162500,162501,162503,162505,162507,162509,162511],{"class":161,"line":603},[159,162502,153377],{"class":185},[159,162504,101107],{"class":165},[159,162506,150212],{"class":1146},[159,162508,1486],{"class":165},[159,162510,153386],{"class":1146},[159,162512,150782],{"class":165},[14,162514,161311],{},[151,162516,162517],{"className":147852,"code":153284,"language":147854,"meta":25,"style":25},[49,162518,162519,162523,162537,162541,162555,162559,162573,162577,162591,162595],{"__ignoreMap":25},[159,162520,162521],{"class":161,"line":162},[159,162522,153291],{"class":1135},[159,162524,162525,162527,162529,162531,162533,162535],{"class":161,"line":176},[159,162526,153296],{"class":185},[159,162528,101107],{"class":165},[159,162530,150212],{"class":1146},[159,162532,1486],{"class":165},[159,162534,153305],{"class":1146},[159,162536,150782],{"class":165},[159,162538,162539],{"class":161,"line":203},[159,162540,153312],{"class":1135},[159,162542,162543,162545,162547,162549,162551,162553],{"class":161,"line":223},[159,162544,153317],{"class":185},[159,162546,101107],{"class":165},[159,162548,150212],{"class":1146},[159,162550,1486],{"class":165},[159,162552,1556],{"class":1146},[159,162554,150782],{"class":165},[159,162556,162557],{"class":161,"line":233},[159,162558,153332],{"class":1135},[159,162560,162561,162563,162565,162567,162569,162571],{"class":161,"line":239},[159,162562,153337],{"class":185},[159,162564,101107],{"class":165},[159,162566,150212],{"class":1146},[159,162568,1486],{"class":165},[159,162570,1627],{"class":1146},[159,162572,150782],{"class":165},[159,162574,162575],{"class":161,"line":245},[159,162576,153352],{"class":1135},[159,162578,162579,162581,162583,162585,162587,162589],{"class":161,"line":251},[159,162580,153357],{"class":185},[159,162582,101107],{"class":165},[159,162584,150212],{"class":1146},[159,162586,1486],{"class":165},[159,162588,107533],{"class":1146},[159,162590,150782],{"class":165},[159,162592,162593],{"class":161,"line":261},[159,162594,153372],{"class":1135},[159,162596,162597,162599,162601,162603,162605,162607],{"class":161,"line":603},[159,162598,153377],{"class":185},[159,162600,101107],{"class":165},[159,162602,150212],{"class":1146},[159,162604,1486],{"class":165},[159,162606,153386],{"class":1146},[159,162608,150782],{"class":165},[103,162610,162611,162622],{},[106,162612,162613,162614,162617,162618,122318,162620],{},"1 号盒子左侧浮动 ",[49,162615,162616],{},"sk_list"," 里面包含 ",[49,162619,103],{},[49,162621,106],{},[106,162623,162624,162625,162617,162628,122318,162630],{},"2 号盒子左侧浮动 ",[49,162626,162627],{},"sk_con",[49,162629,103],{},[49,162631,106],{},[14,162633,161222],{},[151,162635,162636],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,162637,162638,162644,162654],{"__ignoreMap":25},[159,162639,162640,162642],{"class":161,"line":162},[159,162641,151700],{"class":185},[159,162643,1478],{"class":165},[159,162645,162646,162648,162650,162652],{"class":161,"line":176},[159,162647,152332],{"class":1146},[159,162649,1486],{"class":165},[159,162651,19854],{"class":1146},[159,162653,1492],{"class":165},[159,162655,162656],{"class":161,"line":203},[159,162657,15685],{"class":165},[14,162659,161311],{},[151,162661,162662],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,162663,162664,162670,162680],{"__ignoreMap":25},[159,162665,162666,162668],{"class":161,"line":162},[159,162667,151700],{"class":185},[159,162669,1478],{"class":165},[159,162671,162672,162674,162676,162678],{"class":161,"line":176},[159,162673,152332],{"class":1146},[159,162675,1486],{"class":165},[159,162677,19854],{"class":1146},[159,162679,1492],{"class":165},[159,162681,162682],{"class":161,"line":203},[159,162683,15685],{"class":165},[42,162685,162687,162688],{"id":162686},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[49,162689,162690],{},"sk_container",[23,162692],{"style":147708,"src":162693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[103,162695,162696,162701],{},[106,162697,161876,162698,162700],{},[49,162699,162690],{}," 给宽度 1200，不要给高度",[106,162702,162703],{},"一定不要忘记清除浮动",[14,162705,161222],{},[151,162707,162708],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,162709,162710,162716,162726],{"__ignoreMap":25},[159,162711,162712,162714],{"class":161,"line":162},[159,162713,151700],{"class":185},[159,162715,1478],{"class":165},[159,162717,162718,162720,162722,162724],{"class":161,"line":176},[159,162719,152332],{"class":1146},[159,162721,1486],{"class":165},[159,162723,19854],{"class":1146},[159,162725,1492],{"class":165},[159,162727,162728],{"class":161,"line":203},[159,162729,15685],{"class":165},[134,162731,162732],{},[106,162733,162734],{},"sk_hd制作",[103,162736,162737],{},[106,162738,161956,162739,162742],{},[49,162740,162741],{},"sk_hd"," ，插入图片即可",[14,162744,161222],{},[151,162746,162747],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,162748,162749],{"__ignoreMap":25},[159,162750,162751,162753,162755,162757,162759,162761,162763,162765,162767,162769,162771,162773],{"class":161,"line":162},[159,162752,166],{"class":165},[159,162754,23],{"class":169},[159,162756,2078],{"class":185},[159,162758,189],{"class":165},[159,162760,155369],{"class":192},[159,162762,2086],{"class":185},[159,162764,189],{"class":165},[159,162766,155376],{"class":192},[159,162768,155379],{"class":185},[159,162770,189],{"class":165},[159,162772,155384],{"class":192},[159,162774,173],{"class":165},[134,162776,162777],{"start":176},[106,162778,162779],{},"sk_bd制作",[103,162781,162782],{},[106,162783,162784,162785,162788,162789,122318,162791,162793],{},"3 号盒子 ",[49,162786,162787],{},"sk_bd"," ，里面包含很多的 ",[49,162790,103],{},[49,162792,106],{},[103,162794,162795,162804],{},[106,162796,162797,162798,162800,162801,162803],{},"当鼠标移入到 ",[49,162799,106],{}," 上面的时候显示红色的边框，在这里先给 ",[49,162802,106],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[106,162805,162806,162807,162809,162810,162812,162813,162816,162817,162819],{},"由于给每个 ",[49,162808,106],{}," 都设置了外边距，导致一行的最后一个 ",[49,162811,106],{}," 掉了下来，在这里我们利用 ",[49,162814,162815],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[49,162818,106],{},"，去掉外边距就好了",[14,162821,161222],{},[151,162823,162824],{"className":147852,"code":160041,"language":147854,"meta":25,"style":25},[49,162825,162826,162832,162844],{"__ignoreMap":25},[159,162827,162828,162830],{"class":161,"line":162},[159,162829,182],{"class":169},[159,162831,1478],{"class":165},[159,162833,162834,162836,162838,162840,162842],{"class":161,"line":176},[159,162835,17556],{"class":1146},[159,162837,1486],{"class":165},[159,162839,1489],{"class":1146},[159,162841,1601],{"class":1146},[159,162843,1492],{"class":165},[159,162845,162846],{"class":161,"line":203},[159,162847,15685],{"class":165},[14,162849,161311],{},[151,162851,162852],{"className":147852,"code":160041,"language":147854,"meta":25,"style":25},[49,162853,162854,162860,162872],{"__ignoreMap":25},[159,162855,162856,162858],{"class":161,"line":162},[159,162857,182],{"class":169},[159,162859,1478],{"class":165},[159,162861,162862,162864,162866,162868,162870],{"class":161,"line":176},[159,162863,17556],{"class":1146},[159,162865,1486],{"class":165},[159,162867,1489],{"class":1146},[159,162869,1601],{"class":1146},[159,162871,1492],{"class":165},[159,162873,162874],{"class":161,"line":203},[159,162875,15685],{"class":165},[37,162877,162879],{"id":162878},"_163-注册页面制作","16.3 注册页面制作",[23,162881],{"style":147708,"src":162882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,162884,162885,162887],{},[61,162886,32623],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[23,162889],{"style":147708,"src":162890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[42,162892,162894],{"id":162893},"_1631-准备工作","16.3.1 准备工作",[103,162896,162897,162900],{},[106,162898,162899],{},"创建register.html，引入 base.css，引入favicon图标",[106,162901,162902],{},"创建register.css ，在html页面进行引入",[42,162904,162906,162907,162909],{"id":162905},"_1632-header-头部实现","16.3.2 ",[49,162908,152857],{}," 头部实现",[103,162911,162912,162915],{},[106,162913,162914],{},"整个内容用 版心 进行包裹",[106,162916,162917],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,162919,161222],{},[151,162921,162922],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,162923,162924],{"__ignoreMap":25},[159,162925,162926,162928,162930,162932,162934,162936,162938,162940,162942,162944,162946,162948],{"class":161,"line":162},[159,162927,166],{"class":165},[159,162929,23],{"class":169},[159,162931,2078],{"class":185},[159,162933,189],{"class":165},[159,162935,155369],{"class":192},[159,162937,2086],{"class":185},[159,162939,189],{"class":165},[159,162941,155376],{"class":192},[159,162943,155379],{"class":185},[159,162945,189],{"class":165},[159,162947,155384],{"class":192},[159,162949,173],{"class":165},[14,162951,161311],{},[151,162953,162954],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,162955,162956],{"__ignoreMap":25},[159,162957,162958,162960,162962,162964,162966,162968,162970,162972,162974,162976,162978,162980],{"class":161,"line":162},[159,162959,166],{"class":165},[159,162961,23],{"class":169},[159,162963,2078],{"class":185},[159,162965,189],{"class":165},[159,162967,155369],{"class":192},[159,162969,2086],{"class":185},[159,162971,189],{"class":165},[159,162973,155376],{"class":192},[159,162975,155379],{"class":185},[159,162977,189],{"class":165},[159,162979,155384],{"class":192},[159,162981,173],{"class":165},[42,162983,162985,162986,162989],{"id":162984},"_1633-registerarea-主体模块实现","16.3.3 ",[49,162987,162988],{},"registerarea"," 主体模块实现",[23,162991],{"style":147708,"src":162992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,162994,162995],{},"整个大盒子 高度为 522px，设置4个边框",[14,162997,161222],{},[151,162999,163000],{"className":147852,"code":152009,"language":147854,"meta":25,"style":25},[49,163001,163002,163008,163024],{"__ignoreMap":25},[159,163003,163004,163006],{"class":161,"line":162},[159,163005,182],{"class":169},[159,163007,1478],{"class":165},[159,163009,163010,163012,163014,163016,163018,163020,163022],{"class":161,"line":176},[159,163011,17983],{"class":1146},[159,163013,1486],{"class":165},[159,163015,4932],{"class":1146},[159,163017,1571],{"class":1142},[159,163019,7709],{"class":1146},[159,163021,151244],{"class":1146},[159,163023,1492],{"class":165},[159,163025,163026],{"class":161,"line":203},[159,163027,15685],{"class":165},[14,163029,161311],{},[151,163031,163032],{"className":147852,"code":152009,"language":147854,"meta":25,"style":25},[49,163033,163034,163040,163056],{"__ignoreMap":25},[159,163035,163036,163038],{"class":161,"line":162},[159,163037,182],{"class":169},[159,163039,1478],{"class":165},[159,163041,163042,163044,163046,163048,163050,163052,163054],{"class":161,"line":176},[159,163043,17983],{"class":1146},[159,163045,1486],{"class":165},[159,163047,4932],{"class":1146},[159,163049,1571],{"class":1142},[159,163051,7709],{"class":1146},[159,163053,151244],{"class":1146},[159,163055,1492],{"class":165},[159,163057,163058],{"class":161,"line":203},[159,163059,15685],{"class":165},[14,163061,163062],{},"1号盒子 是一个 h3 标签，放标题",[103,163064,163065],{},[106,163066,163067],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,163069,161222],{},[151,163071,163072],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,163073,163074,163080,163090],{"__ignoreMap":25},[159,163075,163076,163078],{"class":161,"line":162},[159,163077,151700],{"class":185},[159,163079,1478],{"class":165},[159,163081,163082,163084,163086,163088],{"class":161,"line":176},[159,163083,152332],{"class":1146},[159,163085,1486],{"class":165},[159,163087,19854],{"class":1146},[159,163089,1492],{"class":165},[159,163091,163092],{"class":161,"line":203},[159,163093,15685],{"class":165},[14,163095,161311],{},[151,163097,163098],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,163099,163100,163106,163116],{"__ignoreMap":25},[159,163101,163102,163104],{"class":161,"line":162},[159,163103,151700],{"class":185},[159,163105,1478],{"class":165},[159,163107,163108,163110,163112,163114],{"class":161,"line":176},[159,163109,152332],{"class":1146},[159,163111,1486],{"class":165},[159,163113,19854],{"class":1146},[159,163115,1492],{"class":165},[159,163117,163118],{"class":161,"line":203},[159,163119,15685],{"class":165},[14,163121,163122],{},"2号盒子 里面放注册的内容",[103,163124,163125,163128,163137,163151,163164,163167,163170,163188,163202],{},[106,163126,163127],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[106,163129,163130,163131,163133,163134,163136],{},"里面的内容利用 ",[49,163132,103],{}," 包含 ",[49,163135,106],{}," 来实现的（不需要用表格）",[106,163138,160366,163139,163141,163142,163144,163145,163147,163148,163150],{},[49,163140,106],{}," 里面，左侧放 ",[49,163143,57026],{}," 标签， 中间放",[49,163146,536],{}," 标签， 右侧放 ",[49,163149,159],{}," 提示信息",[106,163152,163153,163154,163156,163157,163159,163160,163163],{},"左侧 ",[49,163155,57026],{},"里面的文字都是右对齐，我们可以给",[49,163158,57026],{},"设置一个宽度（88px），然后利用",[49,163161,163162],{},"text-align"," 来设置右对齐",[106,163165,163166],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[106,163168,163169],{},"右侧 span修饰一下文字颜色",[106,163171,163172,163173],{},"提示信息的样式优化",[103,163174,163175,163178,163181],{},[106,163176,163177],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[106,163179,163180],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[106,163182,163183,163184,163187],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[49,163185,163186],{},"vertical-algin"," 来设置 图片与文字对齐方式",[106,163189,163190,163191],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[103,163192,163193,163199],{},[106,163194,163195,163196,163198],{},"设置 ",[49,163197,47079],{}," 的 左右 12px 的内边距，设置一下文字颜色",[106,163200,163201],{},"分别设置 背景颜色",[106,163203,163204,163205,163207],{},"同意协议 和 完成注册 都是用 ",[49,163206,106],{}," 进行包裹",[14,163209,161222],{},[151,163211,163212],{"className":147852,"code":161795,"language":147854,"meta":25,"style":25},[49,163213,163214,163220,163230],{"__ignoreMap":25},[159,163215,163216,163218],{"class":161,"line":162},[159,163217,182],{"class":169},[159,163219,1478],{"class":165},[159,163221,163222,163224,163226,163228],{"class":161,"line":176},[159,163223,17965],{"class":1146},[159,163225,1486],{"class":165},[159,163227,161812],{"class":1146},[159,163229,1492],{"class":165},[159,163231,163232],{"class":161,"line":203},[159,163233,15685],{"class":165},[14,163235,161311],{},[151,163237,163238],{"className":147852,"code":161795,"language":147854,"meta":25,"style":25},[49,163239,163240,163246,163256],{"__ignoreMap":25},[159,163241,163242,163244],{"class":161,"line":162},[159,163243,182],{"class":169},[159,163245,1478],{"class":165},[159,163247,163248,163250,163252,163254],{"class":161,"line":176},[159,163249,17965],{"class":1146},[159,163251,1486],{"class":165},[159,163253,161812],{"class":1146},[159,163255,1492],{"class":165},[159,163257,163258],{"class":161,"line":203},[159,163259,15685],{"class":165},[42,163261,163263],{"id":163262},"_1634-底部实现","16.3.4 底部实现",[14,163265,161222],{},[151,163267,163268],{"className":147852,"code":161795,"language":147854,"meta":25,"style":25},[49,163269,163270,163276,163286],{"__ignoreMap":25},[159,163271,163272,163274],{"class":161,"line":162},[159,163273,182],{"class":169},[159,163275,1478],{"class":165},[159,163277,163278,163280,163282,163284],{"class":161,"line":176},[159,163279,17965],{"class":1146},[159,163281,1486],{"class":165},[159,163283,161812],{"class":1146},[159,163285,1492],{"class":165},[159,163287,163288],{"class":161,"line":203},[159,163289,15685],{"class":165},[14,163291,161311],{},[151,163293,163294],{"className":148599,"code":151956,"language":148601,"meta":25,"style":25},[49,163295,163296,163300,163314,163318],{"__ignoreMap":25},[159,163297,163298],{"class":161,"line":162},[159,163299,151963],{"class":1135},[159,163301,163302,163304,163306,163308,163310,163312],{"class":161,"line":176},[159,163303,166],{"class":165},[159,163305,182],{"class":169},[159,163307,186],{"class":185},[159,163309,189],{"class":165},[159,163311,151976],{"class":192},[159,163313,173],{"class":165},[159,163315,163316],{"class":161,"line":203},[159,163317,151983],{"class":165},[159,163319,163320,163322,163324],{"class":161,"line":223},[159,163321,264],{"class":165},[159,163323,182],{"class":169},[159,163325,173],{"class":165},[37,163327,163329],{"id":163328},"_164-项目总结","16.4 项目总结",[134,163331,163332,163335,163338,163341],{},[106,163333,163334],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[106,163336,163337],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[106,163339,163340],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[106,163342,163343],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[23,163345],{"style":147708,"src":163346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[134,163348,163349],{"start":233},[106,163350,163351],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[23,163353],{"style":147708,"src":163354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[134,163356,163357],{"start":239},[106,163358,163359],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[23,163361],{"style":147708,"src":163362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[151,163364,163365],{"className":148599,"code":158009,"language":148601,"meta":25,"style":25},[49,163366,163367],{"__ignoreMap":25},[159,163368,163369,163371,163373,163375,163377,163379,163381,163383,163385,163387,163389,163391],{"class":161,"line":162},[159,163370,166],{"class":165},[159,163372,536],{"class":169},[159,163374,539],{"class":185},[159,163376,189],{"class":165},[159,163378,9742],{"class":192},[159,163380,547],{"class":185},[159,163382,189],{"class":165},[159,163384,158030],{"class":192},[159,163386,8050],{"class":185},[159,163388,189],{"class":165},[159,163390,158037],{"class":192},[159,163392,173],{"class":165},[134,163394,163395,163398],{"start":245},[106,163396,163397],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[106,163399,163400],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1468,163402,163403],{},"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":25,"searchDepth":176,"depth":176,"links":163405},[163406,163411,163418,163426],{"id":161032,"depth":176,"text":161033,"children":163407},[163408,163409,163410],{"id":161036,"depth":203,"text":161037},{"id":161767,"depth":203,"text":161768},{"id":162080,"depth":203,"text":162081},{"id":162380,"depth":176,"text":162381,"children":163412},[163413,163414,163416],{"id":162384,"depth":203,"text":162385},{"id":162402,"depth":203,"text":163415},"16.2.2 列表页 header 和 nav 修改",{"id":162686,"depth":203,"text":163417},"16.2.3 列表页主体 sk_container",{"id":162878,"depth":176,"text":162879,"children":163419},[163420,163421,163423,163425],{"id":162893,"depth":203,"text":162894},{"id":162905,"depth":203,"text":163422},"16.3.2 header 头部实现",{"id":162984,"depth":203,"text":163424},"16.3.3 registerarea 主体模块实现",{"id":163262,"depth":203,"text":163263},{"id":163328,"depth":176,"text":163329},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":161024,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":163433,"title":163434,"body":163435,"description":23809,"extension":23810,"meta":163543,"navigation":589,"path":163544,"seo":163545,"stem":163546,"__hash__":163547},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":163436,"toc":163538},[163437,163440,163444,163447,163450,163459,163468,163472,163477,163484,163502,163505,163508,163511,163514,163517,163520,163523,163526,163529,163532,163535],[10,163438,163434],{"id":163439},"_17-web服务器与网站发布",[37,163441,163443],{"id":163442},"_171-web服务器","17.1 Web服务器",[14,163445,163446],{},"把自己网站上传到服务器上，可以让其他人访问",[23,163448],{"style":147708,"src":163449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,163451,163452,163455,163456],{},[61,163453,163454],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[61,163457,163458],{},"Web 服务器等",[14,163460,163461,163462,122318,163465,49263],{},"根据服务器在网络中所在的位置不同，又可分为 ",[61,163463,163464],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[61,163466,163467],{},"远程服务器",[42,163469,163471],{"id":163470},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,163473,163474],{},[61,163475,163476],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,163478,163479,163480],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[8085,163481,163482],{"href":163482,"rel":163483},"http:\u002F\u002Ffree.3v.do\u002F",[15923],[103,163485,163486,163489,163492,163499],{},[106,163487,163488],{},"去免费空间网站注册账号。",[106,163490,163491],{},"记录下主机名、用户名、密码、域名。",[106,163493,163494,163495,163498],{},"利用 ",[49,163496,163497],{},"utftp"," 软件 上传网站到远程服务器",[106,163500,163501],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,163503,163504],{},"使用软件上传，对上传软件文件进行解压",[23,163506],{"style":147708,"src":163507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[23,163509],{"style":147708,"src":163510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,163512,163513],{},"输入刚刚申请的服务器账号信息：",[23,163515],{"style":147708,"src":163516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[23,163518],{"style":147708,"src":163519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[23,163521],{"style":147708,"src":163522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[23,163524],{"style":147708,"src":163525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,163527,163528],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[23,163530],{"style":147708,"src":163531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,163533,163534],{},"浏览器输入域名即可访问",[14,163536,163537],{},"首页一定必须是index",{"title":25,"searchDepth":176,"depth":176,"links":163539},[163540],{"id":163442,"depth":176,"text":163443,"children":163541},[163542],{"id":163470,"depth":203,"text":163471},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":163434,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":163549,"title":163550,"body":163551,"description":23809,"extension":23810,"meta":164478,"navigation":589,"path":164479,"seo":164480,"stem":164481,"__hash__":164482},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":163552,"toc":164461},[163553,163556,163560,163563,163566,163577,163580,163584,163588,163593,163596,163599,163602,163605,163609,163635,163639,163643,163646,163649,163653,163686,163690,163693,163696,163760,163764,163768,163771,163774,163777,163781,163826,163830,163833,163863,163867,163871,163874,163877,163881,163884,163953,163956,164064,164066,164072,164076,164079,164082,164178,164181,164185,164209,164213,164216,164220,164223,164227,164230,164233,164236,164239,164243,164246,164249,164253,164257,164260,164263,164266,164269,164273,164276,164280,164283,164286,164331,164335,164339,164342,164345,164348,164380,164384,164387,164421,164425,164428,164458],[10,163554,163550],{"id":163555},"_18-2d动画与3d转换",[37,163557,163559],{"id":163558},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,163561,163562],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,163564,163565],{},"转换（transform）你可以简单理解为变形",[103,163567,163568,163571,163574],{},[106,163569,163570],{},"移动：translate",[106,163572,163573],{},"旋转：rotate",[106,163575,163576],{},"缩放：scale",[23,163578],{"style":147708,"src":163579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[42,163581,163583],{"id":163582},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[326,163585,163587],{"id":163586},"_18111-translate介绍","18.1.1.1 translate介绍",[14,163589,163590,163591],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[61,163592,154511],{},[23,163594],{"style":147708,"src":163595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,163597,163598],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,163600,163601],{},"对于行内元素无效",[14,163603,163604],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[326,163606,163608],{"id":163607},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[151,163610,163611],{"className":147852,"code":160041,"language":147854,"meta":25,"style":25},[49,163612,163613,163619,163631],{"__ignoreMap":25},[159,163614,163615,163617],{"class":161,"line":162},[159,163616,182],{"class":169},[159,163618,1478],{"class":165},[159,163620,163621,163623,163625,163627,163629],{"class":161,"line":176},[159,163622,17556],{"class":1146},[159,163624,1486],{"class":165},[159,163626,1489],{"class":1146},[159,163628,1601],{"class":1146},[159,163630,1492],{"class":165},[159,163632,163633],{"class":161,"line":203},[159,163634,15685],{"class":165},[42,163636,163638],{"id":163637},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[326,163640,163642],{"id":163641},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,163644,163645],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[23,163647],{"style":147708,"src":163648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[326,163650,163652],{"id":163651},"_18122-旋转效果","18.1.2.2 旋转效果",[151,163654,163656],{"className":147852,"code":163655,"language":147854,"meta":25,"style":25},"div {\n  transform: rotate(45deg);\n}\n",[49,163657,163658,163664,163682],{"__ignoreMap":25},[159,163659,163660,163662],{"class":161,"line":162},[159,163661,182],{"class":169},[159,163663,1478],{"class":165},[159,163665,163666,163668,163670,163673,163675,163677,163680],{"class":161,"line":176},[159,163667,157836],{"class":1146},[159,163669,1486],{"class":165},[159,163671,163672],{"class":1146},"rotate",[159,163674,1159],{"class":165},[159,163676,24373],{"class":1146},[159,163678,163679],{"class":1142},"deg",[159,163681,1953],{"class":165},[159,163683,163684],{"class":161,"line":203},[159,163685,15685],{"class":165},[326,163687,163689],{"id":163688},"_18123-三角做法","18.1.2.3 三角做法",[14,163691,163692],{},"该下标当经过最外层大盒子时会实现向上反转",[23,163694],{"style":147708,"src":163695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[151,163697,163698],{"className":147852,"code":156372,"language":147854,"meta":25,"style":25},[49,163699,163700,163704,163710,163720,163730,163746,163756],{"__ignoreMap":25},[159,163701,163702],{"class":161,"line":162},[159,163703,156379],{"class":1135},[159,163705,163706,163708],{"class":161,"line":176},[159,163707,156384],{"class":185},[159,163709,1478],{"class":165},[159,163711,163712,163714,163716,163718],{"class":161,"line":203},[159,163713,17655],{"class":1146},[159,163715,1486],{"class":165},[159,163717,1489],{"class":1146},[159,163719,1492],{"class":165},[159,163721,163722,163724,163726,163728],{"class":161,"line":223},[159,163723,17875],{"class":1146},[159,163725,1486],{"class":165},[159,163727,1489],{"class":1146},[159,163729,1492],{"class":165},[159,163731,163732,163734,163736,163738,163740,163742,163744],{"class":161,"line":233},[159,163733,17983],{"class":1146},[159,163735,1486],{"class":165},[159,163737,1964],{"class":1146},[159,163739,1571],{"class":1142},[159,163741,7709],{"class":1146},[159,163743,11041],{"class":1146},[159,163745,1492],{"class":165},[159,163747,163748,163750,163752,163754],{"class":161,"line":239},[159,163749,156427],{"class":1146},[159,163751,1486],{"class":165},[159,163753,9412],{"class":1146},[159,163755,1492],{"class":165},[159,163757,163758],{"class":161,"line":245},[159,163759,15685],{"class":165},[42,163761,163763],{"id":163762},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[326,163765,163767],{"id":163766},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,163769,163770],{},"设置中心点",[23,163772],{"style":147708,"src":163773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,163775,163776],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[326,163778,163780],{"id":163779},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[151,163782,163784],{"className":147852,"code":163783,"language":147854,"meta":25,"style":25},"\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",[49,163785,163786,163791,163797,163812,163817,163822],{"__ignoreMap":25},[159,163787,163788],{"class":161,"line":162},[159,163789,163790],{"class":1135},"\u002F* 转换中心点 *\u002F\n",[159,163792,163793,163795],{"class":161,"line":176},[159,163794,182],{"class":169},[159,163796,1478],{"class":165},[159,163798,163799,163802,163804,163806,163808,163810],{"class":161,"line":203},[159,163800,163801],{"class":1146},"  transform-origin",[159,163803,1486],{"class":165},[159,163805,4193],{"class":1146},[159,163807,8774],{"class":1146},[159,163809,151715],{"class":165},[159,163811,156525],{"class":1135},[159,163813,163814],{"class":161,"line":223},[159,163815,163816],{"class":1135},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[159,163818,163819],{"class":161,"line":233},[159,163820,163821],{"class":1135},"  \u002F* transform-origin: left top; *\u002F\n",[159,163823,163824],{"class":161,"line":239},[159,163825,15685],{"class":165},[326,163827,163829],{"id":163828},"_18133-旋转案例","18.1.3.3 旋转案例",[23,163831],{"style":147708,"src":163832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[151,163834,163835],{"className":147852,"code":163655,"language":147854,"meta":25,"style":25},[49,163836,163837,163843,163859],{"__ignoreMap":25},[159,163838,163839,163841],{"class":161,"line":162},[159,163840,182],{"class":169},[159,163842,1478],{"class":165},[159,163844,163845,163847,163849,163851,163853,163855,163857],{"class":161,"line":176},[159,163846,157836],{"class":1146},[159,163848,1486],{"class":165},[159,163850,163672],{"class":1146},[159,163852,1159],{"class":165},[159,163854,24373],{"class":1146},[159,163856,163679],{"class":1142},[159,163858,1953],{"class":165},[159,163860,163861],{"class":161,"line":203},[159,163862,15685],{"class":165},[42,163864,163866],{"id":163865},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[326,163868,163870],{"id":163869},"_18141-scale介绍","18.1.4.1 scale介绍",[14,163872,163873],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[23,163875],{"style":147708,"src":163876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[326,163878,163880],{"id":163879},"_18142-分页按钮","18.1.4.2 分页按钮",[23,163882],{"style":147708,"src":163883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[151,163885,163887],{"className":147852,"code":163886,"language":147854,"meta":25,"style":25},"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",[49,163888,163889,163895,163911,163915,163919,163924,163930,163944,163949],{"__ignoreMap":25},[159,163890,163891,163893],{"class":161,"line":162},[159,163892,182],{"class":169},[159,163894,1478],{"class":165},[159,163896,163897,163899,163901,163904,163906,163909],{"class":161,"line":176},[159,163898,157836],{"class":1146},[159,163900,1486],{"class":165},[159,163902,163903],{"class":1146},"scale",[159,163905,1159],{"class":165},[159,163907,163908],{"class":1146},"1.2",[159,163910,1953],{"class":165},[159,163912,163913],{"class":161,"line":203},[159,163914,15685],{"class":165},[159,163916,163917],{"class":161,"line":223},[159,163918,157313],{"class":165},[159,163920,163921],{"class":161,"line":233},[159,163922,163923],{"class":1135},"\u002F* 2D 缩放 *\u002F\n",[159,163925,163926,163928],{"class":161,"line":239},[159,163927,182],{"class":169},[159,163929,1478],{"class":165},[159,163931,163932,163934,163936,163938,163940,163942],{"class":161,"line":245},[159,163933,157836],{"class":1146},[159,163935,1486],{"class":165},[159,163937,163903],{"class":1146},[159,163939,1159],{"class":165},[159,163941,163908],{"class":1146},[159,163943,1953],{"class":165},[159,163945,163946],{"class":161,"line":251},[159,163947,163948],{"class":1135},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[159,163950,163951],{"class":161,"line":261},[159,163952,15685],{"class":165},[14,163954,163955],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[151,163957,163959],{"className":147852,"code":163958,"language":147854,"meta":25,"style":25},"\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",[49,163960,163961,163966,163976,163997,164018,164022,164027,164033,164060],{"__ignoreMap":25},[159,163962,163963],{"class":161,"line":162},[159,163964,163965],{"class":1135},"\u002F* 定义动画 *\u002F\n",[159,163967,163968,163971,163974],{"class":161,"line":176},[159,163969,163970],{"class":1142},"@keyframes",[159,163972,163973],{"class":8765}," move",[159,163975,1478],{"class":165},[159,163977,163978,163981,163983,163985,163987,163990,163992,163994],{"class":161,"line":203},[159,163979,163980],{"class":185},"  0%",[159,163982,101107],{"class":165},[159,163984,71526],{"class":1146},[159,163986,1486],{"class":165},[159,163988,163989],{"class":1146},"translateX",[159,163991,1159],{"class":165},[159,163993,1489],{"class":1146},[159,163995,163996],{"class":165},"); }\n",[159,163998,163999,164002,164004,164006,164008,164010,164012,164014,164016],{"class":161,"line":223},[159,164000,164001],{"class":185},"  100%",[159,164003,101107],{"class":165},[159,164005,71526],{"class":1146},[159,164007,1486],{"class":165},[159,164009,163989],{"class":1146},[159,164011,1159],{"class":165},[159,164013,1596],{"class":1146},[159,164015,1571],{"class":1142},[159,164017,163996],{"class":165},[159,164019,164020],{"class":161,"line":233},[159,164021,15685],{"class":165},[159,164023,164024],{"class":161,"line":239},[159,164025,164026],{"class":1135},"\u002F* 调用动画 *\u002F\n",[159,164028,164029,164031],{"class":161,"line":245},[159,164030,182],{"class":169},[159,164032,1478],{"class":165},[159,164034,164035,164038,164040,164042,164044,164046,164048,164050,164052,164055,164058],{"class":161,"line":251},[159,164036,164037],{"class":1146},"  animation",[159,164039,1486],{"class":165},[159,164041,156538],{"class":1146},[159,164043,2707],{"class":1146},[159,164045,8909],{"class":1142},[159,164047,99980],{"class":1146},[159,164049,1259],{"class":1146},[159,164051,8909],{"class":1142},[159,164053,164054],{"class":1146}," infinite",[159,164056,164057],{"class":1146}," alternate",[159,164059,1492],{"class":165},[159,164061,164062],{"class":161,"line":261},[159,164063,15685],{"class":165},[14,164065,163955],{},[151,164067,164070],{"className":164068,"code":164069,"language":8507},[28803],"\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",[49,164071,164069],{"__ignoreMap":25},[326,164073,164075],{"id":164074},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,164077,164078],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[23,164080],{"style":147708,"src":164081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[151,164083,164084],{"className":147852,"code":163958,"language":147854,"meta":25,"style":25},[49,164085,164086,164090,164098,164116,164136,164140,164144,164150,164174],{"__ignoreMap":25},[159,164087,164088],{"class":161,"line":162},[159,164089,163965],{"class":1135},[159,164091,164092,164094,164096],{"class":161,"line":176},[159,164093,163970],{"class":1142},[159,164095,163973],{"class":8765},[159,164097,1478],{"class":165},[159,164099,164100,164102,164104,164106,164108,164110,164112,164114],{"class":161,"line":203},[159,164101,163980],{"class":185},[159,164103,101107],{"class":165},[159,164105,71526],{"class":1146},[159,164107,1486],{"class":165},[159,164109,163989],{"class":1146},[159,164111,1159],{"class":165},[159,164113,1489],{"class":1146},[159,164115,163996],{"class":165},[159,164117,164118,164120,164122,164124,164126,164128,164130,164132,164134],{"class":161,"line":223},[159,164119,164001],{"class":185},[159,164121,101107],{"class":165},[159,164123,71526],{"class":1146},[159,164125,1486],{"class":165},[159,164127,163989],{"class":1146},[159,164129,1159],{"class":165},[159,164131,1596],{"class":1146},[159,164133,1571],{"class":1142},[159,164135,163996],{"class":165},[159,164137,164138],{"class":161,"line":233},[159,164139,15685],{"class":165},[159,164141,164142],{"class":161,"line":239},[159,164143,164026],{"class":1135},[159,164145,164146,164148],{"class":161,"line":245},[159,164147,182],{"class":169},[159,164149,1478],{"class":165},[159,164151,164152,164154,164156,164158,164160,164162,164164,164166,164168,164170,164172],{"class":161,"line":251},[159,164153,164037],{"class":1146},[159,164155,1486],{"class":165},[159,164157,156538],{"class":1146},[159,164159,2707],{"class":1146},[159,164161,8909],{"class":1142},[159,164163,99980],{"class":1146},[159,164165,1259],{"class":1146},[159,164167,8909],{"class":1142},[159,164169,164054],{"class":1146},[159,164171,164057],{"class":1146},[159,164173,1492],{"class":165},[159,164175,164176],{"class":161,"line":261},[159,164177,15685],{"class":165},[14,164179,164180],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[42,164182,164184],{"id":164183},"_1823-知识点回顾","18.2.3 知识点回顾",[151,164186,164187],{"className":147852,"code":150021,"language":147854,"meta":25,"style":25},[49,164188,164189,164195,164205],{"__ignoreMap":25},[159,164190,164191,164193],{"class":161,"line":162},[159,164192,182],{"class":169},[159,164194,1478],{"class":165},[159,164196,164197,164199,164201,164203],{"class":161,"line":176},[159,164198,150034],{"class":1146},[159,164200,1486],{"class":165},[159,164202,8771],{"class":1146},[159,164204,1492],{"class":165},[159,164206,164207],{"class":161,"line":203},[159,164208,15685],{"class":165},[37,164210,164212],{"id":164211},"_183-3d-转换","18.3 3D 转换",[14,164214,164215],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[42,164217,164219],{"id":164218},"_1831-坐标轴认识","18.3.1 坐标轴认识",[23,164221],{"style":147708,"src":164222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[42,164224,164226],{"id":164225},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[23,164228],{"style":147708,"src":164229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,164231,164232],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,164234,164235],{},"translate3d的效果需要搭配透视perspective来使用",[23,164237],{"style":147708,"src":164238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[42,164240,164242],{"id":164241},"_1833-透视-perspective","18.3.3 透视 perspective",[23,164244],{"style":147708,"src":164245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,164247,164248],{},"透视写在父盒子上，单位为像素",[42,164250,164252],{"id":164251},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[326,164254,164256],{"id":164255},"_18341-分开解释","18.3.4.1 分开解释",[23,164258],{"style":147708,"src":164259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[23,164261],{"style":147708,"src":164262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[23,164264],{"style":147708,"src":164265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,164267,164268],{},"总结来说就是左手原则",[326,164270,164272],{"id":164271},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[23,164274],{"style":147708,"src":164275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[42,164277,164279],{"id":164278},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[23,164281],{"style":147708,"src":164282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[23,164284],{"style":147708,"src":164285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[151,164287,164289],{"className":147852,"code":164288,"language":147854,"meta":25,"style":25},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[49,164290,164291,164297,164310,164327],{"__ignoreMap":25},[159,164292,164293,164295],{"class":161,"line":162},[159,164294,182],{"class":169},[159,164296,1478],{"class":165},[159,164298,164299,164302,164304,164306,164308],{"class":161,"line":176},[159,164300,164301],{"class":1146},"  perspective",[159,164303,1486],{"class":165},[159,164305,12132],{"class":1146},[159,164307,1571],{"class":1142},[159,164309,1492],{"class":165},[159,164311,164312,164314,164316,164319,164321,164323,164325],{"class":161,"line":203},[159,164313,157836],{"class":1146},[159,164315,1486],{"class":165},[159,164317,164318],{"class":1146},"rotateX",[159,164320,1159],{"class":165},[159,164322,24373],{"class":1146},[159,164324,163679],{"class":1142},[159,164326,1953],{"class":165},[159,164328,164329],{"class":161,"line":223},[159,164330,15685],{"class":165},[42,164332,164334],{"id":164333},"_1836-案例","18.3.6 案例",[326,164336,164338],{"id":164337},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[23,164340],{"style":147708,"src":164341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[23,164343],{"style":147708,"src":164344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[23,164346],{"style":147708,"src":164347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[151,164349,164351],{"className":147852,"code":164350,"language":147854,"meta":25,"style":25},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[49,164352,164353,164358,164364,164376],{"__ignoreMap":25},[159,164354,164355],{"class":161,"line":162},[159,164356,164357],{"class":1135},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[159,164359,164360,164362],{"class":161,"line":176},[159,164361,154849],{"class":185},[159,164363,1478],{"class":165},[159,164365,164366,164368,164370,164372,164374],{"class":161,"line":203},[159,164367,164301],{"class":1146},[159,164369,1486],{"class":165},[159,164371,12132],{"class":1146},[159,164373,1571],{"class":1142},[159,164375,1492],{"class":165},[159,164377,164378],{"class":161,"line":223},[159,164379,15685],{"class":165},[326,164381,164383],{"id":164382},"_18362-3d导航栏","18.3.6.2 3D导航栏",[23,164385],{"style":147708,"src":164386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[151,164388,164389],{"className":148599,"code":151956,"language":148601,"meta":25,"style":25},[49,164390,164391,164395,164409,164413],{"__ignoreMap":25},[159,164392,164393],{"class":161,"line":162},[159,164394,151963],{"class":1135},[159,164396,164397,164399,164401,164403,164405,164407],{"class":161,"line":176},[159,164398,166],{"class":165},[159,164400,182],{"class":169},[159,164402,186],{"class":185},[159,164404,189],{"class":165},[159,164406,151976],{"class":192},[159,164408,173],{"class":165},[159,164410,164411],{"class":161,"line":203},[159,164412,151983],{"class":165},[159,164414,164415,164417,164419],{"class":161,"line":223},[159,164416,264],{"class":165},[159,164418,182],{"class":169},[159,164420,173],{"class":165},[326,164422,164424],{"id":164423},"_18363-旋转木马","18.3.6.3 旋转木马",[23,164426],{"style":147708,"src":164427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[151,164429,164430],{"className":147852,"code":163655,"language":147854,"meta":25,"style":25},[49,164431,164432,164438,164454],{"__ignoreMap":25},[159,164433,164434,164436],{"class":161,"line":162},[159,164435,182],{"class":169},[159,164437,1478],{"class":165},[159,164439,164440,164442,164444,164446,164448,164450,164452],{"class":161,"line":176},[159,164441,157836],{"class":1146},[159,164443,1486],{"class":165},[159,164445,163672],{"class":1146},[159,164447,1159],{"class":165},[159,164449,24373],{"class":1146},[159,164451,163679],{"class":1142},[159,164453,1953],{"class":165},[159,164455,164456],{"class":161,"line":203},[159,164457,15685],{"class":165},[1468,164459,164460],{},"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":25,"searchDepth":176,"depth":176,"links":164462},[164463,164470],{"id":163558,"depth":176,"text":163559,"children":164464},[164465,164466,164467,164468,164469],{"id":163582,"depth":203,"text":163583},{"id":163637,"depth":203,"text":163638},{"id":163762,"depth":203,"text":163763},{"id":163865,"depth":203,"text":163866},{"id":164183,"depth":203,"text":164184},{"id":164211,"depth":176,"text":164212,"children":164471},[164472,164473,164474,164475,164476,164477],{"id":164218,"depth":203,"text":164219},{"id":164225,"depth":203,"text":164226},{"id":164241,"depth":203,"text":164242},{"id":164251,"depth":203,"text":164252},{"id":164278,"depth":203,"text":164279},{"id":164333,"depth":203,"text":164334},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":163550,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":164484,"title":164485,"body":164486,"description":23809,"extension":23810,"meta":164689,"navigation":589,"path":164690,"seo":164691,"stem":164692,"__hash__":164693},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":164487,"toc":164678},[164488,164491,164495,164498,164501,164505,164508,164511,164514,164518,164521,164525,164528,164532,164535,164539,164553,164557,164582,164585,164588,164605,164609,164613,164616,164619,164623,164626,164629,164647,164651,164654,164668,164672,164675],[10,164489,164485],{"id":164490},"_19-移动端基础-前缀现状与视口",[37,164492,164494],{"id":164493},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[23,164496],{"style":147708,"src":164497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,164499,164500],{},"意思就是加个前缀，增加兼容性",[37,164502,164504],{"id":164503},"_192-移动端现状认识","19.2 移动端现状认识",[23,164506],{"style":147708,"src":164507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,164509,164510],{},"调试方法：",[23,164512],{"style":147708,"src":164513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[37,164515,164517],{"id":164516},"_193-视口","19.3 视口",[14,164519,164520],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[42,164522,164524],{"id":164523},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[23,164526],{"style":147708,"src":164527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[42,164529,164531],{"id":164530},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[23,164533],{"style":147708,"src":164534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[42,164536,164538],{"id":164537},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[103,164540,164541,164544,164547,164550],{},[106,164542,164543],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[106,164545,164546],{},"理想视口，对设备来讲，是最理想的视口尺寸",[106,164548,164549],{},"需要手动添写meta视口标签通知浏览器操作",[106,164551,164552],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[42,164554,164556],{"id":164555},"_1934-meta视口标签","19.3.4 meta视口标签",[151,164558,164560],{"className":148599,"code":164559,"language":148601,"meta":25,"style":25},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[49,164561,164562],{"__ignoreMap":25},[159,164563,164564,164566,164568,164570,164572,164574,164576,164578,164580],{"class":161,"line":162},[159,164565,166],{"class":165},[159,164567,958],{"class":169},[159,164569,547],{"class":185},[159,164571,189],{"class":165},[159,164573,981],{"class":192},[159,164575,984],{"class":185},[159,164577,189],{"class":165},[159,164579,989],{"class":192},[159,164581,173],{"class":165},[23,164583],{"style":147708,"src":164584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,164586,164587],{},"标准视口设置：",[134,164589,164590,164593,164596,164599,164602],{},[106,164591,164592],{},"视口宽度和设备保持一致",[106,164594,164595],{},"视口的默认缩放比例1.0",[106,164597,164598],{},"不允许用户自行缩放",[106,164600,164601],{},"最大允许的缩放比例1.0",[106,164603,164604],{},"最小允许的缩放比例1.0",[42,164606,164608],{"id":164607},"_1935-二倍图","19.3.5 二倍图",[326,164610,164612],{"id":164611},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[23,164614],{"style":147708,"src":164615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[23,164617],{"style":147708,"src":164618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[326,164620,164622],{"id":164621},"_19352-多倍图","19.3.5.2 多倍图",[23,164624],{"style":147708,"src":164625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,164627,164628],{},"二倍图法，代码如下：",[151,164630,164632],{"className":147852,"code":164631,"language":147854,"meta":25,"style":25},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[49,164633,164634,164639],{"__ignoreMap":25},[159,164635,164636],{"class":161,"line":162},[159,164637,164638],{"class":1135},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[159,164640,164641,164644],{"class":161,"line":176},[159,164642,164643],{"class":169},"background-size",[159,164645,164646],{"class":165},": 50% 50%;\n",[326,164648,164650],{"id":164649},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[23,164652],{"style":147708,"src":164653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[134,164655,164656,164659,164662,164665],{},[106,164657,164658],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[106,164660,164661],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[106,164663,164664],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[106,164666,164667],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[326,164669,164671],{"id":164670},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[23,164673],{"style":147708,"src":164674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1468,164676,164677],{},"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":25,"searchDepth":176,"depth":176,"links":164679},[164680,164681,164682],{"id":164493,"depth":176,"text":164494},{"id":164503,"depth":176,"text":164504},{"id":164516,"depth":176,"text":164517,"children":164683},[164684,164685,164686,164687,164688],{"id":164523,"depth":203,"text":164524},{"id":164530,"depth":203,"text":164531},{"id":164537,"depth":203,"text":164538},{"id":164555,"depth":203,"text":164556},{"id":164607,"depth":203,"text":164608},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":164485,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":164695,"title":164696,"body":164697,"description":23809,"extension":23810,"meta":165574,"navigation":589,"path":165575,"seo":165576,"stem":165577,"__hash__":165578},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":164698,"toc":165558},[164699,164702,164706,164713,164716,164723,164726,164731,164734,164738,164742,164749,164752,164755,164759,164762,164765,164768,164771,164774,164778,164781,164785,164787,164790,164793,164796,164799,164801,164804,164806,164836,164838,164868,164872,164875,164879,164882,164899,164902,164905,164981,164983,164986,164989,164992,164995,164997,165000,165003,165007,165029,165032,165035,165039,165042,165048,165051,165055,165058,165061,165065,165068,165071,165074,165078,165081,165084,165087,165090,165094,165097,165101,165108,165111,165114,165117,165120,165130,165133,165136,165143,165146,165150,165153,165156,165160,165163,165166,165169,165214,165217,165220,165223,165225,165354,165356,165394,165397,165400,165402,165520,165522,165556],[10,164700,164696],{"id":164701},"_20-移动端布局实战上篇",[37,164703,164705],{"id":164704},"_201-移动端主流方案","20.1 移动端主流方案",[134,164707,164708],{},[106,164709,164710],{},[61,164711,164712],{},"单独移动端页面（主流）",[23,164714],{"style":147708,"src":164715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[134,164717,164718],{"start":176},[106,164719,164720],{},[61,164721,164722],{},"响应式兼容PC移动端",[23,164724],{"style":147708,"src":164725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[134,164727,164728],{"start":203},[106,164729,164730],{},"两种页面选型布局方式",[23,164732],{"style":147708,"src":164733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[37,164735,164737],{"id":164736},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[42,164739,164741],{"id":164740},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,164743,164744,164745],{},"官网地址： ",[8085,164746,164747],{"href":164747,"rel":164748},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[15923],[23,164750],{"style":147708,"src":164751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[23,164753],{"style":147708,"src":164754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[42,164756,164758],{"id":164757},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[23,164760],{"style":147708,"src":164761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[23,164763],{"style":147708,"src":164764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,164766,164767],{},"去除高亮：",[14,164769,164770],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,164772,164773],{},"-webkit- tap-highlight-color: transparent;",[37,164775,164777],{"id":164776},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[23,164779],{"style":147708,"src":164780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[37,164782,164784],{"id":164783},"_204-流式布局案例","20.4 流式布局案例",[14,164786,23910],{},[14,164788,164789],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,164791,164792],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,164794,164795],{},"图片格式：",[23,164797],{"style":147708,"src":164798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,164800,156895],{},[23,164802],{"style":147708,"src":164803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,164805,161222],{},[151,164807,164808],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,164809,164810],{"__ignoreMap":25},[159,164811,164812,164814,164816,164818,164820,164822,164824,164826,164828,164830,164832,164834],{"class":161,"line":162},[159,164813,166],{"class":165},[159,164815,23],{"class":169},[159,164817,2078],{"class":185},[159,164819,189],{"class":165},[159,164821,155369],{"class":192},[159,164823,2086],{"class":185},[159,164825,189],{"class":165},[159,164827,155376],{"class":192},[159,164829,155379],{"class":185},[159,164831,189],{"class":165},[159,164833,155384],{"class":192},[159,164835,173],{"class":165},[14,164837,161311],{},[151,164839,164840],{"className":148599,"code":155354,"language":148601,"meta":25,"style":25},[49,164841,164842],{"__ignoreMap":25},[159,164843,164844,164846,164848,164850,164852,164854,164856,164858,164860,164862,164864,164866],{"class":161,"line":162},[159,164845,166],{"class":165},[159,164847,23],{"class":169},[159,164849,2078],{"class":185},[159,164851,189],{"class":165},[159,164853,155369],{"class":192},[159,164855,2086],{"class":185},[159,164857,189],{"class":165},[159,164859,155376],{"class":192},[159,164861,155379],{"class":185},[159,164863,189],{"class":165},[159,164865,155384],{"class":192},[159,164867,173],{"class":165},[37,164869,164871],{"id":164870},"_205-flex布局","20.5 flex布局",[23,164873],{"style":147708,"src":164874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[42,164876,164878],{"id":164877},"_2051-布局原理","20.5.1 布局原理",[14,164880,164881],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[103,164883,164884,164887,164890,164893,164896],{},[106,164885,164886],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[106,164888,164889],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[106,164891,164892],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[106,164894,164895],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[106,164897,164898],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,164900,164901],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,164903,164904],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[151,164906,164908],{"className":147852,"code":164907,"language":147854,"meta":25,"style":25},"\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",[49,164909,164910,164915,164922,164932,164944,164955,164966,164977],{"__ignoreMap":25},[159,164911,164912],{"class":161,"line":162},[159,164913,164914],{"class":1135},"\u002F* Flex 弹性布局 *\u002F\n",[159,164916,164917,164920],{"class":161,"line":176},[159,164918,164919],{"class":185},".container",[159,164921,1478],{"class":165},[159,164923,164924,164926,164928,164930],{"class":161,"line":203},[159,164925,149468],{"class":1146},[159,164927,1486],{"class":165},[159,164929,1823],{"class":1146},[159,164931,1492],{"class":165},[159,164933,164934,164937,164939,164942],{"class":161,"line":223},[159,164935,164936],{"class":1146},"  flex-direction",[159,164938,1486],{"class":165},[159,164940,164941],{"class":1146},"row",[159,164943,1492],{"class":165},[159,164945,164946,164949,164951,164953],{"class":161,"line":233},[159,164947,164948],{"class":1146},"  justify-content",[159,164950,1486],{"class":165},[159,164952,1836],{"class":1146},[159,164954,1492],{"class":165},[159,164956,164957,164960,164962,164964],{"class":161,"line":239},[159,164958,164959],{"class":1146},"  align-items",[159,164961,1486],{"class":165},[159,164963,4193],{"class":1146},[159,164965,1492],{"class":165},[159,164967,164968,164971,164973,164975],{"class":161,"line":245},[159,164969,164970],{"class":1146},"  flex-wrap",[159,164972,1486],{"class":165},[159,164974,99910],{"class":1146},[159,164976,1492],{"class":165},[159,164978,164979],{"class":161,"line":251},[159,164980,15685],{"class":165},[14,164982,17539],{},[14,164984,164985],{},".form-item .male-label {",[14,164987,164988],{},"   margin-right: 20px;",[14,164990,164991],{},"   display: inline-flex;",[14,164993,164994],{},"   align-items: center;",[14,164996,886],{},[23,164998],{"style":147708,"src":164999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[23,165001],{"style":147708,"src":165002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[42,165004,165006],{"id":165005},"_2052-常见父项属性","20.5.2 常见父项属性",[134,165008,165009,165012,165015,165018,165021,165024,165027],{},[106,165010,165011],{},"flex-direction：设置主轴的方向",[106,165013,165014],{},"justify-content：设置主轴上的子元素排列方式",[106,165016,165017],{},"flex-wrap：设置子元素是否换行",[106,165019,165020],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[106,165022,165023],{},"align-items：设置侧轴上的子元素排列方式（单行）",[106,165025,165026],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[106,165028,165011],{},[23,165030],{"style":147708,"src":165031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[23,165033],{"style":147708,"src":165034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[134,165036,165037],{"start":176},[106,165038,165014],{},[23,165040],{"style":147708,"src":165041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,165043,165044,165047],{},[49,165045,165046],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,165049,165050],{},"跟着主轴走",[134,165052,165053],{"start":203},[106,165054,165017],{},[23,165056],{"style":147708,"src":165057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,165059,165060],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[134,165062,165063],{"start":223},[106,165064,165020],{},[23,165066],{"style":147708,"src":165067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,165069,165070],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,165072,165073],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[134,165075,165076],{"start":233},[106,165077,165023],{},[23,165079],{"style":147708,"src":165080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,165082,165083],{},"align-items与align-content之间的区别：",[14,165085,165086],{},"单找items，多找content",[23,165088],{"style":147708,"src":165089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[134,165091,165092],{"start":239},[106,165093,165026],{},[23,165095],{"style":147708,"src":165096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[42,165098,165100],{"id":165099},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[134,165102,165103],{},[106,165104,165105],{},[61,165106,165107],{},"flex 属性",[14,165109,165110],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[23,165112],{"style":147708,"src":165113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,165115,165116],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,165118,165119],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[134,165121,165122],{"start":176},[106,165123,165124,37361,165127],{},[61,165125,165126],{},"align-self",[61,165128,165129],{},"控制子项自己在侧轴上的排列方式",[23,165131],{"style":147708,"src":165132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,165134,165135],{},"单个子盒子在父盒子侧轴上的排列方式",[134,165137,165138],{"start":203},[106,165139,165140,165142],{},[61,165141,116597],{}," 属性定义项目的排列顺序",[23,165144],{"style":147708,"src":165145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[42,165147,165149],{"id":165148},"_2054-背景线性渐变","20.5.4 背景线性渐变",[23,165151],{"style":147708,"src":165152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,165154,165155],{},"必须要添加浏览器的私有前缀",[42,165157,165159],{"id":165158},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,165161,165162],{},"学到最重要的知识：",[14,165164,165165],{},"flex处理这样的布局思路",[23,165167],{"style":147708,"src":165168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[151,165170,165172],{"className":147852,"code":165171,"language":147854,"meta":25,"style":25},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[49,165173,165174,165180,165190,165200,165210],{"__ignoreMap":25},[159,165175,165176,165178],{"class":161,"line":162},[159,165177,164919],{"class":185},[159,165179,1478],{"class":165},[159,165181,165182,165184,165186,165188],{"class":161,"line":176},[159,165183,149468],{"class":1146},[159,165185,1486],{"class":165},[159,165187,1823],{"class":1146},[159,165189,1492],{"class":165},[159,165191,165192,165194,165196,165198],{"class":161,"line":203},[159,165193,164948],{"class":1146},[159,165195,1486],{"class":165},[159,165197,4193],{"class":1146},[159,165199,1492],{"class":165},[159,165201,165202,165204,165206,165208],{"class":161,"line":223},[159,165203,164959],{"class":1146},[159,165205,1486],{"class":165},[159,165207,4193],{"class":1146},[159,165209,1492],{"class":165},[159,165211,165212],{"class":161,"line":233},[159,165213,15685],{"class":165},[14,165215,165216],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,165218,165219],{},"使用属性选择器",[23,165221],{"style":147708,"src":165222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,165224,15962],{},[151,165226,165228],{"className":148599,"code":165227,"language":148601,"meta":25,"style":25},"\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",[49,165229,165230,165235,165249,165254,165274,165279,165298,165303,165322,165327,165346],{"__ignoreMap":25},[159,165231,165232],{"class":161,"line":162},[159,165233,165234],{"class":1135},"\u003C!-- 携程网移动端案例结构 -->\n",[159,165236,165237,165239,165241,165243,165245,165247],{"class":161,"line":176},[159,165238,166],{"class":165},[159,165240,182],{"class":169},[159,165242,186],{"class":185},[159,165244,189],{"class":165},[159,165246,113623],{"class":192},[159,165248,173],{"class":165},[159,165250,165251],{"class":161,"line":203},[159,165252,165253],{"class":1135},"  \u003C!-- 搜索栏 -->\n",[159,165255,165256,165258,165260,165262,165264,165267,165270,165272],{"class":161,"line":223},[159,165257,179],{"class":165},[159,165259,182],{"class":169},[159,165261,186],{"class":185},[159,165263,189],{"class":165},[159,165265,165266],{"class":192},"\"search-index\"",[159,165268,165269],{"class":165},">...\u003C\u002F",[159,165271,182],{"class":169},[159,165273,173],{"class":165},[159,165275,165276],{"class":161,"line":233},[159,165277,165278],{"class":1135},"  \u003C!-- 焦点图 -->\n",[159,165280,165281,165283,165285,165287,165289,165292,165294,165296],{"class":161,"line":239},[159,165282,179],{"class":165},[159,165284,182],{"class":169},[159,165286,186],{"class":185},[159,165288,189],{"class":165},[159,165290,165291],{"class":192},"\"focus\"",[159,165293,165269],{"class":165},[159,165295,182],{"class":169},[159,165297,173],{"class":165},[159,165299,165300],{"class":161,"line":245},[159,165301,165302],{"class":1135},"  \u003C!-- 主导航 -->\n",[159,165304,165305,165307,165309,165311,165313,165316,165318,165320],{"class":161,"line":251},[159,165306,179],{"class":165},[159,165308,182],{"class":169},[159,165310,186],{"class":185},[159,165312,189],{"class":165},[159,165314,165315],{"class":192},"\"local-nav\"",[159,165317,165269],{"class":165},[159,165319,182],{"class":169},[159,165321,173],{"class":165},[159,165323,165324],{"class":161,"line":261},[159,165325,165326],{"class":1135},"  \u003C!-- 子导航 -->\n",[159,165328,165329,165331,165333,165335,165337,165340,165342,165344],{"class":161,"line":603},[159,165330,179],{"class":165},[159,165332,182],{"class":169},[159,165334,186],{"class":185},[159,165336,189],{"class":165},[159,165338,165339],{"class":192},"\"nav-common\"",[159,165341,165269],{"class":165},[159,165343,182],{"class":169},[159,165345,173],{"class":165},[159,165347,165348,165350,165352],{"class":161,"line":621},[159,165349,264],{"class":165},[159,165351,182],{"class":169},[159,165353,173],{"class":165},[14,165355,17539],{},[151,165357,165358],{"className":147852,"code":158304,"language":147854,"meta":25,"style":25},[49,165359,165360,165374,165390],{"__ignoreMap":25},[159,165361,165362,165364,165366,165368,165370,165372],{"class":161,"line":162},[159,165363,536],{"class":169},[159,165365,17263],{"class":165},[159,165367,124407],{"class":185},[159,165369,189],{"class":1142},[159,165371,9742],{"class":192},[159,165373,158321],{"class":165},[159,165375,165376,165378,165380,165382,165384,165386,165388],{"class":161,"line":176},[159,165377,17983],{"class":1146},[159,165379,1486],{"class":165},[159,165381,4932],{"class":1146},[159,165383,1571],{"class":1142},[159,165385,7709],{"class":1146},[159,165387,151432],{"class":1146},[159,165389,1492],{"class":165},[159,165391,165392],{"class":161,"line":203},[159,165393,15685],{"class":165},[14,165395,165396],{},"总代码和效果展示：",[23,165398],{"style":147708,"src":165399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,165401,15962],{},[151,165403,165404],{"className":148599,"code":165227,"language":148601,"meta":25,"style":25},[49,165405,165406,165410,165424,165428,165446,165450,165468,165472,165490,165494,165512],{"__ignoreMap":25},[159,165407,165408],{"class":161,"line":162},[159,165409,165234],{"class":1135},[159,165411,165412,165414,165416,165418,165420,165422],{"class":161,"line":176},[159,165413,166],{"class":165},[159,165415,182],{"class":169},[159,165417,186],{"class":185},[159,165419,189],{"class":165},[159,165421,113623],{"class":192},[159,165423,173],{"class":165},[159,165425,165426],{"class":161,"line":203},[159,165427,165253],{"class":1135},[159,165429,165430,165432,165434,165436,165438,165440,165442,165444],{"class":161,"line":223},[159,165431,179],{"class":165},[159,165433,182],{"class":169},[159,165435,186],{"class":185},[159,165437,189],{"class":165},[159,165439,165266],{"class":192},[159,165441,165269],{"class":165},[159,165443,182],{"class":169},[159,165445,173],{"class":165},[159,165447,165448],{"class":161,"line":233},[159,165449,165278],{"class":1135},[159,165451,165452,165454,165456,165458,165460,165462,165464,165466],{"class":161,"line":239},[159,165453,179],{"class":165},[159,165455,182],{"class":169},[159,165457,186],{"class":185},[159,165459,189],{"class":165},[159,165461,165291],{"class":192},[159,165463,165269],{"class":165},[159,165465,182],{"class":169},[159,165467,173],{"class":165},[159,165469,165470],{"class":161,"line":245},[159,165471,165302],{"class":1135},[159,165473,165474,165476,165478,165480,165482,165484,165486,165488],{"class":161,"line":251},[159,165475,179],{"class":165},[159,165477,182],{"class":169},[159,165479,186],{"class":185},[159,165481,189],{"class":165},[159,165483,165315],{"class":192},[159,165485,165269],{"class":165},[159,165487,182],{"class":169},[159,165489,173],{"class":165},[159,165491,165492],{"class":161,"line":261},[159,165493,165326],{"class":1135},[159,165495,165496,165498,165500,165502,165504,165506,165508,165510],{"class":161,"line":603},[159,165497,179],{"class":165},[159,165499,182],{"class":169},[159,165501,186],{"class":185},[159,165503,189],{"class":165},[159,165505,165339],{"class":192},[159,165507,165269],{"class":165},[159,165509,182],{"class":169},[159,165511,173],{"class":165},[159,165513,165514,165516,165518],{"class":161,"line":621},[159,165515,264],{"class":165},[159,165517,182],{"class":169},[159,165519,173],{"class":165},[14,165521,17539],{},[151,165523,165524],{"className":148599,"code":151956,"language":148601,"meta":25,"style":25},[49,165525,165526,165530,165544,165548],{"__ignoreMap":25},[159,165527,165528],{"class":161,"line":162},[159,165529,151963],{"class":1135},[159,165531,165532,165534,165536,165538,165540,165542],{"class":161,"line":176},[159,165533,166],{"class":165},[159,165535,182],{"class":169},[159,165537,186],{"class":185},[159,165539,189],{"class":165},[159,165541,151976],{"class":192},[159,165543,173],{"class":165},[159,165545,165546],{"class":161,"line":203},[159,165547,151983],{"class":165},[159,165549,165550,165552,165554],{"class":161,"line":223},[159,165551,264],{"class":165},[159,165553,182],{"class":169},[159,165555,173],{"class":165},[1468,165557,159253],{},{"title":25,"searchDepth":176,"depth":176,"links":165559},[165560,165561,165565,165566,165567],{"id":164704,"depth":176,"text":164705},{"id":164736,"depth":176,"text":164737,"children":165562},[165563,165564],{"id":164740,"depth":203,"text":164741},{"id":164757,"depth":203,"text":164758},{"id":164776,"depth":176,"text":164777},{"id":164783,"depth":176,"text":164784},{"id":164870,"depth":176,"text":164871,"children":165568},[165569,165570,165571,165572,165573],{"id":164877,"depth":203,"text":164878},{"id":165005,"depth":203,"text":165006},{"id":165099,"depth":203,"text":165100},{"id":165148,"depth":203,"text":165149},{"id":165158,"depth":203,"text":165159},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":164696,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":165580,"title":165581,"body":165582,"description":23809,"extension":23810,"meta":166809,"navigation":589,"path":166810,"seo":166811,"stem":166812,"__hash__":166813},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":165583,"toc":166787},[165584,165587,165591,165595,165598,165601,165605,165610,165613,165616,165619,165622,165625,165682,165685,165690,165693,165696,165700,165711,165715,165718,165721,165728,165733,165737,165740,165746,165749,165753,165756,165763,165766,165769,165776,165779,165786,165789,165792,165799,165802,165805,165807,165824,165828,165831,165834,165837,165841,165844,165847,165850,165853,165856,165859,165861,165864,165867,165929,165932,166042,166049,166055,166058,166061,166065,166068,166072,166077,166080,166087,166090,166096,166101,166104,166107,166110,166113,166116,166119,166122,166125,166181,166183,166209,166213,166216,166219,166222,166230,166233,166236,166240,166296,166299,166303,166309,166320,166323,166328,166331,166334,166340,166343,166346,166349,166352,166355,166358,166361,166364,166389,166395,166398,166401,166404,166407,166410,166413,166418,166421,166424,166427,166435,166438,166445,166448,166451,166453,166477,166479,166482,166485,166488,166491,166494,166497,166500,166534,166537,166540,166574,166581,166584,166587,166590,166593,166596,166599,166606,166609,166612,166615,166618,166625,166628,166631,166638,166641,166644,166648,166651,166654,166657,166660,166663,166666,166669,166672,166674,166698,166700,166724,166728,166739,166742,166745,166748,166751,166754,166757,166760,166763,166766,166769,166772,166775,166778,166781,166784],[10,165585,165581],{"id":165586},"_21-移动端布局实战下篇",[37,165588,165590],{"id":165589},"_211-rem适配布局","21.1 rem适配布局",[42,165592,165594],{"id":165593},"_2111-rem单位","21.1.1 rem单位",[23,165596],{"style":147708,"src":165597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,165599,165600],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[42,165602,165604],{"id":165603},"_2112-媒体查询","21.1.2 媒体查询",[134,165606,165607],{},[106,165608,165609],{},"参数介绍",[23,165611],{"style":147708,"src":165612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[23,165614],{"style":147708,"src":165615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[23,165617],{"style":147708,"src":165618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[23,165620],{"style":147708,"src":165621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[23,165623],{"style":147708,"src":165624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[151,165626,165628],{"className":147852,"code":165627,"language":147854,"meta":25,"style":25},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[49,165629,165630,165635,165654,165661,165674,165678],{"__ignoreMap":25},[159,165631,165632],{"class":161,"line":162},[159,165633,165634],{"class":1135},"\u002F* 媒体查询 *\u002F\n",[159,165636,165637,165640,165642,165645,165647,165650,165652],{"class":161,"line":176},[159,165638,165639],{"class":1142},"@media",[159,165641,11680],{"class":165},[159,165643,165644],{"class":1146},"max-width",[159,165646,1486],{"class":165},[159,165648,165649],{"class":1146},"768",[159,165651,1571],{"class":1142},[159,165653,1262],{"class":165},[159,165655,165656,165659],{"class":161,"line":203},[159,165657,165658],{"class":185},"  .container",[159,165660,1478],{"class":165},[159,165662,165663,165666,165668,165670,165672],{"class":161,"line":223},[159,165664,165665],{"class":1146},"    width",[159,165667,1486],{"class":165},[159,165669,1596],{"class":1146},[159,165671,1662],{"class":1142},[159,165673,1492],{"class":165},[159,165675,165676],{"class":161,"line":233},[159,165677,148648],{"class":165},[159,165679,165680],{"class":161,"line":239},[159,165681,15685],{"class":165},[14,165683,165684],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[134,165686,165687],{"start":176},[106,165688,165689],{},"引入资源",[23,165691],{"style":147708,"src":165692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,165694,165695],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[42,165697,165699],{"id":165698},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[103,165701,165702,165705,165708],{},[106,165703,165704],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[106,165706,165707],{},"媒体查询可以根据不同设备宽度来修改样式",[106,165709,165710],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[37,165712,165714],{"id":165713},"_212-less基础","21.2 Less基础",[14,165716,165717],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,165719,165720],{},"Less可以解决该问题，它是css的扩展语言",[14,165722,165723,165724],{},"Less中文网址： ",[8085,165725,165726],{"href":165726,"rel":165727},"http:\u002F\u002Flesscss.cn\u002F",[15923],[14,165729,165730],{},[61,165731,165732],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[42,165734,165736],{"id":165735},"_2121-less安装","21.2.1 less安装",[14,165738,165739],{},"如果使用vscode，则无需进行下方安装步骤",[14,165741,165742],{},[8085,165743,165744],{"href":165744,"rel":165745},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[15923],[23,165747],{"style":147708,"src":165748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[42,165750,165752],{"id":165751},"_2122-less使用","21.2.2 less使用",[14,165754,165755],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[134,165757,165758],{},[106,165759,165760],{},[61,165761,165762],{},"Less 变量",[23,165764],{"style":147708,"src":165765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[23,165767],{"style":147708,"src":165768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[134,165770,165771],{"start":176},[106,165772,165773],{},[61,165774,165775],{},"Less 编译",[23,165777],{"style":147708,"src":165778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[134,165780,165781],{"start":203},[106,165782,165783],{},[61,165784,165785],{},"Less 嵌套",[23,165787],{"style":147708,"src":165788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[23,165790],{"style":147708,"src":165791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[134,165793,165794],{"start":223},[106,165795,165796],{},[61,165797,165798],{},"Less 运算",[23,165800],{"style":147708,"src":165801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,165803,165804],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,165806,23910],{},[103,165808,165809,165812,165815,165818,165821],{},[106,165810,165811],{},"乘号（*）和除号（\u002F）的写法",[106,165813,165814],{},"运算符中间左右有个空格隔开 1px + 5",[106,165816,165817],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[106,165819,165820],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[106,165822,165823],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[37,165825,165827],{"id":165826},"_213-rem-适配方案","21.3 rem 适配方案",[14,165829,165830],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,165832,165833],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[23,165835],{"style":147708,"src":165836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[42,165838,165840],{"id":165839},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,165842,165843],{},"rem + 媒体查询 + less 技术",[23,165845],{"style":147708,"src":165846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,165848,165849],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,165851,165852],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[23,165854],{"style":147708,"src":165855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,165857,165858],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,165860,38199],{},[23,165862],{"style":147708,"src":165863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,165865,165866],{},"index.html:",[151,165868,165870],{"className":147852,"code":165869,"language":147854,"meta":25,"style":25},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[49,165871,165872,165877,165883,165899,165903,165909,165925],{"__ignoreMap":25},[159,165873,165874],{"class":161,"line":162},[159,165875,165876],{"class":1135},"\u002F* rem 适配方案 *\u002F\n",[159,165878,165879,165881],{"class":161,"line":176},[159,165880,522],{"class":169},[159,165882,1478],{"class":165},[159,165884,165885,165887,165889,165892,165894,165896],{"class":161,"line":203},[159,165886,17713],{"class":1146},[159,165888,1486],{"class":165},[159,165890,165891],{"class":1146},"62.5",[159,165893,1662],{"class":1142},[159,165895,151715],{"class":165},[159,165897,165898],{"class":1135},"\u002F* 1rem = 10px *\u002F\n",[159,165900,165901],{"class":161,"line":223},[159,165902,15685],{"class":165},[159,165904,165905,165907],{"class":161,"line":233},[159,165906,151700],{"class":185},[159,165908,1478],{"class":165},[159,165910,165911,165913,165915,165917,165920,165922],{"class":161,"line":239},[159,165912,17655],{"class":1146},[159,165914,1486],{"class":165},[159,165916,1964],{"class":1146},[159,165918,165919],{"class":1142},"rem",[159,165921,151715],{"class":165},[159,165923,165924],{"class":1135},"\u002F* 100px *\u002F\n",[159,165926,165927],{"class":161,"line":245},[159,165928,15685],{"class":165},[14,165930,165931],{},"common.less",[151,165933,165935],{"className":147852,"code":165934,"language":147854,"meta":25,"style":25},"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",[49,165936,165937,165943,165958,165962,165968,165982,165986,165990,165994,166000,166014,166018,166024,166038],{"__ignoreMap":25},[159,165938,165939,165941],{"class":161,"line":162},[159,165940,522],{"class":169},[159,165942,1478],{"class":165},[159,165944,165945,165947,165949,165951,165953,165955],{"class":161,"line":176},[159,165946,17713],{"class":1146},[159,165948,1486],{"class":165},[159,165950,165891],{"class":1146},[159,165952,1662],{"class":1142},[159,165954,49590],{"class":165},[159,165956,165957],{"class":1135},"\u002F* 10px *\u002F\n",[159,165959,165960],{"class":161,"line":203},[159,165961,15685],{"class":165},[159,165963,165964,165966],{"class":161,"line":223},[159,165965,182],{"class":169},[159,165967,1478],{"class":165},[159,165969,165970,165972,165974,165976,165978,165980],{"class":161,"line":233},[159,165971,17655],{"class":1146},[159,165973,1486],{"class":165},[159,165975,1964],{"class":1146},[159,165977,165919],{"class":1142},[159,165979,49590],{"class":165},[159,165981,165924],{"class":1135},[159,165983,165984],{"class":161,"line":239},[159,165985,15685],{"class":165},[159,165987,165988],{"class":161,"line":245},[159,165989,157313],{"class":165},[159,165991,165992],{"class":161,"line":251},[159,165993,165876],{"class":1135},[159,165995,165996,165998],{"class":161,"line":261},[159,165997,522],{"class":169},[159,165999,1478],{"class":165},[159,166001,166002,166004,166006,166008,166010,166012],{"class":161,"line":603},[159,166003,17713],{"class":1146},[159,166005,1486],{"class":165},[159,166007,165891],{"class":1146},[159,166009,1662],{"class":1142},[159,166011,151715],{"class":165},[159,166013,165898],{"class":1135},[159,166015,166016],{"class":161,"line":621},[159,166017,15685],{"class":165},[159,166019,166020,166022],{"class":161,"line":634},[159,166021,151700],{"class":185},[159,166023,1478],{"class":165},[159,166025,166026,166028,166030,166032,166034,166036],{"class":161,"line":640},[159,166027,17655],{"class":1146},[159,166029,1486],{"class":165},[159,166031,1964],{"class":1146},[159,166033,165919],{"class":1142},[159,166035,151715],{"class":165},[159,166037,165924],{"class":1135},[159,166039,166040],{"class":161,"line":1075},[159,166041,15685],{"class":165},[14,166043,166044,166045,166048],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[47079,166046,166047],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[151,166050,166053],{"className":166051,"code":166052,"language":8507},[28803],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[49,166054,166052],{"__ignoreMap":25},[14,166056,166057],{},"less保存时会自动变成.css文件",[14,166059,166060],{},"好好搞懂上述代码写法",[42,166062,166064],{"id":166063},"_2132-样式导入样式","21.3.2 样式导入样式",[23,166066],{"style":147708,"src":166067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[42,166069,166071],{"id":166070},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[134,166073,166074],{},[106,166075,166076],{},"准备工作",[23,166078],{"style":147708,"src":166079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,166081,166082,166083],{},"github地址：",[8085,166084,166085],{"href":166085,"rel":166086},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[15923],[14,166088,166089],{},"下载之后，将index.js文件拖到项目中就可以了",[14,166091,166092,166093],{},"js文件引入到index.html中使用的是",[49,166094,166095],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[134,166097,166098],{"start":176},[106,166099,166100],{},"vscode插件",[23,166102],{"style":147708,"src":166103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,166105,166106],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,166108,166109],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[23,166111],{"style":147708,"src":166112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,166114,166115],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[23,166117],{"style":147708,"src":166118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,166120,166121],{},"修改成75就可以，alt+z为快捷键",[14,166123,166124],{},"index.css：",[151,166126,166127],{"className":147852,"code":165869,"language":147854,"meta":25,"style":25},[49,166128,166129,166133,166139,166153,166157,166163,166177],{"__ignoreMap":25},[159,166130,166131],{"class":161,"line":162},[159,166132,165876],{"class":1135},[159,166134,166135,166137],{"class":161,"line":176},[159,166136,522],{"class":169},[159,166138,1478],{"class":165},[159,166140,166141,166143,166145,166147,166149,166151],{"class":161,"line":203},[159,166142,17713],{"class":1146},[159,166144,1486],{"class":165},[159,166146,165891],{"class":1146},[159,166148,1662],{"class":1142},[159,166150,151715],{"class":165},[159,166152,165898],{"class":1135},[159,166154,166155],{"class":161,"line":223},[159,166156,15685],{"class":165},[159,166158,166159,166161],{"class":161,"line":233},[159,166160,151700],{"class":185},[159,166162,1478],{"class":165},[159,166164,166165,166167,166169,166171,166173,166175],{"class":161,"line":239},[159,166166,17655],{"class":1146},[159,166168,1486],{"class":165},[159,166170,1964],{"class":1146},[159,166172,165919],{"class":1142},[159,166174,151715],{"class":165},[159,166176,165924],{"class":1135},[159,166178,166179],{"class":161,"line":245},[159,166180,15685],{"class":165},[14,166182,165866],{},[151,166184,166185],{"className":147852,"code":148256,"language":147854,"meta":25,"style":25},[49,166186,166187,166193,166205],{"__ignoreMap":25},[159,166188,166189,166191],{"class":161,"line":162},[159,166190,170],{"class":169},[159,166192,1478],{"class":165},[159,166194,166195,166197,166199,166201,166203],{"class":161,"line":176},[159,166196,17713],{"class":1146},[159,166198,1486],{"class":165},[159,166200,24439],{"class":1146},[159,166202,1571],{"class":1142},[159,166204,1492],{"class":165},[159,166206,166207],{"class":161,"line":203},[159,166208,15685],{"class":165},[37,166210,166212],{"id":166211},"_214-响应式开发","21.4 响应式开发",[14,166214,166215],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[23,166217],{"style":147708,"src":166218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,166220,166221],{},"做法：",[103,166223,166224,166227],{},[106,166225,166226],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[106,166228,166229],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[23,166231],{"style":147708,"src":166232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,166234,166235],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[42,166237,166239],{"id":166238},"_2141-简单代码示范","21.4.1 简单代码示范",[151,166241,166242],{"className":147852,"code":165869,"language":147854,"meta":25,"style":25},[49,166243,166244,166248,166254,166268,166272,166278,166292],{"__ignoreMap":25},[159,166245,166246],{"class":161,"line":162},[159,166247,165876],{"class":1135},[159,166249,166250,166252],{"class":161,"line":176},[159,166251,522],{"class":169},[159,166253,1478],{"class":165},[159,166255,166256,166258,166260,166262,166264,166266],{"class":161,"line":203},[159,166257,17713],{"class":1146},[159,166259,1486],{"class":165},[159,166261,165891],{"class":1146},[159,166263,1662],{"class":1142},[159,166265,151715],{"class":165},[159,166267,165898],{"class":1135},[159,166269,166270],{"class":161,"line":223},[159,166271,15685],{"class":165},[159,166273,166274,166276],{"class":161,"line":233},[159,166275,151700],{"class":185},[159,166277,1478],{"class":165},[159,166279,166280,166282,166284,166286,166288,166290],{"class":161,"line":239},[159,166281,17655],{"class":1146},[159,166283,1486],{"class":165},[159,166285,1964],{"class":1146},[159,166287,165919],{"class":1142},[159,166289,151715],{"class":165},[159,166291,165924],{"class":1135},[159,166293,166294],{"class":161,"line":245},[159,166295,15685],{"class":165},[14,166297,166298],{},"父盒子一般命名为container",[42,166300,166302],{"id":166301},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,166304,166305,166306],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[61,166307,166308],{},"使得 Web 开发更加快捷",[103,166310,166311],{},[106,166312,166313,166314],{},"官网：",[61,166315,166316],{},[8085,166317,166318],{"href":166318,"rel":166319},"http:\u002F\u002Fgetbootstrap.com\u002F",[15923],[14,166321,166322],{},"可以直接去官网拿现成的东西",[134,166324,166325],{},[106,166326,166327],{},"Bootstrap的使用",[14,166329,166330],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,166332,166333],{},"Bootstrap 使用四步曲：",[14,166335,166336,166339],{},[61,166337,166338],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[23,166341],{"style":147708,"src":166342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,166344,166345],{},"打开Bootstrap官网，然后下载",[23,166347],{"style":147708,"src":166348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[23,166350],{"style":147708,"src":166351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,166353,166354],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,166356,166357],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,166359,166360],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[23,166362],{"style":147708,"src":166363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[151,166365,166367],{"className":147852,"code":166366,"language":147854,"meta":25,"style":25},".center {\n  color: red;\n}\n",[49,166368,166369,166375,166385],{"__ignoreMap":25},[159,166370,166371,166373],{"class":161,"line":162},[159,166372,148143],{"class":185},[159,166374,1478],{"class":165},[159,166376,166377,166379,166381,166383],{"class":161,"line":176},[159,166378,17992],{"class":1146},[159,166380,1486],{"class":165},[159,166382,4327],{"class":1146},[159,166384,1492],{"class":165},[159,166386,166387],{"class":161,"line":203},[159,166388,15685],{"class":165},[14,166390,166391,166394],{},[49,166392,166393],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[23,166396],{"style":147708,"src":166397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[23,166399],{"style":147708,"src":166400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[23,166402],{"style":147708,"src":166403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,166405,166406],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[23,166408],{"style":147708,"src":166409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,166411,166412],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[134,166414,166415],{"start":176},[106,166416,166417],{},"布局容器",[23,166419],{"style":147708,"src":166420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,166422,166423],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,166425,166426],{},"container-fluid用于移动式布局比较方便",[134,166428,166429],{"start":203},[106,166430,166431,166432],{},"bootstrap ",[61,166433,166434],{},"栅格系统原理",[23,166436],{"style":147708,"src":166437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[134,166439,166440],{"start":223},[106,166441,166442],{},[61,166443,166444],{},"栅格选项参数",[23,166446],{"style":147708,"src":166447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,166449,166450],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,166452,38199],{},[151,166454,166455],{"className":147852,"code":166366,"language":147854,"meta":25,"style":25},[49,166456,166457,166463,166473],{"__ignoreMap":25},[159,166458,166459,166461],{"class":161,"line":162},[159,166460,148143],{"class":185},[159,166462,1478],{"class":165},[159,166464,166465,166467,166469,166471],{"class":161,"line":176},[159,166466,17992],{"class":1146},[159,166468,1486],{"class":165},[159,166470,4327],{"class":1146},[159,166472,1492],{"class":165},[159,166474,166475],{"class":161,"line":203},[159,166476,15685],{"class":165},[14,166478,156895],{},[23,166480],{"style":147708,"src":166481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,166483,166484],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,166486,166487],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,166489,166490],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,166492,166493],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,166495,166496],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,166498,166499],{},"汇总展示说明：",[151,166501,166502],{"className":148599,"code":151956,"language":148601,"meta":25,"style":25},[49,166503,166504,166508,166522,166526],{"__ignoreMap":25},[159,166505,166506],{"class":161,"line":162},[159,166507,151963],{"class":1135},[159,166509,166510,166512,166514,166516,166518,166520],{"class":161,"line":176},[159,166511,166],{"class":165},[159,166513,182],{"class":169},[159,166515,186],{"class":185},[159,166517,189],{"class":165},[159,166519,151976],{"class":192},[159,166521,173],{"class":165},[159,166523,166524],{"class":161,"line":203},[159,166525,151983],{"class":165},[159,166527,166528,166530,166532],{"class":161,"line":223},[159,166529,264],{"class":165},[159,166531,182],{"class":169},[159,166533,173],{"class":165},[23,166535],{"style":147708,"src":166536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,166538,166539],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[151,166541,166542],{"className":148599,"code":151956,"language":148601,"meta":25,"style":25},[49,166543,166544,166548,166562,166566],{"__ignoreMap":25},[159,166545,166546],{"class":161,"line":162},[159,166547,151963],{"class":1135},[159,166549,166550,166552,166554,166556,166558,166560],{"class":161,"line":176},[159,166551,166],{"class":165},[159,166553,182],{"class":169},[159,166555,186],{"class":185},[159,166557,189],{"class":165},[159,166559,151976],{"class":192},[159,166561,173],{"class":165},[159,166563,166564],{"class":161,"line":203},[159,166565,151983],{"class":165},[159,166567,166568,166570,166572],{"class":161,"line":223},[159,166569,264],{"class":165},[159,166571,182],{"class":169},[159,166573,173],{"class":165},[134,166575,166576],{"start":233},[106,166577,166578],{},[61,166579,166580],{},"列嵌套",[23,166582],{"style":147708,"src":166583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,166585,166586],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,166588,166589],{},"没加row内部这样：",[23,166591],{"style":147708,"src":166592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,166594,166595],{},"加上row之后内部为：",[23,166597],{"style":147708,"src":166598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[134,166600,166601],{"start":239},[106,166602,166603],{},[61,166604,166605],{},"列偏移",[23,166607],{"style":147708,"src":166608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,166610,166611],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,166613,166614],{},"要加偏移量，即偏移份数",[14,166616,166617],{},"偏移的份数=12-两个盒子的份数",[134,166619,166620],{"start":245},[106,166621,166622],{},[61,166623,166624],{},"列排序",[23,166626],{"style":147708,"src":166627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,166629,166630],{},"pull拉左；push推右",[134,166632,166633],{"start":251},[106,166634,166635],{},[61,166636,166637],{},"响应式工具",[23,166639],{"style":147708,"src":166640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,166642,166643],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[42,166645,166647],{"id":166646},"_2143-响应式小项目","21.4.3 响应式小项目",[14,166649,166650],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,166652,166653],{},"ul {",[14,166655,166656],{},"list-style: none;",[14,166658,166659],{},"margin:0;",[14,166661,166662],{},"padding:0; }",[23,166664],{"style":147708,"src":166665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[23,166667],{"style":147708,"src":166668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,166670,166671],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,166673,15962],{},[151,166675,166676],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,166677,166678,166684,166694],{"__ignoreMap":25},[159,166679,166680,166682],{"class":161,"line":162},[159,166681,151700],{"class":185},[159,166683,1478],{"class":165},[159,166685,166686,166688,166690,166692],{"class":161,"line":176},[159,166687,152332],{"class":1146},[159,166689,1486],{"class":165},[159,166691,19854],{"class":1146},[159,166693,1492],{"class":165},[159,166695,166696],{"class":161,"line":203},[159,166697,15685],{"class":165},[14,166699,17539],{},[151,166701,166702],{"className":147852,"code":160522,"language":147854,"meta":25,"style":25},[49,166703,166704,166710,166720],{"__ignoreMap":25},[159,166705,166706,166708],{"class":161,"line":162},[159,166707,151700],{"class":185},[159,166709,1478],{"class":165},[159,166711,166712,166714,166716,166718],{"class":161,"line":176},[159,166713,152332],{"class":1146},[159,166715,1486],{"class":165},[159,166717,19854],{"class":1146},[159,166719,1492],{"class":165},[159,166721,166722],{"class":161,"line":203},[159,166723,15685],{"class":165},[37,166725,166727],{"id":166726},"_215-swiper-插件使用","21.5 swiper 插件使用",[103,166729,166730,166733,166736],{},[106,166731,166732],{},"下载需要的css和js文件html页面中 引入相关文件",[106,166734,166735],{},"官网找到类似案例，复制html结构，css样式 js 语法",[106,166737,166738],{},"根据需求定制修改模块",[23,166740],{"style":147708,"src":166741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,166743,166744],{},"解压后将这两部分放到项目中",[23,166746],{"style":147708,"src":166747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,166749,166750],{},"这个插件可以帮助我们实现轮播图效果",[14,166752,166753],{},"用法：",[23,166755],{"style":147708,"src":166756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,166758,166759],{},"找到自己喜欢的",[23,166761],{"style":147708,"src":166762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,166764,166765],{},"右键，查看网页源代码",[23,166767],{"style":147708,"src":166768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,166770,166771],{},"复制人家的结构内容",[14,166773,166774],{},"然后去看API文档：",[23,166776],{"style":147708,"src":166777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,166779,166780],{},"可以看看如何修改样式",[14,166782,166783],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1468,166785,166786],{},"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":25,"searchDepth":176,"depth":176,"links":166788},[166789,166794,166798,166803,166808],{"id":165589,"depth":176,"text":165590,"children":166790},[166791,166792,166793],{"id":165593,"depth":203,"text":165594},{"id":165603,"depth":203,"text":165604},{"id":165698,"depth":203,"text":165699},{"id":165713,"depth":176,"text":165714,"children":166795},[166796,166797],{"id":165735,"depth":203,"text":165736},{"id":165751,"depth":203,"text":165752},{"id":165826,"depth":176,"text":165827,"children":166799},[166800,166801,166802],{"id":165839,"depth":203,"text":165840},{"id":166063,"depth":203,"text":166064},{"id":166070,"depth":203,"text":166071},{"id":166211,"depth":176,"text":166212,"children":166804},[166805,166806,166807],{"id":166238,"depth":203,"text":166239},{"id":166301,"depth":203,"text":166302},{"id":166646,"depth":203,"text":166647},{"id":166726,"depth":176,"text":166727},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":165581,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":166815,"title":166816,"body":166817,"description":23809,"extension":23810,"meta":167037,"navigation":589,"path":167038,"seo":167039,"stem":167040,"__hash__":167041},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":166818,"toc":167033},[166819,166822,166826,166829,166844,166849,166852,166857,166892,166897,166909,166914,166927,166932,166949,166954,166974,166979,166997,167000,167003,167006,167009,167013,167016,167019,167022,167025,167028,167031],[10,166820,166816],{"id":166821},"_22-代码提交与新型相对单位",[37,166823,166825],{"id":166824},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,166827,166828],{},"法1：",[134,166830,166831,166838,166841],{},[106,166832,166833,166834],{},"登录网站注册：",[8085,166835,166836],{"href":166836,"rel":166837},"https:\u002F\u002Fgitee.com\u002F",[15923],[106,166839,166840],{},"码云创建新的仓库",[106,166842,166843],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[103,166845,166846],{},[106,166847,166848],{},"在网站根目录右键-- Git Bash Here",[23,166850],{"style":147708,"src":166851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[103,166853,166854],{},[106,166855,166856],{},"如果是第一次利用git提交，请配置好全局选项",[151,166858,166860],{"className":138596,"code":166859,"language":138598,"meta":25,"style":25},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[49,166861,166862,166878],{"__ignoreMap":25},[159,166863,166864,166867,166869,166872,166875],{"class":161,"line":162},[159,166865,166866],{"class":185},"git",[159,166868,141019],{"class":192},[159,166870,166871],{"class":1146}," --global",[159,166873,166874],{"class":192}," user.name",[159,166876,166877],{"class":192}," \"你的名字\"\n",[159,166879,166880,166882,166884,166886,166889],{"class":161,"line":176},[159,166881,166866],{"class":185},[159,166883,141019],{"class":192},[159,166885,166871],{"class":1146},[159,166887,166888],{"class":192}," user.email",[159,166890,166891],{"class":192}," \"你的邮箱\"\n",[103,166893,166894],{},[106,166895,166896],{},"初始化仓库",[151,166898,166900],{"className":138596,"code":166899,"language":138598,"meta":25,"style":25},"git init\n",[49,166901,166902],{"__ignoreMap":25},[159,166903,166904,166906],{"class":161,"line":162},[159,166905,166866],{"class":185},[159,166907,166908],{"class":192}," init\n",[103,166910,166911],{},[106,166912,166913],{},"把本地文件放到暂存区",[151,166915,166917],{"className":138596,"code":166916,"language":138598,"meta":25,"style":25},"git add .\n",[49,166918,166919],{"__ignoreMap":25},[159,166920,166921,166923,166925],{"class":161,"line":162},[159,166922,166866],{"class":185},[159,166924,28826],{"class":192},[159,166926,52263],{"class":192},[103,166928,166929],{},[106,166930,166931],{},"把本地文件放到本地仓库里面",[151,166933,166935],{"className":138596,"code":166934,"language":138598,"meta":25,"style":25},"git commit -m \"first commit\"\n",[49,166936,166937],{"__ignoreMap":25},[159,166938,166939,166941,166944,166946],{"class":161,"line":162},[159,166940,166866],{"class":185},[159,166942,166943],{"class":192}," commit",[159,166945,122182],{"class":1146},[159,166947,166948],{"class":192}," \"first commit\"\n",[103,166950,166951],{},[106,166952,166953],{},"链接远程仓库",[151,166955,166957],{"className":138596,"code":166956,"language":138598,"meta":25,"style":25},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[49,166958,166959],{"__ignoreMap":25},[159,166960,166961,166963,166966,166968,166971],{"class":161,"line":162},[159,166962,166866],{"class":185},[159,166964,166965],{"class":192}," remote",[159,166967,28826],{"class":192},[159,166969,166970],{"class":192}," origin",[159,166972,166973],{"class":192}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[103,166975,166976],{},[106,166977,166978],{},"把本地仓库的文件推送到远程仓库 push",[151,166980,166982],{"className":138596,"code":166981,"language":138598,"meta":25,"style":25},"git push -u origin master\n",[49,166983,166984],{"__ignoreMap":25},[159,166985,166986,166988,166990,166992,166994],{"class":161,"line":162},[159,166987,166866],{"class":185},[159,166989,52538],{"class":192},[159,166991,51812],{"class":1146},[159,166993,166970],{"class":192},[159,166995,166996],{"class":192}," master\n",[23,166998],{"style":147708,"src":166999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,167001,167002],{},"上方方法暂未实现，后边学完git后在整",[14,167004,167005],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[23,167007],{"style":147708,"src":167008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[37,167010,167012],{"id":167011},"_222-新型相对单位","22.2 新型相对单位",[23,167014],{"style":147708,"src":167015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[23,167017],{"style":147708,"src":167018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,167020,167021],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,167023,167024],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[23,167026],{"style":147708,"src":167027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,167029,167030],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1468,167032,47482],{},{"title":25,"searchDepth":176,"depth":176,"links":167034},[167035,167036],{"id":166824,"depth":176,"text":166825},{"id":167011,"depth":176,"text":167012},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":166816,"description":23809},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":167043,"title":167044,"body":167045,"description":167049,"extension":23810,"meta":167050,"navigation":589,"path":167051,"seo":167052,"stem":167053,"__hash__":167054},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":167046,"toc":167047},[],{"title":25,"searchDepth":176,"depth":176,"links":167048},[],"自己正经开始学编程的第一门语言！",{"category":114139},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":167044,"description":167049},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":167056,"title":167057,"body":167058,"description":23809,"extension":23810,"meta":168205,"navigation":589,"path":168206,"seo":168207,"stem":168208,"__hash__":168209},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":167059,"toc":168181},[167060,167063,167067,167070,167073,167098,167101,167107,167111,167114,167141,167144,167184,167187,167199,167202,167208,167212,167216,167243,167260,167267,167271,167274,167300,167303,167307,167310,167350,167353,167370,167376,167380,167385,167429,167432,167450,167453,167521,167525,167532,167535,167550,167553,167562,167565,167576,167579,167588,167591,167608,167611,167626,167630,167634,167637,167639,167659,167663,167666,167669,167680,167683,167689,167693,167699,167726,167729,167741,167744,167755,167758,167764,167768,167774,167824,167827,167869,167872,167905,167908,167942,167946,167949,167969,167972,168008,168011,168024,168028,168032,168038,168041,168054,168058,168061,168067,168070,168074,168077,168080,168129,168133,168149,168155,168162,168168,168178],[10,167061,167057],{"id":167062},"_1-python环境与第一个程序",[37,167064,167066],{"id":167065},"_11-什么是python","1.1 什么是Python",[14,167068,167069],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,167071,167072],{},"理解 Python 时抓住三个关键词：",[134,167074,167075,167078,167081],{},[106,167076,167077],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[106,167079,167080],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[106,167082,167083,167084,24079,167087,24079,167090,24079,167093,24079,167095,51907],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[49,167085,167086],{},"os",[49,167088,167089],{},"sys",[49,167091,167092],{},"json",[49,167094,4771],{},[49,167096,167097],{},"datetime",[14,167099,167100],{},"Python 程序的运行链路：",[151,167102,167105],{"className":167103,"code":167104,"language":8507,"meta":25},[28803],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[49,167106,167104],{"__ignoreMap":25},[37,167108,167110],{"id":167109},"_12-python解释器","1.2 Python解释器",[14,167112,167113],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[151,167115,167117],{"className":47347,"code":167116,"language":47349,"meta":25,"style":25},"python --version\npython3 --version\npython\npython3\n",[49,167118,167119,167125,167131,167136],{"__ignoreMap":25},[159,167120,167121,167123],{"class":161,"line":162},[159,167122,53902],{"class":185},[159,167124,49816],{"class":1146},[159,167126,167127,167129],{"class":161,"line":176},[159,167128,122179],{"class":185},[159,167130,49816],{"class":1146},[159,167132,167133],{"class":161,"line":203},[159,167134,167135],{"class":185},"python\n",[159,167137,167138],{"class":161,"line":223},[159,167139,167140],{"class":185},"python3\n",[14,167142,167143],{},"进入交互模式后，可以直接输入表达式：",[151,167145,167147],{"className":53900,"code":167146,"language":53902,"meta":25,"style":25},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[49,167148,167149,167160,167165,167179],{"__ignoreMap":25},[159,167150,167151,167154,167156,167158],{"class":161,"line":162},[159,167152,167153],{"class":1142},">>>",[159,167155,2707],{"class":1146},[159,167157,3925],{"class":1142},[159,167159,71116],{"class":1146},[159,167161,167162],{"class":161,"line":176},[159,167163,167164],{"class":1146},"3\n",[159,167166,167167,167169,167172,167174,167177],{"class":161,"line":203},[159,167168,167153],{"class":1142},[159,167170,167171],{"class":1146}," print",[159,167173,1159],{"class":165},[159,167175,167176],{"class":192},"\"hello python\"",[159,167178,1165],{"class":165},[159,167180,167181],{"class":161,"line":223},[159,167182,167183],{"class":165},"hello python\n",[14,167185,167186],{},"退出交互模式：",[151,167188,167190],{"className":53900,"code":167189,"language":53902,"meta":25,"style":25},"exit()\n",[49,167191,167192],{"__ignoreMap":25},[159,167193,167194,167197],{"class":161,"line":162},[159,167195,167196],{"class":1146},"exit",[159,167198,5158],{"class":165},[14,167200,167201],{},"或使用快捷键：",[151,167203,167206],{"className":167204,"code":167205,"language":8507,"meta":25},[28803],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[49,167207,167205],{"__ignoreMap":25},[37,167209,167211],{"id":167210},"_13-安装python","1.3 安装Python",[42,167213,167215],{"id":167214},"_131-windows安装","1.3.1 Windows安装",[134,167217,167218,167225,167228,167234,167240],{},[106,167219,167220,167221],{},"打开 Python 官网：",[8085,167222,167223],{"href":167223,"rel":167224},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[15923],[106,167226,167227],{},"下载 Windows Installer。",[106,167229,167230,167231,51907],{},"安装时勾选 ",[49,167232,167233],{},"Add Python to PATH",[106,167235,167236,167237,51907],{},"点击 ",[49,167238,167239],{},"Install Now",[106,167241,167242],{},"安装完成后打开命令提示符验证：",[151,167244,167246],{"className":47347,"code":167245,"language":47349,"meta":25,"style":25},"python --version\npip --version\n",[49,167247,167248,167254],{"__ignoreMap":25},[159,167249,167250,167252],{"class":161,"line":162},[159,167251,53902],{"class":185},[159,167253,49816],{"class":1146},[159,167255,167256,167258],{"class":161,"line":176},[159,167257,47356],{"class":185},[159,167259,49816],{"class":1146},[14,167261,167262,167263,167266],{},"如果提示 ",[49,167264,167265],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[42,167268,167270],{"id":167269},"_132-macos安装","1.3.2 macOS安装",[14,167272,167273],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[151,167275,167277],{"className":47347,"code":167276,"language":47349,"meta":25,"style":25},"brew install python\npython3 --version\npip3 --version\n",[49,167278,167279,167288,167294],{"__ignoreMap":25},[159,167280,167281,167284,167286],{"class":161,"line":162},[159,167282,167283],{"class":185},"brew",[159,167285,47359],{"class":192},[159,167287,145618],{"class":192},[159,167289,167290,167292],{"class":161,"line":176},[159,167291,122179],{"class":185},[159,167293,49816],{"class":1146},[159,167295,167296,167298],{"class":161,"line":203},[159,167297,141000],{"class":185},[159,167299,49816],{"class":1146},[14,167301,167302],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[42,167304,167306],{"id":167305},"_133-linux安装","1.3.3 Linux安装",[14,167308,167309],{},"Ubuntu\u002FDebian：",[151,167311,167313],{"className":47347,"code":167312,"language":47349,"meta":25,"style":25},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[49,167314,167315,167323,167338,167344],{"__ignoreMap":25},[159,167316,167317,167319,167321],{"class":161,"line":162},[159,167318,48101],{"class":185},[159,167320,138617],{"class":192},[159,167322,49765],{"class":192},[159,167324,167325,167327,167329,167331,167333,167335],{"class":161,"line":176},[159,167326,48101],{"class":185},[159,167328,138617],{"class":192},[159,167330,47359],{"class":192},[159,167332,125703],{"class":192},[159,167334,122098],{"class":192},[159,167336,167337],{"class":192}," python3-venv\n",[159,167339,167340,167342],{"class":161,"line":203},[159,167341,122179],{"class":185},[159,167343,49816],{"class":1146},[159,167345,167346,167348],{"class":161,"line":223},[159,167347,141000],{"class":185},[159,167349,49816],{"class":1146},[14,167351,167352],{},"Fedora：",[151,167354,167356],{"className":47347,"code":167355,"language":47349,"meta":25,"style":25},"sudo dnf install python3 python3-pip\n",[49,167357,167358],{"__ignoreMap":25},[159,167359,167360,167362,167364,167366,167368],{"class":161,"line":162},[159,167361,48101],{"class":185},[159,167363,49838],{"class":192},[159,167365,47359],{"class":192},[159,167367,125703],{"class":192},[159,167369,141065],{"class":192},[14,167371,167372,167373,167375],{},"Linux 上通常使用 ",[49,167374,122179],{}," 命令，避免和系统旧版本 Python 冲突。",[37,167377,167379],{"id":167378},"_14-pip包管理器","1.4 pip包管理器",[14,167381,167382,167384],{},[49,167383,47356],{}," 用来安装第三方库。",[151,167386,167388],{"className":47347,"code":167387,"language":47349,"meta":25,"style":25},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[49,167389,167390,167399,167408,167416,167422],{"__ignoreMap":25},[159,167391,167392,167394,167396],{"class":161,"line":162},[159,167393,47356],{"class":185},[159,167395,47359],{"class":192},[159,167397,167398],{"class":192}," requests\n",[159,167400,167401,167403,167406],{"class":161,"line":176},[159,167402,47356],{"class":185},[159,167404,167405],{"class":192}," uninstall",[159,167407,167398],{"class":192},[159,167409,167410,167412,167414],{"class":161,"line":203},[159,167411,47356],{"class":185},[159,167413,138874],{"class":192},[159,167415,167398],{"class":192},[159,167417,167418,167420],{"class":161,"line":223},[159,167419,47356],{"class":185},[159,167421,140255],{"class":192},[159,167423,167424,167426],{"class":161,"line":233},[159,167425,47356],{"class":185},[159,167427,167428],{"class":192}," freeze\n",[14,167430,167431],{},"国内网络较慢时可以临时使用镜像：",[151,167433,167435],{"className":47347,"code":167434,"language":47349,"meta":25,"style":25},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[49,167436,167437],{"__ignoreMap":25},[159,167438,167439,167441,167443,167446,167448],{"class":161,"line":162},[159,167440,47356],{"class":185},[159,167442,47359],{"class":192},[159,167444,167445],{"class":192}," requests",[159,167447,49953],{"class":1146},[159,167449,141028],{"class":192},[14,167451,167452],{},"常见第三方库：",[12347,167454,167455,167464],{},[16500,167456,167457],{},[12356,167458,167459,167462],{},[12365,167460,167461],{},"库",[12365,167463,123996],{},[16624,167465,167466,167474,167481,167489,167497,167505,167513],{},[12356,167467,167468,167471],{},[12488,167469,167470],{},"requests",[12488,167472,167473],{},"网络请求",[12356,167475,167476,167478],{},[12488,167477,121926],{},[12488,167479,167480],{},"数值计算",[12356,167482,167483,167486],{},[12488,167484,167485],{},"pandas",[12488,167487,167488],{},"表格数据处理",[12356,167490,167491,167494],{},[12488,167492,167493],{},"matplotlib",[12488,167495,167496],{},"绘图",[12356,167498,167499,167502],{},[12488,167500,167501],{},"pyecharts",[12488,167503,167504],{},"ECharts 图表",[12356,167506,167507,167510],{},[12488,167508,167509],{},"flask",[12488,167511,167512],{},"Web 后端",[12356,167514,167515,167518],{},[12488,167516,167517],{},"pytest",[12488,167519,167520],{},"自动化测试",[37,167522,167524],{"id":167523},"_15-虚拟环境","1.5 虚拟环境",[14,167526,167527,167528,167531],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[49,167529,167530],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,167533,167534],{},"创建虚拟环境：",[151,167536,167538],{"className":47347,"code":167537,"language":47349,"meta":25,"style":25},"python -m venv .venv\n",[49,167539,167540],{"__ignoreMap":25},[159,167541,167542,167544,167546,167548],{"class":161,"line":162},[159,167543,53902],{"class":185},[159,167545,122182],{"class":1146},[159,167547,122185],{"class":192},[159,167549,122188],{"class":192},[14,167551,167552],{},"Windows 激活：",[151,167554,167556],{"className":47347,"code":167555,"language":47349,"meta":25,"style":25},".venv\\Scripts\\activate\n",[49,167557,167558],{"__ignoreMap":25},[159,167559,167560],{"class":161,"line":162},[159,167561,167555],{"class":185},[14,167563,167564],{},"macOS\u002FLinux 激活：",[151,167566,167568],{"className":47347,"code":167567,"language":47349,"meta":25,"style":25},"source .venv\u002Fbin\u002Factivate\n",[49,167569,167570],{"__ignoreMap":25},[159,167571,167572,167574],{"class":161,"line":162},[159,167573,122193],{"class":1146},[159,167575,122196],{"class":192},[14,167577,167578],{},"退出虚拟环境：",[151,167580,167582],{"className":47347,"code":167581,"language":47349,"meta":25,"style":25},"deactivate\n",[49,167583,167584],{"__ignoreMap":25},[159,167585,167586],{"class":161,"line":162},[159,167587,167581],{"class":185},[14,167589,167590],{},"保存依赖：",[151,167592,167594],{"className":47347,"code":167593,"language":47349,"meta":25,"style":25},"pip freeze > requirements.txt\n",[49,167595,167596],{"__ignoreMap":25},[159,167597,167598,167600,167603,167605],{"class":161,"line":162},[159,167599,47356],{"class":185},[159,167601,167602],{"class":192}," freeze",[159,167604,49745],{"class":1142},[159,167606,167607],{"class":192}," requirements.txt\n",[14,167609,167610],{},"安装依赖：",[151,167612,167614],{"className":47347,"code":167613,"language":47349,"meta":25,"style":25},"pip install -r requirements.txt\n",[49,167615,167616],{"__ignoreMap":25},[159,167617,167618,167620,167622,167624],{"class":161,"line":162},[159,167619,47356],{"class":185},[159,167621,47359],{"class":192},[159,167623,140939],{"class":1146},[159,167625,167607],{"class":192},[37,167627,167629],{"id":167628},"_16-开发工具","1.6 开发工具",[42,167631,167633],{"id":167632},"_161-pycharm","1.6.1 PyCharm",[14,167635,167636],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,167638,143362],{},[134,167640,167641,167644,167647,167653,167656],{},[106,167642,167643],{},"New Project：创建项目。",[106,167645,167646],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[106,167648,167649,167650,147283],{},"New Python File：创建 ",[49,167651,167652],{},".py",[106,167654,167655],{},"Run：运行当前文件。",[106,167657,167658],{},"Debug：断点调试。",[42,167660,167662],{"id":167661},"_162-vs-code","1.6.2 VS Code",[14,167664,167665],{},"VS Code 轻量，适合后续多语言开发。",[14,167667,167668],{},"建议安装插件：",[134,167670,167671,167674,167677],{},[106,167672,167673],{},"Python。",[106,167675,167676],{},"Pylance。",[106,167678,167679],{},"Jupyter。",[14,167681,167682],{},"选择解释器：",[151,167684,167687],{"className":167685,"code":167686,"language":8507,"meta":25},[28803],"Ctrl + Shift + P -> Python: Select Interpreter\n",[49,167688,167686],{"__ignoreMap":25},[37,167690,167692],{"id":167691},"_17-第一个python程序","1.7 第一个Python程序",[14,167694,167695,167696,48143],{},"创建文件 ",[49,167697,167698],{},"hello.py",[151,167700,167702],{"className":53900,"code":167701,"language":53902,"meta":25,"style":25},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[49,167703,167704,167715],{"__ignoreMap":25},[159,167705,167706,167708,167710,167713],{"class":161,"line":162},[159,167707,53937],{"class":1146},[159,167709,1159],{"class":165},[159,167711,167712],{"class":192},"\"Hello World\"",[159,167714,1165],{"class":165},[159,167716,167717,167719,167721,167724],{"class":161,"line":176},[159,167718,53937],{"class":1146},[159,167720,1159],{"class":165},[159,167722,167723],{"class":192},"\"你好，Python\"",[159,167725,1165],{"class":165},[14,167727,167728],{},"在终端运行：",[151,167730,167732],{"className":47347,"code":167731,"language":47349,"meta":25,"style":25},"python hello.py\n",[49,167733,167734],{"__ignoreMap":25},[159,167735,167736,167738],{"class":161,"line":162},[159,167737,53902],{"class":185},[159,167739,167740],{"class":192}," hello.py\n",[14,167742,167743],{},"或：",[151,167745,167747],{"className":47347,"code":167746,"language":47349,"meta":25,"style":25},"python3 hello.py\n",[49,167748,167749],{"__ignoreMap":25},[159,167750,167751,167753],{"class":161,"line":162},[159,167752,122179],{"class":185},[159,167754,167740],{"class":192},[14,167756,167757],{},"输出：",[151,167759,167762],{"className":167760,"code":167761,"language":8507,"meta":25},[28803],"Hello World\n你好，Python\n",[49,167763,167761],{"__ignoreMap":25},[37,167765,167767],{"id":167766},"_18-print函数","1.8 print函数",[14,167769,167770,167773],{},[49,167771,167772],{},"print()"," 用来输出内容。",[151,167775,167777],{"className":53900,"code":167776,"language":53902,"meta":25,"style":25},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[49,167778,167779,167789,167799,167809],{"__ignoreMap":25},[159,167780,167781,167783,167785,167787],{"class":161,"line":162},[159,167782,53937],{"class":1146},[159,167784,1159],{"class":165},[159,167786,29459],{"class":192},[159,167788,1165],{"class":165},[159,167790,167791,167793,167795,167797],{"class":161,"line":176},[159,167792,53937],{"class":1146},[159,167794,1159],{"class":165},[159,167796,1596],{"class":1146},[159,167798,1165],{"class":165},[159,167800,167801,167803,167805,167807],{"class":161,"line":203},[159,167802,53937],{"class":1146},[159,167804,1159],{"class":165},[159,167806,23928],{"class":1146},[159,167808,1165],{"class":165},[159,167810,167811,167813,167815,167818,167820,167822],{"class":161,"line":223},[159,167812,53937],{"class":1146},[159,167814,1159],{"class":165},[159,167816,167817],{"class":192},"\"年龄:\"",[159,167819,1939],{"class":165},[159,167821,18723],{"class":1146},[159,167823,1165],{"class":165},[14,167825,167826],{},"多个内容用逗号隔开，默认中间加空格：",[151,167828,167830],{"className":53900,"code":167829,"language":53902,"meta":25,"style":25},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[49,167831,167832,167842,167852],{"__ignoreMap":25},[159,167833,167834,167837,167839],{"class":161,"line":162},[159,167835,167836],{"class":165},"name ",[159,167838,189],{"class":1142},[159,167840,167841],{"class":192}," \"张三\"\n",[159,167843,167844,167847,167849],{"class":161,"line":176},[159,167845,167846],{"class":165},"age ",[159,167848,189],{"class":1142},[159,167850,167851],{"class":1146}," 18\n",[159,167853,167854,167856,167858,167861,167864,167866],{"class":161,"line":203},[159,167855,53937],{"class":1146},[159,167857,1159],{"class":165},[159,167859,167860],{"class":192},"\"姓名:\"",[159,167862,167863],{"class":165},", name, ",[159,167865,167817],{"class":192},[159,167867,167868],{"class":165},", age)\n",[14,167870,167871],{},"修改分隔符：",[151,167873,167875],{"className":53900,"code":167874,"language":53902,"meta":25,"style":25},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[49,167876,167877],{"__ignoreMap":25},[159,167878,167879,167881,167883,167886,167888,167890,167892,167894,167896,167899,167901,167903],{"class":161,"line":162},[159,167880,53937],{"class":1146},[159,167882,1159],{"class":165},[159,167884,167885],{"class":192},"\"2024\"",[159,167887,1939],{"class":165},[159,167889,1060],{"class":192},[159,167891,1939],{"class":165},[159,167893,1060],{"class":192},[159,167895,1939],{"class":165},[159,167897,167898],{"class":8765},"sep",[159,167900,189],{"class":1142},[159,167902,56001],{"class":192},[159,167904,1165],{"class":165},[14,167906,167907],{},"修改结尾符：",[151,167909,167911],{"className":53900,"code":167910,"language":53902,"meta":25,"style":25},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[49,167912,167913,167931],{"__ignoreMap":25},[159,167914,167915,167917,167919,167921,167923,167925,167927,167929],{"class":161,"line":162},[159,167916,53937],{"class":1146},[159,167918,1159],{"class":165},[159,167920,29459],{"class":192},[159,167922,1939],{"class":165},[159,167924,69195],{"class":8765},[159,167926,189],{"class":1142},[159,167928,27977],{"class":192},[159,167930,1165],{"class":165},[159,167932,167933,167935,167937,167940],{"class":161,"line":176},[159,167934,53937],{"class":1146},[159,167936,1159],{"class":165},[159,167938,167939],{"class":192},"\"python\"",[159,167941,1165],{"class":165},[37,167943,167945],{"id":167944},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,167947,167948],{},"交互运行适合临时验证：",[151,167950,167952],{"className":53900,"code":167951,"language":53902,"meta":25,"style":25},">>> 10 * 3\n30\n",[49,167953,167954,167964],{"__ignoreMap":25},[159,167955,167956,167958,167960,167962],{"class":161,"line":162},[159,167957,167153],{"class":1142},[159,167959,7664],{"class":1146},[159,167961,30131],{"class":1142},[159,167963,141336],{"class":1146},[159,167965,167966],{"class":161,"line":176},[159,167967,167968],{"class":1146},"30\n",[14,167970,167971],{},"脚本运行适合保存程序：",[151,167973,167975],{"className":53900,"code":167974,"language":53902,"meta":25,"style":25},"price = 8\ncount = 5\nprint(price * count)\n",[49,167976,167977,167987,167996],{"__ignoreMap":25},[159,167978,167979,167982,167984],{"class":161,"line":162},[159,167980,167981],{"class":165},"price ",[159,167983,189],{"class":1142},[159,167985,167986],{"class":1146}," 8\n",[159,167988,167989,167992,167994],{"class":161,"line":176},[159,167990,167991],{"class":165},"count ",[159,167993,189],{"class":1142},[159,167995,1191],{"class":1146},[159,167997,167998,168000,168003,168005],{"class":161,"line":203},[159,167999,53937],{"class":1146},[159,168001,168002],{"class":165},"(price ",[159,168004,4777],{"class":1142},[159,168006,168007],{"class":165}," count)\n",[14,168009,168010],{},"实际学习中推荐：",[134,168012,168013,168016,168021],{},[106,168014,168015],{},"临时试一个语法，用交互模式。",[106,168017,168018,168019,147283],{},"写完整练习，用 ",[49,168020,167652],{},[106,168022,168023],{},"写项目，用独立目录和虚拟环境。",[37,168025,168027],{"id":168026},"_110-常见错误","1.10 常见错误",[42,168029,168031],{"id":168030},"_1101-命令找不到","1.10.1 命令找不到",[151,168033,168036],{"className":168034,"code":168035,"language":8507,"meta":25},[28803],"python: command not found\n",[49,168037,168035],{"__ignoreMap":25},[14,168039,168040],{},"原因：",[134,168042,168043,168046,168049],{},[106,168044,168045],{},"没安装 Python。",[106,168047,168048],{},"PATH 没配置。",[106,168050,168051,168052,51907],{},"Linux\u002FmacOS 应该使用 ",[49,168053,122179],{},[42,168055,168057],{"id":168056},"_1102-文件名冲突","1.10.2 文件名冲突",[14,168059,168060],{},"不要把文件命名为：",[151,168062,168065],{"className":168063,"code":168064,"language":8507,"meta":25},[28803],"random.py\njson.py\ntime.py\nrequests.py\n",[49,168066,168064],{"__ignoreMap":25},[14,168068,168069],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[42,168071,168073],{"id":168072},"_1103-中文乱码","1.10.3 中文乱码",[14,168075,168076],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,168078,168079],{},"如果读写文件出现乱码，要明确指定编码：",[151,168081,168083],{"className":53900,"code":168082,"language":53902,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[49,168084,168085,168119],{"__ignoreMap":25},[159,168086,168087,168089,168092,168094,168097,168099,168102,168104,168107,168109,168112,168114,168116],{"class":161,"line":162},[159,168088,129133],{"class":1142},[159,168090,168091],{"class":1146}," open",[159,168093,1159],{"class":165},[159,168095,168096],{"class":192},"\"data.txt\"",[159,168098,1939],{"class":165},[159,168100,168101],{"class":192},"\"r\"",[159,168103,1939],{"class":165},[159,168105,168106],{"class":8765},"encoding",[159,168108,189],{"class":1142},[159,168110,168111],{"class":192},"\"utf-8\"",[159,168113,2710],{"class":165},[159,168115,54903],{"class":1142},[159,168117,168118],{"class":165}," f:\n",[159,168120,168121,168124,168126],{"class":161,"line":176},[159,168122,168123],{"class":165},"    content ",[159,168125,189],{"class":1142},[159,168127,168128],{"class":165}," f.read()\n",[37,168130,168132],{"id":168131},"_111-本章练习","1.11 本章练习",[134,168134,168135,168138,168144],{},[106,168136,168137],{},"安装 Python，并在终端输出版本号。",[106,168139,168140,168141,168143],{},"新建 ",[49,168142,167698],{},"，输出自己的姓名、年龄、学习目标。",[106,168145,125666,168146,168148],{},[49,168147,167772],{}," 输出下面格式：",[151,168150,168153],{"className":168151,"code":168152,"language":8507,"meta":25},[28803],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[49,168154,168152],{"__ignoreMap":25},[134,168156,168157],{"start":223},[106,168158,125666,168159,168161],{},[49,168160,167898],{}," 输出日期：",[151,168163,168166],{"className":168164,"code":168165,"language":8507,"meta":25},[28803],"2024-10-10\n",[49,168167,168165],{"__ignoreMap":25},[134,168169,168170],{"start":233},[106,168171,125666,168172,168174,168175,168177],{},[49,168173,69195],{}," 让两次 ",[49,168176,167772],{}," 输出在同一行。",[1468,168179,168180],{},"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":25,"searchDepth":176,"depth":176,"links":168182},[168183,168184,168185,168190,168191,168192,168196,168197,168198,168199,168204],{"id":167065,"depth":176,"text":167066},{"id":167109,"depth":176,"text":167110},{"id":167210,"depth":176,"text":167211,"children":168186},[168187,168188,168189],{"id":167214,"depth":203,"text":167215},{"id":167269,"depth":203,"text":167270},{"id":167305,"depth":203,"text":167306},{"id":167378,"depth":176,"text":167379},{"id":167523,"depth":176,"text":167524},{"id":167628,"depth":176,"text":167629,"children":168193},[168194,168195],{"id":167632,"depth":203,"text":167633},{"id":167661,"depth":203,"text":167662},{"id":167691,"depth":176,"text":167692},{"id":167766,"depth":176,"text":167767},{"id":167944,"depth":176,"text":167945},{"id":168026,"depth":176,"text":168027,"children":168200},[168201,168202,168203],{"id":168030,"depth":203,"text":168031},{"id":168056,"depth":203,"text":168057},{"id":168072,"depth":203,"text":168073},{"id":168131,"depth":176,"text":168132},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":167057,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":168211,"title":168212,"body":168213,"description":23809,"extension":23810,"meta":170617,"navigation":589,"path":170618,"seo":170619,"stem":170620,"__hash__":170621},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":168214,"toc":170602},[168215,168218,168222,168225,168228,168245,168248,168290,168293,168297,168300,168303,168340,168343,168377,168380,168472,168476,168490,168493,168520,168523,168527,168630,168637,168640,168657,168661,168668,168857,168860,168933,168937,168940,169024,169027,169059,169063,169267,169270,169274,169280,169382,169385,169641,169645,169648,169651,169665,169667,169853,169857,170219,170225,170229,170232,170356,170359,170538,170541,170545,170578,170582,170599],[10,168216,168212],{"id":168217},"_10-json与pyecharts折线图",[37,168219,168221],{"id":168220},"_101-数据可视化","10.1 数据可视化",[14,168223,168224],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,168226,168227],{},"常见图表：",[134,168229,168230,168233,168236,168239,168242],{},[106,168231,168232],{},"折线图：看趋势。",[106,168234,168235],{},"柱状图：看分类对比。",[106,168237,168238],{},"饼图：看占比。",[106,168240,168241],{},"地图：看地域分布。",[106,168243,168244],{},"散点图：看两个变量之间的关系。",[14,168246,168247],{},"Python 可视化常用库：",[12347,168249,168250,168258],{},[16500,168251,168252],{},[12356,168253,168254,168256],{},[12365,168255,167461],{},[12365,168257,47265],{},[16624,168259,168260,168267,168275,168282],{},[12356,168261,168262,168264],{},[12488,168263,167493],{},[12488,168265,168266],{},"基础、经典、可定制",[12356,168268,168269,168272],{},[12488,168270,168271],{},"seaborn",[12488,168273,168274],{},"统计图表更美观",[12356,168276,168277,168279],{},[12488,168278,167501],{},[12488,168280,168281],{},"生成交互式网页图表",[12356,168283,168284,168287],{},[12488,168285,168286],{},"plotly",[12488,168288,168289],{},"交互图表能力强",[14,168291,168292],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[37,168294,168296],{"id":168295},"_102-json回顾","10.2 JSON回顾",[14,168298,168299],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,168301,168302],{},"Python 字典：",[151,168304,168306],{"className":53900,"code":168305,"language":53902,"meta":25,"style":25},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[49,168307,168308,168316,168327,168336],{"__ignoreMap":25},[159,168309,168310,168312,168314],{"class":161,"line":162},[159,168311,122958],{"class":165},[159,168313,189],{"class":1142},[159,168315,1478],{"class":165},[159,168317,168318,168321,168323,168325],{"class":161,"line":176},[159,168319,168320],{"class":192},"    \"name\"",[159,168322,1486],{"class":165},[159,168324,16345],{"class":192},[159,168326,17070],{"class":165},[159,168328,168329,168332,168334],{"class":161,"line":203},[159,168330,168331],{"class":192},"    \"value\"",[159,168333,1486],{"class":165},[159,168335,118758],{"class":1146},[159,168337,168338],{"class":161,"line":223},[159,168339,15685],{"class":165},[14,168341,168342],{},"JSON 字符串：",[151,168344,168347],{"className":168345,"code":168346,"language":167092,"meta":25,"style":25},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[49,168348,168349,168353,168364,168373],{"__ignoreMap":25},[159,168350,168351],{"class":161,"line":162},[159,168352,25222],{"class":165},[159,168354,168355,168358,168360,168362],{"class":161,"line":176},[159,168356,168357],{"class":1146},"  \"name\"",[159,168359,1486],{"class":165},[159,168361,16345],{"class":192},[159,168363,17070],{"class":165},[159,168365,168366,168369,168371],{"class":161,"line":203},[159,168367,168368],{"class":1146},"  \"value\"",[159,168370,1486],{"class":165},[159,168372,118758],{"class":1146},[159,168374,168375],{"class":161,"line":223},[159,168376,15685],{"class":165},[14,168378,168379],{},"Python 与 JSON 的转换：",[151,168381,168383],{"className":53900,"code":168382,"language":53902,"meta":25,"style":25},"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",[49,168384,168385,168392,168396,168421,168425,168444,168451,168455,168465],{"__ignoreMap":25},[159,168386,168387,168389],{"class":161,"line":162},[159,168388,53914],{"class":1142},[159,168390,168391],{"class":165}," json\n",[159,168393,168394],{"class":161,"line":176},[159,168395,590],{"emptyLinePlaceholder":589},[159,168397,168398,168400,168402,168404,168406,168408,168410,168412,168415,168417,168419],{"class":161,"line":203},[159,168399,122958],{"class":165},[159,168401,189],{"class":1142},[159,168403,28066],{"class":165},[159,168405,9722],{"class":192},[159,168407,1486],{"class":165},[159,168409,16345],{"class":192},[159,168411,1939],{"class":165},[159,168413,168414],{"class":192},"\"value\"",[159,168416,1486],{"class":165},[159,168418,1596],{"class":1146},[159,168420,15685],{"class":165},[159,168422,168423],{"class":161,"line":223},[159,168424,590],{"emptyLinePlaceholder":589},[159,168426,168427,168430,168432,168435,168438,168440,168442],{"class":161,"line":233},[159,168428,168429],{"class":165},"json_text ",[159,168431,189],{"class":1142},[159,168433,168434],{"class":165}," json.dumps(data, ",[159,168436,168437],{"class":8765},"ensure_ascii",[159,168439,189],{"class":1142},[159,168441,57382],{"class":1146},[159,168443,1165],{"class":165},[159,168445,168446,168448],{"class":161,"line":239},[159,168447,53937],{"class":1146},[159,168449,168450],{"class":165},"(json_text)\n",[159,168452,168453],{"class":161,"line":245},[159,168454,590],{"emptyLinePlaceholder":589},[159,168456,168457,168460,168462],{"class":161,"line":251},[159,168458,168459],{"class":165},"new_data ",[159,168461,189],{"class":1142},[159,168463,168464],{"class":165}," json.loads(json_text)\n",[159,168466,168467,168469],{"class":161,"line":261},[159,168468,53937],{"class":1146},[159,168470,168471],{"class":165},"(new_data)\n",[37,168473,168475],{"id":168474},"_103-安装pyecharts","10.3 安装pyecharts",[151,168477,168479],{"className":47347,"code":168478,"language":47349,"meta":25,"style":25},"pip install pyecharts\n",[49,168480,168481],{"__ignoreMap":25},[159,168482,168483,168485,168487],{"class":161,"line":162},[159,168484,47356],{"class":185},[159,168486,47359],{"class":192},[159,168488,168489],{"class":192}," pyecharts\n",[14,168491,168492],{},"验证：",[151,168494,168496],{"className":53900,"code":168495,"language":53902,"meta":25,"style":25},"import pyecharts\n\nprint(pyecharts.__version__)\n",[49,168497,168498,168504,168508],{"__ignoreMap":25},[159,168499,168500,168502],{"class":161,"line":162},[159,168501,53914],{"class":1142},[159,168503,168489],{"class":165},[159,168505,168506],{"class":161,"line":176},[159,168507,590],{"emptyLinePlaceholder":589},[159,168509,168510,168512,168515,168518],{"class":161,"line":203},[159,168511,53937],{"class":1146},[159,168513,168514],{"class":165},"(pyecharts.",[159,168516,168517],{"class":1146},"__version__",[159,168519,1165],{"class":165},[14,168521,168522],{},"如果使用虚拟环境，要先激活环境再安装。",[37,168524,168526],{"id":168525},"_104-第一个折线图","10.4 第一个折线图",[151,168528,168530],{"className":53900,"code":168529,"language":53902,"meta":25,"style":25},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[49,168531,168532,168544,168548,168558,168588,168620],{"__ignoreMap":25},[159,168533,168534,168536,168539,168541],{"class":161,"line":162},[159,168535,54258],{"class":1142},[159,168537,168538],{"class":165}," pyecharts.charts ",[159,168540,53914],{"class":1142},[159,168542,168543],{"class":165}," Line\n",[159,168545,168546],{"class":161,"line":176},[159,168547,590],{"emptyLinePlaceholder":589},[159,168549,168550,168553,168555],{"class":161,"line":203},[159,168551,168552],{"class":165},"line ",[159,168554,189],{"class":1142},[159,168556,168557],{"class":165}," Line()\n",[159,168559,168560,168563,168566,168568,168571,168573,168576,168578,168581,168583,168586],{"class":161,"line":223},[159,168561,168562],{"class":165},"line.add_xaxis([",[159,168564,168565],{"class":192},"\"周一\"",[159,168567,1939],{"class":165},[159,168569,168570],{"class":192},"\"周二\"",[159,168572,1939],{"class":165},[159,168574,168575],{"class":192},"\"周三\"",[159,168577,1939],{"class":165},[159,168579,168580],{"class":192},"\"周四\"",[159,168582,1939],{"class":165},[159,168584,168585],{"class":192},"\"周五\"",[159,168587,28275],{"class":165},[159,168589,168590,168593,168596,168598,168600,168602,168604,168606,168608,168610,168613,168615,168618],{"class":161,"line":233},[159,168591,168592],{"class":165},"line.add_yaxis(",[159,168594,168595],{"class":192},"\"销售额\"",[159,168597,98818],{"class":165},[159,168599,1596],{"class":1146},[159,168601,1939],{"class":165},[159,168603,4384],{"class":1146},[159,168605,1939],{"class":165},[159,168607,24688],{"class":1146},[159,168609,1939],{"class":165},[159,168611,168612],{"class":1146},"150",[159,168614,1939],{"class":165},[159,168616,168617],{"class":1146},"180",[159,168619,28275],{"class":165},[159,168621,168622,168625,168628],{"class":161,"line":239},[159,168623,168624],{"class":165},"line.render(",[159,168626,168627],{"class":192},"\"line.html\"",[159,168629,1165],{"class":165},[14,168631,168632,168633,168636],{},"运行后会生成 ",[49,168634,168635],{},"line.html","，用浏览器打开即可看到图表。",[14,168638,168639],{},"核心步骤：",[134,168641,168642,168645,168648,168651,168654],{},[106,168643,168644],{},"导入图表类。",[106,168646,168647],{},"创建图表对象。",[106,168649,168650],{},"添加 x 轴数据。",[106,168652,168653],{},"添加 y 轴数据。",[106,168655,168656],{},"渲染为 HTML。",[37,168658,168660],{"id":168659},"_105-全局配置","10.5 全局配置",[14,168662,168663,168664,168667],{},"常用配置在 ",[49,168665,168666],{},"pyecharts.options"," 中。",[151,168669,168671],{"className":53900,"code":168670,"language":53902,"meta":25,"style":25},"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",[49,168672,168673,168690,168700,168704,168712,168736,168764,168769,168788,168807,168825,168845,168849],{"__ignoreMap":25},[159,168674,168675,168677,168680,168682,168685,168687],{"class":161,"line":162},[159,168676,54258],{"class":1142},[159,168678,168679],{"class":165}," pyecharts ",[159,168681,53914],{"class":1142},[159,168683,168684],{"class":165}," options ",[159,168686,54903],{"class":1142},[159,168688,168689],{"class":165}," opts\n",[159,168691,168692,168694,168696,168698],{"class":161,"line":176},[159,168693,54258],{"class":1142},[159,168695,168538],{"class":165},[159,168697,53914],{"class":1142},[159,168699,168543],{"class":165},[159,168701,168702],{"class":161,"line":203},[159,168703,590],{"emptyLinePlaceholder":589},[159,168705,168706,168708,168710],{"class":161,"line":223},[159,168707,168552],{"class":165},[159,168709,189],{"class":1142},[159,168711,168557],{"class":165},[159,168713,168714,168716,168718,168720,168722,168724,168726,168728,168730,168732,168734],{"class":161,"line":233},[159,168715,168562],{"class":165},[159,168717,168565],{"class":192},[159,168719,1939],{"class":165},[159,168721,168570],{"class":192},[159,168723,1939],{"class":165},[159,168725,168575],{"class":192},[159,168727,1939],{"class":165},[159,168729,168580],{"class":192},[159,168731,1939],{"class":165},[159,168733,168585],{"class":192},[159,168735,28275],{"class":165},[159,168737,168738,168740,168742,168744,168746,168748,168750,168752,168754,168756,168758,168760,168762],{"class":161,"line":239},[159,168739,168592],{"class":165},[159,168741,168595],{"class":192},[159,168743,98818],{"class":165},[159,168745,1596],{"class":1146},[159,168747,1939],{"class":165},[159,168749,4384],{"class":1146},[159,168751,1939],{"class":165},[159,168753,24688],{"class":1146},[159,168755,1939],{"class":165},[159,168757,168612],{"class":1146},[159,168759,1939],{"class":165},[159,168761,168617],{"class":1146},[159,168763,28275],{"class":165},[159,168765,168766],{"class":161,"line":245},[159,168767,168768],{"class":165},"line.set_global_opts(\n",[159,168770,168771,168774,168776,168779,168781,168783,168786],{"class":161,"line":251},[159,168772,168773],{"class":8765},"    title_opts",[159,168775,189],{"class":1142},[159,168777,168778],{"class":165},"opts.TitleOpts(",[159,168780,998],{"class":8765},[159,168782,189],{"class":1142},[159,168784,168785],{"class":192},"\"一周销售额\"",[159,168787,61442],{"class":165},[159,168789,168790,168793,168795,168798,168800,168802,168805],{"class":161,"line":261},[159,168791,168792],{"class":8765},"    xaxis_opts",[159,168794,189],{"class":1142},[159,168796,168797],{"class":165},"opts.AxisOpts(",[159,168799,101110],{"class":8765},[159,168801,189],{"class":1142},[159,168803,168804],{"class":192},"\"日期\"",[159,168806,61442],{"class":165},[159,168808,168809,168812,168814,168816,168818,168820,168823],{"class":161,"line":603},[159,168810,168811],{"class":8765},"    yaxis_opts",[159,168813,189],{"class":1142},[159,168815,168797],{"class":165},[159,168817,101110],{"class":8765},[159,168819,189],{"class":1142},[159,168821,168822],{"class":192},"\"金额\"",[159,168824,61442],{"class":165},[159,168826,168827,168830,168832,168835,168838,168840,168843],{"class":161,"line":621},[159,168828,168829],{"class":8765},"    tooltip_opts",[159,168831,189],{"class":1142},[159,168833,168834],{"class":165},"opts.TooltipOpts(",[159,168836,168837],{"class":8765},"trigger",[159,168839,189],{"class":1142},[159,168841,168842],{"class":192},"\"axis\"",[159,168844,61442],{"class":165},[159,168846,168847],{"class":161,"line":634},[159,168848,1165],{"class":165},[159,168850,168851,168853,168855],{"class":161,"line":640},[159,168852,168624],{"class":165},[159,168854,168627],{"class":192},[159,168856,1165],{"class":165},[14,168858,168859],{},"常见全局配置：",[12347,168861,168862,168871],{},[16500,168863,168864],{},[12356,168865,168866,168869],{},[12365,168867,168868],{},"配置",[12365,168870,123996],{},[16624,168872,168873,168883,168893,168903,168913,168923],{},[12356,168874,168875,168880],{},[12488,168876,168877],{},[49,168878,168879],{},"TitleOpts",[12488,168881,168882],{},"标题",[12356,168884,168885,168890],{},[12488,168886,168887],{},[49,168888,168889],{},"LegendOpts",[12488,168891,168892],{},"图例",[12356,168894,168895,168900],{},[12488,168896,168897],{},[49,168898,168899],{},"TooltipOpts",[12488,168901,168902],{},"提示框",[12356,168904,168905,168910],{},[12488,168906,168907],{},[49,168908,168909],{},"AxisOpts",[12488,168911,168912],{},"坐标轴",[12356,168914,168915,168920],{},[12488,168916,168917],{},[49,168918,168919],{},"VisualMapOpts",[12488,168921,168922],{},"视觉映射",[12356,168924,168925,168930],{},[12488,168926,168927],{},[49,168928,168929],{},"DataZoomOpts",[12488,168931,168932],{},"区域缩放",[37,168934,168936],{"id":168935},"_106-系列配置","10.6 系列配置",[14,168938,168939],{},"系列配置作用于某一组数据。",[151,168941,168943],{"className":53900,"code":168942,"language":53902,"meta":25,"style":25},"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",[49,168944,168945,168950,168961,168990,169001,169020],{"__ignoreMap":25},[159,168946,168947],{"class":161,"line":162},[159,168948,168949],{"class":165},"line.add_yaxis(\n",[159,168951,168952,168955,168957,168959],{"class":161,"line":176},[159,168953,168954],{"class":8765},"    series_name",[159,168956,189],{"class":1142},[159,168958,168595],{"class":192},[159,168960,17070],{"class":165},[159,168962,168963,168966,168968,168970,168972,168974,168976,168978,168980,168982,168984,168986,168988],{"class":161,"line":203},[159,168964,168965],{"class":8765},"    y_axis",[159,168967,189],{"class":1142},[159,168969,17263],{"class":165},[159,168971,1596],{"class":1146},[159,168973,1939],{"class":165},[159,168975,4384],{"class":1146},[159,168977,1939],{"class":165},[159,168979,24688],{"class":1146},[159,168981,1939],{"class":165},[159,168983,168612],{"class":1146},[159,168985,1939],{"class":165},[159,168987,168617],{"class":1146},[159,168989,109136],{"class":165},[159,168991,168992,168995,168997,168999],{"class":161,"line":223},[159,168993,168994],{"class":8765},"    is_smooth",[159,168996,189],{"class":1142},[159,168998,54995],{"class":1146},[159,169000,17070],{"class":165},[159,169002,169003,169006,169008,169011,169014,169016,169018],{"class":161,"line":233},[159,169004,169005],{"class":8765},"    label_opts",[159,169007,189],{"class":1142},[159,169009,169010],{"class":165},"opts.LabelOpts(",[159,169012,169013],{"class":8765},"is_show",[159,169015,189],{"class":1142},[159,169017,54995],{"class":1146},[159,169019,61442],{"class":165},[159,169021,169022],{"class":161,"line":239},[159,169023,1165],{"class":165},[14,169025,169026],{},"常用参数：",[134,169028,169029,169035,169041,169047,169053],{},[106,169030,169031,169034],{},[49,169032,169033],{},"series_name","：系列名称。",[106,169036,169037,169040],{},[49,169038,169039],{},"y_axis","：y 轴数据。",[106,169042,169043,169046],{},[49,169044,169045],{},"is_smooth","：是否平滑曲线。",[106,169048,169049,169052],{},[49,169050,169051],{},"label_opts","：标签配置。",[106,169054,169055,169058],{},[49,169056,169057],{},"symbol_size","：标记点大小。",[37,169060,169062],{"id":169061},"_107-多条折线","10.7 多条折线",[151,169064,169066],{"className":53900,"code":169065,"language":53902,"meta":25,"style":25},"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",[49,169067,169068,169082,169092,169096,169125,169129,169137,169142,169180,169217,169221,169238,169254,169258],{"__ignoreMap":25},[159,169069,169070,169072,169074,169076,169078,169080],{"class":161,"line":162},[159,169071,54258],{"class":1142},[159,169073,168679],{"class":165},[159,169075,53914],{"class":1142},[159,169077,168684],{"class":165},[159,169079,54903],{"class":1142},[159,169081,168689],{"class":165},[159,169083,169084,169086,169088,169090],{"class":161,"line":176},[159,169085,54258],{"class":1142},[159,169087,168538],{"class":165},[159,169089,53914],{"class":1142},[159,169091,168543],{"class":165},[159,169093,169094],{"class":161,"line":203},[159,169095,590],{"emptyLinePlaceholder":589},[159,169097,169098,169101,169103,169105,169107,169109,169111,169113,169115,169117,169119,169121,169123],{"class":161,"line":223},[159,169099,169100],{"class":165},"dates ",[159,169102,189],{"class":1142},[159,169104,4608],{"class":165},[159,169106,168565],{"class":192},[159,169108,1939],{"class":165},[159,169110,168570],{"class":192},[159,169112,1939],{"class":165},[159,169114,168575],{"class":192},[159,169116,1939],{"class":165},[159,169118,168580],{"class":192},[159,169120,1939],{"class":165},[159,169122,168585],{"class":192},[159,169124,4634],{"class":165},[159,169126,169127],{"class":161,"line":233},[159,169128,590],{"emptyLinePlaceholder":589},[159,169130,169131,169133,169135],{"class":161,"line":239},[159,169132,168552],{"class":165},[159,169134,189],{"class":1142},[159,169136,168557],{"class":165},[159,169138,169139],{"class":161,"line":245},[159,169140,169141],{"class":165},"line.add_xaxis(dates)\n",[159,169143,169144,169146,169149,169151,169153,169155,169158,169160,169162,169164,169166,169168,169170,169172,169174,169176,169178],{"class":161,"line":251},[159,169145,168592],{"class":165},[159,169147,169148],{"class":192},"\"线上销售\"",[159,169150,98818],{"class":165},[159,169152,1596],{"class":1146},[159,169154,1939],{"class":165},[159,169156,169157],{"class":1146},"130",[159,169159,1939],{"class":165},[159,169161,4384],{"class":1146},[159,169163,1939],{"class":165},[159,169165,44575],{"class":1146},[159,169167,1939],{"class":165},[159,169169,13303],{"class":1146},[159,169171,133502],{"class":165},[159,169173,169045],{"class":8765},[159,169175,189],{"class":1142},[159,169177,54995],{"class":1146},[159,169179,1165],{"class":165},[159,169181,169182,169184,169187,169189,169191,169193,169195,169197,169199,169201,169203,169205,169207,169209,169211,169213,169215],{"class":161,"line":261},[159,169183,168592],{"class":165},[159,169185,169186],{"class":192},"\"线下销售\"",[159,169188,98818],{"class":165},[159,169190,9100],{"class":1146},[159,169192,1939],{"class":165},[159,169194,24688],{"class":1146},[159,169196,1939],{"class":165},[159,169198,1596],{"class":1146},[159,169200,1939],{"class":165},[159,169202,4384],{"class":1146},[159,169204,1939],{"class":165},[159,169206,168612],{"class":1146},[159,169208,133502],{"class":165},[159,169210,169045],{"class":8765},[159,169212,189],{"class":1142},[159,169214,54995],{"class":1146},[159,169216,1165],{"class":165},[159,169218,169219],{"class":161,"line":603},[159,169220,168768],{"class":165},[159,169222,169223,169225,169227,169229,169231,169233,169236],{"class":161,"line":621},[159,169224,168773],{"class":8765},[159,169226,189],{"class":1142},[159,169228,168778],{"class":165},[159,169230,998],{"class":8765},[159,169232,189],{"class":1142},[159,169234,169235],{"class":192},"\"线上线下销售趋势\"",[159,169237,61442],{"class":165},[159,169239,169240,169242,169244,169246,169248,169250,169252],{"class":161,"line":634},[159,169241,168829],{"class":8765},[159,169243,189],{"class":1142},[159,169245,168834],{"class":165},[159,169247,168837],{"class":8765},[159,169249,189],{"class":1142},[159,169251,168842],{"class":192},[159,169253,61442],{"class":165},[159,169255,169256],{"class":161,"line":640},[159,169257,1165],{"class":165},[159,169259,169260,169262,169265],{"class":161,"line":1075},[159,169261,168624],{"class":165},[159,169263,169264],{"class":192},"\"sales.html\"",[159,169266,1165],{"class":165},[14,169268,169269],{},"多条折线适合比较不同指标或不同地区。",[37,169271,169273],{"id":169272},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,169275,169276,169277,48143],{},"假设 ",[49,169278,169279],{},"sales.json",[151,169281,169283],{"className":168345,"code":169282,"language":167092,"meta":25,"style":25},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[49,169284,169285,169290,169322,169350,169378],{"__ignoreMap":25},[159,169286,169287],{"class":161,"line":162},[159,169288,169289],{"class":165},"[\n",[159,169291,169292,169295,169298,169300,169302,169304,169307,169309,169311,169313,169316,169318,169320],{"class":161,"line":176},[159,169293,169294],{"class":165},"  {",[159,169296,169297],{"class":1146},"\"date\"",[159,169299,1486],{"class":165},[159,169301,168565],{"class":192},[159,169303,1939],{"class":165},[159,169305,169306],{"class":1146},"\"online\"",[159,169308,1486],{"class":165},[159,169310,1596],{"class":1146},[159,169312,1939],{"class":165},[159,169314,169315],{"class":1146},"\"offline\"",[159,169317,1486],{"class":165},[159,169319,9100],{"class":1146},[159,169321,28548],{"class":165},[159,169323,169324,169326,169328,169330,169332,169334,169336,169338,169340,169342,169344,169346,169348],{"class":161,"line":203},[159,169325,169294],{"class":165},[159,169327,169297],{"class":1146},[159,169329,1486],{"class":165},[159,169331,168570],{"class":192},[159,169333,1939],{"class":165},[159,169335,169306],{"class":1146},[159,169337,1486],{"class":165},[159,169339,169157],{"class":1146},[159,169341,1939],{"class":165},[159,169343,169315],{"class":1146},[159,169345,1486],{"class":165},[159,169347,24688],{"class":1146},[159,169349,28548],{"class":165},[159,169351,169352,169354,169356,169358,169360,169362,169364,169366,169368,169370,169372,169374,169376],{"class":161,"line":223},[159,169353,169294],{"class":165},[159,169355,169297],{"class":1146},[159,169357,1486],{"class":165},[159,169359,168575],{"class":192},[159,169361,1939],{"class":165},[159,169363,169306],{"class":1146},[159,169365,1486],{"class":165},[159,169367,4384],{"class":1146},[159,169369,1939],{"class":165},[159,169371,169315],{"class":1146},[159,169373,1486],{"class":165},[159,169375,1596],{"class":1146},[159,169377,15685],{"class":165},[159,169379,169380],{"class":161,"line":233},[159,169381,4634],{"class":165},[14,169383,169384],{},"读取并绘图：",[151,169386,169388],{"className":53900,"code":169387,"language":53902,"meta":25,"style":25},"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",[49,169389,169390,169396,169410,169420,169424,169456,169469,169473,169481,169490,169499,169503,169515,169524,169533,169542,169546,169554,169558,169575,169592,169596,169613,169629,169633],{"__ignoreMap":25},[159,169391,169392,169394],{"class":161,"line":162},[159,169393,53914],{"class":1142},[159,169395,168391],{"class":165},[159,169397,169398,169400,169402,169404,169406,169408],{"class":161,"line":176},[159,169399,54258],{"class":1142},[159,169401,168679],{"class":165},[159,169403,53914],{"class":1142},[159,169405,168684],{"class":165},[159,169407,54903],{"class":1142},[159,169409,168689],{"class":165},[159,169411,169412,169414,169416,169418],{"class":161,"line":203},[159,169413,54258],{"class":1142},[159,169415,168538],{"class":165},[159,169417,53914],{"class":1142},[159,169419,168543],{"class":165},[159,169421,169422],{"class":161,"line":223},[159,169423,590],{"emptyLinePlaceholder":589},[159,169425,169426,169428,169430,169432,169435,169437,169439,169441,169443,169445,169447,169449,169451,169454],{"class":161,"line":233},[159,169427,129133],{"class":1142},[159,169429,168091],{"class":1146},[159,169431,1159],{"class":165},[159,169433,169434],{"class":192},"\"sales.json\"",[159,169436,1939],{"class":165},[159,169438,168101],{"class":192},[159,169440,1939],{"class":165},[159,169442,168106],{"class":8765},[159,169444,189],{"class":1142},[159,169446,168111],{"class":192},[159,169448,2710],{"class":165},[159,169450,54903],{"class":1142},[159,169452,169453],{"class":8765}," file",[159,169455,27364],{"class":165},[159,169457,169458,169460,169462,169465,169467],{"class":161,"line":239},[159,169459,122721],{"class":165},[159,169461,189],{"class":1142},[159,169463,169464],{"class":165}," json.load(",[159,169466,68749],{"class":8765},[159,169468,1165],{"class":165},[159,169470,169471],{"class":161,"line":245},[159,169472,590],{"emptyLinePlaceholder":589},[159,169474,169475,169477,169479],{"class":161,"line":251},[159,169476,169100],{"class":165},[159,169478,189],{"class":1142},[159,169480,16884],{"class":165},[159,169482,169483,169486,169488],{"class":161,"line":261},[159,169484,169485],{"class":165},"online_sales ",[159,169487,189],{"class":1142},[159,169489,16884],{"class":165},[159,169491,169492,169495,169497],{"class":161,"line":603},[159,169493,169494],{"class":165},"offline_sales ",[159,169496,189],{"class":1142},[159,169498,16884],{"class":165},[159,169500,169501],{"class":161,"line":621},[159,169502,590],{"emptyLinePlaceholder":589},[159,169504,169505,169507,169510,169512],{"class":161,"line":634},[159,169506,26657],{"class":1142},[159,169508,169509],{"class":165}," item ",[159,169511,49566],{"class":1142},[159,169513,169514],{"class":165}," data:\n",[159,169516,169517,169520,169522],{"class":161,"line":640},[159,169518,169519],{"class":165},"    dates.append(item[",[159,169521,169297],{"class":192},[159,169523,28275],{"class":165},[159,169525,169526,169529,169531],{"class":161,"line":1075},[159,169527,169528],{"class":165},"    online_sales.append(item[",[159,169530,169306],{"class":192},[159,169532,28275],{"class":165},[159,169534,169535,169538,169540],{"class":161,"line":1081},[159,169536,169537],{"class":165},"    offline_sales.append(item[",[159,169539,169315],{"class":192},[159,169541,28275],{"class":165},[159,169543,169544],{"class":161,"line":1091},[159,169545,590],{"emptyLinePlaceholder":589},[159,169547,169548,169550,169552],{"class":161,"line":1100},[159,169549,168552],{"class":165},[159,169551,189],{"class":1142},[159,169553,168557],{"class":165},[159,169555,169556],{"class":161,"line":1123},[159,169557,169141],{"class":165},[159,169559,169560,169562,169564,169567,169569,169571,169573],{"class":161,"line":1132},[159,169561,168592],{"class":165},[159,169563,169148],{"class":192},[159,169565,169566],{"class":165},", online_sales, ",[159,169568,169045],{"class":8765},[159,169570,189],{"class":1142},[159,169572,54995],{"class":1146},[159,169574,1165],{"class":165},[159,169576,169577,169579,169581,169584,169586,169588,169590],{"class":161,"line":1139},[159,169578,168592],{"class":165},[159,169580,169186],{"class":192},[159,169582,169583],{"class":165},", offline_sales, ",[159,169585,169045],{"class":8765},[159,169587,189],{"class":1142},[159,169589,54995],{"class":1146},[159,169591,1165],{"class":165},[159,169593,169594],{"class":161,"line":1168},[159,169595,168768],{"class":165},[159,169597,169598,169600,169602,169604,169606,169608,169611],{"class":161,"line":1174},[159,169599,168773],{"class":8765},[159,169601,189],{"class":1142},[159,169603,168778],{"class":165},[159,169605,998],{"class":8765},[159,169607,189],{"class":1142},[159,169609,169610],{"class":192},"\"销售趋势\"",[159,169612,61442],{"class":165},[159,169614,169615,169617,169619,169621,169623,169625,169627],{"class":161,"line":1180},[159,169616,168829],{"class":8765},[159,169618,189],{"class":1142},[159,169620,168834],{"class":165},[159,169622,168837],{"class":8765},[159,169624,189],{"class":1142},[159,169626,168842],{"class":192},[159,169628,61442],{"class":165},[159,169630,169631],{"class":161,"line":1194},[159,169632,1165],{"class":165},[159,169634,169635,169637,169639],{"class":161,"line":1200},[159,169636,168624],{"class":165},[159,169638,169264],{"class":192},[159,169640,1165],{"class":165},[37,169642,169644],{"id":169643},"_109-数据清洗","10.9 数据清洗",[14,169646,169647],{},"真实数据经常不整齐，需要清洗。",[14,169649,169650],{},"常见问题：",[134,169652,169653,169656,169659,169662],{},[106,169654,169655],{},"数字是字符串。",[106,169657,169658],{},"字段缺失。",[106,169660,169661],{},"空值。",[106,169663,169664],{},"日期格式不统一。",[14,169666,38698],{},[151,169668,169670],{"className":53900,"code":169669,"language":53902,"meta":25,"style":25},"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",[49,169671,169672,169681,169704,169724,169745,169749,169753,169761,169770,169774,169785,169799,169808,169813,169817,169825,169835,169839,169846],{"__ignoreMap":25},[159,169673,169674,169677,169679],{"class":161,"line":162},[159,169675,169676],{"class":165},"raw_data ",[159,169678,189],{"class":1142},[159,169680,2303],{"class":165},[159,169682,169683,169686,169688,169690,169692,169694,169697,169699,169702],{"class":161,"line":176},[159,169684,169685],{"class":165},"    {",[159,169687,169297],{"class":192},[159,169689,1486],{"class":165},[159,169691,168565],{"class":192},[159,169693,1939],{"class":165},[159,169695,169696],{"class":192},"\"sales\"",[159,169698,1486],{"class":165},[159,169700,169701],{"class":192},"\"100\"",[159,169703,28548],{"class":165},[159,169705,169706,169708,169710,169712,169714,169716,169718,169720,169722],{"class":161,"line":203},[159,169707,169685],{"class":165},[159,169709,169297],{"class":192},[159,169711,1486],{"class":165},[159,169713,168570],{"class":192},[159,169715,1939],{"class":165},[159,169717,169696],{"class":192},[159,169719,1486],{"class":165},[159,169721,552],{"class":192},[159,169723,28548],{"class":165},[159,169725,169726,169728,169730,169732,169734,169736,169738,169740,169743],{"class":161,"line":223},[159,169727,169685],{"class":165},[159,169729,169297],{"class":192},[159,169731,1486],{"class":165},[159,169733,168575],{"class":192},[159,169735,1939],{"class":165},[159,169737,169696],{"class":192},[159,169739,1486],{"class":165},[159,169741,169742],{"class":192},"\"120\"",[159,169744,28548],{"class":165},[159,169746,169747],{"class":161,"line":233},[159,169748,4634],{"class":165},[159,169750,169751],{"class":161,"line":239},[159,169752,590],{"emptyLinePlaceholder":589},[159,169754,169755,169757,169759],{"class":161,"line":245},[159,169756,169100],{"class":165},[159,169758,189],{"class":1142},[159,169760,16884],{"class":165},[159,169762,169763,169766,169768],{"class":161,"line":251},[159,169764,169765],{"class":165},"sales ",[159,169767,189],{"class":1142},[159,169769,16884],{"class":165},[159,169771,169772],{"class":161,"line":261},[159,169773,590],{"emptyLinePlaceholder":589},[159,169775,169776,169778,169780,169782],{"class":161,"line":603},[159,169777,26657],{"class":1142},[159,169779,169509],{"class":165},[159,169781,49566],{"class":1142},[159,169783,169784],{"class":165}," raw_data:\n",[159,169786,169787,169790,169792,169795,169797],{"class":161,"line":621},[159,169788,169789],{"class":165},"    value ",[159,169791,189],{"class":1142},[159,169793,169794],{"class":165}," item.get(",[159,169796,169696],{"class":192},[159,169798,1165],{"class":165},[159,169800,169801,169803,169805],{"class":161,"line":634},[159,169802,26732],{"class":1142},[159,169804,62325],{"class":1142},[159,169806,169807],{"class":165}," value:\n",[159,169809,169810],{"class":161,"line":640},[159,169811,169812],{"class":1142},"        continue\n",[159,169814,169815],{"class":161,"line":1075},[159,169816,590],{"emptyLinePlaceholder":589},[159,169818,169819,169821,169823],{"class":161,"line":1081},[159,169820,169519],{"class":165},[159,169822,169297],{"class":192},[159,169824,28275],{"class":165},[159,169826,169827,169830,169832],{"class":161,"line":1091},[159,169828,169829],{"class":165},"    sales.append(",[159,169831,23886],{"class":1146},[159,169833,169834],{"class":165},"(value))\n",[159,169836,169837],{"class":161,"line":1100},[159,169838,590],{"emptyLinePlaceholder":589},[159,169840,169841,169843],{"class":161,"line":1123},[159,169842,53937],{"class":1146},[159,169844,169845],{"class":165},"(dates)\n",[159,169847,169848,169850],{"class":161,"line":1132},[159,169849,53937],{"class":1146},[159,169851,169852],{"class":165},"(sales)\n",[37,169854,169856],{"id":169855},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[151,169858,169860],{"className":53900,"code":169859,"language":53902,"meta":25,"style":25},"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",[49,169861,169862,169876,169886,169890,169898,169919,169941,169963,169985,170007,170011,170015,170037,170058,170062,170070,170074,170078,170088,170097,170107,170123,170127,170131,170148,170164,170180,170196,170206,170210],{"__ignoreMap":25},[159,169863,169864,169866,169868,169870,169872,169874],{"class":161,"line":162},[159,169865,54258],{"class":1142},[159,169867,168679],{"class":165},[159,169869,53914],{"class":1142},[159,169871,168684],{"class":165},[159,169873,54903],{"class":1142},[159,169875,168689],{"class":165},[159,169877,169878,169880,169882,169884],{"class":161,"line":176},[159,169879,54258],{"class":1142},[159,169881,168538],{"class":165},[159,169883,53914],{"class":1142},[159,169885,168543],{"class":165},[159,169887,169888],{"class":161,"line":203},[159,169889,590],{"emptyLinePlaceholder":589},[159,169891,169892,169894,169896],{"class":161,"line":223},[159,169893,169765],{"class":165},[159,169895,189],{"class":1142},[159,169897,2303],{"class":165},[159,169899,169900,169902,169904,169906,169909,169911,169913,169915,169917],{"class":161,"line":233},[159,169901,169685],{"class":165},[159,169903,169297],{"class":192},[159,169905,1486],{"class":165},[159,169907,169908],{"class":192},"\"2024-10-01\"",[159,169910,1939],{"class":165},[159,169912,105384],{"class":192},[159,169914,1486],{"class":165},[159,169916,113323],{"class":1146},[159,169918,28548],{"class":165},[159,169920,169921,169923,169925,169927,169930,169932,169934,169936,169939],{"class":161,"line":239},[159,169922,169685],{"class":165},[159,169924,169297],{"class":192},[159,169926,1486],{"class":165},[159,169928,169929],{"class":192},"\"2024-10-02\"",[159,169931,1939],{"class":165},[159,169933,105384],{"class":192},[159,169935,1486],{"class":165},[159,169937,169938],{"class":1146},"1800",[159,169940,28548],{"class":165},[159,169942,169943,169945,169947,169949,169952,169954,169956,169958,169961],{"class":161,"line":245},[159,169944,169685],{"class":165},[159,169946,169297],{"class":192},[159,169948,1486],{"class":165},[159,169950,169951],{"class":192},"\"2024-10-03\"",[159,169953,1939],{"class":165},[159,169955,105384],{"class":192},[159,169957,1486],{"class":165},[159,169959,169960],{"class":1146},"1500",[159,169962,28548],{"class":165},[159,169964,169965,169967,169969,169971,169974,169976,169978,169980,169983],{"class":161,"line":251},[159,169966,169685],{"class":165},[159,169968,169297],{"class":192},[159,169970,1486],{"class":165},[159,169972,169973],{"class":192},"\"2024-10-04\"",[159,169975,1939],{"class":165},[159,169977,105384],{"class":192},[159,169979,1486],{"class":165},[159,169981,169982],{"class":1146},"2100",[159,169984,28548],{"class":165},[159,169986,169987,169989,169991,169993,169996,169998,170000,170002,170005],{"class":161,"line":261},[159,169988,169685],{"class":165},[159,169990,169297],{"class":192},[159,169992,1486],{"class":165},[159,169994,169995],{"class":192},"\"2024-10-05\"",[159,169997,1939],{"class":165},[159,169999,105384],{"class":192},[159,170001,1486],{"class":165},[159,170003,170004],{"class":1146},"2600",[159,170006,28548],{"class":165},[159,170008,170009],{"class":161,"line":603},[159,170010,4634],{"class":165},[159,170012,170013],{"class":161,"line":621},[159,170014,590],{"emptyLinePlaceholder":589},[159,170016,170017,170019,170021,170024,170026,170028,170030,170032,170034],{"class":161,"line":634},[159,170018,169100],{"class":165},[159,170020,189],{"class":1142},[159,170022,170023],{"class":165}," [item[",[159,170025,169297],{"class":192},[159,170027,28061],{"class":165},[159,170029,26657],{"class":1142},[159,170031,169509],{"class":165},[159,170033,49566],{"class":1142},[159,170035,170036],{"class":165}," sales]\n",[159,170038,170039,170042,170044,170046,170048,170050,170052,170054,170056],{"class":161,"line":640},[159,170040,170041],{"class":165},"amounts ",[159,170043,189],{"class":1142},[159,170045,170023],{"class":165},[159,170047,105384],{"class":192},[159,170049,28061],{"class":165},[159,170051,26657],{"class":1142},[159,170053,169509],{"class":165},[159,170055,49566],{"class":1142},[159,170057,170036],{"class":165},[159,170059,170060],{"class":161,"line":1075},[159,170061,590],{"emptyLinePlaceholder":589},[159,170063,170064,170066,170068],{"class":161,"line":1081},[159,170065,168552],{"class":165},[159,170067,189],{"class":1142},[159,170069,168557],{"class":165},[159,170071,170072],{"class":161,"line":1091},[159,170073,169141],{"class":165},[159,170075,170076],{"class":161,"line":1100},[159,170077,168949],{"class":165},[159,170079,170080,170082,170084,170086],{"class":161,"line":1123},[159,170081,168954],{"class":8765},[159,170083,189],{"class":1142},[159,170085,168595],{"class":192},[159,170087,17070],{"class":165},[159,170089,170090,170092,170094],{"class":161,"line":1132},[159,170091,168965],{"class":8765},[159,170093,189],{"class":1142},[159,170095,170096],{"class":165},"amounts,\n",[159,170098,170099,170101,170103,170105],{"class":161,"line":1139},[159,170100,168994],{"class":8765},[159,170102,189],{"class":1142},[159,170104,54995],{"class":1146},[159,170106,17070],{"class":165},[159,170108,170109,170111,170113,170115,170117,170119,170121],{"class":161,"line":1168},[159,170110,169005],{"class":8765},[159,170112,189],{"class":1142},[159,170114,169010],{"class":165},[159,170116,169013],{"class":8765},[159,170118,189],{"class":1142},[159,170120,54995],{"class":1146},[159,170122,61442],{"class":165},[159,170124,170125],{"class":161,"line":1174},[159,170126,1165],{"class":165},[159,170128,170129],{"class":161,"line":1180},[159,170130,168768],{"class":165},[159,170132,170133,170135,170137,170139,170141,170143,170146],{"class":161,"line":1194},[159,170134,168773],{"class":8765},[159,170136,189],{"class":1142},[159,170138,168778],{"class":165},[159,170140,998],{"class":8765},[159,170142,189],{"class":1142},[159,170144,170145],{"class":192},"\"每日销售额\"",[159,170147,61442],{"class":165},[159,170149,170150,170152,170154,170156,170158,170160,170162],{"class":161,"line":1200},[159,170151,168792],{"class":8765},[159,170153,189],{"class":1142},[159,170155,168797],{"class":165},[159,170157,101110],{"class":8765},[159,170159,189],{"class":1142},[159,170161,168804],{"class":192},[159,170163,61442],{"class":165},[159,170165,170166,170168,170170,170172,170174,170176,170178],{"class":161,"line":1221},[159,170167,168811],{"class":8765},[159,170169,189],{"class":1142},[159,170171,168797],{"class":165},[159,170173,101110],{"class":8765},[159,170175,189],{"class":1142},[159,170177,168822],{"class":192},[159,170179,61442],{"class":165},[159,170181,170182,170184,170186,170188,170190,170192,170194],{"class":161,"line":1230},[159,170183,168829],{"class":8765},[159,170185,189],{"class":1142},[159,170187,168834],{"class":165},[159,170189,168837],{"class":8765},[159,170191,189],{"class":1142},[159,170193,168842],{"class":192},[159,170195,61442],{"class":165},[159,170197,170198,170201,170203],{"class":161,"line":1247},[159,170199,170200],{"class":8765},"    datazoom_opts",[159,170202,189],{"class":1142},[159,170204,170205],{"class":165},"[opts.DataZoomOpts()],\n",[159,170207,170208],{"class":161,"line":1265},[159,170209,1165],{"class":165},[159,170211,170212,170214,170217],{"class":161,"line":1277},[159,170213,168624],{"class":165},[159,170215,170216],{"class":192},"\"daily_sales.html\"",[159,170218,1165],{"class":165},[14,170220,170221,170224],{},[49,170222,170223],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[37,170226,170228],{"id":170227},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,170230,170231],{},"如果数据结构如下：",[151,170233,170235],{"className":53900,"code":170234,"language":53902,"meta":25,"style":25},"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",[49,170236,170237,170245,170253,170275,170296,170301,170308,170328,170348,170352],{"__ignoreMap":25},[159,170238,170239,170241,170243],{"class":161,"line":162},[159,170240,122958],{"class":165},[159,170242,189],{"class":1142},[159,170244,1478],{"class":165},[159,170246,170247,170250],{"class":161,"line":176},[159,170248,170249],{"class":192},"    \"北京\"",[159,170251,170252],{"class":165},": [\n",[159,170254,170255,170257,170259,170261,170264,170266,170269,170271,170273],{"class":161,"line":203},[159,170256,28535],{"class":165},[159,170258,169297],{"class":192},[159,170260,1486],{"class":165},[159,170262,170263],{"class":192},"\"2024-01-01\"",[159,170265,1939],{"class":165},[159,170267,170268],{"class":192},"\"confirm\"",[159,170270,1486],{"class":165},[159,170272,1964],{"class":1146},[159,170274,28548],{"class":165},[159,170276,170277,170279,170281,170283,170286,170288,170290,170292,170294],{"class":161,"line":223},[159,170278,28535],{"class":165},[159,170280,169297],{"class":192},[159,170282,1486],{"class":165},[159,170284,170285],{"class":192},"\"2024-01-02\"",[159,170287,1939],{"class":165},[159,170289,170268],{"class":192},[159,170291,1486],{"class":165},[159,170293,7925],{"class":1146},[159,170295,28548],{"class":165},[159,170297,170298],{"class":161,"line":233},[159,170299,170300],{"class":165},"    ],\n",[159,170302,170303,170306],{"class":161,"line":239},[159,170304,170305],{"class":192},"    \"上海\"",[159,170307,170252],{"class":165},[159,170309,170310,170312,170314,170316,170318,170320,170322,170324,170326],{"class":161,"line":245},[159,170311,28535],{"class":165},[159,170313,169297],{"class":192},[159,170315,1486],{"class":165},[159,170317,170263],{"class":192},[159,170319,1939],{"class":165},[159,170321,170268],{"class":192},[159,170323,1486],{"class":165},[159,170325,24250],{"class":1146},[159,170327,28548],{"class":165},[159,170329,170330,170332,170334,170336,170338,170340,170342,170344,170346],{"class":161,"line":251},[159,170331,28535],{"class":165},[159,170333,169297],{"class":192},[159,170335,1486],{"class":165},[159,170337,170285],{"class":192},[159,170339,1939],{"class":165},[159,170341,170268],{"class":192},[159,170343,1486],{"class":165},[159,170345,19665],{"class":1146},[159,170347,28548],{"class":165},[159,170349,170350],{"class":161,"line":261},[159,170351,170300],{"class":165},[159,170353,170354],{"class":161,"line":603},[159,170355,15685],{"class":165},[14,170357,170358],{},"绘制多地区趋势：",[151,170360,170362],{"className":53900,"code":170361,"language":53902,"meta":25,"style":25},"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",[49,170363,170364,170378,170388,170392,170417,170421,170429,170433,170437,170449,170471,170484,170488,170492,170509,170525,170529],{"__ignoreMap":25},[159,170365,170366,170368,170370,170372,170374,170376],{"class":161,"line":162},[159,170367,54258],{"class":1142},[159,170369,168679],{"class":165},[159,170371,53914],{"class":1142},[159,170373,168684],{"class":165},[159,170375,54903],{"class":1142},[159,170377,168689],{"class":165},[159,170379,170380,170382,170384,170386],{"class":161,"line":176},[159,170381,54258],{"class":1142},[159,170383,168538],{"class":165},[159,170385,53914],{"class":1142},[159,170387,168543],{"class":165},[159,170389,170390],{"class":161,"line":203},[159,170391,590],{"emptyLinePlaceholder":589},[159,170393,170394,170396,170398,170400,170402,170404,170406,170408,170410,170413,170415],{"class":161,"line":223},[159,170395,169100],{"class":165},[159,170397,189],{"class":1142},[159,170399,170023],{"class":165},[159,170401,169297],{"class":192},[159,170403,28061],{"class":165},[159,170405,26657],{"class":1142},[159,170407,169509],{"class":165},[159,170409,49566],{"class":1142},[159,170411,170412],{"class":165}," data[",[159,170414,16345],{"class":192},[159,170416,98827],{"class":165},[159,170418,170419],{"class":161,"line":233},[159,170420,590],{"emptyLinePlaceholder":589},[159,170422,170423,170425,170427],{"class":161,"line":239},[159,170424,168552],{"class":165},[159,170426,189],{"class":1142},[159,170428,168557],{"class":165},[159,170430,170431],{"class":161,"line":245},[159,170432,169141],{"class":165},[159,170434,170435],{"class":161,"line":251},[159,170436,590],{"emptyLinePlaceholder":589},[159,170438,170439,170441,170444,170446],{"class":161,"line":261},[159,170440,26657],{"class":1142},[159,170442,170443],{"class":165}," city, records ",[159,170445,49566],{"class":1142},[159,170447,170448],{"class":165}," data.items():\n",[159,170450,170451,170454,170456,170458,170460,170462,170464,170466,170468],{"class":161,"line":603},[159,170452,170453],{"class":165},"    values ",[159,170455,189],{"class":1142},[159,170457,170023],{"class":165},[159,170459,170268],{"class":192},[159,170461,28061],{"class":165},[159,170463,26657],{"class":1142},[159,170465,169509],{"class":165},[159,170467,49566],{"class":1142},[159,170469,170470],{"class":165}," records]\n",[159,170472,170473,170476,170478,170480,170482],{"class":161,"line":621},[159,170474,170475],{"class":165},"    line.add_yaxis(city, values, ",[159,170477,169045],{"class":8765},[159,170479,189],{"class":1142},[159,170481,54995],{"class":1146},[159,170483,1165],{"class":165},[159,170485,170486],{"class":161,"line":634},[159,170487,590],{"emptyLinePlaceholder":589},[159,170489,170490],{"class":161,"line":640},[159,170491,168768],{"class":165},[159,170493,170494,170496,170498,170500,170502,170504,170507],{"class":161,"line":1075},[159,170495,168773],{"class":8765},[159,170497,189],{"class":1142},[159,170499,168778],{"class":165},[159,170501,998],{"class":8765},[159,170503,189],{"class":1142},[159,170505,170506],{"class":192},"\"多地区趋势图\"",[159,170508,61442],{"class":165},[159,170510,170511,170513,170515,170517,170519,170521,170523],{"class":161,"line":1081},[159,170512,168829],{"class":8765},[159,170514,189],{"class":1142},[159,170516,168834],{"class":165},[159,170518,168837],{"class":8765},[159,170520,189],{"class":1142},[159,170522,168842],{"class":192},[159,170524,61442],{"class":165},[159,170526,170527],{"class":161,"line":1091},[159,170528,1165],{"class":165},[159,170530,170531,170533,170536],{"class":161,"line":1100},[159,170532,168624],{"class":165},[159,170534,170535],{"class":192},"\"trend.html\"",[159,170537,1165],{"class":165},[14,170539,170540],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[37,170542,170544],{"id":170543},"_1012-易错点","10.12 易错点",[134,170546,170547,170553,170559,170569,170575],{},[106,170548,170549,170552],{},[49,170550,170551],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[106,170554,170555,170558],{},[49,170556,170557],{},"render()"," 生成的是 HTML，不是图片。",[106,170560,170561,170562,170565,170566,51907],{},"JSON 字符串用 ",[49,170563,170564],{},"json.loads()","，JSON 文件用 ",[49,170567,170568],{},"json.load()",[106,170570,170571,170572,51907],{},"中文 JSON 保存时加 ",[49,170573,170574],{},"ensure_ascii=False",[106,170576,170577],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[37,170579,170581],{"id":170580},"_1013-本章练习","10.13 本章练习",[134,170583,170584,170587,170590,170593,170596],{},[106,170585,170586],{},"安装 pyecharts 并生成第一个折线图。",[106,170588,170589],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[106,170591,170592],{},"绘制两条折线，对比线上和线下销售额。",[106,170594,170595],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[106,170597,170598],{},"对含有空值的销售数据进行清洗后再绘图。",[1468,170600,170601],{},"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":25,"searchDepth":176,"depth":176,"links":170603},[170604,170605,170606,170607,170608,170609,170610,170611,170612,170613,170614,170615,170616],{"id":168220,"depth":176,"text":168221},{"id":168295,"depth":176,"text":168296},{"id":168474,"depth":176,"text":168475},{"id":168525,"depth":176,"text":168526},{"id":168659,"depth":176,"text":168660},{"id":168935,"depth":176,"text":168936},{"id":169061,"depth":176,"text":169062},{"id":169272,"depth":176,"text":169273},{"id":169643,"depth":176,"text":169644},{"id":169855,"depth":176,"text":169856},{"id":170227,"depth":176,"text":170228},{"id":170543,"depth":176,"text":170544},{"id":170580,"depth":176,"text":170581},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":168212,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":170623,"title":170624,"body":170625,"description":23809,"extension":23810,"meta":172985,"navigation":589,"path":172986,"seo":172987,"stem":172988,"__hash__":172989},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":170626,"toc":172962},[170627,170630,170634,170637,170640,170716,170719,170810,170813,170817,170820,170864,170877,170881,170884,170951,170954,170958,170961,171045,171053,171057,171062,171203,171206,171217,171223,171229,171343,171347,171350,171353,171606,171609,171613,171616,171720,171723,171727,171878,171882,171889,172002,172006,172009,172115,172118,172122,172125,172156,172159,172264,172267,172271,172275,172285,172353,172357,172364,172428,172431,172435,172441,172537,172546,172550,172874,172883,172887,172915,172919,172959],[10,170628,170624],{"id":170629},"_11-面向对象基础",[37,170631,170633],{"id":170632},"_111-什么是面向对象","11.1 什么是面向对象",[14,170635,170636],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,170638,170639],{},"面向过程：",[151,170641,170643],{"className":53900,"code":170642,"language":53902,"meta":25,"style":25},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[49,170644,170645,170654,170662,170666,170676,170707,170711],{"__ignoreMap":25},[159,170646,170647,170649,170651],{"class":161,"line":162},[159,170648,167836],{"class":165},[159,170650,189],{"class":1142},[159,170652,170653],{"class":192}," \"小明\"\n",[159,170655,170656,170658,170660],{"class":161,"line":176},[159,170657,167846],{"class":165},[159,170659,189],{"class":1142},[159,170661,167851],{"class":1146},[159,170663,170664],{"class":161,"line":203},[159,170665,590],{"emptyLinePlaceholder":589},[159,170667,170668,170670,170673],{"class":161,"line":223},[159,170669,55465],{"class":1142},[159,170671,170672],{"class":185}," introduce",[159,170674,170675],{"class":165},"(name, age):\n",[159,170677,170678,170680,170682,170684,170687,170689,170691,170693,170696,170698,170700,170702,170705],{"class":161,"line":233},[159,170679,54819],{"class":1146},[159,170681,1159],{"class":165},[159,170683,23931],{"class":1142},[159,170685,170686],{"class":192},"\"我叫",[159,170688,24721],{"class":1146},[159,170690,101110],{"class":165},[159,170692,886],{"class":1146},[159,170694,170695],{"class":192},"，今年",[159,170697,24721],{"class":1146},[159,170699,17307],{"class":165},[159,170701,886],{"class":1146},[159,170703,170704],{"class":192},"岁\"",[159,170706,1165],{"class":165},[159,170708,170709],{"class":161,"line":239},[159,170710,590],{"emptyLinePlaceholder":589},[159,170712,170713],{"class":161,"line":245},[159,170714,170715],{"class":165},"introduce(name, age)\n",[14,170717,170718],{},"面向对象：",[151,170720,170722],{"className":53900,"code":170721,"language":53902,"meta":25,"style":25},"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",[49,170723,170724,170732,170740,170769,170773,170777,170787,170796,170805],{"__ignoreMap":25},[159,170725,170726,170728,170730],{"class":161,"line":162},[159,170727,38260],{"class":1142},[159,170729,31508],{"class":185},[159,170731,27364],{"class":165},[159,170733,170734,170736,170738],{"class":161,"line":176},[159,170735,54322],{"class":1142},[159,170737,170672],{"class":185},[159,170739,54328],{"class":165},[159,170741,170742,170744,170746,170748,170750,170753,170755,170757,170759,170761,170763,170765,170767],{"class":161,"line":203},[159,170743,55969],{"class":1146},[159,170745,1159],{"class":165},[159,170747,23931],{"class":1142},[159,170749,170686],{"class":192},[159,170751,170752],{"class":1146},"{self",[159,170754,101601],{"class":165},[159,170756,886],{"class":1146},[159,170758,170695],{"class":192},[159,170760,170752],{"class":1146},[159,170762,101613],{"class":165},[159,170764,886],{"class":1146},[159,170766,170704],{"class":192},[159,170768,1165],{"class":165},[159,170770,170771],{"class":161,"line":223},[159,170772,590],{"emptyLinePlaceholder":589},[159,170774,170775],{"class":161,"line":233},[159,170776,590],{"emptyLinePlaceholder":589},[159,170778,170779,170782,170784],{"class":161,"line":239},[159,170780,170781],{"class":165},"student ",[159,170783,189],{"class":1142},[159,170785,170786],{"class":165}," Student()\n",[159,170788,170789,170792,170794],{"class":161,"line":245},[159,170790,170791],{"class":165},"student.name ",[159,170793,189],{"class":1142},[159,170795,170653],{"class":192},[159,170797,170798,170801,170803],{"class":161,"line":251},[159,170799,170800],{"class":165},"student.age ",[159,170802,189],{"class":1142},[159,170804,167851],{"class":1146},[159,170806,170807],{"class":161,"line":261},[159,170808,170809],{"class":165},"student.introduce()\n",[14,170811,170812],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[37,170814,170816],{"id":170815},"_112-类和对象","11.2 类和对象",[14,170818,170819],{},"类是模板，对象是根据模板创建出来的具体实例。",[151,170821,170823],{"className":53900,"code":170822,"language":53902,"meta":25,"style":25},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[49,170824,170825,170833,170838,170842,170846,170855],{"__ignoreMap":25},[159,170826,170827,170829,170831],{"class":161,"line":162},[159,170828,38260],{"class":1142},[159,170830,31508],{"class":185},[159,170832,27364],{"class":165},[159,170834,170835],{"class":161,"line":176},[159,170836,170837],{"class":1142},"    pass\n",[159,170839,170840],{"class":161,"line":203},[159,170841,590],{"emptyLinePlaceholder":589},[159,170843,170844],{"class":161,"line":223},[159,170845,590],{"emptyLinePlaceholder":589},[159,170847,170848,170851,170853],{"class":161,"line":233},[159,170849,170850],{"class":165},"student1 ",[159,170852,189],{"class":1142},[159,170854,170786],{"class":165},[159,170856,170857,170860,170862],{"class":161,"line":239},[159,170858,170859],{"class":165},"student2 ",[159,170861,189],{"class":1142},[159,170863,170786],{"class":165},[14,170865,170866,170869,170870,122318,170873,170876],{},[49,170867,170868],{},"Student"," 是类，",[49,170871,170872],{},"student1",[49,170874,170875],{},"student2"," 是对象。",[37,170878,170880],{"id":170879},"_113-属性","11.3 属性",[14,170882,170883],{},"属性是对象保存的数据。",[151,170885,170887],{"className":53900,"code":170886,"language":53902,"meta":25,"style":25},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[49,170888,170889,170897,170901,170905,170909,170917,170925,170933,170937,170944],{"__ignoreMap":25},[159,170890,170891,170893,170895],{"class":161,"line":162},[159,170892,38260],{"class":1142},[159,170894,31508],{"class":185},[159,170896,27364],{"class":165},[159,170898,170899],{"class":161,"line":176},[159,170900,170837],{"class":1142},[159,170902,170903],{"class":161,"line":203},[159,170904,590],{"emptyLinePlaceholder":589},[159,170906,170907],{"class":161,"line":223},[159,170908,590],{"emptyLinePlaceholder":589},[159,170910,170911,170913,170915],{"class":161,"line":233},[159,170912,170781],{"class":165},[159,170914,189],{"class":1142},[159,170916,170786],{"class":165},[159,170918,170919,170921,170923],{"class":161,"line":239},[159,170920,170791],{"class":165},[159,170922,189],{"class":1142},[159,170924,170653],{"class":192},[159,170926,170927,170929,170931],{"class":161,"line":245},[159,170928,170800],{"class":165},[159,170930,189],{"class":1142},[159,170932,167851],{"class":1146},[159,170934,170935],{"class":161,"line":251},[159,170936,590],{"emptyLinePlaceholder":589},[159,170938,170939,170941],{"class":161,"line":261},[159,170940,53937],{"class":1146},[159,170942,170943],{"class":165},"(student.name)\n",[159,170945,170946,170948],{"class":161,"line":603},[159,170947,53937],{"class":1146},[159,170949,170950],{"class":165},"(student.age)\n",[14,170952,170953],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[37,170955,170957],{"id":170956},"_114-方法","11.4 方法",[14,170959,170960],{},"类中的函数叫方法。",[151,170962,170963],{"className":53900,"code":170721,"language":53902,"meta":25,"style":25},[49,170964,170965,170973,170981,171009,171013,171017,171025,171033,171041],{"__ignoreMap":25},[159,170966,170967,170969,170971],{"class":161,"line":162},[159,170968,38260],{"class":1142},[159,170970,31508],{"class":185},[159,170972,27364],{"class":165},[159,170974,170975,170977,170979],{"class":161,"line":176},[159,170976,54322],{"class":1142},[159,170978,170672],{"class":185},[159,170980,54328],{"class":165},[159,170982,170983,170985,170987,170989,170991,170993,170995,170997,170999,171001,171003,171005,171007],{"class":161,"line":203},[159,170984,55969],{"class":1146},[159,170986,1159],{"class":165},[159,170988,23931],{"class":1142},[159,170990,170686],{"class":192},[159,170992,170752],{"class":1146},[159,170994,101601],{"class":165},[159,170996,886],{"class":1146},[159,170998,170695],{"class":192},[159,171000,170752],{"class":1146},[159,171002,101613],{"class":165},[159,171004,886],{"class":1146},[159,171006,170704],{"class":192},[159,171008,1165],{"class":165},[159,171010,171011],{"class":161,"line":223},[159,171012,590],{"emptyLinePlaceholder":589},[159,171014,171015],{"class":161,"line":233},[159,171016,590],{"emptyLinePlaceholder":589},[159,171018,171019,171021,171023],{"class":161,"line":239},[159,171020,170781],{"class":165},[159,171022,189],{"class":1142},[159,171024,170786],{"class":165},[159,171026,171027,171029,171031],{"class":161,"line":245},[159,171028,170791],{"class":165},[159,171030,189],{"class":1142},[159,171032,170653],{"class":192},[159,171034,171035,171037,171039],{"class":161,"line":251},[159,171036,170800],{"class":165},[159,171038,189],{"class":1142},[159,171040,167851],{"class":1146},[159,171042,171043],{"class":161,"line":261},[159,171044,170809],{"class":165},[14,171046,171047,171049,171050,171052],{},[49,171048,54344],{}," 表示当前对象。调用方法时不需要手动传入 ",[49,171051,54344],{},"，Python 会自动传。",[37,171054,171056],{"id":171055},"_115-构造方法__init__","11.5 构造方法__init__",[14,171058,171059,171061],{},[49,171060,54349],{}," 在对象创建时自动执行，用于初始化属性。",[151,171063,171065],{"className":53900,"code":171064,"language":53902,"meta":25,"style":25},"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",[49,171066,171067,171075,171084,171096,171108,171119,171123,171131,171169,171173,171177,171199],{"__ignoreMap":25},[159,171068,171069,171071,171073],{"class":161,"line":162},[159,171070,38260],{"class":1142},[159,171072,31508],{"class":185},[159,171074,27364],{"class":165},[159,171076,171077,171079,171081],{"class":161,"line":176},[159,171078,54322],{"class":1142},[159,171080,54325],{"class":1146},[159,171082,171083],{"class":165},"(self, name, age, score):\n",[159,171085,171086,171088,171091,171093],{"class":161,"line":203},[159,171087,54365],{"class":1146},[159,171089,171090],{"class":165},".name ",[159,171092,189],{"class":1142},[159,171094,171095],{"class":165}," name\n",[159,171097,171098,171100,171103,171105],{"class":161,"line":223},[159,171099,54365],{"class":1146},[159,171101,171102],{"class":165},".age ",[159,171104,189],{"class":1142},[159,171106,171107],{"class":165}," age\n",[159,171109,171110,171112,171115,171117],{"class":161,"line":233},[159,171111,54365],{"class":1146},[159,171113,171114],{"class":165},".score ",[159,171116,189],{"class":1142},[159,171118,25254],{"class":165},[159,171120,171121],{"class":161,"line":239},[159,171122,590],{"emptyLinePlaceholder":589},[159,171124,171125,171127,171129],{"class":161,"line":245},[159,171126,54322],{"class":1142},[159,171128,170672],{"class":185},[159,171130,54328],{"class":165},[159,171132,171133,171135,171137,171139,171141,171143,171145,171147,171149,171151,171153,171155,171158,171160,171163,171165,171167],{"class":161,"line":251},[159,171134,55969],{"class":1146},[159,171136,1159],{"class":165},[159,171138,23931],{"class":1142},[159,171140,170686],{"class":192},[159,171142,170752],{"class":1146},[159,171144,101601],{"class":165},[159,171146,886],{"class":1146},[159,171148,170695],{"class":192},[159,171150,170752],{"class":1146},[159,171152,101613],{"class":165},[159,171154,886],{"class":1146},[159,171156,171157],{"class":192},"岁，成绩",[159,171159,170752],{"class":1146},[159,171161,171162],{"class":165},".score",[159,171164,886],{"class":1146},[159,171166,24115],{"class":192},[159,171168,1165],{"class":165},[159,171170,171171],{"class":161,"line":261},[159,171172,590],{"emptyLinePlaceholder":589},[159,171174,171175],{"class":161,"line":603},[159,171176,590],{"emptyLinePlaceholder":589},[159,171178,171179,171181,171183,171186,171189,171191,171193,171195,171197],{"class":161,"line":621},[159,171180,170781],{"class":165},[159,171182,189],{"class":1142},[159,171184,171185],{"class":165}," Student(",[159,171187,171188],{"class":192},"\"小明\"",[159,171190,1939],{"class":165},[159,171192,18723],{"class":1146},[159,171194,1939],{"class":165},[159,171196,24804],{"class":1146},[159,171198,1165],{"class":165},[159,171200,171201],{"class":161,"line":634},[159,171202,170809],{"class":165},[14,171204,171205],{},"构造方法的好处：",[134,171207,171208,171211,171214],{},[106,171209,171210],{},"创建对象时必须提供必要数据。",[106,171212,171213],{},"属性初始化集中，不容易漏。",[106,171215,171216],{},"对象状态更完整。",[37,171218,171220,171221],{"id":171219},"_116-str","11.6 ",[61,171222,24983],{},[14,171224,171225,171226,51907],{},"直接打印对象时，默认输出不直观。可以定义 ",[49,171227,171228],{},"__str__",[151,171230,171232],{"className":53900,"code":171231,"language":53902,"meta":25,"style":25},"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",[49,171233,171234,171242,171251,171261,171271,171275,171284,171312,171316,171320,171336],{"__ignoreMap":25},[159,171235,171236,171238,171240],{"class":161,"line":162},[159,171237,38260],{"class":1142},[159,171239,31508],{"class":185},[159,171241,27364],{"class":165},[159,171243,171244,171246,171248],{"class":161,"line":176},[159,171245,54322],{"class":1142},[159,171247,54325],{"class":1146},[159,171249,171250],{"class":165},"(self, name, age):\n",[159,171252,171253,171255,171257,171259],{"class":161,"line":203},[159,171254,54365],{"class":1146},[159,171256,171090],{"class":165},[159,171258,189],{"class":1142},[159,171260,171095],{"class":165},[159,171262,171263,171265,171267,171269],{"class":161,"line":223},[159,171264,54365],{"class":1146},[159,171266,171102],{"class":165},[159,171268,189],{"class":1142},[159,171270,171107],{"class":165},[159,171272,171273],{"class":161,"line":233},[159,171274,590],{"emptyLinePlaceholder":589},[159,171276,171277,171279,171282],{"class":161,"line":239},[159,171278,54322],{"class":1142},[159,171280,171281],{"class":1146}," __str__",[159,171283,54328],{"class":165},[159,171285,171286,171288,171291,171294,171296,171298,171300,171303,171305,171307,171309],{"class":161,"line":245},[159,171287,21176],{"class":1142},[159,171289,171290],{"class":1142}," f",[159,171292,171293],{"class":192},"\"Student(name=",[159,171295,170752],{"class":1146},[159,171297,101601],{"class":165},[159,171299,886],{"class":1146},[159,171301,171302],{"class":192},", age=",[159,171304,170752],{"class":1146},[159,171306,101613],{"class":165},[159,171308,886],{"class":1146},[159,171310,171311],{"class":192},")\"\n",[159,171313,171314],{"class":161,"line":251},[159,171315,590],{"emptyLinePlaceholder":589},[159,171317,171318],{"class":161,"line":261},[159,171319,590],{"emptyLinePlaceholder":589},[159,171321,171322,171324,171326,171328,171330,171332,171334],{"class":161,"line":603},[159,171323,170781],{"class":165},[159,171325,189],{"class":1142},[159,171327,171185],{"class":165},[159,171329,171188],{"class":192},[159,171331,1939],{"class":165},[159,171333,18723],{"class":1146},[159,171335,1165],{"class":165},[159,171337,171338,171340],{"class":161,"line":621},[159,171339,53937],{"class":1146},[159,171341,171342],{"class":165},"(student)\n",[37,171344,171346],{"id":171345},"_117-封装","11.7 封装",[14,171348,171349],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,171351,171352],{},"Python 中以双下划线开头的属性通常视为私有属性。",[151,171354,171356],{"className":53900,"code":171355,"language":53902,"meta":25,"style":25},"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",[49,171357,171358,171367,171376,171388,171400,171404,171413,171422,171426,171436,171449,171460,171465,171476,171480,171489,171501,171512,171516,171529,171540,171544,171555,171559,171563,171581,171590,171599],{"__ignoreMap":25},[159,171359,171360,171362,171365],{"class":161,"line":162},[159,171361,38260],{"class":1142},[159,171363,171364],{"class":185}," Account",[159,171366,27364],{"class":165},[159,171368,171369,171371,171373],{"class":161,"line":176},[159,171370,54322],{"class":1142},[159,171372,54325],{"class":1146},[159,171374,171375],{"class":165},"(self, owner, balance):\n",[159,171377,171378,171380,171383,171385],{"class":161,"line":203},[159,171379,54365],{"class":1146},[159,171381,171382],{"class":165},".owner ",[159,171384,189],{"class":1142},[159,171386,171387],{"class":165}," owner\n",[159,171389,171390,171392,171395,171397],{"class":161,"line":223},[159,171391,54365],{"class":1146},[159,171393,171394],{"class":165},".__balance ",[159,171396,189],{"class":1142},[159,171398,171399],{"class":165}," balance\n",[159,171401,171402],{"class":161,"line":233},[159,171403,590],{"emptyLinePlaceholder":589},[159,171405,171406,171408,171411],{"class":161,"line":239},[159,171407,54322],{"class":1142},[159,171409,171410],{"class":185}," get_balance",[159,171412,54328],{"class":165},[159,171414,171415,171417,171419],{"class":161,"line":245},[159,171416,21176],{"class":1142},[159,171418,62268],{"class":1146},[159,171420,171421],{"class":165},".__balance\n",[159,171423,171424],{"class":161,"line":251},[159,171425,590],{"emptyLinePlaceholder":589},[159,171427,171428,171430,171433],{"class":161,"line":261},[159,171429,54322],{"class":1142},[159,171431,171432],{"class":185}," deposit",[159,171434,171435],{"class":165},"(self, money):\n",[159,171437,171438,171440,171443,171445,171447],{"class":161,"line":603},[159,171439,17003],{"class":1142},[159,171441,171442],{"class":165}," money ",[159,171444,25263],{"class":1142},[159,171446,1259],{"class":1146},[159,171448,27364],{"class":165},[159,171450,171451,171453,171455,171458],{"class":161,"line":621},[159,171452,58045],{"class":1146},[159,171454,1159],{"class":165},[159,171456,171457],{"class":192},"\"存款金额必须大于0\"",[159,171459,1165],{"class":165},[159,171461,171462],{"class":161,"line":634},[159,171463,171464],{"class":1142},"            return\n",[159,171466,171467,171469,171471,171473],{"class":161,"line":640},[159,171468,54365],{"class":1146},[159,171470,171394],{"class":165},[159,171472,33073],{"class":1142},[159,171474,171475],{"class":165}," money\n",[159,171477,171478],{"class":161,"line":1075},[159,171479,590],{"emptyLinePlaceholder":589},[159,171481,171482,171484,171487],{"class":161,"line":1081},[159,171483,54322],{"class":1142},[159,171485,171486],{"class":185}," withdraw",[159,171488,171435],{"class":165},[159,171490,171491,171493,171495,171497,171499],{"class":161,"line":1091},[159,171492,17003],{"class":1142},[159,171494,171442],{"class":165},[159,171496,25263],{"class":1142},[159,171498,1259],{"class":1146},[159,171500,27364],{"class":165},[159,171502,171503,171505,171507,171510],{"class":161,"line":1100},[159,171504,58045],{"class":1146},[159,171506,1159],{"class":165},[159,171508,171509],{"class":192},"\"取款金额必须大于0\"",[159,171511,1165],{"class":165},[159,171513,171514],{"class":161,"line":1123},[159,171515,171464],{"class":1142},[159,171517,171518,171520,171522,171524,171526],{"class":161,"line":1132},[159,171519,17003],{"class":1142},[159,171521,171442],{"class":165},[159,171523,6760],{"class":1142},[159,171525,62268],{"class":1146},[159,171527,171528],{"class":165},".__balance:\n",[159,171530,171531,171533,171535,171538],{"class":161,"line":1139},[159,171532,58045],{"class":1146},[159,171534,1159],{"class":165},[159,171536,171537],{"class":192},"\"余额不足\"",[159,171539,1165],{"class":165},[159,171541,171542],{"class":161,"line":1168},[159,171543,171464],{"class":1142},[159,171545,171546,171548,171550,171553],{"class":161,"line":1174},[159,171547,54365],{"class":1146},[159,171549,171394],{"class":165},[159,171551,171552],{"class":1142},"-=",[159,171554,171475],{"class":165},[159,171556,171557],{"class":161,"line":1180},[159,171558,590],{"emptyLinePlaceholder":589},[159,171560,171561],{"class":161,"line":1194},[159,171562,590],{"emptyLinePlaceholder":589},[159,171564,171565,171568,171570,171573,171575,171577,171579],{"class":161,"line":1200},[159,171566,171567],{"class":165},"account ",[159,171569,189],{"class":1142},[159,171571,171572],{"class":165}," Account(",[159,171574,171188],{"class":192},[159,171576,1939],{"class":165},[159,171578,1317],{"class":1146},[159,171580,1165],{"class":165},[159,171582,171583,171586,171588],{"class":161,"line":1221},[159,171584,171585],{"class":165},"account.deposit(",[159,171587,13303],{"class":1146},[159,171589,1165],{"class":165},[159,171591,171592,171595,171597],{"class":161,"line":1230},[159,171593,171594],{"class":165},"account.withdraw(",[159,171596,1596],{"class":1146},[159,171598,1165],{"class":165},[159,171600,171601,171603],{"class":161,"line":1247},[159,171602,53937],{"class":1146},[159,171604,171605],{"class":165},"(account.get_balance())\n",[14,171607,171608],{},"封装的意义是避免外部随意修改内部状态。",[37,171610,171612],{"id":171611},"_118-继承","11.8 继承",[14,171614,171615],{},"继承可以让子类复用父类的属性和方法。",[151,171617,171619],{"className":53900,"code":171618,"language":53902,"meta":25,"style":25},"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",[49,171620,171621,171630,171639,171650,171654,171658,171672,171681,171692,171696,171700,171710,171715],{"__ignoreMap":25},[159,171622,171623,171625,171628],{"class":161,"line":162},[159,171624,38260],{"class":1142},[159,171626,171627],{"class":185}," Animal",[159,171629,27364],{"class":165},[159,171631,171632,171634,171637],{"class":161,"line":176},[159,171633,54322],{"class":1142},[159,171635,171636],{"class":185}," eat",[159,171638,54328],{"class":165},[159,171640,171641,171643,171645,171648],{"class":161,"line":203},[159,171642,55969],{"class":1146},[159,171644,1159],{"class":165},[159,171646,171647],{"class":192},"\"吃东西\"",[159,171649,1165],{"class":165},[159,171651,171652],{"class":161,"line":223},[159,171653,590],{"emptyLinePlaceholder":589},[159,171655,171656],{"class":161,"line":233},[159,171657,590],{"emptyLinePlaceholder":589},[159,171659,171660,171662,171665,171667,171670],{"class":161,"line":239},[159,171661,38260],{"class":1142},[159,171663,171664],{"class":185}," Dog",[159,171666,1159],{"class":165},[159,171668,171669],{"class":185},"Animal",[159,171671,54307],{"class":165},[159,171673,171674,171676,171679],{"class":161,"line":245},[159,171675,54322],{"class":1142},[159,171677,171678],{"class":185}," bark",[159,171680,54328],{"class":165},[159,171682,171683,171685,171687,171690],{"class":161,"line":251},[159,171684,55969],{"class":1146},[159,171686,1159],{"class":165},[159,171688,171689],{"class":192},"\"汪汪\"",[159,171691,1165],{"class":165},[159,171693,171694],{"class":161,"line":261},[159,171695,590],{"emptyLinePlaceholder":589},[159,171697,171698],{"class":161,"line":603},[159,171699,590],{"emptyLinePlaceholder":589},[159,171701,171702,171705,171707],{"class":161,"line":621},[159,171703,171704],{"class":165},"dog ",[159,171706,189],{"class":1142},[159,171708,171709],{"class":165}," Dog()\n",[159,171711,171712],{"class":161,"line":634},[159,171713,171714],{"class":165},"dog.eat()\n",[159,171716,171717],{"class":161,"line":640},[159,171718,171719],{"class":165},"dog.bark()\n",[14,171721,171722],{},"子类可以扩展新方法，也可以重写父类方法。",[37,171724,171726],{"id":171725},"_119-方法重写","11.9 方法重写",[151,171728,171730],{"className":53900,"code":171729,"language":53902,"meta":25,"style":25},"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",[49,171731,171732,171740,171749,171760,171764,171768,171780,171788,171798,171802,171806,171819,171827,171838,171842,171846,171854,171864,171868,171873],{"__ignoreMap":25},[159,171733,171734,171736,171738],{"class":161,"line":162},[159,171735,38260],{"class":1142},[159,171737,171627],{"class":185},[159,171739,27364],{"class":165},[159,171741,171742,171744,171747],{"class":161,"line":176},[159,171743,54322],{"class":1142},[159,171745,171746],{"class":185}," speak",[159,171748,54328],{"class":165},[159,171750,171751,171753,171755,171758],{"class":161,"line":203},[159,171752,55969],{"class":1146},[159,171754,1159],{"class":165},[159,171756,171757],{"class":192},"\"动物叫\"",[159,171759,1165],{"class":165},[159,171761,171762],{"class":161,"line":223},[159,171763,590],{"emptyLinePlaceholder":589},[159,171765,171766],{"class":161,"line":233},[159,171767,590],{"emptyLinePlaceholder":589},[159,171769,171770,171772,171774,171776,171778],{"class":161,"line":239},[159,171771,38260],{"class":1142},[159,171773,171664],{"class":185},[159,171775,1159],{"class":165},[159,171777,171669],{"class":185},[159,171779,54307],{"class":165},[159,171781,171782,171784,171786],{"class":161,"line":245},[159,171783,54322],{"class":1142},[159,171785,171746],{"class":185},[159,171787,54328],{"class":165},[159,171789,171790,171792,171794,171796],{"class":161,"line":251},[159,171791,55969],{"class":1146},[159,171793,1159],{"class":165},[159,171795,171689],{"class":192},[159,171797,1165],{"class":165},[159,171799,171800],{"class":161,"line":261},[159,171801,590],{"emptyLinePlaceholder":589},[159,171803,171804],{"class":161,"line":603},[159,171805,590],{"emptyLinePlaceholder":589},[159,171807,171808,171810,171813,171815,171817],{"class":161,"line":621},[159,171809,38260],{"class":1142},[159,171811,171812],{"class":185}," Cat",[159,171814,1159],{"class":165},[159,171816,171669],{"class":185},[159,171818,54307],{"class":165},[159,171820,171821,171823,171825],{"class":161,"line":634},[159,171822,54322],{"class":1142},[159,171824,171746],{"class":185},[159,171826,54328],{"class":165},[159,171828,171829,171831,171833,171836],{"class":161,"line":640},[159,171830,55969],{"class":1146},[159,171832,1159],{"class":165},[159,171834,171835],{"class":192},"\"喵喵\"",[159,171837,1165],{"class":165},[159,171839,171840],{"class":161,"line":1075},[159,171841,590],{"emptyLinePlaceholder":589},[159,171843,171844],{"class":161,"line":1081},[159,171845,590],{"emptyLinePlaceholder":589},[159,171847,171848,171850,171852],{"class":161,"line":1091},[159,171849,171704],{"class":165},[159,171851,189],{"class":1142},[159,171853,171709],{"class":165},[159,171855,171856,171859,171861],{"class":161,"line":1100},[159,171857,171858],{"class":165},"cat ",[159,171860,189],{"class":1142},[159,171862,171863],{"class":165}," Cat()\n",[159,171865,171866],{"class":161,"line":1123},[159,171867,590],{"emptyLinePlaceholder":589},[159,171869,171870],{"class":161,"line":1132},[159,171871,171872],{"class":165},"dog.speak()\n",[159,171874,171875],{"class":161,"line":1139},[159,171876,171877],{"class":165},"cat.speak()\n",[37,171879,171881],{"id":171880},"_1110-super","11.10 super",[14,171883,171884,171885,171888],{},"子类可以通过 ",[49,171886,171887],{},"super()"," 调用父类方法。",[151,171890,171892],{"className":53900,"code":171891,"language":53902,"meta":25,"style":25},"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",[49,171893,171894,171902,171911,171921,171925,171929,171941,171950,171961,171971,171975,171979,171995],{"__ignoreMap":25},[159,171895,171896,171898,171900],{"class":161,"line":162},[159,171897,38260],{"class":1142},[159,171899,39132],{"class":185},[159,171901,27364],{"class":165},[159,171903,171904,171906,171908],{"class":161,"line":176},[159,171905,54322],{"class":1142},[159,171907,54325],{"class":1146},[159,171909,171910],{"class":165},"(self, name):\n",[159,171912,171913,171915,171917,171919],{"class":161,"line":203},[159,171914,54365],{"class":1146},[159,171916,171090],{"class":165},[159,171918,189],{"class":1142},[159,171920,171095],{"class":165},[159,171922,171923],{"class":161,"line":223},[159,171924,590],{"emptyLinePlaceholder":589},[159,171926,171927],{"class":161,"line":233},[159,171928,590],{"emptyLinePlaceholder":589},[159,171930,171931,171933,171935,171937,171939],{"class":161,"line":239},[159,171932,38260],{"class":1142},[159,171934,31508],{"class":185},[159,171936,1159],{"class":165},[159,171938,42573],{"class":185},[159,171940,54307],{"class":165},[159,171942,171943,171945,171947],{"class":161,"line":245},[159,171944,54322],{"class":1142},[159,171946,54325],{"class":1146},[159,171948,171949],{"class":165},"(self, name, score):\n",[159,171951,171952,171954,171956,171958],{"class":161,"line":251},[159,171953,54338],{"class":1146},[159,171955,40788],{"class":165},[159,171957,54349],{"class":1146},[159,171959,171960],{"class":165},"(name)\n",[159,171962,171963,171965,171967,171969],{"class":161,"line":261},[159,171964,54365],{"class":1146},[159,171966,171114],{"class":165},[159,171968,189],{"class":1142},[159,171970,25254],{"class":165},[159,171972,171973],{"class":161,"line":603},[159,171974,590],{"emptyLinePlaceholder":589},[159,171976,171977],{"class":161,"line":621},[159,171978,590],{"emptyLinePlaceholder":589},[159,171980,171981,171983,171985,171987,171989,171991,171993],{"class":161,"line":634},[159,171982,170781],{"class":165},[159,171984,189],{"class":1142},[159,171986,171185],{"class":165},[159,171988,171188],{"class":192},[159,171990,1939],{"class":165},[159,171992,24804],{"class":1146},[159,171994,1165],{"class":165},[159,171996,171997,171999],{"class":161,"line":640},[159,171998,53937],{"class":1146},[159,172000,172001],{"class":165},"(student.name, student.score)\n",[37,172003,172005],{"id":172004},"_1111-多态","11.11 多态",[14,172007,172008],{},"多态指不同对象响应同一个方法，表现出不同结果。",[151,172010,172012],{"className":53900,"code":172011,"language":53902,"meta":25,"style":25},"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",[49,172013,172014,172022,172030,172040,172044,172048,172056,172064,172074,172078,172082,172092,172097,172101,172105,172110],{"__ignoreMap":25},[159,172015,172016,172018,172020],{"class":161,"line":162},[159,172017,38260],{"class":1142},[159,172019,171664],{"class":185},[159,172021,27364],{"class":165},[159,172023,172024,172026,172028],{"class":161,"line":176},[159,172025,54322],{"class":1142},[159,172027,171746],{"class":185},[159,172029,54328],{"class":165},[159,172031,172032,172034,172036,172038],{"class":161,"line":203},[159,172033,55969],{"class":1146},[159,172035,1159],{"class":165},[159,172037,171689],{"class":192},[159,172039,1165],{"class":165},[159,172041,172042],{"class":161,"line":223},[159,172043,590],{"emptyLinePlaceholder":589},[159,172045,172046],{"class":161,"line":233},[159,172047,590],{"emptyLinePlaceholder":589},[159,172049,172050,172052,172054],{"class":161,"line":239},[159,172051,38260],{"class":1142},[159,172053,171812],{"class":185},[159,172055,27364],{"class":165},[159,172057,172058,172060,172062],{"class":161,"line":245},[159,172059,54322],{"class":1142},[159,172061,171746],{"class":185},[159,172063,54328],{"class":165},[159,172065,172066,172068,172070,172072],{"class":161,"line":251},[159,172067,55969],{"class":1146},[159,172069,1159],{"class":165},[159,172071,171835],{"class":192},[159,172073,1165],{"class":165},[159,172075,172076],{"class":161,"line":261},[159,172077,590],{"emptyLinePlaceholder":589},[159,172079,172080],{"class":161,"line":603},[159,172081,590],{"emptyLinePlaceholder":589},[159,172083,172084,172086,172089],{"class":161,"line":621},[159,172085,55465],{"class":1142},[159,172087,172088],{"class":185}," make_sound",[159,172090,172091],{"class":165},"(animal):\n",[159,172093,172094],{"class":161,"line":634},[159,172095,172096],{"class":165},"    animal.speak()\n",[159,172098,172099],{"class":161,"line":640},[159,172100,590],{"emptyLinePlaceholder":589},[159,172102,172103],{"class":161,"line":1075},[159,172104,590],{"emptyLinePlaceholder":589},[159,172106,172107],{"class":161,"line":1081},[159,172108,172109],{"class":165},"make_sound(Dog())\n",[159,172111,172112],{"class":161,"line":1091},[159,172113,172114],{"class":165},"make_sound(Cat())\n",[14,172116,172117],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[37,172119,172121],{"id":172120},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,172123,172124],{},"实例属性属于对象：",[151,172126,172128],{"className":53900,"code":172127,"language":53902,"meta":25,"style":25},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[49,172129,172130,172138,172146],{"__ignoreMap":25},[159,172131,172132,172134,172136],{"class":161,"line":162},[159,172133,38260],{"class":1142},[159,172135,31508],{"class":185},[159,172137,27364],{"class":165},[159,172139,172140,172142,172144],{"class":161,"line":176},[159,172141,54322],{"class":1142},[159,172143,54325],{"class":1146},[159,172145,171910],{"class":165},[159,172147,172148,172150,172152,172154],{"class":161,"line":203},[159,172149,54365],{"class":1146},[159,172151,171090],{"class":165},[159,172153,189],{"class":1142},[159,172155,171095],{"class":165},[14,172157,172158],{},"类属性属于类，所有对象共享：",[151,172160,172162],{"className":53900,"code":172161,"language":53902,"meta":25,"style":25},"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",[49,172163,172164,172172,172182,172186,172194,172204,172208,172212,172225,172239,172243,172250,172257],{"__ignoreMap":25},[159,172165,172166,172168,172170],{"class":161,"line":162},[159,172167,38260],{"class":1142},[159,172169,31508],{"class":185},[159,172171,27364],{"class":165},[159,172173,172174,172177,172179],{"class":161,"line":176},[159,172175,172176],{"class":165},"    school ",[159,172178,189],{"class":1142},[159,172180,172181],{"class":192}," \"黑马学校\"\n",[159,172183,172184],{"class":161,"line":203},[159,172185,590],{"emptyLinePlaceholder":589},[159,172187,172188,172190,172192],{"class":161,"line":223},[159,172189,54322],{"class":1142},[159,172191,54325],{"class":1146},[159,172193,171910],{"class":165},[159,172195,172196,172198,172200,172202],{"class":161,"line":233},[159,172197,54365],{"class":1146},[159,172199,171090],{"class":165},[159,172201,189],{"class":1142},[159,172203,171095],{"class":165},[159,172205,172206],{"class":161,"line":239},[159,172207,590],{"emptyLinePlaceholder":589},[159,172209,172210],{"class":161,"line":245},[159,172211,590],{"emptyLinePlaceholder":589},[159,172213,172214,172217,172219,172221,172223],{"class":161,"line":251},[159,172215,172216],{"class":165},"s1 ",[159,172218,189],{"class":1142},[159,172220,171185],{"class":165},[159,172222,171188],{"class":192},[159,172224,1165],{"class":165},[159,172226,172227,172230,172232,172234,172237],{"class":161,"line":261},[159,172228,172229],{"class":165},"s2 ",[159,172231,189],{"class":1142},[159,172233,171185],{"class":165},[159,172235,172236],{"class":192},"\"小红\"",[159,172238,1165],{"class":165},[159,172240,172241],{"class":161,"line":603},[159,172242,590],{"emptyLinePlaceholder":589},[159,172244,172245,172247],{"class":161,"line":621},[159,172246,53937],{"class":1146},[159,172248,172249],{"class":165},"(s1.school)\n",[159,172251,172252,172254],{"class":161,"line":634},[159,172253,53937],{"class":1146},[159,172255,172256],{"class":165},"(s2.school)\n",[159,172258,172259,172261],{"class":161,"line":640},[159,172260,53937],{"class":1146},[159,172262,172263],{"class":165},"(Student.school)\n",[14,172265,172266],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[37,172268,172270],{"id":172269},"_1113-类方法和静态方法","11.13 类方法和静态方法",[42,172272,172274],{"id":172273},"_11131-类方法","11.13.1 类方法",[14,172276,172277,172278,172281,172282,51907],{},"类方法使用 ",[49,172279,172280],{},"@classmethod","，第一个参数通常是 ",[49,172283,172284],{},"cls",[151,172286,172288],{"className":53900,"code":172287,"language":53902,"meta":25,"style":25},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[49,172289,172290,172298,172306,172310,172318,172328,172338,172342,172346],{"__ignoreMap":25},[159,172291,172292,172294,172296],{"class":161,"line":162},[159,172293,38260],{"class":1142},[159,172295,31508],{"class":185},[159,172297,27364],{"class":165},[159,172299,172300,172302,172304],{"class":161,"line":176},[159,172301,172176],{"class":165},[159,172303,189],{"class":1142},[159,172305,172181],{"class":192},[159,172307,172308],{"class":161,"line":203},[159,172309,590],{"emptyLinePlaceholder":589},[159,172311,172312,172315],{"class":161,"line":223},[159,172313,172314],{"class":185},"    @",[159,172316,172317],{"class":1146},"classmethod\n",[159,172319,172320,172322,172325],{"class":161,"line":233},[159,172321,54322],{"class":1142},[159,172323,172324],{"class":185}," get_school",[159,172326,172327],{"class":165},"(cls):\n",[159,172329,172330,172332,172335],{"class":161,"line":239},[159,172331,21176],{"class":1142},[159,172333,172334],{"class":1146}," cls",[159,172336,172337],{"class":165},".school\n",[159,172339,172340],{"class":161,"line":245},[159,172341,590],{"emptyLinePlaceholder":589},[159,172343,172344],{"class":161,"line":251},[159,172345,590],{"emptyLinePlaceholder":589},[159,172347,172348,172350],{"class":161,"line":261},[159,172349,53937],{"class":1146},[159,172351,172352],{"class":165},"(Student.get_school())\n",[42,172354,172356],{"id":172355},"_11132-静态方法","11.13.2 静态方法",[14,172358,172359,172360,172363],{},"静态方法使用 ",[49,172361,172362],{},"@staticmethod","，不需要访问实例和类。",[151,172365,172367],{"className":53900,"code":172366,"language":53902,"meta":25,"style":25},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[49,172368,172369,172378,172385,172394,172405,172409,172413],{"__ignoreMap":25},[159,172370,172371,172373,172376],{"class":161,"line":162},[159,172372,38260],{"class":1142},[159,172374,172375],{"class":185}," MathUtils",[159,172377,27364],{"class":165},[159,172379,172380,172382],{"class":161,"line":176},[159,172381,172314],{"class":185},[159,172383,172384],{"class":1146},"staticmethod\n",[159,172386,172387,172389,172391],{"class":161,"line":203},[159,172388,54322],{"class":1142},[159,172390,28826],{"class":185},[159,172392,172393],{"class":165},"(a, b):\n",[159,172395,172396,172398,172400,172402],{"class":161,"line":223},[159,172397,21176],{"class":1142},[159,172399,34443],{"class":165},[159,172401,2704],{"class":1142},[159,172403,172404],{"class":165}," b\n",[159,172406,172407],{"class":161,"line":233},[159,172408,590],{"emptyLinePlaceholder":589},[159,172410,172411],{"class":161,"line":239},[159,172412,590],{"emptyLinePlaceholder":589},[159,172414,172415,172417,172420,172422,172424,172426],{"class":161,"line":245},[159,172416,53937],{"class":1146},[159,172418,172419],{"class":165},"(MathUtils.add(",[159,172421,4932],{"class":1146},[159,172423,1939],{"class":165},[159,172425,11034],{"class":1146},[159,172427,18787],{"class":165},[14,172429,172430],{},"静态方法本质上是放在类命名空间里的普通函数。",[37,172432,172434],{"id":172433},"_1114-dataclass","11.14 dataclass",[14,172436,172437,172440],{},[49,172438,172439],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[151,172442,172444],{"className":53900,"code":172443,"language":53902,"meta":25,"style":25},"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",[49,172445,172446,172458,172462,172466,172471,172479,172487,172495,172503,172507,172511,172531],{"__ignoreMap":25},[159,172447,172448,172450,172453,172455],{"class":161,"line":162},[159,172449,54258],{"class":1142},[159,172451,172452],{"class":165}," dataclasses ",[159,172454,53914],{"class":1142},[159,172456,172457],{"class":165}," dataclass\n",[159,172459,172460],{"class":161,"line":176},[159,172461,590],{"emptyLinePlaceholder":589},[159,172463,172464],{"class":161,"line":203},[159,172465,590],{"emptyLinePlaceholder":589},[159,172467,172468],{"class":161,"line":223},[159,172469,172470],{"class":185},"@dataclass\n",[159,172472,172473,172475,172477],{"class":161,"line":233},[159,172474,38260],{"class":1142},[159,172476,31508],{"class":185},[159,172478,27364],{"class":165},[159,172480,172481,172484],{"class":161,"line":239},[159,172482,172483],{"class":165},"    name: ",[159,172485,172486],{"class":1146},"str\n",[159,172488,172489,172492],{"class":161,"line":245},[159,172490,172491],{"class":165},"    age: ",[159,172493,172494],{"class":1146},"int\n",[159,172496,172497,172500],{"class":161,"line":251},[159,172498,172499],{"class":165},"    score: ",[159,172501,172502],{"class":1146},"float\n",[159,172504,172505],{"class":161,"line":261},[159,172506,590],{"emptyLinePlaceholder":589},[159,172508,172509],{"class":161,"line":603},[159,172510,590],{"emptyLinePlaceholder":589},[159,172512,172513,172515,172517,172519,172521,172523,172525,172527,172529],{"class":161,"line":621},[159,172514,170781],{"class":165},[159,172516,189],{"class":1142},[159,172518,171185],{"class":165},[159,172520,171188],{"class":192},[159,172522,1939],{"class":165},[159,172524,18723],{"class":1146},[159,172526,1939],{"class":165},[159,172528,24804],{"class":1146},[159,172530,1165],{"class":165},[159,172532,172533,172535],{"class":161,"line":634},[159,172534,53937],{"class":1146},[159,172536,171342],{"class":165},[14,172538,172539,172540,24079,172542,172545],{},"它会自动生成 ",[49,172541,54349],{},[49,172543,172544],{},"__repr__"," 等方法。适合数据模型类。",[37,172547,172549],{"id":172548},"_1115-小案例学生类","11.15 小案例：学生类",[151,172551,172553],{"className":53900,"code":172552,"language":53902,"meta":25,"style":25},"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",[49,172554,172555,172563,172572,172584,172594,172604,172614,172618,172627,172640,172644,172653,172659,172671,172683,172695,172707,172711,172715,172721,172731,172740,172750,172758,172766,172775,172779,172783,172791,172827,172831,172835,172860,172867],{"__ignoreMap":25},[159,172556,172557,172559,172561],{"class":161,"line":162},[159,172558,38260],{"class":1142},[159,172560,31508],{"class":185},[159,172562,27364],{"class":165},[159,172564,172565,172567,172569],{"class":161,"line":176},[159,172566,54322],{"class":1142},[159,172568,54325],{"class":1146},[159,172570,172571],{"class":165},"(self, student_id, name, age, score):\n",[159,172573,172574,172576,172579,172581],{"class":161,"line":203},[159,172575,54365],{"class":1146},[159,172577,172578],{"class":165},".student_id ",[159,172580,189],{"class":1142},[159,172582,172583],{"class":165}," student_id\n",[159,172585,172586,172588,172590,172592],{"class":161,"line":223},[159,172587,54365],{"class":1146},[159,172589,171090],{"class":165},[159,172591,189],{"class":1142},[159,172593,171095],{"class":165},[159,172595,172596,172598,172600,172602],{"class":161,"line":233},[159,172597,54365],{"class":1146},[159,172599,171102],{"class":165},[159,172601,189],{"class":1142},[159,172603,171107],{"class":165},[159,172605,172606,172608,172610,172612],{"class":161,"line":239},[159,172607,54365],{"class":1146},[159,172609,171114],{"class":165},[159,172611,189],{"class":1142},[159,172613,25254],{"class":165},[159,172615,172616],{"class":161,"line":245},[159,172617,590],{"emptyLinePlaceholder":589},[159,172619,172620,172622,172625],{"class":161,"line":251},[159,172621,54322],{"class":1142},[159,172623,172624],{"class":185}," is_passed",[159,172626,54328],{"class":165},[159,172628,172629,172631,172633,172635,172637],{"class":161,"line":261},[159,172630,21176],{"class":1142},[159,172632,62268],{"class":1146},[159,172634,171114],{"class":165},[159,172636,3822],{"class":1142},[159,172638,172639],{"class":1146}," 60\n",[159,172641,172642],{"class":161,"line":603},[159,172643,590],{"emptyLinePlaceholder":589},[159,172645,172646,172648,172651],{"class":161,"line":621},[159,172647,54322],{"class":1142},[159,172649,172650],{"class":185}," to_dict",[159,172652,54328],{"class":165},[159,172654,172655,172657],{"class":161,"line":634},[159,172656,21176],{"class":1142},[159,172658,1478],{"class":165},[159,172660,172661,172664,172666,172668],{"class":161,"line":640},[159,172662,172663],{"class":192},"            \"student_id\"",[159,172665,1486],{"class":165},[159,172667,54344],{"class":1146},[159,172669,172670],{"class":165},".student_id,\n",[159,172672,172673,172676,172678,172680],{"class":161,"line":1075},[159,172674,172675],{"class":192},"            \"name\"",[159,172677,1486],{"class":165},[159,172679,54344],{"class":1146},[159,172681,172682],{"class":165},".name,\n",[159,172684,172685,172688,172690,172692],{"class":161,"line":1081},[159,172686,172687],{"class":192},"            \"age\"",[159,172689,1486],{"class":165},[159,172691,54344],{"class":1146},[159,172693,172694],{"class":165},".age,\n",[159,172696,172697,172700,172702,172704],{"class":161,"line":1091},[159,172698,172699],{"class":192},"            \"score\"",[159,172701,1486],{"class":165},[159,172703,54344],{"class":1146},[159,172705,172706],{"class":165},".score,\n",[159,172708,172709],{"class":161,"line":1100},[159,172710,7530],{"class":165},[159,172712,172713],{"class":161,"line":1123},[159,172714,590],{"emptyLinePlaceholder":589},[159,172716,172717,172719],{"class":161,"line":1132},[159,172718,172314],{"class":185},[159,172720,172317],{"class":1146},[159,172722,172723,172725,172728],{"class":161,"line":1139},[159,172724,54322],{"class":1142},[159,172726,172727],{"class":185}," from_dict",[159,172729,172730],{"class":165},"(cls, data):\n",[159,172732,172733,172735,172737],{"class":161,"line":1168},[159,172734,21176],{"class":1142},[159,172736,172334],{"class":1146},[159,172738,172739],{"class":165},"(\n",[159,172741,172742,172745,172748],{"class":161,"line":1174},[159,172743,172744],{"class":165},"            data[",[159,172746,172747],{"class":192},"\"student_id\"",[159,172749,109136],{"class":165},[159,172751,172752,172754,172756],{"class":161,"line":1180},[159,172753,172744],{"class":165},[159,172755,9722],{"class":192},[159,172757,109136],{"class":165},[159,172759,172760,172762,172764],{"class":161,"line":1194},[159,172761,172744],{"class":165},[159,172763,16198],{"class":192},[159,172765,109136],{"class":165},[159,172767,172768,172770,172773],{"class":161,"line":1200},[159,172769,172744],{"class":165},[159,172771,172772],{"class":192},"\"score\"",[159,172774,109136],{"class":165},[159,172776,172777],{"class":161,"line":1221},[159,172778,61521],{"class":165},[159,172780,172781],{"class":161,"line":1230},[159,172782,590],{"emptyLinePlaceholder":589},[159,172784,172785,172787,172789],{"class":161,"line":1247},[159,172786,54322],{"class":1142},[159,172788,171281],{"class":1146},[159,172790,54328],{"class":165},[159,172792,172793,172795,172797,172799,172801,172804,172806,172809,172811,172813,172815,172817,172819,172821,172823,172825],{"class":161,"line":1265},[159,172794,21176],{"class":1142},[159,172796,171290],{"class":1142},[159,172798,24115],{"class":192},[159,172800,170752],{"class":1146},[159,172802,172803],{"class":165},".student_id",[159,172805,886],{"class":1146},[159,172807,172808],{"class":1146}," {self",[159,172810,101601],{"class":165},[159,172812,886],{"class":1146},[159,172814,172808],{"class":1146},[159,172816,101613],{"class":165},[159,172818,886],{"class":1146},[159,172820,172808],{"class":1146},[159,172822,171162],{"class":165},[159,172824,886],{"class":1146},[159,172826,48656],{"class":192},[159,172828,172829],{"class":161,"line":1277},[159,172830,590],{"emptyLinePlaceholder":589},[159,172832,172833],{"class":161,"line":1283},[159,172834,590],{"emptyLinePlaceholder":589},[159,172836,172837,172839,172841,172843,172846,172848,172850,172852,172854,172856,172858],{"class":161,"line":1294},[159,172838,170781],{"class":165},[159,172840,189],{"class":1142},[159,172842,171185],{"class":165},[159,172844,172845],{"class":192},"\"001\"",[159,172847,1939],{"class":165},[159,172849,171188],{"class":192},[159,172851,1939],{"class":165},[159,172853,18723],{"class":1146},[159,172855,1939],{"class":165},[159,172857,24804],{"class":1146},[159,172859,1165],{"class":165},[159,172861,172862,172864],{"class":161,"line":1305},[159,172863,53937],{"class":1146},[159,172865,172866],{"class":165},"(student.is_passed())\n",[159,172868,172869,172871],{"class":161,"line":1311},[159,172870,53937],{"class":1146},[159,172872,172873],{"class":165},"(student.to_dict())\n",[14,172875,172876,122318,172879,172882],{},[49,172877,172878],{},"to_dict()",[49,172880,172881],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[37,172884,172886],{"id":172885},"_1116-易错点","11.16 易错点",[134,172888,172889,172895,172901,172906,172909,172912],{},[106,172890,172891,172892,51907],{},"类名推荐使用大驼峰，如 ",[49,172893,172894],{},"StudentManager",[106,172896,172897,172898,172900],{},"方法第一个参数必须写 ",[49,172899,54344],{},"，调用时不用传。",[106,172902,172903,172905],{},[49,172904,54349],{}," 不是普通方法，它在创建对象时自动执行。",[106,172907,172908],{},"私有属性不是绝对安全，只是约定和名称改写。",[106,172910,172911],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[106,172913,172914],{},"类中方法太多时，说明职责可能过重。",[37,172916,172918],{"id":172917},"_1117-本章练习","11.17 本章练习",[134,172920,172921,172927,172933,172938,172951],{},[106,172922,172923,172924,172926],{},"定义 ",[49,172925,170868],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[106,172928,172923,172929,172932],{},[49,172930,172931],{},"Account"," 类，实现存款、取款、查询余额。",[106,172934,172923,172935,172937],{},[49,172936,40753],{}," 类，计算圆的周长和面积。",[106,172939,172923,172940,24079,172943,172946,172947,172950],{},[49,172941,172942],{},"Dog",[49,172944,172945],{},"Cat"," 类，并用同一个函数调用它们的 ",[49,172948,172949],{},"speak()"," 方法。",[106,172952,125666,172953,172955,172956,51907],{},[49,172954,172439],{}," 定义一个商品类 ",[49,172957,172958],{},"Product",[1468,172960,172961],{},"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":25,"searchDepth":176,"depth":176,"links":172963},[172964,172965,172966,172967,172968,172969,172971,172972,172973,172974,172975,172976,172977,172981,172982,172983,172984],{"id":170632,"depth":176,"text":170633},{"id":170815,"depth":176,"text":170816},{"id":170879,"depth":176,"text":170880},{"id":170956,"depth":176,"text":170957},{"id":171055,"depth":176,"text":171056},{"id":171219,"depth":176,"text":172970},"11.6 str",{"id":171345,"depth":176,"text":171346},{"id":171611,"depth":176,"text":171612},{"id":171725,"depth":176,"text":171726},{"id":171880,"depth":176,"text":171881},{"id":172004,"depth":176,"text":172005},{"id":172120,"depth":176,"text":172121},{"id":172269,"depth":176,"text":172270,"children":172978},[172979,172980],{"id":172273,"depth":203,"text":172274},{"id":172355,"depth":203,"text":172356},{"id":172433,"depth":176,"text":172434},{"id":172548,"depth":176,"text":172549},{"id":172885,"depth":176,"text":172886},{"id":172917,"depth":176,"text":172918},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":170624,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":172991,"title":172992,"body":172993,"description":23809,"extension":23810,"meta":176306,"navigation":589,"path":176307,"seo":176308,"stem":176309,"__hash__":176310},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":172994,"toc":176282},[172995,172998,173002,173005,173008,173037,173040,173048,173052,173056,173059,173082,173085,173091,173095,174541,174544,174565,174569,174572,174584,174587,174771,174774,174900,174903,174907,174911,175047,175051,175137,175141,175223,175227,175264,175268,175457,175461,175464,175694,175698,175701,175882,175885,175889,175892,175898,175901,175927,175931,175934,175948,175951,175976,175979,175993,175996,176013,176016,176033,176036,176053,176057,176083,176087,176110,176114,176117,176119,176125,176127,176148,176151,176157,176163,176167,176170,176246,176249,176253,176279],[10,172996,172992],{"id":172997},"_12-综合案例与复习路线",[37,172999,173001],{"id":173000},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,173003,173004],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,173006,173007],{},"一个合格的入门综合项目最好覆盖：",[134,173009,173010,173013,173016,173019,173022,173025,173028,173031,173034],{},[106,173011,173012],{},"输入输出。",[106,173014,173015],{},"判断和循环。",[106,173017,173018],{},"函数拆分。",[106,173020,173021],{},"列表、字典等容器。",[106,173023,173024],{},"文件持久化。",[106,173026,173027],{},"异常处理。",[106,173029,173030],{},"模块拆分。",[106,173032,173033],{},"可选：面向对象。",[106,173035,173036],{},"可选：数据可视化。",[14,173038,173039],{},"本章整理两个方向：",[134,173041,173042,173045],{},[106,173043,173044],{},"学生管理系统。",[106,173046,173047],{},"销售数据统计和可视化。",[37,173049,173051],{"id":173050},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[42,173053,173055],{"id":173054},"_1221-需求","12.2.1 需求",[14,173057,173058],{},"实现一个命令行学生管理系统：",[134,173060,173061,173064,173067,173070,173073,173076,173079],{},[106,173062,173063],{},"添加学生。",[106,173065,173066],{},"删除学生。",[106,173068,173069],{},"修改学生。",[106,173071,173072],{},"查询学生。",[106,173074,173075],{},"显示所有学生。",[106,173077,173078],{},"保存到 JSON 文件。",[106,173080,173081],{},"程序启动时自动读取 JSON 文件。",[14,173083,173084],{},"学生字段：",[151,173086,173089],{"className":173087,"code":173088,"language":8507,"meta":25},[28803],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[49,173090,173088],{"__ignoreMap":25},[37,173092,173094],{"id":173093},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[151,173096,173098],{"className":53900,"code":173097,"language":53902,"meta":25,"style":25},"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",[49,173099,173100,173106,173116,173120,173134,173138,173142,173151,173163,173169,173173,173179,173210,173220,173227,173238,173244,173248,173252,173262,173293,173319,173323,173327,173336,173347,173358,173369,173380,173391,173402,173413,173417,173421,173431,173443,173459,173466,173473,173477,173481,173491,173499,173506,173519,173529,173540,173544,173548,173557,173565,173571,173583,173591,173602,173606,173610,173619,173635,173639,173646,173657,173662,173666,173682,173697,173712,173716,173721,173729,173737,173745,173753,173757,173762,173773,173777,173781,173790,173805,173815,173819,173831,173842,173846,173850,173855,173859,173870,173874,173878,173887,173902,173910,173914,173926,173936,173940,173944,173959,173972,173985,173989,174002,174014,174026,174030,174034,174045,174049,174053,174062,174077,174085,174089,174101,174111,174115,174119,174124,174128,174132,174142,174148,174170,174189,174208,174227,174232,174236,174240,174249,174257,174268,174272,174276,174302,174312,174317,174321,174325,174333,174343,174347,174355,174360,174376,174380,174394,174399,174413,174418,174431,174436,174449,174454,174467,174472,174485,174496,174500,174506,174517,174521,174525,174537],{"__ignoreMap":25},[159,173101,173102,173104],{"class":161,"line":162},[159,173103,53914],{"class":1142},[159,173105,168391],{"class":165},[159,173107,173108,173110,173112,173114],{"class":161,"line":176},[159,173109,54258],{"class":1142},[159,173111,129611],{"class":165},[159,173113,53914],{"class":1142},[159,173115,129616],{"class":165},[159,173117,173118],{"class":161,"line":203},[159,173119,590],{"emptyLinePlaceholder":589},[159,173121,173122,173125,173127,173129,173132],{"class":161,"line":223},[159,173123,173124],{"class":1146},"DATA_FILE",[159,173126,1150],{"class":1142},[159,173128,129845],{"class":165},[159,173130,173131],{"class":192},"\"students.json\"",[159,173133,1165],{"class":165},[159,173135,173136],{"class":161,"line":233},[159,173137,590],{"emptyLinePlaceholder":589},[159,173139,173140],{"class":161,"line":239},[159,173141,590],{"emptyLinePlaceholder":589},[159,173143,173144,173146,173149],{"class":161,"line":245},[159,173145,55465],{"class":1142},[159,173147,173148],{"class":185}," load_students",[159,173150,55471],{"class":165},[159,173152,173153,173155,173157,173160],{"class":161,"line":251},[159,173154,26732],{"class":1142},[159,173156,62325],{"class":1142},[159,173158,173159],{"class":1146}," DATA_FILE",[159,173161,173162],{"class":165},".exists():\n",[159,173164,173165,173167],{"class":161,"line":261},[159,173166,21176],{"class":1142},[159,173168,16884],{"class":165},[159,173170,173171],{"class":161,"line":603},[159,173172,590],{"emptyLinePlaceholder":589},[159,173174,173175,173177],{"class":161,"line":621},[159,173176,147084],{"class":1142},[159,173178,27364],{"class":165},[159,173180,173181,173184,173186,173188,173190,173192,173194,173196,173198,173200,173202,173204,173206,173208],{"class":161,"line":634},[159,173182,173183],{"class":1142},"        with",[159,173185,168091],{"class":1146},[159,173187,1159],{"class":165},[159,173189,173124],{"class":1146},[159,173191,1939],{"class":165},[159,173193,168101],{"class":192},[159,173195,1939],{"class":165},[159,173197,168106],{"class":8765},[159,173199,189],{"class":1142},[159,173201,168111],{"class":192},[159,173203,2710],{"class":165},[159,173205,54903],{"class":1142},[159,173207,169453],{"class":8765},[159,173209,27364],{"class":165},[159,173211,173212,173214,173216,173218],{"class":161,"line":640},[159,173213,39293],{"class":1142},[159,173215,169464],{"class":165},[159,173217,68749],{"class":8765},[159,173219,1165],{"class":165},[159,173221,173222,173224],{"class":161,"line":1075},[159,173223,147112],{"class":1142},[159,173225,173226],{"class":165}," json.JSONDecodeError:\n",[159,173228,173229,173231,173233,173236],{"class":161,"line":1081},[159,173230,55969],{"class":1146},[159,173232,1159],{"class":165},[159,173234,173235],{"class":192},"\"数据文件格式错误，已使用空数据启动\"",[159,173237,1165],{"class":165},[159,173239,173240,173242],{"class":161,"line":1091},[159,173241,21176],{"class":1142},[159,173243,16884],{"class":165},[159,173245,173246],{"class":161,"line":1100},[159,173247,590],{"emptyLinePlaceholder":589},[159,173249,173250],{"class":161,"line":1123},[159,173251,590],{"emptyLinePlaceholder":589},[159,173253,173254,173256,173259],{"class":161,"line":1132},[159,173255,55465],{"class":1142},[159,173257,173258],{"class":185}," save_students",[159,173260,173261],{"class":165},"(students):\n",[159,173263,173264,173266,173268,173270,173272,173274,173277,173279,173281,173283,173285,173287,173289,173291],{"class":161,"line":1139},[159,173265,57573],{"class":1142},[159,173267,168091],{"class":1146},[159,173269,1159],{"class":165},[159,173271,173124],{"class":1146},[159,173273,1939],{"class":165},[159,173275,173276],{"class":192},"\"w\"",[159,173278,1939],{"class":165},[159,173280,168106],{"class":8765},[159,173282,189],{"class":1142},[159,173284,168111],{"class":192},[159,173286,2710],{"class":165},[159,173288,54903],{"class":1142},[159,173290,169453],{"class":8765},[159,173292,27364],{"class":165},[159,173294,173295,173298,173300,173302,173304,173306,173308,173310,173313,173315,173317],{"class":161,"line":1168},[159,173296,173297],{"class":165},"        json.dump(students, ",[159,173299,68749],{"class":8765},[159,173301,1939],{"class":165},[159,173303,168437],{"class":8765},[159,173305,189],{"class":1142},[159,173307,57382],{"class":1146},[159,173309,1939],{"class":165},[159,173311,173312],{"class":8765},"indent",[159,173314,189],{"class":1142},[159,173316,11034],{"class":1146},[159,173318,1165],{"class":165},[159,173320,173321],{"class":161,"line":1174},[159,173322,590],{"emptyLinePlaceholder":589},[159,173324,173325],{"class":161,"line":1180},[159,173326,590],{"emptyLinePlaceholder":589},[159,173328,173329,173331,173334],{"class":161,"line":1194},[159,173330,55465],{"class":1142},[159,173332,173333],{"class":185}," show_menu",[159,173335,55471],{"class":165},[159,173337,173338,173340,173342,173345],{"class":161,"line":1200},[159,173339,54819],{"class":1146},[159,173341,1159],{"class":165},[159,173343,173344],{"class":192},"\"====== 学生管理系统 ======\"",[159,173346,1165],{"class":165},[159,173348,173349,173351,173353,173356],{"class":161,"line":1221},[159,173350,54819],{"class":1146},[159,173352,1159],{"class":165},[159,173354,173355],{"class":192},"\"1. 添加学生\"",[159,173357,1165],{"class":165},[159,173359,173360,173362,173364,173367],{"class":161,"line":1230},[159,173361,54819],{"class":1146},[159,173363,1159],{"class":165},[159,173365,173366],{"class":192},"\"2. 删除学生\"",[159,173368,1165],{"class":165},[159,173370,173371,173373,173375,173378],{"class":161,"line":1247},[159,173372,54819],{"class":1146},[159,173374,1159],{"class":165},[159,173376,173377],{"class":192},"\"3. 修改学生\"",[159,173379,1165],{"class":165},[159,173381,173382,173384,173386,173389],{"class":161,"line":1265},[159,173383,54819],{"class":1146},[159,173385,1159],{"class":165},[159,173387,173388],{"class":192},"\"4. 查询学生\"",[159,173390,1165],{"class":165},[159,173392,173393,173395,173397,173400],{"class":161,"line":1277},[159,173394,54819],{"class":1146},[159,173396,1159],{"class":165},[159,173398,173399],{"class":192},"\"5. 显示所有学生\"",[159,173401,1165],{"class":165},[159,173403,173404,173406,173408,173411],{"class":161,"line":1283},[159,173405,54819],{"class":1146},[159,173407,1159],{"class":165},[159,173409,173410],{"class":192},"\"0. 退出系统\"",[159,173412,1165],{"class":165},[159,173414,173415],{"class":161,"line":1294},[159,173416,590],{"emptyLinePlaceholder":589},[159,173418,173419],{"class":161,"line":1305},[159,173420,590],{"emptyLinePlaceholder":589},[159,173422,173423,173425,173428],{"class":161,"line":1311},[159,173424,55465],{"class":1142},[159,173426,173427],{"class":185}," find_student",[159,173429,173430],{"class":165},"(students, student_id):\n",[159,173432,173433,173435,173438,173440],{"class":161,"line":1322},[159,173434,11677],{"class":1142},[159,173436,173437],{"class":165}," student ",[159,173439,49566],{"class":1142},[159,173441,173442],{"class":165}," students:\n",[159,173444,173445,173447,173450,173452,173454,173456],{"class":161,"line":1327},[159,173446,17003],{"class":1142},[159,173448,173449],{"class":165}," student[",[159,173451,172747],{"class":192},[159,173453,28061],{"class":165},[159,173455,26581],{"class":1142},[159,173457,173458],{"class":165}," student_id:\n",[159,173460,173461,173463],{"class":161,"line":1336},[159,173462,39293],{"class":1142},[159,173464,173465],{"class":165}," student\n",[159,173467,173468,173470],{"class":161,"line":1345},[159,173469,27711],{"class":1142},[159,173471,173472],{"class":1146}," None\n",[159,173474,173475],{"class":161,"line":1350},[159,173476,590],{"emptyLinePlaceholder":589},[159,173478,173479],{"class":161,"line":1764},[159,173480,590],{"emptyLinePlaceholder":589},[159,173482,173483,173485,173488],{"class":161,"line":1769},[159,173484,55465],{"class":1142},[159,173486,173487],{"class":185}," input_int",[159,173489,173490],{"class":165},"(prompt):\n",[159,173492,173493,173495,173497],{"class":161,"line":1777},[159,173494,25899],{"class":1142},[159,173496,116592],{"class":1146},[159,173498,27364],{"class":165},[159,173500,173501,173504],{"class":161,"line":1788},[159,173502,173503],{"class":1142},"        try",[159,173505,27364],{"class":165},[159,173507,173508,173510,173512,173514,173516],{"class":161,"line":1802},[159,173509,39293],{"class":1142},[159,173511,26029],{"class":1146},[159,173513,1159],{"class":165},[159,173515,536],{"class":1146},[159,173517,173518],{"class":165},"(prompt))\n",[159,173520,173521,173524,173527],{"class":161,"line":1815},[159,173522,173523],{"class":1142},"        except",[159,173525,173526],{"class":1146}," ValueError",[159,173528,27364],{"class":165},[159,173530,173531,173533,173535,173538],{"class":161,"line":1828},[159,173532,58045],{"class":1146},[159,173534,1159],{"class":165},[159,173536,173537],{"class":192},"\"请输入整数\"",[159,173539,1165],{"class":165},[159,173541,173542],{"class":161,"line":1841},[159,173543,590],{"emptyLinePlaceholder":589},[159,173545,173546],{"class":161,"line":1852},[159,173547,590],{"emptyLinePlaceholder":589},[159,173549,173550,173552,173555],{"class":161,"line":1866},[159,173551,55465],{"class":1142},[159,173553,173554],{"class":185}," input_float",[159,173556,173490],{"class":165},[159,173558,173559,173561,173563],{"class":161,"line":1879},[159,173560,25899],{"class":1142},[159,173562,116592],{"class":1146},[159,173564,27364],{"class":165},[159,173566,173567,173569],{"class":161,"line":1884},[159,173568,173503],{"class":1142},[159,173570,27364],{"class":165},[159,173572,173573,173575,173577,173579,173581],{"class":161,"line":1889},[159,173574,39293],{"class":1142},[159,173576,131097],{"class":1146},[159,173578,1159],{"class":165},[159,173580,536],{"class":1146},[159,173582,173518],{"class":165},[159,173584,173585,173587,173589],{"class":161,"line":1899},[159,173586,173523],{"class":1142},[159,173588,173526],{"class":1146},[159,173590,27364],{"class":165},[159,173592,173593,173595,173597,173600],{"class":161,"line":1912},[159,173594,58045],{"class":1146},[159,173596,1159],{"class":165},[159,173598,173599],{"class":192},"\"请输入数字\"",[159,173601,1165],{"class":165},[159,173603,173604],{"class":161,"line":1925},[159,173605,590],{"emptyLinePlaceholder":589},[159,173607,173608],{"class":161,"line":1956},[159,173609,590],{"emptyLinePlaceholder":589},[159,173611,173612,173614,173617],{"class":161,"line":1971},[159,173613,55465],{"class":1142},[159,173615,173616],{"class":185}," add_student",[159,173618,173261],{"class":165},[159,173620,173621,173624,173626,173628,173630,173633],{"class":161,"line":1976},[159,173622,173623],{"class":165},"    student_id ",[159,173625,189],{"class":1142},[159,173627,7625],{"class":1146},[159,173629,1159],{"class":165},[159,173631,173632],{"class":192},"\"请输入学号:\"",[159,173634,1165],{"class":165},[159,173636,173637],{"class":161,"line":1981},[159,173638,590],{"emptyLinePlaceholder":589},[159,173640,173641,173643],{"class":161,"line":1989},[159,173642,26732],{"class":1142},[159,173644,173645],{"class":165}," find_student(students, student_id):\n",[159,173647,173648,173650,173652,173655],{"class":161,"line":2001},[159,173649,55969],{"class":1146},[159,173651,1159],{"class":165},[159,173653,173654],{"class":192},"\"学号已存在\"",[159,173656,1165],{"class":165},[159,173658,173659],{"class":161,"line":2006},[159,173660,173661],{"class":1142},"        return\n",[159,173663,173664],{"class":161,"line":2015},[159,173665,590],{"emptyLinePlaceholder":589},[159,173667,173668,173671,173673,173675,173677,173680],{"class":161,"line":2024},[159,173669,173670],{"class":165},"    name ",[159,173672,189],{"class":1142},[159,173674,7625],{"class":1146},[159,173676,1159],{"class":165},[159,173678,173679],{"class":192},"\"请输入姓名:\"",[159,173681,1165],{"class":165},[159,173683,173684,173687,173689,173692,173695],{"class":161,"line":2029},[159,173685,173686],{"class":165},"    age ",[159,173688,189],{"class":1142},[159,173690,173691],{"class":165}," input_int(",[159,173693,173694],{"class":192},"\"请输入年龄:\"",[159,173696,1165],{"class":165},[159,173698,173699,173702,173704,173707,173710],{"class":161,"line":2038},[159,173700,173701],{"class":165},"    score ",[159,173703,189],{"class":1142},[159,173705,173706],{"class":165}," input_float(",[159,173708,173709],{"class":192},"\"请输入成绩:\"",[159,173711,1165],{"class":165},[159,173713,173714],{"class":161,"line":2053},[159,173715,590],{"emptyLinePlaceholder":589},[159,173717,173718],{"class":161,"line":2070},[159,173719,173720],{"class":165},"    students.append({\n",[159,173722,173723,173726],{"class":161,"line":2095},[159,173724,173725],{"class":192},"        \"student_id\"",[159,173727,173728],{"class":165},": student_id,\n",[159,173730,173731,173734],{"class":161,"line":2104},[159,173732,173733],{"class":192},"        \"name\"",[159,173735,173736],{"class":165},": name,\n",[159,173738,173739,173742],{"class":161,"line":2120},[159,173740,173741],{"class":192},"        \"age\"",[159,173743,173744],{"class":165},": age,\n",[159,173746,173747,173750],{"class":161,"line":2134},[159,173748,173749],{"class":192},"        \"score\"",[159,173751,173752],{"class":165},": score,\n",[159,173754,173755],{"class":161,"line":2143},[159,173756,4863],{"class":165},[159,173758,173759],{"class":161,"line":2165},[159,173760,173761],{"class":165},"    save_students(students)\n",[159,173763,173764,173766,173768,173771],{"class":161,"line":2178},[159,173765,54819],{"class":1146},[159,173767,1159],{"class":165},[159,173769,173770],{"class":192},"\"添加成功\"",[159,173772,1165],{"class":165},[159,173774,173775],{"class":161,"line":2191},[159,173776,590],{"emptyLinePlaceholder":589},[159,173778,173779],{"class":161,"line":2204},[159,173780,590],{"emptyLinePlaceholder":589},[159,173782,173783,173785,173788],{"class":161,"line":2217},[159,173784,55465],{"class":1142},[159,173786,173787],{"class":185}," delete_student",[159,173789,173261],{"class":165},[159,173791,173792,173794,173796,173798,173800,173803],{"class":161,"line":2230},[159,173793,173623],{"class":165},[159,173795,189],{"class":1142},[159,173797,7625],{"class":1146},[159,173799,1159],{"class":165},[159,173801,173802],{"class":192},"\"请输入要删除的学号:\"",[159,173804,1165],{"class":165},[159,173806,173807,173810,173812],{"class":161,"line":2243},[159,173808,173809],{"class":165},"    student ",[159,173811,189],{"class":1142},[159,173813,173814],{"class":165}," find_student(students, student_id)\n",[159,173816,173817],{"class":161,"line":2256},[159,173818,590],{"emptyLinePlaceholder":589},[159,173820,173821,173823,173825,173827,173829],{"class":161,"line":2266},[159,173822,26732],{"class":1142},[159,173824,173437],{"class":165},[159,173826,62322],{"class":1142},[159,173828,62328],{"class":1146},[159,173830,27364],{"class":165},[159,173832,173833,173835,173837,173840],{"class":161,"line":2275},[159,173834,55969],{"class":1146},[159,173836,1159],{"class":165},[159,173838,173839],{"class":192},"\"学生不存在\"",[159,173841,1165],{"class":165},[159,173843,173844],{"class":161,"line":2284},[159,173845,173661],{"class":1142},[159,173847,173848],{"class":161,"line":2293},[159,173849,590],{"emptyLinePlaceholder":589},[159,173851,173852],{"class":161,"line":2306},[159,173853,173854],{"class":165},"    students.remove(student)\n",[159,173856,173857],{"class":161,"line":2330},[159,173858,173761],{"class":165},[159,173860,173861,173863,173865,173868],{"class":161,"line":2350},[159,173862,54819],{"class":1146},[159,173864,1159],{"class":165},[159,173866,173867],{"class":192},"\"删除成功\"",[159,173869,1165],{"class":165},[159,173871,173872],{"class":161,"line":2370},[159,173873,590],{"emptyLinePlaceholder":589},[159,173875,173876],{"class":161,"line":2390},[159,173877,590],{"emptyLinePlaceholder":589},[159,173879,173880,173882,173885],{"class":161,"line":2410},[159,173881,55465],{"class":1142},[159,173883,173884],{"class":185}," update_student",[159,173886,173261],{"class":165},[159,173888,173889,173891,173893,173895,173897,173900],{"class":161,"line":2430},[159,173890,173623],{"class":165},[159,173892,189],{"class":1142},[159,173894,7625],{"class":1146},[159,173896,1159],{"class":165},[159,173898,173899],{"class":192},"\"请输入要修改的学号:\"",[159,173901,1165],{"class":165},[159,173903,173904,173906,173908],{"class":161,"line":2450},[159,173905,173809],{"class":165},[159,173907,189],{"class":1142},[159,173909,173814],{"class":165},[159,173911,173912],{"class":161,"line":2471},[159,173913,590],{"emptyLinePlaceholder":589},[159,173915,173916,173918,173920,173922,173924],{"class":161,"line":2477},[159,173917,26732],{"class":1142},[159,173919,173437],{"class":165},[159,173921,62322],{"class":1142},[159,173923,62328],{"class":1146},[159,173925,27364],{"class":165},[159,173927,173928,173930,173932,173934],{"class":161,"line":2498},[159,173929,55969],{"class":1146},[159,173931,1159],{"class":165},[159,173933,173839],{"class":192},[159,173935,1165],{"class":165},[159,173937,173938],{"class":161,"line":2518},[159,173939,173661],{"class":1142},[159,173941,173942],{"class":161,"line":2539},[159,173943,590],{"emptyLinePlaceholder":589},[159,173945,173946,173948,173950,173952,173954,173957],{"class":161,"line":2561},[159,173947,173670],{"class":165},[159,173949,189],{"class":1142},[159,173951,7625],{"class":1146},[159,173953,1159],{"class":165},[159,173955,173956],{"class":192},"\"请输入新姓名:\"",[159,173958,1165],{"class":165},[159,173960,173961,173963,173965,173967,173970],{"class":161,"line":2573},[159,173962,173686],{"class":165},[159,173964,189],{"class":1142},[159,173966,173691],{"class":165},[159,173968,173969],{"class":192},"\"请输入新年龄:\"",[159,173971,1165],{"class":165},[159,173973,173974,173976,173978,173980,173983],{"class":161,"line":2591},[159,173975,173701],{"class":165},[159,173977,189],{"class":1142},[159,173979,173706],{"class":165},[159,173981,173982],{"class":192},"\"请输入新成绩:\"",[159,173984,1165],{"class":165},[159,173986,173987],{"class":161,"line":2602},[159,173988,590],{"emptyLinePlaceholder":589},[159,173990,173991,173994,173996,173998,174000],{"class":161,"line":2613},[159,173992,173993],{"class":165},"    student[",[159,173995,9722],{"class":192},[159,173997,28061],{"class":165},[159,173999,189],{"class":1142},[159,174001,171095],{"class":165},[159,174003,174004,174006,174008,174010,174012],{"class":161,"line":2624},[159,174005,173993],{"class":165},[159,174007,16198],{"class":192},[159,174009,28061],{"class":165},[159,174011,189],{"class":1142},[159,174013,171107],{"class":165},[159,174015,174016,174018,174020,174022,174024],{"class":161,"line":2630},[159,174017,173993],{"class":165},[159,174019,172772],{"class":192},[159,174021,28061],{"class":165},[159,174023,189],{"class":1142},[159,174025,25254],{"class":165},[159,174027,174028],{"class":161,"line":2636},[159,174029,590],{"emptyLinePlaceholder":589},[159,174031,174032],{"class":161,"line":2642},[159,174033,173761],{"class":165},[159,174035,174036,174038,174040,174043],{"class":161,"line":2648},[159,174037,54819],{"class":1146},[159,174039,1159],{"class":165},[159,174041,174042],{"class":192},"\"修改成功\"",[159,174044,1165],{"class":165},[159,174046,174047],{"class":161,"line":2674},[159,174048,590],{"emptyLinePlaceholder":589},[159,174050,174051],{"class":161,"line":2689},[159,174052,590],{"emptyLinePlaceholder":589},[159,174054,174055,174057,174060],{"class":161,"line":2694},[159,174056,55465],{"class":1142},[159,174058,174059],{"class":185}," query_student",[159,174061,173261],{"class":165},[159,174063,174064,174066,174068,174070,174072,174075],{"class":161,"line":2721},[159,174065,173623],{"class":165},[159,174067,189],{"class":1142},[159,174069,7625],{"class":1146},[159,174071,1159],{"class":165},[159,174073,174074],{"class":192},"\"请输入要查询的学号:\"",[159,174076,1165],{"class":165},[159,174078,174079,174081,174083],{"class":161,"line":2726},[159,174080,173809],{"class":165},[159,174082,189],{"class":1142},[159,174084,173814],{"class":165},[159,174086,174087],{"class":161,"line":2735},[159,174088,590],{"emptyLinePlaceholder":589},[159,174090,174091,174093,174095,174097,174099],{"class":161,"line":2744},[159,174092,26732],{"class":1142},[159,174094,173437],{"class":165},[159,174096,62322],{"class":1142},[159,174098,62328],{"class":1146},[159,174100,27364],{"class":165},[159,174102,174103,174105,174107,174109],{"class":161,"line":2753},[159,174104,55969],{"class":1146},[159,174106,1159],{"class":165},[159,174108,173839],{"class":192},[159,174110,1165],{"class":165},[159,174112,174113],{"class":161,"line":2758},[159,174114,173661],{"class":1142},[159,174116,174117],{"class":161,"line":3959},[159,174118,590],{"emptyLinePlaceholder":589},[159,174120,174121],{"class":161,"line":3968},[159,174122,174123],{"class":165},"    print_student(student)\n",[159,174125,174126],{"class":161,"line":3977},[159,174127,590],{"emptyLinePlaceholder":589},[159,174129,174130],{"class":161,"line":3982},[159,174131,590],{"emptyLinePlaceholder":589},[159,174133,174134,174136,174139],{"class":161,"line":6843},[159,174135,55465],{"class":1142},[159,174137,174138],{"class":185}," print_student",[159,174140,174141],{"class":165},"(student):\n",[159,174143,174144,174146],{"class":161,"line":6849},[159,174145,54819],{"class":1146},[159,174147,172739],{"class":165},[159,174149,174150,174153,174155,174157,174160,174163,174165,174168],{"class":161,"line":6855},[159,174151,174152],{"class":1142},"        f",[159,174154,24115],{"class":192},[159,174156,24721],{"class":1146},[159,174158,174159],{"class":165},"student[",[159,174161,174162],{"class":192},"'student_id'",[159,174164,18375],{"class":165},[159,174166,174167],{"class":1146},"}\\t",[159,174169,48656],{"class":192},[159,174171,174172,174174,174176,174178,174180,174183,174185,174187],{"class":161,"line":6861},[159,174173,174152],{"class":1142},[159,174175,24115],{"class":192},[159,174177,24721],{"class":1146},[159,174179,174159],{"class":165},[159,174181,174182],{"class":192},"'name'",[159,174184,18375],{"class":165},[159,174186,174167],{"class":1146},[159,174188,48656],{"class":192},[159,174190,174191,174193,174195,174197,174199,174202,174204,174206],{"class":161,"line":6867},[159,174192,174152],{"class":1142},[159,174194,24115],{"class":192},[159,174196,24721],{"class":1146},[159,174198,174159],{"class":165},[159,174200,174201],{"class":192},"'age'",[159,174203,18375],{"class":165},[159,174205,174167],{"class":1146},[159,174207,48656],{"class":192},[159,174209,174210,174212,174214,174216,174218,174221,174223,174225],{"class":161,"line":6873},[159,174211,174152],{"class":1142},[159,174213,24115],{"class":192},[159,174215,24721],{"class":1146},[159,174217,174159],{"class":165},[159,174219,174220],{"class":192},"'score'",[159,174222,18375],{"class":165},[159,174224,886],{"class":1146},[159,174226,48656],{"class":192},[159,174228,174229],{"class":161,"line":6879},[159,174230,174231],{"class":165},"    )\n",[159,174233,174234],{"class":161,"line":6885},[159,174235,590],{"emptyLinePlaceholder":589},[159,174237,174238],{"class":161,"line":6890},[159,174239,590],{"emptyLinePlaceholder":589},[159,174241,174242,174244,174247],{"class":161,"line":6896},[159,174243,55465],{"class":1142},[159,174245,174246],{"class":185}," show_all_students",[159,174248,173261],{"class":165},[159,174250,174251,174253,174255],{"class":161,"line":6902},[159,174252,26732],{"class":1142},[159,174254,62325],{"class":1142},[159,174256,173442],{"class":165},[159,174258,174259,174261,174263,174266],{"class":161,"line":6908},[159,174260,55969],{"class":1146},[159,174262,1159],{"class":165},[159,174264,174265],{"class":192},"\"暂无学生\"",[159,174267,1165],{"class":165},[159,174269,174270],{"class":161,"line":6914},[159,174271,173661],{"class":1142},[159,174273,174274],{"class":161,"line":6920},[159,174275,590],{"emptyLinePlaceholder":589},[159,174277,174278,174280,174282,174285,174287,174290,174292,174295,174297,174300],{"class":161,"line":6926},[159,174279,54819],{"class":1146},[159,174281,1159],{"class":165},[159,174283,174284],{"class":192},"\"学号",[159,174286,24915],{"class":1146},[159,174288,174289],{"class":192},"姓名",[159,174291,24915],{"class":1146},[159,174293,174294],{"class":192},"年龄",[159,174296,24915],{"class":1146},[159,174298,174299],{"class":192},"成绩\"",[159,174301,1165],{"class":165},[159,174303,174304,174306,174308,174310],{"class":161,"line":6932},[159,174305,11677],{"class":1142},[159,174307,173437],{"class":165},[159,174309,49566],{"class":1142},[159,174311,173442],{"class":165},[159,174313,174314],{"class":161,"line":6938},[159,174315,174316],{"class":165},"        print_student(student)\n",[159,174318,174319],{"class":161,"line":6944},[159,174320,590],{"emptyLinePlaceholder":589},[159,174322,174323],{"class":161,"line":6949},[159,174324,590],{"emptyLinePlaceholder":589},[159,174326,174327,174329,174331],{"class":161,"line":6955},[159,174328,55465],{"class":1142},[159,174330,25625],{"class":185},[159,174332,55471],{"class":165},[159,174334,174335,174338,174340],{"class":161,"line":6961},[159,174336,174337],{"class":165},"    students ",[159,174339,189],{"class":1142},[159,174341,174342],{"class":165}," load_students()\n",[159,174344,174345],{"class":161,"line":6967},[159,174346,590],{"emptyLinePlaceholder":589},[159,174348,174349,174351,174353],{"class":161,"line":6973},[159,174350,25899],{"class":1142},[159,174352,116592],{"class":1146},[159,174354,27364],{"class":165},[159,174356,174357],{"class":161,"line":6979},[159,174358,174359],{"class":165},"        show_menu()\n",[159,174361,174362,174365,174367,174369,174371,174374],{"class":161,"line":6985},[159,174363,174364],{"class":165},"        choice ",[159,174366,189],{"class":1142},[159,174368,7625],{"class":1146},[159,174370,1159],{"class":165},[159,174372,174373],{"class":192},"\"请输入操作:\"",[159,174375,1165],{"class":165},[159,174377,174378],{"class":161,"line":6991},[159,174379,590],{"emptyLinePlaceholder":589},[159,174381,174382,174384,174387,174389,174392],{"class":161,"line":6997},[159,174383,17003],{"class":1142},[159,174385,174386],{"class":165}," choice ",[159,174388,26581],{"class":1142},[159,174390,174391],{"class":192}," \"1\"",[159,174393,27364],{"class":165},[159,174395,174396],{"class":161,"line":7003},[159,174397,174398],{"class":165},"            add_student(students)\n",[159,174400,174401,174404,174406,174408,174411],{"class":161,"line":7009},[159,174402,174403],{"class":1142},"        elif",[159,174405,174386],{"class":165},[159,174407,26581],{"class":1142},[159,174409,174410],{"class":192}," \"2\"",[159,174412,27364],{"class":165},[159,174414,174415],{"class":161,"line":7015},[159,174416,174417],{"class":165},"            delete_student(students)\n",[159,174419,174420,174422,174424,174426,174429],{"class":161,"line":7021},[159,174421,174403],{"class":1142},[159,174423,174386],{"class":165},[159,174425,26581],{"class":1142},[159,174427,174428],{"class":192}," \"3\"",[159,174430,27364],{"class":165},[159,174432,174433],{"class":161,"line":7026},[159,174434,174435],{"class":165},"            update_student(students)\n",[159,174437,174438,174440,174442,174444,174447],{"class":161,"line":7031},[159,174439,174403],{"class":1142},[159,174441,174386],{"class":165},[159,174443,26581],{"class":1142},[159,174445,174446],{"class":192}," \"4\"",[159,174448,27364],{"class":165},[159,174450,174451],{"class":161,"line":7037},[159,174452,174453],{"class":165},"            query_student(students)\n",[159,174455,174456,174458,174460,174462,174465],{"class":161,"line":7043},[159,174457,174403],{"class":1142},[159,174459,174386],{"class":165},[159,174461,26581],{"class":1142},[159,174463,174464],{"class":192}," \"5\"",[159,174466,27364],{"class":165},[159,174468,174469],{"class":161,"line":7049},[159,174470,174471],{"class":165},"            show_all_students(students)\n",[159,174473,174474,174476,174478,174480,174483],{"class":161,"line":7054},[159,174475,174403],{"class":1142},[159,174477,174386],{"class":165},[159,174479,26581],{"class":1142},[159,174481,174482],{"class":192}," \"0\"",[159,174484,27364],{"class":165},[159,174486,174487,174489,174491,174494],{"class":161,"line":7060},[159,174488,58045],{"class":1146},[159,174490,1159],{"class":165},[159,174492,174493],{"class":192},"\"退出系统\"",[159,174495,1165],{"class":165},[159,174497,174498],{"class":161,"line":7066},[159,174499,136398],{"class":1142},[159,174501,174502,174504],{"class":161,"line":7072},[159,174503,26176],{"class":1142},[159,174505,27364],{"class":165},[159,174507,174508,174510,174512,174515],{"class":161,"line":7078},[159,174509,58045],{"class":1146},[159,174511,1159],{"class":165},[159,174513,174514],{"class":192},"\"输入错误\"",[159,174516,1165],{"class":165},[159,174518,174519],{"class":161,"line":7084},[159,174520,590],{"emptyLinePlaceholder":589},[159,174522,174523],{"class":161,"line":7089},[159,174524,590],{"emptyLinePlaceholder":589},[159,174526,174527,174529,174531,174533,174535],{"class":161,"line":7095},[159,174528,18445],{"class":1142},[159,174530,54740],{"class":1146},[159,174532,122859],{"class":1142},[159,174534,122862],{"class":192},[159,174536,27364],{"class":165},[159,174538,174539],{"class":161,"line":7100},[159,174540,122869],{"class":165},[14,174542,174543],{},"这个项目串联了：",[134,174545,174546,174549,174552,174555,174558,174560],{},[106,174547,174548],{},"菜单循环。",[106,174550,174551],{},"函数封装。",[106,174553,174554],{},"列表字典。",[106,174556,174557],{},"JSON 读写。",[106,174559,173027],{},[106,174561,174562,51907],{},[49,174563,174564],{},"if __name__ == \"__main__\"",[37,174566,174568],{"id":174567},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,174570,174571],{},"可以进一步拆成两个类：",[134,174573,174574,174579],{},[106,174575,174576,174578],{},[49,174577,170868],{},"：表示单个学生。",[106,174580,174581,174583],{},[49,174582,172894],{},"：负责学生增删改查和文件保存。",[14,174585,174586],{},"示意代码：",[151,174588,174590],{"className":53900,"code":174589,"language":53902,"meta":25,"style":25},"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",[49,174591,174592,174602,174606,174610,174614,174622,174629,174635,174641,174647,174651,174659,174665,174675,174685,174695,174705,174709,174713,174719,174727,174735,174743,174751,174759,174767],{"__ignoreMap":25},[159,174593,174594,174596,174598,174600],{"class":161,"line":162},[159,174595,54258],{"class":1142},[159,174597,172452],{"class":165},[159,174599,53914],{"class":1142},[159,174601,172457],{"class":165},[159,174603,174604],{"class":161,"line":176},[159,174605,590],{"emptyLinePlaceholder":589},[159,174607,174608],{"class":161,"line":203},[159,174609,590],{"emptyLinePlaceholder":589},[159,174611,174612],{"class":161,"line":223},[159,174613,172470],{"class":185},[159,174615,174616,174618,174620],{"class":161,"line":233},[159,174617,38260],{"class":1142},[159,174619,31508],{"class":185},[159,174621,27364],{"class":165},[159,174623,174624,174627],{"class":161,"line":239},[159,174625,174626],{"class":165},"    student_id: ",[159,174628,172486],{"class":1146},[159,174630,174631,174633],{"class":161,"line":245},[159,174632,172483],{"class":165},[159,174634,172486],{"class":1146},[159,174636,174637,174639],{"class":161,"line":251},[159,174638,172491],{"class":165},[159,174640,172494],{"class":1146},[159,174642,174643,174645],{"class":161,"line":261},[159,174644,172499],{"class":165},[159,174646,172502],{"class":1146},[159,174648,174649],{"class":161,"line":603},[159,174650,590],{"emptyLinePlaceholder":589},[159,174652,174653,174655,174657],{"class":161,"line":621},[159,174654,54322],{"class":1142},[159,174656,172650],{"class":185},[159,174658,54328],{"class":165},[159,174660,174661,174663],{"class":161,"line":634},[159,174662,21176],{"class":1142},[159,174664,1478],{"class":165},[159,174666,174667,174669,174671,174673],{"class":161,"line":640},[159,174668,172663],{"class":192},[159,174670,1486],{"class":165},[159,174672,54344],{"class":1146},[159,174674,172670],{"class":165},[159,174676,174677,174679,174681,174683],{"class":161,"line":1075},[159,174678,172675],{"class":192},[159,174680,1486],{"class":165},[159,174682,54344],{"class":1146},[159,174684,172682],{"class":165},[159,174686,174687,174689,174691,174693],{"class":161,"line":1081},[159,174688,172687],{"class":192},[159,174690,1486],{"class":165},[159,174692,54344],{"class":1146},[159,174694,172694],{"class":165},[159,174696,174697,174699,174701,174703],{"class":161,"line":1091},[159,174698,172699],{"class":192},[159,174700,1486],{"class":165},[159,174702,54344],{"class":1146},[159,174704,172706],{"class":165},[159,174706,174707],{"class":161,"line":1100},[159,174708,7530],{"class":165},[159,174710,174711],{"class":161,"line":1123},[159,174712,590],{"emptyLinePlaceholder":589},[159,174714,174715,174717],{"class":161,"line":1132},[159,174716,172314],{"class":185},[159,174718,172317],{"class":1146},[159,174720,174721,174723,174725],{"class":161,"line":1139},[159,174722,54322],{"class":1142},[159,174724,172727],{"class":185},[159,174726,172730],{"class":165},[159,174728,174729,174731,174733],{"class":161,"line":1168},[159,174730,21176],{"class":1142},[159,174732,172334],{"class":1146},[159,174734,172739],{"class":165},[159,174736,174737,174739,174741],{"class":161,"line":1174},[159,174738,172744],{"class":165},[159,174740,172747],{"class":192},[159,174742,109136],{"class":165},[159,174744,174745,174747,174749],{"class":161,"line":1180},[159,174746,172744],{"class":165},[159,174748,9722],{"class":192},[159,174750,109136],{"class":165},[159,174752,174753,174755,174757],{"class":161,"line":1194},[159,174754,172744],{"class":165},[159,174756,16198],{"class":192},[159,174758,109136],{"class":165},[159,174760,174761,174763,174765],{"class":161,"line":1200},[159,174762,172744],{"class":165},[159,174764,172772],{"class":192},[159,174766,109136],{"class":165},[159,174768,174769],{"class":161,"line":1221},[159,174770,61521],{"class":165},[14,174772,174773],{},"管理器示意：",[151,174775,174777],{"className":53900,"code":174776,"language":53902,"meta":25,"style":25},"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",[49,174778,174779,174788,174796,174807,174811,174821,174834,174845,174852,174858,174862,174871,174880,174886,174893],{"__ignoreMap":25},[159,174780,174781,174783,174786],{"class":161,"line":162},[159,174782,38260],{"class":1142},[159,174784,174785],{"class":185}," StudentManager",[159,174787,27364],{"class":165},[159,174789,174790,174792,174794],{"class":161,"line":176},[159,174791,54322],{"class":1142},[159,174793,54325],{"class":1146},[159,174795,54328],{"class":165},[159,174797,174798,174800,174803,174805],{"class":161,"line":203},[159,174799,54365],{"class":1146},[159,174801,174802],{"class":165},".students ",[159,174804,189],{"class":1142},[159,174806,16884],{"class":165},[159,174808,174809],{"class":161,"line":223},[159,174810,590],{"emptyLinePlaceholder":589},[159,174812,174813,174815,174818],{"class":161,"line":233},[159,174814,54322],{"class":1142},[159,174816,174817],{"class":185}," find_by_id",[159,174819,174820],{"class":165},"(self, student_id):\n",[159,174822,174823,174825,174827,174829,174831],{"class":161,"line":239},[159,174824,27032],{"class":1142},[159,174826,173437],{"class":165},[159,174828,49566],{"class":1142},[159,174830,62268],{"class":1146},[159,174832,174833],{"class":165},".students:\n",[159,174835,174836,174838,174841,174843],{"class":161,"line":245},[159,174837,28260],{"class":1142},[159,174839,174840],{"class":165}," student.student_id ",[159,174842,26581],{"class":1142},[159,174844,173458],{"class":165},[159,174846,174847,174850],{"class":161,"line":251},[159,174848,174849],{"class":1142},"                return",[159,174851,173465],{"class":165},[159,174853,174854,174856],{"class":161,"line":261},[159,174855,21176],{"class":1142},[159,174857,173472],{"class":1146},[159,174859,174860],{"class":161,"line":603},[159,174861,590],{"emptyLinePlaceholder":589},[159,174863,174864,174866,174868],{"class":161,"line":621},[159,174865,54322],{"class":1142},[159,174867,28826],{"class":185},[159,174869,174870],{"class":165},"(self, student):\n",[159,174872,174873,174875,174877],{"class":161,"line":634},[159,174874,17003],{"class":1142},[159,174876,62268],{"class":1146},[159,174878,174879],{"class":165},".find_by_id(student.student_id):\n",[159,174881,174882,174884],{"class":161,"line":640},[159,174883,39293],{"class":1142},[159,174885,147107],{"class":1146},[159,174887,174888,174890],{"class":161,"line":1075},[159,174889,54365],{"class":1146},[159,174891,174892],{"class":165},".students.append(student)\n",[159,174894,174895,174897],{"class":161,"line":1081},[159,174896,21176],{"class":1142},[159,174898,174899],{"class":1146}," True\n",[14,174901,174902],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[37,174904,174906],{"id":174905},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[42,174908,174910],{"id":174909},"_1251-数据结构","12.5.1 数据结构",[151,174912,174914],{"className":53900,"code":174913,"language":53902,"meta":25,"style":25},"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",[49,174915,174916,174924,174955,174985,175014,175043],{"__ignoreMap":25},[159,174917,174918,174920,174922],{"class":161,"line":162},[159,174919,169765],{"class":165},[159,174921,189],{"class":1142},[159,174923,2303],{"class":165},[159,174925,174926,174928,174930,174932,174934,174936,174939,174941,174944,174946,174948,174950,174953],{"class":161,"line":176},[159,174927,169685],{"class":165},[159,174929,169297],{"class":192},[159,174931,1486],{"class":165},[159,174933,169908],{"class":192},[159,174935,1939],{"class":165},[159,174937,174938],{"class":192},"\"category\"",[159,174940,1486],{"class":165},[159,174942,174943],{"class":192},"\"手机\"",[159,174945,1939],{"class":165},[159,174947,105384],{"class":192},[159,174949,1486],{"class":165},[159,174951,174952],{"class":1146},"12000",[159,174954,28548],{"class":165},[159,174956,174957,174959,174961,174963,174965,174967,174969,174971,174974,174976,174978,174980,174983],{"class":161,"line":203},[159,174958,169685],{"class":165},[159,174960,169297],{"class":192},[159,174962,1486],{"class":165},[159,174964,169908],{"class":192},[159,174966,1939],{"class":165},[159,174968,174938],{"class":192},[159,174970,1486],{"class":165},[159,174972,174973],{"class":192},"\"电脑\"",[159,174975,1939],{"class":165},[159,174977,105384],{"class":192},[159,174979,1486],{"class":165},[159,174981,174982],{"class":1146},"18000",[159,174984,28548],{"class":165},[159,174986,174987,174989,174991,174993,174995,174997,174999,175001,175003,175005,175007,175009,175012],{"class":161,"line":223},[159,174988,169685],{"class":165},[159,174990,169297],{"class":192},[159,174992,1486],{"class":165},[159,174994,169929],{"class":192},[159,174996,1939],{"class":165},[159,174998,174938],{"class":192},[159,175000,1486],{"class":165},[159,175002,174943],{"class":192},[159,175004,1939],{"class":165},[159,175006,105384],{"class":192},[159,175008,1486],{"class":165},[159,175010,175011],{"class":1146},"15000",[159,175013,28548],{"class":165},[159,175015,175016,175018,175020,175022,175024,175026,175028,175030,175032,175034,175036,175038,175041],{"class":161,"line":233},[159,175017,169685],{"class":165},[159,175019,169297],{"class":192},[159,175021,1486],{"class":165},[159,175023,169929],{"class":192},[159,175025,1939],{"class":165},[159,175027,174938],{"class":192},[159,175029,1486],{"class":165},[159,175031,174973],{"class":192},[159,175033,1939],{"class":165},[159,175035,105384],{"class":192},[159,175037,1486],{"class":165},[159,175039,175040],{"class":1146},"16000",[159,175042,28548],{"class":165},[159,175044,175045],{"class":161,"line":239},[159,175046,4634],{"class":165},[42,175048,175050],{"id":175049},"_1252-按日期统计","12.5.2 按日期统计",[151,175052,175054],{"className":53900,"code":175053,"language":53902,"meta":25,"style":25},"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",[49,175055,175056,175065,175069,175080,175094,175107,175126,175130],{"__ignoreMap":25},[159,175057,175058,175061,175063],{"class":161,"line":162},[159,175059,175060],{"class":165},"daily_total ",[159,175062,189],{"class":1142},[159,175064,109168],{"class":165},[159,175066,175067],{"class":161,"line":176},[159,175068,590],{"emptyLinePlaceholder":589},[159,175070,175071,175073,175075,175077],{"class":161,"line":203},[159,175072,26657],{"class":1142},[159,175074,169509],{"class":165},[159,175076,49566],{"class":1142},[159,175078,175079],{"class":165}," sales:\n",[159,175081,175082,175085,175087,175090,175092],{"class":161,"line":223},[159,175083,175084],{"class":165},"    date ",[159,175086,189],{"class":1142},[159,175088,175089],{"class":165}," item[",[159,175091,169297],{"class":192},[159,175093,4634],{"class":165},[159,175095,175096,175099,175101,175103,175105],{"class":161,"line":233},[159,175097,175098],{"class":165},"    amount ",[159,175100,189],{"class":1142},[159,175102,175089],{"class":165},[159,175104,105384],{"class":192},[159,175106,4634],{"class":165},[159,175108,175109,175112,175114,175117,175119,175121,175123],{"class":161,"line":239},[159,175110,175111],{"class":165},"    daily_total[date] ",[159,175113,189],{"class":1142},[159,175115,175116],{"class":165}," daily_total.get(date, ",[159,175118,1489],{"class":1146},[159,175120,2710],{"class":165},[159,175122,2704],{"class":1142},[159,175124,175125],{"class":165}," amount\n",[159,175127,175128],{"class":161,"line":245},[159,175129,590],{"emptyLinePlaceholder":589},[159,175131,175132,175134],{"class":161,"line":251},[159,175133,53937],{"class":1146},[159,175135,175136],{"class":165},"(daily_total)\n",[42,175138,175140],{"id":175139},"_1253-按类别统计","12.5.3 按类别统计",[151,175142,175144],{"className":53900,"code":175143,"language":53902,"meta":25,"style":25},"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",[49,175145,175146,175155,175159,175169,175182,175194,175212,175216],{"__ignoreMap":25},[159,175147,175148,175151,175153],{"class":161,"line":162},[159,175149,175150],{"class":165},"category_total ",[159,175152,189],{"class":1142},[159,175154,109168],{"class":165},[159,175156,175157],{"class":161,"line":176},[159,175158,590],{"emptyLinePlaceholder":589},[159,175160,175161,175163,175165,175167],{"class":161,"line":203},[159,175162,26657],{"class":1142},[159,175164,169509],{"class":165},[159,175166,49566],{"class":1142},[159,175168,175079],{"class":165},[159,175170,175171,175174,175176,175178,175180],{"class":161,"line":223},[159,175172,175173],{"class":165},"    category ",[159,175175,189],{"class":1142},[159,175177,175089],{"class":165},[159,175179,174938],{"class":192},[159,175181,4634],{"class":165},[159,175183,175184,175186,175188,175190,175192],{"class":161,"line":233},[159,175185,175098],{"class":165},[159,175187,189],{"class":1142},[159,175189,175089],{"class":165},[159,175191,105384],{"class":192},[159,175193,4634],{"class":165},[159,175195,175196,175199,175201,175204,175206,175208,175210],{"class":161,"line":239},[159,175197,175198],{"class":165},"    category_total[category] ",[159,175200,189],{"class":1142},[159,175202,175203],{"class":165}," category_total.get(category, ",[159,175205,1489],{"class":1146},[159,175207,2710],{"class":165},[159,175209,2704],{"class":1142},[159,175211,175125],{"class":165},[159,175213,175214],{"class":161,"line":245},[159,175215,590],{"emptyLinePlaceholder":589},[159,175217,175218,175220],{"class":161,"line":251},[159,175219,53937],{"class":1146},[159,175221,175222],{"class":165},"(category_total)\n",[42,175224,175226],{"id":175225},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[151,175228,175230],{"className":53900,"code":175229,"language":53902,"meta":25,"style":25},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[49,175231,175232,175257],{"__ignoreMap":25},[159,175233,175234,175237,175239,175241,175244,175247,175250,175253,175255],{"class":161,"line":162},[159,175235,175236],{"class":165},"top_date, top_amount ",[159,175238,189],{"class":1142},[159,175240,29566],{"class":1146},[159,175242,175243],{"class":165},"(daily_total.items(), ",[159,175245,175246],{"class":8765},"key",[159,175248,175249],{"class":1142},"=lambda",[159,175251,175252],{"class":165}," item: item[",[159,175254,4932],{"class":1146},[159,175256,28275],{"class":165},[159,175258,175259,175261],{"class":161,"line":176},[159,175260,53937],{"class":1146},[159,175262,175263],{"class":165},"(top_date, top_amount)\n",[37,175265,175267],{"id":175266},"_126-绘制柱状图","12.6 绘制柱状图",[151,175269,175271],{"className":53900,"code":175270,"language":53902,"meta":25,"style":25},"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",[49,175272,175273,175287,175298,175302,175310,175322,175334,175345,175349,175353,175363,175374,175388,175393,175410,175427,175443,175447],{"__ignoreMap":25},[159,175274,175275,175277,175279,175281,175283,175285],{"class":161,"line":162},[159,175276,54258],{"class":1142},[159,175278,168679],{"class":165},[159,175280,53914],{"class":1142},[159,175282,168684],{"class":165},[159,175284,54903],{"class":1142},[159,175286,168689],{"class":165},[159,175288,175289,175291,175293,175295],{"class":161,"line":176},[159,175290,54258],{"class":1142},[159,175292,168538],{"class":165},[159,175294,53914],{"class":1142},[159,175296,175297],{"class":165}," Bar\n",[159,175299,175300],{"class":161,"line":203},[159,175301,590],{"emptyLinePlaceholder":589},[159,175303,175304,175306,175308],{"class":161,"line":223},[159,175305,175150],{"class":165},[159,175307,189],{"class":1142},[159,175309,1478],{"class":165},[159,175311,175312,175315,175317,175320],{"class":161,"line":233},[159,175313,175314],{"class":192},"    \"手机\"",[159,175316,1486],{"class":165},[159,175318,175319],{"class":1146},"27000",[159,175321,17070],{"class":165},[159,175323,175324,175327,175329,175332],{"class":161,"line":239},[159,175325,175326],{"class":192},"    \"电脑\"",[159,175328,1486],{"class":165},[159,175330,175331],{"class":1146},"34000",[159,175333,17070],{"class":165},[159,175335,175336,175339,175341,175343],{"class":161,"line":245},[159,175337,175338],{"class":192},"    \"耳机\"",[159,175340,1486],{"class":165},[159,175342,145699],{"class":1146},[159,175344,17070],{"class":165},[159,175346,175347],{"class":161,"line":251},[159,175348,15685],{"class":165},[159,175350,175351],{"class":161,"line":261},[159,175352,590],{"emptyLinePlaceholder":589},[159,175354,175355,175358,175360],{"class":161,"line":603},[159,175356,175357],{"class":165},"bar ",[159,175359,189],{"class":1142},[159,175361,175362],{"class":165}," Bar()\n",[159,175364,175365,175368,175371],{"class":161,"line":621},[159,175366,175367],{"class":165},"bar.add_xaxis(",[159,175369,175370],{"class":1146},"list",[159,175372,175373],{"class":165},"(category_total.keys()))\n",[159,175375,175376,175379,175381,175383,175385],{"class":161,"line":634},[159,175377,175378],{"class":165},"bar.add_yaxis(",[159,175380,168595],{"class":192},[159,175382,1939],{"class":165},[159,175384,175370],{"class":1146},[159,175386,175387],{"class":165},"(category_total.values()))\n",[159,175389,175390],{"class":161,"line":640},[159,175391,175392],{"class":165},"bar.set_global_opts(\n",[159,175394,175395,175397,175399,175401,175403,175405,175408],{"class":161,"line":1075},[159,175396,168773],{"class":8765},[159,175398,189],{"class":1142},[159,175400,168778],{"class":165},[159,175402,998],{"class":8765},[159,175404,189],{"class":1142},[159,175406,175407],{"class":192},"\"品类销售额\"",[159,175409,61442],{"class":165},[159,175411,175412,175414,175416,175418,175420,175422,175425],{"class":161,"line":1081},[159,175413,168792],{"class":8765},[159,175415,189],{"class":1142},[159,175417,168797],{"class":165},[159,175419,101110],{"class":8765},[159,175421,189],{"class":1142},[159,175423,175424],{"class":192},"\"品类\"",[159,175426,61442],{"class":165},[159,175428,175429,175431,175433,175435,175437,175439,175441],{"class":161,"line":1091},[159,175430,168811],{"class":8765},[159,175432,189],{"class":1142},[159,175434,168797],{"class":165},[159,175436,101110],{"class":8765},[159,175438,189],{"class":1142},[159,175440,168595],{"class":192},[159,175442,61442],{"class":165},[159,175444,175445],{"class":161,"line":1100},[159,175446,1165],{"class":165},[159,175448,175449,175452,175455],{"class":161,"line":1123},[159,175450,175451],{"class":165},"bar.render(",[159,175453,175454],{"class":192},"\"category_sales.html\"",[159,175456,1165],{"class":165},[37,175458,175460],{"id":175459},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,175462,175463],{},"时间线适合展示不同日期、月份、年份的数据变化。",[151,175465,175467],{"className":53900,"code":175466,"language":53902,"meta":25,"style":25},"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",[49,175468,175469,175483,175494,175498,175506,175530,175553,175578,175582,175586,175596,175600,175611,175620,175630,175644,175675,175680,175684],{"__ignoreMap":25},[159,175470,175471,175473,175475,175477,175479,175481],{"class":161,"line":162},[159,175472,54258],{"class":1142},[159,175474,168679],{"class":165},[159,175476,53914],{"class":1142},[159,175478,168684],{"class":165},[159,175480,54903],{"class":1142},[159,175482,168689],{"class":165},[159,175484,175485,175487,175489,175491],{"class":161,"line":176},[159,175486,54258],{"class":1142},[159,175488,168538],{"class":165},[159,175490,53914],{"class":1142},[159,175492,175493],{"class":165}," Bar, Timeline\n",[159,175495,175496],{"class":161,"line":203},[159,175497,590],{"emptyLinePlaceholder":589},[159,175499,175500,175502,175504],{"class":161,"line":223},[159,175501,122958],{"class":165},[159,175503,189],{"class":1142},[159,175505,1478],{"class":165},[159,175507,175508,175511,175514,175516,175518,175520,175522,175524,175526,175528],{"class":161,"line":233},[159,175509,175510],{"class":192},"    \"2024-10-01\"",[159,175512,175513],{"class":165},": {",[159,175515,174943],{"class":192},[159,175517,1486],{"class":165},[159,175519,174952],{"class":1146},[159,175521,1939],{"class":165},[159,175523,174973],{"class":192},[159,175525,1486],{"class":165},[159,175527,174982],{"class":1146},[159,175529,28548],{"class":165},[159,175531,175532,175535,175537,175539,175541,175543,175545,175547,175549,175551],{"class":161,"line":239},[159,175533,175534],{"class":192},"    \"2024-10-02\"",[159,175536,175513],{"class":165},[159,175538,174943],{"class":192},[159,175540,1486],{"class":165},[159,175542,175011],{"class":1146},[159,175544,1939],{"class":165},[159,175546,174973],{"class":192},[159,175548,1486],{"class":165},[159,175550,175040],{"class":1146},[159,175552,28548],{"class":165},[159,175554,175555,175558,175560,175562,175564,175567,175569,175571,175573,175576],{"class":161,"line":245},[159,175556,175557],{"class":192},"    \"2024-10-03\"",[159,175559,175513],{"class":165},[159,175561,174943],{"class":192},[159,175563,1486],{"class":165},[159,175565,175566],{"class":1146},"17000",[159,175568,1939],{"class":165},[159,175570,174973],{"class":192},[159,175572,1486],{"class":165},[159,175574,175575],{"class":1146},"19000",[159,175577,28548],{"class":165},[159,175579,175580],{"class":161,"line":251},[159,175581,15685],{"class":165},[159,175583,175584],{"class":161,"line":261},[159,175585,590],{"emptyLinePlaceholder":589},[159,175587,175588,175591,175593],{"class":161,"line":603},[159,175589,175590],{"class":165},"timeline ",[159,175592,189],{"class":1142},[159,175594,175595],{"class":165}," Timeline()\n",[159,175597,175598],{"class":161,"line":621},[159,175599,590],{"emptyLinePlaceholder":589},[159,175601,175602,175604,175607,175609],{"class":161,"line":634},[159,175603,26657],{"class":1142},[159,175605,175606],{"class":165}," date, category_data ",[159,175608,49566],{"class":1142},[159,175610,170448],{"class":165},[159,175612,175613,175616,175618],{"class":161,"line":640},[159,175614,175615],{"class":165},"    bar ",[159,175617,189],{"class":1142},[159,175619,175362],{"class":165},[159,175621,175622,175625,175627],{"class":161,"line":1075},[159,175623,175624],{"class":165},"    bar.add_xaxis(",[159,175626,175370],{"class":1146},[159,175628,175629],{"class":165},"(category_data.keys()))\n",[159,175631,175632,175635,175637,175639,175641],{"class":161,"line":1081},[159,175633,175634],{"class":165},"    bar.add_yaxis(",[159,175636,168595],{"class":192},[159,175638,1939],{"class":165},[159,175640,175370],{"class":1146},[159,175642,175643],{"class":165},"(category_data.values()))\n",[159,175645,175646,175649,175652,175654,175656,175658,175660,175662,175664,175666,175668,175670,175673],{"class":161,"line":1091},[159,175647,175648],{"class":165},"    bar.set_global_opts(",[159,175650,175651],{"class":8765},"title_opts",[159,175653,189],{"class":1142},[159,175655,168778],{"class":165},[159,175657,998],{"class":8765},[159,175659,189],{"class":1142},[159,175661,23931],{"class":1142},[159,175663,24115],{"class":192},[159,175665,24721],{"class":1146},[159,175667,21034],{"class":165},[159,175669,886],{"class":1146},[159,175671,175672],{"class":192},"销售额\"",[159,175674,18787],{"class":165},[159,175676,175677],{"class":161,"line":1100},[159,175678,175679],{"class":165},"    timeline.add(bar, date)\n",[159,175681,175682],{"class":161,"line":1123},[159,175683,590],{"emptyLinePlaceholder":589},[159,175685,175686,175689,175692],{"class":161,"line":1132},[159,175687,175688],{"class":165},"timeline.render(",[159,175690,175691],{"class":192},"\"timeline_sales.html\"",[159,175693,1165],{"class":165},[37,175695,175697],{"id":175696},"_128-绘制地图","12.8 绘制地图",[14,175699,175700],{},"地图适合展示地区数据。",[151,175702,175704],{"className":53900,"code":175703,"language":53902,"meta":25,"style":25},"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",[49,175705,175706,175720,175731,175735,175743,175756,175768,175781,175794,175798,175802,175812,175827,175832,175849,175868,175872],{"__ignoreMap":25},[159,175707,175708,175710,175712,175714,175716,175718],{"class":161,"line":162},[159,175709,54258],{"class":1142},[159,175711,168679],{"class":165},[159,175713,53914],{"class":1142},[159,175715,168684],{"class":165},[159,175717,54903],{"class":1142},[159,175719,168689],{"class":165},[159,175721,175722,175724,175726,175728],{"class":161,"line":176},[159,175723,54258],{"class":1142},[159,175725,168538],{"class":165},[159,175727,53914],{"class":1142},[159,175729,175730],{"class":165}," Map\n",[159,175732,175733],{"class":161,"line":203},[159,175734,590],{"emptyLinePlaceholder":589},[159,175736,175737,175739,175741],{"class":161,"line":223},[159,175738,122958],{"class":165},[159,175740,189],{"class":1142},[159,175742,2303],{"class":165},[159,175744,175745,175748,175750,175752,175754],{"class":161,"line":233},[159,175746,175747],{"class":165},"    (",[159,175749,16345],{"class":192},[159,175751,1939],{"class":165},[159,175753,4384],{"class":1146},[159,175755,61442],{"class":165},[159,175757,175758,175760,175762,175764,175766],{"class":161,"line":239},[159,175759,175747],{"class":165},[159,175761,16365],{"class":192},[159,175763,1939],{"class":165},[159,175765,168612],{"class":1146},[159,175767,61442],{"class":165},[159,175769,175770,175772,175775,175777,175779],{"class":161,"line":245},[159,175771,175747],{"class":165},[159,175773,175774],{"class":192},"\"广东\"",[159,175776,1939],{"class":165},[159,175778,13303],{"class":1146},[159,175780,61442],{"class":165},[159,175782,175783,175785,175788,175790,175792],{"class":161,"line":251},[159,175784,175747],{"class":165},[159,175786,175787],{"class":192},"\"浙江\"",[159,175789,1939],{"class":165},[159,175791,168617],{"class":1146},[159,175793,61442],{"class":165},[159,175795,175796],{"class":161,"line":261},[159,175797,4634],{"class":165},[159,175799,175800],{"class":161,"line":603},[159,175801,590],{"emptyLinePlaceholder":589},[159,175803,175804,175807,175809],{"class":161,"line":621},[159,175805,175806],{"class":165},"map_chart ",[159,175808,189],{"class":1142},[159,175810,175811],{"class":165}," Map()\n",[159,175813,175814,175817,175819,175822,175825],{"class":161,"line":634},[159,175815,175816],{"class":165},"map_chart.add(",[159,175818,168595],{"class":192},[159,175820,175821],{"class":165},", data, ",[159,175823,175824],{"class":192},"\"china\"",[159,175826,1165],{"class":165},[159,175828,175829],{"class":161,"line":640},[159,175830,175831],{"class":165},"map_chart.set_global_opts(\n",[159,175833,175834,175836,175838,175840,175842,175844,175847],{"class":161,"line":1075},[159,175835,168773],{"class":8765},[159,175837,189],{"class":1142},[159,175839,168778],{"class":165},[159,175841,998],{"class":8765},[159,175843,189],{"class":1142},[159,175845,175846],{"class":192},"\"地区销售额\"",[159,175848,61442],{"class":165},[159,175850,175851,175854,175856,175859,175862,175864,175866],{"class":161,"line":1081},[159,175852,175853],{"class":8765},"    visualmap_opts",[159,175855,189],{"class":1142},[159,175857,175858],{"class":165},"opts.VisualMapOpts(",[159,175860,175861],{"class":8765},"max_",[159,175863,189],{"class":1142},[159,175865,13303],{"class":1146},[159,175867,61442],{"class":165},[159,175869,175870],{"class":161,"line":1091},[159,175871,1165],{"class":165},[159,175873,175874,175877,175880],{"class":161,"line":1100},[159,175875,175876],{"class":165},"map_chart.render(",[159,175878,175879],{"class":192},"\"map_sales.html\"",[159,175881,1165],{"class":165},[14,175883,175884],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[37,175886,175888],{"id":175887},"_129-项目拆分建议","12.9 项目拆分建议",[14,175890,175891],{},"当代码超过一个文件时，可以这样组织：",[151,175893,175896],{"className":175894,"code":175895,"language":8507,"meta":25},[28803],"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",[49,175897,175895],{"__ignoreMap":25},[14,175899,175900],{},"职责：",[134,175902,175903,175909,175915,175921],{},[106,175904,175905,175908],{},[49,175906,175907],{},"main.py","：程序入口。",[106,175910,175911,175914],{},[49,175912,175913],{},"file_utils.py","：读写 JSON。",[106,175916,175917,175920],{},[49,175918,175919],{},"sales_service.py","：统计销售数据。",[106,175922,175923,175926],{},[49,175924,175925],{},"chart_builder.py","：生成图表。",[37,175928,175930],{"id":175929},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,175932,175933],{},"语法基础：",[134,175935,175936,175939,175942,175945],{},[106,175937,175938],{},"会写变量、注释、输入输出。",[106,175940,175941],{},"会使用 int、float、str、bool。",[106,175943,175944],{},"会做类型转换。",[106,175946,175947],{},"会使用 f-string 格式化输出。",[14,175949,175950],{},"流程控制：",[134,175952,175953,175959,175965,175973],{},[106,175954,175955,175956,51907],{},"会写 ",[49,175957,175958],{},"if elif else",[106,175960,175955,175961,122318,175963,51907],{},[49,175962,129963],{},[49,175964,26657],{},[106,175966,175967,175968,122318,175970,51907],{},"理解 ",[49,175969,25703],{},[49,175971,175972],{},"continue",[106,175974,175975],{},"能写嵌套循环。",[14,175977,175978],{},"函数：",[134,175980,175981,175984,175987,175990],{},[106,175982,175983],{},"会定义和调用函数。",[106,175985,175986],{},"理解参数和返回值。",[106,175988,175989],{},"知道局部变量和全局变量。",[106,175991,175992],{},"会使用默认参数、关键字参数、不定长参数。",[14,175994,175995],{},"容器：",[134,175997,175998,176001,176004,176007,176010],{},[106,175999,176000],{},"会使用列表增删改查。",[106,176002,176003],{},"会遍历列表、字典。",[106,176005,176006],{},"会使用切片。",[106,176008,176009],{},"会用集合去重。",[106,176011,176012],{},"会处理列表嵌套字典。",[14,176014,176015],{},"文件和模块：",[134,176017,176018,176021,176024,176027,176030],{},[106,176019,176020],{},"会读写文本文件。",[106,176022,176023],{},"会读写 JSON。",[106,176025,176026],{},"会捕获常见异常。",[106,176028,176029],{},"会导入模块和第三方包。",[106,176031,176032],{},"会创建简单包结构。",[14,176034,176035],{},"项目能力：",[134,176037,176038,176041,176044,176047,176050],{},[106,176039,176040],{},"能把代码拆成函数。",[106,176042,176043],{},"能把数据保存到文件。",[106,176045,176046],{},"能处理用户输入错误。",[106,176048,176049],{},"能写一个完整菜单程序。",[106,176051,176052],{},"能用 pyecharts 生成图表。",[37,176054,176056],{"id":176055},"_1211-推荐练习顺序","12.11 推荐练习顺序",[134,176058,176059,176062,176065,176068,176071,176074,176077,176080],{},[106,176060,176061],{},"猜数字游戏。",[106,176063,176064],{},"ATM 菜单程序。",[106,176066,176067],{},"学生成绩统计。",[106,176069,176070],{},"学生管理系统函数版。",[106,176072,176073],{},"学生管理系统文件持久化版。",[106,176075,176076],{},"学生管理系统面向对象版。",[106,176078,176079],{},"销售数据统计。",[106,176081,176082],{},"销售数据可视化。",[37,176084,176086],{"id":176085},"_1212-常见学习误区","12.12 常见学习误区",[134,176088,176089,176092,176095,176098,176101,176104,176107],{},[106,176090,176091],{},"只看视频不敲代码。",[106,176093,176094],{},"一报错就复制错误去搜，不先读报错位置。",[106,176096,176097],{},"变量名随便写，后续自己看不懂。",[106,176099,176100],{},"所有代码都写在一个文件一个函数里。",[106,176102,176103],{},"不保存练习代码，复习时没有材料。",[106,176105,176106],{},"还没掌握列表字典就急着学框架。",[106,176108,176109],{},"不会读官方文档，只依赖教程。",[37,176111,176113],{"id":176112},"_1213-如何读报错","12.13 如何读报错",[14,176115,176116],{},"报错通常从下往上看最后几行。",[14,176118,38698],{},[151,176120,176123],{"className":176121,"code":176122,"language":8507,"meta":25},[28803],"ValueError: invalid literal for int() with base 10: 'abc'\n",[49,176124,176122],{"__ignoreMap":25},[14,176126,48124],{},[134,176128,176129,176135,176145],{},[106,176130,176131,176132,51907],{},"异常类型是 ",[49,176133,176134],{},"ValueError",[106,176136,128645,176137,176140,176141,176144],{},[49,176138,176139],{},"int()"," 无法把 ",[49,176142,176143],{},"'abc'"," 转成整数。",[106,176146,176147],{},"应该检查输入内容或增加异常处理。",[14,176149,176150],{},"再看文件名和行号：",[151,176152,176155],{"className":176153,"code":176154,"language":8507,"meta":25},[28803],"File \"main.py\", line 10, in \u003Cmodule>\n",[49,176156,176154],{"__ignoreMap":25},[14,176158,176159,176160,176162],{},"表示错误发生在 ",[49,176161,175907],{}," 第 10 行。",[37,176164,176166],{"id":176165},"_1214-后续学习方向","12.14 后续学习方向",[14,176168,176169],{},"Python 基础完成后，可以按兴趣选择方向：",[134,176171,176172,176184,176193,176205,176216,176225,176235],{},[106,176173,176174,176175,24079,176178,24079,176181,51907],{},"自动化办公：",[49,176176,176177],{},"openpyxl",[49,176179,176180],{},"python-docx",[49,176182,176183],{},"pdfplumber",[106,176185,176186,176187,24079,176189,24079,176191,51907],{},"数据分析：",[49,176188,121926],{},[49,176190,167485],{},[49,176192,167493],{},[106,176194,176195,176196,24079,176199,24079,176202,51907],{},"Web 后端：",[49,176197,176198],{},"Flask",[49,176200,176201],{},"FastAPI",[49,176203,176204],{},"Django",[106,176206,176207,176208,24079,176210,24079,176213,51907],{},"爬虫：",[49,176209,167470],{},[49,176211,176212],{},"BeautifulSoup",[49,176214,176215],{},"Scrapy",[106,176217,176218,176219,24079,176221,176224],{},"测试开发：",[49,176220,167517],{},[49,176222,176223],{},"selenium","、接口测试。",[106,176226,176227,176228,24079,176230,24079,176232,51907],{},"人工智能：",[49,176229,121926],{},[49,176231,167485],{},[49,176233,176234],{},"pytorch",[106,176236,176237,176238,24079,176240,24079,176243,51907],{},"运维脚本：",[49,176239,167086],{},[49,176241,176242],{},"subprocess",[49,176244,176245],{},"paramiko",[14,176247,176248],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[37,176250,176252],{"id":176251},"_1215-结课练习","12.15 结课练习",[134,176254,176255,176258,176261,176264,176267,176270,176273,176276],{},[106,176256,176257],{},"完成函数版学生管理系统。",[106,176259,176260],{},"给学生管理系统增加 JSON 持久化。",[106,176262,176263],{},"给学生管理系统增加异常处理。",[106,176265,176266],{},"把学生管理系统改成面向对象版。",[106,176268,176269],{},"使用 pyecharts 绘制学生成绩柱状图。",[106,176271,176272],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[106,176274,176275],{},"按品类统计销售额并绘制柱状图。",[106,176277,176278],{},"写一份自己的 Python 学习路线图。",[1468,176280,176281],{},"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":25,"searchDepth":176,"depth":176,"links":176283},[176284,176285,176288,176289,176290,176296,176297,176298,176299,176300,176301,176302,176303,176304,176305],{"id":173000,"depth":176,"text":173001},{"id":173050,"depth":176,"text":173051,"children":176286},[176287],{"id":173054,"depth":203,"text":173055},{"id":173093,"depth":176,"text":173094},{"id":174567,"depth":176,"text":174568},{"id":174905,"depth":176,"text":174906,"children":176291},[176292,176293,176294,176295],{"id":174909,"depth":203,"text":174910},{"id":175049,"depth":203,"text":175050},{"id":175139,"depth":203,"text":175140},{"id":175225,"depth":203,"text":175226},{"id":175266,"depth":176,"text":175267},{"id":175459,"depth":176,"text":175460},{"id":175696,"depth":176,"text":175697},{"id":175887,"depth":176,"text":175888},{"id":175929,"depth":176,"text":175930},{"id":176055,"depth":176,"text":176056},{"id":176085,"depth":176,"text":176086},{"id":176112,"depth":176,"text":176113},{"id":176165,"depth":176,"text":176166},{"id":176251,"depth":176,"text":176252},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":172992,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":176312,"title":176313,"body":176314,"description":23809,"extension":23810,"meta":178783,"navigation":589,"path":178784,"seo":178785,"stem":178786,"__hash__":178787},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":176315,"toc":178758},[176316,176319,176323,176326,176329,176349,176352,176375,176378,176381,176403,176406,176428,176432,176435,176475,176478,176599,176603,176606,176646,176649,176673,176676,176680,176683,176697,176730,176733,176768,176771,176794,176797,176830,176833,176835,176841,176916,176919,176925,176942,176982,176986,176989,177035,177037,177075,177078,177113,177116,177151,177154,177186,177189,177208,177212,177216,177329,177331,177406,177410,177456,177459,177485,177494,177498,177501,177564,177572,177600,177604,177644,177709,177713,177716,177755,177758,177803,177806,177867,177871,177898,177901,177929,177932,177936,177940,178005,178008,178046,178049,178081,178085,178184,178188,178191,178264,178267,178315,178319,178325,178365,178368,178415,178418,178467,178471,178473,178487,178489,178670,178674,178701,178721,178728,178732,178749,178755],[10,176317,176313],{"id":176318},"_2-基础语法变量与字符串",[37,176320,176322],{"id":176321},"_21-注释","2.1 注释",[14,176324,176325],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,176327,176328],{},"单行注释：",[151,176330,176332],{"className":53900,"code":176331,"language":53902,"meta":25,"style":25},"# 这是单行注释\nprint(\"hello\")\n",[49,176333,176334,176339],{"__ignoreMap":25},[159,176335,176336],{"class":161,"line":162},[159,176337,176338],{"class":1135},"# 这是单行注释\n",[159,176340,176341,176343,176345,176347],{"class":161,"line":176},[159,176342,53937],{"class":1146},[159,176344,1159],{"class":165},[159,176346,29459],{"class":192},[159,176348,1165],{"class":165},[14,176350,176351],{},"多行说明常用三引号：",[151,176353,176355],{"className":53900,"code":176354,"language":53902,"meta":25,"style":25},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[49,176356,176357,176361,176366,176371],{"__ignoreMap":25},[159,176358,176359],{"class":161,"line":162},[159,176360,116998],{"class":192},[159,176362,176363],{"class":161,"line":176},[159,176364,176365],{"class":192},"这是多行说明。\n",[159,176367,176368],{"class":161,"line":203},[159,176369,176370],{"class":192},"常用于文件顶部说明、函数说明等。\n",[159,176372,176373],{"class":161,"line":223},[159,176374,116998],{"class":192},[14,176376,176377],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,176379,176380],{},"不好：",[151,176382,176384],{"className":53900,"code":176383,"language":53902,"meta":25,"style":25},"# age 加 1\nage = age + 1\n",[49,176385,176386,176391],{"__ignoreMap":25},[159,176387,176388],{"class":161,"line":162},[159,176389,176390],{"class":1135},"# age 加 1\n",[159,176392,176393,176395,176397,176399,176401],{"class":161,"line":176},[159,176394,167846],{"class":165},[159,176396,189],{"class":1142},[159,176398,39268],{"class":165},[159,176400,2704],{"class":1142},[159,176402,2570],{"class":1146},[14,176404,176405],{},"较好：",[151,176407,176409],{"className":53900,"code":176408,"language":53902,"meta":25,"style":25},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[49,176410,176411,176416],{"__ignoreMap":25},[159,176412,176413],{"class":161,"line":162},[159,176414,176415],{"class":1135},"# 用户过完生日后，年龄增加一岁\n",[159,176417,176418,176420,176422,176424,176426],{"class":161,"line":176},[159,176419,167846],{"class":165},[159,176421,189],{"class":1142},[159,176423,39268],{"class":165},[159,176425,2704],{"class":1142},[159,176427,2570],{"class":1146},[37,176429,176431],{"id":176430},"_22-字面量","2.2 字面量",[14,176433,176434],{},"字面量就是代码中直接写出来的数据。",[151,176436,176438],{"className":53900,"code":176437,"language":53902,"meta":25,"style":25},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[49,176439,176440,176447,176454,176461,176468],{"__ignoreMap":25},[159,176441,176442,176444],{"class":161,"line":162},[159,176443,1596],{"class":1146},[159,176445,176446],{"class":1135},"          # 整数\n",[159,176448,176449,176451],{"class":161,"line":176},[159,176450,23928],{"class":1146},[159,176452,176453],{"class":1135},"         # 小数\n",[159,176455,176456,176458],{"class":161,"line":203},[159,176457,29459],{"class":192},[159,176459,176460],{"class":1135},"      # 字符串\n",[159,176462,176463,176465],{"class":161,"line":223},[159,176464,54995],{"class":1146},[159,176466,176467],{"class":1135},"         # 布尔值\n",[159,176469,176470,176472],{"class":161,"line":233},[159,176471,116986],{"class":1146},[159,176473,176474],{"class":1135},"         # 空值\n",[14,176476,176477],{},"常见字面量类型：",[12347,176479,176480,176490],{},[16500,176481,176482],{},[12356,176483,176484,176486,176488],{},[12365,176485,47262],{},[12365,176487,51015],{},[12365,176489,49392],{},[16624,176491,176492,176503,176514,176525,176537,176549,176561,176574,176586],{},[12356,176493,176494,176496,176500],{},[12488,176495,23886],{},[12488,176497,176498],{},[49,176499,1596],{},[12488,176501,176502],{},"整数",[12356,176504,176505,176507,176511],{},[12488,176506,23920],{},[12488,176508,176509],{},[49,176510,23928],{},[12488,176512,176513],{},"浮点数",[12356,176515,176516,176518,176522],{},[12488,176517,24983],{},[12488,176519,176520],{},[49,176521,29459],{},[12488,176523,176524],{},"字符串",[12356,176526,176527,176529,176535],{},[12488,176528,25035],{},[12488,176530,176531,24079,176533],{},[49,176532,54995],{},[49,176534,57382],{},[12488,176536,13079],{},[12356,176538,176539,176542,176546],{},[12488,176540,176541],{},"NoneType",[12488,176543,176544],{},[49,176545,116986],{},[12488,176547,176548],{},"空值",[12356,176550,176551,176553,176558],{},[12488,176552,175370],{},[12488,176554,176555],{},[49,176556,176557],{},"[1, 2, 3]",[12488,176559,176560],{},"列表",[12356,176562,176563,176566,176571],{},[12488,176564,176565],{},"tuple",[12488,176567,176568],{},[49,176569,176570],{},"(1, 2, 3)",[12488,176572,176573],{},"元组",[12356,176575,176576,176578,176583],{},[12488,176577,135846],{},[12488,176579,176580],{},[49,176581,176582],{},"{\"name\": \"张三\"}",[12488,176584,176585],{},"字典",[12356,176587,176588,176591,176596],{},[12488,176589,176590],{},"set",[12488,176592,176593],{},[49,176594,176595],{},"{1, 2, 3}",[12488,176597,176598],{},"集合",[37,176600,176602],{"id":176601},"_23-变量","2.3 变量",[14,176604,176605],{},"变量是保存数据的名字。",[151,176607,176609],{"className":53900,"code":176608,"language":53902,"meta":25,"style":25},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[49,176610,176611,176619,176627,176637],{"__ignoreMap":25},[159,176612,176613,176615,176617],{"class":161,"line":162},[159,176614,167836],{"class":165},[159,176616,189],{"class":1142},[159,176618,170653],{"class":192},[159,176620,176621,176623,176625],{"class":161,"line":176},[159,176622,167846],{"class":165},[159,176624,189],{"class":1142},[159,176626,167851],{"class":1146},[159,176628,176629,176632,176634],{"class":161,"line":203},[159,176630,176631],{"class":165},"height ",[159,176633,189],{"class":1142},[159,176635,176636],{"class":1146}," 1.75\n",[159,176638,176639,176642,176644],{"class":161,"line":223},[159,176640,176641],{"class":165},"is_student ",[159,176643,189],{"class":1142},[159,176645,174899],{"class":1146},[14,176647,176648],{},"Python 的变量不需要提前声明类型：",[151,176650,176652],{"className":53900,"code":176651,"language":53902,"meta":25,"style":25},"score = 100\nscore = \"满分\"\n",[49,176653,176654,176664],{"__ignoreMap":25},[159,176655,176656,176659,176661],{"class":161,"line":162},[159,176657,176658],{"class":165},"score ",[159,176660,189],{"class":1142},[159,176662,176663],{"class":1146}," 100\n",[159,176665,176666,176668,176670],{"class":161,"line":176},[159,176667,176658],{"class":165},[159,176669,189],{"class":1142},[159,176671,176672],{"class":192}," \"满分\"\n",[14,176674,176675],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[37,176677,176679],{"id":176678},"_24-变量命名规则","2.4 变量命名规则",[14,176681,176682],{},"硬性规则：",[134,176684,176685,176688,176691,176694],{},[106,176686,176687],{},"只能由字母、数字、下划线组成。",[106,176689,176690],{},"不能以数字开头。",[106,176692,176693],{},"不能使用 Python 关键字。",[106,176695,176696],{},"区分大小写。",[151,176698,176700],{"className":53900,"code":176699,"language":53902,"meta":25,"style":25},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[49,176701,176702,176711,176720],{"__ignoreMap":25},[159,176703,176704,176707,176709],{"class":161,"line":162},[159,176705,176706],{"class":165},"user_name ",[159,176708,189],{"class":1142},[159,176710,167841],{"class":192},[159,176712,176713,176716,176718],{"class":161,"line":176},[159,176714,176715],{"class":165},"age2 ",[159,176717,189],{"class":1142},[159,176719,167851],{"class":1146},[159,176721,176722,176725,176727],{"class":161,"line":203},[159,176723,176724],{"class":165},"_token ",[159,176726,189],{"class":1142},[159,176728,176729],{"class":192}," \"abc\"\n",[14,176731,176732],{},"错误写法：",[151,176734,176736],{"className":53900,"code":176735,"language":53902,"meta":25,"style":25},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[49,176737,176738,176747,176759],{"__ignoreMap":25},[159,176739,176740,176743,176745],{"class":161,"line":162},[159,176741,176742],{"class":98703},"2age",[159,176744,1150],{"class":1142},[159,176746,167851],{"class":1146},[159,176748,176749,176751,176753,176755,176757],{"class":161,"line":176},[159,176750,152884],{"class":165},[159,176752,24376],{"class":1142},[159,176754,167836],{"class":165},[159,176756,189],{"class":1142},[159,176758,167841],{"class":192},[159,176760,176761,176763,176765],{"class":161,"line":203},[159,176762,38260],{"class":1142},[159,176764,1150],{"class":1142},[159,176766,176767],{"class":192}," \"一班\"\n",[14,176769,176770],{},"查看关键字：",[151,176772,176774],{"className":53900,"code":176773,"language":53902,"meta":25,"style":25},"import keyword\n\nprint(keyword.kwlist)\n",[49,176775,176776,176783,176787],{"__ignoreMap":25},[159,176777,176778,176780],{"class":161,"line":162},[159,176779,53914],{"class":1142},[159,176781,176782],{"class":165}," keyword\n",[159,176784,176785],{"class":161,"line":176},[159,176786,590],{"emptyLinePlaceholder":589},[159,176788,176789,176791],{"class":161,"line":203},[159,176790,53937],{"class":1146},[159,176792,176793],{"class":165},"(keyword.kwlist)\n",[14,176795,176796],{},"推荐命名风格：",[151,176798,176800],{"className":53900,"code":176799,"language":53902,"meta":25,"style":25},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[49,176801,176802,176811,176821],{"__ignoreMap":25},[159,176803,176804,176807,176809],{"class":161,"line":162},[159,176805,176806],{"class":165},"student_name ",[159,176808,189],{"class":1142},[159,176810,170653],{"class":192},[159,176812,176813,176816,176818],{"class":161,"line":176},[159,176814,176815],{"class":165},"total_price ",[159,176817,189],{"class":1142},[159,176819,176820],{"class":1146}," 99.8\n",[159,176822,176823,176826,176828],{"class":161,"line":203},[159,176824,176825],{"class":165},"is_finished ",[159,176827,189],{"class":1142},[159,176829,147107],{"class":1146},[14,176831,176832],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[37,176834,74110],{"id":74109},[14,176836,125666,176837,176840],{},[49,176838,176839],{},"type()"," 查看数据类型：",[151,176842,176844],{"className":53900,"code":176843,"language":53902,"meta":25,"style":25},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[49,176845,176846,176860,176874,176888,176902],{"__ignoreMap":25},[159,176847,176848,176850,176852,176854,176856,176858],{"class":161,"line":162},[159,176849,53937],{"class":1146},[159,176851,1159],{"class":165},[159,176853,124407],{"class":1146},[159,176855,1159],{"class":165},[159,176857,1596],{"class":1146},[159,176859,18787],{"class":165},[159,176861,176862,176864,176866,176868,176870,176872],{"class":161,"line":176},[159,176863,53937],{"class":1146},[159,176865,1159],{"class":165},[159,176867,124407],{"class":1146},[159,176869,1159],{"class":165},[159,176871,23928],{"class":1146},[159,176873,18787],{"class":165},[159,176875,176876,176878,176880,176882,176884,176886],{"class":161,"line":203},[159,176877,53937],{"class":1146},[159,176879,1159],{"class":165},[159,176881,124407],{"class":1146},[159,176883,1159],{"class":165},[159,176885,29459],{"class":192},[159,176887,18787],{"class":165},[159,176889,176890,176892,176894,176896,176898,176900],{"class":161,"line":223},[159,176891,53937],{"class":1146},[159,176893,1159],{"class":165},[159,176895,124407],{"class":1146},[159,176897,1159],{"class":165},[159,176899,54995],{"class":1146},[159,176901,18787],{"class":165},[159,176903,176904,176906,176908,176910,176912,176914],{"class":161,"line":233},[159,176905,53937],{"class":1146},[159,176907,1159],{"class":165},[159,176909,124407],{"class":1146},[159,176911,1159],{"class":165},[159,176913,116986],{"class":1146},[159,176915,18787],{"class":165},[14,176917,176918],{},"输出类似：",[151,176920,176923],{"className":176921,"code":176922,"language":8507,"meta":25},[28803],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[49,176924,176922],{"__ignoreMap":25},[14,176926,32623,176927,128583,176929,176931,176932,176934,176935,45027,176937,176934,176939,176941],{},[49,176928,25035],{},[49,176930,23886],{}," 的子类，",[49,176933,54995],{}," 可以当作 ",[49,176936,4932],{},[49,176938,57382],{},[49,176940,1489],{},"，但业务代码中不要滥用。",[151,176943,176945],{"className":53900,"code":176944,"language":53902,"meta":25,"style":25},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[49,176946,176947,176965],{"__ignoreMap":25},[159,176948,176949,176951,176953,176955,176957,176959,176962],{"class":161,"line":162},[159,176950,53937],{"class":1146},[159,176952,1159],{"class":165},[159,176954,54995],{"class":1146},[159,176956,3925],{"class":1142},[159,176958,2707],{"class":1146},[159,176960,176961],{"class":165},")   ",[159,176963,176964],{"class":1135},"# 2\n",[159,176966,176967,176969,176971,176973,176975,176977,176979],{"class":161,"line":176},[159,176968,53937],{"class":1146},[159,176970,1159],{"class":165},[159,176972,57382],{"class":1146},[159,176974,3925],{"class":1142},[159,176976,2707],{"class":1146},[159,176978,69202],{"class":165},[159,176980,176981],{"class":1135},"# 1\n",[37,176983,176985],{"id":176984},"_26-类型转换","2.6 类型转换",[14,176987,176988],{},"常用转换函数：",[151,176990,176992],{"className":53900,"code":176991,"language":53902,"meta":25,"style":25},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[49,176993,176994,177004,177015,177025],{"__ignoreMap":25},[159,176995,176996,176998,177000,177002],{"class":161,"line":162},[159,176997,23886],{"class":1146},[159,176999,1159],{"class":165},[159,177001,1060],{"class":192},[159,177003,1165],{"class":165},[159,177005,177006,177008,177010,177013],{"class":161,"line":176},[159,177007,23920],{"class":1146},[159,177009,1159],{"class":165},[159,177011,177012],{"class":192},"\"3.14\"",[159,177014,1165],{"class":165},[159,177016,177017,177019,177021,177023],{"class":161,"line":203},[159,177018,24983],{"class":1146},[159,177020,1159],{"class":165},[159,177022,1596],{"class":1146},[159,177024,1165],{"class":165},[159,177026,177027,177029,177031,177033],{"class":161,"line":223},[159,177028,25035],{"class":1146},[159,177030,1159],{"class":165},[159,177032,4932],{"class":1146},[159,177034,1165],{"class":165},[14,177036,38698],{},[151,177038,177040],{"className":53900,"code":177039,"language":53902,"meta":25,"style":25},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[49,177041,177042,177051,177062],{"__ignoreMap":25},[159,177043,177044,177046,177048],{"class":161,"line":162},[159,177045,167846],{"class":165},[159,177047,189],{"class":1142},[159,177049,177050],{"class":192}," \"18\"\n",[159,177052,177053,177055,177057,177059],{"class":161,"line":176},[159,177054,167846],{"class":165},[159,177056,189],{"class":1142},[159,177058,26029],{"class":1146},[159,177060,177061],{"class":165},"(age)\n",[159,177063,177064,177066,177069,177071,177073],{"class":161,"line":203},[159,177065,53937],{"class":1146},[159,177067,177068],{"class":165},"(age ",[159,177070,2704],{"class":1142},[159,177072,2707],{"class":1146},[159,177074,1165],{"class":165},[14,177076,177077],{},"输入得到的内容永远是字符串：",[151,177079,177081],{"className":53900,"code":177080,"language":53902,"meta":25,"style":25},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[49,177082,177083,177099],{"__ignoreMap":25},[159,177084,177085,177088,177090,177092,177094,177097],{"class":161,"line":162},[159,177086,177087],{"class":165},"num ",[159,177089,189],{"class":1142},[159,177091,7625],{"class":1146},[159,177093,1159],{"class":165},[159,177095,177096],{"class":192},"\"请输入数字:\"",[159,177098,1165],{"class":165},[159,177100,177101,177103,177105,177107,177110],{"class":161,"line":176},[159,177102,53937],{"class":1146},[159,177104,1159],{"class":165},[159,177106,124407],{"class":1146},[159,177108,177109],{"class":165},"(num))  ",[159,177111,177112],{"class":1135},"# str\n",[14,177114,177115],{},"如果要做数学运算，必须转换：",[151,177117,177119],{"className":53900,"code":177118,"language":53902,"meta":25,"style":25},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[49,177120,177121,177139],{"__ignoreMap":25},[159,177122,177123,177125,177127,177129,177131,177133,177135,177137],{"class":161,"line":162},[159,177124,177087],{"class":165},[159,177126,189],{"class":1142},[159,177128,26029],{"class":1146},[159,177130,1159],{"class":165},[159,177132,536],{"class":1146},[159,177134,1159],{"class":165},[159,177136,177096],{"class":192},[159,177138,18787],{"class":165},[159,177140,177141,177143,177145,177147,177149],{"class":161,"line":176},[159,177142,53937],{"class":1146},[159,177144,69013],{"class":165},[159,177146,2704],{"class":1142},[159,177148,7664],{"class":1146},[159,177150,1165],{"class":165},[14,177152,177153],{},"常见错误：",[151,177155,177157],{"className":53900,"code":177156,"language":53902,"meta":25,"style":25},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[49,177158,177159,177172],{"__ignoreMap":25},[159,177160,177161,177163,177165,177167,177169],{"class":161,"line":162},[159,177162,23886],{"class":1146},[159,177164,1159],{"class":165},[159,177166,177012],{"class":192},[159,177168,176961],{"class":165},[159,177170,177171],{"class":1135},"# 错误\n",[159,177173,177174,177176,177178,177181,177184],{"class":161,"line":176},[159,177175,23886],{"class":1146},[159,177177,1159],{"class":165},[159,177179,177180],{"class":192},"\"abc\"",[159,177182,177183],{"class":165},")    ",[159,177185,177171],{"class":1135},[14,177187,177188],{},"正确写法：",[151,177190,177192],{"className":53900,"code":177191,"language":53902,"meta":25,"style":25},"num = float(\"3.14\")\n",[49,177193,177194],{"__ignoreMap":25},[159,177195,177196,177198,177200,177202,177204,177206],{"class":161,"line":162},[159,177197,177087],{"class":165},[159,177199,189],{"class":1142},[159,177201,131097],{"class":1146},[159,177203,1159],{"class":165},[159,177205,177012],{"class":192},[159,177207,1165],{"class":165},[37,177209,177211],{"id":177210},"_27-运算符","2.7 运算符",[42,177213,177215],{"id":177214},"_271-算术运算符","2.7.1 算术运算符",[12347,177217,177218,177229],{},[16500,177219,177220],{},[12356,177221,177222,177225,177227],{},[12365,177223,177224],{},"运算符",[12365,177226,49392],{},[12365,177228,51015],{},[16624,177230,177231,177245,177259,177273,177287,177301,177315],{},[12356,177232,177233,177237,177240],{},[12488,177234,177235],{},[49,177236,2704],{},[12488,177238,177239],{},"加法",[12488,177241,177242],{},[49,177243,177244],{},"1 + 2",[12356,177246,177247,177251,177254],{},[12488,177248,177249],{},[49,177250,24376],{},[12488,177252,177253],{},"减法",[12488,177255,177256],{},[49,177257,177258],{},"5 - 3",[12356,177260,177261,177265,177268],{},[12488,177262,177263],{},[49,177264,4777],{},[12488,177266,177267],{},"乘法",[12488,177269,177270],{},[49,177271,177272],{},"2 * 3",[12356,177274,177275,177279,177282],{},[12488,177276,177277],{},[49,177278,13083],{},[12488,177280,177281],{},"除法，结果是浮点数",[12488,177283,177284],{},[49,177285,177286],{},"5 \u002F 2",[12356,177288,177289,177293,177296],{},[12488,177290,177291],{},[49,177292,56779],{},[12488,177294,177295],{},"整除",[12488,177297,177298],{},[49,177299,177300],{},"5 \u002F\u002F 2",[12356,177302,177303,177307,177310],{},[12488,177304,177305],{},[49,177306,1662],{},[12488,177308,177309],{},"取余",[12488,177311,177312],{},[49,177313,177314],{},"5 % 2",[12356,177316,177317,177321,177324],{},[12488,177318,177319],{},[49,177320,34236],{},[12488,177322,177323],{},"幂运算",[12488,177325,177326],{},[49,177327,177328],{},"2 ** 3",[14,177330,38698],{},[151,177332,177334],{"className":53900,"code":177333,"language":53902,"meta":25,"style":25},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[49,177335,177336,177354,177371,177388],{"__ignoreMap":25},[159,177337,177338,177340,177342,177344,177347,177349,177351],{"class":161,"line":162},[159,177339,53937],{"class":1146},[159,177341,1159],{"class":165},[159,177343,1753],{"class":1146},[159,177345,177346],{"class":1142}," \u002F",[159,177348,38320],{"class":1146},[159,177350,176961],{"class":165},[159,177352,177353],{"class":1135},"# 2.5\n",[159,177355,177356,177358,177360,177362,177365,177367,177369],{"class":161,"line":176},[159,177357,53937],{"class":1146},[159,177359,1159],{"class":165},[159,177361,1753],{"class":1146},[159,177363,177364],{"class":1142}," \u002F\u002F",[159,177366,38320],{"class":1146},[159,177368,69202],{"class":165},[159,177370,176964],{"class":1135},[159,177372,177373,177375,177377,177379,177382,177384,177386],{"class":161,"line":203},[159,177374,53937],{"class":1146},[159,177376,1159],{"class":165},[159,177378,1753],{"class":1146},[159,177380,177381],{"class":1142}," %",[159,177383,38320],{"class":1146},[159,177385,176961],{"class":165},[159,177387,176981],{"class":1135},[159,177389,177390,177392,177394,177396,177399,177401,177403],{"class":161,"line":223},[159,177391,53937],{"class":1146},[159,177393,1159],{"class":165},[159,177395,11034],{"class":1146},[159,177397,177398],{"class":1142}," **",[159,177400,99370],{"class":1146},[159,177402,69202],{"class":165},[159,177404,177405],{"class":1135},"# 8\n",[42,177407,177409],{"id":177408},"_272-赋值运算符","2.7.2 赋值运算符",[151,177411,177413],{"className":53900,"code":177412,"language":53902,"meta":25,"style":25},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[49,177414,177415,177423,177431,177439,177447],{"__ignoreMap":25},[159,177416,177417,177419,177421],{"class":161,"line":162},[159,177418,177087],{"class":165},[159,177420,189],{"class":1142},[159,177422,5348],{"class":1146},[159,177424,177425,177427,177429],{"class":161,"line":176},[159,177426,177087],{"class":165},[159,177428,33073],{"class":1142},[159,177430,1191],{"class":1146},[159,177432,177433,177435,177437],{"class":161,"line":203},[159,177434,177087],{"class":165},[159,177436,171552],{"class":1142},[159,177438,71116],{"class":1146},[159,177440,177441,177443,177445],{"class":161,"line":223},[159,177442,177087],{"class":165},[159,177444,158448],{"class":1142},[159,177446,141336],{"class":1146},[159,177448,177449,177451,177454],{"class":161,"line":233},[159,177450,177087],{"class":165},[159,177452,177453],{"class":1142},"\u002F=",[159,177455,71116],{"class":1146},[14,177457,177458],{},"等价关系：",[151,177460,177462],{"className":53900,"code":177461,"language":53902,"meta":25,"style":25},"num += 1\nnum = num + 1\n",[49,177463,177464,177472],{"__ignoreMap":25},[159,177465,177466,177468,177470],{"class":161,"line":162},[159,177467,177087],{"class":165},[159,177469,33073],{"class":1142},[159,177471,2570],{"class":1146},[159,177473,177474,177476,177478,177481,177483],{"class":161,"line":176},[159,177475,177087],{"class":165},[159,177477,189],{"class":1142},[159,177479,177480],{"class":165}," num ",[159,177482,2704],{"class":1142},[159,177484,2570],{"class":1146},[14,177486,177487,177488,122318,177491,51907],{},"Python 没有 ",[49,177489,177490],{},"num++",[49,177492,177493],{},"num--",[42,177495,177497],{"id":177496},"_273-比较运算符","2.7.3 比较运算符",[14,177499,177500],{},"比较运算结果是布尔值。",[151,177502,177504],{"className":53900,"code":177503,"language":53902,"meta":25,"style":25},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[49,177505,177506,177520,177535,177549],{"__ignoreMap":25},[159,177507,177508,177510,177512,177514,177516,177518],{"class":161,"line":162},[159,177509,53937],{"class":1146},[159,177511,1159],{"class":165},[159,177513,1964],{"class":1146},[159,177515,49745],{"class":1142},[159,177517,25798],{"class":1146},[159,177519,1165],{"class":165},[159,177521,177522,177524,177526,177528,177531,177533],{"class":161,"line":176},[159,177523,53937],{"class":1146},[159,177525,1159],{"class":165},[159,177527,1964],{"class":1146},[159,177529,177530],{"class":1142}," >=",[159,177532,7664],{"class":1146},[159,177534,1165],{"class":165},[159,177536,177537,177539,177541,177543,177545,177547],{"class":161,"line":203},[159,177538,53937],{"class":1146},[159,177540,1159],{"class":165},[159,177542,1964],{"class":1146},[159,177544,122859],{"class":1142},[159,177546,25733],{"class":1146},[159,177548,1165],{"class":165},[159,177550,177551,177553,177555,177557,177560,177562],{"class":161,"line":223},[159,177552,53937],{"class":1146},[159,177554,1159],{"class":165},[159,177556,1964],{"class":1146},[159,177558,177559],{"class":1142}," !=",[159,177561,25733],{"class":1146},[159,177563,1165],{"class":165},[14,177565,177566,177567,177569,177570,51907],{},"注意：判断相等用 ",[49,177568,26581],{},"，赋值用 ",[49,177571,189],{},[151,177573,177575],{"className":53900,"code":177574,"language":53902,"meta":25,"style":25},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[49,177576,177577,177589],{"__ignoreMap":25},[159,177578,177579,177581,177583,177586],{"class":161,"line":162},[159,177580,167846],{"class":165},[159,177582,189],{"class":1142},[159,177584,177585],{"class":1146}," 18",[159,177587,177588],{"class":1135},"       # 赋值\n",[159,177590,177591,177593,177595,177597],{"class":161,"line":176},[159,177592,167846],{"class":165},[159,177594,26581],{"class":1142},[159,177596,177585],{"class":1146},[159,177598,177599],{"class":1135},"      # 判断是否相等\n",[42,177601,177603],{"id":177602},"_274-逻辑运算符","2.7.4 逻辑运算符",[12347,177605,177606,177614],{},[16500,177607,177608],{},[12356,177609,177610,177612],{},[12365,177611,177224],{},[12365,177613,49392],{},[16624,177615,177616,177625,177634],{},[12356,177617,177618,177622],{},[12488,177619,177620],{},[49,177621,53984],{},[12488,177623,177624],{},"并且",[12356,177626,177627,177631],{},[12488,177628,177629],{},[49,177630,136390],{},[12488,177632,177633],{},"或者",[12356,177635,177636,177641],{},[12488,177637,177638],{},[49,177639,177640],{},"not",[12488,177642,177643],{},"取反",[151,177645,177647],{"className":53900,"code":177646,"language":53902,"meta":25,"style":25},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[49,177648,177649,177657,177666,177670,177685,177699],{"__ignoreMap":25},[159,177650,177651,177653,177655],{"class":161,"line":162},[159,177652,167846],{"class":165},[159,177654,189],{"class":1142},[159,177656,109365],{"class":1146},[159,177658,177659,177662,177664],{"class":161,"line":176},[159,177660,177661],{"class":165},"has_ticket ",[159,177663,189],{"class":1142},[159,177665,174899],{"class":1146},[159,177667,177668],{"class":161,"line":203},[159,177669,590],{"emptyLinePlaceholder":589},[159,177671,177672,177674,177676,177678,177680,177682],{"class":161,"line":223},[159,177673,53937],{"class":1146},[159,177675,177068],{"class":165},[159,177677,3822],{"class":1142},[159,177679,177585],{"class":1146},[159,177681,141729],{"class":1142},[159,177683,177684],{"class":165}," has_ticket)\n",[159,177686,177687,177689,177691,177693,177695,177697],{"class":161,"line":233},[159,177688,53937],{"class":1146},[159,177690,177068],{"class":165},[159,177692,166],{"class":1142},[159,177694,177585],{"class":1146},[159,177696,135501],{"class":1142},[159,177698,177684],{"class":165},[159,177700,177701,177703,177705,177707],{"class":161,"line":239},[159,177702,53937],{"class":1146},[159,177704,1159],{"class":165},[159,177706,177640],{"class":1142},[159,177708,177684],{"class":165},[37,177710,177712],{"id":177711},"_28-字符串定义","2.8 字符串定义",[14,177714,177715],{},"三种常见写法：",[151,177717,177719],{"className":53900,"code":177718,"language":53902,"meta":25,"style":25},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[49,177720,177721,177731,177740,177750],{"__ignoreMap":25},[159,177722,177723,177726,177728],{"class":161,"line":162},[159,177724,177725],{"class":165},"name1 ",[159,177727,189],{"class":1142},[159,177729,177730],{"class":192}," '小明'\n",[159,177732,177733,177736,177738],{"class":161,"line":176},[159,177734,177735],{"class":165},"name2 ",[159,177737,189],{"class":1142},[159,177739,170653],{"class":192},[159,177741,177742,177745,177747],{"class":161,"line":203},[159,177743,177744],{"class":165},"text ",[159,177746,189],{"class":1142},[159,177748,177749],{"class":192}," \"\"\"这是多行字符串\n",[159,177751,177752],{"class":161,"line":223},[159,177753,177754],{"class":192},"可以换行\"\"\"\n",[14,177756,177757],{},"字符串中包含引号：",[151,177759,177761],{"className":53900,"code":177760,"language":53902,"meta":25,"style":25},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[49,177762,177763,177773,177783],{"__ignoreMap":25},[159,177764,177765,177768,177770],{"class":161,"line":162},[159,177766,177767],{"class":165},"msg ",[159,177769,189],{"class":1142},[159,177771,177772],{"class":192}," \"他说:'你好'\"\n",[159,177774,177775,177778,177780],{"class":161,"line":176},[159,177776,177777],{"class":165},"msg2 ",[159,177779,189],{"class":1142},[159,177781,177782],{"class":192}," '他说:\"你好\"'\n",[159,177784,177785,177788,177790,177793,177796,177799,177801],{"class":161,"line":203},[159,177786,177787],{"class":165},"msg3 ",[159,177789,189],{"class":1142},[159,177791,177792],{"class":192}," \"他说:",[159,177794,177795],{"class":1146},"\\\"",[159,177797,177798],{"class":192},"你好",[159,177800,177795],{"class":1146},[159,177802,48656],{"class":192},[14,177804,177805],{},"常见转义字符：",[12347,177807,177808,177817],{},[16500,177809,177810],{},[12356,177811,177812,177815],{},[12365,177813,177814],{},"写法",[12365,177816,122000],{},[16624,177818,177819,177829,177838,177848,177857],{},[12356,177820,177821,177826],{},[12488,177822,177823],{},[49,177824,177825],{},"\\n",[12488,177827,177828],{},"换行",[12356,177830,177831,177835],{},[12488,177832,177833],{},[49,177834,24915],{},[12488,177836,177837],{},"制表符",[12356,177839,177840,177845],{},[12488,177841,177842],{},[49,177843,177844],{},"\\\\",[12488,177846,177847],{},"反斜杠",[12356,177849,177850,177854],{},[12488,177851,177852],{},[49,177853,177795],{},[12488,177855,177856],{},"双引号",[12356,177858,177859,177864],{},[12488,177860,177861],{},[49,177862,177863],{},"\\'",[12488,177865,177866],{},"单引号",[37,177868,177870],{"id":177869},"_29-字符串拼接","2.9 字符串拼接",[151,177872,177874],{"className":53900,"code":177873,"language":53902,"meta":25,"style":25},"name = \"小明\"\nprint(\"你好，\" + name)\n",[49,177875,177876,177884],{"__ignoreMap":25},[159,177877,177878,177880,177882],{"class":161,"line":162},[159,177879,167836],{"class":165},[159,177881,189],{"class":1142},[159,177883,170653],{"class":192},[159,177885,177886,177888,177890,177893,177895],{"class":161,"line":176},[159,177887,53937],{"class":1146},[159,177889,1159],{"class":165},[159,177891,177892],{"class":192},"\"你好，\"",[159,177894,3925],{"class":1142},[159,177896,177897],{"class":165}," name)\n",[14,177899,177900],{},"字符串只能和字符串拼接：",[151,177902,177904],{"className":53900,"code":177903,"language":53902,"meta":25,"style":25},"age = 18\nprint(\"年龄:\" + str(age))\n",[49,177905,177906,177914],{"__ignoreMap":25},[159,177907,177908,177910,177912],{"class":161,"line":162},[159,177909,167846],{"class":165},[159,177911,189],{"class":1142},[159,177913,167851],{"class":1146},[159,177915,177916,177918,177920,177922,177924,177926],{"class":161,"line":176},[159,177917,53937],{"class":1146},[159,177919,1159],{"class":165},[159,177921,167817],{"class":192},[159,177923,3925],{"class":1142},[159,177925,21027],{"class":1146},[159,177927,177928],{"class":165},"(age))\n",[14,177930,177931],{},"更推荐使用格式化字符串。",[37,177933,177935],{"id":177934},"_210-字符串格式化","2.10 字符串格式化",[42,177937,177939],{"id":177938},"_2101-百分号格式化","2.10.1 百分号格式化",[151,177941,177943],{"className":53900,"code":177942,"language":53902,"meta":25,"style":25},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[49,177944,177945,177953,177961,177970,177974],{"__ignoreMap":25},[159,177946,177947,177949,177951],{"class":161,"line":162},[159,177948,167836],{"class":165},[159,177950,189],{"class":1142},[159,177952,170653],{"class":192},[159,177954,177955,177957,177959],{"class":161,"line":176},[159,177956,167846],{"class":165},[159,177958,189],{"class":1142},[159,177960,167851],{"class":1146},[159,177962,177963,177965,177967],{"class":161,"line":203},[159,177964,176658],{"class":165},[159,177966,189],{"class":1142},[159,177968,177969],{"class":1146}," 95.5\n",[159,177971,177972],{"class":161,"line":223},[159,177973,590],{"emptyLinePlaceholder":589},[159,177975,177976,177978,177980,177983,177986,177989,177992,177995,177998,178000,178002],{"class":161,"line":233},[159,177977,53937],{"class":1146},[159,177979,1159],{"class":165},[159,177981,177982],{"class":192},"\"姓名:",[159,177984,177985],{"class":1146},"%s",[159,177987,177988],{"class":192}," 年龄:",[159,177990,177991],{"class":1146},"%d",[159,177993,177994],{"class":192}," 分数:",[159,177996,177997],{"class":1146},"%.1f",[159,177999,24115],{"class":192},[159,178001,177381],{"class":1142},[159,178003,178004],{"class":165}," (name, age, score))\n",[14,178006,178007],{},"常用占位符：",[12347,178009,178010,178019],{},[16500,178011,178012],{},[12356,178013,178014,178017],{},[12365,178015,178016],{},"占位符",[12365,178018,49392],{},[16624,178020,178021,178029,178037],{},[12356,178022,178023,178027],{},[12488,178024,178025],{},[49,178026,177985],{},[12488,178028,176524],{},[12356,178030,178031,178035],{},[12488,178032,178033],{},[49,178034,177991],{},[12488,178036,176502],{},[12356,178038,178039,178044],{},[12488,178040,178041],{},[49,178042,178043],{},"%f",[12488,178045,176513],{},[14,178047,178048],{},"精度控制：",[151,178050,178052],{"className":53900,"code":178051,"language":53902,"meta":25,"style":25},"price = 12.3456\nprint(\"%.2f\" % price)\n",[49,178053,178054,178063],{"__ignoreMap":25},[159,178055,178056,178058,178060],{"class":161,"line":162},[159,178057,167981],{"class":165},[159,178059,189],{"class":1142},[159,178061,178062],{"class":1146}," 12.3456\n",[159,178064,178065,178067,178069,178071,178074,178076,178078],{"class":161,"line":176},[159,178066,53937],{"class":1146},[159,178068,1159],{"class":165},[159,178070,24115],{"class":192},[159,178072,178073],{"class":1146},"%.2f",[159,178075,24115],{"class":192},[159,178077,177381],{"class":1142},[159,178079,178080],{"class":165}," price)\n",[42,178082,178084],{"id":178083},"_2102-format方法","2.10.2 format方法",[151,178086,178088],{"className":53900,"code":178087,"language":53902,"meta":25,"style":25},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[49,178089,178090,178098,178106,178110,178129,178149],{"__ignoreMap":25},[159,178091,178092,178094,178096],{"class":161,"line":162},[159,178093,167836],{"class":165},[159,178095,189],{"class":1142},[159,178097,170653],{"class":192},[159,178099,178100,178102,178104],{"class":161,"line":176},[159,178101,167846],{"class":165},[159,178103,189],{"class":1142},[159,178105,167851],{"class":1146},[159,178107,178108],{"class":161,"line":203},[159,178109,590],{"emptyLinePlaceholder":589},[159,178111,178112,178114,178116,178118,178120,178122,178124,178126],{"class":161,"line":223},[159,178113,53937],{"class":1146},[159,178115,1159],{"class":165},[159,178117,177982],{"class":192},[159,178119,55977],{"class":1146},[159,178121,177988],{"class":192},[159,178123,55977],{"class":1146},[159,178125,24115],{"class":192},[159,178127,178128],{"class":165},".format(name, age))\n",[159,178130,178131,178133,178135,178137,178140,178142,178145,178147],{"class":161,"line":233},[159,178132,53937],{"class":1146},[159,178134,1159],{"class":165},[159,178136,177982],{"class":192},[159,178138,178139],{"class":1146},"{0}",[159,178141,177988],{"class":192},[159,178143,178144],{"class":1146},"{1}",[159,178146,24115],{"class":192},[159,178148,178128],{"class":165},[159,178150,178151,178153,178155,178157,178160,178162,178165,178167,178170,178172,178174,178177,178179,178181],{"class":161,"line":239},[159,178152,53937],{"class":1146},[159,178154,1159],{"class":165},[159,178156,177982],{"class":192},[159,178158,178159],{"class":1146},"{name}",[159,178161,177988],{"class":192},[159,178163,178164],{"class":1146},"{age}",[159,178166,24115],{"class":192},[159,178168,178169],{"class":165},".format(",[159,178171,101110],{"class":8765},[159,178173,189],{"class":1142},[159,178175,178176],{"class":165},"name, ",[159,178178,17307],{"class":8765},[159,178180,189],{"class":1142},[159,178182,178183],{"class":165},"age))\n",[42,178185,178187],{"id":178186},"_2103-f-string","2.10.3 f-string",[14,178189,178190],{},"推荐写法：",[151,178192,178194],{"className":53900,"code":178193,"language":53902,"meta":25,"style":25},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[49,178195,178196,178204,178212,178220,178224],{"__ignoreMap":25},[159,178197,178198,178200,178202],{"class":161,"line":162},[159,178199,167836],{"class":165},[159,178201,189],{"class":1142},[159,178203,170653],{"class":192},[159,178205,178206,178208,178210],{"class":161,"line":176},[159,178207,167846],{"class":165},[159,178209,189],{"class":1142},[159,178211,167851],{"class":1146},[159,178213,178214,178216,178218],{"class":161,"line":203},[159,178215,176658],{"class":165},[159,178217,189],{"class":1142},[159,178219,177969],{"class":1146},[159,178221,178222],{"class":161,"line":223},[159,178223,590],{"emptyLinePlaceholder":589},[159,178225,178226,178228,178230,178232,178234,178236,178238,178240,178242,178244,178246,178248,178250,178252,178255,178258,178260,178262],{"class":161,"line":233},[159,178227,53937],{"class":1146},[159,178229,1159],{"class":165},[159,178231,23931],{"class":1142},[159,178233,177982],{"class":192},[159,178235,24721],{"class":1146},[159,178237,101110],{"class":165},[159,178239,886],{"class":1146},[159,178241,177988],{"class":192},[159,178243,24721],{"class":1146},[159,178245,17307],{"class":165},[159,178247,886],{"class":1146},[159,178249,177994],{"class":192},[159,178251,24721],{"class":1146},[159,178253,178254],{"class":165},"score",[159,178256,178257],{"class":1142},":.1f",[159,178259,886],{"class":1146},[159,178261,24115],{"class":192},[159,178263,1165],{"class":165},[14,178265,178266],{},"表达式也可以放进去：",[151,178268,178270],{"className":53900,"code":178269,"language":53902,"meta":25,"style":25},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[49,178271,178272,178280,178288],{"__ignoreMap":25},[159,178273,178274,178276,178278],{"class":161,"line":162},[159,178275,167981],{"class":165},[159,178277,189],{"class":1142},[159,178279,167986],{"class":1146},[159,178281,178282,178284,178286],{"class":161,"line":176},[159,178283,167991],{"class":165},[159,178285,189],{"class":1142},[159,178287,1191],{"class":1146},[159,178289,178290,178292,178294,178296,178299,178301,178303,178305,178308,178310,178313],{"class":161,"line":203},[159,178291,53937],{"class":1146},[159,178293,1159],{"class":165},[159,178295,23931],{"class":1142},[159,178297,178298],{"class":192},"\"总价:",[159,178300,24721],{"class":1146},[159,178302,167981],{"class":165},[159,178304,4777],{"class":1142},[159,178306,178307],{"class":165}," count",[159,178309,886],{"class":1146},[159,178311,178312],{"class":192},"元\"",[159,178314,1165],{"class":165},[37,178316,178318],{"id":178317},"_211-input输入","2.11 input输入",[14,178320,178321,178324],{},[49,178322,178323],{},"input()"," 会暂停程序，等待用户输入。",[151,178326,178328],{"className":53900,"code":178327,"language":53902,"meta":25,"style":25},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[49,178329,178330,178344],{"__ignoreMap":25},[159,178331,178332,178334,178336,178338,178340,178342],{"class":161,"line":162},[159,178333,167836],{"class":165},[159,178335,189],{"class":1142},[159,178337,7625],{"class":1146},[159,178339,1159],{"class":165},[159,178341,173679],{"class":192},[159,178343,1165],{"class":165},[159,178345,178346,178348,178350,178352,178355,178357,178359,178361,178363],{"class":161,"line":176},[159,178347,53937],{"class":1146},[159,178349,1159],{"class":165},[159,178351,23931],{"class":1142},[159,178353,178354],{"class":192},"\"你好，",[159,178356,24721],{"class":1146},[159,178358,101110],{"class":165},[159,178360,886],{"class":1146},[159,178362,24115],{"class":192},[159,178364,1165],{"class":165},[14,178366,178367],{},"输入整数：",[151,178369,178371],{"className":53900,"code":178370,"language":53902,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[49,178372,178373,178391],{"__ignoreMap":25},[159,178374,178375,178377,178379,178381,178383,178385,178387,178389],{"class":161,"line":162},[159,178376,167846],{"class":165},[159,178378,189],{"class":1142},[159,178380,26029],{"class":1146},[159,178382,1159],{"class":165},[159,178384,536],{"class":1146},[159,178386,1159],{"class":165},[159,178388,173694],{"class":192},[159,178390,18787],{"class":165},[159,178392,178393,178395,178397,178399,178402,178404,178406,178408,178411,178413],{"class":161,"line":176},[159,178394,53937],{"class":1146},[159,178396,1159],{"class":165},[159,178398,23931],{"class":1142},[159,178400,178401],{"class":192},"\"明年你",[159,178403,24721],{"class":1146},[159,178405,167846],{"class":165},[159,178407,2704],{"class":1142},[159,178409,178410],{"class":1146}," 1}",[159,178412,170704],{"class":192},[159,178414,1165],{"class":165},[14,178416,178417],{},"输入小数：",[151,178419,178421],{"className":53900,"code":178420,"language":53902,"meta":25,"style":25},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[49,178422,178423,178442],{"__ignoreMap":25},[159,178424,178425,178427,178429,178431,178433,178435,178437,178440],{"class":161,"line":162},[159,178426,176631],{"class":165},[159,178428,189],{"class":1142},[159,178430,131097],{"class":1146},[159,178432,1159],{"class":165},[159,178434,536],{"class":1146},[159,178436,1159],{"class":165},[159,178438,178439],{"class":192},"\"请输入身高:\"",[159,178441,18787],{"class":165},[159,178443,178444,178446,178448,178450,178453,178455,178457,178460,178462,178465],{"class":161,"line":176},[159,178445,53937],{"class":1146},[159,178447,1159],{"class":165},[159,178449,23931],{"class":1142},[159,178451,178452],{"class":192},"\"身高:",[159,178454,24721],{"class":1146},[159,178456,48505],{"class":165},[159,178458,178459],{"class":1142},":.2f",[159,178461,886],{"class":1146},[159,178463,178464],{"class":192},"米\"",[159,178466,1165],{"class":165},[37,178468,178470],{"id":178469},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,178472,144592],{},[134,178474,178475,178478,178481,178484],{},[106,178476,178477],{},"输入商品单价。",[106,178479,178480],{},"输入购买数量。",[106,178482,178483],{},"输入折扣，例如 0.8 表示八折。",[106,178485,178486],{},"输出最终金额，保留两位小数。",[14,178488,33610],{},[151,178490,178492],{"className":53900,"code":178491,"language":53902,"meta":25,"style":25},"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",[49,178493,178494,178513,178532,178552,178556,178576,178580,178603,178624,178646],{"__ignoreMap":25},[159,178495,178496,178498,178500,178502,178504,178506,178508,178511],{"class":161,"line":162},[159,178497,167981],{"class":165},[159,178499,189],{"class":1142},[159,178501,131097],{"class":1146},[159,178503,1159],{"class":165},[159,178505,536],{"class":1146},[159,178507,1159],{"class":165},[159,178509,178510],{"class":192},"\"请输入商品单价:\"",[159,178512,18787],{"class":165},[159,178514,178515,178517,178519,178521,178523,178525,178527,178530],{"class":161,"line":176},[159,178516,167991],{"class":165},[159,178518,189],{"class":1142},[159,178520,26029],{"class":1146},[159,178522,1159],{"class":165},[159,178524,536],{"class":1146},[159,178526,1159],{"class":165},[159,178528,178529],{"class":192},"\"请输入购买数量:\"",[159,178531,18787],{"class":165},[159,178533,178534,178537,178539,178541,178543,178545,178547,178550],{"class":161,"line":203},[159,178535,178536],{"class":165},"discount ",[159,178538,189],{"class":1142},[159,178540,131097],{"class":1146},[159,178542,1159],{"class":165},[159,178544,536],{"class":1146},[159,178546,1159],{"class":165},[159,178548,178549],{"class":192},"\"请输入折扣:\"",[159,178551,18787],{"class":165},[159,178553,178554],{"class":161,"line":223},[159,178555,590],{"emptyLinePlaceholder":589},[159,178557,178558,178561,178563,178566,178568,178571,178573],{"class":161,"line":233},[159,178559,178560],{"class":165},"total ",[159,178562,189],{"class":1142},[159,178564,178565],{"class":165}," price ",[159,178567,4777],{"class":1142},[159,178569,178570],{"class":165}," count ",[159,178572,4777],{"class":1142},[159,178574,178575],{"class":165}," discount\n",[159,178577,178578],{"class":161,"line":239},[159,178579,590],{"emptyLinePlaceholder":589},[159,178581,178582,178584,178586,178588,178591,178593,178595,178597,178599,178601],{"class":161,"line":245},[159,178583,53937],{"class":1146},[159,178585,1159],{"class":165},[159,178587,23931],{"class":1142},[159,178589,178590],{"class":192},"\"商品单价:",[159,178592,24721],{"class":1146},[159,178594,101115],{"class":165},[159,178596,178459],{"class":1142},[159,178598,886],{"class":1146},[159,178600,24115],{"class":192},[159,178602,1165],{"class":165},[159,178604,178605,178607,178609,178611,178614,178616,178618,178620,178622],{"class":161,"line":251},[159,178606,53937],{"class":1146},[159,178608,1159],{"class":165},[159,178610,23931],{"class":1142},[159,178612,178613],{"class":192},"\"购买数量:",[159,178615,24721],{"class":1146},[159,178617,105734],{"class":165},[159,178619,886],{"class":1146},[159,178621,24115],{"class":192},[159,178623,1165],{"class":165},[159,178625,178626,178628,178630,178632,178635,178637,178640,178642,178644],{"class":161,"line":261},[159,178627,53937],{"class":1146},[159,178629,1159],{"class":165},[159,178631,23931],{"class":1142},[159,178633,178634],{"class":192},"\"折扣:",[159,178636,24721],{"class":1146},[159,178638,178639],{"class":165},"discount",[159,178641,886],{"class":1146},[159,178643,24115],{"class":192},[159,178645,1165],{"class":165},[159,178647,178648,178650,178652,178654,178657,178659,178662,178664,178666,178668],{"class":161,"line":603},[159,178649,53937],{"class":1146},[159,178651,1159],{"class":165},[159,178653,23931],{"class":1142},[159,178655,178656],{"class":192},"\"应付金额:",[159,178658,24721],{"class":1146},[159,178660,178661],{"class":165},"total",[159,178663,178459],{"class":1142},[159,178665,886],{"class":1146},[159,178667,178312],{"class":192},[159,178669,1165],{"class":165},[37,178671,178673],{"id":178672},"_213-易错点","2.13 易错点",[134,178675,178676,178681,178687,178695,178698],{},[106,178677,178678,178680],{},[49,178679,178323],{}," 的结果是字符串，做运算前要转换。",[106,178682,178683,178684,51907],{},"字符串拼接时，数字要先 ",[49,178685,178686],{},"str()",[106,178688,178689,178691,178692,178694],{},[49,178690,189],{}," 是赋值，",[49,178693,26581],{}," 是比较。",[106,178696,178697],{},"Python 没有自增自减运算符。",[106,178699,178700],{},"浮点数计算可能有精度误差：",[151,178702,178704],{"className":53900,"code":178703,"language":53902,"meta":25,"style":25},"print(0.1 + 0.2)\n",[49,178705,178706],{"__ignoreMap":25},[159,178707,178708,178710,178712,178714,178716,178719],{"class":161,"line":162},[159,178709,53937],{"class":1146},[159,178711,1159],{"class":165},[159,178713,107510],{"class":1146},[159,178715,3925],{"class":1142},[159,178717,178718],{"class":1146}," 0.2",[159,178720,1165],{"class":165},[14,178722,178723,178724,178727],{},"金额计算如果要求严格，可以后续学习 ",[49,178725,178726],{},"decimal"," 模块。",[37,178729,178731],{"id":178730},"_214-本章练习","2.14 本章练习",[134,178733,178734,178737,178740,178743,178746],{},[106,178735,178736],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[106,178738,178739],{},"输入圆的半径，计算面积，保留两位小数。",[106,178741,178742],{},"输入工资和奖金，计算总收入。",[106,178744,178745],{},"输入摄氏温度，转换为华氏温度。",[106,178747,178748],{},"写一个 BMI 计算程序：",[151,178750,178753],{"className":178751,"code":178752,"language":8507,"meta":25},[28803],"BMI = 体重kg \u002F 身高m ** 2\n",[49,178754,178752],{"__ignoreMap":25},[1468,178756,178757],{},"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":25,"searchDepth":176,"depth":176,"links":178759},[178760,178761,178762,178763,178764,178765,178766,178772,178773,178774,178779,178780,178781,178782],{"id":176321,"depth":176,"text":176322},{"id":176430,"depth":176,"text":176431},{"id":176601,"depth":176,"text":176602},{"id":176678,"depth":176,"text":176679},{"id":74109,"depth":176,"text":74110},{"id":176984,"depth":176,"text":176985},{"id":177210,"depth":176,"text":177211,"children":178767},[178768,178769,178770,178771],{"id":177214,"depth":203,"text":177215},{"id":177408,"depth":203,"text":177409},{"id":177496,"depth":203,"text":177497},{"id":177602,"depth":203,"text":177603},{"id":177711,"depth":176,"text":177712},{"id":177869,"depth":176,"text":177870},{"id":177934,"depth":176,"text":177935,"children":178775},[178776,178777,178778],{"id":177938,"depth":203,"text":177939},{"id":178083,"depth":203,"text":178084},{"id":178186,"depth":203,"text":178187},{"id":178317,"depth":176,"text":178318},{"id":178469,"depth":176,"text":178470},{"id":178672,"depth":176,"text":178673},{"id":178730,"depth":176,"text":178731},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":176313,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":178789,"title":178790,"body":178791,"description":23809,"extension":23810,"meta":180427,"navigation":589,"path":180428,"seo":180429,"stem":180430,"__hash__":180431},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":178792,"toc":180408},[178793,178796,178800,178803,178818,178821,178849,178853,178903,178905,178921,178924,178950,178953,178957,179024,179027,179043,179047,179050,179168,179171,179178,179227,179233,179237,179240,179353,179356,179360,179364,179367,179417,179421,179424,179474,179478,179481,179519,179523,179526,179572,179575,179610,179614,179619,179622,179668,179670,179737,179741,179747,179858,179867,179871,179873,179884,179886,180052,180056,180058,180072,180074,180288,180292,180311,180328,180331,180377,180381,180405],[10,178794,178790],{"id":178795},"_3-判断语句",[37,178797,178799],{"id":178798},"_31-布尔值","3.1 布尔值",[14,178801,178802],{},"判断语句依赖布尔值：",[151,178804,178806],{"className":53900,"code":178805,"language":53902,"meta":25,"style":25},"True\nFalse\n",[49,178807,178808,178813],{"__ignoreMap":25},[159,178809,178810],{"class":161,"line":162},[159,178811,178812],{"class":1146},"True\n",[159,178814,178815],{"class":161,"line":176},[159,178816,178817],{"class":1146},"False\n",[14,178819,178820],{},"比较表达式会产生布尔值：",[151,178822,178824],{"className":53900,"code":178823,"language":53902,"meta":25,"style":25},"age = 18\nprint(age >= 18)  # True\n",[49,178825,178826,178834],{"__ignoreMap":25},[159,178827,178828,178830,178832],{"class":161,"line":162},[159,178829,167846],{"class":165},[159,178831,189],{"class":1142},[159,178833,167851],{"class":1146},[159,178835,178836,178838,178840,178842,178844,178846],{"class":161,"line":176},[159,178837,53937],{"class":1146},[159,178839,177068],{"class":165},[159,178841,3822],{"class":1142},[159,178843,177585],{"class":1146},[159,178845,69202],{"class":165},[159,178847,178848],{"class":1135},"# True\n",[37,178850,178852],{"id":178851},"_32-if基础语法","3.2 if基础语法",[151,178854,178856],{"className":53900,"code":178855,"language":53902,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[49,178857,178858,178876,178880,178892],{"__ignoreMap":25},[159,178859,178860,178862,178864,178866,178868,178870,178872,178874],{"class":161,"line":162},[159,178861,167846],{"class":165},[159,178863,189],{"class":1142},[159,178865,26029],{"class":1146},[159,178867,1159],{"class":165},[159,178869,536],{"class":1146},[159,178871,1159],{"class":165},[159,178873,173694],{"class":192},[159,178875,18787],{"class":165},[159,178877,178878],{"class":161,"line":176},[159,178879,590],{"emptyLinePlaceholder":589},[159,178881,178882,178884,178886,178888,178890],{"class":161,"line":203},[159,178883,18445],{"class":1142},[159,178885,39268],{"class":165},[159,178887,3822],{"class":1142},[159,178889,177585],{"class":1146},[159,178891,27364],{"class":165},[159,178893,178894,178896,178898,178901],{"class":161,"line":223},[159,178895,54819],{"class":1146},[159,178897,1159],{"class":165},[159,178899,178900],{"class":192},"\"可以进入网吧\"",[159,178902,1165],{"class":165},[14,178904,32623],{},[134,178906,178907,178912,178915,178918],{},[106,178908,178909,178911],{},[49,178910,18445],{}," 后面是条件表达式。",[106,178913,178914],{},"条件后面必须写冒号。",[106,178916,178917],{},"条件成立时执行缩进代码块。",[106,178919,178920],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,178922,178923],{},"错误示例：",[151,178925,178927],{"className":53900,"code":178926,"language":53902,"meta":25,"style":25},"if age >= 18\n    print(\"可以进入\")\n",[49,178928,178929,178939],{"__ignoreMap":25},[159,178930,178931,178933,178935,178937],{"class":161,"line":162},[159,178932,18445],{"class":1142},[159,178934,39268],{"class":165},[159,178936,3822],{"class":1142},[159,178938,167851],{"class":1146},[159,178940,178941,178943,178945,178948],{"class":161,"line":176},[159,178942,54819],{"class":1146},[159,178944,1159],{"class":165},[159,178946,178947],{"class":192},"\"可以进入\"",[159,178949,1165],{"class":165},[14,178951,178952],{},"缺少冒号。",[37,178954,178956],{"id":178955},"_33-if-else","3.3 if else",[151,178958,178960],{"className":53900,"code":178959,"language":53902,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[49,178961,178962,178980,178984,178996,179007,179013],{"__ignoreMap":25},[159,178963,178964,178966,178968,178970,178972,178974,178976,178978],{"class":161,"line":162},[159,178965,167846],{"class":165},[159,178967,189],{"class":1142},[159,178969,26029],{"class":1146},[159,178971,1159],{"class":165},[159,178973,536],{"class":1146},[159,178975,1159],{"class":165},[159,178977,173694],{"class":192},[159,178979,18787],{"class":165},[159,178981,178982],{"class":161,"line":176},[159,178983,590],{"emptyLinePlaceholder":589},[159,178985,178986,178988,178990,178992,178994],{"class":161,"line":203},[159,178987,18445],{"class":1142},[159,178989,39268],{"class":165},[159,178991,3822],{"class":1142},[159,178993,177585],{"class":1146},[159,178995,27364],{"class":165},[159,178997,178998,179000,179002,179005],{"class":161,"line":223},[159,178999,54819],{"class":1146},[159,179001,1159],{"class":165},[159,179003,179004],{"class":192},"\"成年人\"",[159,179006,1165],{"class":165},[159,179008,179009,179011],{"class":161,"line":233},[159,179010,25364],{"class":1142},[159,179012,27364],{"class":165},[159,179014,179015,179017,179019,179022],{"class":161,"line":239},[159,179016,54819],{"class":1146},[159,179018,1159],{"class":165},[159,179020,179021],{"class":192},"\"未成年人\"",[159,179023,1165],{"class":165},[14,179025,179026],{},"执行逻辑：",[134,179028,179029,179035,179040],{},[106,179030,179031,179032,179034],{},"条件成立，执行 ",[49,179033,18445],{}," 代码块。",[106,179036,179037,179038,179034],{},"条件不成立，执行 ",[49,179039,25364],{},[106,179041,179042],{},"两个代码块只会执行其中一个。",[37,179044,179046],{"id":179045},"_34-if-elif-else","3.4 if elif else",[14,179048,179049],{},"多条件判断：",[151,179051,179053],{"className":53900,"code":179052,"language":53902,"meta":25,"style":25},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[49,179054,179055,179073,179077,179091,179102,179116,179127,179140,179151,179157],{"__ignoreMap":25},[159,179056,179057,179059,179061,179063,179065,179067,179069,179071],{"class":161,"line":162},[159,179058,176658],{"class":165},[159,179060,189],{"class":1142},[159,179062,26029],{"class":1146},[159,179064,1159],{"class":165},[159,179066,536],{"class":1146},[159,179068,1159],{"class":165},[159,179070,173709],{"class":192},[159,179072,18787],{"class":165},[159,179074,179075],{"class":161,"line":176},[159,179076,590],{"emptyLinePlaceholder":589},[159,179078,179079,179081,179084,179086,179089],{"class":161,"line":203},[159,179080,18445],{"class":1142},[159,179082,179083],{"class":165}," score ",[159,179085,3822],{"class":1142},[159,179087,179088],{"class":1146}," 90",[159,179090,27364],{"class":165},[159,179092,179093,179095,179097,179100],{"class":161,"line":223},[159,179094,54819],{"class":1146},[159,179096,1159],{"class":165},[159,179098,179099],{"class":192},"\"优秀\"",[159,179101,1165],{"class":165},[159,179103,179104,179107,179109,179111,179114],{"class":161,"line":233},[159,179105,179106],{"class":1142},"elif",[159,179108,179083],{"class":165},[159,179110,3822],{"class":1142},[159,179112,179113],{"class":1146}," 80",[159,179115,27364],{"class":165},[159,179117,179118,179120,179122,179125],{"class":161,"line":239},[159,179119,54819],{"class":1146},[159,179121,1159],{"class":165},[159,179123,179124],{"class":192},"\"良好\"",[159,179126,1165],{"class":165},[159,179128,179129,179131,179133,179135,179138],{"class":161,"line":245},[159,179130,179106],{"class":1142},[159,179132,179083],{"class":165},[159,179134,3822],{"class":1142},[159,179136,179137],{"class":1146}," 60",[159,179139,27364],{"class":165},[159,179141,179142,179144,179146,179149],{"class":161,"line":251},[159,179143,54819],{"class":1146},[159,179145,1159],{"class":165},[159,179147,179148],{"class":192},"\"及格\"",[159,179150,1165],{"class":165},[159,179152,179153,179155],{"class":161,"line":261},[159,179154,25364],{"class":1142},[159,179156,27364],{"class":165},[159,179158,179159,179161,179163,179166],{"class":161,"line":603},[159,179160,54819],{"class":1146},[159,179162,1159],{"class":165},[159,179164,179165],{"class":192},"\"不及格\"",[159,179167,1165],{"class":165},[14,179169,179170],{},"注意判断顺序很重要。",[14,179172,179173,179174,179177],{},"如果把 ",[49,179175,179176],{},"score >= 60"," 放在最前面：",[151,179179,179181],{"className":53900,"code":179180,"language":53902,"meta":25,"style":25},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[49,179182,179183,179195,179205,179217],{"__ignoreMap":25},[159,179184,179185,179187,179189,179191,179193],{"class":161,"line":162},[159,179186,18445],{"class":1142},[159,179188,179083],{"class":165},[159,179190,3822],{"class":1142},[159,179192,179137],{"class":1146},[159,179194,27364],{"class":165},[159,179196,179197,179199,179201,179203],{"class":161,"line":176},[159,179198,54819],{"class":1146},[159,179200,1159],{"class":165},[159,179202,179148],{"class":192},[159,179204,1165],{"class":165},[159,179206,179207,179209,179211,179213,179215],{"class":161,"line":203},[159,179208,179106],{"class":1142},[159,179210,179083],{"class":165},[159,179212,3822],{"class":1142},[159,179214,179088],{"class":1146},[159,179216,27364],{"class":165},[159,179218,179219,179221,179223,179225],{"class":161,"line":223},[159,179220,54819],{"class":1146},[159,179222,1159],{"class":165},[159,179224,179099],{"class":192},[159,179226,1165],{"class":165},[14,179228,179229,179230,179232],{},"成绩 95 会先满足 ",[49,179231,179176],{},"，后面的优秀分支就不会执行。",[37,179234,179236],{"id":179235},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,179238,179239],{},"嵌套判断就是在一个判断内部再写判断。",[151,179241,179243],{"className":53900,"code":179242,"language":53902,"meta":25,"style":25},"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",[49,179244,179245,179263,179278,179282,179294,179308,179318,179325,179336,179342],{"__ignoreMap":25},[159,179246,179247,179249,179251,179253,179255,179257,179259,179261],{"class":161,"line":162},[159,179248,167846],{"class":165},[159,179250,189],{"class":1142},[159,179252,26029],{"class":1146},[159,179254,1159],{"class":165},[159,179256,536],{"class":1146},[159,179258,1159],{"class":165},[159,179260,173694],{"class":192},[159,179262,18787],{"class":165},[159,179264,179265,179267,179269,179271,179273,179276],{"class":161,"line":176},[159,179266,177661],{"class":165},[159,179268,189],{"class":1142},[159,179270,7625],{"class":1146},[159,179272,1159],{"class":165},[159,179274,179275],{"class":192},"\"是否有票(y\u002Fn):\"",[159,179277,1165],{"class":165},[159,179279,179280],{"class":161,"line":203},[159,179281,590],{"emptyLinePlaceholder":589},[159,179283,179284,179286,179288,179290,179292],{"class":161,"line":223},[159,179285,18445],{"class":1142},[159,179287,39268],{"class":165},[159,179289,3822],{"class":1142},[159,179291,177585],{"class":1146},[159,179293,27364],{"class":165},[159,179295,179296,179298,179301,179303,179306],{"class":161,"line":233},[159,179297,26732],{"class":1142},[159,179299,179300],{"class":165}," has_ticket ",[159,179302,26581],{"class":1142},[159,179304,179305],{"class":192}," \"y\"",[159,179307,27364],{"class":165},[159,179309,179310,179312,179314,179316],{"class":161,"line":239},[159,179311,55969],{"class":1146},[159,179313,1159],{"class":165},[159,179315,178947],{"class":192},[159,179317,1165],{"class":165},[159,179319,179320,179323],{"class":161,"line":245},[159,179321,179322],{"class":1142},"    else",[159,179324,27364],{"class":165},[159,179326,179327,179329,179331,179334],{"class":161,"line":251},[159,179328,55969],{"class":1146},[159,179330,1159],{"class":165},[159,179332,179333],{"class":192},"\"请先买票\"",[159,179335,1165],{"class":165},[159,179337,179338,179340],{"class":161,"line":261},[159,179339,25364],{"class":1142},[159,179341,27364],{"class":165},[159,179343,179344,179346,179348,179351],{"class":161,"line":603},[159,179345,54819],{"class":1146},[159,179347,1159],{"class":165},[159,179349,179350],{"class":192},"\"未成年人禁止进入\"",[159,179352,1165],{"class":165},[14,179354,179355],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[37,179357,179359],{"id":179358},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[42,179361,179363],{"id":179362},"_361-and","3.6.1 and",[14,179365,179366],{},"两个条件都成立才成立。",[151,179368,179370],{"className":53900,"code":179369,"language":53902,"meta":25,"style":25},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[49,179371,179372,179380,179388,179392,179407],{"__ignoreMap":25},[159,179373,179374,179376,179378],{"class":161,"line":162},[159,179375,167846],{"class":165},[159,179377,189],{"class":1142},[159,179379,109365],{"class":1146},[159,179381,179382,179384,179386],{"class":161,"line":176},[159,179383,177661],{"class":165},[159,179385,189],{"class":1142},[159,179387,174899],{"class":1146},[159,179389,179390],{"class":161,"line":203},[159,179391,590],{"emptyLinePlaceholder":589},[159,179393,179394,179396,179398,179400,179402,179404],{"class":161,"line":223},[159,179395,18445],{"class":1142},[159,179397,39268],{"class":165},[159,179399,3822],{"class":1142},[159,179401,177585],{"class":1146},[159,179403,141729],{"class":1142},[159,179405,179406],{"class":165}," has_ticket:\n",[159,179408,179409,179411,179413,179415],{"class":161,"line":233},[159,179410,54819],{"class":1146},[159,179412,1159],{"class":165},[159,179414,178947],{"class":192},[159,179416,1165],{"class":165},[42,179418,179420],{"id":179419},"_362-or","3.6.2 or",[14,179422,179423],{},"只要一个条件成立就成立。",[151,179425,179427],{"className":53900,"code":179426,"language":53902,"meta":25,"style":25},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[49,179428,179429,179438,179447,179451,179463],{"__ignoreMap":25},[159,179430,179431,179434,179436],{"class":161,"line":162},[159,179432,179433],{"class":165},"is_vip ",[159,179435,189],{"class":1142},[159,179437,147107],{"class":1146},[159,179439,179440,179443,179445],{"class":161,"line":176},[159,179441,179442],{"class":165},"coupon ",[159,179444,189],{"class":1142},[159,179446,174899],{"class":1146},[159,179448,179449],{"class":161,"line":203},[159,179450,590],{"emptyLinePlaceholder":589},[159,179452,179453,179455,179458,179460],{"class":161,"line":223},[159,179454,18445],{"class":1142},[159,179456,179457],{"class":165}," is_vip ",[159,179459,136390],{"class":1142},[159,179461,179462],{"class":165}," coupon:\n",[159,179464,179465,179467,179469,179472],{"class":161,"line":233},[159,179466,54819],{"class":1146},[159,179468,1159],{"class":165},[159,179470,179471],{"class":192},"\"可以享受优惠\"",[159,179473,1165],{"class":165},[42,179475,179477],{"id":179476},"_363-not","3.6.3 not",[14,179479,179480],{},"取反。",[151,179482,179484],{"className":53900,"code":179483,"language":53902,"meta":25,"style":25},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[49,179485,179486,179495,179499,179508],{"__ignoreMap":25},[159,179487,179488,179491,179493],{"class":161,"line":162},[159,179489,179490],{"class":165},"is_closed ",[159,179492,189],{"class":1142},[159,179494,147107],{"class":1146},[159,179496,179497],{"class":161,"line":176},[159,179498,590],{"emptyLinePlaceholder":589},[159,179500,179501,179503,179505],{"class":161,"line":203},[159,179502,18445],{"class":1142},[159,179504,62325],{"class":1142},[159,179506,179507],{"class":165}," is_closed:\n",[159,179509,179510,179512,179514,179517],{"class":161,"line":223},[159,179511,54819],{"class":1146},[159,179513,1159],{"class":165},[159,179515,179516],{"class":192},"\"店铺营业中\"",[159,179518,1165],{"class":165},[37,179520,179522],{"id":179521},"_37-链式比较","3.7 链式比较",[14,179524,179525],{},"Python 支持链式比较：",[151,179527,179529],{"className":53900,"code":179528,"language":53902,"meta":25,"style":25},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[49,179530,179531,179540,179544,179561],{"__ignoreMap":25},[159,179532,179533,179535,179537],{"class":161,"line":162},[159,179534,176658],{"class":165},[159,179536,189],{"class":1142},[159,179538,179539],{"class":1146}," 85\n",[159,179541,179542],{"class":161,"line":176},[159,179543,590],{"emptyLinePlaceholder":589},[159,179545,179546,179548,179550,179553,179555,179557,179559],{"class":161,"line":203},[159,179547,18445],{"class":1142},[159,179549,1259],{"class":1146},[159,179551,179552],{"class":1142}," \u003C=",[159,179554,179083],{"class":165},[159,179556,25263],{"class":1142},[159,179558,29369],{"class":1146},[159,179560,27364],{"class":165},[159,179562,179563,179565,179567,179570],{"class":161,"line":223},[159,179564,54819],{"class":1146},[159,179566,1159],{"class":165},[159,179568,179569],{"class":192},"\"成绩合法\"",[159,179571,1165],{"class":165},[14,179573,179574],{},"等价于：",[151,179576,179578],{"className":53900,"code":179577,"language":53902,"meta":25,"style":25},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[49,179579,179580,179600],{"__ignoreMap":25},[159,179581,179582,179584,179586,179588,179590,179592,179594,179596,179598],{"class":161,"line":162},[159,179583,18445],{"class":1142},[159,179585,179083],{"class":165},[159,179587,3822],{"class":1142},[159,179589,1259],{"class":1146},[159,179591,141729],{"class":1142},[159,179593,179083],{"class":165},[159,179595,25263],{"class":1142},[159,179597,29369],{"class":1146},[159,179599,27364],{"class":165},[159,179601,179602,179604,179606,179608],{"class":161,"line":176},[159,179603,54819],{"class":1146},[159,179605,1159],{"class":165},[159,179607,179569],{"class":192},[159,179609,1165],{"class":165},[37,179611,179613],{"id":179612},"_38-真值和假值","3.8 真值和假值",[14,179615,137767,179616,179618],{},[49,179617,18445],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,179620,179621],{},"假值：",[151,179623,179625],{"className":53900,"code":179624,"language":53902,"meta":25,"style":25},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[49,179626,179627,179631,179636,179640,179644,179649,179653,179657,179662],{"__ignoreMap":25},[159,179628,179629],{"class":161,"line":162},[159,179630,178817],{"class":1146},[159,179632,179633],{"class":161,"line":176},[159,179634,179635],{"class":1146},"None\n",[159,179637,179638],{"class":161,"line":203},[159,179639,26716],{"class":1146},[159,179641,179642],{"class":161,"line":223},[159,179643,55860],{"class":1146},[159,179645,179646],{"class":161,"line":233},[159,179647,179648],{"class":192},"\"\"\n",[159,179650,179651],{"class":161,"line":239},[159,179652,55875],{"class":165},[159,179654,179655],{"class":161,"line":245},[159,179656,5158],{"class":165},[159,179658,179659],{"class":161,"line":251},[159,179660,179661],{"class":165},"{}\n",[159,179663,179664,179666],{"class":161,"line":261},[159,179665,176590],{"class":1146},[159,179667,5158],{"class":165},[14,179669,38698],{},[151,179671,179673],{"className":53900,"code":179672,"language":53902,"meta":25,"style":25},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[49,179674,179675,179689,179693,179700,179720,179726],{"__ignoreMap":25},[159,179676,179677,179679,179681,179683,179685,179687],{"class":161,"line":162},[159,179678,167836],{"class":165},[159,179680,189],{"class":1142},[159,179682,7625],{"class":1146},[159,179684,1159],{"class":165},[159,179686,173679],{"class":192},[159,179688,1165],{"class":165},[159,179690,179691],{"class":161,"line":176},[159,179692,590],{"emptyLinePlaceholder":589},[159,179694,179695,179697],{"class":161,"line":203},[159,179696,18445],{"class":1142},[159,179698,179699],{"class":165}," name:\n",[159,179701,179702,179704,179706,179708,179710,179712,179714,179716,179718],{"class":161,"line":223},[159,179703,54819],{"class":1146},[159,179705,1159],{"class":165},[159,179707,23931],{"class":1142},[159,179709,178354],{"class":192},[159,179711,24721],{"class":1146},[159,179713,101110],{"class":165},[159,179715,886],{"class":1146},[159,179717,24115],{"class":192},[159,179719,1165],{"class":165},[159,179721,179722,179724],{"class":161,"line":233},[159,179723,25364],{"class":1142},[159,179725,27364],{"class":165},[159,179727,179728,179730,179732,179735],{"class":161,"line":239},[159,179729,54819],{"class":1146},[159,179731,1159],{"class":165},[159,179733,179734],{"class":192},"\"姓名不能为空\"",[159,179736,1165],{"class":165},[37,179738,179740],{"id":179739},"_39-match语句","3.9 match语句",[14,179742,179743,179744,179746],{},"Python 3.10 开始支持 ",[49,179745,18354],{},"。它适合处理固定选项。",[151,179748,179750],{"className":53900,"code":179749,"language":53902,"meta":25,"style":25},"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",[49,179751,179752,179768,179772,179779,179789,179800,179809,179820,179829,179840,179847],{"__ignoreMap":25},[159,179753,179754,179757,179759,179761,179763,179766],{"class":161,"line":162},[159,179755,179756],{"class":165},"command ",[159,179758,189],{"class":1142},[159,179760,7625],{"class":1146},[159,179762,1159],{"class":165},[159,179764,179765],{"class":192},"\"请输入命令:\"",[159,179767,1165],{"class":165},[159,179769,179770],{"class":161,"line":176},[159,179771,590],{"emptyLinePlaceholder":589},[159,179773,179774,179776],{"class":161,"line":203},[159,179775,18354],{"class":1142},[159,179777,179778],{"class":165}," command:\n",[159,179780,179781,179784,179787],{"class":161,"line":223},[159,179782,179783],{"class":1142},"    case",[159,179785,179786],{"class":192}," \"start\"",[159,179788,27364],{"class":165},[159,179790,179791,179793,179795,179798],{"class":161,"line":233},[159,179792,55969],{"class":1146},[159,179794,1159],{"class":165},[159,179796,179797],{"class":192},"\"启动\"",[159,179799,1165],{"class":165},[159,179801,179802,179804,179807],{"class":161,"line":239},[159,179803,179783],{"class":1142},[159,179805,179806],{"class":192}," \"stop\"",[159,179808,27364],{"class":165},[159,179810,179811,179813,179815,179818],{"class":161,"line":245},[159,179812,55969],{"class":1146},[159,179814,1159],{"class":165},[159,179816,179817],{"class":192},"\"停止\"",[159,179819,1165],{"class":165},[159,179821,179822,179824,179827],{"class":161,"line":251},[159,179823,179783],{"class":1142},[159,179825,179826],{"class":192}," \"restart\"",[159,179828,27364],{"class":165},[159,179830,179831,179833,179835,179838],{"class":161,"line":261},[159,179832,55969],{"class":1146},[159,179834,1159],{"class":165},[159,179836,179837],{"class":192},"\"重启\"",[159,179839,1165],{"class":165},[159,179841,179842,179844],{"class":161,"line":603},[159,179843,179783],{"class":1142},[159,179845,179846],{"class":165}," _:\n",[159,179848,179849,179851,179853,179856],{"class":161,"line":621},[159,179850,55969],{"class":1146},[159,179852,1159],{"class":165},[159,179854,179855],{"class":192},"\"未知命令\"",[159,179857,1165],{"class":165},[14,179859,179860,179861,179863,179864,179866],{},"入门阶段掌握 ",[49,179862,175958],{}," 更重要，",[49,179865,18354],{}," 可以作为补充。",[37,179868,179870],{"id":179869},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,179872,144592],{},[134,179874,179875,179878,179881],{},[106,179876,179877],{},"输入成绩。",[106,179879,179880],{},"判断成绩是否合法。",[106,179882,179883],{},"输出等级。",[14,179885,33610],{},[151,179887,179889],{"className":53900,"code":179888,"language":53902,"meta":25,"style":25},"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",[49,179890,179891,179909,179913,179931,179942,179954,179965,179977,179988,180001,180012,180024,180035,180041],{"__ignoreMap":25},[159,179892,179893,179895,179897,179899,179901,179903,179905,179907],{"class":161,"line":162},[159,179894,176658],{"class":165},[159,179896,189],{"class":1142},[159,179898,131097],{"class":1146},[159,179900,1159],{"class":165},[159,179902,536],{"class":1146},[159,179904,1159],{"class":165},[159,179906,173709],{"class":192},[159,179908,18787],{"class":165},[159,179910,179911],{"class":161,"line":176},[159,179912,590],{"emptyLinePlaceholder":589},[159,179914,179915,179917,179919,179921,179923,179925,179927,179929],{"class":161,"line":203},[159,179916,18445],{"class":1142},[159,179918,62325],{"class":1142},[159,179920,1259],{"class":1146},[159,179922,179552],{"class":1142},[159,179924,179083],{"class":165},[159,179926,25263],{"class":1142},[159,179928,29369],{"class":1146},[159,179930,27364],{"class":165},[159,179932,179933,179935,179937,179940],{"class":161,"line":223},[159,179934,54819],{"class":1146},[159,179936,1159],{"class":165},[159,179938,179939],{"class":192},"\"成绩不合法\"",[159,179941,1165],{"class":165},[159,179943,179944,179946,179948,179950,179952],{"class":161,"line":233},[159,179945,179106],{"class":1142},[159,179947,179083],{"class":165},[159,179949,3822],{"class":1142},[159,179951,179088],{"class":1146},[159,179953,27364],{"class":165},[159,179955,179956,179958,179960,179963],{"class":161,"line":239},[159,179957,54819],{"class":1146},[159,179959,1159],{"class":165},[159,179961,179962],{"class":192},"\"等级:A\"",[159,179964,1165],{"class":165},[159,179966,179967,179969,179971,179973,179975],{"class":161,"line":245},[159,179968,179106],{"class":1142},[159,179970,179083],{"class":165},[159,179972,3822],{"class":1142},[159,179974,179113],{"class":1146},[159,179976,27364],{"class":165},[159,179978,179979,179981,179983,179986],{"class":161,"line":251},[159,179980,54819],{"class":1146},[159,179982,1159],{"class":165},[159,179984,179985],{"class":192},"\"等级:B\"",[159,179987,1165],{"class":165},[159,179989,179990,179992,179994,179996,179999],{"class":161,"line":261},[159,179991,179106],{"class":1142},[159,179993,179083],{"class":165},[159,179995,3822],{"class":1142},[159,179997,179998],{"class":1146}," 70",[159,180000,27364],{"class":165},[159,180002,180003,180005,180007,180010],{"class":161,"line":603},[159,180004,54819],{"class":1146},[159,180006,1159],{"class":165},[159,180008,180009],{"class":192},"\"等级:C\"",[159,180011,1165],{"class":165},[159,180013,180014,180016,180018,180020,180022],{"class":161,"line":621},[159,180015,179106],{"class":1142},[159,180017,179083],{"class":165},[159,180019,3822],{"class":1142},[159,180021,179137],{"class":1146},[159,180023,27364],{"class":165},[159,180025,180026,180028,180030,180033],{"class":161,"line":634},[159,180027,54819],{"class":1146},[159,180029,1159],{"class":165},[159,180031,180032],{"class":192},"\"等级:D\"",[159,180034,1165],{"class":165},[159,180036,180037,180039],{"class":161,"line":640},[159,180038,25364],{"class":1142},[159,180040,27364],{"class":165},[159,180042,180043,180045,180047,180050],{"class":161,"line":1075},[159,180044,54819],{"class":1146},[159,180046,1159],{"class":165},[159,180048,180049],{"class":192},"\"等级:E\"",[159,180051,1165],{"class":165},[37,180053,180055],{"id":180054},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,180057,144592],{},[134,180059,180060,180063,180066,180069],{},[106,180061,180062],{},"输入消费金额。",[106,180064,180065],{},"输入会员等级，普通、银卡、金卡。",[106,180067,180068],{},"普通不打折，银卡 9 折，金卡 8 折。",[106,180070,180071],{},"满 500 再减 50。",[14,180073,33610],{},[151,180075,180077],{"className":53900,"code":180076,"language":53902,"meta":25,"style":25},"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",[49,180078,180079,180099,180115,180119,180127,180131,180145,180155,180168,180177,180190,180198,180204,180215,180219,180233,180237,180251,180261,180265],{"__ignoreMap":25},[159,180080,180081,180084,180086,180088,180090,180092,180094,180097],{"class":161,"line":162},[159,180082,180083],{"class":165},"amount ",[159,180085,189],{"class":1142},[159,180087,131097],{"class":1146},[159,180089,1159],{"class":165},[159,180091,536],{"class":1146},[159,180093,1159],{"class":165},[159,180095,180096],{"class":192},"\"请输入消费金额:\"",[159,180098,18787],{"class":165},[159,180100,180101,180104,180106,180108,180110,180113],{"class":161,"line":176},[159,180102,180103],{"class":165},"level ",[159,180105,189],{"class":1142},[159,180107,7625],{"class":1146},[159,180109,1159],{"class":165},[159,180111,180112],{"class":192},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[159,180114,1165],{"class":165},[159,180116,180117],{"class":161,"line":203},[159,180118,590],{"emptyLinePlaceholder":589},[159,180120,180121,180123,180125],{"class":161,"line":223},[159,180122,178536],{"class":165},[159,180124,189],{"class":1142},[159,180126,2570],{"class":1146},[159,180128,180129],{"class":161,"line":233},[159,180130,590],{"emptyLinePlaceholder":589},[159,180132,180133,180135,180138,180140,180143],{"class":161,"line":239},[159,180134,18445],{"class":1142},[159,180136,180137],{"class":165}," level ",[159,180139,26581],{"class":1142},[159,180141,180142],{"class":192}," \"银卡\"",[159,180144,27364],{"class":165},[159,180146,180147,180150,180152],{"class":161,"line":245},[159,180148,180149],{"class":165},"    discount ",[159,180151,189],{"class":1142},[159,180153,180154],{"class":1146}," 0.9\n",[159,180156,180157,180159,180161,180163,180166],{"class":161,"line":251},[159,180158,179106],{"class":1142},[159,180160,180137],{"class":165},[159,180162,26581],{"class":1142},[159,180164,180165],{"class":192}," \"金卡\"",[159,180167,27364],{"class":165},[159,180169,180170,180172,180174],{"class":161,"line":261},[159,180171,180149],{"class":165},[159,180173,189],{"class":1142},[159,180175,180176],{"class":1146}," 0.8\n",[159,180178,180179,180181,180183,180185,180188],{"class":161,"line":603},[159,180180,179106],{"class":1142},[159,180182,180137],{"class":165},[159,180184,26581],{"class":1142},[159,180186,180187],{"class":192}," \"普通\"",[159,180189,27364],{"class":165},[159,180191,180192,180194,180196],{"class":161,"line":621},[159,180193,180149],{"class":165},[159,180195,189],{"class":1142},[159,180197,2570],{"class":1146},[159,180199,180200,180202],{"class":161,"line":634},[159,180201,25364],{"class":1142},[159,180203,27364],{"class":165},[159,180205,180206,180208,180210,180213],{"class":161,"line":640},[159,180207,54819],{"class":1146},[159,180209,1159],{"class":165},[159,180211,180212],{"class":192},"\"会员等级输入错误，按普通会员计算\"",[159,180214,1165],{"class":165},[159,180216,180217],{"class":161,"line":1075},[159,180218,590],{"emptyLinePlaceholder":589},[159,180220,180221,180224,180226,180229,180231],{"class":161,"line":1081},[159,180222,180223],{"class":165},"pay ",[159,180225,189],{"class":1142},[159,180227,180228],{"class":165}," amount ",[159,180230,4777],{"class":1142},[159,180232,178575],{"class":165},[159,180234,180235],{"class":161,"line":1091},[159,180236,590],{"emptyLinePlaceholder":589},[159,180238,180239,180241,180244,180246,180249],{"class":161,"line":1100},[159,180240,18445],{"class":1142},[159,180242,180243],{"class":165}," pay ",[159,180245,3822],{"class":1142},[159,180247,180248],{"class":1146}," 500",[159,180250,27364],{"class":165},[159,180252,180253,180256,180258],{"class":161,"line":1123},[159,180254,180255],{"class":165},"    pay ",[159,180257,171552],{"class":1142},[159,180259,180260],{"class":1146}," 50\n",[159,180262,180263],{"class":161,"line":1132},[159,180264,590],{"emptyLinePlaceholder":589},[159,180266,180267,180269,180271,180273,180275,180277,180280,180282,180284,180286],{"class":161,"line":1139},[159,180268,53937],{"class":1146},[159,180270,1159],{"class":165},[159,180272,23931],{"class":1142},[159,180274,178656],{"class":192},[159,180276,24721],{"class":1146},[159,180278,180279],{"class":165},"pay",[159,180281,178459],{"class":1142},[159,180283,886],{"class":1146},[159,180285,178312],{"class":192},[159,180287,1165],{"class":165},[37,180289,180291],{"id":180290},"_312-易错点","3.12 易错点",[134,180293,180294,180297,180300,180303,180308],{},[106,180295,180296],{},"冒号不能漏。",[106,180298,180299],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[106,180301,180302],{},"多分支判断要注意顺序。",[106,180304,180305,180306,51907],{},"判断相等用 ",[49,180307,26581],{},[106,180309,180310],{},"字符串比较区分大小写：",[151,180312,180314],{"className":53900,"code":180313,"language":53902,"meta":25,"style":25},"\"Y\" == \"y\"  # False\n",[49,180315,180316],{"__ignoreMap":25},[159,180317,180318,180321,180323,180325],{"class":161,"line":162},[159,180319,180320],{"class":192},"\"Y\"",[159,180322,122859],{"class":1142},[159,180324,179305],{"class":192},[159,180326,180327],{"class":1135},"  # False\n",[14,180329,180330],{},"可转换后再判断：",[151,180332,180334],{"className":53900,"code":180333,"language":53902,"meta":25,"style":25},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[49,180335,180336,180353,180366],{"__ignoreMap":25},[159,180337,180338,180341,180343,180345,180347,180350],{"class":161,"line":162},[159,180339,180340],{"class":165},"answer ",[159,180342,189],{"class":1142},[159,180344,7625],{"class":1146},[159,180346,1159],{"class":165},[159,180348,180349],{"class":192},"\"是否继续(y\u002Fn):\"",[159,180351,180352],{"class":165},").lower()\n",[159,180354,180355,180357,180360,180362,180364],{"class":161,"line":176},[159,180356,18445],{"class":1142},[159,180358,180359],{"class":165}," answer ",[159,180361,26581],{"class":1142},[159,180363,179305],{"class":192},[159,180365,27364],{"class":165},[159,180367,180368,180370,180372,180375],{"class":161,"line":203},[159,180369,54819],{"class":1146},[159,180371,1159],{"class":165},[159,180373,180374],{"class":192},"\"继续\"",[159,180376,1165],{"class":165},[37,180378,180380],{"id":180379},"_313-本章练习","3.13 本章练习",[134,180382,180383,180386,180389,180392,180402],{},[106,180384,180385],{},"输入年龄，判断是否成年。",[106,180387,180388],{},"输入年份，判断是否为闰年。",[106,180390,180391],{},"输入三个数字，输出最大值。",[106,180393,180394,180395,180398,180399,180401],{},"写登录判断：用户名是 ",[49,180396,180397],{},"admin"," 且密码是 ",[49,180400,38647],{}," 才登录成功。",[106,180403,180404],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1468,180406,180407],{},"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":25,"searchDepth":176,"depth":176,"links":180409},[180410,180411,180412,180413,180414,180415,180420,180421,180422,180423,180424,180425,180426],{"id":178798,"depth":176,"text":178799},{"id":178851,"depth":176,"text":178852},{"id":178955,"depth":176,"text":178956},{"id":179045,"depth":176,"text":179046},{"id":179235,"depth":176,"text":179236},{"id":179358,"depth":176,"text":179359,"children":180416},[180417,180418,180419],{"id":179362,"depth":203,"text":179363},{"id":179419,"depth":203,"text":179420},{"id":179476,"depth":203,"text":179477},{"id":179521,"depth":176,"text":179522},{"id":179612,"depth":176,"text":179613},{"id":179739,"depth":176,"text":179740},{"id":179869,"depth":176,"text":179870},{"id":180054,"depth":176,"text":180055},{"id":180290,"depth":176,"text":180291},{"id":180379,"depth":176,"text":180380},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":178790,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":180433,"title":180434,"body":180435,"description":23809,"extension":23810,"meta":182204,"navigation":589,"path":182205,"seo":182206,"stem":182207,"__hash__":182208},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":180436,"toc":182184},[180437,180440,180444,180450,180453,180470,180474,180476,180493,180495,180540,180542,180559,180563,180566,180632,180635,180653,180657,180818,180827,180831,180835,180840,180887,180889,180895,180899,180904,180951,180953,180959,180963,180968,181004,181007,181054,181058,181064,181122,181127,181158,181163,181167,181222,181225,181297,181300,181359,181363,181366,181441,181444,181448,181554,181557,181583,181587,181599,181668,181671,181763,181767,181769,181780,181782,181912,181916,182118,182126,182130,182160,182164,182181],[10,180438,180434],{"id":180439},"_4-循环语句",[37,180441,180443],{"id":180442},"_41-为什么需要循环","4.1 为什么需要循环",[14,180445,180446,180447,180449],{},"如果要输出 1 到 100，不应该写 100 行 ",[49,180448,167772],{},"，而应该用循环。",[14,180451,180452],{},"循环适合处理重复任务：",[134,180454,180455,180458,180461,180464,180467],{},[106,180456,180457],{},"重复输出。",[106,180459,180460],{},"重复输入。",[106,180462,180463],{},"遍历数据。",[106,180465,180466],{},"持续执行菜单。",[106,180468,180469],{},"批量处理文件或数据。",[37,180471,180473],{"id":180472},"_42-while循环","4.2 while循环",[14,180475,28799],{},[151,180477,180479],{"className":53900,"code":180478,"language":53902,"meta":25,"style":25},"while 条件:\n    循环体\n",[49,180480,180481,180488],{"__ignoreMap":25},[159,180482,180483,180485],{"class":161,"line":162},[159,180484,129963],{"class":1142},[159,180486,180487],{"class":165}," 条件:\n",[159,180489,180490],{"class":161,"line":176},[159,180491,180492],{"class":165},"    循环体\n",[14,180494,38698],{},[151,180496,180498],{"className":53900,"code":180497,"language":53902,"meta":25,"style":25},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[49,180499,180500,180508,180512,180524,180531],{"__ignoreMap":25},[159,180501,180502,180504,180506],{"class":161,"line":162},[159,180503,121448],{"class":165},[159,180505,189],{"class":1142},[159,180507,2570],{"class":1146},[159,180509,180510],{"class":161,"line":176},[159,180511,590],{"emptyLinePlaceholder":589},[159,180513,180514,180516,180518,180520,180522],{"class":161,"line":203},[159,180515,129963],{"class":1142},[159,180517,1186],{"class":165},[159,180519,25263],{"class":1142},[159,180521,25798],{"class":1146},[159,180523,27364],{"class":165},[159,180525,180526,180528],{"class":161,"line":223},[159,180527,54819],{"class":1146},[159,180529,180530],{"class":165},"(i)\n",[159,180532,180533,180536,180538],{"class":161,"line":233},[159,180534,180535],{"class":165},"    i ",[159,180537,33073],{"class":1142},[159,180539,2570],{"class":1146},[14,180541,102229],{},[134,180543,180544,180550,180553,180556],{},[106,180545,180546,180547,51907],{},"判断条件 ",[49,180548,180549],{},"i \u003C= 5",[106,180551,180552],{},"条件成立，执行循环体。",[106,180554,180555],{},"执行完后回到条件判断。",[106,180557,180558],{},"条件不成立，退出循环。",[37,180560,180562],{"id":180561},"_43-while累加","4.3 while累加",[14,180564,180565],{},"计算 1 到 100 的和：",[151,180567,180569],{"className":53900,"code":180568,"language":53902,"meta":25,"style":25},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[49,180570,180571,180579,180587,180591,180603,180613,180621,180625],{"__ignoreMap":25},[159,180572,180573,180575,180577],{"class":161,"line":162},[159,180574,121448],{"class":165},[159,180576,189],{"class":1142},[159,180578,2570],{"class":1146},[159,180580,180581,180583,180585],{"class":161,"line":176},[159,180582,178560],{"class":165},[159,180584,189],{"class":1142},[159,180586,3785],{"class":1146},[159,180588,180589],{"class":161,"line":203},[159,180590,590],{"emptyLinePlaceholder":589},[159,180592,180593,180595,180597,180599,180601],{"class":161,"line":223},[159,180594,129963],{"class":1142},[159,180596,1186],{"class":165},[159,180598,25263],{"class":1142},[159,180600,29369],{"class":1146},[159,180602,27364],{"class":165},[159,180604,180605,180608,180610],{"class":161,"line":233},[159,180606,180607],{"class":165},"    total ",[159,180609,33073],{"class":1142},[159,180611,180612],{"class":165}," i\n",[159,180614,180615,180617,180619],{"class":161,"line":239},[159,180616,180535],{"class":165},[159,180618,33073],{"class":1142},[159,180620,2570],{"class":1146},[159,180622,180623],{"class":161,"line":245},[159,180624,590],{"emptyLinePlaceholder":589},[159,180626,180627,180629],{"class":161,"line":251},[159,180628,53937],{"class":1146},[159,180630,180631],{"class":165},"(total)\n",[14,180633,180634],{},"核心思想：",[134,180636,180637,180642,180647],{},[106,180638,180639,180641],{},[49,180640,1241],{}," 控制循环次数。",[106,180643,180644,180646],{},[49,180645,178661],{}," 保存累加结果。",[106,180648,180649,180650,180652],{},"每轮循环都要更新 ",[49,180651,1241],{},"，否则可能死循环。",[37,180654,180656],{"id":180655},"_44-while猜数字","4.4 while猜数字",[151,180658,180660],{"className":53900,"code":180659,"language":53902,"meta":25,"style":25},"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",[49,180661,180662,180668,180672,180689,180697,180701,180709,180729,180738,180742,180754,180765,180775,180786,180792,180814],{"__ignoreMap":25},[159,180663,180664,180666],{"class":161,"line":162},[159,180665,53914],{"class":1142},[159,180667,68723],{"class":165},[159,180669,180670],{"class":161,"line":176},[159,180671,590],{"emptyLinePlaceholder":589},[159,180673,180674,180676,180678,180681,180683,180685,180687],{"class":161,"line":203},[159,180675,180340],{"class":165},[159,180677,189],{"class":1142},[159,180679,180680],{"class":165}," random.randint(",[159,180682,4932],{"class":1146},[159,180684,1939],{"class":165},[159,180686,1596],{"class":1146},[159,180688,1165],{"class":165},[159,180690,180691,180693,180695],{"class":161,"line":223},[159,180692,167991],{"class":165},[159,180694,189],{"class":1142},[159,180696,3785],{"class":1146},[159,180698,180699],{"class":161,"line":233},[159,180700,590],{"emptyLinePlaceholder":589},[159,180702,180703,180705,180707],{"class":161,"line":239},[159,180704,129963],{"class":1142},[159,180706,116592],{"class":1146},[159,180708,27364],{"class":165},[159,180710,180711,180714,180716,180718,180720,180722,180724,180727],{"class":161,"line":245},[159,180712,180713],{"class":165},"    guess ",[159,180715,189],{"class":1142},[159,180717,26029],{"class":1146},[159,180719,1159],{"class":165},[159,180721,536],{"class":1146},[159,180723,1159],{"class":165},[159,180725,180726],{"class":192},"\"请输入1到100之间的数字:\"",[159,180728,18787],{"class":165},[159,180730,180731,180734,180736],{"class":161,"line":251},[159,180732,180733],{"class":165},"    count ",[159,180735,33073],{"class":1142},[159,180737,2570],{"class":1146},[159,180739,180740],{"class":161,"line":261},[159,180741,590],{"emptyLinePlaceholder":589},[159,180743,180744,180746,180749,180751],{"class":161,"line":603},[159,180745,26732],{"class":1142},[159,180747,180748],{"class":165}," guess ",[159,180750,6760],{"class":1142},[159,180752,180753],{"class":165}," answer:\n",[159,180755,180756,180758,180760,180763],{"class":161,"line":621},[159,180757,55969],{"class":1146},[159,180759,1159],{"class":165},[159,180761,180762],{"class":192},"\"猜大了\"",[159,180764,1165],{"class":165},[159,180766,180767,180769,180771,180773],{"class":161,"line":634},[159,180768,62688],{"class":1142},[159,180770,180748],{"class":165},[159,180772,166],{"class":1142},[159,180774,180753],{"class":165},[159,180776,180777,180779,180781,180784],{"class":161,"line":640},[159,180778,55969],{"class":1146},[159,180780,1159],{"class":165},[159,180782,180783],{"class":192},"\"猜小了\"",[159,180785,1165],{"class":165},[159,180787,180788,180790],{"class":161,"line":1075},[159,180789,179322],{"class":1142},[159,180791,27364],{"class":165},[159,180793,180794,180796,180798,180800,180803,180805,180807,180809,180812],{"class":161,"line":1081},[159,180795,55969],{"class":1146},[159,180797,1159],{"class":165},[159,180799,23931],{"class":1142},[159,180801,180802],{"class":192},"\"猜对了，一共猜了",[159,180804,24721],{"class":1146},[159,180806,105734],{"class":165},[159,180808,886],{"class":1146},[159,180810,180811],{"class":192},"次\"",[159,180813,1165],{"class":165},[159,180815,180816],{"class":161,"line":1091},[159,180817,55146],{"class":1142},[14,180819,180820,180823,180824,180826],{},[49,180821,180822],{},"while True"," 表示无限循环，通常配合 ",[49,180825,25703],{}," 使用。",[37,180828,180830],{"id":180829},"_45-break和continue","4.5 break和continue",[42,180832,180834],{"id":180833},"_451-break","4.5.1 break",[14,180836,180837,180839],{},[49,180838,25703],{}," 直接结束整个循环。",[151,180841,180843],{"className":53900,"code":180842,"language":53902,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[49,180844,180845,180865,180877,180881],{"__ignoreMap":25},[159,180846,180847,180849,180851,180853,180855,180857,180859,180861,180863],{"class":161,"line":162},[159,180848,26657],{"class":1142},[159,180850,1186],{"class":165},[159,180852,49566],{"class":1142},[159,180854,55961],{"class":1146},[159,180856,1159],{"class":165},[159,180858,4932],{"class":1146},[159,180860,1939],{"class":165},[159,180862,7907],{"class":1146},[159,180864,54307],{"class":165},[159,180866,180867,180869,180871,180873,180875],{"class":161,"line":176},[159,180868,26732],{"class":1142},[159,180870,1186],{"class":165},[159,180872,26581],{"class":1142},[159,180874,99370],{"class":1146},[159,180876,27364],{"class":165},[159,180878,180879],{"class":161,"line":203},[159,180880,55146],{"class":1142},[159,180882,180883,180885],{"class":161,"line":223},[159,180884,54819],{"class":1146},[159,180886,180530],{"class":165},[14,180888,167757],{},[151,180890,180893],{"className":180891,"code":180892,"language":8507,"meta":25},[28803],"1\n2\n",[49,180894,180892],{"__ignoreMap":25},[42,180896,180898],{"id":180897},"_452-continue","4.5.2 continue",[14,180900,180901,180903],{},[49,180902,175972],{}," 跳过本轮剩余代码，进入下一轮循环。",[151,180905,180907],{"className":53900,"code":180906,"language":53902,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[49,180908,180909,180929,180941,180945],{"__ignoreMap":25},[159,180910,180911,180913,180915,180917,180919,180921,180923,180925,180927],{"class":161,"line":162},[159,180912,26657],{"class":1142},[159,180914,1186],{"class":165},[159,180916,49566],{"class":1142},[159,180918,55961],{"class":1146},[159,180920,1159],{"class":165},[159,180922,4932],{"class":1146},[159,180924,1939],{"class":165},[159,180926,7907],{"class":1146},[159,180928,54307],{"class":165},[159,180930,180931,180933,180935,180937,180939],{"class":161,"line":176},[159,180932,26732],{"class":1142},[159,180934,1186],{"class":165},[159,180936,26581],{"class":1142},[159,180938,99370],{"class":1146},[159,180940,27364],{"class":165},[159,180942,180943],{"class":161,"line":203},[159,180944,169812],{"class":1142},[159,180946,180947,180949],{"class":161,"line":223},[159,180948,54819],{"class":1146},[159,180950,180530],{"class":165},[14,180952,167757],{},[151,180954,180957],{"className":180955,"code":180956,"language":8507,"meta":25},[28803],"1\n2\n4\n5\n",[49,180958,180956],{"__ignoreMap":25},[37,180960,180962],{"id":180961},"_46-for循环","4.6 for循环",[14,180964,180965,180967],{},[49,180966,26657],{}," 常用于遍历序列。",[151,180969,180971],{"className":53900,"code":180970,"language":53902,"meta":25,"style":25},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[49,180972,180973,180982,180986,180997],{"__ignoreMap":25},[159,180974,180975,180977,180979],{"class":161,"line":162},[159,180976,167836],{"class":165},[159,180978,189],{"class":1142},[159,180980,180981],{"class":192}," \"python\"\n",[159,180983,180984],{"class":161,"line":176},[159,180985,590],{"emptyLinePlaceholder":589},[159,180987,180988,180990,180993,180995],{"class":161,"line":203},[159,180989,26657],{"class":1142},[159,180991,180992],{"class":165}," ch ",[159,180994,49566],{"class":1142},[159,180996,179699],{"class":165},[159,180998,180999,181001],{"class":161,"line":223},[159,181000,54819],{"class":1146},[159,181002,181003],{"class":165},"(ch)\n",[14,181005,181006],{},"遍历列表：",[151,181008,181010],{"className":53900,"code":181009,"language":53902,"meta":25,"style":25},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[49,181011,181012,181034,181038,181048],{"__ignoreMap":25},[159,181013,181014,181017,181019,181021,181023,181025,181027,181029,181032],{"class":161,"line":162},[159,181015,181016],{"class":165},"students ",[159,181018,189],{"class":1142},[159,181020,4608],{"class":165},[159,181022,171188],{"class":192},[159,181024,1939],{"class":165},[159,181026,172236],{"class":192},[159,181028,1939],{"class":165},[159,181030,181031],{"class":192},"\"小刚\"",[159,181033,4634],{"class":165},[159,181035,181036],{"class":161,"line":176},[159,181037,590],{"emptyLinePlaceholder":589},[159,181039,181040,181042,181044,181046],{"class":161,"line":203},[159,181041,26657],{"class":1142},[159,181043,173437],{"class":165},[159,181045,49566],{"class":1142},[159,181047,173442],{"class":165},[159,181049,181050,181052],{"class":161,"line":223},[159,181051,54819],{"class":1146},[159,181053,171342],{"class":165},[37,181055,181057],{"id":181056},"_47-range函数","4.7 range函数",[14,181059,181060,181063],{},[49,181061,181062],{},"range()"," 用于生成整数序列。",[151,181065,181067],{"className":53900,"code":181066,"language":53902,"meta":25,"style":25},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[49,181068,181069,181083,181101],{"__ignoreMap":25},[159,181070,181071,181073,181075,181077,181080],{"class":161,"line":162},[159,181072,56857],{"class":1146},[159,181074,1159],{"class":165},[159,181076,1753],{"class":1146},[159,181078,181079],{"class":165},")          ",[159,181081,181082],{"class":1135},"# 0,1,2,3,4\n",[159,181084,181085,181087,181089,181091,181093,181095,181098],{"class":161,"line":176},[159,181086,56857],{"class":1146},[159,181088,1159],{"class":165},[159,181090,4932],{"class":1146},[159,181092,1939],{"class":165},[159,181094,1753],{"class":1146},[159,181096,181097],{"class":165},")       ",[159,181099,181100],{"class":1135},"# 1,2,3,4\n",[159,181102,181103,181105,181107,181109,181111,181113,181115,181117,181119],{"class":161,"line":203},[159,181104,56857],{"class":1146},[159,181106,1159],{"class":165},[159,181108,4932],{"class":1146},[159,181110,1939],{"class":165},[159,181112,1964],{"class":1146},[159,181114,1939],{"class":165},[159,181116,11034],{"class":1146},[159,181118,176961],{"class":165},[159,181120,181121],{"class":1135},"# 1,3,5,7,9\n",[14,181123,181124,181125,48143],{},"配合 ",[49,181126,26657],{},[151,181128,181130],{"className":53900,"code":181129,"language":53902,"meta":25,"style":25},"for i in range(1, 6):\n    print(i)\n",[49,181131,181132,181152],{"__ignoreMap":25},[159,181133,181134,181136,181138,181140,181142,181144,181146,181148,181150],{"class":161,"line":162},[159,181135,26657],{"class":1142},[159,181137,1186],{"class":165},[159,181139,49566],{"class":1142},[159,181141,55961],{"class":1146},[159,181143,1159],{"class":165},[159,181145,4932],{"class":1146},[159,181147,1939],{"class":165},[159,181149,7907],{"class":1146},[159,181151,54307],{"class":165},[159,181153,181154,181156],{"class":161,"line":176},[159,181155,54819],{"class":1146},[159,181157,180530],{"class":165},[14,181159,32623,181160,181162],{},[49,181161,56857],{}," 的结束值不包含在内。",[37,181164,181166],{"id":181165},"_48-for循环求和","4.8 for循环求和",[151,181168,181170],{"className":53900,"code":181169,"language":53902,"meta":25,"style":25},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[49,181171,181172,181180,181184,181204,181212,181216],{"__ignoreMap":25},[159,181173,181174,181176,181178],{"class":161,"line":162},[159,181175,178560],{"class":165},[159,181177,189],{"class":1142},[159,181179,3785],{"class":1146},[159,181181,181182],{"class":161,"line":176},[159,181183,590],{"emptyLinePlaceholder":589},[159,181185,181186,181188,181190,181192,181194,181196,181198,181200,181202],{"class":161,"line":203},[159,181187,26657],{"class":1142},[159,181189,1186],{"class":165},[159,181191,49566],{"class":1142},[159,181193,55961],{"class":1146},[159,181195,1159],{"class":165},[159,181197,4932],{"class":1146},[159,181199,1939],{"class":165},[159,181201,24194],{"class":1146},[159,181203,54307],{"class":165},[159,181205,181206,181208,181210],{"class":161,"line":223},[159,181207,180607],{"class":165},[159,181209,33073],{"class":1142},[159,181211,180612],{"class":165},[159,181213,181214],{"class":161,"line":233},[159,181215,590],{"emptyLinePlaceholder":589},[159,181217,181218,181220],{"class":161,"line":239},[159,181219,53937],{"class":1146},[159,181221,180631],{"class":165},[14,181223,181224],{},"求偶数和：",[151,181226,181228],{"className":53900,"code":181227,"language":53902,"meta":25,"style":25},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[49,181229,181230,181238,181242,181262,181278,181287,181291],{"__ignoreMap":25},[159,181231,181232,181234,181236],{"class":161,"line":162},[159,181233,178560],{"class":165},[159,181235,189],{"class":1142},[159,181237,3785],{"class":1146},[159,181239,181240],{"class":161,"line":176},[159,181241,590],{"emptyLinePlaceholder":589},[159,181243,181244,181246,181248,181250,181252,181254,181256,181258,181260],{"class":161,"line":203},[159,181245,26657],{"class":1142},[159,181247,1186],{"class":165},[159,181249,49566],{"class":1142},[159,181251,55961],{"class":1146},[159,181253,1159],{"class":165},[159,181255,4932],{"class":1146},[159,181257,1939],{"class":165},[159,181259,24194],{"class":1146},[159,181261,54307],{"class":165},[159,181263,181264,181266,181268,181270,181272,181274,181276],{"class":161,"line":223},[159,181265,26732],{"class":1142},[159,181267,1186],{"class":165},[159,181269,1662],{"class":1142},[159,181271,38320],{"class":1146},[159,181273,122859],{"class":1142},[159,181275,1259],{"class":1146},[159,181277,27364],{"class":165},[159,181279,181280,181283,181285],{"class":161,"line":233},[159,181281,181282],{"class":165},"        total ",[159,181284,33073],{"class":1142},[159,181286,180612],{"class":165},[159,181288,181289],{"class":161,"line":239},[159,181290,590],{"emptyLinePlaceholder":589},[159,181292,181293,181295],{"class":161,"line":245},[159,181294,53937],{"class":1146},[159,181296,180631],{"class":165},[14,181298,181299],{},"也可以：",[151,181301,181303],{"className":53900,"code":181302,"language":53902,"meta":25,"style":25},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[49,181304,181305,181313,181317,181341,181349,181353],{"__ignoreMap":25},[159,181306,181307,181309,181311],{"class":161,"line":162},[159,181308,178560],{"class":165},[159,181310,189],{"class":1142},[159,181312,3785],{"class":1146},[159,181314,181315],{"class":161,"line":176},[159,181316,590],{"emptyLinePlaceholder":589},[159,181318,181319,181321,181323,181325,181327,181329,181331,181333,181335,181337,181339],{"class":161,"line":203},[159,181320,26657],{"class":1142},[159,181322,1186],{"class":165},[159,181324,49566],{"class":1142},[159,181326,55961],{"class":1146},[159,181328,1159],{"class":165},[159,181330,11034],{"class":1146},[159,181332,1939],{"class":165},[159,181334,24194],{"class":1146},[159,181336,1939],{"class":165},[159,181338,11034],{"class":1146},[159,181340,54307],{"class":165},[159,181342,181343,181345,181347],{"class":161,"line":223},[159,181344,180607],{"class":165},[159,181346,33073],{"class":1142},[159,181348,180612],{"class":165},[159,181350,181351],{"class":161,"line":233},[159,181352,590],{"emptyLinePlaceholder":589},[159,181354,181355,181357],{"class":161,"line":239},[159,181356,53937],{"class":1146},[159,181358,180631],{"class":165},[37,181360,181362],{"id":181361},"_49-循环嵌套","4.9 循环嵌套",[14,181364,181365],{},"嵌套循环就是循环里面再写循环。",[151,181367,181369],{"className":53900,"code":181368,"language":53902,"meta":25,"style":25},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[49,181370,181371,181391,181411],{"__ignoreMap":25},[159,181372,181373,181375,181377,181379,181381,181383,181385,181387,181389],{"class":161,"line":162},[159,181374,26657],{"class":1142},[159,181376,1186],{"class":165},[159,181378,49566],{"class":1142},[159,181380,55961],{"class":1146},[159,181382,1159],{"class":165},[159,181384,4932],{"class":1146},[159,181386,1939],{"class":165},[159,181388,8866],{"class":1146},[159,181390,54307],{"class":165},[159,181392,181393,181395,181397,181399,181401,181403,181405,181407,181409],{"class":161,"line":176},[159,181394,11677],{"class":1142},[159,181396,33096],{"class":165},[159,181398,49566],{"class":1142},[159,181400,55961],{"class":1146},[159,181402,1159],{"class":165},[159,181404,4932],{"class":1146},[159,181406,1939],{"class":165},[159,181408,8866],{"class":1146},[159,181410,54307],{"class":165},[159,181412,181413,181415,181417,181419,181422,181424,181426,181428,181431,181433,181435,181437,181439],{"class":161,"line":203},[159,181414,55969],{"class":1146},[159,181416,1159],{"class":165},[159,181418,23931],{"class":1142},[159,181420,181421],{"class":192},"\"i=",[159,181423,24721],{"class":1146},[159,181425,1241],{"class":165},[159,181427,886],{"class":1146},[159,181429,181430],{"class":192},", j=",[159,181432,24721],{"class":1146},[159,181434,24316],{"class":165},[159,181436,886],{"class":1146},[159,181438,24115],{"class":192},[159,181440,1165],{"class":165},[14,181442,181443],{},"外层循环执行一次，内层循环执行完整一轮。",[37,181445,181447],{"id":181446},"_410-九九乘法表","4.10 九九乘法表",[151,181449,181451],{"className":53900,"code":181450,"language":53902,"meta":25,"style":25},"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",[49,181452,181453,181473,181496,181548],{"__ignoreMap":25},[159,181454,181455,181457,181459,181461,181463,181465,181467,181469,181471],{"class":161,"line":162},[159,181456,26657],{"class":1142},[159,181458,1186],{"class":165},[159,181460,49566],{"class":1142},[159,181462,55961],{"class":1146},[159,181464,1159],{"class":165},[159,181466,4932],{"class":1146},[159,181468,1939],{"class":165},[159,181470,1964],{"class":1146},[159,181472,54307],{"class":165},[159,181474,181475,181477,181479,181481,181483,181485,181487,181490,181492,181494],{"class":161,"line":176},[159,181476,11677],{"class":1142},[159,181478,33096],{"class":165},[159,181480,49566],{"class":1142},[159,181482,55961],{"class":1146},[159,181484,1159],{"class":165},[159,181486,4932],{"class":1146},[159,181488,181489],{"class":165},", i ",[159,181491,2704],{"class":1142},[159,181493,2707],{"class":1146},[159,181495,54307],{"class":165},[159,181497,181498,181500,181502,181504,181506,181508,181510,181512,181514,181516,181518,181520,181522,181524,181526,181528,181530,181532,181534,181536,181538,181540,181542,181544,181546],{"class":161,"line":203},[159,181499,55969],{"class":1146},[159,181501,1159],{"class":165},[159,181503,23931],{"class":1142},[159,181505,24115],{"class":192},[159,181507,24721],{"class":1146},[159,181509,24316],{"class":165},[159,181511,886],{"class":1146},[159,181513,4777],{"class":192},[159,181515,24721],{"class":1146},[159,181517,1241],{"class":165},[159,181519,886],{"class":1146},[159,181521,189],{"class":192},[159,181523,24721],{"class":1146},[159,181525,121448],{"class":165},[159,181527,4777],{"class":1142},[159,181529,27039],{"class":165},[159,181531,886],{"class":1146},[159,181533,24115],{"class":192},[159,181535,1939],{"class":165},[159,181537,69195],{"class":8765},[159,181539,189],{"class":1142},[159,181541,24115],{"class":192},[159,181543,24915],{"class":1146},[159,181545,24115],{"class":192},[159,181547,1165],{"class":165},[159,181549,181550,181552],{"class":161,"line":223},[159,181551,54819],{"class":1146},[159,181553,5158],{"class":165},[14,181555,181556],{},"关键点：",[134,181558,181559,181565,181571,181577],{},[106,181560,181561,181562,181564],{},"外层 ",[49,181563,1241],{}," 控制行。",[106,181566,181567,181568,181570],{},"内层 ",[49,181569,24316],{}," 控制列。",[106,181572,181573,181574,181576],{},"每行结束后用 ",[49,181575,167772],{}," 换行。",[106,181578,181579,181582],{},[49,181580,181581],{},"end=\"\\t\""," 让同一行的内容横向排列。",[37,181584,181586],{"id":181585},"_411-循环else","4.11 循环else",[14,181588,181589,181590,181592,181593,181595,181596,181598],{},"Python 的循环可以带 ",[49,181591,25364],{},"。当循环正常结束时执行 ",[49,181594,25364],{},"，如果被 ",[49,181597,25703],{}," 打断，则不执行。",[151,181600,181602],{"className":53900,"code":181601,"language":53902,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[49,181603,181604,181624,181636,181647,181651,181657],{"__ignoreMap":25},[159,181605,181606,181608,181610,181612,181614,181616,181618,181620,181622],{"class":161,"line":162},[159,181607,26657],{"class":1142},[159,181609,1186],{"class":165},[159,181611,49566],{"class":1142},[159,181613,55961],{"class":1146},[159,181615,1159],{"class":165},[159,181617,4932],{"class":1146},[159,181619,1939],{"class":165},[159,181621,7907],{"class":1146},[159,181623,54307],{"class":165},[159,181625,181626,181628,181630,181632,181634],{"class":161,"line":176},[159,181627,26732],{"class":1142},[159,181629,1186],{"class":165},[159,181631,26581],{"class":1142},[159,181633,7664],{"class":1146},[159,181635,27364],{"class":165},[159,181637,181638,181640,181642,181645],{"class":161,"line":203},[159,181639,55969],{"class":1146},[159,181641,1159],{"class":165},[159,181643,181644],{"class":192},"\"找到了\"",[159,181646,1165],{"class":165},[159,181648,181649],{"class":161,"line":223},[159,181650,55146],{"class":1142},[159,181652,181653,181655],{"class":161,"line":233},[159,181654,25364],{"class":1142},[159,181656,27364],{"class":165},[159,181658,181659,181661,181663,181666],{"class":161,"line":239},[159,181660,54819],{"class":1146},[159,181662,1159],{"class":165},[159,181664,181665],{"class":192},"\"没找到\"",[159,181667,1165],{"class":165},[14,181669,181670],{},"常用于搜索。",[151,181672,181674],{"className":53900,"code":181673,"language":53902,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[49,181675,181676,181697,181706,181710,181722,181733,181743,181747,181753],{"__ignoreMap":25},[159,181677,181678,181681,181683,181685,181687,181689,181691,181693,181695],{"class":161,"line":162},[159,181679,181680],{"class":165},"names ",[159,181682,189],{"class":1142},[159,181684,4608],{"class":165},[159,181686,171188],{"class":192},[159,181688,1939],{"class":165},[159,181690,172236],{"class":192},[159,181692,1939],{"class":165},[159,181694,181031],{"class":192},[159,181696,4634],{"class":165},[159,181698,181699,181701,181703],{"class":161,"line":176},[159,181700,132878],{"class":165},[159,181702,189],{"class":1142},[159,181704,181705],{"class":192}," \"小李\"\n",[159,181707,181708],{"class":161,"line":203},[159,181709,590],{"emptyLinePlaceholder":589},[159,181711,181712,181714,181717,181719],{"class":161,"line":223},[159,181713,26657],{"class":1142},[159,181715,181716],{"class":165}," name ",[159,181718,49566],{"class":1142},[159,181720,181721],{"class":165}," names:\n",[159,181723,181724,181726,181728,181730],{"class":161,"line":233},[159,181725,26732],{"class":1142},[159,181727,181716],{"class":165},[159,181729,26581],{"class":1142},[159,181731,181732],{"class":165}," target:\n",[159,181734,181735,181737,181739,181741],{"class":161,"line":239},[159,181736,55969],{"class":1146},[159,181738,1159],{"class":165},[159,181740,181644],{"class":192},[159,181742,1165],{"class":165},[159,181744,181745],{"class":161,"line":245},[159,181746,55146],{"class":1142},[159,181748,181749,181751],{"class":161,"line":251},[159,181750,25364],{"class":1142},[159,181752,27364],{"class":165},[159,181754,181755,181757,181759,181761],{"class":161,"line":261},[159,181756,54819],{"class":1146},[159,181758,1159],{"class":165},[159,181760,181665],{"class":192},[159,181762,1165],{"class":165},[37,181764,181766],{"id":181765},"_412-小案例登录重试","4.12 小案例：登录重试",[14,181768,144592],{},[134,181770,181771,181774,181777],{},[106,181772,181773],{},"用户最多输入 3 次密码。",[106,181775,181776],{},"密码正确则登录成功。",[106,181778,181779],{},"3 次都错误则锁定账号。",[14,181781,33610],{},[151,181783,181785],{"className":53900,"code":181784,"language":53902,"meta":25,"style":25},"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",[49,181786,181787,181797,181801,181817,181833,181837,181849,181860,181864,181870,181895,181901],{"__ignoreMap":25},[159,181788,181789,181792,181794],{"class":161,"line":162},[159,181790,181791],{"class":165},"password ",[159,181793,189],{"class":1142},[159,181795,181796],{"class":192}," \"123456\"\n",[159,181798,181799],{"class":161,"line":176},[159,181800,590],{"emptyLinePlaceholder":589},[159,181802,181803,181805,181807,181809,181811,181813,181815],{"class":161,"line":203},[159,181804,26657],{"class":1142},[159,181806,1186],{"class":165},[159,181808,49566],{"class":1142},[159,181810,55961],{"class":1146},[159,181812,1159],{"class":165},[159,181814,23949],{"class":1146},[159,181816,54307],{"class":165},[159,181818,181819,181822,181824,181826,181828,181831],{"class":161,"line":223},[159,181820,181821],{"class":165},"    user_password ",[159,181823,189],{"class":1142},[159,181825,7625],{"class":1146},[159,181827,1159],{"class":165},[159,181829,181830],{"class":192},"\"请输入密码:\"",[159,181832,1165],{"class":165},[159,181834,181835],{"class":161,"line":233},[159,181836,590],{"emptyLinePlaceholder":589},[159,181838,181839,181841,181844,181846],{"class":161,"line":239},[159,181840,26732],{"class":1142},[159,181842,181843],{"class":165}," user_password ",[159,181845,26581],{"class":1142},[159,181847,181848],{"class":165}," password:\n",[159,181850,181851,181853,181855,181858],{"class":161,"line":245},[159,181852,55969],{"class":1146},[159,181854,1159],{"class":165},[159,181856,181857],{"class":192},"\"登录成功\"",[159,181859,1165],{"class":165},[159,181861,181862],{"class":161,"line":251},[159,181863,55146],{"class":1142},[159,181865,181866,181868],{"class":161,"line":261},[159,181867,179322],{"class":1142},[159,181869,27364],{"class":165},[159,181871,181872,181874,181876,181878,181881,181884,181886,181888,181890,181893],{"class":161,"line":603},[159,181873,55969],{"class":1146},[159,181875,1159],{"class":165},[159,181877,23931],{"class":1142},[159,181879,181880],{"class":192},"\"密码错误，还剩",[159,181882,181883],{"class":1146},"{2",[159,181885,21708],{"class":1142},[159,181887,15383],{"class":165},[159,181889,886],{"class":1146},[159,181891,181892],{"class":192},"次机会\"",[159,181894,1165],{"class":165},[159,181896,181897,181899],{"class":161,"line":621},[159,181898,25364],{"class":1142},[159,181900,27364],{"class":165},[159,181902,181903,181905,181907,181910],{"class":161,"line":634},[159,181904,54819],{"class":1146},[159,181906,1159],{"class":165},[159,181908,181909],{"class":192},"\"账号已锁定\"",[159,181911,1165],{"class":165},[37,181913,181915],{"id":181914},"_413-小案例菜单程序","4.13 小案例：菜单程序",[151,181917,181919],{"className":53900,"code":181918,"language":53902,"meta":25,"style":25},"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",[49,181920,181921,181929,181940,181951,181962,181973,181984,181988,182003,182007,182019,182030,182042,182053,182065,182076,182088,182098,182102,182108],{"__ignoreMap":25},[159,181922,181923,181925,181927],{"class":161,"line":162},[159,181924,129963],{"class":1142},[159,181926,116592],{"class":1146},[159,181928,27364],{"class":165},[159,181930,181931,181933,181935,181938],{"class":161,"line":176},[159,181932,54819],{"class":1146},[159,181934,1159],{"class":165},[159,181936,181937],{"class":192},"\"====== 菜单 ======\"",[159,181939,1165],{"class":165},[159,181941,181942,181944,181946,181949],{"class":161,"line":203},[159,181943,54819],{"class":1146},[159,181945,1159],{"class":165},[159,181947,181948],{"class":192},"\"1. 查询余额\"",[159,181950,1165],{"class":165},[159,181952,181953,181955,181957,181960],{"class":161,"line":223},[159,181954,54819],{"class":1146},[159,181956,1159],{"class":165},[159,181958,181959],{"class":192},"\"2. 存款\"",[159,181961,1165],{"class":165},[159,181963,181964,181966,181968,181971],{"class":161,"line":233},[159,181965,54819],{"class":1146},[159,181967,1159],{"class":165},[159,181969,181970],{"class":192},"\"3. 取款\"",[159,181972,1165],{"class":165},[159,181974,181975,181977,181979,181982],{"class":161,"line":239},[159,181976,54819],{"class":1146},[159,181978,1159],{"class":165},[159,181980,181981],{"class":192},"\"0. 退出\"",[159,181983,1165],{"class":165},[159,181985,181986],{"class":161,"line":245},[159,181987,590],{"emptyLinePlaceholder":589},[159,181989,181990,181993,181995,181997,181999,182001],{"class":161,"line":251},[159,181991,181992],{"class":165},"    choice ",[159,181994,189],{"class":1142},[159,181996,7625],{"class":1146},[159,181998,1159],{"class":165},[159,182000,174373],{"class":192},[159,182002,1165],{"class":165},[159,182004,182005],{"class":161,"line":261},[159,182006,590],{"emptyLinePlaceholder":589},[159,182008,182009,182011,182013,182015,182017],{"class":161,"line":603},[159,182010,26732],{"class":1142},[159,182012,174386],{"class":165},[159,182014,26581],{"class":1142},[159,182016,174391],{"class":192},[159,182018,27364],{"class":165},[159,182020,182021,182023,182025,182028],{"class":161,"line":621},[159,182022,55969],{"class":1146},[159,182024,1159],{"class":165},[159,182026,182027],{"class":192},"\"余额为1000元\"",[159,182029,1165],{"class":165},[159,182031,182032,182034,182036,182038,182040],{"class":161,"line":634},[159,182033,62688],{"class":1142},[159,182035,174386],{"class":165},[159,182037,26581],{"class":1142},[159,182039,174410],{"class":192},[159,182041,27364],{"class":165},[159,182043,182044,182046,182048,182051],{"class":161,"line":640},[159,182045,55969],{"class":1146},[159,182047,1159],{"class":165},[159,182049,182050],{"class":192},"\"存款功能\"",[159,182052,1165],{"class":165},[159,182054,182055,182057,182059,182061,182063],{"class":161,"line":1075},[159,182056,62688],{"class":1142},[159,182058,174386],{"class":165},[159,182060,26581],{"class":1142},[159,182062,174428],{"class":192},[159,182064,27364],{"class":165},[159,182066,182067,182069,182071,182074],{"class":161,"line":1081},[159,182068,55969],{"class":1146},[159,182070,1159],{"class":165},[159,182072,182073],{"class":192},"\"取款功能\"",[159,182075,1165],{"class":165},[159,182077,182078,182080,182082,182084,182086],{"class":161,"line":1091},[159,182079,62688],{"class":1142},[159,182081,174386],{"class":165},[159,182083,26581],{"class":1142},[159,182085,174482],{"class":192},[159,182087,27364],{"class":165},[159,182089,182090,182092,182094,182096],{"class":161,"line":1100},[159,182091,55969],{"class":1146},[159,182093,1159],{"class":165},[159,182095,174493],{"class":192},[159,182097,1165],{"class":165},[159,182099,182100],{"class":161,"line":1123},[159,182101,55146],{"class":1142},[159,182103,182104,182106],{"class":161,"line":1132},[159,182105,179322],{"class":1142},[159,182107,27364],{"class":165},[159,182109,182110,182112,182114,182116],{"class":161,"line":1139},[159,182111,55969],{"class":1146},[159,182113,1159],{"class":165},[159,182115,174514],{"class":192},[159,182117,1165],{"class":165},[14,182119,182120,182121,182123,182124,51907],{},"菜单类程序通常使用 ",[49,182122,180822],{},"，用户选择退出时 ",[49,182125,25703],{},[37,182127,182129],{"id":182128},"_414-易错点","4.14 易错点",[134,182131,182132,182137,182143,182151,182157],{},[106,182133,182134,182136],{},[49,182135,129963],{}," 循环必须更新控制变量。",[106,182138,182139,182142],{},[49,182140,182141],{},"range(1, 10)"," 不包含 10。",[106,182144,182145,182147,182148,182150],{},[49,182146,25703],{}," 结束整个循环，",[49,182149,175972],{}," 只跳过本轮。",[106,182152,182153,182154,182156],{},"嵌套循环中，",[49,182155,25703],{}," 只跳出当前所在的一层循环。",[106,182158,182159],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[37,182161,182163],{"id":182162},"_415-本章练习","4.15 本章练习",[134,182165,182166,182169,182172,182175,182178],{},[106,182167,182168],{},"输出 1 到 100。",[106,182170,182171],{},"计算 1 到 100 的偶数和。",[106,182173,182174],{},"输出 100 以内能被 3 和 5 同时整除的数。",[106,182176,182177],{},"编写猜数字游戏，限制最多猜 7 次。",[106,182179,182180],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1468,182182,182183],{},"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":25,"searchDepth":176,"depth":176,"links":182185},[182186,182187,182188,182189,182190,182194,182195,182196,182197,182198,182199,182200,182201,182202,182203],{"id":180442,"depth":176,"text":180443},{"id":180472,"depth":176,"text":180473},{"id":180561,"depth":176,"text":180562},{"id":180655,"depth":176,"text":180656},{"id":180829,"depth":176,"text":180830,"children":182191},[182192,182193],{"id":180833,"depth":203,"text":180834},{"id":180897,"depth":203,"text":180898},{"id":180961,"depth":176,"text":180962},{"id":181056,"depth":176,"text":181057},{"id":181165,"depth":176,"text":181166},{"id":181361,"depth":176,"text":181362},{"id":181446,"depth":176,"text":181447},{"id":181585,"depth":176,"text":181586},{"id":181765,"depth":176,"text":181766},{"id":181914,"depth":176,"text":181915},{"id":182128,"depth":176,"text":182129},{"id":182162,"depth":176,"text":182163},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":180434,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":182210,"title":182211,"body":182212,"description":23809,"extension":23810,"meta":184217,"navigation":589,"path":184218,"seo":184219,"stem":184220,"__hash__":184221},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":182213,"toc":184197},[182214,182217,182221,182224,182227,182241,182244,182258,182262,182264,182283,182285,182332,182334,182348,182352,182426,182429,182433,182436,182495,182503,182506,182559,182562,182566,182571,182626,182634,182684,182688,182693,182701,182800,182806,182810,182815,182818,182829,182870,182883,182887,182890,182926,182929,182942,182945,183005,183009,183013,183016,183067,183071,183074,183121,183127,183193,183196,183200,183203,183319,183322,183326,183329,183435,183439,183442,183480,183483,183525,183528,183588,183591,183595,184059,184062,184066,184093,184099,184160,184164,184194],[10,182215,182211],{"id":182216},"_5-函数基础",[37,182218,182220],{"id":182219},"_51-为什么需要函数","5.1 为什么需要函数",[14,182222,182223],{},"函数用于封装一段可以重复使用的代码。",[14,182225,182226],{},"不使用函数的问题：",[134,182228,182229,182232,182235,182238],{},[106,182230,182231],{},"重复代码多。",[106,182233,182234],{},"修改逻辑时容易漏改。",[106,182236,182237],{},"主流程不清晰。",[106,182239,182240],{},"程序越写越长，难以维护。",[14,182242,182243],{},"使用函数后的好处：",[134,182245,182246,182249,182252,182255],{},[106,182247,182248],{},"提高复用性。",[106,182250,182251],{},"提高可读性。",[106,182253,182254],{},"便于调试。",[106,182256,182257],{},"便于分工。",[37,182259,182261],{"id":182260},"_52-函数定义","5.2 函数定义",[14,182263,28799],{},[151,182265,182267],{"className":53900,"code":182266,"language":53902,"meta":25,"style":25},"def 函数名():\n    函数体\n",[49,182268,182269,182278],{"__ignoreMap":25},[159,182270,182271,182273,182276],{"class":161,"line":162},[159,182272,55465],{"class":1142},[159,182274,182275],{"class":185}," 函数名",[159,182277,55471],{"class":165},[159,182279,182280],{"class":161,"line":176},[159,182281,182282],{"class":165},"    函数体\n",[14,182284,38698],{},[151,182286,182288],{"className":53900,"code":182287,"language":53902,"meta":25,"style":25},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[49,182289,182290,182299,182309,182319,182323,182327],{"__ignoreMap":25},[159,182291,182292,182294,182297],{"class":161,"line":162},[159,182293,55465],{"class":1142},[159,182295,182296],{"class":185}," say_hello",[159,182298,55471],{"class":165},[159,182300,182301,182303,182305,182307],{"class":161,"line":176},[159,182302,54819],{"class":1146},[159,182304,1159],{"class":165},[159,182306,29459],{"class":192},[159,182308,1165],{"class":165},[159,182310,182311,182313,182315,182317],{"class":161,"line":203},[159,182312,54819],{"class":1146},[159,182314,1159],{"class":165},[159,182316,167939],{"class":192},[159,182318,1165],{"class":165},[159,182320,182321],{"class":161,"line":223},[159,182322,590],{"emptyLinePlaceholder":589},[159,182324,182325],{"class":161,"line":233},[159,182326,590],{"emptyLinePlaceholder":589},[159,182328,182329],{"class":161,"line":239},[159,182330,182331],{"class":165},"say_hello()\n",[14,182333,32623],{},[134,182335,182336,182339,182342,182345],{},[106,182337,182338],{},"函数必须先定义，再调用。",[106,182340,182341],{},"函数名遵循变量命名规则。",[106,182343,182344],{},"函数体需要缩进。",[106,182346,182347],{},"函数不调用就不会执行。",[37,182349,182351],{"id":182350},"_53-函数调用","5.3 函数调用",[151,182353,182355],{"className":53900,"code":182354,"language":53902,"meta":25,"style":25},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[49,182356,182357,182366,182377,182388,182399,182409,182413,182417,182422],{"__ignoreMap":25},[159,182358,182359,182361,182364],{"class":161,"line":162},[159,182360,55465],{"class":1142},[159,182362,182363],{"class":185}," print_menu",[159,182365,55471],{"class":165},[159,182367,182368,182370,182372,182375],{"class":161,"line":176},[159,182369,54819],{"class":1146},[159,182371,1159],{"class":165},[159,182373,182374],{"class":192},"\"1. 查询\"",[159,182376,1165],{"class":165},[159,182378,182379,182381,182383,182386],{"class":161,"line":203},[159,182380,54819],{"class":1146},[159,182382,1159],{"class":165},[159,182384,182385],{"class":192},"\"2. 添加\"",[159,182387,1165],{"class":165},[159,182389,182390,182392,182394,182397],{"class":161,"line":223},[159,182391,54819],{"class":1146},[159,182393,1159],{"class":165},[159,182395,182396],{"class":192},"\"3. 删除\"",[159,182398,1165],{"class":165},[159,182400,182401,182403,182405,182407],{"class":161,"line":233},[159,182402,54819],{"class":1146},[159,182404,1159],{"class":165},[159,182406,181981],{"class":192},[159,182408,1165],{"class":165},[159,182410,182411],{"class":161,"line":239},[159,182412,590],{"emptyLinePlaceholder":589},[159,182414,182415],{"class":161,"line":245},[159,182416,590],{"emptyLinePlaceholder":589},[159,182418,182419],{"class":161,"line":251},[159,182420,182421],{"class":165},"print_menu()\n",[159,182423,182424],{"class":161,"line":261},[159,182425,182421],{"class":165},[14,182427,182428],{},"函数可以多次调用，每次调用都会执行函数体。",[37,182430,182432],{"id":182431},"_54-参数","5.4 参数",[14,182434,182435],{},"参数用于向函数传递数据。",[151,182437,182439],{"className":53900,"code":182438,"language":53902,"meta":25,"style":25},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[49,182440,182441,182450,182470,182474,182478,182487],{"__ignoreMap":25},[159,182442,182443,182445,182447],{"class":161,"line":162},[159,182444,55465],{"class":1142},[159,182446,182296],{"class":185},[159,182448,182449],{"class":165},"(name):\n",[159,182451,182452,182454,182456,182458,182460,182462,182464,182466,182468],{"class":161,"line":176},[159,182453,54819],{"class":1146},[159,182455,1159],{"class":165},[159,182457,23931],{"class":1142},[159,182459,178354],{"class":192},[159,182461,24721],{"class":1146},[159,182463,101110],{"class":165},[159,182465,886],{"class":1146},[159,182467,24115],{"class":192},[159,182469,1165],{"class":165},[159,182471,182472],{"class":161,"line":203},[159,182473,590],{"emptyLinePlaceholder":589},[159,182475,182476],{"class":161,"line":223},[159,182477,590],{"emptyLinePlaceholder":589},[159,182479,182480,182483,182485],{"class":161,"line":233},[159,182481,182482],{"class":165},"say_hello(",[159,182484,171188],{"class":192},[159,182486,1165],{"class":165},[159,182488,182489,182491,182493],{"class":161,"line":239},[159,182490,182482],{"class":165},[159,182492,172236],{"class":192},[159,182494,1165],{"class":165},[14,182496,182497,182499,182500,182502],{},[49,182498,101110],{}," 是形参，",[49,182501,171188],{}," 是实参。",[14,182504,182505],{},"多个参数：",[151,182507,182509],{"className":53900,"code":182508,"language":53902,"meta":25,"style":25},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[49,182510,182511,182519,182532,182538,182542,182546],{"__ignoreMap":25},[159,182512,182513,182515,182517],{"class":161,"line":162},[159,182514,55465],{"class":1142},[159,182516,28826],{"class":185},[159,182518,172393],{"class":165},[159,182520,182521,182524,182526,182528,182530],{"class":161,"line":176},[159,182522,182523],{"class":165},"    result ",[159,182525,189],{"class":1142},[159,182527,34443],{"class":165},[159,182529,2704],{"class":1142},[159,182531,172404],{"class":165},[159,182533,182534,182536],{"class":161,"line":203},[159,182535,54819],{"class":1146},[159,182537,23721],{"class":165},[159,182539,182540],{"class":161,"line":223},[159,182541,590],{"emptyLinePlaceholder":589},[159,182543,182544],{"class":161,"line":233},[159,182545,590],{"emptyLinePlaceholder":589},[159,182547,182548,182551,182553,182555,182557],{"class":161,"line":239},[159,182549,182550],{"class":165},"add(",[159,182552,1964],{"class":1146},[159,182554,1939],{"class":165},[159,182556,1739],{"class":1146},[159,182558,1165],{"class":165},[14,182560,182561],{},"调用时参数数量必须匹配。",[37,182563,182565],{"id":182564},"_55-返回值","5.5 返回值",[14,182567,182568,182570],{},[49,182569,40574],{}," 用于把函数内部的结果返回给调用者。",[151,182572,182574],{"className":53900,"code":182573,"language":53902,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[49,182575,182576,182584,182594,182598,182602,182620],{"__ignoreMap":25},[159,182577,182578,182580,182582],{"class":161,"line":162},[159,182579,55465],{"class":1142},[159,182581,28826],{"class":185},[159,182583,172393],{"class":165},[159,182585,182586,182588,182590,182592],{"class":161,"line":176},[159,182587,27711],{"class":1142},[159,182589,34443],{"class":165},[159,182591,2704],{"class":1142},[159,182593,172404],{"class":165},[159,182595,182596],{"class":161,"line":203},[159,182597,590],{"emptyLinePlaceholder":589},[159,182599,182600],{"class":161,"line":223},[159,182601,590],{"emptyLinePlaceholder":589},[159,182603,182604,182607,182609,182612,182614,182616,182618],{"class":161,"line":233},[159,182605,182606],{"class":165},"result ",[159,182608,189],{"class":1142},[159,182610,182611],{"class":165}," add(",[159,182613,1964],{"class":1146},[159,182615,1939],{"class":165},[159,182617,1739],{"class":1146},[159,182619,1165],{"class":165},[159,182621,182622,182624],{"class":161,"line":239},[159,182623,53937],{"class":1146},[159,182625,23721],{"class":165},[14,182627,182628,182629,182631,182632,51907],{},"如果函数没有写 ",[49,182630,40574],{},"，默认返回 ",[49,182633,116986],{},[151,182635,182637],{"className":53900,"code":182636,"language":53902,"meta":25,"style":25},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[49,182638,182639,182647,182657,182661,182665,182674],{"__ignoreMap":25},[159,182640,182641,182643,182645],{"class":161,"line":162},[159,182642,55465],{"class":1142},[159,182644,182296],{"class":185},[159,182646,55471],{"class":165},[159,182648,182649,182651,182653,182655],{"class":161,"line":176},[159,182650,54819],{"class":1146},[159,182652,1159],{"class":165},[159,182654,29459],{"class":192},[159,182656,1165],{"class":165},[159,182658,182659],{"class":161,"line":203},[159,182660,590],{"emptyLinePlaceholder":589},[159,182662,182663],{"class":161,"line":223},[159,182664,590],{"emptyLinePlaceholder":589},[159,182666,182667,182669,182671],{"class":161,"line":233},[159,182668,182606],{"class":165},[159,182670,189],{"class":1142},[159,182672,182673],{"class":165}," say_hello()\n",[159,182675,182676,182678,182681],{"class":161,"line":239},[159,182677,53937],{"class":1146},[159,182679,182680],{"class":165},"(result)  ",[159,182682,182683],{"class":1135},"# None\n",[37,182685,182687],{"id":182686},"_56-return的作用","5.6 return的作用",[14,182689,182690,182692],{},[49,182691,40574],{}," 有两个作用：",[134,182694,182695,182698],{},[106,182696,182697],{},"返回结果。",[106,182699,182700],{},"结束函数。",[151,182702,182704],{"className":53900,"code":182703,"language":53902,"meta":25,"style":25},"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",[49,182705,182706,182716,182728,182735,182739,182751,182758,182762,182769,182773,182777,182788],{"__ignoreMap":25},[159,182707,182708,182710,182713],{"class":161,"line":162},[159,182709,55465],{"class":1142},[159,182711,182712],{"class":185}," check_age",[159,182714,182715],{"class":165},"(age):\n",[159,182717,182718,182720,182722,182724,182726],{"class":161,"line":176},[159,182719,26732],{"class":1142},[159,182721,39268],{"class":165},[159,182723,166],{"class":1142},[159,182725,1259],{"class":1146},[159,182727,27364],{"class":165},[159,182729,182730,182732],{"class":161,"line":203},[159,182731,21176],{"class":1142},[159,182733,182734],{"class":192}," \"年龄不合法\"\n",[159,182736,182737],{"class":161,"line":223},[159,182738,590],{"emptyLinePlaceholder":589},[159,182740,182741,182743,182745,182747,182749],{"class":161,"line":233},[159,182742,26732],{"class":1142},[159,182744,39268],{"class":165},[159,182746,3822],{"class":1142},[159,182748,177585],{"class":1146},[159,182750,27364],{"class":165},[159,182752,182753,182755],{"class":161,"line":239},[159,182754,21176],{"class":1142},[159,182756,182757],{"class":192}," \"成年人\"\n",[159,182759,182760],{"class":161,"line":245},[159,182761,590],{"emptyLinePlaceholder":589},[159,182763,182764,182766],{"class":161,"line":251},[159,182765,27711],{"class":1142},[159,182767,182768],{"class":192}," \"未成年人\"\n",[159,182770,182771],{"class":161,"line":261},[159,182772,590],{"emptyLinePlaceholder":589},[159,182774,182775],{"class":161,"line":603},[159,182776,590],{"emptyLinePlaceholder":589},[159,182778,182779,182781,182784,182786],{"class":161,"line":621},[159,182780,53937],{"class":1146},[159,182782,182783],{"class":165},"(check_age(",[159,182785,1739],{"class":1146},[159,182787,18787],{"class":165},[159,182789,182790,182792,182794,182796,182798],{"class":161,"line":634},[159,182791,53937],{"class":1146},[159,182793,182783],{"class":165},[159,182795,24376],{"class":1142},[159,182797,4932],{"class":1146},[159,182799,18787],{"class":165},[14,182801,182802,182803,182805],{},"函数执行到 ",[49,182804,40574],{}," 后，后面的代码不会继续执行。",[37,182807,182809],{"id":182808},"_57-none","5.7 None",[14,182811,182812,182814],{},[49,182813,116986],{}," 表示空值或没有结果。",[14,182816,182817],{},"常见使用场景：",[134,182819,182820,182823,182826],{},[106,182821,182822],{},"函数没有返回值。",[106,182824,182825],{},"变量暂时没有具体值。",[106,182827,182828],{},"表示查询不到结果。",[151,182830,182832],{"className":53900,"code":182831,"language":53902,"meta":25,"style":25},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[49,182833,182834,182842,182846,182859],{"__ignoreMap":25},[159,182835,182836,182838,182840],{"class":161,"line":162},[159,182837,182606],{"class":165},[159,182839,189],{"class":1142},[159,182841,173472],{"class":1146},[159,182843,182844],{"class":161,"line":176},[159,182845,590],{"emptyLinePlaceholder":589},[159,182847,182848,182850,182853,182855,182857],{"class":161,"line":203},[159,182849,18445],{"class":1142},[159,182851,182852],{"class":165}," result ",[159,182854,62322],{"class":1142},[159,182856,62328],{"class":1146},[159,182858,27364],{"class":165},[159,182860,182861,182863,182865,182868],{"class":161,"line":223},[159,182862,54819],{"class":1146},[159,182864,1159],{"class":165},[159,182866,182867],{"class":192},"\"没有数据\"",[159,182869,1165],{"class":165},[14,182871,182872,182873,182875,182876,182879,182880,51907],{},"判断 ",[49,182874,116986],{}," 推荐使用 ",[49,182877,182878],{},"is None","，不要写成 ",[49,182881,182882],{},"== None",[37,182884,182886],{"id":182885},"_58-函数文档字符串","5.8 函数文档字符串",[14,182888,182889],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[151,182891,182893],{"className":53900,"code":182892,"language":53902,"meta":25,"style":25},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[49,182894,182895,182905,182910],{"__ignoreMap":25},[159,182896,182897,182899,182902],{"class":161,"line":162},[159,182898,55465],{"class":1142},[159,182900,182901],{"class":185}," calculate_bmi",[159,182903,182904],{"class":165},"(weight, height):\n",[159,182906,182907],{"class":161,"line":176},[159,182908,182909],{"class":192},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[159,182911,182912,182914,182917,182919,182922,182924],{"class":161,"line":203},[159,182913,27711],{"class":1142},[159,182915,182916],{"class":165}," weight ",[159,182918,13083],{"class":1142},[159,182920,182921],{"class":165}," height ",[159,182923,34236],{"class":1142},[159,182925,71116],{"class":1146},[14,182927,182928],{},"查看说明：",[151,182930,182932],{"className":53900,"code":182931,"language":53902,"meta":25,"style":25},"help(calculate_bmi)\n",[49,182933,182934],{"__ignoreMap":25},[159,182935,182936,182939],{"class":161,"line":162},[159,182937,182938],{"class":1146},"help",[159,182940,182941],{"class":165},"(calculate_bmi)\n",[14,182943,182944],{},"较完整的写法：",[151,182946,182948],{"className":53900,"code":182947,"language":53902,"meta":25,"style":25},"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",[49,182949,182950,182958,182963,182968,182972,182977,182982,182987,182991],{"__ignoreMap":25},[159,182951,182952,182954,182956],{"class":161,"line":162},[159,182953,55465],{"class":1142},[159,182955,182901],{"class":185},[159,182957,182904],{"class":165},[159,182959,182960],{"class":161,"line":176},[159,182961,182962],{"class":192},"    \"\"\"\n",[159,182964,182965],{"class":161,"line":203},[159,182966,182967],{"class":192},"    计算BMI。\n",[159,182969,182970],{"class":161,"line":223},[159,182971,590],{"emptyLinePlaceholder":589},[159,182973,182974],{"class":161,"line":233},[159,182975,182976],{"class":192},"    :param weight: 体重，单位kg\n",[159,182978,182979],{"class":161,"line":239},[159,182980,182981],{"class":192},"    :param height: 身高，单位m\n",[159,182983,182984],{"class":161,"line":245},[159,182985,182986],{"class":192},"    :return: BMI数值\n",[159,182988,182989],{"class":161,"line":251},[159,182990,182962],{"class":192},[159,182992,182993,182995,182997,182999,183001,183003],{"class":161,"line":261},[159,182994,27711],{"class":1142},[159,182996,182916],{"class":165},[159,182998,13083],{"class":1142},[159,183000,182921],{"class":165},[159,183002,34236],{"class":1142},[159,183004,71116],{"class":1146},[37,183006,183008],{"id":183007},"_59-变量作用域","5.9 变量作用域",[42,183010,183012],{"id":183011},"_591-局部变量","5.9.1 局部变量",[14,183014,183015],{},"在函数内部定义的变量，只能在函数内部使用。",[151,183017,183019],{"className":53900,"code":183018,"language":53902,"meta":25,"style":25},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[49,183020,183021,183030,183038,183044,183048,183052,183057],{"__ignoreMap":25},[159,183022,183023,183025,183028],{"class":161,"line":162},[159,183024,55465],{"class":1142},[159,183026,183027],{"class":185}," test",[159,183029,55471],{"class":165},[159,183031,183032,183034,183036],{"class":161,"line":176},[159,183033,68987],{"class":165},[159,183035,189],{"class":1142},[159,183037,5348],{"class":1146},[159,183039,183040,183042],{"class":161,"line":203},[159,183041,54819],{"class":1146},[159,183043,5169],{"class":165},[159,183045,183046],{"class":161,"line":223},[159,183047,590],{"emptyLinePlaceholder":589},[159,183049,183050],{"class":161,"line":233},[159,183051,590],{"emptyLinePlaceholder":589},[159,183053,183054],{"class":161,"line":239},[159,183055,183056],{"class":165},"test()\n",[159,183058,183059,183061,183064],{"class":161,"line":245},[159,183060,53937],{"class":1146},[159,183062,183063],{"class":165},"(num)  ",[159,183065,183066],{"class":1135},"# 报错\n",[42,183068,183070],{"id":183069},"_592-全局变量","5.9.2 全局变量",[14,183072,183073],{},"在函数外部定义的变量，可以在函数内部读取。",[151,183075,183077],{"className":53900,"code":183076,"language":53902,"meta":25,"style":25},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[49,183078,183079,183087,183091,183095,183103,183109,183113,183117],{"__ignoreMap":25},[159,183080,183081,183083,183085],{"class":161,"line":162},[159,183082,167836],{"class":165},[159,183084,189],{"class":1142},[159,183086,170653],{"class":192},[159,183088,183089],{"class":161,"line":176},[159,183090,590],{"emptyLinePlaceholder":589},[159,183092,183093],{"class":161,"line":203},[159,183094,590],{"emptyLinePlaceholder":589},[159,183096,183097,183099,183101],{"class":161,"line":223},[159,183098,55465],{"class":1142},[159,183100,182296],{"class":185},[159,183102,55471],{"class":165},[159,183104,183105,183107],{"class":161,"line":233},[159,183106,54819],{"class":1146},[159,183108,171960],{"class":165},[159,183110,183111],{"class":161,"line":239},[159,183112,590],{"emptyLinePlaceholder":589},[159,183114,183115],{"class":161,"line":245},[159,183116,590],{"emptyLinePlaceholder":589},[159,183118,183119],{"class":161,"line":251},[159,183120,182331],{"class":165},[14,183122,183123,183124,51907],{},"如果要在函数内部修改全局变量，需要 ",[49,183125,183126],{},"global",[151,183128,183130],{"className":53900,"code":183129,"language":53902,"meta":25,"style":25},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[49,183131,183132,183140,183144,183148,183157,183165,183173,183177,183181,183186],{"__ignoreMap":25},[159,183133,183134,183136,183138],{"class":161,"line":162},[159,183135,167991],{"class":165},[159,183137,189],{"class":1142},[159,183139,3785],{"class":1146},[159,183141,183142],{"class":161,"line":176},[159,183143,590],{"emptyLinePlaceholder":589},[159,183145,183146],{"class":161,"line":203},[159,183147,590],{"emptyLinePlaceholder":589},[159,183149,183150,183152,183155],{"class":161,"line":223},[159,183151,55465],{"class":1142},[159,183153,183154],{"class":185}," add_count",[159,183156,55471],{"class":165},[159,183158,183159,183162],{"class":161,"line":233},[159,183160,183161],{"class":1142},"    global",[159,183163,183164],{"class":165}," count\n",[159,183166,183167,183169,183171],{"class":161,"line":239},[159,183168,180733],{"class":165},[159,183170,33073],{"class":1142},[159,183172,2570],{"class":1146},[159,183174,183175],{"class":161,"line":245},[159,183176,590],{"emptyLinePlaceholder":589},[159,183178,183179],{"class":161,"line":251},[159,183180,590],{"emptyLinePlaceholder":589},[159,183182,183183],{"class":161,"line":261},[159,183184,183185],{"class":165},"add_count()\n",[159,183187,183188,183190],{"class":161,"line":603},[159,183189,53937],{"class":1146},[159,183191,183192],{"class":165},"(count)\n",[14,183194,183195],{},"不建议大量使用全局变量，项目变大后很难维护。",[37,183197,183199],{"id":183198},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,183201,183202],{},"一个函数中可以调用另一个函数。",[151,183204,183206],{"className":53900,"code":183205,"language":53902,"meta":25,"style":25},"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",[49,183207,183208,183217,183231,183235,183239,183248,183253,183273,183294,183298,183302,183306],{"__ignoreMap":25},[159,183209,183210,183212,183215],{"class":161,"line":162},[159,183211,55465],{"class":1142},[159,183213,183214],{"class":185}," print_line",[159,183216,55471],{"class":165},[159,183218,183219,183221,183223,183225,183227,183229],{"class":161,"line":176},[159,183220,54819],{"class":1146},[159,183222,1159],{"class":165},[159,183224,56001],{"class":192},[159,183226,30131],{"class":1142},[159,183228,99965],{"class":1146},[159,183230,1165],{"class":165},[159,183232,183233],{"class":161,"line":203},[159,183234,590],{"emptyLinePlaceholder":589},[159,183236,183237],{"class":161,"line":223},[159,183238,590],{"emptyLinePlaceholder":589},[159,183240,183241,183243,183246],{"class":161,"line":233},[159,183242,55465],{"class":1142},[159,183244,183245],{"class":185}," print_info",[159,183247,170675],{"class":165},[159,183249,183250],{"class":161,"line":239},[159,183251,183252],{"class":165},"    print_line()\n",[159,183254,183255,183257,183259,183261,183263,183265,183267,183269,183271],{"class":161,"line":245},[159,183256,54819],{"class":1146},[159,183258,1159],{"class":165},[159,183260,23931],{"class":1142},[159,183262,177982],{"class":192},[159,183264,24721],{"class":1146},[159,183266,101110],{"class":165},[159,183268,886],{"class":1146},[159,183270,24115],{"class":192},[159,183272,1165],{"class":165},[159,183274,183275,183277,183279,183281,183284,183286,183288,183290,183292],{"class":161,"line":251},[159,183276,54819],{"class":1146},[159,183278,1159],{"class":165},[159,183280,23931],{"class":1142},[159,183282,183283],{"class":192},"\"年龄:",[159,183285,24721],{"class":1146},[159,183287,17307],{"class":165},[159,183289,886],{"class":1146},[159,183291,24115],{"class":192},[159,183293,1165],{"class":165},[159,183295,183296],{"class":161,"line":261},[159,183297,183252],{"class":165},[159,183299,183300],{"class":161,"line":603},[159,183301,590],{"emptyLinePlaceholder":589},[159,183303,183304],{"class":161,"line":621},[159,183305,590],{"emptyLinePlaceholder":589},[159,183307,183308,183311,183313,183315,183317],{"class":161,"line":634},[159,183309,183310],{"class":165},"print_info(",[159,183312,171188],{"class":192},[159,183314,1939],{"class":165},[159,183316,18723],{"class":1146},[159,183318,1165],{"class":165},[14,183320,183321],{},"这种方式可以把小功能组合成大功能。",[37,183323,183325],{"id":183324},"_511-参数检查","5.11 参数检查",[14,183327,183328],{},"函数内部可以检查参数是否合法。",[151,183330,183332],{"className":53900,"code":183331,"language":53902,"meta":25,"style":25},"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",[49,183333,183334,183343,183355,183361,183371,183375,183379,183396,183400,183412,183423,183429],{"__ignoreMap":25},[159,183335,183336,183338,183341],{"class":161,"line":162},[159,183337,55465],{"class":1142},[159,183339,183340],{"class":185}," divide",[159,183342,172393],{"class":165},[159,183344,183345,183347,183349,183351,183353],{"class":161,"line":176},[159,183346,26732],{"class":1142},[159,183348,34456],{"class":165},[159,183350,26581],{"class":1142},[159,183352,1259],{"class":1146},[159,183354,27364],{"class":165},[159,183356,183357,183359],{"class":161,"line":203},[159,183358,21176],{"class":1142},[159,183360,173472],{"class":1146},[159,183362,183363,183365,183367,183369],{"class":161,"line":223},[159,183364,27711],{"class":1142},[159,183366,34443],{"class":165},[159,183368,13083],{"class":1142},[159,183370,172404],{"class":165},[159,183372,183373],{"class":161,"line":233},[159,183374,590],{"emptyLinePlaceholder":589},[159,183376,183377],{"class":161,"line":239},[159,183378,590],{"emptyLinePlaceholder":589},[159,183380,183381,183383,183385,183388,183390,183392,183394],{"class":161,"line":245},[159,183382,182606],{"class":165},[159,183384,189],{"class":1142},[159,183386,183387],{"class":165}," divide(",[159,183389,1964],{"class":1146},[159,183391,1939],{"class":165},[159,183393,1489],{"class":1146},[159,183395,1165],{"class":165},[159,183397,183398],{"class":161,"line":251},[159,183399,590],{"emptyLinePlaceholder":589},[159,183401,183402,183404,183406,183408,183410],{"class":161,"line":261},[159,183403,18445],{"class":1142},[159,183405,182852],{"class":165},[159,183407,62322],{"class":1142},[159,183409,62328],{"class":1146},[159,183411,27364],{"class":165},[159,183413,183414,183416,183418,183421],{"class":161,"line":603},[159,183415,54819],{"class":1146},[159,183417,1159],{"class":165},[159,183419,183420],{"class":192},"\"除数不能为0\"",[159,183422,1165],{"class":165},[159,183424,183425,183427],{"class":161,"line":621},[159,183426,25364],{"class":1142},[159,183428,27364],{"class":165},[159,183430,183431,183433],{"class":161,"line":634},[159,183432,54819],{"class":1146},[159,183434,23721],{"class":165},[37,183436,183438],{"id":183437},"_512-类型提示","5.12 类型提示",[14,183440,183441],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[151,183443,183445],{"className":53900,"code":183444,"language":53902,"meta":25,"style":25},"def add(a: int, b: int) -> int:\n    return a + b\n",[49,183446,183447,183470],{"__ignoreMap":25},[159,183448,183449,183451,183453,183456,183458,183461,183463,183466,183468],{"class":161,"line":162},[159,183450,55465],{"class":1142},[159,183452,28826],{"class":185},[159,183454,183455],{"class":165},"(a: ",[159,183457,23886],{"class":1146},[159,183459,183460],{"class":165},", b: ",[159,183462,23886],{"class":1146},[159,183464,183465],{"class":165},") -> ",[159,183467,23886],{"class":1146},[159,183469,27364],{"class":165},[159,183471,183472,183474,183476,183478],{"class":161,"line":176},[159,183473,27711],{"class":1142},[159,183475,34443],{"class":165},[159,183477,2704],{"class":1142},[159,183479,172404],{"class":165},[14,183481,183482],{},"字符串参数：",[151,183484,183486],{"className":53900,"code":183485,"language":53902,"meta":25,"style":25},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[49,183487,183488,183505],{"__ignoreMap":25},[159,183489,183490,183492,183494,183497,183499,183501,183503],{"class":161,"line":162},[159,183491,55465],{"class":1142},[159,183493,182296],{"class":185},[159,183495,183496],{"class":165},"(name: ",[159,183498,24983],{"class":1146},[159,183500,183465],{"class":165},[159,183502,116986],{"class":1146},[159,183504,27364],{"class":165},[159,183506,183507,183509,183511,183513,183515,183517,183519,183521,183523],{"class":161,"line":176},[159,183508,54819],{"class":1146},[159,183510,1159],{"class":165},[159,183512,23931],{"class":1142},[159,183514,178354],{"class":192},[159,183516,24721],{"class":1146},[159,183518,101110],{"class":165},[159,183520,886],{"class":1146},[159,183522,24115],{"class":192},[159,183524,1165],{"class":165},[14,183526,183527],{},"列表参数：",[151,183529,183531],{"className":53900,"code":183530,"language":53902,"meta":25,"style":25},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[49,183532,183533,183552,183560,183572,183581],{"__ignoreMap":25},[159,183534,183535,183537,183540,183543,183545,183548,183550],{"class":161,"line":162},[159,183536,55465],{"class":1142},[159,183538,183539],{"class":185}," get_total",[159,183541,183542],{"class":165},"(numbers: list[",[159,183544,23886],{"class":1146},[159,183546,183547],{"class":165},"]) -> ",[159,183549,23886],{"class":1146},[159,183551,27364],{"class":165},[159,183553,183554,183556,183558],{"class":161,"line":176},[159,183555,180607],{"class":165},[159,183557,189],{"class":1142},[159,183559,3785],{"class":1146},[159,183561,183562,183564,183567,183569],{"class":161,"line":203},[159,183563,11677],{"class":1142},[159,183565,183566],{"class":165}," number ",[159,183568,49566],{"class":1142},[159,183570,183571],{"class":165}," numbers:\n",[159,183573,183574,183576,183578],{"class":161,"line":223},[159,183575,181282],{"class":165},[159,183577,33073],{"class":1142},[159,183579,183580],{"class":165}," number\n",[159,183582,183583,183585],{"class":161,"line":233},[159,183584,27711],{"class":1142},[159,183586,183587],{"class":165}," total\n",[14,183589,183590],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[37,183592,183594],{"id":183593},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[151,183596,183598],{"className":53900,"code":183597,"language":53902,"meta":25,"style":25},"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",[49,183599,183600,183610,183614,183618,183626,183637,183647,183657,183667,183677,183681,183685,183694,183716,183720,183724,183733,183739,183759,183771,183782,183786,183795,183806,183811,183815,183819,183828,183834,183853,183865,183875,183879,183890,183900,183904,183912,183923,183927,183931,183935,183943,183948,183962,183966,183978,183983,183995,184000,184012,184017,184029,184039,184043,184049],{"__ignoreMap":25},[159,183601,183602,183605,183607],{"class":161,"line":162},[159,183603,183604],{"class":165},"balance ",[159,183606,189],{"class":1142},[159,183608,183609],{"class":1146}," 1000\n",[159,183611,183612],{"class":161,"line":176},[159,183613,590],{"emptyLinePlaceholder":589},[159,183615,183616],{"class":161,"line":203},[159,183617,590],{"emptyLinePlaceholder":589},[159,183619,183620,183622,183624],{"class":161,"line":223},[159,183621,55465],{"class":1142},[159,183623,173333],{"class":185},[159,183625,55471],{"class":165},[159,183627,183628,183630,183632,183635],{"class":161,"line":233},[159,183629,54819],{"class":1146},[159,183631,1159],{"class":165},[159,183633,183634],{"class":192},"\"====== ATM ======\"",[159,183636,1165],{"class":165},[159,183638,183639,183641,183643,183645],{"class":161,"line":239},[159,183640,54819],{"class":1146},[159,183642,1159],{"class":165},[159,183644,181948],{"class":192},[159,183646,1165],{"class":165},[159,183648,183649,183651,183653,183655],{"class":161,"line":245},[159,183650,54819],{"class":1146},[159,183652,1159],{"class":165},[159,183654,181959],{"class":192},[159,183656,1165],{"class":165},[159,183658,183659,183661,183663,183665],{"class":161,"line":251},[159,183660,54819],{"class":1146},[159,183662,1159],{"class":165},[159,183664,181970],{"class":192},[159,183666,1165],{"class":165},[159,183668,183669,183671,183673,183675],{"class":161,"line":261},[159,183670,54819],{"class":1146},[159,183672,1159],{"class":165},[159,183674,181981],{"class":192},[159,183676,1165],{"class":165},[159,183678,183679],{"class":161,"line":603},[159,183680,590],{"emptyLinePlaceholder":589},[159,183682,183683],{"class":161,"line":621},[159,183684,590],{"emptyLinePlaceholder":589},[159,183686,183687,183689,183692],{"class":161,"line":634},[159,183688,55465],{"class":1142},[159,183690,183691],{"class":185}," show_balance",[159,183693,55471],{"class":165},[159,183695,183696,183698,183700,183702,183705,183707,183710,183712,183714],{"class":161,"line":640},[159,183697,54819],{"class":1146},[159,183699,1159],{"class":165},[159,183701,23931],{"class":1142},[159,183703,183704],{"class":192},"\"当前余额:",[159,183706,24721],{"class":1146},[159,183708,183709],{"class":165},"balance",[159,183711,886],{"class":1146},[159,183713,178312],{"class":192},[159,183715,1165],{"class":165},[159,183717,183718],{"class":161,"line":1075},[159,183719,590],{"emptyLinePlaceholder":589},[159,183721,183722],{"class":161,"line":1081},[159,183723,590],{"emptyLinePlaceholder":589},[159,183725,183726,183728,183731],{"class":161,"line":1091},[159,183727,55465],{"class":1142},[159,183729,183730],{"class":185}," save_money",[159,183732,55471],{"class":165},[159,183734,183735,183737],{"class":161,"line":1100},[159,183736,183161],{"class":1142},[159,183738,171399],{"class":165},[159,183740,183741,183744,183746,183748,183750,183752,183754,183757],{"class":161,"line":1123},[159,183742,183743],{"class":165},"    money ",[159,183745,189],{"class":1142},[159,183747,131097],{"class":1146},[159,183749,1159],{"class":165},[159,183751,536],{"class":1146},[159,183753,1159],{"class":165},[159,183755,183756],{"class":192},"\"请输入存款金额:\"",[159,183758,18787],{"class":165},[159,183760,183761,183763,183765,183767,183769],{"class":161,"line":1132},[159,183762,26732],{"class":1142},[159,183764,171442],{"class":165},[159,183766,25263],{"class":1142},[159,183768,1259],{"class":1146},[159,183770,27364],{"class":165},[159,183772,183773,183775,183777,183780],{"class":161,"line":1139},[159,183774,55969],{"class":1146},[159,183776,1159],{"class":165},[159,183778,183779],{"class":192},"\"金额必须大于0\"",[159,183781,1165],{"class":165},[159,183783,183784],{"class":161,"line":1168},[159,183785,173661],{"class":1142},[159,183787,183788,183791,183793],{"class":161,"line":1174},[159,183789,183790],{"class":165},"    balance ",[159,183792,33073],{"class":1142},[159,183794,171475],{"class":165},[159,183796,183797,183799,183801,183804],{"class":161,"line":1180},[159,183798,54819],{"class":1146},[159,183800,1159],{"class":165},[159,183802,183803],{"class":192},"\"存款成功\"",[159,183805,1165],{"class":165},[159,183807,183808],{"class":161,"line":1194},[159,183809,183810],{"class":165},"    show_balance()\n",[159,183812,183813],{"class":161,"line":1200},[159,183814,590],{"emptyLinePlaceholder":589},[159,183816,183817],{"class":161,"line":1221},[159,183818,590],{"emptyLinePlaceholder":589},[159,183820,183821,183823,183826],{"class":161,"line":1230},[159,183822,55465],{"class":1142},[159,183824,183825],{"class":185}," withdraw_money",[159,183827,55471],{"class":165},[159,183829,183830,183832],{"class":161,"line":1247},[159,183831,183161],{"class":1142},[159,183833,171399],{"class":165},[159,183835,183836,183838,183840,183842,183844,183846,183848,183851],{"class":161,"line":1265},[159,183837,183743],{"class":165},[159,183839,189],{"class":1142},[159,183841,131097],{"class":1146},[159,183843,1159],{"class":165},[159,183845,536],{"class":1146},[159,183847,1159],{"class":165},[159,183849,183850],{"class":192},"\"请输入取款金额:\"",[159,183852,18787],{"class":165},[159,183854,183855,183857,183859,183861,183863],{"class":161,"line":1277},[159,183856,26732],{"class":1142},[159,183858,171442],{"class":165},[159,183860,25263],{"class":1142},[159,183862,1259],{"class":1146},[159,183864,27364],{"class":165},[159,183866,183867,183869,183871,183873],{"class":161,"line":1283},[159,183868,55969],{"class":1146},[159,183870,1159],{"class":165},[159,183872,183779],{"class":192},[159,183874,1165],{"class":165},[159,183876,183877],{"class":161,"line":1294},[159,183878,173661],{"class":1142},[159,183880,183881,183883,183885,183887],{"class":161,"line":1305},[159,183882,26732],{"class":1142},[159,183884,171442],{"class":165},[159,183886,6760],{"class":1142},[159,183888,183889],{"class":165}," balance:\n",[159,183891,183892,183894,183896,183898],{"class":161,"line":1311},[159,183893,55969],{"class":1146},[159,183895,1159],{"class":165},[159,183897,171537],{"class":192},[159,183899,1165],{"class":165},[159,183901,183902],{"class":161,"line":1322},[159,183903,173661],{"class":1142},[159,183905,183906,183908,183910],{"class":161,"line":1327},[159,183907,183790],{"class":165},[159,183909,171552],{"class":1142},[159,183911,171475],{"class":165},[159,183913,183914,183916,183918,183921],{"class":161,"line":1336},[159,183915,54819],{"class":1146},[159,183917,1159],{"class":165},[159,183919,183920],{"class":192},"\"取款成功\"",[159,183922,1165],{"class":165},[159,183924,183925],{"class":161,"line":1345},[159,183926,183810],{"class":165},[159,183928,183929],{"class":161,"line":1350},[159,183930,590],{"emptyLinePlaceholder":589},[159,183932,183933],{"class":161,"line":1764},[159,183934,590],{"emptyLinePlaceholder":589},[159,183936,183937,183939,183941],{"class":161,"line":1769},[159,183938,129963],{"class":1142},[159,183940,116592],{"class":1146},[159,183942,27364],{"class":165},[159,183944,183945],{"class":161,"line":1777},[159,183946,183947],{"class":165},"    show_menu()\n",[159,183949,183950,183952,183954,183956,183958,183960],{"class":161,"line":1788},[159,183951,181992],{"class":165},[159,183953,189],{"class":1142},[159,183955,7625],{"class":1146},[159,183957,1159],{"class":165},[159,183959,174373],{"class":192},[159,183961,1165],{"class":165},[159,183963,183964],{"class":161,"line":1802},[159,183965,590],{"emptyLinePlaceholder":589},[159,183967,183968,183970,183972,183974,183976],{"class":161,"line":1815},[159,183969,26732],{"class":1142},[159,183971,174386],{"class":165},[159,183973,26581],{"class":1142},[159,183975,174391],{"class":192},[159,183977,27364],{"class":165},[159,183979,183980],{"class":161,"line":1828},[159,183981,183982],{"class":165},"        show_balance()\n",[159,183984,183985,183987,183989,183991,183993],{"class":161,"line":1841},[159,183986,62688],{"class":1142},[159,183988,174386],{"class":165},[159,183990,26581],{"class":1142},[159,183992,174410],{"class":192},[159,183994,27364],{"class":165},[159,183996,183997],{"class":161,"line":1852},[159,183998,183999],{"class":165},"        save_money()\n",[159,184001,184002,184004,184006,184008,184010],{"class":161,"line":1866},[159,184003,62688],{"class":1142},[159,184005,174386],{"class":165},[159,184007,26581],{"class":1142},[159,184009,174428],{"class":192},[159,184011,27364],{"class":165},[159,184013,184014],{"class":161,"line":1879},[159,184015,184016],{"class":165},"        withdraw_money()\n",[159,184018,184019,184021,184023,184025,184027],{"class":161,"line":1884},[159,184020,62688],{"class":1142},[159,184022,174386],{"class":165},[159,184024,26581],{"class":1142},[159,184026,174482],{"class":192},[159,184028,27364],{"class":165},[159,184030,184031,184033,184035,184037],{"class":161,"line":1889},[159,184032,55969],{"class":1146},[159,184034,1159],{"class":165},[159,184036,174493],{"class":192},[159,184038,1165],{"class":165},[159,184040,184041],{"class":161,"line":1899},[159,184042,55146],{"class":1142},[159,184044,184045,184047],{"class":161,"line":1912},[159,184046,179322],{"class":1142},[159,184048,27364],{"class":165},[159,184050,184051,184053,184055,184057],{"class":161,"line":1925},[159,184052,55969],{"class":1146},[159,184054,1159],{"class":165},[159,184056,174514],{"class":192},[159,184058,1165],{"class":165},[14,184060,184061],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[37,184063,184065],{"id":184064},"_514-易错点","5.14 易错点",[134,184067,184068,184071,184074,184079,184084,184087],{},[106,184069,184070],{},"函数定义后必须调用才会执行。",[106,184072,184073],{},"函数名后面有括号才是调用。",[106,184075,184076,184078],{},[49,184077,40574],{}," 后面的代码不会执行。",[106,184080,184081,184082,51907],{},"没有返回值的函数默认返回 ",[49,184083,116986],{},[106,184085,184086],{},"局部变量不能在函数外部访问。",[106,184088,184089,184090,184092],{},"不要滥用 ",[49,184091,183126],{},"，更好的方式是让函数返回新值。",[14,184094,184095,184096,184098],{},"例如不用 ",[49,184097,183126],{}," 改写存款：",[151,184100,184102],{"className":53900,"code":184101,"language":53902,"meta":25,"style":25},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[49,184103,184104,184113,184124,184128,184132,184140,184153],{"__ignoreMap":25},[159,184105,184106,184108,184110],{"class":161,"line":162},[159,184107,55465],{"class":1142},[159,184109,183730],{"class":185},[159,184111,184112],{"class":165},"(balance, money):\n",[159,184114,184115,184117,184120,184122],{"class":161,"line":176},[159,184116,27711],{"class":1142},[159,184118,184119],{"class":165}," balance ",[159,184121,2704],{"class":1142},[159,184123,171475],{"class":165},[159,184125,184126],{"class":161,"line":203},[159,184127,590],{"emptyLinePlaceholder":589},[159,184129,184130],{"class":161,"line":223},[159,184131,590],{"emptyLinePlaceholder":589},[159,184133,184134,184136,184138],{"class":161,"line":233},[159,184135,183604],{"class":165},[159,184137,189],{"class":1142},[159,184139,183609],{"class":1146},[159,184141,184142,184144,184146,184149,184151],{"class":161,"line":239},[159,184143,183604],{"class":165},[159,184145,189],{"class":1142},[159,184147,184148],{"class":165}," save_money(balance, ",[159,184150,13303],{"class":1146},[159,184152,1165],{"class":165},[159,184154,184155,184157],{"class":161,"line":245},[159,184156,53937],{"class":1146},[159,184158,184159],{"class":165},"(balance)\n",[37,184161,184163],{"id":184162},"_515-本章练习","5.15 本章练习",[134,184165,184166,184173,184179,184185,184191],{},[106,184167,184168,184169,184172],{},"定义函数 ",[49,184170,184171],{},"print_student(name, age)","，输出学生信息。",[106,184174,184168,184175,184178],{},[49,184176,184177],{},"get_max(a, b, c)","，返回三个数中的最大值。",[106,184180,184168,184181,184184],{},[49,184182,184183],{},"is_even(num)","，判断一个数是否为偶数。",[106,184186,184168,184187,184190],{},[49,184188,184189],{},"calculate_bmi(weight, height)","，返回 BMI。",[106,184192,184193],{},"把第 4 章的菜单程序拆分成多个函数。",[1468,184195,184196],{},"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":25,"searchDepth":176,"depth":176,"links":184198},[184199,184200,184201,184202,184203,184204,184205,184206,184207,184211,184212,184213,184214,184215,184216],{"id":182219,"depth":176,"text":182220},{"id":182260,"depth":176,"text":182261},{"id":182350,"depth":176,"text":182351},{"id":182431,"depth":176,"text":182432},{"id":182564,"depth":176,"text":182565},{"id":182686,"depth":176,"text":182687},{"id":182808,"depth":176,"text":182809},{"id":182885,"depth":176,"text":182886},{"id":183007,"depth":176,"text":183008,"children":184208},[184209,184210],{"id":183011,"depth":203,"text":183012},{"id":183069,"depth":203,"text":183070},{"id":183198,"depth":176,"text":183199},{"id":183324,"depth":176,"text":183325},{"id":183437,"depth":176,"text":183438},{"id":183593,"depth":176,"text":183594},{"id":184064,"depth":176,"text":184065},{"id":184162,"depth":176,"text":184163},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":182211,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":184223,"title":184224,"body":184225,"description":23809,"extension":23810,"meta":187269,"navigation":589,"path":187270,"seo":187271,"stem":187272,"__hash__":187273},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":184226,"toc":187250},[184227,184230,184234,184237,184240,184344,184347,184351,184354,184434,184437,184441,184444,184504,184507,184543,184546,184561,184565,184638,184641,184696,184699,184769,184772,184856,184866,184924,184928,184973,184976,185002,185005,185111,185115,185118,185160,185163,185227,185230,185234,185237,185298,185301,185331,185334,185372,185376,185379,185388,185391,185515,185518,185559,185563,185566,185577,185617,185620,185635,185640,185643,185710,185713,185803,185807,185810,185858,185861,185888,185890,185920,185923,185943,185946,185977,185980,186013,186017,186020,186044,186047,186071,186074,186098,186102,186105,186235,186238,186318,186321,186396,186400,186403,186453,186456,186498,186501,186525,186527,186551,186554,186609,186612,186678,186682,186685,186688,186726,186729,186782,186785,186831,186834,186867,186870,186874,187193,187197,187226,187230,187247],[10,184228,184224],{"id":184229},"_6-数据容器",[37,184231,184233],{"id":184232},"_61-什么是数据容器","6.1 什么是数据容器",[14,184235,184236],{},"数据容器用于一次保存多个数据。",[14,184238,184239],{},"常见容器：",[12347,184241,184242,184259],{},[16500,184243,184244],{},[12356,184245,184246,184248,184251,184254,184257],{},[12365,184247,49294],{},[12365,184249,184250],{},"是否有序",[12365,184252,184253],{},"是否可变",[12365,184255,184256],{},"是否允许重复",[12365,184258,51015],{},[16624,184260,184261,184279,184295,184310,184327],{},[12356,184262,184263,184266,184269,184272,184275],{},[12488,184264,184265],{},"list列表",[12488,184267,184268],{},"有序",[12488,184270,184271],{},"可变",[12488,184273,184274],{},"允许",[12488,184276,184277],{},[49,184278,176557],{},[12356,184280,184281,184284,184286,184289,184291],{},[12488,184282,184283],{},"tuple元组",[12488,184285,184268],{},[12488,184287,184288],{},"不可变",[12488,184290,184274],{},[12488,184292,184293],{},[49,184294,176570],{},[12356,184296,184297,184300,184302,184304,184306],{},[12488,184298,184299],{},"str字符串",[12488,184301,184268],{},[12488,184303,184288],{},[12488,184305,184274],{},[12488,184307,184308],{},[49,184309,177180],{},[12356,184311,184312,184315,184318,184320,184323],{},[12488,184313,184314],{},"set集合",[12488,184316,184317],{},"无序",[12488,184319,184271],{},[12488,184321,184322],{},"不允许",[12488,184324,184325],{},[49,184326,176595],{},[12356,184328,184329,184332,184334,184336,184339],{},[12488,184330,184331],{},"dict字典",[12488,184333,184268],{},[12488,184335,184271],{},[12488,184337,184338],{},"key不允许重复",[12488,184340,184341],{},[49,184342,184343],{},"{\"name\": \"小明\"}",[14,184345,184346],{},"Python 3.7 之后，字典保持插入顺序。",[37,184348,184350],{"id":184349},"_62-列表list","6.2 列表list",[14,184352,184353],{},"列表用于保存一组有顺序的数据。",[151,184355,184357],{"className":53900,"code":184356,"language":53902,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[49,184358,184359,184379,184404,184425],{"__ignoreMap":25},[159,184360,184361,184363,184365,184367,184369,184371,184373,184375,184377],{"class":161,"line":162},[159,184362,181680],{"class":165},[159,184364,189],{"class":1142},[159,184366,4608],{"class":165},[159,184368,171188],{"class":192},[159,184370,1939],{"class":165},[159,184372,172236],{"class":192},[159,184374,1939],{"class":165},[159,184376,181031],{"class":192},[159,184378,4634],{"class":165},[159,184380,184381,184384,184386,184388,184390,184392,184394,184396,184398,184400,184402],{"class":161,"line":176},[159,184382,184383],{"class":165},"numbers ",[159,184385,189],{"class":1142},[159,184387,4608],{"class":165},[159,184389,4932],{"class":1146},[159,184391,1939],{"class":165},[159,184393,11034],{"class":1146},[159,184395,1939],{"class":165},[159,184397,23949],{"class":1146},[159,184399,1939],{"class":165},[159,184401,8866],{"class":1146},[159,184403,4634],{"class":165},[159,184405,184406,184409,184411,184413,184415,184417,184419,184421,184423],{"class":161,"line":203},[159,184407,184408],{"class":165},"mixed ",[159,184410,189],{"class":1142},[159,184412,4608],{"class":165},[159,184414,171188],{"class":192},[159,184416,1939],{"class":165},[159,184418,18723],{"class":1146},[159,184420,1939],{"class":165},[159,184422,54995],{"class":1146},[159,184424,4634],{"class":165},[159,184426,184427,184430,184432],{"class":161,"line":223},[159,184428,184429],{"class":165},"empty ",[159,184431,189],{"class":1142},[159,184433,16884],{"class":165},[14,184435,184436],{},"推荐一个列表中保存同类数据，代码更清晰。",[37,184438,184440],{"id":184439},"_63-列表索引","6.3 列表索引",[14,184442,184443],{},"正向索引从 0 开始：",[151,184445,184447],{"className":53900,"code":184446,"language":53902,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[49,184448,184449,184469,184473,184484,184494],{"__ignoreMap":25},[159,184450,184451,184453,184455,184457,184459,184461,184463,184465,184467],{"class":161,"line":162},[159,184452,181680],{"class":165},[159,184454,189],{"class":1142},[159,184456,4608],{"class":165},[159,184458,171188],{"class":192},[159,184460,1939],{"class":165},[159,184462,172236],{"class":192},[159,184464,1939],{"class":165},[159,184466,181031],{"class":192},[159,184468,4634],{"class":165},[159,184470,184471],{"class":161,"line":176},[159,184472,590],{"emptyLinePlaceholder":589},[159,184474,184475,184477,184480,184482],{"class":161,"line":203},[159,184476,53937],{"class":1146},[159,184478,184479],{"class":165},"(names[",[159,184481,1489],{"class":1146},[159,184483,28275],{"class":165},[159,184485,184486,184488,184490,184492],{"class":161,"line":223},[159,184487,53937],{"class":1146},[159,184489,184479],{"class":165},[159,184491,4932],{"class":1146},[159,184493,28275],{"class":165},[159,184495,184496,184498,184500,184502],{"class":161,"line":233},[159,184497,53937],{"class":1146},[159,184499,184479],{"class":165},[159,184501,11034],{"class":1146},[159,184503,28275],{"class":165},[14,184505,184506],{},"反向索引从 -1 开始：",[151,184508,184510],{"className":53900,"code":184509,"language":53902,"meta":25,"style":25},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[49,184511,184512,184528],{"__ignoreMap":25},[159,184513,184514,184516,184518,184520,184522,184525],{"class":161,"line":162},[159,184515,53937],{"class":1146},[159,184517,184479],{"class":165},[159,184519,24376],{"class":1142},[159,184521,4932],{"class":1146},[159,184523,184524],{"class":165},"])  ",[159,184526,184527],{"class":1135},"# 小刚\n",[159,184529,184530,184532,184534,184536,184538,184540],{"class":161,"line":176},[159,184531,53937],{"class":1146},[159,184533,184479],{"class":165},[159,184535,24376],{"class":1142},[159,184537,11034],{"class":1146},[159,184539,184524],{"class":165},[159,184541,184542],{"class":1135},"# 小红\n",[14,184544,184545],{},"索引越界会报错：",[151,184547,184549],{"className":53900,"code":184548,"language":53902,"meta":25,"style":25},"print(names[3])\n",[49,184550,184551],{"__ignoreMap":25},[159,184552,184553,184555,184557,184559],{"class":161,"line":162},[159,184554,53937],{"class":1146},[159,184556,184479],{"class":165},[159,184558,23949],{"class":1146},[159,184560,28275],{"class":165},[37,184562,184564],{"id":184563},"_64-列表常用方法","6.4 列表常用方法",[151,184566,184568],{"className":53900,"code":184567,"language":53902,"meta":25,"style":25},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[49,184569,184570,184586,184590,184599,184613,184627,184631],{"__ignoreMap":25},[159,184571,184572,184574,184576,184578,184580,184582,184584],{"class":161,"line":162},[159,184573,181680],{"class":165},[159,184575,189],{"class":1142},[159,184577,4608],{"class":165},[159,184579,171188],{"class":192},[159,184581,1939],{"class":165},[159,184583,172236],{"class":192},[159,184585,4634],{"class":165},[159,184587,184588],{"class":161,"line":176},[159,184589,590],{"emptyLinePlaceholder":589},[159,184591,184592,184595,184597],{"class":161,"line":203},[159,184593,184594],{"class":165},"names.append(",[159,184596,181031],{"class":192},[159,184598,1165],{"class":165},[159,184600,184601,184604,184606,184608,184611],{"class":161,"line":223},[159,184602,184603],{"class":165},"names.insert(",[159,184605,4932],{"class":1146},[159,184607,1939],{"class":165},[159,184609,184610],{"class":192},"\"小李\"",[159,184612,1165],{"class":165},[159,184614,184615,184618,184620,184622,184625],{"class":161,"line":233},[159,184616,184617],{"class":165},"names.extend([",[159,184619,32282],{"class":192},[159,184621,1939],{"class":165},[159,184623,184624],{"class":192},"\"小赵\"",[159,184626,28275],{"class":165},[159,184628,184629],{"class":161,"line":239},[159,184630,590],{"emptyLinePlaceholder":589},[159,184632,184633,184635],{"class":161,"line":245},[159,184634,53937],{"class":1146},[159,184636,184637],{"class":165},"(names)\n",[14,184639,184640],{},"删除元素：",[151,184642,184644],{"className":53900,"code":184643,"language":53902,"meta":25,"style":25},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[49,184645,184646,184655,184665,184679,184691],{"__ignoreMap":25},[159,184647,184648,184651,184653],{"class":161,"line":162},[159,184649,184650],{"class":165},"names.remove(",[159,184652,172236],{"class":192},[159,184654,1165],{"class":165},[159,184656,184657,184660,184662],{"class":161,"line":176},[159,184658,184659],{"class":165},"last ",[159,184661,189],{"class":1142},[159,184663,184664],{"class":165}," names.pop()\n",[159,184666,184667,184670,184672,184675,184677],{"class":161,"line":203},[159,184668,184669],{"class":165},"first ",[159,184671,189],{"class":1142},[159,184673,184674],{"class":165}," names.pop(",[159,184676,1489],{"class":1146},[159,184678,1165],{"class":165},[159,184680,184681,184684,184687,184689],{"class":161,"line":223},[159,184682,184683],{"class":1142},"del",[159,184685,184686],{"class":165}," names[",[159,184688,1489],{"class":1146},[159,184690,4634],{"class":165},[159,184692,184693],{"class":161,"line":233},[159,184694,184695],{"class":165},"names.clear()\n",[14,184697,184698],{},"查询和统计：",[151,184700,184702],{"className":53900,"code":184701,"language":53902,"meta":25,"style":25},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[49,184703,184704,184732,184736,184747,184758],{"__ignoreMap":25},[159,184705,184706,184708,184710,184712,184714,184716,184718,184720,184722,184724,184726,184728,184730],{"class":161,"line":162},[159,184707,184383],{"class":165},[159,184709,189],{"class":1142},[159,184711,4608],{"class":165},[159,184713,4932],{"class":1146},[159,184715,1939],{"class":165},[159,184717,11034],{"class":1146},[159,184719,1939],{"class":165},[159,184721,23949],{"class":1146},[159,184723,1939],{"class":165},[159,184725,11034],{"class":1146},[159,184727,1939],{"class":165},[159,184729,8866],{"class":1146},[159,184731,4634],{"class":165},[159,184733,184734],{"class":161,"line":176},[159,184735,590],{"emptyLinePlaceholder":589},[159,184737,184738,184740,184743,184745],{"class":161,"line":203},[159,184739,53937],{"class":1146},[159,184741,184742],{"class":165},"(numbers.index(",[159,184744,23949],{"class":1146},[159,184746,18787],{"class":165},[159,184748,184749,184751,184754,184756],{"class":161,"line":223},[159,184750,53937],{"class":1146},[159,184752,184753],{"class":165},"(numbers.count(",[159,184755,11034],{"class":1146},[159,184757,18787],{"class":165},[159,184759,184760,184762,184764,184766],{"class":161,"line":233},[159,184761,53937],{"class":1146},[159,184763,1159],{"class":165},[159,184765,30969],{"class":1146},[159,184767,184768],{"class":165},"(numbers))\n",[14,184770,184771],{},"排序：",[151,184773,184775],{"className":53900,"code":184774,"language":53902,"meta":25,"style":25},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[49,184776,184777,184801,184805,184810,184817,184821,184835,184841,184845,184850],{"__ignoreMap":25},[159,184778,184779,184781,184783,184785,184787,184789,184791,184793,184795,184797,184799],{"class":161,"line":162},[159,184780,184383],{"class":165},[159,184782,189],{"class":1142},[159,184784,4608],{"class":165},[159,184786,23949],{"class":1146},[159,184788,1939],{"class":165},[159,184790,4932],{"class":1146},[159,184792,1939],{"class":165},[159,184794,1753],{"class":1146},[159,184796,1939],{"class":165},[159,184798,11034],{"class":1146},[159,184800,4634],{"class":165},[159,184802,184803],{"class":161,"line":176},[159,184804,590],{"emptyLinePlaceholder":589},[159,184806,184807],{"class":161,"line":203},[159,184808,184809],{"class":165},"numbers.sort()\n",[159,184811,184812,184814],{"class":161,"line":223},[159,184813,53937],{"class":1146},[159,184815,184816],{"class":165},"(numbers)\n",[159,184818,184819],{"class":161,"line":233},[159,184820,590],{"emptyLinePlaceholder":589},[159,184822,184823,184826,184829,184831,184833],{"class":161,"line":239},[159,184824,184825],{"class":165},"numbers.sort(",[159,184827,184828],{"class":8765},"reverse",[159,184830,189],{"class":1142},[159,184832,54995],{"class":1146},[159,184834,1165],{"class":165},[159,184836,184837,184839],{"class":161,"line":245},[159,184838,53937],{"class":1146},[159,184840,184816],{"class":165},[159,184842,184843],{"class":161,"line":251},[159,184844,590],{"emptyLinePlaceholder":589},[159,184846,184847],{"class":161,"line":261},[159,184848,184849],{"class":165},"numbers.reverse()\n",[159,184851,184852,184854],{"class":161,"line":603},[159,184853,53937],{"class":1146},[159,184855,184816],{"class":165},[14,184857,184858,184861,184862,184865],{},[49,184859,184860],{},"sort()"," 会修改原列表，",[49,184863,184864],{},"sorted()"," 返回新列表。",[151,184867,184869],{"className":53900,"code":184868,"language":53902,"meta":25,"style":25},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[49,184870,184871,184895,184907,184911,184917],{"__ignoreMap":25},[159,184872,184873,184875,184877,184879,184881,184883,184885,184887,184889,184891,184893],{"class":161,"line":162},[159,184874,184383],{"class":165},[159,184876,189],{"class":1142},[159,184878,4608],{"class":165},[159,184880,23949],{"class":1146},[159,184882,1939],{"class":165},[159,184884,4932],{"class":1146},[159,184886,1939],{"class":165},[159,184888,1753],{"class":1146},[159,184890,1939],{"class":165},[159,184892,11034],{"class":1146},[159,184894,4634],{"class":165},[159,184896,184897,184900,184902,184905],{"class":161,"line":176},[159,184898,184899],{"class":165},"new_numbers ",[159,184901,189],{"class":1142},[159,184903,184904],{"class":1146}," sorted",[159,184906,184816],{"class":165},[159,184908,184909],{"class":161,"line":203},[159,184910,590],{"emptyLinePlaceholder":589},[159,184912,184913,184915],{"class":161,"line":223},[159,184914,53937],{"class":1146},[159,184916,184816],{"class":165},[159,184918,184919,184921],{"class":161,"line":233},[159,184920,53937],{"class":1146},[159,184922,184923],{"class":165},"(new_numbers)\n",[37,184925,184927],{"id":184926},"_65-列表遍历","6.5 列表遍历",[151,184929,184931],{"className":53900,"code":184930,"language":53902,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[49,184932,184933,184953,184957,184967],{"__ignoreMap":25},[159,184934,184935,184937,184939,184941,184943,184945,184947,184949,184951],{"class":161,"line":162},[159,184936,181680],{"class":165},[159,184938,189],{"class":1142},[159,184940,4608],{"class":165},[159,184942,171188],{"class":192},[159,184944,1939],{"class":165},[159,184946,172236],{"class":192},[159,184948,1939],{"class":165},[159,184950,181031],{"class":192},[159,184952,4634],{"class":165},[159,184954,184955],{"class":161,"line":176},[159,184956,590],{"emptyLinePlaceholder":589},[159,184958,184959,184961,184963,184965],{"class":161,"line":203},[159,184960,26657],{"class":1142},[159,184962,181716],{"class":165},[159,184964,49566],{"class":1142},[159,184966,181721],{"class":165},[159,184968,184969,184971],{"class":161,"line":223},[159,184970,54819],{"class":1146},[159,184972,171960],{"class":165},[14,184974,184975],{},"需要索引时：",[151,184977,184979],{"className":53900,"code":184978,"language":53902,"meta":25,"style":25},"for index, name in enumerate(names):\n    print(index, name)\n",[49,184980,184981,184995],{"__ignoreMap":25},[159,184982,184983,184985,184988,184990,184992],{"class":161,"line":162},[159,184984,26657],{"class":1142},[159,184986,184987],{"class":165}," index, name ",[159,184989,49566],{"class":1142},[159,184991,55125],{"class":1146},[159,184993,184994],{"class":165},"(names):\n",[159,184996,184997,184999],{"class":161,"line":176},[159,184998,54819],{"class":1146},[159,185000,185001],{"class":165},"(index, name)\n",[14,185003,185004],{},"统计总分：",[151,185006,185008],{"className":53900,"code":185007,"language":53902,"meta":25,"style":25},"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",[49,185009,185010,185035,185043,185047,185058,185066,185070,185087],{"__ignoreMap":25},[159,185011,185012,185015,185017,185019,185021,185023,185025,185027,185029,185031,185033],{"class":161,"line":162},[159,185013,185014],{"class":165},"scores ",[159,185016,189],{"class":1142},[159,185018,4608],{"class":165},[159,185020,24688],{"class":1146},[159,185022,1939],{"class":165},[159,185024,24568],{"class":1146},[159,185026,1939],{"class":165},[159,185028,24118],{"class":1146},[159,185030,1939],{"class":165},[159,185032,24402],{"class":1146},[159,185034,4634],{"class":165},[159,185036,185037,185039,185041],{"class":161,"line":176},[159,185038,178560],{"class":165},[159,185040,189],{"class":1142},[159,185042,3785],{"class":1146},[159,185044,185045],{"class":161,"line":203},[159,185046,590],{"emptyLinePlaceholder":589},[159,185048,185049,185051,185053,185055],{"class":161,"line":223},[159,185050,26657],{"class":1142},[159,185052,179083],{"class":165},[159,185054,49566],{"class":1142},[159,185056,185057],{"class":165}," scores:\n",[159,185059,185060,185062,185064],{"class":161,"line":233},[159,185061,180607],{"class":165},[159,185063,33073],{"class":1142},[159,185065,25254],{"class":165},[159,185067,185068],{"class":161,"line":239},[159,185069,590],{"emptyLinePlaceholder":589},[159,185071,185072,185075,185077,185080,185082,185084],{"class":161,"line":245},[159,185073,185074],{"class":165},"avg ",[159,185076,189],{"class":1142},[159,185078,185079],{"class":165}," total ",[159,185081,13083],{"class":1142},[159,185083,30942],{"class":1146},[159,185085,185086],{"class":165},"(scores)\n",[159,185088,185089,185091,185093,185095,185098,185100,185103,185105,185107,185109],{"class":161,"line":251},[159,185090,53937],{"class":1146},[159,185092,1159],{"class":165},[159,185094,23931],{"class":1142},[159,185096,185097],{"class":192},"\"平均分:",[159,185099,24721],{"class":1146},[159,185101,185102],{"class":165},"avg",[159,185104,178459],{"class":1142},[159,185106,886],{"class":1146},[159,185108,24115],{"class":192},[159,185110,1165],{"class":165},[37,185112,185114],{"id":185113},"_66-元组tuple","6.6 元组tuple",[14,185116,185117],{},"元组和列表类似，但不可修改。",[151,185119,185121],{"className":53900,"code":185120,"language":53902,"meta":25,"style":25},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[49,185122,185123,185140],{"__ignoreMap":25},[159,185124,185125,185128,185130,185132,185134,185136,185138],{"class":161,"line":162},[159,185126,185127],{"class":165},"point ",[159,185129,189],{"class":1142},[159,185131,11680],{"class":165},[159,185133,1964],{"class":1146},[159,185135,1939],{"class":165},[159,185137,1739],{"class":1146},[159,185139,1165],{"class":165},[159,185141,185142,185144,185146,185148,185150,185152,185154,185156,185158],{"class":161,"line":176},[159,185143,137614],{"class":165},[159,185145,189],{"class":1142},[159,185147,11680],{"class":165},[159,185149,171188],{"class":192},[159,185151,1939],{"class":165},[159,185153,18723],{"class":1146},[159,185155,1939],{"class":165},[159,185157,16345],{"class":192},[159,185159,1165],{"class":165},[14,185161,185162],{},"单元素元组必须加逗号：",[151,185164,185166],{"className":53900,"code":185165,"language":53902,"meta":25,"style":25},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[49,185167,185168,185182,185195,185199,185213],{"__ignoreMap":25},[159,185169,185170,185173,185175,185177,185179],{"class":161,"line":162},[159,185171,185172],{"class":165},"t1 ",[159,185174,189],{"class":1142},[159,185176,11680],{"class":165},[159,185178,1964],{"class":1146},[159,185180,185181],{"class":165},",)\n",[159,185183,185184,185187,185189,185191,185193],{"class":161,"line":176},[159,185185,185186],{"class":165},"t2 ",[159,185188,189],{"class":1142},[159,185190,11680],{"class":165},[159,185192,1964],{"class":1146},[159,185194,1165],{"class":165},[159,185196,185197],{"class":161,"line":203},[159,185198,590],{"emptyLinePlaceholder":589},[159,185200,185201,185203,185205,185207,185210],{"class":161,"line":223},[159,185202,53937],{"class":1146},[159,185204,1159],{"class":165},[159,185206,124407],{"class":1146},[159,185208,185209],{"class":165},"(t1))  ",[159,185211,185212],{"class":1135},"# tuple\n",[159,185214,185215,185217,185219,185221,185224],{"class":161,"line":233},[159,185216,53937],{"class":1146},[159,185218,1159],{"class":165},[159,185220,124407],{"class":1146},[159,185222,185223],{"class":165},"(t2))  ",[159,185225,185226],{"class":1135},"# int\n",[14,185228,185229],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[37,185231,185233],{"id":185232},"_67-字符串str","6.7 字符串str",[14,185235,185236],{},"字符串也是序列，可以索引、切片和遍历。",[151,185238,185240],{"className":53900,"code":185239,"language":53902,"meta":25,"style":25},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[49,185241,185242,185250,185254,185265,185277,185281,185292],{"__ignoreMap":25},[159,185243,185244,185246,185248],{"class":161,"line":162},[159,185245,177744],{"class":165},[159,185247,189],{"class":1142},[159,185249,180981],{"class":192},[159,185251,185252],{"class":161,"line":176},[159,185253,590],{"emptyLinePlaceholder":589},[159,185255,185256,185258,185261,185263],{"class":161,"line":203},[159,185257,53937],{"class":1146},[159,185259,185260],{"class":165},"(text[",[159,185262,1489],{"class":1146},[159,185264,28275],{"class":165},[159,185266,185267,185269,185271,185273,185275],{"class":161,"line":223},[159,185268,53937],{"class":1146},[159,185270,185260],{"class":165},[159,185272,24376],{"class":1142},[159,185274,4932],{"class":1146},[159,185276,28275],{"class":165},[159,185278,185279],{"class":161,"line":233},[159,185280,590],{"emptyLinePlaceholder":589},[159,185282,185283,185285,185287,185289],{"class":161,"line":239},[159,185284,26657],{"class":1142},[159,185286,180992],{"class":165},[159,185288,49566],{"class":1142},[159,185290,185291],{"class":165}," text:\n",[159,185293,185294,185296],{"class":161,"line":245},[159,185295,54819],{"class":1146},[159,185297,181003],{"class":165},[14,185299,185300],{},"字符串不可变：",[151,185302,185304],{"className":53900,"code":185303,"language":53902,"meta":25,"style":25},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[49,185305,185306,185314],{"__ignoreMap":25},[159,185307,185308,185310,185312],{"class":161,"line":162},[159,185309,177744],{"class":165},[159,185311,189],{"class":1142},[159,185313,180981],{"class":192},[159,185315,185316,185319,185321,185323,185325,185328],{"class":161,"line":176},[159,185317,185318],{"class":165},"text[",[159,185320,1489],{"class":1146},[159,185322,28061],{"class":165},[159,185324,189],{"class":1142},[159,185326,185327],{"class":192}," \"P\"",[159,185329,185330],{"class":1135},"  # 报错\n",[14,185332,185333],{},"如果要得到新字符串：",[151,185335,185337],{"className":53900,"code":185336,"language":53902,"meta":25,"style":25},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[49,185338,185339,185347,185365],{"__ignoreMap":25},[159,185340,185341,185343,185345],{"class":161,"line":162},[159,185342,177744],{"class":165},[159,185344,189],{"class":1142},[159,185346,180981],{"class":192},[159,185348,185349,185351,185353,185355,185357,185360,185362],{"class":161,"line":176},[159,185350,177744],{"class":165},[159,185352,189],{"class":1142},[159,185354,185327],{"class":192},[159,185356,3925],{"class":1142},[159,185358,185359],{"class":165}," text[",[159,185361,4932],{"class":1146},[159,185363,185364],{"class":165},":]\n",[159,185366,185367,185369],{"class":161,"line":203},[159,185368,53937],{"class":1146},[159,185370,185371],{"class":165},"(text)\n",[37,185373,185375],{"id":185374},"_68-切片","6.8 切片",[14,185377,185378],{},"切片用于从序列中取一部分。",[151,185380,185382],{"className":53900,"code":185381,"language":53902,"meta":25,"style":25},"序列[开始:结束:步长]\n",[49,185383,185384],{"__ignoreMap":25},[159,185385,185386],{"class":161,"line":162},[159,185387,185381],{"class":165},[14,185389,185390],{},"结束位置不包含。",[151,185392,185394],{"className":53900,"code":185393,"language":53902,"meta":25,"style":25},"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",[49,185395,185396,185433,185437,185456,185471,185485,185499],{"__ignoreMap":25},[159,185397,185398,185401,185403,185405,185407,185409,185411,185413,185415,185417,185419,185421,185423,185425,185427,185429,185431],{"class":161,"line":162},[159,185399,185400],{"class":165},"nums ",[159,185402,189],{"class":1142},[159,185404,4608],{"class":165},[159,185406,1489],{"class":1146},[159,185408,1939],{"class":165},[159,185410,4932],{"class":1146},[159,185412,1939],{"class":165},[159,185414,11034],{"class":1146},[159,185416,1939],{"class":165},[159,185418,23949],{"class":1146},[159,185420,1939],{"class":165},[159,185422,8866],{"class":1146},[159,185424,1939],{"class":165},[159,185426,1753],{"class":1146},[159,185428,1939],{"class":165},[159,185430,7907],{"class":1146},[159,185432,4634],{"class":165},[159,185434,185435],{"class":161,"line":176},[159,185436,590],{"emptyLinePlaceholder":589},[159,185438,185439,185441,185444,185446,185448,185450,185453],{"class":161,"line":203},[159,185440,53937],{"class":1146},[159,185442,185443],{"class":165},"(nums[",[159,185445,4932],{"class":1146},[159,185447,20934],{"class":165},[159,185449,8866],{"class":1146},[159,185451,185452],{"class":165},"])    ",[159,185454,185455],{"class":1135},"# [1, 2, 3]\n",[159,185457,185458,185460,185463,185465,185468],{"class":161,"line":223},[159,185459,53937],{"class":1146},[159,185461,185462],{"class":165},"(nums[:",[159,185464,23949],{"class":1146},[159,185466,185467],{"class":165},"])     ",[159,185469,185470],{"class":1135},"# [0, 1, 2]\n",[159,185472,185473,185475,185477,185479,185482],{"class":161,"line":233},[159,185474,53937],{"class":1146},[159,185476,185443],{"class":165},[159,185478,23949],{"class":1146},[159,185480,185481],{"class":165},":])     ",[159,185483,185484],{"class":1135},"# [3, 4, 5, 6]\n",[159,185486,185487,185489,185492,185494,185496],{"class":161,"line":239},[159,185488,53937],{"class":1146},[159,185490,185491],{"class":165},"(nums[::",[159,185493,11034],{"class":1146},[159,185495,185452],{"class":165},[159,185497,185498],{"class":1135},"# [0, 2, 4, 6]\n",[159,185500,185501,185503,185505,185507,185509,185512],{"class":161,"line":245},[159,185502,53937],{"class":1146},[159,185504,185491],{"class":165},[159,185506,24376],{"class":1142},[159,185508,4932],{"class":1146},[159,185510,185511],{"class":165},"])   ",[159,185513,185514],{"class":1135},"# 反转\n",[14,185516,185517],{},"字符串切片：",[151,185519,185521],{"className":53900,"code":185520,"language":53902,"meta":25,"style":25},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[49,185522,185523,185532,185546],{"__ignoreMap":25},[159,185524,185525,185527,185529],{"class":161,"line":162},[159,185526,177744],{"class":165},[159,185528,189],{"class":1142},[159,185530,185531],{"class":192}," \"abcdef\"\n",[159,185533,185534,185536,185538,185540,185542,185544],{"class":161,"line":176},[159,185535,53937],{"class":1146},[159,185537,185260],{"class":165},[159,185539,4932],{"class":1146},[159,185541,20934],{"class":165},[159,185543,8866],{"class":1146},[159,185545,28275],{"class":165},[159,185547,185548,185550,185553,185555,185557],{"class":161,"line":203},[159,185549,53937],{"class":1146},[159,185551,185552],{"class":165},"(text[::",[159,185554,24376],{"class":1142},[159,185556,4932],{"class":1146},[159,185558,28275],{"class":165},[37,185560,185562],{"id":185561},"_69-集合set","6.9 集合set",[14,185564,185565],{},"集合特点：",[134,185567,185568,185571,185574],{},[106,185569,185570],{},"无序。",[106,185572,185573],{},"元素不重复。",[106,185575,185576],{},"可以做交集、并集、差集。",[151,185578,185580],{"className":53900,"code":185579,"language":53902,"meta":25,"style":25},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[49,185581,185582,185610],{"__ignoreMap":25},[159,185583,185584,185586,185588,185590,185592,185594,185596,185598,185600,185602,185604,185606,185608],{"class":161,"line":162},[159,185585,185400],{"class":165},[159,185587,189],{"class":1142},[159,185589,28066],{"class":165},[159,185591,4932],{"class":1146},[159,185593,1939],{"class":165},[159,185595,11034],{"class":1146},[159,185597,1939],{"class":165},[159,185599,23949],{"class":1146},[159,185601,1939],{"class":165},[159,185603,23949],{"class":1146},[159,185605,1939],{"class":165},[159,185607,8866],{"class":1146},[159,185609,15685],{"class":165},[159,185611,185612,185614],{"class":161,"line":176},[159,185613,53937],{"class":1146},[159,185615,185616],{"class":165},"(nums)\n",[14,185618,185619],{},"创建空集合：",[151,185621,185623],{"className":53900,"code":185622,"language":53902,"meta":25,"style":25},"s = set()\n",[49,185624,185625],{"__ignoreMap":25},[159,185626,185627,185629,185631,185633],{"class":161,"line":162},[159,185628,34154],{"class":165},[159,185630,189],{"class":1142},[159,185632,141022],{"class":1146},[159,185634,5158],{"class":165},[14,185636,32623,185637,185639],{},[49,185638,55977],{}," 是空字典，不是空集合。",[14,185641,185642],{},"集合常用操作：",[151,185644,185646],{"className":53900,"code":185645,"language":53902,"meta":25,"style":25},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[49,185647,185648,185668,185672,185681,185690,185699],{"__ignoreMap":25},[159,185649,185650,185652,185654,185656,185658,185660,185662,185664,185666],{"class":161,"line":162},[159,185651,34154],{"class":165},[159,185653,189],{"class":1142},[159,185655,28066],{"class":165},[159,185657,4932],{"class":1146},[159,185659,1939],{"class":165},[159,185661,11034],{"class":1146},[159,185663,1939],{"class":165},[159,185665,23949],{"class":1146},[159,185667,15685],{"class":165},[159,185669,185670],{"class":161,"line":176},[159,185671,590],{"emptyLinePlaceholder":589},[159,185673,185674,185677,185679],{"class":161,"line":203},[159,185675,185676],{"class":165},"s.add(",[159,185678,8866],{"class":1146},[159,185680,1165],{"class":165},[159,185682,185683,185686,185688],{"class":161,"line":223},[159,185684,185685],{"class":165},"s.remove(",[159,185687,11034],{"class":1146},[159,185689,1165],{"class":165},[159,185691,185692,185695,185697],{"class":161,"line":233},[159,185693,185694],{"class":165},"s.discard(",[159,185696,1964],{"class":1146},[159,185698,1165],{"class":165},[159,185700,185701,185703,185705,185707],{"class":161,"line":239},[159,185702,53937],{"class":1146},[159,185704,1159],{"class":165},[159,185706,30969],{"class":1146},[159,185708,185709],{"class":165},"(s))\n",[14,185711,185712],{},"交并差：",[151,185714,185716],{"className":53900,"code":185715,"language":53902,"meta":25,"style":25},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[49,185717,185718,185738,185758,185762,185777,185790],{"__ignoreMap":25},[159,185719,185720,185722,185724,185726,185728,185730,185732,185734,185736],{"class":161,"line":162},[159,185721,34493],{"class":165},[159,185723,189],{"class":1142},[159,185725,28066],{"class":165},[159,185727,4932],{"class":1146},[159,185729,1939],{"class":165},[159,185731,11034],{"class":1146},[159,185733,1939],{"class":165},[159,185735,23949],{"class":1146},[159,185737,15685],{"class":165},[159,185739,185740,185742,185744,185746,185748,185750,185752,185754,185756],{"class":161,"line":176},[159,185741,34519],{"class":165},[159,185743,189],{"class":1142},[159,185745,28066],{"class":165},[159,185747,23949],{"class":1146},[159,185749,1939],{"class":165},[159,185751,8866],{"class":1146},[159,185753,1939],{"class":165},[159,185755,1753],{"class":1146},[159,185757,15685],{"class":165},[159,185759,185760],{"class":161,"line":203},[159,185761,590],{"emptyLinePlaceholder":589},[159,185763,185764,185766,185769,185771,185774],{"class":161,"line":223},[159,185765,53937],{"class":1146},[159,185767,185768],{"class":165},"(a ",[159,185770,24209],{"class":1142},[159,185772,185773],{"class":165}," b)  ",[159,185775,185776],{"class":1135},"# 交集\n",[159,185778,185779,185781,185783,185785,185787],{"class":161,"line":233},[159,185780,53937],{"class":1146},[159,185782,185768],{"class":165},[159,185784,24743],{"class":1142},[159,185786,185773],{"class":165},[159,185788,185789],{"class":1135},"# 并集\n",[159,185791,185792,185794,185796,185798,185800],{"class":161,"line":239},[159,185793,53937],{"class":1146},[159,185795,185768],{"class":165},[159,185797,24376],{"class":1142},[159,185799,185773],{"class":165},[159,185801,185802],{"class":1135},"# 差集\n",[37,185804,185806],{"id":185805},"_610-字典dict","6.10 字典dict",[14,185808,185809],{},"字典通过 key-value 保存数据。",[151,185811,185813],{"className":53900,"code":185812,"language":53902,"meta":25,"style":25},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[49,185814,185815,185823,185833,185844,185854],{"__ignoreMap":25},[159,185816,185817,185819,185821],{"class":161,"line":162},[159,185818,170781],{"class":165},[159,185820,189],{"class":1142},[159,185822,1478],{"class":165},[159,185824,185825,185827,185829,185831],{"class":161,"line":176},[159,185826,168320],{"class":192},[159,185828,1486],{"class":165},[159,185830,171188],{"class":192},[159,185832,17070],{"class":165},[159,185834,185835,185838,185840,185842],{"class":161,"line":203},[159,185836,185837],{"class":192},"    \"age\"",[159,185839,1486],{"class":165},[159,185841,18723],{"class":1146},[159,185843,17070],{"class":165},[159,185845,185846,185849,185851],{"class":161,"line":223},[159,185847,185848],{"class":192},"    \"score\"",[159,185850,1486],{"class":165},[159,185852,185853],{"class":1146},"95\n",[159,185855,185856],{"class":161,"line":233},[159,185857,15685],{"class":165},[14,185859,185860],{},"获取值：",[151,185862,185864],{"className":53900,"code":185863,"language":53902,"meta":25,"style":25},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[49,185865,185866,185877],{"__ignoreMap":25},[159,185867,185868,185870,185873,185875],{"class":161,"line":162},[159,185869,53937],{"class":1146},[159,185871,185872],{"class":165},"(student[",[159,185874,9722],{"class":192},[159,185876,28275],{"class":165},[159,185878,185879,185881,185884,185886],{"class":161,"line":176},[159,185880,53937],{"class":1146},[159,185882,185883],{"class":165},"(student.get(",[159,185885,9722],{"class":192},[159,185887,18787],{"class":165},[14,185889,38951],{},[151,185891,185893],{"className":53900,"code":185892,"language":53902,"meta":25,"style":25},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[49,185894,185895,185908],{"__ignoreMap":25},[159,185896,185897,185899,185902,185905],{"class":161,"line":162},[159,185898,174159],{"class":165},[159,185900,185901],{"class":192},"\"address\"",[159,185903,185904],{"class":165},"]     ",[159,185906,185907],{"class":1135},"# key不存在会报错\n",[159,185909,185910,185913,185915,185917],{"class":161,"line":176},[159,185911,185912],{"class":165},"student.get(",[159,185914,185901],{"class":192},[159,185916,2710],{"class":165},[159,185918,185919],{"class":1135},"# key不存在返回None\n",[14,185921,185922],{},"设置默认值：",[151,185924,185926],{"className":53900,"code":185925,"language":53902,"meta":25,"style":25},"print(student.get(\"address\", \"未知\"))\n",[49,185927,185928],{"__ignoreMap":25},[159,185929,185930,185932,185934,185936,185938,185941],{"class":161,"line":162},[159,185931,53937],{"class":1146},[159,185933,185883],{"class":165},[159,185935,185901],{"class":192},[159,185937,1939],{"class":165},[159,185939,185940],{"class":192},"\"未知\"",[159,185942,18787],{"class":165},[14,185944,185945],{},"新增和修改：",[151,185947,185949],{"className":53900,"code":185948,"language":53902,"meta":25,"style":25},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[49,185950,185951,185964],{"__ignoreMap":25},[159,185952,185953,185955,185957,185959,185961],{"class":161,"line":162},[159,185954,174159],{"class":165},[159,185956,16198],{"class":192},[159,185958,28061],{"class":165},[159,185960,189],{"class":1142},[159,185962,185963],{"class":1146}," 19\n",[159,185965,185966,185968,185970,185972,185974],{"class":161,"line":176},[159,185967,174159],{"class":165},[159,185969,185901],{"class":192},[159,185971,28061],{"class":165},[159,185973,189],{"class":1142},[159,185975,185976],{"class":192}," \"北京\"\n",[14,185978,185979],{},"删除：",[151,185981,185983],{"className":53900,"code":185982,"language":53902,"meta":25,"style":25},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[49,185984,185985,185998,186008],{"__ignoreMap":25},[159,185986,185987,185989,185991,185994,185996],{"class":161,"line":162},[159,185988,176658],{"class":165},[159,185990,189],{"class":1142},[159,185992,185993],{"class":165}," student.pop(",[159,185995,172772],{"class":192},[159,185997,1165],{"class":165},[159,185999,186000,186002,186004,186006],{"class":161,"line":176},[159,186001,184683],{"class":1142},[159,186003,173449],{"class":165},[159,186005,16198],{"class":192},[159,186007,4634],{"class":165},[159,186009,186010],{"class":161,"line":203},[159,186011,186012],{"class":165},"student.clear()\n",[37,186014,186016],{"id":186015},"_611-字典遍历","6.11 字典遍历",[14,186018,186019],{},"遍历 key：",[151,186021,186023],{"className":53900,"code":186022,"language":53902,"meta":25,"style":25},"for key in student:\n    print(key, student[key])\n",[49,186024,186025,186037],{"__ignoreMap":25},[159,186026,186027,186029,186032,186034],{"class":161,"line":162},[159,186028,26657],{"class":1142},[159,186030,186031],{"class":165}," key ",[159,186033,49566],{"class":1142},[159,186035,186036],{"class":165}," student:\n",[159,186038,186039,186041],{"class":161,"line":176},[159,186040,54819],{"class":1146},[159,186042,186043],{"class":165},"(key, student[key])\n",[14,186045,186046],{},"遍历 value：",[151,186048,186050],{"className":53900,"code":186049,"language":53902,"meta":25,"style":25},"for value in student.values():\n    print(value)\n",[49,186051,186052,186064],{"__ignoreMap":25},[159,186053,186054,186056,186059,186061],{"class":161,"line":162},[159,186055,26657],{"class":1142},[159,186057,186058],{"class":165}," value ",[159,186060,49566],{"class":1142},[159,186062,186063],{"class":165}," student.values():\n",[159,186065,186066,186068],{"class":161,"line":176},[159,186067,54819],{"class":1146},[159,186069,186070],{"class":165},"(value)\n",[14,186072,186073],{},"遍历 key 和 value：",[151,186075,186077],{"className":53900,"code":186076,"language":53902,"meta":25,"style":25},"for key, value in student.items():\n    print(key, value)\n",[49,186078,186079,186091],{"__ignoreMap":25},[159,186080,186081,186083,186086,186088],{"class":161,"line":162},[159,186082,26657],{"class":1142},[159,186084,186085],{"class":165}," key, value ",[159,186087,49566],{"class":1142},[159,186089,186090],{"class":165}," student.items():\n",[159,186092,186093,186095],{"class":161,"line":176},[159,186094,54819],{"class":1146},[159,186096,186097],{"class":165},"(key, value)\n",[37,186099,186101],{"id":186100},"_612-嵌套容器","6.12 嵌套容器",[14,186103,186104],{},"列表中保存字典，是项目中最常见的结构之一。",[151,186106,186108],{"className":53900,"code":186107,"language":53902,"meta":25,"style":25},"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",[49,186109,186110,186118,186146,186174,186202,186206,186210,186220],{"__ignoreMap":25},[159,186111,186112,186114,186116],{"class":161,"line":162},[159,186113,181016],{"class":165},[159,186115,189],{"class":1142},[159,186117,2303],{"class":165},[159,186119,186120,186122,186124,186126,186128,186130,186132,186134,186136,186138,186140,186142,186144],{"class":161,"line":176},[159,186121,169685],{"class":165},[159,186123,9722],{"class":192},[159,186125,1486],{"class":165},[159,186127,171188],{"class":192},[159,186129,1939],{"class":165},[159,186131,16198],{"class":192},[159,186133,1486],{"class":165},[159,186135,18723],{"class":1146},[159,186137,1939],{"class":165},[159,186139,172772],{"class":192},[159,186141,1486],{"class":165},[159,186143,24804],{"class":1146},[159,186145,28548],{"class":165},[159,186147,186148,186150,186152,186154,186156,186158,186160,186162,186164,186166,186168,186170,186172],{"class":161,"line":203},[159,186149,169685],{"class":165},[159,186151,9722],{"class":192},[159,186153,1486],{"class":165},[159,186155,172236],{"class":192},[159,186157,1939],{"class":165},[159,186159,16198],{"class":192},[159,186161,1486],{"class":165},[159,186163,24461],{"class":1146},[159,186165,1939],{"class":165},[159,186167,172772],{"class":192},[159,186169,1486],{"class":165},[159,186171,24640],{"class":1146},[159,186173,28548],{"class":165},[159,186175,186176,186178,186180,186182,186184,186186,186188,186190,186192,186194,186196,186198,186200],{"class":161,"line":223},[159,186177,169685],{"class":165},[159,186179,9722],{"class":192},[159,186181,1486],{"class":165},[159,186183,181031],{"class":192},[159,186185,1939],{"class":165},[159,186187,16198],{"class":192},[159,186189,1486],{"class":165},[159,186191,24509],{"class":1146},[159,186193,1939],{"class":165},[159,186195,172772],{"class":192},[159,186197,1486],{"class":165},[159,186199,24260],{"class":1146},[159,186201,28548],{"class":165},[159,186203,186204],{"class":161,"line":233},[159,186205,4634],{"class":165},[159,186207,186208],{"class":161,"line":239},[159,186209,590],{"emptyLinePlaceholder":589},[159,186211,186212,186214,186216,186218],{"class":161,"line":245},[159,186213,26657],{"class":1142},[159,186215,173437],{"class":165},[159,186217,49566],{"class":1142},[159,186219,173442],{"class":165},[159,186221,186222,186224,186226,186228,186231,186233],{"class":161,"line":251},[159,186223,54819],{"class":1146},[159,186225,185872],{"class":165},[159,186227,9722],{"class":192},[159,186229,186230],{"class":165},"], student[",[159,186232,172772],{"class":192},[159,186234,28275],{"class":165},[14,186236,186237],{},"统计平均分：",[151,186239,186241],{"className":53900,"code":186240,"language":53902,"meta":25,"style":25},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[49,186242,186243,186251,186255,186265,186277,186281,186296],{"__ignoreMap":25},[159,186244,186245,186247,186249],{"class":161,"line":162},[159,186246,178560],{"class":165},[159,186248,189],{"class":1142},[159,186250,3785],{"class":1146},[159,186252,186253],{"class":161,"line":176},[159,186254,590],{"emptyLinePlaceholder":589},[159,186256,186257,186259,186261,186263],{"class":161,"line":203},[159,186258,26657],{"class":1142},[159,186260,173437],{"class":165},[159,186262,49566],{"class":1142},[159,186264,173442],{"class":165},[159,186266,186267,186269,186271,186273,186275],{"class":161,"line":223},[159,186268,180607],{"class":165},[159,186270,33073],{"class":1142},[159,186272,173449],{"class":165},[159,186274,172772],{"class":192},[159,186276,4634],{"class":165},[159,186278,186279],{"class":161,"line":233},[159,186280,590],{"emptyLinePlaceholder":589},[159,186282,186283,186285,186287,186289,186291,186293],{"class":161,"line":239},[159,186284,185074],{"class":165},[159,186286,189],{"class":1142},[159,186288,185079],{"class":165},[159,186290,13083],{"class":1142},[159,186292,30942],{"class":1146},[159,186294,186295],{"class":165},"(students)\n",[159,186297,186298,186300,186302,186304,186306,186308,186310,186312,186314,186316],{"class":161,"line":245},[159,186299,53937],{"class":1146},[159,186301,1159],{"class":165},[159,186303,23931],{"class":1142},[159,186305,185097],{"class":192},[159,186307,24721],{"class":1146},[159,186309,185102],{"class":165},[159,186311,178459],{"class":1142},[159,186313,886],{"class":1146},[159,186315,24115],{"class":192},[159,186317,1165],{"class":165},[14,186319,186320],{},"查找学生：",[151,186322,186324],{"className":53900,"code":186323,"language":53902,"meta":25,"style":25},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[49,186325,186326,186341,186345,186355,186369,186375,186379,186385],{"__ignoreMap":25},[159,186327,186328,186330,186332,186334,186336,186339],{"class":161,"line":162},[159,186329,132878],{"class":165},[159,186331,189],{"class":1142},[159,186333,7625],{"class":1146},[159,186335,1159],{"class":165},[159,186337,186338],{"class":192},"\"请输入学生姓名:\"",[159,186340,1165],{"class":165},[159,186342,186343],{"class":161,"line":176},[159,186344,590],{"emptyLinePlaceholder":589},[159,186346,186347,186349,186351,186353],{"class":161,"line":203},[159,186348,26657],{"class":1142},[159,186350,173437],{"class":165},[159,186352,49566],{"class":1142},[159,186354,173442],{"class":165},[159,186356,186357,186359,186361,186363,186365,186367],{"class":161,"line":223},[159,186358,26732],{"class":1142},[159,186360,173449],{"class":165},[159,186362,9722],{"class":192},[159,186364,28061],{"class":165},[159,186366,26581],{"class":1142},[159,186368,181732],{"class":165},[159,186370,186371,186373],{"class":161,"line":233},[159,186372,55969],{"class":1146},[159,186374,171342],{"class":165},[159,186376,186377],{"class":161,"line":239},[159,186378,55146],{"class":1142},[159,186380,186381,186383],{"class":161,"line":245},[159,186382,25364],{"class":1142},[159,186384,27364],{"class":165},[159,186386,186387,186389,186391,186394],{"class":161,"line":251},[159,186388,54819],{"class":1146},[159,186390,1159],{"class":165},[159,186392,186393],{"class":192},"\"没有找到\"",[159,186395,1165],{"class":165},[37,186397,186399],{"id":186398},"_613-容器通用操作","6.13 容器通用操作",[14,186401,186402],{},"长度：",[151,186404,186406],{"className":53900,"code":186405,"language":53902,"meta":25,"style":25},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[49,186407,186408,186427,186437],{"__ignoreMap":25},[159,186409,186410,186412,186415,186417,186419,186421,186423,186425],{"class":161,"line":162},[159,186411,30969],{"class":1146},[159,186413,186414],{"class":165},"([",[159,186416,4932],{"class":1146},[159,186418,1939],{"class":165},[159,186420,11034],{"class":1146},[159,186422,1939],{"class":165},[159,186424,23949],{"class":1146},[159,186426,28275],{"class":165},[159,186428,186429,186431,186433,186435],{"class":161,"line":176},[159,186430,30969],{"class":1146},[159,186432,1159],{"class":165},[159,186434,177180],{"class":192},[159,186436,1165],{"class":165},[159,186438,186439,186441,186444,186446,186448,186450],{"class":161,"line":203},[159,186440,30969],{"class":1146},[159,186442,186443],{"class":165},"({",[159,186445,9722],{"class":192},[159,186447,1486],{"class":165},[159,186449,171188],{"class":192},[159,186451,186452],{"class":165},"})\n",[14,186454,186455],{},"最大最小：",[151,186457,186459],{"className":53900,"code":186458,"language":53902,"meta":25,"style":25},"max([1, 2, 3])\nmin([1, 2, 3])\n",[49,186460,186461,186479],{"__ignoreMap":25},[159,186462,186463,186465,186467,186469,186471,186473,186475,186477],{"class":161,"line":162},[159,186464,29630],{"class":1146},[159,186466,186414],{"class":165},[159,186468,4932],{"class":1146},[159,186470,1939],{"class":165},[159,186472,11034],{"class":1146},[159,186474,1939],{"class":165},[159,186476,23949],{"class":1146},[159,186478,28275],{"class":165},[159,186480,186481,186484,186486,186488,186490,186492,186494,186496],{"class":161,"line":176},[159,186482,186483],{"class":1146},"min",[159,186485,186414],{"class":165},[159,186487,4932],{"class":1146},[159,186489,1939],{"class":165},[159,186491,11034],{"class":1146},[159,186493,1939],{"class":165},[159,186495,23949],{"class":1146},[159,186497,28275],{"class":165},[14,186499,186500],{},"求和：",[151,186502,186504],{"className":53900,"code":186503,"language":53902,"meta":25,"style":25},"sum([1, 2, 3])\n",[49,186505,186506],{"__ignoreMap":25},[159,186507,186508,186511,186513,186515,186517,186519,186521,186523],{"class":161,"line":162},[159,186509,186510],{"class":1146},"sum",[159,186512,186414],{"class":165},[159,186514,4932],{"class":1146},[159,186516,1939],{"class":165},[159,186518,11034],{"class":1146},[159,186520,1939],{"class":165},[159,186522,23949],{"class":1146},[159,186524,28275],{"class":165},[14,186526,184771],{},[151,186528,186530],{"className":53900,"code":186529,"language":53902,"meta":25,"style":25},"sorted([3, 1, 2])\n",[49,186531,186532],{"__ignoreMap":25},[159,186533,186534,186537,186539,186541,186543,186545,186547,186549],{"class":161,"line":162},[159,186535,186536],{"class":1146},"sorted",[159,186538,186414],{"class":165},[159,186540,23949],{"class":1146},[159,186542,1939],{"class":165},[159,186544,4932],{"class":1146},[159,186546,1939],{"class":165},[159,186548,11034],{"class":1146},[159,186550,28275],{"class":165},[14,186552,186553],{},"类型转换：",[151,186555,186557],{"className":53900,"code":186556,"language":53902,"meta":25,"style":25},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[49,186558,186559,186569,186587],{"__ignoreMap":25},[159,186560,186561,186563,186565,186567],{"class":161,"line":162},[159,186562,175370],{"class":1146},[159,186564,1159],{"class":165},[159,186566,177180],{"class":192},[159,186568,1165],{"class":165},[159,186570,186571,186573,186575,186577,186579,186581,186583,186585],{"class":161,"line":176},[159,186572,176565],{"class":1146},[159,186574,186414],{"class":165},[159,186576,4932],{"class":1146},[159,186578,1939],{"class":165},[159,186580,11034],{"class":1146},[159,186582,1939],{"class":165},[159,186584,23949],{"class":1146},[159,186586,28275],{"class":165},[159,186588,186589,186591,186593,186595,186597,186599,186601,186603,186605,186607],{"class":161,"line":203},[159,186590,176590],{"class":1146},[159,186592,186414],{"class":165},[159,186594,4932],{"class":1146},[159,186596,1939],{"class":165},[159,186598,4932],{"class":1146},[159,186600,1939],{"class":165},[159,186602,11034],{"class":1146},[159,186604,1939],{"class":165},[159,186606,23949],{"class":1146},[159,186608,28275],{"class":165},[14,186610,186611],{},"成员判断：",[151,186613,186615],{"className":53900,"code":186614,"language":53902,"meta":25,"style":25},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[49,186616,186617,186634,186658],{"__ignoreMap":25},[159,186618,186619,186621,186623,186626,186629,186632],{"class":161,"line":162},[159,186620,53937],{"class":1146},[159,186622,1159],{"class":165},[159,186624,186625],{"class":192},"\"a\"",[159,186627,186628],{"class":1142}," in",[159,186630,186631],{"class":192}," \"abc\"",[159,186633,1165],{"class":165},[159,186635,186636,186638,186640,186642,186644,186646,186648,186650,186652,186654,186656],{"class":161,"line":176},[159,186637,53937],{"class":1146},[159,186639,1159],{"class":165},[159,186641,4932],{"class":1146},[159,186643,186628],{"class":1142},[159,186645,4608],{"class":165},[159,186647,4932],{"class":1146},[159,186649,1939],{"class":165},[159,186651,11034],{"class":1146},[159,186653,1939],{"class":165},[159,186655,23949],{"class":1146},[159,186657,28275],{"class":165},[159,186659,186660,186662,186664,186666,186668,186670,186672,186674,186676],{"class":161,"line":203},[159,186661,53937],{"class":1146},[159,186663,1159],{"class":165},[159,186665,9722],{"class":192},[159,186667,186628],{"class":1142},[159,186669,28066],{"class":165},[159,186671,9722],{"class":192},[159,186673,1486],{"class":165},[159,186675,171188],{"class":192},[159,186677,186452],{"class":165},[37,186679,186681],{"id":186680},"_614-推导式","6.14 推导式",[14,186683,186684],{},"推导式用于快速生成容器。",[14,186686,186687],{},"列表推导式：",[151,186689,186691],{"className":53900,"code":186690,"language":53902,"meta":25,"style":25},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[49,186692,186693,186720],{"__ignoreMap":25},[159,186694,186695,186697,186699,186702,186704,186706,186708,186710,186712,186714,186716,186718],{"class":161,"line":162},[159,186696,185400],{"class":165},[159,186698,189],{"class":1142},[159,186700,186701],{"class":165}," [i ",[159,186703,26657],{"class":1142},[159,186705,1186],{"class":165},[159,186707,49566],{"class":1142},[159,186709,55961],{"class":1146},[159,186711,1159],{"class":165},[159,186713,4932],{"class":1146},[159,186715,1939],{"class":165},[159,186717,7907],{"class":1146},[159,186719,118600],{"class":165},[159,186721,186722,186724],{"class":161,"line":176},[159,186723,53937],{"class":1146},[159,186725,185616],{"class":165},[14,186727,186728],{},"带条件：",[151,186730,186732],{"className":53900,"code":186731,"language":53902,"meta":25,"style":25},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[49,186733,186734,186775],{"__ignoreMap":25},[159,186735,186736,186739,186741,186743,186745,186747,186749,186751,186753,186755,186757,186759,186761,186763,186765,186767,186769,186771,186773],{"class":161,"line":162},[159,186737,186738],{"class":165},"even_nums ",[159,186740,189],{"class":1142},[159,186742,186701],{"class":165},[159,186744,26657],{"class":1142},[159,186746,1186],{"class":165},[159,186748,49566],{"class":1142},[159,186750,55961],{"class":1146},[159,186752,1159],{"class":165},[159,186754,4932],{"class":1146},[159,186756,1939],{"class":165},[159,186758,24194],{"class":1146},[159,186760,2710],{"class":165},[159,186762,18445],{"class":1142},[159,186764,1186],{"class":165},[159,186766,1662],{"class":1142},[159,186768,38320],{"class":1146},[159,186770,122859],{"class":1142},[159,186772,1259],{"class":1146},[159,186774,4634],{"class":165},[159,186776,186777,186779],{"class":161,"line":176},[159,186778,53937],{"class":1146},[159,186780,186781],{"class":165},"(even_nums)\n",[14,186783,186784],{},"字典推导式：",[151,186786,186788],{"className":53900,"code":186787,"language":53902,"meta":25,"style":25},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[49,186789,186790,186824],{"__ignoreMap":25},[159,186791,186792,186795,186797,186800,186802,186804,186807,186809,186811,186813,186815,186817,186819,186821],{"class":161,"line":162},[159,186793,186794],{"class":165},"squares ",[159,186796,189],{"class":1142},[159,186798,186799],{"class":165}," {i: i ",[159,186801,34236],{"class":1142},[159,186803,38320],{"class":1146},[159,186805,186806],{"class":1142}," for",[159,186808,1186],{"class":165},[159,186810,49566],{"class":1142},[159,186812,55961],{"class":1146},[159,186814,1159],{"class":165},[159,186816,4932],{"class":1146},[159,186818,1939],{"class":165},[159,186820,7907],{"class":1146},[159,186822,186823],{"class":165},")}\n",[159,186825,186826,186828],{"class":161,"line":176},[159,186827,53937],{"class":1146},[159,186829,186830],{"class":165},"(squares)\n",[14,186832,186833],{},"集合推导式：",[151,186835,186837],{"className":53900,"code":186836,"language":53902,"meta":25,"style":25},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[49,186838,186839,186860],{"__ignoreMap":25},[159,186840,186841,186844,186846,186849,186851,186853,186855,186858],{"class":161,"line":162},[159,186842,186843],{"class":165},"chars ",[159,186845,189],{"class":1142},[159,186847,186848],{"class":165}," {ch ",[159,186850,26657],{"class":1142},[159,186852,180992],{"class":165},[159,186854,49566],{"class":1142},[159,186856,186857],{"class":192}," \"hello\"",[159,186859,15685],{"class":165},[159,186861,186862,186864],{"class":161,"line":176},[159,186863,53937],{"class":1146},[159,186865,186866],{"class":165},"(chars)\n",[14,186868,186869],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[37,186871,186873],{"id":186872},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[151,186875,186877],{"className":53900,"code":186876,"language":53902,"meta":25,"style":25},"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",[49,186878,186879,186887,186907,186927,186947,186967,186971,186975,186983,186997,187006,187010,187020,187032,187036,187056,187065,187069,187085,187090,187094,187108,187112,187134,187170],{"__ignoreMap":25},[159,186880,186881,186883,186885],{"class":161,"line":162},[159,186882,181016],{"class":165},[159,186884,189],{"class":1142},[159,186886,2303],{"class":165},[159,186888,186889,186891,186893,186895,186897,186899,186901,186903,186905],{"class":161,"line":176},[159,186890,169685],{"class":165},[159,186892,9722],{"class":192},[159,186894,1486],{"class":165},[159,186896,171188],{"class":192},[159,186898,1939],{"class":165},[159,186900,172772],{"class":192},[159,186902,1486],{"class":165},[159,186904,24804],{"class":1146},[159,186906,28548],{"class":165},[159,186908,186909,186911,186913,186915,186917,186919,186921,186923,186925],{"class":161,"line":203},[159,186910,169685],{"class":165},[159,186912,9722],{"class":192},[159,186914,1486],{"class":165},[159,186916,172236],{"class":192},[159,186918,1939],{"class":165},[159,186920,172772],{"class":192},[159,186922,1486],{"class":165},[159,186924,24640],{"class":1146},[159,186926,28548],{"class":165},[159,186928,186929,186931,186933,186935,186937,186939,186941,186943,186945],{"class":161,"line":223},[159,186930,169685],{"class":165},[159,186932,9722],{"class":192},[159,186934,1486],{"class":165},[159,186936,181031],{"class":192},[159,186938,1939],{"class":165},[159,186940,172772],{"class":192},[159,186942,1486],{"class":165},[159,186944,24260],{"class":1146},[159,186946,28548],{"class":165},[159,186948,186949,186951,186953,186955,186957,186959,186961,186963,186965],{"class":161,"line":233},[159,186950,169685],{"class":165},[159,186952,9722],{"class":192},[159,186954,1486],{"class":165},[159,186956,184610],{"class":192},[159,186958,1939],{"class":165},[159,186960,172772],{"class":192},[159,186962,1486],{"class":165},[159,186964,24708],{"class":1146},[159,186966,28548],{"class":165},[159,186968,186969],{"class":161,"line":239},[159,186970,4634],{"class":165},[159,186972,186973],{"class":161,"line":245},[159,186974,590],{"emptyLinePlaceholder":589},[159,186976,186977,186979,186981],{"class":161,"line":251},[159,186978,178560],{"class":165},[159,186980,189],{"class":1142},[159,186982,3785],{"class":1146},[159,186984,186985,186988,186990,186993,186995],{"class":161,"line":261},[159,186986,186987],{"class":165},"max_student ",[159,186989,189],{"class":1142},[159,186991,186992],{"class":165}," students[",[159,186994,1489],{"class":1146},[159,186996,4634],{"class":165},[159,186998,186999,187002,187004],{"class":161,"line":603},[159,187000,187001],{"class":165},"passed ",[159,187003,189],{"class":1142},[159,187005,16884],{"class":165},[159,187007,187008],{"class":161,"line":621},[159,187009,590],{"emptyLinePlaceholder":589},[159,187011,187012,187014,187016,187018],{"class":161,"line":634},[159,187013,26657],{"class":1142},[159,187015,173437],{"class":165},[159,187017,49566],{"class":1142},[159,187019,173442],{"class":165},[159,187021,187022,187024,187026,187028,187030],{"class":161,"line":640},[159,187023,180607],{"class":165},[159,187025,33073],{"class":1142},[159,187027,173449],{"class":165},[159,187029,172772],{"class":192},[159,187031,4634],{"class":165},[159,187033,187034],{"class":161,"line":1075},[159,187035,590],{"emptyLinePlaceholder":589},[159,187037,187038,187040,187042,187044,187046,187048,187051,187053],{"class":161,"line":1081},[159,187039,26732],{"class":1142},[159,187041,173449],{"class":165},[159,187043,172772],{"class":192},[159,187045,28061],{"class":165},[159,187047,6760],{"class":1142},[159,187049,187050],{"class":165}," max_student[",[159,187052,172772],{"class":192},[159,187054,187055],{"class":165},"]:\n",[159,187057,187058,187061,187063],{"class":161,"line":1091},[159,187059,187060],{"class":165},"        max_student ",[159,187062,189],{"class":1142},[159,187064,173465],{"class":165},[159,187066,187067],{"class":161,"line":1100},[159,187068,590],{"emptyLinePlaceholder":589},[159,187070,187071,187073,187075,187077,187079,187081,187083],{"class":161,"line":1123},[159,187072,26732],{"class":1142},[159,187074,173449],{"class":165},[159,187076,172772],{"class":192},[159,187078,28061],{"class":165},[159,187080,3822],{"class":1142},[159,187082,179137],{"class":1146},[159,187084,27364],{"class":165},[159,187086,187087],{"class":161,"line":1132},[159,187088,187089],{"class":165},"        passed.append(student)\n",[159,187091,187092],{"class":161,"line":1139},[159,187093,590],{"emptyLinePlaceholder":589},[159,187095,187096,187098,187100,187102,187104,187106],{"class":161,"line":1168},[159,187097,185074],{"class":165},[159,187099,189],{"class":1142},[159,187101,185079],{"class":165},[159,187103,13083],{"class":1142},[159,187105,30942],{"class":1146},[159,187107,186295],{"class":165},[159,187109,187110],{"class":161,"line":1174},[159,187111,590],{"emptyLinePlaceholder":589},[159,187113,187114,187116,187118,187120,187122,187124,187126,187128,187130,187132],{"class":161,"line":1180},[159,187115,53937],{"class":1146},[159,187117,1159],{"class":165},[159,187119,23931],{"class":1142},[159,187121,185097],{"class":192},[159,187123,24721],{"class":1146},[159,187125,185102],{"class":165},[159,187127,178459],{"class":1142},[159,187129,886],{"class":1146},[159,187131,24115],{"class":192},[159,187133,1165],{"class":165},[159,187135,187136,187138,187140,187142,187145,187147,187150,187152,187154,187156,187158,187160,187162,187164,187166,187168],{"class":161,"line":1194},[159,187137,53937],{"class":1146},[159,187139,1159],{"class":165},[159,187141,23931],{"class":1142},[159,187143,187144],{"class":192},"\"最高分学生:",[159,187146,24721],{"class":1146},[159,187148,187149],{"class":165},"max_student[",[159,187151,174182],{"class":192},[159,187153,18375],{"class":165},[159,187155,886],{"class":1146},[159,187157,28066],{"class":1146},[159,187159,187149],{"class":165},[159,187161,174220],{"class":192},[159,187163,18375],{"class":165},[159,187165,886],{"class":1146},[159,187167,24115],{"class":192},[159,187169,1165],{"class":165},[159,187171,187172,187174,187176,187178,187181,187184,187187,187189,187191],{"class":161,"line":1200},[159,187173,53937],{"class":1146},[159,187175,1159],{"class":165},[159,187177,23931],{"class":1142},[159,187179,187180],{"class":192},"\"及格人数:",[159,187182,187183],{"class":1146},"{len",[159,187185,187186],{"class":165},"(passed)",[159,187188,886],{"class":1146},[159,187190,24115],{"class":192},[159,187192,1165],{"class":165},[37,187194,187196],{"id":187195},"_616-易错点","6.16 易错点",[134,187198,187199,187202,187205,187208,187214,187223],{},[106,187200,187201],{},"列表可变，元组和字符串不可变。",[106,187203,187204],{},"切片结束位置不包含。",[106,187206,187207],{},"字典通过 key 取值，不是通过索引。",[106,187209,187210,187211,51907],{},"空集合要用 ",[49,187212,187213],{},"set()",[106,187215,125666,187216,187219,187220,51907],{},[49,187217,187218],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[49,187221,187222],{},"get()",[106,187224,187225],{},"嵌套容器要先看清楚每一层是什么类型。",[37,187227,187229],{"id":187228},"_617-本章练习","6.17 本章练习",[134,187231,187232,187235,187238,187241,187244],{},[106,187233,187234],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[106,187236,187237],{},"输入一句话，统计每个字符出现次数。",[106,187239,187240],{},"使用集合去除列表中的重复元素。",[106,187242,187243],{},"使用字典保存一个学生的信息，并实现修改成绩。",[106,187245,187246],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1468,187248,187249],{},"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":25,"searchDepth":176,"depth":176,"links":187251},[187252,187253,187254,187255,187256,187257,187258,187259,187260,187261,187262,187263,187264,187265,187266,187267,187268],{"id":184232,"depth":176,"text":184233},{"id":184349,"depth":176,"text":184350},{"id":184439,"depth":176,"text":184440},{"id":184563,"depth":176,"text":184564},{"id":184926,"depth":176,"text":184927},{"id":185113,"depth":176,"text":185114},{"id":185232,"depth":176,"text":185233},{"id":185374,"depth":176,"text":185375},{"id":185561,"depth":176,"text":185562},{"id":185805,"depth":176,"text":185806},{"id":186015,"depth":176,"text":186016},{"id":186100,"depth":176,"text":186101},{"id":186398,"depth":176,"text":186399},{"id":186680,"depth":176,"text":186681},{"id":186872,"depth":176,"text":186873},{"id":187195,"depth":176,"text":187196},{"id":187228,"depth":176,"text":187229},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":184224,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":187275,"title":187276,"body":187277,"description":23809,"extension":23810,"meta":189449,"navigation":589,"path":189450,"seo":189451,"stem":189452,"__hash__":189453},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":187278,"toc":189424},[187279,187282,187286,187289,187369,187372,187393,187396,187400,187403,187465,187468,187485,187489,187492,187537,187539,187547,187551,187554,187636,187639,187642,187667,187670,187693,187697,187700,187702,187764,187767,187769,187820,187824,187828,187834,187939,187943,187949,188020,188024,188027,188095,188098,188178,188182,188188,188224,188227,188230,188340,188346,188350,188353,188425,188428,188432,188436,188441,188503,188507,188512,188580,188584,188589,188705,188709,188712,188792,188795,188799,188802,188906,188908,188923,188926,188930,189068,189076,189080,189082,189093,189095,189353,189357,189389,189393,189421],[10,187280,187276],{"id":187281},"_7-函数进阶",[37,187283,187285],{"id":187284},"_71-多返回值","7.1 多返回值",[14,187287,187288],{},"Python 函数可以返回多个值，本质上返回的是元组。",[151,187290,187292],{"className":53900,"code":187291,"language":53902,"meta":25,"style":25},"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",[49,187293,187294,187303,187311,187319,187328,187335,187339,187343,187352,187358],{"__ignoreMap":25},[159,187295,187296,187298,187301],{"class":161,"line":162},[159,187297,55465],{"class":1142},[159,187299,187300],{"class":185}," get_info",[159,187302,55471],{"class":165},[159,187304,187305,187307,187309],{"class":161,"line":176},[159,187306,173670],{"class":165},[159,187308,189],{"class":1142},[159,187310,170653],{"class":192},[159,187312,187313,187315,187317],{"class":161,"line":203},[159,187314,173686],{"class":165},[159,187316,189],{"class":1142},[159,187318,167851],{"class":1146},[159,187320,187321,187323,187325],{"class":161,"line":223},[159,187322,173701],{"class":165},[159,187324,189],{"class":1142},[159,187326,187327],{"class":1146}," 95\n",[159,187329,187330,187332],{"class":161,"line":233},[159,187331,27711],{"class":1142},[159,187333,187334],{"class":165}," name, age, score\n",[159,187336,187337],{"class":161,"line":239},[159,187338,590],{"emptyLinePlaceholder":589},[159,187340,187341],{"class":161,"line":245},[159,187342,590],{"emptyLinePlaceholder":589},[159,187344,187345,187347,187349],{"class":161,"line":251},[159,187346,182606],{"class":165},[159,187348,189],{"class":1142},[159,187350,187351],{"class":165}," get_info()\n",[159,187353,187354,187356],{"class":161,"line":261},[159,187355,53937],{"class":1146},[159,187357,23721],{"class":165},[159,187359,187360,187362,187364,187366],{"class":161,"line":603},[159,187361,53937],{"class":1146},[159,187363,1159],{"class":165},[159,187365,124407],{"class":1146},[159,187367,187368],{"class":165},"(result))\n",[14,187370,187371],{},"可以直接解包：",[151,187373,187375],{"className":53900,"code":187374,"language":53902,"meta":25,"style":25},"name, age, score = get_info()\nprint(name, age, score)\n",[49,187376,187377,187386],{"__ignoreMap":25},[159,187378,187379,187382,187384],{"class":161,"line":162},[159,187380,187381],{"class":165},"name, age, score ",[159,187383,189],{"class":1142},[159,187385,187351],{"class":165},[159,187387,187388,187390],{"class":161,"line":176},[159,187389,53937],{"class":1146},[159,187391,187392],{"class":165},"(name, age, score)\n",[14,187394,187395],{},"返回多个值适合函数需要同时给出多个结果时使用。",[37,187397,187399],{"id":187398},"_72-位置参数","7.2 位置参数",[14,187401,187402],{},"位置参数按顺序传递。",[151,187404,187406],{"className":53900,"code":187405,"language":53902,"meta":25,"style":25},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[49,187407,187408,187416,187444,187448,187452],{"__ignoreMap":25},[159,187409,187410,187412,187414],{"class":161,"line":162},[159,187411,55465],{"class":1142},[159,187413,170672],{"class":185},[159,187415,170675],{"class":165},[159,187417,187418,187420,187422,187424,187426,187428,187430,187432,187434,187436,187438,187440,187442],{"class":161,"line":176},[159,187419,54819],{"class":1146},[159,187421,1159],{"class":165},[159,187423,23931],{"class":1142},[159,187425,170686],{"class":192},[159,187427,24721],{"class":1146},[159,187429,101110],{"class":165},[159,187431,886],{"class":1146},[159,187433,170695],{"class":192},[159,187435,24721],{"class":1146},[159,187437,17307],{"class":165},[159,187439,886],{"class":1146},[159,187441,170704],{"class":192},[159,187443,1165],{"class":165},[159,187445,187446],{"class":161,"line":203},[159,187447,590],{"emptyLinePlaceholder":589},[159,187449,187450],{"class":161,"line":223},[159,187451,590],{"emptyLinePlaceholder":589},[159,187453,187454,187457,187459,187461,187463],{"class":161,"line":233},[159,187455,187456],{"class":165},"introduce(",[159,187458,171188],{"class":192},[159,187460,1939],{"class":165},[159,187462,18723],{"class":1146},[159,187464,1165],{"class":165},[14,187466,187467],{},"顺序错了就会得到错误含义：",[151,187469,187471],{"className":53900,"code":187470,"language":53902,"meta":25,"style":25},"introduce(18, \"小明\")\n",[49,187472,187473],{"__ignoreMap":25},[159,187474,187475,187477,187479,187481,187483],{"class":161,"line":162},[159,187476,187456],{"class":165},[159,187478,18723],{"class":1146},[159,187480,1939],{"class":165},[159,187482,171188],{"class":192},[159,187484,1165],{"class":165},[37,187486,187488],{"id":187487},"_73-关键字参数","7.3 关键字参数",[14,187490,187491],{},"关键字参数按参数名传递。",[151,187493,187495],{"className":53900,"code":187494,"language":53902,"meta":25,"style":25},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[49,187496,187497,187517],{"__ignoreMap":25},[159,187498,187499,187501,187503,187505,187507,187509,187511,187513,187515],{"class":161,"line":162},[159,187500,187456],{"class":165},[159,187502,101110],{"class":8765},[159,187504,189],{"class":1142},[159,187506,171188],{"class":192},[159,187508,1939],{"class":165},[159,187510,17307],{"class":8765},[159,187512,189],{"class":1142},[159,187514,18723],{"class":1146},[159,187516,1165],{"class":165},[159,187518,187519,187521,187523,187525,187527,187529,187531,187533,187535],{"class":161,"line":176},[159,187520,187456],{"class":165},[159,187522,17307],{"class":8765},[159,187524,189],{"class":1142},[159,187526,18723],{"class":1146},[159,187528,1939],{"class":165},[159,187530,101110],{"class":8765},[159,187532,189],{"class":1142},[159,187534,171188],{"class":192},[159,187536,1165],{"class":165},[14,187538,139234],{},[134,187540,187541,187544],{},[106,187542,187543],{},"顺序不容易错。",[106,187545,187546],{},"调用时可读性更强。",[37,187548,187550],{"id":187549},"_74-默认参数","7.4 默认参数",[14,187552,187553],{},"默认参数给参数设置默认值。",[151,187555,187557],{"className":53900,"code":187556,"language":53902,"meta":25,"style":25},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[49,187558,187559,187575,187605,187609,187613,187623],{"__ignoreMap":25},[159,187560,187561,187563,187565,187568,187570,187573],{"class":161,"line":162},[159,187562,55465],{"class":1142},[159,187564,143393],{"class":185},[159,187566,187567],{"class":165},"(host, port",[159,187569,189],{"class":1142},[159,187571,187572],{"class":1146},"3306",[159,187574,54307],{"class":165},[159,187576,187577,187579,187581,187583,187586,187588,187590,187592,187594,187596,187599,187601,187603],{"class":161,"line":176},[159,187578,54819],{"class":1146},[159,187580,1159],{"class":165},[159,187582,23931],{"class":1142},[159,187584,187585],{"class":192},"\"连接",[159,187587,24721],{"class":1146},[159,187589,50918],{"class":165},[159,187591,886],{"class":1146},[159,187593,20934],{"class":192},[159,187595,24721],{"class":1146},[159,187597,187598],{"class":165},"port",[159,187600,886],{"class":1146},[159,187602,24115],{"class":192},[159,187604,1165],{"class":165},[159,187606,187607],{"class":161,"line":203},[159,187608,590],{"emptyLinePlaceholder":589},[159,187610,187611],{"class":161,"line":223},[159,187612,590],{"emptyLinePlaceholder":589},[159,187614,187615,187618,187621],{"class":161,"line":233},[159,187616,187617],{"class":165},"connect(",[159,187619,187620],{"class":192},"\"localhost\"",[159,187622,1165],{"class":165},[159,187624,187625,187627,187629,187631,187634],{"class":161,"line":239},[159,187626,187617],{"class":165},[159,187628,187620],{"class":192},[159,187630,1939],{"class":165},[159,187632,187633],{"class":1146},"6379",[159,187635,1165],{"class":165},[14,187637,187638],{},"注意：默认参数必须放在非默认参数后面。",[14,187640,187641],{},"错误：",[151,187643,187645],{"className":53900,"code":187644,"language":53902,"meta":25,"style":25},"def connect(port=3306, host):\n    pass\n",[49,187646,187647,187663],{"__ignoreMap":25},[159,187648,187649,187651,187653,187656,187658,187660],{"class":161,"line":162},[159,187650,55465],{"class":1142},[159,187652,143393],{"class":185},[159,187654,187655],{"class":165},"(port",[159,187657,189],{"class":1142},[159,187659,187572],{"class":1146},[159,187661,187662],{"class":165},", host):\n",[159,187664,187665],{"class":161,"line":176},[159,187666,170837],{"class":1142},[14,187668,187669],{},"正确：",[151,187671,187673],{"className":53900,"code":187672,"language":53902,"meta":25,"style":25},"def connect(host, port=3306):\n    pass\n",[49,187674,187675,187689],{"__ignoreMap":25},[159,187676,187677,187679,187681,187683,187685,187687],{"class":161,"line":162},[159,187678,55465],{"class":1142},[159,187680,143393],{"class":185},[159,187682,187567],{"class":165},[159,187684,189],{"class":1142},[159,187686,187572],{"class":1146},[159,187688,54307],{"class":165},[159,187690,187691],{"class":161,"line":176},[159,187692,170837],{"class":1142},[37,187694,187696],{"id":187695},"_75-默认参数的坑","7.5 默认参数的坑",[14,187698,187699],{},"不要使用可变对象作为默认参数。",[14,187701,178923],{},[151,187703,187705],{"className":53900,"code":187704,"language":53902,"meta":25,"style":25},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[49,187706,187707,187722,187727,187734,187738,187742,187753],{"__ignoreMap":25},[159,187708,187709,187711,187714,187717,187719],{"class":161,"line":162},[159,187710,55465],{"class":1142},[159,187712,187713],{"class":185}," add_item",[159,187715,187716],{"class":165},"(item, items",[159,187718,189],{"class":1142},[159,187720,187721],{"class":165},"[]):\n",[159,187723,187724],{"class":161,"line":176},[159,187725,187726],{"class":165},"    items.append(item)\n",[159,187728,187729,187731],{"class":161,"line":203},[159,187730,27711],{"class":1142},[159,187732,187733],{"class":165}," items\n",[159,187735,187736],{"class":161,"line":223},[159,187737,590],{"emptyLinePlaceholder":589},[159,187739,187740],{"class":161,"line":233},[159,187741,590],{"emptyLinePlaceholder":589},[159,187743,187744,187746,187749,187751],{"class":161,"line":239},[159,187745,53937],{"class":1146},[159,187747,187748],{"class":165},"(add_item(",[159,187750,186625],{"class":192},[159,187752,18787],{"class":165},[159,187754,187755,187757,187759,187762],{"class":161,"line":245},[159,187756,53937],{"class":1146},[159,187758,187748],{"class":165},[159,187760,187761],{"class":192},"\"b\"",[159,187763,18787],{"class":165},[14,187765,187766],{},"第二次调用会复用第一次的列表。",[14,187768,177188],{},[151,187770,187772],{"className":53900,"code":187771,"language":53902,"meta":25,"style":25},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[49,187773,187774,187788,187801,187810,187814],{"__ignoreMap":25},[159,187775,187776,187778,187780,187782,187784,187786],{"class":161,"line":162},[159,187777,55465],{"class":1142},[159,187779,187713],{"class":185},[159,187781,187716],{"class":165},[159,187783,189],{"class":1142},[159,187785,116986],{"class":1146},[159,187787,54307],{"class":165},[159,187789,187790,187792,187795,187797,187799],{"class":161,"line":176},[159,187791,26732],{"class":1142},[159,187793,187794],{"class":165}," items ",[159,187796,62322],{"class":1142},[159,187798,62328],{"class":1146},[159,187800,27364],{"class":165},[159,187802,187803,187806,187808],{"class":161,"line":203},[159,187804,187805],{"class":165},"        items ",[159,187807,189],{"class":1142},[159,187809,16884],{"class":165},[159,187811,187812],{"class":161,"line":223},[159,187813,187726],{"class":165},[159,187815,187816,187818],{"class":161,"line":233},[159,187817,27711],{"class":1142},[159,187819,187733],{"class":165},[37,187821,187823],{"id":187822},"_76-不定长参数","7.6 不定长参数",[42,187825,187827],{"id":187826},"_761-args","7.6.1 *args",[14,187829,187830,187833],{},[49,187831,187832],{},"*args"," 接收任意数量的位置参数，得到元组。",[151,187835,187837],{"className":53900,"code":187836,"language":53902,"meta":25,"style":25},"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",[49,187838,187839,187852,187860,187871,187880,187886,187890,187894,187913],{"__ignoreMap":25},[159,187840,187841,187843,187845,187847,187849],{"class":161,"line":162},[159,187842,55465],{"class":1142},[159,187844,28826],{"class":185},[159,187846,1159],{"class":165},[159,187848,4777],{"class":1142},[159,187850,187851],{"class":165},"args):\n",[159,187853,187854,187856,187858],{"class":161,"line":176},[159,187855,180607],{"class":165},[159,187857,189],{"class":1142},[159,187859,3785],{"class":1146},[159,187861,187862,187864,187866,187868],{"class":161,"line":203},[159,187863,11677],{"class":1142},[159,187865,177480],{"class":165},[159,187867,49566],{"class":1142},[159,187869,187870],{"class":165}," args:\n",[159,187872,187873,187875,187877],{"class":161,"line":223},[159,187874,181282],{"class":165},[159,187876,33073],{"class":1142},[159,187878,187879],{"class":165}," num\n",[159,187881,187882,187884],{"class":161,"line":233},[159,187883,27711],{"class":1142},[159,187885,183587],{"class":165},[159,187887,187888],{"class":161,"line":239},[159,187889,590],{"emptyLinePlaceholder":589},[159,187891,187892],{"class":161,"line":245},[159,187893,590],{"emptyLinePlaceholder":589},[159,187895,187896,187898,187901,187903,187905,187907,187909,187911],{"class":161,"line":251},[159,187897,53937],{"class":1146},[159,187899,187900],{"class":165},"(add(",[159,187902,4932],{"class":1146},[159,187904,1939],{"class":165},[159,187906,11034],{"class":1146},[159,187908,1939],{"class":165},[159,187910,23949],{"class":1146},[159,187912,18787],{"class":165},[159,187914,187915,187917,187919,187921,187923,187925,187927,187929,187931,187933,187935,187937],{"class":161,"line":261},[159,187916,53937],{"class":1146},[159,187918,187900],{"class":165},[159,187920,4932],{"class":1146},[159,187922,1939],{"class":165},[159,187924,11034],{"class":1146},[159,187926,1939],{"class":165},[159,187928,23949],{"class":1146},[159,187930,1939],{"class":165},[159,187932,8866],{"class":1146},[159,187934,1939],{"class":165},[159,187936,1753],{"class":1146},[159,187938,18787],{"class":165},[42,187940,187942],{"id":187941},"_762-kwargs","7.6.2 **kwargs",[14,187944,187945,187948],{},[49,187946,187947],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[151,187950,187952],{"className":53900,"code":187951,"language":53902,"meta":25,"style":25},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[49,187953,187954,187967,187978,187984,187988,187992],{"__ignoreMap":25},[159,187955,187956,187958,187960,187962,187964],{"class":161,"line":162},[159,187957,55465],{"class":1142},[159,187959,183245],{"class":185},[159,187961,1159],{"class":165},[159,187963,34236],{"class":1142},[159,187965,187966],{"class":165},"kwargs):\n",[159,187968,187969,187971,187973,187975],{"class":161,"line":176},[159,187970,11677],{"class":1142},[159,187972,186085],{"class":165},[159,187974,49566],{"class":1142},[159,187976,187977],{"class":165}," kwargs.items():\n",[159,187979,187980,187982],{"class":161,"line":203},[159,187981,55969],{"class":1146},[159,187983,186097],{"class":165},[159,187985,187986],{"class":161,"line":223},[159,187987,590],{"emptyLinePlaceholder":589},[159,187989,187990],{"class":161,"line":233},[159,187991,590],{"emptyLinePlaceholder":589},[159,187993,187994,187996,187998,188000,188002,188004,188006,188008,188010,188012,188014,188016,188018],{"class":161,"line":239},[159,187995,183310],{"class":165},[159,187997,101110],{"class":8765},[159,187999,189],{"class":1142},[159,188001,171188],{"class":192},[159,188003,1939],{"class":165},[159,188005,17307],{"class":8765},[159,188007,189],{"class":1142},[159,188009,18723],{"class":1146},[159,188011,1939],{"class":165},[159,188013,17358],{"class":8765},[159,188015,189],{"class":1142},[159,188017,16345],{"class":192},[159,188019,1165],{"class":165},[37,188021,188023],{"id":188022},"_77-参数解包","7.7 参数解包",[14,188025,188026],{},"列表或元组解包为位置参数：",[151,188028,188030],{"className":53900,"code":188029,"language":53902,"meta":25,"style":25},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[49,188031,188032,188041,188056,188060,188064,188084],{"__ignoreMap":25},[159,188033,188034,188036,188038],{"class":161,"line":162},[159,188035,55465],{"class":1142},[159,188037,28826],{"class":185},[159,188039,188040],{"class":165},"(a, b, c):\n",[159,188042,188043,188045,188047,188049,188051,188053],{"class":161,"line":176},[159,188044,27711],{"class":1142},[159,188046,34443],{"class":165},[159,188048,2704],{"class":1142},[159,188050,34456],{"class":165},[159,188052,2704],{"class":1142},[159,188054,188055],{"class":165}," c\n",[159,188057,188058],{"class":161,"line":203},[159,188059,590],{"emptyLinePlaceholder":589},[159,188061,188062],{"class":161,"line":223},[159,188063,590],{"emptyLinePlaceholder":589},[159,188065,188066,188068,188070,188072,188074,188076,188078,188080,188082],{"class":161,"line":233},[159,188067,185400],{"class":165},[159,188069,189],{"class":1142},[159,188071,4608],{"class":165},[159,188073,4932],{"class":1146},[159,188075,1939],{"class":165},[159,188077,11034],{"class":1146},[159,188079,1939],{"class":165},[159,188081,23949],{"class":1146},[159,188083,4634],{"class":165},[159,188085,188086,188088,188090,188092],{"class":161,"line":239},[159,188087,53937],{"class":1146},[159,188089,187900],{"class":165},[159,188091,4777],{"class":1142},[159,188093,188094],{"class":165},"nums))\n",[14,188096,188097],{},"字典解包为关键字参数：",[151,188099,188101],{"className":53900,"code":188100,"language":53902,"meta":25,"style":25},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[49,188102,188103,188111,188137,188141,188145,188169],{"__ignoreMap":25},[159,188104,188105,188107,188109],{"class":161,"line":162},[159,188106,55465],{"class":1142},[159,188108,170672],{"class":185},[159,188110,170675],{"class":165},[159,188112,188113,188115,188117,188119,188121,188123,188125,188127,188129,188131,188133,188135],{"class":161,"line":176},[159,188114,54819],{"class":1146},[159,188116,1159],{"class":165},[159,188118,23931],{"class":1142},[159,188120,24115],{"class":192},[159,188122,24721],{"class":1146},[159,188124,101110],{"class":165},[159,188126,886],{"class":1146},[159,188128,28066],{"class":1146},[159,188130,17307],{"class":165},[159,188132,886],{"class":1146},[159,188134,24115],{"class":192},[159,188136,1165],{"class":165},[159,188138,188139],{"class":161,"line":203},[159,188140,590],{"emptyLinePlaceholder":589},[159,188142,188143],{"class":161,"line":223},[159,188144,590],{"emptyLinePlaceholder":589},[159,188146,188147,188149,188151,188153,188155,188157,188159,188161,188163,188165,188167],{"class":161,"line":233},[159,188148,137614],{"class":165},[159,188150,189],{"class":1142},[159,188152,28066],{"class":165},[159,188154,9722],{"class":192},[159,188156,1486],{"class":165},[159,188158,171188],{"class":192},[159,188160,1939],{"class":165},[159,188162,16198],{"class":192},[159,188164,1486],{"class":165},[159,188166,18723],{"class":1146},[159,188168,15685],{"class":165},[159,188170,188171,188173,188175],{"class":161,"line":239},[159,188172,187456],{"class":165},[159,188174,34236],{"class":1142},[159,188176,188177],{"class":165},"info)\n",[37,188179,188181],{"id":188180},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,188183,188184,188187],{},[49,188185,188186],{},"lambda"," 用于定义简单匿名函数。",[151,188189,188191],{"className":53900,"code":188190,"language":53902,"meta":25,"style":25},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[49,188192,188193,188210],{"__ignoreMap":25},[159,188194,188195,188198,188200,188203,188206,188208],{"class":161,"line":162},[159,188196,188197],{"class":165},"add ",[159,188199,189],{"class":1142},[159,188201,188202],{"class":1142}," lambda",[159,188204,188205],{"class":165}," a, b: a ",[159,188207,2704],{"class":1142},[159,188209,172404],{"class":165},[159,188211,188212,188214,188216,188218,188220,188222],{"class":161,"line":176},[159,188213,53937],{"class":1146},[159,188215,187900],{"class":165},[159,188217,4932],{"class":1146},[159,188219,1939],{"class":165},[159,188221,11034],{"class":1146},[159,188223,18787],{"class":165},[14,188225,188226],{},"常和排序、过滤等函数一起使用。",[14,188228,188229],{},"按分数排序：",[151,188231,188233],{"className":53900,"code":188232,"language":53902,"meta":25,"style":25},"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",[49,188234,188235,188243,188263,188283,188303,188307,188311,188334],{"__ignoreMap":25},[159,188236,188237,188239,188241],{"class":161,"line":162},[159,188238,181016],{"class":165},[159,188240,189],{"class":1142},[159,188242,2303],{"class":165},[159,188244,188245,188247,188249,188251,188253,188255,188257,188259,188261],{"class":161,"line":176},[159,188246,169685],{"class":165},[159,188248,9722],{"class":192},[159,188250,1486],{"class":165},[159,188252,171188],{"class":192},[159,188254,1939],{"class":165},[159,188256,172772],{"class":192},[159,188258,1486],{"class":165},[159,188260,24804],{"class":1146},[159,188262,28548],{"class":165},[159,188264,188265,188267,188269,188271,188273,188275,188277,188279,188281],{"class":161,"line":203},[159,188266,169685],{"class":165},[159,188268,9722],{"class":192},[159,188270,1486],{"class":165},[159,188272,172236],{"class":192},[159,188274,1939],{"class":165},[159,188276,172772],{"class":192},[159,188278,1486],{"class":165},[159,188280,24640],{"class":1146},[159,188282,28548],{"class":165},[159,188284,188285,188287,188289,188291,188293,188295,188297,188299,188301],{"class":161,"line":223},[159,188286,169685],{"class":165},[159,188288,9722],{"class":192},[159,188290,1486],{"class":165},[159,188292,181031],{"class":192},[159,188294,1939],{"class":165},[159,188296,172772],{"class":192},[159,188298,1486],{"class":165},[159,188300,24260],{"class":1146},[159,188302,28548],{"class":165},[159,188304,188305],{"class":161,"line":233},[159,188306,4634],{"class":165},[159,188308,188309],{"class":161,"line":239},[159,188310,590],{"emptyLinePlaceholder":589},[159,188312,188313,188316,188318,188320,188322,188324,188326,188328,188330,188332],{"class":161,"line":245},[159,188314,188315],{"class":165},"students.sort(",[159,188317,175246],{"class":8765},[159,188319,175249],{"class":1142},[159,188321,175252],{"class":165},[159,188323,172772],{"class":192},[159,188325,133502],{"class":165},[159,188327,184828],{"class":8765},[159,188329,189],{"class":1142},[159,188331,54995],{"class":1146},[159,188333,1165],{"class":165},[159,188335,188336,188338],{"class":161,"line":251},[159,188337,53937],{"class":1146},[159,188339,186295],{"class":165},[14,188341,188342,188343,188345],{},"如果逻辑复杂，不要硬写 ",[49,188344,188186],{},"，定义普通函数更清晰。",[37,188347,188349],{"id":188348},"_79-函数作为参数","7.9 函数作为参数",[14,188351,188352],{},"函数可以作为参数传给另一个函数。",[151,188354,188356],{"className":53900,"code":188355,"language":53902,"meta":25,"style":25},"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",[49,188357,188358,188366,188376,188380,188384,188394,188401,188405,188409],{"__ignoreMap":25},[159,188359,188360,188362,188364],{"class":161,"line":162},[159,188361,55465],{"class":1142},[159,188363,28826],{"class":185},[159,188365,172393],{"class":165},[159,188367,188368,188370,188372,188374],{"class":161,"line":176},[159,188369,27711],{"class":1142},[159,188371,34443],{"class":165},[159,188373,2704],{"class":1142},[159,188375,172404],{"class":165},[159,188377,188378],{"class":161,"line":203},[159,188379,590],{"emptyLinePlaceholder":589},[159,188381,188382],{"class":161,"line":223},[159,188383,590],{"emptyLinePlaceholder":589},[159,188385,188386,188388,188391],{"class":161,"line":233},[159,188387,55465],{"class":1142},[159,188389,188390],{"class":185}," calculate",[159,188392,188393],{"class":165},"(a, b, func):\n",[159,188395,188396,188398],{"class":161,"line":239},[159,188397,27711],{"class":1142},[159,188399,188400],{"class":165}," func(a, b)\n",[159,188402,188403],{"class":161,"line":245},[159,188404,590],{"emptyLinePlaceholder":589},[159,188406,188407],{"class":161,"line":251},[159,188408,590],{"emptyLinePlaceholder":589},[159,188410,188411,188413,188416,188418,188420,188422],{"class":161,"line":261},[159,188412,53937],{"class":1146},[159,188414,188415],{"class":165},"(calculate(",[159,188417,1964],{"class":1146},[159,188419,1939],{"class":165},[159,188421,1739],{"class":1146},[159,188423,188424],{"class":165},", add))\n",[14,188426,188427],{},"这种思想在排序、回调、框架中经常出现。",[37,188429,188431],{"id":188430},"_710-mapfiltersorted","7.10 map、filter、sorted",[42,188433,188435],{"id":188434},"_7101-map","7.10.1 map",[14,188437,188438,188440],{},[49,188439,21155],{}," 对每个元素执行函数。",[151,188442,188444],{"className":53900,"code":188443,"language":53902,"meta":25,"style":25},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[49,188445,188446,188470,188493],{"__ignoreMap":25},[159,188447,188448,188450,188452,188454,188456,188458,188460,188462,188464,188466,188468],{"class":161,"line":162},[159,188449,185400],{"class":165},[159,188451,189],{"class":1142},[159,188453,4608],{"class":165},[159,188455,4932],{"class":1146},[159,188457,1939],{"class":165},[159,188459,11034],{"class":1146},[159,188461,1939],{"class":165},[159,188463,23949],{"class":1146},[159,188465,1939],{"class":165},[159,188467,8866],{"class":1146},[159,188469,4634],{"class":165},[159,188471,188472,188474,188476,188479,188481,188483,188486,188488,188490],{"class":161,"line":176},[159,188473,182606],{"class":165},[159,188475,189],{"class":1142},[159,188477,188478],{"class":1146}," map",[159,188480,1159],{"class":165},[159,188482,188186],{"class":1142},[159,188484,188485],{"class":165}," x: x ",[159,188487,4777],{"class":1142},[159,188489,38320],{"class":1146},[159,188491,188492],{"class":165},", nums)\n",[159,188494,188495,188497,188499,188501],{"class":161,"line":203},[159,188496,53937],{"class":1146},[159,188498,1159],{"class":165},[159,188500,175370],{"class":1146},[159,188502,187368],{"class":165},[42,188504,188506],{"id":188505},"_7102-filter","7.10.2 filter",[14,188508,188509,188511],{},[49,188510,101351],{}," 保留满足条件的元素。",[151,188513,188515],{"className":53900,"code":188514,"language":53902,"meta":25,"style":25},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[49,188516,188517,188545,188570],{"__ignoreMap":25},[159,188518,188519,188521,188523,188525,188527,188529,188531,188533,188535,188537,188539,188541,188543],{"class":161,"line":162},[159,188520,185400],{"class":165},[159,188522,189],{"class":1142},[159,188524,4608],{"class":165},[159,188526,4932],{"class":1146},[159,188528,1939],{"class":165},[159,188530,11034],{"class":1146},[159,188532,1939],{"class":165},[159,188534,23949],{"class":1146},[159,188536,1939],{"class":165},[159,188538,8866],{"class":1146},[159,188540,1939],{"class":165},[159,188542,1753],{"class":1146},[159,188544,4634],{"class":165},[159,188546,188547,188549,188551,188554,188556,188558,188560,188562,188564,188566,188568],{"class":161,"line":176},[159,188548,182606],{"class":165},[159,188550,189],{"class":1142},[159,188552,188553],{"class":1146}," filter",[159,188555,1159],{"class":165},[159,188557,188186],{"class":1142},[159,188559,188485],{"class":165},[159,188561,1662],{"class":1142},[159,188563,38320],{"class":1146},[159,188565,122859],{"class":1142},[159,188567,1259],{"class":1146},[159,188569,188492],{"class":165},[159,188571,188572,188574,188576,188578],{"class":161,"line":203},[159,188573,53937],{"class":1146},[159,188575,1159],{"class":165},[159,188577,175370],{"class":1146},[159,188579,187368],{"class":165},[42,188581,188583],{"id":188582},"_7103-sorted","7.10.3 sorted",[14,188585,188586,188588],{},[49,188587,186536],{}," 返回排序后的新列表。",[151,188590,188592],{"className":53900,"code":188591,"language":53902,"meta":25,"style":25},"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",[49,188593,188594,188602,188622,188642,188662,188666,188670,188699],{"__ignoreMap":25},[159,188595,188596,188598,188600],{"class":161,"line":162},[159,188597,181016],{"class":165},[159,188599,189],{"class":1142},[159,188601,2303],{"class":165},[159,188603,188604,188606,188608,188610,188612,188614,188616,188618,188620],{"class":161,"line":176},[159,188605,169685],{"class":165},[159,188607,9722],{"class":192},[159,188609,1486],{"class":165},[159,188611,171188],{"class":192},[159,188613,1939],{"class":165},[159,188615,172772],{"class":192},[159,188617,1486],{"class":165},[159,188619,24804],{"class":1146},[159,188621,28548],{"class":165},[159,188623,188624,188626,188628,188630,188632,188634,188636,188638,188640],{"class":161,"line":203},[159,188625,169685],{"class":165},[159,188627,9722],{"class":192},[159,188629,1486],{"class":165},[159,188631,172236],{"class":192},[159,188633,1939],{"class":165},[159,188635,172772],{"class":192},[159,188637,1486],{"class":165},[159,188639,24640],{"class":1146},[159,188641,28548],{"class":165},[159,188643,188644,188646,188648,188650,188652,188654,188656,188658,188660],{"class":161,"line":223},[159,188645,169685],{"class":165},[159,188647,9722],{"class":192},[159,188649,1486],{"class":165},[159,188651,181031],{"class":192},[159,188653,1939],{"class":165},[159,188655,172772],{"class":192},[159,188657,1486],{"class":165},[159,188659,24260],{"class":1146},[159,188661,28548],{"class":165},[159,188663,188664],{"class":161,"line":233},[159,188665,4634],{"class":165},[159,188667,188668],{"class":161,"line":239},[159,188669,590],{"emptyLinePlaceholder":589},[159,188671,188672,188674,188676,188678,188681,188683,188685,188687,188689,188691,188693,188695,188697],{"class":161,"line":245},[159,188673,182606],{"class":165},[159,188675,189],{"class":1142},[159,188677,184904],{"class":1146},[159,188679,188680],{"class":165},"(students, ",[159,188682,175246],{"class":8765},[159,188684,175249],{"class":1142},[159,188686,175252],{"class":165},[159,188688,172772],{"class":192},[159,188690,133502],{"class":165},[159,188692,184828],{"class":8765},[159,188694,189],{"class":1142},[159,188696,54995],{"class":1146},[159,188698,1165],{"class":165},[159,188700,188701,188703],{"class":161,"line":251},[159,188702,53937],{"class":1146},[159,188704,23721],{"class":165},[37,188706,188708],{"id":188707},"_711-闭包入门","7.11 闭包入门",[14,188710,188711],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[151,188713,188715],{"className":53900,"code":188714,"language":53902,"meta":25,"style":25},"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",[49,188716,188717,188727,188737,188748,188752,188759,188763,188767,188781],{"__ignoreMap":25},[159,188718,188719,188721,188724],{"class":161,"line":162},[159,188720,55465],{"class":1142},[159,188722,188723],{"class":185}," outer",[159,188725,188726],{"class":165},"(base):\n",[159,188728,188729,188731,188734],{"class":161,"line":176},[159,188730,54322],{"class":1142},[159,188732,188733],{"class":185}," inner",[159,188735,188736],{"class":165},"(num):\n",[159,188738,188739,188741,188744,188746],{"class":161,"line":203},[159,188740,21176],{"class":1142},[159,188742,188743],{"class":165}," base ",[159,188745,2704],{"class":1142},[159,188747,187879],{"class":165},[159,188749,188750],{"class":161,"line":223},[159,188751,590],{"emptyLinePlaceholder":589},[159,188753,188754,188756],{"class":161,"line":233},[159,188755,27711],{"class":1142},[159,188757,188758],{"class":165}," inner\n",[159,188760,188761],{"class":161,"line":239},[159,188762,590],{"emptyLinePlaceholder":589},[159,188764,188765],{"class":161,"line":245},[159,188766,590],{"emptyLinePlaceholder":589},[159,188768,188769,188772,188774,188777,188779],{"class":161,"line":251},[159,188770,188771],{"class":165},"add_10 ",[159,188773,189],{"class":1142},[159,188775,188776],{"class":165}," outer(",[159,188778,1964],{"class":1146},[159,188780,1165],{"class":165},[159,188782,188783,188785,188788,188790],{"class":161,"line":261},[159,188784,53937],{"class":1146},[159,188786,188787],{"class":165},"(add_10(",[159,188789,1753],{"class":1146},[159,188791,18787],{"class":165},[14,188793,188794],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[37,188796,188798],{"id":188797},"_712-装饰器入门","7.12 装饰器入门",[14,188800,188801],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[151,188803,188805],{"className":53900,"code":188804,"language":53902,"meta":25,"style":25},"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",[49,188806,188807,188816,188825,188836,188841,188852,188856,188863,188867,188871,188876,188884,188894,188898,188902],{"__ignoreMap":25},[159,188808,188809,188811,188813],{"class":161,"line":162},[159,188810,55465],{"class":1142},[159,188812,108491],{"class":185},[159,188814,188815],{"class":165},"(func):\n",[159,188817,188818,188820,188823],{"class":161,"line":176},[159,188819,54322],{"class":1142},[159,188821,188822],{"class":185}," wrapper",[159,188824,55471],{"class":165},[159,188826,188827,188829,188831,188834],{"class":161,"line":203},[159,188828,55969],{"class":1146},[159,188830,1159],{"class":165},[159,188832,188833],{"class":192},"\"函数开始执行\"",[159,188835,1165],{"class":165},[159,188837,188838],{"class":161,"line":223},[159,188839,188840],{"class":165},"        func()\n",[159,188842,188843,188845,188847,188850],{"class":161,"line":233},[159,188844,55969],{"class":1146},[159,188846,1159],{"class":165},[159,188848,188849],{"class":192},"\"函数执行结束\"",[159,188851,1165],{"class":165},[159,188853,188854],{"class":161,"line":239},[159,188855,590],{"emptyLinePlaceholder":589},[159,188857,188858,188860],{"class":161,"line":245},[159,188859,27711],{"class":1142},[159,188861,188862],{"class":165}," wrapper\n",[159,188864,188865],{"class":161,"line":251},[159,188866,590],{"emptyLinePlaceholder":589},[159,188868,188869],{"class":161,"line":261},[159,188870,590],{"emptyLinePlaceholder":589},[159,188872,188873],{"class":161,"line":603},[159,188874,188875],{"class":185},"@log\n",[159,188877,188878,188880,188882],{"class":161,"line":621},[159,188879,55465],{"class":1142},[159,188881,182296],{"class":185},[159,188883,55471],{"class":165},[159,188885,188886,188888,188890,188892],{"class":161,"line":634},[159,188887,54819],{"class":1146},[159,188889,1159],{"class":165},[159,188891,29459],{"class":192},[159,188893,1165],{"class":165},[159,188895,188896],{"class":161,"line":640},[159,188897,590],{"emptyLinePlaceholder":589},[159,188899,188900],{"class":161,"line":1075},[159,188901,590],{"emptyLinePlaceholder":589},[159,188903,188904],{"class":161,"line":1081},[159,188905,182331],{"class":165},[14,188907,179574],{},[151,188909,188911],{"className":53900,"code":188910,"language":53902,"meta":25,"style":25},"say_hello = log(say_hello)\n",[49,188912,188913],{"__ignoreMap":25},[159,188914,188915,188918,188920],{"class":161,"line":162},[159,188916,188917],{"class":165},"say_hello ",[159,188919,189],{"class":1142},[159,188921,188922],{"class":165}," log(say_hello)\n",[14,188924,188925],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[37,188927,188929],{"id":188928},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[151,188931,188933],{"className":53900,"code":188932,"language":53902,"meta":25,"style":25},"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",[49,188934,188935,188943,188960,188970,188989,188999,189006,189010,189016,189020,189024,189028,189036,189046,189050,189054],{"__ignoreMap":25},[159,188936,188937,188939,188941],{"class":161,"line":162},[159,188938,55465],{"class":1142},[159,188940,108491],{"class":185},[159,188942,188815],{"class":165},[159,188944,188945,188947,188949,188951,188953,188956,188958],{"class":161,"line":176},[159,188946,54322],{"class":1142},[159,188948,188822],{"class":185},[159,188950,1159],{"class":165},[159,188952,4777],{"class":1142},[159,188954,188955],{"class":165},"args, ",[159,188957,34236],{"class":1142},[159,188959,187966],{"class":165},[159,188961,188962,188964,188966,188968],{"class":161,"line":203},[159,188963,55969],{"class":1146},[159,188965,1159],{"class":165},[159,188967,188833],{"class":192},[159,188969,1165],{"class":165},[159,188971,188972,188975,188977,188980,188982,188984,188986],{"class":161,"line":223},[159,188973,188974],{"class":165},"        result ",[159,188976,189],{"class":1142},[159,188978,188979],{"class":165}," func(",[159,188981,4777],{"class":1142},[159,188983,188955],{"class":165},[159,188985,34236],{"class":1142},[159,188987,188988],{"class":165},"kwargs)\n",[159,188990,188991,188993,188995,188997],{"class":161,"line":233},[159,188992,55969],{"class":1146},[159,188994,1159],{"class":165},[159,188996,188849],{"class":192},[159,188998,1165],{"class":165},[159,189000,189001,189003],{"class":161,"line":239},[159,189002,21176],{"class":1142},[159,189004,189005],{"class":165}," result\n",[159,189007,189008],{"class":161,"line":245},[159,189009,590],{"emptyLinePlaceholder":589},[159,189011,189012,189014],{"class":161,"line":251},[159,189013,27711],{"class":1142},[159,189015,188862],{"class":165},[159,189017,189018],{"class":161,"line":261},[159,189019,590],{"emptyLinePlaceholder":589},[159,189021,189022],{"class":161,"line":603},[159,189023,590],{"emptyLinePlaceholder":589},[159,189025,189026],{"class":161,"line":621},[159,189027,188875],{"class":185},[159,189029,189030,189032,189034],{"class":161,"line":634},[159,189031,55465],{"class":1142},[159,189033,28826],{"class":185},[159,189035,172393],{"class":165},[159,189037,189038,189040,189042,189044],{"class":161,"line":640},[159,189039,27711],{"class":1142},[159,189041,34443],{"class":165},[159,189043,2704],{"class":1142},[159,189045,172404],{"class":165},[159,189047,189048],{"class":161,"line":1075},[159,189049,590],{"emptyLinePlaceholder":589},[159,189051,189052],{"class":161,"line":1081},[159,189053,590],{"emptyLinePlaceholder":589},[159,189055,189056,189058,189060,189062,189064,189066],{"class":161,"line":1091},[159,189057,53937],{"class":1146},[159,189059,187900],{"class":165},[159,189061,1964],{"class":1146},[159,189063,1939],{"class":165},[159,189065,1739],{"class":1146},[159,189067,18787],{"class":165},[14,189069,189070,189071,122318,189073,189075],{},"这个写法使用 ",[49,189072,187832],{},[49,189074,187947],{}," 接收原函数的所有参数。",[37,189077,189079],{"id":189078},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,189081,144592],{},[134,189083,189084,189087,189090],{},[106,189085,189086],{},"给定一组学生数据。",[106,189088,189089],{},"封装函数，根据传入规则筛选学生。",[106,189091,189092],{},"筛选及格、优秀、未成年学生。",[14,189094,33610],{},[151,189096,189098],{"className":53900,"code":189097,"language":53902,"meta":25,"style":25},"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",[49,189099,189100,189108,189136,189164,189192,189196,189200,189204,189214,189222,189232,189239,189244,189250,189254,189258,189282,189305,189328,189332,189339,189346],{"__ignoreMap":25},[159,189101,189102,189104,189106],{"class":161,"line":162},[159,189103,181016],{"class":165},[159,189105,189],{"class":1142},[159,189107,2303],{"class":165},[159,189109,189110,189112,189114,189116,189118,189120,189122,189124,189126,189128,189130,189132,189134],{"class":161,"line":176},[159,189111,169685],{"class":165},[159,189113,9722],{"class":192},[159,189115,1486],{"class":165},[159,189117,171188],{"class":192},[159,189119,1939],{"class":165},[159,189121,16198],{"class":192},[159,189123,1486],{"class":165},[159,189125,18723],{"class":1146},[159,189127,1939],{"class":165},[159,189129,172772],{"class":192},[159,189131,1486],{"class":165},[159,189133,24804],{"class":1146},[159,189135,28548],{"class":165},[159,189137,189138,189140,189142,189144,189146,189148,189150,189152,189154,189156,189158,189160,189162],{"class":161,"line":203},[159,189139,169685],{"class":165},[159,189141,9722],{"class":192},[159,189143,1486],{"class":165},[159,189145,172236],{"class":192},[159,189147,1939],{"class":165},[159,189149,16198],{"class":192},[159,189151,1486],{"class":165},[159,189153,24461],{"class":1146},[159,189155,1939],{"class":165},[159,189157,172772],{"class":192},[159,189159,1486],{"class":165},[159,189161,24640],{"class":1146},[159,189163,28548],{"class":165},[159,189165,189166,189168,189170,189172,189174,189176,189178,189180,189182,189184,189186,189188,189190],{"class":161,"line":223},[159,189167,169685],{"class":165},[159,189169,9722],{"class":192},[159,189171,1486],{"class":165},[159,189173,181031],{"class":192},[159,189175,1939],{"class":165},[159,189177,16198],{"class":192},[159,189179,1486],{"class":165},[159,189181,24509],{"class":1146},[159,189183,1939],{"class":165},[159,189185,172772],{"class":192},[159,189187,1486],{"class":165},[159,189189,24708],{"class":1146},[159,189191,28548],{"class":165},[159,189193,189194],{"class":161,"line":233},[159,189195,4634],{"class":165},[159,189197,189198],{"class":161,"line":239},[159,189199,590],{"emptyLinePlaceholder":589},[159,189201,189202],{"class":161,"line":245},[159,189203,590],{"emptyLinePlaceholder":589},[159,189205,189206,189208,189211],{"class":161,"line":251},[159,189207,55465],{"class":1142},[159,189209,189210],{"class":185}," filter_students",[159,189212,189213],{"class":165},"(students, condition):\n",[159,189215,189216,189218,189220],{"class":161,"line":261},[159,189217,182523],{"class":165},[159,189219,189],{"class":1142},[159,189221,16884],{"class":165},[159,189223,189224,189226,189228,189230],{"class":161,"line":603},[159,189225,11677],{"class":1142},[159,189227,173437],{"class":165},[159,189229,49566],{"class":1142},[159,189231,173442],{"class":165},[159,189233,189234,189236],{"class":161,"line":621},[159,189235,17003],{"class":1142},[159,189237,189238],{"class":165}," condition(student):\n",[159,189240,189241],{"class":161,"line":634},[159,189242,189243],{"class":165},"            result.append(student)\n",[159,189245,189246,189248],{"class":161,"line":640},[159,189247,27711],{"class":1142},[159,189249,189005],{"class":165},[159,189251,189252],{"class":161,"line":1075},[159,189253,590],{"emptyLinePlaceholder":589},[159,189255,189256],{"class":161,"line":1081},[159,189257,590],{"emptyLinePlaceholder":589},[159,189259,189260,189262,189264,189267,189269,189272,189274,189276,189278,189280],{"class":161,"line":1091},[159,189261,187001],{"class":165},[159,189263,189],{"class":1142},[159,189265,189266],{"class":165}," filter_students(students, ",[159,189268,188186],{"class":1142},[159,189270,189271],{"class":165}," s: s[",[159,189273,172772],{"class":192},[159,189275,28061],{"class":165},[159,189277,3822],{"class":1142},[159,189279,179137],{"class":1146},[159,189281,1165],{"class":165},[159,189283,189284,189287,189289,189291,189293,189295,189297,189299,189301,189303],{"class":161,"line":1100},[159,189285,189286],{"class":165},"excellent ",[159,189288,189],{"class":1142},[159,189290,189266],{"class":165},[159,189292,188186],{"class":1142},[159,189294,189271],{"class":165},[159,189296,172772],{"class":192},[159,189298,28061],{"class":165},[159,189300,3822],{"class":1142},[159,189302,179088],{"class":1146},[159,189304,1165],{"class":165},[159,189306,189307,189310,189312,189314,189316,189318,189320,189322,189324,189326],{"class":161,"line":1123},[159,189308,189309],{"class":165},"under_age ",[159,189311,189],{"class":1142},[159,189313,189266],{"class":165},[159,189315,188186],{"class":1142},[159,189317,189271],{"class":165},[159,189319,16198],{"class":192},[159,189321,28061],{"class":165},[159,189323,166],{"class":1142},[159,189325,177585],{"class":1146},[159,189327,1165],{"class":165},[159,189329,189330],{"class":161,"line":1132},[159,189331,590],{"emptyLinePlaceholder":589},[159,189333,189334,189336],{"class":161,"line":1139},[159,189335,53937],{"class":1146},[159,189337,189338],{"class":165},"(passed)\n",[159,189340,189341,189343],{"class":161,"line":1168},[159,189342,53937],{"class":1146},[159,189344,189345],{"class":165},"(excellent)\n",[159,189347,189348,189350],{"class":161,"line":1174},[159,189349,53937],{"class":1146},[159,189351,189352],{"class":165},"(under_age)\n",[37,189354,189356],{"id":189355},"_715-易错点","7.15 易错点",[134,189358,189359,189362,189370,189375,189386],{},[106,189360,189361],{},"默认参数不要写可变对象。",[106,189363,189364,189366,189367,189369],{},[49,189365,187832],{}," 是元组，",[49,189368,187947],{}," 是字典。",[106,189371,189372,189374],{},[49,189373,188186],{}," 只适合简单表达式。",[106,189376,189377,122318,189379,189381,189382,189385],{},[49,189378,21155],{},[49,189380,101351],{}," 的结果是迭代器，常用 ",[49,189383,189384],{},"list()"," 转换查看。",[106,189387,189388],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[37,189390,189392],{"id":189391},"_716-本章练习","7.16 本章练习",[134,189394,189395,189402,189408,189413,189418],{},[106,189396,189397,189398,189401],{},"写函数 ",[49,189399,189400],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[106,189403,189397,189404,189407],{},[49,189405,189406],{},"print_user(**kwargs)","，输出用户所有字段。",[106,189409,125666,189410,189412],{},[49,189411,188186],{}," 对学生列表按年龄排序。",[106,189414,125666,189415,189417],{},[49,189416,101351],{}," 找出成绩不及格的学生。",[106,189419,189420],{},"写一个装饰器，统计函数执行前后的提示信息。",[1468,189422,189423],{},"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":25,"searchDepth":176,"depth":176,"links":189425},[189426,189427,189428,189429,189430,189431,189435,189436,189437,189438,189443,189444,189445,189446,189447,189448],{"id":187284,"depth":176,"text":187285},{"id":187398,"depth":176,"text":187399},{"id":187487,"depth":176,"text":187488},{"id":187549,"depth":176,"text":187550},{"id":187695,"depth":176,"text":187696},{"id":187822,"depth":176,"text":187823,"children":189432},[189433,189434],{"id":187826,"depth":203,"text":187827},{"id":187941,"depth":203,"text":187942},{"id":188022,"depth":176,"text":188023},{"id":188180,"depth":176,"text":188181},{"id":188348,"depth":176,"text":188349},{"id":188430,"depth":176,"text":188431,"children":189439},[189440,189441,189442],{"id":188434,"depth":203,"text":188435},{"id":188505,"depth":203,"text":188506},{"id":188582,"depth":203,"text":188583},{"id":188707,"depth":176,"text":188708},{"id":188797,"depth":176,"text":188798},{"id":188928,"depth":176,"text":188929},{"id":189078,"depth":176,"text":189079},{"id":189355,"depth":176,"text":189356},{"id":189391,"depth":176,"text":189392},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":187276,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":189455,"title":189456,"body":189457,"description":23809,"extension":23810,"meta":191976,"navigation":589,"path":191977,"seo":191978,"stem":191979,"__hash__":191980},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":189458,"toc":191951},[189459,189462,189466,189469,189472,189503,189507,189511,189514,189541,189545,189548,189599,189602,189617,189620,189655,189659,189661,189685,189688,189748,189752,189756,189759,189816,189819,189839,189843,189846,189909,189913,189916,189972,189979,190003,190007,190010,190073,190077,190082,190133,190136,190140,190145,190212,190215,190297,190301,190306,190357,190360,190364,190367,190370,190378,190381,190427,190430,190476,190480,190486,190530,190533,190579,190582,190622,190625,190686,190690,190693,190783,190786,190928,190931,190998,191002,191005,191008,191149,191152,191230,191233,191409,191413,191415,191426,191428,191627,191631,191875,191879,191913,191917,191948],[10,189460,189456],{"id":189461},"_8-文件操作",[37,189463,189465],{"id":189464},"_81-文件操作的意义","8.1 文件操作的意义",[14,189467,189468],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,189470,189471],{},"常见文件类型：",[134,189473,189474,189480,189486,189492,189498],{},[106,189475,189476,189479],{},[49,189477,189478],{},".txt","：普通文本。",[106,189481,189482,189485],{},[49,189483,189484],{},".csv","：表格文本。",[106,189487,189488,189491],{},[49,189489,189490],{},".json","：结构化数据。",[106,189493,189494,189497],{},[49,189495,189496],{},".log","：日志文件。",[106,189499,189500,189502],{},[49,189501,167652],{},"：Python 源代码。",[37,189504,189506],{"id":189505},"_82-路径","8.2 路径",[42,189508,189510],{"id":189509},"_821-相对路径","8.2.1 相对路径",[14,189512,189513],{},"相对当前运行目录：",[151,189515,189517],{"className":53900,"code":189516,"language":53902,"meta":25,"style":25},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[49,189518,189519],{"__ignoreMap":25},[159,189520,189521,189523,189525,189527,189529,189531,189533,189535,189537,189539],{"class":161,"line":162},[159,189522,108215],{"class":1146},[159,189524,1159],{"class":165},[159,189526,168096],{"class":192},[159,189528,1939],{"class":165},[159,189530,168101],{"class":192},[159,189532,1939],{"class":165},[159,189534,168106],{"class":8765},[159,189536,189],{"class":1142},[159,189538,168111],{"class":192},[159,189540,1165],{"class":165},[42,189542,189544],{"id":189543},"_822-绝对路径","8.2.2 绝对路径",[14,189546,189547],{},"从根目录或盘符开始：",[151,189549,189551],{"className":53900,"code":189550,"language":53902,"meta":25,"style":25},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[49,189552,189553,189576],{"__ignoreMap":25},[159,189554,189555,189557,189559,189562,189564,189566,189568,189570,189572,189574],{"class":161,"line":162},[159,189556,108215],{"class":1146},[159,189558,1159],{"class":165},[159,189560,189561],{"class":192},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[159,189563,1939],{"class":165},[159,189565,168101],{"class":192},[159,189567,1939],{"class":165},[159,189569,168106],{"class":8765},[159,189571,189],{"class":1142},[159,189573,168111],{"class":192},[159,189575,1165],{"class":165},[159,189577,189578,189580,189582,189585,189587,189589,189591,189593,189595,189597],{"class":161,"line":176},[159,189579,108215],{"class":1146},[159,189581,1159],{"class":165},[159,189583,189584],{"class":192},"\"D:\u002Fdata\u002Fdata.txt\"",[159,189586,1939],{"class":165},[159,189588,168101],{"class":192},[159,189590,1939],{"class":165},[159,189592,168106],{"class":8765},[159,189594,189],{"class":1142},[159,189596,168111],{"class":192},[159,189598,1165],{"class":165},[14,189600,189601],{},"Windows 路径建议写成：",[151,189603,189605],{"className":53900,"code":189604,"language":53902,"meta":25,"style":25},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[49,189606,189607],{"__ignoreMap":25},[159,189608,189609,189612,189614],{"class":161,"line":162},[159,189610,189611],{"class":165},"path ",[159,189613,189],{"class":1142},[159,189615,189616],{"class":192}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,189618,189619],{},"或原始字符串：",[151,189621,189623],{"className":53900,"code":189622,"language":53902,"meta":25,"style":25},"path = r\"D:\\data\\data.txt\"\n",[49,189624,189625],{"__ignoreMap":25},[159,189626,189627,189629,189631,189633,189635,189638,189641,189644,189646,189648,189650,189653],{"class":161,"line":162},[159,189628,189611],{"class":165},[159,189630,189],{"class":1142},[159,189632,40649],{"class":1142},[159,189634,24115],{"class":192},[159,189636,189637],{"class":18361},"D:",[159,189639,189640],{"class":1146},"\\d",[159,189642,189643],{"class":18361},"ata",[159,189645,189640],{"class":1146},[159,189647,189643],{"class":18361},[159,189649,9952],{"class":1146},[159,189651,189652],{"class":18361},"txt",[159,189654,48656],{"class":192},[37,189656,189658],{"id":189657},"_83-open函数","8.3 open函数",[14,189660,28799],{},[151,189662,189664],{"className":53900,"code":189663,"language":53902,"meta":25,"style":25},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[49,189665,189666],{"__ignoreMap":25},[159,189667,189668,189670,189672,189674,189677,189679,189681,189683],{"class":161,"line":162},[159,189669,68749],{"class":8765},[159,189671,1150],{"class":1142},[159,189673,168091],{"class":1146},[159,189675,189676],{"class":165},"(文件路径, 打开模式, ",[159,189678,168106],{"class":8765},[159,189680,189],{"class":1142},[159,189682,168111],{"class":192},[159,189684,1165],{"class":165},[14,189686,189687],{},"常见模式：",[12347,189689,189690,189699],{},[16500,189691,189692],{},[12356,189693,189694,189697],{},[12365,189695,189696],{},"模式",[12365,189698,49392],{},[16624,189700,189701,189710,189719,189728,189738],{},[12356,189702,189703,189707],{},[12488,189704,189705],{},[49,189706,24504],{},[12488,189708,189709],{},"只读，文件不存在会报错",[12356,189711,189712,189716],{},[12488,189713,189714],{},[49,189715,24625],{},[12488,189717,189718],{},"只写，文件不存在会创建，存在会清空",[12356,189720,189721,189725],{},[12488,189722,189723],{},[49,189724,8085],{},[12488,189726,189727],{},"追加，文件不存在会创建",[12356,189729,189730,189735],{},[12488,189731,189732],{},[49,189733,189734],{},"rb",[12488,189736,189737],{},"二进制只读",[12356,189739,189740,189745],{},[12488,189741,189742],{},[49,189743,189744],{},"wb",[12488,189746,189747],{},"二进制只写",[37,189749,189751],{"id":189750},"_84-读取文件","8.4 读取文件",[42,189753,189755],{"id":189754},"_841-read","8.4.1 read",[14,189757,189758],{},"一次读取全部内容：",[151,189760,189762],{"className":53900,"code":189761,"language":53902,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[49,189763,189764,189790,189802,189809],{"__ignoreMap":25},[159,189765,189766,189768,189770,189772,189774,189776,189778,189780,189782,189784,189786,189788],{"class":161,"line":162},[159,189767,68749],{"class":8765},[159,189769,1150],{"class":1142},[159,189771,168091],{"class":1146},[159,189773,1159],{"class":165},[159,189775,168096],{"class":192},[159,189777,1939],{"class":165},[159,189779,168101],{"class":192},[159,189781,1939],{"class":165},[159,189783,168106],{"class":8765},[159,189785,189],{"class":1142},[159,189787,168111],{"class":192},[159,189789,1165],{"class":165},[159,189791,189792,189795,189797,189799],{"class":161,"line":176},[159,189793,189794],{"class":165},"content ",[159,189796,189],{"class":1142},[159,189798,169453],{"class":8765},[159,189800,189801],{"class":165},".read()\n",[159,189803,189804,189806],{"class":161,"line":203},[159,189805,53937],{"class":1146},[159,189807,189808],{"class":165},"(content)\n",[159,189810,189811,189813],{"class":161,"line":223},[159,189812,68749],{"class":8765},[159,189814,189815],{"class":165},".close()\n",[14,189817,189818],{},"可以指定读取字符数：",[151,189820,189822],{"className":53900,"code":189821,"language":53902,"meta":25,"style":25},"content = file.read(10)\n",[49,189823,189824],{"__ignoreMap":25},[159,189825,189826,189828,189830,189832,189835,189837],{"class":161,"line":162},[159,189827,189794],{"class":165},[159,189829,189],{"class":1142},[159,189831,169453],{"class":8765},[159,189833,189834],{"class":165},".read(",[159,189836,1964],{"class":1146},[159,189838,1165],{"class":165},[42,189840,189842],{"id":189841},"_842-readline","8.4.2 readline",[14,189844,189845],{},"一次读取一行：",[151,189847,189849],{"className":53900,"code":189848,"language":53902,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[49,189850,189851,189877,189881,189892,189899,189903],{"__ignoreMap":25},[159,189852,189853,189855,189857,189859,189861,189863,189865,189867,189869,189871,189873,189875],{"class":161,"line":162},[159,189854,68749],{"class":8765},[159,189856,1150],{"class":1142},[159,189858,168091],{"class":1146},[159,189860,1159],{"class":165},[159,189862,168096],{"class":192},[159,189864,1939],{"class":165},[159,189866,168101],{"class":192},[159,189868,1939],{"class":165},[159,189870,168106],{"class":8765},[159,189872,189],{"class":1142},[159,189874,168111],{"class":192},[159,189876,1165],{"class":165},[159,189878,189879],{"class":161,"line":176},[159,189880,590],{"emptyLinePlaceholder":589},[159,189882,189883,189885,189887,189889],{"class":161,"line":203},[159,189884,168552],{"class":165},[159,189886,189],{"class":1142},[159,189888,169453],{"class":8765},[159,189890,189891],{"class":165},".readline()\n",[159,189893,189894,189896],{"class":161,"line":223},[159,189895,53937],{"class":1146},[159,189897,189898],{"class":165},"(line)\n",[159,189900,189901],{"class":161,"line":233},[159,189902,590],{"emptyLinePlaceholder":589},[159,189904,189905,189907],{"class":161,"line":239},[159,189906,68749],{"class":8765},[159,189908,189815],{"class":165},[42,189910,189912],{"id":189911},"_843-readlines","8.4.3 readlines",[14,189914,189915],{},"读取所有行，返回列表：",[151,189917,189919],{"className":53900,"code":189918,"language":53902,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[49,189920,189921,189947,189959,189966],{"__ignoreMap":25},[159,189922,189923,189925,189927,189929,189931,189933,189935,189937,189939,189941,189943,189945],{"class":161,"line":162},[159,189924,68749],{"class":8765},[159,189926,1150],{"class":1142},[159,189928,168091],{"class":1146},[159,189930,1159],{"class":165},[159,189932,168096],{"class":192},[159,189934,1939],{"class":165},[159,189936,168101],{"class":192},[159,189938,1939],{"class":165},[159,189940,168106],{"class":8765},[159,189942,189],{"class":1142},[159,189944,168111],{"class":192},[159,189946,1165],{"class":165},[159,189948,189949,189952,189954,189956],{"class":161,"line":176},[159,189950,189951],{"class":165},"lines ",[159,189953,189],{"class":1142},[159,189955,169453],{"class":8765},[159,189957,189958],{"class":165},".readlines()\n",[159,189960,189961,189963],{"class":161,"line":203},[159,189962,53937],{"class":1146},[159,189964,189965],{"class":165},"(lines)\n",[159,189967,189968,189970],{"class":161,"line":223},[159,189969,68749],{"class":8765},[159,189971,189815],{"class":165},[14,189973,189974,189975,189978],{},"每一行通常带有换行符，可以用 ",[49,189976,189977],{},"strip()"," 去掉：",[151,189980,189982],{"className":53900,"code":189981,"language":53902,"meta":25,"style":25},"for line in lines:\n    print(line.strip())\n",[49,189983,189984,189996],{"__ignoreMap":25},[159,189985,189986,189988,189991,189993],{"class":161,"line":162},[159,189987,26657],{"class":1142},[159,189989,189990],{"class":165}," line ",[159,189992,49566],{"class":1142},[159,189994,189995],{"class":165}," lines:\n",[159,189997,189998,190000],{"class":161,"line":176},[159,189999,54819],{"class":1146},[159,190001,190002],{"class":165},"(line.strip())\n",[42,190004,190006],{"id":190005},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,190008,190009],{},"推荐读取大文件时使用：",[151,190011,190013],{"className":53900,"code":190012,"language":53902,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[49,190014,190015,190041,190045,190057,190063,190067],{"__ignoreMap":25},[159,190016,190017,190019,190021,190023,190025,190027,190029,190031,190033,190035,190037,190039],{"class":161,"line":162},[159,190018,68749],{"class":8765},[159,190020,1150],{"class":1142},[159,190022,168091],{"class":1146},[159,190024,1159],{"class":165},[159,190026,168096],{"class":192},[159,190028,1939],{"class":165},[159,190030,168101],{"class":192},[159,190032,1939],{"class":165},[159,190034,168106],{"class":8765},[159,190036,189],{"class":1142},[159,190038,168111],{"class":192},[159,190040,1165],{"class":165},[159,190042,190043],{"class":161,"line":176},[159,190044,590],{"emptyLinePlaceholder":589},[159,190046,190047,190049,190051,190053,190055],{"class":161,"line":203},[159,190048,26657],{"class":1142},[159,190050,189990],{"class":165},[159,190052,49566],{"class":1142},[159,190054,169453],{"class":8765},[159,190056,27364],{"class":165},[159,190058,190059,190061],{"class":161,"line":223},[159,190060,54819],{"class":1146},[159,190062,190002],{"class":165},[159,190064,190065],{"class":161,"line":233},[159,190066,590],{"emptyLinePlaceholder":589},[159,190068,190069,190071],{"class":161,"line":239},[159,190070,68749],{"class":8765},[159,190072,189815],{"class":165},[37,190074,190076],{"id":190075},"_85-with语句","8.5 with语句",[14,190078,190079,190081],{},[49,190080,129133],{}," 会自动关闭文件，推荐使用。",[151,190083,190085],{"className":53900,"code":190084,"language":53902,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[49,190086,190087,190117,190127],{"__ignoreMap":25},[159,190088,190089,190091,190093,190095,190097,190099,190101,190103,190105,190107,190109,190111,190113,190115],{"class":161,"line":162},[159,190090,129133],{"class":1142},[159,190092,168091],{"class":1146},[159,190094,1159],{"class":165},[159,190096,168096],{"class":192},[159,190098,1939],{"class":165},[159,190100,168101],{"class":192},[159,190102,1939],{"class":165},[159,190104,168106],{"class":8765},[159,190106,189],{"class":1142},[159,190108,168111],{"class":192},[159,190110,2710],{"class":165},[159,190112,54903],{"class":1142},[159,190114,169453],{"class":8765},[159,190116,27364],{"class":165},[159,190118,190119,190121,190123,190125],{"class":161,"line":176},[159,190120,168123],{"class":165},[159,190122,189],{"class":1142},[159,190124,169453],{"class":8765},[159,190126,189801],{"class":165},[159,190128,190129,190131],{"class":161,"line":203},[159,190130,54819],{"class":1146},[159,190132,189808],{"class":165},[14,190134,190135],{},"等价于打开文件、读取、最后关闭，但更安全。",[37,190137,190139],{"id":190138},"_86-写入文件","8.6 写入文件",[14,190141,190142,190144],{},[49,190143,24625],{}," 模式会清空原文件。",[151,190146,190148],{"className":53900,"code":190147,"language":53902,"meta":25,"style":25},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[49,190149,190150,190180,190197],{"__ignoreMap":25},[159,190151,190152,190154,190156,190158,190160,190162,190164,190166,190168,190170,190172,190174,190176,190178],{"class":161,"line":162},[159,190153,129133],{"class":1142},[159,190155,168091],{"class":1146},[159,190157,1159],{"class":165},[159,190159,168096],{"class":192},[159,190161,1939],{"class":165},[159,190163,173276],{"class":192},[159,190165,1939],{"class":165},[159,190167,168106],{"class":8765},[159,190169,189],{"class":1142},[159,190171,168111],{"class":192},[159,190173,2710],{"class":165},[159,190175,54903],{"class":1142},[159,190177,169453],{"class":8765},[159,190179,27364],{"class":165},[159,190181,190182,190185,190188,190191,190193,190195],{"class":161,"line":176},[159,190183,190184],{"class":8765},"    file",[159,190186,190187],{"class":165},".write(",[159,190189,190190],{"class":192},"\"hello",[159,190192,177825],{"class":1146},[159,190194,24115],{"class":192},[159,190196,1165],{"class":165},[159,190198,190199,190201,190203,190206,190208,190210],{"class":161,"line":203},[159,190200,190184],{"class":8765},[159,190202,190187],{"class":165},[159,190204,190205],{"class":192},"\"python",[159,190207,177825],{"class":1146},[159,190209,24115],{"class":192},[159,190211,1165],{"class":165},[14,190213,190214],{},"写入多行：",[151,190216,190218],{"className":53900,"code":190217,"language":53902,"meta":25,"style":25},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[49,190219,190220,190255,190259,190290],{"__ignoreMap":25},[159,190221,190222,190224,190226,190228,190231,190233,190235,190237,190240,190242,190244,190246,190249,190251,190253],{"class":161,"line":162},[159,190223,189951],{"class":165},[159,190225,189],{"class":1142},[159,190227,4608],{"class":165},[159,190229,190230],{"class":192},"\"小明,18",[159,190232,177825],{"class":1146},[159,190234,24115],{"class":192},[159,190236,1939],{"class":165},[159,190238,190239],{"class":192},"\"小红,17",[159,190241,177825],{"class":1146},[159,190243,24115],{"class":192},[159,190245,1939],{"class":165},[159,190247,190248],{"class":192},"\"小刚,19",[159,190250,177825],{"class":1146},[159,190252,24115],{"class":192},[159,190254,4634],{"class":165},[159,190256,190257],{"class":161,"line":176},[159,190258,590],{"emptyLinePlaceholder":589},[159,190260,190261,190263,190265,190267,190270,190272,190274,190276,190278,190280,190282,190284,190286,190288],{"class":161,"line":203},[159,190262,129133],{"class":1142},[159,190264,168091],{"class":1146},[159,190266,1159],{"class":165},[159,190268,190269],{"class":192},"\"students.txt\"",[159,190271,1939],{"class":165},[159,190273,173276],{"class":192},[159,190275,1939],{"class":165},[159,190277,168106],{"class":8765},[159,190279,189],{"class":1142},[159,190281,168111],{"class":192},[159,190283,2710],{"class":165},[159,190285,54903],{"class":1142},[159,190287,169453],{"class":8765},[159,190289,27364],{"class":165},[159,190291,190292,190294],{"class":161,"line":223},[159,190293,190184],{"class":8765},[159,190295,190296],{"class":165},".writelines(lines)\n",[37,190298,190300],{"id":190299},"_87-追加文件","8.7 追加文件",[14,190302,190303,190305],{},[49,190304,8085],{}," 模式不会清空原内容，而是在末尾追加。",[151,190307,190309],{"className":53900,"code":190308,"language":53902,"meta":25,"style":25},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[49,190310,190311,190342],{"__ignoreMap":25},[159,190312,190313,190315,190317,190319,190322,190324,190326,190328,190330,190332,190334,190336,190338,190340],{"class":161,"line":162},[159,190314,129133],{"class":1142},[159,190316,168091],{"class":1146},[159,190318,1159],{"class":165},[159,190320,190321],{"class":192},"\"log.txt\"",[159,190323,1939],{"class":165},[159,190325,186625],{"class":192},[159,190327,1939],{"class":165},[159,190329,168106],{"class":8765},[159,190331,189],{"class":1142},[159,190333,168111],{"class":192},[159,190335,2710],{"class":165},[159,190337,54903],{"class":1142},[159,190339,169453],{"class":8765},[159,190341,27364],{"class":165},[159,190343,190344,190346,190348,190351,190353,190355],{"class":161,"line":176},[159,190345,190184],{"class":8765},[159,190347,190187],{"class":165},[159,190349,190350],{"class":192},"\"程序启动",[159,190352,177825],{"class":1146},[159,190354,24115],{"class":192},[159,190356,1165],{"class":165},[14,190358,190359],{},"日志类文件常用追加模式。",[37,190361,190363],{"id":190362},"_88-文件编码","8.8 文件编码",[14,190365,190366],{},"编码决定文字如何保存为字节。",[14,190368,190369],{},"常见编码：",[134,190371,190372,190375],{},[106,190373,190374],{},"UTF-8：推荐。",[106,190376,190377],{},"GBK：部分 Windows 中文文件常见。",[14,190379,190380],{},"读取文件乱码时，可以尝试：",[151,190382,190384],{"className":53900,"code":190383,"language":53902,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[49,190385,190386,190417],{"__ignoreMap":25},[159,190387,190388,190390,190392,190394,190396,190398,190400,190402,190404,190406,190409,190411,190413,190415],{"class":161,"line":162},[159,190389,129133],{"class":1142},[159,190391,168091],{"class":1146},[159,190393,1159],{"class":165},[159,190395,168096],{"class":192},[159,190397,1939],{"class":165},[159,190399,168101],{"class":192},[159,190401,1939],{"class":165},[159,190403,168106],{"class":8765},[159,190405,189],{"class":1142},[159,190407,190408],{"class":192},"\"gbk\"",[159,190410,2710],{"class":165},[159,190412,54903],{"class":1142},[159,190414,169453],{"class":8765},[159,190416,27364],{"class":165},[159,190418,190419,190421,190423,190425],{"class":161,"line":176},[159,190420,168123],{"class":165},[159,190422,189],{"class":1142},[159,190424,169453],{"class":8765},[159,190426,189801],{"class":165},[14,190428,190429],{},"写文件时建议统一 UTF-8：",[151,190431,190433],{"className":53900,"code":190432,"language":53902,"meta":25,"style":25},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[49,190434,190435,190465],{"__ignoreMap":25},[159,190436,190437,190439,190441,190443,190445,190447,190449,190451,190453,190455,190457,190459,190461,190463],{"class":161,"line":162},[159,190438,129133],{"class":1142},[159,190440,168091],{"class":1146},[159,190442,1159],{"class":165},[159,190444,168096],{"class":192},[159,190446,1939],{"class":165},[159,190448,173276],{"class":192},[159,190450,1939],{"class":165},[159,190452,168106],{"class":8765},[159,190454,189],{"class":1142},[159,190456,168111],{"class":192},[159,190458,2710],{"class":165},[159,190460,54903],{"class":1142},[159,190462,169453],{"class":8765},[159,190464,27364],{"class":165},[159,190466,190467,190469,190471,190474],{"class":161,"line":176},[159,190468,190184],{"class":8765},[159,190470,190187],{"class":165},[159,190472,190473],{"class":192},"\"中文内容\"",[159,190475,1165],{"class":165},[37,190477,190479],{"id":190478},"_89-pathlib","8.9 pathlib",[14,190481,190482,190485],{},[49,190483,190484],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[151,190487,190489],{"className":53900,"code":190488,"language":53902,"meta":25,"style":25},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[49,190490,190491,190501,190505,190523],{"__ignoreMap":25},[159,190492,190493,190495,190497,190499],{"class":161,"line":162},[159,190494,54258],{"class":1142},[159,190496,129611],{"class":165},[159,190498,53914],{"class":1142},[159,190500,129616],{"class":165},[159,190502,190503],{"class":161,"line":176},[159,190504,590],{"emptyLinePlaceholder":589},[159,190506,190507,190509,190511,190513,190516,190518,190520],{"class":161,"line":203},[159,190508,189611],{"class":165},[159,190510,189],{"class":1142},[159,190512,129845],{"class":165},[159,190514,190515],{"class":192},"\"data\"",[159,190517,2710],{"class":165},[159,190519,13083],{"class":1142},[159,190521,190522],{"class":192}," \"students.txt\"\n",[159,190524,190525,190527],{"class":161,"line":223},[159,190526,53937],{"class":1146},[159,190528,190529],{"class":165},"(path)\n",[14,190531,190532],{},"创建目录：",[151,190534,190536],{"className":53900,"code":190535,"language":53902,"meta":25,"style":25},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[49,190537,190538,190548,190552,190565],{"__ignoreMap":25},[159,190539,190540,190542,190544,190546],{"class":161,"line":162},[159,190541,54258],{"class":1142},[159,190543,129611],{"class":165},[159,190545,53914],{"class":1142},[159,190547,129616],{"class":165},[159,190549,190550],{"class":161,"line":176},[159,190551,590],{"emptyLinePlaceholder":589},[159,190553,190554,190557,190559,190561,190563],{"class":161,"line":203},[159,190555,190556],{"class":165},"data_dir ",[159,190558,189],{"class":1142},[159,190560,129845],{"class":165},[159,190562,190515],{"class":192},[159,190564,1165],{"class":165},[159,190566,190567,190570,190573,190575,190577],{"class":161,"line":223},[159,190568,190569],{"class":165},"data_dir.mkdir(",[159,190571,190572],{"class":8765},"exist_ok",[159,190574,189],{"class":1142},[159,190576,54995],{"class":1146},[159,190578,1165],{"class":165},[14,190580,190581],{},"判断文件是否存在：",[151,190583,190585],{"className":53900,"code":190584,"language":53902,"meta":25,"style":25},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[49,190586,190587,190600,190604,190611],{"__ignoreMap":25},[159,190588,190589,190591,190593,190595,190598],{"class":161,"line":162},[159,190590,189611],{"class":165},[159,190592,189],{"class":1142},[159,190594,129845],{"class":165},[159,190596,190597],{"class":192},"\"data\u002Fstudents.txt\"",[159,190599,1165],{"class":165},[159,190601,190602],{"class":161,"line":176},[159,190603,590],{"emptyLinePlaceholder":589},[159,190605,190606,190608],{"class":161,"line":203},[159,190607,18445],{"class":1142},[159,190609,190610],{"class":165}," path.exists():\n",[159,190612,190613,190615,190617,190620],{"class":161,"line":223},[159,190614,54819],{"class":1146},[159,190616,1159],{"class":165},[159,190618,190619],{"class":192},"\"文件存在\"",[159,190621,1165],{"class":165},[14,190623,190624],{},"读写文本：",[151,190626,190628],{"className":53900,"code":190627,"language":53902,"meta":25,"style":25},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[49,190629,190630,190642,190646,190663,190680],{"__ignoreMap":25},[159,190631,190632,190634,190636,190638,190640],{"class":161,"line":162},[159,190633,189611],{"class":165},[159,190635,189],{"class":1142},[159,190637,129845],{"class":165},[159,190639,168096],{"class":192},[159,190641,1165],{"class":165},[159,190643,190644],{"class":161,"line":176},[159,190645,590],{"emptyLinePlaceholder":589},[159,190647,190648,190651,190653,190655,190657,190659,190661],{"class":161,"line":203},[159,190649,190650],{"class":165},"path.write_text(",[159,190652,167176],{"class":192},[159,190654,1939],{"class":165},[159,190656,168106],{"class":8765},[159,190658,189],{"class":1142},[159,190660,168111],{"class":192},[159,190662,1165],{"class":165},[159,190664,190665,190667,190669,190672,190674,190676,190678],{"class":161,"line":223},[159,190666,189794],{"class":165},[159,190668,189],{"class":1142},[159,190670,190671],{"class":165}," path.read_text(",[159,190673,168106],{"class":8765},[159,190675,189],{"class":1142},[159,190677,168111],{"class":192},[159,190679,1165],{"class":165},[159,190681,190682,190684],{"class":161,"line":233},[159,190683,53937],{"class":1146},[159,190685,189808],{"class":165},[37,190687,190689],{"id":190688},"_810-json文件","8.10 JSON文件",[14,190691,190692],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[151,190694,190696],{"className":53900,"code":190695,"language":53902,"meta":25,"style":25},"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",[49,190697,190698,190704,190708,190716,190726,190736,190744,190748,190752,190777],{"__ignoreMap":25},[159,190699,190700,190702],{"class":161,"line":162},[159,190701,53914],{"class":1142},[159,190703,168391],{"class":165},[159,190705,190706],{"class":161,"line":176},[159,190707,590],{"emptyLinePlaceholder":589},[159,190709,190710,190712,190714],{"class":161,"line":203},[159,190711,170781],{"class":165},[159,190713,189],{"class":1142},[159,190715,1478],{"class":165},[159,190717,190718,190720,190722,190724],{"class":161,"line":223},[159,190719,168320],{"class":192},[159,190721,1486],{"class":165},[159,190723,171188],{"class":192},[159,190725,17070],{"class":165},[159,190727,190728,190730,190732,190734],{"class":161,"line":233},[159,190729,185837],{"class":192},[159,190731,1486],{"class":165},[159,190733,18723],{"class":1146},[159,190735,17070],{"class":165},[159,190737,190738,190740,190742],{"class":161,"line":239},[159,190739,185848],{"class":192},[159,190741,1486],{"class":165},[159,190743,185853],{"class":1146},[159,190745,190746],{"class":161,"line":245},[159,190747,15685],{"class":165},[159,190749,190750],{"class":161,"line":251},[159,190751,590],{"emptyLinePlaceholder":589},[159,190753,190754,190756,190758,190761,190763,190765,190767,190769,190771,190773,190775],{"class":161,"line":261},[159,190755,177744],{"class":165},[159,190757,189],{"class":1142},[159,190759,190760],{"class":165}," json.dumps(student, ",[159,190762,168437],{"class":8765},[159,190764,189],{"class":1142},[159,190766,57382],{"class":1146},[159,190768,1939],{"class":165},[159,190770,173312],{"class":8765},[159,190772,189],{"class":1142},[159,190774,11034],{"class":1146},[159,190776,1165],{"class":165},[159,190778,190779,190781],{"class":161,"line":603},[159,190780,53937],{"class":1146},[159,190782,185371],{"class":165},[14,190784,190785],{},"写入 JSON 文件：",[151,190787,190789],{"className":53900,"code":190788,"language":53902,"meta":25,"style":25},"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",[49,190790,190791,190797,190801,190809,190837,190865,190869,190873,190903],{"__ignoreMap":25},[159,190792,190793,190795],{"class":161,"line":162},[159,190794,53914],{"class":1142},[159,190796,168391],{"class":165},[159,190798,190799],{"class":161,"line":176},[159,190800,590],{"emptyLinePlaceholder":589},[159,190802,190803,190805,190807],{"class":161,"line":203},[159,190804,181016],{"class":165},[159,190806,189],{"class":1142},[159,190808,2303],{"class":165},[159,190810,190811,190813,190815,190817,190819,190821,190823,190825,190827,190829,190831,190833,190835],{"class":161,"line":223},[159,190812,169685],{"class":165},[159,190814,9722],{"class":192},[159,190816,1486],{"class":165},[159,190818,171188],{"class":192},[159,190820,1939],{"class":165},[159,190822,16198],{"class":192},[159,190824,1486],{"class":165},[159,190826,18723],{"class":1146},[159,190828,1939],{"class":165},[159,190830,172772],{"class":192},[159,190832,1486],{"class":165},[159,190834,24804],{"class":1146},[159,190836,28548],{"class":165},[159,190838,190839,190841,190843,190845,190847,190849,190851,190853,190855,190857,190859,190861,190863],{"class":161,"line":233},[159,190840,169685],{"class":165},[159,190842,9722],{"class":192},[159,190844,1486],{"class":165},[159,190846,172236],{"class":192},[159,190848,1939],{"class":165},[159,190850,16198],{"class":192},[159,190852,1486],{"class":165},[159,190854,24461],{"class":1146},[159,190856,1939],{"class":165},[159,190858,172772],{"class":192},[159,190860,1486],{"class":165},[159,190862,24640],{"class":1146},[159,190864,28548],{"class":165},[159,190866,190867],{"class":161,"line":239},[159,190868,4634],{"class":165},[159,190870,190871],{"class":161,"line":245},[159,190872,590],{"emptyLinePlaceholder":589},[159,190874,190875,190877,190879,190881,190883,190885,190887,190889,190891,190893,190895,190897,190899,190901],{"class":161,"line":251},[159,190876,129133],{"class":1142},[159,190878,168091],{"class":1146},[159,190880,1159],{"class":165},[159,190882,173131],{"class":192},[159,190884,1939],{"class":165},[159,190886,173276],{"class":192},[159,190888,1939],{"class":165},[159,190890,168106],{"class":8765},[159,190892,189],{"class":1142},[159,190894,168111],{"class":192},[159,190896,2710],{"class":165},[159,190898,54903],{"class":1142},[159,190900,169453],{"class":8765},[159,190902,27364],{"class":165},[159,190904,190905,190908,190910,190912,190914,190916,190918,190920,190922,190924,190926],{"class":161,"line":261},[159,190906,190907],{"class":165},"    json.dump(students, ",[159,190909,68749],{"class":8765},[159,190911,1939],{"class":165},[159,190913,168437],{"class":8765},[159,190915,189],{"class":1142},[159,190917,57382],{"class":1146},[159,190919,1939],{"class":165},[159,190921,173312],{"class":8765},[159,190923,189],{"class":1142},[159,190925,11034],{"class":1146},[159,190927,1165],{"class":165},[14,190929,190930],{},"读取 JSON 文件：",[151,190932,190934],{"className":53900,"code":190933,"language":53902,"meta":25,"style":25},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[49,190935,190936,190942,190946,190976,190988,190992],{"__ignoreMap":25},[159,190937,190938,190940],{"class":161,"line":162},[159,190939,53914],{"class":1142},[159,190941,168391],{"class":165},[159,190943,190944],{"class":161,"line":176},[159,190945,590],{"emptyLinePlaceholder":589},[159,190947,190948,190950,190952,190954,190956,190958,190960,190962,190964,190966,190968,190970,190972,190974],{"class":161,"line":203},[159,190949,129133],{"class":1142},[159,190951,168091],{"class":1146},[159,190953,1159],{"class":165},[159,190955,173131],{"class":192},[159,190957,1939],{"class":165},[159,190959,168101],{"class":192},[159,190961,1939],{"class":165},[159,190963,168106],{"class":8765},[159,190965,189],{"class":1142},[159,190967,168111],{"class":192},[159,190969,2710],{"class":165},[159,190971,54903],{"class":1142},[159,190973,169453],{"class":8765},[159,190975,27364],{"class":165},[159,190977,190978,190980,190982,190984,190986],{"class":161,"line":223},[159,190979,174337],{"class":165},[159,190981,189],{"class":1142},[159,190983,169464],{"class":165},[159,190985,68749],{"class":8765},[159,190987,1165],{"class":165},[159,190989,190990],{"class":161,"line":233},[159,190991,590],{"emptyLinePlaceholder":589},[159,190993,190994,190996],{"class":161,"line":239},[159,190995,53937],{"class":1146},[159,190997,186295],{"class":165},[37,190999,191001],{"id":191000},"_811-csv文件","8.11 CSV文件",[14,191003,191004],{},"CSV 是逗号分隔值，常用于表格数据。",[14,191006,191007],{},"写入 CSV：",[151,191009,191011],{"className":53900,"code":191010,"language":53902,"meta":25,"style":25},"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",[49,191012,191013,191020,191024,191032,191050,191066,191082,191086,191090,191130,191144],{"__ignoreMap":25},[159,191014,191015,191017],{"class":161,"line":162},[159,191016,53914],{"class":1142},[159,191018,191019],{"class":165}," csv\n",[159,191021,191022],{"class":161,"line":176},[159,191023,590],{"emptyLinePlaceholder":589},[159,191025,191026,191028,191030],{"class":161,"line":203},[159,191027,181016],{"class":165},[159,191029,189],{"class":1142},[159,191031,2303],{"class":165},[159,191033,191034,191037,191039,191041,191043,191045,191048],{"class":161,"line":223},[159,191035,191036],{"class":165},"    [",[159,191038,20202],{"class":192},[159,191040,1939],{"class":165},[159,191042,20235],{"class":192},[159,191044,1939],{"class":165},[159,191046,191047],{"class":192},"\"成绩\"",[159,191049,109136],{"class":165},[159,191051,191052,191054,191056,191058,191060,191062,191064],{"class":161,"line":233},[159,191053,191036],{"class":165},[159,191055,171188],{"class":192},[159,191057,1939],{"class":165},[159,191059,18723],{"class":1146},[159,191061,1939],{"class":165},[159,191063,24804],{"class":1146},[159,191065,109136],{"class":165},[159,191067,191068,191070,191072,191074,191076,191078,191080],{"class":161,"line":239},[159,191069,191036],{"class":165},[159,191071,172236],{"class":192},[159,191073,1939],{"class":165},[159,191075,24461],{"class":1146},[159,191077,1939],{"class":165},[159,191079,24640],{"class":1146},[159,191081,109136],{"class":165},[159,191083,191084],{"class":161,"line":245},[159,191085,4634],{"class":165},[159,191087,191088],{"class":161,"line":251},[159,191089,590],{"emptyLinePlaceholder":589},[159,191091,191092,191094,191096,191098,191101,191103,191105,191107,191109,191111,191113,191115,191118,191120,191122,191124,191126,191128],{"class":161,"line":261},[159,191093,129133],{"class":1142},[159,191095,168091],{"class":1146},[159,191097,1159],{"class":165},[159,191099,191100],{"class":192},"\"students.csv\"",[159,191102,1939],{"class":165},[159,191104,173276],{"class":192},[159,191106,1939],{"class":165},[159,191108,168106],{"class":8765},[159,191110,189],{"class":1142},[159,191112,168111],{"class":192},[159,191114,1939],{"class":165},[159,191116,191117],{"class":8765},"newline",[159,191119,189],{"class":1142},[159,191121,552],{"class":192},[159,191123,2710],{"class":165},[159,191125,54903],{"class":1142},[159,191127,169453],{"class":8765},[159,191129,27364],{"class":165},[159,191131,191132,191135,191137,191140,191142],{"class":161,"line":603},[159,191133,191134],{"class":165},"    writer ",[159,191136,189],{"class":1142},[159,191138,191139],{"class":165}," csv.writer(",[159,191141,68749],{"class":8765},[159,191143,1165],{"class":165},[159,191145,191146],{"class":161,"line":621},[159,191147,191148],{"class":165},"    writer.writerows(students)\n",[14,191150,191151],{},"读取 CSV：",[151,191153,191155],{"className":53900,"code":191154,"language":53902,"meta":25,"style":25},"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",[49,191156,191157,191163,191167,191197,191211,191223],{"__ignoreMap":25},[159,191158,191159,191161],{"class":161,"line":162},[159,191160,53914],{"class":1142},[159,191162,191019],{"class":165},[159,191164,191165],{"class":161,"line":176},[159,191166,590],{"emptyLinePlaceholder":589},[159,191168,191169,191171,191173,191175,191177,191179,191181,191183,191185,191187,191189,191191,191193,191195],{"class":161,"line":203},[159,191170,129133],{"class":1142},[159,191172,168091],{"class":1146},[159,191174,1159],{"class":165},[159,191176,191100],{"class":192},[159,191178,1939],{"class":165},[159,191180,168101],{"class":192},[159,191182,1939],{"class":165},[159,191184,168106],{"class":8765},[159,191186,189],{"class":1142},[159,191188,168111],{"class":192},[159,191190,2710],{"class":165},[159,191192,54903],{"class":1142},[159,191194,169453],{"class":8765},[159,191196,27364],{"class":165},[159,191198,191199,191202,191204,191207,191209],{"class":161,"line":223},[159,191200,191201],{"class":165},"    reader ",[159,191203,189],{"class":1142},[159,191205,191206],{"class":165}," csv.reader(",[159,191208,68749],{"class":8765},[159,191210,1165],{"class":165},[159,191212,191213,191215,191218,191220],{"class":161,"line":233},[159,191214,11677],{"class":1142},[159,191216,191217],{"class":165}," row ",[159,191219,49566],{"class":1142},[159,191221,191222],{"class":165}," reader:\n",[159,191224,191225,191227],{"class":161,"line":239},[159,191226,55969],{"class":1146},[159,191228,191229],{"class":165},"(row)\n",[14,191231,191232],{},"使用字典写入：",[151,191234,191236],{"className":53900,"code":191235,"language":53902,"meta":25,"style":25},"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",[49,191237,191238,191244,191248,191256,191284,191312,191316,191320,191358,191379,191400,191405],{"__ignoreMap":25},[159,191239,191240,191242],{"class":161,"line":162},[159,191241,53914],{"class":1142},[159,191243,191019],{"class":165},[159,191245,191246],{"class":161,"line":176},[159,191247,590],{"emptyLinePlaceholder":589},[159,191249,191250,191252,191254],{"class":161,"line":203},[159,191251,181016],{"class":165},[159,191253,189],{"class":1142},[159,191255,2303],{"class":165},[159,191257,191258,191260,191262,191264,191266,191268,191270,191272,191274,191276,191278,191280,191282],{"class":161,"line":223},[159,191259,169685],{"class":165},[159,191261,9722],{"class":192},[159,191263,1486],{"class":165},[159,191265,171188],{"class":192},[159,191267,1939],{"class":165},[159,191269,16198],{"class":192},[159,191271,1486],{"class":165},[159,191273,18723],{"class":1146},[159,191275,1939],{"class":165},[159,191277,172772],{"class":192},[159,191279,1486],{"class":165},[159,191281,24804],{"class":1146},[159,191283,28548],{"class":165},[159,191285,191286,191288,191290,191292,191294,191296,191298,191300,191302,191304,191306,191308,191310],{"class":161,"line":233},[159,191287,169685],{"class":165},[159,191289,9722],{"class":192},[159,191291,1486],{"class":165},[159,191293,172236],{"class":192},[159,191295,1939],{"class":165},[159,191297,16198],{"class":192},[159,191299,1486],{"class":165},[159,191301,24461],{"class":1146},[159,191303,1939],{"class":165},[159,191305,172772],{"class":192},[159,191307,1486],{"class":165},[159,191309,24640],{"class":1146},[159,191311,28548],{"class":165},[159,191313,191314],{"class":161,"line":239},[159,191315,4634],{"class":165},[159,191317,191318],{"class":161,"line":245},[159,191319,590],{"emptyLinePlaceholder":589},[159,191321,191322,191324,191326,191328,191330,191332,191334,191336,191338,191340,191342,191344,191346,191348,191350,191352,191354,191356],{"class":161,"line":251},[159,191323,129133],{"class":1142},[159,191325,168091],{"class":1146},[159,191327,1159],{"class":165},[159,191329,191100],{"class":192},[159,191331,1939],{"class":165},[159,191333,173276],{"class":192},[159,191335,1939],{"class":165},[159,191337,168106],{"class":8765},[159,191339,189],{"class":1142},[159,191341,168111],{"class":192},[159,191343,1939],{"class":165},[159,191345,191117],{"class":8765},[159,191347,189],{"class":1142},[159,191349,552],{"class":192},[159,191351,2710],{"class":165},[159,191353,54903],{"class":1142},[159,191355,169453],{"class":8765},[159,191357,27364],{"class":165},[159,191359,191360,191363,191365,191367,191369,191371,191373,191375,191377],{"class":161,"line":261},[159,191361,191362],{"class":165},"    fieldnames ",[159,191364,189],{"class":1142},[159,191366,4608],{"class":165},[159,191368,9722],{"class":192},[159,191370,1939],{"class":165},[159,191372,16198],{"class":192},[159,191374,1939],{"class":165},[159,191376,172772],{"class":192},[159,191378,4634],{"class":165},[159,191380,191381,191383,191385,191388,191390,191392,191395,191397],{"class":161,"line":603},[159,191382,191134],{"class":165},[159,191384,189],{"class":1142},[159,191386,191387],{"class":165}," csv.DictWriter(",[159,191389,68749],{"class":8765},[159,191391,1939],{"class":165},[159,191393,191394],{"class":8765},"fieldnames",[159,191396,189],{"class":1142},[159,191398,191399],{"class":165},"fieldnames)\n",[159,191401,191402],{"class":161,"line":621},[159,191403,191404],{"class":165},"    writer.writeheader()\n",[159,191406,191407],{"class":161,"line":634},[159,191408,191148],{"class":165},[37,191410,191412],{"id":191411},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,191414,144592],{},[134,191416,191417,191420,191423],{},[106,191418,191419],{},"读取文本文件。",[106,191421,191422],{},"统计每个单词出现次数。",[106,191424,191425],{},"输出出现次数最多的前 10 个单词。",[14,191427,33610],{},[151,191429,191431],{"className":53900,"code":191430,"language":53902,"meta":25,"style":25},"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",[49,191432,191433,191443,191447,191460,191476,191480,191490,191499,191503,191515,191535,191544,191548,191566,191570,191600,191604,191620],{"__ignoreMap":25},[159,191434,191435,191437,191439,191441],{"class":161,"line":162},[159,191436,54258],{"class":1142},[159,191438,129611],{"class":165},[159,191440,53914],{"class":1142},[159,191442,129616],{"class":165},[159,191444,191445],{"class":161,"line":176},[159,191446,590],{"emptyLinePlaceholder":589},[159,191448,191449,191451,191453,191455,191458],{"class":161,"line":203},[159,191450,189611],{"class":165},[159,191452,189],{"class":1142},[159,191454,129845],{"class":165},[159,191456,191457],{"class":192},"\"article.txt\"",[159,191459,1165],{"class":165},[159,191461,191462,191464,191466,191468,191470,191472,191474],{"class":161,"line":223},[159,191463,189794],{"class":165},[159,191465,189],{"class":1142},[159,191467,190671],{"class":165},[159,191469,168106],{"class":8765},[159,191471,189],{"class":1142},[159,191473,168111],{"class":192},[159,191475,1165],{"class":165},[159,191477,191478],{"class":161,"line":233},[159,191479,590],{"emptyLinePlaceholder":589},[159,191481,191482,191485,191487],{"class":161,"line":239},[159,191483,191484],{"class":165},"words ",[159,191486,189],{"class":1142},[159,191488,191489],{"class":165}," content.lower().split()\n",[159,191491,191492,191495,191497],{"class":161,"line":245},[159,191493,191494],{"class":165},"counter ",[159,191496,189],{"class":1142},[159,191498,109168],{"class":165},[159,191500,191501],{"class":161,"line":251},[159,191502,590],{"emptyLinePlaceholder":589},[159,191504,191505,191507,191510,191512],{"class":161,"line":261},[159,191506,26657],{"class":1142},[159,191508,191509],{"class":165}," word ",[159,191511,49566],{"class":1142},[159,191513,191514],{"class":165}," words:\n",[159,191516,191517,191520,191522,191525,191528,191530,191533],{"class":161,"line":603},[159,191518,191519],{"class":165},"    word ",[159,191521,189],{"class":1142},[159,191523,191524],{"class":165}," word.strip(",[159,191526,191527],{"class":192},"\".,!?;:",[159,191529,177795],{"class":1146},[159,191531,191532],{"class":192},"'()[]\"",[159,191534,1165],{"class":165},[159,191536,191537,191539,191541],{"class":161,"line":621},[159,191538,26732],{"class":1142},[159,191540,62325],{"class":1142},[159,191542,191543],{"class":165}," word:\n",[159,191545,191546],{"class":161,"line":634},[159,191547,169812],{"class":1142},[159,191549,191550,191553,191555,191558,191560,191562,191564],{"class":161,"line":640},[159,191551,191552],{"class":165},"    counter[word] ",[159,191554,189],{"class":1142},[159,191556,191557],{"class":165}," counter.get(word, ",[159,191559,1489],{"class":1146},[159,191561,2710],{"class":165},[159,191563,2704],{"class":1142},[159,191565,2570],{"class":1146},[159,191567,191568],{"class":161,"line":1075},[159,191569,590],{"emptyLinePlaceholder":589},[159,191571,191572,191575,191577,191579,191582,191584,191586,191588,191590,191592,191594,191596,191598],{"class":161,"line":1081},[159,191573,191574],{"class":165},"items ",[159,191576,189],{"class":1142},[159,191578,184904],{"class":1146},[159,191580,191581],{"class":165},"(counter.items(), ",[159,191583,175246],{"class":8765},[159,191585,175249],{"class":1142},[159,191587,175252],{"class":165},[159,191589,4932],{"class":1146},[159,191591,133502],{"class":165},[159,191593,184828],{"class":8765},[159,191595,189],{"class":1142},[159,191597,54995],{"class":1146},[159,191599,1165],{"class":165},[159,191601,191602],{"class":161,"line":1091},[159,191603,590],{"emptyLinePlaceholder":589},[159,191605,191606,191608,191611,191613,191616,191618],{"class":161,"line":1100},[159,191607,26657],{"class":1142},[159,191609,191610],{"class":165}," word, count ",[159,191612,49566],{"class":1142},[159,191614,191615],{"class":165}," items[:",[159,191617,1964],{"class":1146},[159,191619,187055],{"class":165},[159,191621,191622,191624],{"class":161,"line":1123},[159,191623,54819],{"class":1146},[159,191625,191626],{"class":165},"(word, count)\n",[37,191628,191630],{"id":191629},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[151,191632,191634],{"className":53900,"code":191633,"language":53902,"meta":25,"style":25},"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",[49,191635,191636,191642,191652,191656,191668,191672,191676,191684,191694,191700,191704,191734,191744,191748,191752,191760,191790,191814,191818,191822,191830,191859,191864],{"__ignoreMap":25},[159,191637,191638,191640],{"class":161,"line":162},[159,191639,53914],{"class":1142},[159,191641,168391],{"class":165},[159,191643,191644,191646,191648,191650],{"class":161,"line":176},[159,191645,54258],{"class":1142},[159,191647,129611],{"class":165},[159,191649,53914],{"class":1142},[159,191651,129616],{"class":165},[159,191653,191654],{"class":161,"line":203},[159,191655,590],{"emptyLinePlaceholder":589},[159,191657,191658,191660,191662,191664,191666],{"class":161,"line":223},[159,191659,173124],{"class":1146},[159,191661,1150],{"class":1142},[159,191663,129845],{"class":165},[159,191665,173131],{"class":192},[159,191667,1165],{"class":165},[159,191669,191670],{"class":161,"line":233},[159,191671,590],{"emptyLinePlaceholder":589},[159,191673,191674],{"class":161,"line":239},[159,191675,590],{"emptyLinePlaceholder":589},[159,191677,191678,191680,191682],{"class":161,"line":245},[159,191679,55465],{"class":1142},[159,191681,173148],{"class":185},[159,191683,55471],{"class":165},[159,191685,191686,191688,191690,191692],{"class":161,"line":251},[159,191687,26732],{"class":1142},[159,191689,62325],{"class":1142},[159,191691,173159],{"class":1146},[159,191693,173162],{"class":165},[159,191695,191696,191698],{"class":161,"line":261},[159,191697,21176],{"class":1142},[159,191699,16884],{"class":165},[159,191701,191702],{"class":161,"line":603},[159,191703,590],{"emptyLinePlaceholder":589},[159,191705,191706,191708,191710,191712,191714,191716,191718,191720,191722,191724,191726,191728,191730,191732],{"class":161,"line":621},[159,191707,57573],{"class":1142},[159,191709,168091],{"class":1146},[159,191711,1159],{"class":165},[159,191713,173124],{"class":1146},[159,191715,1939],{"class":165},[159,191717,168101],{"class":192},[159,191719,1939],{"class":165},[159,191721,168106],{"class":8765},[159,191723,189],{"class":1142},[159,191725,168111],{"class":192},[159,191727,2710],{"class":165},[159,191729,54903],{"class":1142},[159,191731,169453],{"class":8765},[159,191733,27364],{"class":165},[159,191735,191736,191738,191740,191742],{"class":161,"line":634},[159,191737,21176],{"class":1142},[159,191739,169464],{"class":165},[159,191741,68749],{"class":8765},[159,191743,1165],{"class":165},[159,191745,191746],{"class":161,"line":640},[159,191747,590],{"emptyLinePlaceholder":589},[159,191749,191750],{"class":161,"line":1075},[159,191751,590],{"emptyLinePlaceholder":589},[159,191753,191754,191756,191758],{"class":161,"line":1081},[159,191755,55465],{"class":1142},[159,191757,173258],{"class":185},[159,191759,173261],{"class":165},[159,191761,191762,191764,191766,191768,191770,191772,191774,191776,191778,191780,191782,191784,191786,191788],{"class":161,"line":1091},[159,191763,57573],{"class":1142},[159,191765,168091],{"class":1146},[159,191767,1159],{"class":165},[159,191769,173124],{"class":1146},[159,191771,1939],{"class":165},[159,191773,173276],{"class":192},[159,191775,1939],{"class":165},[159,191777,168106],{"class":8765},[159,191779,189],{"class":1142},[159,191781,168111],{"class":192},[159,191783,2710],{"class":165},[159,191785,54903],{"class":1142},[159,191787,169453],{"class":8765},[159,191789,27364],{"class":165},[159,191791,191792,191794,191796,191798,191800,191802,191804,191806,191808,191810,191812],{"class":161,"line":1100},[159,191793,173297],{"class":165},[159,191795,68749],{"class":8765},[159,191797,1939],{"class":165},[159,191799,168437],{"class":8765},[159,191801,189],{"class":1142},[159,191803,57382],{"class":1146},[159,191805,1939],{"class":165},[159,191807,173312],{"class":8765},[159,191809,189],{"class":1142},[159,191811,11034],{"class":1146},[159,191813,1165],{"class":165},[159,191815,191816],{"class":161,"line":1123},[159,191817,590],{"emptyLinePlaceholder":589},[159,191819,191820],{"class":161,"line":1132},[159,191821,590],{"emptyLinePlaceholder":589},[159,191823,191824,191826,191828],{"class":161,"line":1139},[159,191825,181016],{"class":165},[159,191827,189],{"class":1142},[159,191829,174342],{"class":165},[159,191831,191832,191835,191837,191839,191841,191843,191845,191847,191849,191851,191853,191855,191857],{"class":161,"line":1168},[159,191833,191834],{"class":165},"students.append({",[159,191836,9722],{"class":192},[159,191838,1486],{"class":165},[159,191840,171188],{"class":192},[159,191842,1939],{"class":165},[159,191844,16198],{"class":192},[159,191846,1486],{"class":165},[159,191848,18723],{"class":1146},[159,191850,1939],{"class":165},[159,191852,172772],{"class":192},[159,191854,1486],{"class":165},[159,191856,24804],{"class":1146},[159,191858,186452],{"class":165},[159,191860,191861],{"class":161,"line":1174},[159,191862,191863],{"class":165},"save_students(students)\n",[159,191865,191866,191868,191870,191873],{"class":161,"line":1180},[159,191867,53937],{"class":1146},[159,191869,1159],{"class":165},[159,191871,191872],{"class":192},"\"保存成功\"",[159,191874,1165],{"class":165},[37,191876,191878],{"id":191877},"_814-易错点","8.14 易错点",[134,191880,191881,191885,191891,191896,191903,191910],{},[106,191882,191883,190144],{},[49,191884,24625],{},[106,191886,191887,191888,51907],{},"读写中文要指定 ",[49,191889,191890],{},"encoding=\"utf-8\"",[106,191892,191893,191894,51907],{},"打开文件后要关闭，推荐使用 ",[49,191895,129133],{},[106,191897,191898,191899,191902],{},"读取大文件不要直接 ",[49,191900,191901],{},"read()"," 全部内容。",[106,191904,191905,191906,191909],{},"Windows 写 CSV 时建议加 ",[49,191907,191908],{},"newline=\"\"","，避免空行。",[106,191911,191912],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[37,191914,191916],{"id":191915},"_815-本章练习","8.15 本章练习",[134,191918,191919,191926,191931,191934,191937],{},[106,191920,191921,191922,191925],{},"写入一个 ",[49,191923,191924],{},"students.txt","，每行保存一个学生姓名。",[106,191927,125655,191928,191930],{},[49,191929,191924],{}," 并输出所有学生。",[106,191932,191933],{},"把学生列表保存为 JSON 文件。",[106,191935,191936],{},"从 JSON 文件读取学生数据，计算平均分。",[106,191938,191939,191940,191943,191944,191947],{},"写一个日志函数 ",[49,191941,191942],{},"write_log(message)","，每次调用向 ",[49,191945,191946],{},"app.log"," 追加一行。",[1468,191949,191950],{},"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":25,"searchDepth":176,"depth":176,"links":191952},[191953,191954,191958,191959,191965,191966,191967,191968,191969,191970,191971,191972,191973,191974,191975],{"id":189464,"depth":176,"text":189465},{"id":189505,"depth":176,"text":189506,"children":191955},[191956,191957],{"id":189509,"depth":203,"text":189510},{"id":189543,"depth":203,"text":189544},{"id":189657,"depth":176,"text":189658},{"id":189750,"depth":176,"text":189751,"children":191960},[191961,191962,191963,191964],{"id":189754,"depth":203,"text":189755},{"id":189841,"depth":203,"text":189842},{"id":189911,"depth":203,"text":189912},{"id":190005,"depth":203,"text":190006},{"id":190075,"depth":176,"text":190076},{"id":190138,"depth":176,"text":190139},{"id":190299,"depth":176,"text":190300},{"id":190362,"depth":176,"text":190363},{"id":190478,"depth":176,"text":190479},{"id":190688,"depth":176,"text":190689},{"id":191000,"depth":176,"text":191001},{"id":191411,"depth":176,"text":191412},{"id":191629,"depth":176,"text":191630},{"id":191877,"depth":176,"text":191878},{"id":191915,"depth":176,"text":191916},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":189456,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":191982,"title":191983,"body":191984,"description":23809,"extension":23810,"meta":194170,"navigation":589,"path":194171,"seo":194172,"stem":194173,"__hash__":194174},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":191985,"toc":194137},[191986,191989,191993,191996,191999,192091,192093,192112,192117,192121,192124,192127,192156,192163,192166,192170,192173,192202,192204,192256,192262,192315,192319,192417,192420,192487,192491,192548,192550,192556,192560,192565,192571,192662,192667,192671,192674,192752,192755,192793,192797,192915,192918,192922,192925,192970,192973,192977,192982,192988,193038,193041,193072,193076,193080,193110,193114,193149,193153,193188,193228,193232,193248,193251,193255,193259,193338,193342,193383,193387,193442,193446,193480,193484,193514,193523,193530,193536,193593,193596,193604,193607,193611,193618,193621,193627,193630,193647,193652,193656,193662,193675,193678,193715,193718,193729,193732,193746,193749,193763,193767,193774,193807,193810,193812,193818,193821,193825,193827,193833,193838,194011,194015,194078,194082,194106,194110,194134],[10,191987,191983],{"id":191988},"_9-异常模块与包",[37,191990,191992],{"id":191991},"_91-什么是异常","9.1 什么是异常",[14,191994,191995],{},"异常是程序运行过程中出现的错误。",[14,191997,191998],{},"常见异常：",[12347,192000,192001,192010],{},[16500,192002,192003],{},[12356,192004,192005,192008],{},[12365,192006,192007],{},"异常",[12365,192009,49392],{},[16624,192011,192012,192022,192032,192041,192051,192061,192071,192081],{},[12356,192013,192014,192019],{},[12488,192015,192016],{},[49,192017,192018],{},"NameError",[12488,192020,192021],{},"使用了未定义变量",[12356,192023,192024,192029],{},[12488,192025,192026],{},[49,192027,192028],{},"TypeError",[12488,192030,192031],{},"类型不匹配",[12356,192033,192034,192038],{},[12488,192035,192036],{},[49,192037,176134],{},[12488,192039,192040],{},"值不合法",[12356,192042,192043,192048],{},[12488,192044,192045],{},[49,192046,192047],{},"IndexError",[12488,192049,192050],{},"列表索引越界",[12356,192052,192053,192058],{},[12488,192054,192055],{},[49,192056,192057],{},"KeyError",[12488,192059,192060],{},"字典 key 不存在",[12356,192062,192063,192068],{},[12488,192064,192065],{},[49,192066,192067],{},"FileNotFoundError",[12488,192069,192070],{},"文件不存在",[12356,192072,192073,192078],{},[12488,192074,192075],{},[49,192076,192077],{},"ZeroDivisionError",[12488,192079,192080],{},"除数为 0",[12356,192082,192083,192088],{},[12488,192084,192085],{},[49,192086,192087],{},"ImportError",[12488,192089,192090],{},"导入失败",[14,192092,38698],{},[151,192094,192096],{"className":53900,"code":192095,"language":53902,"meta":25,"style":25},"num = int(\"abc\")\n",[49,192097,192098],{"__ignoreMap":25},[159,192099,192100,192102,192104,192106,192108,192110],{"class":161,"line":162},[159,192101,177087],{"class":165},[159,192103,189],{"class":1142},[159,192105,26029],{"class":1146},[159,192107,1159],{"class":165},[159,192109,177180],{"class":192},[159,192111,1165],{"class":165},[14,192113,192114,192115,51907],{},"会触发 ",[49,192116,176134],{},[37,192118,192120],{"id":192119},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,192122,192123],{},"如果不处理异常，程序会直接终止。",[14,192125,192126],{},"例如用户输入年龄：",[151,192128,192130],{"className":53900,"code":192129,"language":53902,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[49,192131,192132,192150],{"__ignoreMap":25},[159,192133,192134,192136,192138,192140,192142,192144,192146,192148],{"class":161,"line":162},[159,192135,167846],{"class":165},[159,192137,189],{"class":1142},[159,192139,26029],{"class":1146},[159,192141,1159],{"class":165},[159,192143,536],{"class":1146},[159,192145,1159],{"class":165},[159,192147,173694],{"class":192},[159,192149,18787],{"class":165},[159,192151,192152,192154],{"class":161,"line":176},[159,192153,53937],{"class":1146},[159,192155,177061],{"class":165},[14,192157,192158,192159,192162],{},"用户输入 ",[49,192160,192161],{},"abc","，程序就会报错退出。",[14,192164,192165],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[37,192167,192169],{"id":192168},"_93-try-except","9.3 try except",[14,192171,192172],{},"基础语法：",[151,192174,192176],{"className":53900,"code":192175,"language":53902,"meta":25,"style":25},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[49,192177,192178,192185,192190,192197],{"__ignoreMap":25},[159,192179,192180,192183],{"class":161,"line":162},[159,192181,192182],{"class":1142},"try",[159,192184,27364],{"class":165},[159,192186,192187],{"class":161,"line":176},[159,192188,192189],{"class":165},"    可能出错的代码\n",[159,192191,192192,192195],{"class":161,"line":203},[159,192193,192194],{"class":1142},"except",[159,192196,27364],{"class":165},[159,192198,192199],{"class":161,"line":223},[159,192200,192201],{"class":165},"    出错后的处理代码\n",[14,192203,38698],{},[151,192205,192207],{"className":53900,"code":192206,"language":53902,"meta":25,"style":25},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[49,192208,192209,192215,192233,192239,192245],{"__ignoreMap":25},[159,192210,192211,192213],{"class":161,"line":162},[159,192212,192182],{"class":1142},[159,192214,27364],{"class":165},[159,192216,192217,192219,192221,192223,192225,192227,192229,192231],{"class":161,"line":176},[159,192218,173686],{"class":165},[159,192220,189],{"class":1142},[159,192222,26029],{"class":1146},[159,192224,1159],{"class":165},[159,192226,536],{"class":1146},[159,192228,1159],{"class":165},[159,192230,173694],{"class":192},[159,192232,18787],{"class":165},[159,192234,192235,192237],{"class":161,"line":203},[159,192236,54819],{"class":1146},[159,192238,177061],{"class":165},[159,192240,192241,192243],{"class":161,"line":223},[159,192242,192194],{"class":1142},[159,192244,27364],{"class":165},[159,192246,192247,192249,192251,192254],{"class":161,"line":233},[159,192248,54819],{"class":1146},[159,192250,1159],{"class":165},[159,192252,192253],{"class":192},"\"年龄必须是数字\"",[159,192255,1165],{"class":165},[14,192257,192258,192259,192261],{},"不建议裸写 ",[49,192260,192194],{},"，最好指定异常类型。",[151,192263,192265],{"className":53900,"code":192264,"language":53902,"meta":25,"style":25},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[49,192266,192267,192273,192291,192297,192305],{"__ignoreMap":25},[159,192268,192269,192271],{"class":161,"line":162},[159,192270,192182],{"class":1142},[159,192272,27364],{"class":165},[159,192274,192275,192277,192279,192281,192283,192285,192287,192289],{"class":161,"line":176},[159,192276,173686],{"class":165},[159,192278,189],{"class":1142},[159,192280,26029],{"class":1146},[159,192282,1159],{"class":165},[159,192284,536],{"class":1146},[159,192286,1159],{"class":165},[159,192288,173694],{"class":192},[159,192290,18787],{"class":165},[159,192292,192293,192295],{"class":161,"line":203},[159,192294,54819],{"class":1146},[159,192296,177061],{"class":165},[159,192298,192299,192301,192303],{"class":161,"line":223},[159,192300,192194],{"class":1142},[159,192302,173526],{"class":1146},[159,192304,27364],{"class":165},[159,192306,192307,192309,192311,192313],{"class":161,"line":233},[159,192308,54819],{"class":1146},[159,192310,1159],{"class":165},[159,192312,192253],{"class":192},[159,192314,1165],{"class":165},[37,192316,192318],{"id":192317},"_94-捕获多个异常","9.4 捕获多个异常",[151,192320,192322],{"className":53900,"code":192321,"language":53902,"meta":25,"style":25},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[49,192323,192324,192330,192351,192371,192378,192386,192397,192406],{"__ignoreMap":25},[159,192325,192326,192328],{"class":161,"line":162},[159,192327,192182],{"class":1142},[159,192329,27364],{"class":165},[159,192331,192332,192335,192337,192339,192341,192343,192345,192347,192349],{"class":161,"line":176},[159,192333,192334],{"class":165},"    nums ",[159,192336,189],{"class":1142},[159,192338,4608],{"class":165},[159,192340,4932],{"class":1146},[159,192342,1939],{"class":165},[159,192344,11034],{"class":1146},[159,192346,1939],{"class":165},[159,192348,23949],{"class":1146},[159,192350,4634],{"class":165},[159,192352,192353,192356,192358,192360,192362,192364,192366,192369],{"class":161,"line":203},[159,192354,192355],{"class":165},"    index ",[159,192357,189],{"class":1142},[159,192359,26029],{"class":1146},[159,192361,1159],{"class":165},[159,192363,536],{"class":1146},[159,192365,1159],{"class":165},[159,192367,192368],{"class":192},"\"请输入索引:\"",[159,192370,18787],{"class":165},[159,192372,192373,192375],{"class":161,"line":223},[159,192374,54819],{"class":1146},[159,192376,192377],{"class":165},"(nums[index])\n",[159,192379,192380,192382,192384],{"class":161,"line":233},[159,192381,192194],{"class":1142},[159,192383,173526],{"class":1146},[159,192385,27364],{"class":165},[159,192387,192388,192390,192392,192395],{"class":161,"line":239},[159,192389,54819],{"class":1146},[159,192391,1159],{"class":165},[159,192393,192394],{"class":192},"\"索引必须是整数\"",[159,192396,1165],{"class":165},[159,192398,192399,192401,192404],{"class":161,"line":245},[159,192400,192194],{"class":1142},[159,192402,192403],{"class":1146}," IndexError",[159,192405,27364],{"class":165},[159,192407,192408,192410,192412,192415],{"class":161,"line":251},[159,192409,54819],{"class":1146},[159,192411,1159],{"class":165},[159,192413,192414],{"class":192},"\"索引越界\"",[159,192416,1165],{"class":165},[14,192418,192419],{},"多个异常使用相同处理逻辑：",[151,192421,192423],{"className":53900,"code":192422,"language":53902,"meta":25,"style":25},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[49,192424,192425,192431,192449,192462,192476],{"__ignoreMap":25},[159,192426,192427,192429],{"class":161,"line":162},[159,192428,192182],{"class":1142},[159,192430,27364],{"class":165},[159,192432,192433,192435,192437,192439,192441,192443,192445,192447],{"class":161,"line":176},[159,192434,68987],{"class":165},[159,192436,189],{"class":1142},[159,192438,26029],{"class":1146},[159,192440,1159],{"class":165},[159,192442,536],{"class":1146},[159,192444,1159],{"class":165},[159,192446,177096],{"class":192},[159,192448,18787],{"class":165},[159,192450,192451,192453,192455,192457,192459],{"class":161,"line":203},[159,192452,54819],{"class":1146},[159,192454,1159],{"class":165},[159,192456,1964],{"class":1146},[159,192458,177346],{"class":1142},[159,192460,192461],{"class":165}," num)\n",[159,192463,192464,192466,192468,192470,192472,192474],{"class":161,"line":223},[159,192465,192194],{"class":1142},[159,192467,11680],{"class":165},[159,192469,176134],{"class":1146},[159,192471,1939],{"class":165},[159,192473,192077],{"class":1146},[159,192475,54307],{"class":165},[159,192477,192478,192480,192482,192485],{"class":161,"line":233},[159,192479,54819],{"class":1146},[159,192481,1159],{"class":165},[159,192483,192484],{"class":192},"\"输入不合法\"",[159,192486,1165],{"class":165},[37,192488,192490],{"id":192489},"_95-获取异常信息","9.5 获取异常信息",[151,192492,192494],{"className":53900,"code":192493,"language":53902,"meta":25,"style":25},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[49,192495,192496,192502,192516,192527],{"__ignoreMap":25},[159,192497,192498,192500],{"class":161,"line":162},[159,192499,192182],{"class":1142},[159,192501,27364],{"class":165},[159,192503,192504,192506,192508,192510,192512,192514],{"class":161,"line":176},[159,192505,68987],{"class":165},[159,192507,189],{"class":1142},[159,192509,26029],{"class":1146},[159,192511,1159],{"class":165},[159,192513,177180],{"class":192},[159,192515,1165],{"class":165},[159,192517,192518,192520,192522,192524],{"class":161,"line":203},[159,192519,192194],{"class":1142},[159,192521,173526],{"class":1146},[159,192523,11654],{"class":1142},[159,192525,192526],{"class":165}," e:\n",[159,192528,192529,192531,192533,192535,192538,192540,192542,192544,192546],{"class":161,"line":223},[159,192530,54819],{"class":1146},[159,192532,1159],{"class":165},[159,192534,23931],{"class":1142},[159,192536,192537],{"class":192},"\"出错了:",[159,192539,24721],{"class":1146},[159,192541,14038],{"class":165},[159,192543,886],{"class":1146},[159,192545,24115],{"class":192},[159,192547,1165],{"class":165},[14,192549,167757],{},[151,192551,192554],{"className":192552,"code":192553,"language":8507,"meta":25},[28803],"出错了:invalid literal for int() with base 10: 'abc'\n",[49,192555,192553],{"__ignoreMap":25},[37,192557,192559],{"id":192558},"_96-else和finally","9.6 else和finally",[14,192561,192562,192564],{},[49,192563,25364],{},"：没有异常时执行。",[14,192566,192567,192570],{},[49,192568,192569],{},"finally","：无论是否异常都会执行。",[151,192572,192574],{"className":53900,"code":192573,"language":53902,"meta":25,"style":25},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[49,192575,192576,192582,192600,192608,192618,192624,192645,192651],{"__ignoreMap":25},[159,192577,192578,192580],{"class":161,"line":162},[159,192579,192182],{"class":1142},[159,192581,27364],{"class":165},[159,192583,192584,192586,192588,192590,192592,192594,192596,192598],{"class":161,"line":176},[159,192585,68987],{"class":165},[159,192587,189],{"class":1142},[159,192589,26029],{"class":1146},[159,192591,1159],{"class":165},[159,192593,536],{"class":1146},[159,192595,1159],{"class":165},[159,192597,177096],{"class":192},[159,192599,18787],{"class":165},[159,192601,192602,192604,192606],{"class":161,"line":203},[159,192603,192194],{"class":1142},[159,192605,173526],{"class":1146},[159,192607,27364],{"class":165},[159,192609,192610,192612,192614,192616],{"class":161,"line":223},[159,192611,54819],{"class":1146},[159,192613,1159],{"class":165},[159,192615,174514],{"class":192},[159,192617,1165],{"class":165},[159,192619,192620,192622],{"class":161,"line":233},[159,192621,25364],{"class":1142},[159,192623,27364],{"class":165},[159,192625,192626,192628,192630,192632,192635,192637,192639,192641,192643],{"class":161,"line":239},[159,192627,54819],{"class":1146},[159,192629,1159],{"class":165},[159,192631,23931],{"class":1142},[159,192633,192634],{"class":192},"\"输入正确:",[159,192636,24721],{"class":1146},[159,192638,25332],{"class":165},[159,192640,886],{"class":1146},[159,192642,24115],{"class":192},[159,192644,1165],{"class":165},[159,192646,192647,192649],{"class":161,"line":245},[159,192648,192569],{"class":1142},[159,192650,27364],{"class":165},[159,192652,192653,192655,192657,192660],{"class":161,"line":251},[159,192654,54819],{"class":1146},[159,192656,1159],{"class":165},[159,192658,192659],{"class":192},"\"程序结束\"",[159,192661,1165],{"class":165},[14,192663,192664,192666],{},[49,192665,192569],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[37,192668,192670],{"id":192669},"_97-抛出异常","9.7 抛出异常",[14,192672,192673],{},"程序可以主动抛出异常。",[151,192675,192677],{"className":53900,"code":192676,"language":53902,"meta":25,"style":25},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[49,192678,192679,192688,192700,192713,192733,192737,192741],{"__ignoreMap":25},[159,192680,192681,192683,192686],{"class":161,"line":162},[159,192682,55465],{"class":1142},[159,192684,192685],{"class":185}," set_age",[159,192687,182715],{"class":165},[159,192689,192690,192692,192694,192696,192698],{"class":161,"line":176},[159,192691,26732],{"class":1142},[159,192693,39268],{"class":165},[159,192695,166],{"class":1142},[159,192697,1259],{"class":1146},[159,192699,27364],{"class":165},[159,192701,192702,192704,192706,192708,192711],{"class":161,"line":203},[159,192703,124732],{"class":1142},[159,192705,173526],{"class":1146},[159,192707,1159],{"class":165},[159,192709,192710],{"class":192},"\"年龄不能为负数\"",[159,192712,1165],{"class":165},[159,192714,192715,192717,192719,192721,192723,192725,192727,192729,192731],{"class":161,"line":223},[159,192716,54819],{"class":1146},[159,192718,1159],{"class":165},[159,192720,23931],{"class":1142},[159,192722,183283],{"class":192},[159,192724,24721],{"class":1146},[159,192726,17307],{"class":165},[159,192728,886],{"class":1146},[159,192730,24115],{"class":192},[159,192732,1165],{"class":165},[159,192734,192735],{"class":161,"line":233},[159,192736,590],{"emptyLinePlaceholder":589},[159,192738,192739],{"class":161,"line":239},[159,192740,590],{"emptyLinePlaceholder":589},[159,192742,192743,192746,192748,192750],{"class":161,"line":245},[159,192744,192745],{"class":165},"set_age(",[159,192747,24376],{"class":1142},[159,192749,4932],{"class":1146},[159,192751,1165],{"class":165},[14,192753,192754],{},"调用者可以捕获：",[151,192756,192758],{"className":53900,"code":192757,"language":53902,"meta":25,"style":25},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[49,192759,192760,192766,192777,192787],{"__ignoreMap":25},[159,192761,192762,192764],{"class":161,"line":162},[159,192763,192182],{"class":1142},[159,192765,27364],{"class":165},[159,192767,192768,192771,192773,192775],{"class":161,"line":176},[159,192769,192770],{"class":165},"    set_age(",[159,192772,24376],{"class":1142},[159,192774,4932],{"class":1146},[159,192776,1165],{"class":165},[159,192778,192779,192781,192783,192785],{"class":161,"line":203},[159,192780,192194],{"class":1142},[159,192782,173526],{"class":1146},[159,192784,11654],{"class":1142},[159,192786,192526],{"class":165},[159,192788,192789,192791],{"class":161,"line":223},[159,192790,54819],{"class":1146},[159,192792,14069],{"class":165},[37,192794,192796],{"id":192795},"_98-自定义异常","9.8 自定义异常",[151,192798,192800],{"className":53900,"code":192799,"language":53902,"meta":25,"style":25},"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",[49,192801,192802,192816,192820,192824,192828,192836,192846,192857,192867,192871,192875,192881,192898,192909],{"__ignoreMap":25},[159,192803,192804,192806,192809,192811,192814],{"class":161,"line":162},[159,192805,38260],{"class":1142},[159,192807,192808],{"class":185}," BalanceNotEnoughError",[159,192810,1159],{"class":165},[159,192812,192813],{"class":1146},"Exception",[159,192815,54307],{"class":165},[159,192817,192818],{"class":161,"line":176},[159,192819,170837],{"class":1142},[159,192821,192822],{"class":161,"line":203},[159,192823,590],{"emptyLinePlaceholder":589},[159,192825,192826],{"class":161,"line":223},[159,192827,590],{"emptyLinePlaceholder":589},[159,192829,192830,192832,192834],{"class":161,"line":233},[159,192831,55465],{"class":1142},[159,192833,171486],{"class":185},[159,192835,184112],{"class":165},[159,192837,192838,192840,192842,192844],{"class":161,"line":239},[159,192839,26732],{"class":1142},[159,192841,171442],{"class":165},[159,192843,6760],{"class":1142},[159,192845,183889],{"class":165},[159,192847,192848,192850,192853,192855],{"class":161,"line":245},[159,192849,124732],{"class":1142},[159,192851,192852],{"class":165}," BalanceNotEnoughError(",[159,192854,171537],{"class":192},[159,192856,1165],{"class":165},[159,192858,192859,192861,192863,192865],{"class":161,"line":251},[159,192860,27711],{"class":1142},[159,192862,184119],{"class":165},[159,192864,24376],{"class":1142},[159,192866,171475],{"class":165},[159,192868,192869],{"class":161,"line":261},[159,192870,590],{"emptyLinePlaceholder":589},[159,192872,192873],{"class":161,"line":603},[159,192874,590],{"emptyLinePlaceholder":589},[159,192876,192877,192879],{"class":161,"line":621},[159,192878,192182],{"class":1142},[159,192880,27364],{"class":165},[159,192882,192883,192885,192887,192890,192892,192894,192896],{"class":161,"line":634},[159,192884,183790],{"class":165},[159,192886,189],{"class":1142},[159,192888,192889],{"class":165}," withdraw(",[159,192891,1596],{"class":1146},[159,192893,1939],{"class":165},[159,192895,13303],{"class":1146},[159,192897,1165],{"class":165},[159,192899,192900,192902,192905,192907],{"class":161,"line":640},[159,192901,192194],{"class":1142},[159,192903,192904],{"class":165}," BalanceNotEnoughError ",[159,192906,54903],{"class":1142},[159,192908,192526],{"class":165},[159,192910,192911,192913],{"class":161,"line":1075},[159,192912,54819],{"class":1146},[159,192914,14069],{"class":165},[14,192916,192917],{},"入门阶段大多数情况使用内置异常即可。",[37,192919,192921],{"id":192920},"_99-traceback","9.9 traceback",[14,192923,192924],{},"调试时可以输出完整异常堆栈。",[151,192926,192928],{"className":53900,"code":192927,"language":53902,"meta":25,"style":25},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[49,192929,192930,192937,192941,192947,192957,192965],{"__ignoreMap":25},[159,192931,192932,192934],{"class":161,"line":162},[159,192933,53914],{"class":1142},[159,192935,192936],{"class":165}," traceback\n",[159,192938,192939],{"class":161,"line":176},[159,192940,590],{"emptyLinePlaceholder":589},[159,192942,192943,192945],{"class":161,"line":203},[159,192944,192182],{"class":1142},[159,192946,27364],{"class":165},[159,192948,192949,192951,192953,192955],{"class":161,"line":223},[159,192950,25636],{"class":1146},[159,192952,1159],{"class":165},[159,192954,177180],{"class":192},[159,192956,1165],{"class":165},[159,192958,192959,192961,192963],{"class":161,"line":233},[159,192960,192194],{"class":1142},[159,192962,173526],{"class":1146},[159,192964,27364],{"class":165},[159,192966,192967],{"class":161,"line":239},[159,192968,192969],{"class":165},"    traceback.print_exc()\n",[14,192971,192972],{},"日志系统中常把异常堆栈记录到文件。",[37,192974,192976],{"id":192975},"_910-什么是模块","9.10 什么是模块",[14,192978,192979,192980,147283],{},"模块就是一个 ",[49,192981,167652],{},[14,192983,192984,192985,48143],{},"例如创建 ",[49,192986,192987],{},"my_math.py",[151,192989,192991],{"className":53900,"code":192990,"language":53902,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[49,192992,192993,193001,193011,193015,193019,193028],{"__ignoreMap":25},[159,192994,192995,192997,192999],{"class":161,"line":162},[159,192996,55465],{"class":1142},[159,192998,28826],{"class":185},[159,193000,172393],{"class":165},[159,193002,193003,193005,193007,193009],{"class":161,"line":176},[159,193004,27711],{"class":1142},[159,193006,34443],{"class":165},[159,193008,2704],{"class":1142},[159,193010,172404],{"class":165},[159,193012,193013],{"class":161,"line":203},[159,193014,590],{"emptyLinePlaceholder":589},[159,193016,193017],{"class":161,"line":223},[159,193018,590],{"emptyLinePlaceholder":589},[159,193020,193021,193023,193026],{"class":161,"line":233},[159,193022,55465],{"class":1142},[159,193024,193025],{"class":185}," sub",[159,193027,172393],{"class":165},[159,193029,193030,193032,193034,193036],{"class":161,"line":239},[159,193031,27711],{"class":1142},[159,193033,34443],{"class":165},[159,193035,24376],{"class":1142},[159,193037,172404],{"class":165},[14,193039,193040],{},"在另一个文件中导入：",[151,193042,193044],{"className":53900,"code":193043,"language":53902,"meta":25,"style":25},"import my_math\n\nprint(my_math.add(1, 2))\n",[49,193045,193046,193053,193057],{"__ignoreMap":25},[159,193047,193048,193050],{"class":161,"line":162},[159,193049,53914],{"class":1142},[159,193051,193052],{"class":165}," my_math\n",[159,193054,193055],{"class":161,"line":176},[159,193056,590],{"emptyLinePlaceholder":589},[159,193058,193059,193061,193064,193066,193068,193070],{"class":161,"line":203},[159,193060,53937],{"class":1146},[159,193062,193063],{"class":165},"(my_math.add(",[159,193065,4932],{"class":1146},[159,193067,1939],{"class":165},[159,193069,11034],{"class":1146},[159,193071,18787],{"class":165},[37,193073,193075],{"id":193074},"_911-import导入","9.11 import导入",[42,193077,193079],{"id":193078},"_9111-导入模块","9.11.1 导入模块",[151,193081,193083],{"className":53900,"code":193082,"language":53902,"meta":25,"style":25},"import random\n\nprint(random.randint(1, 10))\n",[49,193084,193085,193091,193095],{"__ignoreMap":25},[159,193086,193087,193089],{"class":161,"line":162},[159,193088,53914],{"class":1142},[159,193090,68723],{"class":165},[159,193092,193093],{"class":161,"line":176},[159,193094,590],{"emptyLinePlaceholder":589},[159,193096,193097,193099,193102,193104,193106,193108],{"class":161,"line":203},[159,193098,53937],{"class":1146},[159,193100,193101],{"class":165},"(random.randint(",[159,193103,4932],{"class":1146},[159,193105,1939],{"class":165},[159,193107,1964],{"class":1146},[159,193109,18787],{"class":165},[42,193111,193113],{"id":193112},"_9112-导入指定内容","9.11.2 导入指定内容",[151,193115,193117],{"className":53900,"code":193116,"language":53902,"meta":25,"style":25},"from random import randint\n\nprint(randint(1, 10))\n",[49,193118,193119,193130,193134],{"__ignoreMap":25},[159,193120,193121,193123,193125,193127],{"class":161,"line":162},[159,193122,54258],{"class":1142},[159,193124,4707],{"class":165},[159,193126,53914],{"class":1142},[159,193128,193129],{"class":165}," randint\n",[159,193131,193132],{"class":161,"line":176},[159,193133,590],{"emptyLinePlaceholder":589},[159,193135,193136,193138,193141,193143,193145,193147],{"class":161,"line":203},[159,193137,53937],{"class":1146},[159,193139,193140],{"class":165},"(randint(",[159,193142,4932],{"class":1146},[159,193144,1939],{"class":165},[159,193146,1964],{"class":1146},[159,193148,18787],{"class":165},[42,193150,193152],{"id":193151},"_9113-起别名","9.11.3 起别名",[151,193154,193156],{"className":53900,"code":193155,"language":53902,"meta":25,"style":25},"import random as rd\n\nprint(rd.randint(1, 10))\n",[49,193157,193158,193169,193173],{"__ignoreMap":25},[159,193159,193160,193162,193164,193166],{"class":161,"line":162},[159,193161,53914],{"class":1142},[159,193163,4707],{"class":165},[159,193165,54903],{"class":1142},[159,193167,193168],{"class":165}," rd\n",[159,193170,193171],{"class":161,"line":176},[159,193172,590],{"emptyLinePlaceholder":589},[159,193174,193175,193177,193180,193182,193184,193186],{"class":161,"line":203},[159,193176,53937],{"class":1146},[159,193178,193179],{"class":165},"(rd.randint(",[159,193181,4932],{"class":1146},[159,193183,1939],{"class":165},[159,193185,1964],{"class":1146},[159,193187,18787],{"class":165},[151,193189,193191],{"className":53900,"code":193190,"language":53902,"meta":25,"style":25},"from random import randint as rint\n\nprint(rint(1, 10))\n",[49,193192,193193,193209,193213],{"__ignoreMap":25},[159,193194,193195,193197,193199,193201,193204,193206],{"class":161,"line":162},[159,193196,54258],{"class":1142},[159,193198,4707],{"class":165},[159,193200,53914],{"class":1142},[159,193202,193203],{"class":165}," randint ",[159,193205,54903],{"class":1142},[159,193207,193208],{"class":165}," rint\n",[159,193210,193211],{"class":161,"line":176},[159,193212,590],{"emptyLinePlaceholder":589},[159,193214,193215,193217,193220,193222,193224,193226],{"class":161,"line":203},[159,193216,53937],{"class":1146},[159,193218,193219],{"class":165},"(rint(",[159,193221,4932],{"class":1146},[159,193223,1939],{"class":165},[159,193225,1964],{"class":1146},[159,193227,18787],{"class":165},[42,193229,193231],{"id":193230},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[151,193233,193235],{"className":53900,"code":193234,"language":53902,"meta":25,"style":25},"from random import *\n",[49,193236,193237],{"__ignoreMap":25},[159,193238,193239,193241,193243,193245],{"class":161,"line":162},[159,193240,54258],{"class":1142},[159,193242,4707],{"class":165},[159,193244,53914],{"class":1142},[159,193246,193247],{"class":1142}," *\n",[14,193249,193250],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[37,193252,193254],{"id":193253},"_912-常用内置模块","9.12 常用内置模块",[42,193256,193258],{"id":193257},"_9121-random","9.12.1 random",[151,193260,193262],{"className":53900,"code":193261,"language":53902,"meta":25,"style":25},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[49,193263,193264,193270,193274,193288,193307],{"__ignoreMap":25},[159,193265,193266,193268],{"class":161,"line":162},[159,193267,53914],{"class":1142},[159,193269,68723],{"class":165},[159,193271,193272],{"class":161,"line":176},[159,193273,590],{"emptyLinePlaceholder":589},[159,193275,193276,193278,193280,193282,193284,193286],{"class":161,"line":203},[159,193277,53937],{"class":1146},[159,193279,193101],{"class":165},[159,193281,4932],{"class":1146},[159,193283,1939],{"class":165},[159,193285,1964],{"class":1146},[159,193287,18787],{"class":165},[159,193289,193290,193292,193295,193297,193299,193301,193303,193305],{"class":161,"line":223},[159,193291,53937],{"class":1146},[159,193293,193294],{"class":165},"(random.choice([",[159,193296,171188],{"class":192},[159,193298,1939],{"class":165},[159,193300,172236],{"class":192},[159,193302,1939],{"class":165},[159,193304,181031],{"class":192},[159,193306,56607],{"class":165},[159,193308,193309,193311,193314,193316,193318,193320,193322,193324,193326,193328,193330,193332,193334,193336],{"class":161,"line":233},[159,193310,53937],{"class":1146},[159,193312,193313],{"class":165},"(random.sample([",[159,193315,4932],{"class":1146},[159,193317,1939],{"class":165},[159,193319,11034],{"class":1146},[159,193321,1939],{"class":165},[159,193323,23949],{"class":1146},[159,193325,1939],{"class":165},[159,193327,8866],{"class":1146},[159,193329,1939],{"class":165},[159,193331,1753],{"class":1146},[159,193333,133502],{"class":165},[159,193335,11034],{"class":1146},[159,193337,18787],{"class":165},[42,193339,193341],{"id":193340},"_9122-time","9.12.2 time",[151,193343,193345],{"className":53900,"code":193344,"language":53902,"meta":25,"style":25},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[49,193346,193347,193353,193357,193364,193372],{"__ignoreMap":25},[159,193348,193349,193351],{"class":161,"line":162},[159,193350,53914],{"class":1142},[159,193352,55347],{"class":165},[159,193354,193355],{"class":161,"line":176},[159,193356,590],{"emptyLinePlaceholder":589},[159,193358,193359,193361],{"class":161,"line":203},[159,193360,53937],{"class":1146},[159,193362,193363],{"class":165},"(time.time())\n",[159,193365,193366,193368,193370],{"class":161,"line":223},[159,193367,116371],{"class":165},[159,193369,4932],{"class":1146},[159,193371,1165],{"class":165},[159,193373,193374,193376,193378,193381],{"class":161,"line":233},[159,193375,53937],{"class":1146},[159,193377,1159],{"class":165},[159,193379,193380],{"class":192},"\"1秒后执行\"",[159,193382,1165],{"class":165},[42,193384,193386],{"id":193385},"_9123-datetime","9.12.3 datetime",[151,193388,193390],{"className":53900,"code":193389,"language":53902,"meta":25,"style":25},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[49,193391,193392,193404,193408,193418,193425],{"__ignoreMap":25},[159,193393,193394,193396,193399,193401],{"class":161,"line":162},[159,193395,54258],{"class":1142},[159,193397,193398],{"class":165}," datetime ",[159,193400,53914],{"class":1142},[159,193402,193403],{"class":165}," datetime\n",[159,193405,193406],{"class":161,"line":176},[159,193407,590],{"emptyLinePlaceholder":589},[159,193409,193410,193413,193415],{"class":161,"line":203},[159,193411,193412],{"class":165},"now ",[159,193414,189],{"class":1142},[159,193416,193417],{"class":165}," datetime.now()\n",[159,193419,193420,193422],{"class":161,"line":223},[159,193421,53937],{"class":1146},[159,193423,193424],{"class":165},"(now)\n",[159,193426,193427,193429,193432,193435,193437,193440],{"class":161,"line":233},[159,193428,53937],{"class":1146},[159,193430,193431],{"class":165},"(now.strftime(",[159,193433,193434],{"class":192},"\"%Y-%m-",[159,193436,177991],{"class":1146},[159,193438,193439],{"class":192}," %H:%M:%S\"",[159,193441,18787],{"class":165},[42,193443,193445],{"id":193444},"_9124-os","9.12.4 os",[151,193447,193449],{"className":53900,"code":193448,"language":53902,"meta":25,"style":25},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[49,193450,193451,193457,193461,193468],{"__ignoreMap":25},[159,193452,193453,193455],{"class":161,"line":162},[159,193454,53914],{"class":1142},[159,193456,68700],{"class":165},[159,193458,193459],{"class":161,"line":176},[159,193460,590],{"emptyLinePlaceholder":589},[159,193462,193463,193465],{"class":161,"line":203},[159,193464,53937],{"class":1146},[159,193466,193467],{"class":165},"(os.getcwd())\n",[159,193469,193470,193472,193475,193478],{"class":161,"line":223},[159,193471,53937],{"class":1146},[159,193473,193474],{"class":165},"(os.listdir(",[159,193476,193477],{"class":192},"\".\"",[159,193479,18787],{"class":165},[42,193481,193483],{"id":193482},"_9125-sys","9.12.5 sys",[151,193485,193487],{"className":53900,"code":193486,"language":53902,"meta":25,"style":25},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[49,193488,193489,193496,193500,193507],{"__ignoreMap":25},[159,193490,193491,193493],{"class":161,"line":162},[159,193492,53914],{"class":1142},[159,193494,193495],{"class":165}," sys\n",[159,193497,193498],{"class":161,"line":176},[159,193499,590],{"emptyLinePlaceholder":589},[159,193501,193502,193504],{"class":161,"line":203},[159,193503,53937],{"class":1146},[159,193505,193506],{"class":165},"(sys.version)\n",[159,193508,193509,193511],{"class":161,"line":223},[159,193510,53937],{"class":1146},[159,193512,193513],{"class":165},"(sys.path)\n",[37,193515,193517,193518,193520,193521,24115],{"id":193516},"_913-if-name-main","9.13 if ",[61,193519,101110],{}," == \"",[61,193522,123358],{},[14,193524,193525,193526,193529],{},"模块被直接运行和被导入时，",[49,193527,193528],{},"__name__"," 的值不同。",[14,193531,193532,193533,48143],{},"创建 ",[49,193534,193535],{},"my_module.py",[151,193537,193539],{"className":53900,"code":193538,"language":53902,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[49,193540,193541,193549,193559,193563,193567,193579],{"__ignoreMap":25},[159,193542,193543,193545,193547],{"class":161,"line":162},[159,193544,55465],{"class":1142},[159,193546,28826],{"class":185},[159,193548,172393],{"class":165},[159,193550,193551,193553,193555,193557],{"class":161,"line":176},[159,193552,27711],{"class":1142},[159,193554,34443],{"class":165},[159,193556,2704],{"class":1142},[159,193558,172404],{"class":165},[159,193560,193561],{"class":161,"line":203},[159,193562,590],{"emptyLinePlaceholder":589},[159,193564,193565],{"class":161,"line":223},[159,193566,590],{"emptyLinePlaceholder":589},[159,193568,193569,193571,193573,193575,193577],{"class":161,"line":233},[159,193570,18445],{"class":1142},[159,193572,54740],{"class":1146},[159,193574,122859],{"class":1142},[159,193576,122862],{"class":192},[159,193578,27364],{"class":165},[159,193580,193581,193583,193585,193587,193589,193591],{"class":161,"line":239},[159,193582,54819],{"class":1146},[159,193584,187900],{"class":165},[159,193586,4932],{"class":1146},[159,193588,1939],{"class":165},[159,193590,11034],{"class":1146},[159,193592,18787],{"class":165},[14,193594,193595],{},"作用：",[134,193597,193598,193601],{},[106,193599,193600],{},"直接运行该文件时，执行测试代码。",[106,193602,193603],{},"被其他文件导入时，不执行测试代码。",[14,193605,193606],{},"这是写模块时很常用的习惯。",[37,193608,193610],{"id":193609},"_914-包","9.14 包",[14,193612,193613,193614,193617],{},"包是包含 ",[49,193615,193616],{},"__init__.py"," 的目录，用于组织多个模块。",[14,193619,193620],{},"目录结构：",[151,193622,193625],{"className":193623,"code":193624,"language":8507,"meta":25},[28803],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[49,193626,193624],{"__ignoreMap":25},[14,193628,193629],{},"导入：",[151,193631,193633],{"className":53900,"code":193632,"language":53902,"meta":25,"style":25},"from utils.file_utils import read_file\n",[49,193634,193635],{"__ignoreMap":25},[159,193636,193637,193639,193642,193644],{"class":161,"line":162},[159,193638,54258],{"class":1142},[159,193640,193641],{"class":165}," utils.file_utils ",[159,193643,53914],{"class":1142},[159,193645,193646],{"class":165}," read_file\n",[14,193648,193649,193651],{},[49,193650,193616],{}," 可以为空，也可以写包初始化逻辑。",[37,193653,193655],{"id":193654},"_915-第三方包","9.15 第三方包",[14,193657,193658,193659,193661],{},"第三方包通过 ",[49,193660,47356],{}," 安装。",[151,193663,193665],{"className":47347,"code":193664,"language":47349,"meta":25,"style":25},"pip install requests\n",[49,193666,193667],{"__ignoreMap":25},[159,193668,193669,193671,193673],{"class":161,"line":162},[159,193670,47356],{"class":185},[159,193672,47359],{"class":192},[159,193674,167398],{"class":192},[14,193676,193677],{},"使用：",[151,193679,193681],{"className":53900,"code":193680,"language":53902,"meta":25,"style":25},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[49,193682,193683,193689,193693,193708],{"__ignoreMap":25},[159,193684,193685,193687],{"class":161,"line":162},[159,193686,53914],{"class":1142},[159,193688,167398],{"class":165},[159,193690,193691],{"class":161,"line":176},[159,193692,590],{"emptyLinePlaceholder":589},[159,193694,193695,193698,193700,193703,193706],{"class":161,"line":203},[159,193696,193697],{"class":165},"response ",[159,193699,189],{"class":1142},[159,193701,193702],{"class":165}," requests.get(",[159,193704,193705],{"class":192},"\"https:\u002F\u002Fwww.example.com\"",[159,193707,1165],{"class":165},[159,193709,193710,193712],{"class":161,"line":223},[159,193711,53937],{"class":1146},[159,193713,193714],{"class":165},"(response.status_code)\n",[14,193716,193717],{},"查看已安装包：",[151,193719,193721],{"className":47347,"code":193720,"language":47349,"meta":25,"style":25},"pip list\n",[49,193722,193723],{"__ignoreMap":25},[159,193724,193725,193727],{"class":161,"line":162},[159,193726,47356],{"class":185},[159,193728,140255],{"class":192},[14,193730,193731],{},"导出项目依赖：",[151,193733,193734],{"className":47347,"code":167593,"language":47349,"meta":25,"style":25},[49,193735,193736],{"__ignoreMap":25},[159,193737,193738,193740,193742,193744],{"class":161,"line":162},[159,193739,47356],{"class":185},[159,193741,167602],{"class":192},[159,193743,49745],{"class":1142},[159,193745,167607],{"class":192},[14,193747,193748],{},"安装项目依赖：",[151,193750,193751],{"className":47347,"code":167613,"language":47349,"meta":25,"style":25},[49,193752,193753],{"__ignoreMap":25},[159,193754,193755,193757,193759,193761],{"class":161,"line":162},[159,193756,47356],{"class":185},[159,193758,47359],{"class":192},[159,193760,140939],{"class":1146},[159,193762,167607],{"class":192},[37,193764,193766],{"id":193765},"_916-模块搜索路径","9.16 模块搜索路径",[14,193768,193769,193770,193773],{},"Python 导入模块时会在 ",[49,193771,193772],{},"sys.path"," 中查找。",[151,193775,193777],{"className":53900,"code":193776,"language":53902,"meta":25,"style":25},"import sys\n\nfor path in sys.path:\n    print(path)\n",[49,193778,193779,193785,193789,193801],{"__ignoreMap":25},[159,193780,193781,193783],{"class":161,"line":162},[159,193782,53914],{"class":1142},[159,193784,193495],{"class":165},[159,193786,193787],{"class":161,"line":176},[159,193788,590],{"emptyLinePlaceholder":589},[159,193790,193791,193793,193796,193798],{"class":161,"line":203},[159,193792,26657],{"class":1142},[159,193794,193795],{"class":165}," path ",[159,193797,49566],{"class":1142},[159,193799,193800],{"class":165}," sys.path:\n",[159,193802,193803,193805],{"class":161,"line":223},[159,193804,54819],{"class":1146},[159,193806,190529],{"class":165},[14,193808,193809],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,193811,178923],{},[151,193813,193816],{"className":193814,"code":193815,"language":8507,"meta":25},[28803],"random.py\njson.py\ntime.py\n",[49,193817,193815],{"__ignoreMap":25},[14,193819,193820],{},"这些文件名可能导致导入异常。",[37,193822,193824],{"id":193823},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,193826,193620],{},[151,193828,193831],{"className":193829,"code":193830,"language":8507,"meta":25},[28803],"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",[49,193832,193830],{"__ignoreMap":25},[14,193834,193835,48143],{},[49,193836,193837],{},"utils\u002Ffile_utils.py",[151,193839,193841],{"className":53900,"code":193840,"language":53902,"meta":25,"style":25},"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",[49,193842,193843,193849,193859,193863,193867,193877,193887,193895,193901,193905,193932,193942,193946,193950,193960,193986],{"__ignoreMap":25},[159,193844,193845,193847],{"class":161,"line":162},[159,193846,53914],{"class":1142},[159,193848,168391],{"class":165},[159,193850,193851,193853,193855,193857],{"class":161,"line":176},[159,193852,54258],{"class":1142},[159,193854,129611],{"class":165},[159,193856,53914],{"class":1142},[159,193858,129616],{"class":165},[159,193860,193861],{"class":161,"line":203},[159,193862,590],{"emptyLinePlaceholder":589},[159,193864,193865],{"class":161,"line":223},[159,193866,590],{"emptyLinePlaceholder":589},[159,193868,193869,193871,193874],{"class":161,"line":233},[159,193870,55465],{"class":1142},[159,193872,193873],{"class":185}," read_json",[159,193875,193876],{"class":165},"(path):\n",[159,193878,193879,193882,193884],{"class":161,"line":239},[159,193880,193881],{"class":165},"    path ",[159,193883,189],{"class":1142},[159,193885,193886],{"class":165}," Path(path)\n",[159,193888,193889,193891,193893],{"class":161,"line":245},[159,193890,26732],{"class":1142},[159,193892,62325],{"class":1142},[159,193894,190610],{"class":165},[159,193896,193897,193899],{"class":161,"line":251},[159,193898,21176],{"class":1142},[159,193900,16884],{"class":165},[159,193902,193903],{"class":161,"line":261},[159,193904,590],{"emptyLinePlaceholder":589},[159,193906,193907,193909,193911,193914,193916,193918,193920,193922,193924,193926,193928,193930],{"class":161,"line":603},[159,193908,57573],{"class":1142},[159,193910,168091],{"class":1146},[159,193912,193913],{"class":165},"(path, ",[159,193915,168101],{"class":192},[159,193917,1939],{"class":165},[159,193919,168106],{"class":8765},[159,193921,189],{"class":1142},[159,193923,168111],{"class":192},[159,193925,2710],{"class":165},[159,193927,54903],{"class":1142},[159,193929,169453],{"class":8765},[159,193931,27364],{"class":165},[159,193933,193934,193936,193938,193940],{"class":161,"line":621},[159,193935,21176],{"class":1142},[159,193937,169464],{"class":165},[159,193939,68749],{"class":8765},[159,193941,1165],{"class":165},[159,193943,193944],{"class":161,"line":634},[159,193945,590],{"emptyLinePlaceholder":589},[159,193947,193948],{"class":161,"line":640},[159,193949,590],{"emptyLinePlaceholder":589},[159,193951,193952,193954,193957],{"class":161,"line":1075},[159,193953,55465],{"class":1142},[159,193955,193956],{"class":185}," write_json",[159,193958,193959],{"class":165},"(path, data):\n",[159,193961,193962,193964,193966,193968,193970,193972,193974,193976,193978,193980,193982,193984],{"class":161,"line":1081},[159,193963,57573],{"class":1142},[159,193965,168091],{"class":1146},[159,193967,193913],{"class":165},[159,193969,173276],{"class":192},[159,193971,1939],{"class":165},[159,193973,168106],{"class":8765},[159,193975,189],{"class":1142},[159,193977,168111],{"class":192},[159,193979,2710],{"class":165},[159,193981,54903],{"class":1142},[159,193983,169453],{"class":8765},[159,193985,27364],{"class":165},[159,193987,193988,193991,193993,193995,193997,193999,194001,194003,194005,194007,194009],{"class":161,"line":1091},[159,193989,193990],{"class":165},"        json.dump(data, ",[159,193992,68749],{"class":8765},[159,193994,1939],{"class":165},[159,193996,168437],{"class":8765},[159,193998,189],{"class":1142},[159,194000,57382],{"class":1146},[159,194002,1939],{"class":165},[159,194004,173312],{"class":8765},[159,194006,189],{"class":1142},[159,194008,11034],{"class":1146},[159,194010,1165],{"class":165},[14,194012,194013,48143],{},[49,194014,175907],{},[151,194016,194018],{"className":53900,"code":194017,"language":53902,"meta":25,"style":25},"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",[49,194019,194020,194031,194035,194048,194068],{"__ignoreMap":25},[159,194021,194022,194024,194026,194028],{"class":161,"line":162},[159,194023,54258],{"class":1142},[159,194025,193641],{"class":165},[159,194027,53914],{"class":1142},[159,194029,194030],{"class":165}," read_json, write_json\n",[159,194032,194033],{"class":161,"line":176},[159,194034,590],{"emptyLinePlaceholder":589},[159,194036,194037,194039,194041,194044,194046],{"class":161,"line":203},[159,194038,181016],{"class":165},[159,194040,189],{"class":1142},[159,194042,194043],{"class":165}," read_json(",[159,194045,173131],{"class":192},[159,194047,1165],{"class":165},[159,194049,194050,194052,194054,194056,194058,194060,194062,194064,194066],{"class":161,"line":223},[159,194051,191834],{"class":165},[159,194053,9722],{"class":192},[159,194055,1486],{"class":165},[159,194057,171188],{"class":192},[159,194059,1939],{"class":165},[159,194061,172772],{"class":192},[159,194063,1486],{"class":165},[159,194065,24804],{"class":1146},[159,194067,186452],{"class":165},[159,194069,194070,194073,194075],{"class":161,"line":233},[159,194071,194072],{"class":165},"write_json(",[159,194074,173131],{"class":192},[159,194076,194077],{"class":165},", students)\n",[37,194079,194081],{"id":194080},"_918-易错点","9.18 易错点",[134,194083,194084,194087,194092,194097,194100,194103],{},[106,194085,194086],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[106,194088,194089,194090,51907],{},"能指定异常类型就不要裸写 ",[49,194091,192194],{},[106,194093,194094,194096],{},[49,194095,192569],{}," 无论是否出错都会执行。",[106,194098,194099],{},"模块文件名不要和标准库重名。",[106,194101,194102],{},"导入自己写的模块时，要注意运行目录。",[106,194104,194105],{},"第三方包要安装到当前解释器或虚拟环境中。",[37,194107,194109],{"id":194108},"_919-本章练习","9.19 本章练习",[134,194111,194112,194115,194118,194124,194131],{},[106,194113,194114],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[106,194116,194117],{},"写函数读取文件，如果文件不存在则返回空字符串。",[106,194119,193532,194120,194123],{},[49,194121,194122],{},"math_utils.py","，实现加减乘除函数并导入使用。",[106,194125,194126,194127,194130],{},"创建一个 ",[49,194128,194129],{},"utils"," 包，把 JSON 读写函数放进去。",[106,194132,194133],{},"写一个程序，捕获除零异常和输入格式异常。",[1468,194135,194136],{},"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":25,"searchDepth":176,"depth":176,"links":194138},[194139,194140,194141,194142,194143,194144,194145,194146,194147,194148,194149,194155,194162,194164,194165,194166,194167,194168,194169],{"id":191991,"depth":176,"text":191992},{"id":192119,"depth":176,"text":192120},{"id":192168,"depth":176,"text":192169},{"id":192317,"depth":176,"text":192318},{"id":192489,"depth":176,"text":192490},{"id":192558,"depth":176,"text":192559},{"id":192669,"depth":176,"text":192670},{"id":192795,"depth":176,"text":192796},{"id":192920,"depth":176,"text":192921},{"id":192975,"depth":176,"text":192976},{"id":193074,"depth":176,"text":193075,"children":194150},[194151,194152,194153,194154],{"id":193078,"depth":203,"text":193079},{"id":193112,"depth":203,"text":193113},{"id":193151,"depth":203,"text":193152},{"id":193230,"depth":203,"text":193231},{"id":193253,"depth":176,"text":193254,"children":194156},[194157,194158,194159,194160,194161],{"id":193257,"depth":203,"text":193258},{"id":193340,"depth":203,"text":193341},{"id":193385,"depth":203,"text":193386},{"id":193444,"depth":203,"text":193445},{"id":193482,"depth":203,"text":193483},{"id":193516,"depth":176,"text":194163},"9.13 if name == \"main\"",{"id":193609,"depth":176,"text":193610},{"id":193654,"depth":176,"text":193655},{"id":193765,"depth":176,"text":193766},{"id":193823,"depth":176,"text":193824},{"id":194080,"depth":176,"text":194081},{"id":194108,"depth":176,"text":194109},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":191983,"description":23809},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":194176,"title":194177,"body":194178,"description":194341,"extension":23810,"meta":194342,"navigation":589,"path":194343,"seo":194344,"stem":194345,"__hash__":194346},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":194179,"toc":194336},[194180,194183,194186,194189,194200,194202,194276,194279,194282,194285,194288,194291,194294,194297,194300,194303,194306],[10,194181,194177],{"id":194182},"python教程",[14,194184,194185],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,194187,194188],{},"建议学习环境：",[134,194190,194191,194194,194197],{},[106,194192,194193],{},"Python 版本：Python 3.10 及以上。",[106,194195,194196],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[106,194198,194199],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[37,194201,138378],{"id":138378},[134,194203,194204,194210,194216,194222,194228,194234,194240,194246,194252,194258,194264,194270],{},[106,194205,194206],{},[8085,194207,194209],{"href":194208},".\u002Fch1-Python","Python环境与第一个程序",[106,194211,194212],{},[8085,194213,194215],{"href":194214},".\u002Fch2","基础语法、变量与字符串",[106,194217,194218],{},[8085,194219,194221],{"href":194220},".\u002Fch3","判断语句",[106,194223,194224],{},[8085,194225,194227],{"href":194226},".\u002Fch4","循环语句",[106,194229,194230],{},[8085,194231,194233],{"href":194232},".\u002Fch5","函数基础",[106,194235,194236],{},[8085,194237,194239],{"href":194238},".\u002Fch6","数据容器",[106,194241,194242],{},[8085,194243,194245],{"href":194244},".\u002Fch7","函数进阶",[106,194247,194248],{},[8085,194249,194251],{"href":194250},".\u002Fch8","文件操作",[106,194253,194254],{},[8085,194255,194257],{"href":194256},".\u002Fch9","异常、模块与包",[106,194259,194260],{},[8085,194261,194263],{"href":194262},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[106,194265,194266],{},[8085,194267,194269],{"href":194268},".\u002Fch11","面向对象基础",[106,194271,194272],{},[8085,194273,194275],{"href":194274},".\u002Fch12","综合案例与复习路线",[37,194277,194278],{"id":194278},"学习路线",[14,194280,194281],{},"第一阶段：能运行程序。",[14,194283,194284],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,194286,194287],{},"第二阶段：能组织数据。",[14,194289,194290],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,194292,194293],{},"第三阶段：能封装逻辑。",[14,194295,194296],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,194298,194299],{},"第四阶段：能做小项目。",[14,194301,194302],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[37,194304,194305],{"id":194305},"参考资料",[134,194307,194308,194315,194322,194329],{},[106,194309,194310,194311],{},"黑马程序员 Python 入门教程推荐：",[8085,194312,194313],{"href":194313,"rel":194314},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[15923],[106,194316,194317,194318],{},"Python 官方中文教程：",[8085,194319,194320],{"href":194320,"rel":194321},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[15923],[106,194323,194324,194325],{},"Python 标准库文档：",[8085,194326,194327],{"href":194327,"rel":194328},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[15923],[106,194330,194331,194332],{},"pyecharts 文档：",[8085,194333,194334],{"href":194334,"rel":194335},"https:\u002F\u002Fpyecharts.org\u002F",[15923],{"title":25,"searchDepth":176,"depth":176,"links":194337},[194338,194339,194340],{"id":138378,"depth":176,"text":138378},{"id":194278,"depth":176,"text":194278},{"id":194305,"depth":176,"text":194305},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":46904},"\u002Fwiki\u002F2024-10-10-python",{"title":194177,"description":194341},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331396512]